From 52d297624d23b96bf37d60183a226195f3370eb1 Mon Sep 17 00:00:00 2001 From: GeekMaster Date: Thu, 4 Sep 2025 18:36:49 +0800 Subject: [PATCH] =?UTF-8?q?AI3D=20=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/core/types/ai3d.go | 6 +- api/handler/admin/ai3d_handler.go | 10 +- api/handler/ai3d_handler.go | 186 ++--------- api/service/ai3d/gitee_client.go | 118 ++++--- api/service/ai3d/service.go | 279 ++++++++++------- api/service/ai3d/tencent_client.go | 40 +-- api/service/oss/aliyun_oss.go | 8 +- api/service/oss/minio_oss.go | 8 +- api/service/oss/qiniu_oss.go | 4 +- api/service/oss/uploader.go | 8 +- api/service/oss/uploader_manager.go | 2 - api/store/model/ai3d_job.go | 32 +- api/store/vo/ai3d_job.go | 60 ++-- web/src/assets/css/admin/ai3d.scss | 145 +++++++++ web/src/assets/css/ai3d.scss | 12 +- web/src/assets/iconfont/iconfont.css | 14 +- web/src/assets/iconfont/iconfont.js | 2 +- web/src/assets/iconfont/iconfont.json | 17 +- web/src/assets/iconfont/iconfont.ttf | Bin 59020 -> 59036 bytes web/src/assets/iconfont/iconfont.woff | Bin 38484 -> 38492 bytes web/src/assets/iconfont/iconfont.woff2 | Bin 33340 -> 33400 bytes web/src/components/ThreeDPreview.vue | 285 +++++------------ web/src/store/ai3d.js | 114 +++---- web/src/views/AIThreeDCreate.vue | 65 ++-- web/src/views/admin/ai3d/AIThreeDConfig.vue | 8 +- web/src/views/admin/ai3d/AIThreeDJobs.vue | 288 +++++++----------- web/src/views/admin/jimeng/JimengConfig.vue | 83 +++-- web/src/views/admin/jimeng/JimengJobs.vue | 1 - .../admin/moderation/ModerationConfig.vue | 2 +- .../views/admin/moderation/ModerationList.vue | 1 - 30 files changed, 829 insertions(+), 969 deletions(-) create mode 100644 web/src/assets/css/admin/ai3d.scss diff --git a/api/core/types/ai3d.go b/api/core/types/ai3d.go index 7953c2ae..41666219 100644 --- a/api/core/types/ai3d.go +++ b/api/core/types/ai3d.go @@ -31,12 +31,12 @@ const ( // AI3DJobResult 3D任务结果 type AI3DJobResult struct { - JobId string `json:"job_id"` // 任务ID + TaskId string `json:"task_id"` // 任务ID Status string `json:"status"` // 任务状态 - Progress int `json:"progress"` // 任务进度 (0-100) FileURL string `json:"file_url"` // 3D模型文件URL PreviewURL string `json:"preview_url"` // 预览图片URL ErrorMsg string `json:"error_msg"` // 错误信息 + RawData string `json:"raw_data"` // 原始数据 } // AI3DModel 3D模型配置 @@ -60,6 +60,6 @@ type AI3DJobRequest struct { const ( AI3DJobStatusPending = "pending" // 等待中 AI3DJobStatusProcessing = "processing" // 处理中 - AI3DJobStatusCompleted = "completed" // 已完成 + AI3DJobStatusSuccess = "success" // 已完成 AI3DJobStatusFailed = "failed" // 失败 ) diff --git a/api/handler/admin/ai3d_handler.go b/api/handler/admin/ai3d_handler.go index 0c335748..f99db909 100644 --- a/api/handler/admin/ai3d_handler.go +++ b/api/handler/admin/ai3d_handler.go @@ -96,6 +96,9 @@ func (h *AI3DHandler) GetJobList(c *gin.Context) { if err != nil { continue } + utils.JsonDecode(job.Params, &jobVo.Params) + jobVo.CreatedAt = job.CreatedAt.Unix() + jobVo.UpdatedAt = job.UpdatedAt.Unix() jobList = append(jobList, jobVo) } @@ -128,6 +131,9 @@ func (h *AI3DHandler) GetJobDetail(c *gin.Context) { resp.ERROR(c, "获取任务详情失败") return } + utils.JsonDecode(job.Params, &jobVo.Params) + jobVo.CreatedAt = job.CreatedAt.Unix() + jobVo.UpdatedAt = job.UpdatedAt.Unix() resp.SUCCESS(c, jobVo) } @@ -167,14 +173,14 @@ func (h *AI3DHandler) GetStats(c *gin.Context) { var stats struct { Pending int64 `json:"pending"` Processing int64 `json:"processing"` - Completed int64 `json:"completed"` + Success int64 `json:"success"` Failed int64 `json:"failed"` } // 统计各状态的任务数量 h.db.Model(&model.AI3DJob{}).Where("status = ?", "pending").Count(&stats.Pending) h.db.Model(&model.AI3DJob{}).Where("status = ?", "processing").Count(&stats.Processing) - h.db.Model(&model.AI3DJob{}).Where("status = ?", "completed").Count(&stats.Completed) + h.db.Model(&model.AI3DJob{}).Where("status = ?", "success").Count(&stats.Success) h.db.Model(&model.AI3DJob{}).Where("status = ?", "failed").Count(&stats.Failed) resp.SUCCESS(c, stats) diff --git a/api/handler/ai3d_handler.go b/api/handler/ai3d_handler.go index 1c580c48..d889a324 100644 --- a/api/handler/ai3d_handler.go +++ b/api/handler/ai3d_handler.go @@ -5,7 +5,6 @@ import ( "geekai/core" "geekai/core/middleware" "geekai/core/types" - "geekai/service" "geekai/service/ai3d" "geekai/store/model" "geekai/store/vo" @@ -19,14 +18,12 @@ import ( type AI3DHandler struct { BaseHandler - service *ai3d.Service - userService *service.UserService + service *ai3d.Service } -func NewAI3DHandler(app *core.AppServer, db *gorm.DB, service *ai3d.Service, userService *service.UserService) *AI3DHandler { +func NewAI3DHandler(app *core.AppServer, db *gorm.DB, service *ai3d.Service) *AI3DHandler { return &AI3DHandler{ - service: service, - userService: userService, + service: service, BaseHandler: BaseHandler{ App: app, DB: db, @@ -47,30 +44,14 @@ func (h *AI3DHandler) RegisterRoutes() { group.POST("generate", h.Generate) group.GET("jobs", h.JobList) group.GET("jobs/mock", h.ListMock) // 演示数据接口 - group.GET("job/:id", h.JobDetail) group.GET("job/delete", h.DeleteJob) - group.GET("download/:id", h.Download) } } // Generate 创建3D生成任务 func (h *AI3DHandler) Generate(c *gin.Context) { - var request struct { - // 通用参数 - Type types.AI3DTaskType `json:"type" binding:"required"` // API类型 (tencent/gitee) - Model string `json:"model" binding:"required"` // 3D模型类型 - Prompt string `json:"prompt"` // 文本提示词 - ImageURL string `json:"image_url"` // 输入图片URL - FileFormat string `json:"file_format"` // 输出文件格式 - // 腾讯3d专有参数 - EnablePBR bool `json:"enable_pbr"` // 是否开启PBR材质 - // Gitee3d专有参数 - Texture bool `json:"texture"` // 是否开启纹理 - Seed int `json:"seed"` // 随机种子 - NumInferenceSteps int `json:"num_inference_steps"` //迭代次数 - GuidanceScale float64 `json:"guidance_scale"` //引导系数 - OctreeResolution int `json:"octree_resolution"` // 3D 渲染精度,越高3D 细节越丰富 - } + var request vo.AI3DJobParams + if err := c.ShouldBindJSON(&request); err != nil { resp.ERROR(c, "参数错误") return @@ -90,17 +71,17 @@ func (h *AI3DHandler) Generate(c *gin.Context) { logger.Infof("request: %+v", request) - // // 获取用户ID - // userId := h.GetLoginUserId(c) - // // 创建任务 - // job, err := h.service.CreateJob(uint(userId), request) - // if err != nil { - // resp.ERROR(c, fmt.Sprintf("创建任务失败: %v", err)) - // return - // } + // 获取用户ID + userId := h.GetLoginUserId(c) + // 创建任务 + job, err := h.service.CreateJob(uint(userId), request) + if err != nil { + resp.ERROR(c, fmt.Sprintf("创建任务失败: %v", err)) + return + } resp.SUCCESS(c, gin.H{ - "job_id": 0, + "job_id": job.Id, "message": "任务创建成功", }) } @@ -132,133 +113,24 @@ func (h *AI3DHandler) JobList(c *gin.Context) { resp.SUCCESS(c, jobList) } -// JobDetail 获取任务详情 -func (h *AI3DHandler) JobDetail(c *gin.Context) { - userId := h.GetLoginUserId(c) - if userId == 0 { - resp.ERROR(c, "用户未登录") - return - } - - idStr := c.Param("id") - id, err := strconv.ParseUint(idStr, 10, 32) - if err != nil { - resp.ERROR(c, "任务ID格式错误") - return - } - - job, err := h.service.GetJobById(uint(id)) - if err != nil { - resp.ERROR(c, "任务不存在") - return - } - - // 检查权限 - if job.UserId != uint(userId) { - resp.ERROR(c, "无权限访问此任务") - return - } - - // 转换为VO - jobVO := vo.AI3DJob{ - Id: job.Id, - UserId: job.UserId, - Type: job.Type, - Power: job.Power, - TaskId: job.TaskId, - FileURL: job.FileURL, - PreviewURL: job.PreviewURL, - Model: job.Model, - Status: job.Status, - ErrMsg: job.ErrMsg, - Params: job.Params, - CreatedAt: job.CreatedAt.Unix(), - UpdatedAt: job.UpdatedAt.Unix(), - } - - resp.SUCCESS(c, jobVO) -} - // DeleteJob 删除任务 func (h *AI3DHandler) DeleteJob(c *gin.Context) { userId := h.GetLoginUserId(c) - id := c.Query("id") - if id == "" { + id := h.GetInt(c, "id", 0) + if id == 0 { resp.ERROR(c, "任务ID不能为空") return } - var job model.AI3DJob - err := h.DB.Where("id = ?", id).Where("user_id = ?", userId).First(&job).Error + err := h.service.DeleteUserJob(uint(id), uint(userId)) if err != nil { - resp.ERROR(c, err.Error()) + resp.ERROR(c, "删除任务失败") return } - err = h.DB.Delete(&job).Error - if err != nil { - resp.ERROR(c, err.Error()) - return - } - - // 失败的任务要退回算力 - if job.Status == types.AI3DJobStatusFailed { - err = h.userService.IncreasePower(userId, job.Power, model.PowerLog{ - Type: types.PowerRefund, - Model: job.Model, - Remark: fmt.Sprintf("删除任务,退回%d算力", job.Power), - }) - if err != nil { - resp.ERROR(c, err.Error()) - return - } - } - resp.SUCCESS(c, gin.H{"message": "删除成功"}) } -// Download 下载3D模型 -func (h *AI3DHandler) Download(c *gin.Context) { - userId := h.GetLoginUserId(c) - if userId == 0 { - resp.ERROR(c, "用户未登录") - return - } - - idStr := c.Param("id") - id, err := strconv.ParseUint(idStr, 10, 32) - if err != nil { - resp.ERROR(c, "任务ID格式错误") - return - } - - job, err := h.service.GetJobById(uint(id)) - if err != nil { - resp.ERROR(c, "任务不存在") - return - } - - // 检查权限 - if job.UserId != uint(userId) { - resp.ERROR(c, "无权限访问此任务") - return - } - - // 检查任务状态 - if job.Status != types.AI3DJobStatusCompleted { - resp.ERROR(c, "任务尚未完成") - return - } - - if job.FileURL == "" { - resp.ERROR(c, "模型文件不存在") - return - } - - // 重定向到下载链接 - c.Redirect(302, job.FileURL) -} - // GetConfigs 获取3D生成配置 func (h *AI3DHandler) GetConfigs(c *gin.Context) { var config model.Config @@ -281,8 +153,6 @@ func (h *AI3DHandler) GetConfigs(c *gin.Context) { config3d.Tencent.Models = models["tencent"] } - logger.Info("config3d: ", config3d) - resp.SUCCESS(c, config3d) } @@ -299,9 +169,9 @@ func (h *AI3DHandler) ListMock(c *gin.Context) { FileURL: "https://img.r9it.com/R03TQZ7PZ386RGL7PTMNGFOHAJW15WYF.glb", PreviewURL: "/static/upload/2025/9/1756873317505073.png", Model: "gitee-3d-v1", - Status: types.AI3DJobStatusCompleted, + Status: types.AI3DJobStatusSuccess, ErrMsg: "", - Params: `{"prompt":"一只可爱的小猫","image_url":"","texture":true,"seed":42}`, + Params: vo.AI3DJobParams{Prompt: "一只可爱的小猫", ImageURL: "", Texture: true, Seed: 42}, CreatedAt: 1704067200, // 2024-01-01 00:00:00 UpdatedAt: 1704067800, // 2024-01-01 00:10:00 }, @@ -316,7 +186,7 @@ func (h *AI3DHandler) ListMock(c *gin.Context) { Model: "tencent-3d-v2", Status: types.AI3DJobStatusProcessing, ErrMsg: "", - Params: `{"prompt":"一个现代建筑模型","image_url":"","enable_pbr":true}`, + Params: vo.AI3DJobParams{Prompt: "一个现代建筑模型", ImageURL: "", EnablePBR: true}, CreatedAt: 1704070800, // 2024-01-01 01:00:00 UpdatedAt: 1704070800, // 2024-01-01 01:00:00 }, @@ -331,7 +201,7 @@ func (h *AI3DHandler) ListMock(c *gin.Context) { Model: "gitee-3d-v1", Status: types.AI3DJobStatusPending, ErrMsg: "", - Params: `{"prompt":"一辆跑车模型","image_url":"https://example.com/car.jpg","texture":false}`, + Params: vo.AI3DJobParams{Prompt: "一辆跑车模型", ImageURL: "https://example.com/car.jpg", Texture: false}, CreatedAt: 1704074400, // 2024-01-01 02:00:00 UpdatedAt: 1704074400, // 2024-01-01 02:00:00 }, @@ -346,7 +216,7 @@ func (h *AI3DHandler) ListMock(c *gin.Context) { Model: "tencent-3d-v1", Status: types.AI3DJobStatusFailed, ErrMsg: "模型生成失败:输入图片质量不符合要求", - Params: `{"prompt":"一个机器人模型","image_url":"https://example.com/robot.jpg","enable_pbr":false}`, + Params: vo.AI3DJobParams{Prompt: "一个机器人模型", ImageURL: "https://example.com/robot.jpg", EnablePBR: false}, CreatedAt: 1704078000, // 2024-01-01 03:00:00 UpdatedAt: 1704078600, // 2024-01-01 03:10:00 }, @@ -359,9 +229,9 @@ func (h *AI3DHandler) ListMock(c *gin.Context) { FileURL: "https://ai.gitee.com/a8c1af8e-26e9-4ca6-aa5c-6d4ba86bfdac", PreviewURL: "https://ai.gitee.com/a8c1af8e-26e9-4ca6-aa5c-6d4ba86bfdac", Model: "gitee-3d-v2", - Status: types.AI3DJobStatusCompleted, + Status: types.AI3DJobStatusSuccess, ErrMsg: "", - Params: `{"prompt":"一个复杂的机械装置","image_url":"","texture":true,"octree_resolution":512}`, + Params: vo.AI3DJobParams{Prompt: "一个复杂的机械装置", ImageURL: "", Texture: true, OctreeResolution: 512}, CreatedAt: 1704081600, // 2024-01-01 04:00:00 UpdatedAt: 1704082200, // 2024-01-01 04:10:00 }, @@ -376,17 +246,17 @@ func (h *AI3DHandler) ListMock(c *gin.Context) { Model: "tencent-3d-v2", Status: types.AI3DJobStatusProcessing, ErrMsg: "", - Params: `{"prompt":"一个科幻飞船","image_url":"","enable_pbr":true}`, + Params: vo.AI3DJobParams{Prompt: "一个科幻飞船", ImageURL: "", EnablePBR: true}, CreatedAt: 1704085200, // 2024-01-01 05:00:00 UpdatedAt: 1704085200, // 2024-01-01 05:00:00 }, } // 创建分页响应 - mockResponse := vo.ThreeDJobList{ + mockResponse := vo.Page{ Page: 1, PageSize: 10, - Total: len(mockJobs), + Total: int64(len(mockJobs)), Items: mockJobs, } diff --git a/api/service/ai3d/gitee_client.go b/api/service/ai3d/gitee_client.go index f83650b8..d150dacd 100644 --- a/api/service/ai3d/gitee_client.go +++ b/api/service/ai3d/gitee_client.go @@ -16,36 +16,43 @@ type Gitee3DClient struct { } type Gitee3DParams struct { - Prompt string `json:"prompt"` // 文本提示词 - ImageURL string `json:"image_url"` // 输入图片URL - ResultFormat string `json:"result_format"` // 输出格式 + Model string `json:"model"` // 模型名称 + FileFormat string `json:"file_format,omitempty"` // 文件格式(Step1X-3D、Hi3DGen模型适用),支持 glb 和 stl + Type string `json:"type,omitempty"` // 输出格式(Hunyuan3D-2模型适用) + ImageURL string `json:"image_url"` // 输入图片URL + Texture bool `json:"texture,omitempty"` // 是否开启纹理 + Seed int `json:"seed,omitempty"` // 随机种子 + NumInferenceSteps int `json:"num_inference_steps,omitempty"` //迭代次数 + GuidanceScale float64 `json:"guidance_scale,omitempty"` //引导系数 + OctreeResolution int `json:"octree_resolution,omitempty"` // 3D 渲染精度,越高3D 细节越丰富 } type Gitee3DResponse struct { - Code int `json:"code"` - Message string `json:"message"` - Data struct { - TaskID string `json:"task_id"` - } `json:"data"` + TaskID string `json:"task_id"` + Output struct { + FileURL string `json:"file_url,omitempty"` + PreviewURL string `json:"preview_url,omitempty"` + } `json:"output"` + Status string `json:"status"` + CreatedAt any `json:"created_at"` + StartedAt any `json:"started_at"` + CompletedAt any `json:"completed_at"` + Urls struct { + Get string `json:"get"` + Cancel string `json:"cancel"` + } `json:"urls"` } -type Gitee3DQueryResponse struct { - Code int `json:"code"` +type GiteeErrorResponse struct { + Error int `json:"error"` Message string `json:"message"` - Data struct { - Status string `json:"status"` - Progress int `json:"progress"` - ResultURL string `json:"result_url"` - PreviewURL string `json:"preview_url"` - ErrorMsg string `json:"error_msg"` - } `json:"data"` } func NewGitee3DClient(sysConfig *types.SystemConfig) *Gitee3DClient { return &Gitee3DClient{ httpClient: req.C().SetTimeout(time.Minute * 3), config: sysConfig.AI3D.Gitee, - apiURL: "https://ai.gitee.com/v1/async/image-to-3d", + apiURL: "https://ai.gitee.com/v1", } } @@ -53,73 +60,62 @@ func (c *Gitee3DClient) UpdateConfig(config types.Gitee3DConfig) { c.config = config } +func (c *Gitee3DClient) GetConfig() *types.Gitee3DConfig { + return &c.config +} + // SubmitJob 提交3D生成任务 func (c *Gitee3DClient) SubmitJob(params Gitee3DParams) (string, error) { - requestBody := map[string]any{ - "prompt": params.Prompt, - "image_url": params.ImageURL, - "result_format": params.ResultFormat, - } + var giteeResp Gitee3DResponse response, err := c.httpClient.R(). SetHeader("Authorization", "Bearer "+c.config.APIKey). SetHeader("Content-Type", "application/json"). - SetBody(requestBody). + SetBody(params). + SetSuccessResult(&giteeResp). Post(c.apiURL + "/async/image-to-3d") if err != nil { return "", fmt.Errorf("failed to submit gitee 3D job: %v", err) } - var giteeResp Gitee3DResponse - if err := json.Unmarshal(response.Bytes(), &giteeResp); err != nil { - return "", fmt.Errorf("failed to parse gitee response: %v", err) + if giteeResp.TaskID == "" { + var giteeErr GiteeErrorResponse + _ = json.Unmarshal(response.Bytes(), &giteeErr) + return "", fmt.Errorf("no task ID returned from gitee 3D API: %s", giteeErr.Message) } - if giteeResp.Code != 0 { - return "", fmt.Errorf("gitee API error: %s", giteeResp.Message) - } - - if giteeResp.Data.TaskID == "" { - return "", fmt.Errorf("no task ID returned from gitee 3D API") - } - - return giteeResp.Data.TaskID, nil + return giteeResp.TaskID, nil } // QueryJob 查询任务状态 func (c *Gitee3DClient) QueryJob(taskId string) (*types.AI3DJobResult, error) { + var giteeResp Gitee3DResponse + apiURL := fmt.Sprintf("%s/task/%s", c.apiURL, taskId) response, err := c.httpClient.R(). SetHeader("Authorization", "Bearer "+c.config.APIKey). - Get(fmt.Sprintf("%s/task/%s/get", c.apiURL, taskId)) + SetSuccessResult(&giteeResp). + Get(apiURL) if err != nil { return nil, fmt.Errorf("failed to query gitee 3D job: %v", err) } - var giteeResp Gitee3DQueryResponse - if err := json.Unmarshal(response.Bytes(), &giteeResp); err != nil { - return nil, fmt.Errorf("failed to parse gitee query response: %v", err) - } - - if giteeResp.Code != 0 { - return nil, fmt.Errorf("gitee API error: %s", giteeResp.Message) - } - result := &types.AI3DJobResult{ - JobId: taskId, - Status: c.convertStatus(giteeResp.Data.Status), - Progress: giteeResp.Data.Progress, + TaskId: taskId, + Status: c.convertStatus(giteeResp.Status), } - // 根据状态设置结果 - switch giteeResp.Data.Status { - case "completed": - result.FileURL = giteeResp.Data.ResultURL - result.PreviewURL = giteeResp.Data.PreviewURL - case "failed": - result.ErrorMsg = giteeResp.Data.ErrorMsg + if giteeResp.TaskID == "" { + var giteeErr GiteeErrorResponse + _ = json.Unmarshal(response.Bytes(), &giteeErr) + result.ErrorMsg = giteeErr.Message + } else if giteeResp.Status == "success" { + result.FileURL = giteeResp.Output.FileURL } + result.RawData = string(response.Bytes()) + + logger.Debugf("gitee 3D job response: %+v", result) return result, nil } @@ -127,13 +123,13 @@ func (c *Gitee3DClient) QueryJob(taskId string) (*types.AI3DJobResult, error) { // convertStatus 转换Gitee状态到系统状态 func (c *Gitee3DClient) convertStatus(giteeStatus string) string { switch giteeStatus { - case "pending": + case "waiting": return types.AI3DJobStatusPending - case "processing": + case "in_progress": return types.AI3DJobStatusProcessing - case "completed": - return types.AI3DJobStatusCompleted - case "failed": + case "success": + return types.AI3DJobStatusSuccess + case "failure", "cancelled": return types.AI3DJobStatusFailed default: return types.AI3DJobStatusPending diff --git a/api/service/ai3d/service.go b/api/service/ai3d/service.go index ba0731ad..3ffc13c5 100644 --- a/api/service/ai3d/service.go +++ b/api/service/ai3d/service.go @@ -1,13 +1,18 @@ package ai3d import ( - "encoding/json" "fmt" "geekai/core/types" logger2 "geekai/logger" + "geekai/service" + "geekai/service/oss" "geekai/store" "geekai/store/model" "geekai/store/vo" + "geekai/utils" + "net/url" + "path/filepath" + "strings" "time" "github.com/go-redis/redis/v8" @@ -22,52 +27,81 @@ type Service struct { taskQueue *store.RedisQueue tencentClient *Tencent3DClient giteeClient *Gitee3DClient + userService *service.UserService + uploadManager *oss.UploaderManager } // NewService 创建3D生成服务 -func NewService(db *gorm.DB, redisCli *redis.Client, tencentClient *Tencent3DClient, giteeClient *Gitee3DClient) *Service { +func NewService(db *gorm.DB, redisCli *redis.Client, tencentClient *Tencent3DClient, giteeClient *Gitee3DClient, userService *service.UserService, uploadManager *oss.UploaderManager) *Service { return &Service{ db: db, taskQueue: store.NewRedisQueue("3D_Task_Queue", redisCli), tencentClient: tencentClient, giteeClient: giteeClient, + userService: userService, + uploadManager: uploadManager, } } // CreateJob 创建3D生成任务 -func (s *Service) CreateJob(userId uint, request vo.AI3DJobCreate) (*model.AI3DJob, error) { - // 创建任务记录 - job := &model.AI3DJob{ - UserId: userId, - Type: request.Type, - Power: request.Power, - Model: request.Model, - Status: types.AI3DJobStatusPending, +func (s *Service) CreateJob(userId uint, request vo.AI3DJobParams) (*model.AI3DJob, error) { + switch request.Type { + case types.AI3DTaskTypeGitee: + if s.giteeClient == nil { + return nil, fmt.Errorf("模力方舟 3D 服务未初始化") + } + if !s.giteeClient.GetConfig().Enabled { + return nil, fmt.Errorf("模力方舟 3D 服务未启用") + } + + case types.AI3DTaskTypeTencent: + if s.tencentClient == nil { + return nil, fmt.Errorf("腾讯云 3D 服务未初始化") + } + if !s.tencentClient.GetConfig().Enabled { + return nil, fmt.Errorf("腾讯云 3D 服务未启用") + } + + default: + return nil, fmt.Errorf("不支持的 3D 服务类型: %s", request.Type) } - // 序列化参数 - params := map[string]any{ - "prompt": request.Prompt, - "image_url": request.ImageURL, - "model": request.Model, - "power": request.Power, + // 创建任务记录 + job := &model.AI3DJob{ + UserId: userId, + Type: request.Type, + Power: request.Power, + Model: request.Model, + Status: types.AI3DJobStatusPending, + PreviewURL: request.ImageURL, } - paramsJSON, _ := json.Marshal(params) - job.Params = string(paramsJSON) + + job.Params = utils.JsonEncode(request) // 保存到数据库 if err := s.db.Create(job).Error; err != nil { return nil, fmt.Errorf("failed to create 3D job: %v", err) } + // 更新用户算力 + err := s.userService.DecreasePower(userId, job.Power, model.PowerLog{ + Type: types.PowerConsume, + Model: job.Model, + Remark: fmt.Sprintf("创建3D任务,消耗%d算力", job.Power), + }) + if err != nil { + return nil, fmt.Errorf("failed to update user power: %v", err) + } + // 将任务添加到队列 - s.PushTask(job) + request.JobId = job.Id + s.PushTask(request) return job, nil } // PushTask 将任务添加到队列 -func (s *Service) PushTask(job *model.AI3DJob) { +func (s *Service) PushTask(job vo.AI3DJobParams) { logger.Infof("add a new 3D task to the queue: %+v", job) if err := s.taskQueue.RPush(job); err != nil { logger.Errorf("push 3D task to queue failed: %v", err) @@ -76,72 +110,70 @@ func (s *Service) PushTask(job *model.AI3DJob) { // Run 启动任务处理器 func (s *Service) Run() { - // 将数据库中未完成的任务加载到队列 - var jobs []model.AI3DJob - s.db.Where("status IN ?", []string{types.AI3DJobStatusPending, types.AI3DJobStatusProcessing}).Find(&jobs) - for _, job := range jobs { - s.PushTask(&job) - } - logger.Info("Starting 3D job consumer...") go func() { for { - var job model.AI3DJob - err := s.taskQueue.LPop(&job) + var params vo.AI3DJobParams + err := s.taskQueue.LPop(¶ms) if err != nil { logger.Errorf("taking 3D task with error: %v", err) continue } - logger.Infof("handle a new 3D task: %+v", job) + logger.Infof("handle a new 3D task: %+v", params) go func() { - if err := s.processJob(&job); err != nil { + if err := s.processJob(¶ms); err != nil { logger.Errorf("error processing 3D job: %v", err) - s.updateJobStatus(&job, types.AI3DJobStatusFailed, 0, err.Error()) + s.updateJobStatus(params.JobId, types.AI3DJobStatusFailed, err.Error()) } }() } }() + + go s.pollJobStatus() } // processJob 处理3D任务 -func (s *Service) processJob(job *model.AI3DJob) error { +func (s *Service) processJob(params *vo.AI3DJobParams) error { // 更新状态为处理中 - s.updateJobStatus(job, types.AI3DJobStatusProcessing, 10, "") - - // 解析参数 - var params map[string]any - if err := json.Unmarshal([]byte(job.Params), ¶ms); err != nil { - return fmt.Errorf("failed to parse job params: %v", err) - } + s.updateJobStatus(params.JobId, types.AI3DJobStatusProcessing, "") var taskId string var err error // 根据类型选择客户端 - switch job.Type { - case "tencent": + switch params.Type { + case types.AI3DTaskTypeTencent: if s.tencentClient == nil { return fmt.Errorf("tencent 3D client not initialized") } tencentParams := Tencent3DParams{ - Prompt: s.getString(params, "prompt"), - ImageURL: s.getString(params, "image_url"), - ResultFormat: job.Model, - EnablePBR: false, + Prompt: params.Prompt, + ImageURL: params.ImageURL, + ResultFormat: params.FileFormat, + EnablePBR: params.EnablePBR, } taskId, err = s.tencentClient.SubmitJob(tencentParams) - case "gitee": + case types.AI3DTaskTypeGitee: if s.giteeClient == nil { return fmt.Errorf("gitee 3D client not initialized") } giteeParams := Gitee3DParams{ - Prompt: s.getString(params, "prompt"), - ImageURL: s.getString(params, "image_url"), - ResultFormat: job.Model, + Model: params.Model, + Texture: params.Texture, + Seed: params.Seed, + NumInferenceSteps: params.NumInferenceSteps, + GuidanceScale: params.GuidanceScale, + OctreeResolution: params.OctreeResolution, + ImageURL: params.ImageURL, + } + if params.Model == "Hunyuan3D-2" { + giteeParams.Type = strings.ToLower(params.FileFormat) + } else { + giteeParams.FileFormat = strings.ToLower(params.FileFormat) } taskId, err = s.giteeClient.SubmitJob(giteeParams) default: - return fmt.Errorf("unsupported 3D API type: %s", job.Type) + return fmt.Errorf("unsupported 3D API type: %s", params.Type) } if err != nil { @@ -149,43 +181,65 @@ func (s *Service) processJob(job *model.AI3DJob) error { } // 更新任务ID - job.TaskId = taskId - s.db.Model(job).Update("task_id", taskId) - - // 开始轮询任务状态 - go s.pollJobStatus(job) + s.db.Model(model.AI3DJob{}).Where("id = ?", params.JobId).Update("task_id", taskId) return nil } // pollJobStatus 轮询任务状态 -func (s *Service) pollJobStatus(job *model.AI3DJob) { +func (s *Service) pollJobStatus() { + // 10秒轮询一次 ticker := time.NewTicker(10 * time.Second) defer ticker.Stop() - for { - select { - case <-ticker.C: - result, err := s.queryJobStatus(job) + for range ticker.C { + var jobs []model.AI3DJob + s.db.Where("status IN (?)", []string{types.AI3DJobStatusProcessing, types.AI3DJobStatusPending}).Find(&jobs) + if len(jobs) == 0 { + logger.Debug("no 3D jobs to poll, sleep 10s") + continue + } + + for _, job := range jobs { + // 15 分钟超时 + if job.CreatedAt.Before(time.Now().Add(-20 * time.Minute)) { + s.updateJobStatus(job.Id, types.AI3DJobStatusFailed, "task timeout") + continue + } + + result, err := s.queryJobStatus(&job) if err != nil { logger.Errorf("failed to query job status: %v", err) continue } - // 更新进度 - s.updateJobStatus(job, result.Status, result.Progress, result.ErrorMsg) - - // 如果任务完成或失败,停止轮询 - if result.Status == types.AI3DJobStatusCompleted || result.Status == types.AI3DJobStatusFailed { - if result.Status == types.AI3DJobStatusCompleted { - // 更新结果文件URL - s.db.Model(job).Updates(map[string]interface{}{ - "img_url": result.FileURL, - "preview_url": result.PreviewURL, - }) - } - return + updates := map[string]any{ + "status": result.Status, + "raw_data": result.RawData, + "err_msg": result.ErrorMsg, } + if result.FileURL != "" { + // 下载文件到本地 + url, err := s.uploadManager.GetUploadHandler().PutUrlFile(result.FileURL, getFileExt(result.FileURL), false) + if err != nil { + logger.Errorf("failed to download file: %v", err) + continue + } + updates["file_url"] = url + logger.Infof("download file: %s", url) + } + if result.PreviewURL != "" { + url, err := s.uploadManager.GetUploadHandler().PutUrlFile(result.PreviewURL, getFileExt(result.PreviewURL), false) + if err != nil { + logger.Errorf("failed to download preview image: %v", err) + continue + } + updates["preview_url"] = url + logger.Infof("download preview image: %s", url) + } + + s.db.Model(&model.AI3DJob{}).Where("id = ?", job.Id).Updates(updates) + } } } @@ -193,12 +247,12 @@ func (s *Service) pollJobStatus(job *model.AI3DJob) { // queryJobStatus 查询任务状态 func (s *Service) queryJobStatus(job *model.AI3DJob) (*types.AI3DJobResult, error) { switch job.Type { - case "tencent": + case types.AI3DTaskTypeTencent: if s.tencentClient == nil { return nil, fmt.Errorf("tencent 3D client not initialized") } return s.tencentClient.QueryJob(job.TaskId) - case "gitee": + case types.AI3DTaskTypeGitee: if s.giteeClient == nil { return nil, fmt.Errorf("gitee 3D client not initialized") } @@ -209,19 +263,12 @@ func (s *Service) queryJobStatus(job *model.AI3DJob) (*types.AI3DJobResult, erro } // updateJobStatus 更新任务状态 -func (s *Service) updateJobStatus(job *model.AI3DJob, status string, progress int, errMsg string) { - updates := map[string]interface{}{ - "status": status, - "progress": progress, - "updated_at": time.Now(), - } - if errMsg != "" { - updates["err_msg"] = errMsg - } +func (s *Service) updateJobStatus(jobId uint, status string, errMsg string) error { - if err := s.db.Model(job).Updates(updates).Error; err != nil { - logger.Errorf("failed to update job status: %v", err) - } + return s.db.Model(model.AI3DJob{}).Where("id = ?", jobId).Updates(map[string]any{ + "status": status, + "err_msg": errMsg, + }).Error } // GetJobList 获取任务列表 @@ -254,10 +301,10 @@ func (s *Service) GetJobList(userId uint, page, pageSize int) (*vo.Page, error) Model: job.Model, Status: job.Status, ErrMsg: job.ErrMsg, - Params: job.Params, CreatedAt: job.CreatedAt.Unix(), UpdatedAt: job.UpdatedAt.Unix(), } + _ = utils.JsonDecode(job.Params, &jobVO.Params) jobList = append(jobList, jobVO) } @@ -269,29 +316,34 @@ func (s *Service) GetJobList(userId uint, page, pageSize int) (*vo.Page, error) }, nil } -// GetJobById 根据ID获取任务 -func (s *Service) GetJobById(id uint) (*model.AI3DJob, error) { - var job model.AI3DJob - if err := s.db.Where("id = ?", id).First(&job).Error; err != nil { - return nil, err - } - return &job, nil -} - // DeleteJob 删除任务 -func (s *Service) DeleteJob(id uint, userId uint) error { +func (s *Service) DeleteUserJob(id uint, userId uint) error { var job model.AI3DJob - if err := s.db.Where("id = ? AND user_id = ?", id, userId).First(&job).Error; err != nil { + err := s.db.Where("id = ?", id).Where("user_id = ?", userId).First(&job).Error + if err != nil { return err } - // 如果任务已完成,退还算力 - if job.Status == types.AI3DJobStatusCompleted { - // TODO: 实现算力退还逻辑 - logger2.GetLogger().Infof("should refund power %d for user %d", job.Power, userId) + tx := s.db.Begin() + err = tx.Delete(&job).Error + if err != nil { + return err } - return s.db.Delete(&job).Error + // 失败的任务要退回算力 + if job.Status == types.AI3DJobStatusFailed { + err = s.userService.IncreasePower(userId, job.Power, model.PowerLog{ + Type: types.PowerRefund, + Model: job.Model, + Remark: fmt.Sprintf("删除任务,退回%d算力", job.Power), + }) + if err != nil { + tx.Rollback() + return err + } + } + tx.Commit() + return nil } // GetSupportedModels 获取支持的模型列表 @@ -316,12 +368,15 @@ func (s *Service) UpdateConfig(config types.AI3DConfig) { } } -// getString 从map中获取字符串值 -func (s *Service) getString(params map[string]interface{}, key string) string { - if val, ok := params[key]; ok { - if str, ok := val.(string); ok { - return str - } +// getFileExt 获取文件扩展名 +func getFileExt(fileURL string) string { + parse, err := url.Parse(fileURL) + if err != nil { + return "" } - return "" + ext := filepath.Ext(parse.Path) + if ext == "" { + return ".glb" + } + return ext } diff --git a/api/service/ai3d/tencent_client.go b/api/service/ai3d/tencent_client.go index 998159b6..4b971936 100644 --- a/api/service/ai3d/tencent_client.go +++ b/api/service/ai3d/tencent_client.go @@ -3,6 +3,7 @@ package ai3d import ( "fmt" "geekai/core/types" + "geekai/utils" tencent3d "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ai3d/v20250513" tencentcloud "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -58,6 +59,10 @@ func (c *Tencent3DClient) UpdateConfig(config types.Tencent3DConfig) error { return nil } +func (c *Tencent3DClient) GetConfig() *types.Tencent3DConfig { + return &c.config +} + // SubmitJob 提交3D生成任务 func (c *Tencent3DClient) SubmitJob(params Tencent3DParams) (string, error) { request := tencent3d.NewSubmitHunyuanTo3DJobRequest() @@ -111,42 +116,39 @@ func (c *Tencent3DClient) QueryJob(jobId string) (*types.AI3DJobResult, error) { } result := &types.AI3DJobResult{ - JobId: jobId, - Status: *response.Response.Status, - Progress: 0, + TaskId: jobId, } // 根据状态设置进度 switch *response.Response.Status { case "WAIT": - result.Status = "pending" - result.Progress = 10 + result.Status = types.AI3DJobStatusPending case "RUN": - result.Status = "processing" - result.Progress = 50 + result.Status = types.AI3DJobStatusProcessing case "DONE": - result.Status = "completed" - result.Progress = 100 + result.Status = types.AI3DJobStatusSuccess // 处理结果文件 if len(response.Response.ResultFile3Ds) > 0 { - for _, file := range response.Response.ResultFile3Ds { - if file.Url != nil { - result.FileURL = *file.Url - } - if file.PreviewImageUrl != nil { - result.PreviewURL = *file.PreviewImageUrl - } - // TODO 取第一个文件 + // 取第一个文件 + file := response.Response.ResultFile3Ds[0] + if file.Url != nil { + result.FileURL = *file.Url + } + if file.PreviewImageUrl != nil { + result.PreviewURL = *file.PreviewImageUrl } } case "FAIL": - result.Status = "failed" - result.Progress = 0 + result.Status = types.AI3DJobStatusFailed if response.Response.ErrorMessage != nil { result.ErrorMsg = *response.Response.ErrorMessage } } + logger.Debugf("tencent 3D job result: %+v", *response.Response) + + result.RawData = utils.JsonEncode(response.Response) + return result, nil } diff --git a/api/service/oss/aliyun_oss.go b/api/service/oss/aliyun_oss.go index 8c9b6602..d5acff2a 100644 --- a/api/service/oss/aliyun_oss.go +++ b/api/service/oss/aliyun_oss.go @@ -32,11 +32,9 @@ func NewAliYunOss(sysConfig *types.SystemConfig, appConfig *types.AppConfig) (*A s := &AliYunOss{ proxyURL: appConfig.ProxyURL, } - if sysConfig.OSS.Active == AliYun { - err := s.UpdateConfig(sysConfig.OSS.AliYun) - if err != nil { - logger.Errorf("阿里云OSS初始化失败: %v", err) - } + err := s.UpdateConfig(sysConfig.OSS.AliYun) + if err != nil { + logger.Warnf("阿里云OSS初始化失败: %v", err) } return s, nil diff --git a/api/service/oss/minio_oss.go b/api/service/oss/minio_oss.go index 0dcebf21..0961dd87 100644 --- a/api/service/oss/minio_oss.go +++ b/api/service/oss/minio_oss.go @@ -32,11 +32,9 @@ type MiniOss struct { func NewMiniOss(sysConfig *types.SystemConfig, appConfig *types.AppConfig) (*MiniOss, error) { s := &MiniOss{proxyURL: appConfig.ProxyURL} - if sysConfig.OSS.Active == Minio { - err := s.UpdateConfig(sysConfig.OSS.Minio) - if err != nil { - logger.Errorf("MinioOSS初始化失败: %v", err) - } + err := s.UpdateConfig(sysConfig.OSS.Minio) + if err != nil { + logger.Warnf("MinioOSS初始化失败: %v", err) } return s, nil } diff --git a/api/service/oss/qiniu_oss.go b/api/service/oss/qiniu_oss.go index c3ded24d..88d917ae 100644 --- a/api/service/oss/qiniu_oss.go +++ b/api/service/oss/qiniu_oss.go @@ -37,9 +37,7 @@ func NewQiNiuOss(sysConfig *types.SystemConfig, appConfig *types.AppConfig) *QiN s := &QiNiuOss{ proxyURL: appConfig.ProxyURL, } - if sysConfig.OSS.Active == QiNiu { - s.UpdateConfig(sysConfig.OSS.QiNiu) - } + s.UpdateConfig(sysConfig.OSS.QiNiu) return s } diff --git a/api/service/oss/uploader.go b/api/service/oss/uploader.go index 09de5cc1..255bcfe0 100644 --- a/api/service/oss/uploader.go +++ b/api/service/oss/uploader.go @@ -9,10 +9,10 @@ package oss import "github.com/gin-gonic/gin" -const Local = "LOCAL" -const Minio = "MINIO" -const QiNiu = "QINIU" -const AliYun = "ALIYUN" +const Local = "local" +const Minio = "minio" +const QiNiu = "qiniu" +const AliYun = "aliyun" type File struct { Name string `json:"name"` diff --git a/api/service/oss/uploader_manager.go b/api/service/oss/uploader_manager.go index 2f81c937..dc437178 100644 --- a/api/service/oss/uploader_manager.go +++ b/api/service/oss/uploader_manager.go @@ -9,7 +9,6 @@ package oss import ( "geekai/core/types" - "strings" logger2 "geekai/logger" ) @@ -28,7 +27,6 @@ func NewUploaderManager(sysConfig *types.SystemConfig, local *LocalStorage, aliy if sysConfig.OSS.Active == "" { sysConfig.OSS.Active = Local } - sysConfig.OSS.Active = strings.ToLower(sysConfig.OSS.Active) return &UploaderManager{ active: sysConfig.OSS.Active, diff --git a/api/store/model/ai3d_job.go b/api/store/model/ai3d_job.go index 429f459d..6f46dbb8 100644 --- a/api/store/model/ai3d_job.go +++ b/api/store/model/ai3d_job.go @@ -1,21 +1,25 @@ package model -import "time" +import ( + "geekai/core/types" + "time" +) type AI3DJob struct { - Id uint `gorm:"column:id;primaryKey;autoIncrement" json:"id"` - UserId uint `gorm:"column:user_id;type:int(11);not null;comment:用户ID" json:"user_id"` - Type string `gorm:"column:type;type:varchar(20);not null;comment:API类型 (tencent/gitee)" json:"type"` - Power int `gorm:"column:power;type:int(11);not null;comment:消耗算力" json:"power"` - TaskId string `gorm:"column:task_id;type:varchar(100);comment:第三方任务ID" json:"task_id"` - FileURL string `gorm:"column:file_url;type:varchar(1024);comment:生成的3D模型文件地址" json:"file_url"` - PreviewURL string `gorm:"column:preview_url;type:varchar(1024);comment:预览图片地址" json:"preview_url"` - Model string `gorm:"column:model;type:varchar(50);comment:使用的3D模型类型" json:"model"` - Status string `gorm:"column:status;type:varchar(20);not null;default:pending;comment:任务状态" json:"status"` - ErrMsg string `gorm:"column:err_msg;type:varchar(1024);comment:错误信息" json:"err_msg"` - Params string `gorm:"column:params;type:text;comment:任务参数(JSON格式)" json:"params"` - CreatedAt time.Time `gorm:"column:created_at;type:datetime;not null" json:"created_at"` - UpdatedAt time.Time `gorm:"column:updated_at;type:datetime;not null" json:"updated_at"` + Id uint `gorm:"column:id;primaryKey;autoIncrement" json:"id"` + UserId uint `gorm:"column:user_id;type:int(11);not null;comment:用户ID" json:"user_id"` + Type types.AI3DTaskType `gorm:"column:type;type:varchar(20);not null;comment:API类型 (tencent/gitee)" json:"type"` + Power int `gorm:"column:power;type:int(11);not null;comment:消耗算力" json:"power"` + TaskId string `gorm:"column:task_id;type:varchar(100);comment:第三方任务ID" json:"task_id"` + FileURL string `gorm:"column:file_url;type:varchar(1024);comment:生成的3D模型文件地址" json:"file_url"` + PreviewURL string `gorm:"column:preview_url;type:varchar(1024);comment:预览图片地址" json:"preview_url"` + Model string `gorm:"column:model;type:varchar(50);comment:使用的3D模型类型" json:"model"` + Status string `gorm:"column:status;type:varchar(20);not null;default:pending;comment:任务状态" json:"status"` + ErrMsg string `gorm:"column:err_msg;type:varchar(1024);comment:错误信息" json:"err_msg"` + Params string `gorm:"column:params;type:text;comment:任务参数(JSON格式)" json:"params"` + RawData string `gorm:"column:raw_data;type:text;comment:API返回的原始数据" json:"raw_data"` + CreatedAt time.Time `gorm:"column:created_at;type:datetime;not null" json:"created_at"` + UpdatedAt time.Time `gorm:"column:updated_at;type:datetime;not null" json:"updated_at"` } func (m *AI3DJob) TableName() string { diff --git a/api/store/vo/ai3d_job.go b/api/store/vo/ai3d_job.go index c7599d0d..7610da9c 100644 --- a/api/store/vo/ai3d_job.go +++ b/api/store/vo/ai3d_job.go @@ -1,33 +1,39 @@ package vo +import "geekai/core/types" + type AI3DJob struct { - Id uint `json:"id"` - UserId uint `json:"user_id"` - Type string `json:"type"` - Power int `json:"power"` - TaskId string `json:"task_id"` - FileURL string `json:"file_url"` - PreviewURL string `json:"preview_url"` - Model string `json:"model"` - Status string `json:"status"` - ErrMsg string `json:"err_msg"` - Params string `json:"params"` - CreatedAt int64 `json:"created_at"` - UpdatedAt int64 `json:"updated_at"` + Id uint `json:"id"` + UserId uint `json:"user_id"` + Type types.AI3DTaskType `json:"type"` + Power int `json:"power"` + TaskId string `json:"task_id"` + FileURL string `json:"file_url"` + PreviewURL string `json:"preview_url"` + Model string `json:"model"` + Status string `json:"status"` + ErrMsg string `json:"err_msg"` + Params AI3DJobParams `json:"params"` + CreatedAt int64 `json:"created_at"` + UpdatedAt int64 `json:"updated_at"` } -type AI3DJobCreate struct { - Type string `json:"type" binding:"required"` // API类型 (tencent/gitee) - Model string `json:"model" binding:"required"` // 3D模型类型 - Prompt string `json:"prompt"` // 文本提示词 - ImageURL string `json:"image_url"` // 输入图片URL - Power int `json:"power" binding:"required"` // 消耗算力 -} - -type ThreeDJobList struct { - Page int `json:"page"` - PageSize int `json:"page_size"` - Total int `json:"total"` - List []AI3DJob `json:"list"` - Items []AI3DJob `json:"items"` +// AI3DJobParams 创建3D任务请求 +type AI3DJobParams struct { + // 通用参数 + JobId uint `json:"job_id,omitempty"` // 任务ID + Type types.AI3DTaskType `json:"type,omitempty"` // API类型 (tencent/gitee) + Model string `json:"model,omitempty"` // 3D模型类型 + Prompt string `json:"prompt,omitempty"` // 文本提示词 + ImageURL string `json:"image_url,omitempty"` // 输入图片URL + FileFormat string `json:"file_format,omitempty"` // 输出文件格式 + Power int `json:"power,omitempty"` // 消耗算力 + // 腾讯3d专有参数 + EnablePBR bool `json:"enable_pbr,omitempty"` // 是否开启PBR材质 + // Gitee3d专有参数 + Texture bool `json:"texture,omitempty"` // 是否开启纹理 + Seed int `json:"seed,omitempty"` // 随机种子 + NumInferenceSteps int `json:"num_inference_steps,omitempty"` //迭代次数 + GuidanceScale float64 `json:"guidance_scale,omitempty"` //引导系数 + OctreeResolution int `json:"octree_resolution"` // 3D 渲染精度,越高3D 细节越丰富 } diff --git a/web/src/assets/css/admin/ai3d.scss b/web/src/assets/css/admin/ai3d.scss new file mode 100644 index 00000000..dfc4a988 --- /dev/null +++ b/web/src/assets/css/admin/ai3d.scss @@ -0,0 +1,145 @@ +.admin-threed-jobs { + padding: 20px; + + .page-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 24px; + + h2 { + margin: 0; + color: var(--theme-text-color-primary); + } + } + + .search-section { + background: var(--card-bg); + padding: 20px; + border-radius: 8px; + margin-bottom: 20px; + box-shadow: var(--el-box-shadow, 0 2px 4px rgba(0, 0, 0, 0.1)); + + .el-form-item { + margin-bottom: 0; + .el-select__wrapper { + height: 36px; + line-height: 36px; + } + } + } + + .stats-section { + margin-bottom: 20px; + + .stat-card { + background: var(--card-bg); + padding: 20px; + border-radius: 8px; + box-shadow: var(--el-box-shadow, 0 2px 4px rgba(0, 0, 0, 0.1)); + display: flex; + align-items: center; + gap: 16px; + + .stat-icon { + width: 48px; + height: 48px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + + i { + font-size: 24px; + color: white; + } + + &.pending { + background: #e6a23c; + } + + &.processing { + background: #409eff; + } + + &.completed { + background: #67c23a; + } + + &.failed { + background: #f56c6c; + } + } + + .stat-content { + .stat-number { + font-size: 24px; + font-weight: bold; + color: var(--theme-text-color-primary); + margin-bottom: 4px; + } + + .stat-label { + font-size: 14px; + color: var(--theme-text-color-secondary); + } + } + } + } + + .table-section { + background: var(--card-bg); + border-radius: 8px; + box-shadow: var(--el-box-shadow, 0 2px 4px rgba(0, 0, 0, 0.1)); + overflow: hidden; + } + + .pagination-section { + padding: 20px; + text-align: center; + } + + .task-detail { + .task-params, + .task-result, + .task-error { + margin-top: 20px; + + h4 { + margin: 0 0 12px 0; + color: var(--theme-text-color-primary); + font-size: 16px; + } + + .params-content { + background: var(--card-bg); + padding: 12px; + border-radius: 6px; + border: 1px solid var(--line-box); + } + } + + .result-links { + display: flex; + gap: 12px; + } + } + + .preview-container { + text-align: center; + } + + // 3D 模型预览弹窗 + .model-preview-dialog { + .el-dialog__body { + padding: 0 0 16px 0; + background: var(--el-bg-color-overlay); + } + + .model-preview-wrapper { + height: calc(100vh - 125px); + padding: 12px; + background: var(--card-bg); + } + } +} diff --git a/web/src/assets/css/ai3d.scss b/web/src/assets/css/ai3d.scss index c91ed909..7a191c18 100644 --- a/web/src/assets/css/ai3d.scss +++ b/web/src/assets/css/ai3d.scss @@ -288,8 +288,11 @@ align-items: center; justify-content: center; color: var(--theme-text-color-secondary); - min-height: 120px; + min-height: 200px; + max-height: 200px; + min-width: 200px; max-width: 200px; + border: 1px solid var(--line-box); .preview-image { width: 100%; @@ -542,15 +545,14 @@ .preview-container { width: 100%; - height: 500px; - min-height: 500px; + height: calc(100vh - 125px); background: var(--chat-wel-bg); border-radius: 8px; position: relative; .three-container { width: 100%; - height: 500px; + height: 100%; background: var(--chat-wel-bg); border-radius: 8px; display: flex; @@ -561,7 +563,7 @@ .preview-placeholder { width: 100%; - height: 500px; + min-height: 500px; background: var(--chat-wel-bg); border-radius: 8px; display: flex; diff --git a/web/src/assets/iconfont/iconfont.css b/web/src/assets/iconfont/iconfont.css index 494e152f..f7f73129 100644 --- a/web/src/assets/iconfont/iconfont.css +++ b/web/src/assets/iconfont/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 4125778 */ - src: url('iconfont.woff2?t=1756786244728') format('woff2'), - url('iconfont.woff?t=1756786244728') format('woff'), - url('iconfont.ttf?t=1756786244728') format('truetype'); + src: url('iconfont.woff2?t=1756954977612') format('woff2'), + url('iconfont.woff?t=1756954977612') format('woff'), + url('iconfont.ttf?t=1756954977612') format('truetype'); } .iconfont { @@ -14,7 +14,11 @@ } .icon-cube:before { - content: "\e876"; + content: "\e72c"; +} + +.icon-tag:before { + content: "\e657"; } .icon-tencent:before { @@ -45,7 +49,7 @@ content: "\e652"; } -.icon-suanli:before { +.icon-power:before { content: "\e651"; } diff --git a/web/src/assets/iconfont/iconfont.js b/web/src/assets/iconfont/iconfont.js index 644ac30a..f93ed5a1 100644 --- a/web/src/assets/iconfont/iconfont.js +++ b/web/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_4125778='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}h=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=a.document,z=!1,v(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,p())})}function p(){z||(z=!0,i())}function v(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(v,50)}p()}})(window); \ No newline at end of file +window._iconfont_svg_string_4125778='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}h=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=a.document,z=!1,v(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,p())})}function p(){z||(z=!0,i())}function v(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(v,50)}p()}})(window); \ No newline at end of file diff --git a/web/src/assets/iconfont/iconfont.json b/web/src/assets/iconfont/iconfont.json index c9bc9e62..d3660737 100644 --- a/web/src/assets/iconfont/iconfont.json +++ b/web/src/assets/iconfont/iconfont.json @@ -6,11 +6,18 @@ "description": "", "glyphs": [ { - "icon_id": "34453337", - "name": "3D会场", + "icon_id": "544492", + "name": "cube", "font_class": "cube", - "unicode": "e876", - "unicode_decimal": 59510 + "unicode": "e72c", + "unicode_decimal": 59180 + }, + { + "icon_id": "5072110", + "name": "tag", + "font_class": "tag", + "unicode": "e657", + "unicode_decimal": 58967 }, { "icon_id": "3547761", @@ -64,7 +71,7 @@ { "icon_id": "25677845", "name": "算力", - "font_class": "suanli", + "font_class": "power", "unicode": "e651", "unicode_decimal": 58961 }, diff --git a/web/src/assets/iconfont/iconfont.ttf b/web/src/assets/iconfont/iconfont.ttf index a875fdff55a761ba986f5013e115b63c7450c80b..2be98cba83a1f73bbbd2dfe815b1429983c08838 100644 GIT binary patch delta 3700 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 delta 3733 zcmai$dr(y88OEQp%L2N>vMe_dxq~Q(sN4iayrH5Zq7s6NB3_8WOBB(FaZN%Rn;46d zHmxPbn8aFZZH(3=mdSKdCe6h-jsv#S8Z~L=-IZ~ylSynf75jX=^^gA3?wQ{?-#L5E z?4Iv?-sgEcKezAw+}@t!-QSjd6$t17LiVj~dU8!?|Gp5wa|QUMrg3%ss{HP!+W=fA z`Hj5bKJPljaTiH#T;II?`vnhv4_G$=o4;veL;a1a_s#&}t9Y$tef{=L*57QU9LMnf z#0~Z9SBJeZ@onIXT;9KS)5a|!&F9O9@`h`jK;W(YT`7~#!Q#DS%qIs9EO$-(4$c5x z0KUEw-~I6T;Ld}MA^)(q^E?rbceTHn}4UK+Rn`+3+0Mp--#=Br*p zfc-FU-Gki-M6gtML^$#~<~T-KEgj8{5M$irO3;S@U1ie`+!573U0h{9PsgG9WF_wYm1<82Iw z2m9g1SiFW1`~pA1c6gscJbsEHIE2O6i(PmLZ^DZ$7>6w6;s6p5fqbmRFbv`{1j50k zuwy6oAssQ;gh#Or8F(KnF&?Qn!Wo~B=dl%q_%XuJhNqEe_Gr@N| zN&|zuLwJHvXW$}1C`AL83u0Hea1bikz$Jt@6fP!&KV#ssLV^@7 zFeF&vQbPuL&5k$K@JIn0xc(5QLM1@>7Y)<|g!OBnIv}A6bpmlIR173cp>`l{g(`xC zE7TLjqrf|rg9wEpgG4Hn8zf4h@F39&B?w``8z@G|P=&ID#3~dhWSBy!LgEyP7BXC+ zd?E3G*X*cdNPu32HlYbY<|woy$XtcS1evGMq9CS12+ayIU!iS5DisJDk6uKnDtUsY&Le?mB zPRKe1+sw3VP-v%+jmm%#nTH517V?BbvxRI{XuFVY3Jn-y)|t?XA;xG3O&RixLVJch ztI((+ZN$qRJsV;kB6M$vQ81y8Ltaqm=n%8Egx(G@Z%yd(kPd}@4>_pN`5~_=%m9ed z5n&oYUQ?J0tpCG2A&dx!xsfm|Aa5y*4aiZ20Rk~9CyWxvF@>Q5IioOMAiq->G>{J! zm>2nj!t8-`55W01)A^CYK!W^HVKhNLRv1!{&lJWL|E555qE`3GO3!X$)`4;h$=@NqT_Oh@?kE6hpwIPC@|CVZS` z1G5vp!wORrzT*n>6h6L$0p3^+dKHE&e1BFLxA0w67`*U(r7(iwyQMIU;ipCnjAi(f z6$Ui?nF^yC{w#%|4L^;{!1#v0h`(=kOmg@aE6jBGS13$(_}3~p%;Vz<6CeH-#k7BZ zs@}jZ0RHC{_5<*9?G5Y<;Qvfvj{yH=h24S|{=f2suyKI@3xzEN{5KRf6Y$?u*jB** zcZCfG{I?ah8sO~%u<5`J{wV|758N1{un|EY#|E|}=wl`Iy~OorcY?lm74|9Uqk0YO zSkTv{nCA8_&kgKiaF5>`*w0v2-T*)`&&_A2eNVuN0KX&0amdjf)ErzDd^GsZpz=ZY z2G=>`o#%#hhopwCah1AuxGscwNy<;oJ z9vOFYeD?Uux!>jm=QZcu&acYv%)ed`Q_xfxUbwUHgTiko6i(PR;cQV%(Ym62MP0>V z#ihl2i@%xJGV#`=QIlFqGD=QP4l8|U%F9#kOxrNMWJcSJb7g1CuFtHSd2!atS+{4` zl!unrm3PglopWJs+1#Fab@RTe$f@X_zj=OlrMI;5%}W1*T??l!Jh-T8ar)vN)rr+T zkF?ixJ(^rwQoFDA*plEST}xY*b}y?~cC@atZcp9S zCphhaz=Iz9ZhI(eA(IY}OG{%Vc*Z4I@m8ceA}}Z=d5o29<+*e73zEh~Me~x&YXznR zC8v+D=jKng@(Uc1(RpbuE3&}iL$*Md6>9Mj8^0^DTvl|!sZi%#cSNiwAjEmk?TPi+ zUiZXVZrA<6&HxUqaE=Dw-`#7ya>>@y-{-jN46&Tfe}$#G`#Bmi_`WMGthcw<`aYqb?)@1*P7W{2Q+M5xw@nL%i^HGEnDk1G(C3u#V_3s3;za= CU!SD_ diff --git a/web/src/assets/iconfont/iconfont.woff b/web/src/assets/iconfont/iconfont.woff index 6d0a267bd1a9c60bc726b1e8010ba40d0b08ecae..ff153c0d62856bc99def006cea62efe137a7bbba 100644 GIT binary patch delta 37933 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�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

t^IlrOug2d6}l5 z=TEd^HiZ!a`<`bemI3G@zTbxbh3NoUWIJFyW4q(j%g3XF6LcayER52Ba!ODt`BRTM zacjYmPl3J{tRvAA#)1PN=uuBg`(vBI_M_kM0z0vG?oyuMJPV>Il6958fwLVh57HD& zh?NsFZ*mif!|YLj>UOSuucDuAer6BE&&%-1i%8a=~iumJeI9tgE7X)PV2)7R7ssBkI>I=L-t(Px7qLzE{M`%<)$HqCS;ivH|C2&MZL zUSS1+MStdao?F<~don%UpGvkTdCr$8KyNgWoDCBGvSE%oe(zj_XkHWk2LSQhZf^~q@ zjV3)mj-$`P*0HW|Qzgw6>_7vhhjitK3x(nQOMfs5nMmsa?^t-kjA6&zW5vJg#9j)* z{A9HWarG-Kx1J`XoHe(kzAe z4l5qFc0d3MS;Xy|@y|dP_m~1xXP71>xwYVMk^*{zFc%SI{owzvMzTvb4Z4r5hw3S3bXIGg zahpJ)UTX@$DGP&(yB;aoFD#nc1K$Yd$XPpUgM+o5XMJliaO66=)pm5`;F14W44gGF zp>X_!sdN2*Mzp$iV4{81)>Z9>ny?6STHYWqaa!IWurM)k7YE#PIFeJjvK3Dis{^Hu zRqgGoItuAn!U*kN$H{ZRLo&=V<_hL6=APgj7{_YixRB=yRILy8x7LCcxyoX)KsEkK zICnyB;K3^fZ|S*C;Gv4?rcCM_0wn~VfI${0s@fQT$Ab-e=pS`Xsa0u~VDE9bX`dn@ z2BCsnk?-otZ<8gW5kchM0*|l6yOUSsy1H_&+|G)c#7go6h55W7ioA$1yFtT}C}=z( zf_L?8kyGg@Y#Rhsqo<$!(56Rih>9Re7=XXgy&Ip^o%84NUCTjR$2``Dqd7Bo(vm7h%Fz_YSRvj<_=+Yda%W`H|R>Q268$zp~;C#ZsGXp9l z*%t7 z5jSHAFOtZ3hNj2#+6I9rwltns4Am+1m1DAE$h;y+P7xkV%e9PnrLXKc3a@o0czOb3 zei^=gpl=Wab1f>~));K0JfW?k^HIH!ie}6t=l`6ur58Rs$wiXf*vGyo@#`_CDBGBDrgf|qH;v2@Ij1&1{$6G!r z(e;lcr)=pdT%g9(1KW-xFOK>*i4hKSoOH;@qRVW@&=g%$6-iMwMOGzEHFQ;y6j_$h z5O14=>jN>+)HRbAL|%|0rV&vUO^sSO;zY$bg1?d=HNzi#U_@Ulp_e&@D-57Fb| zR5oRE3O!XZVxn(~Ja_(gp41#xd-N*@IosdUMIyFDIwp7{#jnC~ju$`efBT&htJvZl z$a!3}1xaLQK3tog+E^$zd=Chw6Jb$s_&uIY-Hg!SxQOMDQ8^J zQo`~nfmbVJq&X8r_&CeCbte?EBGIs2Q-mNoaE^YUT<9be4D%r6{2vl)8dX*q&Gc&=oy zMxZir&=P9Q6le;2ne&4^lhu>wGSK~-Cm&F_h!)zZxlRRdg@z*c_Zd5}BD053|+B(sj$2EBWbxtzHPjXs+)`^Pp z{bNVY8y-zq&00+y5;xdwx#NB$w~+MJ6(PU;aO;gH)Q8COT6czv=n; z%RR_EV-@|qe=on>>;JZ8!Oxt_@}4dA~}=Hg*NC#wtnyQzlN7%ZJ>iI4pJTdI*O zE^F+c``O$+dbGyAxy#0emsJJjTZwhGg@?DSTtP|5ij^N;HC5^8s7$T$zO4w=t41%K z+uvA5^ZoQ3$QOy^Oy%2&!L?5V?5Ynf!hUGg3cC0ef1bxPPxgamq6BmXIEdvnEy7t` z$y!|Z3HNlOfB(r(e*9zfcK=fUQuOvaO5^Lsi$%DU@O?M?C+6ot6x;Yqzxu0Rp>O`O zG+u)Au~KO)sN*j3Z{#ZAdkLnK`bOJ>%?k8GvrLb3Y=&Y8Of7E=Q*u)gGAMM9ukgU- zfmG8pf9Rc;jE@fve%wHP^|{Ksrnm1p`@B87?&^Hfp1o>n>Z;l3$2;%ZwdcJ3Pfk6& z8r`P&1r(7R?GLYQ??m%`y*Ho#>+^5!LAwgs`$pRG#r&JL-8{T^aN(1Kdxvk{_NIJs zV)TY?)ZS5jZeV@X68=j-NEVaryLAM zN0Q3>@Ls|x+hDj;x5Ts-J%i2YOSsTF{U|7`vV@b$Mjd~pN_r8dhvG*K%JWH?U7ahBf)CCT^8z)|pz!y;)FI~Ge7UZ#zR8fth$Qem+@ zs8X3+`GJ3xlNH_GPtT9qZ|kjy%EHGzbT)Eb^nnM(9?+g^g;bCDVCvYK$x9~Cq}tM2w)yH|3&Ps988wyH;xp@FYFj}|;-9Wr12F|Pv2I;V$w3VIDj&}z#E1NU ziE6JO@L3h*}iWRm@w>hQ|5p)}A zqV1NptSF;gPn+hYRHp;wXMeV%w%#^0ap~>jdfHVuTi^2>6UxGX5MRJsTBmf-xwUxM zZP*9lp0BpR0G&qeVnVo`3#J~v_?neFF{_(xh2gcujKm?dZD#A?D-gQk$d;Myn3FQ4 zHN(X=Q)ltc73c%H-C>RUW`Y35<|(-)_f`IdC^jSYbiOD=zodEMc&YyNYbhp z9X54K3uKQUX@4dOptwDtrR`zf#N5q%f_awtA@eVR?7=%EoYD30q__q>m8Q3~ZMh4D zku4?d{|cHCBu7}>yFj}k;6(#Ms{nhj94tC4X^W-*+YDirU~3gUYQVE0SI{QZD3{2| zTr^SUey_L(RN+msmVdIfnXB)zL^I}`l@q*3F4|p6se;~NXH5;`zm#85oWqKErQ)_A z1taF}PDA;*Xjdr-kezncpld0gx>8U%DSg4jC2J(XNu{QHCmIQzRfMC8JE=Y{%nZ~M z2~k)_Z^D*E;EUHvf}2dO?wM#LbxskF$^r1YfyN@R!gH^#zkgD+$Ol)k5#>@@Wp6nq z$O?@?w}Q(5?E{K3K2}Q{1y~9VRs{8WUOwP1&vSumhE?xi0z<4fE?;meVJn_GW zF>LpL2*NABpnnPe?H^HGk;i?q`;CRWY3=x^tV^LDc@y~<=o{3RIbW_=?&$_t7+a@Y zIC=7eRihr04tae1ni}frm|pYIHPankG_XA$kHt$9rP9RAcKS13;bDxebM9LUp#c(y z3q+w9HI8atwOKt0(lUAtgu4sE42{J@qUnNaCH&7NC-+O!U0E*@gv+uinFzU>Dd{|B z5g|qiaY9N{jAV9TrY~V(Mj!{=&~hQBK`jw z^xu4_<$vlk@XUD2F+vvae-~!&b zaN<8$LR4lSa}6`kd=Yvzy13rl8~%fmF&r2U(SOOqWfyyS5wP`7Q^GS8sF6}fPHXjz zGS(#;+KWo9y<=hKYOo80_VYlQTeKwEc_0@*bkX)}4pfJxm-iOC3Z7;J{|W`#&f2No3ol3~ zy?+GeFg-K}3oG_ra{QFi?vr1IUnDzClC9|x=E22x~1E$B@Fl836HG=4ME4n|_5s2z3D1W;& z$;`<QV79K3EuUMz=*8D?7 zcyQL`$IPAUQa>;+b0sYIZ1c|Qx{?Jszh=J{t0!h%F$>7Y{3EzMZk}+>)_=EDfUf!N zKjVglLTwhe!p%o;b1Uwi?Vjtkf28^8?{e&9N{;0K!O=|Xm?XyoUMzQQS;XVztaYA9 zxN9w3Q(CvGr|Z-Zh7ewTtvs#2$Y%N%cS7!#r`cgvbK5TyTu>0fk8zlN`W6n}3BfI- za3KrNR3_ClaN-z5XamU2vw!R-N#kaMgr8*Dd63(H5Ilxwqnn%p`^9#_<)n@MV!I7I z<<=aYa31{v9l-o+is>O5k#q;O^;FwpTSuVVwi^T0as_A8o2 zF*w@^j-qi(KmAO*u77=!f=NZ}Kf+V?pTf3wAFj0?SH7>k|NBMwPmBli!5we4n&+t5 z1V?ZQ05zrHs53R)$D<3How4rj7<>VTO*edje&T#en+@y5NwBq z?SBoNYQ7H1-O!ul*A9SFcH%XhNLd!@I{h%(xFP60y^#pl(Zk;0>E|ErBp7j-Al3WB zlf(<~h1R||!RM|M-Ig<3V9usDYA1~LWv#cI0?%V^6dxPXBqTbcB>Kr&xmH901#tX5 zr^OqL6N8OTynpfRVrQ+q8n2btGhwE|tYeNa4CikdD5gB1wI}VUFGIgUEqWb(zO_M3 zb(u>rM~oQHOlEWo+hP1+U)I3_s4Vy}p|d3J9?!Xda=AG6UQGUqN3?);L=0%+y@(CG zZ7KLY%R=^E$6DXQq>@u2l4`VdAq3uVDvSaOdP!i}dmxpf65V#b zcYBUJ)^~5YG3fPH#wUW08a}VObn8qio6kL(tdu@BQ%$F(sA4v_mEESJFDv71t-RX zOIvfwJUWTL8xy}F#P*`4ld>4-+XH|uk%P(Qka5Z-C?VIWpSnVd;QFbZ04Kpo zdmPN$_&*^3H@{Bw!CpTu1T8_BpBDrxD9nSr&3_P)0mOgJ#Hmx@+R-Mo^3vf&C&4x4!!K zZ!-|rL-+Ki77yg$cj!PoUG0G=JRZpVuFsz}kQRUP4`?YKOZ*I80%ak1OIYMO3%|bk z9P+yEXc~Gb9Z72(kyE=fk!)O-KlMv9Wq-I`;2YxAKUC>;yWM}cY5h09C3WEovx<1z zNl(0FdRv%&^9cW^7Lzf&l2w>K>WP6;7fE6mWhDvd9976AD+wX2(?-&<1)|_(Mqdu3 zQPse-3Hd{b=E*`oV)~y^?LVrozrpwt$cq9*ttWsJ3EyX%_l44^hB`vvRHy?d(tmc} z&cyu5`T6^H&f|84M553?zHi@n#CHSH`@w;IG8=9>sD$I;Y}0we>7PSSI9PQt{LW?_ zOwu=5oeTP6^hD6eV_wN36c>KJ_+G-lZT`MvrUM`F;m+xf+3rMhW1_n|0iLp7dF4Tv zeZaosLGZ=%m8@ERprQb@71wNTY=5;7X6nkR9954iKxsnY(hex%G7 zlPi|(-h0G_#&HcpY2HT~+((+;*RG0##52!a2GH^ww#x56w02Fg2wLCB^XLVt`-h)& zZ2?mRKk}q+0Zjxy)p@X?RDbBI4O})@?Jkt;M;2wk{OE_rr}N$2`RVZwk1k3(c0~@x zZJ54GoSs{>Cy`y8Gu{S+1x?t|@JKBluZ`B?;Nr+|Jr=8v)?#y~UyhT~IEv61e)nSg zdY6^&$y-+50(Wn+ze92b%PLs*m1pY3X*>M8-S~Gujh|1A+F}POwtrTZYP1oAtpS3Q zgkP$31Jha@bv1);2}cyZ$xENbXE^-#|BCOu_c^%3u1h?qO2plv{awlASQScl-+lV- zd+$Yi|9Xt7*IaY@F0}s%_C?;3dG^OVCkqnzyjy$nnt|iTj}KmV-E|}$xaOK`$h*e3 z?(saPRl}HG>&KkkdVfMErgfqjXqi>&jX}UGA93xa66of9`=nmgM*-PhXo)GZXPv;U z9Jnpl7ld0Cyk>eg~%eHZ*2t8XNki9}IW<#Z0X?R%&i=%5bnf zQ>iSi0Cz9}E`xIO&+689Y*oMT1rq%l_D=M`Vp2~8-C$$?7Jm)MwsYP-2YkV^B?`i& zTFzy3g;V7}o^_74#@$vjq%E_s=Fj2#P+}%AO~`QdoFnk1ZcG*ghpjwa6V2)(O-iE; zn9y34VE!#D^eY>d&J;R4rYD~rpZv(=cs7sI9fg^t8$RmtcwF{fBz!d9-xcVbSwGVm z=<1L6?`Sl39DgOj+;O2)T)tu>sWVI3l1^qxZsUsO#gcFw_k|C17ingHw{xZwAD~Kl zt2TD@+ux;K^@A#oTXW1wG>#@Pjgw=TEQKw=KeyWY1y!OPkzWL-Pk$RsjITbC&5u(w z+~Su}pf=T?OD|ZF9}Je0B4o%~i^U;fZUUj-s|1jpOt7xHAZ{Fx59#tDEcK zB*h0#+jLF@JMH_NVF7}&%PfrRZ}7M-rCO=^Hhc z-uA*lReu6$GhZ7l47B#j%PoO#%Rh0dwUOpv)8R_+zC>?ZoEY$k0%iu!_X>g}dZN9-Zq@#1(C~PS;NV<-nFS8BvYS*9Ag1&M z`z}4`Nr2wNz5U6IUy>!+p8@+LE6}(S*fUyK9)Gbvs3y6l9I# zeLTLPS5gDGA8?^zdP9D{*Ub66_6I|`)aqnDI2en7{Svtj&k8!esQp1*mknSTR!64K z>I+7yv3eF<7>&|z>>BhcT8Zg{5oQN|>&UGonyQG}eNzo3D~5b3L=-ZTnncuVjr1rY zAAeL!g$Yn8mje$v0;+i;@*vC`QKrXlP!5f{G$X2W;ZoXnPQ#2Ex;r~s373|--{PWR_DXNjKPAS@kwa6fw(i=xdJ5bV8C*RUbZJ3d6n|ZY8OnrBpNp5gL9O|@;;xPoeqR&TpFuc1 zH~b-!jTgPAf9>rIvaR{%zt9ax$16vX_`b}ZL0hOh5)*3JBWa-P>s~S^{MqBW&*k|uNqXx*bHN|5E_ZV&(3SzM`4R9#4)r4LBn>}YgnwEw z1S%faNtfq~q{SC$(*7Rn@<1JZQl?Wj`aqXuAT|jM>+dy z5Ew!*-iu$*>DeVgg!)JA6X0SnSPd>+H52Lz_k(HE2+pit8Zi95tIu0g`hQHvvXIYT zUbkyq+3yQ2EA*`DF%8<-@b#>`uX$@BHx=8wcXKT09}0N5=82WlER1j5xiJpekU1Rm zG;f6mfD#xotiR&2b6T$HC`B$Dl91bS7Rt9$u1_QK*KyYw3 z@J(DaQSR#Rwt_e@anVJbB7cgCRAcdn<|Yx&iC~^5IjO>voLCV^6{&BozZ8$9QnA$0 z88q8Ks2s;rKq3)CFmv$)J902ZGSSYyKPCn&QqLMll-86=YhF&pgF}hlb>;H9-o#Ka zo&x9ftn7&m_(^@MKZY~Szh65u-IeX^%xb>=xl)~5duumD*+LT)x-37mZ)j+r{maf=d_{ib{NdsANAfG;xlZs!{KIoIQPLnflf#++ zN;Hy@vc7i?CK?ls#NDju7DYFER^+4MSw~Ag{0gSOLKM-5*lhoWF;Hz-)i@9=4@e97 zH2zu*vO!j_T8*lS9zA_mqF79z{Wv^*C7C$TeoDtw?e7vL5m2SM|2{qX21C;fPJo@P7+Qsk2iG6%&w-sEJ2} z7?0fCPr8M7$)1lo#L-<&wBL!&_Yk2;I|n`&E64CrF2_vU7KxY*Ul}6&%0e?%jv7&~ z7YFUw{)-@_9*V^tYSB_(MvtKxJd+cQ)Ru6o2NH=Jp6Go3zPhv63&a8!I#}$r9M3hV zCJ`}qs}m<(=zmIBt!&u*-7V|SNA>Dw|7pwm{V)-O_1czgKRvMbeVv)~y+6F@z$ZH+ zFqW{7-zG`7DM^=d`|XM=39dV^X+x!k>Xpwvy?Miawy*NpeS{)7x@*VqXsFoznHLZ3 zziT`cx_$qWZC;P(OSj=Wcbn=?D7SUprX<{q_(t=M>wnoQI)Z2QiCngibO6dP>Gtoo6 z7NZ||bk%eEo(hLVB>DJB7D%ep84QK=U^M8{wMaao8Adqf_qepM7K#YE5lI9!)f4pe ztrd~mCx0!;xHQGeR|_Gce#yHr(Uq?hLS8-K)xsT>j)3J7)b5C2YLL&2!UyY>#(PE8 z6mK2uABY9SRHrKV)m+q{&?CJ44Cj-deQF7BMEQv?eMjQgT=4-}<_-DgcO1E12|?x7 z56M36&^|mhaNPDi#BRcnzjbGCAs6)t2qIo{bAJ#aY9WKdnOyPKuVPyAJXe%+Z7Sv7 zA(@zDIk@Ff7z~5zddc7c&q)^vUXOeQFfC01ZcS0#vP)H5vLdO9#<~<)#sw}gOw4Zi zGH}VdN7XSoDu|MyYlh+ms@ty@sBS*`b-RgZ70MiGW9 zZ8{jP76C!6F0SW5xaQM2r?4>dg&%1!nn^7Mi3I?O4NVL8gy;FB{h{LR;yn2n>5G9<*EUW&H3sD(% zm-f8t?y4_DTSr ze$CAbN?73VwSXE3i5vj$R=Bq-QbV*z4U&@fe(W{qE9kg`W7v}B5`T+!;z`=yQgk32 z@AyCZ;OQ4N%NJ3=c~U?IN0o@rvTxu2|84si`q(x!Zz!iH++HL+$#dV}k=Kn*Dn`?U z8G8_XvyEr-H2Nl*#ys*Yv!2<_9LIChoy>zo3eg2}&XmFnWui<$H&^RaaGB2m$Az48 zI!B~$4XS{LTb<=wgMWM=X5FP8I+! zb5ZYU8UK5)=@XG4;kBUCx^>9QK~IF^-#6>E4s3PD1VMJk{eQAc^T8Y|a0sA6$udFQ zjhXnEgjWwmhF$@1I|OO$X#L~I?c1(9K0a{*TzJF8_+3}ppS|+fv60(0K631GuvWxx ziI7+HLmDr76MzN0oAYOsFjzT#znrjuSkiqv+<+Bb5(0v*yH$?o-Mr5T82djCYGFy~ z@p`*%(dFy@l7CQH=<~XRYS8WG#yFYy1&QfGY6VhUG5jj=Ks2Bn-l!?>DqaG@$B*Ce zg>&zoI)2^c-RFM6?zsHeRbbUs!$ZfevOmWx*o?h^08SB4SWFTb5=bT@L8rc(=q}Y*OJS$4?cR#&L^~LLE$-tC8kDsdB+6PSMgz@{WXCcfJC{a|Bzd}<^3Ce-YSk`_A zZheR8l7H{OF}N)|nrr?#QgF%Vo@*8&;5O3FcYUOK#HaWbd=MFxQ$S@=x1*n-qg2Mf z#PNEuz&zo%nSfEWoZ1ra7cB{kMZNmvgrws%o_cpW%UEYYKLLH~^u@BG$l!8Gc*c{9 z;K@gRPEwR}N=E0O|K=^RUY3b!MH{T0$YVYO`~pF~fgQThwl5Z$G04@l8( zI8U}C$0&Ztg7Yt*CA3|3k&Q`kM)jNEgG#26W>9$nj6pM z#?K)E988{@APiXI+$3heP6dL&0Ox{N#e!D&QWS|7=eCiad*bnnJFE3AhqlyvJFe(H zH%aOxHg1H|tv-iq(dKK}@mZpSih~yu34e2Nz)U91fdzZgJJGMvW%xaqVpbC$TG^JH zM(eFE95Lxh;VNn^M3r29;XY7s7R(4a{Kgqu8GJL(%AnfCc(QU`e6hQedit~nMQG4^v5dD?ofC=j^CTqKq@sbMS|vQsexp2U7s5o2~U^>;vIQo!tIITWk6BZJD|B9x)!|CGb?TG1*Acz*%t_9=k|a6NkU}6$f|hTJ(97xoApdA-Om9QZ}sfkA!oWxeddg zh4cC5tBU@T76d^W!XS|OW`dUijvpo}pO`UWAZ-R49y|}n_V(GI1m($e z=94>D&uz<39A5_Hy#2{L@|QSR#`E||A7@f{&7NkqP|Vz_S*i9}eSQJ+jc1Hq(y1!+mgI=~AJ%=KU{CR=IrS!dXy5-{_*Mx}bD%mZ>Te>~ZL^u0@b z5d?_m0#(wbxw|h}cJP^(zW(bk5oIP|+5blVvguqbVd&_iAdpfIM)D>5cEQe_wdljZ4v2+bQM71Bd=_=)jH2=_PNiHjfL~BZud4Y@fz45IfUp zpK1Ei>CP*wkzg=V`&~5>3Pq|n=f=GF-)IiJ)|qjtWIC^`k#n_6I+l`xrR$ui#TR`a zeH%6KN)=}EOaargb9j#5Mf^f9)+uUZOj$%BO1CIPca_3Ss+@rL4#t);Ppz|3wUc+Nd7t>Fz+&2;3TlEYzw?MmQ+vcR%1+oQ`Fa}ZK?t!Dw z4_ft7Mq7jhdhodzK9_?Rhq`OsAsXyVm&-HdGPoc}e;{4c&8{=2ws;jKTdrhrSSf?= zo1Md*ox|fQrS6+QH`-@#i1-j~Qw#=+%^2x#rffSPvBRNOZ=r5*`QkRshs>d_uAwgQ z9ZxhLjppr)(LRMQ+QuYy^jfILqb$)KNT02Y*2rh_e9N`rVtvQHMv_kT)p~=_0z}+u zR(Zj%e>koYovL)F8@Fbe`qsYYO?_MIIEI&%*7b|B{hK4pmaW-0-Kh0(oEff-?V9LI zPQ}xH`{HlB_8NeaxSIe)JR2Sy0lsErx+|r+I9Bt968V|w$yJT<$)~{UPLH(b&J{iE zvA#_mJ)zK+dRMx~ACY)f^t&d`$uI5N&#}T~e_czD?(?tT7BbV3fZy;d9z)MBrI^QL zAMH`}27Cp7H)*C!v@VRr*34DV_5shE8X1XTi#)a{~2W+tR*-)Y?&R z=~C!KnF3J>Eg{@;l!a|sw$a%^N0?{xMPlY`eP*I}Q}qk}xa{(WGD%DJ1kIjcSJFyG zL;2ZgG1R=EuePaoVx~T8#v(rVQNKShe^rY%`ZGP@s^kqM#xcu^se6PuznIy4)Q`U} zJum`4v@YXs9)+Q}*?cu%g;g&iF76=`43EO$Wh>MPKk3h`YhE}K&=H84aHSc8pn25l zR8+*Xd=I99A?x*o{C?>7$C|G=x&qgtU*dOp8KwoU!1qW+WCI2-VJzL2nn? z66itrDb{cyQB$G95_|yxv-=j#`&5|ffwfU+^-&~7{J~SxX#$-|pn>|vU|$2yl;-;5 zL4Pnbvtq?iCojt~vJ!>Pyk?k~Y7BWq7bo#<%$|xO%X+h&#cnfHD`sTN&#}D7Lg3b< zONS23_4LdgICfyJSe!fXubeNPe-d@p?M)eCg6D)}!W2AZrGL2JZTch;{MZ;@v#YPP zF^7AQBu+SI$cmb7w<^2wjaSWp!dvbLl(cxzC#6%-sanFzyL~|=Iup-kS=FcdECo&V z%pJV+;L7gql{lK~dBq!ZyZrs0WDm-ibDHd7)u`TaeL4lB(Q-9lwbs#pe@9O+LnZZRX+n-Ujjb7Zs-PnJCjyb2k?;W?ZFBgqSz z8Z!!~09ZPC{j>J(z!d5M%k2BF#WcO&D*FPa$0v&rzz6mN$O++uu3#eO6OF@z)B?mo)vThkV0-dE+7Ue;c%f>VmH#+G*Lv&yri5F&ytaM4*6|K!P1W04K>arl^uN z%=1*}*Aa(Y*5bgNkq&u0p>!cdq7-=C$dE)P@8nNL5-MQl)IzlRiVFF%FVg&#FJib* zuMwQ{mulaOPg=#3(&Za^tf1L4HLHVa0iE}&g zeKewJ&l?A>_4os_83u}1)-75tq)Wjbsw0fu8EQa zER#FiuBFO3+*uUFP_;73Hr|Nj^ZofeOcZB&gJz~D=u7v6n@{-Cr7(D?C*PH9ekjtF z!K<9=wySPc!pu{$e|Na2(7$E^Jf3S53XL4NCSDnjH~$nUW-K@y?n(QsV%Gn7rL*~9 zs8~$E{mIU|-Ky$-*%b-u@ls!J3Oc%F^XSLuy_jxcvP3_uFAoTitOHoH)ZmiAe`InnbyXq?^o~y8%EE_bKF1>i5sL^a zqT*=FB*_+@07uRGMxBX*&pSDgdrL+*tDYVn8+l~+zP&r|J*0bsp5+HFAKc{j^StTi zV_juy@9LF%e^eEIpEJBcx8>z|uPf+H?&f^nfRU691BbuiXyjzRcBY~`;7vki-?~-% zRZk>z$$i^)o;SQ}RMP@T@yoEg7$^h^a&k*%B3(v{8Mhjp27{yp1`$i8ke_vysXMO{C{J4mXL|b$$sC1q2 zTRumMgm0zcxVUf(Xsz}Zg1==QNd?iQDJH%0^;}76_k`&SLV1+?T26*&g7Rc!3U{{e zEA*6u?m#7Ac|SSRuxMfXr~ya#z0d&nMeXyfR_WPSP>EZSw>^Wo1H8txWasUvu#AUp z_4*wZe+MF_r{1OMWJyt^1V@nH_fv?VN6qv`a~5z(A&)E&iHvUq*SIv-A+aH^fS=Y_ zFJ4>}7C{dAqnJaKgYob=TQ_bRUS7Bk7!R3cIivyNDueF2ZaGCla&^H4SXyan7|KfXbThXKO_SwU#gh?oF62~RN| z#=l@u_!i&Q^@bG&b(Bj9c-kU1e8~kf^hSHhK=+-d#t>*6hxMj*^Bw>8$|)$qe}BCl zKbRBnwdP})T5VaamT}|BMAP6YLut-a>j@k--&1(t^T4!!w--nV+5i8;2;Bo7JVoj+ zt6f6s2edX#do4PQX*Cz)quB4q$$0Bk2jR=C3JaE&XOUy0lnirJVu%U>iSe94QLw3= zL0{HKyi!>U@X>@bsZ&*Co$PN?e{oE@we?8-S&U@A2@_ZeOmB>~F1v_a4~DUCS`%u%qM>K%}^Ft4V)S+9LL2wL{9jILbJ7wf=} z^ub|&cgmlf>*jTTCTMS?4v;=HxFh}(l7dfPPNGS2xrE=&;j3(#Ba0P@e^O5hhA0a_ zkj3=^668FGXIvK3ksfozg~zR=jf^)S2x`~Lq?zsx!1ZQVHgLrizCp-Gnx?ez6X`j$)0e6RIkXn=@n;5ZBR(%9Aq;?crHS$672A( z5x+}dMdYc132W={=zB(owplDvHcw7{WNKoI!j1x996D#^=B=yd4(Y*UM^uYSfvv+t zxTtsox+$>v=*ID6e^6urkH5;WHzGmSqos+0Ph*v#MLk`e*UkzFex*K!(j>0XQ*+TG^ zXou<^Juk!~Ao*j-?qZ_BYYH#-88KXxFN_>abi`8$NWS>k&Y=K5RjUm1x|yzIEJIi} zJi1ECnD2{qwq)r4e}cXae}=!}N{h?GJRU26mI{1@;!>mp`iy*jisN5tv|N#reJS|( z^jJKRh}pl)+b3hGL}K*jwb|U7nQgmwe|c4*qpJYAx{>IHoN6rlW4^O9zY5+z7G1e< zHu`!J1Y>iBuDQhMWIR4Ov})C=!k!EF)_aw5Tlc{=#FX$GLq3C`sT~CV^-!+=>-4zZ;LhChrSJqxh ze9I7TGk-kjf1uSJyz=1I&DDCnx_Rq!?F6`0)8wn&xwsikczixYwp_T$YM~N#-OTwz zL6_T7jgD-P?N=3Dub|veDpFi31$%>n{f}P$dO2Ew3l|w3#TWS_x$NnGIO{4j!L)1| zPop~!OLrc|m^pkm4>HH_{Uor}ImcnV6JpW!_;??!06FmMMTLLDEpQPtaL%3C>*Da5vz+L!5uM-> z(4xqy_;sUb2Pvx8;dt>TYY`D`Lb7`J1PTk=S9R7SJY^C~F0*ZFNJPX=2Y79wLJ?x= zg0m{5dhe9Mq8D?PGyI{RX#Tb|1*DMP6B1b7e`s-%1+SzkmKoC(I91vyrTXz|(4Ugx zrHOc|b9Nw+7?|x$#V4B&Xm03rX)}7ER7`n|WU*AxXEfJS!(m^tr&>(;JW9X)hD(=t zF|}f{5{XnMSES|n$dj4OBRozH+Rfd!;tmnR)~QBCL!`r$V0wx{Y2OA|8fJFcB#XR4!?c8v5tOrxI2m1oTf0Ch8 zkLVQxx)G0VsF|VC(NFK(H&zS=L@51(KUWT?N2tO`dN^GJr9`F-{5dmKZr(JEN%V}O zA-u4FtuDonvtTt~P2ZLj(H_gG;boqj$$4f&am@geA)l`B7N-Rj!M)mpdZk$ZVG{`u zG(IG{Sq=ovd}K%hY$(WYsE8b=e-FfROJ+S0Y5Pr=zLQr}*8b-^4=ibH8yoO?h3?eY zn7J<7g*ezf7E#mTNU6IAAnuZpq|A$~RrRXbi-tqJ83Sa7lDXj|$PA}Iyab9FBjX1> z_7?}qa7~5dHi0O9X;e7?<{%JUz1tzIfXq30(H+ltRs>yKSY!R7OG+CPe?X5#T`N5; z+n}e=$IuvKV0w3Yk@f!~b6@KD$1%2aKq=@di9b+E8#}g}t+j}pAXIW7J(9*p^L8hG zRQ8zRu<0>9{zwEfs6ciSrc;bY)5DqOEt%moj^QOZzTP9>Cgw^x$v#D;%yBVa&I`9v zLG&-gd~aU3ouqFUbG^UZy-JN;J3j791#5vJ8`Nf|`Rl2zWIiwP1rv^i{I0tzfF3N8k)97Fmw7n6}^? z$RUd(a2~n5QLj10R87|@#2=M_c!HvsBXCuibs(;<8f4pyI)TD(DtaC@o~^4!f*y)22UKKwc<{#5s5=wCIoRM^t(WZA*FhI z!X9d&*bgVqN!pLZv)KgLlvtj)-skzIY(LD&oc)k2gH5c9 zyMnLh{~I^pJ@MCeK0AZ_37=1(HDqPw)@^3{I( zg|L|TB=3R(re&j|40s7W!jmn48Gp^FOt}WdZEATUt|nXPOz84D%QkOs~t$QxmwS9@pUxbX5)6T1Yb=zlVg=k$Q?o6Xzy5cGTG~r4FKHkc+{hs9+$8$AZdpFBaeRqt$3$b zD&z`gEM}^jWUxNBuH~XZOAWDB$X&{J3cv%s!Ei29EM&SnrVC*$8q-3B>5k6a)asrr zV3!DjC=hFXR&!~h7IkS}i{pdYbj*VIl7iCZldmZ#E=2&UZt)PpsCkKrR|gIV5K}6O z=ta7RDC5v~>q+!pG|A+dm2`jqAeSe=t<o|R&{$w3BrG_K@al}3g{^Q=>j~p5w-ffRw|?JM76QF$Ezdal{d? z_D0oAqs&++*2ok#6f%uiXl&ai#C5E^;Oa(gWe1BkgC_Gl*kC`h;gLr!Sr;ulQCd5! z>AE(&w)8|Hw$6VsULc+rJF>A9ur?kUdqQN{i!T7nH?YKwn!|sSK2GPFZl;$RWY#cS zsaFi@b7sN(mqOq=i{m1^70Yp0S2YFdIEgN&S?XkHk(F_-uID9)eD4tv_o_Qu_Jm{I=Ca4eovHW>3}Kw zA8~X0QgA2!559kjC!8Z3_lf|ue={&z6OarUR`V2AyQYFn@K59k9(r*@Mi%v~~P%%vT7?a8z9 z1RCeRIsdU|v(<9?g;W`p!SQF)<#HMauwwT;o2!&lFQk9Vr~=;oT&i47J(sG0GSYgJ z-y^y25t(*7Wv?%#X!`q!b}3F#dBX3}?RdQImX_s;MH-4{N!u4^h@NEw{{f=E&;CVmjv47W)?oFdYQ(|F3#R&sM4lb2090)=$T#LIR@kS6p}7@BH8g zK(&Fxh#@~?R6{x$emJ|5CkRSU)Q-vasRRnvJ`m|Qhkpzqsp z_GN#H>tbLUD$g{SA?6%r6>~nORniN71fBi!v|a^oQ^x&I>s1p@m!z$$gW&4m086U%zmPU;y+>J`t>tff1JNZ`=PUdIkGS zZdQ=NN<*wTMGN2Y`=UDo|S$jgxxCDBfg*gAllA|_})eEy<5U;q;`Rh0u`Y> zTN}OTZOR+~ZM-%+4&Lw~G+HE5jN%Mfd45639G9FE>CNSOBjBN^7(*rlH zS#xu1es$Iy4bN87%=;)>3x0i}vm1Ye7TXA9iI1s9UdTDl=<P*U4rCU06v1=NnZ*^OZm&PGyofZ<&Pj!^Dh-!u8`kWI9(3 zCzHdg);m#W$C5%}$yySCI}h?={komH7Jn>ecy?Y_7x{w+1%VXlvB%7+$quCAt2} z4XcI|_8qMe;9%gfxURkB(hEg&fF5t(TQAujlM!|<83~`M;9I(s4tmj;TC~A4Xcy|m zPpLrtzputms&}MikPwAy)+^Ta7)HAV$Vix_J7^7!HT z!{a@}ATyEyk7Y*E03-+OT6NR@O;!6w@aJ;cUY5q|VH!M^E(817XxZ=T80<^*7d!zM zhi{t}0Y3rz#t)C|7eh{$fq0E8mrYb)61N#`&c4f)JTTg%V4R*NvnKEyxSxvU{4H15m>_h* zmSw!Ng-tAF{D$FC!m)p4gQhj~@nNpuORPv}DTx=mrd{>T{%}+IZz_PFJ>A%TWP5`K zu~=U+^5bY7&ab$MGS=eVAicviQIW6yiA_65%8f7Q+DgJ z+71s%g-CQ?$#j3Z;Lg+-g_Z+1lx%^%oB>F8oGHY>i?UBq!ydO^5M?7A3;P7|LdkS{ zB4MvAkpe^d&q2sZassn}1G-l>qA~}eDy2JpmKU#KPy$8+<_w+{q#ui%V&uZQ-|LOY5Ghi+5K}W9p7xk2~&NUxB#4_{X#cTom*k;=M9*=*a2k=_Bnb}L`nY7@Ti!W?R@U4QD z$`swUhocTq6?N2|b`)mXNE9vIRfj4q5##VY^0hpFV+tSsoR~)&0)YrcqGak_9=8_t zkLNmiYSntNJTA(nmQcNJUKEfd7$M0kaT1WFe7K~h0-c5W@bsE>vr}U|`CeU+;=!Cp zckzFc%!v$zM#3qK8jEMiI|$j;HnyPmPs3blgM^SU$l3 zMBPS`bG>W7wrQkVNfmUT;?89n#Y2}2EE%nKX_`d#(187cP%ak&CrQ}GRC^A+fHo05 zGvL@96T+MTqqnw%9A}k%)iN%o-|hm=8WDfGJKtU(*;cY}4WYfYgcC#;0^h-Ui>|-s z@S)KOu;%^eX<9ZGG&Q$~?_ECR=H33BOYNx#PlpEBP}6q2e+`%zJ#-jtfMdf4F1%*X=dX()k87ofkV{fzm(&&T3J3*_KnQ;* znV{gcinX=r@nCE$3J{XrzIZ$yF#7+u|M|S%nI{0b91Kh#Q2<_l z4p#sG0C=2ZU}RumZusB85W~Od|F?ht2YJ6U07X#1ZUDb~2!?o^V_{%mV1Z#KBsLiT z|BuRtVtXuNSTRUH)C@@+@^ZNB{QnQXxlr~k1_oA6Z0S`~QEy^lb(P z{zWKy{}K^)e~D9vHSCDg%n%w7&Ji#XY7xp3b`ro7N)#Fts1@E8P!|3dSQv^J;u&fh(i`3! zf*iyh8XZy{>K;@c_8%Z0ydQt~AfO=y5fE5AZF`zQ)Gb}UIH1ahD zHF7oXHc&R2Hr_WDH)=Q#IC?m|IPy6*Iea;^Iu<%;I*dBHI}STOJBoih@H})p>^&$w zbUr3NtUnGwutAbR^h0b!JVk;w+ zOkJd2PF{vy++TWM{9rE7VMt;wV;W;_V}fKJWU6?aV_;-pVA#!M!XVE80!%>61%wO? z|G|6)03;LwC$m$KM*)B1HWZyZF(jE;C^Iv-?aXc&x4heKVavEx>=#=TTXH0Ml1!PI znVFek`{VkQnV!=R^*NTFeV!iNd!J@zXI7u?%>O^TFpCxfgoqHMjSjk)!#vhuJvLw? zcEj%21AAgG?2Ub}FZRR!H~GXd0Vg8CNjMp& zU;&HRgv~e=r{Q#*firOy&c-=77w6%8T!1aO5EtQMT!Kq+87{|GY{M0}65DYVuEsUE z7CUequE!0y5jWvx+=5$i8*axPxDz{Z7X*4pk%7=hjsg-(7@$N21&ta*7+5$oSjGrr zOt6BxaS!greYk%g58y#Ogop769>rsL98cg$JcXz644%bvcpfj{MZAQU@d{qWYj_=R z;7z=RxA6|%#d~-kAK*iLgpctFKE-GF9ADr|e1)&^4Zg*9_#QvtNBo4J@e6*%Z}=U5 z;7|O8UHE$@NShwDoXBHGDkbH@o{(A7t#n34IH^^qC(?gG($i%&H?>k}(vkviN4h2@ zWLWDFnRrQ7r1HgRbq|+iM!G{)?IwJB9Hj-NgT**CB%C(wk#t37#AyCsBPn$rR$9>{ z%5+(hiAI7q7fugGhWd@AXa_A(%Ku884mvcUge^;LZ~0<^Qd-weg`?c)NxV`BH4t)c zL}?*hQb~U$BPAQBn{dc>6I(7t_HN3}%T%jmB#dIeprEpj zZIh;CZAivw6Be4A4VGoS*)I!zS@g@Mc|N#I#!i2!=?ZopC7B+n_Nv*`F$2X(iutvD z${ZJ3Puhw`iN_(LaV=C9r@FLkw1*8@A8!4Ytyv?BM(kYTRd=_`Y@2QjGqREU>Xnpa zvd=8AYamr$Z>Y4Pq|ipLXyrs1Ge&tKbWoR#o%73@SYjt6W0$ul4I{%whjCa=Y6iQb zXzYKcR%A(-v}oI=x040bM7h>EpY>4YLUmFuOyw($4w$MkE*h0{yAjh+i;^YNOr)9} z4x^oAT5f;r zT6S2@R$1&DWhVSsczF9FXFi@t&22*2PS5{1C;wLej#*UdFa*pQK_JjvD zoH~Wt@HG?j>1FPSp&wA&_*pfcGroe#h-JisGdFA`-#sit00000=8TaPOMjsN01b|jgf8A^Y{001BW001Nr z%nzPuZFG150FF2S004vl00QXyQUAbfZ)0Hq0FJx>00DLY00DOCQn<8jVR&!=0FX2Q z0018V001BX<0=9`ZeeX@0059w0003%0007K5TiV>aBp*T005Dc000EN000K=%t{$R zlL!HWf7e;C)^i-k@%LY+L?@LcJC$T5-pra)^C;F9z2)y#S3srjAX^Ibj%XbH5C9#W-0 z-%yZW+NoEI=GR+rX!Gk;EgJOw5+0@%tz%qFe~8I3C1ylzEQm$1ESAU0sE;+VJ~l;T zY>zKvXM7c3#}BbP_LWs-+p<$Rv7BD6DC^7BWkb2K{I>kQ{JH$4{57>tT~d$KC)K2} zX;PY+W~RAmep;Nir5)+J^ke!dHKkqY_okw$x>8-Kt8A`p-P2}o;~#%O5aaisWOmGp ze}%Cm>Y7ioD%LiiWLtb5JO1$`8~%2Z?*Dp{-DJXY+@w! z4CQjJP#sO;Lk4mw7jZEcGMaNai!*tLf7|KLa8BR@R&pPAa~hBHG-uF}PgqDNR`DrI znaul~$Puid1ATavwyfhR=JNn2@gmi%W-L$gAa%UKL)^vLs^xw>!^s@UIZWkv4xzPb zxg`gw#_wl2-8hChT+cjCXA3vem#(~~ioc4*+{1Z1M|&3W2;G@RXV&mKH*h8Gf0)kO z%wQ%{7{W51pjMsq76-GDaXdzEUScA*F@d8Qz!p7}6V;|ZAljNbf;i078$>%(mk{ku{X%pwbq;a3sfUOoOx;8rY3eKDC{u?K z9ZkJP9Bt}4;uur^5yzT3kvPuOlf?0+?j%ky^(k?psbh(gOub8-Z0cg7f0L2_U1w8g z6J1O_PMl)ucA~4P?}<}Q6M*PungzsZrl~-jZki9oe&nC^Ow-IDx|^m4(Zk5+>S>xN zL@(29A$psp3~`oe-Vl9ElZQCl$am1!$e%+$(_A9@8~JlP$H@Q3xu&T_oM+@(INvnM zh#J#OBQ7vaH{wFmoFgtWfAZa5Y?^(D(E;Y?VVt{Ef5(7;$k{D!~mc(Gw+$1hD zO;BQpX_gX~o2Dvpg^};$O3P^?h8p=khMA@>G2F;CGQ!9;JJQJabd_mJ6Qhh=gI625 z&qf=$|Hc@(N3XG*Y+|gDdwrbcv=ie^Q=hoOH2;Ykja+LJjNBiSe@)wgm}1%!#0=BM zAZ8o69`CT``7_6~Pl!8>TragouJ?JSZ9~jA?Hyu)k?&)nX%`WXnzjSijW0}FnE2AjGkb?=GZQTb#;q#mYpLh576DWn=xVj+z+Wf#&UQ;H!?HRT!7OjEKU&9(enMw)L*JEX;? z+(X)CPK~JxY5j2T@RuR#218o zxk82;lc>?;9Isw7kkdqv2E$t&K?)4-CXj)=<|lOJuU0f+vzqcBmYuNi2kjKHj3rrN zA%G$ff0CCLzlR?9HvX>v8}6@)h7{#xvuODcQspJ1WPa~^-$VZ?yhYC2{?F_bhEOhw zIv|v={eOydDEIRyVWT1qap;^s-}vVnZ$N*(5$`2$;oZ0^+%IAAZSByy8*jXkVOVJQ ztt=+DGH*l{dN-~y45~IpQPr(M)187);Cm3Xf1S3KFXZV(;OPe<3`|2hf=iSSKWXGf zJtykH74E^yLZuvhhTu{!PojEb070J&H|mY%Fzq+^oV-;VReGsao6(v_>)~dR>$N^n z$klbCw6LIDsDj`?s8WWM_2w9=)q@O&o5PLa#yEn4>cddx02(e-hWl9>>SyUF4&ZVn ze_zg*3;ig#Lx|q{aStk2V332#l}XqU&=sv(47ncE!A+y6>jW{hR{$+&X9!^>Y0aRM z1`tG-3qd6d`3htYWkUxvniHs5ZPcMFXr};JkVPdZZ~{Y3Cs5D^0HeJE-hwanRaG#()S*!5kETm;8nU97Amc2i_Zr0DstbMI ztU-Y=1`QaARz=`~=@`*R`awS+B3{ngJYk7~Wg-*IVU{HV%OMVnBA3=<7B5>Wmryl6 zu44`vJb{zb2_`*^p$Oi-2`ePBY0j(G^G;lsSVS-(91=}dW1%8Ro+FrrOrQv!jA~#&JY8xk(YKlQs$y8fFR#bgv?FhQddpDjsq>5=0j@*5t|&sHVXV_f^uIin85`2!%>f*>y$ee;`7e zOhlPAI9A{)NytM~dC?Gwz_SXckTj==tOQ*n@|;Y#7#EEzijYgjVkRAl7|#hTcF4`N zM}xW`xNunGRfUL}#3u|xF6FUC`m)f&BD6unGtjYd5o*oKd_L!D7K|@#pBdFx^zbqt z;Z%v&br{iG_OT)#HK2kVZ}X~df0|-Y0*(;1-^fjLch~xJNumon8!0=oCh4TwE#)QJ z^}RA+4F~O`1B^J$*HaE_ikiq`S;qq$Z3$p8ToOhLtIi7H) zByub#io7JSlFFed*TQ>fkQmV-9B1cbIzY0gW_pkcb>N^_o`X(+Q3qTV*o?|@FhN+% z(`g1taWLCp&LUQZXw}k8f0-vToeL~MD#J*?7j7Zn2fh$vN=%hm$=t%+&pgI_k$D=p zVn6~y5)*O*VTcc?Q+Tb_3lL{lftK~7ypEz7#JM5e=*I!W0Gd{Ak*IbKEl$D z;-ive>rvg%HcTV!e=*loMHsggFjNA+YV~gwEuQV2N!q*=&yLhm4$mTVQ0dP0$Fs3i z#&QT-j8~$1uDd^;`KPRx)_8OuugmBQJ!^KX?e1Q?V@;3DxzSRt*s-#z#hf*n$*w{F zO2a6X>jTZ0!*QOMt(2XV&PkqKELR(og@g=+U=~oG41696WlpA zc*(|twLIQ_a|gzveJ6HMJEve@_DvaQx0oRt$OyX2^*XCvIUG zm`@%v$gF}o<)9K}%Kig(+!!7}xoTs$O!C1zhz8ub8X)~Jh$IzwLF+e6JF6N`_hqf_ugCS?5y0o_uOxu3Ld#^VQ+I}q`7zDC+z_G zyW5POe~j@z4ag(N>9$OF27UdNDZ}8)ht5bF1cJW)7>ST`nFy60p=J`I)yr29)E71I zi+0-Z&qMFkb+uper%V%lNhkYLCBwhozdN0_xF9(jrh?ls?s)bQ}gk*=zy@QWGtxRBwa=Tdf-A3G!i(EFWY-gHX+8 zSYry&64zjqq0$`CMv!>jKpbndps2>srmryI!SGkgd=SweR?Z3356C2-kAMjESg)>O ze~BZ}jl7%7NQQzCl5AIx0I|o4mWuTB`hDYbox0QE8eOGGc{pyTt;%#^Y-n^ao{FIB zV~LV6Tm@EMkW3>|>G#)yC}iuF5;x*Q#pvxO$QqWUm%3MG>&YBBkV&SBz)kGrcR_4$ z#E7kl@qFjdp1V1X&T|p5mmM2**$bzr~Vw>j`okFf_d*}K@N_;e%k#)mZuJmlRS$#r@|v4>U7B88bPf5p*Cf2zZ@*eFrTx^6?|vsq_q|I^!USwV#_MJ~q^ z#aOoJfK;a^u35cqg=I>d5Kk;yHoQHmftZL{%TZH!s6T5f63Yr&$IQe##^MnUIwsKf zZXqwj{IY=(J-~bjW^AFXW6)>a8W14Rnt(++g*q2uC^arO<<^j)ZP9fy|5EISdX3fbUT0jk+5afAAD0o5XU!_ndmdjUi ze7R|r8(yyA;+y{?l8f zP}}$O{ng4}?OZ~;_@_U8Fi10}x-nNpVq&0VLrKWwx1#u5yeEO;J#i-B`R`yS z$(!syg9r!ap87xF}O7IZd^`lMW zPu>ReUrF|7hMOzbA4Z%9Ga#rR!?2V1vmlWyhx$cz4EUL*_d+h;e~+OHCooKg40cLZ z6x8#6TZAqrA1a~NvvK%bV%F#bXz6e64`2sduC)TmdWqFj>`xH{(obFxdQ z1WyX(K9k53>`K!MX5w&}&fTahWY7c-cq{OeAW5S?uqwD7`NQit#lJ)l{Lh0{%^v0@ zWnL1|-^&upsN`aaeRQ*IUHO?bO*X$B3lrC9m3p`vP0b82^wA`-1~X` zUnh8H?Dgl~_37_yz#M;#f7jLMyuAynoTYD}W7mQ{wdL>cK)tuzaV0w6R4#_H=p_xZ zfTZjEPSCDge`%M%io0b;XQf@TD=;A*ocJ*LA=%AX%nZYnsL2KLnfLHS2FYSHf3^QL)&E~X3b+8DYG(XND;BfR zv&o26OoVA^1iXfJ2-Jp0o*}PelFSIRmf6o-&MY#wg0y`~S_FAPpf#ij4)nGkp?oMt zgoqQ8en6XgpfuS+V7m+ik-!3K01&jiSqJ%J0%buu0isf(b~k7_2p|+$^5sf%IIx%j zP61ZZe{yEVM-LwP!;ynyXV4F;e?!~m&)@SmHEq8ZiNK}yH+#;X-!@eB zUry?xh{O&fAt@XdJAOEEuaizY_f9CCMOmJll;vXQGkS-JIYmks9U=n7=b+_zRwm>R znb3y%EP0wtGI5xv)6CUWx({d8C~BjKRSRbv$x#H#0V3H^9=Iv+)&Q4a@&dms14x4+ zf185@kRbVJ7Fa7EGS${S>Yn740do%Spd^&@Tc2U$mCGr zvBHpFEDQ}5&_4waFMrNd@!_S1R1>dPf6eXKfa&cTc)O`SMlm zGNxFTG6sQOh}aEWe zZOwqep_JSN;@k*TfJ|UD4beN=(gdgu1yF=<*4$_hNGt)02E7fPmoEos3t88Pf8nX# zdTNAb(@@rjIS^PQGN@&Cb)rq+1yQ;J;6=$-+^w6hzV7Bj+c%vrNyWmOK6}st@tX)1 z7cWJGoDTZEj5c;f3?%D){TFOpUnp9}!u>lQyWydfwM)mTvZB1zx7W{1mdfSQZqf2ngKFRhIm@*GQ`Hj%t;aYUC4Z5*>CHfR`{BoIDY zj!MG3rs>)?3Do+V&)wVA6SpUpKXv}$1N+~+hQlhzB}JL#5fMowsdI5FY6_|-pwWb) zI5mYwSd6Tg-nVeUj=SeYnf}e?TkteK?cZovKivU&&m5q zmWeW5%oNopPb#~o6kzXcqnkwnh@1}n73zh0jsAesVdjd3{Zw7uzwlx^aK*k&8~WjI z!=}%*17vvN_WSR@e;xd8e_t40Ael1~1c9|@BnSf64==18UwhyHTp$t9;w;qv^W@89 z6;NfFQ5hY0OC02kF5uqFm`Tw5*D{+yuieiaWG)0ceI4^U<__jA=04^f%tOq3nJ1Xf zFkfcA1MSXWx*pIh2#)7egj%H^gOqNE2DLN_1!v$yXFl8Iir{+9f8bhyzNqAR!D}=t zI&x~mO(9C()q&mD>iG&a(}5h;>_-LQ4>b_Ig{a^`CZH=jRY(-14{{3fvz=OE=a^HyYsybyt4&FYN-6@xdrJPzTQydz@OAQ)MYbpW0}bm#&_ ztffna$Zkv!zffmV(jzH{x37akrP_s7=Wd3a=geC+UrH~Md-jNyVH9zA~n2Dw#sA95e@Cdhg3c?rD+PJp#q)^Y zJ3nt*V=@|oDjISeDmEq?^OilYEX>c#V^-u`Mfduwc|#eq`eF%rK4Mkp=Y^FX+RMwy zf{Py7xY0khapMP1ukXoboLSw=PPHT8M=z2Ok}ZIDRc4%d8`bfe4Js}I?JAU8t5Q^a z$)J!q4VO!lf6j4~(-#7RLrFLpkwY~Q+1-FD7bg?k3@|Yel7N&Jcq$uE ztSSpbJmfJ9=#WL#X01sVzJ?kul^eWZX%xQXz?3Ryvi{%amV=_)koFFe-TR{B#CxHR(WoS&c@A}#9lu!f#9L_rW>gk%=!n?+6&O@7@vL+52e*pi;acxNs)*3_%SxK~-4)x1eb#5kbX3?fZ~!M^G*a(s@^4_1M1hTe7;xmZERQy@IgpKk0GEd+e`$TFj7-(dsDUtZc0=Q(vYn8gctT3p z^5c)67AA{lH!Lpgcok?Erm7m$b1|qV1GF^H3{d&%)zu8E&rzmKIl2u(R9jqcV8&<8 zUNB~orBb6*N=D-GVmyu(&)%M;a=lclm(de(>jVR!5yV*WQ1%9b+5R2pUxQYCW%o7b4_ty?hi1{6(VE-Qm)-g~7xrzG*qAO%GWL&^gr|bcJ!(Jq>k@eJ+Pz4fAU@1&+k8(5Z&g#tGC+R-$-o2$$^w8 z{`&*P3OriZ77^NZ-=Fta>P#Tpf6#{DXBnQcnGVo6J4mF%#--C2%9^J?0NOtD%yamr z=brJOnZ0J!s%zdvFSCWwe13G6UZxOy{Nw)dsn$EVEVkakg$eBG;kp9>TvZqYG?ZG{ ze;@=Dtk%!Y)pMY;=%~#TTCxS`D1}@&g+i?a;4BKuECzqaY3XQjX>oYhe=vM;cvnlw zrA3%lNeov%s3HAfX3;-RzmOU+0C`5Tmyfqol#>1;1!G#e?c2$3$u5{(gCIX`WcD!^ zGdEJJO`r#zoJ~}!r~1*!?sM$$MWF9O^_^g@Wm*7*QZ3L^gZGe$7bpVyNjb`)%Gt@; zDx4gVKr_HyimeRIAKYH8e{QdBl@vwVI&pY>{P2xO#(v%o6yu`W2Jx9k;-w&V?8u*0 z>5=OEQ1Gg&n0REIM&5XMysNtXAdRj*B5LSyNmZq_7q`vTb0aSP4_sEkpP4Yi2>smy^M`$end;ec(Bw80l9{mHaMfg8x01k2MgE#i? z1uY`{9^N8N_CHA*`$~Sa@4w`uPwtzV`ps04e(S)uJCLrZtUOT{M za;d>e*TfP_EK@)a0h2dEYWT3L-U z{7PWF%ObbgTBF9y)#sl#GCDeP-ub_72hao5`^4FG{i?3cB9_G|krN3Q#UNygsw7|= z7n2tye~ZXnzQaKXb4Wz-SWi_%NaR)49I9Tpv%gpDIU~;?fafub2_D;9m2Tt!oN#h< zfaiIM4?JJ4Oy+Z`yW{7KVY=odWuirA8AgQHY8t|gOjTku=$n5apCCgZ)2d7aX7w20 z@FhUK-^6@?`CI0B=6is}pfU1-O%aqA0JGqsf9}v*GgzrT)s;Yb0yVSRbX)V@8a}IW zKnS6Nwcl_J7N!ApvIE-T1ag4WdP1#f6GlcozCWjZTfD@Mq-)Ez3M z(>(ASlWC{$%|ym2bei<%4jE(3wbi~2>mFIRp|45huDPkPtw!+!7j*Zx!l*M$NTV{#(HAm_@ z>sj8gJWd#56*=#C*)n&Wqapvd6xMz;TW0T!N5wjn8afN zc#7zneKAOermP77=f*`@4sKE)C;X8-Lv)a=(jY4gfh;~vJ$O;>6}Ebd+F-3(e}GFM z$y9RON&9zbiS=?$uGzA-Qo>d{Eli&92c~(&{|CzS$#zLmmn~_(dcCNz1YPVu=Ag@# zz6rtqMp%~kYY01ncKVNBZcz?r0qc9iDjHe^A^gN1QIVDmQB_5Juc$8Fhu`v9nV^-~ z|M4F*F}?IZdPI$Az&XP!BLIKAe;4@Uxxlk)Fq7s%*Eqmj3T*^QCa{`T%B6tA1zrSn z4G==5p@1*8-iHVeGpXqYH0YJ@T5nOaVxXqb^n@$|m9J^gzM(=DrS;_d-Os;J?i(!) z`d8U@-v=J+8?0^koxig*+Bb%7aGb=WPi5h4>ihS&-H-T5h%UeI{K;tVf8j5tTuJ%k zr_jiI-~8UGbuXRcZaCaw@1C_+oWHICqV2ki*Wu6U#sfR|L}SECJn=TckRuaQrioMg zmkvf)ujAo&0-oq=Hkk0<*u7kF^mpM^M?Y_oSakOecqi+#bCyRedF4h;5hUp$e0T$z z8gGoh_oBi}-D#;gs3m&cf1918=4wtd8H(l1iQkZS5*H-oBGbu?hc^7vvF4;CS+9Y9 zM)kHVZqk)(U)A-^*;43M-$(mU2rj4pig(g z)1B(OlYL3zR12rzmp+&1O+3;$f}0t^zFXFDs`+#(wa_`zOtqgWe*iF>6aIXlC)&E!11n)U;&kFG+UC`Nv|eqSP&YM0shrr>E5(gwD|FH-ZB-_ zvvOiu$eW%i`=3Uvf5}V0^$bZ@96?rWt+UDVDJvz}yo_C4ii)x=C~8tyl#U*jOIavP zL*JcDGQ#mGGaV#x4B6#^Bq%}CbaQ;#^nV=+iK%2wi&>6AWKNCg+cqy>w(G!Y;^UFc z8~Q4Z@tEm!<)evZ&HW2MKW|@i*+_HW0@evHY}q34oFRXRe=eu&=#%BX?KJeLY-~Xs z;RKc{xvb(itbqAUw&-dShIkdC1wv%kWhH{r$&#zd0MF8Rj>v8BlBQ(1A6SVZq*zQ3M0Rd(cOtp_?U5;L_E( z@Ifd*Mie3F28$Z)!Ahaw(LC}(8y-@G?s7pIuN@uui&V-U^&kmz5NcI}8nivSlsAcL z72azB1xag-V1X`3+e$&(MJtiV%({E8>+Fs=$-QshF+3{|9v)O!6|?;E>CUcAZ@W4_ zf22rz-nP5ax$wj_Zhj8&2&-7)Vn#|;_N-mMZ>Z+5Skw%O6NGqz*SJK6qniOnG*&H$ zgPJ639ZpSUrJO18`UXSJjDf_xNoA3`4D0PHARW{V0}<0f2PSr z_jO@5LJZwhP<*ZfNR}+xd~{+oBJd{WOUbPbmWykqq?t}%rAr6Ft(ebcOjd{pxS1Zi zB4SyJu4-!}#axh$4o?>pz2d5WYhr9(kdLcr#diBZ@l({UqZI<01QXZ@78w)x^tsG? zfa}2=50x$8#{p`c&5}hZTPz1#e}(A!M&Pdih#d$)6O?J<*4uI*JkbdOdBTK`a^=^0 z^Qs&xC$j`uF<2+IsW)fils=e67_%amPjKA0NC+O6B*ZUWTia2s?x^9r;a=PE?p-&D zKulDk-)jIqOCMu7Nr4LL+3_9`>9+VGLA7{@xpY5E#?o_})+J|Td2?}%f8(!aMN^PD z>W+>u_nf6wy5e;TK^z>4suWL&)Rl1<^875jEC%dd&{Mt`Ill2Ov%WayCN zM_HDKn)YcKs430zQOu%2L}-OF*>(*By!dzWCZaM5$p2-K->#q*B&zwj4NxP2eo$3A zp!qJPb$q@_EnL)^MH$#hY@yy?{kXsl1#%pf=6LG-qGK3Y-f1bCf5T-M+kQNb0(Y2E zR0oEL9v4;QI7o?ztPGm9(Pan@O9-2oJE~eLeEs{P#gv)sPvXrqV5W*u{~wo~+pIbX zK4Q0X0gs=&);6HVRh|IeHLarV%m*&pA48p{67<5TDVSe;+iy`~$! z&Fu`s2kSiy%<;C9I4>iA#-E-;UH%WypHBwAU8>)3+fb43{LHm@?_2Xrt4hPy-+t;D zJ&T^1^M9~(b#TMCb`IWt!*I^L;-LsyZ(YC3Kd)=(wqx}?MA&oIF_118x^FbBE5}fa zhs8L6e+<Qm>&x%e4#Jr(2L0_JqMb3xE1erq__4lyzN3 zDcR`T(C5Eh)~nlVXt!(_vj3rMkN%pgpy%{tRoT$x2?}~|--ceuWOr?TD2VCF{zld* z4p2Ker$U>5a-jDeV6J4Y3MBJ#(*pWMsh3p_8X#EIvlZ1WmnT5}sG&UPP!Tr|;%$L8 zBZH}1APBW}DxXn`7Z^hN5f{LOksi$LO6xgv?{oPA``Q0|Fh7W5z4=Ha-y1`NdG-kC zavjZVw%LIP-iM|~JaefBDPmbv(C;m`F^#61uJwC=qzDyJ!QVH%#`Mx*`mzP1NZ|v0 zjZ|@QFpp|>zIU)MA3@Fh;9%bWI?6Stn>qi5d=2^Ihhkqdy_*8qTRig{@k7_2jDZ|) z^31O#4&JAT$HM1hqWWi5JSM2Ba7v5cZ75EGvxbZ3+PI#n4QcK=EA^7 zo312O(tWYy^0 zucfmcC&xiYQDBzlsP7X3Rwcl^oIqZl_v~PG+isM}MBuXwlaG0NiQ|@@4zGzk_OP9@ z;hIml>2z;8O{Px1eR}Eh<-`d_w=5koi89dD6ae(50-Mh#$ajF(#h4-HAho1%ujO&^ zUu?^w^dcaYA)TcIsnc&rOoIVxZIKLrP0>-_3q2I7F2?8X*nVrFSS;MSea9D11^4gV zyy4o8e7@t_4V#}l72FGbsK$(JUXMvC$L(AZKB02-J*zB=Hrfk395)3 ziKTjm>IjeY2|TY0Bdb7iD6VLhv#w@S7XT-BrKs$rvWKDsy7x)G9b@{K+5d{#o^3Ci z9pwe22kRi^I#6I>K_Fb!8t!YY)g8I^(1GQnqstE*`fWS#cAoWr&gzEFJ`#29D0dIy zSY0p@uSIZQ-f%|pAb@8Co#w)S^Xwx+#EQw>-H;2<#!jtK()ILY;4>3A-cmgv@WOz$ zQe&G(MWzaQP4Au3W1``Tk3A;32ECpPf9>q;M2oM248#6oXKz(&PJI*VxfaG^ikSw? zwhC52hsq%LHYEgv#0i|Y>|x69T5j8P>Cg=wzI9Xq)g)ACP$P@+mJe!wzoa`mIf5=g z=jyg1{^1%Wa*3{RLdTSAAT=#nioeOm&Cm|zkE`7sH8%RQPt!MvNV`i!&WfrOh%$y9q{K+x6(m2oG z!P!wYfyBPmOj%Zc5Q@i(MaZSS7W_r> zJXr~02c*AIX#IK2HOwucKhznXMuE1;0Rln~1RFUJybKN^;R{1_qr(IWW%&%Mv>_;- z)`#gTBoST(#f4#j$+b4E0!5~_A02rU2m?Q!7(I01pW6QS5Ez{x+D(G1_)o^oV+ztx z(daW!QNvF>C@PA7_%;EVj5Ss|Ey)A5xqSAAyIrx1R+R#E99*^{}I0Z zY4&yVJI_lbIwZySUjZTo;dRY-ofE*`X=Txx=)2{(>Rl6m%K!gHz6`i&gVwp6*}$A1 ztjL5t&%dhc%V%^dISKNLzAvAx?_`BcGG8laikJn4F5D$SI(GSAViP%y!5r;Z;!n^59{|p5>#4e{U*-OA3pjY zM-Puro($m47k}y2a(3?cS3Yt{Iz9RR0|#}_|9i#Z_eoeep?B*qE9jlKh_0{*NF5a} zxkQMX=x7KO752&jknx`?dgr1L02xu?QUEe=!=9iqWFYYwfEW|Le4rYeDyV4jrlUv3 zCnm;!j~xALJ8;v1r@nt=U) z>Oh|y2<`Eq+1+cM{Xn-;2TsW~*BhdH)PggA0qPB^*=He|t28T<*b6tBo^2P*a2fX> z+P0;;S5jAu?wj9Rn43w>Zq<NZwPUM4InjxIZA@BWReSN8S^gqJ($VJ{+w*gkz? zCe1f5={cbD(>JWo{(g=4dH=^Zh@Hj`_nAoIa=J_N@q5&m~tMSMCa0x3)P&?4|P{-1&((D=zB0$uB?0jQn{XOIBeZY?5zbgMQ& z9?RCS!mpGaiLK(8`m!vG@+t`-S&0%7jV*tdWW({F$Cv^Vg`8=a#nhpL(AjOeH&$Jm*Ukpg)>O&Id34+y?Qb)Ifg< zUnsD?L=&UGu!4W%DUj4)sv1ouqg9%mf+RcRt@iym@b#jy{}#G8skH>!6Y6{8v^A~e zQD{3a1O`(oSO-YmXhMrC9DNS9j`f6_Dru@<2O20nq$fXGD2(R6|3{;ciL@T@j-@Be z7tOJl9eFQE$0DdzhLvicS z?V4+%kHf<}O;U*Ou;OuR2LvFKHg4aFe-661#}t@4!!#+$tp$gZ6wqsgxxnvoM3~MpfnSw7GJoEmI>sWuoG}!An z(UAUCGQ_jiu@r2@3%yj)YlJz09#4=3X)N%D>_>UB`Bas{>V;KpRWGdS`~QDcl09kD zp!?YRsGf3GXSL>8w+R&LwWbi9vM}7<^+?Hnp>1jpd?T16=j^Nv57%~{^UZeP$PIL> z?fBTiBmdqGoHI40aQu|1bAx|Iw7Pa^s&m!WRh@>Kun2QT+8{7>M%o~-G&OY(2i$Ws zl2f^|6;BnbL#3`&ot>+?3h7wF2<=|S$+N&iGR!jOD&`*M-ryV<$7kdae_AsA9S)lRAe$4uL0NkOZ=-HYR`ZaDyKDN1an@ zRhlH&dmL`sr-+C_s32G6dwTNQWQk}*5V<$N<4f`0}!vZ5xjk~~FWJ}ZbK zFJjDY(6A&58c&E|-=GrE{v}Q1RC)^A20_*6>1RK(=}{Y^B8U+Wvo7Pu^e1^)AqD5TIDD?#ZKv@;z5!QIL4TOX6|frkU_8#|nJ8 z%n9^JF3f6z%JTAYs5Gx>^t>(s^Rn=gBGdDhBw2xwgqJUddf~&YNj5VUbCkJ@d5C$O z`5g0e=65hJ8ZIwzUa&tqROP*DxLG9F+U=eS*G`MC(S5Geu}6Oh^t*gHbPM2(ws|Iq zrqWr!n_H$X6dq3#`U!c#k%gIn)0OE-Iw(B+#^ostd`Y!c2223DG)L&NoEhfTFe~MT z(8?${pD^&ufC5RmSueL_NXP^=g8jId53DTY^SY_&FMoT0BLWel+_+>$DqbvZddZk= z8i{n$hyeaNx@>>M%~-;VBr=|%=`p>wK_H4PP39FtbxH%}n5-BwuSk+pga^}dEhAnT zD0_~=YuyQ+p1_!2hHo4i7zV*yi;8zNh8rnQ=&0y?R4=5W88gZGzu;`?`A<)Ckt8?q zkuOO6`YZ2}B;Jy5{mzYQ46AqCEk@b%_w%;Jay$1?e2ITZpMP^-xtNRybT=8{4TYun zhOsE)M84SdhL1~h{UgaKTlxwYsWJ7yw&Tc)qrpvLgu@&s9Wt`$3fnO>Mb}hCQdCWm zRY_9~U6mw7mSr@;+a}=#Knyf>&Ey4<7o>=3L{vpnqZW=hQ8AYlF*K>O6QTRpZM_Z} zi-a3@Zu@@#JuXgVQ#Pm2Qxzj7`i97J7k>Lm&0)1izkHCh{XIP-VoRiJiZ@dHDjer{ z@ss|y-Y&6OQcluirlCT0d6TFpk5?vSOF zG@EiJ1uZ2kA7%Tp6^-43`%z$C+CTPZ~&!-4rY=pBKCXSRR@$^Y{|?@D%dcO}0&$af{3 zAz|c)&QNz(=iIM;H8j)JH5mQwfY6ofPC}4(t_Doh!oy$P?Z=QNU;UZdSr{+$72;6Y=@SNpF zHFyfQEH$befAT~ZH;PVwuutEIiJ4fTFjy$W!W)j|<7;F2d~9tz|MJtpEr`G$wX9)( zC6n<)QLR}+OJ9ma;Fh^MKfm< zj<(XAR8jOY8Rg8(9<*pt1zIQ`KUKCr*eU@oOkgWN@f^sV6Mz>bW|~>YY=hoC$XvrEZ&{cm1>I+wkFY1{n1 zpy*QZ_U-APjE`P$&7PLcbyl+cUETW=?uOAvNC1)xiIG+gtxy9^M8*bUPeo} zOjKSt72HSR&2XK$tp_AtV^=WnMdS&Xc{Rx`_WHj=X5TN!+2r#5{m4XS|BL@eWspj< z(nMz~R)m!r4bRhnEkSuDb(gx`9re`0YFM6r#( z@~gl8HTuS{N|PmcKT#@81ZCVq{*_z|4h=^2Pk?w%t0qcX;XJ z!+S?>-S)bCaccagUewuDeRgPl{H7Iq4=~Ul%!y~n10Zv#Obj?Q#~?Gt>|xFY3UMoQ zH}lTm^!L*a2BRZM<$Y+EaN0H)?({7&twqmZGx|wfXq|o(WL7zelg&mQf0KpuBhY*d zBWf6b5*%H~i%~6ae7_7F1^*<>k`}R}ovZL7 ztwhvN!yA$c?fRffWqRfNe^yRcbbCKNKWe|Nw<0P_ANA0=$aT^C9u)gPd#)8yed2?u zV{4`_n?lo2CkUh{X{x zf+|-E1zWVGH=@Fke>1LF@PB{((Z4PUYu9GfR9=hEt&6E01ucnxwq^~)6x77JbulFe zG3YCNJd+R~^8Ynr@>sM`a#4i5ZSfA2vm-1KBL2VKgQ`~uFaG(;i~snmJN(@pIW0T8 zDy|kg)%fh{qN+8;$J=!5o? zjYuMY?x>WwU~qox{sSKw8bE09{Mdv!qY}Mr7|!5CGEz^jidSvb=@xXUe|49e%ei{Y zB&=xtvhna9ucO0Tas7HL#&LEs?Q!|!Ol-nhQ%I+`Z2RqXSMA(gSYs>6TfAX++#87% zw#;@orVtTy8)>5LmbR=Yqg-Ey=A~4p3+3m3wxf>z4m5T7os)XnRXAJU^DGm}!hjH; z$6H#bbkMogKI}H^gK*DRM__CGGzTni3>OXzyL1-4O7iA)%FlJzNeJ9ZqVCrT^OmVUl2L6+LRe zvmsSbC)6mH$f;EHrOf?7aSy1%>tro|WovWS-eZYo%sD3~c#&MRx0F%^z01y;8peMu zzoa;a74d4tZ9xh~%-x-a{BzNsQW7A$?W{r9Qa*9DpmI|BqN&T)NP?3}&Gt_<5<060 zM-_KkeO#CuswWbnu#Vn@Ep6aS*Ght$Os(#lY9w_|5s%6N@VcQ!8(87Fm)Bo^En4LL ztJsKgxva9c9TQ}Q#-Q6l<^R?JMLaKP&gG&^5)pan9kQ+ppHQr;FRyM%raOMw?N~f{ zSWxL%^|t=i5F#Rf_!LB^4be`3c5$ve>yao zOVkG^I}%U)?_mtv{qKVC(l6gk$Y^WinKT|G3gJsyw6OH-xN)ZAq0$%&(r z=!czU{{y?%ukD4uwd+5zeqB#5`+2!@X48sFWkm&lVdnDbPqlQ}e;{{%lTPXxVDsT& zjIDF-TMMB95{C;!p%^uZYF@QjJq6M-dJToU3&I4A_94-9LA4V8=aN(VrRlD$7YM>- z*_2F#T+Nhp9$8xNilr1OSxvZEnqY^wfB#kE=-oARav%9-% z)tYVeUwm)@Z(KU@?<^rIvyZusS!BKdy&7$=H}{ACpkx9EhC_6J>Tub1FSh|(|1>2$ zLxCD8b>y^G-zZ}}NkjWlskL`3Ok53ifzW;)Dsyd1lAQ-q5$@nW>Hk;B1C2Vl>#WiY z$H~i}_F3R=Ehy{n=)a5@tn^s)G=44XvWlY`rt0dlDu6E9dEJ5P$n5g|Vo$--jNo6P zK;2n8)qn9t>76Ss?5r)tgNj2zWS)HuB)r>bGqlCd+vLfVQyvyh8YnU4uKvRPysnSKoNu$ z_^p8J#j5D44Dk2bMFkXAS=7-*blFwWzxu)5spJap z=+^KX;GWm~9*&e&;znZ)BKd)RKe>`qD}2s=!gf zaj0H`+fQwba)8P-`>IL7pz&9sh5ay;P0 za@UqcJYLRP=ZS>7*1|QVb*p;1P7PrQ;nmm5)B1~Srhk4H(a+HV%)h3X9-{x|T5x10w03*L(N1(zg$ zT8X$DQ1xm17fUajnYnB!2s`?I_Ahc{Iefq;hno)#55sN47d@(jR0TK1E#nDGlw56E z_zCnR=JPeo74+a=(D4`IbkGL9$rEE4y$>YoEsKD95`EYX+n*=MwWt?|_9jQTTuj@i zKq3w9wQuj79ZVz!XFI`BG;ZmqpKaHFwNFwosfhgtc*_1`*w*gHwbtXx_qX?dzX1P< z@nAl<Wn95tKZ2rdDjrW71m-w3WYx}ez^>+X)h7jf8h!xvfJzS+K+hc7idSsv_V z6-fkpdH7Gon9anB#TdllIM0P%do9HA&DZcJf6pn7J7w?X_}25Cpf*DU**-ykzV4)+ zT~OzDgo_5jc39Z{*TAXf8<5-$y-9xU061kQUdM@)WudOqkD!ekg5J{`iEte~;tigD z;gL>)5tj*4y+1rjya-=x?Ryh^?mE$JIkN@kYo<_N=Z{+5Aa$^%+^(vJEv z^c&Qo*Wu?|8`M;nxdd~>i1Ey1Mz^pX#vk@&9V~##f)5iqOXBYFocl+Yi(~J@i7dB zute@!KGK`bJY`nCn`5?d3SJpqT==9=A}}}H@;;iwf)e!smHQDA6Pn$8{;0* z>3wHa{k!1AcyMWJPMJq1@poh5H-y+;v~*Gy1ATh{&?RzkSv||agb^}MxdbKTI`tD* zND*8=u@m4VIBAcAc^m%+WJZ>e0Lo|5NX6;qZ)iaVdY$;JJYD~vKzE>N z!Vef!MC$7@8FiCUlm=|DZb&N=7vKZyqeChiAxKipJ7I z>F4%*Pr>ApOYL@lJ^Z&%J}q`?ZjN({H@>&+&amVWtd!w+nn-y!r7Sr?>4Rf z#y6!dd|_4*Z#(IUmrQR9({CQ(|I}hKhF7u*(?>lqQ0gK{45O?h0iB}?xnw0Fgmv0T zI<`O*yv*p!fi$Wbm^LAQDA7Dw=toTdv#R|E^^G?fUjlhifT;BZa3bORO!NLw8r4uo z2%HLa;6&Pg?%SD|KRG{t|IT^bu8>F+`p5U}8;|&IAbLMIuuo>gO$U{5Je+MhZ#eyP z=m`g_E{5OPtbUF)ojC(@GPZQS>`l@fBU>W{_h*ehr8k5=jXxr z$&()+?|e*F00b=O@- z;(=?fxrV%JeCr<1V_G$g>9u~$*{vskbYfa3nt_&CrQR3>yz&v(UMhiZ&bLqMRecnY z?S+<@B74>e+{&T*Oxz51Z){9YH%PEM*$sLodjW6X3_HWUDfNVSG z?Q_8AJzJt6T&m?DU+TtWL2%g0 z(>2koF4Ckl+JFhIRSD+bvO>SQVd+ev!()2#+40E_PmX8vINed0S-RmPE|14$-%Y~D z;{9EL&YATyoq?|Yc>j(@W5-c{63iVJO2y?XHj+BCq%G-WmgF|BSY9j%$8lfyKzEa7 z_IEmGI`ILjq_=8gN5B0Y+EqWO;r$$fO5bO}*$zvmTI)Z-k)vvX zF-T0t0mXi!d*p2|98@KLkT&zR!NNdmue{t6__q8Lr&=3n4mKUG1n*De2FIgO`)(yD zxkNn?;$&7)c-;eLIE|CMvWNs^KgNjxk0@Yf@O-ZzNTMg&8|+r?j|2^m#|RG2<(FCD zFe|%B6#-&OU$F1igPsKFJ>1)$%=jf)lKmO5Ke7UiD}g+r0g0Auc4KgJ{Vzk;J1$4TB50nsNFZ!P_kmkr$R&_ zBdJM5z1B#NBJx3hwN#h@m2x@opd+A~Cn68Ryb)!3{08OFs7o`VIu|abedjdHsG+;F zqs3sbXY^cOFk}$_umJ=(MUf=@yHNn=?Pn@SdK>*NL)Jq{08+vJt;;_b&6uJZ>FSiC z9V%;7hn8fPUy=6&d=WV`wQB3Gt*fWNy^+DyV?mb|)J4&MWtgE%*z~!0$s5#~pDpg{ zDB<@tVf_h&({sZgG}(C3d-_-2&LG>GZ~hD2fONca6p8Q4>>0F$x+5{6hCPnR7@36R ztKvBXlPV@AS{BtglQNP9y1woubHblIuKQh{Kar%j4m211KI?KfmjZ1W(3&3xKj2U= z;!e`=Lq({66+@unah-H|zCc=hfhO(mvMvwwg4dpX_JIAFdx*c}dz=uk_G$9X82C3l zhkk=b@QRqk6ze#iH}^A_F*h@JGoNIhV4i1QVSdg0iFp%iQ1 zz|z$-!TKm?Ukw672*!Ky3pzc!B#2P|sC@!l3gP!KC@BmN(Lxz>uynAzEVmVYpL8nEC>QennWosfB9zOrd^M}L1#Ma8- z?!jPy_7DgT?gqYzizdol{oPg&Cnhesh*Ly=QITpa{?Obc!Z{Jl^CTx#c#;z<0;wYP z&Gnb!u~aISIy!@98wi!-cnU})VhCm~o?u4~rbs5*+4qOUfJN$A1Bud_QfbXAsd#WG z(Yvl(Ue}u#3dU35yq=Xku>n7+Z}rD;rup}4XQsQdot;_D*FRUPb8BzyhA3MoWD(SV zeFG~?WvEH6KFpUPhUwU4z!=rF;)9JL`eixY3{#I zkG{#!G=tONN1a-=v$LvoYFeitdOY0Fkl^AtOv4JD+RuVgJQ$2iK}lLj?GgNcLQ?AN zltRS>q$6tL5h2DSH}{in;oY+5BMxzNw-fDmqVqjOXwuGs&&J9ze3Z*E)3!w-X2Vy8 z2*0w>jFqEC)a%7TJGTEU2&so-v4>l<)R)lXXa>*Z1S7R2-0Fcu;)W+WpTDo}EcODi zz=aMLdo9Ov4XQ~*jNR(QNf)|*5>_i4Hh*W!`twn}`k8;)vVK2I#9+O)W!p~Hmqz z1hEqOf7?v-P_M=4haO$^oW8fhArVPFev$=}Ds=`!Aw3uk`gAQ4k7$Mwj`=+0?s-m$j zMV4`a3k(ypTfPijvhGoJOpXeoWayfqxPj{S>%@(Vlun9JF{Q39;Qi>TP1oXI41^Qg zH+_=$BURX_k0lm=M8KzkUrRi9^wi_3#i^fu{zA^QM~let$*5~e)MCPNILh(TN&BlG zlQ?{T-w*PCFPWk&va3JYSTVD%k#!4@7aijXUJ(QskBciOmsTE_WsT-GS&B*L#H=Zf z^P1df!?6!Kh3DO^%n)+`)BNvd-ow0?xryon<9XFl7w}Mjvs@3EbcrZ{ylZhH$iu8) zWen7)S86;FS863lwaXFF#)mx=`i8uaj#E5>(eB^?C)*CVM*yF7ykj~_*A$4O;e1Q2 zNJ!?qhPZwoPjLJ4|GlIe*pyvnyvDAAcgDYP!1Gu+`HtdDm4 zgI*3H&KvZ9cSqNQTDyd|gQ;>bm(K^SJopgD%FSON=Ddc^<@R$f!^=I!H(%w^IK7jI zleY2-;@Kd*sL>vbAQ(=0LYCUa_Kij^zb+&V&O|M#eOddNzZ}R9ly_E={oFg zIu6{(iLz9^#p4pWQ#{}HZ}b|vj=7il9P>@)Wr{0*<6yS6@!5!$QkSFGk3W6~sn)F4 z`_8Jzw^gGE!<9B23|EVQpjH>xb0A#v>73JB-Z8&h&?uwjjZt*Q4?(q_b6k=W!p}%8 z=tAH*pG2HmfP;}9rrtq|>4TZn~>sDJ{y1DYq20>2mB zsu>7>Zdk9II;q8b@@BMSO-C%0_q+}O(8Ic_Czo^}1jw27>%BhGTQY1$v&;INzRJ52 zk;=$}f};9@!R)d|G!#n$=#F&6*01MXz~{}V4-y4~(NZK@-;Ca=yE(*RR#INQ#%+ia zPGpu<|Hp->3_DB(K=S_Rg9&e1GyD*!u9Odd00;o@s>FW)eX8zu<2sO&Ngb`z@5Xif zUCZ~BeW?)7lbW5T8`2tD|5zWUGKj}8+6#a#-`2i=frdwS5qD!y(S}mqR4M?8UtT=p zF5g{tS5|u^08hW}<^?4zaQIq44TMAvfOjk0+ZCxHTBHU^Nqax`8uVp!+`%zyNpp#R zMLY2%?QbbMkd1fzAAR8TOPb}2DBwIPAcLby#An&J@Bja{eH49k8=5zi(-Uql5}x9@ zuk*<3Mkf`cX~K*>2)@zAvv~%615INdd6rqv>}HPRx#=$EAtHt70y$?&;e|3$rl6av zbt<^b=YZov&N-bU(zgaxz{9Q1@~uICz7NOn9y4PUTi9WfaNYyjIzU~77_5;-qz|e@ z>i0EBRo=)Y9Cs@I1m%GcpUCI5mPVikzTwdcm}^1jz5Njn7YLQRAfC99D#)Pw*(-RT z%U$+~dN(HvfS0+b_q2@vz1Q@KNRaSa&}rQ|9|N_pr1W^bUAO4+b$?EOs4Vn(-9a_zc5`E#O#FhxbRo3@DXtiPm3SZ;P!4a@ zly?;`0pa7vZ}|MV_e>qXZt|XUKW}$je(Wl+>Z;+PV^`UqWfpA4UPJ(=h$k#2i3|xQ z4Sumv&ZE!#4cO3}2aL_!8LdX6)q!#(QU;d*H!gg^?t)z)S{|%KqUC{qa@2X3UP4cx z91~`$Obyefqs$8C9J;@oRH2|#-%WIvYOJNO)7N%yMRlSbjJ_84aRv>_S_~3pEfk}H z=7+Om8IT>zt{Rk0myQO(PMkr>v3Mb3zsKc;xva}~exy){zypy&^YNCU_E}B>Qa$2R{0csZjLIpX zvZ&k9Ptj2-<6q){c=LmaT-s(JDp{$v!I`VzIpm$ zSy5zgxg0l$GW_k~$ZcUnAg2PJ$Il0jhM4r9F+?k-+{kX`Zm!wvtbwr_m_= zg=>iJQnm-A=r^1v+mT}wKV-rAm(LQ~F1yIaq{T1nWaQ9-Uob+AEVcyWc(TB@+_>=Q zmcYowXn+&J_a)(f2PiO+?U^kWXSdB2mFGg64{WW~w$>{f!{1ZQWMFh+B!I_yXRH>D z)`p4iAY09i=W^rckN^%Q&rJ{pEOBlUGhn9z!C-)M!K-3HD|{)6#EWy=NY6d-_{E*o z`j$gm>b)ITbf23f^%5I5!s%9@!?kGh_3Zd8(Lu$*ONoSkIXGY@ljgvJJ?UNOSLibQ z9!xQ-i4U!8%T1&8Ru_(#^rUbVwHBgEuD);|C^!pdgdBe3jI9j5nP+8C?P5Gxxh}rg z<&V2BK9hFYpNK5a_nq5^kFMFsPsF}+50gxzxGwr56=-)VydKBzO==*O8kizM^Yzp~ zGC8n>1Xmt^mCd;8$PpLr4u^gxZOVE$ito+VdNTI@aHLLd|Dmn5eEPP`TzZcf5AqUt zI@y?PBxztjmgt}8Ptbte8)EnJQS=Jhw}8^SSe7+K?K4{&4GUg`@gI?G<^LjYWc4f} z1QuqZ(v3XvBvTy&Rl!2vw%3ABVaC4smG-|ITmSk^n$N)63*#)N{&_IA_p%H3*F^-} z1Lq!o2mEu>qq*Rh-P*g?d}U324cM{fpW6u=TmXN6L38gh*~9DTvd164NLLewzwl)T zckEj9Ig`9-N+)5tH}-Nitn-hCbC|ge!=Hxp`Q~ei{<0PXK^np!kojhUmjR9+A(Jg> z7bjGZK=XF6n*!&4jD)`=rar%vRTaEuC+SYgPjQGQqN$+f&xTJwL6d7~ECyFpQ^m&v zlbvZGe_u#pw=Ua<$uz`WFmY5On!5*A+&Onp#N?lFVCC)ee<_7U(7rt4j~U>-_LWIr zI0SBNo(7kM!jYhT3uG6`HIGx@M_Hza=_8)A-_}=0)lZ+DUeyU)27VpL)1=$#Rtu8` zP>+zrd-hw#efl@WzGb70-Q7JaJ3BgFJ8$jzf9J2-U964Fu9&ERpMJLcs;k~Ic<=%o z+uLV<0+c7ynNRFoJ-01CaeNt&^Y$n1%wOVQ8PDSi{n_FxP{*m~5rdXPse-O2EwL8kOpqG7reX zfAD1g(f2O#MGzpK3sgy$=I*&<*}-RD{@Sm;NR*j?W&a!b%cgU&grTF4fIxCh$8-lu zFR9v!H($1L!JwpjGrFZl*lD;Fa(FC)HH=Owq)G=pAn$QuM*>5Bbo^9X@g2H(&B z$A9E+xb@JXTW{F4i=Zn+0!EtKO#O zi4-nDpr8mCIe}3^@H!ekAX{VGM4;=dap#wK6r4MnNQM|6$VG1AC^Ydy3}d6Km7y zwNC_sI|KeFvX{ElagWmG89#)6jLv7=cnyy+T}(fIZJU#37swV& z!Wcw_y9bU!KWNoU8Ep|3=)vb=_*@QN9O|xhhiI@fT`td*%iw|_e}QyOH@nW9+TvA| zY`K!fVWkYdXLb&Eb`FoLl)7*J%xIs%A>u={O)(fOHe;l}nX>JG#14mAy@k5L<%`=i zA2x@&x`w*Iw>{B(G@7?FM*9@LXd9E*(QBa|kFrE}AbqwnS|gvy^DWngi}fA*8c90U zSL+Qz3lMRuS>*-4f8w}CbgI&wZrqw>>RbDoH}!3;;}~96TGubi_OFjDTefE3bfebC zab~zSwrip8_OO;#kcaO5|szCs#GbC!Ypy zI6cyyJ6H6u$NDyP^n^lN>Rss`e?;O{(eIi#C%?37KgSA}e|0TAy3fCUTgXgD0)E4< zcnm$ilwux}eYD5WoA6cq-K3c^(Yi1eTQgTd+XrN8eyCHA_Gei)@t|e-1Fkzo%dF&_wL+#0g&<8CB3~V@Uh<1gGpTN!BnsPrC99n@&}h)6phED z7cF~m`Qca$e=I$7o@x1Q_zn6hieTEamziXCQ0oh-d!e^n@agzg8# z6Eu5*T}dk$4drK}#ZdEtzS^eViJAJW8H@PbNB#c5e^f2n=+E?otCBa67{@FtrtT5u z{9zc@&1?X7jax6;{27xVVQ%Fgyx}m#t7I{DeQVu6f}|Kt~{E z!j)zWg62`HQ&ADm@;#UahOE~U^82CRA8Wqq=n7nmeu3ZRWtbMY0^cJQkqsEUgt2s6 zlEe3*f9428N}vbfr&z;fd=Xu zgMAG+Q=03K2mQg&%!(C5oxCi|$VwDC^O|8|sxjmdU7WM>o37!*@2~+TtmHy#=x9O8a z@FQb<&91)E#vJZJk~rax_30FhM$6TJ)mlgY ze;s`pg{b%O9Mv<#q+W}9YFiQtR{acUeF^yRx}h8R?Mzx#9l%FdOvO9RfQWcb){>E8 zs6VPyj3h5;YRo8{0$}On_0QSA1yiU8EVCcD7Sr^8tLzJy9-k~i03X~BASZ+qx`K(A zk2elK4z`2muX`4(UDEWU9`X(U`OSyXf3MLJstdk~Xs2ZtKTB?L#&Epz5P8rS&IX6Mmps2gwll+iBjMRBSR9Iypul}NvMFGQw!1Nt19Hn zzDV!5ASMTn}OCrHJHvjz2?(F6{?|BJDUore{jZQ z1?8V~B+l)`_tA)^J#QYk*5ePzW*8`5SrlYMwLVaB z)O}!@x+Y2zuuSf3yOt{FaA#2vL)FSC+jujQ&-dr^Fj1W84VsyrpfBAMZa(Qtm%`xT zo_trb`N2q62Cs6e+pfA*2{TX0f8ODqLjRfx@Irn6cn+xF_wi zidp{?mCoivp<*!s_a{5=ajUBP6;~vv$4h;^Dd^~y&7&Wo_hPz*$rAmrzC0j6vJPOa zv$Xa#fO*CfJKCBU)a`;-0pCrYx6D{vlO$Vs0vt8#8+9fMKJVl}?kySNta^HQY~<11`}Xd^NNqmh&O>Y0k} zfHw)5ed|{3S3Qx?CHHUJdEW4@QB4aV#V^C|VxSNdgz)(2XZ9X2yh#o-vU>EAAe|(jBf%!Gy@#7*k z5^d43pwe~5Z}}W4626s&zCJBo#!HrkM1~*K;MQ-4muS2<1`kYdIOB z3Cfd^DcsquABr?7cT;tMQ zhs1`w0)AR!y?Aj^SOhubk75o{4#vahY~8qNczH3Kf)`*0RCEiH=#m3rVruQ(cyQm> zXIWt2rz#>=3n>zkSvl$VDv{cfI|dN3^o1hgT)JCvK^H3}fBm{=DCYN!bs0Kvvn-DY zj3kjD*^leXCjDNb&_=s*%T8C7=^g77qc}KI3;O9f@Gk z7Xg+edj!QJsj5qJ8Q^e;?_Lt(2)ZWj32~(Q^jC2Ue~z{#TT>jMebo7HwCXyS6;P{l za6$#U=C|!RwsU)LB``B}@PcEz*B@IS`aB+iWqRu&c?-C`etd%v4+Dk=vVzc} z5itRD5}sl_jDNwR@GZWp>kTUm>L`~I@U%s2_>v1|=#BQ0f$l#|jUmuD4(m&?eAwc4^;E#tn4@4h)jJ?-VO~vpvtIjh5VY)H z8eO@dFV=w{=|jW*?vy_{*UjtxOwis&9Uy&ha7X;dBn6+joJ5o4atXhk!&lifM;0p* zf2E!h3{e(99SyHzf{#xPbF1ag&hUJICRd+&0AN^9nyoz zj;I!u0$YcPa8dCFbW>pS(T(HD{-DSL9)Fc#Z$yHuM@th0pT;Ufi+Z{`ubmYVe?};i z3HcJj=J%J%9$%pInywVja)PMg8H|AHa={3A=jhIGI2_tJ!lH97Po>kz%a`-%bvNen z9feyqvxVR-(GJx;dR~Y}K=Q|u-Ni(M*A!mvGh(_U>9Kes5wm}hw@=1WiNxs5YqPmEGuw9W{?e*KM^^!KbtBOYIn`M9hkR#e zeieLREV^>zZ1jyJ2*&0LU2}=i$#{HnXw|A!g*_MU$=iR%4~H--V=v_Pe;(eOTh;o0 zpFz)|)yx1h#>_C=n4@^K_!X%;>ijiI6xC~~DAoQaj^KJ=o<4b;!xNe#C>(`#S`+^= z%qP_GZ$)p5K=*claPWlQoy*BmR5Mjo?@44wCsXwfU(hWgL(%VZV7cMe7iZAj9a@o`W zaMo35f@#?_oGdTe}6R2S%T9d2JHtHlCTE&chw=O1D$C8taG2O4pLOF!|~!x)*>R>gk<&b2^1E#uj;Hvc*-P}TxQ$Ukcfz# z4)EGUg(Ae#1!q-A_1-CiMK9(oXZS-s(fmzm3P>TnCnT`Ef6?M33tmZ8EHkDnaH_OZ zO7-K_pg$$WOB3-_=j=ctF)-ViicdBl)ZEbP(q{BRshIK_$zrLX&uFfvhr_;PPqmox zd6a(pO_wh5Vrs=?B@(Gju1L%ClcjfYS)Z!0NG2D<{HDkXyo^xDmwIPuDw-(btKo|l z6Va*Cj0<0Ff8&aQq-&%!`SJzC_58mMtGbcusuYuku8jPLTU(mw4&$r&QpK=8kB8$r z$Rgy4mM3Q?$`K7w8Pn-EKZ@Q&CzvX;55LzZm`^g#wDf=JR+VF_>!+JAjteo&Sy>c~ zje-}o6mkd(AaS5WSNxWzb-JMi+w)(w&+&9b*t94he~TM=QkW3HlmiiC<@<7Z%vX|~ zO@AL=`z>FUE>a%gD_48V4rx!|Od5S<2i&LD1*p~!HNxlVoF?$p|3=z@jYYf8-T3i+ zMy%g3CNjG@P8!%^h9T?Ctq=nN$aBCghPQP!1WY=(4>n3H0EzzLi+R3d+qvQBSP!OZ z5B3FwefXbR!$&$h*0_mf36%(k5Gk?^l-WcN{LJv_;Y5e z+`MTRljs>mLwI2UTV0ADXTfT~n!YV5qCJ*V!^=E5lk?1m;+g>_Lq1*MElvw6f_t?G z^-8h+!zL0SXnas~vm6MT`N)t2*iew)P!Ty!e;_tE3vsY}ETX2vky3XLK-?uGNtqW}tLjy=7Y&DcGX}^EC3C|`kQq*a zcnK6UM#c|%>@N(G;hGA^Z30pJ(x`F(%t0WydbdMZ0hx31qC1}PtO&Zeu*UjDmy|Xp ze}Eo~x>kBxwn0y$kD@Wg!1V6)BJ2M}=DyVPk7I1Yl6{Iw znd4%&=A&0L=Q1}jA7`GXS}Fp8w{&(6 z=yonu4X2*F{HEWL)KedclxS}4EjUoBWEm#k1T_b95b$b3YQYAT=&NK~TftO6kH8sJ zEV3MDF>S#)kV6(n;5>49qh520shX}+h(9U;@dQONN8qY3>p)yzHORIZb!1bufBO9F zRnRS%;^Ux8gy9Up44ybdYsH;fBNB(WObFsi z=(m9mLrV4bgiH2DZ>QIO)G$piz)1rK{%9ra*f1XEh4=;iPtSVl>2>{L@Ok!Uxa{nkR01r*^8GH&# zexA2vnC1=1t%S0`EeConmpd17yCol=gtA4?r+7nlDWRMqTcrb`VsBbD3c+OQ-LiaA z&Y0jGW=4Km#z)4S=WfW1d7tunpZ1Ps?K?7K`bn>MnLh{~KH=t{Lg*>pAZ_37=1(HD zqPw)@^3{I(#ju$81n+_Zre&j|40s7W%9AjF8GkQPnQ{$^+tl(zTurvnnb75RmTley zFJoDp@G8ww#p_kzQ;L_hgA#iyx|u_x@Ul@-u$NSFs_sSHe;vioa+X8= z2!|{>3dKeKSsj1e3_;P+TYuwd{`CC9-}roUejYOO44~h_cks6`O7;QqyN{@SFY60&-hcHwN%>6k0Zx2UmN^h+S;@uTB4XaX|Gd8bT=vF|TlZYBYx@$H z$@BX#f8t`7ODL4f-mq!w?qdh-b0FK+gMa-`v2Nl__8d!3?MQdA&D$$*wG7GmRi zHh74-2*LyZScjdWA5}|3yKRt>OSc?OxAo;6u*vrRSp^nRD4i^(y3AnbOh-O%g~Ar* z1Udq_9rb?9#_eJWzM5_($10hSJA%B?-m&UrvezXW0Jz=ps7EzDE@59l(hU8F9)AS^ zaTAX0TJcV=RLB*~Sj<#4$zXkMUCTv-mKtKMkh_%c6o3bMgW+7JSjcpDOc%mhG^T|L z(;c0;sntDMz%CI4Q6Sd(tme{0E$Y&|7RLv(>6iuaB?YC+Ctp)gT#5ix-QppHQS%ZL zuMQj#Af{9l(Tj8sQO2R~)>G)cXp+e@E9rm!K`u{#Td7M`5~wf^T7HpZu;RQFIgo0b zC=<@Jgzq&qc^t#{*Kztl{mD9NN)1Q)4pGwztC3~{5ll+mXNYFYiQ{4YimhjE%@QG-1kLHC$g*Ocz$&UGvwJF3+kBV#l5J@z^I-1yYonwv8K@uqY~7)dKu@PIA-jiAVafAyikxvBA79t3d5 z<07W6q_Hs(s(x`?^LqmLFHG#v!uWq|ppAug9MjMS(@D`+2%a}}iA1*zAmuRf4tp|6 zOhHIV9C5^}y-_vOC^Hs{H8O<_g-jzB8r!xBaUCl!xVlkW*}hcEj?L?t@B@u7lh^=J0={Ptduh zo9Sf+nKjH->J@|foLMmcr4YEz;v;*{p9$&` zu+Y~8djsd;zv31*ORggVF<|8SqSY99BUXu3Ikzl;X1uo-Y`@VZ?GW8S?1}%`MVUT&$HSEJ}l|s?Qhp`Tky^(Z*!*|0I)O zHq;ZIn!-g&^I;NBO@)7pVSK<%g#q|0)i5H4Vc!pK#cfslVjO~dXrwMGa?)_QPq~5Q zZXo@%Q}3CYnreO%M#4RzNkeVEf_qe9MDb1H>o#8r_k1+(au*%h8RbkdtJOj%rQk`y|Er$Svz2PXT#P%L_0zGbkbr3X z71!PNJ3sJ#kZlxKOk6mzqSyf00&ys|YBHCb{41Wie+538kB2l>)k5+7H$i@S)pQ;f zCRa@s==*k@eT9GGx)_*-$}BI?eXd%}_a^E2D0||Q0I)`ii*Uw!d7y$i}PXsGuV1#A+ zTlPPSUcvsNn-yfR(opP6NPTdNV&G|J1rQ9S`6<#LT%&&)%}+zmB(72+1>n25N)_A; zR^ZpHi&l97SLuQuIKjVsA3?R~mcl+L+ppY4h#z1-fVMLtzIPFP@0Ktd zsa>F>Kt*WJ)r>>|R z7&BMj^x#cv*4*5hU!65a!?V>i^FE5!f?r?g>;`|K#Wn(2;$y0j7jlj>y1Zav;)1xA z5-j5SqDp0y`MyRzO~^t_6qe}Tgej!+b+Q>j7gmzM`9_t{d?nC`Q<)^rTP7j>Ffrqy zaQ!$Bna)+i$>i{=^-k2;v7}H~vX%tku7kW-ziy|l#UGCuo}Jg#MgHJHK_EqX?D4pl z6bXNV&nHN#>`5<~RDGeSY3?-5XvpW8Sdvj?RT9jl%MAh3IcjFfglC~b*jT9GTLw2I zhF5J^Nv^+g!>ZwgeP?R~I2d?5u4`|(^gWQ3hdM#5(*_?9lEgI+YI z7H#k>+J$=YQz}sZ@2l~X>K$nrBt#*ej?RB*yy-nK>pV3wD}uJJ1l5MdJaLLxjZs0; zB8D2iGJbge@OaNK$c$vbmSc@x$Zz*oTRn^Ia=tyLk~xNyer`GMO(U#H=&=P%P`MH@Dj$Dab}L$$Go3<0r2wz)j%*PBz}sB z)d^xuoDj31LJVH`9{d9lMViLUh2L@v((#81&h~(UdLR+7W1dAoe2h3^9fimd_fxT) zzvT)W6NFCKvW$1Ou!*IN-!ME%IJSRm(6oj=Hp~@#i4_SgCGld{w5z_^A8soDO$G4N zXByj&Y;Vv2c3sHlE7s7BLslinU&x78+JJE*ZHX^oZU=fe&Wm6Hpa~@5KhOb?mt{Q= zu)7dI0=kAp*Wd`iH-z%}MIY#%UeamnKR3OyR~ID@=6K+Kjxc+U zIQte!)>EFaWVHGKOe@ifzFg?yboult*~{YLdt+8E(VeUBd}e2{E7N~9Gxuu`8HgzO z$v_O5j1j1`Og54+QeuSd(?4>_oWZk#^dpf|j9ggvd%Y1EB1K9UVrr(t(;gG9FAEAL z=`UBqa!`_^5s%Zyj>T1s@b6Z>XM~t-j=XRAems(NcP3()`Me$rWS5?#{Oj%LesnPt z!yHQ=mG>-=LQ&AdNvnS@K!j85vDRY38_7204k{LMQ%mlfp3E20L#ga|7IxrZ(*EW7 zp+vMiREfqewvSLNDscL|+3~S#E|(n}pWOj7gDLyN&b}o$(7Vk3(iO*)@<1sPDfO4Y z)Lf0sH?-Lj>1eEiK3;u>QJR6VjP}FzLw{2OyR?y5%Xw6AP}KQ zluW(LVB!Jec$7E?$39HJ~TQ3*4%NPre$M6Q*(>>-sMAX-tEu1)Sh|(g-1GS;bb7-f{G|Bh8d1s zc4>d7PgbBD2qnX{juEd0HEqWoYrw?lp~Gkc92-7x;Wc|ccU=s5Tq{L{T#_QYq^^Kh zKqzPgLO_4X1O=~EtgTIt2V-MVfROC=#p79#L(#EVU_8C9)@^wOy*qG?TV-R{eRj_^ z7akZM`@eIu)s+AMc${NkWME(bV*QhoCdKpHd}ZKfVE}OmT=ktDNo&e-> zFff5c0dJEI6#xJLc${NkWME)!_}{<~!@ubNxBrtajtGA)0Ka+&g?OA}VPIfj0bwR6 z4afigqw=BH9*Y=O4AKuZLlTF)94e!)rDxSU)7Z8j#F6 zL&$AF`6qusdJ^II0RZobO~U{H0001d1Be8y1n31Y1)c@O2XqKh2&M@32}%k23SJ8y z3%U%%4I~a`4?quk56%!A5YQ1a5o{665_l5A6HF8w6si^A7E%`g7g`vM7~~mj8q^!$ z9E2Rk9UL809qb-f9{3+3AHE;@Afh1@A!s4aB2s@N93##oo+U~pd?l_X7AB%65+{Tw z)+i__o+(}`&?`DCoGZvIDlAwmv@K*VEG}LykS^vg7%y}%NHEMXPBEe~>@zMi)-?1r z2sLyy@HSF5oHpP$7&mM<5;%M~zBu$bI5~bfwmKL(YC4WOygLv(Ks$^(@;r7t?ma3! zc0PY7KCV9yK(axULH0v#L_S4?MY=||M&L(YN6<)ONbpHmN)Ae1O1w*2OU_J2Ow>(Y zP2x^4PQ*`gPsC6_P^3`kQGQcGQ<_v#RVGz>Rv=c?SCCk|St43KT8>(%TL@dcTy|W< zT~1x5UQk|$Ufy4PU;bdyVM<~!V;o~}V}vDSAY`ln0C=2ZU}Rum*u`YRAkP2-OhC*9 zgbWP-!F&b)Bl!X*vsaKu0e{>!6y3XHn%NDMnHk)6Hz{MvNt;5-m}+c|tsPnNNb=6i z7E)$rW@d);&-KZ>J*OY)b1XgkJUzJgKF!R|tUkS&|9^I4799i#5g|r`E_#^5Jl0`7 zHee(6z@FF(dt)E$i~X=a4#0sp2nXX39E!tmIF7)PI0{GO7#xe^aDO~bz==2sCnLov zI2EU10gKp#%{U!r;7pu_vvCg2#d$a%7vMr%ge|xjm*7%dhRbmUuEbVs!&SH%+i?x9 z#dWwIJ8%PT#7(#vx8PRXhTCxm?!;ZV8#{3i82ZSNgJXaKB?Oi*ghT}ejT$2uSU5CT z#uyV!v4VSXAMVEk*nfow@em%yBX|^#;c+~HC-D@X#xr;p&*6EzfEV!+UdAhU6|doS zyn#3I7T(4?co*;CeSClq@ew}8C-@Yf;d6X}FYy(=#y9vD-{E`wfFJP_e#S5O6~Ezk z{DD957k1o+QFB2M*pPFhFw18DOr{$-tyH1QdpN{%<;nLX}nT0HDqFL z%(IfYv=T~0N`Ev?H{povCbm=xEBHKxV{+{y^lmz0QcN4wv6YQ;YH%V{IAv<3qE(No zfY)pqWO{{%P7k>X4YyRQbIR)XcLy2nhlmkz1c4dep&R(rg=KJ%#Cfi>3=bD9;dk;t7O$|>X?9{B<1|t z-cm<}*3(4saq4l1_@rhkk25VT8Of;O)`wfaWozDuvSB-yXw|*#BHyMPLyT;szWS1< zxfl=&Jdkcv@;BRiv2%V|Q%mfaAnb}{+7L2ibP0#$v?j2- zicef?MSqqvla+~W`a4NLO;l)I&{+>Vq;)KepyiY0tP{VGo>Hp6YBluPU9=jc{gXa>}!gd)Xds3wGhxu=Mja}jf-gN%cegw^AE2|F4q760RBzyMgRZ+ diff --git a/web/src/assets/iconfont/iconfont.woff2 b/web/src/assets/iconfont/iconfont.woff2 index 9da21dc724a757be688c1291cffdc30c93570d35..474ebe33b389baffdd31d467a9fe6393efd596d4 100644 GIT binary patch literal 33400 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 diff --git a/web/src/components/ThreeDPreview.vue b/web/src/components/ThreeDPreview.vue index 8f4b61fe..8cdcdb35 100644 --- a/web/src/components/ThreeDPreview.vue +++ b/web/src/components/ThreeDPreview.vue @@ -2,34 +2,6 @@

- -
-
- -
- - - - {{ scale.toFixed(1) }}x - - - -
-
- -
- -
- -
-
-
-
@@ -56,7 +28,7 @@ diff --git a/web/src/views/admin/jimeng/JimengConfig.vue b/web/src/views/admin/jimeng/JimengConfig.vue index fe8c7e0b..7aede4bc 100644 --- a/web/src/views/admin/jimeng/JimengConfig.vue +++ b/web/src/views/admin/jimeng/JimengConfig.vue @@ -4,62 +4,56 @@
-

秘钥配置

- -

- 1. 要使用即梦 AI 功能,需要先在火山引擎控制台开通 - 即梦 AI - 和 - 智能绘图 - 服务。 -

-

- 2. AccessKey和SecretKey 请在火山引擎控制台 -> - 秘钥管理 - 获取。 -

- +

秘钥配置

+
+ +

+ 1. 要使用即梦 AI 功能,需要先在火山引擎控制台开通 + 即梦 AI + 和 + 智能绘图 + 服务。 +

+

+ 2. AccessKey和SecretKey 请在火山引擎控制台 -> + 秘钥管理 + 获取。 +

+
+
- + - +
-

算力配置

+

算力配置