@tiwater/office-mcp 0.14.2 → 0.15.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.
Files changed (90) hide show
  1. package/office/README.md +10 -10
  2. package/office/contracts/docx_apply_font_policy.schema.json +73 -0
  3. package/office/contracts/docx_apply_toc_style_policy.schema.json +49 -0
  4. package/office/contracts/docx_collapse_trailing_empty_paragraphs.schema.json +26 -0
  5. package/office/contracts/docx_collapse_trailing_empty_section.schema.json +26 -0
  6. package/office/contracts/docx_compare.schema.json +19 -0
  7. package/office/contracts/docx_copy_table_range.schema.json +111 -0
  8. package/office/contracts/docx_delete_body_drawing_before_paragraph.schema.json +50 -0
  9. package/office/contracts/docx_delete_body_paragraph.schema.json +50 -0
  10. package/office/contracts/docx_delete_body_range.schema.json +65 -0
  11. package/office/contracts/docx_delete_comments.schema.json +48 -0
  12. package/office/contracts/docx_delete_table_rows.schema.json +57 -0
  13. package/office/contracts/docx_export_json.schema.json +20 -0
  14. package/office/contracts/docx_find_literal.schema.json +46 -0
  15. package/office/contracts/docx_freeze_fields.schema.json +26 -0
  16. package/office/contracts/docx_insert_body_image.schema.json +65 -0
  17. package/office/contracts/docx_insert_body_range.schema.json +62 -0
  18. package/office/contracts/docx_insert_table_columns.schema.json +61 -0
  19. package/office/contracts/docx_insert_table_rows.schema.json +130 -0
  20. package/office/contracts/docx_inspect.schema.json +20 -0
  21. package/office/contracts/docx_inspect_tables.schema.json +20 -0
  22. package/office/contracts/docx_list_objects.schema.json +42 -0
  23. package/office/contracts/docx_mark_fields_dirty.schema.json +26 -0
  24. package/office/contracts/docx_merge_table_cells.schema.json +80 -0
  25. package/office/contracts/docx_read_object.schema.json +24 -0
  26. package/office/contracts/docx_replace_body_text.schema.json +48 -0
  27. package/office/contracts/docx_replace_drawing_image.schema.json +56 -0
  28. package/office/contracts/docx_replace_header_text.schema.json +48 -0
  29. package/office/contracts/docx_replace_style_ids.schema.json +29 -0
  30. package/office/contracts/docx_replace_table_rows.schema.json +136 -0
  31. package/office/contracts/docx_sanitize_fields.schema.json +26 -0
  32. package/office/contracts/docx_set_anchored_text.schema.json +48 -0
  33. package/office/contracts/docx_set_body_paragraph_keep_lines.schema.json +49 -0
  34. package/office/contracts/docx_set_body_paragraph_keep_next.schema.json +49 -0
  35. package/office/contracts/docx_set_footer_paragraph_text.schema.json +55 -0
  36. package/office/contracts/docx_set_footer_run_text.schema.json +61 -0
  37. package/office/contracts/docx_set_footer_table_cell_run_text.schema.json +79 -0
  38. package/office/contracts/docx_set_footer_table_cell_text.schema.json +67 -0
  39. package/office/contracts/docx_set_header_paragraph_font_size.schema.json +56 -0
  40. package/office/contracts/docx_set_header_paragraph_text.schema.json +55 -0
  41. package/office/contracts/docx_set_header_run_text.schema.json +61 -0
  42. package/office/contracts/docx_set_header_table_cell_run_text.schema.json +79 -0
  43. package/office/contracts/docx_set_header_table_cell_text.schema.json +67 -0
  44. package/office/contracts/docx_set_paragraph_run_text.schema.json +55 -0
  45. package/office/contracts/docx_set_paragraph_text.schema.json +49 -0
  46. package/office/contracts/docx_set_table_cell_alignment.schema.json +62 -0
  47. package/office/contracts/docx_set_table_cell_font_size.schema.json +62 -0
  48. package/office/contracts/docx_set_table_cell_no_wrap.schema.json +61 -0
  49. package/office/contracts/docx_set_table_cell_rich_text.schema.json +96 -0
  50. package/office/contracts/docx_set_table_cell_run_text.schema.json +73 -0
  51. package/office/contracts/docx_set_table_cell_text.schema.json +64 -0
  52. package/office/contracts/docx_set_table_row_cant_split.schema.json +55 -0
  53. package/office/contracts/docx_set_table_row_height.schema.json +59 -0
  54. package/office/contracts/docx_set_table_row_keep_next.schema.json +55 -0
  55. package/office/contracts/docx_set_table_row_repeat_as_header.schema.json +119 -0
  56. package/office/contracts/docx_set_table_width.schema.json +60 -0
  57. package/office/contracts/docx_start_section.schema.json +52 -0
  58. package/office/contracts/docx_strip_direct_formatting.schema.json +19 -0
  59. package/office/contracts/docx_unmerge_table_column_cells.schema.json +63 -0
  60. package/office/contracts/docx_unmerge_table_row_cells.schema.json +57 -0
  61. package/office/contracts/docx_validate.schema.json +14 -0
  62. package/office/contracts/docx_validate_font_policy.schema.json +48 -0
  63. package/office/contracts/docx_validate_toc_style_policy.schema.json +24 -0
  64. package/office/contracts/office_render_pdf.schema.json +27 -0
  65. package/office/contracts/pptx_apply_format.schema.json +74 -0
  66. package/office/contracts/pptx_apply_template.schema.json +111 -0
  67. package/office/contracts/pptx_export_json.schema.json +20 -0
  68. package/office/contracts/pptx_inspect.schema.json +20 -0
  69. package/office/contracts/pptx_replace_picture_image.schema.json +57 -0
  70. package/office/contracts/pptx_set_shape_geometry.schema.json +76 -0
  71. package/office/contracts/pptx_validate.schema.json +14 -0
  72. package/office/contracts/tiwater-office-provider-contract-manifest-v1.json +955 -0
  73. package/office/contracts/xlsx_convert_legacy.schema.json +24 -0
  74. package/office/contracts/xlsx_copy_row.schema.json +59 -0
  75. package/office/contracts/xlsx_delete_rows.schema.json +56 -0
  76. package/office/contracts/xlsx_expand_section_rows.schema.json +70 -0
  77. package/office/contracts/xlsx_export_json.schema.json +24 -0
  78. package/office/contracts/xlsx_insert_rows.schema.json +62 -0
  79. package/office/contracts/xlsx_inspect.schema.json +20 -0
  80. package/office/contracts/xlsx_set_cell_number_format.schema.json +54 -0
  81. package/office/contracts/xlsx_set_cell_value.schema.json +78 -0
  82. package/office/contracts/xlsx_set_column_width.schema.json +55 -0
  83. package/office/contracts/xlsx_set_page_setup.schema.json +90 -0
  84. package/office/contracts/xlsx_set_print_area.schema.json +49 -0
  85. package/office/contracts/xlsx_set_range_values.schema.json +75 -0
  86. package/office/contracts/xlsx_set_rich_text_cell_value.schema.json +57 -0
  87. package/office/contracts/xlsx_set_row_page_breaks.schema.json +53 -0
  88. package/office/contracts/xlsx_validate.schema.json +14 -0
  89. package/office/index.mjs +188 -493
  90. package/package.json +2 -7
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1
12
+ },
13
+ "receiptOutput": {
14
+ "type": "string",
15
+ "minLength": 1
16
+ }
17
+ },
18
+ "required": [
19
+ "input",
20
+ "output",
21
+ "receiptOutput"
22
+ ],
23
+ "additionalProperties": false
24
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New document output path. Existing files are never overwritten."
13
+ },
14
+ "receiptOutput": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "New JSON receipt path. Existing files are never overwritten."
18
+ },
19
+ "changes": {
20
+ "minItems": 1,
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "properties": {
25
+ "sheet": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "sourceRow": {
30
+ "type": "integer",
31
+ "exclusiveMinimum": 0,
32
+ "maximum": 9007199254740991
33
+ },
34
+ "targetRow": {
35
+ "type": "integer",
36
+ "exclusiveMinimum": 0,
37
+ "maximum": 9007199254740991
38
+ },
39
+ "translateFormulas": {
40
+ "type": "boolean"
41
+ }
42
+ },
43
+ "required": [
44
+ "sheet",
45
+ "sourceRow",
46
+ "targetRow"
47
+ ],
48
+ "additionalProperties": false
49
+ }
50
+ }
51
+ },
52
+ "required": [
53
+ "input",
54
+ "output",
55
+ "receiptOutput",
56
+ "changes"
57
+ ],
58
+ "additionalProperties": false
59
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New document output path. Existing files are never overwritten."
13
+ },
14
+ "receiptOutput": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "New JSON receipt path. Existing files are never overwritten."
18
+ },
19
+ "changes": {
20
+ "minItems": 1,
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "properties": {
25
+ "sheet": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "startRow": {
30
+ "type": "integer",
31
+ "exclusiveMinimum": 0,
32
+ "maximum": 9007199254740991
33
+ },
34
+ "count": {
35
+ "type": "integer",
36
+ "exclusiveMinimum": 0,
37
+ "maximum": 9007199254740991
38
+ }
39
+ },
40
+ "required": [
41
+ "sheet",
42
+ "startRow",
43
+ "count"
44
+ ],
45
+ "additionalProperties": false
46
+ }
47
+ }
48
+ },
49
+ "required": [
50
+ "input",
51
+ "output",
52
+ "receiptOutput",
53
+ "changes"
54
+ ],
55
+ "additionalProperties": false
56
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New document output path. Existing files are never overwritten."
13
+ },
14
+ "receiptOutput": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "New JSON receipt path. Existing files are never overwritten."
18
+ },
19
+ "changes": {
20
+ "minItems": 1,
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "properties": {
25
+ "sheet": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "anchorText": {
30
+ "type": "string",
31
+ "minLength": 1
32
+ },
33
+ "exampleRows": {
34
+ "type": "integer",
35
+ "exclusiveMinimum": 0,
36
+ "maximum": 9007199254740991
37
+ },
38
+ "targetRows": {
39
+ "type": "integer",
40
+ "exclusiveMinimum": 0,
41
+ "maximum": 9007199254740991
42
+ },
43
+ "preserveStyle": {
44
+ "type": "boolean"
45
+ },
46
+ "preserveFormulas": {
47
+ "type": "boolean"
48
+ },
49
+ "preserveMergedRanges": {
50
+ "type": "boolean"
51
+ }
52
+ },
53
+ "required": [
54
+ "sheet",
55
+ "anchorText",
56
+ "exampleRows",
57
+ "targetRows"
58
+ ],
59
+ "additionalProperties": false
60
+ }
61
+ }
62
+ },
63
+ "required": [
64
+ "input",
65
+ "output",
66
+ "receiptOutput",
67
+ "changes"
68
+ ],
69
+ "additionalProperties": false
70
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New JSON artifact path. Existing files are never overwritten."
13
+ },
14
+ "resolveMergedCells": {
15
+ "description": "Resolve merged cells to project values.",
16
+ "type": "boolean"
17
+ }
18
+ },
19
+ "required": [
20
+ "input",
21
+ "output"
22
+ ],
23
+ "additionalProperties": false
24
+ }
@@ -0,0 +1,62 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New document output path. Existing files are never overwritten."
13
+ },
14
+ "receiptOutput": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "New JSON receipt path. Existing files are never overwritten."
18
+ },
19
+ "changes": {
20
+ "minItems": 1,
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "properties": {
25
+ "sheet": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "startRow": {
30
+ "type": "integer",
31
+ "exclusiveMinimum": 0,
32
+ "maximum": 9007199254740991
33
+ },
34
+ "count": {
35
+ "type": "integer",
36
+ "exclusiveMinimum": 0,
37
+ "maximum": 9007199254740991
38
+ },
39
+ "preserveHorizontalMergedRanges": {
40
+ "type": "boolean"
41
+ },
42
+ "expandAdjacentVerticalMergedRanges": {
43
+ "type": "boolean"
44
+ }
45
+ },
46
+ "required": [
47
+ "sheet",
48
+ "startRow",
49
+ "count"
50
+ ],
51
+ "additionalProperties": false
52
+ }
53
+ }
54
+ },
55
+ "required": [
56
+ "input",
57
+ "output",
58
+ "receiptOutput",
59
+ "changes"
60
+ ],
61
+ "additionalProperties": false
62
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New JSON artifact path. Existing files are never overwritten."
13
+ }
14
+ },
15
+ "required": [
16
+ "input",
17
+ "output"
18
+ ],
19
+ "additionalProperties": false
20
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New document output path. Existing files are never overwritten."
13
+ },
14
+ "receiptOutput": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "New JSON receipt path. Existing files are never overwritten."
18
+ },
19
+ "changes": {
20
+ "minItems": 1,
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "properties": {
25
+ "sheet": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "cell": {
30
+ "type": "string",
31
+ "minLength": 1
32
+ },
33
+ "numberFormat": {
34
+ "type": "string",
35
+ "minLength": 1
36
+ }
37
+ },
38
+ "required": [
39
+ "sheet",
40
+ "cell",
41
+ "numberFormat"
42
+ ],
43
+ "additionalProperties": false
44
+ }
45
+ }
46
+ },
47
+ "required": [
48
+ "input",
49
+ "output",
50
+ "receiptOutput",
51
+ "changes"
52
+ ],
53
+ "additionalProperties": false
54
+ }
@@ -0,0 +1,78 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New document output path. Existing files are never overwritten."
13
+ },
14
+ "receiptOutput": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "New JSON receipt path. Existing files are never overwritten."
18
+ },
19
+ "changes": {
20
+ "minItems": 1,
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "properties": {
25
+ "sheet": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "cell": {
30
+ "type": "string",
31
+ "minLength": 1
32
+ },
33
+ "value": {
34
+ "anyOf": [
35
+ {
36
+ "type": "string"
37
+ },
38
+ {
39
+ "type": "number"
40
+ },
41
+ {
42
+ "type": "boolean"
43
+ },
44
+ {
45
+ "type": "null"
46
+ }
47
+ ]
48
+ },
49
+ "valueType": {
50
+ "type": "string"
51
+ },
52
+ "bold": {
53
+ "type": "boolean"
54
+ },
55
+ "shrinkToFit": {
56
+ "type": "boolean"
57
+ },
58
+ "wrapText": {
59
+ "type": "boolean"
60
+ }
61
+ },
62
+ "required": [
63
+ "sheet",
64
+ "cell",
65
+ "value"
66
+ ],
67
+ "additionalProperties": false
68
+ }
69
+ }
70
+ },
71
+ "required": [
72
+ "input",
73
+ "output",
74
+ "receiptOutput",
75
+ "changes"
76
+ ],
77
+ "additionalProperties": false
78
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New document output path. Existing files are never overwritten."
13
+ },
14
+ "receiptOutput": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "New JSON receipt path. Existing files are never overwritten."
18
+ },
19
+ "changes": {
20
+ "minItems": 1,
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "properties": {
25
+ "sheet": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "column": {
30
+ "type": "string",
31
+ "minLength": 1
32
+ },
33
+ "width": {
34
+ "type": "number",
35
+ "exclusiveMinimum": 0,
36
+ "maximum": 255
37
+ }
38
+ },
39
+ "required": [
40
+ "sheet",
41
+ "column",
42
+ "width"
43
+ ],
44
+ "additionalProperties": false
45
+ }
46
+ }
47
+ },
48
+ "required": [
49
+ "input",
50
+ "output",
51
+ "receiptOutput",
52
+ "changes"
53
+ ],
54
+ "additionalProperties": false
55
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New document output path. Existing files are never overwritten."
13
+ },
14
+ "receiptOutput": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "New JSON receipt path. Existing files are never overwritten."
18
+ },
19
+ "changes": {
20
+ "minItems": 1,
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "properties": {
25
+ "sheet": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "fitToPagesWide": {
30
+ "type": "integer",
31
+ "exclusiveMinimum": 0,
32
+ "maximum": 9007199254740991
33
+ },
34
+ "fitToPagesTall": {
35
+ "type": "integer",
36
+ "exclusiveMinimum": 0,
37
+ "maximum": 9007199254740991
38
+ },
39
+ "orientation": {
40
+ "type": "string",
41
+ "enum": [
42
+ "portrait",
43
+ "landscape"
44
+ ]
45
+ },
46
+ "paperSize": {
47
+ "type": "string",
48
+ "enum": [
49
+ "letter",
50
+ "legal",
51
+ "a3",
52
+ "a4"
53
+ ]
54
+ },
55
+ "repeatRowsStart": {
56
+ "type": "integer",
57
+ "exclusiveMinimum": 0,
58
+ "maximum": 9007199254740991
59
+ },
60
+ "repeatRowsEnd": {
61
+ "type": "integer",
62
+ "exclusiveMinimum": 0,
63
+ "maximum": 9007199254740991
64
+ },
65
+ "repeatColsStart": {
66
+ "type": "integer",
67
+ "exclusiveMinimum": 0,
68
+ "maximum": 9007199254740991
69
+ },
70
+ "repeatColsEnd": {
71
+ "type": "integer",
72
+ "exclusiveMinimum": 0,
73
+ "maximum": 9007199254740991
74
+ }
75
+ },
76
+ "required": [
77
+ "sheet"
78
+ ],
79
+ "additionalProperties": false
80
+ }
81
+ }
82
+ },
83
+ "required": [
84
+ "input",
85
+ "output",
86
+ "receiptOutput",
87
+ "changes"
88
+ ],
89
+ "additionalProperties": false
90
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "input": {
6
+ "type": "string",
7
+ "minLength": 1
8
+ },
9
+ "output": {
10
+ "type": "string",
11
+ "minLength": 1,
12
+ "description": "New document output path. Existing files are never overwritten."
13
+ },
14
+ "receiptOutput": {
15
+ "type": "string",
16
+ "minLength": 1,
17
+ "description": "New JSON receipt path. Existing files are never overwritten."
18
+ },
19
+ "changes": {
20
+ "minItems": 1,
21
+ "type": "array",
22
+ "items": {
23
+ "type": "object",
24
+ "properties": {
25
+ "sheet": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "range": {
30
+ "type": "string",
31
+ "minLength": 1
32
+ }
33
+ },
34
+ "required": [
35
+ "sheet",
36
+ "range"
37
+ ],
38
+ "additionalProperties": false
39
+ }
40
+ }
41
+ },
42
+ "required": [
43
+ "input",
44
+ "output",
45
+ "receiptOutput",
46
+ "changes"
47
+ ],
48
+ "additionalProperties": false
49
+ }