Publishes all 210 public built-in shortcuts as reviewed Agent-visible leaf tools across 16 product groups, with stable canonical identities, executable +shortcut CLI paths, parameter and cross-parameter constraints, selection guidance, interface metadata, and runtime-aligned safety/confirmation semantics. Catalog grows from 603 to 813 tools.
576 lines
24 KiB
JSON
576 lines
24 KiB
JSON
{
|
|
"version": 1,
|
|
"source": {
|
|
"kind": "explicit",
|
|
"name": "dws-tool-metadata/contact",
|
|
"repository": "DingTalk-Real-AI/dingtalk-workspace-cli",
|
|
"channel": "open-source",
|
|
"reviewed": true
|
|
},
|
|
"tools": {
|
|
"contact.add_employee": {
|
|
"effect": "write",
|
|
"risk": "medium",
|
|
"confirmation": "not_required",
|
|
"idempotency": "non_idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed unpinned remote adapter: the executable CLI maps employee identity and decoded department JSON to contact/add_employee, which is absent from the pinned MCP metadata snapshot.",
|
|
"reviewed": true,
|
|
"parameters": {
|
|
"org-user-name": {
|
|
"property": "orgUserName",
|
|
"required": true
|
|
},
|
|
"org-user-mobile": {
|
|
"property": "orgUserMobile",
|
|
"required": true
|
|
},
|
|
"depts": {
|
|
"property": "depts",
|
|
"required": false,
|
|
"interface_type": "array"
|
|
}
|
|
},
|
|
"review_reason": "The reviewed Wukong-compatible handler requires employee name and mobile, decodes optional --depts JSON to an array, and calls add_employee without a runtime confirmation gate.",
|
|
"cli_path": "contact user invite",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.exclusive_account_create": {
|
|
"effect": "write",
|
|
"risk": "medium",
|
|
"confirmation": "not_required",
|
|
"idempotency": "non_idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed unpinned remote adapter: the executable CLI maps enterprise-account flags to contact/exclusive_account_create, which is absent from the pinned MCP metadata snapshot.",
|
|
"reviewed": true,
|
|
"parameters": {
|
|
"org-user-name": {
|
|
"property": "orgUserName",
|
|
"required": true
|
|
},
|
|
"login-id": {
|
|
"property": "loginId",
|
|
"required": true
|
|
},
|
|
"org-user-mobile": {
|
|
"property": "orgUserMobile",
|
|
"required": false
|
|
},
|
|
"email": {
|
|
"property": "email",
|
|
"required": false
|
|
},
|
|
"dept-ids": {
|
|
"property": "deptIds",
|
|
"required": false,
|
|
"interface_type": "array"
|
|
},
|
|
"send-pwd-via-sms": {
|
|
"property": "sendPwdViaSms",
|
|
"required": false,
|
|
"interface_type": "boolean"
|
|
}
|
|
},
|
|
"review_reason": "The reviewed Wukong-compatible handler requires enterprise display name and login ID, maps optional contact fields and department IDs, and calls exclusive_account_create without a runtime confirmation gate.",
|
|
"cli_path": "contact account create",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.get_authorized_emp_rosterInfo": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true,
|
|
"parameters": {
|
|
"fields": {
|
|
"required": false
|
|
},
|
|
"staff-id": {
|
|
"required": false
|
|
}
|
|
},
|
|
"review_reason": "The reviewed helper deliberately permits either or both optional filters and passes an empty request to query the caller's authorized roster scope.",
|
|
"cli_path": "contact user profile get",
|
|
"runtime_gate": "none",
|
|
"confirmation": "not_required"
|
|
},
|
|
"contact.get_current_user_profile": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.get_dept_info_by_dept_id": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.get_dept_members_by_deptId": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.get_sub_depts_by_dept_id": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.get_user_info_by_user_ids": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.list_authorized_roster_fields": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.list_my_followings": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.org_create": {
|
|
"effect": "write",
|
|
"risk": "medium",
|
|
"confirmation": "not_required",
|
|
"idempotency": "non_idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed unpinned remote adapter: the executable CLI maps organization and creator names to contact/org_create, which is absent from the pinned MCP metadata snapshot.",
|
|
"reviewed": true,
|
|
"parameters": {
|
|
"org-name": {
|
|
"property": "orgName",
|
|
"required": true
|
|
},
|
|
"creator-username": {
|
|
"property": "creatorUsername",
|
|
"required": true
|
|
}
|
|
},
|
|
"review_reason": "The reviewed Wukong-compatible handler requires an organization name and creator display name and calls org_create without a runtime confirmation gate.",
|
|
"cli_path": "contact org create",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.query_dismission_employee_list": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.search_contact_by_key_word": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.search_dept_by_keyword": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.search_user_by_mobile": {
|
|
"interface_mode": "mcp",
|
|
"availability": "available",
|
|
"reviewed": true
|
|
},
|
|
"contact.department_create": {
|
|
"effect": "write",
|
|
"risk": "medium",
|
|
"confirmation": "user_required",
|
|
"idempotency": "non_idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed unpinned remote adapter: the executable CLI maps department creation flags to contact/department_create, which is absent from the pinned MCP metadata snapshot.",
|
|
"reviewed": true,
|
|
"parameters": {
|
|
"name": {
|
|
"property": "deptName",
|
|
"required": true
|
|
},
|
|
"dept-name": {
|
|
"property": "deptName",
|
|
"required": false
|
|
},
|
|
"parent": {
|
|
"property": "superDeptId",
|
|
"required": false,
|
|
"interface_type": "integer"
|
|
},
|
|
"super-dept-id": {
|
|
"property": "superDeptId",
|
|
"required": false,
|
|
"interface_type": "integer"
|
|
},
|
|
"super-dept": {
|
|
"property": "superDeptId",
|
|
"required": false,
|
|
"interface_type": "integer"
|
|
},
|
|
"create-dept-group": {
|
|
"property": "createDeptGroup",
|
|
"required": true,
|
|
"interface_type": "boolean"
|
|
}
|
|
},
|
|
"review_reason": "The reviewed handler requires one department-name spelling and an explicit boolean group choice, optionally parses a parent department ID, confirms, then invokes department_create.",
|
|
"cli_path": "contact dept create",
|
|
"runtime_gate": "confirm_dangerous"
|
|
},
|
|
"contact.department_update": {
|
|
"effect": "write",
|
|
"risk": "medium",
|
|
"confirmation": "user_required",
|
|
"idempotency": "unknown",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed unpinned remote adapter: the executable CLI maps department update flags to contact/department_update, which is absent from the pinned MCP metadata snapshot.",
|
|
"reviewed": true,
|
|
"parameters": {
|
|
"dept": {
|
|
"property": "deptId",
|
|
"required": true,
|
|
"interface_type": "integer"
|
|
},
|
|
"id": {
|
|
"property": "deptId",
|
|
"required": false,
|
|
"interface_type": "integer"
|
|
},
|
|
"ids": {
|
|
"property": "deptId",
|
|
"required": false,
|
|
"interface_type": "integer"
|
|
},
|
|
"dept-id": {
|
|
"property": "deptId",
|
|
"required": false,
|
|
"interface_type": "integer"
|
|
},
|
|
"dept-ids": {
|
|
"property": "deptId",
|
|
"required": false,
|
|
"interface_type": "integer"
|
|
},
|
|
"name": {
|
|
"property": "deptName",
|
|
"required": true
|
|
},
|
|
"dept-name": {
|
|
"property": "deptName",
|
|
"required": false
|
|
},
|
|
"parent": {
|
|
"property": "superDeptId",
|
|
"required": false,
|
|
"interface_type": "integer"
|
|
},
|
|
"super-dept-id": {
|
|
"property": "superDeptId",
|
|
"required": false,
|
|
"interface_type": "integer"
|
|
},
|
|
"super-dept": {
|
|
"property": "superDeptId",
|
|
"required": false,
|
|
"interface_type": "integer"
|
|
}
|
|
},
|
|
"review_reason": "The reviewed handler requires one department-ID spelling and one department-name spelling, optionally parses a parent ID, confirms, then invokes department_update.",
|
|
"cli_path": "contact dept update",
|
|
"runtime_gate": "confirm_dangerous"
|
|
},
|
|
"contact.employee_update": {
|
|
"effect": "write",
|
|
"risk": "medium",
|
|
"confirmation": "user_required",
|
|
"idempotency": "unknown",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed unpinned remote adapter: the executable CLI maps employee update flags to contact/employee_update, which is absent from the pinned MCP metadata snapshot.",
|
|
"reviewed": true,
|
|
"parameters": {
|
|
"user-id": {
|
|
"property": "userId",
|
|
"required": true
|
|
},
|
|
"id": {
|
|
"property": "userId",
|
|
"required": false
|
|
},
|
|
"userid": {
|
|
"property": "userId",
|
|
"required": false
|
|
},
|
|
"org-user-name": {
|
|
"property": "orgUserName",
|
|
"required": false
|
|
},
|
|
"depts": {
|
|
"property": "depts",
|
|
"required": false,
|
|
"interface_type": "array"
|
|
},
|
|
"master-user-id": {
|
|
"property": "masterUserId",
|
|
"required": false
|
|
}
|
|
},
|
|
"review_reason": "The reviewed handler requires one employee-ID spelling plus at least one update field, decodes optional department JSON, confirms, then invokes employee_update.",
|
|
"cli_path": "contact user update",
|
|
"runtime_gate": "confirm_dangerous"
|
|
},
|
|
"contact.exclusive_account_user_update": {
|
|
"effect": "write",
|
|
"risk": "medium",
|
|
"confirmation": "user_required",
|
|
"idempotency": "unknown",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed unpinned remote adapter: the executable CLI maps enterprise-account update flags to contact/exclusive_account_user_update, which is absent from the pinned MCP metadata snapshot.",
|
|
"reviewed": true,
|
|
"parameters": {
|
|
"user-id": {
|
|
"property": "userId",
|
|
"required": true
|
|
},
|
|
"id": {
|
|
"property": "userId",
|
|
"required": false
|
|
},
|
|
"userid": {
|
|
"property": "userId",
|
|
"required": false
|
|
},
|
|
"org-user-name": {
|
|
"property": "orgUserName",
|
|
"required": false
|
|
},
|
|
"depts": {
|
|
"property": "depts",
|
|
"required": false,
|
|
"interface_type": "array"
|
|
},
|
|
"master-user-id": {
|
|
"property": "masterUserId",
|
|
"required": false
|
|
},
|
|
"nick": {
|
|
"property": "nick",
|
|
"required": false
|
|
},
|
|
"avatar-file-id": {
|
|
"property": "avatarFileId",
|
|
"required": false
|
|
}
|
|
},
|
|
"review_reason": "The reviewed handler requires one enterprise-account user ID plus at least one profile or organization update field, confirms, then invokes exclusive_account_user_update.",
|
|
"cli_path": "contact account update",
|
|
"runtime_gate": "confirm_dangerous"
|
|
},
|
|
"contact.self_user_profile_update": {
|
|
"effect": "write",
|
|
"risk": "medium",
|
|
"confirmation": "user_required",
|
|
"idempotency": "unknown",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed unpinned remote adapter: the executable CLI maps self-profile update flags to contact/self_user_profile_update, which is absent from the pinned MCP metadata snapshot.",
|
|
"reviewed": true,
|
|
"parameters": {
|
|
"nick": {
|
|
"property": "nick",
|
|
"required": false
|
|
},
|
|
"avatar-file-id": {
|
|
"property": "avatarFileId",
|
|
"required": false
|
|
}
|
|
},
|
|
"review_reason": "The reviewed handler requires at least one of nickname or avatar file ID, confirms, then invokes self_user_profile_update for the current user.",
|
|
"cli_path": "contact user update-self",
|
|
"runtime_gate": "confirm_dangerous"
|
|
},
|
|
"contact.shortcut_list_followings": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +list-followings",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_search_user": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +search-user",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_search_mobile": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +search-mobile",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_list_roles": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +list-roles",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_list_role_members": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +list-role-members",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_list_sub_depts": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +list-sub-depts",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_list_dept_members": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +list-dept-members",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_by_mobile": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +by-mobile",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_dept_members": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +dept-members",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_lookup": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +lookup",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_org": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +org",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_resolve_dept": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +resolve-dept",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_team": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +team",
|
|
"runtime_gate": "none"
|
|
},
|
|
"contact.shortcut_me": {
|
|
"effect": "read",
|
|
"risk": "low",
|
|
"confirmation": "not_required",
|
|
"idempotency": "idempotent",
|
|
"interface_mode": "composite",
|
|
"availability": "available",
|
|
"interface_reason": "Reviewed built-in shortcut adapter: the executable CLI owns validation, optional multi-step orchestration, output projection, and confirmation; the complete command contract is not represented by one pinned MCP interface_ref.",
|
|
"reviewed": true,
|
|
"review_reason": "Reviewed against the built-in Shortcut registry and mounted Cobra command: publishes the executable risk gate and composite interface without inventing a direct MCP identity.",
|
|
"cli_path": "contact +me",
|
|
"runtime_gate": "none"
|
|
}
|
|
}
|
|
}
|