From 42a0800e415ddeaeb6272f879e99784555cd2be8 Mon Sep 17 00:00:00 2001 From: Li1304553726 <1304553726@qq.com> Date: Tue, 13 May 2025 15:58:47 +0800 Subject: [PATCH] add --- .vscode/extensions.json | 0 .vscode/settings.json | 0 .../src/models/base/base.tree.service.ts | 2 +- apps/server/src/models/car/car.controller.ts | 9 + apps/server/src/models/car/car.module.ts | 18 ++ apps/server/src/models/car/car.router.ts | 70 +++++ apps/server/src/models/car/car.service.ts | 85 ++++++ .../src/models/course/course.controller.ts | 9 + .../server/src/models/course/course.module.ts | 19 ++ .../server/src/models/course/course.router.ts | 70 +++++ .../src/models/course/course.service.ts | 89 +++++++ .../src/models/driver/driver.controller.ts | 9 + .../server/src/models/driver/driver.module.ts | 18 ++ .../server/src/models/driver/driver.router.ts | 70 +++++ .../src/models/driver/driver.service.ts | 86 ++++++ .../src/models/goods/goods.controller.ts | 51 ++-- apps/server/src/models/goods/goods.module.ts | 9 +- apps/server/src/models/goods/goods.router.ts | 30 +++ apps/server/src/models/goods/goods.service.ts | 19 +- .../src/models/score/score.controller.ts | 9 + apps/server/src/models/score/score.module.ts | 18 ++ apps/server/src/models/score/score.router.ts | 75 ++++++ apps/server/src/models/score/score.service.ts | 98 +++++++ .../src/models/student/student.controller.ts | 8 + .../src/models/student/student.module.ts | 18 ++ .../src/models/student/student.router.ts | 75 ++++++ .../src/models/student/student.service.ts | 101 +++++++ apps/server/src/trpc/trpc.module.ts | 11 +- apps/server/src/trpc/trpc.router.ts | 18 +- apps/web/nginx.conf | 0 apps/web/src/App.css | 0 apps/web/src/app/main/car/Club.tsx | 45 ++++ apps/web/src/app/main/car/Driver.tsx | 38 +++ apps/web/src/app/main/car/Game.tsx | 45 ++++ apps/web/src/app/main/car/Sortie.tsx | 33 +++ apps/web/src/app/main/car/page.tsx | 101 +++++++ apps/web/src/app/main/component/Header.tsx | 15 ++ .../web/src/app/main/component/Pagination.tsx | 52 ++++ apps/web/src/app/main/component/People.tsx | 0 apps/web/src/app/main/component/ScoreForm.tsx | 155 +++++++++++ .../web/src/app/main/component/ScoreTable.tsx | 102 +++++++ .../src/app/main/component/StudentSearch.tsx | 46 ++++ apps/web/src/app/main/home/page.tsx | 86 ++---- apps/web/src/app/main/layout/MainLayout.tsx | 87 ++++++ apps/web/src/app/main/layout/index.tsx | 0 .../src/app/main/student/StudentTestPage.tsx | 251 ++++++++++++++++++ apps/web/src/app/main/student/page.tsx | 189 +++++++++++++ apps/web/src/assets/student.png | Bin 0 -> 151116 bytes .../common/container/CollapsibleContent.tsx | 0 .../src/components/common/input/InputList.tsx | 0 apps/web/src/routes/index.tsx | 64 ++++- apps/web/src/routes/main-route.tsx | 0 apps/web/src/utils/index.ts | 0 config/nginx/entrypoint.sh | 2 +- docker-compose.example.yml | 9 +- packages/common/prisma/schema.prisma | 155 +++++++++-- packages/common/src/enum.ts | 8 + packages/config/src/index.ts | 0 web-dist/index.html | 25 ++ 59 files changed, 2466 insertions(+), 136 deletions(-) mode change 100644 => 100755 .vscode/extensions.json mode change 100644 => 100755 .vscode/settings.json create mode 100755 apps/server/src/models/car/car.controller.ts create mode 100755 apps/server/src/models/car/car.module.ts create mode 100755 apps/server/src/models/car/car.router.ts create mode 100755 apps/server/src/models/car/car.service.ts create mode 100755 apps/server/src/models/course/course.controller.ts create mode 100755 apps/server/src/models/course/course.module.ts create mode 100755 apps/server/src/models/course/course.router.ts create mode 100755 apps/server/src/models/course/course.service.ts create mode 100755 apps/server/src/models/driver/driver.controller.ts create mode 100755 apps/server/src/models/driver/driver.module.ts create mode 100755 apps/server/src/models/driver/driver.router.ts create mode 100755 apps/server/src/models/driver/driver.service.ts mode change 100644 => 100755 apps/server/src/models/goods/goods.controller.ts mode change 100644 => 100755 apps/server/src/models/goods/goods.module.ts create mode 100755 apps/server/src/models/goods/goods.router.ts mode change 100644 => 100755 apps/server/src/models/goods/goods.service.ts create mode 100755 apps/server/src/models/score/score.controller.ts create mode 100755 apps/server/src/models/score/score.module.ts create mode 100755 apps/server/src/models/score/score.router.ts create mode 100755 apps/server/src/models/score/score.service.ts create mode 100755 apps/server/src/models/student/student.controller.ts create mode 100755 apps/server/src/models/student/student.module.ts create mode 100755 apps/server/src/models/student/student.router.ts create mode 100755 apps/server/src/models/student/student.service.ts mode change 100644 => 100755 apps/web/nginx.conf mode change 100644 => 100755 apps/web/src/App.css create mode 100755 apps/web/src/app/main/car/Club.tsx create mode 100755 apps/web/src/app/main/car/Driver.tsx create mode 100755 apps/web/src/app/main/car/Game.tsx create mode 100755 apps/web/src/app/main/car/Sortie.tsx create mode 100755 apps/web/src/app/main/car/page.tsx create mode 100755 apps/web/src/app/main/component/Header.tsx create mode 100755 apps/web/src/app/main/component/Pagination.tsx mode change 100644 => 100755 apps/web/src/app/main/component/People.tsx create mode 100755 apps/web/src/app/main/component/ScoreForm.tsx create mode 100755 apps/web/src/app/main/component/ScoreTable.tsx create mode 100755 apps/web/src/app/main/component/StudentSearch.tsx create mode 100755 apps/web/src/app/main/layout/MainLayout.tsx mode change 100644 => 100755 apps/web/src/app/main/layout/index.tsx create mode 100755 apps/web/src/app/main/student/StudentTestPage.tsx create mode 100755 apps/web/src/app/main/student/page.tsx create mode 100755 apps/web/src/assets/student.png mode change 100644 => 100755 apps/web/src/components/common/container/CollapsibleContent.tsx mode change 100644 => 100755 apps/web/src/components/common/input/InputList.tsx mode change 100644 => 100755 apps/web/src/routes/main-route.tsx mode change 100644 => 100755 apps/web/src/utils/index.ts mode change 100644 => 100755 packages/config/src/index.ts create mode 100755 web-dist/index.html diff --git a/.vscode/extensions.json b/.vscode/extensions.json old mode 100644 new mode 100755 diff --git a/.vscode/settings.json b/.vscode/settings.json old mode 100644 new mode 100755 diff --git a/apps/server/src/models/base/base.tree.service.ts b/apps/server/src/models/base/base.tree.service.ts index f62aecc..1702452 100755 --- a/apps/server/src/models/base/base.tree.service.ts +++ b/apps/server/src/models/base/base.tree.service.ts @@ -95,7 +95,7 @@ export class BaseTreeService< ? [ ...( await transaction[this.ancestryType].findMany({ - where: { descendantId: anyArgs.data.parentId }, + where: { descendantId: anyArgs.data.parentId,}, select: { ancestorId: true, relDepth: true }, }) ).map(({ ancestorId, relDepth }) => ({ diff --git a/apps/server/src/models/car/car.controller.ts b/apps/server/src/models/car/car.controller.ts new file mode 100755 index 0000000..62ed5c6 --- /dev/null +++ b/apps/server/src/models/car/car.controller.ts @@ -0,0 +1,9 @@ +import { Controller } from '@nestjs/common'; + + +import { CarService } from './car.service'; + +@Controller('car') +export class CarController { + constructor(private readonly carService: CarService) {} +} diff --git a/apps/server/src/models/car/car.module.ts b/apps/server/src/models/car/car.module.ts new file mode 100755 index 0000000..d3fb14d --- /dev/null +++ b/apps/server/src/models/car/car.module.ts @@ -0,0 +1,18 @@ +import { Module } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { QueueModule } from '@server/queue/queue.module'; +import { MessageModule } from '../message/message.module'; +import { CarRouter } from './car.router'; +import { CarController } from './car.controller'; +import { CarService } from './car.service'; +import { RoleMapModule } from '../rbac/rbac.module'; +import { DepartmentModule } from '../department/department.module'; +import { DepartmentService } from '../department/department.service'; + +@Module({ + imports: [QueueModule, RoleMapModule, MessageModule, DepartmentModule], + providers: [CarService, CarRouter, TrpcService, DepartmentService], + exports: [CarRouter, CarService], + controllers: [CarController], +}) +export class CarModule {} diff --git a/apps/server/src/models/car/car.router.ts b/apps/server/src/models/car/car.router.ts new file mode 100755 index 0000000..7e5f955 --- /dev/null +++ b/apps/server/src/models/car/car.router.ts @@ -0,0 +1,70 @@ +import { Injectable } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { CarService } from './car.service'; +import { z, ZodType } from 'zod'; +import { Prisma } from '@nice/common'; + +const CarCreateArgsSchema: ZodType = z.any(); +const CarUpdateArgsSchema: ZodType = z.any(); +const CarFindManyArgsSchema: ZodType = z.any(); +const CarWhereUniqueInputSchema: ZodType = z.any(); + +@Injectable() +export class CarRouter { + constructor( + private readonly trpc: TrpcService, + private readonly carService: CarService, + ) {} + + router = this.trpc.router({ + create: this.trpc.protectProcedure + .input(CarCreateArgsSchema) + .mutation(async ({ input }) => { + return await this.carService.create(input); + }), + + update: this.trpc.protectProcedure + .input(CarUpdateArgsSchema) + .mutation(async ({ input }) => { + return await this.carService.update(input); + }), + softDeleteByIds: this.trpc.protectProcedure + .input( + z.object({ + ids: z.array(z.string()), + data: CarFindManyArgsSchema.nullish(), + }), + ) + .mutation(async ({ input }) => { + return await this.carService.softDeleteByIds(input.ids); + }), + delete: this.trpc.protectProcedure + .input(CarWhereUniqueInputSchema) + .mutation(async ({ input }) => { + return await this.carService.delete({ where: input }); + }), + + findMany: this.trpc.procedure + .input(CarFindManyArgsSchema) + .query(async ({ input }) => { + return await this.carService.findMany(input); + }), + + + findWithScores: this.trpc.procedure + .input(z.number()) + .query(async ({ input }) => { + return await this.carService.findWithScores(input); + }), + + search: this.trpc.procedure + .input(z.object({ + name: z.string().optional(), + courseId: z.number().optional(), + limit: z.number().optional() + })) + .query(async ({ input }) => { + return await this.carService.search(input); + }), + }); +} \ No newline at end of file diff --git a/apps/server/src/models/car/car.service.ts b/apps/server/src/models/car/car.service.ts new file mode 100755 index 0000000..b776e3b --- /dev/null +++ b/apps/server/src/models/car/car.service.ts @@ -0,0 +1,85 @@ +import { Injectable } from '@nestjs/common'; +import { + db, + Prisma, + UserProfile, + VisitType, + Post, + PostType, + RolePerms, + ResPerm, + ObjectType, + CourseMethodSchema, +} from '@nice/common'; +import { MessageService } from '../message/message.service'; +import { BaseService } from '../base/base.service'; +import { DepartmentService } from '../department/department.service'; +import EventBus, { CrudOperation } from '@server/utils/event-bus'; +import { BaseTreeService } from '../base/base.tree.service'; +@Injectable() +export class CarService extends BaseTreeService { + constructor( + private readonly messageService: MessageService, + private readonly departmentService: DepartmentService, + ) { + super(db, ObjectType.CAR, 'carAncestry', true); + } + async create( + args: Prisma.CarCreateArgs, + params?: { staff?: UserProfile; tx?: Prisma.TransactionClient }, + ) { + const result = await db.car.create(args); + EventBus.emit('dataChanged', { + type: ObjectType.CAR, + operation: CrudOperation.CREATED, + data: result, + }); + return result; + } + async update(args: Prisma.CarUpdateArgs, staff?: UserProfile) { + const result = await db.car.update(args); + EventBus.emit('dataChanged', { + type: ObjectType.CAR, + operation: CrudOperation.UPDATED, + data: result, + }); + return result; + } + /** + * 查找赛车并包含比赛信息 + */ + async findWithScores(clubId: number) { + return await db.car.findUnique({ + where: { id: clubId }, + select: { + name:true, + club:true + } + }); + } + /** + * 搜索 + */ + async search(params: { name?: string, clubId?: number, limit?: number }) { + const { name, clubId, limit = 30 } = params; + + return await db.car.findMany({ + where: { + ...(name && { name: { contains: name } }), + ...(clubId && { clubId }) + }, + select: { + clubId: true, + name:true + }, + take: limit + }); + } + private emitDataChangedEvent(data: any, operation: CrudOperation) { + EventBus.emit("dataChanged", { + type: this.objectType, + operation, + data, + }); + } +} diff --git a/apps/server/src/models/course/course.controller.ts b/apps/server/src/models/course/course.controller.ts new file mode 100755 index 0000000..d729f29 --- /dev/null +++ b/apps/server/src/models/course/course.controller.ts @@ -0,0 +1,9 @@ +import { Controller } from '@nestjs/common'; + + +import { CourseService } from './course.service'; + +@Controller('course') +export class CourseController { + constructor(private readonly courseService: CourseService) {} +} diff --git a/apps/server/src/models/course/course.module.ts b/apps/server/src/models/course/course.module.ts new file mode 100755 index 0000000..95b487d --- /dev/null +++ b/apps/server/src/models/course/course.module.ts @@ -0,0 +1,19 @@ +import { Module } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { QueueModule } from '@server/queue/queue.module'; +import { MessageModule } from '../message/message.module'; +import { CourseRouter } from './course.router'; +import { CourseController } from './course.controller'; +import { CourseService } from './course.service'; +import { RoleMapModule } from '../rbac/rbac.module'; +import { StudentModule } from '../student/student.module'; +import { DepartmentModule } from '../department/department.module'; +import { DepartmentService } from '../department/department.service'; + +@Module({ + imports: [QueueModule, RoleMapModule, MessageModule,StudentModule,DepartmentModule], + providers: [CourseService, CourseRouter, TrpcService,DepartmentService], + exports: [CourseRouter, CourseService], + controllers: [CourseController], +}) +export class CourseModule {} diff --git a/apps/server/src/models/course/course.router.ts b/apps/server/src/models/course/course.router.ts new file mode 100755 index 0000000..b5fca56 --- /dev/null +++ b/apps/server/src/models/course/course.router.ts @@ -0,0 +1,70 @@ +import { Injectable } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { CourseService } from './course.service'; +import { z, ZodType } from 'zod'; +import { Prisma } from '@nice/common'; + +const CourseCreateArgsSchema: ZodType = z.any(); +const CourseUpdateArgsSchema: ZodType = z.any(); +const CourseFindManyArgsSchema: ZodType = z.any(); +const CourseWhereUniqueInputSchema: ZodType = z.any(); + +@Injectable() +export class CourseRouter { + constructor( + private readonly trpc: TrpcService, + private readonly courseService: CourseService, + ) {} + + router = this.trpc.router({ + create: this.trpc.protectProcedure + .input(CourseCreateArgsSchema) + .mutation(async ({ input }) => { + return await this.courseService.create(input); + }), + + update: this.trpc.protectProcedure + .input(CourseUpdateArgsSchema) + .mutation(async ({ input }) => { + return await this.courseService.update(input); + }), + softDeleteByIds: this.trpc.protectProcedure + .input( + z.object({ + ids: z.array(z.string()), + data: CourseUpdateArgsSchema.nullish(), + }), + ) + .mutation(async ({ input }) => { + return await this.courseService.softDeleteByIds(input.ids); + }), + delete: this.trpc.protectProcedure + .input(CourseWhereUniqueInputSchema) + .mutation(async ({ input }) => { + return await this.courseService.delete({ where: input }); + }), + + findMany: this.trpc.procedure + .input(CourseFindManyArgsSchema) + .query(async ({ input }) => { + return await this.courseService.findMany(input); + }), + + + findWithScores: this.trpc.procedure + .input(z.number()) + .query(async ({ input }) => { + return await this.courseService.findWithScores(input); + }), + + search: this.trpc.procedure + .input(z.object({ + name: z.string().optional(), + courseId: z.number().optional(), + limit: z.number().optional() + })) + .query(async ({ input }) => { + return await this.courseService.search(input); + }), + }); +} \ No newline at end of file diff --git a/apps/server/src/models/course/course.service.ts b/apps/server/src/models/course/course.service.ts new file mode 100755 index 0000000..b2bd457 --- /dev/null +++ b/apps/server/src/models/course/course.service.ts @@ -0,0 +1,89 @@ +import { Injectable } from '@nestjs/common'; +import { + db, + Prisma, + UserProfile, + VisitType, + Post, + PostType, + RolePerms, + ResPerm, + ObjectType, + CourseMethodSchema, +} from '@nice/common'; +import { MessageService } from '../message/message.service'; +import { BaseService } from '../base/base.service'; +import { DepartmentService } from '../department/department.service'; +import EventBus, { CrudOperation } from '@server/utils/event-bus'; +import { BaseTreeService } from '../base/base.tree.service'; +import { z } from 'zod'; +@Injectable() +export class CourseService extends BaseTreeService { + constructor( + private readonly messageService: MessageService, + private readonly departmentService: DepartmentService, + ) { + super(db, ObjectType.COURSE, 'courseAncestry', true); + } + async create( + args: Prisma.CourseCreateArgs, + params?: { staff?: UserProfile; tx?: Prisma.TransactionClient }, + ) { + const result = await super.create(args); + EventBus.emit('dataChanged', { + type: ObjectType.COURSE, + operation: CrudOperation.CREATED, + data: result, + }); + return result; + } + async update(args: Prisma.CourseUpdateArgs, staff?: UserProfile) { + const result = await super.update(args); + EventBus.emit('dataChanged', { + type: ObjectType.COURSE, + operation: CrudOperation.UPDATED, + data: result, + }); + return result; + } + /** + * 查找学生并包含成绩信息 + */ + async findWithScores(courseId: number) { + return await db.course.findUnique({ + where: { id: courseId }, + include: { + scores: { + include: { + course: true, + student: true, + } + } + } + }); + } + /** + * 搜索学生 + */ + async search(params: { name?: string, courseId?: number, limit?: number }) { + const { name, courseId, limit = 30 } = params; + + return await db.course.findMany({ + where: { + ...(name && { name: { contains: name } }), + ...(courseId && { courseId }) + }, + include: { + scores: true + }, + take: limit + }); + } + private emitDataChangedEvent(data: any, operation: CrudOperation) { + EventBus.emit("dataChanged", { + type: this.objectType, + operation, + data, + }); + } +} diff --git a/apps/server/src/models/driver/driver.controller.ts b/apps/server/src/models/driver/driver.controller.ts new file mode 100755 index 0000000..a647e67 --- /dev/null +++ b/apps/server/src/models/driver/driver.controller.ts @@ -0,0 +1,9 @@ +import { Controller } from '@nestjs/common'; + + +import { DriverService } from './driver.service'; + +@Controller('driver') +export class DriverController { + constructor(private readonly driverService: DriverService) {} +} diff --git a/apps/server/src/models/driver/driver.module.ts b/apps/server/src/models/driver/driver.module.ts new file mode 100755 index 0000000..19070f4 --- /dev/null +++ b/apps/server/src/models/driver/driver.module.ts @@ -0,0 +1,18 @@ +import { Module } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { QueueModule } from '@server/queue/queue.module'; +import { MessageModule } from '../message/message.module'; +import { DriverRouter } from './driver.router'; +import { DriverController } from './driver.controller'; +import { DriverService } from './driver.service'; +import { RoleMapModule } from '../rbac/rbac.module'; +import { DepartmentModule } from '../department/department.module'; +import { DepartmentService } from '../department/department.service'; + +@Module({ + imports: [QueueModule, RoleMapModule, MessageModule,,DepartmentModule,DriverModule], + providers: [DriverService, DriverRouter, TrpcService,DepartmentService], + exports: [DriverRouter, DriverService], + controllers: [DriverController], +}) +export class DriverModule {} diff --git a/apps/server/src/models/driver/driver.router.ts b/apps/server/src/models/driver/driver.router.ts new file mode 100755 index 0000000..6e9c1b0 --- /dev/null +++ b/apps/server/src/models/driver/driver.router.ts @@ -0,0 +1,70 @@ +import { Injectable } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { DriverService } from './driver.service'; +import { z, ZodType } from 'zod'; +import { Prisma } from '@nice/common'; + +const CourseCreateArgsSchema: ZodType = z.any(); +const CourseUpdateArgsSchema: ZodType = z.any(); +const CourseFindManyArgsSchema: ZodType = z.any(); +const CourseWhereUniqueInputSchema: ZodType = z.any(); + +@Injectable() +export class DriverRouter { + constructor( + private readonly trpc: TrpcService, + private readonly driverService: DriverService, + ) {} + + router = this.trpc.router({ + create: this.trpc.protectProcedure + .input(CourseCreateArgsSchema) + .mutation(async ({ input }) => { + return await this.driverService.create(input); + }), + + // update: this.trpc.protectProcedure + // .input(CourseUpdateArgsSchema) + // .mutation(async ({ input }) => { + // return await this.driverService.update(input); + // }), + softDeleteByIds: this.trpc.protectProcedure + .input( + z.object({ + ids: z.array(z.string()), + data: CourseUpdateArgsSchema.nullish(), + }), + ) + .mutation(async ({ input }) => { + return await this.driverService.softDeleteByIds(input.ids); + }), + // delete: this.trpc.protectProcedure + // .input(CourseWhereUniqueInputSchema) + // .mutation(async ({ input }) => { + // return await this.driverService.delete({ where: input }); + // }), + + // findMany: this.trpc.procedure + // .input(CourseFindManyArgsSchema) + // .query(async ({ input }) => { + // return await this.driverService.findMany(input); + // }), + + + findWithScores: this.trpc.procedure + .input(z.number()) + .query(async ({ input }) => { + return await this.driverService.findWithScores(input); + }), + + search: this.trpc.procedure + .input(z.object({ + name: z.string().optional(), + courseId: z.number().optional(), + limit: z.number().optional() + })) + .query(async ({ input }) => { + return await this.driverService.search(input); + }), + }); +} \ No newline at end of file diff --git a/apps/server/src/models/driver/driver.service.ts b/apps/server/src/models/driver/driver.service.ts new file mode 100755 index 0000000..141334a --- /dev/null +++ b/apps/server/src/models/driver/driver.service.ts @@ -0,0 +1,86 @@ +import { Injectable } from '@nestjs/common'; +import { + db, + Prisma, + UserProfile, + VisitType, + Post, + PostType, + RolePerms, + ResPerm, + ObjectType, + CourseMethodSchema, +} from '@nice/common'; +import { MessageService } from '../message/message.service'; +import { BaseService } from '../base/base.service'; +import { DepartmentService } from '../department/department.service'; +import EventBus, { CrudOperation } from '@server/utils/event-bus'; +import { BaseTreeService } from '../base/base.tree.service'; +import { z } from 'zod'; +@Injectable() +export class DriverService extends BaseTreeService { + constructor( + private readonly messageService: MessageService, + private readonly departmentService: DepartmentService, + ) { + super(db, ObjectType.DRIVER, 'driverAncestry', true); + } + async create( + args: Prisma.DriverCreateArgs, + params?: { staff?: UserProfile; tx?: Prisma.TransactionClient }, + ) { + const result = await db.driver.create(args); + EventBus.emit('dataChanged', { + type: ObjectType.DRIVER, + operation: CrudOperation.CREATED, + data: result, + }); + return result; + } + async update(args: Prisma.DriverUpdateArgs, staff?: UserProfile) { + const result = await db.driver.update(args); + EventBus.emit('dataChanged', { + type: ObjectType.DRIVER, + operation: CrudOperation.UPDATED, + data: result, + }); + return result; + } + /** + * 查找赛车并包含比赛信息 + */ + async findWithScores(clubId: number) { + return await db.driver.findUnique({ + where: { id: clubId }, + select: { + name:true, + club:true + } + }); + } + /** + * 搜索学生 + */ + async search(params: { name?: string, clubId?: number, limit?: number }) { + const { name, clubId, limit = 30 } = params; + + return await db.driver.findMany({ + where: { + ...(name && { name: { contains: name } }), + ...(clubId && { clubId }) + }, + select: { + clubId: true, + name:true + }, + take: limit + }); + } + private emitDataChangedEvent(data: any, operation: CrudOperation) { + EventBus.emit("dataChanged", { + type: this.objectType, + operation, + data, + }); + } +} diff --git a/apps/server/src/models/goods/goods.controller.ts b/apps/server/src/models/goods/goods.controller.ts old mode 100644 new mode 100755 index e259edf..2cb9d91 --- a/apps/server/src/models/goods/goods.controller.ts +++ b/apps/server/src/models/goods/goods.controller.ts @@ -1,19 +1,40 @@ import { Controller, Get, Query, Param } from '@nestjs/common'; - +import { GoodsService } from './goods.service'; +import { useEffect } from 'react'; +// 定义商品相关的控制器,路由前缀为 /goods @Controller('goods') export class GoodsController { - constructor() { - console.log('goods controller') - } + // 构造函数,在控制器实例化时执行 只读实例 + constructor(private readonly goodsService: GoodsService) { + console.log('goods controller'); // 打印日志,用于调试 调用商品服务的方法 + } + // 示例1:基本查询参数 + // GET /goods/hello?name=xxx + @Get('hello') + getHello(@Query('name') name?: string) { + return this.goodsService.getHello(name); + // 返回传入的name参数,如果未传入则返回'Guest' + } + // 示例2:路径参数 + // GET /goods/detail/123 + @Get('detail/:id') + getDetail(@Param('id') id: string) { + return this.goodsService.getDetail(id) // 返回路径参数中的id + } - // 示例1:基本查询参数 - @Get('hello') - getHello(@Query('name') name?: string) { - return { - message: 'Hello World!', - name: name || 'Guest' - }; - } - - -} \ No newline at end of file + // 示例3:多个查询参数 + // GET /goods/search?keyword=xxx&page=2&limit=20 + @Get('search') + searchProducts( + @Query('keyword') keyword: string, // 搜索关键词 + @Query('page') page: number = 1, // 页码,默认值为1 + @Query('limit') limit: number = 10, // 每页数量,默认值为10 + ) { + return { + keyword, // 返回搜索关键词 + page, // 返回当前页码 + limit, // 返回每页数量 + results: [], // 返回搜索结果(示例中为空数组) + }; + } +} diff --git a/apps/server/src/models/goods/goods.module.ts b/apps/server/src/models/goods/goods.module.ts old mode 100644 new mode 100755 index 7605654..c6f5cd6 --- a/apps/server/src/models/goods/goods.module.ts +++ b/apps/server/src/models/goods/goods.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; import { GoodsService } from './goods.service'; import { GoodsController } from './goods.controller'; - +import { GoodsRouter } from './goods.router'; +import { TrpcService } from '@server/trpc/trpc.service'; @Module({ - providers: [GoodsService], - controllers:[GoodsController] + providers: [GoodsService,GoodsRouter,TrpcService], // 1. 注册服务提供者,使 GoodsService 可在本模块中使用 + controllers:[GoodsController], // 2. 注册控制器,使 GoodsController 的路由可用 + exports:[GoodsRouter] }) - export class GoodsModule {} diff --git a/apps/server/src/models/goods/goods.router.ts b/apps/server/src/models/goods/goods.router.ts new file mode 100755 index 0000000..4d88ddf --- /dev/null +++ b/apps/server/src/models/goods/goods.router.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { GoodsService } from './goods.service'; +import { Prisma } from '@nice/common'; +import { z, ZodType } from 'zod'; +const GoodsUncheckedCreateInputSchema: ZodType = + z.any(); +const GoodsWhereInputSchema: ZodType = z.any(); +const GoodsSelectSchema: ZodType = z.any(); +@Injectable() +export class GoodsRouter { + constructor( + private readonly trpc: TrpcService, + private readonly goodsService: GoodsService, + ) {} + // trpc路由 + router = this.trpc.router({ + // 希望前端传什么参数 + //最简单的trpc写法 + hello: this.trpc.procedure + .input( + z.object({ + name: z.string(), + }), + ) + .query(({ input }) => { + return input.name; + }), + }); +} diff --git a/apps/server/src/models/goods/goods.service.ts b/apps/server/src/models/goods/goods.service.ts old mode 100644 new mode 100755 index 09c472f..66e3eb9 --- a/apps/server/src/models/goods/goods.service.ts +++ b/apps/server/src/models/goods/goods.service.ts @@ -1,4 +1,19 @@ import { Injectable } from '@nestjs/common'; - +// 注解相当于mapper @Injectable() -export class GoodsService {} +export class GoodsService { + getHello(name: string) { + return { + message: 'Hello World!', + name: name || 'Guest', + }; + } + + // GET /goods/detail/123 + getDetail(id: string) { + return { + id: id, // 返回路径参数中的id + detail: `Detail for product ${id}`, // 返回包含id的详细信息 + }; + } +} \ No newline at end of file diff --git a/apps/server/src/models/score/score.controller.ts b/apps/server/src/models/score/score.controller.ts new file mode 100755 index 0000000..1e306f0 --- /dev/null +++ b/apps/server/src/models/score/score.controller.ts @@ -0,0 +1,9 @@ +import { Controller, Get, Query, UseGuards } from '@nestjs/common'; + + +import { ScoreService } from './score.service'; + +@Controller('score') +export class ScoreController { + constructor(private readonly scoreService: ScoreService) {} +} diff --git a/apps/server/src/models/score/score.module.ts b/apps/server/src/models/score/score.module.ts new file mode 100755 index 0000000..7efa492 --- /dev/null +++ b/apps/server/src/models/score/score.module.ts @@ -0,0 +1,18 @@ +import { Module } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { DepartmentService } from '@server/models/department/department.service'; + +import { QueueModule } from '@server/queue/queue.module'; +import { MessageModule } from '../message/message.module'; +import { ScoreRouter } from './score.router'; +import { ScoreController } from './score.controller'; +import { ScoreService } from './score.service'; +import { RoleMapModule } from '../rbac/rbac.module'; + +@Module({ + imports: [QueueModule, RoleMapModule, MessageModule], + providers: [ScoreService, ScoreRouter, TrpcService, DepartmentService], + exports: [ScoreRouter, ScoreService], + controllers: [ScoreController], +}) +export class ScoreModule {} diff --git a/apps/server/src/models/score/score.router.ts b/apps/server/src/models/score/score.router.ts new file mode 100755 index 0000000..9969ff7 --- /dev/null +++ b/apps/server/src/models/score/score.router.ts @@ -0,0 +1,75 @@ +import { Injectable } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { ScoreService } from './score.service'; +import { z, ZodType } from 'zod'; +import { Prisma } from '@nice/common'; + +const ScoreCreateArgsSchema: ZodType = z.any(); +const ScoreUpdateArgsSchema: ZodType = z.any(); +const ScoreFindManyArgsSchema: ZodType = z.any(); +const ScoreWhereUniqueInputSchema: ZodType = z.any(); + +@Injectable() +export class ScoreRouter { + constructor( + private readonly trpc: TrpcService, + private readonly scoreService: ScoreService, + ) {} + + router = this.trpc.router({ + create: this.trpc.protectProcedure + .input(ScoreCreateArgsSchema) + .mutation(async ({ input }) => { + return await this.scoreService.create(input); + }), + + update: this.trpc.protectProcedure + .input(ScoreUpdateArgsSchema) + .mutation(async ({ input }) => { + return await this.scoreService.update(input); + }), + softDeleteByIds: this.trpc.protectProcedure + .input( + z.object({ + ids: z.array(z.string()), + data: ScoreUpdateArgsSchema.nullish(), + }), + ) + .mutation(async ({ input }) => { + return await this.scoreService.softDeleteByIds(input.ids); + }), + delete: this.trpc.protectProcedure + .input(ScoreWhereUniqueInputSchema) + .mutation(async ({ input }) => { + return await this.scoreService.delete({ where: input }); + }), + + findMany: this.trpc.procedure + .input(ScoreFindManyArgsSchema) + .query(async ({ input }) => { + return await this.scoreService.findMany(input); + }), + + findByClass: this.trpc.procedure + .input(z.number()) + .query(async ({ input }) => { + return await this.scoreService.findByClass(input); + }), + + findWithScores: this.trpc.procedure + .input(z.number()) + .query(async ({ input }) => { + return await this.scoreService.findWithScores(input); + }), + + search: this.trpc.procedure + .input(z.object({ + name: z.string().optional(), + classId: z.number().optional(), + limit: z.number().optional() + })) + .query(async ({ input }) => { + return await this.scoreService.search(input); + }), + }); +} \ No newline at end of file diff --git a/apps/server/src/models/score/score.service.ts b/apps/server/src/models/score/score.service.ts new file mode 100755 index 0000000..5f0be4f --- /dev/null +++ b/apps/server/src/models/score/score.service.ts @@ -0,0 +1,98 @@ +import { Injectable } from '@nestjs/common'; +import { + db, + Prisma, + UserProfile, + VisitType, + Post, + PostType, + RolePerms, + ResPerm, + ObjectType, + CourseMethodSchema, +} from '@nice/common'; +import { MessageService } from '../message/message.service'; +import { BaseService } from '../base/base.service'; +import { DepartmentService } from '../department/department.service'; +import EventBus, { CrudOperation } from '@server/utils/event-bus'; +import { BaseTreeService } from '../base/base.tree.service'; +import { z } from 'zod'; +@Injectable() +export class ScoreService extends BaseTreeService { + constructor( + private readonly messageService: MessageService, + private readonly departmentService: DepartmentService, + ) { + super(db, ObjectType.SCORE, 'scoreAncestry', true); + } + async create( + args: Prisma.ScoreCreateArgs, + params?: { staff?: UserProfile; tx?: Prisma.TransactionClient }, + ) { + const result = await super.create(args); + EventBus.emit('dataChanged', { + type: ObjectType.SCORE, + operation: CrudOperation.CREATED, + data: result, + }); + return result; + } + async update(args: Prisma.ScoreUpdateArgs, staff?: UserProfile) { + const result = await super.update(args); + EventBus.emit('dataChanged', { + type: ObjectType.SCORE, + operation: CrudOperation.UPDATED, + data: result, + }); + return result; + } + async findByClass(scoreId: number) { + return await db.score.findMany({ + where: { id: scoreId }, + include: { + student: true, + course: true, + } + }); + } + /** + * 查找学生并包含成绩信息 + */ + async findWithScores(studentId: number) { + return await db.student.findUnique({ + where: { id: studentId }, + include: { + class: true, + scores: { + include: { + course: true + } + } + } + }); + } + /** + * 搜索学生 + */ + async search(params: { name?: string, classId?: number, limit?: number }) { + const { name, classId, limit = 30 } = params; + + return await db.student.findMany({ + where: { + ...(name && { name: { contains: name } }), + ...(classId && { classId }) + }, + include: { + class: true + }, + take: limit + }); + } + private emitDataChangedEvent(data: any, operation: CrudOperation) { + EventBus.emit("dataChanged", { + type: this.objectType, + operation, + data, + }); + } +} diff --git a/apps/server/src/models/student/student.controller.ts b/apps/server/src/models/student/student.controller.ts new file mode 100755 index 0000000..cdefff3 --- /dev/null +++ b/apps/server/src/models/student/student.controller.ts @@ -0,0 +1,8 @@ +import { Controller, Get, Query, UseGuards } from '@nestjs/common'; + +import { StudentService } from './student.service'; + +@Controller('student') +export class StudentController { + constructor(private readonly studentService: StudentService) {} +} diff --git a/apps/server/src/models/student/student.module.ts b/apps/server/src/models/student/student.module.ts new file mode 100755 index 0000000..9804371 --- /dev/null +++ b/apps/server/src/models/student/student.module.ts @@ -0,0 +1,18 @@ +import { Module } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { DepartmentService } from '@server/models/department/department.service'; + +import { QueueModule } from '@server/queue/queue.module'; +import { MessageModule } from '../message/message.module'; +import { StudentRouter } from './student.router'; +import { StudentController } from './student.controller'; +import { StudentService } from './student.service'; +import { RoleMapModule } from '../rbac/rbac.module'; + +@Module({ + imports: [QueueModule, RoleMapModule, MessageModule], + providers: [StudentService, StudentRouter, TrpcService, DepartmentService], + exports: [StudentRouter, StudentService], + controllers: [StudentController], +}) +export class StudentModule {} diff --git a/apps/server/src/models/student/student.router.ts b/apps/server/src/models/student/student.router.ts new file mode 100755 index 0000000..590b7f2 --- /dev/null +++ b/apps/server/src/models/student/student.router.ts @@ -0,0 +1,75 @@ +import { Injectable } from '@nestjs/common'; +import { TrpcService } from '@server/trpc/trpc.service'; +import { StudentService } from './student.service'; +import { z, ZodType } from 'zod'; +import { Prisma } from '@nice/common'; + +const StudentCreateArgsSchema: ZodType = z.any(); +const StudentUpdateArgsSchema: ZodType = z.any(); +const StudentFindManyArgsSchema: ZodType = z.any(); +const StudentWhereUniqueInputSchema: ZodType = z.any(); + +@Injectable() +export class StudentRouter { + constructor( + private readonly trpc: TrpcService, + private readonly studentService: StudentService, + ) {} + + router = this.trpc.router({ + create: this.trpc.procedure + .input(StudentCreateArgsSchema) + .mutation(async ({ input }) => { + return await this.studentService.create(input); + }), + + update: this.trpc.procedure + .input(StudentUpdateArgsSchema) + .mutation(async ({ input }) => { + return await this.studentService.update(input); + }), + softDeleteByIds: this.trpc.procedure + .input( + z.object({ + ids: z.array(z.string()), + data: StudentUpdateArgsSchema.nullish(), + }), + ) + .mutation(async ({ input }) => { + return await this.studentService.softDeleteByIds(input.ids); + }), + delete: this.trpc.procedure + .input(StudentWhereUniqueInputSchema) + .mutation(async ({ input }) => { + return await this.studentService.delete({ where: input }); + }), + + findMany: this.trpc.procedure + .input(StudentFindManyArgsSchema) + .query(async ({ input }) => { + return await this.studentService.findMany(input); + }), + + findByClass: this.trpc.procedure + .input(z.number()) + .query(async ({ input }) => { + return await this.studentService.findByClass(input); + }), + + findWithScores: this.trpc.procedure + .input(z.number()) + .query(async ({ input }) => { + return await this.studentService.findWithScores(input); + }), + + search: this.trpc.procedure + .input(z.object({ + name: z.string().optional(), + classId: z.number().optional(), + limit: z.number().optional() + })) + .query(async ({ input }) => { + return await this.studentService.search(input); + }), + }); +} \ No newline at end of file diff --git a/apps/server/src/models/student/student.service.ts b/apps/server/src/models/student/student.service.ts new file mode 100755 index 0000000..045bdaf --- /dev/null +++ b/apps/server/src/models/student/student.service.ts @@ -0,0 +1,101 @@ +import { Injectable } from '@nestjs/common'; +import { + db, + Prisma, + UserProfile, + VisitType, + Post, + PostType, + RolePerms, + ResPerm, + ObjectType, + CourseMethodSchema, +} from '@nice/common'; +import { MessageService } from '../message/message.service'; +import { BaseService } from '../base/base.service'; +import { DepartmentService } from '../department/department.service'; +import EventBus, { CrudOperation } from '@server/utils/event-bus'; +import { BaseTreeService } from '../base/base.tree.service'; +import { z } from 'zod'; +@Injectable() +export class StudentService extends BaseTreeService { + constructor( + private readonly messageService: MessageService, + private readonly departmentService: DepartmentService, + ) { + super(db, ObjectType.STUDENT, 'studentAncestry', true); + } + async create( + args: Prisma.StudentCreateArgs, + params?: { staff?: UserProfile; tx?: Prisma.TransactionClient }, + ) { + const result = await db.student.create(args); + EventBus.emit('dataChanged', { + type: ObjectType.STUDENT, + operation: CrudOperation.CREATED, + data: result, + }); + return result; + } + async update(args: Prisma.StudentUpdateArgs, staff?: UserProfile) { + const result = await db.student.update(args); + EventBus.emit('dataChanged', { + type: ObjectType.STUDENT, + operation: CrudOperation.UPDATED, + data: result, + }); + return result; + } + async findByClass(classId: number) { + return await db.student.findMany({ + where: { classId }, + include: { + class: true, + scores: { + include: { + course: true + } + } + } + }); + } + /** + * 查找学生并包含成绩信息 + */ + async findWithScores(studentId: number) { + return await db.student.findUnique({ + where: { id: studentId }, + include: { + class: true, + scores: { + include: { + course: true + } + } + } + }); + } + /** + * 搜索学生 + */ + async search(params: { name?: string, classId?: number, limit?: number }) { + const { name, classId, limit = 30 } = params; + + return await db.student.findMany({ + where: { + ...(name && { name: { contains: name } }), + }, + include: { + class: true + }, + take: limit + }); + } + private emitDataChangedEvent(data: any, operation: CrudOperation) { + EventBus.emit("dataChanged", { + type: this.objectType, + operation, + data, + }); + } +} diff --git a/apps/server/src/trpc/trpc.module.ts b/apps/server/src/trpc/trpc.module.ts index e63f1b1..f63523d 100755 --- a/apps/server/src/trpc/trpc.module.ts +++ b/apps/server/src/trpc/trpc.module.ts @@ -9,14 +9,17 @@ import { TaxonomyModule } from '@server/models/taxonomy/taxonomy.module'; import { AuthModule } from '@server/auth/auth.module'; import { AppConfigModule } from '@server/models/app-config/app-config.module'; import { MessageModule } from '@server/models/message/message.module'; -import { PostModule } from '@server/models/post/post.module'; import { VisitModule } from '@server/models/visit/visit.module'; import { WebSocketModule } from '@server/socket/websocket.module'; import { RoleMapModule } from '@server/models/rbac/rbac.module'; import { TransformModule } from '@server/models/transform/transform.module'; - +import { PostModule } from '@server/models/post/post.module'; import { ResourceModule } from '@server/models/resource/resource.module'; import { GoodsModule } from '@server/models/goods/goods.module'; +import { CarModule } from '@server/models/car/car.module'; +import { StudentModule } from '@server/models/student/student.module'; +import { CourseModule } from '@server/models/course/course.module'; +import { ScoreModule } from '@server/models/score/score.module'; @Module({ imports: [ @@ -35,6 +38,10 @@ import { GoodsModule } from '@server/models/goods/goods.module'; WebSocketModule, ResourceModule, GoodsModule, + CarModule, + StudentModule, + CourseModule, + ScoreModule, ], controllers: [], providers: [TrpcService, TrpcRouter, Logger], diff --git a/apps/server/src/trpc/trpc.router.ts b/apps/server/src/trpc/trpc.router.ts index 7550867..9cef942 100755 --- a/apps/server/src/trpc/trpc.router.ts +++ b/apps/server/src/trpc/trpc.router.ts @@ -8,13 +8,17 @@ import * as trpcExpress from '@trpc/server/adapters/express'; import ws, { WebSocketServer } from 'ws'; import { AppConfigRouter } from '@server/models/app-config/app-config.router'; import { MessageRouter } from '@server/models/message/message.router'; -import { PostRouter } from '@server/models/post/post.router'; import { VisitRouter } from '@server/models/visit/visit.router'; import { RoleMapRouter } from '@server/models/rbac/rolemap.router'; import { TransformRouter } from '@server/models/transform/transform.router'; import { RoleRouter } from '@server/models/rbac/role.router'; import { ResourceRouter } from '../models/resource/resource.router'; - +import { GoodsRouter } from '../models/goods/goods.router'; +import { PostRouter } from '@server/models/post/post.router'; +import { CarRouter } from '@server/models/car/car.router'; +import { StudentRouter } from '@server/models/student/student.router'; +import { CourseRouter } from '@server/models/course/course.router'; +import { ScoreRouter } from '@server/models/score/score.router'; @Injectable() export class TrpcRouter { logger = new Logger(TrpcRouter.name); @@ -32,6 +36,11 @@ export class TrpcRouter { private readonly message: MessageRouter, private readonly visitor: VisitRouter, private readonly resource: ResourceRouter, + private readonly goods: GoodsRouter, + private readonly car: CarRouter, + private readonly student: StudentRouter, + private readonly course: CourseRouter, + private readonly score: ScoreRouter, ) {} getRouter() { return; @@ -49,6 +58,11 @@ export class TrpcRouter { app_config: this.app_config.router, visitor: this.visitor.router, resource: this.resource.router, + goods: this.goods.router, + car:this.car.router, + student:this.student.router, + course:this.course.router, + score:this.score.router }); wss: WebSocketServer = undefined; diff --git a/apps/web/nginx.conf b/apps/web/nginx.conf old mode 100644 new mode 100755 diff --git a/apps/web/src/App.css b/apps/web/src/App.css old mode 100644 new mode 100755 diff --git a/apps/web/src/app/main/car/Club.tsx b/apps/web/src/app/main/car/Club.tsx new file mode 100755 index 0000000..a6e584f --- /dev/null +++ b/apps/web/src/app/main/car/Club.tsx @@ -0,0 +1,45 @@ +'use client'; +import React, { useState, useEffect } from 'react'; +import Header from '../component/Header'; +import StudentSearch from '../component/StudentSearch'; +import ScoreForm from '../component/ScoreForm'; +import ScoreTable from '../component/ScoreTable'; +import { api } from '@nice/client'; +import bgImage from '../../../assets/student.png'; +const ClubPage = () => { + + const [studentName, setStudentName] = useState(''); + const [data, setdata] = useState([]) + const [editStudentId, setEditStudentId] = useState(null); + const [editStudentName, setEditStudentName] = useState(''); + const [isModalOpen, setIsModalOpen] = useState(false); + const [searchTerm, setSearchTerm] = useState(''); + + // const { + // data: car = [], + // isLoading, + // error, + // refetch + // } = api.car.findMany.useQuery({ + // select: { + // id: true, + // name: true, + // } + // }); + // console.log(car); + + return ( + <> +
+
+
+

车辆管理

+ +
+
+
+ + ); +}; + +export default ClubPage; diff --git a/apps/web/src/app/main/car/Driver.tsx b/apps/web/src/app/main/car/Driver.tsx new file mode 100755 index 0000000..262ea17 --- /dev/null +++ b/apps/web/src/app/main/car/Driver.tsx @@ -0,0 +1,38 @@ +'use client'; +import React, { useState, useEffect } from 'react'; +import Header from '../component/Header'; +import StudentSearch from '../component/StudentSearch'; +import ScoreForm from '../component/ScoreForm'; +import ScoreTable from '../component/ScoreTable'; +import { api } from '@nice/client'; +import bgImage from '../../../assets/student.png'; +const DriverPage = () => { + + // const { + // data: car = [], + // isLoading, + // error, + // refetch + // } = api.car.findMany.useQuery({ + // select: { + // id: true, + // name: true, + // } + // }); + // console.log(car); + + return ( + <> +
+
+
+

车辆管理

+ +
+
+
+ + ); +}; + +export default DriverPage; diff --git a/apps/web/src/app/main/car/Game.tsx b/apps/web/src/app/main/car/Game.tsx new file mode 100755 index 0000000..7619b0f --- /dev/null +++ b/apps/web/src/app/main/car/Game.tsx @@ -0,0 +1,45 @@ +'use client'; +import React, { useState, useEffect } from 'react'; +import Header from '../component/Header'; +import StudentSearch from '../component/StudentSearch'; +import ScoreForm from '../component/ScoreForm'; +import ScoreTable from '../component/ScoreTable'; +import { api } from '@nice/client'; +import bgImage from '../../../assets/student.png'; +const GamePage = () => { + + const [studentName, setStudentName] = useState(''); + const [data, setdata] = useState([]) + const [editStudentId, setEditStudentId] = useState(null); + const [editStudentName, setEditStudentName] = useState(''); + const [isModalOpen, setIsModalOpen] = useState(false); + const [searchTerm, setSearchTerm] = useState(''); + + // const { + // data: car = [], + // isLoading, + // error, + // refetch + // } = api.car.findMany.useQuery({ + // select: { + // id: true, + // name: true, + // } + // }); + // console.log(car); + + return ( + <> +
+
+
+

车辆管理

+ +
+
+
+ + ); +}; + +export default GamePage; diff --git a/apps/web/src/app/main/car/Sortie.tsx b/apps/web/src/app/main/car/Sortie.tsx new file mode 100755 index 0000000..c3f785a --- /dev/null +++ b/apps/web/src/app/main/car/Sortie.tsx @@ -0,0 +1,33 @@ +'use client'; +import React, { useState, useEffect } from 'react'; +import Header from '../component/Header'; +import StudentSearch from '../component/StudentSearch'; +import ScoreForm from '../component/ScoreForm'; +import ScoreTable from '../component/ScoreTable'; +import { api } from '@nice/client'; +import bgImage from '../../../assets/student.png'; +const SortiePage = () => { + + const [studentName, setStudentName] = useState(''); + const [data, setdata] = useState([]) + const [editStudentId, setEditStudentId] = useState(null); + const [editStudentName, setEditStudentName] = useState(''); + const [isModalOpen, setIsModalOpen] = useState(false); + const [searchTerm, setSearchTerm] = useState(''); + + + return ( + <> +
+
+
+

车辆管理

+ +
+
+
+ + ); +}; + +export default SortiePage; diff --git a/apps/web/src/app/main/car/page.tsx b/apps/web/src/app/main/car/page.tsx new file mode 100755 index 0000000..1f3a19a --- /dev/null +++ b/apps/web/src/app/main/car/page.tsx @@ -0,0 +1,101 @@ +'use client'; +import React, { useState, useEffect } from 'react'; +import Header from '../component/Header'; +import StudentSearch from '../component/StudentSearch'; +import ScoreForm from '../component/ScoreForm'; +import ScoreTable from '../component/ScoreTable'; +import { api } from '@nice/client'; +import bgImage from '../../../assets/student.png'; +import { number } from 'zod'; +import Pagination from '../component/Pagination'; +export interface CarData { + id:number + clubId:number + name:string + club:string + score:number +} +const CarPage = () => { + const [data, setdata] = useState([]) + const [FilterCar, setFilterCar] = useState([]); + const [driver, setDriver] = useState([]); + const [searchParams, setSearchParams] = useState({ term: '', type: 'name' }); + const [currentPage, setCurrentPage] = useState(1); + const itemsPerPage = 5; + const mock: CarData[] = [ + { id: 1, clubId: 1, name: "user1", club:"chinese",score: 20}, + { id: 2, clubId: 2, name: "user2", club:"chinese",score: 20}, + { id: 3, clubId: 3, name: "user3", club:"chinese",score: 20}, + { id: 4, clubId: 4, name: "user4", club:"chinese",score: 20}, + { id: 5, clubId: 5, name: "user5", club:"chinese",score: 20}, + { id: 6, clubId: 6, name: "user6", club:"chinese",score: 20}, + ] + // const { + // data: car = [], + // isLoading, + // error, + // refetch + // } = api.car.findMany.useQuery({ + // select: { + // id: true, + // name: true, + // } + // }); + // console.log(car);//查询car数据 + //搜索 + const handleSearch = (term, type) => { + if (!term.trim()) { + setFilterCar(mock); + return; + } + let filtered = []; + const lowerTerm = term.toLowerCase(); + switch (type) { + case 'name': + filtered = mock.filter(mock => { + const car = driver.find(s => s.id === mock.clubId); + return car && car.name.toLowerCase().includes(lowerTerm); + }); + break; + } + }; + + return ( + <> +
+
+
+

车辆管理

+ {/* // 遍历 data 并渲染每个元素 */} + + + + + + + + + + + + {mock?.map((i) => ( + + + + + + + + ))} + +
idclubIdnameclubscore
{i.id}{i.clubId}{i.name}{i.club}{i.score}
+ +
+
+ +
+ + ); +}; + +export default CarPage; diff --git a/apps/web/src/app/main/component/Header.tsx b/apps/web/src/app/main/component/Header.tsx new file mode 100755 index 0000000..44e708f --- /dev/null +++ b/apps/web/src/app/main/component/Header.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import bgImage from '../../../assets/student.png'; +const Header = () => { + return ( +
+
+
+

学生成绩管理系统

+
+
+
+ ); +}; + +export default Header; \ No newline at end of file diff --git a/apps/web/src/app/main/component/Pagination.tsx b/apps/web/src/app/main/component/Pagination.tsx new file mode 100755 index 0000000..fb851c5 --- /dev/null +++ b/apps/web/src/app/main/component/Pagination.tsx @@ -0,0 +1,52 @@ +import React from 'react'; + +const Pagination = ({ currentPage, totalPages, onPageChange }) => { + const pages = []; + for (let i = 1; i <= totalPages; i++) { + pages.push(i); + } + return ( +
+ +
+ ); +}; + +export default Pagination; \ No newline at end of file diff --git a/apps/web/src/app/main/component/People.tsx b/apps/web/src/app/main/component/People.tsx old mode 100644 new mode 100755 diff --git a/apps/web/src/app/main/component/ScoreForm.tsx b/apps/web/src/app/main/component/ScoreForm.tsx new file mode 100755 index 0000000..9fd4080 --- /dev/null +++ b/apps/web/src/app/main/component/ScoreForm.tsx @@ -0,0 +1,155 @@ +import React, { useState, useEffect } from 'react'; + +const ScoreForm = ({ onSubmit, editingScore = null, students, courses }) => { + const [formData, setFormData] = useState({ + studentId: '', + courseId: '', + score: '', + semester: '' + }); + const [students1, setStudents1] = useState([]); + const [courses1, setCourses1] = useState([]); + const [loading, setLoading] = useState(false); + + useEffect(() => { + // 如果是编辑模式,使用editingScore填充表单 + if (editingScore) { + setFormData({ + studentId: editingScore.studentId, + courseId: editingScore.courseId, + score: editingScore.score, + semester: editingScore.semester + }); + } + fetchStudentsAndCourses(); + }, [editingScore]); + + const fetchStudentsAndCourses = async () => { + setLoading(true); + try { + // 模拟API调用 + setTimeout(() => { + setStudents1(students); + setCourses1(courses); + setLoading(false); + }, 500); + } catch (error) { + console.error('获取数据失败', error); + setLoading(false); + } + }; + + const handleChange = (e) => { + const { name, value } = e.target; + setFormData({ + ...formData, + [name]: name === 'score' ? parseFloat(value) : value + }); + }; + + const handleSubmit = (e) => { + e.preventDefault(); + onSubmit(formData); + // 重置表单 + if (!editingScore) { + setFormData({ + studentId: '', + courseId: '', + score: '', + semester: '' + }); + } + }; + + return ( +
+

{editingScore ? '编辑成绩' : '添加成绩'}

+ {loading ? ( +
加载中...
+ ) : ( +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+
+ )} +
+ ); +}; + +export default ScoreForm; \ No newline at end of file diff --git a/apps/web/src/app/main/component/ScoreTable.tsx b/apps/web/src/app/main/component/ScoreTable.tsx new file mode 100755 index 0000000..da384c2 --- /dev/null +++ b/apps/web/src/app/main/component/ScoreTable.tsx @@ -0,0 +1,102 @@ +import React from 'react'; +import Pagination from './Pagination'; +const ScoreTable = ({ scores, students, courses, currentPage, totalPages, onPageChange, onEdit, onDelete }) => { + // 获取学生和课程名称的辅助函数 + const getStudentName = (studentId) => { + if (!students || !Array.isArray(students)) return '未知学生'; + if (studentId === undefined || studentId === null) return '未知学生'; + + const student = students.find(s => s.id === studentId); + return student && student.name ? student.name : '未知学生'; + }; + const getCourseName = (courseId) => { + if (!courses || !Array.isArray(courses)) return '未知课程'; + if (courseId === undefined || courseId === null) return '未知课程'; + + const course = courses.find(c => c.id === courseId); + return course && course.name ? course.name : '未知课程'; + }; + + + + return ( +
+

成绩列表

+
+ + + + + + + + + + + {scores.length > 0 ? ( + scores.map((score) => ( + + + + + + + )) + ) : ( + + + + )} + +
+ 学生姓名 + + 课程 + + 分数 + + 操作 +
+ {getStudentName(score.studentId)} + + {getCourseName(score.courseId)} + + = 90 ? 'bg-green-100 text-green-800' : + score.score >= 60 ? 'bg-blue-100 text-blue-800' : + 'bg-red-100 text-red-800' + }`}> + {score.score} + + + + +
+ 没有找到成绩记录 +
+
+ + {scores.length > 0 && ( +
+ +
+ )} +
+ ); +}; + +export default ScoreTable; \ No newline at end of file diff --git a/apps/web/src/app/main/component/StudentSearch.tsx b/apps/web/src/app/main/component/StudentSearch.tsx new file mode 100755 index 0000000..d935c93 --- /dev/null +++ b/apps/web/src/app/main/component/StudentSearch.tsx @@ -0,0 +1,46 @@ +import React, { useState } from 'react'; + +const StudentSearch = ({ onSearch }) => { + const [searchTerm, setSearchTerm] = useState(''); + const [searchType, setSearchType] = useState('name'); // 'name', 'class', 'course' + + const handleSearch = () => { + onSearch(searchTerm, searchType); + }; + + return ( +
+

学生搜索

+
+
+ setSearchTerm(e.target.value)} + /> +
+
+ +
+ +
+
+ ); +}; + +export default StudentSearch; \ No newline at end of file diff --git a/apps/web/src/app/main/home/page.tsx b/apps/web/src/app/main/home/page.tsx index 74836b4..a52f5fa 100755 --- a/apps/web/src/app/main/home/page.tsx +++ b/apps/web/src/app/main/home/page.tsx @@ -1,79 +1,33 @@ -<<<<<<< HEAD -import { api } from "@nice/client"; -import { apiClient } from "@web/src/utils"; - -import { Button, Tag } from "antd"; - -import { useEffect, useMemo, useState } from "react"; -function HomePage() { - // 使用 useQuery 钩子从 API 获取数据 - - const { data } = api.staff.findMany.useQuery({ - take: 10 - }); - - // 定义 counter 状态和更新函数 - const [counter, setCounter] = useState(0); - - // 使用 useMemo 记忆化 counterText,仅在 counter 变化时重新计算 - const counterText = useMemo(() => { - return `当前计数为: ${counter}`; - }, [counter]); - - const getData = async()=>{ - const res = @wait apiClient.get(*/goods/hello*) - console.log(res) - } - - // 使用 useEffect 在 data 变化时打印 data - useEffect(() => { - apiClient.get(“/goods/hello”) - }, [data]); - - return ( -
- {counterText} -
- - -
- {/* 如果 data 存在,遍历并渲染每个项目的 username */} - {data?.map((item) => ( -
- {item.username} -
- ))} -
- ); -} - -export default HomePage; -======= import { api } from "@nice/client" import { apiClient } from "@web/src/utils" import { Button, Tag } from "antd" import { useEffect, useMemo, useState } from "react" function HomePage() { - const { data } = api.staff.findMany.useQuery({ + const { data: staffData } = api.staff.findMany.useQuery({ take: 10 }) + // 建议为不同的查询结果使用不同的变量名 + const { data: goodsData } = api.goods.hello.useQuery({ + name: "123" + }) + const [counter, setCounter] = useState(0) const counterText = useMemo(() => { return `当前计数为:${counter}` }, [counter]) const getData = async () => { - const res = await apiClient.get("/goods/hello") - console.log(res) + // 第一种写法 + // const res = await apiClient.get("/goods/hello") + // console.log(res) + //第二种写法 + apiClient.get("/goods/hello") + .then(res => { + console.log(res) + }) } - useEffect(() => { - getData() - }, []) + useEffect(() => { getData() }, []) return
{counterText}
@@ -87,15 +41,15 @@ function HomePage() { >减1
- { - data?.map(i => { - return
+
{ + staffData?.map(i => { + return
{i.username}
}) - } + }
+ {goodsData}
} // export { HomePage } export default HomePage ->>>>>>> de6e632ec69dd408a6c4e85d5cda01a1aa8e8276 diff --git a/apps/web/src/app/main/layout/MainLayout.tsx b/apps/web/src/app/main/layout/MainLayout.tsx new file mode 100755 index 0000000..fd34928 --- /dev/null +++ b/apps/web/src/app/main/layout/MainLayout.tsx @@ -0,0 +1,87 @@ +import React from 'react'; +import { Outlet, Link, useLocation } from 'react-router-dom'; + +const MainLayout: React.FC = () => { + const location = useLocation(); + const pathnames = location.pathname.split('/').filter((x) => x); + + return ( +
+ {/* 侧边栏 */} +
+ +
+ {/* 主内容区域 */} +
+ {/* 顶部导航栏 */} +
+
+ + 首页 + + {pathnames.map((value, index) => { + const to = `/${pathnames.slice(0, index + 1).join('/')}`; + const isLast = index === pathnames.length - 1; + return isLast ? ( + + / {value} + + ) : ( + + / {value} + + ); + })} +
+
+ {/* 主要内容 */} +
+ +
+ {/* 底部 */} +
+ Footer +
+
+
+ ); +}; + +export default MainLayout; \ No newline at end of file diff --git a/apps/web/src/app/main/layout/index.tsx b/apps/web/src/app/main/layout/index.tsx old mode 100644 new mode 100755 diff --git a/apps/web/src/app/main/student/StudentTestPage.tsx b/apps/web/src/app/main/student/StudentTestPage.tsx new file mode 100755 index 0000000..da36f5f --- /dev/null +++ b/apps/web/src/app/main/student/StudentTestPage.tsx @@ -0,0 +1,251 @@ +'use client'; +import { api } from '@nice/client'; +import { useEffect, useState } from 'react'; +import { Modal, Form, Input, Button } from 'antd'; +const StudentTestPage = () => { + const [studentName, setStudentName] = useState(''); + const [data, setdata] = useState([]) + const [editStudentId, setEditStudentId] = useState(null); + const [editStudentName, setEditStudentName] = useState(''); + const [isModalOpen, setIsModalOpen] = useState(false); + const [searchTerm, setSearchTerm] = useState(''); + + const { + data: students = [], + isLoading, + error, + refetch + } = api.student.findMany.useQuery({ + select: { + id: true, + name: true, + } + }); + // setdata(students) + console.log('students', students); + useEffect(() => { + setdata(students) + }, [students]) + const filteredStudents = students.filter(student => + student.name.toLowerCase().includes(searchTerm.toLowerCase()) || + student.id.toString().includes(searchTerm) + + ); + // const {data:students, isLoading, error} = api.student.findMany.useQuery({ + // where: { + // id: 1 + // }, + // select: { + // name: true, + // id: true, + // } + // }); + // console.log('students', students); + + // const {data:courses, isLoading, error} = api.course.findMany.useQuery({ + // select: { + // id: true, + // name: true, + // scores: true, + // } + // }); + // console.log('courses',courses); + + // const {data:scores, isLoading, error} = api.score.findMany.useQuery({ + // select: { + // id: true, + // studentId: true, + // courseId: true, + // score: true, + // } + // }); + // console.log('scores',scores); + + // const handleAddStudent = api.student.create.useMutation({ + // onSuccess: () => { + // console.log('添加学生成功'); + // }, + // onError: (error) => { + // console.log('添加分数失败', error); + // } + // }) + // handleAddStudent.mutate({ + // data: { + // name: '张三', + // classId: 10, + // } + // }) + + const deleteStudentMutation = api.student.delete.useMutation({ + onSuccess: () => { + console.log('删除成功'); + refetch() + }, + onError: (error) => { + console.error('删除失败:', error); + } + }); + const handleDeleteStudent = (studentId: number) => { + deleteStudentMutation.mutateAsync({ id: studentId }); + }; + const editStudentMutation = api.student.update.useMutation({ + onSuccess: () => { + console.log('编辑成功'); + refetch() + }, + onError: (error) => { + console.error('编辑失败:', error); + alert(`编辑失败: ${error.message}`); + } + }); + const handleEditStudent = (studentId?: number, name?: string) => { + if (studentId ) { + const studentIdNumber = Number(studentId); + editStudentMutation.mutate({ where: { id: studentIdNumber }, data: { name: name } }); + setEditStudentId(studentIdNumber); + setEditStudentName(name); + setIsModalOpen(true); + refetch() + } + }; + const handleOk = (studentId?: number, name?: string) => { + if (studentId && editStudentName) { + const studentIdNumber = Number(editStudentId); + editStudentMutation.mutate({ + where: { id: editStudentId }, + data: { name: editStudentName } + }); + } + setIsModalOpen(false); + setEditStudentId(null); + setEditStudentName(''); + refetch() + }; + const handleCancel = () => { + setIsModalOpen(false); + refetch() + }; + + // 增加 + const addStudentMutation = api.student.create.useMutation({ + onSuccess: (data) => { + console.log('添加成功:', data); + setStudentName(''); // 清空输入 + // 刷新列表 + refetch() + }, + onError: (error) => { + console.error('添加失败:', error); + alert(`添加失败: ${error.message}`); + } + }); + const handleAddStudent = () => { + + // 正确构造Prisma创建参数 + addStudentMutation.mutateAsync({ + data: { + name: studentName + } + }); + }; + + + return ( +
+

API测试

+ {/* 添加搜索框 */} +
+ setSearchTerm(e.target.value)} + onSearch={setSearchTerm} + className="max-w-md" + /> +
+
+ setStudentName(e.target.value)} + placeholder="学生姓名" + className="border rounded px-3 py-2 flex-1" + /> + +
+ + {isLoading &&
加载中...
} + + {/* 使用过滤后的学生列表 */} + {filteredStudents.length > 0 ? ( + filteredStudents.map((student) => ( +
+
+

ID: {student.id}

+

姓名: {student.name}

+
+
+ + +
+
+ )) + ) : ( +
未找到匹配的学生
+ )} + {/* {isLoading &&
加载中...
} + {error && ( +
+

错误

+

{error.message}

+
+ )} + {!isLoading && !error && ( +
+

成功获取 {scores.length} 分数:

+
+                        {JSON.stringify(scores, null, 2)}
+                    
+
+ )} */} + {/* {isLoading &&
加载中...
} + {students && students.length > 0 && + students.map((student) => ( +
+

ID: {student.id}

+

姓名: {student.name}

+ +
+ +
+
+ )) + } */} + + handleOk(editStudentId, editStudentName)} + onCancel={handleCancel} + > + setEditStudentName(e.target.value)} + placeholder="输入学生姓名" + /> + + +
+ ); + +}; + +export default StudentTestPage; \ No newline at end of file diff --git a/apps/web/src/app/main/student/page.tsx b/apps/web/src/app/main/student/page.tsx new file mode 100755 index 0000000..6907c6d --- /dev/null +++ b/apps/web/src/app/main/student/page.tsx @@ -0,0 +1,189 @@ +'use client'; +import React, { useState, useEffect } from 'react'; +import Header from '../component/Header'; +import StudentSearch from '../component/StudentSearch'; +import ScoreForm from '../component/ScoreForm'; +import ScoreTable from '../component/ScoreTable'; +import { api } from '@nice/client'; +const StudentPage = () => { + const [scores, setScores] = useState([]); + const [filteredScores, setFilteredScores] = useState([]); + const [students, setStudents] = useState([]); + const [courses, setCourses] = useState([]); + const [loading, setLoading] = useState(true); + const [currentPage, setCurrentPage] = useState(1); + const [editingScore, setEditingScore] = useState(null); + const [searchParams, setSearchParams] = useState({ term: '', type: 'name' }); + const itemsPerPage = 5; + const { + data: studentsData = [], + isLoading, + error } = api.student.findMany.useQuery({ + select: { + id: true, + name: true, + classId: true, + } + }); + console.log('学生',studentsData); + // 模拟API调用获取数据 + const {data:coursesData} = api.course.findMany.useQuery({ + select: { + id: true, + name: true, + scores: true, + } + }); + console.log('课程',coursesData); + const {data:scoresData} = api.score.findMany.useQuery({ + select: { + id: true, + studentId: true, + courseId: true, + score: true, + } + }); + console.log('成绩',scoresData); + useEffect(() => { + const fetchData = async () => { + try { + // 这里应该替换为实际的API调用 + setTimeout(async () => { + setStudents(studentsData); + setCourses(coursesData); + setScores(scoresData); + setFilteredScores(scoresData); + setLoading(false); + }, 1000); + } catch (error) { + console.error('获取数据失败', error); + setLoading(false); + } + }; + fetchData(); + }, []); + // 处理搜索 + const handleSearch = (term, type) => { + setSearchParams({ term, type }); + if (!term.trim()) { + setFilteredScores(scores); + return; + } + let filtered = []; + const lowerTerm = term.toLowerCase(); + switch (type) { + case 'name': + filtered = scores.filter(score => { + const student = students.find(s => s.id === score.studentId); + return student && student.name.toLowerCase().includes(lowerTerm); + }); + break; + case 'class': + filtered = scores.filter(score => { + const student = students.find(s => s.id === score.studentId); + const className = student ? student.classId : null; + return className && className.toString().includes(lowerTerm); + }); + break; + case 'course': + filtered = scores.filter(score => { + const course = courses.find(c => c.id === score.courseId); + return course && course.name.toLowerCase().includes(lowerTerm); + }); + break; + default: + filtered = scores; + } + setFilteredScores(filtered); + setCurrentPage(1); // 重置到第一页 + }; + // // 处理添加/编辑成绩 + const handleScoreSubmit = (formData) => { + if (editingScore) { + // 更新成绩 + const updatedScores = scoresData.map(score => + score.id === editingScore.id ? { ...score, ...formData } : score + ); + setScores(updatedScores); + setFilteredScores( + filteredScores.map(score => + score.id === editingScore.id ? { ...score, ...formData } : score + ) + ); + setEditingScore(null); + } else { + // 添加新成绩 + const newScore = { + id: scoresData.length + 1, // 实际项目中应该由后端生成 + ...formData + }; + setScores([...scoresData, newScore]); + setFilteredScores([...filteredScores, newScore]); + } + }; + // // 处理编辑成绩 + const handleEditScore = (score) => { + setEditingScore(score); + // 滚动到表单位置 + window.scrollTo({ top: 0, behavior: 'smooth' }); + }; + + // 处理删除成绩 + const handleDeleteScore = (id) => { + const updatedScores = scoresData.filter(score => score.id !== id); + setScores(updatedScores); + setFilteredScores(filteredScores.filter(score => score.id !== id)); + }; + + // 分页相关 + const indexOfLastItem = currentPage * itemsPerPage; + const indexOfFirstItem = indexOfLastItem - itemsPerPage; + const currentItems = Array.isArray(filteredScores) + ? filteredScores.slice(indexOfFirstItem, indexOfLastItem) + : []; + const totalPages = Math.ceil((filteredScores?.length || 0) / itemsPerPage); + const handlePageChange = (pageNumber) => { + setCurrentPage(pageNumber); + }; + + if (loading) { + return ( +
+
+
+
+
加载中...
+
+
+
+ ); + } + + return ( +
+
+
+
+
+ +
+
+ + +
+
+
+
+ ); +}; + +export default StudentPage; diff --git a/apps/web/src/assets/student.png b/apps/web/src/assets/student.png new file mode 100755 index 0000000000000000000000000000000000000000..3c17d20153d1144ebaf7abf08bbf6b4a3417e3a1 GIT binary patch literal 151116 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

n@zC+?>qJn{zZ!9h{ELI1)zN=JWca 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 z @o6yvGUAsuVn;E>{}Qm@H!^%U!4!AZi=4wn{q_LSW0N229n8J(R)|1k;bQ)!+2 z^?`ElOa+5s@1805?4A6fd7@mh@qTa`zgr7 z;i&*(zY~)U>qnG{-MwvUzD0NJ1|QEVlPmQ3JHC?B{F^ zJ6+>3%a#d9ulg@;!S0AISvDVK!rF)=V$h;=H{d`C9)EfhyND%5&W3ZCAFT5m;oP29 z8zZs++b=M>cjqafE_5J=R)P(fn}ug>Dcn+;u~s{u8+)*Pisz*edGuS#snV`^g2VGa z--18Y{jFI)nA0OnGUEpf8Pu#f-WG0cz{EGUY%Bfr#KT63;936~qg$`&cFWbf=~#8TA3?Sg zUe1m?AGavZGWmfzSn;5TbBsHLI#q{K97SGB0L@vi#Q8&kM$J%KjY8K@ebd(s`YB|z z6HOB>4v8KUyCZZ17o{PIeggjds4_O`c_JS zcFWI?ssw(J6)|b0&N}{gG8zUNkEBH(F%EnP~LG8XLzssjx>Ksa4*Kb6et>hl&>gn?=RvQQL+j(98;YT z20?al&ofmn8sH2&Do;U>QQhkO{VTGGxvf$pJ^w#|;8eh>qT_#sgBha4U@J(8`32iC z49$r==48PBE$VH}-G{lzLmLv*ba~sEeQ)$|#b5!WH1Nt}QhSS$(amQks3MU)=6gK7 z0tL(mwS@Jz7ZpxBq2$=KcJaj|hkt+@XIm*&#Mjpomk{hB=6<7yAe% zkH=0WJ{rZ9#x`$v(?U{FObRmziM(!`i;u_w1fo~iv6lEWN-?nx(US;}wGySf?6#%V z;F;+dJK`$(qYqOwD_k{r=_uB*KwdldK8?WC`yIqPrIuCWcx${SB3fFer}$+fR6zy! zW*)(1!RB$x=LMPMBfQ;Cc^p0xSrQ>)k+UA_E~(^IADhSyQ`dtUn0zDRqqnnoQ{aMv z{}9|gmv(X-*&{yLK-4HONEScVzK;f9r7?RF4l@RG+;h3 z$jC*mDw8t{QDGD$IR;qd(5jD9R3w23|9LgST_UGJT>{f3GQxzXEsc#-r9Q#ma&cWj!%SUM~KW&-_ggBSv01;DT z{@!()&q16L)@ZI#?IF8td`K4Fw<$GNtU^yj%UD^8Gi73k_y?(r!dkzip7inE6YsYT^lQjYV^mBW794l)DxOi7n~+QMcPidI6vSJ%?vtN(%+kWA_af$4p@`4Qp&FN$I9Riqcllo4&1KCA6 z_zrz<3qQ=gS=7eoeU_%uME*Ze-^v6Dzy8)W*YaWp>&|>qAIe9Oq zM$EPY`(`@Ls88(wafT8OQ~d^48DydT{^8neNm;PBDG`S8vjyWgNEydTf&;aKF<12M z)XK4rOp<+u*tAr9^TUK>mZz8dMUbJ7W%+vRlKq6tHpdyq^$z_&XvF*%uDoY-yf=BYtkV zYu0{{UQVtnh_p2T+9=rM*@~o*k5R>Pbxo)GjEl%Ocprk~XWqdl2=BW16D{IR)a;Ys)M(wyVxotLVWRaI8ldiVIu zU|sEOF(5F;@`)(F?!-mxeA%8d9KmLov+P7fYnwNGQR=atflRQ#XqIT!JYlyF$ndcE zJF7(n^KF>&=SnK~5~jMuE9D8vwT6O2;D#j3|84_bLbt((sXvY*7;Tz-56G^;hDEef zKLrYtI51Y2!eiN8c#i%F)|aax0IdnGd)lVzI%Z26!Wh&M9W&S~wjII*3}s)FC|-hY z!3de7Tyx)B2B_0N3s^TK!~B(iB-GXR(RJhq*x4XjyV!#K=miqI{ml7xDx5IdLK>70 zZb5KF=tsm#+M$Z$kpId*jd&TJYCQ9;9kc!HX~E0z{BzmV%UmHD3E8357se!CTXdSXBRZx8_|d;V=E+PcwrwweM%F z!d}-TCdZ<33gBvMwAO6jg5#dAp8~q$1qZal{vz)@g!&rT&i#};atnqghMwmWr;k8r zqxecXbKjG&PJ*CX=GA1@e=c1vBOmp19o{`njl)7TIWZ$>vPs0pjWY z!}h#QjI6dQ0&#=|4WPW=zKiCu5Oap{V?GPCvr33C0c_C#6>e~?X|7Vm_B}Y_Va-=^{vs@@im&a*5g~g|i861~qeZIcIV{7O=C#ut4gaN_+b9|U_Y13W%4O@-HuYfKU)jqE z@Z)^W_p_ckRP1%KOcX^W$yu$`o z_wfsmKW7e+mz=xJn&-<)^Us~GW|1jBIXTWJy}Y9`Bd=GV@cL?7r!e!Yo{r2OI49Y&*f90$ zB^ip?#L32T47r|Lo1o&~HTani#+}g%ctsu)5grmZMIBQL{HJ5m0-{iwv=bSb6qfKX zm@A#Djto!~(ehnEwzMVXOA%b*!yX*78L}!Ubo$td#sa&bjr-e{8YOfBfz+h*G+A>R zRZBU(fb^woia3U`%4U9d&a?O(5v!ln>4+qF*}=x9A~2~tDUDWQ(zmL`;M|)@vfpS$ z?naMjavp;>y#O4HWBi`4N_#v#lAvCNYD2Pc=@%})ZC+j<-NdZugiteEg@F?_-tRO?4$wS z0xH^p?PRDwjlPZ;EnVKH-0OL}d~;=tTSfJH$Y?c)+e(>^7gikZS=2IE0JL~#( zwp1z080yPMr3K3=KPcR6Do(qmTDFP*e%sizYbilm@wv5MTqUCd2D6;O3|#4l`Q zxe?mWG;5jxJToMZYd5xe2<5-*e-9za$|F2)5O)Kc#17AwT5%UnB!9Fo01?IXX5*W_ z$YDC^Gz*=?MNiWL-}buYW1M?P#%$V}>VS$Df`JK>HTmCrfM`{9+2Y=kaH-%Pg<7&r zql0&LNaG2N{%*G@Qw?he-{^4xu#rd`jROx5*KvcfZi-dc^g)Q$V=FV~9{C-h8e_8S z<#wmbfG{f<0|ynr>$mbtQ#SJn13!fm2y~K%e1#<_&nDMzghX%^XE(vFWyBE?KBCSf z23Yz5rgsaqAvi{1w}Rz0Q}m|qv)Ea$wiZu~@R`_S?BHBGuw2W07%H;aaZWPh zZ;sTh=s^g?2WLaYJ8q3+zXpxv0PbKz&j~g8ZMLQ{AO+HV5$qFsrMF@)R@Ko;iJGPjigrI`P>%*UBlVD63X}pN zn&B<5&}ahf1jcp>@)TYgJ&iCXq_x0~EZ0$t2QOtM2H#{2p9UjnPJgpL#dhLG0_1!?Vtt*;4d&BwL#qEqvFI0kh{F~Se zg&(ut;=)ooJ^(7Scc}2CEE_3(xt=*`($ikG-)eLD+E9Hho1SU}1ir5${2)1Es=F%ABx_9br6(&+L^#{3?Az2r^2 zmzs@#SUM^Y)ip=lh#g8^q^Y6;oMd1%D{P7%)GyJtt@CuizdI_h^{HL7QGDzV?iEr2 zkS<(`{tSDE{66clN?Laivl#!X8kv4QU?84`wk#i0IFRZpGh660s6lOMVeX^zW^4r{ zJi9v~$=kMSx$lHK=oj*BR{DPl$z*oT2bEQ%D+gH5!wyf;g`miNy^f_WFi}?A1m)AA zTFb^sRv3uaKJ@@-sT}`*w(`4hTxLPXP9NMlBmarn6m_0ZFv3k#z&x=~yHvnFNPpat zLZK3^E8)y@|A*@j3ODz%&{Q!wDA>F^1&3Gw23XZ=H|wVzEH#C*Ib(Ywa@tVZDXeXL zC;uu7w5|qJARgn#5jXSG!N%Z3jssj-{}U6v$Jo{?_v^`s_Rm#k>Kkmjz*o6SYKxSS zeIW?=K*xrQ%hE3JXL*Y+u+F-@L^X|jO+aE+V{{`%Sn+aAUY>cZq$;$v+|mFuK+L}! z33DI+uxiv3V6FN6x+=U+CGW%zEn())R9X|wB)Qk;0}^etb>~7 zaBTJDvQ$#IQ7tz8Z!q>WBVbjgvd2}+?Sr25cW6hG{<4;9fQuCY3)IqfmIm+vA>cXm zLmcu&@YH=&Ju|`UvZRSHlx=lBz!u37R4V;MfHd9TOL=H&zJia|KTUI<$gGT%yRWEQ z5ERAZ{_B|RD_&zR#GfHnEKnA*@A#!eyXKKDD)WAvEeG7v8ni z6McjaGv)byMQkg37*DX-V#J1V3ZvS;C@Rz02Vc8&QR+Go;vA>hl)m084X41z^!0#h z&O|2pVCnmC!L0_CWt&6NMnUs#$$_`jf<{di(0(l)dDk{VmYo7`xeePciRsyXVo&8u|D&~ zV|eD9u%yfTPFHy^Ww5H60k%jgz`Y%r4SEs@!=79~B>(GEw@X6d+hdDoAnM5638V$$ zW8?1fK2Se80Yl*0U&ChgOdrG1LDyIRwly0S0+Zk%Hd*m8og-FU2wA*Fy#NboQQNd=)Q_HC!-&;X zlN|TJHw~}JCoyzzF#HMiLc=quexUE%>n)q)$1%oTMJ%LQ0;uClj9Ym`RTU{&$?dZE zY#EIXITn=@bNN_$@SQc~=}70}55@*DE%z*VOOuHl!%PUtK`7dG$@GeDo2RGwuVqJ( zMOs~_707-(t7%`ik{p%I6Qmk;TN-aa2);f*d&Q+;U=`8F!ayP77#yi{E)yyl zyS0F(;B?grYS^S&u3X}{=CYx2d$#S#ypr>_z4&x!suNv$9@!q-@P7-?9*xM2YB%%#@#(s@d&PU z3M{V#ut4*a{aZg6#MVO*E9GL`3rUb&IUG~MB@iuK4~pHVcu_RvxdD0A8i6Y}-cW#d zE0S!POKc;SmOl5sPL#;TUvzC;yb>ES+$gFJWSO?a2GY|0Ti%m)%%c9KY?U6DWtXxQ zYdVY&D_^kXUOk#@wtL@)P(RgY|WB=-jW1~Ctx8(2VAc>{TC04ec{h(N*pk}3=IUOa_6jg5Upq42) zDorHWj~6KW$U6=+s0P2lxIAU*!iS;yC^fKCAZy4-jCMhMf3@zHMG2IkBgOh~i zrbhe#&2yq+L3~mM{{Y~Nk=g>?E-dKtoZ4=0%06)zs68;OsEUH&6%=#%Y~;tCn8G^c z>n?2woYVzmp%ulFcjvZopyd_}SkRucq#;&p9tHP-&I_+)c)|Fb?W}kZK{vWp8myIAlm~ihIYjLhk%N^)2oKqf{Lvd_ z+wtL)$A9Ki#JkPlg#kPc?*iL;vPy*i`0dSMpe)bsHk5ZtN&Iztj6z<5pdO+~eh$f{ zSDSC5d1!P*kRsVOIv^;YY8!DtzOP5@(b8p%-~E4mkJrY6ynO|tS?RXvxfIwW`aD){ z^n-S@v=XIxvZ38f8M>L=0Rq9AywDW*9;K~*}i zn&yY0Bj`?rV#0MJ{EOteTtL|GD{CQRgxkUimu{aMomtDeSM%&HtkH#NNAD-wRWwhxYN{q$R{))G(8X)M3%`f@(k%%@t$x0X0iHMSZHsG`>2l zYibn-J_jAEhkkkp#S8o}QG1`}U38vCwQsd(W6c~z>(CcYd?YlDCD4zQC3YLCsCz(? zI!g#u>P7Ksw3WU-0ti9cH7I}PBI$8es5FoM<3(}NUCy$uv+;{~{sF8FED=uj@H6|AVfJhEee|5hflcgk)#Z3`L%}W z9@TPr6Cc6;d+Xxu7{AT8MtlUe%U2nYH{>^$CWmXT%$>BDOta1yu^L_0h1Txb!X%0+ z63R0*ZeJ_EV{cY$fjf9>+Wm_@j{Nl-h1nt%xIDQ+SDsevcJ*mZX=|#t<_?L)LMhKey;ar_6(ZC&*$kpbpBgD{vMv5Z=c7mvJl_!kk?z9x6qUe(<*_*zit|d}dO3gCaUS%z;VwRj%tQEtgMUR#s zuNG1*%om9bXaNeD3lF#?%ZWQp8@?!7ndDv-#@>X331m3T_ZwrO({;aGV6Yr(UUseq z0qXsh+!#wKHEk#%ipMTsHCA_^_FKh!5ePW2(?P?{V{&%08tkEp%F_Rjfp1bLSF@PJ zzlkpsZaEktdkXLaW)trD2yQ^{Z(Ufm751N!m`8IW$}5$tl*D7 z#Jcnwp9-d00&2UjN`Ue_?${SeUFX744{3an`v_ZwDa?vg(R~fdW2`APfac)*;0S6) zlWI>YNN&u-$@Bz1=@KjmRvIO(uKi1$clMo1`bAh!>J7CUQq}W3*L#^k-=N0>2nBu> z`Hq6)q7_G5g6{M$aN{h)UXj+&03N2+bp;DC%yUp@`z&89sNNb`zor0q{?(fy0i9uH zZ0Vk;|HjNh8mzquz!PsM^tk zB%?kVT_5Y!sR8d{IDP+Ks%UJBXJ-MkliTuUPzq`wPdB20gEnX#CApg zlvs8W)>awu7`gw;0pqJ2fE)&iJx9!f=y$~^HELx9 zfh!ojadw)Ic6hTQW4~~81ZROq9Ic-bh-k_t4eE1xpcjt|b~aAaHs3cDbI<(U*bcx+DziyihP>x(To<>mBg6{`SwcuwIpy=&>h4DkugFngxE&|kM{8JK zi!L)v%ZzMZvyw#pnJL6dP=!vbg)%QjM7Wv|k77`z>hrY-^7eLv6w){lA3~s0uo3vF zbE=-7P6@+WbFerMzHR3~ue3V4Z|>H%krLrAC`46zN7ELQNX?pB3u-R_GfhNOW4Wo;RPAQ?x+*a7LZ#7pZkCV5}4 z0N^W_JIFxyR%sPr$lBP6%+O?O%GtLeG|s5-2X}wVMr}y(gU+(SaIGM+PLwUY^l)#< zR18dlA^;+eo6u6uF&Vrh6X6r}J+Fes@%JD6eMbH25?YIj@@hW7wkN+EiyNuLyk^es zlB96&BTVmjIfR+a6TH_%gStA#Wohq+dDx0Z8t9cG6v9$((LhJ;bwjz$Z0uL*_owVy z=j%3C(>k)m(h}oC@(p0LR+$uHQZFn~prQ)W0Sk%guA`=`aCMQdjE;S;JD;B3 zEPQ zB|LDnA-K942w6*Mp-i6u!8=W_M` zI;t)<9Gpy0v)%~@D7P7mpxZ?x#W=?6z4z`7ik3F#Cs^)C}`jyE;ZI%Vw6 zh7)tpAE+Aa$IL#b7c+!DwTi=&Zdlv}C709)6|;%X!F~Wg!L`h%NgA8~b~Z4L3A(e& z-zZfHtEd{fM?$f(S4z;tJNO4$*2?W)ITDdbc3Oy=ykX%%pL*-j7a`7;fYC-q6rw$w zS0PPkO&feC_jcUhpgn#HzUva@7N4;-ED7JKQ84rTi`qGMT!oV#2CQx0i7b~_M1Wz6 z0Z^&*vkb8S3#^O?Ny2L+%5j)#+5J6h3?iS#y=m%oPx>|DjMRT01lyont;=h$W{R{- zKTn9z#8sIR%VJi?ohEl?jE8darT)U6b0LUaI9N)j6)h{Pp9`q;-%{dgKZU;xJRRQ{ zW6FncsSQek&QQ`Q^Vj^CVZ~~0@-szdT6zNSn9XcKSFqRAB#YY+_4KQ*`qjDSu`h=}vf9fo5N}@#RTQjtlG0Phz0BWG41@tl?$Gz?XzVq}AWLRR zkf1;)~ue=JgNb)Xs1ng39sEV2-RwM6@5BQ$NB9#&7>b0qf56m9pN;TkJ_t#~1W zmXzdxiuAjA$<2+%-#4HDy}U344=nayyMHi}m96CkHKgRjBdveKBO5^F;Ro#*316q3 zH&T&PWlfzucRolwiJF#;mdl~@bXbmX*1ttM^)po$U>z%%S(|5OW}LUHhx21y9I_Sf z0EQU-3=TZAN`wMuEEu0mb+3#{mCaEO#()L+Du~UUwzrESaX9VTT(hgzvcxt#Vk&Lc z_{&^s*0!0Qwojj)yR$3I^$5%4hE~VXZ&Fs)=ubwyv_oyZM)losO*F`7pZa;$5_uls z^Z?b%JAL^gOdR^qL`OhyJfU$7fa0AC74Or@q zfoZiir>DB5ygWTy(HxXQGDEx-IHqF8R zthuBRN5ptMm>-wc>I&foc8g^1z2}I}0v`1}YxzWN1EwyNnqn!lbSsy8A;y)lGAOh3 zbSMk5daUP_4hDNU2xW`iGkEs>*JUFqFGHX8VoCTDLHA|>Qm(g!x~(knpkKs@y;Aab z=hvX_LWyIn@aeRmzdQ}xtd}n9_8J0l@A7Z}=go%I;f83aJY3T4KReL)kw}8mdLJ+% z7Vcq5yN4l!{CK=%v;+Q6a@Aq)coB9D;jt3CSVxoai`p4BY527@7}O1H01`i44vo_n z9DhNHJmFoC{n$qvlu!RZuxdR!;iBOZ+t<{g9|ZWY$LykmMa0~Ipr_MQ_lvIfi!Q`E zBdXH2TX6Cv`~I*-UitQRW#P2i_oWTcJ#}K!_C$RV4S*$Pb~>1p&T|72MfAgZk(G#I zb4BY-8msZ;HxNauMmcI<(Zg5)cp&LH&7bCJY)VCXeOX=7G`D%5K5=(tdl+T6sR>Q} z3P{ts116U|t`O|v#QQ}j>Xc^wsYlc@IHgcX-N!dU$0T_q|7r(*1-`lM zd3F4dOW6VqPWV9qCi8+NeWuQWj_YeH;-}^ZYSHU-n3(Jg{_?#j7OWL*1*ajxny-;T zoa<(dK)sbz6^&cyEBo{}nuzBU8}qMU3;pKc+nEvYbP=;>d+N;>gK9qYUj$h@mx;b< z;pom8mdjVMD@S1B-D=5U#8`n}9Kr2x+L(g*d0Guv=`?!@ItM|?x|=v)Gc z3l8K;iH;{$<1!rV6HPQse%1FVEtQ@z3_c~2;Nyz$aV$UXmPD4GdA_jV3yX)d8|ZKf`8M@BUHbuX#p1Z|!Z`E+)29O(&~fZCGgi9JLbFz=yHEK^J-z9)+%(Viu+0FeC zGwu8_j(@s*@%9!eTWq$(^hq^xUm*6@4UXRmBgbqE=3whk`9ua^5@=56#A+- zj;<(R3QhTZNP)ZaN?;Gdc3%NT_MJ0OHWQc8igi#A;Oj^!rd_Hg9HqM#nFnjN8?z&M z|9HB4?@}kR^WO@KO7;6WaN}xv3w_1Z=*2Bdgkv;9ZT}}&&ad&{Xb$Nmsbf!O3;>a~ zORIUcx`QJno4u@W%HA9OZijr|NO*I;Bi7IivBycTv^_0V@wA?eLxgf|&u?jeF3RrP z`_-BTSw8%Qs^M1xasE~QT!F(`#-RLRKt|`0wuAK7d~{ZCN7S0kqlj%edk|OGM3>}U zlaAg5qEW3F)Ejbo%&gXiTUxs-sqaP}@l_f6+61{ewVpE9cR6Z?|~gk}08HPPgw!)BQBaE>{U> zLb}Pn1EINQMQcsTT*ATxakFvWaWVf?! zsxiTIVLGSFVAI!BtBtPm!V#eRgqrLy^Z7V)q8`#5OA(|6gPt?R2$6(Uy(@0y*h`a< z0_nUqKsvn+Tq9`!VH!JCQ{U3SWZ0f-muO%+^{X=7GQuo% zgU0MDV#n*{@6p89XpHGJyvNetfu+Bvg0fppJlcB1IB+gw1BF?J#mq>}n(Y`f<>Ti| z7aTOBv4RlQF31I|PT9Esruf(nZ{2M<0d9;@j|nNyCKKXpamndSCMB$W?E$gUdku}% z9bNiI_ovq#F=n0yZV7%_veJp8G*}Nju6mH5y!$~Ee13z&QEeP=Z+7<0UIpMSx6<)7 zcdA%ZK@;l2Jg6>D*xgjis7!wrIYDzF_VMj#*F>Vjr300!#kUTc&yE>9P>7T$jCClx zVB@Ufvj904#oOe5(H5Z$=i3C4HRH$CcAWz!KwC2veJoA-n+;x333~a^?vZQ>#*y?y zJ~RivQU*FuFOoWosKfb%$Mf513`3UfkF;ie=}uVzshca)yrq4a@w?aFveS}L+l$$0 zlh>uKo+I4$1k^UK48wk5+45@3Tb7$!Eu0|c(tMzS$YZowGzPuj=q~v_Zj2b8MKOnl zFw{_Vo?vAt1mH+iUk!vOy$aFzy%i%YekZie@C*Oxabi|~4Lq8Ty_ZS9(0Gy9ZD~t= z5axKD+>SMIHn<*;kJO^Rj7zG}R;ilk?H{CoMst;ISq6(+LReMh;A{aPSyblwHhi*h zNmaQ-lXI^EF-BV!ArKnsyj15BI$+IkoTlhr>}Omjw&QBa)Ky-|I++;=+1I!bw#=;I z#myV8eU8=pDS;T?jaxCU0lMw?#T2~HZ{Zm&UxI6w)@P5t*H^AOK%A}LBf5Xbz?=|8 ztr=Qx07jJ=dyxxp`Xro9+1GG~gYn%`Zgi=+aQB zOMl*zp>oke-Wz%C3YNKcwI&MYoy5L9h@T>~d;!CHRUWy3{ZGjRd>W(Z@ypPwT|V>JQf;+nh2$1}`fQwyIBol+=66OjD( zp-pPvNprccKGUY)u^~V#dATj^i3d>Lz=j{kwNO=%3^6qs9Yk6fX_kJZRAI$5b;C4; z4sRdb+5RF!MRpkty#>adB72$plHt$dde_w!`cb7~jRrLK)oi}i$a6D5;uPa5-U;8s z3aeo>aehmyI^3(kJYRwdJl|yXXQ>_n(odG%vP#z2$ zZfXf8dt(}KXu4dL2>r8H;Uve$%foD6rp1XL#Fm>8DuYUj;?0E3Hw}5J;~lNx{YKhF zN3XkaxJ3snc|vgJsVa?oH}E+HbwmO?%2?i=x8KP`rYN8mmNWRCpqiTpx2iQ#ZGFC4 zr6K2~gM%&3NIRCP5zx=?dNspkdi^MjWUnVh$&|rp{L%N#6lSE0!t)?r4BMcPg8TOH z+O8ji8&UqW<|l8wXpZ*}w&2Y~ z4?1w3Et4FdPJy!mKD^xHV6ufz(yp%J<78s?&++qJ)EtiJ*P6YW76pb$VrwU8+UCg< zovFykP4jvnm_o7jTE1Bz%2ukF+J|BmOUHQ`QP(}ychlF$Gwh16en zn<9qi3pK+R|3QzhD4ln)P;{{{&gK;apKhI_lk)|RQepC)!(}YOYhym8GKYV&lN)U_ zSl6_Mh%tB43lUcTvod6^i<3vYQ}t#WjR&zJNgp%r*HGUsoK*#x_Nve@z|GqE1MOVA z9p%NTLMrN&)(ppMlgK#0KQmZ)ezaYBrvaP*R-J7N3H2E)3=12*MNH{CRG+g1@IUyi zB~b7y*MWm~AIMeV&BA2mPx5t^hn?1Yl|a!}GDdRaL7#grLEJa)+%z{TGP!_M#tZZ^ z*>wo{yNmyPwcdU5fTjpjtyHST5mT?6?@zc<*5@fR&Q1y=y6 z;h8JW437A~E#lwY7kbAO^>9vjB06OLM^0Y}9fHmN8vX1_qsBXfPmKH5Ig13+2YD2f zgO*klh<`_#ddh_%%er%K47%zIzVFj`wC&_1#c*3*;l6tBb3zRGyje}vct6KjXK5XIMWceAr6TeEMf{_I_1Uu#D(84;BdanH7CMIhMNNW08^IY#S_7qdy@yUL+C+`{ ziNb3|Uvae*mIb_tC2`9zWHx*_NK?Tt@e6)P@)YYy>~P;Hce(}3#ayTovarmedAq|y z7%V+IrPSH{?2G4mvUyK`SPS!UuH;iRJ6&@QmVU}_PGAGYV`&AmVCL6^Qt(6r4em7! z2YB$Xd|69efCdeqi(us@-pH`-0=q90uDa)4%>s=w_Se4e^8;^s;{y?1*#17`gF=Vm z_Q${8igCC%rYbu7$H_&N@Wrp-W&a007e>fP|Ii6>*BE7CgzL_dL#?9^Z!S26c>ZI^ z*%JsW?u{r5+2m*bJWWL_iD61x%OsNO2?Efr5pA4Z4Pu3DEh(;RI|1|kz|=JnI6_AI zM7;u&>fD>TI8&wh7i@xt?~}4czFG zUt=QHBeZUQs4HX!b&s{vPGMz3w(Rn*1{>Y>ip%C?H7T~{C87XRG)r^+aAGBvxhzW8 z@p%UU9)bAjD~yv7N!#jMFS8^coRnic-5@y;blmF1O=%8HX8-{^+niH^G{3SG8usAE zkh@ZVJY8DJGdCa>X0>#|rS0(zh0O*@Oguh1pUUZ#NGSGy(KqB2K77H+O4TzyBB*=~ zEyuEn!{hTYKA4H@blLSh-i`7}d+d%l4zeS>I%J$ZA5+wcO^hclK>aDWcv7)gx^V{x zp=L#paZ|Ja8%^pDSSAKoHKdLE7J=sLvv>pg2C0J(Xxj%46G*moYJ7dt=CtWA!$1ydrHWskiss;jua#;9@U3e1Ff0l=}lsv$?_g}iAlpmJ%~U4zBIpkQTVgU7JJ8Cq*`o5`kJU~A89?1Wa!c3`U z1*8FYPsZkg{`ryi2trDNJqD5Dr!im${*&YcpaT72js~1~m<5%A{$y7i77N!bj8PA1 z4E#TFNp$9GCJgj>)AT??-#o0eG8`h8>#m$~;3s}j7eI>E5&M}V^RViyy;7pwl4d0L zxKtyym9;TxA9eNE_9!uwK;_$u_wLiW_WjV*0@s+PYSxzEit=zC5OZ&BW|T_Y?OfgT ztpaLAbi=31)t)~&33<;S?$oH7ETAD5Zt6wGq=7i|6KIe*EJXV1@y%}$!e~35+#Et2 zA&eV`0@CUVk-pKM{N^+Ml-i-^&epDu z<%hQRDn70P=YY%NQj3yTh^f|QKdBIF)Z!=dlOiL1mW$*p)3hn*+?&*sPv;jnIdtp8 zXAN}X6G&iOTg{U=!6 zkBb@@2v6ctKO9f#r`m6bhk6@bW7kB(S|;%@qG1Mt>#%Y2qevPEL&?;SY9tvZSR@75 znxy3QaCt0L^R!_leO~*4=X|1jzffeMl=JP4|iXu>-J_) zFBxCIpG6K|CY&mMdb8%UX*fZ^Zdx@93<NErDTuG^$su|%RVfe_{g4yzw5S} zd~MBq$cpwvg|sZM2U9ypGm*RPx_DKY-6fnAr4>1hJ%=m}+iP}%veAf^xQWL-km-`w ztcR)8`6cpb@yl@Srq|{?dZjev>V6@w$zibQdW*9{-WRzguo|rms+@8!kI9G~+?d~8 zXLRV86LFDD1qk)Y74p1NvQmi!v4=<4@e+?tROHT6*!r90#L!8i3KJ6!ed4|Po^j}=?iz2Z{R7d?J_39w^gnU))gYBZ#HoFf)sw1U~Xt17w!IK z5G~*lx2R}Up{yWDE%cOgM9ujv7ETdnYJBavvwSOmgi%bmqr3Swk9t_gf|fg_qhg=m z_?l8&P!vpp9Km#E_DLaxRd2d7GUF|Z1t5^Q-y+Vjn_;OC((~P6 zB3x?f?s)iHGW^S0f#RAjBsE{+b&h+=SVJ23?jGFAi#?mGBwboc&>)=!=BpKTl~-^N zu)SLTxC!?=8EIJ^*Dm!EL10e<#on9^Gs4JFeyW_AmmkAbI3$YG*+%3it9i4gRI}ckxB&*;k;|7%h z|HqhlFEF3iH1pFuB$JJ)X+b{EitRT!VU+}(t$ZZCvJLK`4A5KLD@`p(C$QNRhb zh3$4a7fT|`5*S2gI~f2(fVk-oQ*^y~?z&$kRXR%(k*G6vxR>mha@?~BK?5ehk!Lg@ zhPwjGkQ8Y4Lbb+)F=Y6wC8S&{&9QD&4(lG_#gr+pd+N3MOU;o{o7FZtWNfyV>|f5wS}- z3!pnN6^9EM$Sw9ZJjyi#+?vTxq$+OmH!yWpRMk8`+rExr)s>`SGpv!Jpis$~D8TV1 z&^GPgkZXJ+!?C>3BlBeAH1=Z&v-w{9BoJPOR!B7_(w0jrGf_;I&0?xC%q%w!-aR_S zhUlRUsFl)#AMwCxL_zD3DJY}3+cHl(8 zz!<@~!C+2L6YW(G>OMpzjOWS)SX6FT_F(OoOewO%-OJ|~y%qOO% z;al!gCx&VmOx)f*DWDgjK`>$>;CAmh^#+wx$kiKL0gp}5*fMO*^V|qj*lb}%nUsaYoX!$$IU{N^XFt4szyv+R_{g_H%}LCiFKV&Z@t0PWR=Y; zb4Gr%u?T!T4QyzK6a!l0L(5k+WQs3U32*x-VW|FUG4lkrhg%!CE-CN}c(Hv2B7SS=fr`){-j3 zm^95*bTN6PVwel4YyYXBafWUzUg2Cna(XG1aEhGLaLu31K~Mnde)8J#=3xOSgp-q# z+m1@si2e+hxo3*sh#kVgAN78NfKK9ylpN#WoxnCM1Rrc9JfeC8SQnpVyGc}|*pW-c z%$ygF2!BZq5ANN8X;_`(mL+`^4`K@h*n+wl$Q3BXZ0533vgRxPkyrs!(IW`)D&{~8 zMd&z8^whV7`7b`SI*GIxYy5SealQBIpPe`};iA3JNYg$(E3d!`4?@Q?m-UHWdR^u! zL;kVl_0eah7g;dnP>uiUW@4;RG9om$CBvmdhYW23 z&rRC1knI=$3u{}#^$;esCu}R37-hyK)4jl4LN>p!SvfQehx2N<9rD_D@ZmB> zE$dgYFCgll%4T8IQ9aELV|mXibIb2Z;8HknzEm8la22*4?+eUd`m?QiebSGQE@6|n z><>?!W)xVL?fvy@4rIAc6K*r2BUiuS(r!$=8@bMFUyhMNV}bHOXPU9Ov9xzR)2Szn ztY2)LUfyRyz94oE>%A{k3r0yARi=|adc8Z@PiWik?Dr1`N%0AN*ZDCc0Z5`%ck2;|wg)pNo(Vl(U!&A39Wcm;#c^IwjEm9H9hvDUp} zosVPry(V)w8k$Ze!xE;!9m<|KD-c>}Rg71uAwhpA-(`IykpQV?m2}okDXI%VRv2Aa9d9WMMC3j=KeWwk~Cn1D-hdQCy=HVzG`(_iN z{7N?*{EU4F=0NoB4Q)90XAi$`dnz_eLF`2_%`q`|VXpiP;No|tJF_$^b-v_d30(Dg zy8->KQFJK2k}%}xtLu~kganf^?dwM83E=UH>tI7ixT276Fa$3CSGdGzd8MW&Wl@E2 zPlkg_EpVeZRkcL)bIFmr99sChSHUBU{7k_D?`J22QSZ8vBVBC7W%=i>+|oFw2p@bz zL3v|($cY#+AB7>C{IV!ioKS^SbT2sgR5T(^u6bw2k z`8O|9#&3ZO_9>pL6l6cmcbju)e_vC%?1K(4t_dw%9WrU|))@5b$$mn=#Gc-8a7Pxm zf|Y2he;$suQ8hhS#!+8jIEdK)bIl~^eeNg6t}mg1T2(o7LF%k5p?HY#6G4(rHUk0^ ztX&WM`idLeKkL-p_rD56{M6`quy3j0%C>*yUor#%sy@S1lKIzNjd87a1#BcG>FEeS zE?c?hV137l_EBs}G8VUXIx+t(Yi+GUQ7LPI#C^*u5tf0_PEz>=dJLZX9vU^KFfL@Y za+=}kPV(3FR#xZk&yv$^PFy$+G*IFTTGBZ0&29w6&=4tzU)aE96*y;8VVZn3|K?$u zUu7Uxa&G()MJElu*EIW$$E<018uMlrmku_SUFh zOT>>QIKo0^GE81ng+Q+w%{W2kw>`%Aw(t=|B&EU=x2I6;(-IsI{l*nkU02;3e7FfY z5Q1}Jji|J>c!j}7)MAxPppq=$LU|wW={OTb=j&UI5DB2}(j=7F1hO|4uouoIN#2&Oj9tXS z*`Fy=h&~A^>WAx&P2U9xrMoLM=-y616goThN8Fra6Ig+o>&$31~Lz1N}K9K##z?@8CybL@4gi?t&cD{LCa@%eB@u=F%3^Z0`_QrwoZZa`f)G z)=svD*kJyj2vVwq)I)pp%Y8 z?-4)WR~~4G)CmRB9MTN9{x^2b2^;%du(g$r%+?Ql#u^| zG7cqubP7vM?AYj)O=diZ#ROSQ4P_f=;KSj|e}Y0faG`VV!A8_gptT8r`$wLDXsTNw zZ1!~(TP2Kgh2imD{L>DdVw_X)Bc#O8&y4bO*J~X_#hT}UGUTXV8CIZl+Gle8B|n*F zAPyRB7zQ?2z)`cM&DaMe^4m)t4njG?^rTQHA#0x;a#kg)rNCi}qP9zsW7ui%#>L>yUeNtAm) z!>CI4irKQ2+hi4VNfKrH(`}$^N_~yNnnR?LVePGUw==-ZHQ`#Vi3h+Sk;cY$D1_w1rjCQgJUNgpV**Yj4* zJ^X<_I?2s=#nWDSYGok_I?ai_ZV)Akd_je=Nih|*1+Ol%s#`4>V5#v&>)ir$8Cu7% zZcJ4Abm8=N+H^9RhFL2)Mb+HQLlr8_%oJ8X2CF*lrBM=_0;6yY;jt8GOqjg2r)itx zTs{hQMcV3@e}nqSC)-eMOE#A2vh#9#A@;nwAh#mL7I;)74xH{|zn7{%QXv?1pI#+A z2uq|n2yg&UJ>OI!Yp!IaTbkJnKeYPHPzQsKk8(vSCMs-6qL6ZxLccB!zDr%NrMyb)IoF_Q#~vRY zHPRezdjwD<)(82CCIjwV>OeIMRm>RGr6-bVtp6X9;E$!_tmBwF(aE5(krn$nmHGgA zm$cHJ59%v(Z}q^3wX_D2t+1SlAmoXy0g4mOO;NY`by=RVQf)HQO?HQ|3{?hZ@XqM# zzY;G^I+=_qTkc`yBs;XTXhmZRc#VR|vzJWEt{_-nhj>PsDMRKJt><8JA*A*Sa?m4g z^sS`PgyGw4R3$Kc*T5upuXZ;YBe^!h;2KGr?|`)eC@g|R@;s&3IX$>*Ui}S--6qHP zX_DLKlqa7%B!81bX>|xANOea z?p0NVZWy}53BZMu8Ab~(j;Fk5FS$!A@--W=OMl_e9Jz23IH3ZpJ zJ_>L)qvU&3l#*sLwyL@Zoq2I%M})EZTt%9CoG#0EtAbgpk0KX33{?qw8pX#{(J7hU z<&y|W?(gDqZx^Zj%pXg}pZ9Y)wkt!MY`m)p z&C)U*mne36a;pG*4yQEZ{ld6$x2Hh!;U!VD2_H(uXmO|skxUfQ-+ep12xoyFD$Q3s zl%j8b7Nb}ZVDx5as{@Uwi<#XCy4|8KNs!F$%|G&Y6SMkBps_ox3D0oL-`2%>t^8sR zd9y|$V&W8#kCFBfSW1?UdS~D{3RQ#V@~R~Ums^Z37!vK3M8-<~DC_j{FA`utim%k6 zy5IWFFFO^RCsA4H6|U9Hcq$^u#`LSMQq_h%oR_8iDajM*oCU)q6)Ey8Q&0_|dN{f> z#%qw0c0OaEh%gKw&B6u~^Zh%m_IA>9@f7g2c=i22iG)jv$WS-gC*{5!15UyG%xD0T z^N^Vfu!_q^z5i!jZ>-NBdI9ra*dBWa+kAW**6RHWfKC)F7stxgNE$jIFNk;prc~$! zYX{hi^_dlksiri!U$`1&Y7=o zbWo`o1^%Q0bnolxNFyxKq*Dh&^@li9z~W`!+v*p5*hv2|L#q8949edj7M>x(*JB=q z{a=*rP|8BfsZD85Qce{2m5`Z_owsrZ2wIn51a@Joh1>@IRejbS4pTEp2i=cNCjU_f zWNugwYUXOI&Sd@ZJ;Q8(8(J1spOEL^U|HdX1j+V3YL79>@1)=8$~s)rWnnpa?A>C| zjHE9UL@MkqEXbHKyc&;`X=?hLrfcBS9_cGM*XqipQk2A|hV*^kLS$E}TZA@y~5fcsrHO5y%UWO~Ig-IoV)+1xppo)^QhC5TV=p8o{ zcZ&MD(;UO1uz7G|DvoLVz&Jsn_If7ajd#ZnhPKZT;zQ!Ylq>KuQxqvLF*X||z{`rv zYr$LU#Xj=)#=^XkYhjV+(A}qC>!qhZClpMupqyCZ2fgN z8u~wW`pLD^?ExjlnnV$)k;K5@HkAfiw)65e<*o1J)fEws8qthPr|eE`#Vw)b+Fr&v ziJyx-DnaYYPsjzTIA8QwLU5Xa1h{ZSxbfZaV+%u1DQSb5>Rg00KzmYh)AF9tI`8W# zt=VQD_^;&&;P0^~m6@kf`);YPD`|4!T$}6&DH1a0cq}{*xR?e*S`ObcXbH*zx66TA ziEud;AWQuu#&1iHwxCMj%KPMzLhR>jc?8kROuw44H5}F1`%{jvlzz~v^5d{fEVo$; zTtoEf$I@%m%O0*>iMQ=xcaM6BOVWbCLVMB#fHjIrrvXeFrQD_D$91J|gY(V1|Gr%K zRL$=zgeBri?rBwp+S!cqIi0=aYyrDCiPFSy#x-c8j1DHPiWJjTr}|@u$F4l6Pm43P zEenko*frp=p>XPPZQrWO-kY&WjYsN#Gsl7yF>(nWZRFwMvAyA}0B}n$G5uK$^cpF9 zs7e4YK+wOOgfIzFotDX`gV>6VGvAJy*5Mk|g5pg9p8|-| zqE9Rhv6kjz;k#yAqm1L}yUB+h=5`KjAY_GFL?&8P=D!r~aE!tX=V~Sc$xE?8$!eE$ z;83HZ%7YqXm(?n>ngUy;^Tb{0nbvXL3`-fEP*K54RmaH#j?n?CBoiO0*lDU>k`VLG zk`}nTs#Aj2u_gj8o=BkN3WWs-CfChiQmgPOM_tx6cU^ zi-VPDar(tyI%o;@OZrarOal%R%l)x-#F!BdGY?6ju2mejiEM&xKZ@H}yTN;qoc&FxXBg|uW%r`F7aMO-X;*rNci-aP z`p^7JW5O`VQ?G5SwQF0yFywG~xf-r=yO&Z-5&2P4VZ@?nljw~PEICO}+ zHrijduqQv$Rq*=UPRXig|4|OE+t|gVL$r^6@=IOK>}!F0p>%Ar>+b$(dLG=KW=-ZxqY z+6_!Wic2h=p93F?Y9LEI(=BsNHXtfK@7T4vogus2`D+Ai2pu~8ZhbDS>)zWRs-`4~ z?^aA9;3f)F10+SG#dFdVaMl100+kQ#9&f3u4{~y|co*^W?9xst(L_xIyu>GEvZB{JV(GaKZ~xohC)jCFk-Ya@E3mrog;Rs~2$o5E+lI}UC#YQe|w8lWJW zUe3YJ?s_`F);I{-d90Sp&U@oKw$SVq-{JiMS!j@vCO8TXK&9#+;(G$wYX6AxpNT92tpO~p?@*@c$36Mduash)PU z!|vH{^y*sR0x(X|J>mj^=fJ!j{$wjwRFf?6Fw!Msj$x_Eqq@!IT@i*WP> z;`=65?~!{W>I?d>>O0zSK_RnU%f<$B!ZAq>^t#Tb;dI4sl|Z~C!|HZkhY*F@49gI zGyFB*>)J~Pca4*l-19uz4Y(>bN?QQu^QjA+>aA%Y>p!?Z{J?sgNT?X8FV&)^w2fHE z*8j12??4I5R0jWj|qV&D$u?uzZto_al5C`9F%ppvD3ljnl5KJupN!%o|p z6WOyF$bP6(z@qvbC%NL75!{MB?gu>D}C)N7C*b+3vL=F|qbtqODIcG`*gj-OAsXxDS-p5CG8}M=B*ps#$nRU9F7rA`kiy<92`uY65OFOfRw~)c*>I}(ZY>Hr zrr?@5Byzl8Cd2`C6rwySP>fkmUVoVm0Fzv=^ld}lbKyz&3Z`1vK1jLY&chh2UPQd6 z9S;r$`6S@>NYV@~O>o(ip-e@`kMy|m41&`&L%JgY8*_lqO!Gs)3X_%oyCj{O1R6zK zzi{;hc%plB)IS{oJaQ`1(42NAt4J=t%P@y&U5X>IS>1k6m}yzd~gBT+M+CLX&tPW?%wl0RHr{S{;l5!ax)_weY}meS@en z)5&kMPF_fCg0$d!7eqHi>mE|NY6l0IHk9ciK=&PG-}SY98$IQX6xcCA&eV9|o*Od< zY0F8feeDPh9D3-(Jisw)->ND%n@E~PXe5xTEv?5@Zi&>^@B{9(>svG?!(!^zrqcJX zJPSS2{?tf&0~NFxXvAShc8Gr3*vI`*cC*+ovh zC7v)%d@=?qGePoTm-)m!g`2QXh0;BmM}KTUNp135QGgUFP^^Rb09H!_FP|=o(f2s+ zOY~uF&sJq9%B zslH!}r1PkUC9ZG%4?(&PgjBEXHG+$O|IRMwl4Ol-ymuno$rORHdB&a@;F-C0o!-YH zCuEp&bT~i>pjuWi`kOy+0~AXF$0g@FcGS!R`mLm-Nc+)8mYQd(Ln`(FSeRB(ttfw9 zVGG;(Km}vXS@g3gOCiAvsV=l8sy55Ni@9wQTJ9^sb?q1phkyPCp+%aKAW)egaCa_h zjygm?+6y@$N;obntFd?|*oSuRpz(tSo`ya3IJ;`b;)oFjO8=(;CziSOd4-!rP_9sU`mU&AQpM z8^4beb;t&$=nTX&oj*FASxV3MrR#Ag+@dbg2i?9!-mo^qA<w-y5CD`}d^M}2Q!z#&G+%mo-vbCcrzv+t@AD5f(y zr=whP;5jw)zycP~ySMgSE~JA4X{UD!@Z%&H42rVXB-DHlrN*w? zM>*O?29juOCuf1TKa`vyN4znh9s;!AksR`QY@MQO3t}w#T)lbp&k*l2KLhYJCs+sa zhF29pF5)L9I$`SVYwffwwkqi>e)b-G#WM&^=2U!t*nH*|8S_LqUKh@F?)gGm?s^9N zuHhXvSW}a@NjOU~I7Ex3HaECq?mEZFR|9BR-_=M>6HcKwF9X*l$}I8qaVe0M3++`g}4tS=RF_EFyLY3&A6S9a&Yw zem8CmwrlH!tH@a!%s?s(dG5hS{F?*tuFVIOl$ zN*LSVCPayu`KWvoic+stw_JawTEkv){(6#G#HO-ymQ=rMHnzW0DMyXEC*h;AboNlvA^$YSCP z>>KhCd@QOFfG!wKwxpfbZYW@PjcK%G&LoL2K(pb3pA~;sOyzZ}Lw3x|v=R`ok%?m2 z#*HI8>rUW$#@VRN=1FwmIX=vYGh!|p6bK#jBdd75#vFoFnEDd1js2`>8QrC2W_z|u z;UZh~2l6Q~J5E{$lauu5tKP~^^&wueOT~rvKm1fiK{CTi7H$%W&Kg)lJcqSN0q)!N z@B1mJnLAZ}k;K7H4{`c_YAIQSuPwh~c`2DJ8Lo8zaEac=EiM{gO|iM^nWMyKA(F`< zy|<#~&5$TT;0Ps;hEpm#B6E5DG;Iy0h*w=aesvi=4 zd2U4M6oA`}Aw9iN$_9bVOO>tXFAgKh!zwl$u?O!>4#HJL%c=8qvj$t-vgu7Ri+6{Z zi(#az{~SgS(1-@0eN*N?VDV6qnE~kM@x|W3Ww-6qDaM=W6~BTlSHjH%o+Faq!xd&Q z?41!A1R-9UF2?0l(5z3YM^ZAW+W-EQE9wh|Wg4kd3ZcSxBPy4afXY8vPnKWTg*N($ z#9F26k1mx{a-nnW35*6(6Ke_f9X8=zKUl>=wg{AmDJksQ4&IR=fr=s?gbzg7`6)`V zGhEddrl~Hjo?x9#cNa-EN1GZ}jPPH04j4$Vf143U`LSo*(Vm){NR-}=hT_S-C# zZ~uGH@j$@yqLCosZ-voq-zYbuJk`xH9{Tx@Wu4uwe>?+o2turA(zldRUXFVsrhjj6 zfiP-o-dLU0a};kOCbZ=Cgd8LulEi~*2m8#usFYJip%#q7shN0zKuG@^8$>Rx&yIe~ zISm)gciRAK!`}`kh>E!p^kQ0{FII-+TXq;`oHK0*AamNOpRQ7%AWRI1OX*!n;&)M5 zHjBfGJ)L&~L+3;4;B}&#v3_Ntnr8__jh|83M?f-G_^Shz^D{xQO^~qxPf7p?Nd_5s zshJ49S3x77I2JeQYkr^kj*cXUG$mZu3NH7JH1TYqXFzboH*s!U@eJR{>dNKvbxzgo z&UxjhJcv0s#L2O)!Yv5i^OH$ZtfMHM@e9+XA#YbG*6znJ?q}Lx1ZCD9r}Ez#5BT04 zbsEFMZFFd_x4M*Eh)7Pc9O}`lFfS`CGv{$?9na}dQk|QWikRk8?>)G|n@+&-m!4!e z_DWB%wdLWZ_0*X=avJr=zA##X!CV;f01{WiO`)>yy?A`XLKB%e&neOM8mCR84RVrE ztbD?djxzXHLoZkn=3B2qX}YdKD+hKT$(-aTwRTdR3VuRm5IEh2m-b=^RtQ%dY*wBBiMnu4MOwq z{zM=bS%3w!m}`R_J#Avq4O?gXorP;%JJWtHSr*oBqF2#jQM88yPtjKew+)OqP(l6D zK_nsk%OvG&5quho$Ce&W5w1o6V}uLgzY`SCH7PrGk?B0Yb-1nY^fjPp$F8CFM=EJc zVZm(U*jBuPp8iCzTsIt)vlWhR!B_IP4gAQ8JD0vZnXwe`-wI!dZ@)^M>0NR66(}BR z1hpF^Y#{!tn4;p5 zk9d9%vAZuN0;Oou~_~P>msg#x`XJ36Fok%CS43G1y#aJAmPmviHzG7Dg4<8uNWD^CGx=Aky|Vs#YEG}bl! znFqE-)bk&)9?%fX#7XBZQq+&QaXC}P5-}BCwVLPm?mQ_7F}5XqRxiXutaPS=7HMSy z&IJP5J^ir|dK_+GjYQxE0dYpv#fMxN^#IRYflVL8%h7<%x1snyxPpbQzkW z%l8k1oERZX*Qnd6aAhUzS|4xiV>qV`!t5G=(4?8CjwBht$m(IexNL#pn5t!7kTpp~F4%Qy4thITHEqmBTOJdZ(~B z+e{A>*it!M2)tLG;+8GBVp+;zNN@5q3-5IaB?z zgpIZy2UFmiD~cogOzXVt!BCc>&s?B#fyh!pq96#M!jl9SGc#!4i4d=yNXuv+`m9lh zie0#mP-TJcZpZyj6rCdlQP?RV)~r{-CH7)d%u9V3)|+SB036s?@L^-2+oNXDM(Z+F z3)(^d2vb^$#`M(z>ii68ZBn0OV;e1fVoBzhp7do{_Oa}jRY+U3W(UD6puwd#d1-C{ z$@enk+45dhEg7}RVUVHOP^sy2n7DnBPa?0FE~kMH^RfhuJu|79iw^;EVu2x6EORIT zh&}V-L3~^%b$16&r_Ji6SZ5KM0qU+csADnSU~?rKtR4#M@1@C!^JxVW%wSUjBt^?+ zK0+kupb!r9_8dqv%wL525BV!$(z&=oj2p_L$;$Fk~}CZ4yyEwdHp0DAUW%+IK9hj za&L(5ohdN$Xo6P<$T0@mELlm(S5&F{9#3;XgbyvSCG+r%BcD6)59nc180ozoh9~T0 zrWpv4JTmDI zTxEEO40E%!Q+Mrt18*j88`vb+ty(1{`G8~8@qkQQQ3>pE0QsNoiR%+FD|Eq6C9VYv zPo8e!<-)N$jYpe_3r5IQLU40_*$!FPurvx)T5+ymt~kYrBrCi((3H4tP~u>8QL5LLPaKw68pNvd zWkyv=CGm1kSov07!om#O0Y-qz-kY3{Y?VCAYhxS4g-unLpDaliZHd^qs4}(olDYA^ z?AQBn%~{)!!25uj!dLIhzDbubeOX_^iX(@=LQpg(4R4LzsnnuesP+5&URMBXYMUc& z^4Uz=VekJK*7t?y@T%QH=0c1;mrLF08aZ3Qgq%#Y`W%$F;`eU?8!H?+hEDu{Osts* zr**s;rqdS|&-oB+u^XwnPg|Kjlo4faBs-7^;;Y~RP{lh95St*X^v>7N(Qoy_`K>!o z)RmAfNE|{59OrTgb(@`a&nyC4`{<}8)}vig@Dhh(BAR>Xzk`&EyVEa7I4D;Z83z5T z4OY#TN2TM~I%+$!9Eyx?{{=E%UMHN=D+IfudxIcSYMF9TmV7eV1LpGkyiWVVO*|`n zMTOv~2jx#iuotmdkk-UWM-IcZ%)zTPg-68-fCTdyc_;iaR~*c3lvh#H6b6uA`_eol z5573NScE_@SAOn!aGH&zJ$_f^JZ_Ecs!gA@TSVq*+@HbGf*QP^I8oaKsFaB0)%x#> zO`8`S)LkY>p!c8U1j9)8lSQ;7qW@5$H`vur(TrFLMq@n>uEZ>dv^~12<>ufo#KH9c z(OUTax@)Y4$|EmXlu2P2RDbkymJY##48(1#l`b7hId-5 z!J&w^>DS%N49~o@1W#{%jM?;JAavWB6&9Xxt8YnW3ZARE5d`b|d_XZ?XMf&ye%lgE z9|2|)_<>3swuS>I0|frR85=-JsIAsp55+n3NvQ<;^Dd1zESwEt(zQX@3K%SO8k4o| z>xKGLM^Bh=B)M4QN%#;h0xHHi3f*{D0VywUNFD5gDmdo>04{DZ8YOMe`Z;|%I0SO;jKa7CA7Xo>~fjV;$6w>|Z%)%^p%ew1Xw^BH7yG#hro zGAcGsvsb%?9}&1yzU|qXgB`fRKN*>5(}gnA!X=;u4KoDQ3)cNRe$O9tmN#UHA)>ND zQoNlMuApOJ)I9c4i3^{+7*1V(_~eov-pVWUPgGt$hQ1c?n-<@RZW((0W}pFZ7(;dy z4r8$S4@}qj^vW=3)qR{HtA+8xZqH<(6}zp15E9OF1`~E?S(}q{qN*;$WOrVxGC7N= zZNSfC|HhDA#_A(1ba7$z(y5dBXsLnDo4RNcihOZTYnb2DWdh?a^!WivlhcMe_*&dq z|Ei>KvaPzOn_J|KgsO7$ep-PhQLD#LUnXhUEveMY%L}O&kzEo7xZH3sN z_0m_Thg7Vcu^nysWy~8XQz5=LtFR{ zYk;;ED#)QhP8?n$FMU!jx-RILBRRp_LWL5tjEUYeh^&d{aksm+z9`q~sTp-tecZKv#!!!;)qeh4ITT?JSpi5+6_-URem}H@U*e6 zQif115@XI`ep4=aro||~5uXNs6Cxv$JN#K;Pa0@+y-@2I#H=9e9%pRSB<7ZVL zm-R^%+QuGt)^1?raVe?57Yd*kNdNNez(Yz3;-wGJvhlVPJtz&1Hf3&Q%<7$A?h9c( z&u0hP5EGLSOEc{gNnWAVD=K-;2V&IYE1bbF>4TOvnHX0)->jl<87nx#d^|Bi;*t0h zynX5t`+52HX@1yTgDvw&J`uR&2P-Ag~wY}1RT_W4MR#E%N4%M8^J+EW>)wyBNmIwgY z=P$%2Z9S;b`|y}ycfS>&_{Rq^(cvuOY_lA~7>B<=n>p~Gx8zIZ8(S0S4DG$;gmwIO zM8N4ltyHF1XsUU{*#Cb%CJi1x$>|JX%9>3B?S=k{5g|GN4!o$d=$~}G&1ADP6H8(Z zFbPq_O>C-BHq>jl68Pib01?f+-ly z9d5o$%$Zc1NA_Fvu6P31^scRrJ(+hlRU^H0eYk}EgQzTm7kiHDZ(YeOF9Ln17##Hn zA@zfaSX-||$N;$v*ejhL|2tYixCfJ-EoqZLC(FFqAbI3ta{6F15tenqg8%$;3RNgS zciBj9+A?Ja)B4;ao(AA@dAk3chOK%jN?sfQp2#x3mV5bCk5Dzc=s1|XA-L+gZ8bup zX+Gf(cpH36r?nQ@;7bym8iO7|Hv1?!FE*t+E!yiW?C*9NB9RDh_J(GHs~E&THvuD+ z#zp7$!hfQc98!w{9y^#|X0p9>~my99CK$6dB^e2tvlLGi>?? zKFrZbR<6>c^2ek?xn(dF%E*^gG;*fK)L%djP8&dLb+Pj2<>sMkE0&tNuKFw!9rN_kY zg}sO@IYg_=4PsC()*^s_M#%Jimy`mrGdxhWxLRML(c_%HRdOCtvA+-9mGkuH=`@&n zY^9v6UA8Xj>EE7ieW9i87S%FK;DCf5ZwlWrO2$>^uSEWTU^Lox?Y|*G5RI&U@yjr$ z7oGIq-vc`U)AoARoBB!Q55-tn`FTR=?&Z^sg@qVQAZ=X4_aCsDUL_5Tab*ffW5>IL z6xb7HGOyru!;m8MU#wx=}D^Gm5uku1_;qREiAngSoB5@ZPyP5ynvElFOmVzGk z!>1vuTk(z_>!>LSPo)ku39Y&&{$Tn>4io+4D4fDw1(3NL_|p^^c)4ARtDh-2UVG<}e`#|~jt(LJtQN?RzPCAV6EAmDpW4o;LFXhs|0T#8 zz6J9)jOV$9F3oyskItE7xrLwX#=L!n2RLne&wDWRMffOk0*TXRVXSL?lCEW{vTbmM z0{N)Gv7&~HUQJhqfW`qcxsYF{Jspt?oD{n41mPlny4`#Bw9ViY>h7|Dzd@AOv?9Pk zBV>Q1CwLvm0?*AW9kxPnfrf->#cUoksJtMRaGrhV-2SHr;vJW;x(iQ=#YINXGSDc( zv4az6l`4HuYUtDpPjbaG9IJ(mugIkK3JDT2w_WNF6E_m^cRw%yv|cBOON|Av2;0Cz zkz4KFsDqjI7N~@mcFFkPXmoG+A5qLIQ(PowYlK<&WaSNdib_B?^!^d&<{7Bo=oEl0 z59IhY5b405hDxz4dl$z0YQPRv95RDcQDdUd>o|5QJkauA=(gVr0!2-Bo^=mmg^Whf z4}Af_Z8)^JXy?nw)0btLAOqf3PFq%;A1;&F`Pvj8gg%*bicC zy?WIy4ALWc1sS{3EC|68+3KSaKCh<4gTq z_SnKXIWqHl{t7d_R)yDhpu^gssxxzXSy?!yg?ZLWo@-vLiwTpVKs=8kY~{4-?nYc+ zs*>^`g!1sZiQIcYFrVYfy*cMXGTVkPh3MicO(Ge)v=W5zgF|c~I`+dtVP}94UccNL zJ@n9R)(s3+1bA`1ysb~Mc!E(~8!HyO5D>9ovWb;Yiy>W)mb>RSZ)Ae|uva#4nsu3B zK~M6cmJmyhdh(;3UvAAQ--8js2NMJTV$gx7*D<)ZDubPWE>*?(KI+$p#a<(EByu6n zest|lbY;_%#^c9|@g0bg94X9C>=i{2X&wvq;}t}kLYjcH4RwoolcFsLwg8!sTJ~lv z;^d#)K-FWz68?Mmn1P!=@vGUPfBrx6Jx`X1DhE2znkd6U{O?*2gc}f}1cMQXkuK41 z0*yL?e`?u+o{`ruN^kHAv+T)iQhE!kzPvF(OZsT_trP4oXqtfCBm^TH@rF^PCz0^) zD=e&uz!pa~Xwl^D03?*{6!)G{H>KVSs(z@_ZKCT>HUSZ@+}B%_~iAwjCfvet8y>mA(V{`_P)ZM!U8jVXzLsZImn~<0=WIoV0F4Z;};0le+k!%4Ad6sXssX8 zJp!s6n-u+|)V&%kd|eKqc+?tG70L99_XIr0zo8`ihJw{7dcODi5Eh&OF0=8^jnyi> zwBNUAezNcvW9vTTr+17>*rV*ywc)IExS#WjJ9Q_!=uR`UVCHFQFN!EXBrhRFnEGVN zcK7^kpoBJ>d=vE~pL95tJ3@5qUcLhV6nAIoB)?>m`oyr~n06isxpmB-6X~Dzd zVL+!2UwCe-;PnKBt{jY?^KjwiE*75wX{8o{mZR~GzZ8Ze(H$JY3|}QbG0SvB$Rx+} zac8La_(zZ7jqu~c`XpNC&0!s=fL~J(wDc%TfMy(RUiUBo>Au9Z0JNX1RHOHf%9j^p2{vvjbyx5c=Whv&G^c(8Jd-915xuV?E9VL6TmQJ}#1bqPH2zsE~N> ztuO?|YcC660dra%yyo{ZR0*hvS3x?vah2q1UGQSCUHKEBq4f~lNuA_xMG2lblycX; z43X4wyz=}aMBGaMd*7rS*ld_YS%fVbIwNj=} z2uKFOy{1l2%>{9DVLqa!rLKH-#;<#H;C7g^~1xBhg$THfq?WNSPvKtGRC1 zw1jHdr9%zWDn8$jb_O`?L={UR9?)gV(|AaR8GLCAanF!nvHNtvJ+ z%`89Z_I4^{!0sNwG>LzJc4B=J$<2r;4qEc*yFY+(wU(zLaKKsKynf1vqRg7eXL*@%5tR_3{sJ;UYu-FzgN(Zu+DY`T-JUFmg&70;}$c zz@p5@E~7*Srp!O`2DUqXM?RPxmC` z#QQdWMG8rCipGdVw@YxuFObg+Eo&VZ0i#QLz)-5>?~i~yMwi7}(U!sUGg9B&El{jo z{!9vph%Jw~IAYndhFJ@~>$VUVGmLqn8=(Rl;5L38NDI+__gvvtnElE~YnlmcyWhk$ zzjhCiz~3c0-+kI2egH1HgVE2b=lP^-4m}xH!Rgln#yx&8Uy|Pdk_6yYc}~mS&f+02&1c zo`hn>HzM{mLKBPZIH`_hgQD7PvFV70FAgKuL1g47F7c-FG)G5*re=WE z)|23ul0X2yKb9U+TS98~vs52=w}d2+2{}9O)zA9iG z$MnXK7&L-{^sEJ;6`CCl&X&4{y>O59Sp6X(0)RO6ASqv@5tnqL7%lP)N@MC(WPtyu z%KNx=^9r*jC6W>%HZO#LfTkPrq#j`aH<=%nbqHNpGG<}0A7b+vy>AhG>D~Z5m=;(X z_R;*)hgjZ8(}SPGsB!}Eot8_EuwuFoXBrmU&dh+s{uD(zLW7b3BxA2p58jXIp?m^P z$T!)G$<&g?{aiglRaUbyt2F!*YJyKQ}VV%+_KJQ1mpM*ROl;@r&def*j$gvZLKYNMuf;KgY*a$DD z$$^Y5W~pm8v-$|n%S#9#SD4w=rUQzZiCFIc373ggM!Ee4oCO3LfL=|>{RJWAg8j)z zCz>UgzJ5E(7zWh&<`$y;EZab)ATgz~80(HmkYi@VK2Tbid-yJg1fHYMDN&fIzC3yqX&O_TNZGd+ zHQ0ZQNg*e5T9i&KL8rFe^e-*SgBdU-?RcY?DjrF3B|=Le^rPR1r=|$L6`Z2S5A}3P zsKsx<(1@eTmCE9)Zz2<^81sV#N24d*)+OrNZBX}E=mrJnV=SCgn|-is%Hb%;kZCn4 z?83Ke(3wowZhK2ntj7*&Xr?_JX_;Ek%R1(KgpLQW>{e#3ho%>={XU?XIc|Q^mwN=# z-PLIO3rm$~o|$A|e!{hT#6G>q66o)&pAlW}sFj^+dgDUFRB7jJWi>1ZAN@QASQztr z5NNg(%7b_+&9VY50MRkTR_witsay9e;g{) zl!pveMg8=Ku}pin1uQvKok6V%KL^S2hsi(*-TT7G!;%dGAdE7nze>vXw0Oj>?lRV> z)zhIb%UDh2I7uN{ROnK}x?V!q9r&I!3G5Q1ymq)==|(5LcP_aulRD#T<2?|m+QruS z01Dk58M9H|t2-lGfFt_Lj?CfhMgHv`*}#g`gZs=>9RRjhj^#ND2%z{?niD|A&yq(|5$}EX+)+ZzeP)MEX zC>k-OV|a>0287juaGpzzQNg!r`B%uNHwjYfurOrNck)GRpu5QltDgvx%A0t^_A77m zi1TBvjVw%vEavko+3OG9SkP9n16p_$!n|j*b{9llS4gdfS35j$V!S6nzFyij&G-!m6|it4Jmr z{j&A*dK6t8p%7~W))iD3%W-zTK1pFe7)ANI%_0l4F6O?ybYMgf)2aNui`W zPA56TEAwsx3j><`11Uf!$MPhkE}!dc;_K!2u?ZPlMiu)N_sV+taD$l{MM5le;nb;2=0 z)kI9q#R%@ZYBfxDk`vhC@+Em_A<5HMaBwe1OXS6qjJCacq;s1xh04W$DO;?+i@mwZ zCo<2gvnMLMSb^{8E4fh4<9}rzXP`U03y9*psi_L=0){+;&%3xR!@EmkSnB%Z4%Dlb zw~vDAMC8cU(Vj=Xq*<^Gf8iVW^0hOD+^z9BRN$Aj^EzA%OEknxHf?1GR?+s@JLw0UCw2XpG_OUR<~{09dV*kJilZ1$Pdq=I70i^qU?Fb)I`gtYOG# z6x3H`TEXzT+Li~rDmQBxLB6IJ*63c5$MHkq;??R49Wt7LzqF>gW3X4}BqCsfM1x=2 z!{^~h=-l+_N5?6i-DByx7Gd)gerA5tE$*w3x5p~VSQv)>VF zevcg{1&-Avsc{wPWpU0j0UmVwjrPN)lg^?`Wbawc@5G5Ifrb%*l;1590Y?XJ)03e) z(#zHLz6oL=oxnYbrFr$(qY{VE8>=Syju}qV;AEJwz=AxYC>+}EUXZlAxEGX8N9r;MwuD~b^M|V$i;tH+MB|p<#Y-}3I?$Z8M;i2AuX!6pn zA*6vpBDEmdG=YPC^tvi`o~oLBy6Ff19#B`}EOCP8x!DWl$3aH2hU=dL_JfXCNgtCg z$Z{T^um*a{y*|jQ9}st|YTh>&SKU|QrxSJ>!%&6|CH1mCtxv zWaX%KEH1ffq8!=}f$1-WmLK+Ea&Z`Zy{9~pOah6Np!7;H2yr*OWYGWDyzI1B*l5N+LkqSqZlj(hz z0%>tTb1FKr%f0c=us8SOnx7}EYt85E6?`a$6d<9EVyb>IY-}txItm|&F{7>P^Cg9lJ?DNHBLXq@ zp0U&5Bv90+ki^4HnkmCgpWf{c?6n1JHTpVOtL`Bp4elEW_ZHl*m*t#HgCU^X3J~Fk zO##POW|NX%OPX$uxzL39yQFa2vI)6Qpg$H<3bMiiN0KV4oNr-B&WlNRzb02Al%a=q zk4hrFTI5pDs@RBgXXyV{@UMHfyt=oF9g}9clw2rQ?IG= zCAVr6sCG(?1BQVW&!)2vNp2rkS~vl4WFn}3X@I2Mu%y6y{W7r*XAXoi)wedmD0>OVkYZ(oq&OR?;=jNRUcz zK}zBS0?~rN$?JiL`0YiEgpJW{rnhD@gVT>cDi7}e`{4{%*KGUD`9V7m)>_&HIHxE4 zz@G-@@-zU?1>IG z>M6Na)Cs|WbKy;?MD1HJ`dmndJGSBtr*_QU$YhrX-7h}<2Fz6Wv%mYLSzDrmDLEk-}umpe zy14F!C0s1@R(=H|Tsw7sTd@@90Kp=~?U5PXiT*|7b&2e}yAuS6KXVyhzU^X!dcdo9 z_y^;?rC*N-fFe#t=QGE$G!Mv_pyhji$t z)l15j`2XlFZVD@*Fl9*PcN_Enyg<%AHZkm!vKWpyb-3Q(Y&zldabfsnnld8qkCkse zrs0dqsEYH*OI$h<*DZ#C3p;b|$j6JIjGhn@hprrMa)F;Q*X{>;j5@CYj8u}_Q+e`E zOT-tWhR6Y>3R?BhkRp!J&_O8tF$xjrGRYJQ4-uDRflxpv)k9!fWf8<}>j}@85f*aT ziQ2ncC!+o4R*AO3o*x8YV3nvkf)}b03ZaCRC(!Rz{E>dXi9yw%cf z927$BM!p{)uq7w%^iz(mZ8N>YQyqndsrdhog;CP$#&b}4Z7Ae9cQ@yj>LH!qY&B*L zKyT;3vVcjy?6o1nhDbzAqFCIo0t9iZ=|9erPK6;q;#AltZ=6y12&L4gDE-hWIF9dW zGD#;=5lUkO?gcR+OV?_TKuYxX4Xo1dgU@mli2S}8v5AavjfOyQSW-*Ke~2=0Y)?E1 zA&N`+vw`YaUciknw32;v@uwY_<}e566zXBdVNtpy<)B9LZfLwdYnJSt$?%8z-U1GK zqMOu>#)IQ(t4${^kqBac=BCk>6scZD{2TWEQl7dIUR4!5t3f5DqGEDOhv%*XC zx2Gta%RGYP17$a$$)j5u@!4g&AWK!FgI0T}3#MN^PWbQm#if@@24>EWeRm=j1iL-E z5Vjq|=6dZmP$DPuj2N~}s1&Q5hBpv{YU+!r>i(HjlhNU@c{(4&?T^fjt#hfxE3}+7 zq>=%)xM$|a>bjDVB381J?;rtIukJrutqdjJt4MC%`6hrR5)0V39k$cMxnXFaQl;JVah=fji&RTQX%4h5Z z;G_*D6GXZANS%nWS{flsB@pYS$JmDt;Hcn`4N8@F^(GCQaI3^|+Dk>O2`QcUc3)gWk6f$?FS)){_oD#ZWgZ z`@lLCq|Y?(u-!Bg#-9~f0!|cMMsCR}ly8pyV?831Qs9exfFC>2F*3P+pa6M)1e_EF zyq@tfCXJQh&uazdwuJ2Ndf(BAr>v^qG$6oNC6&9Q=6iBjLnU3{oL7Bbr6m>Nq)b-r z^ux+du@nt_MC9p-oh@6iavD2cQ!746p?D)MrP%A&bwerU50APif#i9C=QD96K&f*` z?lT#Q55SbGu1IuC+nIoyX8C9L7VQyjwij`Nv>BEz93=O)n9c4YHduz9o4Z945a_sO zuaU2X`xPM2wNgcXeRaG2@f>*~azrrNZSHaQrrg0cIG8#8#VZ1`sA;I}9~)I~4?c(u ziQeOls*^#Y%?wfL>u$XymR55X*&JmzJ{Zkqyahn`Y5upuKl`9+F@B9N*2G>z#o(=0 zhltg6{qr##5%x7=TTUQ8F!yDAWHpI2xjxXz=y5?N>BT?N%OO%KZMxSVh0g^5u($5l z1Z92B3*^B<1Mx}43ku1OyxQgmQEk;yuSMy*GJ#Ie)fx;^OiRkWB!;208F`}X+JP}K zfBp+Uk4CADdLsKZgja1+aHhxS3?JCyeLdKmm-%VPV&cO0LN!2$I6e9uzR~J(>ll*1>4t>M^k>5Vxu!z z(x$%1bCPDN7AXL0Gx>%tPgz7h`lRyLaPK_H$dAkOKOVysS32iL7ycq*SnI3QLarIw zC>`?cGHM8*UWSf@MYZ7gO4$NEI04+G!`hzG%AZ@dX8{f99zW8}u3)c}QaaH`Vm?(T zr>1VB^U2|H<5O`s4FFgjnmR4YH=Rr!@oPlvUPd+E%GOSL(hr)K&9dJLdnB{4o>W=( zF+EpE%jv|tZCX`*=Ko7KLnXUyQ_|Oh%tDBtB8@y0G2^W4^BVrHgH?UK!|2qVI{Y%Y zichsA5=|~qOxVXy#WisY2`<+9u;mREQCS-FEo)*!%U#}T5PsD~hbEPYmjM)$fpI?3 z4_eC=&&t(d2aKq;W~hO#$8RUN56#(*Azz_&+4)=b5#1S5=AXb8qd0S34}jY?Jhz#n zrmzU{&pJ@-Jk==Jq{>tu=Wdw{R6|fsVl=elMsAX7Xjpa(bc+wmC)Sn#T>DktN^c2{ zcI*g{UYt^t(ia%1y^^^rFE6u_>LJ|5A>}y{3b?Y^Wc>e+#{k33e?y1xf!Mzoc?Tp! zu1~?AKHC%3);I~-D}Ac3Kjqfhh@fGKxu7@l*c`I&W++V~N}QzT^B3#ot^Gu&jCsPo z`SHcO3wg;E`f^(Msb%RjT{F3Hr%gGH@AN^^))YT5GHtM~Z%VJ=S#a@BE&@Gnixnz3KPP$;y}346Gq?u;suNjSD)yii*b(zN`T_hv^_X{Pbv*a5Oi~^^HX(D1e%7zc zRr8Wt%^kXH$4z3r>$qyS1a|DpC7>L$v#fT&JO@l)c&Qj^c%0EV@)X)&n{??$1=zLj z?;rGoen!}V8e{UavA?v^mV57j$g3w%4tUraT4yUUE?phsD?QJ-s~Bg5gX;Yjy~M8w z#NSGtly3`?h%wMRhq40fN>TrkBTxCCdz`&diyao&(It|0DRJFq``k#rZF?00h2!4*SSl3Ono>q5)=cb=ipZbwLs1~H0 zhZ-+_peIp*$~J}IEf%B^Jd4b(>=S-o<&lX+{VwHFcg3HuZyy}B+5bqirq!w*XUcy- zdY9zeX>fqmLY@9qefxkVnLJV)PX;VI;r(xS;b>mbL*?v%8>n-V;sC%~+;_Y3g;T7e zKS#p>M9A0Rt_#gPtv)nY2Jn_Kc2(O!IyWTn8pmFwPFlnfjLLqI$CESDh~4OlFYJ!g z&*l#?T`&kfM2Ks^VgoD&3yd0kz05!)R4^78isWUuH*~9EnsCX2zmT%~Pi7!l?9J3O z_IlXl9`;c`rp5ILUOC$d#3eZddaU0z5>n5(Ua+zA7=eGV3+(nfiFHvypSO?;Sp;!G j25SI*m;rr=-1T;HsmkSj7h7*u{8YU)(eeTtx+5~`a`hxr literal 0 HcmV?d00001 diff --git a/apps/web/src/components/common/container/CollapsibleContent.tsx b/apps/web/src/components/common/container/CollapsibleContent.tsx old mode 100644 new mode 100755 diff --git a/apps/web/src/components/common/input/InputList.tsx b/apps/web/src/components/common/input/InputList.tsx old mode 100644 new mode 100755 diff --git a/apps/web/src/routes/index.tsx b/apps/web/src/routes/index.tsx index 4b79ed9..08f3f07 100755 --- a/apps/web/src/routes/index.tsx +++ b/apps/web/src/routes/index.tsx @@ -7,25 +7,61 @@ import LoginPage from "../app/login"; import { adminRoute } from "./admin-route"; import { CustomRouteObject } from "./types"; import { MainRoute } from "./main-route"; - +import HomePage from "../app/main/home/page"; +import StudentPage from "../app/main/student/page"; +import StudentTestPage from "../app/main/student/StudentTestPage"; +import CarPage from "../app/main/car/page"; +import MainLayout from "../app/main/layout/MainLayout"; +import ClubPage from "../app/main/car/Club"; +import DriverPage from "../app/main/car/Driver"; +import GamePage from "../app/main/car/Game"; +import SortiePage from "../app/main/car/Sortie"; export const routes: CustomRouteObject[] = [ { path: "/", - errorElement: , - handle: { - crumb() { - return 主页; - }, - }, + element: , children: [ - MainRoute, - adminRoute, + { + path: "/login", + element: , + }, + { + path: "/", + element: , + }, + { + path: "/student-test", + element: , + }, + { + path: "/student", + element: , + }, + { + path: "/car", + element: , + }, + { + path: "/club", + element: , + }, + { + path: "/driver", + element: , + }, + { + path: "/game", + element: , + }, + { + path: "/sortie", + element: , + }, + ], }, - { - path: "/login", - element: , - }, + + ]; -export const router = createBrowserRouter(routes); +export const router = createBrowserRouter(routes); \ No newline at end of file diff --git a/apps/web/src/routes/main-route.tsx b/apps/web/src/routes/main-route.tsx old mode 100644 new mode 100755 diff --git a/apps/web/src/utils/index.ts b/apps/web/src/utils/index.ts old mode 100644 new mode 100755 diff --git a/config/nginx/entrypoint.sh b/config/nginx/entrypoint.sh index ca557f8..542b552 100755 --- a/config/nginx/entrypoint.sh +++ b/config/nginx/entrypoint.sh @@ -14,7 +14,7 @@ done # Check if the index.html file exists before processing if [ -f "/usr/share/nginx/html/index.html" ]; then # Use envsubst to replace environment variable placeholders - envsubst < /usr/share/nginx/html/index.html > /usr/share/nginx/html/index.html.tmp + envsubst < /usr/share/nginx/html/index.template > /usr/share/nginx/html/index.html.tmp mv /usr/share/nginx/html/index.html.tmp /usr/share/nginx/html/index.html else echo "Info: /usr/share/nginx/html/index.html does not exist , skip replace env" diff --git a/docker-compose.example.yml b/docker-compose.example.yml index bb75926..e8e7f48 100755 --- a/docker-compose.example.yml +++ b/docker-compose.example.yml @@ -35,7 +35,7 @@ services: pgadmin: image: dpage/pgadmin4 ports: - - "8082:80" + - "8082:8090" environment: - PGADMIN_DEFAULT_EMAIL=insiinc@outlook.com - PGADMIN_DEFAULT_PASSWORD=Letusdoit000 @@ -64,7 +64,7 @@ services: # extra_hosts: # - "host.docker.internal:host-gateway" nginx: - image: nice-nginx:latest + image: nice-nginx:2.0 ports: - "80:80" volumes: @@ -74,7 +74,8 @@ services: - ./web-dist:/usr/share/nginx/html # 添加前端构建文件的挂载 - ./config/nginx/entrypoint.sh:/docker-entrypoint.sh environment: - - SERVER_IP=host.docker.internal + - SERVER_IP=192.168.0.14 + - SERVER_NAME=nice-playground entrypoint: ["/docker-entrypoint.sh"] extra_hosts: - "host.docker.internal:host-gateway" @@ -131,4 +132,4 @@ services: networks: default: - name: remooc + name: nice-network diff --git a/packages/common/prisma/schema.prisma b/packages/common/prisma/schema.prisma index 6f088a9..167d782 100755 --- a/packages/common/prisma/schema.prisma +++ b/packages/common/prisma/schema.prisma @@ -245,8 +245,8 @@ model PostAncestry { // 复合索引优化 // 索引建议 - } + model Message { id String @id @default(cuid()) url String? @@ -323,52 +323,157 @@ model Resource { @@index([type]) @@index([createdAt]) @@map("resource") - } -<<<<<<< HEAD - -======= - - ->>>>>>> de6e632ec69dd408a6c4e85d5cda01a1aa8e8276 //商品表 model Goods { id String @id @default(cuid()) // 商品ID name String @unique // 商品名称 - description String? // 商品描述 + description String? // 商品描述 price Float @default(0.0) // 商品价格 images String[] @default([]) // 商品图片 tags Tag[] @relation("GoodsTags") // 多对多关系 - reviews Review[] // 一对多关系 + reviews Review[] // 一对多关系 createdAt DateTime @default(now()) @map("created_at") // 创建时间 updatedAt DateTime @updatedAt @map("updated_at") // 更新时间 deletedAt DateTime? @map("deleted_at") // 删除时间,可为空 + @@index([name]) @@map("goods") } // 标签表 model Tag { - id String @id @default(cuid()) - name String @unique - goods Goods[] @relation("GoodsTags") - createdAt DateTime @default(now()) @map("created_at") - updatedAt DateTime @updatedAt @map("updated_at") - deletedAt DateTime? @map("deleted_at") + id String @id @default(cuid()) + name String @unique + goods Goods[] @relation("GoodsTags") + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @updatedAt @map("updated_at") + deletedAt DateTime? @map("deleted_at") + @@map("tag") } model Review { - id String @id @default(cuid()) - content String - rating Int @default(0) - goodsId String @map("goods_id") - goods Goods @relation(fields: [goodsId], references: [id]) - createdAt DateTime @default(now()) @map("created_at") - updatedAt DateTime @updatedAt @map("updated_at") - deletedAt DateTime? @map("deleted_at") + id String @id @default(cuid()) + content String + rating Int @default(0) + goodsId String @map("goods_id") + goods Goods @relation(fields: [goodsId], references: [id]) + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @updatedAt @map("updated_at") + deletedAt DateTime? @map("deleted_at") + @@index([goodsId]) @@index([rating]) @@map("review") -} \ No newline at end of file +} + +model Club { + id Int @id @default(autoincrement()) + name String? @unique + introduce String? + car Car[] + driver Driver[] + Game Game[] @relation("ClubGame") + createdAt DateTime? @default(now()) + updatedAt DateTime? @updatedAt + + @@index([name]) + @@map("club") +} + +model Driver { + id Int @id @default(autoincrement()) + name String? + sex String? + username String? + password String? + club Club? @relation(fields: [clubId], references: [id]) + clubId Int? @map("club_id") + parentId Int? + createdAt DateTime? @default(now()) + updatedAt DateTime? @updatedAt + + @@map("driver") + @@index([name]) +} + +model Car { + id Int @id @default(autoincrement()) + clubId Int? + name String? @unique + type String? + club Club? @relation(fields: [clubId], references: [id]) + createdAt DateTime? @default(now()) + updatedAt DateTime? @updatedAt + + @@map("car") + @@index([name]) +} + +model Sortie { + totaltime Float @unique + carId Int? + driverId Int? + score Float? @unique + car String? + driver String? + + @@map("sortie") + @@index([driverId]) +} + +model Game { + id Int @id @default(autoincrement()) + name String + club Club[] @relation("ClubGame") + clubId Int? + courseId Int? + score Float? + createdAt DateTime? @default(now()) + updatedAt DateTime? @updatedAt + + @@map("game") + @@index([name]) +} +model Class { + id Int @id @default(autoincrement()) + name String @unique + students Student[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Student { + id Int @id @default(autoincrement()) + name String? + class Class? @relation(fields: [classId], references: [id]) + classId Int? + scores Score[] + parentId Int? + createdAt DateTime? @default(now()) + updatedAt DateTime? @updatedAt +} + +model Course { + id Int @id @default(autoincrement()) + name String? @unique + scores Score[] + createdAt DateTime? @default(now()) + updatedAt DateTime? @updatedAt +} + +model Score { + id Int @id @default(autoincrement()) + student Student? @relation(fields: [studentId], references: [id]) + studentId Int? + course Course? @relation(fields: [courseId], references: [id]) + courseId Int? + score Float? + semester String? + createdAt DateTime? @default(now()) + updatedAt DateTime? @updatedAt + + @@unique([studentId, courseId, semester]) +} diff --git a/packages/common/src/enum.ts b/packages/common/src/enum.ts index 7f6630f..2d51872 100755 --- a/packages/common/src/enum.ts +++ b/packages/common/src/enum.ts @@ -46,6 +46,14 @@ export enum ObjectType { POST = "post", VISIT = "visit", RESOURCE = "resource", + STUDENT="student", + COURSE="course", + SCORE="score", + CAR="car", + DRIVER="driver", + CLUB="club", + GAME="game", + SORTIE="sortie" } export enum RolePerms { // Create Permissions 创建权限 diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts old mode 100644 new mode 100755 diff --git a/web-dist/index.html b/web-dist/index.html new file mode 100755 index 0000000..e94bca8 --- /dev/null +++ b/web-dist/index.html @@ -0,0 +1,25 @@ + + + + + + + + 信箱 + + + + + +
+ + +