@appaflytech/zeyrek-ai-mcp 0.0.6 → 0.0.7

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.
Files changed (91) hide show
  1. package/.env.example +2 -2
  2. package/.env.production.example +8 -0
  3. package/README.md +9 -8
  4. package/dist/config.js +18 -3
  5. package/dist/knowledge/backendConstraints.js +85 -0
  6. package/dist/knowledge/componentCatalog.js +357 -54
  7. package/dist/knowledge/componentEvents.js +120 -25
  8. package/dist/knowledge/functionGuards.js +134 -0
  9. package/dist/knowledge/normalize.js +53 -2
  10. package/dist/knowledge/outlines.js +31 -0
  11. package/dist/knowledge/policy.js +14 -5
  12. package/dist/knowledge/rules.js +343 -1
  13. package/dist/platform/csv.js +123 -0
  14. package/dist/platform/errors.js +62 -3
  15. package/dist/platform/http.js +1 -0
  16. package/dist/platform/responses.js +16 -4
  17. package/dist/platform/screenshot.js +18 -1
  18. package/dist/resources/examples/flow-call-function.json +66 -0
  19. package/dist/resources/examples/function-total.json +70 -0
  20. package/dist/resources/examples/microfunction-node-sum.json +56 -0
  21. package/dist/resources/examples/page-dynamic-form.json +1 -1
  22. package/dist/resources/examples/page-sign-in.json +1 -1
  23. package/dist/resources/guides/component.md +13 -1
  24. package/dist/resources/guides/entity.md +321 -17
  25. package/dist/resources/guides/expressions.md +3 -0
  26. package/dist/resources/guides/functions.md +262 -0
  27. package/dist/resources/guides/getting-started.md +5 -0
  28. package/dist/resources/guides/merge.md +231 -0
  29. package/dist/resources/guides/microfunction.md +166 -0
  30. package/dist/resources/guides/microservice.md +61 -2
  31. package/dist/resources/guides/modify-existing.md +23 -0
  32. package/dist/resources/guides/page.md +20 -4
  33. package/dist/resources/guides/translation.md +24 -0
  34. package/dist/resources/guides/workflow.md +1 -1
  35. package/dist/resources/schema-fingerprint.json +4 -4
  36. package/dist/resources/schemas/AnalyzeImportQuery.json +51 -0
  37. package/dist/resources/schemas/ApplyMergePlanCommand.json +19 -0
  38. package/dist/resources/schemas/CreateBulkRowCommand.json +3 -0
  39. package/dist/resources/schemas/CreateEnvironmentCommand.json +31 -0
  40. package/dist/resources/schemas/CreateGlobalFunctionCommand.json +95 -0
  41. package/dist/resources/schemas/CreateImportPlanCommand.json +278 -0
  42. package/dist/resources/schemas/CreateMergePlanCommand.json +34 -0
  43. package/dist/resources/schemas/CreateMicrofunctionCommand.json +117 -0
  44. package/dist/resources/schemas/CreateMicrofunctionRuntimeCommand.json +51 -0
  45. package/dist/resources/schemas/CreateMicroserviceCommand.json +119 -1
  46. package/dist/resources/schemas/CreateWorkflowCommand.json +13 -2
  47. package/dist/resources/schemas/DataJobDto.json +267 -0
  48. package/dist/resources/schemas/ExportRowsCommand.json +172 -0
  49. package/dist/resources/schemas/Filter.json +3 -1
  50. package/dist/resources/schemas/GetRowsQuery.json +3 -1
  51. package/dist/resources/schemas/GlobalFunctionDto.json +89 -0
  52. package/dist/resources/schemas/GlobalFunctionUpdateResultDto.json +249 -0
  53. package/dist/resources/schemas/ImportAnalysisDto.json +401 -0
  54. package/dist/resources/schemas/ImportPlanDto.json +260 -0
  55. package/dist/resources/schemas/ImportSampleDto.json +90 -0
  56. package/dist/resources/schemas/InvokeMicrofunctionCommand.json +25 -0
  57. package/dist/resources/schemas/PreviewMicroserviceCommand.json +119 -1
  58. package/dist/resources/schemas/PreviewWorkflowCommand.json +13 -2
  59. package/dist/resources/schemas/ResolveMergeConflictsCommand.json +58 -0
  60. package/dist/resources/schemas/RevertMergePlanCommand.json +19 -0
  61. package/dist/resources/schemas/RunImportCommand.json +62 -0
  62. package/dist/resources/schemas/StepDto.json +13 -2
  63. package/dist/resources/schemas/UpdateBulkRowCommand.json +3 -0
  64. package/dist/resources/schemas/UpdateEntityCommand.json +3 -1
  65. package/dist/resources/schemas/UpdateGlobalFunctionCommand.json +66 -0
  66. package/dist/resources/schemas/UpdateMicrofunctionCommand.json +121 -0
  67. package/dist/resources/schemas/UpdateMicrofunctionRuntimeCommand.json +54 -0
  68. package/dist/resources/schemas/UpdateMicroserviceCommand.json +119 -1
  69. package/dist/resources/schemas/UpdateWorkflowCommand.json +13 -2
  70. package/dist/server.js +15 -3
  71. package/dist/tools/activities.js +40 -0
  72. package/dist/tools/automations.js +14 -5
  73. package/dist/tools/common.js +16 -0
  74. package/dist/tools/dependencies.js +1 -1
  75. package/dist/tools/environments.js +52 -0
  76. package/dist/tools/files.js +51 -50
  77. package/dist/tools/flows.js +95 -2
  78. package/dist/tools/functions.js +331 -0
  79. package/dist/tools/importSchemas.js +79 -0
  80. package/dist/tools/imports.js +241 -0
  81. package/dist/tools/merges.js +113 -0
  82. package/dist/tools/microfunctions.js +155 -0
  83. package/dist/tools/microservices.js +42 -3
  84. package/dist/tools/pages.js +62 -10
  85. package/dist/tools/platformInfo.js +4 -1
  86. package/dist/tools/revisions.js +94 -0
  87. package/dist/tools/rows.js +342 -22
  88. package/dist/tools/screenWrite.js +11 -2
  89. package/dist/tools/templates.js +32 -5
  90. package/dist/tools/workflows.js +24 -6
  91. package/package.json +3 -1
@@ -0,0 +1,249 @@
1
+ {
2
+ "schema": {
3
+ "type": "object",
4
+ "properties": {
5
+ "function": {
6
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Studio.GlobalFunctions.GlobalFunctionDto"
7
+ },
8
+ "dependents": {
9
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Studio.GlobalFunctions.GlobalFunctionDependentsDto"
10
+ },
11
+ "signatureChanged": {
12
+ "type": "boolean"
13
+ },
14
+ "renamedReferences": {
15
+ "type": "integer",
16
+ "format": "int32"
17
+ }
18
+ },
19
+ "additionalProperties": false
20
+ },
21
+ "components": {
22
+ "schemas": {
23
+ "NgApps.Application.Contexts.Studio.GlobalFunctions.GlobalFunctionDto": {
24
+ "type": "object",
25
+ "properties": {
26
+ "id": {
27
+ "type": "string",
28
+ "format": "uuid"
29
+ },
30
+ "source": {
31
+ "type": "string",
32
+ "nullable": true
33
+ },
34
+ "applicationId": {
35
+ "type": "string",
36
+ "format": "uuid",
37
+ "nullable": true
38
+ },
39
+ "pageId": {
40
+ "type": "string",
41
+ "format": "uuid",
42
+ "nullable": true
43
+ },
44
+ "scope": {
45
+ "type": "string",
46
+ "nullable": true
47
+ },
48
+ "name": {
49
+ "type": "string",
50
+ "nullable": true
51
+ },
52
+ "description": {
53
+ "type": "string",
54
+ "nullable": true
55
+ },
56
+ "isAsync": {
57
+ "type": "boolean"
58
+ },
59
+ "parameters": {
60
+ "type": "array",
61
+ "items": {
62
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Studio.GlobalFunctions.GlobalFunctionParameterDto"
63
+ },
64
+ "nullable": true
65
+ },
66
+ "body": {
67
+ "type": "string",
68
+ "nullable": true
69
+ },
70
+ "createdAt": {
71
+ "type": "string",
72
+ "format": "date-time"
73
+ },
74
+ "updatedAt": {
75
+ "type": "string",
76
+ "format": "date-time",
77
+ "nullable": true
78
+ }
79
+ },
80
+ "additionalProperties": false
81
+ },
82
+ "NgApps.Application.Contexts.Studio.GlobalFunctions.GlobalFunctionDependentsDto": {
83
+ "type": "object",
84
+ "properties": {
85
+ "flows": {
86
+ "type": "array",
87
+ "items": {
88
+ "$ref": "#/components/schemas/NgApps.Domain.Contexts.Shared.Dependencies.DependencyNode"
89
+ },
90
+ "nullable": true
91
+ },
92
+ "workflows": {
93
+ "type": "array",
94
+ "items": {
95
+ "$ref": "#/components/schemas/NgApps.Domain.Contexts.Shared.Dependencies.DependencyNode"
96
+ },
97
+ "nullable": true
98
+ }
99
+ },
100
+ "additionalProperties": false
101
+ },
102
+ "NgApps.Application.Contexts.Studio.GlobalFunctions.GlobalFunctionParameterDto": {
103
+ "type": "object",
104
+ "properties": {
105
+ "name": {
106
+ "type": "string",
107
+ "nullable": true
108
+ },
109
+ "type": {
110
+ "type": "string",
111
+ "nullable": true
112
+ },
113
+ "required": {
114
+ "type": "boolean"
115
+ },
116
+ "defaultValue": {
117
+ "nullable": true
118
+ },
119
+ "description": {
120
+ "type": "string",
121
+ "nullable": true
122
+ }
123
+ },
124
+ "additionalProperties": false
125
+ },
126
+ "NgApps.Domain.Contexts.Shared.Dependencies.DependencyNode": {
127
+ "type": "object",
128
+ "properties": {
129
+ "id": {
130
+ "type": "string",
131
+ "format": "uuid"
132
+ },
133
+ "name": {
134
+ "type": "string",
135
+ "nullable": true
136
+ },
137
+ "slug": {
138
+ "type": "string",
139
+ "nullable": true
140
+ },
141
+ "module": {
142
+ "$ref": "#/components/schemas/NgApps.Domain.Shared.Module"
143
+ },
144
+ "isQueue": {
145
+ "type": "boolean",
146
+ "nullable": true
147
+ },
148
+ "componentSlug": {
149
+ "type": "string",
150
+ "nullable": true
151
+ },
152
+ "componentName": {
153
+ "type": "string",
154
+ "nullable": true
155
+ },
156
+ "eventName": {
157
+ "type": "string",
158
+ "nullable": true
159
+ },
160
+ "eventTitle": {
161
+ "type": "string",
162
+ "nullable": true
163
+ },
164
+ "hostModule": {
165
+ "$ref": "#/components/schemas/NgApps.Domain.Shared.Module"
166
+ },
167
+ "hostId": {
168
+ "type": "string",
169
+ "format": "uuid",
170
+ "nullable": true
171
+ },
172
+ "hostName": {
173
+ "type": "string",
174
+ "nullable": true
175
+ },
176
+ "applicationId": {
177
+ "type": "string",
178
+ "format": "uuid",
179
+ "nullable": true
180
+ },
181
+ "entityId": {
182
+ "type": "string",
183
+ "format": "uuid",
184
+ "nullable": true
185
+ },
186
+ "stepId": {
187
+ "type": "string",
188
+ "nullable": true
189
+ },
190
+ "stepKind": {
191
+ "$ref": "#/components/schemas/NgApps.Domain.Contexts.Studio.Flows.StepKind"
192
+ }
193
+ },
194
+ "additionalProperties": false
195
+ },
196
+ "NgApps.Domain.Shared.Module": {
197
+ "enum": [
198
+ "datasource",
199
+ "entity",
200
+ "field",
201
+ "entity-page-setting",
202
+ "entity-index",
203
+ "query",
204
+ "project",
205
+ "application",
206
+ "data_transfer_object",
207
+ "user",
208
+ "role",
209
+ "permission",
210
+ "middleware",
211
+ "file",
212
+ "folder",
213
+ "workflow",
214
+ "automation",
215
+ "component",
216
+ "flow",
217
+ "layout",
218
+ "microservice",
219
+ "microfunction",
220
+ "microfunction-runtime",
221
+ "page",
222
+ "row",
223
+ "template",
224
+ "organization",
225
+ "cache",
226
+ "data-job",
227
+ "environment",
228
+ "deployment",
229
+ "design-component",
230
+ "variable",
231
+ "global-function",
232
+ "view",
233
+ "enum-values",
234
+ "translation"
235
+ ],
236
+ "type": "string",
237
+ "format": ""
238
+ },
239
+ "NgApps.Domain.Contexts.Studio.Flows.StepKind": {
240
+ "enum": [
241
+ "normal",
242
+ "error"
243
+ ],
244
+ "type": "string",
245
+ "format": ""
246
+ }
247
+ }
248
+ }
249
+ }
@@ -0,0 +1,401 @@
1
+ {
2
+ "schema": {
3
+ "type": "object",
4
+ "properties": {
5
+ "fileId": {
6
+ "type": "string",
7
+ "format": "uuid"
8
+ },
9
+ "fileName": {
10
+ "type": "string",
11
+ "nullable": true
12
+ },
13
+ "format": {
14
+ "type": "string",
15
+ "nullable": true
16
+ },
17
+ "locale": {
18
+ "type": "string",
19
+ "nullable": true
20
+ },
21
+ "csv": {
22
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportCsvDto"
23
+ },
24
+ "sheets": {
25
+ "type": "array",
26
+ "items": {
27
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportSheetDto"
28
+ },
29
+ "nullable": true
30
+ },
31
+ "warnings": {
32
+ "type": "array",
33
+ "items": {
34
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportWarningDto"
35
+ },
36
+ "nullable": true
37
+ }
38
+ },
39
+ "additionalProperties": false
40
+ },
41
+ "components": {
42
+ "schemas": {
43
+ "NgApps.Application.Contexts.Datastore.Imports.ImportCsvDto": {
44
+ "type": "object",
45
+ "properties": {
46
+ "delimiter": {
47
+ "type": "string",
48
+ "nullable": true
49
+ },
50
+ "encoding": {
51
+ "type": "string",
52
+ "nullable": true
53
+ },
54
+ "detected": {
55
+ "type": "boolean"
56
+ }
57
+ },
58
+ "additionalProperties": false
59
+ },
60
+ "NgApps.Application.Contexts.Datastore.Imports.ImportSheetDto": {
61
+ "type": "object",
62
+ "properties": {
63
+ "key": {
64
+ "type": "string",
65
+ "nullable": true
66
+ },
67
+ "name": {
68
+ "type": "string",
69
+ "nullable": true
70
+ },
71
+ "rowCount": {
72
+ "type": "integer",
73
+ "format": "int32"
74
+ },
75
+ "columnCount": {
76
+ "type": "integer",
77
+ "format": "int32"
78
+ },
79
+ "headerRow": {
80
+ "type": "integer",
81
+ "format": "int32"
82
+ },
83
+ "suggestedTable": {
84
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportSuggestedTableDto"
85
+ },
86
+ "columns": {
87
+ "type": "array",
88
+ "items": {
89
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportColumnDto"
90
+ },
91
+ "nullable": true
92
+ },
93
+ "relationCandidates": {
94
+ "type": "array",
95
+ "items": {
96
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportRelationCandidateDto"
97
+ },
98
+ "nullable": true
99
+ },
100
+ "preview": {
101
+ "type": "array",
102
+ "items": {
103
+ "type": "array",
104
+ "items": {
105
+ "type": "string"
106
+ }
107
+ },
108
+ "nullable": true
109
+ }
110
+ },
111
+ "additionalProperties": false
112
+ },
113
+ "NgApps.Application.Contexts.Datastore.Imports.ImportWarningDto": {
114
+ "type": "object",
115
+ "properties": {
116
+ "code": {
117
+ "type": "string",
118
+ "nullable": true
119
+ },
120
+ "message": {
121
+ "type": "string",
122
+ "nullable": true
123
+ },
124
+ "sheetKey": {
125
+ "type": "string",
126
+ "nullable": true
127
+ },
128
+ "column": {
129
+ "type": "string",
130
+ "nullable": true
131
+ }
132
+ },
133
+ "additionalProperties": false
134
+ },
135
+ "NgApps.Application.Contexts.Datastore.Imports.ImportSuggestedTableDto": {
136
+ "type": "object",
137
+ "properties": {
138
+ "name": {
139
+ "type": "string",
140
+ "nullable": true
141
+ },
142
+ "slug": {
143
+ "type": "string",
144
+ "nullable": true
145
+ },
146
+ "existingEntityId": {
147
+ "type": "string",
148
+ "format": "uuid",
149
+ "nullable": true
150
+ },
151
+ "existingMatchScore": {
152
+ "type": "number",
153
+ "format": "double"
154
+ }
155
+ },
156
+ "additionalProperties": false
157
+ },
158
+ "NgApps.Application.Contexts.Datastore.Imports.ImportColumnDto": {
159
+ "type": "object",
160
+ "properties": {
161
+ "index": {
162
+ "type": "integer",
163
+ "format": "int32"
164
+ },
165
+ "header": {
166
+ "type": "string",
167
+ "nullable": true
168
+ },
169
+ "slug": {
170
+ "type": "string",
171
+ "nullable": true
172
+ },
173
+ "samples": {
174
+ "type": "array",
175
+ "items": {
176
+ "type": "string"
177
+ },
178
+ "nullable": true
179
+ },
180
+ "inferred": {
181
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportInferredTypeDto"
182
+ },
183
+ "candidates": {
184
+ "type": "array",
185
+ "items": {
186
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportTypeCandidateDto"
187
+ },
188
+ "nullable": true
189
+ },
190
+ "flags": {
191
+ "type": "array",
192
+ "items": {
193
+ "type": "string"
194
+ },
195
+ "nullable": true
196
+ },
197
+ "unconvertibleSamples": {
198
+ "type": "array",
199
+ "items": {
200
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportUnconvertibleSampleDto"
201
+ },
202
+ "nullable": true
203
+ }
204
+ },
205
+ "additionalProperties": false
206
+ },
207
+ "NgApps.Application.Contexts.Datastore.Imports.ImportRelationCandidateDto": {
208
+ "type": "object",
209
+ "properties": {
210
+ "id": {
211
+ "type": "string",
212
+ "nullable": true
213
+ },
214
+ "kind": {
215
+ "type": "string",
216
+ "nullable": true
217
+ },
218
+ "sourceColumns": {
219
+ "type": "array",
220
+ "items": {
221
+ "type": "string"
222
+ },
223
+ "nullable": true
224
+ },
225
+ "distinctCount": {
226
+ "type": "integer",
227
+ "format": "int32"
228
+ },
229
+ "coverage": {
230
+ "type": "number",
231
+ "format": "double"
232
+ },
233
+ "target": {
234
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportRelationTargetDto"
235
+ },
236
+ "delimiter": {
237
+ "type": "string",
238
+ "nullable": true
239
+ },
240
+ "parentColumn": {
241
+ "type": "string",
242
+ "nullable": true
243
+ },
244
+ "fdViolations": {
245
+ "type": "integer",
246
+ "format": "int32"
247
+ },
248
+ "options": {
249
+ "type": "array",
250
+ "items": {
251
+ "type": "string"
252
+ },
253
+ "nullable": true
254
+ },
255
+ "recommended": {
256
+ "type": "string",
257
+ "nullable": true
258
+ },
259
+ "parentCandidates": {
260
+ "type": "array",
261
+ "items": {
262
+ "$ref": "#/components/schemas/NgApps.Application.Contexts.Datastore.Imports.ImportRelationParentOptionDto"
263
+ },
264
+ "nullable": true
265
+ }
266
+ },
267
+ "additionalProperties": false
268
+ },
269
+ "NgApps.Application.Contexts.Datastore.Imports.ImportInferredTypeDto": {
270
+ "type": "object",
271
+ "properties": {
272
+ "commonType": {
273
+ "$ref": "#/components/schemas/NgApps.Domain.Contexts.Datastore.Entities.CommonFieldType"
274
+ },
275
+ "dbType": {
276
+ "type": "string",
277
+ "nullable": true
278
+ },
279
+ "confidence": {
280
+ "type": "number",
281
+ "format": "double"
282
+ },
283
+ "convertible": {
284
+ "type": "integer",
285
+ "format": "int32"
286
+ },
287
+ "unconvertible": {
288
+ "type": "integer",
289
+ "format": "int32"
290
+ },
291
+ "nullable": {
292
+ "type": "boolean"
293
+ },
294
+ "unique": {
295
+ "type": "boolean"
296
+ },
297
+ "maxLength": {
298
+ "type": "integer",
299
+ "format": "int32"
300
+ }
301
+ },
302
+ "additionalProperties": false
303
+ },
304
+ "NgApps.Application.Contexts.Datastore.Imports.ImportTypeCandidateDto": {
305
+ "type": "object",
306
+ "properties": {
307
+ "commonType": {
308
+ "$ref": "#/components/schemas/NgApps.Domain.Contexts.Datastore.Entities.CommonFieldType"
309
+ },
310
+ "dbType": {
311
+ "type": "string",
312
+ "nullable": true
313
+ }
314
+ },
315
+ "additionalProperties": false
316
+ },
317
+ "NgApps.Application.Contexts.Datastore.Imports.ImportUnconvertibleSampleDto": {
318
+ "type": "object",
319
+ "properties": {
320
+ "row": {
321
+ "type": "integer",
322
+ "format": "int32"
323
+ },
324
+ "value": {
325
+ "type": "string",
326
+ "nullable": true
327
+ }
328
+ },
329
+ "additionalProperties": false
330
+ },
331
+ "NgApps.Application.Contexts.Datastore.Imports.ImportRelationTargetDto": {
332
+ "type": "object",
333
+ "properties": {
334
+ "existingEntityId": {
335
+ "type": "string",
336
+ "format": "uuid",
337
+ "nullable": true
338
+ },
339
+ "existingMatchRate": {
340
+ "type": "number",
341
+ "format": "double"
342
+ },
343
+ "matchField": {
344
+ "type": "string",
345
+ "nullable": true
346
+ },
347
+ "newTableName": {
348
+ "type": "string",
349
+ "nullable": true
350
+ },
351
+ "sheetKey": {
352
+ "type": "string",
353
+ "nullable": true
354
+ }
355
+ },
356
+ "additionalProperties": false
357
+ },
358
+ "NgApps.Application.Contexts.Datastore.Imports.ImportRelationParentOptionDto": {
359
+ "type": "object",
360
+ "properties": {
361
+ "column": {
362
+ "type": "string",
363
+ "nullable": true
364
+ },
365
+ "distinctCount": {
366
+ "type": "integer",
367
+ "format": "int32"
368
+ },
369
+ "nameViolations": {
370
+ "type": "integer",
371
+ "format": "int32"
372
+ },
373
+ "functionalDependency": {
374
+ "type": "boolean"
375
+ }
376
+ },
377
+ "additionalProperties": false
378
+ },
379
+ "NgApps.Domain.Contexts.Datastore.Entities.CommonFieldType": {
380
+ "enum": [
381
+ "text",
382
+ "number",
383
+ "bool",
384
+ "date",
385
+ "time",
386
+ "datetime",
387
+ "guid",
388
+ "float",
389
+ "relation",
390
+ "custom",
391
+ "object",
392
+ "array",
393
+ "file",
394
+ "incremental"
395
+ ],
396
+ "type": "string",
397
+ "format": ""
398
+ }
399
+ }
400
+ }
401
+ }