chyz 2.0.0-rc.8 → 2.0.1-rc.1
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/BaseChyz.d.ts +73 -56
- package/BaseChyz.d.ts.map +1 -1
- package/BaseChyz.js +569 -404
- package/README.md +1 -1
- package/base/ActionFilter.d.ts +32 -32
- package/base/ActionFilter.d.ts.map +1 -1
- package/base/ActionFilter.js +82 -82
- package/base/BadRequestHttpException.d.ts +6 -0
- package/base/BadRequestHttpException.d.ts.map +1 -0
- package/base/BadRequestHttpException.js +17 -0
- package/base/BaseError.d.ts +43 -10
- package/base/BaseError.d.ts.map +1 -1
- package/base/BaseError.js +58 -26
- package/base/Behavior.d.ts +3 -3
- package/base/Behavior.js +7 -7
- package/base/CBaseObject.d.ts +4 -4
- package/base/CBaseObject.d.ts.map +1 -1
- package/base/CBaseObject.js +16 -16
- package/base/CEvents.d.ts +13 -0
- package/base/CEvents.d.ts.map +1 -0
- package/base/CEvents.js +24 -0
- package/base/CRequest.d.ts +1 -1
- package/base/CRequest.js +10 -10
- package/base/CWebController.d.ts +43 -43
- package/base/CWebController.d.ts.map +1 -1
- package/base/CWebController.js +81 -74
- package/base/Component.d.ts +20 -20
- package/base/Component.d.ts.map +1 -1
- package/base/Component.js +57 -57
- package/base/Configurable.d.ts +2 -2
- package/base/Configurable.js +8 -8
- package/base/DataErrorDbException.d.ts +5 -5
- package/base/DataErrorDbException.d.ts.map +1 -1
- package/base/DataErrorDbException.js +17 -17
- package/base/DbConnection.d.ts +12 -12
- package/base/DbConnection.js +53 -53
- package/base/ForbiddenHttpException.d.ts +4 -4
- package/base/ForbiddenHttpException.d.ts.map +1 -1
- package/base/ForbiddenHttpException.js +16 -16
- package/base/InvalidArgumentException.d.ts +5 -5
- package/base/InvalidArgumentException.d.ts.map +1 -1
- package/base/InvalidArgumentException.js +17 -17
- package/base/InvalidConfigException.d.ts +5 -5
- package/base/InvalidConfigException.d.ts.map +1 -1
- package/base/InvalidConfigException.js +17 -17
- package/base/Logs.d.ts +21 -21
- package/base/Logs.d.ts.map +1 -1
- package/base/Logs.js +57 -57
- package/base/Model.d.ts +301 -298
- package/base/Model.d.ts.map +1 -1
- package/base/Model.js +545 -507
- package/base/ModelManager.d.ts +1 -1
- package/base/ModelManager.js +19 -19
- package/base/NotFoundHttpException.d.ts +5 -5
- package/base/NotFoundHttpException.d.ts.map +1 -1
- package/base/NotFoundHttpException.js +17 -17
- package/base/RestClient.d.ts +6 -6
- package/base/RestClient.d.ts.map +1 -1
- package/base/RestClient.js +25 -25
- package/base/UnauthorizedHttpException.d.ts +5 -5
- package/base/UnauthorizedHttpException.d.ts.map +1 -1
- package/base/UnauthorizedHttpException.js +17 -17
- package/base/ValidationHttpException.d.ts +5 -5
- package/base/ValidationHttpException.d.ts.map +1 -1
- package/base/ValidationHttpException.js +17 -17
- package/base/db/Exception.d.ts +6 -6
- package/base/db/Exception.js +15 -15
- package/base/index.d.ts +19 -18
- package/base/index.d.ts.map +1 -1
- package/base/index.js +41 -39
- package/decorator/Middleware.d.ts +3 -3
- package/decorator/Middleware.js +11 -11
- package/decorator/controller.d.ts +2 -2
- package/decorator/controller.js +24 -24
- package/decorator/delete.d.ts +3 -0
- package/decorator/delete.d.ts.map +1 -0
- package/decorator/delete.js +36 -0
- package/decorator/enums/ControllerDecoratorParams.d.ts +5 -5
- package/decorator/enums/ControllerDecoratorParams.js +9 -9
- package/decorator/get.d.ts +2 -2
- package/decorator/get.js +36 -36
- package/decorator/index.d.ts +5 -3
- package/decorator/index.d.ts.map +1 -1
- package/decorator/index.js +13 -9
- package/decorator/post.d.ts +2 -2
- package/decorator/post.js +36 -36
- package/decorator/put.d.ts +3 -0
- package/decorator/put.d.ts.map +1 -0
- package/decorator/put.js +36 -0
- package/filters/AccessControl.d.ts +12 -12
- package/filters/AccessControl.d.ts.map +1 -1
- package/filters/AccessControl.js +83 -83
- package/filters/AccessRule.d.ts +82 -82
- package/filters/AccessRule.d.ts.map +1 -1
- package/filters/AccessRule.js +136 -137
- package/filters/auth/AuthInterface.d.ts +25 -25
- package/filters/auth/AuthInterface.js +2 -2
- package/filters/auth/AuthMethod.d.ts +37 -37
- package/filters/auth/AuthMethod.d.ts.map +1 -1
- package/filters/auth/AuthMethod.js +82 -82
- package/filters/auth/HttpBasicAuth.d.ts +23 -22
- package/filters/auth/HttpBasicAuth.d.ts.map +1 -1
- package/filters/auth/HttpBasicAuth.js +78 -72
- package/filters/auth/HttpBearerAuth.d.ts +17 -17
- package/filters/auth/HttpBearerAuth.d.ts.map +1 -1
- package/filters/auth/HttpBearerAuth.js +33 -32
- package/filters/auth/HttpHeaderAuth.d.ts +18 -14
- package/filters/auth/HttpHeaderAuth.d.ts.map +1 -1
- package/filters/auth/HttpHeaderAuth.js +64 -57
- package/filters/auth/JwtHttpBearerAuth.d.ts +20 -20
- package/filters/auth/JwtHttpBearerAuth.d.ts.map +1 -1
- package/filters/auth/JwtHttpBearerAuth.js +87 -81
- package/filters/auth/KeyCloakHttpBearerAuth.d.ts +22 -22
- package/filters/auth/KeyCloakHttpBearerAuth.js +116 -116
- package/filters/auth/index.d.ts +4 -4
- package/filters/auth/index.js +11 -11
- package/filters/index.d.ts +2 -2
- package/filters/index.js +7 -7
- package/index.d.ts +28 -21
- package/index.d.ts.map +1 -1
- package/index.js +71 -60
- package/model/RouteDefinition.d.ts +6 -6
- package/model/RouteDefinition.js +8 -8
- package/package.json +22 -24
- package/rbac/AuthAssignment.d.ts +18 -18
- package/rbac/AuthAssignment.js +44 -44
- package/rbac/AuthItem.d.ts +26 -26
- package/rbac/AuthItem.js +51 -51
- package/rbac/AuthItemChild.d.ts +18 -18
- package/rbac/AuthItemChild.js +43 -43
- package/rbac/AuthManager.d.ts +111 -111
- package/rbac/AuthManager.d.ts.map +1 -1
- package/rbac/AuthManager.js +356 -355
- package/rbac/index.d.ts +5 -0
- package/rbac/index.d.ts.map +1 -0
- package/rbac/index.js +28 -0
- package/requiments/Glob.d.ts +2 -2
- package/requiments/Glob.js +10 -10
- package/requiments/ReflectUtil.js +24 -24
- package/requiments/Utils.d.ts +1 -8
- package/requiments/Utils.d.ts.map +1 -1
- package/requiments/Utils.js +115 -112
- package/validators/BooleanValidator.js +1 -1
- package/validators/CompareValidator.js +1 -1
- package/validators/DateValidator.js +1 -1
- package/validators/EmailValidator.js +1 -1
- package/validators/Validator.d.ts +17 -17
- package/validators/Validator.js +27 -27
- package/web/IdentityInterface.d.ts +55 -54
- package/web/IdentityInterface.d.ts.map +1 -1
- package/web/IdentityInterface.js +8 -8
- package/web/WebUser.d.ts +71 -71
- package/web/WebUser.js +165 -165
package/rbac/AuthManager.d.ts
CHANGED
|
@@ -1,112 +1,112 @@
|
|
|
1
|
-
import { Component } from "../base";
|
|
2
|
-
interface Role {
|
|
3
|
-
type: number;
|
|
4
|
-
name: string;
|
|
5
|
-
description: string;
|
|
6
|
-
ruleName: string;
|
|
7
|
-
data: string;
|
|
8
|
-
params: string;
|
|
9
|
-
}
|
|
10
|
-
export declare class AuthManager extends Component {
|
|
11
|
-
static readonly TYPE_ROLE = 1;
|
|
12
|
-
static readonly TYPE_PERMISSION = 2;
|
|
13
|
-
init(): void;
|
|
14
|
-
/**
|
|
15
|
-
* @var Item[] all auth items (name => Item)
|
|
16
|
-
*/
|
|
17
|
-
protected items: any;
|
|
18
|
-
checkAccessAssignments: any;
|
|
19
|
-
defaultRoles: any;
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
22
|
-
*/
|
|
23
|
-
checkAccess(userId: number, permissionName: string, params?: any[]): Promise<boolean>;
|
|
24
|
-
checkAccessFromCache(): Promise<void>;
|
|
25
|
-
checkAccessRecursive(user: string | number, itemname: string, params: any[], assignments: any): Promise<boolean>;
|
|
26
|
-
/**
|
|
27
|
-
*
|
|
28
|
-
* @param name
|
|
29
|
-
*/
|
|
30
|
-
getItem(name: string): Promise<any>;
|
|
31
|
-
getItems(type: number): Promise<any>;
|
|
32
|
-
getRolesByUser(userId: number): Promise<any>;
|
|
33
|
-
/**
|
|
34
|
-
*
|
|
35
|
-
* @param roleName
|
|
36
|
-
*/
|
|
37
|
-
getChildRoles(roleName: string): Promise<any>;
|
|
38
|
-
/**
|
|
39
|
-
*
|
|
40
|
-
* @param roleName
|
|
41
|
-
*/
|
|
42
|
-
getPermissionsByRole(roleName: string): Promise<any>;
|
|
43
|
-
/**
|
|
44
|
-
*
|
|
45
|
-
* @param userId
|
|
46
|
-
*/
|
|
47
|
-
getPermissionsByUser(userId: number): Promise<any>;
|
|
48
|
-
/**
|
|
49
|
-
* Returns all permissions that are directly assigned to user.
|
|
50
|
-
* @return Permission[] all direct permissions that the user has. The array is indexed by the permission names.
|
|
51
|
-
*/
|
|
52
|
-
protected getDirectPermissionsByUser(userId: number): Promise<any>;
|
|
53
|
-
protected getInheritedPermissionsByUser(userId: number): Promise<any>;
|
|
54
|
-
/**
|
|
55
|
-
*
|
|
56
|
-
* @param userId
|
|
57
|
-
*/
|
|
58
|
-
getItemsByUser(userId: number): Promise<any>;
|
|
59
|
-
/**
|
|
60
|
-
* Returns all role assignment information for the specified role.
|
|
61
|
-
* @param $roleName
|
|
62
|
-
*/
|
|
63
|
-
getUserIdsByRole(roleName: number): Promise<any>;
|
|
64
|
-
/**
|
|
65
|
-
* {@inheritdoc}
|
|
66
|
-
*/
|
|
67
|
-
getRole(name: string): Promise<Role | null>;
|
|
68
|
-
/**
|
|
69
|
-
* {@inheritdoc}
|
|
70
|
-
*/
|
|
71
|
-
getRoles(): Promise<any>;
|
|
72
|
-
/**
|
|
73
|
-
* Recursively finds all children and grand children of the specified item.
|
|
74
|
-
* @param string $name the name of the item whose children are to be looked for.
|
|
75
|
-
* @param array $childrenList the child list built via [[getChildrenList()]]
|
|
76
|
-
* @param array $result the children and grand children (in array keys)
|
|
77
|
-
*/
|
|
78
|
-
protected getChildrenRecursive(name: string, childrenList: any, model: any): void;
|
|
79
|
-
/**
|
|
80
|
-
*
|
|
81
|
-
* @param roleName
|
|
82
|
-
* @param userId
|
|
83
|
-
*/
|
|
84
|
-
getAssignment(roleName: string, userId: string): any;
|
|
85
|
-
/**
|
|
86
|
-
*
|
|
87
|
-
*/
|
|
88
|
-
getAssignments(userId: number): Promise<any>;
|
|
89
|
-
/**
|
|
90
|
-
* Returns the children for every parent.
|
|
91
|
-
* @return array the children list. Each array key is a parent item name,
|
|
92
|
-
* and the corresponding array value is a list of child item names.
|
|
93
|
-
*/
|
|
94
|
-
protected getChildrenList(): Promise<any>;
|
|
95
|
-
/**
|
|
96
|
-
* Check whether $userId is empty.
|
|
97
|
-
* @param mixed $userId
|
|
98
|
-
* @return bool
|
|
99
|
-
* @since 2.0.26
|
|
100
|
-
*/
|
|
101
|
-
protected isEmptyUserId(userId: string): boolean;
|
|
102
|
-
/**
|
|
103
|
-
* Checks whether array of $assignments is empty and [[defaultRoles]] property is empty as well.
|
|
104
|
-
*
|
|
105
|
-
* @param Assignment[] $assignments array of user's assignments
|
|
106
|
-
* @return bool whether array of $assignments is empty and [[defaultRoles]] property is empty as well
|
|
107
|
-
* @since 2.0.11
|
|
108
|
-
*/
|
|
109
|
-
protected hasNoAssignments(assignments: any): any;
|
|
110
|
-
}
|
|
111
|
-
export {};
|
|
1
|
+
import { Component } from "../base";
|
|
2
|
+
interface Role {
|
|
3
|
+
type: number;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
ruleName: string;
|
|
7
|
+
data: string;
|
|
8
|
+
params: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class AuthManager extends Component {
|
|
11
|
+
static readonly TYPE_ROLE = 1;
|
|
12
|
+
static readonly TYPE_PERMISSION = 2;
|
|
13
|
+
init(): void;
|
|
14
|
+
/**
|
|
15
|
+
* @var Item[] all auth items (name => Item)
|
|
16
|
+
*/
|
|
17
|
+
protected items: any;
|
|
18
|
+
checkAccessAssignments: any;
|
|
19
|
+
defaultRoles: any;
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
checkAccess(userId: number, permissionName: string, params?: any[]): Promise<boolean>;
|
|
24
|
+
checkAccessFromCache(): Promise<void>;
|
|
25
|
+
checkAccessRecursive(user: string | number, itemname: string, params: any[], assignments: any): Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* @param name
|
|
29
|
+
*/
|
|
30
|
+
getItem(name: string): Promise<any>;
|
|
31
|
+
getItems(type: number): Promise<any>;
|
|
32
|
+
getRolesByUser(userId: number): Promise<any>;
|
|
33
|
+
/**
|
|
34
|
+
*
|
|
35
|
+
* @param roleName
|
|
36
|
+
*/
|
|
37
|
+
getChildRoles(roleName: string): Promise<any>;
|
|
38
|
+
/**
|
|
39
|
+
*
|
|
40
|
+
* @param roleName
|
|
41
|
+
*/
|
|
42
|
+
getPermissionsByRole(roleName: string): Promise<any>;
|
|
43
|
+
/**
|
|
44
|
+
*
|
|
45
|
+
* @param userId
|
|
46
|
+
*/
|
|
47
|
+
getPermissionsByUser(userId: number): Promise<any>;
|
|
48
|
+
/**
|
|
49
|
+
* Returns all permissions that are directly assigned to user.
|
|
50
|
+
* @return Permission[] all direct permissions that the user has. The array is indexed by the permission names.
|
|
51
|
+
*/
|
|
52
|
+
protected getDirectPermissionsByUser(userId: number): Promise<any>;
|
|
53
|
+
protected getInheritedPermissionsByUser(userId: number): Promise<any>;
|
|
54
|
+
/**
|
|
55
|
+
*
|
|
56
|
+
* @param userId
|
|
57
|
+
*/
|
|
58
|
+
getItemsByUser(userId: number): Promise<any>;
|
|
59
|
+
/**
|
|
60
|
+
* Returns all role assignment information for the specified role.
|
|
61
|
+
* @param $roleName
|
|
62
|
+
*/
|
|
63
|
+
getUserIdsByRole(roleName: number): Promise<any>;
|
|
64
|
+
/**
|
|
65
|
+
* {@inheritdoc}
|
|
66
|
+
*/
|
|
67
|
+
getRole(name: string): Promise<Role | null>;
|
|
68
|
+
/**
|
|
69
|
+
* {@inheritdoc}
|
|
70
|
+
*/
|
|
71
|
+
getRoles(): Promise<any>;
|
|
72
|
+
/**
|
|
73
|
+
* Recursively finds all children and grand children of the specified item.
|
|
74
|
+
* @param string $name the name of the item whose children are to be looked for.
|
|
75
|
+
* @param array $childrenList the child list built via [[getChildrenList()]]
|
|
76
|
+
* @param array $result the children and grand children (in array keys)
|
|
77
|
+
*/
|
|
78
|
+
protected getChildrenRecursive(name: string, childrenList: any, model: any): void;
|
|
79
|
+
/**
|
|
80
|
+
*
|
|
81
|
+
* @param roleName
|
|
82
|
+
* @param userId
|
|
83
|
+
*/
|
|
84
|
+
getAssignment(roleName: string, userId: string): any;
|
|
85
|
+
/**
|
|
86
|
+
*
|
|
87
|
+
*/
|
|
88
|
+
getAssignments(userId: number): Promise<any>;
|
|
89
|
+
/**
|
|
90
|
+
* Returns the children for every parent.
|
|
91
|
+
* @return array the children list. Each array key is a parent item name,
|
|
92
|
+
* and the corresponding array value is a list of child item names.
|
|
93
|
+
*/
|
|
94
|
+
protected getChildrenList(): Promise<any>;
|
|
95
|
+
/**
|
|
96
|
+
* Check whether $userId is empty.
|
|
97
|
+
* @param mixed $userId
|
|
98
|
+
* @return bool
|
|
99
|
+
* @since 2.0.26
|
|
100
|
+
*/
|
|
101
|
+
protected isEmptyUserId(userId: string): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Checks whether array of $assignments is empty and [[defaultRoles]] property is empty as well.
|
|
104
|
+
*
|
|
105
|
+
* @param Assignment[] $assignments array of user's assignments
|
|
106
|
+
* @return bool whether array of $assignments is empty and [[defaultRoles]] property is empty as well
|
|
107
|
+
* @since 2.0.11
|
|
108
|
+
*/
|
|
109
|
+
protected hasNoAssignments(assignments: any): any;
|
|
110
|
+
}
|
|
111
|
+
export {};
|
|
112
112
|
//# sourceMappingURL=AuthManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../../src/rbac/AuthManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAuC,MAAM,SAAS,CAAC;AAKxE,UAAU,IAAI;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAYD,qBAAa,WAAY,SAAQ,SAAS;IACtC,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK;IAC9B,MAAM,CAAC,QAAQ,CAAC,eAAe,KAAK;IAEpC,IAAI;IAIJ;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;IACrB,sBAAsB,EAAE,GAAG,CAAK;IAChC,YAAY,EAAE,GAAG,CAAK;IAGtB;;OAEG;IAEU,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../../src/rbac/AuthManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAuC,MAAM,SAAS,CAAC;AAKxE,UAAU,IAAI;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAYD,qBAAa,WAAY,SAAQ,SAAS;IACtC,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK;IAC9B,MAAM,CAAC,QAAQ,CAAC,eAAe,KAAK;IAEpC,IAAI;IAIJ;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;IACrB,sBAAsB,EAAE,GAAG,CAAK;IAChC,YAAY,EAAE,GAAG,CAAK;IAGtB;;OAEG;IAEU,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBhG,oBAAoB;IAKb,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IA4B7H;;;OAGG;IACU,OAAO,CAAC,IAAI,EAAE,MAAM;IAOpB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAYrB,cAAc,CAAC,MAAM,EAAE,MAAM;IAyB1C;;;OAGG;IACU,aAAa,CAAC,QAAQ,EAAE,MAAM;IAoB3C;;;OAGG;IACU,oBAAoB,CAAC,QAAQ,EAAE,MAAM;IAuBlD;;;OAGG;IACU,oBAAoB,CAAC,MAAM,EAAE,MAAM;IAYhD;;;OAGG;cACa,0BAA0B,CAAC,MAAM,EAAE,MAAM;cAuBzC,6BAA6B,CAAC,MAAM,EAAE,MAAM;IA4B5D;;;OAGG;IACU,cAAc,CAAC,MAAM,EAAE,MAAM;IAY1C;;;OAGG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAO9C;;OAEG;IACU,OAAO,CAAC,IAAI,EAAE,MAAM;IAMjC;;OAEG;IACI,QAAQ;IAIf;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;IAW1E;;;;OAIG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAQrD;;OAEG;IACU,cAAc,CAAC,MAAM,EAAE,MAAM;IAkB1C;;;;OAIG;cACa,eAAe;IAU/B;;;;;OAKG;IACH,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM;IAItC;;;;;;OAMG;IACH,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG;CAG9C"}
|