skill7 1.1.0

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.
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @antigravity/skills-mcp-server
4
+ *
5
+ * Universal MCP server for 634+ AI development skills
6
+ * Supports: stdio (local) and HTTP (remote/Docker) transports
7
+ *
8
+ * Usage:
9
+ * Local: node dist/index.js
10
+ * Docker: docker run -p 3000:3000 antigravity/skills-mcp
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
package/dist/index.js ADDED
@@ -0,0 +1,400 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @antigravity/skills-mcp-server
4
+ *
5
+ * Universal MCP server for 634+ AI development skills
6
+ * Supports: stdio (local) and HTTP (remote/Docker) transports
7
+ *
8
+ * Usage:
9
+ * Local: node dist/index.js
10
+ * Docker: docker run -p 3000:3000 antigravity/skills-mcp
11
+ */
12
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
13
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
14
+ import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
15
+ import { z } from 'zod';
16
+ import { readFileSync, existsSync } from 'fs';
17
+ import { dirname, join } from 'path';
18
+ import { fileURLToPath } from 'url';
19
+ import { createServer } from 'http';
20
+ const __dirname = dirname(fileURLToPath(import.meta.url));
21
+ // ============================================================================
22
+ // CONFIGURATION
23
+ // ============================================================================
24
+ const PORT = parseInt(process.env.PORT || '3000', 10);
25
+ const TRANSPORT = process.env.MCP_TRANSPORT || 'stdio'; // 'stdio' or 'http'
26
+ // ============================================================================
27
+ // DATA LOADING
28
+ // ============================================================================
29
+ function loadSkillsData() {
30
+ const possiblePaths = [
31
+ join(__dirname, '..', 'data', 'skills_index.json'),
32
+ join(__dirname, '..', '..', 'antigravity-awesome-skills', 'skills_index.json'),
33
+ join(process.cwd(), 'data', 'skills_index.json'),
34
+ join(process.cwd(), 'skills_index.json'),
35
+ join(process.cwd(), 'antigravity-awesome-skills', 'skills_index.json'),
36
+ ];
37
+ for (const p of possiblePaths) {
38
+ if (existsSync(p)) {
39
+ const data = readFileSync(p, 'utf-8');
40
+ return JSON.parse(data);
41
+ }
42
+ }
43
+ console.error('โš ๏ธ Skills data not found. Using empty catalog.');
44
+ return [];
45
+ }
46
+ const skills = loadSkillsData();
47
+ // ============================================================================
48
+ // HELPER FUNCTIONS
49
+ // ============================================================================
50
+ function getCategories() {
51
+ const categoryMap = new Map();
52
+ for (const skill of skills) {
53
+ const cat = skill.category || 'uncategorized';
54
+ if (!categoryMap.has(cat)) {
55
+ categoryMap.set(cat, []);
56
+ }
57
+ categoryMap.get(cat).push(skill.id);
58
+ }
59
+ return Array.from(categoryMap.entries())
60
+ .map(([name, skillIds]) => ({
61
+ name,
62
+ count: skillIds.length,
63
+ skills: skillIds.slice(0, 10)
64
+ }))
65
+ .sort((a, b) => b.count - a.count);
66
+ }
67
+ function searchSkills(query, limit = 20) {
68
+ const lowerQuery = query.toLowerCase();
69
+ return skills
70
+ .filter(s => s.name.toLowerCase().includes(lowerQuery) ||
71
+ s.description.toLowerCase().includes(lowerQuery) ||
72
+ s.id.toLowerCase().includes(lowerQuery))
73
+ .slice(0, limit);
74
+ }
75
+ /**
76
+ * Semantic search using TF-IDF style scoring
77
+ * Matches skills by meaning, not just keywords
78
+ */
79
+ function semanticSearch(query, topK = 3) {
80
+ const queryTerms = query.toLowerCase().split(/\W+/).filter(t => t.length > 2);
81
+ const scored = skills.map(skill => {
82
+ const nameText = skill.name.toLowerCase();
83
+ const descText = skill.description.toLowerCase();
84
+ const catText = skill.category.toLowerCase();
85
+ const pathText = skill.path.toLowerCase();
86
+ let score = 0;
87
+ for (const term of queryTerms) {
88
+ // Name matches are most valuable
89
+ if (nameText.includes(term))
90
+ score += 5;
91
+ // Category matches indicate domain relevance
92
+ if (catText.includes(term))
93
+ score += 3;
94
+ // Path often contains good keywords
95
+ if (pathText.includes(term))
96
+ score += 2;
97
+ // Description matches are baseline relevance
98
+ if (descText.includes(term))
99
+ score += 1;
100
+ }
101
+ return { skill, score };
102
+ });
103
+ return scored
104
+ .filter(s => s.score > 0)
105
+ .sort((a, b) => b.score - a.score)
106
+ .slice(0, topK)
107
+ .map(s => s.skill);
108
+ }
109
+ /**
110
+ * Get skill content from SKILL.md or fallback to description
111
+ */
112
+ function getSkillContentSync(skill) {
113
+ const skillPaths = [
114
+ join(__dirname, '..', '..', 'antigravity-awesome-skills', skill.path, 'SKILL.md'),
115
+ join(process.cwd(), 'antigravity-awesome-skills', skill.path, 'SKILL.md'),
116
+ ];
117
+ for (const p of skillPaths) {
118
+ if (existsSync(p)) {
119
+ return readFileSync(p, 'utf-8');
120
+ }
121
+ }
122
+ return `# ${skill.name}\n\n${skill.description}\n\n**Category:** ${skill.category}\n**Risk:** ${skill.risk}`;
123
+ }
124
+ function suggestWorkflow(goal) {
125
+ const keywords = goal.toLowerCase();
126
+ const steps = [];
127
+ if (keywords.includes('api') || keywords.includes('backend')) {
128
+ steps.push({ skill: 'api-design-principles', action: 'design', reason: 'Define API structure' });
129
+ }
130
+ if (keywords.includes('web') || keywords.includes('frontend')) {
131
+ steps.push({ skill: 'react-best-practices', action: 'design', reason: 'Plan UI components' });
132
+ }
133
+ if (keywords.includes('security')) {
134
+ steps.push({ skill: 'api-security-best-practices', action: 'audit', reason: 'Security review' });
135
+ }
136
+ if (keywords.includes('typescript')) {
137
+ steps.push({ skill: 'typescript-expert', action: 'implement', reason: 'TypeScript patterns' });
138
+ }
139
+ if (keywords.includes('python')) {
140
+ steps.push({ skill: 'python-pro', action: 'implement', reason: 'Python patterns' });
141
+ }
142
+ if (keywords.includes('react')) {
143
+ steps.push({ skill: 'react-patterns', action: 'implement', reason: 'React patterns' });
144
+ }
145
+ steps.push({ skill: 'testing-patterns', action: 'test', reason: 'Testing' });
146
+ if (steps.length === 1) {
147
+ steps.unshift({ skill: 'brainstorming', action: 'plan', reason: 'Planning' });
148
+ }
149
+ return { steps };
150
+ }
151
+ // ============================================================================
152
+ // CREATE MCP SERVER
153
+ // ============================================================================
154
+ function createMcpServer() {
155
+ const server = new McpServer({
156
+ name: 'antigravity-skills',
157
+ version: '1.0.0',
158
+ });
159
+ // TOOL: list_skills
160
+ server.tool('list_skills', 'List skills with optional category filter', {
161
+ category: z.string().optional().describe('Filter by category'),
162
+ limit: z.number().optional().default(50),
163
+ offset: z.number().optional().default(0),
164
+ }, async ({ category, limit = 50, offset = 0 }) => {
165
+ let filtered = category
166
+ ? skills.filter(s => s.category.toLowerCase().includes(category.toLowerCase()))
167
+ : skills;
168
+ const paginated = filtered.slice(offset, offset + limit);
169
+ return {
170
+ content: [{
171
+ type: 'text',
172
+ text: JSON.stringify({
173
+ total: filtered.length,
174
+ skills: paginated.map(s => ({
175
+ id: s.id,
176
+ name: s.name,
177
+ description: s.description.slice(0, 100),
178
+ category: s.category,
179
+ })),
180
+ }, null, 2)
181
+ }],
182
+ };
183
+ });
184
+ // TOOL: get_skill
185
+ server.tool('get_skill', 'Get full details of a skill', { skillId: z.string().describe('Skill ID') }, async ({ skillId }) => {
186
+ const skill = skills.find(s => s.id === skillId || s.name === skillId);
187
+ if (!skill) {
188
+ return { content: [{ type: 'text', text: `Skill "${skillId}" not found.` }], isError: true };
189
+ }
190
+ return { content: [{ type: 'text', text: JSON.stringify(skill, null, 2) }] };
191
+ });
192
+ // TOOL: search_skills
193
+ server.tool('search_skills', 'Search skills by keyword', {
194
+ query: z.string().describe('Search query'),
195
+ limit: z.number().optional().default(20),
196
+ }, async ({ query, limit = 20 }) => {
197
+ const results = searchSkills(query, limit);
198
+ return {
199
+ content: [{
200
+ type: 'text',
201
+ text: JSON.stringify({
202
+ query,
203
+ count: results.length,
204
+ skills: results.map(s => ({ id: s.id, name: s.name, category: s.category })),
205
+ }, null, 2)
206
+ }],
207
+ };
208
+ });
209
+ // TOOL: get_categories
210
+ server.tool('get_categories', 'Get all skill categories with counts', {}, async () => ({
211
+ content: [{
212
+ type: 'text',
213
+ text: JSON.stringify({
214
+ totalSkills: skills.length,
215
+ categories: getCategories(),
216
+ }, null, 2)
217
+ }],
218
+ }));
219
+ // TOOL: suggest_workflow
220
+ server.tool('suggest_workflow', 'Get a workflow suggestion for a goal', { goal: z.string().describe('What you want to accomplish') }, async ({ goal }) => {
221
+ const workflow = suggestWorkflow(goal);
222
+ return {
223
+ content: [{
224
+ type: 'text',
225
+ text: JSON.stringify({
226
+ goal,
227
+ steps: workflow.steps,
228
+ }, null, 2)
229
+ }],
230
+ };
231
+ });
232
+ // TOOL: get_skill_content
233
+ server.tool('get_skill_content', 'Read full SKILL.md content', { skillId: z.string().describe('Skill ID') }, async ({ skillId }) => {
234
+ const skill = skills.find(s => s.id === skillId);
235
+ if (!skill) {
236
+ return { content: [{ type: 'text', text: `Skill "${skillId}" not found.` }], isError: true };
237
+ }
238
+ const skillPaths = [
239
+ join(__dirname, '..', '..', 'antigravity-awesome-skills', skill.path, 'SKILL.md'),
240
+ join(process.cwd(), 'antigravity-awesome-skills', skill.path, 'SKILL.md'),
241
+ ];
242
+ for (const p of skillPaths) {
243
+ if (existsSync(p)) {
244
+ return { content: [{ type: 'text', text: readFileSync(p, 'utf-8') }] };
245
+ }
246
+ }
247
+ return {
248
+ content: [{
249
+ type: 'text',
250
+ text: `Skill info:\n${JSON.stringify(skill, null, 2)}\n\nClone repo for full content: git clone https://github.com/Abderraouf-yt/antigravity-awesome-skills.git`
251
+ }]
252
+ };
253
+ });
254
+ // RESOURCE: skill://catalog
255
+ server.resource('skill://catalog', 'Skills catalog', async () => ({
256
+ contents: [{
257
+ uri: 'skill://catalog',
258
+ text: JSON.stringify({ totalSkills: skills.length, categories: getCategories() }, null, 2),
259
+ mimeType: 'application/json',
260
+ }],
261
+ }));
262
+ // ========================================================================
263
+ // MCP PROMPTS - Frictionless Auto-Skill Detection
264
+ // ========================================================================
265
+ // PROMPT: auto_skill - Automatically detects and returns relevant skills
266
+ server.prompt('auto_skill', 'Auto-detect and return relevant skills for any task. Call this at the start of any task to get expert guidance.', {
267
+ task: z.string().describe('The task or goal description'),
268
+ }, async ({ task }) => {
269
+ const matches = semanticSearch(task, 3);
270
+ if (matches.length === 0) {
271
+ return {
272
+ messages: [{
273
+ role: 'user',
274
+ content: {
275
+ type: 'text',
276
+ text: `No specific skills found for: "${task}". Proceed with general best practices.`,
277
+ },
278
+ }],
279
+ };
280
+ }
281
+ const skillContents = matches.map(skill => {
282
+ const content = getSkillContentSync(skill);
283
+ return `## ๐ŸŽฏ ${skill.name}\n\n**Category:** ${skill.category}\n**Risk Level:** ${skill.risk}\n\n${content}`;
284
+ });
285
+ return {
286
+ messages: [{
287
+ role: 'user',
288
+ content: {
289
+ type: 'text',
290
+ text: `# ๐ŸŒŒ Antigravity Skills Activated\n\nBased on your task: **"${task}"**\n\nApply these expert skills:\n\n${skillContents.join('\n\n---\n\n')}\n\n---\n\n*Use these skills to guide your implementation.*`,
291
+ },
292
+ }],
293
+ };
294
+ });
295
+ // PROMPT: skill_workflow - Suggested workflow for complex tasks
296
+ server.prompt('skill_workflow', 'Get a multi-step workflow recommendation for complex goals', {
297
+ goal: z.string().describe('The complex goal to accomplish'),
298
+ }, async ({ goal }) => {
299
+ const workflow = suggestWorkflow(goal);
300
+ const skillDetails = workflow.steps.map((step, i) => {
301
+ const skill = skills.find(s => s.id === step.skill || s.name.toLowerCase().includes(step.skill.toLowerCase()));
302
+ return `### Step ${i + 1}: ${step.action.toUpperCase()}\n**Skill:** ${step.skill}\n**Reason:** ${step.reason}${skill ? `\n**Description:** ${skill.description}` : ''}`;
303
+ });
304
+ return {
305
+ messages: [{
306
+ role: 'user',
307
+ content: {
308
+ type: 'text',
309
+ text: `# ๐Ÿ“‹ Recommended Workflow\n\n**Goal:** ${goal}\n\n${skillDetails.join('\n\n')}\n\n---\n\n*Follow these steps in order for best results.*`,
310
+ },
311
+ }],
312
+ };
313
+ });
314
+ return server;
315
+ }
316
+ // ============================================================================
317
+ // HTTP SERVER (for Docker/remote hosting)
318
+ // ============================================================================
319
+ function startHttpServer(server) {
320
+ const httpServer = createServer(async (req, res) => {
321
+ // CORS headers
322
+ res.setHeader('Access-Control-Allow-Origin', '*');
323
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
324
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
325
+ if (req.method === 'OPTIONS') {
326
+ res.writeHead(204);
327
+ res.end();
328
+ return;
329
+ }
330
+ // Health check
331
+ if (req.url === '/health') {
332
+ res.writeHead(200, { 'Content-Type': 'application/json' });
333
+ res.end(JSON.stringify({ status: 'ok', skills: skills.length }));
334
+ return;
335
+ }
336
+ // Info endpoint
337
+ if (req.url === '/' && req.method === 'GET') {
338
+ res.writeHead(200, { 'Content-Type': 'application/json' });
339
+ res.end(JSON.stringify({
340
+ name: 'Antigravity Skills MCP Server',
341
+ version: '1.0.0',
342
+ skills: skills.length,
343
+ categories: getCategories().length,
344
+ endpoints: {
345
+ health: '/health',
346
+ sse: '/sse',
347
+ messages: '/messages',
348
+ },
349
+ tools: ['list_skills', 'get_skill', 'search_skills', 'get_categories', 'suggest_workflow', 'get_skill_content'],
350
+ }));
351
+ return;
352
+ }
353
+ // SSE endpoint for MCP
354
+ if (req.url === '/sse') {
355
+ const transport = new SSEServerTransport('/messages', res);
356
+ await server.connect(transport);
357
+ return;
358
+ }
359
+ // Messages endpoint
360
+ if (req.url === '/messages' && req.method === 'POST') {
361
+ // Handle incoming MCP messages
362
+ let body = '';
363
+ req.on('data', chunk => { body += chunk; });
364
+ req.on('end', () => {
365
+ res.writeHead(200, { 'Content-Type': 'application/json' });
366
+ res.end(JSON.stringify({ received: true }));
367
+ });
368
+ return;
369
+ }
370
+ res.writeHead(404);
371
+ res.end('Not Found');
372
+ });
373
+ httpServer.listen(PORT, () => {
374
+ console.log(`๐ŸŒŒ Antigravity Skills MCP Server`);
375
+ console.log(`๐Ÿ“š ${skills.length} skills loaded`);
376
+ console.log(`๐ŸŒ HTTP server: http://localhost:${PORT}`);
377
+ console.log(` Health: http://localhost:${PORT}/health`);
378
+ console.log(` SSE: http://localhost:${PORT}/sse`);
379
+ });
380
+ }
381
+ // ============================================================================
382
+ // STDIO SERVER (for local CLI integration)
383
+ // ============================================================================
384
+ async function startStdioServer(server) {
385
+ const transport = new StdioServerTransport();
386
+ await server.connect(transport);
387
+ console.error('๐ŸŒŒ Antigravity Skills MCP Server (stdio)');
388
+ console.error(`๐Ÿ“š ${skills.length} skills loaded`);
389
+ }
390
+ // ============================================================================
391
+ // MAIN
392
+ // ============================================================================
393
+ const server = createMcpServer();
394
+ if (TRANSPORT === 'http') {
395
+ startHttpServer(server);
396
+ }
397
+ else {
398
+ startStdioServer(server).catch(console.error);
399
+ }
400
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "skill7",
3
+ "version": "1.1.0",
4
+ "description": "Universal MCP server for 634+ AI skills - Gemini CLI, Claude, Cursor, Copilot & more",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "skill7": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "start": "node dist/index.js",
13
+ "start:http": "MCP_TRANSPORT=http node dist/index.js",
14
+ "dev": "tsx src/index.ts",
15
+ "inspector": "npx @modelcontextprotocol/inspector node dist/index.js",
16
+ "setup:gemini": "node scripts/setup.js --client gemini",
17
+ "setup:claude": "node scripts/setup.js --client claude",
18
+ "setup:cursor": "node scripts/setup.js --client cursor",
19
+ "setup:all": "node scripts/setup.js --client all"
20
+ },
21
+ "keywords": [
22
+ "mcp",
23
+ "model-context-protocol",
24
+ "gemini-cli",
25
+ "claude",
26
+ "cursor",
27
+ "copilot",
28
+ "ai-skills",
29
+ "agentic"
30
+ ],
31
+ "author": "Antigravity",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/Abderraouf-yt/skills-mcp-server.git"
36
+ },
37
+ "homepage": "https://github.com/Abderraouf-yt/skills-mcp-server#readme",
38
+ "dependencies": {
39
+ "@modelcontextprotocol/sdk": "^1.26.0",
40
+ "zod": "^3.24.0"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^22.0.0",
44
+ "typescript": "^5.7.0",
45
+ "tsx": "^4.0.0"
46
+ },
47
+ "engines": {
48
+ "node": ">=18.0.0"
49
+ },
50
+ "files": [
51
+ "dist",
52
+ "data",
53
+ "scripts",
54
+ "README.md"
55
+ ]
56
+ }
@@ -0,0 +1,99 @@
1
+ import { spawn } from 'child_process';
2
+ import { dirname, join } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ const __dirname = dirname(fileURLToPath(import.meta.url));
6
+
7
+ // Configuration
8
+ const SERVER_PATH = join(__dirname, '../dist/index.js');
9
+ const TEST_SCENARIOS = [
10
+ "I need to build a secure React frontend with authentication",
11
+ "How do I optimize my Python backend API performance?",
12
+ "Setup a CI/CD pipeline for a Next.js app on AWS"
13
+ ];
14
+
15
+ console.log('๐Ÿงช Starting Antigravity Skills Sandbox Simulation...');
16
+ console.log('Target Server:', SERVER_PATH);
17
+ console.log('---------------------------------------------------\n');
18
+
19
+ const server = spawn('node', [SERVER_PATH], {
20
+ stdio: ['pipe', 'pipe', 'inherit']
21
+ });
22
+
23
+ let buffer = '';
24
+ let responseCount = 0;
25
+
26
+ server.stdout.on('data', (data) => {
27
+ buffer += data.toString();
28
+ const lines = buffer.split('\n');
29
+ buffer = lines.pop(); // Keep incomplete line
30
+
31
+ for (const line of lines) {
32
+ if (!line.trim()) continue;
33
+
34
+ try {
35
+ const response = JSON.parse(line);
36
+
37
+ // Handle Prompt List Response (Init)
38
+ if (response.id === 'init') {
39
+ runScenarios();
40
+ }
41
+ // Handle Scenario Responses
42
+ else if (response.id && typeof response.id === 'number') {
43
+ const scenarioIdx = response.id;
44
+ const scenario = TEST_SCENARIOS[scenarioIdx];
45
+
46
+ console.log(`\n๐Ÿ—ฃ๏ธ USER TASK: "${scenario}"`);
47
+ console.log('๐Ÿค– AGENT DETECTED SKILLS:');
48
+
49
+ if (response.result?.messages?.[0]?.content?.text) {
50
+ const text = response.result.messages[0].content.text;
51
+ // Parse out the skill names for a clean summary
52
+ const skillHeaders = text.match(/## ๐ŸŽฏ (.*)/g) || [];
53
+
54
+ if (skillHeaders.length > 0) {
55
+ skillHeaders.forEach(h => console.log(` โœ… ${h.replace('## ๐ŸŽฏ ', '')}`));
56
+ console.log(`\n (Plus full content injection for each skill...)`);
57
+ } else {
58
+ console.log(' โš ๏ธ No specific skills found (General fallback)');
59
+ }
60
+ } else {
61
+ console.log(' โŒ Error: Invalid response format');
62
+ }
63
+
64
+ responseCount++;
65
+ if (responseCount === TEST_SCENARIOS.length) {
66
+ console.log('\n---------------------------------------------------');
67
+ console.log('๐ŸŽ‰ Sandbox Test Complete!');
68
+ process.exit(0);
69
+ }
70
+ }
71
+ } catch (e) {
72
+ // Ignore non-JSON lines (logs)
73
+ }
74
+ }
75
+ });
76
+
77
+ function runScenarios() {
78
+ TEST_SCENARIOS.forEach((task, index) => {
79
+ const req = {
80
+ jsonrpc: '2.0',
81
+ id: index,
82
+ method: 'prompts/get',
83
+ params: {
84
+ name: 'auto_skill',
85
+ arguments: { task }
86
+ }
87
+ };
88
+ server.stdin.write(JSON.stringify(req) + '\n');
89
+ });
90
+ }
91
+
92
+ // 1. Send Init (List Prompts) to wake server
93
+ setTimeout(() => {
94
+ server.stdin.write(JSON.stringify({
95
+ jsonrpc: '2.0',
96
+ id: 'init',
97
+ method: 'prompts/list'
98
+ }) + '\n');
99
+ }, 1000);