autoglm-gui 1.3.0__py3-none-any.whl → 1.3.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- AutoGLM_GUI/api/__init__.py +8 -4
- AutoGLM_GUI/static/assets/{about-CrBXGOgB.js → about-Cj6QXqMf.js} +1 -1
- AutoGLM_GUI/static/assets/{chat-Di2fwu8V.js → chat-BJeomZgh.js} +1 -1
- AutoGLM_GUI/static/assets/{dialog-CHJSPLHJ.js → dialog-CxJlnjzH.js} +1 -1
- AutoGLM_GUI/static/assets/{index-9IaIXvyy.js → index-C_B-Arvf.js} +1 -1
- AutoGLM_GUI/static/assets/{index-Dt7cVkfR.js → index-CxJQuE4y.js} +2 -2
- AutoGLM_GUI/static/assets/{workflows-DHadKApI.js → workflows-BTiGCNI0.js} +1 -1
- AutoGLM_GUI/static/index.html +1 -1
- {autoglm_gui-1.3.0.dist-info → autoglm_gui-1.3.1.dist-info}/METADATA +86 -8
- {autoglm_gui-1.3.0.dist-info → autoglm_gui-1.3.1.dist-info}/RECORD +13 -13
- {autoglm_gui-1.3.0.dist-info → autoglm_gui-1.3.1.dist-info}/WHEEL +0 -0
- {autoglm_gui-1.3.0.dist-info → autoglm_gui-1.3.1.dist-info}/entry_points.txt +0 -0
- {autoglm_gui-1.3.0.dist-info → autoglm_gui-1.3.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as D,u as S,r as t,l as b,j as e,B as r,d as W,a as F,b as T}from"./index-
|
|
1
|
+
import{c as D,u as S,r as t,l as b,j as e,B as r,d as W,a as F,b as T}from"./index-CxJQuE4y.js";import{P as E,L as f,C as L,a as P,b as z,c as H,T as I,D as q,d as B,e as M,f as _,g as j,I as O,h as R,i as A}from"./dialog-CxJlnjzH.js";const G=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]],J=D("square-pen",G);function U(){const s=S(),[m,g]=t.useState([]),[p,x]=t.useState(!0),[k,o]=t.useState(!1),[c,h]=t.useState(null),[l,i]=t.useState({name:"",text:""}),[w,u]=t.useState(!1);t.useEffect(()=>{d()},[]);const d=async()=>{try{x(!0);const a=await b();g(a.workflows)}catch(a){console.error("Failed to load workflows:",a)}finally{x(!1)}},v=()=>{h(null),i({name:"",text:""}),o(!0)},N=a=>{h(a),i({name:a.name,text:a.text}),o(!0)},C=async()=>{try{u(!0),c?await F(c.uuid,l):await T(l),o(!1),d()}catch(a){console.error("Failed to save workflow:",a)}finally{u(!1)}},y=async a=>{if(window.confirm(s.workflows.deleteConfirm))try{await W(a),d()}catch(n){console.error("Failed to delete workflow:",n)}};return e.jsxs("div",{className:"container mx-auto p-6 max-w-7xl",children:[e.jsxs("div",{className:"flex justify-between items-center mb-6",children:[e.jsx("h1",{className:"text-3xl font-bold",children:s.workflows.title}),e.jsxs(r,{onClick:v,children:[e.jsx(E,{className:"w-4 h-4 mr-2"}),s.workflows.createNew]})]}),p?e.jsx("div",{className:"flex justify-center items-center h-64",children:e.jsx(f,{className:"w-8 h-8 animate-spin text-slate-400"})}):m.length===0?e.jsx("div",{className:"text-center py-12",children:e.jsx("p",{className:"text-slate-500 dark:text-slate-400",children:s.workflows.empty})}):e.jsx("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-3",children:m.map(a=>e.jsxs(L,{className:"hover:shadow-md transition-shadow",children:[e.jsx(P,{children:e.jsx(z,{className:"text-lg",children:a.name})}),e.jsxs(H,{children:[e.jsx("p",{className:"text-sm text-slate-600 dark:text-slate-400 mb-4 line-clamp-3",children:a.text}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(r,{variant:"outline",size:"sm",onClick:()=>N(a),children:[e.jsx(J,{className:"w-3 h-3 mr-1"}),s.common.edit]}),e.jsxs(r,{variant:"destructive",size:"sm",onClick:()=>y(a.uuid),children:[e.jsx(I,{className:"w-3 h-3 mr-1"}),s.common.delete]})]})]})]},a.uuid))}),e.jsx(q,{open:k,onOpenChange:o,children:e.jsxs(B,{className:"sm:max-w-[600px]",children:[e.jsx(M,{children:e.jsx(_,{children:c?s.workflows.edit:s.workflows.create})}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(j,{htmlFor:"name",children:s.workflows.name}),e.jsx(O,{id:"name",value:l.name,onChange:a=>i(n=>({...n,name:a.target.value})),placeholder:s.workflows.namePlaceholder})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(j,{htmlFor:"text",children:s.workflows.text}),e.jsx(R,{id:"text",value:l.text,onChange:a=>i(n=>({...n,text:a.target.value})),placeholder:s.workflows.textPlaceholder,rows:6,className:"resize-none !rounded-lg"})]})]}),e.jsxs(A,{children:[e.jsx(r,{variant:"outline",onClick:()=>o(!1),children:s.common.cancel}),e.jsx(r,{onClick:C,disabled:!l.name.trim()||!l.text.trim()||w,children:w?e.jsxs(e.Fragment,{children:[e.jsx(f,{className:"w-4 h-4 mr-2 animate-spin"}),s.common.loading]}):s.common.save})]})]})})]})}export{U as component};
|
AutoGLM_GUI/static/index.html
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<link rel="icon" type="image/png" sizes="192x192" href="/logo-192.png" />
|
|
12
12
|
<link rel="icon" type="image/png" sizes="512x512" href="/logo-512.png" />
|
|
13
13
|
<meta name="theme-color" content="#f5f1e8" />
|
|
14
|
-
<script type="module" crossorigin src="/assets/index-
|
|
14
|
+
<script type="module" crossorigin src="/assets/index-CxJQuE4y.js"></script>
|
|
15
15
|
<link rel="stylesheet" crossorigin href="/assets/index-Z0uYCPOO.css">
|
|
16
16
|
</head>
|
|
17
17
|
<body>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: autoglm-gui
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.1
|
|
4
4
|
Summary: Web GUI for AutoGLM Phone Agent - AI-powered Android automation
|
|
5
5
|
Project-URL: Homepage, https://github.com/suyiiyii/AutoGLM-GUI
|
|
6
6
|
Project-URL: Repository, https://github.com/suyiiyii/AutoGLM-GUI
|
|
@@ -40,7 +40,7 @@ Description-Content-Type: text/markdown
|
|
|
40
40
|
|
|
41
41
|
AutoGLM 手机助手的现代化 Web 图形界面 - 让 AI 自动化操作 Android 设备变得简单
|
|
42
42
|
|
|
43
|
-
**🎉
|
|
43
|
+
**🎉 双模型协作架构现已上线!决策大模型 + 视觉小模型,智能任务规划与精准执行分离,性能提升 60%!🎉**
|
|
44
44
|
|
|
45
45
|

|
|
46
46
|

|
|
@@ -75,9 +75,9 @@ AutoGLM 手机助手的现代化 Web 图形界面 - 让 AI 自动化操作 Andro
|
|
|
75
75
|
|
|
76
76
|
| 操作系统 | 下载链接 | 说明 |
|
|
77
77
|
|---------|---------|------|
|
|
78
|
-
| 🪟 **Windows** (x64) | [📦 下载便携版 EXE](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.
|
|
79
|
-
| 🍎 **macOS** (Apple Silicon) | [📦 下载 DMG](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.
|
|
80
|
-
| 🐧 **Linux** (x64) | [📦 下载 AppImage](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.
|
|
78
|
+
| 🪟 **Windows** (x64) | [📦 下载便携版 EXE](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.1/AutoGLM.GUI.1.3.1.exe) | 适用于 Windows 10/11,免安装 |
|
|
79
|
+
| 🍎 **macOS** (Apple Silicon) | [📦 下载 DMG](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.1/AutoGLM.GUI-1.3.1-arm64.dmg) | 适用于 M 芯片 Mac |
|
|
80
|
+
| 🐧 **Linux** (x64) | [📦 下载 AppImage](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.1/AutoGLM.GUI-1.3.1.AppImage) \| [deb](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.1/autoglm-gui_1.3.1_amd64.deb) \| [tar.gz](https://github.com/suyiiyii/AutoGLM-GUI/releases/download/v1.3.1/autoglm-gui-1.3.1.tar.gz) | 通用格式,支持主流发行版 |
|
|
81
81
|
|
|
82
82
|
</div>
|
|
83
83
|
|
|
@@ -105,9 +105,26 @@ uvx autoglm-gui
|
|
|
105
105
|
|
|
106
106
|
## 📸 界面预览
|
|
107
107
|
|
|
108
|
-
###
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
### 双模型协作架构
|
|
109
|
+
|
|
110
|
+
**决策大模型(GLM-4.7)+ 视觉小模型(AutoGLM-Phone)** 双模型协作系统,智能规划与精准执行分离,更好地处理复杂任务
|
|
111
|
+
|
|
112
|
+
**架构特点:**
|
|
113
|
+
- 🧠 **决策大模型**:负责任务分析、计划制定、复杂决策和内容生成
|
|
114
|
+
- 👁️ **视觉小模型**:负责屏幕识别、定位元素和执行具体操作
|
|
115
|
+
- 🔄 **智能协作**:大模型规划任务,小模型批量执行,异常时自动重新规划
|
|
116
|
+
- ⚡ **三种模式**:
|
|
117
|
+
- **DEEP**:深度思考模式,适合复杂任务,每步都详细分析
|
|
118
|
+
- **FAST**:快速响应模式,适合简单任务,简洁高效
|
|
119
|
+
- **TURBO**:极速模式,一次性生成操作序列,性能最优
|
|
120
|
+
|
|
121
|
+
**核心优势:**
|
|
122
|
+
- 📈 更强智能:大模型提供更深入的任务理解和规划能力
|
|
123
|
+
- 🛡️ 异常恢复:自动检测屏幕卡死、操作失败等异常,智能重试和重新规划
|
|
124
|
+
- 💰 成本优化:TURBO 模式大幅减少大模型调用次数,降低 API 成本
|
|
125
|
+
- 📊 实时可见:流式展示思考过程,透明化决策逻辑
|
|
126
|
+
|
|
127
|
+
<img width="879" height="849" alt="双模型协作界面" src="https://github.com/user-attachments/assets/15e5cf51-5a19-403d-9af3-46f77c2068f5" />
|
|
111
128
|
|
|
112
129
|
### 任务开始
|
|
113
130
|

|
|
@@ -264,6 +281,67 @@ AutoGLM-GUI 支持同时控制多个 Android 设备:
|
|
|
264
281
|
4. **对话** - 描述你想要做什么(例如:"去美团点一杯霸王茶姬的伯牙绝弦")
|
|
265
282
|
5. **观察** - Agent 会逐步执行操作,每一步的思考过程和动作都会实时显示
|
|
266
283
|
|
|
284
|
+
### 🧠 双模型协作模式
|
|
285
|
+
|
|
286
|
+
双模型模式通过**决策大模型**和**视觉小模型**的协作,实现更强大的任务执行能力:
|
|
287
|
+
|
|
288
|
+
#### 工作模式选择
|
|
289
|
+
|
|
290
|
+
在设备面板上,可以选择三种双模型工作模式��
|
|
291
|
+
|
|
292
|
+
**1. 🚀 TURBO 模式(推荐,性能最优)**
|
|
293
|
+
- **特点**:一次性生成完整操作序列,批量执行
|
|
294
|
+
- **优势**:
|
|
295
|
+
- 大模型调用次数最少,API 成本最低
|
|
296
|
+
- 执行速度最快,适合可预测的常规任务
|
|
297
|
+
- 自动异常检测和恢复,遇到问题自动重新规划
|
|
298
|
+
- **适用场景**:订外卖、打车、应用内导航等流程明确的任务
|
|
299
|
+
- **示例**:`"打开微信给张三发消息说我到了"`
|
|
300
|
+
|
|
301
|
+
**2. 🎯 DEEP 模式(深度思考)**
|
|
302
|
+
- **特点**:每步都详细分析,决策最智能
|
|
303
|
+
- **优势**:
|
|
304
|
+
- 处理复杂任务能力强
|
|
305
|
+
- 每步都有完整的思考过程
|
|
306
|
+
- 异常处理更全面
|
|
307
|
+
- **适用场景**:需要智能决策的复杂任务
|
|
308
|
+
- **示例**:`"在小红书上找5个关于健身的帖子并评论"`
|
|
309
|
+
|
|
310
|
+
**3. ⚡ FAST 模式(快速响应)**
|
|
311
|
+
- **特点**:简化提示词,快速决策
|
|
312
|
+
- **优势**:
|
|
313
|
+
- 响应速度快
|
|
314
|
+
- 适合简单任务
|
|
315
|
+
- **适用场景**:简单操作、明确指令
|
|
316
|
+
- **示例**:`"打开美团"`
|
|
317
|
+
|
|
318
|
+
#### 双模型配置
|
|
319
|
+
|
|
320
|
+
**决策大模型配置**(需要较高智能的模型):
|
|
321
|
+
- **推荐模型**:GLM-4.7、GPT-4、Claude 等
|
|
322
|
+
- **智谱 BigModel**:
|
|
323
|
+
- Base URL: `https://open.bigmodel.cn/api/paas/v4`
|
|
324
|
+
- Model: `glm-4.7`
|
|
325
|
+
- API Key: 你的智谱 API Key
|
|
326
|
+
|
|
327
|
+
**视觉小模型配置**(需要视觉能力的模型):
|
|
328
|
+
- **推荐模型**:AutoGLM-Phone-9B
|
|
329
|
+
- **智谱 BigModel**:
|
|
330
|
+
- Base URL: `https://open.bigmodel.cn/api/paas/v4`
|
|
331
|
+
- Model: `autoglm-phone`
|
|
332
|
+
- API Key: 你的智谱 API Key
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
假设一个任务需要 10 步操作:
|
|
336
|
+
|
|
337
|
+
| 模式 | 大模型调用次数 | 说明 |
|
|
338
|
+
|-----|--------------|------|
|
|
339
|
+
| TURBO | 1-2 次 | 1次规划 + 异常时1次重新规划 |
|
|
340
|
+
| DEEP | 10 次 | 每步都调用大模型决策 |
|
|
341
|
+
| FAST | 10 次 | 每步都调用大模型(简化版) |
|
|
342
|
+
|
|
343
|
+
**结论**:TURBO 模式可节省 **80-90%** 的大模型 API 成本
|
|
344
|
+
|
|
267
345
|
### 手动控制模式
|
|
268
346
|
|
|
269
347
|
除了 AI 自动化,你也可以直接在实时画面上操控手机:
|
|
@@ -29,7 +29,7 @@ AutoGLM_GUI/adb_plus/screenshot.py,sha256=pr7BpmUcGZO9rthpDeMRn4D1oAGX9aEEVL3ZnT
|
|
|
29
29
|
AutoGLM_GUI/adb_plus/serial.py,sha256=lDbBXTIoOJ5lbFj50K5X7PZnfpKt1vRpFiWVjolfEhQ,3142
|
|
30
30
|
AutoGLM_GUI/adb_plus/touch.py,sha256=7cyMon9nOd6zQvZdHK7BHWoRLLWkdK-qWfTuSFfFzJA,2301
|
|
31
31
|
AutoGLM_GUI/adb_plus/version.py,sha256=u5u1N40izJceeORN9kFhyz0wq_hZtlwBXaiytfA3px8,2428
|
|
32
|
-
AutoGLM_GUI/api/__init__.py,sha256=
|
|
32
|
+
AutoGLM_GUI/api/__init__.py,sha256=cfIrodErBhJja0DRjpsifVToZyAzuP9TULfbj4ZZsyk,3859
|
|
33
33
|
AutoGLM_GUI/api/agents.py,sha256=xt1LJKSvwmyU5moqQVKx5hiYGHNhn_eCu3nlqaQ_5l8,19081
|
|
34
34
|
AutoGLM_GUI/api/control.py,sha256=G-7hfdqTl5fq-UXOwE2CI_HMbfmRH1Vd589t2FTNZyY,3155
|
|
35
35
|
AutoGLM_GUI/api/devices.py,sha256=AzHUwFGjaj5xaHMmDylyNy0CUGZQHwlCdE3t41azqQk,11186
|
|
@@ -45,18 +45,18 @@ AutoGLM_GUI/dual_model/dual_agent.py,sha256=HIw6Z5Ae9UH5-JEk9IPI2ry4uodvN-qdUQSI
|
|
|
45
45
|
AutoGLM_GUI/dual_model/protocols.py,sha256=8FaqjYWoreM0730nmwfO3M8AQkQvAhvAn0mNP_5DvY0,10604
|
|
46
46
|
AutoGLM_GUI/dual_model/vision_model.py,sha256=Vaj-BVWVZpedUbAVr-dl-eXUQ2IHaQpo0P1AIBuTvdg,14440
|
|
47
47
|
AutoGLM_GUI/static/favicon.ico,sha256=uB4wrcENiFaF-K4V-FzNp51XLW8GC4-ujpBDHgISfGM,781
|
|
48
|
-
AutoGLM_GUI/static/index.html,sha256=
|
|
48
|
+
AutoGLM_GUI/static/index.html,sha256=OihSxUZbVuog-uKRlKJm7z-9ciIUzZZmD-LTOO-ylEU,761
|
|
49
49
|
AutoGLM_GUI/static/logo-192.png,sha256=FOXgZxFrN0ZleO0VjlCnvD5cDkd1okJPkwPDZqsflNs,35243
|
|
50
50
|
AutoGLM_GUI/static/logo-512.png,sha256=HlwSg09dQ3_Jtb09Ght4l2VK3YNLZlP_941LCdpDkWk,251598
|
|
51
|
-
AutoGLM_GUI/static/assets/about-
|
|
52
|
-
AutoGLM_GUI/static/assets/chat-
|
|
53
|
-
AutoGLM_GUI/static/assets/dialog-
|
|
54
|
-
AutoGLM_GUI/static/assets/index-
|
|
55
|
-
AutoGLM_GUI/static/assets/index-
|
|
51
|
+
AutoGLM_GUI/static/assets/about-Cj6QXqMf.js,sha256=QjkdIH7LRF252usF5VadH_7-Md7UIL_tV5tkiZsPk9g,155
|
|
52
|
+
AutoGLM_GUI/static/assets/chat-BJeomZgh.js,sha256=oggeC1AB8J_9IGzqIsmnBYJViHItGiKxcKEWWE5xL7E,292263
|
|
53
|
+
AutoGLM_GUI/static/assets/dialog-CxJlnjzH.js,sha256=LZyWNRMOb5-hES970WBDI84y1nLIiAeQMC9MJ2MWusE,27378
|
|
54
|
+
AutoGLM_GUI/static/assets/index-C_B-Arvf.js,sha256=XOtu1RQ4Z8AkE1qgs0SsyHKUJFUPbUZUEZ4cxXzAnPg,229
|
|
55
|
+
AutoGLM_GUI/static/assets/index-CxJQuE4y.js,sha256=g1vt8BZfyS7_g_MmpKnC_QpxISwX-wZanr8OFi0LBGI,385475
|
|
56
56
|
AutoGLM_GUI/static/assets/index-Z0uYCPOO.css,sha256=VqlMaGxeOJCfsdpqbx26aK2y6mcrM6AbuKdlBFRCkT0,78175
|
|
57
57
|
AutoGLM_GUI/static/assets/logo-Cyfm06Ym.png,sha256=6GRUFH2KNmB4ZmnrmJ1wxpoIYEmOW-__XlmKImyAMKM,4955675
|
|
58
58
|
AutoGLM_GUI/static/assets/worker-D6BRitjy.js,sha256=RL1NIRIks9dXdDhXOHK1cCg-OELT0uv9a6u_UEHfQ0Q,173494
|
|
59
|
-
AutoGLM_GUI/static/assets/workflows-
|
|
59
|
+
AutoGLM_GUI/static/assets/workflows-BTiGCNI0.js,sha256=jfbJ5u-IRcPp6okVJjTcIOSauneXmtXTqFuHjl6TidE,3459
|
|
60
60
|
phone_agent/__init__.py,sha256=7sCmGiY-ePdb6L08MGG6DkOiu8goop6wq-v2SiM62tE,360
|
|
61
61
|
phone_agent/agent.py,sha256=1SgHpv70_XbujG1ElYRZbvRO5-d4l7gBgiFRBz_FIH8,8157
|
|
62
62
|
phone_agent/agent_ios.py,sha256=R7EBsoHVghEUBtI5TB7M0_btpFcb4NHquMNxktrqrJE,9338
|
|
@@ -91,8 +91,8 @@ phone_agent/xctest/device.py,sha256=sOAPMoliMIabcrtsmzuGDKnZXtitqlc0lo8RSjQta7A,
|
|
|
91
91
|
phone_agent/xctest/input.py,sha256=aMp1YCRGBtGsRMKhA9rrjxuLkri0_k3n6hisi0EBJ2o,8164
|
|
92
92
|
phone_agent/xctest/screenshot.py,sha256=H6dsQGgf38h8dvuSeigiR2Qr8NucPanIgTK8kjlV9hA,6027
|
|
93
93
|
scrcpy-server-v3.3.3,sha256=fnAyO6fyWWSd1KzOl6xP77roECssbZHi575hP9U1S-A,90164
|
|
94
|
-
autoglm_gui-1.3.
|
|
95
|
-
autoglm_gui-1.3.
|
|
96
|
-
autoglm_gui-1.3.
|
|
97
|
-
autoglm_gui-1.3.
|
|
98
|
-
autoglm_gui-1.3.
|
|
94
|
+
autoglm_gui-1.3.1.dist-info/METADATA,sha256=Lm0SPs0tzKHhGvPwpO7uNNhQ9WS6Ax6VCPU76InFyf0,16109
|
|
95
|
+
autoglm_gui-1.3.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
96
|
+
autoglm_gui-1.3.1.dist-info/entry_points.txt,sha256=sz4rBO_kgrYmOiT0QnhCCv0b9QqBdWyCjugJgY8AEOI,58
|
|
97
|
+
autoglm_gui-1.3.1.dist-info/licenses/LICENSE,sha256=0IkSHDewdtmXnmYzTNq4U47EJYjTuhjQNpT0bZKuqWc,11342
|
|
98
|
+
autoglm_gui-1.3.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|