Xenova's picture
Xenova HF Staff
sync 2e7068faf55e
a0b9936 verified
Raw
History Blame
22.3 kB
{
"op": "ai.onnx.TensorScatter",
"fixtureArrays": {
"ort_linear_4d_spec_example_input_past": [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 4, 3, 2, 1, 0],
"ort_linear_3d_default_axis_input_past": [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 5, 4, 3, 2, 1],
"ort_linear_3d_default_axis_input_update": [4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
"ort_circular_4d_wrap_second_batch_input_update": [5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
},
"cases": [
{
"name": "dispatch_cliff_no_write_indices",
"attrs": { "mode": "linear" },
"inputs": {
"past": { "dtype": "float32", "shape": [1, 1, 65537, 256], "data": { "kind": "constant", "value": 0.0 } },
"update": {
"dtype": "float32",
"shape": [1, 1, 65537, 256],
"data": { "kind": "cycle", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] }
}
},
"outputs": { "present": { "dtype": "float32", "shape": [1, 1, 65537, 256], "tolerance": 0 } }
},
{
"name": "ort_linear_4d_spec_example",
"provenance": {
"source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc",
"test": "TensorScatterTest.Linear_4D"
},
"attrs": { "mode": "linear" },
"inputs": {
"past": {
"dtype": "float32",
"shape": [2, 1, 4, 5],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_4d_spec_example_input_past" } }
},
"update": {
"dtype": "float32",
"shape": [2, 1, 1, 5],
"data": { "kind": "values", "values": [5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, 1.0, 1.0] }
},
"writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [1, 2] } }
},
"outputs": { "present": { "dtype": "float32", "shape": [2, 1, 4, 5], "tolerance": 0.000001 } }
},
{
"name": "decode_kv_update_f32_axis_minus2_compact",
"provenance": {
"notes": "Compact sibling for the decode-style TensorScatter benchmark; preserves axis=-2, per-batch write indices, full-cache copy, and one-token update rows."
},
"attrs": { "mode": "linear", "axis": -2 },
"inputs": {
"past": {
"dtype": "float32",
"shape": [4, 2, 128, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.017, "scale": 0.5 }
},
"update": {
"dtype": "float32",
"shape": [4, 2, 1, 64],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.029, "scale": 0.5 }
},
"writeIndices": { "dtype": "uint32", "shape": [4], "data": { "kind": "values", "values": [3, 17, 64, 127] } }
},
"outputs": { "present": { "dtype": "float32", "shape": [4, 2, 128, 64], "tolerance": 0.000001 } }
},
{
"name": "ort_linear_3d_default_axis",
"provenance": {
"source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc",
"test": "TensorScatterTest.Linear_3D"
},
"inputs": {
"past": {
"dtype": "float32",
"shape": [3, 4, 5],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_3d_default_axis_input_past" } }
},
"update": {
"dtype": "float32",
"shape": [3, 2, 5],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_3d_default_axis_input_update" } }
},
"writeIndices": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [1, 2, 0] } }
},
"outputs": { "present": { "dtype": "float32", "shape": [3, 4, 5], "tolerance": 0.000001 } }
},
{
"name": "ort_circular_4d_wrap_second_batch",
"provenance": {
"source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc",
"test": "TensorScatterTest.Circular_4D"
},
"attrs": { "mode": "circular" },
"inputs": {
"past": {
"dtype": "float32",
"shape": [2, 1, 4, 5],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_4d_spec_example_input_past" } }
},
"update": {
"dtype": "float32",
"shape": [2, 1, 2, 5],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_circular_4d_wrap_second_batch_input_update" }
}
},
"writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [1, 3] } }
},
"outputs": { "present": { "dtype": "float32", "shape": [2, 1, 4, 5], "tolerance": 0.000001 } }
},
{
"name": "ort_linear_no_write_indices_defaults_zero",
"provenance": {
"source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc",
"test": "TensorScatterTest.Linear_NoWriteIndices"
},
"attrs": { "mode": "linear" },
"inputs": {
"past": { "dtype": "float32", "shape": [1, 1, 4, 3], "data": { "kind": "constant", "value": 0.0 } },
"update": {
"dtype": "float32",
"shape": [1, 1, 2, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
}
},
"outputs": { "present": { "dtype": "float32", "shape": [1, 1, 4, 3], "tolerance": 0.000001 } }
},
{
"name": "linear_zero_length_update_is_copy",
"provenance": {
"source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc",
"test": "TensorScatterTest.Linear_NoWriteIndices",
"notes": "Valid zero-length update along the cache axis: scatter has no elements and the output should be an exact copy of past_cache."
},
"attrs": { "mode": "linear" },
"inputs": {
"past": {
"dtype": "float32",
"shape": [1, 4, 2],
"data": { "kind": "values", "values": [10.0, 11.0, 20.0, 21.0, 30.0, 31.0, 40.0, 41.0] }
},
"update": { "dtype": "float32", "shape": [1, 0, 2], "data": { "kind": "values", "values": [] } }
},
"outputs": {
"present": {
"dtype": "float32",
"shape": [1, 4, 2],
"tolerance": 0,
"data": { "kind": "values", "values": [10.0, 11.0, 20.0, 21.0, 30.0, 31.0, 40.0, 41.0] }
}
}
},
{
"name": "ort_linear_float16_default_axis",
"provenance": {
"source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc",
"test": "TensorScatterTest.Linear_Float16"
},
"attrs": { "mode": "linear" },
"inputs": {
"past": {
"dtype": "float16",
"shape": [1, 4, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0] }
},
"update": { "dtype": "float16", "shape": [1, 1, 3], "data": { "kind": "values", "values": [99.0, 98.0, 97.0] } },
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } }
},
"outputs": { "present": { "dtype": "float16", "shape": [1, 4, 3], "tolerance": 0.001 } }
},
{
"name": "ort_linear_explicit_axis1_batch_indices",
"provenance": {
"source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc",
"test": "TensorScatterTest.Linear_ExplicitAxis"
},
"attrs": { "mode": "linear", "axis": 1 },
"inputs": {
"past": { "dtype": "float32", "shape": [2, 3, 2], "data": { "kind": "constant", "value": 0.0 } },
"update": {
"dtype": "float32",
"shape": [2, 1, 2],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0] }
},
"writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [0, 2] } }
},
"outputs": { "present": { "dtype": "float32", "shape": [2, 3, 2], "tolerance": 0.000001 } }
},
{
"name": "ort_circular_wraparound_rank3",
"provenance": {
"source": "onnxruntime/test/providers/cpu/llm/tensorscatter_op_test.cc",
"test": "TensorScatterTest.Circular_WrapAround"
},
"attrs": { "mode": "circular" },
"inputs": {
"past": {
"dtype": "float32",
"shape": [1, 4, 2],
"data": { "kind": "values", "values": [10.0, 11.0, 20.0, 21.0, 30.0, 31.0, 40.0, 41.0] }
},
"update": {
"dtype": "float32",
"shape": [1, 3, 2],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
},
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [2] } }
},
"outputs": { "present": { "dtype": "float32", "shape": [1, 4, 2], "tolerance": 0.000001 } }
},
{
"name": "onnx_backend_tensorscatter",
"provenance": { "source": "cmake/external/onnx/onnx/backend/test/data/node/test_tensorscatter" },
"attrs": { "mode": "linear" },
"inputs": {
"past": {
"dtype": "float32",
"shape": [2, 1, 4, 5],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_4d_spec_example_input_past" } }
},
"update": {
"dtype": "float32",
"shape": [2, 1, 1, 5],
"data": { "kind": "values", "values": [5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, 1.0, 1.0] }
},
"writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [1, 2] } }
},
"outputs": {
"present": {
"dtype": "float32",
"shape": [2, 1, 4, 5],
"tolerance": 0.000001,
"data": {
"kind": "values",
"values": [1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 8.0, 7.0, 6.0, 5.0, 4.0, 4.0, 3.0, 2.0, 1.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 6.0, 7.0, 8.0, 9.0, 1.0, 1.0, 1.0, 1.0, 1.0, 4.0, 3.0, 2.0, 1.0, 0.0]
}
}
}
},
{
"name": "onnx_backend_tensorscatter_3d",
"provenance": { "source": "cmake/external/onnx/onnx/backend/test/data/node/test_tensorscatter_3d" },
"inputs": {
"past": {
"dtype": "float32",
"shape": [3, 4, 5],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_3d_default_axis_input_past" } }
},
"update": {
"dtype": "float32",
"shape": [3, 2, 5],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_3d_default_axis_input_update" } }
},
"writeIndices": { "dtype": "uint32", "shape": [3], "data": { "kind": "values", "values": [1, 2, 0] } }
},
"outputs": {
"present": {
"dtype": "float32",
"shape": [3, 4, 5],
"tolerance": 0.000001,
"data": {
"kind": "values",
"values": [1.0, 2.0, 3.0, 4.0, 5.0, 4.0, 4.0, 4.0, 4.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 4.0, 3.0, 2.0, 1.0, 1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 6.0, 7.0, 8.0, 9.0, 6.0, 6.0, 6.0, 6.0, 6.0, 7.0, 7.0, 7.0, 7.0, 7.0, 2.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 3.0, 8.0, 7.0, 6.0, 5.0, 4.0, 5.0, 4.0, 3.0, 2.0, 1.0]
}
}
}
},
{
"name": "onnx_backend_tensorscatter_circular",
"provenance": { "source": "cmake/external/onnx/onnx/backend/test/data/node/test_tensorscatter_circular" },
"attrs": { "mode": "circular" },
"inputs": {
"past": {
"dtype": "float32",
"shape": [2, 1, 4, 5],
"data": { "kind": "values", "values": { "$ref": "#/fixtureArrays/ort_linear_4d_spec_example_input_past" } }
},
"update": {
"dtype": "float32",
"shape": [2, 1, 2, 5],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_circular_4d_wrap_second_batch_input_update" }
}
},
"writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [1, 3] } }
},
"outputs": {
"present": {
"dtype": "float32",
"shape": [2, 1, 4, 5],
"tolerance": 0.000001,
"data": {
"kind": "values",
"values": [1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 6.0, 6.0, 6.0, 6.0, 6.0, 4.0, 3.0, 2.0, 1.0, 0.0, 2.0, 2.0, 2.0, 2.0, 2.0, 5.0, 6.0, 7.0, 8.0, 9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 1.0, 1.0, 1.0, 1.0, 1.0]
}
}
}
},
{
"name": "empty_input_zero_dim",
"attrs": { "mode": "linear" },
"inputs": {
"past": { "dtype": "float32", "shape": [0, 1, 4, 5], "data": { "kind": "values", "values": [] } },
"update": { "dtype": "float32", "shape": [0, 1, 1, 5], "data": { "kind": "values", "values": [] } },
"writeIndices": { "dtype": "uint32", "shape": [0], "data": { "kind": "values", "values": [] } }
},
"outputs": { "present": { "dtype": "float32", "shape": [0, 1, 4, 5], "tolerance": 0 } }
},
{
"name": "scalar_copy_path_odd_numel_with_write_indices_f32",
"attrs": { "mode": "linear", "axis": -2 },
"inputs": {
"past": {
"dtype": "float32",
"shape": [2, 1, 5, 7],
"data": { "kind": "fillFloat32", "sinStep": 0.7, "scale": 3.0, "offset": 1.0 }
},
"update": {
"dtype": "float32",
"shape": [2, 1, 1, 7],
"data": {
"kind": "values",
"values": [100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 200.0, 201.0, 202.0, 203.0, 204.0, 205.0, 206.0]
}
},
"writeIndices": { "dtype": "uint32", "shape": [2], "data": { "kind": "values", "values": [2, 4] } }
},
"outputs": { "present": { "dtype": "float32", "shape": [2, 1, 5, 7], "tolerance": 0 } }
},
{
"name": "circular_wrap_multi_position_split_across_boundary_f32",
"attrs": { "mode": "circular", "axis": -2 },
"inputs": {
"past": {
"dtype": "float32",
"shape": [1, 5, 3],
"data": {
"kind": "values",
"values": [10.0, 11.0, 12.0, 20.0, 21.0, 22.0, 30.0, 31.0, 32.0, 40.0, 41.0, 42.0, 50.0, 51.0, 52.0]
}
},
"update": {
"dtype": "float32",
"shape": [1, 4, 3],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 13.0, 14.0, 15.0] }
},
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [3] } }
},
"outputs": { "present": { "dtype": "float32", "shape": [1, 5, 3], "tolerance": 0 } }
},
{
"name": "linear_write_offset_overflows_max_seq_guard_drops_tail_f32",
"attrs": { "mode": "linear", "axis": -2 },
"inputs": {
"past": {
"dtype": "float32",
"shape": [1, 4, 2],
"data": { "kind": "values", "values": [10.0, 11.0, 20.0, 21.0, 30.0, 31.0, 40.0, 41.0] }
},
"update": {
"dtype": "float32",
"shape": [1, 3, 2],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
},
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [3] } }
},
"outputs": { "present": { "dtype": "float32", "shape": [1, 4, 2], "tolerance": 0 } }
},
{
"name": "explicit_axis1_rank4_nonaxis_stride_tail_mapping_f16",
"attrs": { "mode": "linear", "axis": 1 },
"inputs": {
"past": {
"dtype": "float16",
"shape": [1, 5, 1, 3],
"data": { "kind": "fillFloat32", "sinStep": 0.37, "scale": 4.0, "offset": 2.0 }
},
"update": {
"dtype": "float16",
"shape": [1, 2, 1, 3],
"data": { "kind": "cycle", "values": [70.0, 71.0, 72.0, 80.0, 81.0, 82.0] }
},
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [2] } }
},
"outputs": { "present": { "dtype": "float16", "shape": [1, 5, 1, 3], "tolerance": 0.001 } }
},
{
"name": "rank8_linear_cache_axis_write",
"attrs": { "mode": "linear", "axis": 6 },
"inputs": {
"past": {
"dtype": "float32",
"shape": [1, 2, 1, 2, 1, 2, 4, 2],
"data": { "kind": "linspace", "start": 1.0, "end": 64.0 }
},
"update": {
"dtype": "float32",
"shape": [1, 2, 1, 2, 1, 2, 2, 2],
"data": { "kind": "fillFloat32", "sinStep": 0.17, "cosStep": 0.29 }
}
},
"outputs": { "present": { "dtype": "float32", "shape": [1, 2, 1, 2, 1, 2, 4, 2], "tolerance": 0 } }
},
{
"name": "ort_standard_int32_linear_extremes",
"provenance": {
"source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc",
"notes": "The opset-24 CPU kernel copies fixed-size payload bytes; int32 extrema and values beyond f32 exactness lock that same storage-preserving contract."
},
"attrs": { "axis": 2, "mode": "linear" },
"inputs": {
"past": {
"dtype": "int32",
"shape": [1, 1, 4],
"data": { "kind": "values", "values": [-2147483648, 17, 2147483647, -17] }
},
"update": {
"dtype": "int32",
"shape": [1, 1, 2],
"data": { "kind": "values", "values": [16777217, -16777217] }
},
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } }
},
"outputs": {
"present": {
"dtype": "int32",
"shape": [1, 1, 4],
"tolerance": 0,
"data": { "kind": "values", "values": [-2147483648, 16777217, -16777217, -17] }
}
}
},
{
"name": "ort_standard_int16_linear_extremes",
"provenance": {
"source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc",
"notes": "ONNX TensorScatter-24 permits int16; both signed extrema guard the runtime's widened i32 copy-and-overwrite route."
},
"attrs": { "axis": 2, "mode": "linear" },
"inputs": {
"past": {
"dtype": "int16",
"shape": [1, 1, 4],
"data": { "kind": "values", "values": [-32768, -1, 32767, 42] }
},
"update": { "dtype": "int16", "shape": [1, 1, 2], "data": { "kind": "values", "values": [12345, -12345] } },
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } }
},
"outputs": { "present": { "dtype": "int16", "shape": [1, 1, 4], "tolerance": 0 } }
},
{
"name": "ort_standard_int8_linear_extremes",
"provenance": {
"source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc",
"notes": "ONNX TensorScatter-24 permits int8; signed extrema distinguish the widened i32 storage route from a lossy conversion."
},
"attrs": { "axis": 2, "mode": "linear" },
"inputs": {
"past": { "dtype": "int8", "shape": [1, 1, 4], "data": { "kind": "values", "values": [-128, -1, 127, 42] } },
"update": { "dtype": "int8", "shape": [1, 1, 2], "data": { "kind": "values", "values": [64, -64] } },
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } }
},
"outputs": { "present": { "dtype": "int8", "shape": [1, 1, 4], "tolerance": 0 } }
},
{
"name": "ort_standard_uint32_linear_extremes",
"provenance": {
"source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc",
"notes": "ONNX TensorScatter-24 permits uint32; UINT32_MAX and values across the signed boundary lock exact u32 payload movement."
},
"attrs": { "axis": 2, "mode": "linear" },
"inputs": {
"past": {
"dtype": "uint32",
"shape": [1, 1, 4],
"data": { "kind": "values", "values": [0, 17, 4294967295, 2147483648] }
},
"update": {
"dtype": "uint32",
"shape": [1, 1, 2],
"data": { "kind": "values", "values": [16777217, 4000000000] }
},
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } }
},
"outputs": {
"present": {
"dtype": "uint32",
"shape": [1, 1, 4],
"tolerance": 0,
"data": { "kind": "values", "values": [0, 16777217, 4000000000, 2147483648] }
}
}
},
{
"name": "ort_standard_uint8_linear_extremes",
"provenance": {
"source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc",
"notes": "ONNX TensorScatter-24 permits uint8; UINT8_MAX and the signed boundary guard widened u32 storage."
},
"attrs": { "axis": 2, "mode": "linear" },
"inputs": {
"past": { "dtype": "uint8", "shape": [1, 1, 4], "data": { "kind": "values", "values": [0, 127, 255, 128] } },
"update": { "dtype": "uint8", "shape": [1, 1, 2], "data": { "kind": "values", "values": [254, 1] } },
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } }
},
"outputs": { "present": { "dtype": "uint8", "shape": [1, 1, 4], "tolerance": 0 } }
},
{
"name": "ort_standard_bool_linear_pattern",
"provenance": {
"source": "onnxruntime/core/providers/cpu/llm/tensorscatter.cc",
"notes": "ONNX TensorScatter-24 permits bool; an asymmetric overwrite checks the widened u32 boolean payload route."
},
"attrs": { "axis": 2, "mode": "linear" },
"inputs": {
"past": { "dtype": "bool", "shape": [1, 1, 4], "data": { "kind": "values", "values": [0, 0, 1, 1] } },
"update": { "dtype": "bool", "shape": [1, 1, 2], "data": { "kind": "values", "values": [1, 0] } },
"writeIndices": { "dtype": "uint32", "shape": [1], "data": { "kind": "values", "values": [1] } }
},
"outputs": { "present": { "dtype": "bool", "shape": [1, 1, 4], "tolerance": 0 } }
}
]
}