@doubao-apps/create 0.0.30 → 0.0.31
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.
- package/dist/template-empty/AGENTS.md +12 -0
- package/dist/template-empty/package.json +2 -2
- package/dist/template-empty/references/reference/open-api/09-/345/274/200/346/224/276/350/203/275/345/212/233-/344/270/232/345/212/241/350/203/275/345/212/233.md +309 -0
- package/dist/template-empty/references/reference/open-api/12-/350/256/276/345/244/207-wi-fi.md +38 -4
- package/dist/template-empty/references/reference/open-api/31-/346/226/207/344/273/266/347/263/273/347/273/237.md +1043 -0
- package/dist/template-empty/references/reference/open-api/README.md +3 -2
- package/dist/template-empty/references/reference/open-api.md +1487 -67
- package/dist/template-starter/AGENTS.md +12 -0
- package/dist/template-starter/package.json +2 -2
- package/dist/template-starter/references/reference/open-api/09-/345/274/200/346/224/276/350/203/275/345/212/233-/344/270/232/345/212/241/350/203/275/345/212/233.md +309 -0
- package/dist/template-starter/references/reference/open-api/12-/350/256/276/345/244/207-wi-fi.md +38 -4
- package/dist/template-starter/references/reference/open-api/31-/346/226/207/344/273/266/347/263/273/347/273/237.md +1043 -0
- package/dist/template-starter/references/reference/open-api/README.md +3 -2
- package/dist/template-starter/references/reference/open-api.md +1487 -67
- package/package.json +1 -1
|
@@ -203,6 +203,18 @@ export default defineWidget({
|
|
|
203
203
|
- **Components**:SDK 内置 UI 组件(Button、Switch、Slider、Swiper、Dialog 等)
|
|
204
204
|
- **Bridge API**:系统能力接口(网络、存储、设备、UI 交互等)
|
|
205
205
|
|
|
206
|
+
### Playground 测试页范式
|
|
207
|
+
|
|
208
|
+
当任务涉及 `examples/playground`、Open API 测试页、JSB 验证页或组件 Demo 时,必须按当前 Playground 结构编写:
|
|
209
|
+
|
|
210
|
+
- **API 测试页**:放在 `examples/playground/src/pages/api/<group>/<api-name>/index.tsx`,并同步 `src/case-metadata.ts` 与 `src/pages/api/registry.ts`;`apiCaseMetas.name` 使用 `<group>/<api-name>`,允许带 `/`。
|
|
211
|
+
- **组件测试页**:放在 `examples/playground/src/pages/component/<component-name>/index.tsx`,并同步 `src/case-metadata.ts` 与 `src/pages/component/registry.ts`。
|
|
212
|
+
- **页面结构**:直接写 `definePage`、`PlaygroundPage`、纵向排列的多个 `TestCase`、`ActionButton` 和真实 API/组件调用,禁止任何页面工厂函数。
|
|
213
|
+
- **覆盖方式**:API 页尽可能覆盖参数组合、边界值、失败路径和事件回调;组件页覆盖默认态、边界态和交互态。不要只写 2~3 个 happy path。
|
|
214
|
+
- **日志隔离**:多个 `TestCase` 不共用同一个日志 state;日志 payload 可带 `case` / `caseName`,避免不同日志面板串扰。
|
|
215
|
+
- **路由编码**:入口页跳转含 `/` 的 case name 时必须 `encodeURIComponent`;开发模式 `delegate-page` 的 query 需要 encode/decode。
|
|
216
|
+
- **响应式主题**:Playground 外壳和示例辅助 UI 使用 `--pg-*` 变量;不要在 Playground 任务中顺手修组件库自身主题。
|
|
217
|
+
|
|
206
218
|
### Lynx 组件
|
|
207
219
|
|
|
208
220
|
Lynx 组件库完整参考文档请访问官方文档:
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
"build": "doubao build"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@doubao-apps/framework": "^0.0.
|
|
9
|
+
"@doubao-apps/framework": "^0.0.31"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@doubao-apps/kit": "^0.0.
|
|
12
|
+
"@doubao-apps/kit": "^0.0.31",
|
|
13
13
|
"typescript": "5.5.3"
|
|
14
14
|
},
|
|
15
15
|
"version": "0.0.16"
|
|
@@ -22,6 +22,9 @@
|
|
|
22
22
|
| [getPrivacySetting](#getprivacysetting) | 获取隐私设置状态。 |
|
|
23
23
|
| [sendQueryMessage](#sendquerymessage) | 以用户身份发送一条消息。<br><br>返回 void,不是 Promise。 |
|
|
24
24
|
| [setAdditionalContext](#setadditionalcontext) | 设置全局上下文供大模型理解。<br><br>设置全局上下文。 |
|
|
25
|
+
| [createTask](#createtask) | 创建任务。<br><br>创建任务时需要传入开发者侧唯一任务标识、任务模板、任务详情和任务类型。开发者侧唯一任务标识 可用于幂等创建和后续业务关联。远端任务创建成功后,返回的 taskId 可用于查询或更新任务。 |
|
|
26
|
+
| [updateTask](#updatetask) | 更新任务状态或任务详情。<br><br>更新任务时至少传入 taskStatus 或 taskDetail 中的一个。更新远端任务成功后,旧 token 会失效, 如返回 nextToken,后续需要使用新的 token 继续更新远端任务。 |
|
|
27
|
+
| [getTask](#gettask) | 查询任务。<br><br>根据任务 ID 查询任务的模板、详情、状态和类型。若返回 token,可在后续远端任务更新中继续使用。 |
|
|
25
28
|
| [updateModelContext](#updatemodelcontext) | 向 Agent 捐赠上下文。 |
|
|
26
29
|
| [updateWidget](#updatewidget) | 更新指定卡片。 |
|
|
27
30
|
| [openApp](#openapp) | 通过 deep link 等方式打开外部应用。 |
|
|
@@ -309,6 +312,124 @@ await sendQueryMessage({ content: '订阅消息', type: 'text' })
|
|
|
309
312
|
|
|
310
313
|
设置全局上下文。
|
|
311
314
|
|
|
315
|
+
<a id="createtask"></a>
|
|
316
|
+
### createTask()
|
|
317
|
+
|
|
318
|
+
> **createTask**(`params`): `Promise`\<[`CreateTaskResult`](#createtaskresult)\>
|
|
319
|
+
|
|
320
|
+
创建任务。
|
|
321
|
+
|
|
322
|
+
#### Parameters
|
|
323
|
+
|
|
324
|
+
• **params**: [`CreateTaskParams`](#createtaskparams)
|
|
325
|
+
|
|
326
|
+
任务创建参数。
|
|
327
|
+
|
|
328
|
+
#### Returns
|
|
329
|
+
|
|
330
|
+
`Promise`\<[`CreateTaskResult`](#createtaskresult)\>
|
|
331
|
+
|
|
332
|
+
返回创建后的任务 ID、远端任务 token 和过期时间。
|
|
333
|
+
|
|
334
|
+
#### Remarks
|
|
335
|
+
|
|
336
|
+
创建任务时需要传入开发者侧唯一任务标识、任务模板、任务详情和任务类型。开发者侧唯一任务标识
|
|
337
|
+
可用于幂等创建和后续业务关联。远端任务创建成功后,返回的 taskId 可用于查询或更新任务。
|
|
338
|
+
|
|
339
|
+
#### Example
|
|
340
|
+
|
|
341
|
+
```typescript
|
|
342
|
+
import { createTask } from '@doubao-apps/framework/api';
|
|
343
|
+
|
|
344
|
+
const result = await createTask({
|
|
345
|
+
outTaskId: 'order-20260529-001',
|
|
346
|
+
taskTemplate: 'remote_normal_v1',
|
|
347
|
+
taskType: 'remote',
|
|
348
|
+
taskDetail: JSON.stringify({
|
|
349
|
+
title: '订单处理中',
|
|
350
|
+
description: '正在为你处理订单,请稍候'
|
|
351
|
+
})
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
console.log(result.taskId, result.token, result.expiresIn);
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
<a id="updatetask"></a>
|
|
358
|
+
### updateTask()
|
|
359
|
+
|
|
360
|
+
> **updateTask**(`params`): `Promise`\<[`UpdateTaskResult`](#updatetaskresult)\>
|
|
361
|
+
|
|
362
|
+
更新任务状态或任务详情。
|
|
363
|
+
|
|
364
|
+
#### Parameters
|
|
365
|
+
|
|
366
|
+
• **params**: [`UpdateTaskParams`](#updatetaskparams)
|
|
367
|
+
|
|
368
|
+
任务更新参数,taskStatus 与 taskDetail 二选一。
|
|
369
|
+
|
|
370
|
+
#### Returns
|
|
371
|
+
|
|
372
|
+
`Promise`\<[`UpdateTaskResult`](#updatetaskresult)\>
|
|
373
|
+
|
|
374
|
+
返回任务 ID、新 token 和过期时间。
|
|
375
|
+
|
|
376
|
+
#### Remarks
|
|
377
|
+
|
|
378
|
+
更新任务时至少传入 taskStatus 或 taskDetail 中的一个。更新远端任务成功后,旧 token 会失效,
|
|
379
|
+
如返回 nextToken,后续需要使用新的 token 继续更新远端任务。
|
|
380
|
+
|
|
381
|
+
#### Example
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
import { updateTask } from '@doubao-apps/framework/api';
|
|
385
|
+
|
|
386
|
+
const result = await updateTask({
|
|
387
|
+
taskId: 'task_123',
|
|
388
|
+
taskStatus: 'completed',
|
|
389
|
+
taskDetail: JSON.stringify({
|
|
390
|
+
title: '订单已完成',
|
|
391
|
+
description: '订单处理完成'
|
|
392
|
+
})
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
console.log(result.taskId, result.nextToken, result.expiresIn);
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
<a id="gettask"></a>
|
|
399
|
+
### getTask()
|
|
400
|
+
|
|
401
|
+
> **getTask**(`params`): `Promise`\<[`GetTaskResult`](#gettaskresult)\>
|
|
402
|
+
|
|
403
|
+
查询任务。
|
|
404
|
+
|
|
405
|
+
#### Parameters
|
|
406
|
+
|
|
407
|
+
• **params**: [`GetTaskParams`](#gettaskparams)
|
|
408
|
+
|
|
409
|
+
任务查询参数。
|
|
410
|
+
|
|
411
|
+
#### Returns
|
|
412
|
+
|
|
413
|
+
`Promise`\<[`GetTaskResult`](#gettaskresult)\>
|
|
414
|
+
|
|
415
|
+
返回任务详情、状态、类型和 token 信息。
|
|
416
|
+
|
|
417
|
+
#### Remarks
|
|
418
|
+
|
|
419
|
+
根据任务 ID 查询任务的模板、详情、状态和类型。若返回 token,可在后续远端任务更新中继续使用。
|
|
420
|
+
|
|
421
|
+
#### Example
|
|
422
|
+
|
|
423
|
+
```typescript
|
|
424
|
+
import { getTask } from '@doubao-apps/framework/api';
|
|
425
|
+
|
|
426
|
+
const task = await getTask({ taskId: 'task_123' });
|
|
427
|
+
|
|
428
|
+
if (task.taskStatus === 'running') {
|
|
429
|
+
console.log('任务仍在运行', task.taskDetail);
|
|
430
|
+
}
|
|
431
|
+
```
|
|
432
|
+
|
|
312
433
|
<a id="updatemodelcontext"></a>
|
|
313
434
|
### updateModelContext()
|
|
314
435
|
|
|
@@ -843,6 +964,194 @@ Whether user authorization for privacy agreement is required
|
|
|
843
964
|
|
|
844
965
|
指定 bot id
|
|
845
966
|
|
|
967
|
+
<a id="createtaskparams"></a>
|
|
968
|
+
### CreateTaskParams
|
|
969
|
+
|
|
970
|
+
创建任务的请求参数。
|
|
971
|
+
|
|
972
|
+
#### Properties
|
|
973
|
+
|
|
974
|
+
##### outTaskId
|
|
975
|
+
|
|
976
|
+
> **outTaskId**: `string`
|
|
977
|
+
|
|
978
|
+
开发者侧任务唯一标识,用于幂等和关联
|
|
979
|
+
|
|
980
|
+
##### taskDetail
|
|
981
|
+
|
|
982
|
+
> **taskDetail**: `string`
|
|
983
|
+
|
|
984
|
+
模板对应的数据的 JSON 字符串
|
|
985
|
+
|
|
986
|
+
##### taskTemplate
|
|
987
|
+
|
|
988
|
+
> **taskTemplate**: `"remote_normal_v1"`
|
|
989
|
+
|
|
990
|
+
任务样式模板,当前仅支持 remote_normal_v1
|
|
991
|
+
|
|
992
|
+
##### taskType
|
|
993
|
+
|
|
994
|
+
> **taskType**: [`TaskType`](#tasktype-2)
|
|
995
|
+
|
|
996
|
+
任务类型,当前支持 local 和 remote
|
|
997
|
+
|
|
998
|
+
<a id="createtaskresult"></a>
|
|
999
|
+
### CreateTaskResult
|
|
1000
|
+
|
|
1001
|
+
创建任务的返回结果。
|
|
1002
|
+
|
|
1003
|
+
#### Properties
|
|
1004
|
+
|
|
1005
|
+
##### expiresIn?
|
|
1006
|
+
|
|
1007
|
+
> `optional` **expiresIn**: `number`
|
|
1008
|
+
|
|
1009
|
+
任务超时过期时间
|
|
1010
|
+
|
|
1011
|
+
##### taskId
|
|
1012
|
+
|
|
1013
|
+
> **taskId**: `string`
|
|
1014
|
+
|
|
1015
|
+
任务 ID,后续可以使用这个 ID 更新任务
|
|
1016
|
+
|
|
1017
|
+
##### token?
|
|
1018
|
+
|
|
1019
|
+
> `optional` **token**: `string`
|
|
1020
|
+
|
|
1021
|
+
远端任务 token,后续使用 token 通过 OpenAPI 更新远端任务
|
|
1022
|
+
|
|
1023
|
+
<a id="tasktype-2"></a>
|
|
1024
|
+
<a id="tasktype"></a>
|
|
1025
|
+
### TaskType
|
|
1026
|
+
|
|
1027
|
+
> **TaskType**: `"local"` \| `"remote"`
|
|
1028
|
+
|
|
1029
|
+
任务类型。
|
|
1030
|
+
|
|
1031
|
+
local 表示本地任务,remote 表示远端任务。
|
|
1032
|
+
|
|
1033
|
+
<a id="updatetaskparams"></a>
|
|
1034
|
+
### UpdateTaskParams
|
|
1035
|
+
|
|
1036
|
+
更新任务的请求参数。
|
|
1037
|
+
|
|
1038
|
+
#### Properties
|
|
1039
|
+
|
|
1040
|
+
##### taskDetail?
|
|
1041
|
+
|
|
1042
|
+
> `optional` **taskDetail**: `string`
|
|
1043
|
+
|
|
1044
|
+
模板对应的数据的 JSON 字符串,与 taskStatus 二选一
|
|
1045
|
+
|
|
1046
|
+
##### taskId
|
|
1047
|
+
|
|
1048
|
+
> **taskId**: `string`
|
|
1049
|
+
|
|
1050
|
+
任务 ID
|
|
1051
|
+
|
|
1052
|
+
##### taskStatus?
|
|
1053
|
+
|
|
1054
|
+
> `optional` **taskStatus**: [`TaskStatus`](#taskstatus-2)
|
|
1055
|
+
|
|
1056
|
+
任务状态,与 taskDetail 二选一
|
|
1057
|
+
|
|
1058
|
+
<a id="updatetaskresult"></a>
|
|
1059
|
+
### UpdateTaskResult
|
|
1060
|
+
|
|
1061
|
+
更新任务的返回结果。
|
|
1062
|
+
|
|
1063
|
+
#### Properties
|
|
1064
|
+
|
|
1065
|
+
##### expiresIn?
|
|
1066
|
+
|
|
1067
|
+
> `optional` **expiresIn**: `number`
|
|
1068
|
+
|
|
1069
|
+
任务超时过期时间
|
|
1070
|
+
|
|
1071
|
+
##### nextToken?
|
|
1072
|
+
|
|
1073
|
+
> `optional` **nextToken**: `string`
|
|
1074
|
+
|
|
1075
|
+
每次更新后旧的 token 失效,必须使用新返回的 token
|
|
1076
|
+
|
|
1077
|
+
##### taskId
|
|
1078
|
+
|
|
1079
|
+
> **taskId**: `string`
|
|
1080
|
+
|
|
1081
|
+
任务 ID,更新后任务 ID 不变
|
|
1082
|
+
|
|
1083
|
+
<a id="taskstatus-2"></a>
|
|
1084
|
+
<a id="taskstatus"></a>
|
|
1085
|
+
### TaskStatus
|
|
1086
|
+
|
|
1087
|
+
> **TaskStatus**: `"running"` \| `"completed"`
|
|
1088
|
+
|
|
1089
|
+
任务状态。
|
|
1090
|
+
|
|
1091
|
+
running 表示任务运行中,completed 表示任务已完成。
|
|
1092
|
+
|
|
1093
|
+
<a id="gettaskparams"></a>
|
|
1094
|
+
### GetTaskParams
|
|
1095
|
+
|
|
1096
|
+
查询任务的请求参数。
|
|
1097
|
+
|
|
1098
|
+
#### Properties
|
|
1099
|
+
|
|
1100
|
+
##### taskId
|
|
1101
|
+
|
|
1102
|
+
> **taskId**: `string`
|
|
1103
|
+
|
|
1104
|
+
任务 ID
|
|
1105
|
+
|
|
1106
|
+
<a id="gettaskresult"></a>
|
|
1107
|
+
### GetTaskResult
|
|
1108
|
+
|
|
1109
|
+
查询任务的返回结果。
|
|
1110
|
+
|
|
1111
|
+
#### Properties
|
|
1112
|
+
|
|
1113
|
+
##### expiresIn?
|
|
1114
|
+
|
|
1115
|
+
> `optional` **expiresIn**: `number`
|
|
1116
|
+
|
|
1117
|
+
任务超时过期时间
|
|
1118
|
+
|
|
1119
|
+
##### taskDetail
|
|
1120
|
+
|
|
1121
|
+
> **taskDetail**: `string`
|
|
1122
|
+
|
|
1123
|
+
模板对应的数据的 JSON 字符串
|
|
1124
|
+
|
|
1125
|
+
##### taskId
|
|
1126
|
+
|
|
1127
|
+
> **taskId**: `string`
|
|
1128
|
+
|
|
1129
|
+
任务 ID
|
|
1130
|
+
|
|
1131
|
+
##### taskStatus
|
|
1132
|
+
|
|
1133
|
+
> **taskStatus**: [`TaskStatus`](#taskstatus-2)
|
|
1134
|
+
|
|
1135
|
+
任务状态,运行中或已完成
|
|
1136
|
+
|
|
1137
|
+
##### taskTemplate
|
|
1138
|
+
|
|
1139
|
+
> **taskTemplate**: `"remote_normal_v1"`
|
|
1140
|
+
|
|
1141
|
+
任务样式模板,当前仅支持 remote_normal_v1
|
|
1142
|
+
|
|
1143
|
+
##### taskType
|
|
1144
|
+
|
|
1145
|
+
> **taskType**: [`TaskType`](#tasktype-2)
|
|
1146
|
+
|
|
1147
|
+
任务类型,local 或 remote
|
|
1148
|
+
|
|
1149
|
+
##### token?
|
|
1150
|
+
|
|
1151
|
+
> `optional` **token**: `string`
|
|
1152
|
+
|
|
1153
|
+
每次更新后旧的 token 失效,必须使用新返回的 token
|
|
1154
|
+
|
|
846
1155
|
<a id="updatemodelcontextparams"></a>
|
|
847
1156
|
### UpdateModelContextParams
|
|
848
1157
|
|
package/dist/template-empty/references/reference/open-api/12-/350/256/276/345/244/207-wi-fi.md
CHANGED
|
@@ -10,10 +10,11 @@ Wi-Fi 模块能力;通常先 startWifi,再获取列表或连接。
|
|
|
10
10
|
| --- | --- |
|
|
11
11
|
| [startWifi](#startwifi) | 初始化 Wi-Fi 模块。<br><br>Wi-Fi 流程入口。 |
|
|
12
12
|
| [stopWifi](#stopwifi) | 关闭 Wi-Fi 模块。 |
|
|
13
|
-
| [setWifiList](#setwifilist) | 设置 Wi-Fi
|
|
13
|
+
| [setWifiList](#setwifilist) | 设置 Wi-Fi 预设列表(iOS 特有)。<br><br>该接口为 iOS 特有,用于预设 Wi-Fi 列表。 |
|
|
14
14
|
| [connectWifi](#connectwifi) | 连接指定 Wi-Fi。<br><br>通常先调用 startWifi。 |
|
|
15
15
|
| [getConnectedWifi](#getconnectedwifi) | 获取当前已连接 Wi-Fi 信息。 |
|
|
16
16
|
| [getWifiList](#getwifilist) | 获取 Wi-Fi 列表。<br><br>通常先调用 startWifi。 |
|
|
17
|
+
| [onWifiConnected](#onwificonnected) | 监听连接上 Wi-Fi 的事件。<br><br>返回取消监听函数。 |
|
|
17
18
|
|
|
18
19
|
## API 详情
|
|
19
20
|
|
|
@@ -56,7 +57,7 @@ Wi-Fi 流程入口。
|
|
|
56
57
|
|
|
57
58
|
> **setWifiList**(`params`): `Promise`\<`object`\>
|
|
58
59
|
|
|
59
|
-
设置 Wi-Fi
|
|
60
|
+
设置 Wi-Fi 预设列表(iOS 特有)。
|
|
60
61
|
|
|
61
62
|
#### Parameters
|
|
62
63
|
|
|
@@ -68,7 +69,7 @@ Wi-Fi 流程入口。
|
|
|
68
69
|
|
|
69
70
|
#### Remarks
|
|
70
71
|
|
|
71
|
-
|
|
72
|
+
该接口为 iOS 特有,用于预设 Wi-Fi 列表。
|
|
72
73
|
|
|
73
74
|
<a id="connectwifi"></a>
|
|
74
75
|
### connectWifi()
|
|
@@ -123,12 +124,45 @@ Wi-Fi 流程入口。
|
|
|
123
124
|
|
|
124
125
|
通常先调用 startWifi。
|
|
125
126
|
|
|
127
|
+
<a id="onwificonnected"></a>
|
|
128
|
+
### onWifiConnected()
|
|
129
|
+
|
|
130
|
+
> **onWifiConnected**(`handler`): () => `void`
|
|
131
|
+
|
|
132
|
+
监听连接上 Wi-Fi 的事件。
|
|
133
|
+
|
|
134
|
+
#### Parameters
|
|
135
|
+
|
|
136
|
+
• **handler**
|
|
137
|
+
|
|
138
|
+
#### Returns
|
|
139
|
+
|
|
140
|
+
`Function`
|
|
141
|
+
|
|
142
|
+
返回取消当前监听函数的函数。
|
|
143
|
+
|
|
144
|
+
##### Returns
|
|
145
|
+
|
|
146
|
+
`void`
|
|
147
|
+
|
|
148
|
+
#### Example
|
|
149
|
+
|
|
150
|
+
```ts
|
|
151
|
+
import { onWifiConnected } from '@doubao-apps/framework/api';
|
|
152
|
+
|
|
153
|
+
const off = onWifiConnected(({ wifi }) => {
|
|
154
|
+
console.log(wifi.ssid);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
off();
|
|
158
|
+
```
|
|
159
|
+
|
|
126
160
|
## 相关类型
|
|
127
161
|
|
|
128
162
|
<a id="setwifilistparams"></a>
|
|
129
163
|
### SetWifiListParams
|
|
130
164
|
|
|
131
|
-
设置 Wi-Fi
|
|
165
|
+
设置 Wi-Fi 预设列表的请求参数(iOS 特有)。
|
|
132
166
|
|
|
133
167
|
#### Properties
|
|
134
168
|
|