From c484829272cd13a738e35412498e12f2c9a194ac Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 15 Apr 2024 07:48:59 +0200 Subject: Adding upstream version 0.19.2. Signed-off-by: Daniel Baumann --- test/css/basic1.css | 16 + test/css/basic10.css | 7 + test/css/basic11.css | 8 + test/css/basic12.css | 19 + test/css/basic13.css | 6 + test/css/basic14.css | 5 + test/css/basic2.css | 10 + test/css/basic3.css | 10 + test/css/basic4.css | 6 + test/css/basic5.css | 7 + test/css/basic6.css | 8 + test/css/basic7.css | 26 + test/css/basic8.css | 15 + test/css/basic9.css | 20 + test/css/chained1.css | 15 + test/css/chained2.css | 6 + test/css/complex/callout.css | 71 + test/css/complex/excel-html.css | 103 + test/css/empty.css | 1 + test/css/invalids/1.css | 7 + test/css/test.css | 15 + test/css/utf8-1.css | 13 + test/csv/double-quotes/check.txt | 6 + test/csv/double-quotes/input.csv | 3 + test/csv/normal-quotes/check.txt | 6 + test/csv/normal-quotes/input.csv | 2 + test/csv/quoted-with-delim/check.txt | 2 + test/csv/quoted-with-delim/input.csv | 1 + test/csv/simple-numbers/check.txt | 11 + test/csv/simple-numbers/input.csv | 5 + test/csv/split-sheet/check-1.txt | 42 + test/csv/split-sheet/check-2.txt | 44 + test/csv/split-sheet/check-3.txt | 22 + test/csv/split-sheet/input.csv | 21 + test/gnumeric/background-color/standard.gnumeric | Bin 0 -> 2046 bytes test/gnumeric/borders/colors.gnumeric | Bin 0 -> 2156 bytes test/gnumeric/borders/directions.gnumeric | Bin 0 -> 2288 bytes test/gnumeric/borders/grid-box.gnumeric | Bin 0 -> 2170 bytes test/gnumeric/borders/single-cells.gnumeric | Bin 0 -> 2601 bytes .../cell-properties/wrap-and-shrink.gnumeric | Bin 0 -> 1883 bytes test/gnumeric/cell-value-types/check.txt | 41 + test/gnumeric/cell-value-types/input.gnumeric | Bin 0 -> 2129 bytes test/gnumeric/colored-text/input.gnumeric | Bin 0 -> 2180 bytes .../column-width-row-height/input.gnumeric | Bin 0 -> 2221 bytes test/gnumeric/formula-cells/check.txt | 7 + test/gnumeric/formula-cells/input.gnumeric | Bin 0 -> 1873 bytes test/gnumeric/hidden-rows-columns/input.gnumeric | Bin 0 -> 1887 bytes test/gnumeric/merged-cells/input.gnumeric | Bin 0 -> 2015 bytes .../named-expression-sheet-local/check.txt | 22 + .../named-expression-sheet-local/input.gnumeric | Bin 0 -> 2039 bytes test/gnumeric/named-expression/check.txt | 12 + test/gnumeric/named-expression/input.gnumeric | Bin 0 -> 1951 bytes test/gnumeric/number-formats/input.gnumeric | Bin 0 -> 2276 bytes test/gnumeric/raw-values-1/check.txt | 25 + test/gnumeric/raw-values-1/input.gnumeric | Bin 0 -> 2114 bytes test/gnumeric/table/autofilter.gnumeric | Bin 0 -> 2020 bytes test/gnumeric/test.gnumeric | Bin 0 -> 1851 bytes test/gnumeric/text-alignment/input.gnumeric | Bin 0 -> 2812 bytes test/gnumeric/text-formats/input.gnumeric | Bin 0 -> 2901 bytes test/json-mapped/array-of-arrays-basic/check.txt | 11 + test/json-mapped/array-of-arrays-basic/input.json | 9 + test/json-mapped/array-of-arrays-basic/map.json | 19 + test/json-mapped/array-of-arrays-header/check.txt | 57 + test/json-mapped/array-of-arrays-header/input.json | 19 + test/json-mapped/array-of-arrays-header/map.json | 15 + test/json-mapped/array-of-objects-basic/check.txt | 20 + test/json-mapped/array-of-objects-basic/input.json | 32 + test/json-mapped/array-of-objects-basic/map.json | 16 + test/json-mapped/array-of-objects-header/check.txt | 64 + .../json-mapped/array-of-objects-header/input.json | 15 + test/json-mapped/array-of-objects-header/map.json | 16 + test/json-mapped/nested-repeats-2/check.txt | 25 + test/json-mapped/nested-repeats-2/input.json | 20 + test/json-mapped/nested-repeats-2/map.json | 24 + test/json-mapped/nested-repeats/check.txt | 64 + test/json-mapped/nested-repeats/input.json | 45 + test/json-mapped/nested-repeats/map.json | 22 + test/json-structure/arrays-in-object/check.txt | 4 + test/json-structure/arrays-in-object/input.json | 10 + test/json-structure/multiple-ranges/check.txt | 5 + test/json-structure/multiple-ranges/input.json | 49 + .../json-structure/nested-arrays-mixed-2/check.txt | 3 + .../nested-arrays-mixed-2/input.json | 15 + test/json-structure/nested-arrays-mixed/check.txt | 3 + test/json-structure/nested-arrays-mixed/input.json | 15 + test/json-structure/nested-arrays/check.txt | 1 + test/json-structure/nested-arrays/input.json | 5 + test/json-structure/no-value-nodes/01.json | 1 + test/json-structure/no-value-nodes/02.json | 1 + test/json-structure/no-value-nodes/03.json | 1 + test/json-structure/no-value-nodes/04.json | 1 + test/json-structure/repeat-objects-2/check.txt | 6 + test/json-structure/repeat-objects-2/input.json | 6 + test/json-structure/repeat-objects/check.txt | 2 + test/json-structure/repeat-objects/input.json | 6 + test/json/basic1/check.txt | 8 + test/json/basic1/input.json | 6 + test/json/basic1/output.yaml | 4 + test/json/basic2/check.txt | 44 + test/json/basic2/input.json | 17 + test/json/basic2/output.yaml | 15 + test/json/basic3/check.txt | 29 + test/json/basic3/input.json | 11 + test/json/basic3/output.yaml | 10 + test/json/basic4/check.txt | 14 + test/json/basic4/input.json | 6 + test/json/basic4/output.yaml | 4 + test/json/empty-array-1/check.txt | 2 + test/json/empty-array-1/input.json | 1 + test/json/empty-array-2/check.txt | 2 + test/json/empty-array-2/input.json | 1 + test/json/empty-array-3/check.txt | 2 + test/json/empty-array-3/input.json | 2 + test/json/nested1/check.txt | 14 + test/json/nested1/input.json | 2 + test/json/nested1/output.yaml | 5 + test/json/nested2/check.txt | 20 + test/json/nested2/input.json | 6 + test/json/nested2/output.yaml | 4 + test/json/refs1/check.txt | 19 + test/json/refs1/input.json | 4 + test/json/refs1/ref.json | 2 + test/json/swagger/check.txt | 546 + test/json/swagger/input.json | 226 + test/json/swagger/output.yaml | 155 + test/json/to-yaml-1/check.txt | 14 + test/json/to-yaml-1/input.json | 1 + test/json/to-yaml-1/output.yaml | 4 + test/json/validation/LICENSE | 21 + test/json/validation/README | 1 + .../validation/i_number_double_huge_neg_exp.json | 1 + test/json/validation/i_number_huge_exp.json | 1 + .../json/validation/i_number_neg_int_huge_exp.json | 1 + .../validation/i_number_pos_double_huge_exp.json | 1 + .../validation/i_number_real_neg_overflow.json | 1 + .../validation/i_number_real_pos_overflow.json | 1 + test/json/validation/i_number_real_underflow.json | 1 + test/json/validation/i_number_too_big_neg_int.json | 1 + test/json/validation/i_number_too_big_pos_int.json | 1 + .../validation/i_number_very_big_negative_int.json | 1 + .../i_object_key_lone_2nd_surrogate.json | 1 + .../i_string_1st_surrogate_but_2nd_missing.json | 1 + .../i_string_1st_valid_surrogate_2nd_invalid.json | 1 + .../validation/i_string_UTF-16LE_with_BOM.json | Bin 0 -> 12 bytes .../i_string_UTF-8_invalid_sequence.json | 1 + .../validation/i_string_UTF8_surrogate_U+D800.json | 1 + ...ring_incomplete_surrogate_and_escape_valid.json | 1 + .../i_string_incomplete_surrogate_pair.json | 1 + ..._string_incomplete_surrogates_escape_valid.json | 1 + .../i_string_invalid_lonely_surrogate.json | 1 + .../validation/i_string_invalid_surrogate.json | 1 + test/json/validation/i_string_invalid_utf-8.json | 1 + .../i_string_inverted_surrogates_U+1D11E.json | 1 + test/json/validation/i_string_iso_latin_1.json | 1 + .../validation/i_string_lone_second_surrogate.json | 1 + .../i_string_lone_utf8_continuation_byte.json | 1 + .../validation/i_string_not_in_unicode_range.json | 1 + .../i_string_overlong_sequence_2_bytes.json | 1 + .../i_string_overlong_sequence_6_bytes.json | 1 + .../i_string_overlong_sequence_6_bytes_null.json | 1 + test/json/validation/i_string_truncated-utf-8.json | 1 + test/json/validation/i_string_utf16BE_no_BOM.json | Bin 0 -> 10 bytes test/json/validation/i_string_utf16LE_no_BOM.json | Bin 0 -> 10 bytes .../validation/i_structure_500_nested_arrays.json | 1 + .../i_structure_UTF-8_BOM_empty_object.json | 1 + .../validation/n_array_1_true_without_comma.json | 1 + test/json/validation/n_array_a_invalid_utf8.json | 1 + .../validation/n_array_colon_instead_of_comma.json | 1 + .../json/validation/n_array_comma_after_close.json | 1 + test/json/validation/n_array_comma_and_number.json | 1 + test/json/validation/n_array_double_comma.json | 1 + .../validation/n_array_double_extra_comma.json | 1 + test/json/validation/n_array_extra_close.json | 1 + test/json/validation/n_array_extra_comma.json | 1 + test/json/validation/n_array_incomplete.json | 1 + .../n_array_incomplete_invalid_value.json | 1 + .../validation/n_array_inner_array_no_comma.json | 1 + test/json/validation/n_array_invalid_utf8.json | 1 + .../n_array_items_separated_by_semicolon.json | 1 + test/json/validation/n_array_just_comma.json | 1 + test/json/validation/n_array_just_minus.json | 1 + test/json/validation/n_array_missing_value.json | 1 + .../json/validation/n_array_newlines_unclosed.json | 3 + test/json/validation/n_array_number_and_comma.json | 1 + .../n_array_number_and_several_commas.json | 1 + .../n_array_spaces_vertical_tab_formfeed.json | 1 + test/json/validation/n_array_star_inside.json | 1 + test/json/validation/n_array_unclosed.json | 1 + .../n_array_unclosed_trailing_comma.json | 1 + .../n_array_unclosed_with_new_lines.json | 3 + .../n_array_unclosed_with_object_inside.json | 1 + test/json/validation/n_incomplete_false.json | 1 + test/json/validation/n_incomplete_null.json | 1 + test/json/validation/n_incomplete_true.json | 1 + .../validation/n_multidigit_number_then_00.json | Bin 0 -> 4 bytes test/json/validation/n_number_++.json | 1 + test/json/validation/n_number_+1.json | 1 + test/json/validation/n_number_+Inf.json | 1 + test/json/validation/n_number_-01.json | 1 + test/json/validation/n_number_-1.0..json | 1 + test/json/validation/n_number_-2..json | 1 + test/json/validation/n_number_-NaN.json | 1 + test/json/validation/n_number_.-1.json | 1 + test/json/validation/n_number_.2e-3.json | 1 + test/json/validation/n_number_0.1.2.json | 1 + test/json/validation/n_number_0.3e+.json | 1 + test/json/validation/n_number_0.3e.json | 1 + test/json/validation/n_number_0.e1.json | 1 + test/json/validation/n_number_0_capital_E+.json | 1 + test/json/validation/n_number_0_capital_E.json | 1 + test/json/validation/n_number_0e+.json | 1 + test/json/validation/n_number_0e.json | 1 + test/json/validation/n_number_1.0e+.json | 1 + test/json/validation/n_number_1.0e-.json | 1 + test/json/validation/n_number_1.0e.json | 1 + test/json/validation/n_number_1_000.json | 1 + test/json/validation/n_number_1eE2.json | 1 + test/json/validation/n_number_2.e+3.json | 1 + test/json/validation/n_number_2.e-3.json | 1 + test/json/validation/n_number_2.e3.json | 1 + test/json/validation/n_number_9.e+.json | 1 + test/json/validation/n_number_Inf.json | 1 + test/json/validation/n_number_NaN.json | 1 + .../n_number_U+FF11_fullwidth_digit_one.json | 1 + test/json/validation/n_number_expression.json | 1 + test/json/validation/n_number_hex_1_digit.json | 1 + test/json/validation/n_number_hex_2_digits.json | 1 + test/json/validation/n_number_infinity.json | 1 + test/json/validation/n_number_invalid+-.json | 1 + .../validation/n_number_invalid-negative-real.json | 1 + .../n_number_invalid-utf-8-in-bigger-int.json | 1 + .../n_number_invalid-utf-8-in-exponent.json | 1 + .../validation/n_number_invalid-utf-8-in-int.json | 1 + test/json/validation/n_number_minus_infinity.json | 1 + .../n_number_minus_sign_with_trailing_garbage.json | 1 + test/json/validation/n_number_minus_space_1.json | 1 + .../n_number_neg_int_starting_with_zero.json | 1 + .../n_number_neg_real_without_int_part.json | 1 + .../n_number_neg_with_garbage_at_end.json | 1 + .../validation/n_number_real_garbage_after_e.json | 1 + .../n_number_real_with_invalid_utf8_after_e.json | 1 + .../n_number_real_without_fractional_part.json | 1 + .../validation/n_number_starting_with_dot.json | 1 + test/json/validation/n_number_with_alpha.json | 1 + test/json/validation/n_number_with_alpha_char.json | 1 + .../validation/n_number_with_leading_zero.json | 1 + test/json/validation/n_object_bad_value.json | 1 + test/json/validation/n_object_bracket_key.json | 1 + .../n_object_comma_instead_of_colon.json | 1 + test/json/validation/n_object_double_colon.json | 1 + test/json/validation/n_object_emoji.json | 1 + test/json/validation/n_object_garbage_at_end.json | 1 + .../n_object_key_with_single_quotes.json | 1 + ...ontinuation_byte_in_key_and_trailing_comma.json | 1 + test/json/validation/n_object_missing_colon.json | 1 + test/json/validation/n_object_missing_key.json | 1 + .../validation/n_object_missing_semicolon.json | 1 + test/json/validation/n_object_missing_value.json | 1 + test/json/validation/n_object_no-colon.json | 1 + test/json/validation/n_object_non_string_key.json | 1 + ...ect_non_string_key_but_huge_number_instead.json | 1 + .../validation/n_object_repeated_null_null.json | 1 + .../n_object_several_trailing_commas.json | 1 + test/json/validation/n_object_single_quote.json | 1 + test/json/validation/n_object_trailing_comma.json | 1 + .../json/validation/n_object_trailing_comment.json | 1 + .../validation/n_object_trailing_comment_open.json | 1 + .../n_object_trailing_comment_slash_open.json | 1 + ...ect_trailing_comment_slash_open_incomplete.json | 1 + .../validation/n_object_two_commas_in_a_row.json | 1 + test/json/validation/n_object_unquoted_key.json | 1 + .../validation/n_object_unterminated-value.json | 1 + .../validation/n_object_with_single_string.json | 1 + .../validation/n_object_with_trailing_garbage.json | 1 + test/json/validation/n_single_space.json | 1 + .../n_string_1_surrogate_then_escape.json | 1 + .../n_string_1_surrogate_then_escape_u.json | 1 + .../n_string_1_surrogate_then_escape_u1.json | 1 + .../n_string_1_surrogate_then_escape_u1x.json | 1 + .../n_string_accentuated_char_no_quotes.json | 1 + test/json/validation/n_string_backslash_00.json | Bin 0 -> 6 bytes test/json/validation/n_string_escape_x.json | 1 + .../validation/n_string_escaped_backslash_bad.json | 1 + .../validation/n_string_escaped_ctrl_char_tab.json | 1 + test/json/validation/n_string_escaped_emoji.json | 1 + .../validation/n_string_incomplete_escape.json | 1 + .../n_string_incomplete_escaped_character.json | 1 + .../validation/n_string_incomplete_surrogate.json | 1 + ...string_incomplete_surrogate_escape_invalid.json | 1 + .../n_string_invalid-utf-8-in-escape.json | 1 + .../validation/n_string_invalid_backslash_esc.json | 1 + .../n_string_invalid_unicode_escape.json | 1 + .../n_string_invalid_utf8_after_escape.json | 1 + .../n_string_leading_uescaped_thinspace.json | 1 + .../n_string_no_quotes_with_bad_escape.json | 1 + .../validation/n_string_single_doublequote.json | 1 + test/json/validation/n_string_single_quote.json | 1 + .../n_string_single_string_no_double_quotes.json | 1 + .../validation/n_string_start_escape_unclosed.json | 1 + .../validation/n_string_unescaped_crtl_char.json | Bin 0 -> 7 bytes .../validation/n_string_unescaped_newline.json | 2 + test/json/validation/n_string_unescaped_tab.json | 1 + .../json/validation/n_string_unicode_CapitalU.json | 1 + .../validation/n_string_with_trailing_garbage.json | 1 + .../n_structure_100000_opening_arrays.json | 1 + .../validation/n_structure_U+2060_word_joined.json | 1 + .../validation/n_structure_UTF8_BOM_no_data.json | 1 + .../validation/n_structure_angle_bracket_..json | 1 + .../validation/n_structure_angle_bracket_null.json | 1 + .../n_structure_array_trailing_garbage.json | 1 + .../n_structure_array_with_extra_array_close.json | 1 + .../n_structure_array_with_unclosed_string.json | 1 + .../n_structure_ascii-unicode-identifier.json | 1 + .../validation/n_structure_capitalized_True.json | 1 + .../n_structure_close_unopened_array.json | 1 + ...n_structure_comma_instead_of_closing_brace.json | 1 + test/json/validation/n_structure_double_array.json | 1 + test/json/validation/n_structure_end_array.json | 1 + .../n_structure_incomplete_UTF8_BOM.json | 1 + .../validation/n_structure_lone-invalid-utf-8.json | 1 + .../validation/n_structure_lone-open-bracket.json | 1 + test/json/validation/n_structure_no_data.json | 0 .../n_structure_null-byte-outside-string.json | Bin 0 -> 3 bytes .../n_structure_number_with_trailing_garbage.json | 1 + ...tructure_object_followed_by_closing_object.json | 1 + .../n_structure_object_unclosed_no_value.json | 1 + .../n_structure_object_with_comment.json | 1 + .../n_structure_object_with_trailing_garbage.json | 1 + .../n_structure_open_array_apostrophe.json | 1 + .../validation/n_structure_open_array_comma.json | 1 + .../validation/n_structure_open_array_object.json | 1 + .../n_structure_open_array_open_object.json | 1 + .../n_structure_open_array_open_string.json | 1 + .../validation/n_structure_open_array_string.json | 1 + test/json/validation/n_structure_open_object.json | 1 + .../n_structure_open_object_close_array.json | 1 + .../validation/n_structure_open_object_comma.json | 1 + .../n_structure_open_object_open_array.json | 1 + .../n_structure_open_object_open_string.json | 1 + ...ucture_open_object_string_with_apostrophes.json | 1 + test/json/validation/n_structure_open_open.json | 1 + .../json/validation/n_structure_single_eacute.json | 1 + test/json/validation/n_structure_single_star.json | 1 + test/json/validation/n_structure_trailing_#.json | 1 + .../n_structure_uescaped_LF_before_string.json | 1 + .../validation/n_structure_unclosed_array.json | 1 + .../n_structure_unclosed_array_partial_null.json | 1 + ..._structure_unclosed_array_unfinished_false.json | 1 + ...n_structure_unclosed_array_unfinished_true.json | 1 + .../validation/n_structure_unclosed_object.json | 1 + .../validation/n_structure_unicode-identifier.json | 1 + .../n_structure_whitespace_U+2060_word_joiner.json | 1 + .../n_structure_whitespace_formfeed.json | 1 + test/json/validation/y_array_arraysWithSpaces.json | 1 + test/json/validation/y_array_empty-string.json | 1 + test/json/validation/y_array_empty.json | 1 + .../validation/y_array_ending_with_newline.json | 1 + test/json/validation/y_array_false.json | 1 + test/json/validation/y_array_heterogeneous.json | 1 + test/json/validation/y_array_null.json | 1 + .../validation/y_array_with_1_and_newline.json | 2 + .../validation/y_array_with_leading_space.json | 1 + .../json/validation/y_array_with_several_null.json | 1 + .../validation/y_array_with_trailing_space.json | 1 + test/json/validation/y_number.json | 1 + test/json/validation/y_number_0e+1.json | 1 + test/json/validation/y_number_0e1.json | 1 + test/json/validation/y_number_after_space.json | 1 + .../validation/y_number_double_close_to_zero.json | 1 + test/json/validation/y_number_int_with_exp.json | 1 + test/json/validation/y_number_minus_zero.json | 1 + test/json/validation/y_number_negative_int.json | 1 + test/json/validation/y_number_negative_one.json | 1 + test/json/validation/y_number_negative_zero.json | 1 + test/json/validation/y_number_real_capital_e.json | 1 + .../y_number_real_capital_e_neg_exp.json | 1 + .../y_number_real_capital_e_pos_exp.json | 1 + test/json/validation/y_number_real_exponent.json | 1 + .../y_number_real_fraction_exponent.json | 1 + test/json/validation/y_number_real_neg_exp.json | 1 + .../validation/y_number_real_pos_exponent.json | 1 + test/json/validation/y_number_simple_int.json | 1 + test/json/validation/y_number_simple_real.json | 1 + test/json/validation/y_object.json | 1 + test/json/validation/y_object_basic.json | 1 + test/json/validation/y_object_duplicated_key.json | 1 + .../y_object_duplicated_key_and_value.json | 1 + test/json/validation/y_object_empty.json | 1 + test/json/validation/y_object_empty_key.json | 1 + .../validation/y_object_escaped_null_in_key.json | 1 + test/json/validation/y_object_extreme_numbers.json | 1 + test/json/validation/y_object_long_strings.json | 1 + test/json/validation/y_object_simple.json | 1 + test/json/validation/y_object_string_unicode.json | 1 + test/json/validation/y_object_with_newlines.json | 3 + .../y_string_1_2_3_bytes_UTF-8_sequences.json | 1 + .../y_string_accepted_surrogate_pair.json | 1 + .../y_string_accepted_surrogate_pairs.json | 1 + test/json/validation/y_string_allowed_escapes.json | 1 + .../y_string_backslash_and_u_escaped_zero.json | 1 + .../y_string_backslash_doublequotes.json | 1 + test/json/validation/y_string_comments.json | 1 + test/json/validation/y_string_double_escape_a.json | 1 + test/json/validation/y_string_double_escape_n.json | 1 + .../y_string_escaped_control_character.json | 1 + .../validation/y_string_escaped_noncharacter.json | 1 + test/json/validation/y_string_in_array.json | 1 + .../y_string_in_array_with_leading_space.json | 1 + .../y_string_last_surrogates_1_and_2.json | 1 + test/json/validation/y_string_nbsp_uescaped.json | 1 + .../y_string_nonCharacterInUTF-8_U+10FFFF.json | 1 + .../y_string_nonCharacterInUTF-8_U+FFFF.json | 1 + test/json/validation/y_string_null_escape.json | 1 + test/json/validation/y_string_one-byte-utf-8.json | 1 + test/json/validation/y_string_pi.json | 1 + .../y_string_reservedCharacterInUTF-8_U+1BFFF.json | 1 + test/json/validation/y_string_simple_ascii.json | 1 + test/json/validation/y_string_space.json | 1 + ...g_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json | 1 + .../json/validation/y_string_three-byte-utf-8.json | 1 + test/json/validation/y_string_two-byte-utf-8.json | 1 + test/json/validation/y_string_u+2028_line_sep.json | 1 + test/json/validation/y_string_u+2029_par_sep.json | 1 + test/json/validation/y_string_uEscape.json | 1 + .../json/validation/y_string_uescaped_newline.json | 1 + .../validation/y_string_unescaped_char_delete.json | 1 + test/json/validation/y_string_unicode.json | 1 + .../y_string_unicodeEscapedBackslash.json | 1 + test/json/validation/y_string_unicode_2.json | 1 + .../y_string_unicode_U+10FFFE_nonchar.json | 1 + .../y_string_unicode_U+1FFFE_nonchar.json | 1 + .../y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json | 1 + .../y_string_unicode_U+2064_invisible_plus.json | 1 + .../y_string_unicode_U+FDD0_nonchar.json | 1 + .../y_string_unicode_U+FFFE_nonchar.json | 1 + .../y_string_unicode_escaped_double_quote.json | 1 + test/json/validation/y_string_utf8.json | 1 + .../validation/y_string_with_del_character.json | 1 + test/json/validation/y_structure_lonely_false.json | 1 + test/json/validation/y_structure_lonely_int.json | 1 + .../y_structure_lonely_negative_real.json | 1 + test/json/validation/y_structure_lonely_null.json | 1 + .../json/validation/y_structure_lonely_string.json | 1 + test/json/validation/y_structure_lonely_true.json | 1 + test/json/validation/y_structure_string_empty.json | 1 + .../validation/y_structure_trailing_newline.json | 1 + .../json/validation/y_structure_true_in_array.json | 1 + .../validation/y_structure_whitespace_array.json | 1 + test/ods/borders/grid-box.ods | Bin 0 -> 8246 bytes test/ods/borders/single-cells.ods | Bin 0 -> 10311 bytes test/ods/cell-properties/wrap-and-shrink.ods | Bin 0 -> 12729 bytes test/ods/column-width-row-height/input.ods | Bin 0 -> 9861 bytes test/ods/date-cell/input.ods | Bin 0 -> 9050 bytes test/ods/formatted-text/bold-and-italic.ods | Bin 0 -> 13066 bytes test/ods/formula-1/check.txt | 4 + test/ods/formula-1/input.ods | Bin 0 -> 7722 bytes test/ods/formula-2/check.txt | 21 + test/ods/formula-2/input.ods | Bin 0 -> 10282 bytes test/ods/import-styles/cell-protection.xml | 17 + test/ods/import-styles/cell-styles.xml | 43 + test/ods/import-styles/standard-styles.xml | 64 + test/ods/japanese.ods | Bin 0 -> 7810 bytes test/ods/named-expression-sheet-local/check.txt | 24 + test/ods/named-expression-sheet-local/input.ods | Bin 0 -> 10209 bytes test/ods/named-expression/check.txt | 14 + test/ods/named-expression/input.ods | Bin 0 -> 8582 bytes test/ods/named-range/check.txt | 36 + test/ods/named-range/input.ods | Bin 0 -> 11252 bytes test/ods/number-format/basic-set.ods | Bin 0 -> 18601 bytes test/ods/raw-values-1/check.txt | 25 + test/ods/raw-values-1/input.ods | Bin 0 -> 10425 bytes test/ods/styles/asian-complex.ods | Bin 0 -> 12366 bytes test/ods/styles/column-styles.ods | Bin 0 -> 13259 bytes test/ods/styles/direct-format.ods | Bin 0 -> 11171 bytes test/ods/styles/text-underlines.ods | Bin 0 -> 26122 bytes test/ods/test.ods | Bin 0 -> 599111 bytes test/parquet/basic/basic-gzip.parquet | Bin 0 -> 4951 bytes test/parquet/basic/basic-gzip.parquet.check | 66 + test/parquet/basic/basic-nocomp.parquet | Bin 0 -> 4907 bytes test/parquet/basic/basic-nocomp.parquet.check | 66 + test/parquet/basic/basic-snappy.parquet | Bin 0 -> 4851 bytes test/parquet/basic/basic-snappy.parquet.check | 66 + test/parquet/basic/basic-zstd.parquet | Bin 0 -> 4894 bytes test/parquet/basic/basic-zstd.parquet.check | 66 + test/parquet/basic/float-with-nan.parquet | Bin 0 -> 1784 bytes test/parquet/basic/float-with-nan.parquet.check | 4 + test/python/env.json.in | 6 + test/python/file_load_common.py | 248 + test/python/perf/test_json.py | 273 + test/python/test_csv.py | 47 + test/python/test_csv_export.py | 107 + test/python/test_gnumeric.py | 39 + test/python/test_json.py | 45 + test/python/test_module.py | 56 + test/python/test_ods.py | 164 + test/python/test_xls_xml.py | 80 + test/python/test_xlsx.py | 103 + test/xls-xml/background-color/standard.xml | 150 + test/xls-xml/basic-utf-16-be/check.txt | 27 + test/xls-xml/basic-utf-16-be/input.xml | Bin 0 -> 7898 bytes test/xls-xml/basic-utf-16-le/check.txt | 27 + test/xls-xml/basic-utf-16-le/input.xml | Bin 0 -> 7898 bytes test/xls-xml/basic/check.txt | 27 + test/xls-xml/basic/input.xml | 112 + test/xls-xml/bold-and-italic/check.txt | 5 + test/xls-xml/bold-and-italic/input.xml | 120 + test/xls-xml/borders/colors.xml | 109 + test/xls-xml/borders/directions.xml | 121 + test/xls-xml/borders/grid-box.xml | 237 + test/xls-xml/borders/single-cells.xml | 202 + test/xls-xml/cell-properties/default-style.xml | 89 + test/xls-xml/cell-properties/locked-and-hidden.xml | 83 + test/xls-xml/cell-properties/wrap-and-shrink.xml | 82 + test/xls-xml/character-set/input.xml | 112 + test/xls-xml/colored-text/check.txt | 13 + test/xls-xml/colored-text/input.xml | 136 + test/xls-xml/column-width-row-height/input.xml | 140 + test/xls-xml/date-time/input.xml | 86 + test/xls-xml/double-bom/input.xml | 58050 +++++++++++++++++++ test/xls-xml/empty-rows/check.txt | 7 + test/xls-xml/empty-rows/input.xml | 79 + test/xls-xml/formatted-text/basic.xml | 241 + test/xls-xml/formula-array-1/check.txt | 23 + test/xls-xml/formula-array-1/input.xml | 99 + test/xls-xml/formula-cells-1/check.txt | 7 + test/xls-xml/formula-cells-1/input.xml | 73 + test/xls-xml/formula-cells-2/check.txt | 41 + test/xls-xml/formula-cells-2/config.yaml | 3 + test/xls-xml/formula-cells-2/input.xml | 198 + test/xls-xml/formula-cells-3/check.txt | 6 + test/xls-xml/formula-cells-3/input.xml | 98 + test/xls-xml/formula-cells-parse-error/input.xml | 73 + test/xls-xml/hidden-rows-columns/input.xml | 115 + test/xls-xml/invalid-sub-structure/check.txt | 25 + test/xls-xml/invalid-sub-structure/input.xml | 135 + test/xls-xml/leading-whitespace/check.txt | 27 + test/xls-xml/leading-whitespace/input.xml | 112 + test/xls-xml/matrix-results/input.xml | 81 + test/xls-xml/merged-cells/check.txt | 16 + test/xls-xml/merged-cells/input.xml | 101 + test/xls-xml/named-colors/check.txt | 282 + test/xls-xml/named-colors/input-upper.xml | 1170 + test/xls-xml/named-colors/input.xml | 1170 + test/xls-xml/named-colors/run.py | 55 + test/xls-xml/named-colors/saved-by-excel.xml | 1170 + .../xls-xml/named-expression-sheet-local/check.txt | 22 + .../xls-xml/named-expression-sheet-local/input.xml | 131 + test/xls-xml/named-expression/check.txt | 12 + test/xls-xml/named-expression/input.xml | 92 + test/xls-xml/number-format/date-time.xml | 244 + test/xls-xml/raw-values-1/check.txt | 25 + test/xls-xml/raw-values-1/input.xml | 131 + test/xls-xml/styles/column-styles.xml | 175 + test/xls-xml/styles/data-offset.xml | 28 + test/xls-xml/styles/direct-format.xml | 97 + test/xls-xml/table-offset/check.txt | 7 + test/xls-xml/table-offset/input.xml | 50 + test/xls-xml/table/autofilter.xml | 180 + test/xls-xml/text-alignment/input.xml | 290 + test/xls-xml/unnamed-parent-styles/check.txt | 37 + test/xls-xml/unnamed-parent-styles/input.xml | 447 + test/xls-xml/view/cursor-per-sheet.xml | 164 + test/xls-xml/view/cursor-split-pane.xml | 270 + test/xls-xml/view/frozen-pane.xml | 155 + test/xlsx/background-color/standard.xlsx | Bin 0 -> 8676 bytes test/xlsx/boolean-values/check.txt | 3 + test/xlsx/boolean-values/input.xlsx | Bin 0 -> 8272 bytes test/xlsx/borders/colors.xlsx | Bin 0 -> 9753 bytes test/xlsx/borders/directions.xlsx | Bin 0 -> 9726 bytes test/xlsx/borders/grid-box.xlsx | Bin 0 -> 9562 bytes test/xlsx/borders/single-cells.xlsx | Bin 0 -> 8489 bytes test/xlsx/cell-properties/wrap-and-shrink.xlsx | Bin 0 -> 9928 bytes test/xlsx/column-width-row-height/input.xlsx | Bin 0 -> 9966 bytes test/xlsx/conditional-format/basic.xlsx | Bin 0 -> 13482 bytes test/xlsx/conditional-format/data-bars.xlsx | Bin 0 -> 11334 bytes test/xlsx/data-table/multi-table.xlsx | Bin 0 -> 9578 bytes test/xlsx/data-table/one-variable.xlsx | Bin 0 -> 9018 bytes test/xlsx/date-cell/input.xlsx | Bin 0 -> 7965 bytes test/xlsx/date-time/input.xlsx | Bin 0 -> 8358 bytes .../doc-structure/unordered-sheet-positions.xlsx | Bin 0 -> 12924 bytes test/xlsx/empty-shared-strings/check.txt | 8 + test/xlsx/empty-shared-strings/input.xlsx | Bin 0 -> 8246 bytes test/xlsx/formatted-text/basic.xlsx | Bin 0 -> 11637 bytes test/xlsx/formatted-text/bold-and-italic.xlsx | Bin 0 -> 9343 bytes test/xlsx/formatted-text/colored-text.xlsx | Bin 0 -> 8780 bytes test/xlsx/formula-array-1/check.txt | 23 + test/xlsx/formula-array-1/input.xlsx | Bin 0 -> 8794 bytes test/xlsx/formula-cells/check.txt | 7 + test/xlsx/formula-cells/input.xlsx | Bin 0 -> 8460 bytes test/xlsx/formula-shared/check.txt | 29 + test/xlsx/formula-shared/input.xlsx | Bin 0 -> 8606 bytes test/xlsx/formula-simple.xlsx | Bin 0 -> 8476 bytes test/xlsx/formula-with-string-results/check.txt | 33 + test/xlsx/formula-with-string-results/input.xlsx | Bin 0 -> 9384 bytes test/xlsx/hidden-rows-columns/input.xlsx | Bin 0 -> 9250 bytes test/xlsx/matrix-results/input.xlsx | Bin 0 -> 8514 bytes test/xlsx/merged-cells/simple.xlsx | Bin 0 -> 9456 bytes test/xlsx/named-expression-relative/input.xlsx | Bin 0 -> 8321 bytes test/xlsx/named-expression-sheet-local/check.txt | 22 + test/xlsx/named-expression-sheet-local/input.xlsx | Bin 0 -> 8921 bytes test/xlsx/named-expression/check.txt | 12 + test/xlsx/named-expression/input.xlsx | Bin 0 -> 8209 bytes test/xlsx/number-format/date-time.xlsx | Bin 0 -> 9514 bytes test/xlsx/pivot-table/chart-simple.xlsx | Bin 0 -> 17470 bytes test/xlsx/pivot-table/error-values.xlsx | Bin 0 -> 11808 bytes test/xlsx/pivot-table/group-by-dates.xlsx | Bin 0 -> 14268 bytes test/xlsx/pivot-table/group-by-numbers.xlsx | Bin 0 -> 12059 bytes test/xlsx/pivot-table/group-field.xlsx | Bin 0 -> 13165 bytes test/xlsx/pivot-table/many-fields.xlsx | Bin 0 -> 12556 bytes test/xlsx/pivot-table/mixed-type-field.xlsx | Bin 0 -> 15206 bytes .../three-pivot-tables-on-one-sheet.xlsx | Bin 0 -> 17103 bytes test/xlsx/pivot-table/two-pivot-caches.xlsx | Bin 0 -> 15538 bytes test/xlsx/pivot-table/two-tables-one-source.xlsx | Bin 0 -> 13496 bytes test/xlsx/raw-values-1/check.txt | 25 + test/xlsx/raw-values-1/input.xlsx | Bin 0 -> 8127 bytes test/xlsx/revision/cell-change-basic.xlsx | Bin 0 -> 15414 bytes test/xlsx/styles/column-styles.xlsx | Bin 0 -> 10289 bytes test/xlsx/styles/direct-format.xlsx | Bin 0 -> 10259 bytes test/xlsx/table/autofilter-text-filter-1.xlsx | Bin 0 -> 9115 bytes test/xlsx/table/autofilter.xlsx | Bin 0 -> 8742 bytes test/xlsx/table/table-1.xlsx | Bin 0 -> 9244 bytes test/xlsx/table/table-2.xlsx | Bin 0 -> 9325 bytes test/xlsx/test.xlsx | Bin 0 -> 12152 bytes test/xlsx/text-alignment/input.xlsx | Bin 0 -> 11421 bytes test/xlsx/view/cursor-per-sheet.xlsx | Bin 0 -> 11521 bytes test/xlsx/view/cursor-split-pane.xlsx | Bin 0 -> 12033 bytes test/xlsx/view/frozen-pane.xlsx | Bin 0 -> 9742 bytes test/xml-mapped/attribute-basic/check-nomap.txt | 30 + test/xml-mapped/attribute-basic/check.txt | 34 + test/xml-mapped/attribute-basic/input.xml | 14 + test/xml-mapped/attribute-basic/map.xml | 16 + .../attribute-namespace-2/check-nomap.txt | 12 + test/xml-mapped/attribute-namespace-2/check.txt | 12 + test/xml-mapped/attribute-namespace-2/input.xml | 8 + test/xml-mapped/attribute-namespace-2/map.xml | 12 + .../xml-mapped/attribute-namespace/check-nomap.txt | 12 + test/xml-mapped/attribute-namespace/check.txt | 12 + test/xml-mapped/attribute-namespace/input.xml | 8 + test/xml-mapped/attribute-namespace/map.xml | 12 + .../attribute-range-self-close/check-nomap.txt | 24 + .../attribute-range-self-close/check.txt | 24 + .../attribute-range-self-close/input.xml | 8 + test/xml-mapped/attribute-range-self-close/map.xml | 11 + .../attribute-single-element-2/check.txt | 2 + .../attribute-single-element-2/input.xml | 2 + test/xml-mapped/attribute-single-element-2/map.xml | 6 + test/xml-mapped/attribute-single-element/check.txt | 2 + test/xml-mapped/attribute-single-element/input.xml | 2 + test/xml-mapped/attribute-single-element/map.xml | 6 + test/xml-mapped/content-basic/check-nomap.txt | 24 + test/xml-mapped/content-basic/check.txt | 27 + test/xml-mapped/content-basic/input.xml | 27 + test/xml-mapped/content-basic/map.xml | 14 + .../xml-mapped/content-namespace-2/check-nomap.txt | 12 + test/xml-mapped/content-namespace-2/check.txt | 12 + test/xml-mapped/content-namespace-2/input.xml | 22 + test/xml-mapped/content-namespace-2/map.xml | 13 + .../xml-mapped/content-namespace-3/check-nomap.txt | 12 + test/xml-mapped/content-namespace-3/check.txt | 13 + test/xml-mapped/content-namespace-3/input.xml | 26 + test/xml-mapped/content-namespace-3/map.xml | 12 + test/xml-mapped/content-namespace/check-nomap.txt | 12 + test/xml-mapped/content-namespace/check.txt | 13 + test/xml-mapped/content-namespace/input.xml | 26 + test/xml-mapped/content-namespace/map.xml | 12 + test/xml-mapped/content-one-column/check-nomap.txt | 4 + test/xml-mapped/content-one-column/input.xml | 6 + test/xml-mapped/custom-labels-2/check.txt | 12 + test/xml-mapped/custom-labels-2/input.xml | 8 + test/xml-mapped/custom-labels-2/map.xml | 12 + test/xml-mapped/custom-labels/check.txt | 27 + test/xml-mapped/custom-labels/input.xml | 27 + test/xml-mapped/custom-labels/map.xml | 14 + test/xml-mapped/encoding/euc-jp.xml | 12 + test/xml-mapped/encoding/gbk.xml | 139 + test/xml-mapped/encoding/utf-8.xml | 27 + test/xml-mapped/fuel-economy/check-nomap.txt | 3 + test/xml-mapped/fuel-economy/check.txt | 4 + test/xml-mapped/fuel-economy/input.xml | 11 + test/xml-mapped/fuel-economy/map.xml | 9 + .../invalids/map-defs/non-leaf-element-linked.xml | 9 + test/xml-mapped/invalids/map-defs/not-xml.xml | 1 + test/xml-mapped/nested-repeats-2/check-nomap.txt | 31 + test/xml-mapped/nested-repeats-2/check.txt | 31 + test/xml-mapped/nested-repeats-2/input.xml | 21 + test/xml-mapped/nested-repeats-2/map.xml | 12 + test/xml-mapped/nested-repeats-3/check-nomap.txt | 44 + test/xml-mapped/nested-repeats-3/check.txt | 44 + test/xml-mapped/nested-repeats-3/input.xml | 32 + test/xml-mapped/nested-repeats-3/map.xml | 13 + test/xml-mapped/nested-repeats-4/check-nomap.txt | 44 + test/xml-mapped/nested-repeats-4/check.txt | 44 + test/xml-mapped/nested-repeats-4/input.xml | 38 + test/xml-mapped/nested-repeats-4/map.xml | 13 + test/xml-mapped/nested-repeats/check-nomap.txt | 20 + test/xml-mapped/nested-repeats/check.txt | 20 + test/xml-mapped/nested-repeats/input.xml | 18 + test/xml-mapped/nested-repeats/map.xml | 10 + test/xml-structure/attribute-1/check.txt | 7 + test/xml-structure/attribute-1/input.xml | 5 + test/xml-structure/basic-1/check.txt | 5 + test/xml-structure/basic-1/input.xml | 13 + test/xml-structure/basic-2/check.txt | 5 + test/xml-structure/basic-2/input.xml | 7 + test/xml-structure/basic-3/check.txt | 9 + test/xml-structure/basic-3/input.xml | 19 + test/xml-structure/namespace-default/check.txt | 5 + test/xml-structure/namespace-default/input.xml | 6 + test/xml-structure/nested-repeat-1/check.txt | 12 + test/xml-structure/nested-repeat-1/input.xml | 20 + test/xml/bom/check.txt | 11 + test/xml/bom/input.xml | 1 + test/xml/cdata-1/check.txt | 18 + test/xml/cdata-1/input.xml | 10 + test/xml/custom-decl-1/check.txt | 99 + test/xml/custom-decl-1/input.xml | 3 + test/xml/default-ns/check.txt | 17 + test/xml/default-ns/input.xml | 12 + test/xml/doctype/html.xml | 6 + test/xml/encoded-attrs/test1.xml | 5 + test/xml/encoded-char/check.txt | 19 + test/xml/encoded-char/input.xml | 11 + test/xml/invalids/double-boms-and-invalid-byte.xml | 1 + test/xml/invalids/only-bom.xml | 1 + test/xml/invalids/only-double-boms.xml | 1 + .../partial-attr-value-with-encoding-char.xml | 2 + test/xml/invalids/partial-open-element.xml | 2 + test/xml/no-decl-1/check.txt | 8 + test/xml/no-decl-1/input.xml | 8 + test/xml/ns-alias-1/check.txt | 10 + test/xml/ns-alias-1/input.xml | 6 + test/xml/osm/street-in-aizu.osm | 227 + test/xml/parse-only/rss/input.xml | 67 + test/xml/self-closing-root/check.txt | 1 + test/xml/self-closing-root/input.xml | 1 + test/xml/simple/check.txt | 12 + test/xml/simple/input.xml | 13 + test/xml/single-quote/check.txt | 11 + test/xml/single-quote/input.xml | 9 + test/xml/underscore-identifier/check.txt | 5 + test/xml/underscore-identifier/input.xml | 4 + test/xml/utf8-1/check.txt | 4 + test/xml/utf8-1/input.xml | 4 + test/xml/utf8-2/check.txt | 4 + test/xml/utf8-2/input.xml | 5 + test/xml/valids/double-boms.xml | 1 + test/yaml/basic1/input.yaml | 19 + test/yaml/basic2/input.yaml | 6 + test/yaml/basic3/input.yaml | 7 + test/yaml/boolean/input.yaml | 33 + test/yaml/empty-value-map-1/input.yaml | 3 + test/yaml/empty-value-map-2/input.yaml | 3 + test/yaml/empty-value-sequence-1/input.yaml | 2 + test/yaml/empty-value-sequence-2/input.yaml | 3 + test/yaml/invalids/1.yaml | 4 + test/yaml/invalids/2.yaml | 4 + test/yaml/invalids/3.yaml | 4 + test/yaml/literal-block-1/input.yaml | 11 + test/yaml/literal-block-2/input.yaml | 9 + test/yaml/map-key-1/input.yaml | 5 + test/yaml/multi-line-1/input.yaml | 4 + test/yaml/multi-line-2/input.yaml | 5 + test/yaml/null/input.yaml | 10 + test/yaml/quoted-string/input.yaml | 22 + test/yaml/swagger/input.yaml | 155 + test/yaml/url/input.yaml | 7 + 766 files changed, 74925 insertions(+) create mode 100644 test/css/basic1.css create mode 100644 test/css/basic10.css create mode 100644 test/css/basic11.css create mode 100644 test/css/basic12.css create mode 100644 test/css/basic13.css create mode 100644 test/css/basic14.css create mode 100644 test/css/basic2.css create mode 100644 test/css/basic3.css create mode 100644 test/css/basic4.css create mode 100644 test/css/basic5.css create mode 100644 test/css/basic6.css create mode 100644 test/css/basic7.css create mode 100644 test/css/basic8.css create mode 100644 test/css/basic9.css create mode 100644 test/css/chained1.css create mode 100644 test/css/chained2.css create mode 100644 test/css/complex/callout.css create mode 100644 test/css/complex/excel-html.css create mode 100644 test/css/empty.css create mode 100644 test/css/invalids/1.css create mode 100644 test/css/test.css create mode 100644 test/css/utf8-1.css create mode 100644 test/csv/double-quotes/check.txt create mode 100644 test/csv/double-quotes/input.csv create mode 100644 test/csv/normal-quotes/check.txt create mode 100644 test/csv/normal-quotes/input.csv create mode 100644 test/csv/quoted-with-delim/check.txt create mode 100644 test/csv/quoted-with-delim/input.csv create mode 100644 test/csv/simple-numbers/check.txt create mode 100644 test/csv/simple-numbers/input.csv create mode 100644 test/csv/split-sheet/check-1.txt create mode 100644 test/csv/split-sheet/check-2.txt create mode 100644 test/csv/split-sheet/check-3.txt create mode 100644 test/csv/split-sheet/input.csv create mode 100644 test/gnumeric/background-color/standard.gnumeric create mode 100644 test/gnumeric/borders/colors.gnumeric create mode 100644 test/gnumeric/borders/directions.gnumeric create mode 100644 test/gnumeric/borders/grid-box.gnumeric create mode 100644 test/gnumeric/borders/single-cells.gnumeric create mode 100644 test/gnumeric/cell-properties/wrap-and-shrink.gnumeric create mode 100644 test/gnumeric/cell-value-types/check.txt create mode 100644 test/gnumeric/cell-value-types/input.gnumeric create mode 100644 test/gnumeric/colored-text/input.gnumeric create mode 100644 test/gnumeric/column-width-row-height/input.gnumeric create mode 100644 test/gnumeric/formula-cells/check.txt create mode 100644 test/gnumeric/formula-cells/input.gnumeric create mode 100644 test/gnumeric/hidden-rows-columns/input.gnumeric create mode 100644 test/gnumeric/merged-cells/input.gnumeric create mode 100644 test/gnumeric/named-expression-sheet-local/check.txt create mode 100644 test/gnumeric/named-expression-sheet-local/input.gnumeric create mode 100644 test/gnumeric/named-expression/check.txt create mode 100644 test/gnumeric/named-expression/input.gnumeric create mode 100644 test/gnumeric/number-formats/input.gnumeric create mode 100644 test/gnumeric/raw-values-1/check.txt create mode 100644 test/gnumeric/raw-values-1/input.gnumeric create mode 100644 test/gnumeric/table/autofilter.gnumeric create mode 100644 test/gnumeric/test.gnumeric create mode 100644 test/gnumeric/text-alignment/input.gnumeric create mode 100644 test/gnumeric/text-formats/input.gnumeric create mode 100644 test/json-mapped/array-of-arrays-basic/check.txt create mode 100644 test/json-mapped/array-of-arrays-basic/input.json create mode 100644 test/json-mapped/array-of-arrays-basic/map.json create mode 100644 test/json-mapped/array-of-arrays-header/check.txt create mode 100644 test/json-mapped/array-of-arrays-header/input.json create mode 100644 test/json-mapped/array-of-arrays-header/map.json create mode 100644 test/json-mapped/array-of-objects-basic/check.txt create mode 100644 test/json-mapped/array-of-objects-basic/input.json create mode 100644 test/json-mapped/array-of-objects-basic/map.json create mode 100644 test/json-mapped/array-of-objects-header/check.txt create mode 100644 test/json-mapped/array-of-objects-header/input.json create mode 100644 test/json-mapped/array-of-objects-header/map.json create mode 100644 test/json-mapped/nested-repeats-2/check.txt create mode 100644 test/json-mapped/nested-repeats-2/input.json create mode 100644 test/json-mapped/nested-repeats-2/map.json create mode 100644 test/json-mapped/nested-repeats/check.txt create mode 100644 test/json-mapped/nested-repeats/input.json create mode 100644 test/json-mapped/nested-repeats/map.json create mode 100644 test/json-structure/arrays-in-object/check.txt create mode 100644 test/json-structure/arrays-in-object/input.json create mode 100644 test/json-structure/multiple-ranges/check.txt create mode 100644 test/json-structure/multiple-ranges/input.json create mode 100644 test/json-structure/nested-arrays-mixed-2/check.txt create mode 100644 test/json-structure/nested-arrays-mixed-2/input.json create mode 100644 test/json-structure/nested-arrays-mixed/check.txt create mode 100644 test/json-structure/nested-arrays-mixed/input.json create mode 100644 test/json-structure/nested-arrays/check.txt create mode 100644 test/json-structure/nested-arrays/input.json create mode 100644 test/json-structure/no-value-nodes/01.json create mode 100644 test/json-structure/no-value-nodes/02.json create mode 100644 test/json-structure/no-value-nodes/03.json create mode 100644 test/json-structure/no-value-nodes/04.json create mode 100644 test/json-structure/repeat-objects-2/check.txt create mode 100644 test/json-structure/repeat-objects-2/input.json create mode 100644 test/json-structure/repeat-objects/check.txt create mode 100644 test/json-structure/repeat-objects/input.json create mode 100644 test/json/basic1/check.txt create mode 100644 test/json/basic1/input.json create mode 100644 test/json/basic1/output.yaml create mode 100644 test/json/basic2/check.txt create mode 100644 test/json/basic2/input.json create mode 100644 test/json/basic2/output.yaml create mode 100644 test/json/basic3/check.txt create mode 100644 test/json/basic3/input.json create mode 100644 test/json/basic3/output.yaml create mode 100644 test/json/basic4/check.txt create mode 100644 test/json/basic4/input.json create mode 100644 test/json/basic4/output.yaml create mode 100644 test/json/empty-array-1/check.txt create mode 100644 test/json/empty-array-1/input.json create mode 100644 test/json/empty-array-2/check.txt create mode 100644 test/json/empty-array-2/input.json create mode 100644 test/json/empty-array-3/check.txt create mode 100644 test/json/empty-array-3/input.json create mode 100644 test/json/nested1/check.txt create mode 100644 test/json/nested1/input.json create mode 100644 test/json/nested1/output.yaml create mode 100644 test/json/nested2/check.txt create mode 100644 test/json/nested2/input.json create mode 100644 test/json/nested2/output.yaml create mode 100644 test/json/refs1/check.txt create mode 100644 test/json/refs1/input.json create mode 100644 test/json/refs1/ref.json create mode 100644 test/json/swagger/check.txt create mode 100644 test/json/swagger/input.json create mode 100644 test/json/swagger/output.yaml create mode 100644 test/json/to-yaml-1/check.txt create mode 100644 test/json/to-yaml-1/input.json create mode 100644 test/json/to-yaml-1/output.yaml create mode 100644 test/json/validation/LICENSE create mode 100644 test/json/validation/README create mode 100644 test/json/validation/i_number_double_huge_neg_exp.json create mode 100644 test/json/validation/i_number_huge_exp.json create mode 100644 test/json/validation/i_number_neg_int_huge_exp.json create mode 100644 test/json/validation/i_number_pos_double_huge_exp.json create mode 100644 test/json/validation/i_number_real_neg_overflow.json create mode 100644 test/json/validation/i_number_real_pos_overflow.json create mode 100644 test/json/validation/i_number_real_underflow.json create mode 100644 test/json/validation/i_number_too_big_neg_int.json create mode 100644 test/json/validation/i_number_too_big_pos_int.json create mode 100644 test/json/validation/i_number_very_big_negative_int.json create mode 100644 test/json/validation/i_object_key_lone_2nd_surrogate.json create mode 100644 test/json/validation/i_string_1st_surrogate_but_2nd_missing.json create mode 100644 test/json/validation/i_string_1st_valid_surrogate_2nd_invalid.json create mode 100644 test/json/validation/i_string_UTF-16LE_with_BOM.json create mode 100644 test/json/validation/i_string_UTF-8_invalid_sequence.json create mode 100644 test/json/validation/i_string_UTF8_surrogate_U+D800.json create mode 100644 test/json/validation/i_string_incomplete_surrogate_and_escape_valid.json create mode 100644 test/json/validation/i_string_incomplete_surrogate_pair.json create mode 100644 test/json/validation/i_string_incomplete_surrogates_escape_valid.json create mode 100644 test/json/validation/i_string_invalid_lonely_surrogate.json create mode 100644 test/json/validation/i_string_invalid_surrogate.json create mode 100644 test/json/validation/i_string_invalid_utf-8.json create mode 100644 test/json/validation/i_string_inverted_surrogates_U+1D11E.json create mode 100644 test/json/validation/i_string_iso_latin_1.json create mode 100644 test/json/validation/i_string_lone_second_surrogate.json create mode 100644 test/json/validation/i_string_lone_utf8_continuation_byte.json create mode 100644 test/json/validation/i_string_not_in_unicode_range.json create mode 100644 test/json/validation/i_string_overlong_sequence_2_bytes.json create mode 100644 test/json/validation/i_string_overlong_sequence_6_bytes.json create mode 100644 test/json/validation/i_string_overlong_sequence_6_bytes_null.json create mode 100644 test/json/validation/i_string_truncated-utf-8.json create mode 100644 test/json/validation/i_string_utf16BE_no_BOM.json create mode 100644 test/json/validation/i_string_utf16LE_no_BOM.json create mode 100644 test/json/validation/i_structure_500_nested_arrays.json create mode 100644 test/json/validation/i_structure_UTF-8_BOM_empty_object.json create mode 100644 test/json/validation/n_array_1_true_without_comma.json create mode 100644 test/json/validation/n_array_a_invalid_utf8.json create mode 100644 test/json/validation/n_array_colon_instead_of_comma.json create mode 100644 test/json/validation/n_array_comma_after_close.json create mode 100644 test/json/validation/n_array_comma_and_number.json create mode 100644 test/json/validation/n_array_double_comma.json create mode 100644 test/json/validation/n_array_double_extra_comma.json create mode 100644 test/json/validation/n_array_extra_close.json create mode 100644 test/json/validation/n_array_extra_comma.json create mode 100644 test/json/validation/n_array_incomplete.json create mode 100644 test/json/validation/n_array_incomplete_invalid_value.json create mode 100644 test/json/validation/n_array_inner_array_no_comma.json create mode 100644 test/json/validation/n_array_invalid_utf8.json create mode 100644 test/json/validation/n_array_items_separated_by_semicolon.json create mode 100644 test/json/validation/n_array_just_comma.json create mode 100644 test/json/validation/n_array_just_minus.json create mode 100644 test/json/validation/n_array_missing_value.json create mode 100644 test/json/validation/n_array_newlines_unclosed.json create mode 100644 test/json/validation/n_array_number_and_comma.json create mode 100644 test/json/validation/n_array_number_and_several_commas.json create mode 100644 test/json/validation/n_array_spaces_vertical_tab_formfeed.json create mode 100644 test/json/validation/n_array_star_inside.json create mode 100644 test/json/validation/n_array_unclosed.json create mode 100644 test/json/validation/n_array_unclosed_trailing_comma.json create mode 100644 test/json/validation/n_array_unclosed_with_new_lines.json create mode 100644 test/json/validation/n_array_unclosed_with_object_inside.json create mode 100644 test/json/validation/n_incomplete_false.json create mode 100644 test/json/validation/n_incomplete_null.json create mode 100644 test/json/validation/n_incomplete_true.json create mode 100644 test/json/validation/n_multidigit_number_then_00.json create mode 100644 test/json/validation/n_number_++.json create mode 100644 test/json/validation/n_number_+1.json create mode 100644 test/json/validation/n_number_+Inf.json create mode 100644 test/json/validation/n_number_-01.json create mode 100644 test/json/validation/n_number_-1.0..json create mode 100644 test/json/validation/n_number_-2..json create mode 100644 test/json/validation/n_number_-NaN.json create mode 100644 test/json/validation/n_number_.-1.json create mode 100644 test/json/validation/n_number_.2e-3.json create mode 100644 test/json/validation/n_number_0.1.2.json create mode 100644 test/json/validation/n_number_0.3e+.json create mode 100644 test/json/validation/n_number_0.3e.json create mode 100644 test/json/validation/n_number_0.e1.json create mode 100644 test/json/validation/n_number_0_capital_E+.json create mode 100644 test/json/validation/n_number_0_capital_E.json create mode 100644 test/json/validation/n_number_0e+.json create mode 100644 test/json/validation/n_number_0e.json create mode 100644 test/json/validation/n_number_1.0e+.json create mode 100644 test/json/validation/n_number_1.0e-.json create mode 100644 test/json/validation/n_number_1.0e.json create mode 100644 test/json/validation/n_number_1_000.json create mode 100644 test/json/validation/n_number_1eE2.json create mode 100644 test/json/validation/n_number_2.e+3.json create mode 100644 test/json/validation/n_number_2.e-3.json create mode 100644 test/json/validation/n_number_2.e3.json create mode 100644 test/json/validation/n_number_9.e+.json create mode 100644 test/json/validation/n_number_Inf.json create mode 100644 test/json/validation/n_number_NaN.json create mode 100644 test/json/validation/n_number_U+FF11_fullwidth_digit_one.json create mode 100644 test/json/validation/n_number_expression.json create mode 100644 test/json/validation/n_number_hex_1_digit.json create mode 100644 test/json/validation/n_number_hex_2_digits.json create mode 100644 test/json/validation/n_number_infinity.json create mode 100644 test/json/validation/n_number_invalid+-.json create mode 100644 test/json/validation/n_number_invalid-negative-real.json create mode 100644 test/json/validation/n_number_invalid-utf-8-in-bigger-int.json create mode 100644 test/json/validation/n_number_invalid-utf-8-in-exponent.json create mode 100644 test/json/validation/n_number_invalid-utf-8-in-int.json create mode 100644 test/json/validation/n_number_minus_infinity.json create mode 100644 test/json/validation/n_number_minus_sign_with_trailing_garbage.json create mode 100644 test/json/validation/n_number_minus_space_1.json create mode 100644 test/json/validation/n_number_neg_int_starting_with_zero.json create mode 100644 test/json/validation/n_number_neg_real_without_int_part.json create mode 100644 test/json/validation/n_number_neg_with_garbage_at_end.json create mode 100644 test/json/validation/n_number_real_garbage_after_e.json create mode 100644 test/json/validation/n_number_real_with_invalid_utf8_after_e.json create mode 100644 test/json/validation/n_number_real_without_fractional_part.json create mode 100644 test/json/validation/n_number_starting_with_dot.json create mode 100644 test/json/validation/n_number_with_alpha.json create mode 100644 test/json/validation/n_number_with_alpha_char.json create mode 100644 test/json/validation/n_number_with_leading_zero.json create mode 100644 test/json/validation/n_object_bad_value.json create mode 100644 test/json/validation/n_object_bracket_key.json create mode 100644 test/json/validation/n_object_comma_instead_of_colon.json create mode 100644 test/json/validation/n_object_double_colon.json create mode 100644 test/json/validation/n_object_emoji.json create mode 100644 test/json/validation/n_object_garbage_at_end.json create mode 100644 test/json/validation/n_object_key_with_single_quotes.json create mode 100644 test/json/validation/n_object_lone_continuation_byte_in_key_and_trailing_comma.json create mode 100644 test/json/validation/n_object_missing_colon.json create mode 100644 test/json/validation/n_object_missing_key.json create mode 100644 test/json/validation/n_object_missing_semicolon.json create mode 100644 test/json/validation/n_object_missing_value.json create mode 100644 test/json/validation/n_object_no-colon.json create mode 100644 test/json/validation/n_object_non_string_key.json create mode 100644 test/json/validation/n_object_non_string_key_but_huge_number_instead.json create mode 100644 test/json/validation/n_object_repeated_null_null.json create mode 100644 test/json/validation/n_object_several_trailing_commas.json create mode 100644 test/json/validation/n_object_single_quote.json create mode 100644 test/json/validation/n_object_trailing_comma.json create mode 100644 test/json/validation/n_object_trailing_comment.json create mode 100644 test/json/validation/n_object_trailing_comment_open.json create mode 100644 test/json/validation/n_object_trailing_comment_slash_open.json create mode 100644 test/json/validation/n_object_trailing_comment_slash_open_incomplete.json create mode 100644 test/json/validation/n_object_two_commas_in_a_row.json create mode 100644 test/json/validation/n_object_unquoted_key.json create mode 100644 test/json/validation/n_object_unterminated-value.json create mode 100644 test/json/validation/n_object_with_single_string.json create mode 100644 test/json/validation/n_object_with_trailing_garbage.json create mode 100644 test/json/validation/n_single_space.json create mode 100644 test/json/validation/n_string_1_surrogate_then_escape.json create mode 100644 test/json/validation/n_string_1_surrogate_then_escape_u.json create mode 100644 test/json/validation/n_string_1_surrogate_then_escape_u1.json create mode 100644 test/json/validation/n_string_1_surrogate_then_escape_u1x.json create mode 100644 test/json/validation/n_string_accentuated_char_no_quotes.json create mode 100644 test/json/validation/n_string_backslash_00.json create mode 100644 test/json/validation/n_string_escape_x.json create mode 100644 test/json/validation/n_string_escaped_backslash_bad.json create mode 100644 test/json/validation/n_string_escaped_ctrl_char_tab.json create mode 100644 test/json/validation/n_string_escaped_emoji.json create mode 100644 test/json/validation/n_string_incomplete_escape.json create mode 100644 test/json/validation/n_string_incomplete_escaped_character.json create mode 100644 test/json/validation/n_string_incomplete_surrogate.json create mode 100644 test/json/validation/n_string_incomplete_surrogate_escape_invalid.json create mode 100644 test/json/validation/n_string_invalid-utf-8-in-escape.json create mode 100644 test/json/validation/n_string_invalid_backslash_esc.json create mode 100644 test/json/validation/n_string_invalid_unicode_escape.json create mode 100644 test/json/validation/n_string_invalid_utf8_after_escape.json create mode 100644 test/json/validation/n_string_leading_uescaped_thinspace.json create mode 100644 test/json/validation/n_string_no_quotes_with_bad_escape.json create mode 100644 test/json/validation/n_string_single_doublequote.json create mode 100644 test/json/validation/n_string_single_quote.json create mode 100644 test/json/validation/n_string_single_string_no_double_quotes.json create mode 100644 test/json/validation/n_string_start_escape_unclosed.json create mode 100644 test/json/validation/n_string_unescaped_crtl_char.json create mode 100644 test/json/validation/n_string_unescaped_newline.json create mode 100644 test/json/validation/n_string_unescaped_tab.json create mode 100644 test/json/validation/n_string_unicode_CapitalU.json create mode 100644 test/json/validation/n_string_with_trailing_garbage.json create mode 100644 test/json/validation/n_structure_100000_opening_arrays.json create mode 100644 test/json/validation/n_structure_U+2060_word_joined.json create mode 100644 test/json/validation/n_structure_UTF8_BOM_no_data.json create mode 100644 test/json/validation/n_structure_angle_bracket_..json create mode 100644 test/json/validation/n_structure_angle_bracket_null.json create mode 100644 test/json/validation/n_structure_array_trailing_garbage.json create mode 100644 test/json/validation/n_structure_array_with_extra_array_close.json create mode 100644 test/json/validation/n_structure_array_with_unclosed_string.json create mode 100644 test/json/validation/n_structure_ascii-unicode-identifier.json create mode 100644 test/json/validation/n_structure_capitalized_True.json create mode 100644 test/json/validation/n_structure_close_unopened_array.json create mode 100644 test/json/validation/n_structure_comma_instead_of_closing_brace.json create mode 100644 test/json/validation/n_structure_double_array.json create mode 100644 test/json/validation/n_structure_end_array.json create mode 100644 test/json/validation/n_structure_incomplete_UTF8_BOM.json create mode 100644 test/json/validation/n_structure_lone-invalid-utf-8.json create mode 100644 test/json/validation/n_structure_lone-open-bracket.json create mode 100644 test/json/validation/n_structure_no_data.json create mode 100644 test/json/validation/n_structure_null-byte-outside-string.json create mode 100644 test/json/validation/n_structure_number_with_trailing_garbage.json create mode 100644 test/json/validation/n_structure_object_followed_by_closing_object.json create mode 100644 test/json/validation/n_structure_object_unclosed_no_value.json create mode 100644 test/json/validation/n_structure_object_with_comment.json create mode 100644 test/json/validation/n_structure_object_with_trailing_garbage.json create mode 100644 test/json/validation/n_structure_open_array_apostrophe.json create mode 100644 test/json/validation/n_structure_open_array_comma.json create mode 100644 test/json/validation/n_structure_open_array_object.json create mode 100644 test/json/validation/n_structure_open_array_open_object.json create mode 100644 test/json/validation/n_structure_open_array_open_string.json create mode 100644 test/json/validation/n_structure_open_array_string.json create mode 100644 test/json/validation/n_structure_open_object.json create mode 100644 test/json/validation/n_structure_open_object_close_array.json create mode 100644 test/json/validation/n_structure_open_object_comma.json create mode 100644 test/json/validation/n_structure_open_object_open_array.json create mode 100644 test/json/validation/n_structure_open_object_open_string.json create mode 100644 test/json/validation/n_structure_open_object_string_with_apostrophes.json create mode 100644 test/json/validation/n_structure_open_open.json create mode 100644 test/json/validation/n_structure_single_eacute.json create mode 100644 test/json/validation/n_structure_single_star.json create mode 100644 test/json/validation/n_structure_trailing_#.json create mode 100644 test/json/validation/n_structure_uescaped_LF_before_string.json create mode 100644 test/json/validation/n_structure_unclosed_array.json create mode 100644 test/json/validation/n_structure_unclosed_array_partial_null.json create mode 100644 test/json/validation/n_structure_unclosed_array_unfinished_false.json create mode 100644 test/json/validation/n_structure_unclosed_array_unfinished_true.json create mode 100644 test/json/validation/n_structure_unclosed_object.json create mode 100644 test/json/validation/n_structure_unicode-identifier.json create mode 100644 test/json/validation/n_structure_whitespace_U+2060_word_joiner.json create mode 100644 test/json/validation/n_structure_whitespace_formfeed.json create mode 100644 test/json/validation/y_array_arraysWithSpaces.json create mode 100644 test/json/validation/y_array_empty-string.json create mode 100644 test/json/validation/y_array_empty.json create mode 100644 test/json/validation/y_array_ending_with_newline.json create mode 100644 test/json/validation/y_array_false.json create mode 100644 test/json/validation/y_array_heterogeneous.json create mode 100644 test/json/validation/y_array_null.json create mode 100644 test/json/validation/y_array_with_1_and_newline.json create mode 100644 test/json/validation/y_array_with_leading_space.json create mode 100644 test/json/validation/y_array_with_several_null.json create mode 100644 test/json/validation/y_array_with_trailing_space.json create mode 100644 test/json/validation/y_number.json create mode 100644 test/json/validation/y_number_0e+1.json create mode 100644 test/json/validation/y_number_0e1.json create mode 100644 test/json/validation/y_number_after_space.json create mode 100644 test/json/validation/y_number_double_close_to_zero.json create mode 100644 test/json/validation/y_number_int_with_exp.json create mode 100644 test/json/validation/y_number_minus_zero.json create mode 100644 test/json/validation/y_number_negative_int.json create mode 100644 test/json/validation/y_number_negative_one.json create mode 100644 test/json/validation/y_number_negative_zero.json create mode 100644 test/json/validation/y_number_real_capital_e.json create mode 100644 test/json/validation/y_number_real_capital_e_neg_exp.json create mode 100644 test/json/validation/y_number_real_capital_e_pos_exp.json create mode 100644 test/json/validation/y_number_real_exponent.json create mode 100644 test/json/validation/y_number_real_fraction_exponent.json create mode 100644 test/json/validation/y_number_real_neg_exp.json create mode 100644 test/json/validation/y_number_real_pos_exponent.json create mode 100644 test/json/validation/y_number_simple_int.json create mode 100644 test/json/validation/y_number_simple_real.json create mode 100644 test/json/validation/y_object.json create mode 100644 test/json/validation/y_object_basic.json create mode 100644 test/json/validation/y_object_duplicated_key.json create mode 100644 test/json/validation/y_object_duplicated_key_and_value.json create mode 100644 test/json/validation/y_object_empty.json create mode 100644 test/json/validation/y_object_empty_key.json create mode 100644 test/json/validation/y_object_escaped_null_in_key.json create mode 100644 test/json/validation/y_object_extreme_numbers.json create mode 100644 test/json/validation/y_object_long_strings.json create mode 100644 test/json/validation/y_object_simple.json create mode 100644 test/json/validation/y_object_string_unicode.json create mode 100644 test/json/validation/y_object_with_newlines.json create mode 100644 test/json/validation/y_string_1_2_3_bytes_UTF-8_sequences.json create mode 100644 test/json/validation/y_string_accepted_surrogate_pair.json create mode 100644 test/json/validation/y_string_accepted_surrogate_pairs.json create mode 100644 test/json/validation/y_string_allowed_escapes.json create mode 100644 test/json/validation/y_string_backslash_and_u_escaped_zero.json create mode 100644 test/json/validation/y_string_backslash_doublequotes.json create mode 100644 test/json/validation/y_string_comments.json create mode 100644 test/json/validation/y_string_double_escape_a.json create mode 100644 test/json/validation/y_string_double_escape_n.json create mode 100644 test/json/validation/y_string_escaped_control_character.json create mode 100644 test/json/validation/y_string_escaped_noncharacter.json create mode 100644 test/json/validation/y_string_in_array.json create mode 100644 test/json/validation/y_string_in_array_with_leading_space.json create mode 100644 test/json/validation/y_string_last_surrogates_1_and_2.json create mode 100644 test/json/validation/y_string_nbsp_uescaped.json create mode 100644 test/json/validation/y_string_nonCharacterInUTF-8_U+10FFFF.json create mode 100644 test/json/validation/y_string_nonCharacterInUTF-8_U+FFFF.json create mode 100644 test/json/validation/y_string_null_escape.json create mode 100644 test/json/validation/y_string_one-byte-utf-8.json create mode 100644 test/json/validation/y_string_pi.json create mode 100644 test/json/validation/y_string_reservedCharacterInUTF-8_U+1BFFF.json create mode 100644 test/json/validation/y_string_simple_ascii.json create mode 100644 test/json/validation/y_string_space.json create mode 100644 test/json/validation/y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json create mode 100644 test/json/validation/y_string_three-byte-utf-8.json create mode 100644 test/json/validation/y_string_two-byte-utf-8.json create mode 100644 test/json/validation/y_string_u+2028_line_sep.json create mode 100644 test/json/validation/y_string_u+2029_par_sep.json create mode 100644 test/json/validation/y_string_uEscape.json create mode 100644 test/json/validation/y_string_uescaped_newline.json create mode 100644 test/json/validation/y_string_unescaped_char_delete.json create mode 100644 test/json/validation/y_string_unicode.json create mode 100644 test/json/validation/y_string_unicodeEscapedBackslash.json create mode 100644 test/json/validation/y_string_unicode_2.json create mode 100644 test/json/validation/y_string_unicode_U+10FFFE_nonchar.json create mode 100644 test/json/validation/y_string_unicode_U+1FFFE_nonchar.json create mode 100644 test/json/validation/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json create mode 100644 test/json/validation/y_string_unicode_U+2064_invisible_plus.json create mode 100644 test/json/validation/y_string_unicode_U+FDD0_nonchar.json create mode 100644 test/json/validation/y_string_unicode_U+FFFE_nonchar.json create mode 100644 test/json/validation/y_string_unicode_escaped_double_quote.json create mode 100644 test/json/validation/y_string_utf8.json create mode 100644 test/json/validation/y_string_with_del_character.json create mode 100644 test/json/validation/y_structure_lonely_false.json create mode 100644 test/json/validation/y_structure_lonely_int.json create mode 100644 test/json/validation/y_structure_lonely_negative_real.json create mode 100644 test/json/validation/y_structure_lonely_null.json create mode 100644 test/json/validation/y_structure_lonely_string.json create mode 100644 test/json/validation/y_structure_lonely_true.json create mode 100644 test/json/validation/y_structure_string_empty.json create mode 100644 test/json/validation/y_structure_trailing_newline.json create mode 100644 test/json/validation/y_structure_true_in_array.json create mode 100644 test/json/validation/y_structure_whitespace_array.json create mode 100644 test/ods/borders/grid-box.ods create mode 100644 test/ods/borders/single-cells.ods create mode 100644 test/ods/cell-properties/wrap-and-shrink.ods create mode 100644 test/ods/column-width-row-height/input.ods create mode 100644 test/ods/date-cell/input.ods create mode 100644 test/ods/formatted-text/bold-and-italic.ods create mode 100644 test/ods/formula-1/check.txt create mode 100644 test/ods/formula-1/input.ods create mode 100644 test/ods/formula-2/check.txt create mode 100644 test/ods/formula-2/input.ods create mode 100644 test/ods/import-styles/cell-protection.xml create mode 100644 test/ods/import-styles/cell-styles.xml create mode 100644 test/ods/import-styles/standard-styles.xml create mode 100644 test/ods/japanese.ods create mode 100644 test/ods/named-expression-sheet-local/check.txt create mode 100644 test/ods/named-expression-sheet-local/input.ods create mode 100644 test/ods/named-expression/check.txt create mode 100644 test/ods/named-expression/input.ods create mode 100644 test/ods/named-range/check.txt create mode 100644 test/ods/named-range/input.ods create mode 100644 test/ods/number-format/basic-set.ods create mode 100644 test/ods/raw-values-1/check.txt create mode 100644 test/ods/raw-values-1/input.ods create mode 100644 test/ods/styles/asian-complex.ods create mode 100644 test/ods/styles/column-styles.ods create mode 100644 test/ods/styles/direct-format.ods create mode 100644 test/ods/styles/text-underlines.ods create mode 100644 test/ods/test.ods create mode 100644 test/parquet/basic/basic-gzip.parquet create mode 100644 test/parquet/basic/basic-gzip.parquet.check create mode 100644 test/parquet/basic/basic-nocomp.parquet create mode 100644 test/parquet/basic/basic-nocomp.parquet.check create mode 100644 test/parquet/basic/basic-snappy.parquet create mode 100644 test/parquet/basic/basic-snappy.parquet.check create mode 100644 test/parquet/basic/basic-zstd.parquet create mode 100644 test/parquet/basic/basic-zstd.parquet.check create mode 100644 test/parquet/basic/float-with-nan.parquet create mode 100644 test/parquet/basic/float-with-nan.parquet.check create mode 100644 test/python/env.json.in create mode 100644 test/python/file_load_common.py create mode 100755 test/python/perf/test_json.py create mode 100755 test/python/test_csv.py create mode 100755 test/python/test_csv_export.py create mode 100755 test/python/test_gnumeric.py create mode 100755 test/python/test_json.py create mode 100755 test/python/test_module.py create mode 100755 test/python/test_ods.py create mode 100755 test/python/test_xls_xml.py create mode 100755 test/python/test_xlsx.py create mode 100644 test/xls-xml/background-color/standard.xml create mode 100644 test/xls-xml/basic-utf-16-be/check.txt create mode 100644 test/xls-xml/basic-utf-16-be/input.xml create mode 100644 test/xls-xml/basic-utf-16-le/check.txt create mode 100644 test/xls-xml/basic-utf-16-le/input.xml create mode 100644 test/xls-xml/basic/check.txt create mode 100644 test/xls-xml/basic/input.xml create mode 100644 test/xls-xml/bold-and-italic/check.txt create mode 100644 test/xls-xml/bold-and-italic/input.xml create mode 100644 test/xls-xml/borders/colors.xml create mode 100644 test/xls-xml/borders/directions.xml create mode 100644 test/xls-xml/borders/grid-box.xml create mode 100644 test/xls-xml/borders/single-cells.xml create mode 100644 test/xls-xml/cell-properties/default-style.xml create mode 100644 test/xls-xml/cell-properties/locked-and-hidden.xml create mode 100644 test/xls-xml/cell-properties/wrap-and-shrink.xml create mode 100644 test/xls-xml/character-set/input.xml create mode 100644 test/xls-xml/colored-text/check.txt create mode 100644 test/xls-xml/colored-text/input.xml create mode 100644 test/xls-xml/column-width-row-height/input.xml create mode 100644 test/xls-xml/date-time/input.xml create mode 100644 test/xls-xml/double-bom/input.xml create mode 100644 test/xls-xml/empty-rows/check.txt create mode 100644 test/xls-xml/empty-rows/input.xml create mode 100644 test/xls-xml/formatted-text/basic.xml create mode 100644 test/xls-xml/formula-array-1/check.txt create mode 100644 test/xls-xml/formula-array-1/input.xml create mode 100644 test/xls-xml/formula-cells-1/check.txt create mode 100644 test/xls-xml/formula-cells-1/input.xml create mode 100644 test/xls-xml/formula-cells-2/check.txt create mode 100644 test/xls-xml/formula-cells-2/config.yaml create mode 100644 test/xls-xml/formula-cells-2/input.xml create mode 100644 test/xls-xml/formula-cells-3/check.txt create mode 100644 test/xls-xml/formula-cells-3/input.xml create mode 100644 test/xls-xml/formula-cells-parse-error/input.xml create mode 100644 test/xls-xml/hidden-rows-columns/input.xml create mode 100644 test/xls-xml/invalid-sub-structure/check.txt create mode 100644 test/xls-xml/invalid-sub-structure/input.xml create mode 100644 test/xls-xml/leading-whitespace/check.txt create mode 100644 test/xls-xml/leading-whitespace/input.xml create mode 100644 test/xls-xml/matrix-results/input.xml create mode 100644 test/xls-xml/merged-cells/check.txt create mode 100644 test/xls-xml/merged-cells/input.xml create mode 100644 test/xls-xml/named-colors/check.txt create mode 100644 test/xls-xml/named-colors/input-upper.xml create mode 100644 test/xls-xml/named-colors/input.xml create mode 100755 test/xls-xml/named-colors/run.py create mode 100644 test/xls-xml/named-colors/saved-by-excel.xml create mode 100644 test/xls-xml/named-expression-sheet-local/check.txt create mode 100644 test/xls-xml/named-expression-sheet-local/input.xml create mode 100644 test/xls-xml/named-expression/check.txt create mode 100644 test/xls-xml/named-expression/input.xml create mode 100644 test/xls-xml/number-format/date-time.xml create mode 100644 test/xls-xml/raw-values-1/check.txt create mode 100644 test/xls-xml/raw-values-1/input.xml create mode 100644 test/xls-xml/styles/column-styles.xml create mode 100644 test/xls-xml/styles/data-offset.xml create mode 100644 test/xls-xml/styles/direct-format.xml create mode 100644 test/xls-xml/table-offset/check.txt create mode 100644 test/xls-xml/table-offset/input.xml create mode 100644 test/xls-xml/table/autofilter.xml create mode 100644 test/xls-xml/text-alignment/input.xml create mode 100644 test/xls-xml/unnamed-parent-styles/check.txt create mode 100644 test/xls-xml/unnamed-parent-styles/input.xml create mode 100644 test/xls-xml/view/cursor-per-sheet.xml create mode 100644 test/xls-xml/view/cursor-split-pane.xml create mode 100644 test/xls-xml/view/frozen-pane.xml create mode 100644 test/xlsx/background-color/standard.xlsx create mode 100644 test/xlsx/boolean-values/check.txt create mode 100644 test/xlsx/boolean-values/input.xlsx create mode 100644 test/xlsx/borders/colors.xlsx create mode 100644 test/xlsx/borders/directions.xlsx create mode 100644 test/xlsx/borders/grid-box.xlsx create mode 100644 test/xlsx/borders/single-cells.xlsx create mode 100644 test/xlsx/cell-properties/wrap-and-shrink.xlsx create mode 100644 test/xlsx/column-width-row-height/input.xlsx create mode 100644 test/xlsx/conditional-format/basic.xlsx create mode 100644 test/xlsx/conditional-format/data-bars.xlsx create mode 100644 test/xlsx/data-table/multi-table.xlsx create mode 100644 test/xlsx/data-table/one-variable.xlsx create mode 100644 test/xlsx/date-cell/input.xlsx create mode 100644 test/xlsx/date-time/input.xlsx create mode 100644 test/xlsx/doc-structure/unordered-sheet-positions.xlsx create mode 100644 test/xlsx/empty-shared-strings/check.txt create mode 100644 test/xlsx/empty-shared-strings/input.xlsx create mode 100644 test/xlsx/formatted-text/basic.xlsx create mode 100644 test/xlsx/formatted-text/bold-and-italic.xlsx create mode 100644 test/xlsx/formatted-text/colored-text.xlsx create mode 100644 test/xlsx/formula-array-1/check.txt create mode 100644 test/xlsx/formula-array-1/input.xlsx create mode 100644 test/xlsx/formula-cells/check.txt create mode 100644 test/xlsx/formula-cells/input.xlsx create mode 100644 test/xlsx/formula-shared/check.txt create mode 100644 test/xlsx/formula-shared/input.xlsx create mode 100644 test/xlsx/formula-simple.xlsx create mode 100644 test/xlsx/formula-with-string-results/check.txt create mode 100644 test/xlsx/formula-with-string-results/input.xlsx create mode 100644 test/xlsx/hidden-rows-columns/input.xlsx create mode 100644 test/xlsx/matrix-results/input.xlsx create mode 100644 test/xlsx/merged-cells/simple.xlsx create mode 100755 test/xlsx/named-expression-relative/input.xlsx create mode 100644 test/xlsx/named-expression-sheet-local/check.txt create mode 100644 test/xlsx/named-expression-sheet-local/input.xlsx create mode 100644 test/xlsx/named-expression/check.txt create mode 100644 test/xlsx/named-expression/input.xlsx create mode 100644 test/xlsx/number-format/date-time.xlsx create mode 100644 test/xlsx/pivot-table/chart-simple.xlsx create mode 100644 test/xlsx/pivot-table/error-values.xlsx create mode 100644 test/xlsx/pivot-table/group-by-dates.xlsx create mode 100644 test/xlsx/pivot-table/group-by-numbers.xlsx create mode 100644 test/xlsx/pivot-table/group-field.xlsx create mode 100644 test/xlsx/pivot-table/many-fields.xlsx create mode 100644 test/xlsx/pivot-table/mixed-type-field.xlsx create mode 100644 test/xlsx/pivot-table/three-pivot-tables-on-one-sheet.xlsx create mode 100644 test/xlsx/pivot-table/two-pivot-caches.xlsx create mode 100644 test/xlsx/pivot-table/two-tables-one-source.xlsx create mode 100644 test/xlsx/raw-values-1/check.txt create mode 100644 test/xlsx/raw-values-1/input.xlsx create mode 100755 test/xlsx/revision/cell-change-basic.xlsx create mode 100644 test/xlsx/styles/column-styles.xlsx create mode 100644 test/xlsx/styles/direct-format.xlsx create mode 100644 test/xlsx/table/autofilter-text-filter-1.xlsx create mode 100644 test/xlsx/table/autofilter.xlsx create mode 100644 test/xlsx/table/table-1.xlsx create mode 100644 test/xlsx/table/table-2.xlsx create mode 100644 test/xlsx/test.xlsx create mode 100644 test/xlsx/text-alignment/input.xlsx create mode 100644 test/xlsx/view/cursor-per-sheet.xlsx create mode 100644 test/xlsx/view/cursor-split-pane.xlsx create mode 100644 test/xlsx/view/frozen-pane.xlsx create mode 100644 test/xml-mapped/attribute-basic/check-nomap.txt create mode 100644 test/xml-mapped/attribute-basic/check.txt create mode 100644 test/xml-mapped/attribute-basic/input.xml create mode 100644 test/xml-mapped/attribute-basic/map.xml create mode 100644 test/xml-mapped/attribute-namespace-2/check-nomap.txt create mode 100644 test/xml-mapped/attribute-namespace-2/check.txt create mode 100644 test/xml-mapped/attribute-namespace-2/input.xml create mode 100644 test/xml-mapped/attribute-namespace-2/map.xml create mode 100644 test/xml-mapped/attribute-namespace/check-nomap.txt create mode 100644 test/xml-mapped/attribute-namespace/check.txt create mode 100644 test/xml-mapped/attribute-namespace/input.xml create mode 100644 test/xml-mapped/attribute-namespace/map.xml create mode 100644 test/xml-mapped/attribute-range-self-close/check-nomap.txt create mode 100644 test/xml-mapped/attribute-range-self-close/check.txt create mode 100644 test/xml-mapped/attribute-range-self-close/input.xml create mode 100644 test/xml-mapped/attribute-range-self-close/map.xml create mode 100644 test/xml-mapped/attribute-single-element-2/check.txt create mode 100644 test/xml-mapped/attribute-single-element-2/input.xml create mode 100644 test/xml-mapped/attribute-single-element-2/map.xml create mode 100644 test/xml-mapped/attribute-single-element/check.txt create mode 100644 test/xml-mapped/attribute-single-element/input.xml create mode 100644 test/xml-mapped/attribute-single-element/map.xml create mode 100644 test/xml-mapped/content-basic/check-nomap.txt create mode 100644 test/xml-mapped/content-basic/check.txt create mode 100644 test/xml-mapped/content-basic/input.xml create mode 100644 test/xml-mapped/content-basic/map.xml create mode 100644 test/xml-mapped/content-namespace-2/check-nomap.txt create mode 100644 test/xml-mapped/content-namespace-2/check.txt create mode 100644 test/xml-mapped/content-namespace-2/input.xml create mode 100644 test/xml-mapped/content-namespace-2/map.xml create mode 100644 test/xml-mapped/content-namespace-3/check-nomap.txt create mode 100644 test/xml-mapped/content-namespace-3/check.txt create mode 100644 test/xml-mapped/content-namespace-3/input.xml create mode 100644 test/xml-mapped/content-namespace-3/map.xml create mode 100644 test/xml-mapped/content-namespace/check-nomap.txt create mode 100644 test/xml-mapped/content-namespace/check.txt create mode 100644 test/xml-mapped/content-namespace/input.xml create mode 100644 test/xml-mapped/content-namespace/map.xml create mode 100644 test/xml-mapped/content-one-column/check-nomap.txt create mode 100644 test/xml-mapped/content-one-column/input.xml create mode 100644 test/xml-mapped/custom-labels-2/check.txt create mode 100644 test/xml-mapped/custom-labels-2/input.xml create mode 100644 test/xml-mapped/custom-labels-2/map.xml create mode 100644 test/xml-mapped/custom-labels/check.txt create mode 100644 test/xml-mapped/custom-labels/input.xml create mode 100644 test/xml-mapped/custom-labels/map.xml create mode 100644 test/xml-mapped/encoding/euc-jp.xml create mode 100644 test/xml-mapped/encoding/gbk.xml create mode 100644 test/xml-mapped/encoding/utf-8.xml create mode 100644 test/xml-mapped/fuel-economy/check-nomap.txt create mode 100644 test/xml-mapped/fuel-economy/check.txt create mode 100644 test/xml-mapped/fuel-economy/input.xml create mode 100644 test/xml-mapped/fuel-economy/map.xml create mode 100644 test/xml-mapped/invalids/map-defs/non-leaf-element-linked.xml create mode 100644 test/xml-mapped/invalids/map-defs/not-xml.xml create mode 100644 test/xml-mapped/nested-repeats-2/check-nomap.txt create mode 100644 test/xml-mapped/nested-repeats-2/check.txt create mode 100644 test/xml-mapped/nested-repeats-2/input.xml create mode 100644 test/xml-mapped/nested-repeats-2/map.xml create mode 100644 test/xml-mapped/nested-repeats-3/check-nomap.txt create mode 100644 test/xml-mapped/nested-repeats-3/check.txt create mode 100644 test/xml-mapped/nested-repeats-3/input.xml create mode 100644 test/xml-mapped/nested-repeats-3/map.xml create mode 100644 test/xml-mapped/nested-repeats-4/check-nomap.txt create mode 100644 test/xml-mapped/nested-repeats-4/check.txt create mode 100644 test/xml-mapped/nested-repeats-4/input.xml create mode 100644 test/xml-mapped/nested-repeats-4/map.xml create mode 100644 test/xml-mapped/nested-repeats/check-nomap.txt create mode 100644 test/xml-mapped/nested-repeats/check.txt create mode 100644 test/xml-mapped/nested-repeats/input.xml create mode 100644 test/xml-mapped/nested-repeats/map.xml create mode 100644 test/xml-structure/attribute-1/check.txt create mode 100644 test/xml-structure/attribute-1/input.xml create mode 100644 test/xml-structure/basic-1/check.txt create mode 100644 test/xml-structure/basic-1/input.xml create mode 100644 test/xml-structure/basic-2/check.txt create mode 100644 test/xml-structure/basic-2/input.xml create mode 100644 test/xml-structure/basic-3/check.txt create mode 100644 test/xml-structure/basic-3/input.xml create mode 100644 test/xml-structure/namespace-default/check.txt create mode 100644 test/xml-structure/namespace-default/input.xml create mode 100644 test/xml-structure/nested-repeat-1/check.txt create mode 100644 test/xml-structure/nested-repeat-1/input.xml create mode 100644 test/xml/bom/check.txt create mode 100644 test/xml/bom/input.xml create mode 100644 test/xml/cdata-1/check.txt create mode 100644 test/xml/cdata-1/input.xml create mode 100644 test/xml/custom-decl-1/check.txt create mode 100644 test/xml/custom-decl-1/input.xml create mode 100644 test/xml/default-ns/check.txt create mode 100644 test/xml/default-ns/input.xml create mode 100644 test/xml/doctype/html.xml create mode 100644 test/xml/encoded-attrs/test1.xml create mode 100644 test/xml/encoded-char/check.txt create mode 100644 test/xml/encoded-char/input.xml create mode 100644 test/xml/invalids/double-boms-and-invalid-byte.xml create mode 100644 test/xml/invalids/only-bom.xml create mode 100644 test/xml/invalids/only-double-boms.xml create mode 100644 test/xml/invalids/partial-attr-value-with-encoding-char.xml create mode 100644 test/xml/invalids/partial-open-element.xml create mode 100644 test/xml/no-decl-1/check.txt create mode 100644 test/xml/no-decl-1/input.xml create mode 100644 test/xml/ns-alias-1/check.txt create mode 100644 test/xml/ns-alias-1/input.xml create mode 100644 test/xml/osm/street-in-aizu.osm create mode 100644 test/xml/parse-only/rss/input.xml create mode 100644 test/xml/self-closing-root/check.txt create mode 100644 test/xml/self-closing-root/input.xml create mode 100644 test/xml/simple/check.txt create mode 100644 test/xml/simple/input.xml create mode 100644 test/xml/single-quote/check.txt create mode 100644 test/xml/single-quote/input.xml create mode 100644 test/xml/underscore-identifier/check.txt create mode 100644 test/xml/underscore-identifier/input.xml create mode 100644 test/xml/utf8-1/check.txt create mode 100644 test/xml/utf8-1/input.xml create mode 100644 test/xml/utf8-2/check.txt create mode 100644 test/xml/utf8-2/input.xml create mode 100644 test/xml/valids/double-boms.xml create mode 100644 test/yaml/basic1/input.yaml create mode 100644 test/yaml/basic2/input.yaml create mode 100644 test/yaml/basic3/input.yaml create mode 100644 test/yaml/boolean/input.yaml create mode 100644 test/yaml/empty-value-map-1/input.yaml create mode 100644 test/yaml/empty-value-map-2/input.yaml create mode 100644 test/yaml/empty-value-sequence-1/input.yaml create mode 100644 test/yaml/empty-value-sequence-2/input.yaml create mode 100644 test/yaml/invalids/1.yaml create mode 100644 test/yaml/invalids/2.yaml create mode 100644 test/yaml/invalids/3.yaml create mode 100644 test/yaml/literal-block-1/input.yaml create mode 100644 test/yaml/literal-block-2/input.yaml create mode 100644 test/yaml/map-key-1/input.yaml create mode 100644 test/yaml/multi-line-1/input.yaml create mode 100644 test/yaml/multi-line-2/input.yaml create mode 100644 test/yaml/null/input.yaml create mode 100644 test/yaml/quoted-string/input.yaml create mode 100644 test/yaml/swagger/input.yaml create mode 100644 test/yaml/url/input.yaml (limited to 'test') diff --git a/test/css/basic1.css b/test/css/basic1.css new file mode 100644 index 0000000..0295549 --- /dev/null +++ b/test/css/basic1.css @@ -0,0 +1,16 @@ + + */ + +table { + width: auto; + height: 500px; +} + +td { + color: gray; + background-color: yellow; +} + +--> diff --git a/test/css/basic10.css b/test/css/basic10.css new file mode 100644 index 0000000..a4112f9 --- /dev/null +++ b/test/css/basic10.css @@ -0,0 +1,7 @@ + +/* function as property value */ +.foo { + background-color: rgb(12, 230, 222); + border: solid 5px rgba(30, 12, 0, 0.79); +} + diff --git a/test/css/basic11.css b/test/css/basic11.css new file mode 100644 index 0000000..bc0f6fe --- /dev/null +++ b/test/css/basic11.css @@ -0,0 +1,8 @@ + +.callout::before { + content: ""; + width: 0px; + height: 0px; + border: 0.8em solid transparent; + position: absolute; +} diff --git a/test/css/basic12.css b/test/css/basic12.css new file mode 100644 index 0000000..d5426cc --- /dev/null +++ b/test/css/basic12.css @@ -0,0 +1,19 @@ + +div { + background-image: url("https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png"); +} + +p { + background-image: none; +} + +div.img1 { + background-image: url('http://www.rabiakhan.com/Gallery/background.jpg'); +} + +div.img2 { + background-image: url( + http://www.tgraphic.com/userimages/Gallery/Backgrounds/TGraphic_com-Full-Wallpapers-Backgrounds_Colorful_C_1920_33.jpg + ); +} + diff --git a/test/css/basic13.css b/test/css/basic13.css new file mode 100644 index 0000000..1bc0757 --- /dev/null +++ b/test/css/basic13.css @@ -0,0 +1,6 @@ + +#p1 {background-color: hsl(120, 100%, 50%);} /* green */ +#p2 {background-color: hsl(120, 100%, 75%);} /* light green */ +#p3 {background-color: hsl(120, 100%, 25%);} /* dark green */ +#p4 {background-color: hsl(120, 60%, 70%);} /* pastel green */ + diff --git a/test/css/basic14.css b/test/css/basic14.css new file mode 100644 index 0000000..2007cc7 --- /dev/null +++ b/test/css/basic14.css @@ -0,0 +1,5 @@ + +#p1 {background-color: hsla(120, 100%, 50%, 0.3);} /* green with opacity */ +#p2 {background-color: hsla(120, 100%, 75%, 0.3);} /* light green with opacity */ +#p3 {background-color: hsla(120, 100%, 25%, 0.3);} /* dark green with opacity */ +#p4 {background-color: hsla(120, 60%, 70%, 0.3);} /* pastel green with opacity */ diff --git a/test/css/basic2.css b/test/css/basic2.css new file mode 100644 index 0000000..81efee6 --- /dev/null +++ b/test/css/basic2.css @@ -0,0 +1,10 @@ +/* selectors with class */ + +div.foo { border: solid 1px; } + +.warning +/* warning for all elements */ +{ + background-color: red; + font-weight: 900; +} diff --git a/test/css/basic3.css b/test/css/basic3.css new file mode 100644 index 0000000..1a43f6d --- /dev/null +++ b/test/css/basic3.css @@ -0,0 +1,10 @@ +/* Grouped selectors */ +html, body { + height: 100%; /* This equals height of browser's inner window size. */ +} + +h1, h2, h3, h4 { + font-variant: small-caps; + padding: 2.5em; +} + diff --git a/test/css/basic4.css b/test/css/basic4.css new file mode 100644 index 0000000..3972d91 --- /dev/null +++ b/test/css/basic4.css @@ -0,0 +1,6 @@ +h1 { margin: 0.5in } /* inches */ +h2 { line-height: 3cm } /* centimeters */ +h3 { word-spacing: 4mm } /* millimeters */ +h4 { font-size: 12pt } /* points */ +h4 { font-size: 1pc } /* picas */ +p { font-size: 12px } /* px */ diff --git a/test/css/basic5.css b/test/css/basic5.css new file mode 100644 index 0000000..511803a --- /dev/null +++ b/test/css/basic5.css @@ -0,0 +1,7 @@ +/* Handling of comments */ + +/**/ .info/*--*/{/**/ +/*!!!!*/ word-spacing /**/: /**/normal/**/;/**/ +}/**/ + +/* end */ diff --git a/test/css/basic6.css b/test/css/basic6.css new file mode 100644 index 0000000..ad55e6d --- /dev/null +++ b/test/css/basic6.css @@ -0,0 +1,8 @@ +/* ID selector */ +h1#chapter1 { text-align: center } + +h1#z98y { letter-spacing: 0.5em } + +#id_global { + margin: 10px; +} diff --git a/test/css/basic7.css b/test/css/basic7.css new file mode 100644 index 0000000..9e857b5 --- /dev/null +++ b/test/css/basic7.css @@ -0,0 +1,26 @@ +/* selector with multiple classes */ + +.one.two.three { + color: blue; +} + +.one { + color: aqua; +} + +.two { + color: azure; +} + +.one.two { + color: brown; +} + +span.button.selected { + border: solid 4px red; +} + +span.button { + border: solid 1px gray; +} + diff --git a/test/css/basic8.css b/test/css/basic8.css new file mode 100644 index 0000000..f467bef --- /dev/null +++ b/test/css/basic8.css @@ -0,0 +1,15 @@ + +.ribbon { + background-color: #5BC8F7; +} + +.ribbon::after { + content: "Look at this orange box."; + background-color: #FFBA10; + border-color: black; + border-style: dotted; +} + +.ribbon::after::selection { + content: 'Selected orange box.'; +} diff --git a/test/css/basic9.css b/test/css/basic9.css new file mode 100644 index 0000000..cb26aff --- /dev/null +++ b/test/css/basic9.css @@ -0,0 +1,20 @@ +/* unvisited link */ +a:link { + color: #FF0000; +} + +/* visited link */ +a:visited { + color: #00FF00; +} + +/* mouse over link */ +a:hover { + color: #FF00FF; +} + +/* selected link */ +a:active { + color: #0000FF; +} + diff --git a/test/css/chained1.css b/test/css/chained1.css new file mode 100644 index 0000000..3b4dcae --- /dev/null +++ b/test/css/chained1.css @@ -0,0 +1,15 @@ +/* descendant selector */ +div p { + background-color: yellow; +} + +/* direct child */ +div > p { + background-color: blue; +} + +/* next sibling */ +div + p { + background-color: red; +} + diff --git a/test/css/chained2.css b/test/css/chained2.css new file mode 100644 index 0000000..7bcbc6e --- /dev/null +++ b/test/css/chained2.css @@ -0,0 +1,6 @@ + +/* selector with 3 chained simple selectors */ +#id1 table.data td { + background-color: aquamarine; + border: solid 2px; +} diff --git a/test/css/complex/callout.css b/test/css/complex/callout.css new file mode 100644 index 0000000..e6c7c36 --- /dev/null +++ b/test/css/complex/callout.css @@ -0,0 +1,71 @@ + +body { + font-family: Helvetica; + font-size: 13px; +} + +div.callout { + height: 60px; + width: 200px; + float: left; +} + +div.callout { + background-color: #444; + background-image: -moz-linear-gradient(top, #444, #444); + position: relative; + color: #ccc; + padding: 10px; + border-radius: 3px; + box-shadow: 0px 0px 20px #999; + margin: 25px; + min-height: 50px; + border: 1px solid #333; + text-shadow: 0 0 1px #000; + + /*box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset;*/ +} + +.callout::before { + content: ""; + width: 0px; + height: 0px; + border: 0.8em solid transparent; + position: absolute; +} + +.callout.top::before { + left: 60%; + bottom: -20px; + border-top: 10px solid #444; +} + +.callout.bottom::before { + left: 45%; + top: -20px; + border-bottom: 10px solid #444; +} + +.callout.left::before { + right: -20px; + top: 40%; + border-left: 10px solid #444; +} + +.callout.right::before { + left: -20px; + top: 40%; + border-right: 10px solid #444; +} + +.callout.top-left::before { + left: 7px; + bottom: -20px; + border-top: 10px solid #444; +} + +.callout.top-right::before { + right: 7px; + bottom: -20px; + border-top: 10px solid #444; +} diff --git a/test/css/complex/excel-html.css b/test/css/complex/excel-html.css new file mode 100644 index 0000000..6bf7886 --- /dev/null +++ b/test/css/complex/excel-html.css @@ -0,0 +1,103 @@ + diff --git a/test/css/empty.css b/test/css/empty.css new file mode 100644 index 0000000..1a4baf5 --- /dev/null +++ b/test/css/empty.css @@ -0,0 +1 @@ + diff --git a/test/css/invalids/1.css b/test/css/invalids/1.css new file mode 100644 index 0000000..60a648c --- /dev/null +++ b/test/css/invalids/1.css @@ -0,0 +1,7 @@ + + + + + + + diff --git a/test/css/test.css b/test/css/test.css new file mode 100644 index 0000000..4ec1e86 --- /dev/null +++ b/test/css/test.css @@ -0,0 +1,15 @@ + + + + + + + diff --git a/test/css/utf8-1.css b/test/css/utf8-1.css new file mode 100644 index 0000000..1a509eb --- /dev/null +++ b/test/css/utf8-1.css @@ -0,0 +1,13 @@ + +.style17 + {mso-pattern:auto none; + background:#EDEDED; + color:#000000; + font-size:11.0pt; + font-weight:400; + font-style:normal; + text-decoration:none; + font-family:宋体; + mso-generic-font-family:auto; + mso-font-charset:0; + mso-style-name:"20% - 强调文字颜色 3";} diff --git a/test/csv/double-quotes/check.txt b/test/csv/double-quotes/check.txt new file mode 100644 index 0000000..7bf03e1 --- /dev/null +++ b/test/csv/double-quotes/check.txt @@ -0,0 +1,6 @@ +data/0/0:string:"\"single literal quote\"" +data/0/1:string:"\"\"double literal quote\"\"" +data/0/2:string:"\"\"\"triple literal quote\"\"\"" +data/1/0:numeric:1 +data/1/1:numeric:2 +data/1/2:numeric:3 diff --git a/test/csv/double-quotes/input.csv b/test/csv/double-quotes/input.csv new file mode 100644 index 0000000..3c8ee50 --- /dev/null +++ b/test/csv/double-quotes/input.csv @@ -0,0 +1,3 @@ +"""single literal quote""","""""double literal quote""""","""""""triple literal quote""""""" +1,2,3 + diff --git a/test/csv/normal-quotes/check.txt b/test/csv/normal-quotes/check.txt new file mode 100644 index 0000000..dc3f207 --- /dev/null +++ b/test/csv/normal-quotes/check.txt @@ -0,0 +1,6 @@ +data/0/0:string:"normal quote" +data/0/1:string:" not quoted" +data/0/2:string:" \"and other quoted cells\"" +data/1/0:string:"not quoted" +data/1/1:string:" \"quoted\"" +data/1/2:string:" and so on...." diff --git a/test/csv/normal-quotes/input.csv b/test/csv/normal-quotes/input.csv new file mode 100644 index 0000000..f600712 --- /dev/null +++ b/test/csv/normal-quotes/input.csv @@ -0,0 +1,2 @@ +"normal quote", not quoted, "and other quoted cells" +not quoted, "quoted", and so on.... diff --git a/test/csv/quoted-with-delim/check.txt b/test/csv/quoted-with-delim/check.txt new file mode 100644 index 0000000..dd594fe --- /dev/null +++ b/test/csv/quoted-with-delim/check.txt @@ -0,0 +1,2 @@ +data/0/0:string:"This is a single normal quoted cell, and contains a delimiter." +data/0/1:string:"next cell" diff --git a/test/csv/quoted-with-delim/input.csv b/test/csv/quoted-with-delim/input.csv new file mode 100644 index 0000000..d7114cf --- /dev/null +++ b/test/csv/quoted-with-delim/input.csv @@ -0,0 +1 @@ +"This is a single normal quoted cell, and contains a delimiter.",next cell diff --git a/test/csv/simple-numbers/check.txt b/test/csv/simple-numbers/check.txt new file mode 100644 index 0000000..0c5a816 --- /dev/null +++ b/test/csv/simple-numbers/check.txt @@ -0,0 +1,11 @@ +data/0/0:numeric:1 +data/0/1:numeric:2 +data/0/2:numeric:3 +data/0/3:numeric:4 +data/0/4:numeric:5 +data/1/0:numeric:6 +data/1/1:numeric:7 +data/1/2:numeric:8 +data/1/3:numeric:9 +data/1/4:numeric:10 +data/3/0:numeric:11 diff --git a/test/csv/simple-numbers/input.csv b/test/csv/simple-numbers/input.csv new file mode 100644 index 0000000..e8712bc --- /dev/null +++ b/test/csv/simple-numbers/input.csv @@ -0,0 +1,5 @@ +1,2,3,4,5 +6,7,8,9,10 + +11 + diff --git a/test/csv/split-sheet/check-1.txt b/test/csv/split-sheet/check-1.txt new file mode 100644 index 0000000..7eae1fb --- /dev/null +++ b/test/csv/split-sheet/check-1.txt @@ -0,0 +1,42 @@ +data/0/0:string:"F1" +data/0/1:string:"F2" +data/1/0:string:"A-1" +data/1/1:numeric:1 +data/2/0:string:"A-2" +data/2/1:numeric:2 +data/3/0:string:"A-3" +data/3/1:numeric:3 +data/4/0:string:"A-4" +data/4/1:numeric:4 +data/5/0:string:"A-5" +data/5/1:numeric:5 +data/6/0:string:"A-6" +data/6/1:numeric:6 +data/7/0:string:"A-7" +data/7/1:numeric:7 +data/8/0:string:"A-8" +data/8/1:numeric:8 +data/9/0:string:"A-9" +data/9/1:numeric:9 +data/10/0:string:"A-10" +data/10/1:numeric:10 +data_1/0/0:string:"A-11" +data_1/0/1:numeric:11 +data_1/1/0:string:"A-12" +data_1/1/1:numeric:12 +data_1/2/0:string:"A-13" +data_1/2/1:numeric:13 +data_1/3/0:string:"A-14" +data_1/3/1:numeric:14 +data_1/4/0:string:"A-15" +data_1/4/1:numeric:15 +data_1/5/0:string:"A-16" +data_1/5/1:numeric:16 +data_1/6/0:string:"A-17" +data_1/6/1:numeric:17 +data_1/7/0:string:"A-18" +data_1/7/1:numeric:18 +data_1/8/0:string:"A-19" +data_1/8/1:numeric:19 +data_1/9/0:string:"A-20" +data_1/9/1:numeric:20 diff --git a/test/csv/split-sheet/check-2.txt b/test/csv/split-sheet/check-2.txt new file mode 100644 index 0000000..f022c8b --- /dev/null +++ b/test/csv/split-sheet/check-2.txt @@ -0,0 +1,44 @@ +data/0/0:string:"F1" +data/0/1:string:"F2" +data/1/0:string:"A-1" +data/1/1:numeric:1 +data/2/0:string:"A-2" +data/2/1:numeric:2 +data/3/0:string:"A-3" +data/3/1:numeric:3 +data/4/0:string:"A-4" +data/4/1:numeric:4 +data/5/0:string:"A-5" +data/5/1:numeric:5 +data/6/0:string:"A-6" +data/6/1:numeric:6 +data/7/0:string:"A-7" +data/7/1:numeric:7 +data/8/0:string:"A-8" +data/8/1:numeric:8 +data/9/0:string:"A-9" +data/9/1:numeric:9 +data/10/0:string:"A-10" +data/10/1:numeric:10 +data_1/0/0:string:"F1" +data_1/0/1:string:"F2" +data_1/1/0:string:"A-11" +data_1/1/1:numeric:11 +data_1/2/0:string:"A-12" +data_1/2/1:numeric:12 +data_1/3/0:string:"A-13" +data_1/3/1:numeric:13 +data_1/4/0:string:"A-14" +data_1/4/1:numeric:14 +data_1/5/0:string:"A-15" +data_1/5/1:numeric:15 +data_1/6/0:string:"A-16" +data_1/6/1:numeric:16 +data_1/7/0:string:"A-17" +data_1/7/1:numeric:17 +data_1/8/0:string:"A-18" +data_1/8/1:numeric:18 +data_1/9/0:string:"A-19" +data_1/9/1:numeric:19 +data_1/10/0:string:"A-20" +data_1/10/1:numeric:20 diff --git a/test/csv/split-sheet/check-3.txt b/test/csv/split-sheet/check-3.txt new file mode 100644 index 0000000..182a09b --- /dev/null +++ b/test/csv/split-sheet/check-3.txt @@ -0,0 +1,22 @@ +data/0/0:string:"F1" +data/0/1:string:"F2" +data/1/0:string:"A-1" +data/1/1:numeric:1 +data/2/0:string:"A-2" +data/2/1:numeric:2 +data/3/0:string:"A-3" +data/3/1:numeric:3 +data/4/0:string:"A-4" +data/4/1:numeric:4 +data/5/0:string:"A-5" +data/5/1:numeric:5 +data/6/0:string:"A-6" +data/6/1:numeric:6 +data/7/0:string:"A-7" +data/7/1:numeric:7 +data/8/0:string:"A-8" +data/8/1:numeric:8 +data/9/0:string:"A-9" +data/9/1:numeric:9 +data/10/0:string:"A-10" +data/10/1:numeric:10 diff --git a/test/csv/split-sheet/input.csv b/test/csv/split-sheet/input.csv new file mode 100644 index 0000000..fd4ce9d --- /dev/null +++ b/test/csv/split-sheet/input.csv @@ -0,0 +1,21 @@ +F1,F2 +A-1,1 +A-2,2 +A-3,3 +A-4,4 +A-5,5 +A-6,6 +A-7,7 +A-8,8 +A-9,9 +A-10,10 +A-11,11 +A-12,12 +A-13,13 +A-14,14 +A-15,15 +A-16,16 +A-17,17 +A-18,18 +A-19,19 +A-20,20 diff --git a/test/gnumeric/background-color/standard.gnumeric b/test/gnumeric/background-color/standard.gnumeric new file mode 100644 index 0000000..26206a9 Binary files /dev/null and b/test/gnumeric/background-color/standard.gnumeric differ diff --git a/test/gnumeric/borders/colors.gnumeric b/test/gnumeric/borders/colors.gnumeric new file mode 100644 index 0000000..2f632db Binary files /dev/null and b/test/gnumeric/borders/colors.gnumeric differ diff --git a/test/gnumeric/borders/directions.gnumeric b/test/gnumeric/borders/directions.gnumeric new file mode 100644 index 0000000..897fda0 Binary files /dev/null and b/test/gnumeric/borders/directions.gnumeric differ diff --git a/test/gnumeric/borders/grid-box.gnumeric b/test/gnumeric/borders/grid-box.gnumeric new file mode 100644 index 0000000..c01988c Binary files /dev/null and b/test/gnumeric/borders/grid-box.gnumeric differ diff --git a/test/gnumeric/borders/single-cells.gnumeric b/test/gnumeric/borders/single-cells.gnumeric new file mode 100644 index 0000000..e394402 Binary files /dev/null and b/test/gnumeric/borders/single-cells.gnumeric differ diff --git a/test/gnumeric/cell-properties/wrap-and-shrink.gnumeric b/test/gnumeric/cell-properties/wrap-and-shrink.gnumeric new file mode 100644 index 0000000..8b6dd3b Binary files /dev/null and b/test/gnumeric/cell-properties/wrap-and-shrink.gnumeric differ diff --git a/test/gnumeric/cell-value-types/check.txt b/test/gnumeric/cell-value-types/check.txt new file mode 100644 index 0000000..43b97e9 --- /dev/null +++ b/test/gnumeric/cell-value-types/check.txt @@ -0,0 +1,41 @@ +Values/0/0:string:"Numeric" +Values/0/1:numeric:1.2 +Values/1/0:string:"Boolean" +Values/1/1:boolean:true +Values/2/0:string:"String" +Values/2/1:string:"This is string" +Values/3/0:string:"Integer" +Values/3/1:numeric:11 +Values/4/0:string:"Numeric" +Values/4/1:numeric:-1.2 +Formula/0/0:numeric:1 +Formula/0/1:formula:A1*2:2 +Formula/1/0:numeric:2 +Formula/1/1:formula:A2*2:4 +Formula/2/0:numeric:3 +Formula/2/1:formula:A3*2:6 +Formula/3/0:numeric:4 +Formula/3/1:formula:A4*2:8 +Formula/4/0:numeric:5 +Formula/4/1:formula:A5*2:10 +Formula/5/0:numeric:6 +Formula/5/1:formula:A6*2:12 +Formula/6/0:numeric:7 +Formula/6/1:formula:A7*2:14 +Formula/7/0:numeric:8 +Formula/7/1:formula:A8*2:16 +Array/0/0:numeric:1 +Array/0/1:numeric:2 +Array/0/2:numeric:3 +Array/2/0:numeric:4 +Array/3/0:numeric:5 +Array/4/0:numeric:6 +Array/6/0:formula:{MMULT(A3:A5,A1:C1)}:4 +Array/6/1:formula:{MMULT(A3:A5,A1:C1)}:8 +Array/6/2:formula:{MMULT(A3:A5,A1:C1)}:12 +Array/7/0:formula:{MMULT(A3:A5,A1:C1)}:5 +Array/7/1:formula:{MMULT(A3:A5,A1:C1)}:10 +Array/7/2:formula:{MMULT(A3:A5,A1:C1)}:15 +Array/8/0:formula:{MMULT(A3:A5,A1:C1)}:6 +Array/8/1:formula:{MMULT(A3:A5,A1:C1)}:12 +Array/8/2:formula:{MMULT(A3:A5,A1:C1)}:18 diff --git a/test/gnumeric/cell-value-types/input.gnumeric b/test/gnumeric/cell-value-types/input.gnumeric new file mode 100644 index 0000000..2c4c38b Binary files /dev/null and b/test/gnumeric/cell-value-types/input.gnumeric differ diff --git a/test/gnumeric/colored-text/input.gnumeric b/test/gnumeric/colored-text/input.gnumeric new file mode 100644 index 0000000..68e48fa Binary files /dev/null and b/test/gnumeric/colored-text/input.gnumeric differ diff --git a/test/gnumeric/column-width-row-height/input.gnumeric b/test/gnumeric/column-width-row-height/input.gnumeric new file mode 100644 index 0000000..66b5cc8 Binary files /dev/null and b/test/gnumeric/column-width-row-height/input.gnumeric differ diff --git a/test/gnumeric/formula-cells/check.txt b/test/gnumeric/formula-cells/check.txt new file mode 100644 index 0000000..b6abe9c --- /dev/null +++ b/test/gnumeric/formula-cells/check.txt @@ -0,0 +1,7 @@ +Sheet1/0/0:numeric:1 +Sheet1/0/1:formula:A1*2:2 +Sheet1/1/0:numeric:2 +Sheet1/1/1:formula:A2-10:-8 +Sheet1/2/0:numeric:3 +Sheet1/2/1:formula:A3/3:1 +Sheet1/4/0:formula:SUM(A1:A3):6 diff --git a/test/gnumeric/formula-cells/input.gnumeric b/test/gnumeric/formula-cells/input.gnumeric new file mode 100644 index 0000000..b236b4a Binary files /dev/null and b/test/gnumeric/formula-cells/input.gnumeric differ diff --git a/test/gnumeric/hidden-rows-columns/input.gnumeric b/test/gnumeric/hidden-rows-columns/input.gnumeric new file mode 100644 index 0000000..d8e8cc5 Binary files /dev/null and b/test/gnumeric/hidden-rows-columns/input.gnumeric differ diff --git a/test/gnumeric/merged-cells/input.gnumeric b/test/gnumeric/merged-cells/input.gnumeric new file mode 100644 index 0000000..f167bed Binary files /dev/null and b/test/gnumeric/merged-cells/input.gnumeric differ diff --git a/test/gnumeric/named-expression-sheet-local/check.txt b/test/gnumeric/named-expression-sheet-local/check.txt new file mode 100644 index 0000000..321f221 --- /dev/null +++ b/test/gnumeric/named-expression-sheet-local/check.txt @@ -0,0 +1,22 @@ +Sheet1/0/0:numeric:1 +Sheet1/0/1:numeric:6 +Sheet1/1/0:numeric:2 +Sheet1/1/1:numeric:7 +Sheet1/2/0:numeric:3 +Sheet1/2/1:numeric:8 +Sheet1/3/0:numeric:4 +Sheet1/3/1:numeric:9 +Sheet1/4/0:numeric:5 +Sheet1/4/1:numeric:10 +Sheet1/6/0:formula:SUM(MyRange):27 +Sheet2/0/0:numeric:10 +Sheet2/0/1:numeric:20 +Sheet2/1/0:numeric:11 +Sheet2/1/1:numeric:21 +Sheet2/2/0:numeric:12 +Sheet2/2/1:numeric:22 +Sheet2/3/0:numeric:13 +Sheet2/3/1:numeric:23 +Sheet2/4/0:numeric:14 +Sheet2/4/1:numeric:24 +Sheet2/6/0:formula:SUM(MyRange):74 diff --git a/test/gnumeric/named-expression-sheet-local/input.gnumeric b/test/gnumeric/named-expression-sheet-local/input.gnumeric new file mode 100644 index 0000000..2034e28 Binary files /dev/null and b/test/gnumeric/named-expression-sheet-local/input.gnumeric differ diff --git a/test/gnumeric/named-expression/check.txt b/test/gnumeric/named-expression/check.txt new file mode 100644 index 0000000..d6d6ff0 --- /dev/null +++ b/test/gnumeric/named-expression/check.txt @@ -0,0 +1,12 @@ +Sheet1/0/0:numeric:1 +Sheet1/0/1:numeric:6 +Sheet1/1/0:numeric:2 +Sheet1/1/1:numeric:7 +Sheet1/2/0:numeric:3 +Sheet1/2/1:numeric:8 +Sheet1/3/0:numeric:4 +Sheet1/3/1:numeric:9 +Sheet1/4/0:numeric:5 +Sheet1/4/1:numeric:10 +Sheet1/6/0:formula:SUM(MyRange):15 +Sheet1/6/1:formula:SUM(MyRange2):55 diff --git a/test/gnumeric/named-expression/input.gnumeric b/test/gnumeric/named-expression/input.gnumeric new file mode 100644 index 0000000..7b0d682 Binary files /dev/null and b/test/gnumeric/named-expression/input.gnumeric differ diff --git a/test/gnumeric/number-formats/input.gnumeric b/test/gnumeric/number-formats/input.gnumeric new file mode 100644 index 0000000..5fda45e Binary files /dev/null and b/test/gnumeric/number-formats/input.gnumeric differ diff --git a/test/gnumeric/raw-values-1/check.txt b/test/gnumeric/raw-values-1/check.txt new file mode 100644 index 0000000..935cf22 --- /dev/null +++ b/test/gnumeric/raw-values-1/check.txt @@ -0,0 +1,25 @@ +Num/1/0:numeric:1.1 +Num/1/2:numeric:2.1 +Num/1/4:numeric:3.1 +Num/2/0:numeric:1.2 +Num/2/2:numeric:2.2 +Num/2/4:numeric:3.2 +Num/3/0:numeric:1.3 +Num/3/2:numeric:2.3 +Num/3/4:numeric:3.3 +Num/6/2:numeric:5 +Num/6/3:numeric:6 +Num/6/4:numeric:7 +Text/0/0:string:"A" +Text/1/0:string:"B" +Text/1/1:string:"D" +Text/2/0:string:"C" +Text/2/1:string:"E" +Text/2/2:string:"G" +Text/3/1:string:"F" +Text/3/2:string:"H" +Text/4/2:string:"I" +Text/6/3:string:"Andy" +Text/7/3:string:"Bruce" +Text/8/3:string:"Charlie" +Text/9/3:string:"David" diff --git a/test/gnumeric/raw-values-1/input.gnumeric b/test/gnumeric/raw-values-1/input.gnumeric new file mode 100644 index 0000000..589694e Binary files /dev/null and b/test/gnumeric/raw-values-1/input.gnumeric differ diff --git a/test/gnumeric/table/autofilter.gnumeric b/test/gnumeric/table/autofilter.gnumeric new file mode 100644 index 0000000..8a4746d Binary files /dev/null and b/test/gnumeric/table/autofilter.gnumeric differ diff --git a/test/gnumeric/test.gnumeric b/test/gnumeric/test.gnumeric new file mode 100644 index 0000000..53d2026 Binary files /dev/null and b/test/gnumeric/test.gnumeric differ diff --git a/test/gnumeric/text-alignment/input.gnumeric b/test/gnumeric/text-alignment/input.gnumeric new file mode 100644 index 0000000..1dacd39 Binary files /dev/null and b/test/gnumeric/text-alignment/input.gnumeric differ diff --git a/test/gnumeric/text-formats/input.gnumeric b/test/gnumeric/text-formats/input.gnumeric new file mode 100644 index 0000000..4c79646 Binary files /dev/null and b/test/gnumeric/text-formats/input.gnumeric differ diff --git a/test/json-mapped/array-of-arrays-basic/check.txt b/test/json-mapped/array-of-arrays-basic/check.txt new file mode 100644 index 0000000..28da464 --- /dev/null +++ b/test/json-mapped/array-of-arrays-basic/check.txt @@ -0,0 +1,11 @@ +data/0/2:string:"Simple list of arrays" +data/1/2:string:"This file contains a list of arrays as data and some title strings at the top." +data/3/1:numeric:1 +data/3/2:numeric:2 +data/3/3:numeric:3 +data/4/1:numeric:4 +data/4/2:numeric:5 +data/4/3:numeric:6 +data/5/1:numeric:7 +data/5/2:numeric:8 +data/5/3:numeric:9 diff --git a/test/json-mapped/array-of-arrays-basic/input.json b/test/json-mapped/array-of-arrays-basic/input.json new file mode 100644 index 0000000..a93a012 --- /dev/null +++ b/test/json-mapped/array-of-arrays-basic/input.json @@ -0,0 +1,9 @@ +[ + "Simple list of arrays", + "This file contains a list of arrays as data and some title strings at the top.", + [ + [1, 2, 3], + [4, 5, 6], + [7, 8, 9] + ] +] diff --git a/test/json-mapped/array-of-arrays-basic/map.json b/test/json-mapped/array-of-arrays-basic/map.json new file mode 100644 index 0000000..68af455 --- /dev/null +++ b/test/json-mapped/array-of-arrays-basic/map.json @@ -0,0 +1,19 @@ +{ + "sheets": ["data"], + "cells": [ + {"path": "$[0]", "sheet": "data", "row": 0, "column": 2}, + {"path": "$[1]", "sheet": "data", "row": 1, "column": 2} + ], + "ranges": [ + {"sheet": "data", "row": 3, "column": 1, + "fields": [ + {"path": "$[][][0]"}, + {"path": "$[][][1]"}, + {"path": "$[][][2]"} + ], + "row-groups": [ + {"path": "$[]"} + ] + } + ] +} diff --git a/test/json-mapped/array-of-arrays-header/check.txt b/test/json-mapped/array-of-arrays-header/check.txt new file mode 100644 index 0000000..0a8b423 --- /dev/null +++ b/test/json-mapped/array-of-arrays-header/check.txt @@ -0,0 +1,57 @@ +city/0/0:string:"RID" +city/0/1:string:"Country" +city/0/2:string:"City" +city/1/0:string:"1" +city/1/1:string:"Tunisia" +city/1/2:string:"Menzel Bourguiba" +city/2/0:string:"2" +city/2/1:string:"Indonesia" +city/2/2:string:"Jiwuwu" +city/3/0:string:"3" +city/3/1:string:"China" +city/3/2:string:"Dingtou" +city/4/0:string:"4" +city/4/1:string:"China" +city/4/2:string:"Tucheng" +city/5/0:string:"5" +city/5/1:string:"United States" +city/5/2:string:"Charlotte" +city/6/0:string:"6" +city/6/1:string:"China" +city/6/2:string:"Xuwei" +city/7/0:string:"7" +city/7/1:string:"Uganda" +city/7/2:string:"Moroto" +city/8/0:string:"8" +city/8/1:string:"Poland" +city/8/2:string:"Krasne" +city/9/0:string:"10" +city/9/1:string:"Indonesia" +city/9/2:string:"Babakan" +city/10/0:string:"11" +city/10/1:string:"Philippines" +city/10/2:string:"Vigo" +city/11/0:string:"12" +city/11/1:string:"Tajikistan" +city/11/2:string:"Konsoy" +city/12/0:string:"13" +city/12/1:string:"Honduras" +city/12/2:string:"La Estancia" +city/13/0:string:"14" +city/13/1:string:"Japan" +city/13/2:string:"Yatsushiro" +city/14/0:string:"15" +city/14/1:string:"Mexico" +city/14/2:string:"Lindavista" +city/15/0:string:"17" +city/15/1:string:"United States" +city/15/2:string:"San Jose" +city/16/0:string:"18" +city/16/1:string:"Nigeria" +city/16/2:string:"Uyo" +city/17/0:string:"19" +city/17/1:string:"Brazil" +city/17/2:string:"Planaltina" +city/18/0:string:"20" +city/18/1:string:"United States" +city/18/2:string:"Indianapolis" diff --git a/test/json-mapped/array-of-arrays-header/input.json b/test/json-mapped/array-of-arrays-header/input.json new file mode 100644 index 0000000..4f0fbe9 --- /dev/null +++ b/test/json-mapped/array-of-arrays-header/input.json @@ -0,0 +1,19 @@ +[["1","Tunisia","Menzel Bourguiba"], +["2","Indonesia","Jiwuwu"], +["3","China","Dingtou"], +["4","China","Tucheng"], +["5","United States","Charlotte"], +["6","China","Xuwei"], +["7","Uganda","Moroto"], +["8","Poland","Krasne"], +["10","Indonesia","Babakan"], +["11","Philippines","Vigo"], +["12","Tajikistan","Konsoy"], +["13","Honduras","La Estancia"], +["14","Japan","Yatsushiro"], +["15","Mexico","Lindavista"], +["17","United States","San Jose"], +["18","Nigeria","Uyo"], +["19","Brazil","Planaltina"], +["20","United States","Indianapolis"] +] diff --git a/test/json-mapped/array-of-arrays-header/map.json b/test/json-mapped/array-of-arrays-header/map.json new file mode 100644 index 0000000..1c7bfea --- /dev/null +++ b/test/json-mapped/array-of-arrays-header/map.json @@ -0,0 +1,15 @@ +{ + "sheets": ["city"], + "ranges": [ + {"row": 0, "column": 0, "sheet": "city", "row-header": true, + "fields": [ + {"path": "$[][0]", "label": "RID"}, + {"path": "$[][1]", "label": "Country"}, + {"path": "$[][2]", "label": "City"}, + ], + "row-groups": [ + {"path": "$"}, + ] + } + ] +} diff --git a/test/json-mapped/array-of-objects-basic/check.txt b/test/json-mapped/array-of-objects-basic/check.txt new file mode 100644 index 0000000..6aba1bb --- /dev/null +++ b/test/json-mapped/array-of-objects-basic/check.txt @@ -0,0 +1,20 @@ +Imported/0/0:numeric:1 +Imported/0/1:string:"Caitlin" +Imported/0/2:string:"Kealy" +Imported/0/3:string:"ckealy0@hud.gov" +Imported/1/0:numeric:2 +Imported/1/1:string:"Bernice" +Imported/1/2:string:"McEvilly" +Imported/1/3:string:"bmcevilly1@comsenz.com" +Imported/2/0:numeric:3 +Imported/2/1:string:"Ariel" +Imported/2/2:string:"Casajuana" +Imported/2/3:string:"acasajuana2@fema.gov" +Imported/3/0:numeric:4 +Imported/3/1:string:"Grannie" +Imported/3/2:string:"Parlot" +Imported/3/3:string:"gparlot3@soup.io" +Imported/4/0:numeric:5 +Imported/4/1:string:"Merridie" +Imported/4/2:string:"Dungey" +Imported/4/3:string:"mdungey4@nifty.com" diff --git a/test/json-mapped/array-of-objects-basic/input.json b/test/json-mapped/array-of-objects-basic/input.json new file mode 100644 index 0000000..1d10e9e --- /dev/null +++ b/test/json-mapped/array-of-objects-basic/input.json @@ -0,0 +1,32 @@ +[ + { + "id": 1, + "first_name": "Caitlin", + "last_name": "Kealy", + "email": "ckealy0@hud.gov" + }, + { + "id": 2, + "first_name": "Bernice", + "last_name": "McEvilly", + "email": "bmcevilly1@comsenz.com" + }, + { + "id": 3, + "first_name": "Ariel", + "last_name": "Casajuana", + "email": "acasajuana2@fema.gov" + }, + { + "id": 4, + "first_name": "Grannie", + "last_name": "Parlot", + "email": "gparlot3@soup.io" + }, + { + "id": 5, + "first_name": "Merridie", + "last_name": "Dungey", + "email": "mdungey4@nifty.com" + } +] \ No newline at end of file diff --git a/test/json-mapped/array-of-objects-basic/map.json b/test/json-mapped/array-of-objects-basic/map.json new file mode 100644 index 0000000..a9b949c --- /dev/null +++ b/test/json-mapped/array-of-objects-basic/map.json @@ -0,0 +1,16 @@ +{ + "sheets": ["Imported"], + "ranges": [ + {"sheet": "Imported", "row": 0, "column": 0, + "fields": [ + {"path": "$[]['id']"}, + {"path": "$[]['first_name']"}, + {"path": "$[]['last_name']"}, + {"path": "$[]['email']"} + ], + "row-groups": [ + {"path": "$"} + ] + } + ] +} diff --git a/test/json-mapped/array-of-objects-header/check.txt b/test/json-mapped/array-of-objects-header/check.txt new file mode 100644 index 0000000..63d7e01 --- /dev/null +++ b/test/json-mapped/array-of-objects-header/check.txt @@ -0,0 +1,64 @@ +models/0/0:string:"Record ID" +models/0/1:string:"Model Year" +models/0/2:string:"Make" +models/0/3:string:"Model" +models/1/0:numeric:1 +models/1/1:numeric:1992 +models/1/2:string:"Mazda" +models/1/3:string:"MPV" +models/2/0:numeric:2 +models/2/1:numeric:2008 +models/2/2:string:"GMC" +models/2/3:string:"Savana 1500" +models/3/0:numeric:3 +models/3/1:numeric:1994 +models/3/2:string:"Mitsubishi" +models/3/3:string:"RVR" +models/4/0:numeric:4 +models/4/1:numeric:2005 +models/4/2:string:"Mercury" +models/4/3:string:"Grand Marquis" +models/5/0:numeric:5 +models/5/1:numeric:1994 +models/5/2:string:"Volkswagen" +models/5/3:string:"Golf" +models/6/0:numeric:6 +models/6/1:numeric:1996 +models/6/2:string:"Cadillac" +models/6/3:string:"Eldorado" +models/7/0:numeric:7 +models/7/1:numeric:2000 +models/7/2:string:"Cadillac" +models/7/3:string:"Escalade" +models/8/0:numeric:8 +models/8/1:numeric:2009 +models/8/2:string:"Kia" +models/8/3:string:"Mohave/Borrego" +models/9/0:numeric:9 +models/9/1:numeric:1988 +models/9/2:string:"Volkswagen" +models/9/3:string:"Cabriolet" +models/10/0:numeric:10 +models/10/1:numeric:2008 +models/10/2:string:"Acura" +models/10/3:string:"TSX" +models/11/0:numeric:11 +models/11/1:numeric:1993 +models/11/2:string:"Chrysler" +models/11/3:string:"Imperial" +models/12/0:numeric:12 +models/12/1:numeric:2009 +models/12/2:string:"Hyundai" +models/12/3:string:"Azera" +models/13/0:numeric:13 +models/13/1:numeric:2012 +models/13/2:string:"Ford" +models/13/3:string:"Focus" +models/14/0:numeric:14 +models/14/1:numeric:1999 +models/14/2:string:"GMC" +models/14/3:string:"Suburban 2500" +models/15/0:numeric:15 +models/15/1:numeric:2009 +models/15/2:string:"Pontiac" +models/15/3:string:"G5" diff --git a/test/json-mapped/array-of-objects-header/input.json b/test/json-mapped/array-of-objects-header/input.json new file mode 100644 index 0000000..d9b6605 --- /dev/null +++ b/test/json-mapped/array-of-objects-header/input.json @@ -0,0 +1,15 @@ +[{"Record ID":1,"Model Year":1992,"Make":"Mazda","Model":"MPV"}, +{"Record ID":2,"Model Year":2008,"Make":"GMC","Model":"Savana 1500"}, +{"Record ID":3,"Model Year":1994,"Make":"Mitsubishi","Model":"RVR"}, +{"Record ID":4,"Model Year":2005,"Make":"Mercury","Model":"Grand Marquis"}, +{"Record ID":5,"Model Year":1994,"Make":"Volkswagen","Model":"Golf"}, +{"Record ID":6,"Model Year":1996,"Make":"Cadillac","Model":"Eldorado"}, +{"Record ID":7,"Model Year":2000,"Make":"Cadillac","Model":"Escalade"}, +{"Record ID":8,"Model Year":2009,"Make":"Kia","Model":"Mohave/Borrego"}, +{"Record ID":9,"Model Year":1988,"Make":"Volkswagen","Model":"Cabriolet"}, +{"Record ID":10,"Model Year":2008,"Make":"Acura","Model":"TSX"}, +{"Record ID":11,"Model Year":1993,"Make":"Chrysler","Model":"Imperial"}, +{"Record ID":12,"Model Year":2009,"Make":"Hyundai","Model":"Azera"}, +{"Record ID":13,"Model Year":2012,"Make":"Ford","Model":"Focus"}, +{"Record ID":14,"Model Year":1999,"Make":"GMC","Model":"Suburban 2500"}, +{"Record ID":15,"Model Year":2009,"Make":"Pontiac","Model":"G5"}] \ No newline at end of file diff --git a/test/json-mapped/array-of-objects-header/map.json b/test/json-mapped/array-of-objects-header/map.json new file mode 100644 index 0000000..0e772f4 --- /dev/null +++ b/test/json-mapped/array-of-objects-header/map.json @@ -0,0 +1,16 @@ +{ + "sheets": ["models"], + "ranges": [ + {"row": 0, "column": 0, "sheet": "models", "row-header": true, + "fields": [ + {"path": "$[]['Record ID']"}, + {"path": "$[]['Model Year']"}, + {"path": "$[]['Make']"}, + {"path": "$[]['Model']"}, + ], + "row-groups": [ + {"path": "$"}, + ] + } + ] +} diff --git a/test/json-mapped/nested-repeats-2/check.txt b/test/json-mapped/nested-repeats-2/check.txt new file mode 100644 index 0000000..0553451 --- /dev/null +++ b/test/json-mapped/nested-repeats-2/check.txt @@ -0,0 +1,25 @@ +nested repeats 2/1/0:string:"foo" +nested repeats 2/1/1:string:"A" +nested repeats 2/1/2:numeric:1000 +nested repeats 2/1/3:string:"A123456789" +nested repeats 2/1/4:string:"en-US" +nested repeats 2/2/0:string:"foo" +nested repeats 2/2/1:string:"A" +nested repeats 2/2/2:numeric:1001 +nested repeats 2/2/3:string:"A987654321" +nested repeats 2/2/4:string:"en-US" +nested repeats 2/3/0:string:"foo" +nested repeats 2/3/1:string:"B" +nested repeats 2/3/2:numeric:2000 +nested repeats 2/3/3:string:"B123456789" +nested repeats 2/3/4:string:"ja-JP" +nested repeats 2/4/0:string:"foo" +nested repeats 2/4/1:string:"B" +nested repeats 2/4/2:numeric:2001 +nested repeats 2/4/3:string:"B987654321" +nested repeats 2/4/4:string:"ja-JP" +nested repeats 2/5/0:string:"foo" +nested repeats 2/5/1:string:"B" +nested repeats 2/5/2:numeric:2002 +nested repeats 2/5/3:string:"B987654323" +nested repeats 2/5/4:string:"ja-JP" diff --git a/test/json-mapped/nested-repeats-2/input.json b/test/json-mapped/nested-repeats-2/input.json new file mode 100644 index 0000000..ac3da5e --- /dev/null +++ b/test/json-mapped/nested-repeats-2/input.json @@ -0,0 +1,20 @@ +[ + {"parent": "foo", + "data": + [ + {"category": "A", "region": "en-US", + "records": [ + {"id": 1000, "ref": "A123456789"}, + {"id": 1001, "ref": "A987654321"} + ] + }, + {"category": "B", "region": "ja-JP", + "records": [ + {"id": 2000, "ref": "B123456789"}, + {"id": 2001, "ref": "B987654321"}, + {"id": 2002, "ref": "B987654323"} + ] + } + ] + } +] diff --git a/test/json-mapped/nested-repeats-2/map.json b/test/json-mapped/nested-repeats-2/map.json new file mode 100644 index 0000000..293462d --- /dev/null +++ b/test/json-mapped/nested-repeats-2/map.json @@ -0,0 +1,24 @@ +{ + "sheets": ["nested repeats 2"], + + "ranges": [ + {"sheet": "nested repeats 2", + "row": 1, + "column": 0, + + "fields": [ + {"path": "$[]['parent']"}, + {"path": "$[]['data'][]['category']"}, + {"path": "$[]['data'][]['records'][]['id']"}, + {"path": "$[]['data'][]['records'][]['ref']"}, + {"path": "$[]['data'][]['region']"} + ], + + "row-groups": [ + {"path": "$"}, + {"path": "$[]['data']"}, + {"path": "$[]['data'][]['records']"} + ] + } + ] +} diff --git a/test/json-mapped/nested-repeats/check.txt b/test/json-mapped/nested-repeats/check.txt new file mode 100644 index 0000000..c089547 --- /dev/null +++ b/test/json-mapped/nested-repeats/check.txt @@ -0,0 +1,64 @@ +nested repeats/3/2:string:"A" +nested repeats/3/3:numeric:1000 +nested repeats/3/4:string:"A123456789" +nested repeats/3/5:string:"en-US" +nested repeats/4/2:string:"A" +nested repeats/4/3:numeric:1001 +nested repeats/4/4:string:"A987654321" +nested repeats/4/5:string:"en-US" +nested repeats/5/2:string:"B" +nested repeats/5/3:numeric:2000 +nested repeats/5/4:string:"B123456789" +nested repeats/5/5:string:"ja-JP" +nested repeats/6/2:string:"B" +nested repeats/6/3:numeric:2001 +nested repeats/6/4:string:"B987654321" +nested repeats/6/5:string:"ja-JP" +nested repeats/7/2:string:"B" +nested repeats/7/3:numeric:2002 +nested repeats/7/4:string:"B987654323" +nested repeats/7/5:string:"ja-JP" +nested repeats/8/2:string:"C" +nested repeats/8/3:numeric:3000 +nested repeats/8/4:string:"C123456789" +nested repeats/8/5:string:"fr-CA" +nested repeats/9/2:string:"C" +nested repeats/9/3:numeric:3001 +nested repeats/9/4:string:"C987654320" +nested repeats/9/5:string:"fr-CA" +nested repeats/10/2:string:"C" +nested repeats/10/3:numeric:3002 +nested repeats/10/4:string:"C987654321" +nested repeats/10/5:string:"fr-CA" +nested repeats/11/2:string:"C" +nested repeats/11/3:numeric:3003 +nested repeats/11/4:string:"C987654322" +nested repeats/11/5:string:"fr-CA" +nested repeats/12/2:string:"C" +nested repeats/12/3:numeric:3004 +nested repeats/12/4:string:"C987654323" +nested repeats/12/5:string:"fr-CA" +nested repeats/13/2:string:"C" +nested repeats/13/3:numeric:3005 +nested repeats/13/4:string:"C987654324" +nested repeats/13/5:string:"fr-CA" +nested repeats/14/2:string:"C" +nested repeats/14/3:numeric:3006 +nested repeats/14/4:string:"C987654325" +nested repeats/14/5:string:"fr-CA" +nested repeats/15/2:string:"D" +nested repeats/15/3:numeric:4000 +nested repeats/15/4:string:"D123456789" +nested repeats/15/5:string:"unknown" +nested repeats/16/2:string:"E" +nested repeats/17/2:string:"F" +nested repeats/17/3:numeric:6000 +nested repeats/17/4:string:"F123456789" +nested repeats/18/2:string:"G" +nested repeats/18/3:numeric:7000 +nested repeats/18/4:string:"G123456789" +nested repeats/18/5:string:"en-GB" +nested repeats/19/2:string:"G" +nested repeats/19/3:numeric:7000 +nested repeats/19/4:string:"G123456780" +nested repeats/19/5:string:"en-GB" diff --git a/test/json-mapped/nested-repeats/input.json b/test/json-mapped/nested-repeats/input.json new file mode 100644 index 0000000..d755f45 --- /dev/null +++ b/test/json-mapped/nested-repeats/input.json @@ -0,0 +1,45 @@ +{ + "data": [ + {"category": "A", "region": "en-US", + "records": [ + {"id": 1000, "ref": "A123456789"}, + {"id": 1001, "ref": "A987654321"} + ] + }, + {"category": "B", "region": "ja-JP", + "records": [ + {"id": 2000, "ref": "B123456789"}, + {"id": 2001, "ref": "B987654321"}, + {"id": 2002, "ref": "B987654323"} + ] + }, + {"category": "C", "region": "fr-CA", + "records": [ + {"id": 3000, "ref": "C123456789"}, + {"id": 3001, "ref": "C987654320"}, + {"id": 3002, "ref": "C987654321"}, + {"id": 3003, "ref": "C987654322"}, + {"id": 3004, "ref": "C987654323"}, + {"id": 3005, "ref": "C987654324"}, + {"id": 3006, "ref": "C987654325"} + ] + }, + {"category": "D", "region": "unknown", + "records": [ + {"id": 4000, "ref": "D123456789"}, + ] + }, + {"category": "E", "records": []}, + {"category": "F", + "records": [ + {"id": 6000, "ref": "F123456789"} + ] + }, + {"category": "G", "region": "en-GB", + "records": [ + {"id": 7000, "ref": "G123456789"}, + {"id": 7000, "ref": "G123456780"} + ] + } + ] +} \ No newline at end of file diff --git a/test/json-mapped/nested-repeats/map.json b/test/json-mapped/nested-repeats/map.json new file mode 100644 index 0000000..668863e --- /dev/null +++ b/test/json-mapped/nested-repeats/map.json @@ -0,0 +1,22 @@ +{ + "sheets": ["nested repeats"], + + "ranges": [ + {"sheet": "nested repeats", + "row": 3, + "column": 2, + + "fields": [ + {"path": "$['data'][]['category']"}, + {"path": "$['data'][]['records'][]['id']"}, + {"path": "$['data'][]['records'][]['ref']"}, + {"path": "$['data'][]['region']"} + ], + + "row-groups": [ + {"path": "$['data']"}, + {"path": "$['data'][]['records']"} + ] + } + ] +} diff --git a/test/json-structure/arrays-in-object/check.txt b/test/json-structure/arrays-in-object/check.txt new file mode 100644 index 0000000..1f4654e --- /dev/null +++ b/test/json-structure/arrays-in-object/check.txt @@ -0,0 +1,4 @@ +$object['footnotes'].value +$object['rows'].array[4].object(*)['age'].value +$object['rows'].array[4].object(*)['error'].value +$object['rows'].array[4].object(*)['name'].value diff --git a/test/json-structure/arrays-in-object/input.json b/test/json-structure/arrays-in-object/input.json new file mode 100644 index 0000000..2b5dbf1 --- /dev/null +++ b/test/json-structure/arrays-in-object/input.json @@ -0,0 +1,10 @@ +{ + "rows": [ + {"name": "a", "age": 12}, + {"name": "b", "age": 13}, + {"name": "c", "age": 14}, + {"error": -1} + ], + + "footnotes": "some footnotes." +} diff --git a/test/json-structure/multiple-ranges/check.txt b/test/json-structure/multiple-ranges/check.txt new file mode 100644 index 0000000..49cf18b --- /dev/null +++ b/test/json-structure/multiple-ranges/check.txt @@ -0,0 +1,5 @@ +$object['data'].array[7].object(*)['category'].value +$object['data'].array[7].object(*)['records'].array[7].object(*)['id'].value +$object['data'].array[7].object(*)['records'].array[7].object(*)['ref'].value +$object['data'].array[7].object(*)['region'].value +$object['misc'].array[2].array(*)[3].value[0,1,2] diff --git a/test/json-structure/multiple-ranges/input.json b/test/json-structure/multiple-ranges/input.json new file mode 100644 index 0000000..e604b13 --- /dev/null +++ b/test/json-structure/multiple-ranges/input.json @@ -0,0 +1,49 @@ +{ + "data": [ + {"category": "A", "region": "en-US", + "records": [ + {"id": 1000, "ref": "A123456789"}, + {"id": 1001, "ref": "A987654321"} + ] + }, + {"category": "B", "region": "ja-JP", + "records": [ + {"id": 2000, "ref": "B123456789"}, + {"id": 2001, "ref": "B987654321"}, + {"id": 2002, "ref": "B987654323"} + ] + }, + {"category": "C", "region": "fr-CA", + "records": [ + {"id": 3000, "ref": "C123456789"}, + {"id": 3001, "ref": "C987654320"}, + {"id": 3002, "ref": "C987654321"}, + {"id": 3003, "ref": "C987654322"}, + {"id": 3004, "ref": "C987654323"}, + {"id": 3005, "ref": "C987654324"}, + {"id": 3006, "ref": "C987654325"} + ] + }, + {"category": "D", "region": "unknown", + "records": [ + {"id": 4000, "ref": "D123456789"}, + ] + }, + {"category": "E", "records": []}, + {"category": "F", + "records": [ + {"id": 6000, "ref": "F123456789"} + ] + }, + {"category": "G", "region": "en-GB", + "records": [ + {"id": 7000, "ref": "G123456789"}, + {"id": 7000, "ref": "G123456780"} + ] + } + ], + "misc": [ + [1, 2, 3], + [4, 5, 6], + ] +} \ No newline at end of file diff --git a/test/json-structure/nested-arrays-mixed-2/check.txt b/test/json-structure/nested-arrays-mixed-2/check.txt new file mode 100644 index 0000000..1347175 --- /dev/null +++ b/test/json-structure/nested-arrays-mixed-2/check.txt @@ -0,0 +1,3 @@ +$array[2].array(*)[3].object['age'].value +$array[2].array(*)[3].object['name'].value +$array[2].array(*)[3].value[1,2] diff --git a/test/json-structure/nested-arrays-mixed-2/input.json b/test/json-structure/nested-arrays-mixed-2/input.json new file mode 100644 index 0000000..b63feb3 --- /dev/null +++ b/test/json-structure/nested-arrays-mixed-2/input.json @@ -0,0 +1,15 @@ +[ + [ + 3, + 4, + 5 + ], + [ + { + "name": "Jane Doe", + "age": -1 + }, + 1, + 2 + ] +] diff --git a/test/json-structure/nested-arrays-mixed/check.txt b/test/json-structure/nested-arrays-mixed/check.txt new file mode 100644 index 0000000..1347175 --- /dev/null +++ b/test/json-structure/nested-arrays-mixed/check.txt @@ -0,0 +1,3 @@ +$array[2].array(*)[3].object['age'].value +$array[2].array(*)[3].object['name'].value +$array[2].array(*)[3].value[1,2] diff --git a/test/json-structure/nested-arrays-mixed/input.json b/test/json-structure/nested-arrays-mixed/input.json new file mode 100644 index 0000000..d0d7617 --- /dev/null +++ b/test/json-structure/nested-arrays-mixed/input.json @@ -0,0 +1,15 @@ +[ + [ + { + "name": "Jane Doe", + "age": -1 + }, + 1, + 2 + ], + [ + 3, + 4, + 5 + ] +] diff --git a/test/json-structure/nested-arrays/check.txt b/test/json-structure/nested-arrays/check.txt new file mode 100644 index 0000000..03123e8 --- /dev/null +++ b/test/json-structure/nested-arrays/check.txt @@ -0,0 +1 @@ +$array[2].array(*)[3].value[0,1,2] diff --git a/test/json-structure/nested-arrays/input.json b/test/json-structure/nested-arrays/input.json new file mode 100644 index 0000000..e4e6b99 --- /dev/null +++ b/test/json-structure/nested-arrays/input.json @@ -0,0 +1,5 @@ +[ + [0, 1, 2], + [3, 4, 5] +] + diff --git a/test/json-structure/no-value-nodes/01.json b/test/json-structure/no-value-nodes/01.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/test/json-structure/no-value-nodes/01.json @@ -0,0 +1 @@ +[] diff --git a/test/json-structure/no-value-nodes/02.json b/test/json-structure/no-value-nodes/02.json new file mode 100644 index 0000000..1721244 --- /dev/null +++ b/test/json-structure/no-value-nodes/02.json @@ -0,0 +1 @@ +[[]] diff --git a/test/json-structure/no-value-nodes/03.json b/test/json-structure/no-value-nodes/03.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/test/json-structure/no-value-nodes/03.json @@ -0,0 +1 @@ +{} diff --git a/test/json-structure/no-value-nodes/04.json b/test/json-structure/no-value-nodes/04.json new file mode 100644 index 0000000..b672212 --- /dev/null +++ b/test/json-structure/no-value-nodes/04.json @@ -0,0 +1 @@ +{"k": []} diff --git a/test/json-structure/repeat-objects-2/check.txt b/test/json-structure/repeat-objects-2/check.txt new file mode 100644 index 0000000..9e406e0 --- /dev/null +++ b/test/json-structure/repeat-objects-2/check.txt @@ -0,0 +1,6 @@ +$array[3].object(*)['age'].value +$array[3].object(*)['name'].value +$array[3].object(*)['props'].object['alpha'].value +$array[3].object(*)['props'].object['beta'].value +$array[3].object(*)['props'].object['gamma'].value +$array[3].object(*)['props'].object['theta'].value diff --git a/test/json-structure/repeat-objects-2/input.json b/test/json-structure/repeat-objects-2/input.json new file mode 100644 index 0000000..54ba1cc --- /dev/null +++ b/test/json-structure/repeat-objects-2/input.json @@ -0,0 +1,6 @@ +[ + {"name": "a", "age": 12, "props": {"alpha": 1, "beta": 2}}, + {"name": "b", "age": 13, "props": {"gamma": 3}}, + {"name": "c", "age": 14, "props": {"theta": 4}}, +] + diff --git a/test/json-structure/repeat-objects/check.txt b/test/json-structure/repeat-objects/check.txt new file mode 100644 index 0000000..df6de0b --- /dev/null +++ b/test/json-structure/repeat-objects/check.txt @@ -0,0 +1,2 @@ +$array[4].object(*)['age'].value +$array[4].object(*)['name'].value diff --git a/test/json-structure/repeat-objects/input.json b/test/json-structure/repeat-objects/input.json new file mode 100644 index 0000000..27882a4 --- /dev/null +++ b/test/json-structure/repeat-objects/input.json @@ -0,0 +1,6 @@ +[ + {"name": "a", "age": 12}, + {"name": "b", "age": true}, + {"name": "c", "age": null}, + {"name": "d", "age": "n/a"}, +] diff --git a/test/json/basic1/check.txt b/test/json/basic1/check.txt new file mode 100644 index 0000000..075a355 --- /dev/null +++ b/test/json/basic1/check.txt @@ -0,0 +1,8 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:array +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:true +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:false +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:null diff --git a/test/json/basic1/input.json b/test/json/basic1/input.json new file mode 100644 index 0000000..8aca25a --- /dev/null +++ b/test/json/basic1/input.json @@ -0,0 +1,6 @@ +[ + true, + false, + null +] + diff --git a/test/json/basic1/output.yaml b/test/json/basic1/output.yaml new file mode 100644 index 0000000..f1aa6af --- /dev/null +++ b/test/json/basic1/output.yaml @@ -0,0 +1,4 @@ +--- +- true +- false +- null diff --git a/test/json/basic2/check.txt b/test/json/basic2/check.txt new file mode 100644 index 0000000..b66e266 --- /dev/null +++ b/test/json/basic2/check.txt @@ -0,0 +1,44 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:array +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="I am string" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="me too" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="\\" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="/" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="\\b" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="\\f" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="\\n" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="\\r" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="\\t" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="\"quoted\"" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="http://www.google.com" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="one \\n two \\n three" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:string +/ns0:array/ns0:item/ns0:string@value="front segment 'single quote' and \"double quote\" end segment" diff --git a/test/json/basic2/input.json b/test/json/basic2/input.json new file mode 100644 index 0000000..0ff47ad --- /dev/null +++ b/test/json/basic2/input.json @@ -0,0 +1,17 @@ +[ + "I am string", + "me too", + "", + "\\", + "\/", + "\b", + "\f", + "\n", + "\r", + "\t", + "\"quoted\"", + "http:\/\/www.google.com", + "one \n two \n three", + "front segment 'single quote' and \"double quote\" end segment" +] + diff --git a/test/json/basic2/output.yaml b/test/json/basic2/output.yaml new file mode 100644 index 0000000..19ead19 --- /dev/null +++ b/test/json/basic2/output.yaml @@ -0,0 +1,15 @@ +--- +- I am string +- me too +- +- \ +- / +- \b +- \f +- \n +- \r +- \t +- "quoted" +- http://www.google.com +- one \n two \n three +- front segment 'single quote' and "double quote" end segment diff --git a/test/json/basic3/check.txt b/test/json/basic3/check.txt new file mode 100644 index 0000000..350d182 --- /dev/null +++ b/test/json/basic3/check.txt @@ -0,0 +1,29 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:array +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:number@value="0" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:number@value="1" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:number@value="2" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:number@value="15" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:number@value="12.34" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:number@value="-0.12" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:number@value="1.2e+22" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:number@value="1.11e-07" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:number@value="1100" diff --git a/test/json/basic3/input.json b/test/json/basic3/input.json new file mode 100644 index 0000000..d2a8967 --- /dev/null +++ b/test/json/basic3/input.json @@ -0,0 +1,11 @@ +[ + 0, + 1, + 2, + 15, + 12.34, + -0.12, + 1.2e+22, + 1.11e-7, + 11E2 +] diff --git a/test/json/basic3/output.yaml b/test/json/basic3/output.yaml new file mode 100644 index 0000000..3624666 --- /dev/null +++ b/test/json/basic3/output.yaml @@ -0,0 +1,10 @@ +--- +- 0 +- 1 +- 2 +- 15 +- 12.34 +- -0.12 +- 1.2e+22 +- 1.11e-07 +- 1100 diff --git a/test/json/basic4/check.txt b/test/json/basic4/check.txt new file mode 100644 index 0000000..e50afa7 --- /dev/null +++ b/test/json/basic4/check.txt @@ -0,0 +1,14 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:object +/ns0:object/ns0:item +/ns0:object/ns0:item@name="int" +/ns0:object/ns0:item/ns0:number +/ns0:object/ns0:item/ns0:number@value="12" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="float" +/ns0:object/ns0:item/ns0:number +/ns0:object/ns0:item/ns0:number@value="0.125" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="string" +/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:string@value="blah..." diff --git a/test/json/basic4/input.json b/test/json/basic4/input.json new file mode 100644 index 0000000..2161908 --- /dev/null +++ b/test/json/basic4/input.json @@ -0,0 +1,6 @@ +{ + "int": 12, + "float": 0.125, + "string": "blah..." +} + diff --git a/test/json/basic4/output.yaml b/test/json/basic4/output.yaml new file mode 100644 index 0000000..a027a09 --- /dev/null +++ b/test/json/basic4/output.yaml @@ -0,0 +1,4 @@ +--- +int: 12 +float: 0.125 +string: blah... diff --git a/test/json/empty-array-1/check.txt b/test/json/empty-array-1/check.txt new file mode 100644 index 0000000..60374d8 --- /dev/null +++ b/test/json/empty-array-1/check.txt @@ -0,0 +1,2 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:array diff --git a/test/json/empty-array-1/input.json b/test/json/empty-array-1/input.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/test/json/empty-array-1/input.json @@ -0,0 +1 @@ +[] diff --git a/test/json/empty-array-2/check.txt b/test/json/empty-array-2/check.txt new file mode 100644 index 0000000..60374d8 --- /dev/null +++ b/test/json/empty-array-2/check.txt @@ -0,0 +1,2 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:array diff --git a/test/json/empty-array-2/input.json b/test/json/empty-array-2/input.json new file mode 100644 index 0000000..1e3ec72 --- /dev/null +++ b/test/json/empty-array-2/input.json @@ -0,0 +1 @@ +[ ] diff --git a/test/json/empty-array-3/check.txt b/test/json/empty-array-3/check.txt new file mode 100644 index 0000000..60374d8 --- /dev/null +++ b/test/json/empty-array-3/check.txt @@ -0,0 +1,2 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:array diff --git a/test/json/empty-array-3/input.json b/test/json/empty-array-3/input.json new file mode 100644 index 0000000..0d4f101 --- /dev/null +++ b/test/json/empty-array-3/input.json @@ -0,0 +1,2 @@ +[ +] diff --git a/test/json/nested1/check.txt b/test/json/nested1/check.txt new file mode 100644 index 0000000..ca1dae7 --- /dev/null +++ b/test/json/nested1/check.txt @@ -0,0 +1,14 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:object +/ns0:object/ns0:item +/ns0:object/ns0:item@name="array" +/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:number +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:number@value="1" +/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:number +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:number@value="2" +/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:number +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:number@value="3" diff --git a/test/json/nested1/input.json b/test/json/nested1/input.json new file mode 100644 index 0000000..fece0f5 --- /dev/null +++ b/test/json/nested1/input.json @@ -0,0 +1,2 @@ +{ "array" : [1,2,3] } + diff --git a/test/json/nested1/output.yaml b/test/json/nested1/output.yaml new file mode 100644 index 0000000..9d39827 --- /dev/null +++ b/test/json/nested1/output.yaml @@ -0,0 +1,5 @@ +--- +array: + - 1 + - 2 + - 3 diff --git a/test/json/nested2/check.txt b/test/json/nested2/check.txt new file mode 100644 index 0000000..84a4d05 --- /dev/null +++ b/test/json/nested2/check.txt @@ -0,0 +1,20 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:array +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:object +/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:array/ns0:item/ns0:object/ns0:item@name="value" +/ns0:array/ns0:item/ns0:object/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:object/ns0:item/ns0:number@value="1" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:object +/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:array/ns0:item/ns0:object/ns0:item@name="value" +/ns0:array/ns0:item/ns0:object/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:object/ns0:item/ns0:number@value="2" +/ns0:array/ns0:item +/ns0:array/ns0:item/ns0:object +/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:array/ns0:item/ns0:object/ns0:item@name="value" +/ns0:array/ns0:item/ns0:object/ns0:item/ns0:number +/ns0:array/ns0:item/ns0:object/ns0:item/ns0:number@value="3" diff --git a/test/json/nested2/input.json b/test/json/nested2/input.json new file mode 100644 index 0000000..6506406 --- /dev/null +++ b/test/json/nested2/input.json @@ -0,0 +1,6 @@ +[ + { "value":1 }, + { "value":2 }, + { "value":3 } +] + diff --git a/test/json/nested2/output.yaml b/test/json/nested2/output.yaml new file mode 100644 index 0000000..bdbece3 --- /dev/null +++ b/test/json/nested2/output.yaml @@ -0,0 +1,4 @@ +--- +- value: 1 +- value: 2 +- value: 3 diff --git a/test/json/refs1/check.txt b/test/json/refs1/check.txt new file mode 100644 index 0000000..2650ebe --- /dev/null +++ b/test/json/refs1/check.txt @@ -0,0 +1,19 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:object +/ns0:object/ns0:item +/ns0:object/ns0:item@name="ref1" +/ns0:object/ns0:item/ns0:number +/ns0:object/ns0:item/ns0:number@value="1" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="ref2" +/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:number +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:number@value="12" +/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:number +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:number@value="34" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="ref3" +/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:string@value="foo" diff --git a/test/json/refs1/input.json b/test/json/refs1/input.json new file mode 100644 index 0000000..9889889 --- /dev/null +++ b/test/json/refs1/input.json @@ -0,0 +1,4 @@ +{ + "$ref": "./ref.json" +} + diff --git a/test/json/refs1/ref.json b/test/json/refs1/ref.json new file mode 100644 index 0000000..17f67b4 --- /dev/null +++ b/test/json/refs1/ref.json @@ -0,0 +1,2 @@ +{ "ref1": 1, "ref2": [12,34], "ref3": "foo" } + diff --git a/test/json/swagger/check.txt b/test/json/swagger/check.txt new file mode 100644 index 0000000..30e14b3 --- /dev/null +++ b/test/json/swagger/check.txt @@ -0,0 +1,546 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:object +/ns0:object/ns0:item +/ns0:object/ns0:item@name="swagger" +/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:string@value="2.0" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="info" +/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="version" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="1.0.0" +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="title" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="Swagger Petstore (Simple)" +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification" +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="termsOfService" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="http://helloreverb.com/terms/" +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="contact" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="Swagger API team" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="email" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="foo@example.com" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="url" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="http://swagger.io" +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="license" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="MIT" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="url" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="http://opensource.org/licenses/MIT" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="host" +/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:string@value="petstore.swagger.wordnik.com" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="basePath" +/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:string@value="/api" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="schemes" +/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="http" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="consumes" +/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="application/json" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="produces" +/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="application/json" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="paths" +/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="/pets" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="get" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="Returns all pets from the system that the user has access to" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="operationId" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="findPets" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="produces" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="application/json" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="application/xml" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="text/xml" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="text/html" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="parameters" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="tags" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="in" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="query" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="tags to filter by" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="required" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:false +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="array" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="items" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="string" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="collectionFormat" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="csv" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="limit" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="in" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="query" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="maximum number of results to return" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="required" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:false +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="integer" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="format" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="int32" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="responses" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="200" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="pet response" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="schema" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="array" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="items" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="$ref" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="#/definitions/pet" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="default" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="unexpected error" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="schema" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="$ref" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="#/definitions/errorModel" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="post" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="Creates a new pet in the store. Duplicates are allowed" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="operationId" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="addPet" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="produces" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="application/json" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="parameters" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="pet" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="in" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="body" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="Pet to add to the store" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="required" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:true +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="schema" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="$ref" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="#/definitions/newPet" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="responses" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="200" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="pet response" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="schema" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="$ref" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="#/definitions/pet" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="default" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="unexpected error" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="schema" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="$ref" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="#/definitions/errorModel" +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="/pets/{id}" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="get" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="Returns a user based on a single ID, if the user does not have access to the pet" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="operationId" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="findPetById" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="produces" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="application/json" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="application/xml" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="text/xml" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="text/html" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="parameters" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="id" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="in" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="path" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="ID of pet to fetch" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="required" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:true +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="integer" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="format" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="int64" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="responses" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="200" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="pet response" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="schema" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="$ref" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="#/definitions/pet" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="default" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="unexpected error" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="schema" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="$ref" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="#/definitions/errorModel" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="delete" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="deletes a single pet based on the ID supplied" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="operationId" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="deletePet" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="parameters" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="id" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="in" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="path" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="ID of pet to delete" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="required" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:true +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="integer" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item@name="format" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:object/ns0:item/ns0:string@value="int64" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="responses" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="204" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="pet deleted" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="default" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="description" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="unexpected error" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="schema" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="$ref" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="#/definitions/errorModel" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="definitions" +/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="pet" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="required" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="id" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="properties" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="id" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="integer" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="format" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="int64" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="string" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="tag" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="string" +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="newPet" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="required" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="properties" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="id" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="integer" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="format" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="int64" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="name" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="string" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="tag" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="string" +/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item@name="errorModel" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="required" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="code" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:array/ns0:item/ns0:string@value="message" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="properties" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="code" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="integer" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="format" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="int32" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="message" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item@name="type" +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:object/ns0:item/ns0:string@value="string" diff --git a/test/json/swagger/input.json b/test/json/swagger/input.json new file mode 100644 index 0000000..5e57330 --- /dev/null +++ b/test/json/swagger/input.json @@ -0,0 +1,226 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "Swagger Petstore (Simple)", + "description": "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification", + "termsOfService": "http://helloreverb.com/terms/", + "contact": { + "name": "Swagger API team", + "email": "foo@example.com", + "url": "http://swagger.io" + }, + "license": { + "name": "MIT", + "url": "http://opensource.org/licenses/MIT" + } + }, + "host": "petstore.swagger.wordnik.com", + "basePath": "/api", + "schemes": [ + "http" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/pets": { + "get": { + "description": "Returns all pets from the system that the user has access to", + "operationId": "findPets", + "produces": [ + "application/json", + "application/xml", + "text/xml", + "text/html" + ], + "parameters": [ + { + "name": "tags", + "in": "query", + "description": "tags to filter by", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv" + }, + { + "name": "limit", + "in": "query", + "description": "maximum number of results to return", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "pet response", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/pet" + } + } + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/errorModel" + } + } + } + }, + "post": { + "description": "Creates a new pet in the store. Duplicates are allowed", + "operationId": "addPet", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "pet", + "in": "body", + "description": "Pet to add to the store", + "required": true, + "schema": { + "$ref": "#/definitions/newPet" + } + } + ], + "responses": { + "200": { + "description": "pet response", + "schema": { + "$ref": "#/definitions/pet" + } + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/errorModel" + } + } + } + } + }, + "/pets/{id}": { + "get": { + "description": "Returns a user based on a single ID, if the user does not have access to the pet", + "operationId": "findPetById", + "produces": [ + "application/json", + "application/xml", + "text/xml", + "text/html" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of pet to fetch", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "pet response", + "schema": { + "$ref": "#/definitions/pet" + } + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/errorModel" + } + } + } + }, + "delete": { + "description": "deletes a single pet based on the ID supplied", + "operationId": "deletePet", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of pet to delete", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "204": { + "description": "pet deleted" + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/errorModel" + } + } + } + } + } + }, + "definitions": { + "pet": { + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "tag": { + "type": "string" + } + } + }, + "newPet": { + "required": [ + "name" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "tag": { + "type": "string" + } + } + }, + "errorModel": { + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + } + } + } + } +} diff --git a/test/json/swagger/output.yaml b/test/json/swagger/output.yaml new file mode 100644 index 0000000..349e7a1 --- /dev/null +++ b/test/json/swagger/output.yaml @@ -0,0 +1,155 @@ +--- +swagger: 2.0 +info: + version: 1.0.0 + title: Swagger Petstore (Simple) + description: A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification + termsOfService: http://helloreverb.com/terms/ + contact: + name: Swagger API team + email: foo@example.com + url: http://swagger.io + license: + name: MIT + url: http://opensource.org/licenses/MIT +host: petstore.swagger.wordnik.com +basePath: /api +schemes: + - http +consumes: + - application/json +produces: + - application/json +paths: + /pets: + get: + description: Returns all pets from the system that the user has access to + operationId: findPets + produces: + - application/json + - application/xml + - text/xml + - text/html + parameters: + - name: tags + in: query + description: tags to filter by + required: false + type: array + items: + type: string + collectionFormat: csv + - name: limit + in: query + description: maximum number of results to return + required: false + type: integer + format: int32 + responses: + 200: + description: pet response + schema: + type: array + items: + $ref: "#/definitions/pet" + default: + description: unexpected error + schema: + $ref: "#/definitions/errorModel" + post: + description: Creates a new pet in the store. Duplicates are allowed + operationId: addPet + produces: + - application/json + parameters: + - name: pet + in: body + description: Pet to add to the store + required: true + schema: + $ref: "#/definitions/newPet" + responses: + 200: + description: pet response + schema: + $ref: "#/definitions/pet" + default: + description: unexpected error + schema: + $ref: "#/definitions/errorModel" + /pets/{id}: + get: + description: Returns a user based on a single ID, if the user does not have access to the pet + operationId: findPetById + produces: + - application/json + - application/xml + - text/xml + - text/html + parameters: + - name: id + in: path + description: ID of pet to fetch + required: true + type: integer + format: int64 + responses: + 200: + description: pet response + schema: + $ref: "#/definitions/pet" + default: + description: unexpected error + schema: + $ref: "#/definitions/errorModel" + delete: + description: deletes a single pet based on the ID supplied + operationId: deletePet + parameters: + - name: id + in: path + description: ID of pet to delete + required: true + type: integer + format: int64 + responses: + 204: + description: pet deleted + default: + description: unexpected error + schema: + $ref: "#/definitions/errorModel" +definitions: + pet: + required: + - id + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string + newPet: + required: + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string + errorModel: + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string diff --git a/test/json/to-yaml-1/check.txt b/test/json/to-yaml-1/check.txt new file mode 100644 index 0000000..955eee1 --- /dev/null +++ b/test/json/to-yaml-1/check.txt @@ -0,0 +1,14 @@ +ns0="http://schemas.kohei.us/orcus/2015/json" +/ns0:object +/ns0:object/ns0:item +/ns0:object/ns0:item@name="A:B:C" +/ns0:object/ns0:item/ns0:number +/ns0:object/ns0:item/ns0:number@value="123" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="#text" +/ns0:object/ns0:item/ns0:string +/ns0:object/ns0:item/ns0:string@value="my value" +/ns0:object/ns0:item +/ns0:object/ns0:item@name="A: B: C: " +/ns0:object/ns0:item/ns0:number +/ns0:object/ns0:item/ns0:number@value="456" diff --git a/test/json/to-yaml-1/input.json b/test/json/to-yaml-1/input.json new file mode 100644 index 0000000..3dedc8a --- /dev/null +++ b/test/json/to-yaml-1/input.json @@ -0,0 +1 @@ +{ "A:B:C": 123, "#text": "my value", "A: B: C: ": 456 } diff --git a/test/json/to-yaml-1/output.yaml b/test/json/to-yaml-1/output.yaml new file mode 100644 index 0000000..1d8628a --- /dev/null +++ b/test/json/to-yaml-1/output.yaml @@ -0,0 +1,4 @@ +--- +A:B:C: 123 +"#text": my value +"A: B: C: ": 456 diff --git a/test/json/validation/LICENSE b/test/json/validation/LICENSE new file mode 100644 index 0000000..c4b3621 --- /dev/null +++ b/test/json/validation/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Nicolas Seriot + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/test/json/validation/README b/test/json/validation/README new file mode 100644 index 0000000..1967dfe --- /dev/null +++ b/test/json/validation/README @@ -0,0 +1 @@ +These files are taken from https://github.com/nst/JSONTestSuite and are distributed under the MIT license. diff --git a/test/json/validation/i_number_double_huge_neg_exp.json b/test/json/validation/i_number_double_huge_neg_exp.json new file mode 100644 index 0000000..ae4c7b7 --- /dev/null +++ b/test/json/validation/i_number_double_huge_neg_exp.json @@ -0,0 +1 @@ +[123.456e-789] \ No newline at end of file diff --git a/test/json/validation/i_number_huge_exp.json b/test/json/validation/i_number_huge_exp.json new file mode 100644 index 0000000..9b5efa2 --- /dev/null +++ b/test/json/validation/i_number_huge_exp.json @@ -0,0 +1 @@ +[0.4e00669999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999969999999006] \ No newline at end of file diff --git a/test/json/validation/i_number_neg_int_huge_exp.json b/test/json/validation/i_number_neg_int_huge_exp.json new file mode 100644 index 0000000..3abd58a --- /dev/null +++ b/test/json/validation/i_number_neg_int_huge_exp.json @@ -0,0 +1 @@ +[-1e+9999] \ No newline at end of file diff --git a/test/json/validation/i_number_pos_double_huge_exp.json b/test/json/validation/i_number_pos_double_huge_exp.json new file mode 100644 index 0000000..e10a7eb --- /dev/null +++ b/test/json/validation/i_number_pos_double_huge_exp.json @@ -0,0 +1 @@ +[1.5e+9999] \ No newline at end of file diff --git a/test/json/validation/i_number_real_neg_overflow.json b/test/json/validation/i_number_real_neg_overflow.json new file mode 100644 index 0000000..3d628a9 --- /dev/null +++ b/test/json/validation/i_number_real_neg_overflow.json @@ -0,0 +1 @@ +[-123123e100000] \ No newline at end of file diff --git a/test/json/validation/i_number_real_pos_overflow.json b/test/json/validation/i_number_real_pos_overflow.json new file mode 100644 index 0000000..54d7d3d --- /dev/null +++ b/test/json/validation/i_number_real_pos_overflow.json @@ -0,0 +1 @@ +[123123e100000] \ No newline at end of file diff --git a/test/json/validation/i_number_real_underflow.json b/test/json/validation/i_number_real_underflow.json new file mode 100644 index 0000000..c5236eb --- /dev/null +++ b/test/json/validation/i_number_real_underflow.json @@ -0,0 +1 @@ +[123e-10000000] \ No newline at end of file diff --git a/test/json/validation/i_number_too_big_neg_int.json b/test/json/validation/i_number_too_big_neg_int.json new file mode 100644 index 0000000..dfa3846 --- /dev/null +++ b/test/json/validation/i_number_too_big_neg_int.json @@ -0,0 +1 @@ +[-123123123123123123123123123123] \ No newline at end of file diff --git a/test/json/validation/i_number_too_big_pos_int.json b/test/json/validation/i_number_too_big_pos_int.json new file mode 100644 index 0000000..338a8c3 --- /dev/null +++ b/test/json/validation/i_number_too_big_pos_int.json @@ -0,0 +1 @@ +[100000000000000000000] \ No newline at end of file diff --git a/test/json/validation/i_number_very_big_negative_int.json b/test/json/validation/i_number_very_big_negative_int.json new file mode 100644 index 0000000..e2d9738 --- /dev/null +++ b/test/json/validation/i_number_very_big_negative_int.json @@ -0,0 +1 @@ +[-237462374673276894279832749832423479823246327846] \ No newline at end of file diff --git a/test/json/validation/i_object_key_lone_2nd_surrogate.json b/test/json/validation/i_object_key_lone_2nd_surrogate.json new file mode 100644 index 0000000..5be7eba --- /dev/null +++ b/test/json/validation/i_object_key_lone_2nd_surrogate.json @@ -0,0 +1 @@ +{"\uDFAA":0} \ No newline at end of file diff --git a/test/json/validation/i_string_1st_surrogate_but_2nd_missing.json b/test/json/validation/i_string_1st_surrogate_but_2nd_missing.json new file mode 100644 index 0000000..3b9e37c --- /dev/null +++ b/test/json/validation/i_string_1st_surrogate_but_2nd_missing.json @@ -0,0 +1 @@ +["\uDADA"] \ No newline at end of file diff --git a/test/json/validation/i_string_1st_valid_surrogate_2nd_invalid.json b/test/json/validation/i_string_1st_valid_surrogate_2nd_invalid.json new file mode 100644 index 0000000..4875928 --- /dev/null +++ b/test/json/validation/i_string_1st_valid_surrogate_2nd_invalid.json @@ -0,0 +1 @@ +["\uD888\u1234"] \ No newline at end of file diff --git a/test/json/validation/i_string_UTF-16LE_with_BOM.json b/test/json/validation/i_string_UTF-16LE_with_BOM.json new file mode 100644 index 0000000..2a79c06 Binary files /dev/null and b/test/json/validation/i_string_UTF-16LE_with_BOM.json differ diff --git a/test/json/validation/i_string_UTF-8_invalid_sequence.json b/test/json/validation/i_string_UTF-8_invalid_sequence.json new file mode 100644 index 0000000..e2a968a --- /dev/null +++ b/test/json/validation/i_string_UTF-8_invalid_sequence.json @@ -0,0 +1 @@ +["日ш"] \ No newline at end of file diff --git a/test/json/validation/i_string_UTF8_surrogate_U+D800.json b/test/json/validation/i_string_UTF8_surrogate_U+D800.json new file mode 100644 index 0000000..916bff9 --- /dev/null +++ b/test/json/validation/i_string_UTF8_surrogate_U+D800.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/i_string_incomplete_surrogate_and_escape_valid.json b/test/json/validation/i_string_incomplete_surrogate_and_escape_valid.json new file mode 100644 index 0000000..3cb11d2 --- /dev/null +++ b/test/json/validation/i_string_incomplete_surrogate_and_escape_valid.json @@ -0,0 +1 @@ +["\uD800\n"] \ No newline at end of file diff --git a/test/json/validation/i_string_incomplete_surrogate_pair.json b/test/json/validation/i_string_incomplete_surrogate_pair.json new file mode 100644 index 0000000..38ec23b --- /dev/null +++ b/test/json/validation/i_string_incomplete_surrogate_pair.json @@ -0,0 +1 @@ +["\uDd1ea"] \ No newline at end of file diff --git a/test/json/validation/i_string_incomplete_surrogates_escape_valid.json b/test/json/validation/i_string_incomplete_surrogates_escape_valid.json new file mode 100644 index 0000000..c9cd6f6 --- /dev/null +++ b/test/json/validation/i_string_incomplete_surrogates_escape_valid.json @@ -0,0 +1 @@ +["\uD800\uD800\n"] \ No newline at end of file diff --git a/test/json/validation/i_string_invalid_lonely_surrogate.json b/test/json/validation/i_string_invalid_lonely_surrogate.json new file mode 100644 index 0000000..3abbd8d --- /dev/null +++ b/test/json/validation/i_string_invalid_lonely_surrogate.json @@ -0,0 +1 @@ +["\ud800"] \ No newline at end of file diff --git a/test/json/validation/i_string_invalid_surrogate.json b/test/json/validation/i_string_invalid_surrogate.json new file mode 100644 index 0000000..ffddc04 --- /dev/null +++ b/test/json/validation/i_string_invalid_surrogate.json @@ -0,0 +1 @@ +["\ud800abc"] \ No newline at end of file diff --git a/test/json/validation/i_string_invalid_utf-8.json b/test/json/validation/i_string_invalid_utf-8.json new file mode 100644 index 0000000..8e45a7e --- /dev/null +++ b/test/json/validation/i_string_invalid_utf-8.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/i_string_inverted_surrogates_U+1D11E.json b/test/json/validation/i_string_inverted_surrogates_U+1D11E.json new file mode 100644 index 0000000..0d5456c --- /dev/null +++ b/test/json/validation/i_string_inverted_surrogates_U+1D11E.json @@ -0,0 +1 @@ +["\uDd1e\uD834"] \ No newline at end of file diff --git a/test/json/validation/i_string_iso_latin_1.json b/test/json/validation/i_string_iso_latin_1.json new file mode 100644 index 0000000..9389c98 --- /dev/null +++ b/test/json/validation/i_string_iso_latin_1.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/i_string_lone_second_surrogate.json b/test/json/validation/i_string_lone_second_surrogate.json new file mode 100644 index 0000000..1dbd397 --- /dev/null +++ b/test/json/validation/i_string_lone_second_surrogate.json @@ -0,0 +1 @@ +["\uDFAA"] \ No newline at end of file diff --git a/test/json/validation/i_string_lone_utf8_continuation_byte.json b/test/json/validation/i_string_lone_utf8_continuation_byte.json new file mode 100644 index 0000000..729337c --- /dev/null +++ b/test/json/validation/i_string_lone_utf8_continuation_byte.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/i_string_not_in_unicode_range.json b/test/json/validation/i_string_not_in_unicode_range.json new file mode 100644 index 0000000..df90a29 --- /dev/null +++ b/test/json/validation/i_string_not_in_unicode_range.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/i_string_overlong_sequence_2_bytes.json b/test/json/validation/i_string_overlong_sequence_2_bytes.json new file mode 100644 index 0000000..c8cee5e --- /dev/null +++ b/test/json/validation/i_string_overlong_sequence_2_bytes.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/i_string_overlong_sequence_6_bytes.json b/test/json/validation/i_string_overlong_sequence_6_bytes.json new file mode 100644 index 0000000..9a91da7 --- /dev/null +++ b/test/json/validation/i_string_overlong_sequence_6_bytes.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/i_string_overlong_sequence_6_bytes_null.json b/test/json/validation/i_string_overlong_sequence_6_bytes_null.json new file mode 100644 index 0000000..d24fffd --- /dev/null +++ b/test/json/validation/i_string_overlong_sequence_6_bytes_null.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/i_string_truncated-utf-8.json b/test/json/validation/i_string_truncated-utf-8.json new file mode 100644 index 0000000..63c7777 --- /dev/null +++ b/test/json/validation/i_string_truncated-utf-8.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/i_string_utf16BE_no_BOM.json b/test/json/validation/i_string_utf16BE_no_BOM.json new file mode 100644 index 0000000..57e5392 Binary files /dev/null and b/test/json/validation/i_string_utf16BE_no_BOM.json differ diff --git a/test/json/validation/i_string_utf16LE_no_BOM.json b/test/json/validation/i_string_utf16LE_no_BOM.json new file mode 100644 index 0000000..c49c1b2 Binary files /dev/null and b/test/json/validation/i_string_utf16LE_no_BOM.json differ diff --git a/test/json/validation/i_structure_500_nested_arrays.json b/test/json/validation/i_structure_500_nested_arrays.json new file mode 100644 index 0000000..7118405 --- /dev/null +++ b/test/json/validation/i_structure_500_nested_arrays.json @@ -0,0 +1 @@ +[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] \ No newline at end of file diff --git a/test/json/validation/i_structure_UTF-8_BOM_empty_object.json b/test/json/validation/i_structure_UTF-8_BOM_empty_object.json new file mode 100644 index 0000000..22fdca1 --- /dev/null +++ b/test/json/validation/i_structure_UTF-8_BOM_empty_object.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/json/validation/n_array_1_true_without_comma.json b/test/json/validation/n_array_1_true_without_comma.json new file mode 100644 index 0000000..c14e3f6 --- /dev/null +++ b/test/json/validation/n_array_1_true_without_comma.json @@ -0,0 +1 @@ +[1 true] \ No newline at end of file diff --git a/test/json/validation/n_array_a_invalid_utf8.json b/test/json/validation/n_array_a_invalid_utf8.json new file mode 100644 index 0000000..38a86e2 --- /dev/null +++ b/test/json/validation/n_array_a_invalid_utf8.json @@ -0,0 +1 @@ +[a] \ No newline at end of file diff --git a/test/json/validation/n_array_colon_instead_of_comma.json b/test/json/validation/n_array_colon_instead_of_comma.json new file mode 100644 index 0000000..0d02ad4 --- /dev/null +++ b/test/json/validation/n_array_colon_instead_of_comma.json @@ -0,0 +1 @@ +["": 1] \ No newline at end of file diff --git a/test/json/validation/n_array_comma_after_close.json b/test/json/validation/n_array_comma_after_close.json new file mode 100644 index 0000000..2ccba8d --- /dev/null +++ b/test/json/validation/n_array_comma_after_close.json @@ -0,0 +1 @@ +[""], \ No newline at end of file diff --git a/test/json/validation/n_array_comma_and_number.json b/test/json/validation/n_array_comma_and_number.json new file mode 100644 index 0000000..d2c84e3 --- /dev/null +++ b/test/json/validation/n_array_comma_and_number.json @@ -0,0 +1 @@ +[,1] \ No newline at end of file diff --git a/test/json/validation/n_array_double_comma.json b/test/json/validation/n_array_double_comma.json new file mode 100644 index 0000000..0431712 --- /dev/null +++ b/test/json/validation/n_array_double_comma.json @@ -0,0 +1 @@ +[1,,2] \ No newline at end of file diff --git a/test/json/validation/n_array_double_extra_comma.json b/test/json/validation/n_array_double_extra_comma.json new file mode 100644 index 0000000..3f01d31 --- /dev/null +++ b/test/json/validation/n_array_double_extra_comma.json @@ -0,0 +1 @@ +["x",,] \ No newline at end of file diff --git a/test/json/validation/n_array_extra_close.json b/test/json/validation/n_array_extra_close.json new file mode 100644 index 0000000..c12f9fa --- /dev/null +++ b/test/json/validation/n_array_extra_close.json @@ -0,0 +1 @@ +["x"]] \ No newline at end of file diff --git a/test/json/validation/n_array_extra_comma.json b/test/json/validation/n_array_extra_comma.json new file mode 100644 index 0000000..5f8ce18 --- /dev/null +++ b/test/json/validation/n_array_extra_comma.json @@ -0,0 +1 @@ +["",] \ No newline at end of file diff --git a/test/json/validation/n_array_incomplete.json b/test/json/validation/n_array_incomplete.json new file mode 100644 index 0000000..cc65b0b --- /dev/null +++ b/test/json/validation/n_array_incomplete.json @@ -0,0 +1 @@ +["x" \ No newline at end of file diff --git a/test/json/validation/n_array_incomplete_invalid_value.json b/test/json/validation/n_array_incomplete_invalid_value.json new file mode 100644 index 0000000..c21a8f6 --- /dev/null +++ b/test/json/validation/n_array_incomplete_invalid_value.json @@ -0,0 +1 @@ +[x \ No newline at end of file diff --git a/test/json/validation/n_array_inner_array_no_comma.json b/test/json/validation/n_array_inner_array_no_comma.json new file mode 100644 index 0000000..c70b716 --- /dev/null +++ b/test/json/validation/n_array_inner_array_no_comma.json @@ -0,0 +1 @@ +[3[4]] \ No newline at end of file diff --git a/test/json/validation/n_array_invalid_utf8.json b/test/json/validation/n_array_invalid_utf8.json new file mode 100644 index 0000000..6099d34 --- /dev/null +++ b/test/json/validation/n_array_invalid_utf8.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/json/validation/n_array_items_separated_by_semicolon.json b/test/json/validation/n_array_items_separated_by_semicolon.json new file mode 100644 index 0000000..d4bd731 --- /dev/null +++ b/test/json/validation/n_array_items_separated_by_semicolon.json @@ -0,0 +1 @@ +[1:2] \ No newline at end of file diff --git a/test/json/validation/n_array_just_comma.json b/test/json/validation/n_array_just_comma.json new file mode 100644 index 0000000..9d7077c --- /dev/null +++ b/test/json/validation/n_array_just_comma.json @@ -0,0 +1 @@ +[,] \ No newline at end of file diff --git a/test/json/validation/n_array_just_minus.json b/test/json/validation/n_array_just_minus.json new file mode 100644 index 0000000..29501c6 --- /dev/null +++ b/test/json/validation/n_array_just_minus.json @@ -0,0 +1 @@ +[-] \ No newline at end of file diff --git a/test/json/validation/n_array_missing_value.json b/test/json/validation/n_array_missing_value.json new file mode 100644 index 0000000..3a6ba86 --- /dev/null +++ b/test/json/validation/n_array_missing_value.json @@ -0,0 +1 @@ +[ , ""] \ No newline at end of file diff --git a/test/json/validation/n_array_newlines_unclosed.json b/test/json/validation/n_array_newlines_unclosed.json new file mode 100644 index 0000000..6466800 --- /dev/null +++ b/test/json/validation/n_array_newlines_unclosed.json @@ -0,0 +1,3 @@ +["a", +4 +,1, \ No newline at end of file diff --git a/test/json/validation/n_array_number_and_comma.json b/test/json/validation/n_array_number_and_comma.json new file mode 100644 index 0000000..13f6f1d --- /dev/null +++ b/test/json/validation/n_array_number_and_comma.json @@ -0,0 +1 @@ +[1,] \ No newline at end of file diff --git a/test/json/validation/n_array_number_and_several_commas.json b/test/json/validation/n_array_number_and_several_commas.json new file mode 100644 index 0000000..0ac408c --- /dev/null +++ b/test/json/validation/n_array_number_and_several_commas.json @@ -0,0 +1 @@ +[1,,] \ No newline at end of file diff --git a/test/json/validation/n_array_spaces_vertical_tab_formfeed.json b/test/json/validation/n_array_spaces_vertical_tab_formfeed.json new file mode 100644 index 0000000..6cd7cf5 --- /dev/null +++ b/test/json/validation/n_array_spaces_vertical_tab_formfeed.json @@ -0,0 +1 @@ +[" a"\f] \ No newline at end of file diff --git a/test/json/validation/n_array_star_inside.json b/test/json/validation/n_array_star_inside.json new file mode 100644 index 0000000..5a51946 --- /dev/null +++ b/test/json/validation/n_array_star_inside.json @@ -0,0 +1 @@ +[*] \ No newline at end of file diff --git a/test/json/validation/n_array_unclosed.json b/test/json/validation/n_array_unclosed.json new file mode 100644 index 0000000..0607330 --- /dev/null +++ b/test/json/validation/n_array_unclosed.json @@ -0,0 +1 @@ +["" \ No newline at end of file diff --git a/test/json/validation/n_array_unclosed_trailing_comma.json b/test/json/validation/n_array_unclosed_trailing_comma.json new file mode 100644 index 0000000..6604698 --- /dev/null +++ b/test/json/validation/n_array_unclosed_trailing_comma.json @@ -0,0 +1 @@ +[1, \ No newline at end of file diff --git a/test/json/validation/n_array_unclosed_with_new_lines.json b/test/json/validation/n_array_unclosed_with_new_lines.json new file mode 100644 index 0000000..4f61de3 --- /dev/null +++ b/test/json/validation/n_array_unclosed_with_new_lines.json @@ -0,0 +1,3 @@ +[1, +1 +,1 \ No newline at end of file diff --git a/test/json/validation/n_array_unclosed_with_object_inside.json b/test/json/validation/n_array_unclosed_with_object_inside.json new file mode 100644 index 0000000..043a87e --- /dev/null +++ b/test/json/validation/n_array_unclosed_with_object_inside.json @@ -0,0 +1 @@ +[{} \ No newline at end of file diff --git a/test/json/validation/n_incomplete_false.json b/test/json/validation/n_incomplete_false.json new file mode 100644 index 0000000..eb18c6a --- /dev/null +++ b/test/json/validation/n_incomplete_false.json @@ -0,0 +1 @@ +[fals] \ No newline at end of file diff --git a/test/json/validation/n_incomplete_null.json b/test/json/validation/n_incomplete_null.json new file mode 100644 index 0000000..c18ef53 --- /dev/null +++ b/test/json/validation/n_incomplete_null.json @@ -0,0 +1 @@ +[nul] \ No newline at end of file diff --git a/test/json/validation/n_incomplete_true.json b/test/json/validation/n_incomplete_true.json new file mode 100644 index 0000000..f451ac6 --- /dev/null +++ b/test/json/validation/n_incomplete_true.json @@ -0,0 +1 @@ +[tru] \ No newline at end of file diff --git a/test/json/validation/n_multidigit_number_then_00.json b/test/json/validation/n_multidigit_number_then_00.json new file mode 100644 index 0000000..c22507b Binary files /dev/null and b/test/json/validation/n_multidigit_number_then_00.json differ diff --git a/test/json/validation/n_number_++.json b/test/json/validation/n_number_++.json new file mode 100644 index 0000000..bdb62aa --- /dev/null +++ b/test/json/validation/n_number_++.json @@ -0,0 +1 @@ +[++1234] \ No newline at end of file diff --git a/test/json/validation/n_number_+1.json b/test/json/validation/n_number_+1.json new file mode 100644 index 0000000..3cbe58c --- /dev/null +++ b/test/json/validation/n_number_+1.json @@ -0,0 +1 @@ +[+1] \ No newline at end of file diff --git a/test/json/validation/n_number_+Inf.json b/test/json/validation/n_number_+Inf.json new file mode 100644 index 0000000..871ae14 --- /dev/null +++ b/test/json/validation/n_number_+Inf.json @@ -0,0 +1 @@ +[+Inf] \ No newline at end of file diff --git a/test/json/validation/n_number_-01.json b/test/json/validation/n_number_-01.json new file mode 100644 index 0000000..0df32ba --- /dev/null +++ b/test/json/validation/n_number_-01.json @@ -0,0 +1 @@ +[-01] \ No newline at end of file diff --git a/test/json/validation/n_number_-1.0..json b/test/json/validation/n_number_-1.0..json new file mode 100644 index 0000000..7cf55a8 --- /dev/null +++ b/test/json/validation/n_number_-1.0..json @@ -0,0 +1 @@ +[-1.0.] \ No newline at end of file diff --git a/test/json/validation/n_number_-2..json b/test/json/validation/n_number_-2..json new file mode 100644 index 0000000..9be8436 --- /dev/null +++ b/test/json/validation/n_number_-2..json @@ -0,0 +1 @@ +[-2.] \ No newline at end of file diff --git a/test/json/validation/n_number_-NaN.json b/test/json/validation/n_number_-NaN.json new file mode 100644 index 0000000..f61615d --- /dev/null +++ b/test/json/validation/n_number_-NaN.json @@ -0,0 +1 @@ +[-NaN] \ No newline at end of file diff --git a/test/json/validation/n_number_.-1.json b/test/json/validation/n_number_.-1.json new file mode 100644 index 0000000..1c9f2dd --- /dev/null +++ b/test/json/validation/n_number_.-1.json @@ -0,0 +1 @@ +[.-1] \ No newline at end of file diff --git a/test/json/validation/n_number_.2e-3.json b/test/json/validation/n_number_.2e-3.json new file mode 100644 index 0000000..c6c976f --- /dev/null +++ b/test/json/validation/n_number_.2e-3.json @@ -0,0 +1 @@ +[.2e-3] \ No newline at end of file diff --git a/test/json/validation/n_number_0.1.2.json b/test/json/validation/n_number_0.1.2.json new file mode 100644 index 0000000..c83a256 --- /dev/null +++ b/test/json/validation/n_number_0.1.2.json @@ -0,0 +1 @@ +[0.1.2] \ No newline at end of file diff --git a/test/json/validation/n_number_0.3e+.json b/test/json/validation/n_number_0.3e+.json new file mode 100644 index 0000000..a55a1bf --- /dev/null +++ b/test/json/validation/n_number_0.3e+.json @@ -0,0 +1 @@ +[0.3e+] \ No newline at end of file diff --git a/test/json/validation/n_number_0.3e.json b/test/json/validation/n_number_0.3e.json new file mode 100644 index 0000000..3dd5df4 --- /dev/null +++ b/test/json/validation/n_number_0.3e.json @@ -0,0 +1 @@ +[0.3e] \ No newline at end of file diff --git a/test/json/validation/n_number_0.e1.json b/test/json/validation/n_number_0.e1.json new file mode 100644 index 0000000..c92c71c --- /dev/null +++ b/test/json/validation/n_number_0.e1.json @@ -0,0 +1 @@ +[0.e1] \ No newline at end of file diff --git a/test/json/validation/n_number_0_capital_E+.json b/test/json/validation/n_number_0_capital_E+.json new file mode 100644 index 0000000..3ba2c7d --- /dev/null +++ b/test/json/validation/n_number_0_capital_E+.json @@ -0,0 +1 @@ +[0E+] \ No newline at end of file diff --git a/test/json/validation/n_number_0_capital_E.json b/test/json/validation/n_number_0_capital_E.json new file mode 100644 index 0000000..5301840 --- /dev/null +++ b/test/json/validation/n_number_0_capital_E.json @@ -0,0 +1 @@ +[0E] \ No newline at end of file diff --git a/test/json/validation/n_number_0e+.json b/test/json/validation/n_number_0e+.json new file mode 100644 index 0000000..8ab0bc4 --- /dev/null +++ b/test/json/validation/n_number_0e+.json @@ -0,0 +1 @@ +[0e+] \ No newline at end of file diff --git a/test/json/validation/n_number_0e.json b/test/json/validation/n_number_0e.json new file mode 100644 index 0000000..47ec421 --- /dev/null +++ b/test/json/validation/n_number_0e.json @@ -0,0 +1 @@ +[0e] \ No newline at end of file diff --git a/test/json/validation/n_number_1.0e+.json b/test/json/validation/n_number_1.0e+.json new file mode 100644 index 0000000..cd84b9f --- /dev/null +++ b/test/json/validation/n_number_1.0e+.json @@ -0,0 +1 @@ +[1.0e+] \ No newline at end of file diff --git a/test/json/validation/n_number_1.0e-.json b/test/json/validation/n_number_1.0e-.json new file mode 100644 index 0000000..4eb7afa --- /dev/null +++ b/test/json/validation/n_number_1.0e-.json @@ -0,0 +1 @@ +[1.0e-] \ No newline at end of file diff --git a/test/json/validation/n_number_1.0e.json b/test/json/validation/n_number_1.0e.json new file mode 100644 index 0000000..21753f4 --- /dev/null +++ b/test/json/validation/n_number_1.0e.json @@ -0,0 +1 @@ +[1.0e] \ No newline at end of file diff --git a/test/json/validation/n_number_1_000.json b/test/json/validation/n_number_1_000.json new file mode 100644 index 0000000..7b18b66 --- /dev/null +++ b/test/json/validation/n_number_1_000.json @@ -0,0 +1 @@ +[1 000.0] \ No newline at end of file diff --git a/test/json/validation/n_number_1eE2.json b/test/json/validation/n_number_1eE2.json new file mode 100644 index 0000000..4318a34 --- /dev/null +++ b/test/json/validation/n_number_1eE2.json @@ -0,0 +1 @@ +[1eE2] \ No newline at end of file diff --git a/test/json/validation/n_number_2.e+3.json b/test/json/validation/n_number_2.e+3.json new file mode 100644 index 0000000..4442f39 --- /dev/null +++ b/test/json/validation/n_number_2.e+3.json @@ -0,0 +1 @@ +[2.e+3] \ No newline at end of file diff --git a/test/json/validation/n_number_2.e-3.json b/test/json/validation/n_number_2.e-3.json new file mode 100644 index 0000000..a65060e --- /dev/null +++ b/test/json/validation/n_number_2.e-3.json @@ -0,0 +1 @@ +[2.e-3] \ No newline at end of file diff --git a/test/json/validation/n_number_2.e3.json b/test/json/validation/n_number_2.e3.json new file mode 100644 index 0000000..66f7cf7 --- /dev/null +++ b/test/json/validation/n_number_2.e3.json @@ -0,0 +1 @@ +[2.e3] \ No newline at end of file diff --git a/test/json/validation/n_number_9.e+.json b/test/json/validation/n_number_9.e+.json new file mode 100644 index 0000000..732a7b1 --- /dev/null +++ b/test/json/validation/n_number_9.e+.json @@ -0,0 +1 @@ +[9.e+] \ No newline at end of file diff --git a/test/json/validation/n_number_Inf.json b/test/json/validation/n_number_Inf.json new file mode 100644 index 0000000..c40c734 --- /dev/null +++ b/test/json/validation/n_number_Inf.json @@ -0,0 +1 @@ +[Inf] \ No newline at end of file diff --git a/test/json/validation/n_number_NaN.json b/test/json/validation/n_number_NaN.json new file mode 100644 index 0000000..4992317 --- /dev/null +++ b/test/json/validation/n_number_NaN.json @@ -0,0 +1 @@ +[NaN] \ No newline at end of file diff --git a/test/json/validation/n_number_U+FF11_fullwidth_digit_one.json b/test/json/validation/n_number_U+FF11_fullwidth_digit_one.json new file mode 100644 index 0000000..b14587e --- /dev/null +++ b/test/json/validation/n_number_U+FF11_fullwidth_digit_one.json @@ -0,0 +1 @@ +[1] \ No newline at end of file diff --git a/test/json/validation/n_number_expression.json b/test/json/validation/n_number_expression.json new file mode 100644 index 0000000..76fdbc8 --- /dev/null +++ b/test/json/validation/n_number_expression.json @@ -0,0 +1 @@ +[1+2] \ No newline at end of file diff --git a/test/json/validation/n_number_hex_1_digit.json b/test/json/validation/n_number_hex_1_digit.json new file mode 100644 index 0000000..3b21488 --- /dev/null +++ b/test/json/validation/n_number_hex_1_digit.json @@ -0,0 +1 @@ +[0x1] \ No newline at end of file diff --git a/test/json/validation/n_number_hex_2_digits.json b/test/json/validation/n_number_hex_2_digits.json new file mode 100644 index 0000000..83e516a --- /dev/null +++ b/test/json/validation/n_number_hex_2_digits.json @@ -0,0 +1 @@ +[0x42] \ No newline at end of file diff --git a/test/json/validation/n_number_infinity.json b/test/json/validation/n_number_infinity.json new file mode 100644 index 0000000..8c2baf7 --- /dev/null +++ b/test/json/validation/n_number_infinity.json @@ -0,0 +1 @@ +[Infinity] \ No newline at end of file diff --git a/test/json/validation/n_number_invalid+-.json b/test/json/validation/n_number_invalid+-.json new file mode 100644 index 0000000..1cce602 --- /dev/null +++ b/test/json/validation/n_number_invalid+-.json @@ -0,0 +1 @@ +[0e+-1] \ No newline at end of file diff --git a/test/json/validation/n_number_invalid-negative-real.json b/test/json/validation/n_number_invalid-negative-real.json new file mode 100644 index 0000000..5fc3c1e --- /dev/null +++ b/test/json/validation/n_number_invalid-negative-real.json @@ -0,0 +1 @@ +[-123.123foo] \ No newline at end of file diff --git a/test/json/validation/n_number_invalid-utf-8-in-bigger-int.json b/test/json/validation/n_number_invalid-utf-8-in-bigger-int.json new file mode 100644 index 0000000..3b97e58 --- /dev/null +++ b/test/json/validation/n_number_invalid-utf-8-in-bigger-int.json @@ -0,0 +1 @@ +[123] \ No newline at end of file diff --git a/test/json/validation/n_number_invalid-utf-8-in-exponent.json b/test/json/validation/n_number_invalid-utf-8-in-exponent.json new file mode 100644 index 0000000..ea35d72 --- /dev/null +++ b/test/json/validation/n_number_invalid-utf-8-in-exponent.json @@ -0,0 +1 @@ +[1e1] \ No newline at end of file diff --git a/test/json/validation/n_number_invalid-utf-8-in-int.json b/test/json/validation/n_number_invalid-utf-8-in-int.json new file mode 100644 index 0000000..371226e --- /dev/null +++ b/test/json/validation/n_number_invalid-utf-8-in-int.json @@ -0,0 +1 @@ +[0] diff --git a/test/json/validation/n_number_minus_infinity.json b/test/json/validation/n_number_minus_infinity.json new file mode 100644 index 0000000..cf4133d --- /dev/null +++ b/test/json/validation/n_number_minus_infinity.json @@ -0,0 +1 @@ +[-Infinity] \ No newline at end of file diff --git a/test/json/validation/n_number_minus_sign_with_trailing_garbage.json b/test/json/validation/n_number_minus_sign_with_trailing_garbage.json new file mode 100644 index 0000000..a6d8e78 --- /dev/null +++ b/test/json/validation/n_number_minus_sign_with_trailing_garbage.json @@ -0,0 +1 @@ +[-foo] \ No newline at end of file diff --git a/test/json/validation/n_number_minus_space_1.json b/test/json/validation/n_number_minus_space_1.json new file mode 100644 index 0000000..9a5ebed --- /dev/null +++ b/test/json/validation/n_number_minus_space_1.json @@ -0,0 +1 @@ +[- 1] \ No newline at end of file diff --git a/test/json/validation/n_number_neg_int_starting_with_zero.json b/test/json/validation/n_number_neg_int_starting_with_zero.json new file mode 100644 index 0000000..67af096 --- /dev/null +++ b/test/json/validation/n_number_neg_int_starting_with_zero.json @@ -0,0 +1 @@ +[-012] \ No newline at end of file diff --git a/test/json/validation/n_number_neg_real_without_int_part.json b/test/json/validation/n_number_neg_real_without_int_part.json new file mode 100644 index 0000000..1f2a434 --- /dev/null +++ b/test/json/validation/n_number_neg_real_without_int_part.json @@ -0,0 +1 @@ +[-.123] \ No newline at end of file diff --git a/test/json/validation/n_number_neg_with_garbage_at_end.json b/test/json/validation/n_number_neg_with_garbage_at_end.json new file mode 100644 index 0000000..2aa7311 --- /dev/null +++ b/test/json/validation/n_number_neg_with_garbage_at_end.json @@ -0,0 +1 @@ +[-1x] \ No newline at end of file diff --git a/test/json/validation/n_number_real_garbage_after_e.json b/test/json/validation/n_number_real_garbage_after_e.json new file mode 100644 index 0000000..9213dfc --- /dev/null +++ b/test/json/validation/n_number_real_garbage_after_e.json @@ -0,0 +1 @@ +[1ea] \ No newline at end of file diff --git a/test/json/validation/n_number_real_with_invalid_utf8_after_e.json b/test/json/validation/n_number_real_with_invalid_utf8_after_e.json new file mode 100644 index 0000000..1e52ef9 --- /dev/null +++ b/test/json/validation/n_number_real_with_invalid_utf8_after_e.json @@ -0,0 +1 @@ +[1e] \ No newline at end of file diff --git a/test/json/validation/n_number_real_without_fractional_part.json b/test/json/validation/n_number_real_without_fractional_part.json new file mode 100644 index 0000000..1de287c --- /dev/null +++ b/test/json/validation/n_number_real_without_fractional_part.json @@ -0,0 +1 @@ +[1.] \ No newline at end of file diff --git a/test/json/validation/n_number_starting_with_dot.json b/test/json/validation/n_number_starting_with_dot.json new file mode 100644 index 0000000..f682dbd --- /dev/null +++ b/test/json/validation/n_number_starting_with_dot.json @@ -0,0 +1 @@ +[.123] \ No newline at end of file diff --git a/test/json/validation/n_number_with_alpha.json b/test/json/validation/n_number_with_alpha.json new file mode 100644 index 0000000..1e42d81 --- /dev/null +++ b/test/json/validation/n_number_with_alpha.json @@ -0,0 +1 @@ +[1.2a-3] \ No newline at end of file diff --git a/test/json/validation/n_number_with_alpha_char.json b/test/json/validation/n_number_with_alpha_char.json new file mode 100644 index 0000000..b79dacc --- /dev/null +++ b/test/json/validation/n_number_with_alpha_char.json @@ -0,0 +1 @@ +[1.8011670033376514H-308] \ No newline at end of file diff --git a/test/json/validation/n_number_with_leading_zero.json b/test/json/validation/n_number_with_leading_zero.json new file mode 100644 index 0000000..7106da1 --- /dev/null +++ b/test/json/validation/n_number_with_leading_zero.json @@ -0,0 +1 @@ +[012] \ No newline at end of file diff --git a/test/json/validation/n_object_bad_value.json b/test/json/validation/n_object_bad_value.json new file mode 100644 index 0000000..a03a8c0 --- /dev/null +++ b/test/json/validation/n_object_bad_value.json @@ -0,0 +1 @@ +["x", truth] \ No newline at end of file diff --git a/test/json/validation/n_object_bracket_key.json b/test/json/validation/n_object_bracket_key.json new file mode 100644 index 0000000..cc443b4 --- /dev/null +++ b/test/json/validation/n_object_bracket_key.json @@ -0,0 +1 @@ +{[: "x"} diff --git a/test/json/validation/n_object_comma_instead_of_colon.json b/test/json/validation/n_object_comma_instead_of_colon.json new file mode 100644 index 0000000..8d56377 --- /dev/null +++ b/test/json/validation/n_object_comma_instead_of_colon.json @@ -0,0 +1 @@ +{"x", null} \ No newline at end of file diff --git a/test/json/validation/n_object_double_colon.json b/test/json/validation/n_object_double_colon.json new file mode 100644 index 0000000..80e8c7b --- /dev/null +++ b/test/json/validation/n_object_double_colon.json @@ -0,0 +1 @@ +{"x"::"b"} \ No newline at end of file diff --git a/test/json/validation/n_object_emoji.json b/test/json/validation/n_object_emoji.json new file mode 100644 index 0000000..cb4078e --- /dev/null +++ b/test/json/validation/n_object_emoji.json @@ -0,0 +1 @@ +{🇨🇭} \ No newline at end of file diff --git a/test/json/validation/n_object_garbage_at_end.json b/test/json/validation/n_object_garbage_at_end.json new file mode 100644 index 0000000..80c42cb --- /dev/null +++ b/test/json/validation/n_object_garbage_at_end.json @@ -0,0 +1 @@ +{"a":"a" 123} \ No newline at end of file diff --git a/test/json/validation/n_object_key_with_single_quotes.json b/test/json/validation/n_object_key_with_single_quotes.json new file mode 100644 index 0000000..77c3275 --- /dev/null +++ b/test/json/validation/n_object_key_with_single_quotes.json @@ -0,0 +1 @@ +{key: 'value'} \ No newline at end of file diff --git a/test/json/validation/n_object_lone_continuation_byte_in_key_and_trailing_comma.json b/test/json/validation/n_object_lone_continuation_byte_in_key_and_trailing_comma.json new file mode 100644 index 0000000..aa2cb63 --- /dev/null +++ b/test/json/validation/n_object_lone_continuation_byte_in_key_and_trailing_comma.json @@ -0,0 +1 @@ +{"":"0",} \ No newline at end of file diff --git a/test/json/validation/n_object_missing_colon.json b/test/json/validation/n_object_missing_colon.json new file mode 100644 index 0000000..b98eff6 --- /dev/null +++ b/test/json/validation/n_object_missing_colon.json @@ -0,0 +1 @@ +{"a" b} \ No newline at end of file diff --git a/test/json/validation/n_object_missing_key.json b/test/json/validation/n_object_missing_key.json new file mode 100644 index 0000000..b4fb0f5 --- /dev/null +++ b/test/json/validation/n_object_missing_key.json @@ -0,0 +1 @@ +{:"b"} \ No newline at end of file diff --git a/test/json/validation/n_object_missing_semicolon.json b/test/json/validation/n_object_missing_semicolon.json new file mode 100644 index 0000000..e345138 --- /dev/null +++ b/test/json/validation/n_object_missing_semicolon.json @@ -0,0 +1 @@ +{"a" "b"} \ No newline at end of file diff --git a/test/json/validation/n_object_missing_value.json b/test/json/validation/n_object_missing_value.json new file mode 100644 index 0000000..3ef538a --- /dev/null +++ b/test/json/validation/n_object_missing_value.json @@ -0,0 +1 @@ +{"a": \ No newline at end of file diff --git a/test/json/validation/n_object_no-colon.json b/test/json/validation/n_object_no-colon.json new file mode 100644 index 0000000..f3797b3 --- /dev/null +++ b/test/json/validation/n_object_no-colon.json @@ -0,0 +1 @@ +{"a" \ No newline at end of file diff --git a/test/json/validation/n_object_non_string_key.json b/test/json/validation/n_object_non_string_key.json new file mode 100644 index 0000000..b9945b3 --- /dev/null +++ b/test/json/validation/n_object_non_string_key.json @@ -0,0 +1 @@ +{1:1} \ No newline at end of file diff --git a/test/json/validation/n_object_non_string_key_but_huge_number_instead.json b/test/json/validation/n_object_non_string_key_but_huge_number_instead.json new file mode 100644 index 0000000..b37fa86 --- /dev/null +++ b/test/json/validation/n_object_non_string_key_but_huge_number_instead.json @@ -0,0 +1 @@ +{9999E9999:1} \ No newline at end of file diff --git a/test/json/validation/n_object_repeated_null_null.json b/test/json/validation/n_object_repeated_null_null.json new file mode 100644 index 0000000..f7d2959 --- /dev/null +++ b/test/json/validation/n_object_repeated_null_null.json @@ -0,0 +1 @@ +{null:null,null:null} \ No newline at end of file diff --git a/test/json/validation/n_object_several_trailing_commas.json b/test/json/validation/n_object_several_trailing_commas.json new file mode 100644 index 0000000..3c9afe8 --- /dev/null +++ b/test/json/validation/n_object_several_trailing_commas.json @@ -0,0 +1 @@ +{"id":0,,,,,} \ No newline at end of file diff --git a/test/json/validation/n_object_single_quote.json b/test/json/validation/n_object_single_quote.json new file mode 100644 index 0000000..e5cdf97 --- /dev/null +++ b/test/json/validation/n_object_single_quote.json @@ -0,0 +1 @@ +{'a':0} \ No newline at end of file diff --git a/test/json/validation/n_object_trailing_comma.json b/test/json/validation/n_object_trailing_comma.json new file mode 100644 index 0000000..a4b0250 --- /dev/null +++ b/test/json/validation/n_object_trailing_comma.json @@ -0,0 +1 @@ +{"id":0,} \ No newline at end of file diff --git a/test/json/validation/n_object_trailing_comment.json b/test/json/validation/n_object_trailing_comment.json new file mode 100644 index 0000000..a372c65 --- /dev/null +++ b/test/json/validation/n_object_trailing_comment.json @@ -0,0 +1 @@ +{"a":"b"}/**/ \ No newline at end of file diff --git a/test/json/validation/n_object_trailing_comment_open.json b/test/json/validation/n_object_trailing_comment_open.json new file mode 100644 index 0000000..d557f41 --- /dev/null +++ b/test/json/validation/n_object_trailing_comment_open.json @@ -0,0 +1 @@ +{"a":"b"}/**// \ No newline at end of file diff --git a/test/json/validation/n_object_trailing_comment_slash_open.json b/test/json/validation/n_object_trailing_comment_slash_open.json new file mode 100644 index 0000000..e335136 --- /dev/null +++ b/test/json/validation/n_object_trailing_comment_slash_open.json @@ -0,0 +1 @@ +{"a":"b"}// \ No newline at end of file diff --git a/test/json/validation/n_object_trailing_comment_slash_open_incomplete.json b/test/json/validation/n_object_trailing_comment_slash_open_incomplete.json new file mode 100644 index 0000000..d892e49 --- /dev/null +++ b/test/json/validation/n_object_trailing_comment_slash_open_incomplete.json @@ -0,0 +1 @@ +{"a":"b"}/ \ No newline at end of file diff --git a/test/json/validation/n_object_two_commas_in_a_row.json b/test/json/validation/n_object_two_commas_in_a_row.json new file mode 100644 index 0000000..7c639ae --- /dev/null +++ b/test/json/validation/n_object_two_commas_in_a_row.json @@ -0,0 +1 @@ +{"a":"b",,"c":"d"} \ No newline at end of file diff --git a/test/json/validation/n_object_unquoted_key.json b/test/json/validation/n_object_unquoted_key.json new file mode 100644 index 0000000..8ba1372 --- /dev/null +++ b/test/json/validation/n_object_unquoted_key.json @@ -0,0 +1 @@ +{a: "b"} \ No newline at end of file diff --git a/test/json/validation/n_object_unterminated-value.json b/test/json/validation/n_object_unterminated-value.json new file mode 100644 index 0000000..7fe699a --- /dev/null +++ b/test/json/validation/n_object_unterminated-value.json @@ -0,0 +1 @@ +{"a":"a \ No newline at end of file diff --git a/test/json/validation/n_object_with_single_string.json b/test/json/validation/n_object_with_single_string.json new file mode 100644 index 0000000..d63f7fb --- /dev/null +++ b/test/json/validation/n_object_with_single_string.json @@ -0,0 +1 @@ +{ "foo" : "bar", "a" } \ No newline at end of file diff --git a/test/json/validation/n_object_with_trailing_garbage.json b/test/json/validation/n_object_with_trailing_garbage.json new file mode 100644 index 0000000..787c8f0 --- /dev/null +++ b/test/json/validation/n_object_with_trailing_garbage.json @@ -0,0 +1 @@ +{"a":"b"}# \ No newline at end of file diff --git a/test/json/validation/n_single_space.json b/test/json/validation/n_single_space.json new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/test/json/validation/n_single_space.json @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/json/validation/n_string_1_surrogate_then_escape.json b/test/json/validation/n_string_1_surrogate_then_escape.json new file mode 100644 index 0000000..acec66d --- /dev/null +++ b/test/json/validation/n_string_1_surrogate_then_escape.json @@ -0,0 +1 @@ +["\uD800\"] \ No newline at end of file diff --git a/test/json/validation/n_string_1_surrogate_then_escape_u.json b/test/json/validation/n_string_1_surrogate_then_escape_u.json new file mode 100644 index 0000000..e834b05 --- /dev/null +++ b/test/json/validation/n_string_1_surrogate_then_escape_u.json @@ -0,0 +1 @@ +["\uD800\u"] \ No newline at end of file diff --git a/test/json/validation/n_string_1_surrogate_then_escape_u1.json b/test/json/validation/n_string_1_surrogate_then_escape_u1.json new file mode 100644 index 0000000..a04cd34 --- /dev/null +++ b/test/json/validation/n_string_1_surrogate_then_escape_u1.json @@ -0,0 +1 @@ +["\uD800\u1"] \ No newline at end of file diff --git a/test/json/validation/n_string_1_surrogate_then_escape_u1x.json b/test/json/validation/n_string_1_surrogate_then_escape_u1x.json new file mode 100644 index 0000000..bfbd234 --- /dev/null +++ b/test/json/validation/n_string_1_surrogate_then_escape_u1x.json @@ -0,0 +1 @@ +["\uD800\u1x"] \ No newline at end of file diff --git a/test/json/validation/n_string_accentuated_char_no_quotes.json b/test/json/validation/n_string_accentuated_char_no_quotes.json new file mode 100644 index 0000000..fd68956 --- /dev/null +++ b/test/json/validation/n_string_accentuated_char_no_quotes.json @@ -0,0 +1 @@ +[é] \ No newline at end of file diff --git a/test/json/validation/n_string_backslash_00.json b/test/json/validation/n_string_backslash_00.json new file mode 100644 index 0000000..b5bf267 Binary files /dev/null and b/test/json/validation/n_string_backslash_00.json differ diff --git a/test/json/validation/n_string_escape_x.json b/test/json/validation/n_string_escape_x.json new file mode 100644 index 0000000..fae2919 --- /dev/null +++ b/test/json/validation/n_string_escape_x.json @@ -0,0 +1 @@ +["\x00"] \ No newline at end of file diff --git a/test/json/validation/n_string_escaped_backslash_bad.json b/test/json/validation/n_string_escaped_backslash_bad.json new file mode 100644 index 0000000..016fcb4 --- /dev/null +++ b/test/json/validation/n_string_escaped_backslash_bad.json @@ -0,0 +1 @@ +["\\\"] \ No newline at end of file diff --git a/test/json/validation/n_string_escaped_ctrl_char_tab.json b/test/json/validation/n_string_escaped_ctrl_char_tab.json new file mode 100644 index 0000000..f35ea38 --- /dev/null +++ b/test/json/validation/n_string_escaped_ctrl_char_tab.json @@ -0,0 +1 @@ +["\ "] \ No newline at end of file diff --git a/test/json/validation/n_string_escaped_emoji.json b/test/json/validation/n_string_escaped_emoji.json new file mode 100644 index 0000000..a277754 --- /dev/null +++ b/test/json/validation/n_string_escaped_emoji.json @@ -0,0 +1 @@ +["\🌀"] \ No newline at end of file diff --git a/test/json/validation/n_string_incomplete_escape.json b/test/json/validation/n_string_incomplete_escape.json new file mode 100644 index 0000000..3415c33 --- /dev/null +++ b/test/json/validation/n_string_incomplete_escape.json @@ -0,0 +1 @@ +["\"] \ No newline at end of file diff --git a/test/json/validation/n_string_incomplete_escaped_character.json b/test/json/validation/n_string_incomplete_escaped_character.json new file mode 100644 index 0000000..0f2197e --- /dev/null +++ b/test/json/validation/n_string_incomplete_escaped_character.json @@ -0,0 +1 @@ +["\u00A"] \ No newline at end of file diff --git a/test/json/validation/n_string_incomplete_surrogate.json b/test/json/validation/n_string_incomplete_surrogate.json new file mode 100644 index 0000000..75504a6 --- /dev/null +++ b/test/json/validation/n_string_incomplete_surrogate.json @@ -0,0 +1 @@ +["\uD834\uDd"] \ No newline at end of file diff --git a/test/json/validation/n_string_incomplete_surrogate_escape_invalid.json b/test/json/validation/n_string_incomplete_surrogate_escape_invalid.json new file mode 100644 index 0000000..bd96560 --- /dev/null +++ b/test/json/validation/n_string_incomplete_surrogate_escape_invalid.json @@ -0,0 +1 @@ +["\uD800\uD800\x"] \ No newline at end of file diff --git a/test/json/validation/n_string_invalid-utf-8-in-escape.json b/test/json/validation/n_string_invalid-utf-8-in-escape.json new file mode 100644 index 0000000..0c43006 --- /dev/null +++ b/test/json/validation/n_string_invalid-utf-8-in-escape.json @@ -0,0 +1 @@ +["\u"] \ No newline at end of file diff --git a/test/json/validation/n_string_invalid_backslash_esc.json b/test/json/validation/n_string_invalid_backslash_esc.json new file mode 100644 index 0000000..d1eb609 --- /dev/null +++ b/test/json/validation/n_string_invalid_backslash_esc.json @@ -0,0 +1 @@ +["\a"] \ No newline at end of file diff --git a/test/json/validation/n_string_invalid_unicode_escape.json b/test/json/validation/n_string_invalid_unicode_escape.json new file mode 100644 index 0000000..7608cb6 --- /dev/null +++ b/test/json/validation/n_string_invalid_unicode_escape.json @@ -0,0 +1 @@ +["\uqqqq"] \ No newline at end of file diff --git a/test/json/validation/n_string_invalid_utf8_after_escape.json b/test/json/validation/n_string_invalid_utf8_after_escape.json new file mode 100644 index 0000000..2f757a2 --- /dev/null +++ b/test/json/validation/n_string_invalid_utf8_after_escape.json @@ -0,0 +1 @@ +["\"] \ No newline at end of file diff --git a/test/json/validation/n_string_leading_uescaped_thinspace.json b/test/json/validation/n_string_leading_uescaped_thinspace.json new file mode 100644 index 0000000..7b297c6 --- /dev/null +++ b/test/json/validation/n_string_leading_uescaped_thinspace.json @@ -0,0 +1 @@ +[\u0020"asd"] \ No newline at end of file diff --git a/test/json/validation/n_string_no_quotes_with_bad_escape.json b/test/json/validation/n_string_no_quotes_with_bad_escape.json new file mode 100644 index 0000000..01bc70a --- /dev/null +++ b/test/json/validation/n_string_no_quotes_with_bad_escape.json @@ -0,0 +1 @@ +[\n] \ No newline at end of file diff --git a/test/json/validation/n_string_single_doublequote.json b/test/json/validation/n_string_single_doublequote.json new file mode 100644 index 0000000..9d68933 --- /dev/null +++ b/test/json/validation/n_string_single_doublequote.json @@ -0,0 +1 @@ +" \ No newline at end of file diff --git a/test/json/validation/n_string_single_quote.json b/test/json/validation/n_string_single_quote.json new file mode 100644 index 0000000..caff239 --- /dev/null +++ b/test/json/validation/n_string_single_quote.json @@ -0,0 +1 @@ +['single quote'] \ No newline at end of file diff --git a/test/json/validation/n_string_single_string_no_double_quotes.json b/test/json/validation/n_string_single_string_no_double_quotes.json new file mode 100644 index 0000000..f2ba8f8 --- /dev/null +++ b/test/json/validation/n_string_single_string_no_double_quotes.json @@ -0,0 +1 @@ +abc \ No newline at end of file diff --git a/test/json/validation/n_string_start_escape_unclosed.json b/test/json/validation/n_string_start_escape_unclosed.json new file mode 100644 index 0000000..db62a46 --- /dev/null +++ b/test/json/validation/n_string_start_escape_unclosed.json @@ -0,0 +1 @@ +["\ \ No newline at end of file diff --git a/test/json/validation/n_string_unescaped_crtl_char.json b/test/json/validation/n_string_unescaped_crtl_char.json new file mode 100644 index 0000000..9f21348 Binary files /dev/null and b/test/json/validation/n_string_unescaped_crtl_char.json differ diff --git a/test/json/validation/n_string_unescaped_newline.json b/test/json/validation/n_string_unescaped_newline.json new file mode 100644 index 0000000..700d360 --- /dev/null +++ b/test/json/validation/n_string_unescaped_newline.json @@ -0,0 +1,2 @@ +["new +line"] \ No newline at end of file diff --git a/test/json/validation/n_string_unescaped_tab.json b/test/json/validation/n_string_unescaped_tab.json new file mode 100644 index 0000000..160264a --- /dev/null +++ b/test/json/validation/n_string_unescaped_tab.json @@ -0,0 +1 @@ +[" "] \ No newline at end of file diff --git a/test/json/validation/n_string_unicode_CapitalU.json b/test/json/validation/n_string_unicode_CapitalU.json new file mode 100644 index 0000000..17332bb --- /dev/null +++ b/test/json/validation/n_string_unicode_CapitalU.json @@ -0,0 +1 @@ +"\UA66D" \ No newline at end of file diff --git a/test/json/validation/n_string_with_trailing_garbage.json b/test/json/validation/n_string_with_trailing_garbage.json new file mode 100644 index 0000000..efe3bd2 --- /dev/null +++ b/test/json/validation/n_string_with_trailing_garbage.json @@ -0,0 +1 @@ +""x \ No newline at end of file diff --git a/test/json/validation/n_structure_100000_opening_arrays.json b/test/json/validation/n_structure_100000_opening_arrays.json new file mode 100644 index 0000000..a4823ee --- /dev/null +++ b/test/json/validation/n_structure_100000_opening_arrays.json @@ -0,0 +1 @@ +[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ \ No newline at end of file diff --git a/test/json/validation/n_structure_U+2060_word_joined.json b/test/json/validation/n_structure_U+2060_word_joined.json new file mode 100644 index 0000000..81156a6 --- /dev/null +++ b/test/json/validation/n_structure_U+2060_word_joined.json @@ -0,0 +1 @@ +[⁠] \ No newline at end of file diff --git a/test/json/validation/n_structure_UTF8_BOM_no_data.json b/test/json/validation/n_structure_UTF8_BOM_no_data.json new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/test/json/validation/n_structure_UTF8_BOM_no_data.json @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/json/validation/n_structure_angle_bracket_..json b/test/json/validation/n_structure_angle_bracket_..json new file mode 100644 index 0000000..a56fef0 --- /dev/null +++ b/test/json/validation/n_structure_angle_bracket_..json @@ -0,0 +1 @@ +<.> \ No newline at end of file diff --git a/test/json/validation/n_structure_angle_bracket_null.json b/test/json/validation/n_structure_angle_bracket_null.json new file mode 100644 index 0000000..617f262 --- /dev/null +++ b/test/json/validation/n_structure_angle_bracket_null.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/json/validation/n_structure_array_trailing_garbage.json b/test/json/validation/n_structure_array_trailing_garbage.json new file mode 100644 index 0000000..5a745e6 --- /dev/null +++ b/test/json/validation/n_structure_array_trailing_garbage.json @@ -0,0 +1 @@ +[1]x \ No newline at end of file diff --git a/test/json/validation/n_structure_array_with_extra_array_close.json b/test/json/validation/n_structure_array_with_extra_array_close.json new file mode 100644 index 0000000..6cfb139 --- /dev/null +++ b/test/json/validation/n_structure_array_with_extra_array_close.json @@ -0,0 +1 @@ +[1]] \ No newline at end of file diff --git a/test/json/validation/n_structure_array_with_unclosed_string.json b/test/json/validation/n_structure_array_with_unclosed_string.json new file mode 100644 index 0000000..ba6b178 --- /dev/null +++ b/test/json/validation/n_structure_array_with_unclosed_string.json @@ -0,0 +1 @@ +["asd] \ No newline at end of file diff --git a/test/json/validation/n_structure_ascii-unicode-identifier.json b/test/json/validation/n_structure_ascii-unicode-identifier.json new file mode 100644 index 0000000..ef2ab62 --- /dev/null +++ b/test/json/validation/n_structure_ascii-unicode-identifier.json @@ -0,0 +1 @@ +aå \ No newline at end of file diff --git a/test/json/validation/n_structure_capitalized_True.json b/test/json/validation/n_structure_capitalized_True.json new file mode 100644 index 0000000..7cd8846 --- /dev/null +++ b/test/json/validation/n_structure_capitalized_True.json @@ -0,0 +1 @@ +[True] \ No newline at end of file diff --git a/test/json/validation/n_structure_close_unopened_array.json b/test/json/validation/n_structure_close_unopened_array.json new file mode 100644 index 0000000..d2af0c6 --- /dev/null +++ b/test/json/validation/n_structure_close_unopened_array.json @@ -0,0 +1 @@ +1] \ No newline at end of file diff --git a/test/json/validation/n_structure_comma_instead_of_closing_brace.json b/test/json/validation/n_structure_comma_instead_of_closing_brace.json new file mode 100644 index 0000000..ac61b82 --- /dev/null +++ b/test/json/validation/n_structure_comma_instead_of_closing_brace.json @@ -0,0 +1 @@ +{"x": true, \ No newline at end of file diff --git a/test/json/validation/n_structure_double_array.json b/test/json/validation/n_structure_double_array.json new file mode 100644 index 0000000..058d162 --- /dev/null +++ b/test/json/validation/n_structure_double_array.json @@ -0,0 +1 @@ +[][] \ No newline at end of file diff --git a/test/json/validation/n_structure_end_array.json b/test/json/validation/n_structure_end_array.json new file mode 100644 index 0000000..54caf60 --- /dev/null +++ b/test/json/validation/n_structure_end_array.json @@ -0,0 +1 @@ +] \ No newline at end of file diff --git a/test/json/validation/n_structure_incomplete_UTF8_BOM.json b/test/json/validation/n_structure_incomplete_UTF8_BOM.json new file mode 100644 index 0000000..bfcdd51 --- /dev/null +++ b/test/json/validation/n_structure_incomplete_UTF8_BOM.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/json/validation/n_structure_lone-invalid-utf-8.json b/test/json/validation/n_structure_lone-invalid-utf-8.json new file mode 100644 index 0000000..8b1296c --- /dev/null +++ b/test/json/validation/n_structure_lone-invalid-utf-8.json @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/json/validation/n_structure_lone-open-bracket.json b/test/json/validation/n_structure_lone-open-bracket.json new file mode 100644 index 0000000..8e2f0be --- /dev/null +++ b/test/json/validation/n_structure_lone-open-bracket.json @@ -0,0 +1 @@ +[ \ No newline at end of file diff --git a/test/json/validation/n_structure_no_data.json b/test/json/validation/n_structure_no_data.json new file mode 100644 index 0000000..e69de29 diff --git a/test/json/validation/n_structure_null-byte-outside-string.json b/test/json/validation/n_structure_null-byte-outside-string.json new file mode 100644 index 0000000..326db14 Binary files /dev/null and b/test/json/validation/n_structure_null-byte-outside-string.json differ diff --git a/test/json/validation/n_structure_number_with_trailing_garbage.json b/test/json/validation/n_structure_number_with_trailing_garbage.json new file mode 100644 index 0000000..0746539 --- /dev/null +++ b/test/json/validation/n_structure_number_with_trailing_garbage.json @@ -0,0 +1 @@ +2@ \ No newline at end of file diff --git a/test/json/validation/n_structure_object_followed_by_closing_object.json b/test/json/validation/n_structure_object_followed_by_closing_object.json new file mode 100644 index 0000000..aa9ebae --- /dev/null +++ b/test/json/validation/n_structure_object_followed_by_closing_object.json @@ -0,0 +1 @@ +{}} \ No newline at end of file diff --git a/test/json/validation/n_structure_object_unclosed_no_value.json b/test/json/validation/n_structure_object_unclosed_no_value.json new file mode 100644 index 0000000..17d0451 --- /dev/null +++ b/test/json/validation/n_structure_object_unclosed_no_value.json @@ -0,0 +1 @@ +{"": \ No newline at end of file diff --git a/test/json/validation/n_structure_object_with_comment.json b/test/json/validation/n_structure_object_with_comment.json new file mode 100644 index 0000000..ed1b569 --- /dev/null +++ b/test/json/validation/n_structure_object_with_comment.json @@ -0,0 +1 @@ +{"a":/*comment*/"b"} \ No newline at end of file diff --git a/test/json/validation/n_structure_object_with_trailing_garbage.json b/test/json/validation/n_structure_object_with_trailing_garbage.json new file mode 100644 index 0000000..9ca2336 --- /dev/null +++ b/test/json/validation/n_structure_object_with_trailing_garbage.json @@ -0,0 +1 @@ +{"a": true} "x" \ No newline at end of file diff --git a/test/json/validation/n_structure_open_array_apostrophe.json b/test/json/validation/n_structure_open_array_apostrophe.json new file mode 100644 index 0000000..8bebe3a --- /dev/null +++ b/test/json/validation/n_structure_open_array_apostrophe.json @@ -0,0 +1 @@ +[' \ No newline at end of file diff --git a/test/json/validation/n_structure_open_array_comma.json b/test/json/validation/n_structure_open_array_comma.json new file mode 100644 index 0000000..6295fdc --- /dev/null +++ b/test/json/validation/n_structure_open_array_comma.json @@ -0,0 +1 @@ +[, \ No newline at end of file diff --git a/test/json/validation/n_structure_open_array_object.json b/test/json/validation/n_structure_open_array_object.json new file mode 100644 index 0000000..e870445 --- /dev/null +++ b/test/json/validation/n_structure_open_array_object.json @@ -0,0 +1 @@ +[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"": diff --git a/test/json/validation/n_structure_open_array_open_object.json b/test/json/validation/n_structure_open_array_open_object.json new file mode 100644 index 0000000..7a63c8c --- /dev/null +++ b/test/json/validation/n_structure_open_array_open_object.json @@ -0,0 +1 @@ +[{ \ No newline at end of file diff --git a/test/json/validation/n_structure_open_array_open_string.json b/test/json/validation/n_structure_open_array_open_string.json new file mode 100644 index 0000000..9822a6b --- /dev/null +++ b/test/json/validation/n_structure_open_array_open_string.json @@ -0,0 +1 @@ +["a \ No newline at end of file diff --git a/test/json/validation/n_structure_open_array_string.json b/test/json/validation/n_structure_open_array_string.json new file mode 100644 index 0000000..42a6193 --- /dev/null +++ b/test/json/validation/n_structure_open_array_string.json @@ -0,0 +1 @@ +["a" \ No newline at end of file diff --git a/test/json/validation/n_structure_open_object.json b/test/json/validation/n_structure_open_object.json new file mode 100644 index 0000000..81750b9 --- /dev/null +++ b/test/json/validation/n_structure_open_object.json @@ -0,0 +1 @@ +{ \ No newline at end of file diff --git a/test/json/validation/n_structure_open_object_close_array.json b/test/json/validation/n_structure_open_object_close_array.json new file mode 100644 index 0000000..eebc700 --- /dev/null +++ b/test/json/validation/n_structure_open_object_close_array.json @@ -0,0 +1 @@ +{] \ No newline at end of file diff --git a/test/json/validation/n_structure_open_object_comma.json b/test/json/validation/n_structure_open_object_comma.json new file mode 100644 index 0000000..47bc910 --- /dev/null +++ b/test/json/validation/n_structure_open_object_comma.json @@ -0,0 +1 @@ +{, \ No newline at end of file diff --git a/test/json/validation/n_structure_open_object_open_array.json b/test/json/validation/n_structure_open_object_open_array.json new file mode 100644 index 0000000..381ede5 --- /dev/null +++ b/test/json/validation/n_structure_open_object_open_array.json @@ -0,0 +1 @@ +{[ \ No newline at end of file diff --git a/test/json/validation/n_structure_open_object_open_string.json b/test/json/validation/n_structure_open_object_open_string.json new file mode 100644 index 0000000..328c30c --- /dev/null +++ b/test/json/validation/n_structure_open_object_open_string.json @@ -0,0 +1 @@ +{"a \ No newline at end of file diff --git a/test/json/validation/n_structure_open_object_string_with_apostrophes.json b/test/json/validation/n_structure_open_object_string_with_apostrophes.json new file mode 100644 index 0000000..9dba170 --- /dev/null +++ b/test/json/validation/n_structure_open_object_string_with_apostrophes.json @@ -0,0 +1 @@ +{'a' \ No newline at end of file diff --git a/test/json/validation/n_structure_open_open.json b/test/json/validation/n_structure_open_open.json new file mode 100644 index 0000000..841fd5f --- /dev/null +++ b/test/json/validation/n_structure_open_open.json @@ -0,0 +1 @@ +["\{["\{["\{["\{ \ No newline at end of file diff --git a/test/json/validation/n_structure_single_eacute.json b/test/json/validation/n_structure_single_eacute.json new file mode 100644 index 0000000..92a39f3 --- /dev/null +++ b/test/json/validation/n_structure_single_eacute.json @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/json/validation/n_structure_single_star.json b/test/json/validation/n_structure_single_star.json new file mode 100644 index 0000000..f59ec20 --- /dev/null +++ b/test/json/validation/n_structure_single_star.json @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/test/json/validation/n_structure_trailing_#.json b/test/json/validation/n_structure_trailing_#.json new file mode 100644 index 0000000..8986110 --- /dev/null +++ b/test/json/validation/n_structure_trailing_#.json @@ -0,0 +1 @@ +{"a":"b"}#{} \ No newline at end of file diff --git a/test/json/validation/n_structure_uescaped_LF_before_string.json b/test/json/validation/n_structure_uescaped_LF_before_string.json new file mode 100644 index 0000000..df2f0f2 --- /dev/null +++ b/test/json/validation/n_structure_uescaped_LF_before_string.json @@ -0,0 +1 @@ +[\u000A""] \ No newline at end of file diff --git a/test/json/validation/n_structure_unclosed_array.json b/test/json/validation/n_structure_unclosed_array.json new file mode 100644 index 0000000..1120951 --- /dev/null +++ b/test/json/validation/n_structure_unclosed_array.json @@ -0,0 +1 @@ +[1 \ No newline at end of file diff --git a/test/json/validation/n_structure_unclosed_array_partial_null.json b/test/json/validation/n_structure_unclosed_array_partial_null.json new file mode 100644 index 0000000..0d59176 --- /dev/null +++ b/test/json/validation/n_structure_unclosed_array_partial_null.json @@ -0,0 +1 @@ +[ false, nul \ No newline at end of file diff --git a/test/json/validation/n_structure_unclosed_array_unfinished_false.json b/test/json/validation/n_structure_unclosed_array_unfinished_false.json new file mode 100644 index 0000000..a2ff850 --- /dev/null +++ b/test/json/validation/n_structure_unclosed_array_unfinished_false.json @@ -0,0 +1 @@ +[ true, fals \ No newline at end of file diff --git a/test/json/validation/n_structure_unclosed_array_unfinished_true.json b/test/json/validation/n_structure_unclosed_array_unfinished_true.json new file mode 100644 index 0000000..3149e8f --- /dev/null +++ b/test/json/validation/n_structure_unclosed_array_unfinished_true.json @@ -0,0 +1 @@ +[ false, tru \ No newline at end of file diff --git a/test/json/validation/n_structure_unclosed_object.json b/test/json/validation/n_structure_unclosed_object.json new file mode 100644 index 0000000..694d69d --- /dev/null +++ b/test/json/validation/n_structure_unclosed_object.json @@ -0,0 +1 @@ +{"asd":"asd" \ No newline at end of file diff --git a/test/json/validation/n_structure_unicode-identifier.json b/test/json/validation/n_structure_unicode-identifier.json new file mode 100644 index 0000000..7284aea --- /dev/null +++ b/test/json/validation/n_structure_unicode-identifier.json @@ -0,0 +1 @@ +å \ No newline at end of file diff --git a/test/json/validation/n_structure_whitespace_U+2060_word_joiner.json b/test/json/validation/n_structure_whitespace_U+2060_word_joiner.json new file mode 100644 index 0000000..81156a6 --- /dev/null +++ b/test/json/validation/n_structure_whitespace_U+2060_word_joiner.json @@ -0,0 +1 @@ +[⁠] \ No newline at end of file diff --git a/test/json/validation/n_structure_whitespace_formfeed.json b/test/json/validation/n_structure_whitespace_formfeed.json new file mode 100644 index 0000000..a9ea535 --- /dev/null +++ b/test/json/validation/n_structure_whitespace_formfeed.json @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/test/json/validation/y_array_arraysWithSpaces.json b/test/json/validation/y_array_arraysWithSpaces.json new file mode 100644 index 0000000..5822907 --- /dev/null +++ b/test/json/validation/y_array_arraysWithSpaces.json @@ -0,0 +1 @@ +[[] ] \ No newline at end of file diff --git a/test/json/validation/y_array_empty-string.json b/test/json/validation/y_array_empty-string.json new file mode 100644 index 0000000..93b6be2 --- /dev/null +++ b/test/json/validation/y_array_empty-string.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/y_array_empty.json b/test/json/validation/y_array_empty.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/test/json/validation/y_array_empty.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/json/validation/y_array_ending_with_newline.json b/test/json/validation/y_array_ending_with_newline.json new file mode 100644 index 0000000..eac5f7b --- /dev/null +++ b/test/json/validation/y_array_ending_with_newline.json @@ -0,0 +1 @@ +["a"] \ No newline at end of file diff --git a/test/json/validation/y_array_false.json b/test/json/validation/y_array_false.json new file mode 100644 index 0000000..67b2f07 --- /dev/null +++ b/test/json/validation/y_array_false.json @@ -0,0 +1 @@ +[false] \ No newline at end of file diff --git a/test/json/validation/y_array_heterogeneous.json b/test/json/validation/y_array_heterogeneous.json new file mode 100644 index 0000000..d3c1e26 --- /dev/null +++ b/test/json/validation/y_array_heterogeneous.json @@ -0,0 +1 @@ +[null, 1, "1", {}] \ No newline at end of file diff --git a/test/json/validation/y_array_null.json b/test/json/validation/y_array_null.json new file mode 100644 index 0000000..500db4a --- /dev/null +++ b/test/json/validation/y_array_null.json @@ -0,0 +1 @@ +[null] \ No newline at end of file diff --git a/test/json/validation/y_array_with_1_and_newline.json b/test/json/validation/y_array_with_1_and_newline.json new file mode 100644 index 0000000..9948255 --- /dev/null +++ b/test/json/validation/y_array_with_1_and_newline.json @@ -0,0 +1,2 @@ +[1 +] \ No newline at end of file diff --git a/test/json/validation/y_array_with_leading_space.json b/test/json/validation/y_array_with_leading_space.json new file mode 100644 index 0000000..18bfe64 --- /dev/null +++ b/test/json/validation/y_array_with_leading_space.json @@ -0,0 +1 @@ + [1] \ No newline at end of file diff --git a/test/json/validation/y_array_with_several_null.json b/test/json/validation/y_array_with_several_null.json new file mode 100644 index 0000000..99f6c5d --- /dev/null +++ b/test/json/validation/y_array_with_several_null.json @@ -0,0 +1 @@ +[1,null,null,null,2] \ No newline at end of file diff --git a/test/json/validation/y_array_with_trailing_space.json b/test/json/validation/y_array_with_trailing_space.json new file mode 100644 index 0000000..de9e7a9 --- /dev/null +++ b/test/json/validation/y_array_with_trailing_space.json @@ -0,0 +1 @@ +[2] \ No newline at end of file diff --git a/test/json/validation/y_number.json b/test/json/validation/y_number.json new file mode 100644 index 0000000..e5f5cc3 --- /dev/null +++ b/test/json/validation/y_number.json @@ -0,0 +1 @@ +[123e65] \ No newline at end of file diff --git a/test/json/validation/y_number_0e+1.json b/test/json/validation/y_number_0e+1.json new file mode 100644 index 0000000..d1d3967 --- /dev/null +++ b/test/json/validation/y_number_0e+1.json @@ -0,0 +1 @@ +[0e+1] \ No newline at end of file diff --git a/test/json/validation/y_number_0e1.json b/test/json/validation/y_number_0e1.json new file mode 100644 index 0000000..3283a79 --- /dev/null +++ b/test/json/validation/y_number_0e1.json @@ -0,0 +1 @@ +[0e1] \ No newline at end of file diff --git a/test/json/validation/y_number_after_space.json b/test/json/validation/y_number_after_space.json new file mode 100644 index 0000000..623570d --- /dev/null +++ b/test/json/validation/y_number_after_space.json @@ -0,0 +1 @@ +[ 4] \ No newline at end of file diff --git a/test/json/validation/y_number_double_close_to_zero.json b/test/json/validation/y_number_double_close_to_zero.json new file mode 100644 index 0000000..96555ff --- /dev/null +++ b/test/json/validation/y_number_double_close_to_zero.json @@ -0,0 +1 @@ +[-0.000000000000000000000000000000000000000000000000000000000000000000000000000001] diff --git a/test/json/validation/y_number_int_with_exp.json b/test/json/validation/y_number_int_with_exp.json new file mode 100644 index 0000000..a4ca9e7 --- /dev/null +++ b/test/json/validation/y_number_int_with_exp.json @@ -0,0 +1 @@ +[20e1] \ No newline at end of file diff --git a/test/json/validation/y_number_minus_zero.json b/test/json/validation/y_number_minus_zero.json new file mode 100644 index 0000000..37af131 --- /dev/null +++ b/test/json/validation/y_number_minus_zero.json @@ -0,0 +1 @@ +[-0] \ No newline at end of file diff --git a/test/json/validation/y_number_negative_int.json b/test/json/validation/y_number_negative_int.json new file mode 100644 index 0000000..8e30f8b --- /dev/null +++ b/test/json/validation/y_number_negative_int.json @@ -0,0 +1 @@ +[-123] \ No newline at end of file diff --git a/test/json/validation/y_number_negative_one.json b/test/json/validation/y_number_negative_one.json new file mode 100644 index 0000000..99d21a2 --- /dev/null +++ b/test/json/validation/y_number_negative_one.json @@ -0,0 +1 @@ +[-1] \ No newline at end of file diff --git a/test/json/validation/y_number_negative_zero.json b/test/json/validation/y_number_negative_zero.json new file mode 100644 index 0000000..37af131 --- /dev/null +++ b/test/json/validation/y_number_negative_zero.json @@ -0,0 +1 @@ +[-0] \ No newline at end of file diff --git a/test/json/validation/y_number_real_capital_e.json b/test/json/validation/y_number_real_capital_e.json new file mode 100644 index 0000000..6edbdfc --- /dev/null +++ b/test/json/validation/y_number_real_capital_e.json @@ -0,0 +1 @@ +[1E22] \ No newline at end of file diff --git a/test/json/validation/y_number_real_capital_e_neg_exp.json b/test/json/validation/y_number_real_capital_e_neg_exp.json new file mode 100644 index 0000000..0a01bd3 --- /dev/null +++ b/test/json/validation/y_number_real_capital_e_neg_exp.json @@ -0,0 +1 @@ +[1E-2] \ No newline at end of file diff --git a/test/json/validation/y_number_real_capital_e_pos_exp.json b/test/json/validation/y_number_real_capital_e_pos_exp.json new file mode 100644 index 0000000..5a8fc09 --- /dev/null +++ b/test/json/validation/y_number_real_capital_e_pos_exp.json @@ -0,0 +1 @@ +[1E+2] \ No newline at end of file diff --git a/test/json/validation/y_number_real_exponent.json b/test/json/validation/y_number_real_exponent.json new file mode 100644 index 0000000..da2522d --- /dev/null +++ b/test/json/validation/y_number_real_exponent.json @@ -0,0 +1 @@ +[123e45] \ No newline at end of file diff --git a/test/json/validation/y_number_real_fraction_exponent.json b/test/json/validation/y_number_real_fraction_exponent.json new file mode 100644 index 0000000..3944a7a --- /dev/null +++ b/test/json/validation/y_number_real_fraction_exponent.json @@ -0,0 +1 @@ +[123.456e78] \ No newline at end of file diff --git a/test/json/validation/y_number_real_neg_exp.json b/test/json/validation/y_number_real_neg_exp.json new file mode 100644 index 0000000..ca40d3c --- /dev/null +++ b/test/json/validation/y_number_real_neg_exp.json @@ -0,0 +1 @@ +[1e-2] \ No newline at end of file diff --git a/test/json/validation/y_number_real_pos_exponent.json b/test/json/validation/y_number_real_pos_exponent.json new file mode 100644 index 0000000..343601d --- /dev/null +++ b/test/json/validation/y_number_real_pos_exponent.json @@ -0,0 +1 @@ +[1e+2] \ No newline at end of file diff --git a/test/json/validation/y_number_simple_int.json b/test/json/validation/y_number_simple_int.json new file mode 100644 index 0000000..e47f69a --- /dev/null +++ b/test/json/validation/y_number_simple_int.json @@ -0,0 +1 @@ +[123] \ No newline at end of file diff --git a/test/json/validation/y_number_simple_real.json b/test/json/validation/y_number_simple_real.json new file mode 100644 index 0000000..b02878e --- /dev/null +++ b/test/json/validation/y_number_simple_real.json @@ -0,0 +1 @@ +[123.456789] \ No newline at end of file diff --git a/test/json/validation/y_object.json b/test/json/validation/y_object.json new file mode 100644 index 0000000..78262ed --- /dev/null +++ b/test/json/validation/y_object.json @@ -0,0 +1 @@ +{"asd":"sdf", "dfg":"fgh"} \ No newline at end of file diff --git a/test/json/validation/y_object_basic.json b/test/json/validation/y_object_basic.json new file mode 100644 index 0000000..646bbe7 --- /dev/null +++ b/test/json/validation/y_object_basic.json @@ -0,0 +1 @@ +{"asd":"sdf"} \ No newline at end of file diff --git a/test/json/validation/y_object_duplicated_key.json b/test/json/validation/y_object_duplicated_key.json new file mode 100644 index 0000000..bbc2e1c --- /dev/null +++ b/test/json/validation/y_object_duplicated_key.json @@ -0,0 +1 @@ +{"a":"b","a":"c"} \ No newline at end of file diff --git a/test/json/validation/y_object_duplicated_key_and_value.json b/test/json/validation/y_object_duplicated_key_and_value.json new file mode 100644 index 0000000..211581c --- /dev/null +++ b/test/json/validation/y_object_duplicated_key_and_value.json @@ -0,0 +1 @@ +{"a":"b","a":"b"} \ No newline at end of file diff --git a/test/json/validation/y_object_empty.json b/test/json/validation/y_object_empty.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/test/json/validation/y_object_empty.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/json/validation/y_object_empty_key.json b/test/json/validation/y_object_empty_key.json new file mode 100644 index 0000000..c0013d3 --- /dev/null +++ b/test/json/validation/y_object_empty_key.json @@ -0,0 +1 @@ +{"":0} \ No newline at end of file diff --git a/test/json/validation/y_object_escaped_null_in_key.json b/test/json/validation/y_object_escaped_null_in_key.json new file mode 100644 index 0000000..593f0f6 --- /dev/null +++ b/test/json/validation/y_object_escaped_null_in_key.json @@ -0,0 +1 @@ +{"foo\u0000bar": 42} \ No newline at end of file diff --git a/test/json/validation/y_object_extreme_numbers.json b/test/json/validation/y_object_extreme_numbers.json new file mode 100644 index 0000000..a0d3531 --- /dev/null +++ b/test/json/validation/y_object_extreme_numbers.json @@ -0,0 +1 @@ +{ "min": -1.0e+28, "max": 1.0e+28 } \ No newline at end of file diff --git a/test/json/validation/y_object_long_strings.json b/test/json/validation/y_object_long_strings.json new file mode 100644 index 0000000..bdc4a08 --- /dev/null +++ b/test/json/validation/y_object_long_strings.json @@ -0,0 +1 @@ +{"x":[{"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"} \ No newline at end of file diff --git a/test/json/validation/y_object_simple.json b/test/json/validation/y_object_simple.json new file mode 100644 index 0000000..dacac91 --- /dev/null +++ b/test/json/validation/y_object_simple.json @@ -0,0 +1 @@ +{"a":[]} \ No newline at end of file diff --git a/test/json/validation/y_object_string_unicode.json b/test/json/validation/y_object_string_unicode.json new file mode 100644 index 0000000..8effdb2 --- /dev/null +++ b/test/json/validation/y_object_string_unicode.json @@ -0,0 +1 @@ +{"title":"\u041f\u043e\u043b\u0442\u043e\u0440\u0430 \u0417\u0435\u043c\u043b\u0435\u043a\u043e\u043f\u0430" } \ No newline at end of file diff --git a/test/json/validation/y_object_with_newlines.json b/test/json/validation/y_object_with_newlines.json new file mode 100644 index 0000000..246ec6b --- /dev/null +++ b/test/json/validation/y_object_with_newlines.json @@ -0,0 +1,3 @@ +{ +"a": "b" +} \ No newline at end of file diff --git a/test/json/validation/y_string_1_2_3_bytes_UTF-8_sequences.json b/test/json/validation/y_string_1_2_3_bytes_UTF-8_sequences.json new file mode 100644 index 0000000..9967dde --- /dev/null +++ b/test/json/validation/y_string_1_2_3_bytes_UTF-8_sequences.json @@ -0,0 +1 @@ +["\u0060\u012a\u12AB"] \ No newline at end of file diff --git a/test/json/validation/y_string_accepted_surrogate_pair.json b/test/json/validation/y_string_accepted_surrogate_pair.json new file mode 100644 index 0000000..996875c --- /dev/null +++ b/test/json/validation/y_string_accepted_surrogate_pair.json @@ -0,0 +1 @@ +["\uD801\udc37"] \ No newline at end of file diff --git a/test/json/validation/y_string_accepted_surrogate_pairs.json b/test/json/validation/y_string_accepted_surrogate_pairs.json new file mode 100644 index 0000000..3401021 --- /dev/null +++ b/test/json/validation/y_string_accepted_surrogate_pairs.json @@ -0,0 +1 @@ +["\ud83d\ude39\ud83d\udc8d"] \ No newline at end of file diff --git a/test/json/validation/y_string_allowed_escapes.json b/test/json/validation/y_string_allowed_escapes.json new file mode 100644 index 0000000..7f49553 --- /dev/null +++ b/test/json/validation/y_string_allowed_escapes.json @@ -0,0 +1 @@ +["\"\\\/\b\f\n\r\t"] \ No newline at end of file diff --git a/test/json/validation/y_string_backslash_and_u_escaped_zero.json b/test/json/validation/y_string_backslash_and_u_escaped_zero.json new file mode 100644 index 0000000..d4439ed --- /dev/null +++ b/test/json/validation/y_string_backslash_and_u_escaped_zero.json @@ -0,0 +1 @@ +["\\u0000"] \ No newline at end of file diff --git a/test/json/validation/y_string_backslash_doublequotes.json b/test/json/validation/y_string_backslash_doublequotes.json new file mode 100644 index 0000000..ae03243 --- /dev/null +++ b/test/json/validation/y_string_backslash_doublequotes.json @@ -0,0 +1 @@ +["\""] \ No newline at end of file diff --git a/test/json/validation/y_string_comments.json b/test/json/validation/y_string_comments.json new file mode 100644 index 0000000..2260c20 --- /dev/null +++ b/test/json/validation/y_string_comments.json @@ -0,0 +1 @@ +["a/*b*/c/*d//e"] \ No newline at end of file diff --git a/test/json/validation/y_string_double_escape_a.json b/test/json/validation/y_string_double_escape_a.json new file mode 100644 index 0000000..6715d6f --- /dev/null +++ b/test/json/validation/y_string_double_escape_a.json @@ -0,0 +1 @@ +["\\a"] \ No newline at end of file diff --git a/test/json/validation/y_string_double_escape_n.json b/test/json/validation/y_string_double_escape_n.json new file mode 100644 index 0000000..44ca56c --- /dev/null +++ b/test/json/validation/y_string_double_escape_n.json @@ -0,0 +1 @@ +["\\n"] \ No newline at end of file diff --git a/test/json/validation/y_string_escaped_control_character.json b/test/json/validation/y_string_escaped_control_character.json new file mode 100644 index 0000000..5b014a9 --- /dev/null +++ b/test/json/validation/y_string_escaped_control_character.json @@ -0,0 +1 @@ +["\u0012"] \ No newline at end of file diff --git a/test/json/validation/y_string_escaped_noncharacter.json b/test/json/validation/y_string_escaped_noncharacter.json new file mode 100644 index 0000000..2ff52e2 --- /dev/null +++ b/test/json/validation/y_string_escaped_noncharacter.json @@ -0,0 +1 @@ +["\uFFFF"] \ No newline at end of file diff --git a/test/json/validation/y_string_in_array.json b/test/json/validation/y_string_in_array.json new file mode 100644 index 0000000..21d7ae4 --- /dev/null +++ b/test/json/validation/y_string_in_array.json @@ -0,0 +1 @@ +["asd"] \ No newline at end of file diff --git a/test/json/validation/y_string_in_array_with_leading_space.json b/test/json/validation/y_string_in_array_with_leading_space.json new file mode 100644 index 0000000..9e1887c --- /dev/null +++ b/test/json/validation/y_string_in_array_with_leading_space.json @@ -0,0 +1 @@ +[ "asd"] \ No newline at end of file diff --git a/test/json/validation/y_string_last_surrogates_1_and_2.json b/test/json/validation/y_string_last_surrogates_1_and_2.json new file mode 100644 index 0000000..3919cef --- /dev/null +++ b/test/json/validation/y_string_last_surrogates_1_and_2.json @@ -0,0 +1 @@ +["\uDBFF\uDFFF"] \ No newline at end of file diff --git a/test/json/validation/y_string_nbsp_uescaped.json b/test/json/validation/y_string_nbsp_uescaped.json new file mode 100644 index 0000000..2085ab1 --- /dev/null +++ b/test/json/validation/y_string_nbsp_uescaped.json @@ -0,0 +1 @@ +["new\u00A0line"] \ No newline at end of file diff --git a/test/json/validation/y_string_nonCharacterInUTF-8_U+10FFFF.json b/test/json/validation/y_string_nonCharacterInUTF-8_U+10FFFF.json new file mode 100644 index 0000000..059e4d9 --- /dev/null +++ b/test/json/validation/y_string_nonCharacterInUTF-8_U+10FFFF.json @@ -0,0 +1 @@ +["􏿿"] \ No newline at end of file diff --git a/test/json/validation/y_string_nonCharacterInUTF-8_U+FFFF.json b/test/json/validation/y_string_nonCharacterInUTF-8_U+FFFF.json new file mode 100644 index 0000000..4c913bd --- /dev/null +++ b/test/json/validation/y_string_nonCharacterInUTF-8_U+FFFF.json @@ -0,0 +1 @@ +["￿"] \ No newline at end of file diff --git a/test/json/validation/y_string_null_escape.json b/test/json/validation/y_string_null_escape.json new file mode 100644 index 0000000..c1ad844 --- /dev/null +++ b/test/json/validation/y_string_null_escape.json @@ -0,0 +1 @@ +["\u0000"] \ No newline at end of file diff --git a/test/json/validation/y_string_one-byte-utf-8.json b/test/json/validation/y_string_one-byte-utf-8.json new file mode 100644 index 0000000..1571859 --- /dev/null +++ b/test/json/validation/y_string_one-byte-utf-8.json @@ -0,0 +1 @@ +["\u002c"] \ No newline at end of file diff --git a/test/json/validation/y_string_pi.json b/test/json/validation/y_string_pi.json new file mode 100644 index 0000000..9df11ae --- /dev/null +++ b/test/json/validation/y_string_pi.json @@ -0,0 +1 @@ +["π"] \ No newline at end of file diff --git a/test/json/validation/y_string_reservedCharacterInUTF-8_U+1BFFF.json b/test/json/validation/y_string_reservedCharacterInUTF-8_U+1BFFF.json new file mode 100644 index 0000000..10a33a1 --- /dev/null +++ b/test/json/validation/y_string_reservedCharacterInUTF-8_U+1BFFF.json @@ -0,0 +1 @@ +["𛿿"] \ No newline at end of file diff --git a/test/json/validation/y_string_simple_ascii.json b/test/json/validation/y_string_simple_ascii.json new file mode 100644 index 0000000..8cadf7d --- /dev/null +++ b/test/json/validation/y_string_simple_ascii.json @@ -0,0 +1 @@ +["asd "] \ No newline at end of file diff --git a/test/json/validation/y_string_space.json b/test/json/validation/y_string_space.json new file mode 100644 index 0000000..efd782c --- /dev/null +++ b/test/json/validation/y_string_space.json @@ -0,0 +1 @@ +" " \ No newline at end of file diff --git a/test/json/validation/y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json b/test/json/validation/y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json new file mode 100644 index 0000000..7620b66 --- /dev/null +++ b/test/json/validation/y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json @@ -0,0 +1 @@ +["\uD834\uDd1e"] \ No newline at end of file diff --git a/test/json/validation/y_string_three-byte-utf-8.json b/test/json/validation/y_string_three-byte-utf-8.json new file mode 100644 index 0000000..108f1d6 --- /dev/null +++ b/test/json/validation/y_string_three-byte-utf-8.json @@ -0,0 +1 @@ +["\u0821"] \ No newline at end of file diff --git a/test/json/validation/y_string_two-byte-utf-8.json b/test/json/validation/y_string_two-byte-utf-8.json new file mode 100644 index 0000000..461503c --- /dev/null +++ b/test/json/validation/y_string_two-byte-utf-8.json @@ -0,0 +1 @@ +["\u0123"] \ No newline at end of file diff --git a/test/json/validation/y_string_u+2028_line_sep.json b/test/json/validation/y_string_u+2028_line_sep.json new file mode 100644 index 0000000..897b602 --- /dev/null +++ b/test/json/validation/y_string_u+2028_line_sep.json @@ -0,0 +1 @@ +["
"] \ No newline at end of file diff --git a/test/json/validation/y_string_u+2029_par_sep.json b/test/json/validation/y_string_u+2029_par_sep.json new file mode 100644 index 0000000..8cd998c --- /dev/null +++ b/test/json/validation/y_string_u+2029_par_sep.json @@ -0,0 +1 @@ +["
"] \ No newline at end of file diff --git a/test/json/validation/y_string_uEscape.json b/test/json/validation/y_string_uEscape.json new file mode 100644 index 0000000..f7b41a0 --- /dev/null +++ b/test/json/validation/y_string_uEscape.json @@ -0,0 +1 @@ +["\u0061\u30af\u30EA\u30b9"] \ No newline at end of file diff --git a/test/json/validation/y_string_uescaped_newline.json b/test/json/validation/y_string_uescaped_newline.json new file mode 100644 index 0000000..3a5a220 --- /dev/null +++ b/test/json/validation/y_string_uescaped_newline.json @@ -0,0 +1 @@ +["new\u000Aline"] \ No newline at end of file diff --git a/test/json/validation/y_string_unescaped_char_delete.json b/test/json/validation/y_string_unescaped_char_delete.json new file mode 100644 index 0000000..7d064f4 --- /dev/null +++ b/test/json/validation/y_string_unescaped_char_delete.json @@ -0,0 +1 @@ +[""] \ No newline at end of file diff --git a/test/json/validation/y_string_unicode.json b/test/json/validation/y_string_unicode.json new file mode 100644 index 0000000..3598095 --- /dev/null +++ b/test/json/validation/y_string_unicode.json @@ -0,0 +1 @@ +["\uA66D"] \ No newline at end of file diff --git a/test/json/validation/y_string_unicodeEscapedBackslash.json b/test/json/validation/y_string_unicodeEscapedBackslash.json new file mode 100644 index 0000000..0bb3b51 --- /dev/null +++ b/test/json/validation/y_string_unicodeEscapedBackslash.json @@ -0,0 +1 @@ +["\u005C"] \ No newline at end of file diff --git a/test/json/validation/y_string_unicode_2.json b/test/json/validation/y_string_unicode_2.json new file mode 100644 index 0000000..a7dcb97 --- /dev/null +++ b/test/json/validation/y_string_unicode_2.json @@ -0,0 +1 @@ +["⍂㈴⍂"] \ No newline at end of file diff --git a/test/json/validation/y_string_unicode_U+10FFFE_nonchar.json b/test/json/validation/y_string_unicode_U+10FFFE_nonchar.json new file mode 100644 index 0000000..9a8370b --- /dev/null +++ b/test/json/validation/y_string_unicode_U+10FFFE_nonchar.json @@ -0,0 +1 @@ +["\uDBFF\uDFFE"] \ No newline at end of file diff --git a/test/json/validation/y_string_unicode_U+1FFFE_nonchar.json b/test/json/validation/y_string_unicode_U+1FFFE_nonchar.json new file mode 100644 index 0000000..c51f8ae --- /dev/null +++ b/test/json/validation/y_string_unicode_U+1FFFE_nonchar.json @@ -0,0 +1 @@ +["\uD83F\uDFFE"] \ No newline at end of file diff --git a/test/json/validation/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json b/test/json/validation/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json new file mode 100644 index 0000000..626d5f8 --- /dev/null +++ b/test/json/validation/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json @@ -0,0 +1 @@ +["\u200B"] \ No newline at end of file diff --git a/test/json/validation/y_string_unicode_U+2064_invisible_plus.json b/test/json/validation/y_string_unicode_U+2064_invisible_plus.json new file mode 100644 index 0000000..1e23972 --- /dev/null +++ b/test/json/validation/y_string_unicode_U+2064_invisible_plus.json @@ -0,0 +1 @@ +["\u2064"] \ No newline at end of file diff --git a/test/json/validation/y_string_unicode_U+FDD0_nonchar.json b/test/json/validation/y_string_unicode_U+FDD0_nonchar.json new file mode 100644 index 0000000..18ef151 --- /dev/null +++ b/test/json/validation/y_string_unicode_U+FDD0_nonchar.json @@ -0,0 +1 @@ +["\uFDD0"] \ No newline at end of file diff --git a/test/json/validation/y_string_unicode_U+FFFE_nonchar.json b/test/json/validation/y_string_unicode_U+FFFE_nonchar.json new file mode 100644 index 0000000..13d261f --- /dev/null +++ b/test/json/validation/y_string_unicode_U+FFFE_nonchar.json @@ -0,0 +1 @@ +["\uFFFE"] \ No newline at end of file diff --git a/test/json/validation/y_string_unicode_escaped_double_quote.json b/test/json/validation/y_string_unicode_escaped_double_quote.json new file mode 100644 index 0000000..4e62578 --- /dev/null +++ b/test/json/validation/y_string_unicode_escaped_double_quote.json @@ -0,0 +1 @@ +["\u0022"] \ No newline at end of file diff --git a/test/json/validation/y_string_utf8.json b/test/json/validation/y_string_utf8.json new file mode 100644 index 0000000..4087843 --- /dev/null +++ b/test/json/validation/y_string_utf8.json @@ -0,0 +1 @@ +["€𝄞"] \ No newline at end of file diff --git a/test/json/validation/y_string_with_del_character.json b/test/json/validation/y_string_with_del_character.json new file mode 100644 index 0000000..8bd2490 --- /dev/null +++ b/test/json/validation/y_string_with_del_character.json @@ -0,0 +1 @@ +["aa"] \ No newline at end of file diff --git a/test/json/validation/y_structure_lonely_false.json b/test/json/validation/y_structure_lonely_false.json new file mode 100644 index 0000000..02e4a84 --- /dev/null +++ b/test/json/validation/y_structure_lonely_false.json @@ -0,0 +1 @@ +false \ No newline at end of file diff --git a/test/json/validation/y_structure_lonely_int.json b/test/json/validation/y_structure_lonely_int.json new file mode 100644 index 0000000..f70d7bb --- /dev/null +++ b/test/json/validation/y_structure_lonely_int.json @@ -0,0 +1 @@ +42 \ No newline at end of file diff --git a/test/json/validation/y_structure_lonely_negative_real.json b/test/json/validation/y_structure_lonely_negative_real.json new file mode 100644 index 0000000..b5135a2 --- /dev/null +++ b/test/json/validation/y_structure_lonely_negative_real.json @@ -0,0 +1 @@ +-0.1 \ No newline at end of file diff --git a/test/json/validation/y_structure_lonely_null.json b/test/json/validation/y_structure_lonely_null.json new file mode 100644 index 0000000..ec747fa --- /dev/null +++ b/test/json/validation/y_structure_lonely_null.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/test/json/validation/y_structure_lonely_string.json b/test/json/validation/y_structure_lonely_string.json new file mode 100644 index 0000000..b6e982c --- /dev/null +++ b/test/json/validation/y_structure_lonely_string.json @@ -0,0 +1 @@ +"asd" \ No newline at end of file diff --git a/test/json/validation/y_structure_lonely_true.json b/test/json/validation/y_structure_lonely_true.json new file mode 100644 index 0000000..f32a580 --- /dev/null +++ b/test/json/validation/y_structure_lonely_true.json @@ -0,0 +1 @@ +true \ No newline at end of file diff --git a/test/json/validation/y_structure_string_empty.json b/test/json/validation/y_structure_string_empty.json new file mode 100644 index 0000000..3cc762b --- /dev/null +++ b/test/json/validation/y_structure_string_empty.json @@ -0,0 +1 @@ +"" \ No newline at end of file diff --git a/test/json/validation/y_structure_trailing_newline.json b/test/json/validation/y_structure_trailing_newline.json new file mode 100644 index 0000000..0c3426d --- /dev/null +++ b/test/json/validation/y_structure_trailing_newline.json @@ -0,0 +1 @@ +["a"] diff --git a/test/json/validation/y_structure_true_in_array.json b/test/json/validation/y_structure_true_in_array.json new file mode 100644 index 0000000..de601e3 --- /dev/null +++ b/test/json/validation/y_structure_true_in_array.json @@ -0,0 +1 @@ +[true] \ No newline at end of file diff --git a/test/json/validation/y_structure_whitespace_array.json b/test/json/validation/y_structure_whitespace_array.json new file mode 100644 index 0000000..2bedf7f --- /dev/null +++ b/test/json/validation/y_structure_whitespace_array.json @@ -0,0 +1 @@ + [] \ No newline at end of file diff --git a/test/ods/borders/grid-box.ods b/test/ods/borders/grid-box.ods new file mode 100644 index 0000000..635df51 Binary files /dev/null and b/test/ods/borders/grid-box.ods differ diff --git a/test/ods/borders/single-cells.ods b/test/ods/borders/single-cells.ods new file mode 100644 index 0000000..a51d845 Binary files /dev/null and b/test/ods/borders/single-cells.ods differ diff --git a/test/ods/cell-properties/wrap-and-shrink.ods b/test/ods/cell-properties/wrap-and-shrink.ods new file mode 100644 index 0000000..ad03617 Binary files /dev/null and b/test/ods/cell-properties/wrap-and-shrink.ods differ diff --git a/test/ods/column-width-row-height/input.ods b/test/ods/column-width-row-height/input.ods new file mode 100644 index 0000000..0f4b223 Binary files /dev/null and b/test/ods/column-width-row-height/input.ods differ diff --git a/test/ods/date-cell/input.ods b/test/ods/date-cell/input.ods new file mode 100644 index 0000000..1aecd24 Binary files /dev/null and b/test/ods/date-cell/input.ods differ diff --git a/test/ods/formatted-text/bold-and-italic.ods b/test/ods/formatted-text/bold-and-italic.ods new file mode 100644 index 0000000..f49e27f Binary files /dev/null and b/test/ods/formatted-text/bold-and-italic.ods differ diff --git a/test/ods/formula-1/check.txt b/test/ods/formula-1/check.txt new file mode 100644 index 0000000..ef31604 --- /dev/null +++ b/test/ods/formula-1/check.txt @@ -0,0 +1,4 @@ +Formula/0/0:formula:1*2:2 +Formula/1/0:formula:12/3:4 +Formula/2/0:formula:AVERAGE($A1:A$2):3 +Formula/3/0:formula:SUM($A$1:$A$3):9 diff --git a/test/ods/formula-1/input.ods b/test/ods/formula-1/input.ods new file mode 100644 index 0000000..36841e6 Binary files /dev/null and b/test/ods/formula-1/input.ods differ diff --git a/test/ods/formula-2/check.txt b/test/ods/formula-2/check.txt new file mode 100644 index 0000000..eef6880 --- /dev/null +++ b/test/ods/formula-2/check.txt @@ -0,0 +1,21 @@ +Sheet1/0/0:string:"Number" +Sheet1/0/1:string:"String" +Sheet1/0/2:string:"Formula" +Sheet1/1/0:numeric:1 +Sheet1/1/1:string:"Andy" +Sheet1/1/2:formula:CONCATENATE(A2," ",B2):1 Andy +Sheet1/2/0:numeric:2 +Sheet1/2/1:string:"Bruce" +Sheet1/2/2:formula:CONCATENATE(A3," ",B3):2 Bruce +Sheet1/3/0:numeric:3 +Sheet1/3/1:string:"Charlie" +Sheet1/3/2:formula:CONCATENATE(A4," ",B4):3 Charlie +Sheet1/4/0:numeric:4 +Sheet1/4/1:string:"David" +Sheet1/4/2:formula:CONCATENATE(A5," ",B5):4 David +Sheet1/5/0:numeric:5 +Sheet1/5/1:string:"Edward" +Sheet1/5/2:formula:CONCATENATE(A6," ",B6):5 Edward +Sheet1/6/0:numeric:6 +Sheet1/6/1:string:"Frank" +Sheet1/6/2:formula:CONCATENATE(A7," ",B7):6 Frank diff --git a/test/ods/formula-2/input.ods b/test/ods/formula-2/input.ods new file mode 100644 index 0000000..d310af2 Binary files /dev/null and b/test/ods/formula-2/input.ods differ diff --git a/test/ods/import-styles/cell-protection.xml b/test/ods/import-styles/cell-protection.xml new file mode 100644 index 0000000..0bea938 --- /dev/null +++ b/test/ods/import-styles/cell-protection.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/test/ods/import-styles/cell-styles.xml b/test/ods/import-styles/cell-styles.xml new file mode 100644 index 0000000..f3e94ff --- /dev/null +++ b/test/ods/import-styles/cell-styles.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/ods/import-styles/standard-styles.xml b/test/ods/import-styles/standard-styles.xml new file mode 100644 index 0000000..d1d1a75 --- /dev/null +++ b/test/ods/import-styles/standard-styles.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/ods/japanese.ods b/test/ods/japanese.ods new file mode 100644 index 0000000..3c2cc4e Binary files /dev/null and b/test/ods/japanese.ods differ diff --git a/test/ods/named-expression-sheet-local/check.txt b/test/ods/named-expression-sheet-local/check.txt new file mode 100644 index 0000000..c6dbaed --- /dev/null +++ b/test/ods/named-expression-sheet-local/check.txt @@ -0,0 +1,24 @@ +Sheet1/0/0:numeric:1 +Sheet1/0/1:numeric:6 +Sheet1/1/0:numeric:2 +Sheet1/1/1:numeric:7 +Sheet1/2/0:numeric:3 +Sheet1/2/1:numeric:8 +Sheet1/3/0:numeric:4 +Sheet1/3/1:numeric:9 +Sheet1/4/0:numeric:5 +Sheet1/4/1:numeric:10 +Sheet1/6/0:formula:SUM(MyRange):27 +Sheet1/6/1:formula:MyCalc:9 +Sheet2/0/0:numeric:10 +Sheet2/0/1:numeric:20 +Sheet2/1/0:numeric:11 +Sheet2/1/1:numeric:21 +Sheet2/2/0:numeric:12 +Sheet2/2/1:numeric:22 +Sheet2/3/0:numeric:13 +Sheet2/3/1:numeric:23 +Sheet2/4/0:numeric:14 +Sheet2/4/1:numeric:24 +Sheet2/6/0:formula:SUM(MyRange):74 +Sheet2/6/1:formula:MyCalc:-8 diff --git a/test/ods/named-expression-sheet-local/input.ods b/test/ods/named-expression-sheet-local/input.ods new file mode 100644 index 0000000..b26f717 Binary files /dev/null and b/test/ods/named-expression-sheet-local/input.ods differ diff --git a/test/ods/named-expression/check.txt b/test/ods/named-expression/check.txt new file mode 100644 index 0000000..e25d914 --- /dev/null +++ b/test/ods/named-expression/check.txt @@ -0,0 +1,14 @@ +Sheet1/1/1:formula:MyCalc:128 +Sheet1/1/4:numeric:7 +Sheet1/2/4:numeric:3 +Sheet1/3/2:formula:128/MyCalc:1 +Sheet1/3/4:formula:MyCalcWithRef:1024 +Sheet1/6/0:formula:INT(MyCalcWithRef2*PI()):65 +Sheet1/7/0:formula:INT(MyCalcWithRef2*PI()):50 +Sheet1/8/0:formula:INT(MyCalcWithRef2*PI()):28 +Sheet2/0/0:numeric:1 +Sheet2/0/1:numeric:4 +Sheet2/1/0:numeric:2 +Sheet2/1/1:numeric:5 +Sheet2/2/0:numeric:3 +Sheet2/2/1:numeric:6 diff --git a/test/ods/named-expression/input.ods b/test/ods/named-expression/input.ods new file mode 100644 index 0000000..19a60e8 Binary files /dev/null and b/test/ods/named-expression/input.ods differ diff --git a/test/ods/named-range/check.txt b/test/ods/named-range/check.txt new file mode 100644 index 0000000..e745fb7 --- /dev/null +++ b/test/ods/named-range/check.txt @@ -0,0 +1,36 @@ +Sheet1/0/0:numeric:1 +Sheet1/0/1:numeric:6 +Sheet1/0/2:numeric:11 +Sheet1/0/4:numeric:1 +Sheet1/0/5:numeric:6 +Sheet1/0/6:numeric:11 +Sheet1/1/0:numeric:2 +Sheet1/1/1:numeric:7 +Sheet1/1/2:numeric:12 +Sheet1/1/4:numeric:2 +Sheet1/1/5:numeric:7 +Sheet1/1/6:numeric:12 +Sheet1/2/0:numeric:3 +Sheet1/2/1:numeric:8 +Sheet1/2/2:numeric:13 +Sheet1/2/4:numeric:3 +Sheet1/2/5:numeric:8 +Sheet1/2/6:numeric:13 +Sheet1/3/0:numeric:4 +Sheet1/3/1:numeric:9 +Sheet1/3/2:numeric:14 +Sheet1/3/4:numeric:4 +Sheet1/3/5:numeric:9 +Sheet1/3/6:numeric:14 +Sheet1/4/0:numeric:5 +Sheet1/4/1:numeric:10 +Sheet1/4/2:numeric:15 +Sheet1/4/4:numeric:5 +Sheet1/4/5:numeric:10 +Sheet1/4/6:numeric:15 +Sheet1/6/0:formula:SUM(MyRange):15 +Sheet1/6/1:formula:SUM(MyRange2):55 +Sheet1/6/2:formula:SUM(MyRange3):65 +Sheet1/6/4:formula:SUM(RangeRelative):15 +Sheet1/6/5:formula:SUM(RangeRelative):40 +Sheet1/6/6:formula:SUM(RangeRelative):65 diff --git a/test/ods/named-range/input.ods b/test/ods/named-range/input.ods new file mode 100644 index 0000000..47b3aad Binary files /dev/null and b/test/ods/named-range/input.ods differ diff --git a/test/ods/number-format/basic-set.ods b/test/ods/number-format/basic-set.ods new file mode 100644 index 0000000..d009f1b Binary files /dev/null and b/test/ods/number-format/basic-set.ods differ diff --git a/test/ods/raw-values-1/check.txt b/test/ods/raw-values-1/check.txt new file mode 100644 index 0000000..935cf22 --- /dev/null +++ b/test/ods/raw-values-1/check.txt @@ -0,0 +1,25 @@ +Num/1/0:numeric:1.1 +Num/1/2:numeric:2.1 +Num/1/4:numeric:3.1 +Num/2/0:numeric:1.2 +Num/2/2:numeric:2.2 +Num/2/4:numeric:3.2 +Num/3/0:numeric:1.3 +Num/3/2:numeric:2.3 +Num/3/4:numeric:3.3 +Num/6/2:numeric:5 +Num/6/3:numeric:6 +Num/6/4:numeric:7 +Text/0/0:string:"A" +Text/1/0:string:"B" +Text/1/1:string:"D" +Text/2/0:string:"C" +Text/2/1:string:"E" +Text/2/2:string:"G" +Text/3/1:string:"F" +Text/3/2:string:"H" +Text/4/2:string:"I" +Text/6/3:string:"Andy" +Text/7/3:string:"Bruce" +Text/8/3:string:"Charlie" +Text/9/3:string:"David" diff --git a/test/ods/raw-values-1/input.ods b/test/ods/raw-values-1/input.ods new file mode 100644 index 0000000..8b856a3 Binary files /dev/null and b/test/ods/raw-values-1/input.ods differ diff --git a/test/ods/styles/asian-complex.ods b/test/ods/styles/asian-complex.ods new file mode 100644 index 0000000..4e3eb9c Binary files /dev/null and b/test/ods/styles/asian-complex.ods differ diff --git a/test/ods/styles/column-styles.ods b/test/ods/styles/column-styles.ods new file mode 100644 index 0000000..a37ed22 Binary files /dev/null and b/test/ods/styles/column-styles.ods differ diff --git a/test/ods/styles/direct-format.ods b/test/ods/styles/direct-format.ods new file mode 100644 index 0000000..6e80685 Binary files /dev/null and b/test/ods/styles/direct-format.ods differ diff --git a/test/ods/styles/text-underlines.ods b/test/ods/styles/text-underlines.ods new file mode 100644 index 0000000..316b3c0 Binary files /dev/null and b/test/ods/styles/text-underlines.ods differ diff --git a/test/ods/test.ods b/test/ods/test.ods new file mode 100644 index 0000000..0c5b00a Binary files /dev/null and b/test/ods/test.ods differ diff --git a/test/parquet/basic/basic-gzip.parquet b/test/parquet/basic/basic-gzip.parquet new file mode 100644 index 0000000..313de04 Binary files /dev/null and b/test/parquet/basic/basic-gzip.parquet differ diff --git a/test/parquet/basic/basic-gzip.parquet.check b/test/parquet/basic/basic-gzip.parquet.check new file mode 100644 index 0000000..455389b --- /dev/null +++ b/test/parquet/basic/basic-gzip.parquet.check @@ -0,0 +1,66 @@ +basic-gzip/0/0:string:"int32" +basic-gzip/0/1:string:"int64" +basic-gzip/0/2:string:"float32" +basic-gzip/0/3:string:"float64" +basic-gzip/0/4:string:"boolean" +basic-gzip/0/5:string:"string" +basic-gzip/1/0:numeric:0 +basic-gzip/1/1:numeric:0 +basic-gzip/1/2:numeric:0 +basic-gzip/1/3:numeric:-21 +basic-gzip/1/4:boolean:false +basic-gzip/1/5:string:"ubergeek" +basic-gzip/2/0:numeric:1 +basic-gzip/2/1:numeric:11 +basic-gzip/2/2:numeric:-1 +basic-gzip/2/3:numeric:-22 +basic-gzip/2/4:boolean:true +basic-gzip/2/5:string:"thwarter" +basic-gzip/3/0:numeric:2 +basic-gzip/3/1:numeric:22 +basic-gzip/3/2:numeric:-2 +basic-gzip/3/3:numeric:-23 +basic-gzip/3/4:boolean:false +basic-gzip/3/5:string:"ironfist" +basic-gzip/4/0:numeric:3 +basic-gzip/4/1:numeric:33 +basic-gzip/4/2:numeric:-3 +basic-gzip/4/3:numeric:-24 +basic-gzip/4/4:boolean:true +basic-gzip/4/5:string:"turkoman" +basic-gzip/5/0:numeric:4 +basic-gzip/5/1:numeric:44 +basic-gzip/5/2:numeric:-4 +basic-gzip/5/3:numeric:-25 +basic-gzip/5/4:boolean:false +basic-gzip/5/5:string:"mesozoan" +basic-gzip/6/0:numeric:5 +basic-gzip/6/1:numeric:55 +basic-gzip/6/2:numeric:-5 +basic-gzip/6/3:numeric:-26 +basic-gzip/6/4:boolean:true +basic-gzip/6/5:string:"seatsale" +basic-gzip/7/0:numeric:6 +basic-gzip/7/1:numeric:66 +basic-gzip/7/2:numeric:-6 +basic-gzip/7/3:numeric:-27 +basic-gzip/7/4:boolean:false +basic-gzip/7/5:string:"hardtack" +basic-gzip/8/0:numeric:7 +basic-gzip/8/1:numeric:77 +basic-gzip/8/2:numeric:-7 +basic-gzip/8/3:numeric:-28 +basic-gzip/8/4:boolean:true +basic-gzip/8/5:string:"phyllary" +basic-gzip/9/0:numeric:8 +basic-gzip/9/1:numeric:88 +basic-gzip/9/2:numeric:-8 +basic-gzip/9/3:numeric:-29 +basic-gzip/9/4:boolean:false +basic-gzip/9/5:string:"hydriads" +basic-gzip/10/0:numeric:9 +basic-gzip/10/1:numeric:99 +basic-gzip/10/2:numeric:-9 +basic-gzip/10/3:numeric:-30 +basic-gzip/10/4:boolean:true +basic-gzip/10/5:string:"stranger" diff --git a/test/parquet/basic/basic-nocomp.parquet b/test/parquet/basic/basic-nocomp.parquet new file mode 100644 index 0000000..25e9cfc Binary files /dev/null and b/test/parquet/basic/basic-nocomp.parquet differ diff --git a/test/parquet/basic/basic-nocomp.parquet.check b/test/parquet/basic/basic-nocomp.parquet.check new file mode 100644 index 0000000..a5c9636 --- /dev/null +++ b/test/parquet/basic/basic-nocomp.parquet.check @@ -0,0 +1,66 @@ +basic-nocomp/0/0:string:"int32" +basic-nocomp/0/1:string:"int64" +basic-nocomp/0/2:string:"float32" +basic-nocomp/0/3:string:"float64" +basic-nocomp/0/4:string:"boolean" +basic-nocomp/0/5:string:"string" +basic-nocomp/1/0:numeric:0 +basic-nocomp/1/1:numeric:0 +basic-nocomp/1/2:numeric:0 +basic-nocomp/1/3:numeric:-21 +basic-nocomp/1/4:boolean:false +basic-nocomp/1/5:string:"ubergeek" +basic-nocomp/2/0:numeric:1 +basic-nocomp/2/1:numeric:11 +basic-nocomp/2/2:numeric:-1 +basic-nocomp/2/3:numeric:-22 +basic-nocomp/2/4:boolean:true +basic-nocomp/2/5:string:"thwarter" +basic-nocomp/3/0:numeric:2 +basic-nocomp/3/1:numeric:22 +basic-nocomp/3/2:numeric:-2 +basic-nocomp/3/3:numeric:-23 +basic-nocomp/3/4:boolean:false +basic-nocomp/3/5:string:"ironfist" +basic-nocomp/4/0:numeric:3 +basic-nocomp/4/1:numeric:33 +basic-nocomp/4/2:numeric:-3 +basic-nocomp/4/3:numeric:-24 +basic-nocomp/4/4:boolean:true +basic-nocomp/4/5:string:"turkoman" +basic-nocomp/5/0:numeric:4 +basic-nocomp/5/1:numeric:44 +basic-nocomp/5/2:numeric:-4 +basic-nocomp/5/3:numeric:-25 +basic-nocomp/5/4:boolean:false +basic-nocomp/5/5:string:"mesozoan" +basic-nocomp/6/0:numeric:5 +basic-nocomp/6/1:numeric:55 +basic-nocomp/6/2:numeric:-5 +basic-nocomp/6/3:numeric:-26 +basic-nocomp/6/4:boolean:true +basic-nocomp/6/5:string:"seatsale" +basic-nocomp/7/0:numeric:6 +basic-nocomp/7/1:numeric:66 +basic-nocomp/7/2:numeric:-6 +basic-nocomp/7/3:numeric:-27 +basic-nocomp/7/4:boolean:false +basic-nocomp/7/5:string:"hardtack" +basic-nocomp/8/0:numeric:7 +basic-nocomp/8/1:numeric:77 +basic-nocomp/8/2:numeric:-7 +basic-nocomp/8/3:numeric:-28 +basic-nocomp/8/4:boolean:true +basic-nocomp/8/5:string:"phyllary" +basic-nocomp/9/0:numeric:8 +basic-nocomp/9/1:numeric:88 +basic-nocomp/9/2:numeric:-8 +basic-nocomp/9/3:numeric:-29 +basic-nocomp/9/4:boolean:false +basic-nocomp/9/5:string:"hydriads" +basic-nocomp/10/0:numeric:9 +basic-nocomp/10/1:numeric:99 +basic-nocomp/10/2:numeric:-9 +basic-nocomp/10/3:numeric:-30 +basic-nocomp/10/4:boolean:true +basic-nocomp/10/5:string:"stranger" diff --git a/test/parquet/basic/basic-snappy.parquet b/test/parquet/basic/basic-snappy.parquet new file mode 100644 index 0000000..0ac150c Binary files /dev/null and b/test/parquet/basic/basic-snappy.parquet differ diff --git a/test/parquet/basic/basic-snappy.parquet.check b/test/parquet/basic/basic-snappy.parquet.check new file mode 100644 index 0000000..f7cd1c7 --- /dev/null +++ b/test/parquet/basic/basic-snappy.parquet.check @@ -0,0 +1,66 @@ +basic-snappy/0/0:string:"int32" +basic-snappy/0/1:string:"int64" +basic-snappy/0/2:string:"float32" +basic-snappy/0/3:string:"float64" +basic-snappy/0/4:string:"boolean" +basic-snappy/0/5:string:"string" +basic-snappy/1/0:numeric:0 +basic-snappy/1/1:numeric:0 +basic-snappy/1/2:numeric:0 +basic-snappy/1/3:numeric:-21 +basic-snappy/1/4:boolean:false +basic-snappy/1/5:string:"ubergeek" +basic-snappy/2/0:numeric:1 +basic-snappy/2/1:numeric:11 +basic-snappy/2/2:numeric:-1 +basic-snappy/2/3:numeric:-22 +basic-snappy/2/4:boolean:true +basic-snappy/2/5:string:"thwarter" +basic-snappy/3/0:numeric:2 +basic-snappy/3/1:numeric:22 +basic-snappy/3/2:numeric:-2 +basic-snappy/3/3:numeric:-23 +basic-snappy/3/4:boolean:false +basic-snappy/3/5:string:"ironfist" +basic-snappy/4/0:numeric:3 +basic-snappy/4/1:numeric:33 +basic-snappy/4/2:numeric:-3 +basic-snappy/4/3:numeric:-24 +basic-snappy/4/4:boolean:true +basic-snappy/4/5:string:"turkoman" +basic-snappy/5/0:numeric:4 +basic-snappy/5/1:numeric:44 +basic-snappy/5/2:numeric:-4 +basic-snappy/5/3:numeric:-25 +basic-snappy/5/4:boolean:false +basic-snappy/5/5:string:"mesozoan" +basic-snappy/6/0:numeric:5 +basic-snappy/6/1:numeric:55 +basic-snappy/6/2:numeric:-5 +basic-snappy/6/3:numeric:-26 +basic-snappy/6/4:boolean:true +basic-snappy/6/5:string:"seatsale" +basic-snappy/7/0:numeric:6 +basic-snappy/7/1:numeric:66 +basic-snappy/7/2:numeric:-6 +basic-snappy/7/3:numeric:-27 +basic-snappy/7/4:boolean:false +basic-snappy/7/5:string:"hardtack" +basic-snappy/8/0:numeric:7 +basic-snappy/8/1:numeric:77 +basic-snappy/8/2:numeric:-7 +basic-snappy/8/3:numeric:-28 +basic-snappy/8/4:boolean:true +basic-snappy/8/5:string:"phyllary" +basic-snappy/9/0:numeric:8 +basic-snappy/9/1:numeric:88 +basic-snappy/9/2:numeric:-8 +basic-snappy/9/3:numeric:-29 +basic-snappy/9/4:boolean:false +basic-snappy/9/5:string:"hydriads" +basic-snappy/10/0:numeric:9 +basic-snappy/10/1:numeric:99 +basic-snappy/10/2:numeric:-9 +basic-snappy/10/3:numeric:-30 +basic-snappy/10/4:boolean:true +basic-snappy/10/5:string:"stranger" diff --git a/test/parquet/basic/basic-zstd.parquet b/test/parquet/basic/basic-zstd.parquet new file mode 100644 index 0000000..b1c878f Binary files /dev/null and b/test/parquet/basic/basic-zstd.parquet differ diff --git a/test/parquet/basic/basic-zstd.parquet.check b/test/parquet/basic/basic-zstd.parquet.check new file mode 100644 index 0000000..2ae0af6 --- /dev/null +++ b/test/parquet/basic/basic-zstd.parquet.check @@ -0,0 +1,66 @@ +basic-zstd/0/0:string:"int32" +basic-zstd/0/1:string:"int64" +basic-zstd/0/2:string:"float32" +basic-zstd/0/3:string:"float64" +basic-zstd/0/4:string:"boolean" +basic-zstd/0/5:string:"string" +basic-zstd/1/0:numeric:0 +basic-zstd/1/1:numeric:0 +basic-zstd/1/2:numeric:0 +basic-zstd/1/3:numeric:-21 +basic-zstd/1/4:boolean:false +basic-zstd/1/5:string:"ubergeek" +basic-zstd/2/0:numeric:1 +basic-zstd/2/1:numeric:11 +basic-zstd/2/2:numeric:-1 +basic-zstd/2/3:numeric:-22 +basic-zstd/2/4:boolean:true +basic-zstd/2/5:string:"thwarter" +basic-zstd/3/0:numeric:2 +basic-zstd/3/1:numeric:22 +basic-zstd/3/2:numeric:-2 +basic-zstd/3/3:numeric:-23 +basic-zstd/3/4:boolean:false +basic-zstd/3/5:string:"ironfist" +basic-zstd/4/0:numeric:3 +basic-zstd/4/1:numeric:33 +basic-zstd/4/2:numeric:-3 +basic-zstd/4/3:numeric:-24 +basic-zstd/4/4:boolean:true +basic-zstd/4/5:string:"turkoman" +basic-zstd/5/0:numeric:4 +basic-zstd/5/1:numeric:44 +basic-zstd/5/2:numeric:-4 +basic-zstd/5/3:numeric:-25 +basic-zstd/5/4:boolean:false +basic-zstd/5/5:string:"mesozoan" +basic-zstd/6/0:numeric:5 +basic-zstd/6/1:numeric:55 +basic-zstd/6/2:numeric:-5 +basic-zstd/6/3:numeric:-26 +basic-zstd/6/4:boolean:true +basic-zstd/6/5:string:"seatsale" +basic-zstd/7/0:numeric:6 +basic-zstd/7/1:numeric:66 +basic-zstd/7/2:numeric:-6 +basic-zstd/7/3:numeric:-27 +basic-zstd/7/4:boolean:false +basic-zstd/7/5:string:"hardtack" +basic-zstd/8/0:numeric:7 +basic-zstd/8/1:numeric:77 +basic-zstd/8/2:numeric:-7 +basic-zstd/8/3:numeric:-28 +basic-zstd/8/4:boolean:true +basic-zstd/8/5:string:"phyllary" +basic-zstd/9/0:numeric:8 +basic-zstd/9/1:numeric:88 +basic-zstd/9/2:numeric:-8 +basic-zstd/9/3:numeric:-29 +basic-zstd/9/4:boolean:false +basic-zstd/9/5:string:"hydriads" +basic-zstd/10/0:numeric:9 +basic-zstd/10/1:numeric:99 +basic-zstd/10/2:numeric:-9 +basic-zstd/10/3:numeric:-30 +basic-zstd/10/4:boolean:true +basic-zstd/10/5:string:"stranger" diff --git a/test/parquet/basic/float-with-nan.parquet b/test/parquet/basic/float-with-nan.parquet new file mode 100644 index 0000000..b3aea00 Binary files /dev/null and b/test/parquet/basic/float-with-nan.parquet differ diff --git a/test/parquet/basic/float-with-nan.parquet.check b/test/parquet/basic/float-with-nan.parquet.check new file mode 100644 index 0000000..9618f9e --- /dev/null +++ b/test/parquet/basic/float-with-nan.parquet.check @@ -0,0 +1,4 @@ +float-with-nan/0/0:string:"float64 with nan" +float-with-nan/1/0:numeric:1.2 +float-with-nan/2/0:numeric:3.4 +float-with-nan/5/0:numeric:5.6 diff --git a/test/python/env.json.in b/test/python/env.json.in new file mode 100644 index 0000000..26b82d6 --- /dev/null +++ b/test/python/env.json.in @@ -0,0 +1,6 @@ +{ + "version-major": @ORCUS_MAJOR_VERSION@, + "version-minor": @ORCUS_MINOR_VERSION@, + "version-micro": @ORCUS_MICRO_VERSION@ +} + diff --git a/test/python/file_load_common.py b/test/python/file_load_common.py new file mode 100644 index 0000000..5587405 --- /dev/null +++ b/test/python/file_load_common.py @@ -0,0 +1,248 @@ +######################################################################## +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +######################################################################## + +"""Collection of test cases shared between different file format types.""" + +import os +import os.path +import collections +import orcus + + +class Address(object): + + def __init__(self, pos_s): + self.sheet_name, self.row, self.column = pos_s.split('/') + self.row = int(self.row) + self.column = int(self.column) + + def __repr__(self): + return "(sheet={}; row={}, column={})".format(self.sheet_name, self.row, self.column) + + +class ExpectedSheet(object): + + def __init__(self, name): + self.__name = name + self.__rows = collections.OrderedDict() + self.__max_column = 0 + self.__max_row = 0 + + @property + def name(self): + return self.__name + + @property + def data_size(self): + return {"column": self.__max_column+1, "row": self.__max_row+1} + + def get_rows(self): + rows = list() + for i in range(self.__max_row+1): + row = [(orcus.CellType.EMPTY, None) for _ in range(self.__max_column+1)] + if i in self.__rows: + for col_pos, cell in self.__rows[i].items(): + row[col_pos] = cell + rows.append(tuple(row)) + return tuple(rows) + + def insert_cell(self, row, column, cell_type, cell_value, result): + if row not in self.__rows: + self.__rows[row] = collections.OrderedDict() + + row_data = self.__rows[row] + + if cell_type == "numeric": + row_data[column] = (orcus.CellType.NUMERIC, float(cell_value)) + elif cell_type == "string": + row_data[column] = (orcus.CellType.STRING, self.__unescape_string_cell_value(cell_value)) + elif cell_type == "boolean": + if cell_value == "true": + row_data[column] = (orcus.CellType.BOOLEAN, True) + elif cell_value == "false": + row_data[column] = (orcus.CellType.BOOLEAN, False) + else: + raise RuntimeError("invalid boolean value: {}".format(cell_value)) + elif cell_type == "formula": + row_data[column] = (orcus.CellType.FORMULA, result, cell_value) + else: + raise RuntimeError("unhandled cell value type: {}".format(cell_type)) + + # Update the data range. + if row > self.__max_row: + self.__max_row = row + if column > self.__max_column: + self.__max_column = column + + def __unescape_string_cell_value(self, v): + if v[0] != '"' or v[-1] != '"': + raise RuntimeError("string value is expected to be quoted.") + + v = v[1:-1] # remove the outer quotes. + + buf = [] + escaped_char = False + for c in v: + if escaped_char: + buf.append(c) + escaped_char = False + continue + + if c == '\\': + escaped_char = True + continue + + buf.append(c) + + return "".join(buf) + + +class ExpectedDocument(object): + + def __init__(self, filepath): + self.sheets = [] + + with open(filepath, "r") as f: + for line in f.readlines(): + line = line.strip() + self.__parse_line(line) + + def __parse_line(self, line): + if not line: + return + + # Split the line into 3 parts - position, cell type and the value. + # Note that a valid formula expression may contain ':', so we cannot + # simply split the line by ':'. + + parts = list() + idx = line.find(':') + while idx >= 0: + parts.append(line[:idx]) + line = line[idx+1:] + if len(parts) == 2: + # Append the rest. + parts.append(line) + break + + idx = line.find(':') + + if len(parts) != 3: + raise RuntimeError( + "line is expected to contain 3 parts, but not all parts are identified.") + + if parts[1] in ("merge-width", "merge-height"): + return + + pos, cell_type, cell_value = parts[0], parts[1], parts[2] + result = None + if cell_type == "formula": + # Split the cell value into formula expression and result. + idx = cell_value.rfind(':') + if idx < 0: + raise RuntimeError("formula line is expected to contain a result value.") + cell_value, result = cell_value[:idx], cell_value[idx+1:] + try: + result = float(result) + except ValueError: + pass + + pos = Address(pos) + + if not self.sheets or self.sheets[-1].name != pos.sheet_name: + self.sheets.append(ExpectedSheet(pos.sheet_name)) + + self.sheets[-1].insert_cell(pos.row, pos.column, cell_type, cell_value, result) + + +def _compare_cells(expected, actual): + type = expected[0] + + if type != actual.type: + return False + + if type == orcus.CellType.EMPTY: + return True + + if type in (orcus.CellType.BOOLEAN, orcus.CellType.NUMERIC, orcus.CellType.STRING): + return expected[1] == actual.value + + if type == orcus.CellType.FORMULA: + return expected[1] == actual.value and expected[2] == actual.formula + + return False + + +class DocLoader: + + def __init__(self, mod_loader): + self._mod_loader = mod_loader + + def load(self, filepath, recalc): + with open(filepath, "rb") as f: + return self._mod_loader.read(f, recalc=recalc) + + def load_from_value(self, filepath): + with open(filepath, "rb") as f: + bytes = f.read() + return self._mod_loader.read(bytes, recalc=False) + + +def run_test_dir(self, test_dir, doc_loader): + """Run test case for loading a file into a document. + + :param test_dir: test directory that contains an input file (whose base + name is 'input') and a content check file (check.txt). + :param mod_loader: module object that contains function called 'read'. + """ + + print("test directory: {}".format(test_dir)) + expected = ExpectedDocument(os.path.join(test_dir, "check.txt")) + + # Find the input file to load. + input_file = None + for file_name in os.listdir(test_dir): + name, ext = os.path.splitext(file_name) + if name == "input": + input_file = os.path.join(test_dir, file_name) + break + + print("input file: {}".format(input_file)) + self.assertIsNot(input_file, None) + + doc = doc_loader.load(input_file, True) + self.assertIsInstance(doc, orcus.Document) + + # Sometimes the actual document contains trailing empty sheets, which the + # expected document does not store. + self.assertTrue(len(expected.sheets)) + self.assertTrue(len(expected.sheets) <= len(doc.sheets)) + + expected_sheets = {sh.name: sh for sh in expected.sheets} + actual_sheets = {sh.name: sh for sh in doc.sheets} + + for sheet_name, actual_sheet in actual_sheets.items(): + if sheet_name in expected_sheets: + expected_sheet = expected_sheets[sheet_name] + self.assertEqual(expected_sheet.data_size, actual_sheet.data_size) + for expected_row, actual_row in zip(expected_sheet.get_rows(), actual_sheet.get_rows()): + for expected, actual in zip(expected_row, actual_row): + self.assertTrue(_compare_cells(expected, actual)) + else: + # This sheet must be empty since it's not in the expected document. + # Make sure it returns empty row set. + rows = [row for row in actual_sheet.get_rows()] + self.assertEqual(len(rows), 0) + + # Also make sure the document loads fine without recalc. + doc = doc_loader.load(input_file, False) + self.assertIsInstance(doc, orcus.Document) + + # Make sure the document loads from in-memory value. + doc = doc_loader.load_from_value(input_file) + self.assertIsInstance(doc, orcus.Document) diff --git a/test/python/perf/test_json.py b/test/python/perf/test_json.py new file mode 100755 index 0000000..acd34cc --- /dev/null +++ b/test/python/perf/test_json.py @@ -0,0 +1,273 @@ +#!/usr/bin/env python3 + +from datetime import datetime +import json +import orcus.json + +swagger_json = """ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "Swagger Petstore (Simple)", + "description": "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification", + "termsOfService": "http://helloreverb.com/terms/", + "contact": { + "name": "Swagger API team", + "email": "foo@example.com", + "url": "http://swagger.io" + }, + "license": { + "name": "MIT", + "url": "http://opensource.org/licenses/MIT" + } + }, + "host": "petstore.swagger.wordnik.com", + "basePath": "/api", + "schemes": [ + "http" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/pets": { + "get": { + "description": "Returns all pets from the system that the user has access to", + "operationId": "findPets", + "produces": [ + "application/json", + "application/xml", + "text/xml", + "text/html" + ], + "parameters": [ + { + "name": "tags", + "in": "query", + "description": "tags to filter by", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "csv" + }, + { + "name": "limit", + "in": "query", + "description": "maximum number of results to return", + "required": false, + "type": "integer", + "format": "int32" + } + ], + "responses": { + "200": { + "description": "pet response", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/pet" + } + } + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/errorModel" + } + } + } + }, + "post": { + "description": "Creates a new pet in the store. Duplicates are allowed", + "operationId": "addPet", + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "pet", + "in": "body", + "description": "Pet to add to the store", + "required": true, + "schema": { + "$ref": "#/definitions/newPet" + } + } + ], + "responses": { + "200": { + "description": "pet response", + "schema": { + "$ref": "#/definitions/pet" + } + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/errorModel" + } + } + } + } + }, + "/pets/{id}": { + "get": { + "description": "Returns a user based on a single ID, if the user does not have access to the pet", + "operationId": "findPetById", + "produces": [ + "application/json", + "application/xml", + "text/xml", + "text/html" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of pet to fetch", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "pet response", + "schema": { + "$ref": "#/definitions/pet" + } + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/errorModel" + } + } + } + }, + "delete": { + "description": "deletes a single pet based on the ID supplied", + "operationId": "deletePet", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "ID of pet to delete", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "204": { + "description": "pet deleted" + }, + "default": { + "description": "unexpected error", + "schema": { + "$ref": "#/definitions/errorModel" + } + } + } + } + } + }, + "definitions": { + "pet": { + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "tag": { + "type": "string" + } + } + }, + "newPet": { + "required": [ + "name" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "tag": { + "type": "string" + } + } + }, + "errorModel": { + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + } + } + } + } +} +""" + +class ScopePrinter(object): + + def __init__(self, name): + self.start_time = None + self.name = name + + def __enter__(self): + self.start_time = datetime.now() + print("--- {} started".format(self.name)) + + def __exit__(self, type, value, traceback): + end_time = datetime.now() + diff = end_time - self.start_time + sec = diff.seconds + diff.microseconds / 1000000.0 + print("--- {} ended (duration: {} seconds)".format(self.name, sec)) + + +def run_builtin(): + for i in range(20000): + o = json.loads(swagger_json) + + +def run_orcus(): + for i in range(20000): + o = orcus.json.loads(swagger_json) + + +def main(): + with ScopePrinter("builtin"): + run_builtin() + + with ScopePrinter("orcus"): + run_orcus() + + +if __name__ == '__main__': + main() + diff --git a/test/python/test_csv.py b/test/python/test_csv.py new file mode 100755 index 0000000..c6f59e6 --- /dev/null +++ b/test/python/test_csv.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +######################################################################## +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +######################################################################## + +import unittest +import os +import os.path + +from orcus import csv + +import file_load_common as common + + +class DocLoader: + + def load(self, filepath, recalc): + with open(filepath, "r") as f: + return csv.read(f) + + def load_from_value(self, filepath): + with open(filepath, "r") as f: + content = f.read() + return csv.read(content) + + +class TestCase(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # base directory for ods test files. + basedir = os.path.join(os.path.dirname(__file__), "..", "csv") + cls.basedir = os.path.normpath(basedir) + + def test_import(self): + test_dirs = ("simple-numbers", "normal-quotes", "double-quotes", "quoted-with-delim") + for test_dir in test_dirs: + test_dir = os.path.join(self.basedir, test_dir) + common.run_test_dir(self, test_dir, DocLoader()) + + +if __name__ == '__main__': + unittest.main() diff --git a/test/python/test_csv_export.py b/test/python/test_csv_export.py new file mode 100755 index 0000000..9c6d6b4 --- /dev/null +++ b/test/python/test_csv_export.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 +######################################################################## +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +######################################################################## + +import unittest +import os +import os.path +import file_load_common as common +from orcus import FormatType, csv + + +class MockFileObject(object): + + def __init__(self): + self._content = None + + def write(self, bytes): + self._content = bytes + + def read(self): + return self._content + + @property + def bytes(self): + return self._content + + +class TestCase(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # base directory for xlsx test files. + basedir_xlsx = os.path.join(os.path.dirname(__file__), "..", "xlsx") + cls.basedir_xlsx = os.path.normpath(basedir_xlsx) + + @unittest.skipIf(os.environ.get("WITH_PYTHON_XLSX") is None, "python xlsx module is disabled") + def test_export_from_xlsx(self): + from orcus import xlsx + + test_dirs = ( + "raw-values-1", + "empty-shared-strings", + "named-expression", + ) + + for test_dir in test_dirs: + test_dir = os.path.join(self.basedir_xlsx, test_dir) + input_file = os.path.join(test_dir, "input.xlsx") + with open(input_file, "rb") as f: + doc = xlsx.read(f) + + # Build an expected document object from the check file. + check_file = os.path.join(test_dir, "check.txt") + check_doc = common.ExpectedDocument(check_file) + + # check_doc only contains non-empty sheets. + data_sheet_names = set() + for sheet in check_doc.sheets: + data_sheet_names.add(sheet.name) + + for sheet in doc.sheets: + mfo = MockFileObject() + sheet.write(mfo, format=FormatType.CSV) + + if mfo.bytes is None: + self.assertFalse(sheet.name in data_sheet_names) + continue + + # Load the csv stream into a document again. + doc_reload = csv.read(mfo) + self.assertEqual(1, len(doc_reload.sheets)) + for row1, row2 in zip(sheet.get_rows(), doc_reload.sheets[0].get_rows()): + # Only comare cell values, not cell types. + row1 = [c.value for c in row1] + row2 = [c.value for c in row2] + self.assertEqual(row1, row2) + + # Make sure we raise an exception on invalid format type. + # We currently only support exporting sheet as csv. + + invalid_formats = ( + "foo", + FormatType.GNUMERIC, + FormatType.JSON, + FormatType.ODS, + FormatType.XLSX, + FormatType.XLS_XML, + FormatType.XLS_XML, + FormatType.XML, + FormatType.YAML, + ) + + for invalid_format in invalid_formats: + mfo = MockFileObject() + with self.assertRaises(Exception): + doc.sheets[0].write(mfo, format=invalid_format) + + +if __name__ == '__main__': + unittest.main() + + diff --git a/test/python/test_gnumeric.py b/test/python/test_gnumeric.py new file mode 100755 index 0000000..f715776 --- /dev/null +++ b/test/python/test_gnumeric.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +######################################################################## +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +######################################################################## + +import unittest +import os +import os.path + +from orcus import gnumeric + +import file_load_common as common + + +class TestCase(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # base directory for xlsx test files. + basedir = os.path.join(os.path.dirname(__file__), "..", "gnumeric") + cls.basedir = os.path.normpath(basedir) + + def test_import(self): + + test_dirs = ( + "raw-values-1", + ) + + for test_dir in test_dirs: + test_dir = os.path.join(self.basedir, test_dir) + common.run_test_dir(self, test_dir, common.DocLoader(gnumeric)) + + +if __name__ == '__main__': + unittest.main() diff --git a/test/python/test_json.py b/test/python/test_json.py new file mode 100755 index 0000000..2fde74c --- /dev/null +++ b/test/python/test_json.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +######################################################################## +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +######################################################################## + +import unittest +from orcus import json + + +class JsonTest(unittest.TestCase): + + def test_loads(self): + s = '[1,2,3,"foo",[4,5,6], {"a": 12.3, "b": 34.4, "c": [true, false, null]}]' + o = json.loads(s) + self.assertTrue(isinstance(o, list)) + self.assertEqual(len(o), 6) + self.assertEqual(o[0], 1) + self.assertEqual(o[1], 2) + self.assertEqual(o[2], 3) + self.assertEqual(o[3], "foo") + + self.assertTrue(isinstance(o[4], list)) + self.assertEqual(o[4][0], 4) + self.assertEqual(o[4][1], 5) + self.assertEqual(o[4][2], 6) + + d = o[5] + self.assertTrue(isinstance(d, dict)) + self.assertEqual(len(d), 3) + self.assertEqual(d["a"], 12.3) + self.assertEqual(d["b"], 34.4) + + l = d["c"] + self.assertEqual(len(l), 3) + self.assertEqual(l[0], True) + self.assertEqual(l[1], False) + self.assertEqual(l[2], None) + + +if __name__ == '__main__': + unittest.main() diff --git a/test/python/test_module.py b/test/python/test_module.py new file mode 100755 index 0000000..2d6ca4b --- /dev/null +++ b/test/python/test_module.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +######################################################################## +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +######################################################################## + +import unittest +import orcus +import os.path +import json +import os +from pathlib import Path + + +class ModuleTest(unittest.TestCase): + + @classmethod + def setUpClass(cls): + top_builddir = Path(os.environ["BUILDDIR"]) + with open(top_builddir / "test" / "python" / "env.json", "r") as f: + cls.env = json.load(f) + + def test_version(self): + s = orcus.__version__ + expected = f"{self.env['version-major']}.{self.env['version-minor']}.{self.env['version-micro']}" + self.assertEqual(expected, s) + + def test_detect_format(self): + test_root_dir = os.path.join(os.path.dirname(__file__), "..") + + checks = ( + (("ods", "raw-values-1", "input.ods"), orcus.FormatType.ODS), + (("xlsx", "raw-values-1", "input.xlsx"), orcus.FormatType.XLSX), + (("xls-xml", "raw-values-1", "input.xml"), orcus.FormatType.XLS_XML), + (("gnumeric", "raw-values-1", "input.gnumeric"), orcus.FormatType.GNUMERIC), + ) + + for check in checks: + filepath = os.path.join(test_root_dir, *check[0]) + with open(filepath, "rb") as f: + # Pass the file object directly. + fmt = orcus.detect_format(f) + self.assertEqual(check[1], fmt) + + # Pass the bytes. + f.seek(0) + bytes = f.read() + fmt = orcus.detect_format(bytes) + self.assertEqual(check[1], fmt) + + +if __name__ == '__main__': + unittest.main() diff --git a/test/python/test_ods.py b/test/python/test_ods.py new file mode 100755 index 0000000..e4c0dc9 --- /dev/null +++ b/test/python/test_ods.py @@ -0,0 +1,164 @@ +#!/usr/bin/env python3 +######################################################################## +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +######################################################################## + +import unittest +from pathlib import Path + +from orcus import ods, FormulaTokenType, FormulaTokenOp + +import file_load_common as common + + +class TestCase(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # base directory for ods test files. + basedir = Path(__file__).parent / ".." / "ods" + cls.basedir = basedir.resolve() + + def test_import(self): + test_dirs = ("raw-values-1", "formula-1", "formula-2") + for test_dir in test_dirs: + test_dir = self.basedir / test_dir + common.run_test_dir(self, test_dir, common.DocLoader(ods)) + + def test_formula_tokens_1(self): + filepath = self.basedir / "formula-1" / "input.ods" + with open(filepath, "rb") as f: + doc = ods.read(f, recalc=False) + + self.assertEqual(len(doc.sheets), 1) + + # The 'Formula' sheet contains 4 formula cells in A1:A4. + sheet = doc.sheets[0] + self.assertEqual(sheet.name, "Formula") + rows = [row for row in sheet.get_rows()] + self.assertEqual(len(rows), 4) + + expected = ("1*2", "12/3", "AVERAGE($A1:A$2)", "SUM($A$1:$A$3)") + for row, expected_formula in zip(sheet.get_rows(), expected): + c = row[0] + self.assertEqual(c.formula, expected_formula) + + expected = ( + ( + ("1", FormulaTokenType.VALUE, FormulaTokenOp.VALUE), + ("*", FormulaTokenType.OPERATOR, FormulaTokenOp.MULTIPLY), + ("2", FormulaTokenType.VALUE, FormulaTokenOp.VALUE) + ), + ( + ("12", FormulaTokenType.VALUE, FormulaTokenOp.VALUE), + ("/", FormulaTokenType.OPERATOR, FormulaTokenOp.DIVIDE), + ("3", FormulaTokenType.VALUE, FormulaTokenOp.VALUE) + ), + ( + ("AVERAGE", FormulaTokenType.FUNCTION, FormulaTokenOp.FUNCTION), + ("(", FormulaTokenType.OPERATOR, FormulaTokenOp.OPEN), + ("$A1:A$2", FormulaTokenType.REFERENCE, FormulaTokenOp.RANGE_REF), + (")", FormulaTokenType.OPERATOR, FormulaTokenOp.CLOSE) + ), + ( + ("SUM", FormulaTokenType.FUNCTION, FormulaTokenOp.FUNCTION), + ("(", FormulaTokenType.OPERATOR, FormulaTokenOp.OPEN), + ("$A$1:$A$3", FormulaTokenType.REFERENCE, FormulaTokenOp.RANGE_REF), + (")", FormulaTokenType.OPERATOR, FormulaTokenOp.CLOSE) + ), + ) + + for row, expected_formula_tokens in zip(sheet.get_rows(), expected): + c = row[0] + iter = c.get_formula_tokens() + for token, expected_token in zip(iter, expected_formula_tokens): + self.assertEqual(str(token), expected_token[0]) + self.assertEqual(token.type, expected_token[1]) + self.assertEqual(token.op, expected_token[2]) + + def test_formula_tokens_2(self): + filepath = self.basedir / "formula-2" / "input.ods" + with open(filepath, "rb") as f: + doc = ods.read(f, recalc=False) + + self.assertEqual(len(doc.sheets), 1) + + expected = ( + ( + ("CONCATENATE", FormulaTokenType.FUNCTION, FormulaTokenOp.FUNCTION), + ("(", FormulaTokenType.OPERATOR, FormulaTokenOp.OPEN), + ("A2", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ('" "', FormulaTokenType.VALUE, FormulaTokenOp.STRING), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ("B2", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (")", FormulaTokenType.OPERATOR, FormulaTokenOp.CLOSE), + ), + ( + ("CONCATENATE", FormulaTokenType.FUNCTION, FormulaTokenOp.FUNCTION), + ("(", FormulaTokenType.OPERATOR, FormulaTokenOp.OPEN), + ("A3", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ('" "', FormulaTokenType.VALUE, FormulaTokenOp.STRING), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ("B3", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (")", FormulaTokenType.OPERATOR, FormulaTokenOp.CLOSE), + ), + ( + ("CONCATENATE", FormulaTokenType.FUNCTION, FormulaTokenOp.FUNCTION), + ("(", FormulaTokenType.OPERATOR, FormulaTokenOp.OPEN), + ("A4", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ('" "', FormulaTokenType.VALUE, FormulaTokenOp.STRING), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ("B4", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (")", FormulaTokenType.OPERATOR, FormulaTokenOp.CLOSE), + ), + ( + ("CONCATENATE", FormulaTokenType.FUNCTION, FormulaTokenOp.FUNCTION), + ("(", FormulaTokenType.OPERATOR, FormulaTokenOp.OPEN), + ("A5", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ('" "', FormulaTokenType.VALUE, FormulaTokenOp.STRING), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ("B5", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (")", FormulaTokenType.OPERATOR, FormulaTokenOp.CLOSE), + ), + ( + ("CONCATENATE", FormulaTokenType.FUNCTION, FormulaTokenOp.FUNCTION), + ("(", FormulaTokenType.OPERATOR, FormulaTokenOp.OPEN), + ("A6", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ('" "', FormulaTokenType.VALUE, FormulaTokenOp.STRING), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ("B6", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (")", FormulaTokenType.OPERATOR, FormulaTokenOp.CLOSE), + ), + ( + ("CONCATENATE", FormulaTokenType.FUNCTION, FormulaTokenOp.FUNCTION), + ("(", FormulaTokenType.OPERATOR, FormulaTokenOp.OPEN), + ("A7", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ('" "', FormulaTokenType.VALUE, FormulaTokenOp.STRING), + (",", FormulaTokenType.OPERATOR, FormulaTokenOp.SEP), + ("B7", FormulaTokenType.REFERENCE, FormulaTokenOp.SINGLE_REF), + (")", FormulaTokenType.OPERATOR, FormulaTokenOp.CLOSE), + ), + ) + + # Check cells in column C. + rows = [row for row in doc.sheets[0].get_rows()] + for row, expected_tokens in zip(rows[1:], expected): # skip the header row + tokens = row[2].get_formula_tokens() + for token, expected_token in zip(tokens, expected_tokens): + self.assertEqual(str(token), expected_token[0]) + self.assertEqual(token.type, expected_token[1]) + self.assertEqual(token.op, expected_token[2]) + + +if __name__ == '__main__': + unittest.main() diff --git a/test/python/test_xls_xml.py b/test/python/test_xls_xml.py new file mode 100755 index 0000000..b8ae918 --- /dev/null +++ b/test/python/test_xls_xml.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +######################################################################## +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +######################################################################## + +import unittest +import os +import os.path + +import orcus +from orcus import xls_xml + +import file_load_common as common + + +class TestCase(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # base directory for ods test files. + basedir = os.path.join(os.path.dirname(__file__), "..", "xls-xml") + cls.basedir = os.path.normpath(basedir) + + def test_import(self): + + test_dirs = ( + "basic", + "bold-and-italic", + "colored-text", + "empty-rows", + "merged-cells", + "named-expression", + "named-expression-sheet-local", + "raw-values-1", + ) + + for test_dir in test_dirs: + test_dir = os.path.join(self.basedir, test_dir) + common.run_test_dir(self, test_dir, common.DocLoader(xls_xml)) + + def test_skip_error_cells(self): + filepath = os.path.join(self.basedir, "formula-cells-parse-error", "input.xml") + with open(filepath, "rb") as f: + bytes = f.read() + + with self.assertRaises(RuntimeError): + doc = xls_xml.read(bytes) + + with self.assertRaises(RuntimeError): # TODO : should we raise a more specific error? + doc = xls_xml.read(bytes, error_policy="fail") + + # With the 'skip' policy, formula cells with erroneous formulas are + # imported as formula cells with error. + doc = xls_xml.read(bytes, error_policy="skip") + + # Make sure cells B2 and A5 are imported as formula cells. + rows = [row for row in doc.sheets[0].get_rows()] + c = rows[1][1] + self.assertEqual(c.type, orcus.CellType.FORMULA_WITH_ERROR) + self.assertFalse(c.formula) # formula string should be empty + # error formula tokens consist of: error token, string token (original formula), string token (error message). + formula_tokens = [t for t in c.get_formula_tokens()] + self.assertEqual(formula_tokens[0].type, orcus.FormulaTokenType.ERROR) + self.assertEqual(formula_tokens[1].type, orcus.FormulaTokenType.VALUE) + self.assertEqual(formula_tokens[2].type, orcus.FormulaTokenType.VALUE) + c = rows[4][0] + self.assertEqual(c.type, orcus.CellType.FORMULA_WITH_ERROR) + self.assertFalse(c.formula) # formula string should be empty + formula_tokens = [t for t in c.get_formula_tokens()] + self.assertEqual(formula_tokens[0].type, orcus.FormulaTokenType.ERROR) + self.assertEqual(formula_tokens[1].type, orcus.FormulaTokenType.VALUE) + self.assertEqual(formula_tokens[2].type, orcus.FormulaTokenType.VALUE) + + +if __name__ == '__main__': + unittest.main() diff --git a/test/python/test_xlsx.py b/test/python/test_xlsx.py new file mode 100755 index 0000000..1f691da --- /dev/null +++ b/test/python/test_xlsx.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +######################################################################## +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +######################################################################## + +import unittest +import os +import os.path +import mmap + +from orcus import xlsx + +import file_load_common as common + + +class TestCase(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # base directory for xlsx test files. + basedir = os.path.join(os.path.dirname(__file__), "..", "xlsx") + cls.basedir = os.path.normpath(basedir) + + def test_import(self): + + test_dirs = ( + "boolean-values", + "empty-shared-strings", + "formula-cells", + "formula-shared", + "named-expression", + "named-expression-sheet-local", + "raw-values-1", + ) + + for test_dir in test_dirs: + test_dir = os.path.join(self.basedir, test_dir) + common.run_test_dir(self, test_dir, common.DocLoader(xlsx)) + + def test_named_expression(self): + filepath = os.path.join(self.basedir, "named-expression", "input.xlsx") + with open(filepath, "rb") as f: + doc = xlsx.read(f) + + named_exps = doc.get_named_expressions() + self.assertEqual(named_exps.names(), {"MyRange", "MyRange2"}) + self.assertEqual(len(named_exps), 2) + + named_exps_dict = {x[0]: x[1] for x in named_exps} + exp = named_exps_dict["MyRange"] + self.assertEqual(exp.origin, "Sheet1!$A$1") + self.assertEqual(exp.formula, "$A$1:$A$5") + iter = exp.get_formula_tokens() + self.assertEqual(len(iter), 1) + tokens = [t for t in iter] + self.assertEqual(str(tokens[0]), "$A$1:$A$5") + + exp = named_exps_dict["MyRange2"] + self.assertEqual(exp.origin, "Sheet1!$A$1") + self.assertEqual(exp.formula, "$A$1:$B$5") + iter = exp.get_formula_tokens() + self.assertEqual(len(iter), 1) + tokens = [t for t in iter] + self.assertEqual(str(tokens[0]), "$A$1:$B$5") + + def test_named_expression_sheet_local(self): + filepath = os.path.join(self.basedir, "named-expression-sheet-local", "input.xlsx") + with open(filepath, "rb") as f: + doc = xlsx.read(f) + + sheet = doc.sheets[0] + named_exps = sheet.get_named_expressions() + self.assertEqual(len(named_exps), 1) + self.assertEqual(named_exps.names(), {"MyRange",}) + + named_exps_dict = {x[0]: x[1] for x in named_exps} + exp = named_exps_dict["MyRange"] + self.assertEqual(exp.formula, "$A$1:$B$3") + iter = exp.get_formula_tokens() + self.assertEqual(len(iter), 1) + tokens = [t for t in iter] + self.assertEqual(str(tokens[0]), "$A$1:$B$3") + + sheet = doc.sheets[1] + named_exps = sheet.get_named_expressions() + self.assertEqual(named_exps.names(), {"MyRange",}) + self.assertEqual(len(named_exps), 1) + + named_exps_dict = {x[0]: x[1] for x in named_exps} + exp = named_exps_dict["MyRange"] + self.assertEqual(exp.formula, "$A$4:$B$5") + iter = exp.get_formula_tokens() + self.assertEqual(len(iter), 1) + tokens = [t for t in iter] + self.assertEqual(str(tokens[0]), "$A$4:$B$5") + + +if __name__ == '__main__': + unittest.main() diff --git a/test/xls-xml/background-color/standard.xml b/test/xls-xml/background-color/standard.xml new file mode 100644 index 0000000..7ccfef8 --- /dev/null +++ b/test/xls-xml/background-color/standard.xml @@ -0,0 +1,150 @@ + + + + + Kohei Yoshida + Kohei Yoshida + 2013-10-21T23:43:59Z + 2013-10-21T23:51:49Z + 16.00 + + + + + + 9270 + 24915 + 480 + 120 + False + False + + + + + + + + + + + + + + + + + + + + Background Color + + + Dark Red + + + Red + + + Orange + + + Yellow + + + Light Green + + + Green + + + Light Blue + + + Blue + + + Dark Blue + + + Purple + +
+ + +
+