- Add platform infrastructure chapter to frontend-backend architecture design - Update system architecture document with 6 new infrastructure modules - Update AI onboarding guide with infrastructure overview - Link to backend/src/common/README.md for detailed usage guide Key Updates: - Storage service (LocalAdapter + OSSAdapter) - Logging system (Winston + JSON format) - Cache service (Memory + Redis) - Async job queue (Memory + Database) - Health check endpoints - Monitoring metrics - Database connection pool - Environment config management All modules support zero-code switching between local and cloud environments. Related: #Platform-Infrastructure
500 lines
17 KiB
Markdown
500 lines
17 KiB
Markdown
# AIclinicalresearch 文档梳理与差异分析
|
||
|
||
> **文档版本:** v1.0
|
||
> **创建日期:** 2025-11-06
|
||
> **维护者:** 项目团队
|
||
> **最后更新:** 2025-11-06
|
||
|
||
---
|
||
|
||
## 📋 执行摘要
|
||
|
||
本文档对AIclinicalresearch项目下的所有文档进行了系统梳理,并重点对比了**最新需求文档**(壹证循科技 AI科研产品需求文档.md 和 技术架构白皮书.md)与**现有文档**之间的差异。
|
||
|
||
### 🎯 核心发现
|
||
|
||
**最新需求文档(2025-11-05)反映了产品战略的重大调整:**
|
||
|
||
1. **产品定位变化:** 从单一的"AI科研助手"扩展为**7大模块的综合性AI科研平台**
|
||
2. **商业模式变化:** 从简单SaaS模式扩展为**4种部署形态**(云端SaaS、私有化、混合部署、单机版)
|
||
3. **技术架构变化:** 从"模块化单体"演进为**微服务架构**,支持模块化售卖
|
||
4. **目标用户变化:** 从科研人员扩展到**医院机构**(强调数据安全和私有化部署)
|
||
|
||
---
|
||
|
||
## 📚 文档结构梳理
|
||
|
||
### 1. 00-项目概述 文件夹
|
||
|
||
| 文档名称 | 状态 | 版本日期 | 核心内容 | 是否符合最新需求 |
|
||
|---------|------|---------|---------|----------------|
|
||
| **壹证循科技 AI科研产品需求文档.md** | ✅ 最新 | 2025-11-05 | 7大模块功能矩阵、4种部署模式、商业模式 | ✅ 基准文档 |
|
||
| **壹证循科技AI科研产品 - 技术架构白皮书.md** | ✅ 最新 | 2025-11-05 | 微服务架构、技术异构、Electron单机版 | ✅ 基准文档 |
|
||
| 产品需求文档(PRD).md | ⚠️ 旧版 | 2025-10-10 | 仅包含AI问答、知识库、项目管理 | ❌ **需要更新** |
|
||
| 技术架构总览.md | ⚠️ 旧版 | 2025-10-10 | 基于Dify+LobeChat的简化架构 | ❌ **需要更新** |
|
||
| AI智能文献PRD(1)-产品概览.md | ⚠️ 部分旧 | 2025-10-21 | 6大模块(研究方案、检索、初筛、复筛、提取、分析) | ⚠️ **部分符合,需整合** |
|
||
| AI智能文献PRD(2)-初筛与复筛.md | ⚠️ 部分旧 | 2025-10-21 | 初筛和复筛详细设计 | ⚠️ **部分符合,需整合** |
|
||
| AI智能文献PRD(3)-提取与分析模块.md | ⚠️ 部分旧 | 2025-10-21 | 提取和分析详细设计 | ⚠️ **部分符合,需整合** |
|
||
| 系统总体架构设计.md | ⚠️ 占位 | 2025-10-29 | 占位文档,待完善 | ❌ **需要重写** |
|
||
| 设计文档完成总结.md | ⚠️ 旧版 | 2025-10-10 | 基于旧版PRD的总结 | ❌ **需要更新** |
|
||
|
||
### 2. 01-设计文档 文件夹
|
||
|
||
| 文档名称 | 状态 | 版本日期 | 核心内容 | 是否符合最新需求 |
|
||
|---------|------|---------|---------|----------------|
|
||
| 数据库设计文档.md | ⚠️ 旧版 | 2025-10-10 | 基于AI问答+知识库的数据库设计 | ❌ **缺少DC、SSA、ASL模块表** |
|
||
| API设计规范.md | ⚠️ 旧版 | 2025-10-10 | 基于AI问答+知识库的API设计 | ❌ **缺少新模块API** |
|
||
| 平台前端架构设计/01-前端总体架构设计.md | ⚠️ 部分旧 | 2025-10-29 | 7个模块的顶部导航设计 | ⚠️ **架构正确,但缺少部署模式考虑** |
|
||
| 平台前端架构设计/02-导航结构设计.md | ⚠️ 部分旧 | 2025-10-29 | 导航详细设计 | ⚠️ **架构正确,但缺少部署模式考虑** |
|
||
| 系统架构/01-系统总体架构设计.md | ⚠️ 占位 | 2025-10-29 | 占位文档 | ❌ **需要重写** |
|
||
| 系统架构/04-运营管理端架构设计.md | ⚠️ 占位 | 2025-10-29 | 占位文档 | ❌ **需要重写** |
|
||
| 系统架构/05-部署架构设计.md | ⚠️ 占位 | 2025-10-29 | 占位文档 | ❌ **需要重写(关键)** |
|
||
|
||
### 3. AI智能文献 文件夹
|
||
|
||
| 文档名称 | 状态 | 版本日期 | 核心内容 | 是否符合最新需求 |
|
||
|---------|------|---------|---------|----------------|
|
||
| 所有文档 | ⚠️ 部分旧 | 2025-10-29 | 基于Web版的AI智能文献设计 | ⚠️ **缺少单机版、私有化部署考虑** |
|
||
|
||
### 4. 07-部署文档 文件夹
|
||
|
||
| 文档名称 | 状态 | 版本日期 | 核心内容 | 是否符合最新需求 |
|
||
|---------|------|---------|---------|----------------|
|
||
| 本地化部署方案.md | ⚠️ 占位 | 2025-10-29 | 占位文档 | ❌ **需要重写(关键)** |
|
||
| 模块独立部署指南.md | ⚠️ 占位 | 2025-10-29 | 占位文档 | ❌ **需要重写(关键)** |
|
||
|
||
### 5. 05-每日进度 文件夹
|
||
|
||
| 状态 | 说明 |
|
||
|------|------|
|
||
| ⚠️ 历史记录 | 记录了AI问答+知识库的开发历史(Day04-Day31),基于旧版PRD |
|
||
|
||
---
|
||
|
||
## 🔍 关键差异分析
|
||
|
||
### 差异1:产品功能范围
|
||
|
||
#### 旧版文档(产品需求文档(PRD).md)
|
||
```
|
||
核心功能:
|
||
1. 项目/课题管理
|
||
2. AI智能体(12个智能体)
|
||
3. 个人知识库
|
||
4. 历史记录
|
||
5. 运营后台
|
||
```
|
||
|
||
#### 最新需求(壹证循科技 AI科研产品需求文档.md)
|
||
```
|
||
7大核心模块:
|
||
F1. 智能统计分析 (SSA) - ❌ 旧文档完全缺失
|
||
F2. 统计分析工具 (ST) - ❌ 旧文档完全缺失
|
||
F3. AI智能回答 (AIA) - ✅ 对应旧文档的"AI智能体"
|
||
F4. AI智能文献 (ASL) - ⚠️ 有独立PRD,但未整合
|
||
F5. 个人知识库 (PKB) - ✅ 对应旧文档的"个人知识库"
|
||
F6. 数据清洗整理 (DC) - ❌ 旧文档完全缺失(核心难点)
|
||
F7. 个人中心 (UAM) - ✅ 对应旧文档的"个人中心"
|
||
```
|
||
|
||
**影响:**
|
||
- ❌ 旧版数据库设计缺少 SSA、ST、DC、ASL 模块的表结构
|
||
- ❌ 旧版API设计缺少这些模块的接口
|
||
- ❌ 旧版前端架构虽然预留了导航位置,但缺少详细设计
|
||
|
||
---
|
||
|
||
### 差异2:部署模式
|
||
|
||
#### 旧版文档(技术架构总览.md)
|
||
```
|
||
部署模式:
|
||
- 云端SaaS版(唯一模式)
|
||
- 基于Docker部署
|
||
- 单一租户架构
|
||
```
|
||
|
||
#### 最新需求(技术架构白皮书.md)
|
||
```
|
||
4种部署形态(NFR-1核心要求):
|
||
1. 云端SaaS版 - 多租户、高可用
|
||
2. 私有化部署 - 整个平台或指定模块部署在客户内网
|
||
3. 混合部署 - 本地使用DC/SSA,云端调用ASL/AIA
|
||
4. 单机版 - Electron桌面应用(Windows/Mac),数据100%本地化
|
||
```
|
||
|
||
**影响:**
|
||
- ❌ 旧版架构设计**完全不支持**私有化部署和单机版
|
||
- ❌ 旧版前端架构设计未考虑**混合部署**的路由策略
|
||
- ❌ 缺少**Electron单机版**的技术方案和开发计划
|
||
- ❌ 缺少**容器化(K8s)**的部署架构设计
|
||
|
||
---
|
||
|
||
### 差异3:商业模式
|
||
|
||
#### 旧版文档
|
||
```
|
||
商业模式:
|
||
- 简单的SaaS订阅模式
|
||
- 未明确版本分级
|
||
```
|
||
|
||
#### 最新需求(NFR-2核心要求)
|
||
```
|
||
商业模式(NFR-2):
|
||
1. SaaS多版本:专业版、高级版、旗舰版
|
||
- 需要完善的Feature Flag系统
|
||
2. 模块化售卖:任何模块可独立打包售卖
|
||
- 技术架构必须松耦合
|
||
3. AI成本可控:动态切换LLM模型
|
||
- 专业版用DeepSeek,旗舰版用Claude/GPT
|
||
```
|
||
|
||
**影响:**
|
||
- ⚠️ 旧版前端架构设计已考虑版本权限控制,但**未实现Feature Flag系统**
|
||
- ❌ 旧版架构设计未考虑**模块独立售卖**的技术实现
|
||
- ⚠️ 旧版已支持多模型切换,但未与版本权限绑定
|
||
|
||
---
|
||
|
||
### 差异4:技术架构
|
||
|
||
#### 旧版文档(技术架构总览.md)
|
||
```
|
||
技术架构:
|
||
- 前端:React + Vite + LobeChat组件
|
||
- 后端:Node.js + Fastify + Prisma
|
||
- 数据库:PostgreSQL
|
||
- RAG:Dify(仅用于知识库)
|
||
- LLM:DeepSeek-V3 + Qwen3
|
||
- 架构:模块化单体(Monolith)
|
||
```
|
||
|
||
#### 最新需求(技术架构白皮书.md)
|
||
```
|
||
技术架构(演进式):
|
||
- 阶段一(0-6个月):模块化单体 ✅ 与旧版一致
|
||
- 阶段二(6-18个月):首次拆分(SSA、DC微服务)+ Electron单机版
|
||
- 阶段三(18个月+):全面微服务架构
|
||
|
||
核心技术栈(技术异构):
|
||
- 前端:React/Vue(Web + Electron复用)
|
||
- API网关:Node.js
|
||
- 统计分析(SSA):R语言 + Plumber API ❌ 旧文档缺失
|
||
- 数据清洗(DC):Python + Polars/Pandas + FastAPI ❌ 旧文档缺失
|
||
- 部署:Docker + Kubernetes ⚠️ 旧文档仅Docker
|
||
- 单机版:Electron + 本地R/Python子进程 ❌ 旧文档完全缺失
|
||
```
|
||
|
||
**影响:**
|
||
- ❌ 旧版架构设计**未考虑R语言和Python微服务**的集成
|
||
- ❌ 旧版架构设计**未考虑Kubernetes编排**
|
||
- ❌ 旧版架构设计**完全缺少Electron单机版**的技术方案
|
||
- ❌ 旧版架构设计**未考虑API网关**的引入
|
||
|
||
---
|
||
|
||
### 差异5:数据清洗模块(DC)- 核心难点
|
||
|
||
#### 旧版文档
|
||
```
|
||
状态:完全缺失
|
||
```
|
||
|
||
#### 最新需求(技术架构白皮书第6节)
|
||
```
|
||
数据清洗整理 (DC) 模块:
|
||
1. 海量表格ETL:处理百万行、多表格的Excel数据
|
||
2. 非结构化文本NER:从病理报告中提取结构化字段
|
||
|
||
两种实现方案:
|
||
方案一:服务器最优版(云端/私有化)
|
||
- Python + Polars(替代Pandas,10-100倍速度)
|
||
- LLM API(Claude 3/GPT-4o)进行NER
|
||
- PostgreSQL存储结果
|
||
|
||
方案二:单机版(Desktop-Offline)
|
||
- Electron + Python子进程
|
||
- SQLite(避免内存溢出)
|
||
- spaCy本地NLP模型(100%隐私保护)
|
||
```
|
||
|
||
**影响:**
|
||
- ❌ 旧版数据库设计**完全缺少DC模块的表结构**
|
||
- ❌ 旧版API设计**完全缺少DC模块的接口**
|
||
- ❌ 旧版技术栈**未包含Python微服务**
|
||
- ❌ 旧版架构设计**未考虑Polars、SQLite、spaCy**等关键技术
|
||
|
||
---
|
||
|
||
### 差异6:AI智能文献模块(ASL)
|
||
|
||
#### 旧版文档(AI智能文献PRD系列)
|
||
```
|
||
状态:有独立PRD文档(2025-10-21)
|
||
内容:6大模块(研究方案、检索、初筛、复筛、提取、分析)
|
||
架构:基于Web版的设计
|
||
```
|
||
|
||
#### 最新需求(壹证循科技 AI科研产品需求文档.md)
|
||
```
|
||
F4. AI智能文献 (ASL):
|
||
- 提供AI驱动的文献工作流
|
||
- 智能检索、标题摘要初筛、全文复筛、信息提取
|
||
- 支持Meta分析、证据图谱等应用
|
||
- 必须支持单机版(文献原文100%不离开用户电脑)
|
||
```
|
||
|
||
**影响:**
|
||
- ⚠️ 现有AI智能文献PRD文档**内容基本符合**,但需要:
|
||
1. ❌ 补充**单机版实现方案**(Electron + 本地PDF解析)
|
||
2. ❌ 补充**私有化部署方案**
|
||
3. ⚠️ 整合到**7大模块**的整体架构中
|
||
|
||
---
|
||
|
||
### 差异7:智能统计分析模块(SSA)
|
||
|
||
#### 旧版文档
|
||
```
|
||
状态:完全缺失
|
||
```
|
||
|
||
#### 最新需求
|
||
```
|
||
F1. 智能统计分析 (SSA):
|
||
- 3条核心分析路径:队列研究、预测模型、RCT研究
|
||
- 数据上传、质控、分析、报告导出
|
||
- 必须支持私有化部署(医院内网)
|
||
- 必须支持单机版(数据100%本地化)
|
||
|
||
技术实现(白皮书):
|
||
- R语言 + Plumber API(服务器版)
|
||
- R语言 + Electron子进程(单机版)
|
||
```
|
||
|
||
**影响:**
|
||
- ❌ 旧版文档**完全缺少SSA模块的PRD**
|
||
- ❌ 旧版数据库设计**完全缺少SSA模块的表结构**
|
||
- ❌ 旧版技术栈**未包含R语言**
|
||
- ❌ 旧版架构设计**未考虑R语言微服务**的集成
|
||
|
||
---
|
||
|
||
## 📊 文档符合度评分
|
||
|
||
| 文档类别 | 符合度 | 说明 |
|
||
|---------|-------|------|
|
||
| **产品需求文档** | 30% | 仅覆盖3/7模块(AIA、PKB、UAM) |
|
||
| **技术架构文档** | 40% | 基础架构正确,但缺少微服务、Electron、K8s |
|
||
| **数据库设计** | 35% | 仅覆盖3/7模块的表结构 |
|
||
| **API设计** | 35% | 仅覆盖3/7模块的接口 |
|
||
| **前端架构** | 60% | 导航结构正确,但缺少部署模式考虑 |
|
||
| **部署文档** | 0% | 完全缺失(占位文档) |
|
||
| **AI智能文献** | 70% | 内容基本符合,但缺少单机版和私有化方案 |
|
||
|
||
**总体符合度:约 40%**
|
||
|
||
---
|
||
|
||
## 🚨 关键缺失内容清单
|
||
|
||
### 1. 产品需求层面
|
||
|
||
- [ ] **SSA模块完整PRD**(队列研究、预测模型、RCT研究)
|
||
- [ ] **ST模块完整PRD**(100+种统计工具)
|
||
- [ ] **DC模块完整PRD**(表格ETL + 文本NER)
|
||
- [ ] **4种部署模式的详细需求说明**
|
||
- [ ] **模块化售卖的商业模式设计**
|
||
- [ ] **Feature Flag系统的需求定义**
|
||
|
||
### 2. 技术架构层面
|
||
|
||
- [ ] **微服务架构设计**(API网关 + 服务拆分)
|
||
- [ ] **R语言微服务集成方案**
|
||
- [ ] **Python微服务集成方案**(Polars + FastAPI)
|
||
- [ ] **Kubernetes部署架构设计**
|
||
- [ ] **Electron单机版完整技术方案**
|
||
- [ ] **混合部署的路由策略设计**
|
||
- [ ] **私有化部署的容器化方案**
|
||
|
||
### 3. 数据库设计层面
|
||
|
||
- [ ] **SSA模块表结构**(研究项目、数据集、分析结果)
|
||
- [ ] **ST模块表结构**(工具配置、使用记录)
|
||
- [ ] **DC模块表结构**(清洗任务、ETL配置、NER结果)
|
||
- [ ] **ASL模块表结构**(文献项目、筛选记录、提取数据)
|
||
- [ ] **多租户数据隔离设计**(Schema隔离)
|
||
|
||
### 4. API设计层面
|
||
|
||
- [ ] **SSA模块API**(数据上传、分析执行、报告生成)
|
||
- [ ] **ST模块API**(工具列表、工具执行)
|
||
- [ ] **DC模块API**(文件上传、ETL执行、NER执行)
|
||
- [ ] **ASL模块API**(文献导入、筛选、提取)
|
||
- [ ] **API网关路由配置**
|
||
|
||
### 5. 前端架构层面
|
||
|
||
- [ ] **Electron单机版前端架构**
|
||
- [ ] **混合部署的前端路由策略**
|
||
- [ ] **Feature Flag前端实现**
|
||
- [ ] **模块独立打包方案**
|
||
|
||
### 6. 部署文档层面
|
||
|
||
- [ ] **云端SaaS部署方案**(K8s + 多租户)
|
||
- [ ] **私有化部署方案**(Docker + K3s)
|
||
- [ ] **混合部署方案**(本地+云端)
|
||
- [ ] **Electron单机版打包方案**(Windows + Mac)
|
||
- [ ] **模块独立部署指南**
|
||
|
||
---
|
||
|
||
## 📝 建议的文档更新优先级
|
||
|
||
### 🔴 P0 - 立即更新(阻塞开发)
|
||
|
||
1. **系统总体架构设计.md** - 重写,基于技术架构白皮书
|
||
2. **部署架构设计.md** - 重写,详细说明4种部署模式
|
||
3. **数据库设计文档.md** - 补充SSA、ST、DC、ASL模块表结构
|
||
4. **产品需求文档(PRD).md** - 重写,整合7大模块
|
||
|
||
### 🟠 P1 - 近期更新(影响规划)
|
||
|
||
5. **DC模块PRD** - 新建,详细说明ETL和NER需求
|
||
6. **SSA模块PRD** - 新建,详细说明3条分析路径
|
||
7. **ST模块PRD** - 新建,详细说明100+工具
|
||
8. **Electron单机版技术方案** - 新建,详细说明实现路径
|
||
9. **API设计规范.md** - 补充新模块API
|
||
|
||
### 🟡 P2 - 后续更新(优化完善)
|
||
|
||
10. **前端总体架构设计.md** - 补充部署模式考虑
|
||
11. **AI智能文献PRD系列** - 补充单机版和私有化方案
|
||
12. **技术架构总览.md** - 重写,基于技术架构白皮书
|
||
13. **本地化部署方案.md** - 详细说明私有化部署
|
||
14. **模块独立部署指南.md** - 详细说明模块化售卖
|
||
|
||
---
|
||
|
||
## 🎯 下一步行动建议
|
||
|
||
### 建议1:明确开发阶段
|
||
|
||
根据技术架构白皮书的分阶段实施路线图:
|
||
|
||
**阶段一(0-6个月):云端MVP - "模块化单体"**
|
||
- ✅ 可以继续使用现有架构(Node.js + Fastify + PostgreSQL)
|
||
- ⚠️ 但必须严格遵循"代码隔离"和"数据隔离"(Schema隔离)
|
||
- ❌ 暂不开发Electron单机版和私有化部署
|
||
|
||
**阶段二(6-18个月):首次拆分**
|
||
- 引入K8s和API网关
|
||
- 拆分SSA和DC为独立微服务
|
||
- 开发Electron单机版
|
||
|
||
### 建议2:模块开发优先级
|
||
|
||
基于商业价值和技术复杂度:
|
||
|
||
**第一优先级(核心差异化):**
|
||
1. **DC模块(数据清洗整理)** - 核心难点,差异化竞争力
|
||
2. **ASL模块(AI智能文献)** - 已有PRD,可快速推进
|
||
|
||
**第二优先级(完善产品矩阵):**
|
||
3. **SSA模块(智能统计分析)** - 需要R语言团队
|
||
4. **ST模块(统计分析工具)** - 相对简单
|
||
|
||
**第三优先级(已完成):**
|
||
5. AIA模块(AI智能回答) - ✅ 已完成
|
||
6. PKB模块(个人知识库) - ✅ 已完成
|
||
7. UAM模块(个人中心) - ✅ 已完成
|
||
|
||
### 建议3:文档更新策略
|
||
|
||
**立即行动(本周):**
|
||
1. 创建 `系统总体架构设计.md`(基于白皮书)
|
||
2. 创建 `部署架构设计.md`(4种部署模式)
|
||
3. 更新 `数据库设计文档.md`(补充新模块表结构)
|
||
|
||
**近期行动(本月):**
|
||
4. 创建 `DC模块PRD.md`
|
||
5. 创建 `SSA模块PRD.md`
|
||
6. 创建 `Electron单机版技术方案.md`
|
||
|
||
**持续行动:**
|
||
7. 随着开发进展,持续更新API设计、前端架构等文档
|
||
|
||
### 建议4:技术选型确认
|
||
|
||
**需要与团队确认的关键技术决策:**
|
||
|
||
1. **是否引入R语言?**
|
||
- SSA模块需要R语言(统计分析的王者)
|
||
- 需要评估团队能力和学习成本
|
||
|
||
2. **是否引入Python微服务?**
|
||
- DC模块需要Python + Polars/Pandas
|
||
- 需要评估与现有Node.js架构的集成复杂度
|
||
|
||
3. **是否立即规划Electron单机版?**
|
||
- 白皮书建议在阶段二(6-18个月)开发
|
||
- 需要确认市场需求的紧迫性
|
||
|
||
4. **是否立即引入K8s?**
|
||
- 白皮书建议在阶段二引入
|
||
- 阶段一可以继续使用Docker Compose
|
||
|
||
---
|
||
|
||
## 📌 总结
|
||
|
||
### 核心问题
|
||
|
||
**旧版文档与最新需求的核心差异:**
|
||
|
||
1. **产品范围扩大:** 从3个模块扩展到7个模块
|
||
2. **部署模式复杂化:** 从单一云端SaaS扩展到4种部署形态
|
||
3. **技术架构演进:** 从模块化单体演进到微服务架构
|
||
4. **商业模式升级:** 从简单订阅到模块化售卖 + 多版本 + 多部署
|
||
|
||
### 关键建议
|
||
|
||
**务实的推进策略:**
|
||
|
||
1. **阶段一(当前):** 继续使用现有架构,专注于**云端SaaS版**的7大模块开发
|
||
2. **严格纪律:** 必须遵循"代码隔离"和"数据Schema隔离",为未来拆分打基础
|
||
3. **优先级:** 先开发DC和ASL模块(差异化竞争力)
|
||
4. **文档先行:** 立即更新P0级文档,指导后续开发
|
||
|
||
**避免过度设计:**
|
||
|
||
- ❌ 不要在阶段一就引入K8s和API网关(增加复杂度)
|
||
- ❌ 不要在阶段一就开发Electron单机版(分散精力)
|
||
- ✅ 专注于云端SaaS版的功能完善和市场验证
|
||
- ✅ 为未来的架构演进打好基础(代码和数据隔离)
|
||
|
||
---
|
||
|
||
**文档维护者:** 项目团队
|
||
**最后更新:** 2025-11-06
|
||
**下次审查:** 2025-11-13
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|