diff -Nru libcpanel-json-xs-perl-3.0210/.appveyor.yml libcpanel-json-xs-perl-3.0239/.appveyor.yml --- libcpanel-json-xs-perl-3.0210/.appveyor.yml 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/.appveyor.yml 2017-07-29 15:18:21.000000000 +0000 @@ -0,0 +1,48 @@ +version: 3.02.31.{build} +skip_tags: true +#os: MinGW +#os: Visual Studio 2015 +#os: Default Azure +#build: +# verbosity: minimal +# there's no 32bit installer +platform: + - x64 + - x86 +environment: + matrix: + - STRAWBERRY: 1 + - MSVC_CPERL: 1 +clone_depth: 1 +init: + - git config --global core.autocrlf input + # Disable popups as they hang the build as there is nobody to click on the OK button... + # Hanging the build is a lot less user friendly than reporting a build failure. + # + # Disable of system hard error popup + # See: https://msdn.microsoft.com/en-us/library/bb513638%28VS.85%29.aspx + - reg add "HKLM\SYSTEM\CurrentControlSet\Control\Windows" /f /v ErrorMode /d 2 + # Disable the following popup on program failure: + # | ** has stopped working ** | + # | Windows can check online for a solution to the problem| + # | - Check online for a solution and close the program | + # | - Close the program | + # See: https://msdn.microsoft.com/en-us/library/bb513638%28VS.85%29.aspx + - reg add "HKLM\Software\Microsoft\Windows\Windows Error Reporting" /f /v DontShowUI /d 1 + #- ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) + +install: + - cinst wget -y + - if "%PLATFORM%" == "x86" set BITS=32 + - if "%PLATFORM%" == "x64" set BITS=64 + #- if "%STRAWBERRY%" == "1" wget -q http://strawberryperl.com/download/5.24.1.1/strawberry-perl-5.24.1.1-%BITS%bit.msi + # waits for input + #- if "%STRAWBERRY%" == "1" msiexec /qn /norestart strawberry-perl-5.24.1.1-%BITS%bit.msi + - if "%STRAWBERRY%" == "1" cinst strawberryperl -i + - if "%MSVC_CPERL%" == "1" wget -q https://github.com/perl11/cperl/releases/download/cperl-5.26.0/cperl-5.26.0-win%BITS%.exe + - if "%MSVC_CPERL%" == "1" cperl-5.26.0-win%BITS%.exe -y -o"C:\" + +build: off + +test_script: + - 't\appveyor-test.bat' diff -Nru libcpanel-json-xs-perl-3.0210/bin/cpanel_json_xs libcpanel-json-xs-perl-3.0239/bin/cpanel_json_xs --- libcpanel-json-xs-perl-3.0210/bin/cpanel_json_xs 2015-12-03 11:56:31.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/bin/cpanel_json_xs 2016-03-02 21:29:15.000000000 +0000 @@ -50,7 +50,15 @@ =item eval - evaluate the given code as (non-utf-8) Perl, basically the reverse of "-t dump" -=item yaml - YAML (avoid at all costs, requires the YAML module :) +=item yaml - loose YAML (requires YAML) + +=item yaml-tiny - loose YAML (requires YAML::Tiny or CPAN::Meta::YAML) + +=item yaml-xs - strict YAML 1.2 (requires YAML::XS) + +=item yaml-syck - YAML (requires YAML::Syck) + +=item cbor - CBOR (via CBOR::XS) =item string - do not attempt to decode the file data @@ -89,7 +97,13 @@ =item clzf - Compress::LZF format -=item yaml - YAML +=item yaml - loose YAML (requires YAML) + +=item yaml-tiny - loose YAML (requires YAML::Tiny or CPAN::Meta::YAML) + +=item yaml-xs - strict YAML 1.2 (requires YAML::XS) + +=item yaml-syck - YAML (requires YAML::Syck) =item dump - Data::Dump @@ -145,9 +159,18 @@ Fetch the cpan-testers result summary C and pretty-print it. + cpanel_json_xs -f yaml-xs -t yaml-tiny MYMETA.yml + cpanel_json_xs -f yaml-tiny -t yaml-xs XSMETA.yml + cpanel_json_xs -f yaml -t yaml + =head1 AUTHOR Copyright (C) 2008 Marc Lehmann +Copyright (C) 2016 Cpanel Inc =cut @@ -205,6 +228,10 @@ "bencode" => sub { require Convert::Bencode; Convert::Bencode::bdecode ($_) }, "clzf" => sub { require Compress::LZF; Compress::LZF::sthaw ($_) }, "yaml" => sub { require YAML; YAML::Load ($_) }, + "yaml-tiny" => sub { require CPAN::Meta::YAML; CPAN::Meta::YAML::Load ($_) }, + "yaml-xs" => sub { require YAML::XS; YAML::XS::Load ($_) }, + "yaml-syck" => sub { require YAML::Syck; YAML::Syck::Load ($_) }, + "cbor" => sub { require CBOR::XS; CBOR::XS::decode_cbor ($_) }, "eval" => sub { my $v = eval "no strict; no warnings; no utf8;\n#line 1 \"input\"\n$_"; die "$@" if $@; $v }, ); @@ -230,6 +257,9 @@ "bencode" => sub { require Convert::Bencode; Convert::Bencode::bencode ($_) }, "clzf" => sub { require Compress::LZF; Compress::LZF::sfreeze_cr ($_) }, "yaml" => sub { require YAML; YAML::Dump ($_) }, + "yaml-tiny" => sub { require CPAN::Meta::YAML; CPAN::Meta::YAML::Dump ($_) }, + "yaml-xs" => sub { require YAML::XS; YAML::XS::Dump ($_) }, + "yaml-syck" => sub { require YAML::Syck; YAML::Syck::Dump ($_) }, "dumper" => sub { require Data::Dumper; #local $Data::Dumper::Purity = 1; # hopeless case diff -Nru libcpanel-json-xs-perl-3.0210/Changes libcpanel-json-xs-perl-3.0239/Changes --- libcpanel-json-xs-perl-3.0210/Changes 2015-12-03 11:56:31.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/Changes 2017-08-28 18:55:10.000000000 +0000 @@ -2,6 +2,204 @@ TODO: http://stevehanov.ca/blog/index.php?id=104 compression +3.0239 2017-08-28 (rurban) + - Fix compilation under windows. (#98 mauke) + +3.0238 2017-08-25 (rurban) + - Make printing of numbers on perl's earlier than 5.22 locale + insensitive, to produce a dot as decimal sep. (#96) + +3.0237 2017-07-28 (rurban) + - relax inf/nan tests as in t/op/infnan.t for windows. + we cannot know if msvcrt.dll or the new ucrt.dll is used. + try a list of valid values. + +3.0236 2017-07-27 (rurban) + - Stringify true again as "1", not as "true" due to popular demand. + (haarg #87) + +3.0235 2017-07-27 (rurban) + - Disallow duplicate keys by default, only allow them in relaxed + mode. (#75) + Analog to invalid unicode, which does error by default. + RFC 7159 section 4 says that "The names within an object should be unique." + So it's either i_ (undefined) or n_ (errors). + See http://seriot.ch/parsing_json.php#24 + This is different to the other JSON modules, which do have a different + interpretation of the spec. Use relaxed for backcompat if you want to + allow duplicate keys. + - De-fragilize t/96_mojo.t false test to "". It mostly is. + +3.0234 2017-07-27 (rurban) + - Fix and unify utf8 handling with 5.6.2 + and improve many utf8 tests. (pali #88) + - Add tests for boolean sv_yes and sv_no (pali #88) + - Check for correct module in %INC (Patrick Cronin #89) + - Fix appveyor smoke with latest strawberry, use $Config{make} (pali #91) + - Fix inf/nan for strawberry 5.26 + +3.0233 2017-05-01 (rurban) + - 5.6 test fixes, silence some cc warnings, + add coverage and release targets, fix appveyor + +3.0232 2017-04-30 (rurban) + - Fix for MSVC 2015/14.0 and newer with changed nan/inf. #85 + - Added appveyor CI + - Silence 32bit debugging format warning + - stabilize decode_hv hook (Coverity) + - ignore sv_utf8_downgrade errors (Coverity) + +3.0231 2017-03-29 (rurban) + - Fix need() overallocation (#84 Matthew Horsfall) and missing + need() calls. + +3.0230 2017-03-12 (rurban) + - Relax -Werror=declaration-after-statement for older gcc < 4.2 + +3.0229 2017-03-10 (rurban) + - fix minor gcc compilation warnings. + - Add some core compat. warnings for gcc/clang compat. compilers. + +3.0228 2017-03-08 (rurban) + - fix decode_prefix offset when the string was re-allocated. + rather return the offset not the pointer to the old start. (#82 PaulGWebster) + +3.0227 2017-02-13 (rurban) + - fix CLONE and END, broken with 3.0226 (#80 y). + These methods are usually called with arguments, which we ignore. + +3.0226 2017-02-11 (rurban) + - relax longdouble Gconvert test on ppc64le and aarch64-linux-ld, + with apparent HW quadmath without USE_QUADMATH (older perls). + (detected by dgolden) + - Fixed 2 uninit warnings in the XS + +3.0225 2016-11-23 (rurban) + - decode utf8 security fixes for perl 5.6. + added extra detection code for overflows and non-continuations. + This broke one 5.6 test with an overlong multi-byte character, + which previously worked accidently. + i.e. decode "\ud801\udc02\x{10204}" + - Added tests for ill-formed utf8 sequences from Encode. + +3.0224 2016-11-20 (rurban) + - fixes for g++-6, stricter -fpermissive and -Wc++11-compat + +3.0223 2016-11-16 (rurban) + - fixed decode bignum with a string prefix. #76, patch by GilmarSantosJr. + +3.0222 2016-10-30 (rurban) + - enable decode_bom for multibyte encodings UTF16 and UTF32. + encode internally to UTF-8. + +3.0221 2016-10-30 (rurban) + - fixed documentation of decode for unicode noncharacters. + added correct code to warn as in core. + no replacement, ignore warnings when in relaxed mode. + We used a wrong range also, but the wrong code from 3.02220 + was never executed because of an coding error. #73, #74 + - Fixed a perl 5.6 compilation regression from 3.0220. + - Improve decode_bom for multibyte encoding, but not yet enabled. + refcount error. + - Add 5.24 to travis tests + +3.0220 2016-10-28 (rurban) + - add comprehensive JSON decode spectests from + http://seriot.ch/parsing_json.html. #72 + - decode with BOM (UTF-8, UTF-16, or UTF-32). For now only UTF-8, + the others error. + - fixed detection of final \0 as illegal non-whitespace garbage. Fixes + spectest 'n_number_then_00'. #72 + - changed decode of unicode noncharacters between U+FFFD and U+10FFFF + to the recommended U+FFFD REPLACEMENT CHARACTER, when not in the binary + or relaxed mode. + - fail decode of non-unicode raw characters above U+10FFFF + when not in relaxed mode. + +3.0219 2016-10-26 (rurban) + - workaround mingw 4.0 modfl() bug [perl #125924] + +3.0218 2016-10-13 (rurban) + - no changes + +3.0217_06 2016-10-08 (rurban) + - fix DPPP_dummy_PL_parser warnings + +3.0217_05 2016-10-07 (rurban) + - fix t/gh70-asan.t for older perls < 5.14 + +3.0217_04 2016-10-07 (rurban) + - fix and document wrong strEQc usage in new(). #70 (ilmari) + +3.0217_03 2016-10-06 (rurban) + - expect_false() macro fix for MSVC + - fix av and hv length types: protect from security sensitive overflows, + add HVMAX_T and RITER_T + - add new "Hash key too large" error. perl5 silently truncates it, we + prefer errors, cperl 5.25.1 does error also. + - fix broken 5.8.1 SvPOK_only, i.e. assert_not_ROK + +3.0217_02 2016-10-04 (rurban) + - Use faster strEQc macros from cperl with constant strings. + - prefer memEQ for systems without memcmp, to use bcmp there. + - add more expect_false() to inf/nan branches. + +3.0217_01 2016-10-04 (rurban) + - Detect INF/NAN: ?/++/-?/--- on HP-UX (#56) + - New stringify_infnan(3) infnan_mode. Easy to detect platform + independent "inf", "-inf" or "nan" strings with double quotes, + with qnan, snan or negative nan unified to "nan". + +3.0217 2016-06-18 (rurban) + - Improve test t/20_unknown.t for older JSON::PP (Christopher J. Madsen) + +3.0216 2016-06-12 (rurban) + - Fix wrong test 117 for 5.10.0 (pghmcfc) + +3.0215 2016-06-03 (rurban) + - Fix wrong test 117 (pghmcfc) + - TODO the fragile mojo boolean interop test. + - Improve error message with class based method calls, + when forgetting ->new. #66 + +3.0214 2016-06-02 (rurban) + - Fix a off-by-one IV_MIN -> NV overflow in decode_json. #67 (xdg) + - Avoid encode_sv SEGV with -Dusequadmath #62 + Fix quadmath NV stringification. + +3.0213_02 2016-04-13 (rurban) + - Remove author-only Pod::Usage dependency (karenetheridge). + +3.0213_01 2016-04-11 (rurban) + - Preserve numbers as numbers, enforce an added .0 (dagolden). + Also note that 42+"bar" will result >=5.10 in numbers not integers, + => 42.0 + - 5.6 compilation fixes + - add yaml-tiny formats to cpanel_json_xs + +3.0213 2016-03-02 (rurban) + - silence JSON::PP::Boolean redefine warnings #60 + +3.0212 2016-02-27 (rurban) + - merge with JSON-XS-3.02: + - docs: add some INTEROP, stricter nonref RFC 7159 and + TAGGED VALUE SYNTAX AND STANDARD JSON EN/DECODERS paragraphs + - use 7159 nonref detection from JSON-XS: json_nonref() + - add some SAVESTACK_POS calls + - add -f cbor decode option (via CBOR::XS) to cpanel_json_xs + - fixed many spelling errors in the new docs + - fixed errors with threaded perls + - improved code quality in new merged code and fixed + new warnings found with gcc-5 + + - add -f and -t yaml-xs and yaml-syck options to cpanel_json_xs + +3.0211 2016-01-10 (rurban) + - relax Mojo interop test strictness ('' or 0 for false) + - t/z_pod.t as author test (Ether) + - t/z_kwalitee.t accepts now RELEASE_TESTING + - fix mingw64 inf/nan with uselongdouble, strawberry 5.22.1. #57 + 3.0210 2015-12-03 (rurban) - improve cpanel_json_xs: more input and output formats - improved various spellings and add test diff -Nru libcpanel-json-xs-perl-3.0210/debian/changelog libcpanel-json-xs-perl-3.0239/debian/changelog --- libcpanel-json-xs-perl-3.0210/debian/changelog 2015-12-28 03:37:48.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/debian/changelog 2021-03-21 19:53:58.000000000 +0000 @@ -1,16 +1,64 @@ -libcpanel-json-xs-perl (3.0210-1ubuntu1) xenial; urgency=medium +libcpanel-json-xs-perl (3.0239-1~16.04.sav0) xenial; urgency=medium - * Remove build-dependency on libmojolicious-perl; it's not worth pulling - all this into main just for a test. Add it to the dependencies of the - "smoke" autopkgtest instead. + * Backport to Xenial - -- Colin Watson Mon, 28 Dec 2015 03:37:42 +0000 + -- Rob Savoury Sun, 21 Mar 2021 12:53:58 -0700 -libcpanel-json-xs-perl (3.0210-1build1) xenial; urgency=medium +libcpanel-json-xs-perl (3.0239-1) unstable; urgency=medium - * No-change rebuild for Perl 5.22.1. + * Team upload. + * Import upstream version 3.0239. + * debian/control: declare compliance with Debian Policy 4.1.1. + * Update upstream contact in d/copyright and d/u/metadata. + * Add lintian override for long code line. - -- Mathieu Trudel-Lapierre Fri, 18 Dec 2015 21:21:43 -0500 + -- Nuno Carvalho Tue, 03 Oct 2017 11:12:24 +0100 + +libcpanel-json-xs-perl (3.0225-1) unstable; urgency=medium + + * Team upload. + * Import upstream version 3.0225. + + -- gregor herrmann Wed, 28 Dec 2016 20:40:23 +0100 + +libcpanel-json-xs-perl (3.0220-1) unstable; urgency=medium + + * Team upload. + * Import upstream version 3.0220. + * Update years of upstream copyright. + + -- gregor herrmann Sat, 29 Oct 2016 18:54:30 +0200 + +libcpanel-json-xs-perl (3.0217-1) unstable; urgency=medium + + * Team upload. + * debian/copyright: change Copyright-Format 1.0 URL to HTTPS. + * Import upstream version 3.0217. + * Add stanza for bin/cpanel_json_xs to debian/copyright. + * Add debian/duck-overrides for a website with a certificate problem. + + -- gregor herrmann Fri, 01 Jul 2016 17:19:19 +0200 + +libcpanel-json-xs-perl (3.0213-1) unstable; urgency=medium + + * Team upload. + + [ Salvatore Bonaccorso ] + * debian/control: Use HTTPS transport protocol for Vcs-Git URI + + [ gregor herrmann ] + * Import upstream version 3.0213. + * debian/rules: set bindnow linker flag. + * Declare compliance with Debian Policy 3.9.8. + + -- gregor herrmann Sat, 30 Apr 2016 11:44:35 +0200 + +libcpanel-json-xs-perl (3.0211-1) unstable; urgency=medium + + * Team upload. + * Import upstream version 3.0211. + + -- gregor herrmann Fri, 22 Jan 2016 22:00:44 +0100 libcpanel-json-xs-perl (3.0210-1) unstable; urgency=medium diff -Nru libcpanel-json-xs-perl-3.0210/debian/control libcpanel-json-xs-perl-3.0239/debian/control --- libcpanel-json-xs-perl-3.0210/debian/control 2015-12-28 03:37:41.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/debian/control 2017-10-03 10:12:24.000000000 +0000 @@ -1,6 +1,5 @@ Source: libcpanel-json-xs-perl -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Debian Perl Group +Maintainer: Debian Perl Group Uploaders: Florian Schlichting Section: perl Testsuite: autopkgtest-pkg-perl @@ -8,11 +7,12 @@ Build-Depends: debhelper (>= 9.20120312), libjson-perl, libjson-xs-perl, + libmojolicious-perl, libtest-leaktrace-perl, perl -Standards-Version: 3.9.6 +Standards-Version: 4.1.1 Vcs-Browser: https://anonscm.debian.org/cgit/pkg-perl/packages/libcpanel-json-xs-perl.git -Vcs-Git: git://anonscm.debian.org/pkg-perl/packages/libcpanel-json-xs-perl.git +Vcs-Git: https://anonscm.debian.org/git/pkg-perl/packages/libcpanel-json-xs-perl.git Homepage: https://metacpan.org/release/Cpanel-JSON-XS Package: libcpanel-json-xs-perl diff -Nru libcpanel-json-xs-perl-3.0210/debian/copyright libcpanel-json-xs-perl-3.0239/debian/copyright --- libcpanel-json-xs-perl-3.0210/debian/copyright 2015-12-05 20:09:32.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/debian/copyright 2017-10-03 10:12:24.000000000 +0000 @@ -1,6 +1,6 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Source: https://metacpan.org/release/Cpanel-JSON-XS -Upstream-Contact: Reini Urban +Upstream-Contact: Reini Urban Upstream-Name: Cpanel-JSON-XS Files: * @@ -9,15 +9,20 @@ 2015, Reini Urban License: Artistic or GPL-1+ +Files: bin/cpanel_json_xs +Copyright: 2008, Marc Lehmann + 2016, Cpanel Inc +License: Artistic or GPL-1+ + Files: ppport.h -Copyright: 2004-2010, Marcus Holland-Moritz +Copyright: 2004-2013, Marcus Holland-Moritz 2001, Paul Marquess (Version 2.x) 1999, Kenneth Albanowski (Version 1.x) - 2015, Lucas Kanashiro License: Artistic or GPL-1+ Files: debian/* Copyright: 2013, Florian Schlichting + 2015, Lucas Kanashiro License: Artistic or GPL-1+ License: Artistic diff -Nru libcpanel-json-xs-perl-3.0210/debian/duck-overrides libcpanel-json-xs-perl-3.0239/debian/duck-overrides --- libcpanel-json-xs-perl-3.0210/debian/duck-overrides 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/debian/duck-overrides 2017-10-03 10:12:24.000000000 +0000 @@ -0,0 +1,2 @@ +# invalid certificate +http://home.schmorp.de/ diff -Nru libcpanel-json-xs-perl-3.0210/debian/libcpanel-json-xs-perl.lintian-overrides libcpanel-json-xs-perl-3.0239/debian/libcpanel-json-xs-perl.lintian-overrides --- libcpanel-json-xs-perl-3.0210/debian/libcpanel-json-xs-perl.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/debian/libcpanel-json-xs-perl.lintian-overrides 2017-10-03 10:12:24.000000000 +0000 @@ -0,0 +1,2 @@ +# long code line +libcpanel-json-xs-perl: manpage-has-errors-from-man usr/share/man/man1/cpanel_json_xs.1p.gz 155: warning [p 1, 9.0i]: can't break line diff -Nru libcpanel-json-xs-perl-3.0210/debian/rules libcpanel-json-xs-perl-3.0239/debian/rules --- libcpanel-json-xs-perl-3.0210/debian/rules 2015-12-05 20:09:32.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/debian/rules 2017-10-03 10:12:24.000000000 +0000 @@ -3,6 +3,8 @@ PACKAGE = $(shell dh_listpackages) TMP = $(CURDIR)/debian/$(PACKAGE) +export DEB_BUILD_MAINT_OPTIONS = hardening=+bindnow + %: dh $@ diff -Nru libcpanel-json-xs-perl-3.0210/debian/tests/control libcpanel-json-xs-perl-3.0239/debian/tests/control --- libcpanel-json-xs-perl-3.0210/debian/tests/control 2015-12-28 03:37:40.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/debian/tests/control 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -Test-Command: /usr/share/pkg-perl-autopkgtest/runner build-deps -Depends: @, @builddeps@, pkg-perl-autopkgtest, libmojolicious-perl - -Test-Command: /usr/share/pkg-perl-autopkgtest/runner runtime-deps -Depends: @, pkg-perl-autopkgtest - -Test-Command: /usr/share/pkg-perl-autopkgtest/runner runtime-deps-and-recommends -Depends: @, pkg-perl-autopkgtest -Restrictions: needs-recommends - -Test-Command: /usr/share/pkg-perl-autopkgtest/runner heavy-deps -Depends: @, pkg-perl-autopkgtest, pkg-perl-autopkgtest-heavy diff -Nru libcpanel-json-xs-perl-3.0210/debian/upstream/metadata libcpanel-json-xs-perl-3.0239/debian/upstream/metadata --- libcpanel-json-xs-perl-3.0210/debian/upstream/metadata 2015-12-05 20:09:32.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/debian/upstream/metadata 2017-10-03 10:12:24.000000000 +0000 @@ -1,6 +1,6 @@ --- Archive: CPAN Bug-Database: https://github.com/rurban/Cpanel-JSON-XS/issues -Contact: Reini Urban +Contact: Reini Urban Name: Cpanel-JSON-XS Repository: https://github.com/rurban/Cpanel-JSON-XS diff -Nru libcpanel-json-xs-perl-3.0210/Makefile.PL libcpanel-json-xs-perl-3.0239/Makefile.PL --- libcpanel-json-xs-perl-3.0210/Makefile.PL 2015-11-26 22:28:38.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/Makefile.PL 2017-07-27 20:28:41.000000000 +0000 @@ -1,6 +1,17 @@ use 5.006002; use ExtUtils::MakeMaker; -use Config (); +use Config; + +my $define = ''; +# https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Warning-Options.html +if ($Config{gccversion} and $Config{gccversion} =~ /^(\d+\.\d+)\./) { + my $gccver = $1; + if ($gccver >= 4.3) { + $define = '-Wall -Werror=declaration-after-statement -Wextra -W'; + } elsif ($gccver >= 3.4) { + $define = '-Wall -Wdeclaration-after-statement -Wextra -W'; + } +} WriteMakefile( dist => { @@ -13,12 +24,12 @@ NAME => "Cpanel::JSON::XS", PREREQ_PM => { 'Pod::Text' => '2.08', - 'Pod::Usage' => '1.33', }, - LICENSE => 'perl', + DEFINE => $define, + LICENSE => 'perl', ($] >= 5.005 ? (ABSTRACT_FROM => 'XS.pm', - AUTHOR => 'Reini Urban ', + AUTHOR => 'Reini Urban ', # ORIGINAL_AUTHOR => 'Marc Lehmann ' ) : ()), ($ExtUtils::MakeMaker::VERSION gt '6.46' @@ -56,7 +67,6 @@ bugtracker => 'https://github.com/rurban/Cpanel-JSON-XS/issues', # Note: https://rt.cpan.org/Public/Dist/Display.html?Queue=Cpanel-JSON-XS is also observed repository => 'https://github.com/rurban/Cpanel-JSON-XS', - homepage => 'http://software.schmorp.de/pkg/JSON-XS.html', }, } ) : ()), @@ -83,5 +93,36 @@ " README : \$(VERSION_FROM) pod2text \$(VERSION_FROM) > README + +release : dist + git tag \$(VERSION) + cpan-upload \$(DISTVNAME).tar\$(SUFFIX) + git push + git push --tags + +const-c.inc const-xs.inc : Makefile.PL + +# versioned gcc needs overrides +GCOV = gcov +test_cover :: pure_all + \$(RM_RF) cover_db + +\$(PERLRUNINST) -S cover -test + +test_coveralls :: pure_all + +\$(PERLRUNINST) -S cover -test -report coveralls + +gcov : \$(BASEEXT).c.gcov \$(BASEEXT).gcov cover_db/\$(BASEEXT)-xs.html + +\$(BASEEXT).c.gcov \$(BASEEXT).xs.gcov : \$(BASEEXT).xs + \$(MAKE) CCFLAGS=\"\$(CCFLAGS) -fprofile-arcs -ftest-coverage\" LDDLFLAGS=\"\$(LDDLFLAGS) -fprofile-arcs -ftest-coverage\" + \$(GCOV) \$(BASEEXT).c \$(BASEEXT).xs + +cover_db/\$(BASEEXT)-xs.html : \$(BASEEXT).xs.gcov + PERL5OPT=-MDevel::Cover make test + -$^X -S gcov2perl \$(BASEEXT).c.gcov \$(BASEEXT).xs.gcov + $^X -S cover + +gprof : + \$(MAKE) CCFLAGS=\"\$(CCFLAGS) -pg\" LDDLFLAGS=\"\$(LDDLFLAGS) -pg\" " } diff -Nru libcpanel-json-xs-perl-3.0210/MANIFEST libcpanel-json-xs-perl-3.0239/MANIFEST --- libcpanel-json-xs-perl-3.0210/MANIFEST 2015-12-03 11:58:39.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/MANIFEST 2017-08-28 20:47:22.000000000 +0000 @@ -1,3 +1,4 @@ +.appveyor.yml .travis.yml README Changes @@ -38,11 +39,15 @@ t/23_array_ctx.t t/24_freeze_recursion.t t/25_boolean.t +t/26_duplicate.t +t/30_jsonspec.t +t/31_bom.t t/52_object.t t/53_readonly.t t/54_stringify.t t/55_modifiable.t t/96_interop.t +t/96_interop_pp.t t/96_mojo.t t/97_unshare_hek.t t/98_56only.t @@ -60,7 +65,345 @@ t/115_tie_ixhash.t t/116_incr_parse_fixed.t t/117_numbers.t +t/appveyor-test.bat +t/gh70-asan.t t/_unicode_handling.pm +t/test_parsing/i_number_neg_int_huge_exp.json +t/test_parsing/i_number_pos_double_huge_exp.json +t/test_parsing/i_object_key_lone_2nd_surrogate.json +t/test_parsing/i_string_1st_surrogate_but_2nd_missing.json +t/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json +t/test_parsing/i_string_UTF-16_invalid_lonely_surrogate.json +t/test_parsing/i_string_UTF-16_invalid_surrogate.json +t/test_parsing/i_string_UTF-8_invalid_sequence.json +t/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json +t/test_parsing/i_string_incomplete_surrogate_pair.json +t/test_parsing/i_string_incomplete_surrogates_escape_valid.json +t/test_parsing/i_string_inverted_surrogates_U+1D11E.json +t/test_parsing/i_string_lone_second_surrogate.json +t/test_parsing/i_string_not_in_unicode_range.json +t/test_parsing/i_string_truncated-utf-8.json +t/test_parsing/i_string_unicode_U+10FFFE_nonchar.json +t/test_parsing/i_string_unicode_U+1FFFE_nonchar.json +t/test_parsing/i_string_unicode_U+FDD0_nonchar.json +t/test_parsing/i_string_unicode_U+FFFE_nonchar.json +t/test_parsing/i_structure_500_nested_arrays.json +t/test_parsing/i_structure_UTF-8_BOM_empty_object.json +t/test_parsing/n_array_1_true_without_comma.json +t/test_parsing/n_array_a_invalid_utf8.json +t/test_parsing/n_array_colon_instead_of_comma.json +t/test_parsing/n_array_comma_after_close.json +t/test_parsing/n_array_comma_and_number.json +t/test_parsing/n_array_double_comma.json +t/test_parsing/n_array_double_extra_comma.json +t/test_parsing/n_array_extra_close.json +t/test_parsing/n_array_extra_comma.json +t/test_parsing/n_array_incomplete.json +t/test_parsing/n_array_incomplete_invalid_value.json +t/test_parsing/n_array_inner_array_no_comma.json +t/test_parsing/n_array_invalid_utf8.json +t/test_parsing/n_array_items_separated_by_semicolon.json +t/test_parsing/n_array_just_comma.json +t/test_parsing/n_array_just_minus.json +t/test_parsing/n_array_missing_value.json +t/test_parsing/n_array_newlines_unclosed.json +t/test_parsing/n_array_number_and_comma.json +t/test_parsing/n_array_number_and_several_commas.json +t/test_parsing/n_array_spaces_vertical_tab_formfeed.json +t/test_parsing/n_array_star_inside.json +t/test_parsing/n_array_unclosed.json +t/test_parsing/n_array_unclosed_trailing_comma.json +t/test_parsing/n_array_unclosed_with_new_lines.json +t/test_parsing/n_array_unclosed_with_object_inside.json +t/test_parsing/n_incomplete_false.json +t/test_parsing/n_incomplete_null.json +t/test_parsing/n_incomplete_true.json +t/test_parsing/n_number_++.json +t/test_parsing/n_number_+1.json +t/test_parsing/n_number_+Inf.json +t/test_parsing/n_number_-01.json +t/test_parsing/n_number_-1.0..json +t/test_parsing/n_number_-2..json +t/test_parsing/n_number_-NaN.json +t/test_parsing/n_number_.-1.json +t/test_parsing/n_number_.2e-3.json +t/test_parsing/n_number_0.1.2.json +t/test_parsing/n_number_0.3e+.json +t/test_parsing/n_number_0.3e.json +t/test_parsing/n_number_0.e1.json +t/test_parsing/n_number_0_capital_E+.json +t/test_parsing/n_number_0_capital_E.json +t/test_parsing/n_number_0e+.json +t/test_parsing/n_number_0e.json +t/test_parsing/n_number_1.0e+.json +t/test_parsing/n_number_1.0e-.json +t/test_parsing/n_number_1.0e.json +t/test_parsing/n_number_1_000.json +t/test_parsing/n_number_1eE2.json +t/test_parsing/n_number_2.e+3.json +t/test_parsing/n_number_2.e-3.json +t/test_parsing/n_number_2.e3.json +t/test_parsing/n_number_9.e+.json +t/test_parsing/n_number_Inf.json +t/test_parsing/n_number_NaN.json +t/test_parsing/n_number_U+FF11_fullwidth_digit_one.json +t/test_parsing/n_number_expression.json +t/test_parsing/n_number_hex_1_digit.json +t/test_parsing/n_number_hex_2_digits.json +t/test_parsing/n_number_infinity.json +t/test_parsing/n_number_invalid+-.json +t/test_parsing/n_number_invalid-negative-real.json +t/test_parsing/n_number_invalid-utf-8-in-bigger-int.json +t/test_parsing/n_number_invalid-utf-8-in-exponent.json +t/test_parsing/n_number_invalid-utf-8-in-int.json +t/test_parsing/n_number_minus_infinity.json +t/test_parsing/n_number_minus_sign_with_trailing_garbage.json +t/test_parsing/n_number_minus_space_1.json +t/test_parsing/n_number_neg_int_starting_with_zero.json +t/test_parsing/n_number_neg_real_without_int_part.json +t/test_parsing/n_number_neg_with_garbage_at_end.json +t/test_parsing/n_number_real_garbage_after_e.json +t/test_parsing/n_number_real_with_invalid_utf8_after_e.json +t/test_parsing/n_number_real_without_fractional_part.json +t/test_parsing/n_number_starting_with_dot.json +t/test_parsing/n_number_then_00.json +t/test_parsing/n_number_with_alpha.json +t/test_parsing/n_number_with_alpha_char.json +t/test_parsing/n_number_with_leading_zero.json +t/test_parsing/n_object_bad_value.json +t/test_parsing/n_object_bracket_key.json +t/test_parsing/n_object_comma_instead_of_colon.json +t/test_parsing/n_object_double_colon.json +t/test_parsing/n_object_emoji.json +t/test_parsing/n_object_garbage_at_end.json +t/test_parsing/n_object_key_with_single_quotes.json +t/test_parsing/n_object_missing_colon.json +t/test_parsing/n_object_missing_key.json +t/test_parsing/n_object_missing_semicolon.json +t/test_parsing/n_object_missing_value.json +t/test_parsing/n_object_no-colon.json +t/test_parsing/n_object_non_string_key.json +t/test_parsing/n_object_non_string_key_but_huge_number_instead.json +t/test_parsing/n_object_pi_in_key_and_trailing_comma.json +t/test_parsing/n_object_repeated_null_null.json +t/test_parsing/n_object_several_trailing_commas.json +t/test_parsing/n_object_single_quote.json +t/test_parsing/n_object_trailing_comma.json +t/test_parsing/n_object_trailing_comment.json +t/test_parsing/n_object_trailing_comment_open.json +t/test_parsing/n_object_trailing_comment_slash_open.json +t/test_parsing/n_object_trailing_comment_slash_open_incomplete.json +t/test_parsing/n_object_two_commas_in_a_row.json +t/test_parsing/n_object_unquoted_key.json +t/test_parsing/n_object_unterminated-value.json +t/test_parsing/n_object_with_single_string.json +t/test_parsing/n_object_with_trailing_garbage.json +t/test_parsing/n_single_space.json +t/test_parsing/n_string_1_surrogate_then_escape_u.json +t/test_parsing/n_string_1_surrogate_then_escape_u1.json +t/test_parsing/n_string_1_surrogate_then_escape_u1x.json +t/test_parsing/n_string_1_surrogate_then_escape.json +t/test_parsing/n_string_UTF-16_incomplete_surrogate.json +t/test_parsing/n_string_UTF8_surrogate_U+D800.json +t/test_parsing/n_string_accentuated_char_no_quotes.json +t/test_parsing/n_string_backslash_00.json +t/test_parsing/n_string_escape_x.json +t/test_parsing/n_string_escaped_backslash_bad.json +t/test_parsing/n_string_escaped_ctrl_char_tab.json +t/test_parsing/n_string_escaped_emoji.json +t/test_parsing/n_string_incomplete_escape.json +t/test_parsing/n_string_incomplete_escaped_character.json +t/test_parsing/n_string_incomplete_surrogate_escape_invalid.json +t/test_parsing/n_string_invalid-utf-8-in-escape.json +t/test_parsing/n_string_invalid_backslash_esc.json +t/test_parsing/n_string_invalid_unicode_escape.json +t/test_parsing/n_string_invalid_utf-8.json +t/test_parsing/n_string_invalid_utf8_after_escape.json +t/test_parsing/n_string_iso_latin_1.json +t/test_parsing/n_string_leading_uescaped_thinspace.json +t/test_parsing/n_string_lone_utf8_continuation_byte.json +t/test_parsing/n_string_no_quotes_with_bad_escape.json +t/test_parsing/n_string_overlong_sequence_2_bytes.json +t/test_parsing/n_string_overlong_sequence_6_bytes.json +t/test_parsing/n_string_overlong_sequence_6_bytes_null.json +t/test_parsing/n_string_single_doublequote.json +t/test_parsing/n_string_single_quote.json +t/test_parsing/n_string_single_string_no_double_quotes.json +t/test_parsing/n_string_start_escape_unclosed.json +t/test_parsing/n_string_unescaped_crtl_char.json +t/test_parsing/n_string_unescaped_newline.json +t/test_parsing/n_string_unescaped_tab.json +t/test_parsing/n_string_unicode_CapitalU.json +t/test_parsing/n_string_with_trailing_garbage.json +t/test_parsing/n_structure_100000_opening_arrays.json +t/test_parsing/n_structure_lt.gt.json +t/test_parsing/n_structure_ltnullgt.json +t/test_parsing/n_structure_U+2060_word_joined.json +t/test_parsing/n_structure_UTF8_BOM_no_data.json +t/test_parsing/n_structure_array_trailing_garbage.json +t/test_parsing/n_structure_array_with_extra_array_close.json +t/test_parsing/n_structure_array_with_unclosed_string.json +t/test_parsing/n_structure_ascii-unicode-identifier.json +t/test_parsing/n_structure_capitalized_True.json +t/test_parsing/n_structure_close_unopened_array.json +t/test_parsing/n_structure_comma_instead_of_closing_brace.json +t/test_parsing/n_structure_double_array.json +t/test_parsing/n_structure_end_array.json +t/test_parsing/n_structure_incomplete_UTF8_BOM.json +t/test_parsing/n_structure_lone-invalid-utf-8.json +t/test_parsing/n_structure_lone-open-bracket.json +t/test_parsing/n_structure_no_data.json +t/test_parsing/n_structure_null-byte-outside-string.json +t/test_parsing/n_structure_number_with_trailing_garbage.json +t/test_parsing/n_structure_object_followed_by_closing_object.json +t/test_parsing/n_structure_object_unclosed_no_value.json +t/test_parsing/n_structure_object_with_comment.json +t/test_parsing/n_structure_object_with_trailing_garbage.json +t/test_parsing/n_structure_open_array_apostrophe.json +t/test_parsing/n_structure_open_array_comma.json +t/test_parsing/n_structure_open_array_object.json +t/test_parsing/n_structure_open_array_open_object.json +t/test_parsing/n_structure_open_array_open_string.json +t/test_parsing/n_structure_open_array_string.json +t/test_parsing/n_structure_open_object.json +t/test_parsing/n_structure_open_object_close_array.json +t/test_parsing/n_structure_open_object_comma.json +t/test_parsing/n_structure_open_object_open_array.json +t/test_parsing/n_structure_open_object_open_string.json +t/test_parsing/n_structure_open_object_string_with_apostrophes.json +t/test_parsing/n_structure_open_open.json +t/test_parsing/n_structure_single_point.json +t/test_parsing/n_structure_single_star.json +t/test_parsing/n_structure_trailing_#.json +t/test_parsing/n_structure_uescaped_LF_before_string.json +t/test_parsing/n_structure_unclosed_array.json +t/test_parsing/n_structure_unclosed_array_partial_null.json +t/test_parsing/n_structure_unclosed_array_unfinished_false.json +t/test_parsing/n_structure_unclosed_array_unfinished_true.json +t/test_parsing/n_structure_unclosed_object.json +t/test_parsing/n_structure_unicode-identifier.json +t/test_parsing/n_structure_whitespace_U+2060_word_joiner.json +t/test_parsing/n_structure_whitespace_formfeed.json +t/test_parsing/y_array_arraysWithSpaces.json +t/test_parsing/y_array_empty-string.json +t/test_parsing/y_array_empty.json +t/test_parsing/y_array_ending_with_newline.json +t/test_parsing/y_array_false.json +t/test_parsing/y_array_heterogeneous.json +t/test_parsing/y_array_null.json +t/test_parsing/y_array_with_1_and_newline.json +t/test_parsing/y_array_with_leading_space.json +t/test_parsing/y_array_with_several_null.json +t/test_parsing/y_array_with_trailing_space.json +t/test_parsing/y_number.json +t/test_parsing/y_number_0e+1.json +t/test_parsing/y_number_0e1.json +t/test_parsing/y_number_after_space.json +t/test_parsing/y_number_double_close_to_zero.json +t/test_parsing/y_number_double_huge_neg_exp.json +t/test_parsing/y_number_huge_exp.json +t/test_parsing/y_number_int_with_exp.json +t/test_parsing/y_number_minus_zero.json +t/test_parsing/y_number_negative_int.json +t/test_parsing/y_number_negative_one.json +t/test_parsing/y_number_negative_zero.json +t/test_parsing/y_number_real_capital_e.json +t/test_parsing/y_number_real_capital_e_neg_exp.json +t/test_parsing/y_number_real_capital_e_pos_exp.json +t/test_parsing/y_number_real_exponent.json +t/test_parsing/y_number_real_fraction_exponent.json +t/test_parsing/y_number_real_neg_exp.json +t/test_parsing/y_number_real_neg_overflow.json +t/test_parsing/y_number_real_pos_exponent.json +t/test_parsing/y_number_real_pos_overflow.json +t/test_parsing/y_number_real_underflow.json +t/test_parsing/y_number_simple_int.json +t/test_parsing/y_number_simple_real.json +t/test_parsing/y_number_too_big_neg_int.json +t/test_parsing/y_number_too_big_pos_int.json +t/test_parsing/y_number_very_big_negative_int.json +t/test_parsing/y_object.json +t/test_parsing/y_object_basic.json +t/test_parsing/y_object_duplicated_key.json +t/test_parsing/y_object_duplicated_key_and_value.json +t/test_parsing/y_object_empty.json +t/test_parsing/y_object_empty_key.json +t/test_parsing/y_object_escaped_null_in_key.json +t/test_parsing/y_object_extreme_numbers.json +t/test_parsing/y_object_long_strings.json +t/test_parsing/y_object_simple.json +t/test_parsing/y_object_string_unicode.json +t/test_parsing/y_object_with_newlines.json +t/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json +t/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json +t/test_parsing/y_string_accepted_surrogate_pair.json +t/test_parsing/y_string_accepted_surrogate_pairs.json +t/test_parsing/y_string_allowed_escapes.json +t/test_parsing/y_string_backslash_and_u_escaped_zero.json +t/test_parsing/y_string_backslash_doublequotes.json +t/test_parsing/y_string_comments.json +t/test_parsing/y_string_double_escape_a.json +t/test_parsing/y_string_double_escape_n.json +t/test_parsing/y_string_escaped_control_character.json +t/test_parsing/y_string_escaped_noncharacter.json +t/test_parsing/y_string_in_array.json +t/test_parsing/y_string_in_array_with_leading_space.json +t/test_parsing/y_string_last_surrogates_1_and_2.json +t/test_parsing/y_string_newline_uescaped.json +t/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json +t/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json +t/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json +t/test_parsing/y_string_null_escape.json +t/test_parsing/y_string_one-byte-utf-8.json +t/test_parsing/y_string_pi.json +t/test_parsing/y_string_simple_ascii.json +t/test_parsing/y_string_space.json +t/test_parsing/y_string_three-byte-utf-8.json +t/test_parsing/y_string_two-byte-utf-8.json +t/test_parsing/y_string_u+2028_line_sep.json +t/test_parsing/y_string_u+2029_par_sep.json +t/test_parsing/y_string_uEscape.json +t/test_parsing/y_string_unescaped_char_delete.json +t/test_parsing/y_string_unicode.json +t/test_parsing/y_string_unicodeEscapedBackslash.json +t/test_parsing/y_string_unicode_2.json +t/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json +t/test_parsing/y_string_unicode_U+2064_invisible_plus.json +t/test_parsing/y_string_unicode_escaped_double_quote.json +t/test_parsing/y_string_utf16.json +t/test_parsing/y_string_utf16be.json +t/test_parsing/y_string_utf32.json +t/test_parsing/y_string_utf32be.json +t/test_parsing/y_string_utf8.json +t/test_parsing/y_string_with_del_character.json +t/test_parsing/y_structure_lonely_false.json +t/test_parsing/y_structure_lonely_int.json +t/test_parsing/y_structure_lonely_negative_real.json +t/test_parsing/y_structure_lonely_null.json +t/test_parsing/y_structure_lonely_string.json +t/test_parsing/y_structure_lonely_true.json +t/test_parsing/y_structure_string_empty.json +t/test_parsing/y_structure_trailing_newline.json +t/test_parsing/y_structure_true_in_array.json +t/test_parsing/y_structure_whitespace_array.json +t/test_transform/number_1.0.json +t/test_transform/number_1.000000000000000005.json +t/test_transform/number_1000000000000000.json +t/test_transform/number_10000000000000000999.json +t/test_transform/number_1e-999.json +t/test_transform/number_1e6.json +t/test_transform/object_key_nfc_nfd.json +t/test_transform/object_key_nfd_nfc.json +t/test_transform/object_same_key_different_values.json +t/test_transform/object_same_key_same_value.json +t/test_transform/object_same_key_unclear_values.json +t/test_transform/string_1_escaped_invalid_codepoint.json +t/test_transform/string_1_invalid_codepoint.json +t/test_transform/string_2_escaped_invalid_codepoints.json +t/test_transform/string_2_invalid_codepoints.json +t/test_transform/string_3_escaped_invalid_codepoints.json +t/test_transform/string_3_invalid_codepoints.json +t/test_transform/string_with_escaped_NULL.json t/zero-mojibake.t t/z_kwalitee.t t/z_leaktrace.t diff -Nru libcpanel-json-xs-perl-3.0210/META.json libcpanel-json-xs-perl-3.0239/META.json --- libcpanel-json-xs-perl-3.0210/META.json 2015-12-03 11:58:39.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/META.json 2017-08-28 20:47:22.000000000 +0000 @@ -1,16 +1,16 @@ { "abstract" : "cPanel fork of JSON::XS, fast and correct serializing", "author" : [ - "Reini Urban " + "Reini Urban " ], "dynamic_config" : 1, - "generated_by" : "ExtUtils::MakeMaker version 7.1, CPAN::Meta::Converter version 2.150005", + "generated_by" : "ExtUtils::MakeMaker version 7.3, CPAN::Meta::Converter version 2.150010", "license" : [ "perl_5" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", - "version" : "2" + "version" : 2 }, "name" : "Cpanel-JSON-XS", "no_index" : { @@ -32,8 +32,7 @@ }, "runtime" : { "requires" : { - "Pod::Text" : "2.08", - "Pod::Usage" : "1.33" + "Pod::Text" : "2.08" } } }, @@ -42,7 +41,6 @@ "bugtracker" : { "web" : "https://github.com/rurban/Cpanel-JSON-XS/issues" }, - "homepage" : "http://software.schmorp.de/pkg/JSON-XS.html", "license" : [ "http://dev.perl.org/licenses/" ], @@ -50,6 +48,6 @@ "url" : "https://github.com/rurban/Cpanel-JSON-XS" } }, - "version" : "3.0210", - "x_serialization_backend" : "JSON::PP version 2.27300" + "version" : "3.0239", + "x_serialization_backend" : "JSON::PP version 2.94" } diff -Nru libcpanel-json-xs-perl-3.0210/META.yml libcpanel-json-xs-perl-3.0239/META.yml --- libcpanel-json-xs-perl-3.0210/META.yml 2015-12-03 11:58:39.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/META.yml 2017-08-28 20:47:22.000000000 +0000 @@ -1,13 +1,13 @@ --- abstract: 'cPanel fork of JSON::XS, fast and correct serializing' author: - - 'Reini Urban ' + - 'Reini Urban ' build_requires: ExtUtils::MakeMaker: '0' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 1 -generated_by: 'ExtUtils::MakeMaker version 7.1, CPAN::Meta::Converter version 2.150005' +generated_by: 'ExtUtils::MakeMaker version 7.3, CPAN::Meta::Converter version 2.150010' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -19,11 +19,9 @@ - inc requires: Pod::Text: '2.08' - Pod::Usage: '1.33' resources: bugtracker: https://github.com/rurban/Cpanel-JSON-XS/issues - homepage: http://software.schmorp.de/pkg/JSON-XS.html license: http://dev.perl.org/licenses/ repository: https://github.com/rurban/Cpanel-JSON-XS -version: '3.0210' -x_serialization_backend: 'CPAN::Meta::YAML version 0.016' +version: '3.0239' +x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff -Nru libcpanel-json-xs-perl-3.0210/ppport.h libcpanel-json-xs-perl-3.0239/ppport.h --- libcpanel-json-xs-perl-3.0210/ppport.h 2015-01-31 19:57:23.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/ppport.h 2017-07-27 20:15:44.000000000 +0000 @@ -4,9 +4,9 @@ /* ---------------------------------------------------------------------- - ppport.h -- Perl/Pollution/Portability Version 3.20 + ppport.h -- Perl/Pollution/Portability Version 3.35_02 - Automatically created by Devel::PPPort running under perl 5.014002. + Automatically created by Devel::PPPort running under perl 5.026000. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. @@ -21,7 +21,7 @@ =head1 NAME -ppport.h - Perl/Pollution/Portability version 3.20 +ppport.h - Perl/Pollution/Portability version 3.35_02 =head1 SYNOPSIS @@ -56,7 +56,7 @@ =head1 COMPATIBILITY This version of F is designed to support operation with Perl -installations back to 5.003, and has been tested up to 5.11.5. +installations back to 5.003, and has been tested up to 5.20. =head1 OPTIONS @@ -79,7 +79,7 @@ If this option is given, a copy of each file will be saved with the given suffix that contains the suggested changes. This does not require any external programs. Note that this does not -automagially add a dot between the original filename and the +automagically add a dot between the original filename and the suffix. If you want the dot, you have to include it in the option argument. @@ -219,13 +219,17 @@ ----------------------------------------------------------------------------------------- PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL + SvRX() NEED_SvRX NEED_SvRX_GLOBAL + caller_cx() NEED_caller_cx NEED_caller_cx_GLOBAL eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL grok_number() NEED_grok_number NEED_grok_number_GLOBAL grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL + gv_fetchpvn_flags() NEED_gv_fetchpvn_flags NEED_gv_fetchpvn_flags_GLOBAL load_module() NEED_load_module NEED_load_module_GLOBAL + mg_findext() NEED_mg_findext NEED_mg_findext_GLOBAL my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL @@ -245,6 +249,7 @@ sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL + sv_unmagicext() NEED_sv_unmagicext NEED_sv_unmagicext_GLOBAL vload_module() NEED_vload_module NEED_vload_module_GLOBAL vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL warner() NEED_warner NEED_warner_GLOBAL @@ -325,7 +330,7 @@ If F was generated using the latest version of C and is causing failure of this module, please -file a bug report using the CPAN Request Tracker at L. +file a bug report here: L Please include the following information: @@ -358,7 +363,7 @@ =head1 COPYRIGHT -Version 3.x, Copyright (c) 2004-2010, Marcus Holland-Moritz. +Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. @@ -378,7 +383,7 @@ # Disable broken TRIE-optimization BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 } -my $VERSION = 3.20; +my $VERSION = 3.35_02; my %opt = ( quiet => 0, @@ -445,11 +450,12 @@ (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), } ) : die "invalid spec: $_" } qw( +ASCII_TO_NEED||5.007001|n AvFILLp|5.004050||p AvFILL||| -BhkDISABLE||5.014000| -BhkENABLE||5.014000| -BhkENTRY_set||5.014000| +BhkDISABLE||5.024000| +BhkENABLE||5.024000| +BhkENTRY_set||5.024000| BhkENTRY||| BhkFLAGS||| CALL_BLOCK_HOOKS||| @@ -457,6 +463,8 @@ CPERLscope|5.005000||p CX_CURPAD_SAVE||| CX_CURPAD_SV||| +C_ARRAY_END|5.013002||p +C_ARRAY_LENGTH|5.008001||p CopFILEAV|5.006000||p CopFILEGV_set|5.006000||p CopFILEGV|5.006000||p @@ -468,13 +476,15 @@ CopSTASH_eq|5.006000||p CopSTASH_set|5.006000||p CopSTASH|5.006000||p -CopyD|5.009002||p +CopyD|5.009002|5.004050|p Copy||| -CvPADLIST||| +CvPADLIST||5.008001| CvSTASH||| CvWEAKOUTSIDE||| +DECLARATION_FOR_LC_NUMERIC_MANIPULATION||5.021010|n DEFSV_set|5.010001||p DEFSV|5.004050||p +DO_UTF8||5.006000| END_EXTERN_C|5.005000||p ENTER||| ERRSV|5.004050||p @@ -493,21 +503,27 @@ G_SCALAR||| G_VOID||5.004000| GetVars||| -GvSVn|5.009003||p +GvAV||| +GvCV||| +GvHV||| GvSV||| Gv_AMupdate||5.011000| -HEf_SVKEY||5.004000| -HeHASH||5.004000| -HeKEY||5.004000| -HeKLEN||5.004000| +HEf_SVKEY|5.003070||p +HeHASH||5.003070| +HeKEY||5.003070| +HeKLEN||5.003070| HePV||5.004000| -HeSVKEY_force||5.004000| +HeSVKEY_force||5.003070| HeSVKEY_set||5.004000| -HeSVKEY||5.004000| -HeUTF8||5.010001| -HeVAL||5.004000| -HvENAME||5.013007| +HeSVKEY||5.003070| +HeUTF8|5.010001|5.008000|p +HeVAL||5.003070| +HvENAMELEN|5.015004||p +HvENAMEUTF8|5.015004||p +HvENAME|5.013007||p HvNAMELEN_get|5.009003||p +HvNAMELEN|5.015004||p +HvNAMEUTF8|5.015004||p HvNAME_get|5.009003||p HvNAME||| INT2PTR|5.006000||p @@ -528,12 +544,15 @@ LINKLIST||5.013006| LVRET||| MARK||| -MULTICALL||5.014000| +MULTICALL||5.024000| +MUTABLE_PTR|5.010001||p +MUTABLE_SV|5.010001||p MY_CXT_CLONE|5.009002||p MY_CXT_INIT|5.007003||p MY_CXT|5.007003||p -MoveD|5.009002||p +MoveD|5.009002|5.004050|p Move||| +NATIVE_TO_NEED||5.007001|n NOOP|5.005000||p NUM2PTR|5.006000||p NVTYPE|5.006000||p @@ -551,7 +570,15 @@ OP_CLASS||5.013007| OP_DESC||5.007003| OP_NAME||5.007003| +OP_TYPE_IS_OR_WAS||5.019010| +OP_TYPE_IS||5.019007| ORIGMARK||| +OpHAS_SIBLING|5.021007||p +OpLASTSIB_set|5.021011||p +OpMAYBESIB_set|5.021011||p +OpMORESIB_set|5.021011||p +OpSIBLING_set||5.021007| +OpSIBLING|5.021007||p PAD_BASE_SV||| PAD_CLONE_VARS||| PAD_COMPNAME_FLAGS||| @@ -560,7 +587,6 @@ PAD_COMPNAME_OURSTASH||| PAD_COMPNAME_PV||| PAD_COMPNAME_TYPE||| -PAD_DUP||| PAD_RESTORE_LOCAL||| PAD_SAVE_LOCAL||| PAD_SAVE_SETNULLPAD||| @@ -572,13 +598,13 @@ PERLIO_FUNCS_CAST|5.009003||p PERLIO_FUNCS_DECL|5.009003||p PERL_ABS|5.008001||p -PERL_BCDVERSION|5.014000||p +PERL_BCDVERSION|5.024000||p PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p -PERL_HASH|5.004000||p -PERL_INT_MAX|5.004000||p -PERL_INT_MIN|5.004000||p -PERL_LONG_MAX|5.004000||p -PERL_LONG_MIN|5.004000||p +PERL_HASH|5.003070||p +PERL_INT_MAX|5.003070||p +PERL_INT_MIN|5.003070||p +PERL_LONG_MAX|5.003070||p +PERL_LONG_MIN|5.003070||p PERL_MAGIC_arylen|5.007002||p PERL_MAGIC_backref|5.007002||p PERL_MAGIC_bm|5.007002||p @@ -590,14 +616,14 @@ PERL_MAGIC_env|5.007002||p PERL_MAGIC_ext|5.007002||p PERL_MAGIC_fm|5.007002||p -PERL_MAGIC_glob|5.014000||p +PERL_MAGIC_glob|5.024000||p PERL_MAGIC_isaelem|5.007002||p PERL_MAGIC_isa|5.007002||p -PERL_MAGIC_mutex|5.014000||p +PERL_MAGIC_mutex|5.024000||p PERL_MAGIC_nkeys|5.007002||p -PERL_MAGIC_overload_elem|5.007002||p +PERL_MAGIC_overload_elem|5.024000||p PERL_MAGIC_overload_table|5.007002||p -PERL_MAGIC_overload|5.007002||p +PERL_MAGIC_overload|5.024000||p PERL_MAGIC_pos|5.007002||p PERL_MAGIC_qr|5.007002||p PERL_MAGIC_regdata|5.007002||p @@ -632,46 +658,51 @@ PERL_PV_PRETTY_NOCLEAR|5.010000||p PERL_PV_PRETTY_QUOTE|5.009004||p PERL_PV_PRETTY_REGPROP|5.009004||p -PERL_QUAD_MAX|5.004000||p -PERL_QUAD_MIN|5.004000||p +PERL_QUAD_MAX|5.003070||p +PERL_QUAD_MIN|5.003070||p PERL_REVISION|5.006000||p PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p PERL_SCAN_DISALLOW_PREFIX|5.007003||p PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p PERL_SCAN_SILENT_ILLDIGIT|5.008001||p -PERL_SHORT_MAX|5.004000||p -PERL_SHORT_MIN|5.004000||p +PERL_SHORT_MAX|5.003070||p +PERL_SHORT_MIN|5.003070||p PERL_SIGNALS_UNSAFE_FLAG|5.008001||p PERL_SUBVERSION|5.006000||p PERL_SYS_INIT3||5.006000| PERL_SYS_INIT||| -PERL_SYS_TERM||5.014000| -PERL_UCHAR_MAX|5.004000||p -PERL_UCHAR_MIN|5.004000||p -PERL_UINT_MAX|5.004000||p -PERL_UINT_MIN|5.004000||p -PERL_ULONG_MAX|5.004000||p -PERL_ULONG_MIN|5.004000||p +PERL_SYS_TERM||5.024000| +PERL_UCHAR_MAX|5.003070||p +PERL_UCHAR_MIN|5.003070||p +PERL_UINT_MAX|5.003070||p +PERL_UINT_MIN|5.003070||p +PERL_ULONG_MAX|5.003070||p +PERL_ULONG_MIN|5.003070||p PERL_UNUSED_ARG|5.009003||p PERL_UNUSED_CONTEXT|5.009004||p PERL_UNUSED_DECL|5.007002||p +PERL_UNUSED_RESULT|5.021001||p PERL_UNUSED_VAR|5.007002||p -PERL_UQUAD_MAX|5.004000||p -PERL_UQUAD_MIN|5.004000||p +PERL_UQUAD_MAX|5.003070||p +PERL_UQUAD_MIN|5.003070||p PERL_USE_GCC_BRACE_GROUPS|5.009004||p -PERL_USHORT_MAX|5.004000||p -PERL_USHORT_MIN|5.004000||p +PERL_USHORT_MAX|5.003070||p +PERL_USHORT_MIN|5.003070||p PERL_VERSION|5.006000||p PL_DBsignal|5.005000||p PL_DBsingle|||pn PL_DBsub|||pn PL_DBtrace|||pn PL_Sv|5.005000||p -PL_bufend|5.014000||p -PL_bufptr|5.014000||p +PL_bufend|5.024000||p +PL_bufptr|5.024000||p +PL_check||5.006000| PL_compiling|5.004050||p -PL_copline|5.014000||p +PL_comppad_name||5.017004| +PL_comppad||5.008001| +PL_copline|5.024000||p PL_curcop|5.004050||p +PL_curpad||5.005000| PL_curstash|5.004050||p PL_debstash|5.004050||p PL_defgv|5.004050||p @@ -679,31 +710,31 @@ PL_dirty|5.004050||p PL_dowarn|||pn PL_errgv|5.004050||p -PL_error_count|5.014000||p -PL_expect|5.014000||p +PL_error_count|5.024000||p +PL_expect|5.024000||p PL_hexdigit|5.005000||p PL_hints|5.005000||p -PL_in_my_stash|5.014000||p -PL_in_my|5.014000||p +PL_in_my_stash|5.024000||p +PL_in_my|5.024000||p PL_keyword_plugin||5.011002| PL_last_in_gv|||n PL_laststatval|5.005000||p -PL_lex_state|5.014000||p -PL_lex_stuff|5.014000||p -PL_linestr|5.014000||p +PL_lex_state|5.024000||p +PL_lex_stuff|5.024000||p +PL_linestr|5.024000||p PL_modglobal||5.005000|n PL_na|5.004050||pn PL_no_modify|5.006000||p PL_ofsgv|||n PL_opfreehook||5.011000|n -PL_parser|5.009005|5.009005|p +PL_parser|5.009005||p PL_peepp||5.007003|n PL_perl_destruct_level|5.004050||p PL_perldb|5.004050||p PL_ppaddr|5.006000||p PL_rpeepp||5.013005|n -PL_rsfp_filters|5.014000||p -PL_rsfp|5.014000||p +PL_rsfp_filters|5.024000||p +PL_rsfp|5.024000||p PL_rs|||n PL_signals|5.008001||p PL_stack_base|5.004050||p @@ -716,8 +747,8 @@ PL_sv_yes|5.004050||pn PL_tainted|5.004050||p PL_tainting|5.004050||p -PL_tokenbuf|5.014000||p -POP_MULTICALL||5.014000| +PL_tokenbuf|5.024000||p +POP_MULTICALL||5.024000| POPi|||n POPl|||n POPn|||n @@ -725,6 +756,8 @@ POPpx||5.005030|n POPp|||n POPs|||n +POPul||5.006000|n +POPu||5.004000|n PTR2IV|5.006000||p PTR2NV|5.006000||p PTR2UV|5.006000||p @@ -732,7 +765,7 @@ PTR2ul|5.007001||p PTRV|5.006000||p PUSHMARK||| -PUSH_MULTICALL||5.014000| +PUSH_MULTICALL||5.024000| PUSHi||| PUSHmortal|5.009002||p PUSHn||| @@ -740,6 +773,29 @@ PUSHs||| PUSHu|5.004000||p PUTBACK||| +PadARRAY||5.024000| +PadMAX||5.024000| +PadlistARRAY||5.024000| +PadlistMAX||5.024000| +PadlistNAMESARRAY||5.024000| +PadlistNAMESMAX||5.024000| +PadlistNAMES||5.024000| +PadlistREFCNT||5.017004| +PadnameIsOUR||| +PadnameIsSTATE||| +PadnameLEN||5.024000| +PadnameOURSTASH||| +PadnameOUTER||| +PadnamePV||5.024000| +PadnameREFCNT_dec||5.024000| +PadnameREFCNT||5.024000| +PadnameSV||5.024000| +PadnameTYPE||| +PadnameUTF8||5.021007| +PadnamelistARRAY||5.024000| +PadnamelistMAX||5.024000| +PadnamelistREFCNT_dec||5.024000| +PadnamelistREFCNT||5.024000| PerlIO_clearerr||5.007003| PerlIO_close||5.007003| PerlIO_context_layers||5.009004| @@ -753,6 +809,8 @@ PerlIO_get_cnt||5.007003| PerlIO_get_ptr||5.007003| PerlIO_read||5.007003| +PerlIO_restore_errno||| +PerlIO_save_errno||| PerlIO_seek||5.007003| PerlIO_set_cnt||5.007003| PerlIO_set_ptrcnt||5.007003| @@ -768,6 +826,8 @@ PoisonNew|5.009004||p PoisonWith|5.009004||p Poison|5.008000||p +READ_XDIGIT||5.017006| +RESTORE_LC_NUMERIC||5.024000| RETVAL|||n Renewc||| Renew||| @@ -782,6 +842,8 @@ START_MY_CXT|5.007003||p STMT_END|||p STMT_START|||p +STORE_LC_NUMERIC_FORCE_TO_UNDERLYING||5.024000| +STORE_LC_NUMERIC_SET_TO_NEEDED||5.024000| STR_WITH_LEN|5.009003||p ST||| SV_CONST_RETURN|5.009003||p @@ -797,16 +859,26 @@ SVfARG|5.009005||p SVf_UTF8|5.006000||p SVf|5.006000||p +SVt_INVLIST||5.019002| SVt_IV||| +SVt_NULL||| SVt_NV||| SVt_PVAV||| SVt_PVCV||| +SVt_PVFM||| +SVt_PVGV||| SVt_PVHV||| +SVt_PVIO||| +SVt_PVIV||| +SVt_PVLV||| SVt_PVMG||| +SVt_PVNV||| SVt_PV||| +SVt_REGEXP||5.011000| Safefree||| Slab_Alloc||| Slab_Free||| +Slab_to_ro||| Slab_to_rw||| StructCopy||| SvCUR_set||| @@ -877,7 +949,7 @@ SvPV_nolen|5.006000||p SvPV_nomg_const_nolen|5.009003||p SvPV_nomg_const|5.009003||p -SvPV_nomg_nolen||5.013007| +SvPV_nomg_nolen|5.013007||p SvPV_nomg|5.007002||p SvPV_renew|5.009003||p SvPV_set||| @@ -893,6 +965,7 @@ SvPVutf8||5.006000| SvPVx||| SvPV||| +SvREFCNT_dec_NN||5.017007| SvREFCNT_dec||| SvREFCNT_inc_NN|5.009004||p SvREFCNT_inc_simple_NN|5.009004||p @@ -908,8 +981,8 @@ SvROK||| SvRV_set|5.009003||p SvRV||| -SvRXOK||5.009005| -SvRX||5.009005| +SvRXOK|5.009005||p +SvRX|5.009005||p SvSETMAGIC||| SvSHARED_HASH|5.009003||p SvSHARE||5.007003| @@ -923,6 +996,7 @@ SvTAINTED_on||5.004000| SvTAINTED||5.004000| SvTAINT||| +SvTHINKFIRST||| SvTRUE_nomg||5.013006| SvTRUE||| SvTYPE||| @@ -942,7 +1016,9 @@ SvVSTRING_mg|5.009004||p THIS|||n UNDERBAR|5.009002||p +UTF8SKIP||5.006000| UTF8_MAXBYTES|5.009002||p +UVCHR_SKIP||5.022000| UVSIZE|5.006000||p UVTYPE|5.006000||p UVXf|5.007001||p @@ -951,7 +1027,7 @@ UVxf|5.006000||p WARN_ALL|5.006000||p WARN_AMBIGUOUS|5.006000||p -WARN_ASSERTIONS|5.014000||p +WARN_ASSERTIONS|5.024000||p WARN_BAREWORD|5.006000||p WARN_CLOSED|5.006000||p WARN_CLOSURE|5.006000||p @@ -996,6 +1072,7 @@ WARN_UNTIE|5.006000||p WARN_UTF8|5.006000||p WARN_VOID|5.006000||p +WIDEST_UTYPE|5.015004||p XCPT_CATCH|5.009002||p XCPT_RETHROW|5.009002||p XCPT_TRY_END|5.009002||p @@ -1023,52 +1100,108 @@ XST_mUNDEF||| XST_mUV|5.008001||p XST_mYES||| -XS_APIVERSION_BOOTCHECK||5.013004| -XS_VERSION_BOOTCHECK||| +XS_APIVERSION_BOOTCHECK||5.024000| +XS_EXTERNAL||5.024000| +XS_INTERNAL||5.024000| +XS_VERSION_BOOTCHECK||5.024000| XS_VERSION||| XSprePUSH|5.006000||p XS||| -XopDISABLE||5.014000| -XopENABLE||5.014000| -XopENTRY_set||5.014000| -XopENTRY||5.014000| +XopDISABLE||5.024000| +XopENABLE||5.024000| +XopENTRYCUSTOM||5.024000| +XopENTRY_set||5.024000| +XopENTRY||5.024000| XopFLAGS||5.013007| ZeroD|5.009002||p Zero||| _aMY_CXT|5.007003||p +_add_range_to_invlist||| _append_range_to_invlist||| +_core_swash_init||| +_get_encoding||| +_get_regclass_nonbitmap_data||| +_get_swash_invlist||| +_invlistEQ||| +_invlist_array_init|||n +_invlist_contains_cp|||n +_invlist_dump||| +_invlist_intersection_maybe_complement_2nd||| +_invlist_intersection||| +_invlist_invert||| +_invlist_len|||n +_invlist_populate_swatch|||n +_invlist_search|||n +_invlist_subtract||| +_invlist_union_maybe_complement_2nd||| +_invlist_union||| +_is_cur_LC_category_utf8||| +_is_in_locale_category||5.021001| +_is_uni_FOO||5.017008| +_is_uni_perl_idcont||5.017008| +_is_uni_perl_idstart||5.017007| +_is_utf8_FOO||5.017008| +_is_utf8_char_slow||5.021001|n +_is_utf8_idcont||5.021001| +_is_utf8_idstart||5.021001| +_is_utf8_mark||5.017008| +_is_utf8_perl_idcont||5.017008| +_is_utf8_perl_idstart||5.017007| +_is_utf8_xidcont||5.021001| +_is_utf8_xidstart||5.021001| +_load_PL_utf8_foldclosures||| +_make_exactf_invlist||| +_new_invlist_C_array||| _new_invlist||| _pMY_CXT|5.007003||p +_setlocale_debug_string|||n +_setup_canned_invlist||| _swash_inversion_hash||| _swash_to_invlist||| +_to_fold_latin1||| +_to_uni_fold_flags||5.014000| +_to_upper_title_latin1||| +_to_utf8_case||| +_to_utf8_fold_flags||5.019009| +_to_utf8_lower_flags||5.019009| +_to_utf8_title_flags||5.019009| +_to_utf8_upper_flags||5.019009| +_warn_problematic_locale|||n aMY_CXT_|5.007003||p aMY_CXT|5.007003||p -aTHXR_|5.014000||p -aTHXR|5.014000||p +aTHXR_|5.024000||p +aTHXR|5.024000||p aTHX_|5.006000||p aTHX|5.006000||p -add_alternate||| +add_above_Latin1_folds||| add_cp_to_invlist||| add_data|||n -add_range_to_invlist||| +add_multi_match||| add_utf16_textfilter||| -addmad||| +adjust_size_and_find_bucket|||n +advance_one_LB||| +advance_one_SB||| +advance_one_WB||| +alloc_maybe_populate_EXACT||| +alloccopstash||| allocmy||| amagic_call||| amagic_cmp_locale||| amagic_cmp||| amagic_deref_call||5.013007| amagic_i_ncmp||| +amagic_is_enabled||| amagic_ncmp||| anonymise_cv_maybe||| any_dup||| ao||| -append_madprops||| +append_utf8_from_native_byte||5.019004|n apply_attrs_my||| apply_attrs_string||5.006001| apply_attrs||| apply||| assert_uft8_cache_coherent||| +assignment_type||| atfork_lock||5.007003|n atfork_unlock||5.007003|n av_arylen_p||5.009003| @@ -1077,6 +1210,7 @@ av_create_and_unshift_one||5.009005| av_delete||5.006000| av_exists||5.006000| +av_extend_guts||| av_extend||| av_fetch||| av_fill||| @@ -1088,14 +1222,20 @@ av_reify||| av_shift||| av_store||| +av_tindex||5.017009| +av_top_index||5.017009| av_undef||| av_unshift||| ax|||n -bad_type||| +backup_one_LB||| +backup_one_SB||| +backup_one_WB||| +bad_type_gv||| +bad_type_pv||| bind_match||| -block_end||| +block_end||5.004000| block_gimme||5.004000| -block_start||| +block_start||5.004000| blockhook_register||5.013003| boolSV|5.004000||p boot_core_PerlIO||| @@ -1103,27 +1243,28 @@ boot_core_mro||| bytes_cmp_utf8||5.013007| bytes_from_utf8||5.007001| -bytes_to_uni|||n bytes_to_utf8||5.006001| +cBOOL|5.013000||p call_argv|5.006000||p call_atexit||5.006000| call_list||5.004000| call_method|5.006000||p call_pv|5.006000||p call_sv|5.006000||p -caller_cx||5.013005| +caller_cx|5.013005|5.006000|p calloc||5.007002|n cando||| -cast_i32||5.006000| -cast_iv||5.006000| -cast_ulong||5.006000| -cast_uv||5.006000| +cast_i32||5.006000|n +cast_iv||5.006000|n +cast_ulong||5.006000|n +cast_uv||5.006000|n +check_locale_boundary_crossing||| check_type_and_open||| check_uni||| check_utf8_print||| checkcomma||| -checkposixcc||| ckWARN|5.006000||p +ck_entersub_args_core||| ck_entersub_args_list||5.013006| ck_entersub_args_proto_or_list||5.013006| ck_entersub_args_proto||5.013006| @@ -1132,22 +1273,23 @@ ckwarn_common||| ckwarn_d||5.009003| ckwarn||5.009003| -cl_and|||n -cl_anything|||n -cl_init|||n -cl_is_anything|||n -cl_or|||n +clear_defarray||5.023008| clear_placeholders||| +clear_special_blocks||| clone_params_del|||n clone_params_new|||n closest_cop||| -convert||| +cntrl_to_mnemonic|||n +compute_EXACTish|||n +construct_ahocorasick_from_trie||| +cop_fetch_label||5.015001| cop_free||| cop_hints_2hv||5.013007| cop_hints_fetch_pvn||5.013007| cop_hints_fetch_pvs||5.013007| cop_hints_fetch_pv||5.013007| cop_hints_fetch_sv||5.013007| +cop_store_label||5.015001| cophh_2hv||5.013007| cophh_copy||5.013007| cophh_delete_pvn||5.013007| @@ -1159,36 +1301,67 @@ cophh_fetch_pv||5.013007| cophh_fetch_sv||5.013007| cophh_free||5.013007| -cophh_new_empty||5.014000| +cophh_new_empty||5.024000| cophh_store_pvn||5.013007| cophh_store_pvs||5.013007| cophh_store_pv||5.013007| cophh_store_sv||5.013007| +core_prototype||| +coresub_op||| cr_textfilter||| create_eval_scope||| -croak_no_modify||5.013003| +croak_memory_wrap||5.019003|n +croak_no_mem|||n +croak_no_modify||5.013003|n croak_nocontext|||vn +croak_popstack|||n croak_sv||5.013001| -croak_xs_usage||5.010001| +croak_xs_usage||5.010001|n croak|||v csighandler||5.009003|n -curmad||| +current_re_engine||| curse||| custom_op_desc||5.007003| +custom_op_get_field||| custom_op_name||5.007003| custom_op_register||5.013007| custom_op_xop||5.013007| -cv_ckproto_len||| +cv_ckproto_len_flags||| +cv_clone_into||| cv_clone||| -cv_const_sv||5.004000| +cv_const_sv_or_av|||n +cv_const_sv||5.003070|n cv_dump||| +cv_forget_slab||| cv_get_call_checker||5.013006| +cv_name||5.021005| +cv_set_call_checker_flags||5.021004| cv_set_call_checker||5.013006| +cv_undef_flags||| cv_undef||| +cvgv_from_hek||| cvgv_set||| cvstash_set||| cx_dump||5.005000| cx_dup||| +cx_popblock||5.023008| +cx_popeval||5.023008| +cx_popformat||5.023008| +cx_popgiven||5.023008| +cx_poploop||5.023008| +cx_popsub_args||5.023008| +cx_popsub_common||5.023008| +cx_popsub||5.023008| +cx_popwhen||5.023008| +cx_pushblock||5.023008| +cx_pusheval||5.023008| +cx_pushformat||5.023008| +cx_pushgiven||5.023008| +cx_pushloop_for||5.023008| +cx_pushloop_plain||5.023008| +cx_pushsub||5.023008| +cx_pushwhen||5.023008| +cx_topblock||5.023008| cxinc||| dAXMARK|5.009003||p dAX|5.007002||p @@ -1201,7 +1374,7 @@ dORIGMARK||| dSP||| dTHR|5.004050||p -dTHXR|5.014000||p +dTHXR|5.024000||p dTHXa|5.006000||p dTHXoa|5.006000||p dTHX|5.006000||p @@ -1222,6 +1395,7 @@ debstack||5.007003| debug_start_match||| deb||5.007003|v +defelem_target||| del_sv||| delete_eval_scope||| delimcpy||5.004000|n @@ -1256,14 +1430,15 @@ do_magic_dump||5.006000| do_msgrcv||| do_msgsnd||| +do_ncmp||| do_oddball||| do_op_dump||5.006000| -do_op_xmldump||| +do_open6||| do_open9||5.006000| +do_open_raw||| do_openn||5.007001| -do_open||5.004000| +do_open||5.003070| do_pmop_dump||5.006000| -do_pmop_xmldump||| do_print||| do_readline||| do_seek||| @@ -1287,7 +1462,7 @@ do_vecset||| do_vop||| docatch||| -doeval||| +doeval_compile||| dofile||| dofindlabel||| doform||| @@ -1296,7 +1471,7 @@ doopen_pm||| doparseform||| dopoptoeval||| -dopoptogiven||| +dopoptogivenfor||| dopoptolabel||| dopoptoloop||| dopoptosub_at||| @@ -1304,11 +1479,17 @@ doref||5.009003| dounwind||| dowantarray||| +drand48_init_r|||n +drand48_r|||n +dtrace_probe_call||| +dtrace_probe_load||| +dtrace_probe_op||| +dtrace_probe_phase||| dump_all_perl||| dump_all||5.006000| +dump_c_backtrace||| dump_eval||5.006000| dump_exec_pos||| -dump_fds||| dump_form||5.006000| dump_indent||5.006000|v dump_mstats||| @@ -1323,6 +1504,7 @@ dump_vindent||5.006000| dumpuntil||| dup_attrlist||| +edit_distance|||n emulate_cop_io||| eval_pv|5.006000||p eval_sv|5.006000||p @@ -1331,23 +1513,28 @@ fbm_compile||5.005000| fbm_instr||5.005000| feature_is_enabled||| -fetch_cop_label||5.011000| filter_add||| filter_del||| filter_gets||| filter_read||| +finalize_optree||| +finalize_op||| find_and_forget_pmops||| find_array_subscript||| find_beginning||| find_byclass||| +find_default_stash||| find_hash_subscript||| find_in_my_stash||| +find_lexical_cv||| +find_runcv_where||| find_runcv||5.008001| find_rundefsvoffset||5.009002| find_rundefsv||5.013002| find_script||| find_uninit_var||| first_symbol|||n +fixup_errno_string||| foldEQ_latin1||5.013008|n foldEQ_locale||5.013002|n foldEQ_utf8_flags||5.013010| @@ -1355,6 +1542,7 @@ foldEQ||5.013002|n fold_constants||| forbid_setid||| +force_ident_maybe_lex||| force_ident||| force_list||| force_next||| @@ -1363,23 +1551,32 @@ force_word||| forget_pmop||| form_nocontext|||vn +form_short_octal_warning||| form||5.004000|v fp_dup||| fprintf_nocontext|||vn +free_c_backtrace||| free_global_struct||| free_tied_hv_pool||| free_tmps||| gen_constant_list||| +get_ANYOF_cp_list_for_ssc||| +get_and_check_backslash_N_name||| get_aux_mg||| get_av|5.006000||p +get_c_backtrace_dump||| +get_c_backtrace||| get_context||5.006000|n -get_cvn_flags|5.009005||p +get_cvn_flags||| get_cvs|5.011000||p get_cv|5.006000||p get_db_sub||| get_debug_opts||| get_hash_seed||| get_hv|5.006000||p +get_invlist_iter_addr|||n +get_invlist_offset_addr|||n +get_invlist_previous_index_addr|||n get_mstats||| get_no_modify||| get_num||| @@ -1394,14 +1591,18 @@ getenv_len||| glob_2number||| glob_assign_glob||| -glob_assign_ref||| gp_dup||| gp_free||| gp_ref||| +grok_atoUV|||n grok_bin|5.007003||p +grok_bslash_N||| grok_bslash_c||| grok_bslash_o||| +grok_bslash_x||| grok_hex|5.007003||p +grok_infnan||5.021004| +grok_number_flags||5.021002| grok_number|5.007002||p grok_numeric_radix|5.007002||p grok_oct|5.007003||p @@ -1412,45 +1613,68 @@ gv_SVadd||| gv_add_by_type||5.011000| gv_autoload4||5.004000| +gv_autoload_pvn||5.015004| +gv_autoload_pv||5.015004| +gv_autoload_sv||5.015004| gv_check||| gv_const_sv||5.009003| gv_dump||5.006000| -gv_efullname3||5.004000| +gv_efullname3||5.003070| gv_efullname4||5.006001| gv_efullname||| -gv_ename||| gv_fetchfile_flags||5.009005| gv_fetchfile||| gv_fetchmeth_autoload||5.007003| +gv_fetchmeth_internal||| +gv_fetchmeth_pv_autoload||5.015004| +gv_fetchmeth_pvn_autoload||5.015004| +gv_fetchmeth_pvn||5.015004| +gv_fetchmeth_pv||5.015004| +gv_fetchmeth_sv_autoload||5.015004| +gv_fetchmeth_sv||5.015004| gv_fetchmethod_autoload||5.004000| -gv_fetchmethod_flags||5.011000| +gv_fetchmethod_pv_flags||5.015004| +gv_fetchmethod_pvn_flags||5.015004| +gv_fetchmethod_sv_flags||5.015004| gv_fetchmethod||| gv_fetchmeth||| gv_fetchpvn_flags|5.009002||p gv_fetchpvs|5.009004||p gv_fetchpv||| -gv_fetchsv|5.009002||p -gv_fullname3||5.004000| +gv_fetchsv||| +gv_fullname3||5.003070| gv_fullname4||5.006001| gv_fullname||| -gv_get_super_pkg||| gv_handler||5.007001| +gv_init_pvn||| +gv_init_pv||| +gv_init_svtype||| gv_init_sv||| gv_init||| +gv_is_in_main||| gv_magicalize_isa||| -gv_magicalize_overload||| +gv_magicalize||| gv_name_set||5.009004| -gv_stashpvn|5.004000||p +gv_override||| +gv_setref||| +gv_stashpvn_internal||| +gv_stashpvn|5.003070||p gv_stashpvs|5.009003||p gv_stashpv||| +gv_stashsvpvn_cached||| gv_stashsv||| gv_try_downgrade||| +handle_named_backref||| +handle_possible_posix||| +handle_regex_sets||| he_dup||| hek_dup||| +hfree_next_entry||| hfreeentries||| hsplit||| hv_assert||| -hv_auxinit|||n +hv_auxinit_internal|||n +hv_auxinit||| hv_backreferences_p||| hv_clear_placeholders||5.009001| hv_clear||| @@ -1459,39 +1683,41 @@ hv_copy_hints_hv||5.009004| hv_delayfree_ent||5.004000| hv_delete_common||| -hv_delete_ent||5.004000| +hv_delete_ent||5.003070| hv_delete||| hv_eiter_p||5.009003| hv_eiter_set||5.009003| hv_ename_add||| hv_ename_delete||| -hv_exists_ent||5.004000| +hv_exists_ent||5.003070| hv_exists||| -hv_fetch_ent||5.004000| +hv_fetch_ent||5.003070| hv_fetchs|5.009003||p hv_fetch||| hv_fill||5.013002| +hv_free_ent_ret||| hv_free_ent||5.004000| hv_iterinit||| -hv_iterkeysv||5.004000| +hv_iterkeysv||5.003070| hv_iterkey||| hv_iternext_flags||5.008000| hv_iternextsv||| hv_iternext||| hv_iterval||| hv_kill_backrefs||| -hv_ksplit||5.004000| +hv_ksplit||5.003070| hv_magic_check|||n hv_magic||| hv_name_set||5.009003| hv_notallowed||| hv_placeholders_get||5.009003| -hv_placeholders_p||5.009003| +hv_placeholders_p||| hv_placeholders_set||5.009003| +hv_rand_set||5.018000| hv_riter_p||5.009003| hv_riter_set||5.009003| hv_scalar||5.009001| -hv_store_ent||5.004000| +hv_store_ent||5.003070| hv_store_flags||5.008000| hv_stores|5.009004||p hv_store||| @@ -1506,6 +1732,7 @@ incpush||| ingroup||| init_argv_symbols||| +init_constants||| init_dbargs||| init_debugger||| init_global_struct||| @@ -1519,54 +1746,75 @@ init_predump_symbols||| init_stacks||5.005000| init_tm||5.007002| +inplace_aassign||| instr|||n -intro_my||| +intro_my||5.004000| intuit_method||| intuit_more||| invert||| -invlist_array||| -invlist_destroy||| +invlist_array|||n +invlist_clear||| +invlist_clone||| +invlist_contents||| invlist_extend||| -invlist_intersection||| -invlist_len||| -invlist_max||| -invlist_set_array||| +invlist_highest|||n +invlist_is_iterating|||n +invlist_iterfinish|||n +invlist_iterinit|||n +invlist_iternext|||n +invlist_max|||n +invlist_previous_index|||n +invlist_replace_list_destroys_src||| invlist_set_len||| -invlist_set_max||| -invlist_trim||| -invlist_union||| +invlist_set_previous_index|||n +invlist_trim|||n invoke_exception_hook||| io_close||| isALNUMC|5.006000||p +isALNUM_lazy||5.021001| +isALPHANUMERIC||5.017008| isALPHA||| isASCII|5.006000||p isBLANK|5.006001||p isCNTRL|5.006000||p isDIGIT||| +isFOO_lc||| +isFOO_utf8_lc||| +isGCB|||n isGRAPH|5.006000||p -isGV_with_GP|5.009004||p +isIDCONT||5.017008| +isIDFIRST_lazy||5.021001| +isIDFIRST||| +isLB||| isLOWER||| isOCTAL||5.013005| isPRINT|5.004000||p isPSXSPC|5.006001||p isPUNCT|5.006000||p +isSB||| isSPACE||| isUPPER||| +isUTF8_CHAR||5.021001| +isWB||| isWORDCHAR||5.013006| isXDIGIT|5.006000||p is_an_int||| -is_ascii_string||5.011000|n -is_gv_magical_sv||| +is_ascii_string||5.011000| is_handle_constructor|||n -is_inplace_av||| -is_list_assignment||| +is_invariant_string||5.021007|n is_lvalue_sub||5.007001| +is_safe_syscall||5.019004| +is_ssc_worth_it|||n is_uni_alnum_lc||5.006000| +is_uni_alnumc_lc||5.017007| +is_uni_alnumc||5.017007| is_uni_alnum||5.006000| is_uni_alpha_lc||5.006000| is_uni_alpha||5.006000| is_uni_ascii_lc||5.006000| is_uni_ascii||5.006000| +is_uni_blank_lc||5.017002| +is_uni_blank||5.017002| is_uni_cntrl_lc||5.006000| is_uni_cntrl||5.006000| is_uni_digit_lc||5.006000| @@ -1587,20 +1835,12 @@ is_uni_upper||5.006000| is_uni_xdigit_lc||5.006000| is_uni_xdigit||5.006000| -is_utf8_X_LVT||| -is_utf8_X_LV_LVT_V||| -is_utf8_X_LV||| -is_utf8_X_L||| -is_utf8_X_T||| -is_utf8_X_V||| -is_utf8_X_begin||| -is_utf8_X_extend||| -is_utf8_X_non_hangul||| -is_utf8_X_prepend||| +is_utf8_alnumc||5.017007| is_utf8_alnum||5.006000| is_utf8_alpha||5.006000| is_utf8_ascii||5.006000| -is_utf8_char_slow|||n +is_utf8_blank||5.017002| +is_utf8_char_buf||5.015008|n is_utf8_char||5.006000|n is_utf8_cntrl||5.006000| is_utf8_common||| @@ -1624,12 +1864,15 @@ is_utf8_xidcont||5.013010| is_utf8_xidfirst||5.013010| isa_lookup||| +isinfnansv||| +isinfnan||5.021004|n items|||n ix|||n jmaybe||| join_exact||| keyword_plugin_standard||| keyword||| +leave_adjust_stacks||5.023008| leave_scope||| lex_bufutf8||5.011002| lex_discard_to||5.011002| @@ -1663,21 +1906,21 @@ mXPUSHp|5.009002||p mXPUSHs|5.010001||p mXPUSHu|5.009002||p -mad_free||| -madlex||| -madparse||| magic_clear_all_env||| +magic_cleararylen_p||| magic_clearenv||| magic_clearhints||| magic_clearhint||| magic_clearisa||| magic_clearpack||| magic_clearsig||| +magic_copycallchecker||| magic_dump||5.006000| magic_existspack||| magic_freearylen_p||| magic_freeovrld||| magic_getarylen||| +magic_getdebugvar||| magic_getdefelem||| magic_getnkeys||| magic_getpack||| @@ -1689,7 +1932,6 @@ magic_getvec||| magic_get||| magic_killbackrefs||| -magic_len||| magic_methcall1||| magic_methcall|||v magic_methpack||| @@ -1699,14 +1941,15 @@ magic_regdatum_set||| magic_scalarpack||| magic_set_all_env||| -magic_setamagic||| magic_setarylen||| magic_setcollxfrm||| magic_setdbline||| +magic_setdebugvar||| magic_setdefelem||| magic_setenv||| magic_sethint||| magic_setisa||| +magic_setlvref||| magic_setmglob||| magic_setnkeys||| magic_setpack||| @@ -1722,47 +1965,52 @@ magic_sizepack||| magic_wipepack||| make_matcher||| -make_trie_failtable||| make_trie||| malloc_good_size|||n malloced_size|||n malloc||5.007002|n -markstack_grow||| +markstack_grow||5.021001| matcher_matches_sv||| +maybe_multimagic_gv||| +mayberelocate||| measure_struct||| memEQs|5.009005||p memEQ|5.004000||p memNEs|5.009005||p memNE|5.004000||p mem_collxfrm||| +mem_log_alloc|||n mem_log_common|||n +mem_log_free|||n +mem_log_realloc|||n mess_alloc||| mess_nocontext|||vn mess_sv||5.013001| mess||5.006000|v -method_common||| mfree||5.007002|n mg_clear||| mg_copy||| mg_dup||| -mg_findext||5.013008| -mg_find||| +mg_find_mglob||| +mg_findext|5.013008||pn +mg_find|||n mg_free_type||5.013006| mg_free||| mg_get||| mg_length||5.005000| mg_localize||| -mg_magical||| +mg_magical|||n mg_set||| mg_size||5.005000| -mini_mktime||5.007002| +mini_mktime||5.007002|n +minus_v||| missingterm||| mode_from_discipline||| modkids||| -mod||| more_bodies||| more_sv||| moreswitches||| +move_proto_attr||| mro_clean_isarev||| mro_gather_and_rename||| mro_get_from_name||5.010001| @@ -1779,67 +2027,42 @@ mro_set_private_data||5.010001| mul128||| mulexp10|||n -munge_qwlist_to_paren_list||| +multideref_stringify||| my_atof2||5.007002| my_atof||5.006000| my_attrs||| -my_bcopy|||n -my_betoh16|||n -my_betoh32|||n -my_betoh64|||n -my_betohi|||n -my_betohl|||n -my_betohs|||n +my_bcopy||5.004050|n +my_bytes_to_utf8|||n my_bzero|||n my_chsize||| my_clearenv||| my_cxt_index||| my_cxt_init||| -my_dirfd||5.009005| +my_dirfd||5.009005|n my_exit_jump||| my_exit||| my_failure_exit||5.004000| my_fflush_all||5.006000| my_fork||5.007003|n -my_htobe16|||n -my_htobe32|||n -my_htobe64|||n -my_htobei|||n -my_htobel|||n -my_htobes|||n -my_htole16|||n -my_htole32|||n -my_htole64|||n -my_htolei|||n -my_htolel|||n -my_htoles|||n -my_htonl||| my_kid||| -my_letoh16|||n -my_letoh32|||n -my_letoh64|||n -my_letohi|||n -my_letohl|||n -my_letohs|||n my_lstat_flags||| -my_lstat||5.014000| -my_memcmp||5.004000|n +my_lstat||5.024000| +my_memcmp|||n my_memset|||n -my_ntohl||| -my_pclose||5.004000| +my_pclose||5.003070| my_popen_list||5.007001| -my_popen||5.004000| +my_popen||5.003070| my_setenv||| +my_setlocale||| my_snprintf|5.009004||pvn my_socketpair||5.007003|n my_sprintf|5.009003||pvn my_stat_flags||| -my_stat||5.014000| +my_stat||5.024000| +my_strerror||5.021001| my_strftime||5.007002| my_strlcat|5.009004||pn my_strlcpy|5.009004||pn -my_swabn|||n -my_swap||| my_unexec||| my_vsnprintf||5.009004|n need_utf8|||n @@ -1848,14 +2071,16 @@ newANONLIST||| newANONSUB||| newASSIGNOP||| +newATTRSUB_x||| newATTRSUB||5.006000| newAVREF||| newAV||| newBINOP||| newCONDOP||| +newCONSTSUB_flags||5.015006| newCONSTSUB|5.004050||p newCVREF||| -newDEFSVOP||| +newDEFSVOP||5.021006| newFORM||| newFOROP||5.013007| newGIVENOP||5.009003| @@ -1863,6 +2088,7 @@ newGP||| newGVOP||| newGVREF||| +newGVgen_flags||5.015004| newGVgen||| newHVREF||| newHVhv||5.005000| @@ -1872,11 +2098,15 @@ newLOGOP||| newLOOPEX||| newLOOPOP||| -newMADPROP||| -newMADsv||| -newMYSUB||| +newMETHOP_internal||| +newMETHOP_named||5.021005| +newMETHOP||5.021005| +newMYSUB||5.017004| newNULLLIST||| newOP||| +newPADNAMELIST||5.021007|n +newPADNAMEouter||5.021007|n +newPADNAMEpvn||5.021007|n newPADOP||| newPMOP||| newPROG||| @@ -1887,13 +2117,16 @@ newRV||| newSLICEOP||| newSTATEOP||| +newSTUB||| newSUB||| newSVOP||| newSVREF||| newSV_type|5.009005||p +newSVavdefelem||| newSVhek||5.009003| newSViv||| newSVnv||| +newSVpadname||5.017004| newSVpv_share||5.013006| newSVpvf_nocontext|||vn newSVpvf||5.004000|v @@ -1909,11 +2142,13 @@ newSVsv||| newSVuv|5.006000||p newSV||| -newTOKEN||| +newUNOP_AUX||5.021007| newUNOP||| newWHENOP||5.009003| newWHILEOP||5.013007| +newXS_deffile||| newXS_flags||5.009004| +newXS_len_flags||| newXSproto||5.006000| newXS||5.006000| new_collate||5.006000| @@ -1932,7 +2167,9 @@ no_bareword_allowed||| no_fh_allowed||| no_op||| +noperl_die|||vn not_a_number||| +not_incrementable||| nothreadhook||5.008000| nuke_stacks||| num_overflow|||n @@ -1941,24 +2178,34 @@ op_append_elem||5.013006| op_append_list||5.013006| op_clear||| -op_const_sv||| op_contextualize||5.013006| +op_convert_list||5.021006| op_dump||5.006000| op_free||| -op_getmad_weak||| -op_getmad||| +op_integerize||| op_linklist||5.013006| +op_lvalue_flags||| op_lvalue||5.013007| op_null||5.007002| +op_parent||5.021002|n op_prepend_elem||5.013006| op_refcnt_dec||| op_refcnt_inc||| op_refcnt_lock||5.009002| op_refcnt_unlock||5.009002| +op_relocate_sv||| op_scope||5.013007| -op_xmldump||| +op_sibling_splice||5.021002|n +op_std_init||| +op_unscope||| open_script||| -opt_scalarhv||| +openn_cleanup||| +openn_setup||| +opmethod_stash||| +opslab_force_free||| +opslab_free_nopad||| +opslab_free||| +output_or_return_posix_warnings||| pMY_CXT_|5.007003||p pMY_CXT|5.007003||p pTHX_|5.006000||p @@ -1969,43 +2216,61 @@ package_version||| package||| packlist||5.008001| -pad_add_anon||| -pad_add_name_sv||| -pad_add_name||| +pad_add_anon||5.008001| +pad_add_name_pvn||5.015001| +pad_add_name_pvs||5.015001| +pad_add_name_pv||5.015001| +pad_add_name_sv||5.015001| +pad_add_weakref||| +pad_alloc_name||| pad_alloc||| pad_block_start||| pad_check_dup||| -pad_compname_type||| +pad_compname_type||5.009003| pad_findlex||| -pad_findmy||5.011002| +pad_findmy_pvn||5.015001| +pad_findmy_pvs||5.015001| +pad_findmy_pv||5.015001| +pad_findmy_sv||5.015001| pad_fixup_inner_anons||| pad_free||| pad_leavemy||| -pad_new||| -pad_peg|||n +pad_new||5.008001| pad_push||| pad_reset||| pad_setsv||| pad_sv||| pad_swipe||| -pad_tidy||| +pad_tidy||5.008001| padlist_dup||| +padlist_store||| +padname_dup||| +padname_free||| +padnamelist_dup||| +padnamelist_fetch||5.021007|n +padnamelist_free||| +padnamelist_store||5.021007| parse_arithexpr||5.013008| parse_barestmt||5.013007| parse_block||5.013007| parse_body||| parse_fullexpr||5.013008| parse_fullstmt||5.013005| +parse_gv_stash_name||| +parse_ident||| parse_label||5.013007| parse_listexpr||5.013008| +parse_lparen_question_flags||| parse_stmtseq||5.013006| +parse_subsignature||| parse_termexpr||5.013008| parse_unicode_opts||| parser_dup||| +parser_free_nexttoke_ops||| parser_free||| -path_is_absolute|||n +path_is_searchable|||n peep||| -pending_Slabs_to_ro||| +pending_ident||| perl_alloc_using|||n perl_alloc|||n perl_clone_using|||n @@ -2018,20 +2283,20 @@ pidgone||| pm_description||| pmop_dump||5.006000| -pmop_xmldump||| pmruntime||| pmtrans||| pop_scope||| +populate_ANYOF_from_invlist||| populate_isa|||v pregcomp||5.009005| pregexec||| pregfree2||5.011000| pregfree||| -prepend_madprops||| prescan_version||5.011004| printbuf||| printf_nocontext|||vn process_special_blocks||| +ptr_hash|||n ptr_table_clear||5.009005| ptr_table_fetch||5.009005| ptr_table_find|||n @@ -2040,24 +2305,33 @@ ptr_table_split||5.009005| ptr_table_store||5.009005| push_scope||| -put_byte||| +put_charclass_bitmap_innards_common||| +put_charclass_bitmap_innards_invlist||| +put_charclass_bitmap_innards||| +put_code_point||| +put_range||| pv_display|5.006000||p pv_escape|5.009004||p pv_pretty|5.009004||p pv_uni_display||5.007003| qerror||| qsortsvu||| +quadmath_format_needed|||n +quadmath_format_single|||n re_compile||5.009005| re_croak2||| re_dup_guts||| -re_intuit_start||5.009005| +re_exec_indentf|||v +re_indentf|||v +re_intuit_start||5.019001| re_intuit_string||5.006000| -readpipe_override||| +re_op_compile||| +re_printf|||v realloc||5.007002|n -reentrant_free||| -reentrant_init||| -reentrant_retry|||vn -reentrant_size||| +reentrant_free||5.024000| +reentrant_init||5.024000| +reentrant_retry||5.024000|vn +reentrant_size||5.024000| ref_array_or_hash||| refcounted_he_chain_2hv||| refcounted_he_fetch_pvn||| @@ -2073,8 +2347,9 @@ refcounted_he_value||| refkids||| refto||| -ref||5.014000| -reg_check_named_buff_matched||| +ref||5.024000| +reg2Lanode||| +reg_check_named_buff_matched|||n reg_named_buff_all||5.009005| reg_named_buff_exists||5.009005| reg_named_buff_fetch||5.009005| @@ -2083,7 +2358,6 @@ reg_named_buff_nextkey||5.009005| reg_named_buff_scalar||5.009005| reg_named_buff||| -reg_namedseq||| reg_node||| reg_numbered_buff_fetch||| reg_numbered_buff_length||| @@ -2091,7 +2365,7 @@ reg_qr_package||| reg_recode||| reg_scan_name||| -reg_skipcomment||| +reg_skipcomment|||n reg_temp_copy||| reganode||| regatom||| @@ -2100,10 +2374,12 @@ regclass||| regcppop||| regcppush||| -regcurly||| +regcurly|||n regdump_extflags||| +regdump_intflags||| regdump||5.005000| regdupe_internal||| +regex_set_precedence|||n regexec_flags||5.005000| regfree_internal||5.009005| reghop3|||n @@ -2114,18 +2390,17 @@ reginsert||| regmatch||| regnext||5.005000| +regnode_guts||| regpiece||| -regpposixcc||| regprop||| regrepeat||| regtail_study||| regtail||| regtry||| -reguni||| -regwhite|||n reg||| repeatcpy|||n report_evil_fh||| +report_redefined_cv||| report_uninit||| report_wrongway_fh||| require_pv||5.006000| @@ -2184,7 +2459,7 @@ save_lines||| save_list||| save_long||| -save_magic||| +save_magic_flags||| save_mortalizesv||5.007001| save_nogv||| save_op||5.005000| @@ -2200,6 +2475,7 @@ save_set_svflags||5.009000| save_shared_pvref||5.007003| save_sptr||| +save_strlen||| save_svref||| save_vptr||5.006000| savepvn||| @@ -2212,6 +2488,7 @@ savestack_grow_cnt||5.008001| savestack_grow||| savesvpv||5.009002| +savetmps||5.023008| sawparens||| scalar_mod_type|||n scalarboolean||| @@ -2236,28 +2513,25 @@ scan_version||5.009001| scan_vstring||5.009005| scan_word||| -screaminstr||5.005000| search_const||| seed||5.008001| sequence_num||| -sequence_tail||| -sequence||| +set_ANYOF_arg||| +set_caret_X||| set_context||5.006000|n set_numeric_local||5.006000| set_numeric_radix||5.006000| set_numeric_standard||5.006000| -set_regclass_bit_fold||| -set_regclass_bit||| +set_padlist|||n setdefout||| share_hek_flags||| share_hek||5.004000| +should_warn_nl|||n si_dup||| sighandler|||n simplify_sort||| -skipspace0||| -skipspace1||| -skipspace2||| -skipspace||| +skip_to_be_ignored_text||| +skipspace_flags||| softref2xv||| sortcv_stacked||| sortcv_xsub||| @@ -2266,13 +2540,22 @@ sortsv||5.007003| space_join_names_mortal||| ss_dup||| +ssc_add_range||| +ssc_and||| +ssc_anything||| +ssc_clear_locale|||n +ssc_cp_and||| +ssc_finalize||| +ssc_init||| +ssc_intersection||| +ssc_is_anything|||n +ssc_is_cp_posixl_init|||n +ssc_or||| +ssc_union||| stack_grow||| -start_force||| start_glob||| start_subparse||5.004000| -stashpv_hvname_match||5.014000| stdize_locale||| -store_cop_label||| strEQ||| strGE||| strGT||| @@ -2310,8 +2593,10 @@ sv_2uv|5.004000||p sv_add_arena||| sv_add_backref||| -sv_backoff||| +sv_backoff|||n sv_bless||| +sv_buf_to_ro||| +sv_buf_to_rw||| sv_cat_decode||5.008001| sv_catpv_flags||5.013006| sv_catpv_mg|5.004050||p @@ -2333,9 +2618,6 @@ sv_catsv_mg|5.004050||p sv_catsv_nomg|5.007002||p sv_catsv||| -sv_catxmlpvn||| -sv_catxmlpv||| -sv_catxmlsv||| sv_chop||| sv_clean_all||| sv_clean_objs||| @@ -2346,14 +2628,21 @@ sv_cmp||| sv_collxfrm_flags||5.013006| sv_collxfrm||| -sv_compile_2op_is_broken||| -sv_compile_2op||5.008001| -sv_copypv||5.007003| +sv_copypv_flags||5.017002| +sv_copypv_nomg||5.017002| +sv_copypv||| sv_dec_nomg||5.013002| sv_dec||| sv_del_backref||| +sv_derived_from_pvn||5.015004| +sv_derived_from_pv||5.015004| +sv_derived_from_sv||5.015004| sv_derived_from||5.004000| sv_destroyable||5.010000| +sv_display||| +sv_does_pvn||5.015004| +sv_does_pv||5.015004| +sv_does_sv||5.015004| sv_does||5.009004| sv_dump||| sv_dup_common||| @@ -2368,7 +2657,8 @@ sv_free2||| sv_free_arenas||| sv_free||| -sv_gets||5.004000| +sv_get_backrefs||5.021008|n +sv_gets||5.003070| sv_grow||| sv_i_ncmp||| sv_inc_nomg||5.013002| @@ -2379,11 +2669,14 @@ sv_isobject||| sv_iv||5.005000| sv_kill_backrefs||| +sv_len_utf8_nomg||| sv_len_utf8||5.006000| sv_len||| -sv_magic_portable|5.014000|5.004000|p +sv_magic_portable|5.024000|5.004000|p +sv_magicext_mglob||| sv_magicext||5.007003| sv_magic||| +sv_mortalcopy_flags||| sv_mortalcopy||| sv_ncmp||| sv_newmortal||| @@ -2392,7 +2685,10 @@ sv_nosharing||5.007003| sv_nounlocking||| sv_nv||5.005000| +sv_only_taint_gmagic|||n +sv_or_pv_pos_u2b||| sv_peek||5.005000| +sv_pos_b2u_flags||5.019003| sv_pos_b2u_midway||| sv_pos_b2u||5.006000| sv_pos_u2b_cached||| @@ -2413,11 +2709,13 @@ sv_pv||5.006000| sv_recode_to_utf8||5.007003| sv_reftype||| -sv_release_COW||| +sv_ref||| sv_replace||| sv_report_used||| +sv_resetpvn||| sv_reset||| sv_rvweaken||5.006000| +sv_sethek||| sv_setiv_mg|5.004050||p sv_setiv||| sv_setnv_mg|5.006000||p @@ -2437,7 +2735,7 @@ sv_setref_iv||| sv_setref_nv||| sv_setref_pvn||| -sv_setref_pvs||5.013006| +sv_setref_pvs||5.024000| sv_setref_pv||| sv_setref_uv||5.007001| sv_setsv_cow||| @@ -2452,7 +2750,7 @@ sv_true||5.005000| sv_unglob||| sv_uni_display||5.007003| -sv_unmagicext||5.013008| +sv_unmagicext|5.013008||p sv_unmagic||| sv_unref_flags||5.007001| sv_unref||| @@ -2470,17 +2768,19 @@ sv_utf8_upgrade||5.007001| sv_uv|5.005000||p sv_vcatpvf_mg|5.006000|5.004000|p +sv_vcatpvfn_flags||5.017002| sv_vcatpvfn||5.004000| sv_vcatpvf|5.006000|5.004000|p sv_vsetpvf_mg|5.006000|5.004000|p sv_vsetpvfn||5.004000| sv_vsetpvf|5.006000|5.004000|p -sv_xmlpeek||| svtype||| swallow_bom||| swash_fetch||5.007002| -swash_get||| swash_init||5.006000| +swash_scan_list_line||| +swatch_get||| +sync_locale||5.021004| sys_init3||5.010000|n sys_init||5.010000|n sys_intern_clear||| @@ -2490,10 +2790,26 @@ taint_env||| taint_proper||| tied_method|||v -tmps_grow||5.006000| +tmps_grow_p||| +toFOLD_uni||| +toFOLD_utf8||5.019001| +toFOLD_uvchr||5.023009| +toFOLD||5.019001| +toLOWER_L1||5.019001| +toLOWER_LC||5.004000| +toLOWER_utf8||5.015007| +toLOWER_uvchr||5.023009| toLOWER||| +toTITLE_uni||| +toTITLE_utf8||5.015007| +toTITLE_uvchr||5.023009| +toTITLE||5.019001| +toUPPER_uni||| +toUPPER_utf8||5.015007| +toUPPER_uvchr||5.023009| toUPPER||| to_byte_substr||| +to_lower_latin1|||n to_uni_fold||5.007003| to_uni_lower_lc||5.006000| to_uni_lower||5.007003| @@ -2502,18 +2818,17 @@ to_uni_upper_lc||5.006000| to_uni_upper||5.007003| to_utf8_case||5.007003| -to_utf8_fold||5.007003| -to_utf8_lower||5.007003| +to_utf8_fold||5.015007| +to_utf8_lower||5.015007| to_utf8_substr||| -to_utf8_title||5.007003| -to_utf8_upper||5.007003| -token_free||| -token_getmad||| +to_utf8_title||5.015007| +to_utf8_upper||5.015007| tokenize_use||| tokeq||| tokereport||| -too_few_arguments||| -too_many_arguments||| +too_few_arguments_pv||| +too_many_arguments_pv||| +translate_substr_offsets|||n try_amagic_bin||| try_amagic_un||| uiv_2buf|||n @@ -2524,7 +2839,7 @@ unreferenced_to_tmp_stack||| unshare_hek_or_pvn||| unshare_hek||| -unsharepvn||5.004000| +unsharepvn||5.003070| unwind_handler_stack||| update_debugger_info||| upg_version||5.009005| @@ -2533,20 +2848,26 @@ utf16_to_utf8_reversed||5.006001| utf16_to_utf8||5.006001| utf8_distance||5.006000| -utf8_hop||5.006000| +utf8_hop||5.006000|n utf8_length||5.007001| utf8_mg_len_cache_update||| utf8_mg_pos_cache_update||| utf8_to_bytes||5.006001| +utf8_to_uvchr_buf||5.015009| utf8_to_uvchr||5.007001| +utf8_to_uvuni_buf||5.015009| utf8_to_uvuni||5.007001| -utf8n_to_uvchr||| +utf8n_to_uvchr||5.007001| utf8n_to_uvuni||5.007001| utilize||| uvchr_to_utf8_flags||5.007003| -uvchr_to_utf8||| +uvchr_to_utf8||5.007001| +uvoffuni_to_utf8_flags||5.019004| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| +valid_utf8_to_uvchr||5.015009| +valid_utf8_to_uvuni||5.015009| +validate_proto||| validate_suid||| varname||| vcmp||5.009000| @@ -2571,24 +2892,21 @@ warner_nocontext|||vn warner|5.006000|5.004000|pv warn|||v +was_lvalue_sub||| watch||| +whichsig_pvn||5.015004| +whichsig_pv||5.015004| +whichsig_sv||5.015004| whichsig||| +win32_croak_not_implemented|||n with_queued_errors||| -write_no_mem||| +wrap_op_checker||5.015008| write_to_stderr||| -xmldump_all_perl||| -xmldump_all||| -xmldump_attr||| -xmldump_eval||| -xmldump_form||| -xmldump_indent|||v -xmldump_packsubs_perl||| -xmldump_packsubs||| -xmldump_sub_perl||| -xmldump_sub||| -xmldump_vindent||| -xs_apiversion_bootcheck||| +xs_boot_epilog||| +xs_handshake|||vn xs_version_bootcheck||| +yyerror_pvn||| +yyerror_pv||| yyerror||| yylex||| yyparse||| @@ -3696,6 +4014,10 @@ # define IVSIZE 8 #endif +#ifndef LONGSIZE +# define LONGSIZE 8 +#endif + #ifndef PERL_QUAD_MIN # define PERL_QUAD_MIN IV_MIN #endif @@ -3717,6 +4039,10 @@ # define IVTYPE long #endif +#ifndef LONGSIZE +# define LONGSIZE 4 +#endif + #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif @@ -3879,6 +4205,64 @@ #ifndef Newxz # define Newxz(v,n,t) Newz(0,v,n,t) #endif +#ifndef cBOOL +# define cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0) +#endif + +#ifndef OpHAS_SIBLING +# define OpHAS_SIBLING(o) (cBOOL((o)->op_sibling)) +#endif + +#ifndef OpSIBLING +# define OpSIBLING(o) (0 + (o)->op_sibling) +#endif + +#ifndef OpMORESIB_set +# define OpMORESIB_set(o, sib) ((o)->op_sibling = (sib)) +#endif + +#ifndef OpLASTSIB_set +# define OpLASTSIB_set(o, parent) ((o)->op_sibling = NULL) +#endif + +#ifndef OpMAYBESIB_set +# define OpMAYBESIB_set(o, sib, parent) ((o)->op_sibling = (sib)) +#endif + +#ifndef SvRX +#if defined(NEED_SvRX) +static void * DPPP_(my_SvRX)(pTHX_ SV *rv); +static +#else +extern void * DPPP_(my_SvRX)(pTHX_ SV *rv); +#endif + +#ifdef SvRX +# undef SvRX +#endif +#define SvRX(a) DPPP_(my_SvRX)(aTHX_ a) + +#if defined(NEED_SvRX) || defined(NEED_SvRX_GLOBAL) + +void * +DPPP_(my_SvRX)(pTHX_ SV *rv) +{ + if (SvROK(rv)) { + SV *sv = SvRV(rv); + if (SvMAGICAL(sv)) { + MAGIC *mg = mg_find(sv, PERL_MAGIC_qr); + if (mg && mg->mg_obj) { + return mg->mg_obj; + } + } + } + return 0; +} +#endif +#endif +#ifndef SvRXOK +# define SvRXOK(sv) (!!SvRX(sv)) +#endif #ifndef PERL_UNUSED_DECL # ifdef HASATTRIBUTE @@ -3912,6 +4296,14 @@ # define PERL_UNUSED_CONTEXT # endif #endif + +#ifndef PERL_UNUSED_RESULT +# if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT) +# define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END +# else +# define PERL_UNUSED_RESULT(v) ((void)(v)) +# endif +#endif #ifndef NOOP # define NOOP /*EMPTY*/(void)0 #endif @@ -3998,15 +4390,15 @@ #undef STMT_START #undef STMT_END #ifdef PERL_USE_GCC_BRACE_GROUPS -# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ -# define STMT_END ) +# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ +# define STMT_END ) #else # if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) -# define STMT_START if (1) -# define STMT_END else (void)0 +# define STMT_START if (1) +# define STMT_END else (void)0 # else -# define STMT_START do -# define STMT_END while (0) +# define STMT_START do +# define STMT_END while (0) # endif #endif #ifndef boolSV @@ -4119,13 +4511,13 @@ #endif #ifndef PERL_HASH # define PERL_HASH(hash,str,len) \ - STMT_START { \ - const char *s_PeRlHaSh = str; \ - I32 i_PeRlHaSh = len; \ - U32 hash_PeRlHaSh = 0; \ - while (i_PeRlHaSh--) \ - hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ - (hash) = hash_PeRlHaSh; \ + STMT_START { \ + const char *s_PeRlHaSh = str; \ + I32 i_PeRlHaSh = len; \ + U32 hash_PeRlHaSh = 0; \ + while (i_PeRlHaSh--) \ + hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ + (hash) = hash_PeRlHaSh; \ } STMT_END #endif @@ -4197,16 +4589,26 @@ */ # undef isPRINT # endif + +#ifdef HAS_QUAD +# ifdef U64TYPE +# define WIDEST_UTYPE U64TYPE +# else +# define WIDEST_UTYPE Quad_t +# endif +#else +# define WIDEST_UTYPE U32 +#endif #ifndef isALNUMC # define isALNUMC(c) (isALPHA(c) || isDIGIT(c)) #endif #ifndef isASCII -# define isASCII(c) ((U8) (c) <= 127) +# define isASCII(c) ((WIDEST_UTYPE) (c) <= 127) #endif #ifndef isCNTRL -# define isCNTRL(c) ((U8) (c) < ' ' || (c) == 127) +# define isCNTRL(c) ((WIDEST_UTYPE) (c) < ' ' || (c) == 127) #endif #ifndef isGRAPH @@ -4227,6 +4629,23 @@ #endif +/* Until we figure out how to support this in older perls... */ +#if (PERL_BCDVERSION >= 0x5008000) +#ifndef HeUTF8 +# define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \ + SvUTF8(HeKEY_sv(he)) : \ + (U32)HeKUTF8(he)) +#endif + +#endif +#ifndef C_ARRAY_LENGTH +# define C_ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0])) +#endif + +#ifndef C_ARRAY_END +# define C_ARRAY_END(a) ((a) + C_ARRAY_LENGTH(a)) +#endif + #ifndef PERL_SIGNALS_UNSAFE_FLAG #define PERL_SIGNALS_UNSAFE_FLAG 0x0001 @@ -4346,7 +4765,7 @@ /* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */ /* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf * Do not use this variable unless you know exactly what you're - * doint. It is internal to the perl parser and may change or even + * doing. It is internal to the perl parser and may change or even * be removed in the future. As of perl 5.9.5, you have to check * for (PL_parser != NULL) for this variable to have any effect. * An always non-NULL PL_parser dummy is provided for earlier @@ -4460,16 +4879,16 @@ #endif #ifndef G_METHOD -# define G_METHOD 64 +# define G_METHOD 64 # ifdef call_sv # undef call_sv # endif # if (PERL_BCDVERSION < 0x5006000) # define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \ - (flags) & ~G_METHOD) : perl_call_sv(sv, flags)) + (flags) & ~G_METHOD) : perl_call_sv(sv, flags)) # else # define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \ - (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags)) + (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags)) # endif #endif @@ -4506,7 +4925,7 @@ PUTBACK; if (croak_on_error && SvTRUE(GvSV(errgv))) - croak(SvPVx(GvSV(errgv), na)); + croak(SvPVx(GvSV(errgv), na)); return sv; } @@ -4546,40 +4965,43 @@ SvREADONLY_off(((SVOP*)modname)->op_sv); modname->op_private |= OPpCONST_BARE; if (ver) { - veop = newSVOP(OP_CONST, 0, ver); + veop = newSVOP(OP_CONST, 0, ver); } else - veop = NULL; + veop = NULL; if (flags & PERL_LOADMOD_NOIMPORT) { - imop = sawparens(newNULLLIST()); + imop = sawparens(newNULLLIST()); } else if (flags & PERL_LOADMOD_IMPORT_OPS) { - imop = va_arg(*args, OP*); + imop = va_arg(*args, OP*); } else { - SV *sv; - imop = NULL; - sv = va_arg(*args, SV*); - while (sv) { - imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); - sv = va_arg(*args, SV*); - } + SV *sv; + imop = NULL; + sv = va_arg(*args, SV*); + while (sv) { + imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); + sv = va_arg(*args, SV*); + } } { - const line_t ocopline = PL_copline; - COP * const ocurcop = PL_curcop; - const int oexpect = PL_expect; + const line_t ocopline = PL_copline; + COP * const ocurcop = PL_curcop; + const int oexpect = PL_expect; #if (PERL_BCDVERSION >= 0x5004000) - utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), - veop, modname, imop); -#else - utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), - modname, imop); -#endif - PL_expect = oexpect; - PL_copline = ocopline; - PL_curcop = ocurcop; + utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), + veop, modname, imop); +#elif (PERL_BCDVERSION > 0x5003000) + utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), + veop, modname, imop); +#else + utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), + modname, imop); +#endif + PL_expect = oexpect; + PL_copline = ocopline; + PL_curcop = ocurcop; } } @@ -4671,35 +5093,35 @@ void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) { - U32 oldhints = PL_hints; - HV *old_cop_stash = PL_curcop->cop_stash; - HV *old_curstash = PL_curstash; - line_t oldline = PL_curcop->cop_line; - PL_curcop->cop_line = D_PPP_PL_copline; - - PL_hints &= ~HINT_BLOCK_SCOPE; - if (stash) - PL_curstash = PL_curcop->cop_stash = stash; + U32 oldhints = PL_hints; + HV *old_cop_stash = PL_curcop->cop_stash; + HV *old_curstash = PL_curstash; + line_t oldline = PL_curcop->cop_line; + PL_curcop->cop_line = D_PPP_PL_copline; + + PL_hints &= ~HINT_BLOCK_SCOPE; + if (stash) + PL_curstash = PL_curcop->cop_stash = stash; - newSUB( + newSUB( #if (PERL_BCDVERSION < 0x5003022) - start_subparse(), + start_subparse(), #elif (PERL_BCDVERSION == 0x5003022) - start_subparse(0), + start_subparse(0), #else /* 5.003_23 onwards */ - start_subparse(FALSE, 0), + start_subparse(FALSE, 0), #endif - newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), - newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ - newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) - ); - - PL_hints = oldhints; - PL_curcop->cop_stash = old_cop_stash; - PL_curstash = old_curstash; - PL_curcop->cop_line = oldline; + newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), + newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ + newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) + ); + + PL_hints = oldhints; + PL_curcop->cop_stash = old_cop_stash; + PL_curstash = old_curstash; + PL_curcop->cop_line = oldline; } #endif #endif @@ -4736,64 +5158,64 @@ #if (PERL_BCDVERSION < 0x5004068) /* Fetches the SV that keeps the per-interpreter data. */ #define dMY_CXT_SV \ - SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) + SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) #else /* >= perl5.004_68 */ #define dMY_CXT_SV \ - SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ - sizeof(MY_CXT_KEY)-1, TRUE) + SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ + sizeof(MY_CXT_KEY)-1, TRUE) #endif /* < perl5.004_68 */ /* This declaration should be used within all functions that use the * interpreter-local data. */ -#define dMY_CXT \ - dMY_CXT_SV; \ - my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) +#define dMY_CXT \ + dMY_CXT_SV; \ + my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) /* Creates and zeroes the per-interpreter data. * (We allocate my_cxtp in a Perl SV so that it will be released when * the interpreter goes away.) */ #define MY_CXT_INIT \ - dMY_CXT_SV; \ - /* newSV() allocates one more than needed */ \ - my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ - Zero(my_cxtp, 1, my_cxt_t); \ - sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) + dMY_CXT_SV; \ + /* newSV() allocates one more than needed */ \ + my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ + Zero(my_cxtp, 1, my_cxt_t); \ + sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) /* This macro must be used to access members of the my_cxt_t structure. * e.g. MYCXT.some_data */ -#define MY_CXT (*my_cxtp) +#define MY_CXT (*my_cxtp) /* Judicious use of these macros can reduce the number of times dMY_CXT * is used. Use is similar to pTHX, aTHX etc. */ -#define pMY_CXT my_cxt_t *my_cxtp -#define pMY_CXT_ pMY_CXT, -#define _pMY_CXT ,pMY_CXT -#define aMY_CXT my_cxtp -#define aMY_CXT_ aMY_CXT, -#define _aMY_CXT ,aMY_CXT +#define pMY_CXT my_cxt_t *my_cxtp +#define pMY_CXT_ pMY_CXT, +#define _pMY_CXT ,pMY_CXT +#define aMY_CXT my_cxtp +#define aMY_CXT_ aMY_CXT, +#define _aMY_CXT ,aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE /* Clones the per-interpreter data. */ #define MY_CXT_CLONE \ - dMY_CXT_SV; \ - my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ - Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ - sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) + dMY_CXT_SV; \ + my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ + Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ + sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) #endif #else /* single interpreter */ #ifndef START_MY_CXT -#define START_MY_CXT static my_cxt_t my_cxt; -#define dMY_CXT_SV dNOOP -#define dMY_CXT dNOOP -#define MY_CXT_INIT NOOP -#define MY_CXT my_cxt +#define START_MY_CXT static my_cxt_t my_cxt; +#define dMY_CXT_SV dNOOP +#define dMY_CXT dNOOP +#define MY_CXT_INIT NOOP +#define MY_CXT my_cxt -#define pMY_CXT void +#define pMY_CXT void #define pMY_CXT_ #define _pMY_CXT #define aMY_CXT @@ -4803,26 +5225,26 @@ #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE -#define MY_CXT_CLONE NOOP +#define MY_CXT_CLONE NOOP #endif #endif #ifndef IVdf # if IVSIZE == LONGSIZE -# define IVdf "ld" -# define UVuf "lu" -# define UVof "lo" -# define UVxf "lx" -# define UVXf "lX" +# define IVdf "ld" +# define UVuf "lu" +# define UVof "lo" +# define UVxf "lx" +# define UVXf "lX" +# elif IVSIZE == INTSIZE +# define IVdf "d" +# define UVuf "u" +# define UVof "o" +# define UVxf "x" +# define UVXf "X" # else -# if IVSIZE == INTSIZE -# define IVdf "d" -# define UVuf "u" -# define UVof "o" -# define UVxf "x" -# define UVXf "X" -# endif +# error "cannot define IV/UV formats" # endif #endif @@ -4842,26 +5264,26 @@ #ifndef SvREFCNT_inc # ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - if (_sv) \ - (SvREFCNT(_sv))++; \ - _sv; \ +# define SvREFCNT_inc(sv) \ + ({ \ + SV * const _sv = (SV*)(sv); \ + if (_sv) \ + (SvREFCNT(_sv))++; \ + _sv; \ }) # else -# define SvREFCNT_inc(sv) \ +# define SvREFCNT_inc(sv) \ ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) # endif #endif #ifndef SvREFCNT_inc_simple # ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_simple(sv) \ - ({ \ - if (sv) \ - (SvREFCNT(sv))++; \ - (SV *)(sv); \ +# define SvREFCNT_inc_simple(sv) \ + ({ \ + if (sv) \ + (SvREFCNT(sv))++; \ + (SV *)(sv); \ }) # else # define SvREFCNT_inc_simple(sv) \ @@ -4871,11 +5293,11 @@ #ifndef SvREFCNT_inc_NN # ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_NN(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - SvREFCNT(_sv)++; \ - _sv; \ +# define SvREFCNT_inc_NN(sv) \ + ({ \ + SV * const _sv = (SV*)(sv); \ + SvREFCNT(_sv)++; \ + _sv; \ }) # else # define SvREFCNT_inc_NN(sv) \ @@ -4885,11 +5307,11 @@ #ifndef SvREFCNT_inc_void # ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_void(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - if (_sv) \ - (void)(SvREFCNT(_sv)++); \ +# define SvREFCNT_inc_void(sv) \ + ({ \ + SV * const _sv = (SV*)(sv); \ + if (_sv) \ + (void)(SvREFCNT(_sv)++); \ }) # else # define SvREFCNT_inc_void(sv) \ @@ -5249,6 +5671,11 @@ #ifndef SvPV_nomg_const_nolen # define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0) #endif + +#ifndef SvPV_nomg_nolen +# define SvPV_nomg_nolen(sv) ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ + ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, 0)) +#endif #ifndef SvPV_renew # define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \ SvPV_set((sv), (char *) saferealloc( \ @@ -5537,9 +5964,69 @@ #ifndef HvNAME_get # define HvNAME_get(hv) HvNAME(hv) #endif + #ifndef HvNAMELEN_get # define HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0) #endif + +#ifndef HvNAMELEN +# define HvNAMELEN(hv) HvNAMELEN_get(hv) +#endif + +#ifndef HvENAME +# define HvENAME(hv) HvNAME(hv) +#endif + +#ifndef HvENAMELEN +# define HvENAMELEN(hv) (HvENAME(hv) ? strlen(HvENAME(hv)) : 0) +#endif + +# if (PERL_BCDVERSION < 0x5010000) +#ifndef HvNAMEUTF8 +# define HvNAMEUTF8(hv) 0 +#endif + +#ifndef HvENAMEUTF8 +# define HvENAMEUTF8(hv) 0 +#endif + +#else +#ifndef HvNAMEUTF8 +# define HvNAMEUTF8(hv) (HvNAME_HEK(hv) ? HEK_UTF8(HvNAME_HEK(hv)) : 0) +#endif + +#ifndef HvENAMEUTF8 +# define HvENAMEUTF8(hv) HvNAMEUTF8(hv) +#endif + +#endif + +#ifndef gv_fetchpvn_flags +#if defined(NEED_gv_fetchpvn_flags) +static GV* DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types); +static +#else +extern GV* DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types); +#endif + +#ifdef gv_fetchpvn_flags +# undef gv_fetchpvn_flags +#endif +#define gv_fetchpvn_flags(a,b,c,d) DPPP_(my_gv_fetchpvn_flags)(aTHX_ a,b,c,d) +#define Perl_gv_fetchpvn_flags DPPP_(my_gv_fetchpvn_flags) + +#if defined(NEED_gv_fetchpvn_flags) || defined(NEED_gv_fetchpvn_flags_GLOBAL) + +GV* +DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types) { + char *namepv = savepvn(name, len); + GV* stash = gv_fetchpv(namepv, TRUE, SVt_PVHV); + Safefree(namepv); + return stash; +} + +#endif +#endif #ifndef GvSVn # define GvSVn(gv) GvSV(gv) #endif @@ -5548,16 +6035,16 @@ # define isGV_with_GP(gv) isGV(gv) #endif -#ifndef gv_fetchpvn_flags -# define gv_fetchpvn_flags(name, len, flags, svt) gv_fetchpv(name, flags, svt) -#endif - #ifndef gv_fetchsv # define gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), flags, svt) #endif #ifndef get_cvn_flags # define get_cvn_flags(name, namelen, flags) get_cv(name, flags) #endif + +#ifndef gv_init_pvn +# define gv_init_pvn(gv, stash, ptr, len, flags) gv_init(gv, stash, ptr, len, flags & GV_ADDMULTI ? TRUE : FALSE) +#endif #ifndef WARN_ALL # define WARN_ALL 0 #endif @@ -5838,6 +6325,25 @@ #ifndef SvGETMAGIC # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END #endif + +/* Some random bits for sv_unmagicext. These should probably be pulled in for + real and organized at some point */ +#ifndef HEf_SVKEY +# define HEf_SVKEY -2 +#endif + +#ifndef MUTABLE_PTR +#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) +# define MUTABLE_PTR(p) ({ void *_p = (p); _p; }) +#else +# define MUTABLE_PTR(p) ((void *) (p)) +#endif +#endif +#ifndef MUTABLE_SV +# define MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p)) +#endif + +/* end of random bits */ #ifndef PERL_MAGIC_sv # define PERL_MAGIC_sv '\0' #endif @@ -6153,6 +6659,100 @@ #endif +#if !defined(mg_findext) +#if defined(NEED_mg_findext) +static MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl); +static +#else +extern MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl); +#endif + +#define mg_findext DPPP_(my_mg_findext) +#define Perl_mg_findext DPPP_(my_mg_findext) + +#if defined(NEED_mg_findext) || defined(NEED_mg_findext_GLOBAL) + +MAGIC * +DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl) { + if (sv) { + MAGIC *mg; + +#ifdef AvPAD_NAMELIST + assert(!(SvTYPE(sv) == SVt_PVAV && AvPAD_NAMELIST(sv))); +#endif + + for (mg = SvMAGIC (sv); mg; mg = mg->mg_moremagic) { + if (mg->mg_type == type && mg->mg_virtual == vtbl) + return mg; + } + } + + return NULL; +} + +#endif +#endif + +#if !defined(sv_unmagicext) +#if defined(NEED_sv_unmagicext) +static int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl); +static +#else +extern int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl); +#endif + +#ifdef sv_unmagicext +# undef sv_unmagicext +#endif +#define sv_unmagicext(a,b,c) DPPP_(my_sv_unmagicext)(aTHX_ a,b,c) +#define Perl_sv_unmagicext DPPP_(my_sv_unmagicext) + +#if defined(NEED_sv_unmagicext) || defined(NEED_sv_unmagicext_GLOBAL) + +int +DPPP_(my_sv_unmagicext)(pTHX_ SV *const sv, const int type, MGVTBL *vtbl) +{ + MAGIC* mg; + MAGIC** mgp; + + if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv)) + return 0; + mgp = &(SvMAGIC(sv)); + for (mg = *mgp; mg; mg = *mgp) { + const MGVTBL* const virt = mg->mg_virtual; + if (mg->mg_type == type && virt == vtbl) { + *mgp = mg->mg_moremagic; + if (virt && virt->svt_free) + virt->svt_free(aTHX_ sv, mg); + if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) { + if (mg->mg_len > 0) + Safefree(mg->mg_ptr); + else if (mg->mg_len == HEf_SVKEY) /* Questionable on older perls... */ + SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr)); + else if (mg->mg_type == PERL_MAGIC_utf8) + Safefree(mg->mg_ptr); + } + if (mg->mg_flags & MGf_REFCOUNTED) + SvREFCNT_dec(mg->mg_obj); + Safefree(mg); + } + else + mgp = &mg->mg_moremagic; + } + if (SvMAGIC(sv)) { + if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */ + mg_magical(sv); /* else fix the flags now */ + } + else { + SvMAGICAL_off(sv); + SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT; + } + return 0; +} + +#endif +#endif + #ifdef USE_ITHREADS #ifndef CopFILE # define CopFILE(c) ((c)->cop_file) @@ -6192,8 +6792,8 @@ #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ - || (CopSTASHPV(c) && HvNAME(hv) \ - && strEQ(CopSTASHPV(c), HvNAME(hv))))) + || (CopSTASHPV(c) && HvNAME(hv) \ + && strEQ(CopSTASHPV(c), HvNAME(hv))))) #endif #else @@ -6242,6 +6842,90 @@ #endif #endif /* USE_ITHREADS */ + +#if (PERL_BCDVERSION >= 0x5006000) +#ifndef caller_cx + +# if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL) +static I32 +DPPP_dopoptosub_at(const PERL_CONTEXT *cxstk, I32 startingblock) +{ + I32 i; + + for (i = startingblock; i >= 0; i--) { + register const PERL_CONTEXT * const cx = &cxstk[i]; + switch (CxTYPE(cx)) { + default: + continue; + case CXt_EVAL: + case CXt_SUB: + case CXt_FORMAT: + return i; + } + } + return i; +} +# endif + +# if defined(NEED_caller_cx) +static const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp); +static +#else +extern const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp); +#endif + +#ifdef caller_cx +# undef caller_cx +#endif +#define caller_cx(a,b) DPPP_(my_caller_cx)(aTHX_ a,b) +#define Perl_caller_cx DPPP_(my_caller_cx) + +#if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL) + +const PERL_CONTEXT * +DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp) +{ + register I32 cxix = DPPP_dopoptosub_at(cxstack, cxstack_ix); + register const PERL_CONTEXT *cx; + register const PERL_CONTEXT *ccstack = cxstack; + const PERL_SI *top_si = PL_curstackinfo; + + for (;;) { + /* we may be in a higher stacklevel, so dig down deeper */ + while (cxix < 0 && top_si->si_type != PERLSI_MAIN) { + top_si = top_si->si_prev; + ccstack = top_si->si_cxstack; + cxix = DPPP_dopoptosub_at(ccstack, top_si->si_cxix); + } + if (cxix < 0) + return NULL; + /* caller() should not report the automatic calls to &DB::sub */ + if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 && + ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub)) + count++; + if (!count--) + break; + cxix = DPPP_dopoptosub_at(ccstack, cxix - 1); + } + + cx = &ccstack[cxix]; + if (dbcxp) *dbcxp = cx; + + if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) { + const I32 dbcxix = DPPP_dopoptosub_at(ccstack, cxix - 1); + /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the + field below is defined for any cx. */ + /* caller() should not report the automatic calls to &DB::sub */ + if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub)) + cx = &ccstack[dbcxix]; + } + + return cx; +} + +# endif +#endif /* caller_cx */ +#endif /* 5.6.0 */ #ifndef IN_PERL_COMPILETIME # define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) #endif @@ -6417,7 +7101,7 @@ digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; - if (++s < send) { + if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; @@ -6465,7 +7149,7 @@ } } } - } + } } } } @@ -6477,7 +7161,7 @@ } } } - } + } } } numtype |= IS_NUMBER_IN_UV; @@ -6630,22 +7314,22 @@ value_nv = (NV) value; } value_nv *= 2.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount. */ + /* If an NV has not enough bits in its mantissa to + * represent a UV this summing of small low-order numbers + * is a waste of time (because the NV cannot preserve + * the low-order bits anyway): we could just remember when + * did we overflow and in the end just multiply value_nv by the + * right amount. */ value_nv += (NV)(bit - '0'); continue; } if (bit == '_' && len && allow_underscores && (bit = s[1]) && (bit == '0' || bit == '1')) - { - --len; - ++s; + { + --len; + ++s; goto redo; - } + } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal binary digit '%c' ignored", *s); break; @@ -6653,10 +7337,10 @@ if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) + || (!overflowed && value > 0xffffffff ) #endif - ) { - warn("Binary number > 0b11111111111111111111111111111111 non-portable"); + ) { + warn("Binary number > 0b11111111111111111111111111111111 non-portable"); } *len_p = s - start; if (!overflowed) { @@ -6716,7 +7400,7 @@ } for (; len-- && *s; s++) { - xdigit = strchr((char *) PL_hexdigit, *s); + xdigit = strchr((char *) PL_hexdigit, *s); if (xdigit) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. @@ -6732,22 +7416,22 @@ value_nv = (NV) value; } value_nv *= 16.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount of 16-tuples. */ + /* If an NV has not enough bits in its mantissa to + * represent a UV this summing of small low-order numbers + * is a waste of time (because the NV cannot preserve + * the low-order bits anyway): we could just remember when + * did we overflow and in the end just multiply value_nv by the + * right amount of 16-tuples. */ value_nv += (NV)((xdigit - PL_hexdigit) & 15); continue; } if (*s == '_' && len && allow_underscores && s[1] - && (xdigit = strchr((char *) PL_hexdigit, s[1]))) - { - --len; - ++s; + && (xdigit = strchr((char *) PL_hexdigit, s[1]))) + { + --len; + ++s; goto redo; - } + } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal hexadecimal digit '%c' ignored", *s); break; @@ -6755,10 +7439,10 @@ if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) + || (!overflowed && value > 0xffffffff ) #endif - ) { - warn("Hexadecimal number > 0xffffffff non-portable"); + ) { + warn("Hexadecimal number > 0xffffffff non-portable"); } *len_p = s - start; if (!overflowed) { @@ -6820,22 +7504,22 @@ value_nv = (NV) value; } value_nv *= 8.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount of 8-tuples. */ + /* If an NV has not enough bits in its mantissa to + * represent a UV this summing of small low-order numbers + * is a waste of time (because the NV cannot preserve + * the low-order bits anyway): we could just remember when + * did we overflow and in the end just multiply value_nv by the + * right amount of 8-tuples. */ value_nv += (NV)digit; continue; } if (digit == ('_' - '0') && len && allow_underscores && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) - { - --len; - ++s; + { + --len; + ++s; goto redo; - } + } /* Allow \octal to work the DWIM way (that is, stop scanning * as soon as non-octal characters are seen, complain only iff * someone seems to want to use the digits eight and nine). */ @@ -6848,10 +7532,10 @@ if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) + || (!overflowed && value > 0xffffffff ) #endif - ) { - warn("Octal number > 037777777777 non-portable"); + ) { + warn("Octal number > 037777777777 non-portable"); } *len_p = s - start; if (!overflowed) { @@ -6893,7 +7577,7 @@ #endif va_end(ap); if (retval < 0 || (len > 0 && (Size_t)retval >= len)) - Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); + Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); return retval; } @@ -7097,7 +7781,7 @@ octbuf[0] = esc; if (!(flags & PERL_PV_ESCAPE_NOCLEAR)) - sv_setpvs(dsv, ""); + sv_setpvs(dsv, ""); #if defined(is_utf8_string) && defined(utf8_to_uvchr) if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count)) @@ -7107,59 +7791,59 @@ for (; pv < end && (!max || wrote < max) ; pv += readsize) { const UV u = #if defined(is_utf8_string) && defined(utf8_to_uvchr) - isuni ? utf8_to_uvchr((U8*)pv, &readsize) : + isuni ? utf8_to_uvchr((U8*)pv, &readsize) : #endif - (U8)*pv; + (U8)*pv; const U8 c = (U8)u & 0xFF; if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) { if (flags & PERL_PV_ESCAPE_FIRSTCHAR) chsize = my_snprintf(octbuf, sizeof octbuf, - "%"UVxf, u); + "%" UVxf, u); else chsize = my_snprintf(octbuf, sizeof octbuf, - "%cx{%"UVxf"}", esc, u); + "%cx{%" UVxf "}", esc, u); } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) { chsize = 1; } else { if (c == dq || c == esc || !isPRINT(c)) { - chsize = 2; + chsize = 2; switch (c) { - case '\\' : /* fallthrough */ - case '%' : if (c == esc) - octbuf[1] = esc; - else - chsize = 1; - break; - case '\v' : octbuf[1] = 'v'; break; - case '\t' : octbuf[1] = 't'; break; - case '\r' : octbuf[1] = 'r'; break; - case '\n' : octbuf[1] = 'n'; break; - case '\f' : octbuf[1] = 'f'; break; + case '\\' : /* fallthrough */ + case '%' : if (c == esc) + octbuf[1] = esc; + else + chsize = 1; + break; + case '\v' : octbuf[1] = 'v'; break; + case '\t' : octbuf[1] = 't'; break; + case '\r' : octbuf[1] = 'r'; break; + case '\n' : octbuf[1] = 'n'; break; + case '\f' : octbuf[1] = 'f'; break; case '"' : if (dq == '"') - octbuf[1] = '"'; - else - chsize = 1; - break; - default: chsize = my_snprintf(octbuf, sizeof octbuf, - pv < end && isDIGIT((U8)*(pv+readsize)) - ? "%c%03o" : "%c%o", esc, c); + octbuf[1] = '"'; + else + chsize = 1; + break; + default: chsize = my_snprintf(octbuf, sizeof octbuf, + pv < end && isDIGIT((U8)*(pv+readsize)) + ? "%c%03o" : "%c%o", esc, c); } } else { chsize = 1; } - } - if (max && wrote + chsize > max) { - break; + } + if (max && wrote + chsize > max) { + break; } else if (chsize > 1) { sv_catpvn(dsv, octbuf, chsize); wrote += chsize; - } else { - char tmp[2]; - my_snprintf(tmp, sizeof tmp, "%c", c); + } else { + char tmp[2]; + my_snprintf(tmp, sizeof tmp, "%c", c); sv_catpvn(dsv, tmp, 1); - wrote++; - } + wrote++; + } if (flags & PERL_PV_ESCAPE_FIRSTCHAR) break; } @@ -7196,7 +7880,7 @@ STRLEN escaped; if (!(flags & PERL_PV_PRETTY_NOCLEAR)) - sv_setpvs(dsv, ""); + sv_setpvs(dsv, ""); if (dq == '"') sv_catpvs(dsv, "\""); @@ -7212,12 +7896,12 @@ sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color)); if (dq == '"') - sv_catpvs(dsv, "\""); + sv_catpvs(dsv, "\""); else if (flags & PERL_PV_PRETTY_LTGT) sv_catpvs(dsv, ">"); if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count) - sv_catpvs(dsv, "..."); + sv_catpvs(dsv, "..."); return SvPVX(dsv); } @@ -7246,7 +7930,7 @@ { pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP); if (len > cur && pv[cur] == '\0') - sv_catpvs(dsv, "\\0"); + sv_catpvs(dsv, "\\0"); return SvPVX(dsv); } diff -Nru libcpanel-json-xs-perl-3.0210/README libcpanel-json-xs-perl-3.0239/README --- libcpanel-json-xs-perl-3.0210/README 2015-12-03 11:58:44.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/README 2017-08-28 20:47:24.000000000 +0000 @@ -62,8 +62,8 @@ * strict checking of JSON correctness There is no guessing, no generating of illegal JSON texts by - default, and only JSON is accepted as input by default (the latter - is a security feature). + default, and only JSON is accepted as input by default. the latter + is a security feature. * fast @@ -105,19 +105,26 @@ represent the same number are here treated as numbers, not strings. Cpanel::JSON::XS is a bit slower, but preserves numeric types better. + - numbers ending with .0 stay numbers, are not converted to integers. + [#63] dual-vars which are represented as number not integer (42+"bar" != + 5.8.9) are now encoded as number (=> 42.0) because internally it's now a + NOK type. However !!1 which is wrongly encoded in 5.8 as "1"/1.0 is + still represented as integer. + - different handling of inf/nan. Default now to null, optionally with - -DSTRINGIFY_INFNAN to "inf"/"nan". [#28, #32] + stringify_infnan() to "inf"/"nan". [#28, #32] - added "binary" extension, non-JSON and non JSON parsable, allows "\xNN" and "\NNN" sequences. - 5.6.2 support; sacrificing some utf8 features (assuming bytes - all-over), no multi-byte unicode characters. + all-over), no multi-byte unicode characters with 5.6. - interop for true/false overloading. JSON::XS, JSON::PP and Mojo::JSON representations for booleans are accepted and JSON::XS accepts Cpanel::JSON::XS booleans [#13, #37] Fixed overloading of booleans. - Cpanel::JSON::XS::true stringifies now to true, not 1. + Cpanel::JSON::XS::true stringifies again to "1", not "true", analog to + all other JSON modules. - native boolean mapping of yes and no to true and false, as in YAML::XS. In perl "!0" is yes, "!1" is no. The JSON value true maps to @@ -130,7 +137,9 @@ - is_bool can be called as method, JSON::XS::is_bool not. - - Performance Optimizations for threaded Perls + - performance optimizations for threaded Perls + + - relaxed mode, allowing many popular extensions - additional fixes for: @@ -143,6 +152,14 @@ - #41 overloading of booleans, use the object not the reference. + - #62 -Dusequadmath conversion and no SEGV. + + - #72 parsing of values followed \0, like 1\0 does fail. + + - #72 parsing of illegal unicode or non-unicode characters. + + - #96 locale-insensitive numeric conversion + - public maintenance and bugtracker - use ppport.h, sanify XS.xs comment styles, harness C coding style @@ -150,9 +167,18 @@ - common::sense is optional. When available it is not used in the published production module, just during development and testing. - - extended testsuite + - extended testsuite, passes all http://seriot.ch/parsing_json.html + tests. In fact it is the only know JSON decoder which does so, while + also being the fastest. + + - support many more options and methods from JSON::PP: stringify_infnan, + allow_unknown, allow_stringify, allow_barekey, encode_stringify, + allow_bignum, allow_singlequote, sort_by (partially), escape_slash, + convert_blessed, ... optional decode_json(, allow_nonref) arg. relaxed + implements allow_dupkeys. - - support many more options and methods from JSON::PP + - support all 5 unicode BOM's: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, + UTF-32BE, encoding internally to UTF-8. FUNCTIONAL INTERFACE The following convenience methods are provided by this module. They are @@ -229,6 +255,17 @@ 5. A string containing "high" (> 255) character values is *not* a UTF-8 string. + 6. Unicode noncharacters only warn, as in core. + The 66 Unicode noncharacters U+FDD0..U+FDEF, and U+*FFFE, U+*FFFF + just warn, see . + But illegal surrogate pairs fail to parse. + + 7. Raw non-Unicode characters above U+10FFFF are disallowed. + Raw non-Unicode characters outside the valid unicode range fail to + parse, because "A string is a sequence of zero or more Unicode + characters" RFC 7159 section 1 and "JSON text SHALL be encoded in + Unicode RFC 7159 section 8.1. We use now the UTF8_DISALLOW_SUPER + flag when parsing unicode. I hope this helps :) @@ -508,6 +545,13 @@ { foo:"bar" } + * duplicate keys + + With relaxed decoding of duplicate keys does not error and are + silently accepted. See : + RFC 7159 section 4: "The names within an object should be + unique." + $json = $json->canonical ([$enable]) $enabled = $json->get_canonical If $enable is true (or missing), then the "encode" method will @@ -837,21 +881,27 @@ If no argument is given, the limit check will be deactivated (same as when 0 is specified). - See SECURITY CONSIDERATIONS, below, for more info on why this is + See "SECURITY CONSIDERATIONS", below, for more info on why this is useful. $json->stringify_infnan ([$infnan_mode = 1]) $infnan_mode = $json->get_stringify_infnan - Get or set how Cpanel::JSON::XS encodes "inf" or "nan" for numeric - values. + Get or set how Cpanel::JSON::XS encodes "inf", "-inf" or "nan" for + numeric values. Also qnan, snan or negative nan on some platforms. "null": infnan_mode = 0. Similar to most JSON modules in other - languages. + languages. Always null. - stringified: infnan_mode = 1. As in Mojo::JSON. + stringified: infnan_mode = 1. As in Mojo::JSON. Platform specific + strings. Stringified via sprintf(%g), with double quotes. - inf/nan: infnan_mode = 2. As in JSON::XS, and older releases. - Produces invalid JSON. + inf/nan: infnan_mode = 2. As in JSON::XS, and older releases. Passes + through platform dependent values, invalid JSON. Stringified via + sprintf(%g), but without double quotes. + + "inf/-inf/nan": infnan_mode = 3. Platform independent inf/nan/-inf + strings. No QNAN/SNAN/negative NAN support, unified to "nan". Much + easier to detect, but may conflict with valid strings. $json_text = $json->encode ($perl_scalar) Converts the given Perl data structure (a simple scalar or a @@ -880,7 +930,7 @@ protocol and you need to know where the JSON text ends. Cpanel::JSON::XS->new->decode_prefix ("[1] the tail") - => ([], 3) + => ([1], 3) $json->to_json ($perl_hash_or_arrayref) Deprecated method for perl 5.8 and newer. Use encode_json instead. @@ -1121,6 +1171,26 @@ fact that we are trying to be correct (bear with me if I am wrong, I never ran the above example :). +BOM + Detect all unicode Byte Order Marks on decode. Which are UTF-8, + UTF-16LE, UTF-16BE, UTF-32LE and UTF-32BE. + + Warning: With perls older than 5.20 you need load the Encode module + before loading a multibyte BOM, i.e. >= UTF-16. Otherwise an error is + thrown. This is an implementation limitation and might get fixed later. + + See *"JSON text SHALL + be encoded in UTF-8, UTF-16, or UTF-32."* + + *"Implementations MUST NOT add a byte order mark to the beginning of a + JSON text", "implementations (...) MAY ignore the presence of a byte + order mark rather than treating it as an error".* + + See also . + + Beware that Cpanel::JSON::XS is currently the only JSON module which + does accept and decode a BOM. + MAPPING This section describes how Cpanel::JSON::XS maps Perl values to JSON values and vice versa. These mappings are designed to "do the right @@ -1242,7 +1312,7 @@ respectively. You can also use "\1" and "\0" or "!0" and "!1" directly if you want. - encode_json [Cpanel::JSON::XS::true, Cpanel::JSON::XS::true] # yields [false,true] + encode_json [Cpanel::JSON::XS::true, Cpanel::JSON::XS::true] # yields [false,true] encode_json [!1, !0] # yields [false,true] blessed objects @@ -1579,6 +1649,17 @@ This works because "__proto__" is not valid outside of strings, so every occurrence of ""__proto__"\s*:" must be a string used as property name. + Unicode non-characters between U+FFFD and U+10FFFF are decoded either to + the recommended U+FFFD REPLACEMENT CHARACTER (see Unicode PR #121: + Recommended Practice for Replacement Characters), or in the binary or + relaxed mode left as is, keeping the illegal non-characters as before. + + Raw non-Unicode characters outside the valid unicode range fail now to + parse, because "A string is a sequence of zero or more Unicode + characters" RFC 7159 section 1 and "JSON text SHALL be encoded in + Unicode RFC 7159 section 8.1. We use now the UTF8_DISALLOW_SUPER flag + when parsing unicode. + If you know of other incompatibilities, please let me know. JSON and YAML @@ -1664,6 +1745,25 @@ INTEROP with JSON and JSON::XS and other JSON modules + As long as you only serialize data that can be directly expressed in + JSON, "Cpanel::JSON::XS" is incapable of generating invalid JSON output + (modulo bugs, but "JSON::XS" has found more bugs in the official JSON + testsuite (1) than the official JSON testsuite has found in "JSON::XS" + (0)). "Cpanel::JSON::XS" is currently the only known JSON decoder which + passes all tests, while being the + fastest also. + + When you have trouble decoding JSON generated by this module using other + decoders, then it is very likely that you have an encoding mismatch or + the other decoder is broken. + + When decoding, "JSON::XS" is strict by default and will likely catch all + errors. There are currently two settings that change this: "relaxed" + makes "JSON::XS" accept (but not generate) some non-standard extensions, + and "allow_tags" or "allow_blessed" will allow you to encode and decode + Perl objects, at the cost of being totally insecure and not outputting + valid JSON anymore. + JSON-XS-3.01 broke interoperability with JSON-2.90 with booleans. See JSON. @@ -1684,11 +1784,71 @@ I cannot think of any reason to still use JSON::XS anymore. + TAGGED VALUE SYNTAX AND STANDARD JSON EN/DECODERS + When you use "allow_tags" to use the extended (and also nonstandard and + invalid) JSON syntax for serialized objects, and you still want to + decode the generated serialize objects, you can run a regex to replace + the tagged syntax by standard JSON arrays (it only works for "normal" + package names without comma, newlines or single colons). First, the + readable Perl version: + + # if your FREEZE methods return no values, you need this replace first: + $json =~ s/\( \s* (" (?: [^\\":,]+|\\.|::)* ") \s* \) \s* \[\s*\]/[$1]/gx; + + # this works for non-empty constructor arg lists: + $json =~ s/\( \s* (" (?: [^\\":,]+|\\.|::)* ") \s* \) \s* \[/[$1,/gx; + + And here is a less readable version that is easy to adapt to other + languages: + + $json =~ s/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/[$1,/g; + + Here is an ECMAScript version (same regex): + + json = json.replace (/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/g, "[$1,"); + + Since this syntax converts to standard JSON arrays, it might be hard to + distinguish serialized objects from normal arrays. You can prepend a + "magic number" as first array element to reduce chances of a collision: + + $json =~ s/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/["XU1peReLzT4ggEllLanBYq4G9VzliwKF",$1,/g; + + And after decoding the JSON text, you could walk the data structure + looking for arrays with a first element of + "XU1peReLzT4ggEllLanBYq4G9VzliwKF". + + The same approach can be used to create the tagged format with another + encoder. First, you create an array with the magic string as first + member, the classname as second, and constructor arguments last, encode + it as part of your JSON structure, and then: + + $json =~ s/\[\s*"XU1peReLzT4ggEllLanBYq4G9VzliwKF"\s*,\s*("([^\\":,]+|\\.|::)*")\s*,/($1)[/g; + + Again, this has some limitations - the magic string must not be encoded + with character escapes, and the constructor arguments must be non-empty. + +RFC7159 + Since this module was written, Google has written a new JSON RFC, RFC + 7159 (and RFC7158). Unfortunately, this RFC breaks compatibility with + both the original JSON specification on www.json.org and RFC4627. + + As far as I can see, you can get partial compatibility when parsing by + using "->allow_nonref". However, consider the security implications of + doing so. + + I haven't decided yet when to break compatibility with RFC4627 by + default (and potentially leave applications insecure) and change the + default to follow RFC7159, but application authors are well advised to + call "->allow_nonref(0)" even if this is the current default, if they + cannot handle non-reference values, in preparation for the day when the + default will change. + SECURITY CONSIDERATIONS - JSON::XS is not only fast, JSON is generally the most secure serializing - format, because it is the only one besides Data::MessagePack, which does - not deserialize objects per default. For all languages, not just perl. - The binary variant BSON (MongoDB) does more but is unsafe. + JSON::XS and Cpanel::JSON::XS are not only fast. JSON is generally the + most secure serializing format, because it is the only one besides + Data::MessagePack, which does not deserialize objects per default. For + all languages, not just perl. The binary variant BSON (MongoDB) does + more but is unsafe. It is trivial for any attacker to create such serialized objects in JSON and trick perl into expanding them, thereby triggering certain methods. @@ -1757,6 +1917,45 @@ about getting security right). You might also want to also look at Mojo::JSON special escape rules to prevent from XSS attacks. +"OLD" VS. "NEW" JSON (RFC 4627 VS. RFC 7159) + TL;DR: Due to security concerns, Cpanel::JSON::XS will not allow scalar + data in JSON texts by default - you need to create your own + Cpanel::JSON::XS object and enable "allow_nonref": + + my $json = JSON::XS->new->allow_nonref; + + $text = $json->encode ($data); + $data = $json->decode ($text); + + The long version: JSON being an important and supposedly stable format, + the IETF standardized it as RFC 4627 in 2006. Unfortunately the inventor + of JSON Douglas Crockford unilaterally changed the definition of JSON in + javascript. Rather than create a fork, the IETF decided to standardize + the new syntax (apparently, so I as told, without finding it very + amusing). + + The biggest difference between the original JSON and the new JSON is + that the new JSON supports scalars (anything other than arrays and + objects) at the top-level of a JSON text. While this is strictly + backwards compatible to older versions, it breaks a number of protocols + that relied on sending JSON back-to-back, and is a minor security + concern. + + For example, imagine you have two banks communicating, and on one side, + the JSON coder gets upgraded. Two messages, such as 10 and 1000 might + then be confused to mean 101000, something that couldn't happen in the + original JSON, because neither of these messages would be valid JSON. + + If one side accepts these messages, then an upgrade in the coder on + either side could result in this becoming exploitable. + + This module has always allowed these messages as an optional extension, + by default disabled. The security concerns are the reason why the + default is still disabled, but future versions might/will likely upgrade + to the newer RFC as default format, so you are advised to check your + implementation and/or override the default with "->allow_nonref (0)" to + ensure that future versions are safe. + THREADS Cpanel::JSON::XS has proper ithreads support, unlike JSON::XS. If you encounter any bugs with thread support please report them. @@ -1795,8 +1994,8 @@ AUTHOR Marc Lehmann , http://home.schmorp.de/ - Reini Urban , http://cpanel.net/ + Reini Urban MAINTAINER - Reini Urban + Reini Urban diff -Nru libcpanel-json-xs-perl-3.0210/SIGNATURE libcpanel-json-xs-perl-3.0239/SIGNATURE --- libcpanel-json-xs-perl-3.0210/SIGNATURE 2015-12-03 11:58:44.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/SIGNATURE 2017-08-28 20:47:23.000000000 +0000 @@ -1,5 +1,5 @@ This file contains message digests of all files listed in MANIFEST, -signed via the Module::Signature module, version 0.79. +signed via the Module::Signature module, version 0.81. To verify the content in this distribution, first make sure you have Module::Signature installed, then type: @@ -14,24 +14,25 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -SHA1 be3d9d0a89cb8ec853b170eb93cbd0abfc4edca2 .travis.yml +SHA1 b1dc76bb84e636c3d4a32dc6676ae3259fa25aeb .appveyor.yml +SHA1 dc43f44fb1538b019f6b00c3b761bcdef76e7d2b .travis.yml SHA1 9a56f3b919dfc8fced3803e165a2e38de62646e5 COPYING -SHA1 2280546ea2461d3be546df7dc272183b9c48183c Changes -SHA1 3bf42be051c399e70f2b06cdfc089237e3ca9fa9 MANIFEST -SHA1 0ef2466c294aa2e1cee891db1494e83c9d1ebe84 META.json -SHA1 fe31cc3af19925a7745889d151df57a22c84087a META.yml -SHA1 90a51c05087f4e3eba0714a4c6ccf27d6eb0bd82 Makefile.PL -SHA1 267adbbc2a9e9767bafed47998540d1872287df3 README -SHA1 d766e9e8bff794b4f6e2877f977d09b890c0d99e XS.pm -SHA1 ffdb901a580893087679ca2fac4873e1a88f1023 XS.xs +SHA1 0370d23d2788a9fff4b11b3da04e2c894726a84d Changes +SHA1 1cb5b409cb86b392753ca0ea2d6ba718f104b128 MANIFEST +SHA1 80f61782c08de2746de12e5d1013940e12bb239c META.json +SHA1 98dc4055706e8f13b795a76b519fd6e29be14a9c META.yml +SHA1 9f4e725e4e2fa7e255d1fce4314446c77da64035 Makefile.PL +SHA1 13237f66b5b6778d16cb6b3b272982de5915348d README +SHA1 a03084f5e53fb04ca5a321a6d08df75554cba08c XS.pm +SHA1 57678a8bc9cf245050947691fcf4c34defdd0885 XS.xs SHA1 27b0bc7e0cd6fe90876fb3d285065c6a07cca028 XS/Boolean.pm -SHA1 de7ac568367689ba02ccc53a023d584837682f57 bin/cpanel_json_xs +SHA1 9e4b04d1af085e6959aaed51734475d350136392 bin/cpanel_json_xs SHA1 ea72bbe602baaabdd0004ef1d7e7cc3334b42bb4 eg/bench -SHA1 d169c475eede0a30a9935619fec7352deeabc8d5 ppport.h +SHA1 6e5d2153e1931be4e416c8feef7f7dfcab0f91b4 ppport.h SHA1 f7101031fd3fde35fe2421a07ab6cee8a822c00c t/00_load.t -SHA1 804042342d099ca069f83ac31df695a025fd9287 t/01_utf8.t +SHA1 c8f0471da3ab4cab5e197a5362e24c0e2958f589 t/01_utf8.t SHA1 9cf542e0bf68c90749420c7d07d7be80e1860592 t/02_error.t -SHA1 eabd83358318ba4c810ad709f7fe9b604cbbf3b2 t/03_types.t +SHA1 7ceff3f6fafe1ca6c3bb1c6e3042178753966013 t/03_types.t SHA1 d876bdffc381f4f67ec90f9c331e3ec2138946e2 t/04_dwiw_encode.t SHA1 94b1130a9b760102e0a24ad518f1e7439ef9122c t/05_dwiw_decode.t SHA1 d8c75d0fc7061469eba29275eb366b593c156f7d t/06_pc_pretty.t @@ -46,15 +47,15 @@ SHA1 446e9e23fbb26aca73c0c1cb168c6c31a68c9fb8 t/108_decode.t SHA1 d4d774595e581777fb13219a211c819c1d2f8575 t/109_encode.t SHA1 849b88cb5f17ca6c2324c78e1c4cb1d7857caccb t/10_pc_keysort.t -SHA1 4a1e536ea9f70f514657519358a9ed80c9c378fb t/110_bignum.t +SHA1 c7eafd2e355b664d969f9ca2d5a9874e70cc0396 t/110_bignum.t SHA1 b007b686bb590e5eed3976edc78310437ae169d4 t/112_upgrade.t SHA1 01a0a0644343059c7185cb0b3b00b869d5211e1d t/113_overloaded_eq.t -SHA1 bcd500ccfc0cfb65c3ce4a4fa101ce8f72b5450d t/114_decode_prefix.t +SHA1 8dece990d5b07df0ae1b6364caefced774cb587d t/114_decode_prefix.t SHA1 eb050780996f1e428c87bf6375415ca4c863cbb2 t/115_tie_ixhash.t SHA1 3477b0490b8666e451ac15df97f9f35d72c946b1 t/116_incr_parse_fixed.t -SHA1 55e868962b071e2b0eed29c29bbc2308f5cdada6 t/117_numbers.t -SHA1 45c400009dbe193dbd6f97fdd87f802a62d35b69 t/11_pc_expo.t -SHA1 477cdec7699e931fcc93ea7757f6e63af83ef1cb t/12_blessed.t +SHA1 25ca035b576130cf560953df4e9daf68bdd96c3c t/117_numbers.t +SHA1 d1003d09b5da3609977362bcda64b2c593039a6b t/11_pc_expo.t +SHA1 c0037e62cefc891df4bb84a110051963a60e9f8c t/12_blessed.t SHA1 4d553fd6b5e4486f087babff2946e0cb4b2c38fb t/13_limit.t SHA1 2b843abe875bf080d0c949663e32105a13c38122 t/14_latin1.t SHA1 6bc697086f8012be7df967738b560d188a775bcd t/15_prefix.t @@ -63,36 +64,377 @@ SHA1 1523ef12859072ba900344df5f1a8439c74fbad2 t/18_json_checker.t SHA1 33231a52e12866a61c405496947827485ff2a811 t/19_incr.t SHA1 8f266979e62b50271f353e5e6905e52d9038834b t/20_faihu.t -SHA1 16d67e7b9a2b721ee2487e408b7c57b13fca81a5 t/20_unknown.t +SHA1 562b9329aff83c441b29815e3987b467d0e983e4 t/20_unknown.t SHA1 1d9c81e5dfc27ff7f790354ce22af335cefe09c2 t/21_evans.t SHA1 3d155f37e687f929bd0cae767dc2dbf1993b73c9 t/22_comment_at_eof.t SHA1 1ffb0242c800720c565a9e148e184bfa9d54b1c4 t/23_array_ctx.t SHA1 2d2ccc7877250f80755a74acd0c3c2f21e606aae t/24_freeze_recursion.t -SHA1 de63833eb7d922d21339a210680ebf84508b987a t/25_boolean.t +SHA1 bc1bf7bba31c320aed7164fe377957a0f6a8be57 t/25_boolean.t +SHA1 b731e24e61fd24c19c7b2e636bf20b368fbc851e t/26_duplicate.t +SHA1 7f4c74f3c46477c513a2baf07a60c94969d2e0e9 t/30_jsonspec.t +SHA1 3705a4bc706627dde26e444f41342b88850cbe98 t/31_bom.t SHA1 ded6191143511074b0cfa5c7ff990e0cbaa11ff9 t/52_object.t SHA1 292cb103dae404294cb77c68e3f28a1239f603b9 t/53_readonly.t SHA1 cf201da353d9930435463aee512fa7dccbad96df t/54_stringify.t SHA1 f08d2ec9499dc0d0e5ede5691c75b865f466b69c t/55_modifiable.t SHA1 7ad4a15bfdec5bbd757a48a4670f0275fb2ffd71 t/96_interop.t -SHA1 2a644dd9f32ec6e634dae64e83a7605b146ea44a t/96_mojo.t +SHA1 1caf7492922f42dd78cf34b2de7bba5481f84fd8 t/96_interop_pp.t +SHA1 758322045b9e08bfd98122a662950eb86efb7180 t/96_mojo.t SHA1 3291c73ec3a19df551d0fff59695153616fc982a t/97_unshare_hek.t SHA1 1bf6336a76101f747b84c35cca38c4e8bacb9224 t/98_56only.t SHA1 e5e4ea9e68154f9adb4e5e19a86c96efb1704d02 t/99_binary.t SHA1 e6078e2fc5c375d45498494bb91487834601a189 t/_unicode_handling.pm -SHA1 40520e9823ae0ced03c40d113fd41f16973cbe11 t/z_kwalitee.t +SHA1 ef62decbf1634f795ef03babe0b36ab9855f263b t/appveyor-test.bat +SHA1 483157c2a683750b52011f4b6cc00fc3b4381d9a t/gh70-asan.t +SHA1 413be8df242f37f68aa3841888174e545cba5b2f t/test_parsing/i_number_neg_int_huge_exp.json +SHA1 fa1cc74fc07e84b1a18883a4f5e85472c41df793 t/test_parsing/i_number_pos_double_huge_exp.json +SHA1 143980cf8623793b0bf74cd81c0dc50b0f1d3dd3 t/test_parsing/i_object_key_lone_2nd_surrogate.json +SHA1 3cf0814f1b6f36b14bec9a70069fc26f25e4b98d t/test_parsing/i_string_1st_surrogate_but_2nd_missing.json +SHA1 95454cb86716bfe8118ca24aac82424043c1f5e2 t/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json +SHA1 5e43e61e7071a410252588a0958ca45c8457686c t/test_parsing/i_string_UTF-16_invalid_lonely_surrogate.json +SHA1 62a6ac51e289f1b989d4211377cf277380902354 t/test_parsing/i_string_UTF-16_invalid_surrogate.json +SHA1 1c2a82697913d75bb76c0be61355b8cbf0dea4b8 t/test_parsing/i_string_UTF-8_invalid_sequence.json +SHA1 97d5d4f3374c927e067b96ee794080f858fe83ba t/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json +SHA1 876ec17bb81c0b6ed0cfd5a9aa355f3c7c8ca46d t/test_parsing/i_string_incomplete_surrogate_pair.json +SHA1 b803dc77d4f3953ddbaff20d85a62bc247a04bf0 t/test_parsing/i_string_incomplete_surrogates_escape_valid.json +SHA1 4210a87f0ff4a019c3e5e5855055b1f766f899e6 t/test_parsing/i_string_inverted_surrogates_U+1D11E.json +SHA1 eded9ce5cad2f7d92155894453ba79140b6052be t/test_parsing/i_string_lone_second_surrogate.json +SHA1 a8566d94e5f6719582a19ed3a35c40da89dfa31d t/test_parsing/i_string_not_in_unicode_range.json +SHA1 4058957cd92bab4c50e99ebaec6232e0756c439c t/test_parsing/i_string_truncated-utf-8.json +SHA1 efac36327dac0c8b48f548cc71f662e6ec7ca7d0 t/test_parsing/i_string_unicode_U+10FFFE_nonchar.json +SHA1 333881475a2d6c4ae8ada72db42b3de6aced8b76 t/test_parsing/i_string_unicode_U+1FFFE_nonchar.json +SHA1 0ba66628d40d3e1ad03e54a77780613e020adfb9 t/test_parsing/i_string_unicode_U+FDD0_nonchar.json +SHA1 c68f08451ea14720f185d4c6981456007c557ddf t/test_parsing/i_string_unicode_U+FFFE_nonchar.json +SHA1 27608ace0c237d89b51a89eea37606864ae72bf0 t/test_parsing/i_structure_500_nested_arrays.json +SHA1 1284e1793e8a70814b49593ea768bf3188739fb6 t/test_parsing/i_structure_UTF-8_BOM_empty_object.json +SHA1 384c095ccc7d6006381050bea87c29f0aa1ef7cb t/test_parsing/n_array_1_true_without_comma.json +SHA1 6bf503ddd90a4b147fb7e0734bd569cdc88b7fde t/test_parsing/n_array_a_invalid_utf8.json +SHA1 2f30c2b52968a26a2f0cd214c1084d7eeb11f186 t/test_parsing/n_array_colon_instead_of_comma.json +SHA1 e827e40e159f0af706d8232cacad3cfed4448ce0 t/test_parsing/n_array_comma_after_close.json +SHA1 83350fc20864a13b98f66a4d3a7558fff668d7c7 t/test_parsing/n_array_comma_and_number.json +SHA1 06b0ee289c88ffb650b7e8ce7173c00c7663e8e7 t/test_parsing/n_array_double_comma.json +SHA1 7e7148e0a00067f7823d915a3dbaa24f5af26f05 t/test_parsing/n_array_double_extra_comma.json +SHA1 aa47a8ed9175f3436ce738132144aed99b6b6044 t/test_parsing/n_array_extra_close.json +SHA1 be1aa7daf262458edb5972afb2d1555210457680 t/test_parsing/n_array_extra_comma.json +SHA1 74664ceaa753498426a6441480fceb6ed2cefa3b t/test_parsing/n_array_incomplete.json +SHA1 5c8554e2b9a26d332990f7183d2f52a67c456146 t/test_parsing/n_array_incomplete_invalid_value.json +SHA1 52c7d8740d925d0fefe0d8eabb92f92e94197b63 t/test_parsing/n_array_inner_array_no_comma.json +SHA1 a1aadcaafabfe1f49570e59cab54ea89d2f50a58 t/test_parsing/n_array_invalid_utf8.json +SHA1 c42a0743d9ac42d482fbca36508ee2e7b844afae t/test_parsing/n_array_items_separated_by_semicolon.json +SHA1 a35870abfe36c5087c497bea881bb345206835df t/test_parsing/n_array_just_comma.json +SHA1 d4c38d2690ef85ee7d9d87e0c06c82dda11f8c0d t/test_parsing/n_array_just_minus.json +SHA1 aaf53077fbc879ff0572527eb3789facdf634db3 t/test_parsing/n_array_missing_value.json +SHA1 b2d9bc2f4167fd29140d3a83d9cca06dd79f0973 t/test_parsing/n_array_newlines_unclosed.json +SHA1 036f70ab731494bc4a53c6db4bd734accda10ed3 t/test_parsing/n_array_number_and_comma.json +SHA1 5409e1d5c2bb8c7d4ee3a367f2a7cb0a68813a4d t/test_parsing/n_array_number_and_several_commas.json +SHA1 a24e5662a141d34adc7f5f34a544dd554ee601b1 t/test_parsing/n_array_spaces_vertical_tab_formfeed.json +SHA1 731634ff73e12680ba57a79bb4ffdbf6fa8a8f72 t/test_parsing/n_array_star_inside.json +SHA1 39151109c41a6fb8a450920e19d0cd12c554d42f t/test_parsing/n_array_unclosed.json +SHA1 c78db0f93e17e18c33e87135086267380f825e5f t/test_parsing/n_array_unclosed_trailing_comma.json +SHA1 53198c48337af3958aebc3087fc7ff5efb63086a t/test_parsing/n_array_unclosed_with_new_lines.json +SHA1 71441012ce3a4dd62dc6f737b5295ded9f6a701e t/test_parsing/n_array_unclosed_with_object_inside.json +SHA1 73f5ef4cc94ca1630afa8c46a08991d7f180072a t/test_parsing/n_incomplete_false.json +SHA1 473a04f450dd00364aff23eee1bcca1649365940 t/test_parsing/n_incomplete_null.json +SHA1 74805df7481943538e90d07aea9d3e175acb59db t/test_parsing/n_incomplete_true.json +SHA1 305e0f14e5954bcf66f9c33a33e1e9c8a6b091c8 t/test_parsing/n_number_++.json +SHA1 d2e0e33e6a3c14ed41ac78dd8a72e994890b741e t/test_parsing/n_number_+1.json +SHA1 8d1f877e00fcab034329a1fe31a31b130bd786d0 t/test_parsing/n_number_+Inf.json +SHA1 5a44729a928da81fa0a75de3748f90b828256cb5 t/test_parsing/n_number_-01.json +SHA1 e107377a7f61d90be82a37e7f9be4643b7828a85 t/test_parsing/n_number_-1.0..json +SHA1 a6062103892011767e52355cc82eb1db3ddb1a53 t/test_parsing/n_number_-2..json +SHA1 6f5a442fe0b5c68cfef37df372bf97b09632eb14 t/test_parsing/n_number_-NaN.json +SHA1 e50c21f6c7e47c770b613bb8c9c8b5008235687e t/test_parsing/n_number_.-1.json +SHA1 08684f8eb0feb366905e11f46afea90c73d901b4 t/test_parsing/n_number_.2e-3.json +SHA1 fbb08ba6cd12ccf617cc3fcaaf5517657f2d8d8f t/test_parsing/n_number_0.1.2.json +SHA1 cc5f0f341d82a63ad2ab0ef913f57d38c64200cb t/test_parsing/n_number_0.3e+.json +SHA1 ee607ea5bc16d58a98aaf4906a263f7b90bf16be t/test_parsing/n_number_0.3e.json +SHA1 04cbae87b181073691db8a674894a91c890c7f4f t/test_parsing/n_number_0.e1.json +SHA1 e3bb13ba78c3cf18b220a33326fafe0a9de86571 t/test_parsing/n_number_0_capital_E+.json +SHA1 81e5d292188c6c3480685c877a016b6b44fc6a14 t/test_parsing/n_number_0_capital_E.json +SHA1 aeee5db1207a3b3c5e0176bbfaab4c3a7bcbd652 t/test_parsing/n_number_0e+.json +SHA1 771a1b4f77d751080bb9c653ef6e9b622908b0ec t/test_parsing/n_number_0e.json +SHA1 b70ec296a35bf21f8bfea65661c76b03ce016000 t/test_parsing/n_number_1.0e+.json +SHA1 621a335771d036d00f9df225a51f24729e520daa t/test_parsing/n_number_1.0e-.json +SHA1 d459448a187eb9db05a515fd008775cf05ab05e8 t/test_parsing/n_number_1.0e.json +SHA1 770363e93efab55dbf005611c7c5d8a766214742 t/test_parsing/n_number_1_000.json +SHA1 60d94b2e1552a8e9608138aa6a6edb3412ad74c8 t/test_parsing/n_number_1eE2.json +SHA1 9120c9f1145d45e3fda8424c2aa321fb55577ebb t/test_parsing/n_number_2.e+3.json +SHA1 0a22db09b69f110248c6ceff2bae8e5f15cb8ca8 t/test_parsing/n_number_2.e-3.json +SHA1 ef74020e88dc84ce0622785824a35adc4b1e4390 t/test_parsing/n_number_2.e3.json +SHA1 a6382699b971f55d3220184fabfefb7eb1d44e8c t/test_parsing/n_number_9.e+.json +SHA1 471ea6c17ed385464e8237d98ea6d15079019b17 t/test_parsing/n_number_Inf.json +SHA1 8dd90bae5020c339fbd2dbdabe72c27b7d5c0a3a t/test_parsing/n_number_NaN.json +SHA1 8df9b16eff07243ff6bd73a9dd4305f44dd1abd6 t/test_parsing/n_number_U+FF11_fullwidth_digit_one.json +SHA1 6ad87a367d2fc16da9bcbd6bb5225e48b579be24 t/test_parsing/n_number_expression.json +SHA1 585b7dca64433a7b620fd7ba2c60db025ae79124 t/test_parsing/n_number_hex_1_digit.json +SHA1 e0563846cae7ad3b45d33d4b17498a81fe9c6acc t/test_parsing/n_number_hex_2_digits.json +SHA1 fd95cd42bd4280af5d068bccbb0f9b95b2561fc3 t/test_parsing/n_number_infinity.json +SHA1 eca7e126cc9c9796bc8fc8f23ec1b43534e6b78b t/test_parsing/n_number_invalid+-.json +SHA1 ecc235d85aa86c642a3ede6a5d3120d7b1c6c251 t/test_parsing/n_number_invalid-negative-real.json +SHA1 92f6913e3af36a4e736854302f60d44fc662e824 t/test_parsing/n_number_invalid-utf-8-in-bigger-int.json +SHA1 3ce1be004d7db40ec90be2ae2d416096f8ee7bad t/test_parsing/n_number_invalid-utf-8-in-exponent.json +SHA1 09d6b81714a880df438f2ca67f1054129cc85d94 t/test_parsing/n_number_invalid-utf-8-in-int.json +SHA1 daeb6acf2df9a6ba01a02fe45957bbf662d0e828 t/test_parsing/n_number_minus_infinity.json +SHA1 db84e9af4f42ecabd5c62462fef3012e2e04dc55 t/test_parsing/n_number_minus_sign_with_trailing_garbage.json +SHA1 994e10ccca6762aa38d0d11fe1431bb1c4c2df3e t/test_parsing/n_number_minus_space_1.json +SHA1 4f44e6e3a03fa87bc9b62c1e488ce356bd583ee8 t/test_parsing/n_number_neg_int_starting_with_zero.json +SHA1 d4a902450168f4e0c77ad3f6ee74fdbf381dad7a t/test_parsing/n_number_neg_real_without_int_part.json +SHA1 7381321bbebeb6bd3f2cbc3c48fd980f901d140f t/test_parsing/n_number_neg_with_garbage_at_end.json +SHA1 62a381c4eb90a2fa996140ba3a71182d2e1273e4 t/test_parsing/n_number_real_garbage_after_e.json +SHA1 4a77998b750e2552ad76eac1f3582f03679ca399 t/test_parsing/n_number_real_with_invalid_utf8_after_e.json +SHA1 1ef3bb8c133add0f16eafb72e7f2b3e320d50309 t/test_parsing/n_number_real_without_fractional_part.json +SHA1 b3f35b902ee9760e3d2924cfc98caf44a9214cc6 t/test_parsing/n_number_starting_with_dot.json +SHA1 e91fe173f59b063d620a934ce1a010f2b114c1f3 t/test_parsing/n_number_then_00.json +SHA1 b0e3e8baf91c6480bd3ba3ca42ccf18cbfbcd474 t/test_parsing/n_number_with_alpha.json +SHA1 6a093e372b0703237fb72524bdbd8f64fad0bffa t/test_parsing/n_number_with_alpha_char.json +SHA1 d437754cf6a2d4c446c3a3f1c35011892a058856 t/test_parsing/n_number_with_leading_zero.json +SHA1 b7e34cf6cdb5177a3d43ee0d51f05dce014d5ca2 t/test_parsing/n_object_bad_value.json +SHA1 cd0508fb8f279ec60c08df1f1dc5acb014ba589f t/test_parsing/n_object_bracket_key.json +SHA1 fe791c76e30e7262d85588b39d68de7f85067f69 t/test_parsing/n_object_comma_instead_of_colon.json +SHA1 83ab5829dce55b1198090fbd7627b3f8dc22645b t/test_parsing/n_object_double_colon.json +SHA1 2b8c3888ba7ce31aecb58489322c2619bbbb27a1 t/test_parsing/n_object_emoji.json +SHA1 9f193e3a423ba7ca57e7215194e3727ff2518c42 t/test_parsing/n_object_garbage_at_end.json +SHA1 662f315bb5246bbd49e2522e21a5a218a00051ee t/test_parsing/n_object_key_with_single_quotes.json +SHA1 ef4be493d0113b263826b4c73bcb70f770a68282 t/test_parsing/n_object_missing_colon.json +SHA1 05e9f7616a26540eceecb16183c5a45b55722929 t/test_parsing/n_object_missing_key.json +SHA1 8714f6e32b1bd119c34be57611aa1eb047007c54 t/test_parsing/n_object_missing_semicolon.json +SHA1 ce8a1d64be40efcf16cbd7c046f0992ee9f97823 t/test_parsing/n_object_missing_value.json +SHA1 f472d7f55d9b8c441e53877c3e05b34ca34aca6b t/test_parsing/n_object_no-colon.json +SHA1 9ca5ac7d63fe9e50c713c5359dc3a0578e8bfa9c t/test_parsing/n_object_non_string_key.json +SHA1 0ac304359e12a69bd97823d27e6e8adeeb33308b t/test_parsing/n_object_non_string_key_but_huge_number_instead.json +SHA1 8da379bf85a899af31e67f9afb595680cbd4fab9 t/test_parsing/n_object_pi_in_key_and_trailing_comma.json +SHA1 0293607c7a01a5bcf8ab33fcc715891826f40f3a t/test_parsing/n_object_repeated_null_null.json +SHA1 e31d9b505b0b49b1f50195e9a30eb4b5119f9211 t/test_parsing/n_object_several_trailing_commas.json +SHA1 81b1f0b548070c112915f7df8aa119bc88369c80 t/test_parsing/n_object_single_quote.json +SHA1 6dca76e9faf9df00d5c4b26aeb1d23b49f1721d3 t/test_parsing/n_object_trailing_comma.json +SHA1 7828c059e6688c23a191fb202be6849ef57bddb9 t/test_parsing/n_object_trailing_comment.json +SHA1 58d6e752273c3dc2a4c1bcce78e947e2306ca378 t/test_parsing/n_object_trailing_comment_open.json +SHA1 3a03da234730d1127123db13707a62979d2d4902 t/test_parsing/n_object_trailing_comment_slash_open.json +SHA1 8d97249942524454bc0beddf9f570438e40a20cf t/test_parsing/n_object_trailing_comment_slash_open_incomplete.json +SHA1 ecf36a061eada5f3a5aeefa7ff41ec5045c7be57 t/test_parsing/n_object_two_commas_in_a_row.json +SHA1 11a1995d282dd2b34f3f7967e629abe07b82f3d1 t/test_parsing/n_object_unquoted_key.json +SHA1 68f63f1a2de876e7d9cb0a325f9a09f07cb7982c t/test_parsing/n_object_unterminated-value.json +SHA1 4f67f25b2c34b70996c675f773fd75c78405b04d t/test_parsing/n_object_with_single_string.json +SHA1 9dc64285d62f72b8c325b378fff38b40bd550e8d t/test_parsing/n_object_with_trailing_garbage.json +SHA1 b858cb282617fb0956d960215c8e84d1ccf909c6 t/test_parsing/n_single_space.json +SHA1 5a0160957b6d00786777b2f58c90b557414a96e2 t/test_parsing/n_string_1_surrogate_then_escape.json +SHA1 3c69701234b50e3c1d041f532fd3da5ab0ecea1e t/test_parsing/n_string_1_surrogate_then_escape_u.json +SHA1 a9a3bade8f5286660f736137804561155f09ad19 t/test_parsing/n_string_1_surrogate_then_escape_u1.json +SHA1 5a3839116862e143fd1df96438cda9d57e04810d t/test_parsing/n_string_1_surrogate_then_escape_u1x.json +SHA1 354979309356f39c625194f31380e4366d0f2f1d t/test_parsing/n_string_UTF-16_incomplete_surrogate.json +SHA1 4ce359f3fb556b087622cb7e0f3f7fb5a0df4d58 t/test_parsing/n_string_UTF8_surrogate_U+D800.json +SHA1 9965eb205895155c4f66f11ce28426e082257301 t/test_parsing/n_string_accentuated_char_no_quotes.json +SHA1 cc32ad836ef43b8bda7846d84f4d4d3af0165cbe t/test_parsing/n_string_backslash_00.json +SHA1 614b073266198c4d83c74408d83e87400c39b41a t/test_parsing/n_string_escape_x.json +SHA1 f77d2fcabc0d6555b1f7504fb7c1c02a72709dc1 t/test_parsing/n_string_escaped_backslash_bad.json +SHA1 18d16af0bb0262e556b9fd7762d93b61beabd8f3 t/test_parsing/n_string_escaped_ctrl_char_tab.json +SHA1 fe2f39cd30d852db787b07fa8530db1805a3da05 t/test_parsing/n_string_escaped_emoji.json +SHA1 c7cd5679774abe0f9c9ce07f990c34dc5121c428 t/test_parsing/n_string_incomplete_escape.json +SHA1 986c36e2b54f907d0502800b5af62af2ae59a59b t/test_parsing/n_string_incomplete_escaped_character.json +SHA1 af09d432cfbc7e4d066493a865b01bd8c48091c8 t/test_parsing/n_string_incomplete_surrogate_escape_invalid.json +SHA1 0af1cdb8427298050aef55fbc04d7b16e22862c9 t/test_parsing/n_string_invalid-utf-8-in-escape.json +SHA1 22939abb9fe475c541a5d1c8a05abbe22ff6f264 t/test_parsing/n_string_invalid_backslash_esc.json +SHA1 4bde42407809843c8ff35c6342e44299e648f892 t/test_parsing/n_string_invalid_unicode_escape.json +SHA1 6525a3f84bbb11379002e141f24de13c963fb7f6 t/test_parsing/n_string_invalid_utf-8.json +SHA1 f756d7791ec51ab3d6395c9ddf76031b6e2406be t/test_parsing/n_string_invalid_utf8_after_escape.json +SHA1 8319aa8d307086c47267cceb60b0d2635f6a011a t/test_parsing/n_string_iso_latin_1.json +SHA1 ae407caf31596265790ef6065f64ad20ea7c3278 t/test_parsing/n_string_leading_uescaped_thinspace.json +SHA1 f4e0d2ec73530b541dcddaca0593cd03de039d17 t/test_parsing/n_string_lone_utf8_continuation_byte.json +SHA1 74791abc3392bce261bb8d9c7169d19a89ce212e t/test_parsing/n_string_no_quotes_with_bad_escape.json +SHA1 db420728ff9cdcafab01114615a266180dc2521a t/test_parsing/n_string_overlong_sequence_2_bytes.json +SHA1 6c673b8ddbeb9f0c08629c50496ce34c8725508e t/test_parsing/n_string_overlong_sequence_6_bytes.json +SHA1 e7e694f00a47c11232b243841fd654b7d6abef6c t/test_parsing/n_string_overlong_sequence_6_bytes_null.json +SHA1 2ace62c1befa19e3ea37dd52be9f6d508c5163e6 t/test_parsing/n_string_single_doublequote.json +SHA1 7b2952e86e777300b985c2bcb13f6864ee64c74e t/test_parsing/n_string_single_quote.json +SHA1 a9993e364706816aba3e25717850c26c9cd0d89d t/test_parsing/n_string_single_string_no_double_quotes.json +SHA1 20a8a6c4594d64f03701965218a9c71e1420ebe9 t/test_parsing/n_string_start_escape_unclosed.json +SHA1 9c1a275680408d1efa136624fe998f529f1b0583 t/test_parsing/n_string_unescaped_crtl_char.json +SHA1 f74a8f6200431cd0341b836eeaa0779606e206b9 t/test_parsing/n_string_unescaped_newline.json +SHA1 1f27f56cb5fbdc2aeca20a9f02e7ecbb3d39263c t/test_parsing/n_string_unescaped_tab.json +SHA1 a61339c959128dbf122d450db3c0d4aed0806764 t/test_parsing/n_string_unicode_CapitalU.json +SHA1 a1f355cb210be91e122e33593c01d7416fc2a4f9 t/test_parsing/n_string_with_trailing_garbage.json +SHA1 e66b4fdb6fc075c0fb92b0782033224da1585c98 t/test_parsing/n_structure_100000_opening_arrays.json +SHA1 ca0f78ce8928de90be17b9e0809051b44bd42002 t/test_parsing/n_structure_U+2060_word_joined.json +SHA1 57218c316b6921e2cd61027a2387edc31a2d9471 t/test_parsing/n_structure_UTF8_BOM_no_data.json +SHA1 0d924b9dd2ff2e38b6f4056d7ea559511bfaa53c t/test_parsing/n_structure_array_trailing_garbage.json +SHA1 a6eec0a78c8d1b98b47c9ba00f4ca75122f5b9e6 t/test_parsing/n_structure_array_with_extra_array_close.json +SHA1 eb2b00d9b883e901cf1e81603a416198ab6a83b9 t/test_parsing/n_structure_array_with_unclosed_string.json +SHA1 24bd594115195556439ee169c3ad7c7e4e6e1a8b t/test_parsing/n_structure_ascii-unicode-identifier.json +SHA1 89a06bbbea6073b40283747080e3e57a7229f850 t/test_parsing/n_structure_capitalized_True.json +SHA1 686d8d6722afa80df777306a0f290b0c562f5319 t/test_parsing/n_structure_close_unopened_array.json +SHA1 a368cf1049dda7f1d8601ab11a09bc6ce7b5c4d2 t/test_parsing/n_structure_comma_instead_of_closing_brace.json +SHA1 871d01b18b7460aea3f8dc2dde57c872cf5c84e7 t/test_parsing/n_structure_double_array.json +SHA1 4ff447b8ef42ca51fa6fb287bed8d40f49be58f1 t/test_parsing/n_structure_end_array.json +SHA1 3aa7b3e977e50ffa95b19c3ebda64cd194aa5111 t/test_parsing/n_structure_incomplete_UTF8_BOM.json +SHA1 80b65690c5a9bf7797a8ccc6c350cad44f5af19f t/test_parsing/n_structure_lone-invalid-utf-8.json +SHA1 1e5c2f367f02e47a8c160cda1cd9d91decbac441 t/test_parsing/n_structure_lone-open-bracket.json +SHA1 7f145a75425861a7f8ca95797b3304baf353a584 t/test_parsing/n_structure_lt.gt.json +SHA1 94d06300a0449635d2fb91a03d67ca972b12fab6 t/test_parsing/n_structure_ltnullgt.json +SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 t/test_parsing/n_structure_no_data.json +SHA1 b5bf262d59916fc8e8fed5e842f093aac31e88e0 t/test_parsing/n_structure_null-byte-outside-string.json +SHA1 e5d29974938d3325b639b0a8a189baa88ce0d916 t/test_parsing/n_structure_number_with_trailing_garbage.json +SHA1 8a456f046f11cb56504a01eb76372f239788d018 t/test_parsing/n_structure_object_followed_by_closing_object.json +SHA1 154a727a5d04db46a3e8d212b0255df962f1bde1 t/test_parsing/n_structure_object_unclosed_no_value.json +SHA1 fde0916c976087e16317760ab7b7b371c3142a2d t/test_parsing/n_structure_object_with_comment.json +SHA1 bd9dcd61cd1e4aeb41ecdcf02a7bf8cdd02b0123 t/test_parsing/n_structure_object_with_trailing_garbage.json +SHA1 044af4319f8e37af15bc395bd9fa7a3d10bcbe61 t/test_parsing/n_structure_open_array_apostrophe.json +SHA1 6edf700f1249eb939aa7726d2bcd4299fc3dfc8a t/test_parsing/n_structure_open_array_comma.json +SHA1 c0564b2f8bf5fa781a1e4049dbdec9d07935f342 t/test_parsing/n_structure_open_array_object.json +SHA1 3cc0c9adcf3882f01409c70391c3cd30588ef34c t/test_parsing/n_structure_open_array_open_object.json +SHA1 7883c3a2265f93addbb80226f2b9171da0106ba2 t/test_parsing/n_structure_open_array_open_string.json +SHA1 9f505be712503ce69f2e7cdc3459285f9ff26f1a t/test_parsing/n_structure_open_array_string.json +SHA1 60ba4b2daa4ed4d070fec06687e249e0e6f9ee45 t/test_parsing/n_structure_open_object.json +SHA1 7cfce8f59ebdd78e75aa72f6ba9735f286e94a68 t/test_parsing/n_structure_open_object_close_array.json +SHA1 54d18dafbe5558371956e46e8a3f71dbd35a64e8 t/test_parsing/n_structure_open_object_comma.json +SHA1 9283e59ace7db9a0dfd983aa2af64f7420c3cd7e t/test_parsing/n_structure_open_object_open_array.json +SHA1 ef67971d10024ef761e9aa7e46efdae4888d1ad4 t/test_parsing/n_structure_open_object_open_string.json +SHA1 8d96d08108bd8115fac7ffa8585817b3011b0af2 t/test_parsing/n_structure_open_object_string_with_apostrophes.json +SHA1 1b97c2de0d658f1af542bcee4cc918a2131f1bad t/test_parsing/n_structure_open_open.json +SHA1 1599e9fa41ec68c80230491902786bee889f5bcb t/test_parsing/n_structure_single_point.json +SHA1 df58248c414f342c81e056b40bee12d17a08bf61 t/test_parsing/n_structure_single_star.json +SHA1 a595e954dbc49671199b0467ade5c9b56c60dc40 t/test_parsing/n_structure_trailing_#.json +SHA1 47386f5f3c7c4aa7e3b5fe222cb6831b3e24f0b1 t/test_parsing/n_structure_uescaped_LF_before_string.json +SHA1 68f9e2ff5dd19fe81ad1fb10f0d1ba83a204dae4 t/test_parsing/n_structure_unclosed_array.json +SHA1 b192ffd699d6445852eeef6c011408642f3090fb t/test_parsing/n_structure_unclosed_array_partial_null.json +SHA1 97dcf177bb56a9525ad8a02005a1b102bb0e3278 t/test_parsing/n_structure_unclosed_array_unfinished_false.json +SHA1 2d3972297bc09971e851cc66c3b1d50c1231ed1f t/test_parsing/n_structure_unclosed_array_unfinished_true.json +SHA1 27bec077772dfc6d8a8a64f17ab56a96e01660a2 t/test_parsing/n_structure_unclosed_object.json +SHA1 cfb50dd6cf79fd470f3a558a720777d835bb45de t/test_parsing/n_structure_unicode-identifier.json +SHA1 ca0f78ce8928de90be17b9e0809051b44bd42002 t/test_parsing/n_structure_whitespace_U+2060_word_joiner.json +SHA1 54ab7993d15c81028639470e8062a6a2bde1912e t/test_parsing/n_structure_whitespace_formfeed.json +SHA1 d8ab308edac7ab24dc8b933da23cf1d5cc4975b8 t/test_parsing/y_array_arraysWithSpaces.json +SHA1 665f66b0cf05eb7f77f25184c26dc1a2a387d2ad t/test_parsing/y_array_empty-string.json +SHA1 97d170e1550eee4afc0af065b78cda302a97674c t/test_parsing/y_array_empty.json +SHA1 6b38d42036dacdcf081b8d1d0ee0c97b407c56c6 t/test_parsing/y_array_ending_with_newline.json +SHA1 900e76465ff0730df8c5aeed16b0fc21dcda8b1b t/test_parsing/y_array_false.json +SHA1 3aa4b2e9184a7d30cbca53a8bb7c0b49f6cf429a t/test_parsing/y_array_heterogeneous.json +SHA1 d44da22510de9a5eb7275b61a4beebd4d0cd6b5d t/test_parsing/y_array_null.json +SHA1 c19c71de7bdceff1d0ad6d2a27597cd941aa9ad3 t/test_parsing/y_array_with_1_and_newline.json +SHA1 1a18e82baa94240028011b854d15e7e117286dd2 t/test_parsing/y_array_with_leading_space.json +SHA1 adc100e198393162f23d75c5135474dd9a69e7f7 t/test_parsing/y_array_with_several_null.json +SHA1 a59d7f33c9f6ad377dee1511e4ed0dd51108e807 t/test_parsing/y_array_with_trailing_space.json +SHA1 48df20e0e53590fe0a254e454d27e5b2f80634c4 t/test_parsing/y_number.json +SHA1 e11d6e2991765cf3c0323c5fec5f5e6cbd20e561 t/test_parsing/y_number_0e+1.json +SHA1 3fdfa273846a71b8252c52f56b3b1e5cca074dc8 t/test_parsing/y_number_0e1.json +SHA1 d9f80d3f11fa1bd3739b691d21542d4b0891587a t/test_parsing/y_number_after_space.json +SHA1 06fdd07ebc861f6a99307ef4564f9d245bcaed92 t/test_parsing/y_number_double_close_to_zero.json +SHA1 cda1e890ccc626c2622b212ec68dcc9e4d3ed5fe t/test_parsing/y_number_double_huge_neg_exp.json +SHA1 6f748da557fcc91063279b2f08e7292f8a5cab6c t/test_parsing/y_number_huge_exp.json +SHA1 4cb56f9361f25707383b92bd4fd2e4660cd7ee17 t/test_parsing/y_number_int_with_exp.json +SHA1 cd5d87a6cebad6a3400fe40cb779ffab9d4e78f4 t/test_parsing/y_number_minus_zero.json +SHA1 702d807a60536ae620383155ea1df3bf4ae6c5b0 t/test_parsing/y_number_negative_int.json +SHA1 e64aa2df2faa86ec9533610495242398eaa59e38 t/test_parsing/y_number_negative_one.json +SHA1 cd5d87a6cebad6a3400fe40cb779ffab9d4e78f4 t/test_parsing/y_number_negative_zero.json +SHA1 91ec98afcdf85ae2ffda15133e66a353eb8166be t/test_parsing/y_number_real_capital_e.json +SHA1 0407e5ad6036f5611c5821da27abfcb0beefc01b t/test_parsing/y_number_real_capital_e_neg_exp.json +SHA1 8ef5dad091ab5d80d50b9db4a6235e2e526467c2 t/test_parsing/y_number_real_capital_e_pos_exp.json +SHA1 a5b3707ee674c6a38a08239a28cf3cc2dd6bc64e t/test_parsing/y_number_real_exponent.json +SHA1 4df3f661979d06e588835d6dd1f51c3183cfeccf t/test_parsing/y_number_real_fraction_exponent.json +SHA1 87edd61498fde210d811e44ee7873b69d0491a03 t/test_parsing/y_number_real_neg_exp.json +SHA1 cd7771ffbf7482b88a08e559a1d458a0b3c0ea9b t/test_parsing/y_number_real_neg_overflow.json +SHA1 d422abfa1f8a7c2609530905ec02c35a2ee5a00b t/test_parsing/y_number_real_pos_exponent.json +SHA1 bee0f0c1525422ca9b9d32338cb2ebd123a3b6fe t/test_parsing/y_number_real_pos_overflow.json +SHA1 1c66bae009ca0649641d2a681960ab9a880b6d0e t/test_parsing/y_number_real_underflow.json +SHA1 4feada6a2e48d2cb8a0b7569899f1baadd165c4d t/test_parsing/y_number_simple_int.json +SHA1 7d26aa20fcca68d4714467c38c4b9ea12a286075 t/test_parsing/y_number_simple_real.json +SHA1 65a4ba6f655de69119e0d1815e4c5ef10a84adb6 t/test_parsing/y_number_too_big_neg_int.json +SHA1 74d23686f7acecdb13ec08c9ef696e57af395712 t/test_parsing/y_number_too_big_pos_int.json +SHA1 62272edb962cb2f74c5a21a70264af4f263bd567 t/test_parsing/y_number_very_big_negative_int.json +SHA1 1b823a17aee1621f0232bb5c1d7e96d4faf860a9 t/test_parsing/y_object.json +SHA1 109c816d7944a3c0565083615ae774e30e5a2317 t/test_parsing/y_object_basic.json +SHA1 2279a43d9232efb3843e1cfd2537e562edc66964 t/test_parsing/y_object_duplicated_key.json +SHA1 c2efaa827c5de388e71fda74878cb94b40c8883d t/test_parsing/y_object_duplicated_key_and_value.json +SHA1 bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f t/test_parsing/y_object_empty.json +SHA1 f9b8990914df4b0ca1b33400bba72329854b2025 t/test_parsing/y_object_empty_key.json +SHA1 a707fc24029509f5b8eadbadd492e4e2a3faf473 t/test_parsing/y_object_escaped_null_in_key.json +SHA1 53765d7108144fef8f8a693249e42efebac7580e t/test_parsing/y_object_extreme_numbers.json +SHA1 7f28fe7504f3a217b37050a28a473fd23ad08749 t/test_parsing/y_object_long_strings.json +SHA1 983152bcc6f3ec4d05eec8df0ef9a0a909806388 t/test_parsing/y_object_simple.json +SHA1 39a7f4ef3032da2562662ef4b038637e9d75c93c t/test_parsing/y_object_string_unicode.json +SHA1 6dc56c67450b8669262bc137bc36b7add8df64d1 t/test_parsing/y_object_with_newlines.json +SHA1 d031f544ecb0bd7e9884c1d156cb53799d3de53a t/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json +SHA1 e637a1000c3adf15bdd067a9a75dc34701a0f85f t/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json +SHA1 61a58d23ac1e65f6115f2b8324e4504d5cb78c3d t/test_parsing/y_string_accepted_surrogate_pair.json +SHA1 afa17d094aed3e744102b751d6af5791dd2a73c5 t/test_parsing/y_string_accepted_surrogate_pairs.json +SHA1 73ba1c83749bcb08aafd08072e35139c9129f157 t/test_parsing/y_string_allowed_escapes.json +SHA1 ec1384932a6232771e2aa4408898ba6c09a59cda t/test_parsing/y_string_backslash_and_u_escaped_zero.json +SHA1 6eab7b6d2f23491e367d914a51832f495a52cfc3 t/test_parsing/y_string_backslash_doublequotes.json +SHA1 d22564397bb6172ca3d5c0d7614db53a73edda3b t/test_parsing/y_string_comments.json +SHA1 4cd2c91e683dd395c53e4b9864a316060f8e34e5 t/test_parsing/y_string_double_escape_a.json +SHA1 b02f9bfeb0f108de9975aa06d43b77dc516fe492 t/test_parsing/y_string_double_escape_n.json +SHA1 22e9096bd53260349f19f00815e5b182354dce39 t/test_parsing/y_string_escaped_control_character.json +SHA1 85185c0bb6c9619f7c9aca6d9c32e68d1277580a t/test_parsing/y_string_escaped_noncharacter.json +SHA1 cc9f258bc7fd30fc5850ce6a0dc92cf958ef9695 t/test_parsing/y_string_in_array.json +SHA1 a915925083952ba963722a50826d7c56c2ad2b2f t/test_parsing/y_string_in_array_with_leading_space.json +SHA1 451a55335506d1ec0c9de1b48902df7d330df63d t/test_parsing/y_string_last_surrogates_1_and_2.json +SHA1 e4c27d9b13265a74f83a8e66c9e932f5ee1bdddb t/test_parsing/y_string_newline_uescaped.json +SHA1 584d0ff203f90b574f74fb95bda068c8d2ad509c t/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json +SHA1 534c1940236fca0b9cc04d6e8608afd8a3e92f09 t/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json +SHA1 1a8613e3e78d7ad24943c7fa70ee4af8a590559f t/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json +SHA1 c60ac820f992d0efaba95dfbd1a1f256f0167966 t/test_parsing/y_string_null_escape.json +SHA1 da55d4af0048ff91ea3963f5a6dacf88414460f8 t/test_parsing/y_string_one-byte-utf-8.json +SHA1 323c14002abaac4ac6548eb88c513ad625561532 t/test_parsing/y_string_pi.json +SHA1 132464a973d9906e9bef40e69192c6362a712d60 t/test_parsing/y_string_simple_ascii.json +SHA1 654e0aaee80e38636c503629d32225db31a616de t/test_parsing/y_string_space.json +SHA1 cf3e14a3fd88786cbb8c4d894ed071324d8b52fd t/test_parsing/y_string_three-byte-utf-8.json +SHA1 27236fa670873c39b3831f0155ddb6c0cd074521 t/test_parsing/y_string_two-byte-utf-8.json +SHA1 6fce2dd2610e0f6ca30fae1f6b4bcb10a72e2459 t/test_parsing/y_string_u+2028_line_sep.json +SHA1 802b8a1231c403105ed49ebaff4cf25d4b7707fe t/test_parsing/y_string_u+2029_par_sep.json +SHA1 11ff4334bc4d699e342c66471c8e4ab1cca5a402 t/test_parsing/y_string_uEscape.json +SHA1 e50eac03a495fa7756cf57bbd4fa29e3dfbb470d t/test_parsing/y_string_unescaped_char_delete.json +SHA1 50993654eb21f05c6980ad0bb92dd0502231af78 t/test_parsing/y_string_unicode.json +SHA1 d5b77faba17f8a7c9dbe905ff072e54686f3605b t/test_parsing/y_string_unicodeEscapedBackslash.json +SHA1 368b01b5b1a886889b391937d146eb3535bdbc8d t/test_parsing/y_string_unicode_2.json +SHA1 a04a8efcaf865a93ae6afb273bcaad3e1616e4b8 t/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json +SHA1 c49095c6ecf0885d675b6ee2a766118ce046e9ff t/test_parsing/y_string_unicode_U+2064_invisible_plus.json +SHA1 2cc7a443f37f43df8e24924184fd5fc1b27a1275 t/test_parsing/y_string_unicode_escaped_double_quote.json +SHA1 ce301762c4e3debeb0f081ccad0778eb90891b64 t/test_parsing/y_string_utf16.json +SHA1 7ebba096a96624f0f20577de1faf4f88b7d653fc t/test_parsing/y_string_utf16be.json +SHA1 c0c533dde92e025bee28d6abc5b5877d8d0786f7 t/test_parsing/y_string_utf32.json +SHA1 2d505bbaa387bf88eb933ac4d5ee9277f5ca7207 t/test_parsing/y_string_utf32be.json +SHA1 b7e86feafbf6cd311fe7e880d47a1ea0f1fd1747 t/test_parsing/y_string_utf8.json +SHA1 c0d11d6e7fab994593cee9ba452ad5b829a28037 t/test_parsing/y_string_with_del_character.json +SHA1 7cb6efb98ba5972a9b5090dc2e517fe14d12cb04 t/test_parsing/y_structure_lonely_false.json +SHA1 92cfceb39d57d914ed8b14d0e37643de0797ae56 t/test_parsing/y_structure_lonely_int.json +SHA1 dbd8840ca8ff028574cb33f119d751149920c9e9 t/test_parsing/y_structure_lonely_negative_real.json +SHA1 2be88ca4242c76e8253ac62474851065032d6833 t/test_parsing/y_structure_lonely_null.json +SHA1 7f4c3d6682f8c0fac70345caa493831ef9c8fa28 t/test_parsing/y_structure_lonely_string.json +SHA1 5ffe533b830f08a0326348a9160afafc8ada44db t/test_parsing/y_structure_lonely_true.json +SHA1 dd29ecf524b030a65261e3059c48ab9e1ecb2585 t/test_parsing/y_structure_string_empty.json +SHA1 ae6b9b064fc0edb39acaf2dc5cd1e15fba2ab62d t/test_parsing/y_structure_trailing_newline.json +SHA1 b1a3003c5febf09181367f730b05fd8cf1712375 t/test_parsing/y_structure_true_in_array.json +SHA1 de10af5b40cdd0e2aa4651b2dfeb639cb9e58896 t/test_parsing/y_structure_whitespace_array.json +SHA1 304dbdffe094ba300a495699e61a7656c5b5b701 t/test_transform/number_1.0.json +SHA1 c016f0e1dbdc617ebb8f8c5facc731fa1dcc977f t/test_transform/number_1.000000000000000005.json +SHA1 0e7010aae7ab0a37f93ae77aabf9bb2e8a5e5cfb t/test_transform/number_1000000000000000.json +SHA1 03fdc94671cbd973d4bd8d15f9757c89ed68cc2d t/test_transform/number_10000000000000000999.json +SHA1 8d34467868061fad99d97d1eb22298e3e81afdb3 t/test_transform/number_1e-999.json +SHA1 2523aa1afc0f810221a3efa11ffe63f057bf3fde t/test_transform/number_1e6.json +SHA1 3087baa625fdd8ae1c953d608553e64000a0e21d t/test_transform/object_key_nfc_nfd.json +SHA1 666806a2fe4c7ae5f477b3d9d57f7f481bd5b37d t/test_transform/object_key_nfd_nfc.json +SHA1 7bc31c4afc1e2f10d70abebcb9bb79dff5173acd t/test_transform/object_same_key_different_values.json +SHA1 3cd53cfd0b6cb90bf9f9fc866ab4e202e9007901 t/test_transform/object_same_key_same_value.json +SHA1 734c56fb3b732b00120cbc80b753354a39817f0d t/test_transform/object_same_key_unclear_values.json +SHA1 58acfd5ae6d7737ce3f28fc3ddb4ef1081f0b533 t/test_transform/string_1_escaped_invalid_codepoint.json +SHA1 4ce359f3fb556b087622cb7e0f3f7fb5a0df4d58 t/test_transform/string_1_invalid_codepoint.json +SHA1 64bbd9a66091a9dff52929d85e24898d1571e357 t/test_transform/string_2_escaped_invalid_codepoints.json +SHA1 aefc59a1154ffb09fd705a176fa6eac4141e1af6 t/test_transform/string_2_invalid_codepoints.json +SHA1 ade4378e095c85a40bbb02707ac5e789f1444e38 t/test_transform/string_3_escaped_invalid_codepoints.json +SHA1 c88b7e7a5f16ec3666db92cfee475938a9c0fde2 t/test_transform/string_3_invalid_codepoints.json +SHA1 4f9698c20ad9fd2c7c975e5426fc84d3aab0360f t/test_transform/string_with_escaped_NULL.json +SHA1 5cd847ba5ed5d1a90807dbf8891bf1690918cb5e t/z_kwalitee.t SHA1 6dfd7f5112f80b65e84916c780a0b1a71aad32dc t/z_leaktrace.t SHA1 e3259ac6c4bd7f3349cf6f2ff829827483bc749d t/z_meta.t -SHA1 741e9e8bf600c7f7441794fe49ea8904cfd4bf58 t/z_perl_minimum_version.t +SHA1 204e8376b847824292d6630be5b0ecfb54ad9a2b t/z_perl_minimum_version.t SHA1 d91cc1b39fcb1dbf23c11ebb5885cfaaeb2c3a50 t/z_pod-coverage.t SHA1 2eb526b1649c6306df677d7ae63433856b672476 t/z_pod-spell-mistakes.t -SHA1 0e1a7a3cb4aa3db01909bac539ee08f4f369acb0 t/z_pod-spelling.t -SHA1 c8aa3903d3aba84c19bbd94d677620c758fa07d5 t/z_pod.t +SHA1 6e74cfbeb5080643d126b9d74f2f7e6dad26b013 t/z_pod-spelling.t +SHA1 8db603172315dd0853ecc383dba4945c5b673e8f t/z_pod.t SHA1 3b92cafada1b683bbf03593d22eb40671e744bc7 t/zero-mojibake.t -SHA1 8ad74139741a687b63c14bc6b4ae109b556f9af7 typemap +SHA1 e93c9b53438be114c25aa426742e24f4343057a7 typemap -----BEGIN PGP SIGNATURE----- -Version: GnuPG v1 -iEYEARECAAYFAlZgLm8ACgkQmm2SYo/9yUKvXwCfatC6yc4aTJffePwzT4WnTDZn -kNIAn0WUSVrtXnXg9Oc53cgjZWmA6zYw -=ApC0 +iF0EARECAB0WIQRZHhhUcL58V8z0UW2abZJij/3JQgUCWaSBWwAKCRCabZJij/3J +QvrLAJ0bTW8cqyjtMaUxI/hQyWK7BG1mwQCeKMS2zGSNV4YB6uVOXH4Xv0Ck2rI= +=q1+r -----END PGP SIGNATURE----- diff -Nru libcpanel-json-xs-perl-3.0210/t/01_utf8.t libcpanel-json-xs-perl-3.0239/t/01_utf8.t --- libcpanel-json-xs-perl-3.0210/t/01_utf8.t 2015-10-22 15:53:18.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/01_utf8.t 2017-07-27 20:15:44.000000000 +0000 @@ -1,40 +1,168 @@ -use Test::More tests => 13; +use Test::More tests => 162; use utf8; use Cpanel::JSON::XS; +use warnings; -is(Cpanel::JSON::XS->new->allow_nonref (1)->utf8 (1)->encode ("ü"), "\"\xc3\xbc\""); -is(Cpanel::JSON::XS->new->allow_nonref (1)->encode ("ü"), "\"ü\""); +is(Cpanel::JSON::XS->new->allow_nonref->utf8->encode("ü"), "\"\xc3\xbc\""); +is(Cpanel::JSON::XS->new->allow_nonref->encode("ü"), "\"ü\""); -is(Cpanel::JSON::XS->new->allow_nonref (1)->ascii (1)->utf8 (1)->encode (chr 0x8000), '"\u8000"'); -is(Cpanel::JSON::XS->new->allow_nonref (1)->ascii (1)->utf8 (1)->pretty (1)->encode (chr 0x10402), "\"\\ud801\\udc02\"\n"); +is(Cpanel::JSON::XS->new->allow_nonref->ascii->utf8->encode(chr 0x8000), '"\u8000"'); +is(Cpanel::JSON::XS->new->allow_nonref->ascii->utf8->pretty->encode(chr 0x10402), "\"\\ud801\\udc02\"\n"); + +ok not defined eval { Cpanel::JSON::XS->new->allow_nonref->utf8->decode('"ü"') }; +like $@, qr/malformed UTF-8/; + +is(Cpanel::JSON::XS->new->allow_nonref->decode('"ü"'), "ü"); +is(Cpanel::JSON::XS->new->allow_nonref->decode('"\u00fc"'), "ü"); + +ok not defined eval { decode_json ('"\ud801\udc02' . "\x{10204}\"", 1) }; +like $@, qr/Wide character/; SKIP: { skip "5.6", 1 if $] < 5.008; - eval { Cpanel::JSON::XS->new->allow_nonref (1)->utf8 (1)->decode ('"ü"') }; - like $@, qr/malformed UTF-8/; + is(Cpanel::JSON::XS->new->allow_nonref->decode('"\ud801\udc02' . "\x{10204}\""), "\x{10402}\x{10204}"); } -is(Cpanel::JSON::XS->new->allow_nonref (1)->decode ('"ü"'), "ü"); -is(Cpanel::JSON::XS->new->allow_nonref (1)->decode ('"\u00fc"'), "ü"); -is(Cpanel::JSON::XS->new->allow_nonref (1)->decode ('"\ud801\udc02' . "\x{10204}\""), "\x{10402}\x{10204}"); -is(Cpanel::JSON::XS->new->allow_nonref (1)->decode ('"\"\n\\\\\r\t\f\b"'), "\"\012\\\015\011\014\010"); - -my $love = $] < 5.008 ? "I \342\235\244 perl" : "I ⤠perl"; -is(Cpanel::JSON::XS->new->ascii->encode ([$love]), - $] < 5.008 ? '["I \u00e2\u009d\u00a4 perl"]' : '["I \u2764 perl"]', 'utf8 enc ascii'); -is(Cpanel::JSON::XS->new->latin1->encode ([$love]), - $] < 5.008 ? "[\"I \342\235\244 perl\"]" : '["I \u2764 perl"]', 'utf8 enc latin1'); +is(Cpanel::JSON::XS->new->allow_nonref->decode('"\"\n\\\\\r\t\f\b"'), "\"\012\\\015\011\014\010"); + +my $utf8_love = "I \342\235\244 perl"; +is(Cpanel::JSON::XS->new->ascii->encode([$utf8_love]), '["I \u00e2\u009d\u00a4 perl"]', 'utf8 enc ascii'); +is(Cpanel::JSON::XS->new->latin1->encode([$utf8_love]), "[\"I \342\235\244 perl\"]", 'utf8 enc latin1'); +is(Cpanel::JSON::XS->new->utf8->encode([$utf8_love]), "[\"I \303\242\302\235\302\244 perl\"]", 'utf8 enc utf8'); +is(Cpanel::JSON::XS->new->binary->encode([$utf8_love]), '["I \xe2\x9d\xa4 perl"]', 'utf8 enc binary'); SKIP: { - skip "5.6", 1 if $] < 5.008; - require Encode; - # [RT #84244] wrong complaint: JSON::XS double encodes to ["I ⤠perl"] - # and with utf8 triple encodes it to ["I ⤠perl"] - if ($Encode::VERSION < 2.40 or $Encode::VERSION >= 2.54) { # Encode stricter check: Cannot decode string with wide characters - # see also http://stackoverflow.com/questions/12994100/perl-encode-pm-cannot-decode-string-with-wide-character - $love = "I \342\235\244 perl"; + skip "5.6", 4 if $] < 5.008; + my $unicode_love = "I ⤠perl"; + is(Cpanel::JSON::XS->new->ascii->encode([$unicode_love]), '["I \u2764 perl"]', 'unicode enc ascii'); + is(Cpanel::JSON::XS->new->latin1->encode([$unicode_love]), "[\"I \\u2764 perl\"]", 'unicode enc latin1'); + is(Cpanel::JSON::XS->new->utf8->encode([$unicode_love]), "[\"I \342\235\244 perl\"]", 'unicode enc utf8'); + is(Cpanel::JSON::XS->new->binary->encode([$unicode_love]), '["I \xe2\x9d\xa4 perl"]', 'unicode enc binary'); +} + +# TODO: test utf8 hash keys, +# test utf8 strings without any char > 0x80. + +# warn on the 66 non-characters as in core +{ + BEGIN { 'warnings'->import($] < 5.014 ? 'utf8' : 'nonchar') } + my $w = ''; + $SIG{__WARN__} = sub { $w = shift }; + my $d = Cpanel::JSON::XS->new->allow_nonref->decode('"\ufdd0"'); + my $warn = $w; + { + no warnings 'utf8'; + is ($d, "\x{fdd0}", substr($warn,0,31)."..."); + } + like ($warn, qr/^Unicode non-character U\+FDD0 is/); + $w = ''; + # higher planes + $d = Cpanel::JSON::XS->new->allow_nonref->decode('"\ud83f\udfff"'); + $warn = $w; + { + no warnings 'utf8'; + is ($d, "\x{1ffff}", substr($warn,0,31)."..."); + } + like ($w, qr/^Unicode non-character U\+1FFFF is/); + $w = ''; + $d = Cpanel::JSON::XS->new->allow_nonref->decode('"\ud87f\udffe"'); + $warn = $w; + { + no warnings 'utf8'; + is ($d, "\x{2fffe}", substr($warn,0,31)."..."); + } + like ($w, qr/^Unicode non-character U\+2FFFE is/); + + $w = ''; + $d = Cpanel::JSON::XS->new->allow_nonref->decode('"\ud8a4\uddd1"'); + $warn = $w; + is ($d, "\x{391d1}", substr($warn,0,31)."..."); + is ($w, ''); +} +{ + my $w; + BEGIN { 'warnings'->import($] < 5.014 ? 'utf8' : 'nonchar') } + $SIG{__WARN__} = sub { $w = shift }; + # no warning with relaxed + my $d = Cpanel::JSON::XS->new->allow_nonref->relaxed->decode('"\ufdd0"'); + my $warn = $w; + { + no warnings 'utf8'; + is ($d, "\x{fdd0}", "no warning with relaxed"); + } + is($w, undef); +} + +# security exploits via ill-formed subsequences +# see http://unicode.org/reports/tr36/#UTF-8_Exploit +# testcases from Encode/t/utf8strict.t +# All these sequences are not handled by the unsafe, fast XS decoder, +# rather passed through to the safe Perl decoder, which detects those. +my @ill = + (# http://smontagu.damowmow.com/utf8test.html + # The numbers below, like 2.1.2 are test numbers on this web page + qq/80/ , # 3.1.1 + qq/bf/ , # 3.1.2 + qq/80 bf/ , # 3.1.3 + qq/80 bf 80/ , # 3.1.4 + qq/80 bf 80 bf/ , # 3.1.5 + qq/80 bf 80 bf 80/ , # 3.1.6 + qq/80 bf 80 bf 80 bf/ , # 3.1.7 + qq/80 bf 80 bf 80 bf 80/ , # 3.1.8 + qq/80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf/ , # 3.1.9 + qq/c0 20 c1 20 c2 20 c3 20 c4 20 c5 20 c6 20 c7 20 c8 20 c9 20 ca 20 cb 20 cc 20 cd 20 ce 20 cf 20 d0 20 d1 20 d2 20 d3 20 d4 20 d5 20 d6 20 d7 20 d8 20 d9 20 da 20 db 20 dc 20 dd 20 de 20 df 20/ , # 3.2.1 + qq/e0 20 e1 20 e2 20 e3 20 e4 20 e5 20 e6 20 e7 20 e8 20 e9 20 ea 20 eb 20 ec 20 ed 20 ee 20 ef 20/ , # 3.2.2 + qq/f0 20 f1 20 f2 20 f3 20 f4 20 f5 20 f6 20 f7 20/ , # 3.2.3 + qq/f8 20 f9 20 fa 20 fb 20/ , # 3.2.4 + qq/fc 20 fd 20/ , # 3.2.5 + qq/c0/ , # 3.3.1 + qq/e0 80/ , # 3.3.2 + qq/f0 80 80/ , # 3.3.3 + qq/f8 80 80 80/ , # 3.3.4 + qq/fc 80 80 80 80/ , # 3.3.5 + qq/df/ , # 3.3.6 + qq/ef bf/ , # 3.3.7 + qq/f7 bf bf/ , # 3.3.8 + qq/fb bf bf bf/ , # 3.3.9 + qq/fd bf bf bf bf/ , # 3.3.10 + qq/c0 e0 80 f0 80 80 f8 80 80 80 fc 80 80 80 80 df ef bf f7 bf bf fb bf bf bf fd bf bf bf bf/ , # 3.4.1 + qq/fe/ , # 3.5.1 + qq/ff/ , # 3.5.2 + qq/fe fe ff ff/ , # 3.5.3 + qq/f0 8f bf bf/ , # 4.2.3 + qq/f8 87 bf bf bf/ , # 4.2.4 + qq/fc 83 bf bf bf bf/ , # 4.2.5 + qq/c0 af/ , # 4.1.1 # ! overflow not with perl 5.6 + qq/e0 80 af/ , # 4.1.2 # ! overflow not with perl 5.6 + qq/f0 80 80 af/ , # 4.1.3 # ! overflow not with perl 5.6 + qq/f8 80 80 80 af/ , # 4.1.4 # ! overflow not with perl 5.6 + qq/fc 80 80 80 80 af/ , # 4.1.5 # ! overflow not with perl 5.6 + qq/c1 bf/ , # 4.2.1 # ! overflow not with perl 5.6 + qq/e0 9f bf/ , # 4.2.2 # ! overflow not with perl 5.6 + qq/c0 80/ , # 4.3.1 # xx! overflow not with perl 5.6 + qq/e0 80 80/ , # 4.3.2 # xx! overflow not with perl 5.6 + qq/f0 80 80 80/ , # 4.3.3 # xx! overflow not with perl 5.6 + qq/f8 80 80 80 80/ , # 4.3.4 # xx! overflow not with perl 5.6 + qq/fc 80 80 80 80 80/ , # 4.3.5 # xx! overflow not with perl 5.6 + # non-shortest form of 5c i.e. "\\" + qq/c1 9c/ , # ! not with perl 5.6 + ); + +{ + # these are no multibyte codepoints, just raw utf8 bytes, + # so most of them work with 5.6 also. + BEGIN { $^W = 1 } + BEGIN { 'warnings'->import($] < 5.014 ? 'utf8' : 'nonchar') } + my $w; + $SIG{__WARN__} = sub { $w = shift }; + + for my $ill (@ill) { + my $o = pack "C*" => map {hex} split /\s+/, $ill; + my $d = eval { decode_json("[\"$o\"]"); }; + is ($d, undef, substr($@,0,25)) + or diag $w, ' ', $ill, "\t => ", $d->[0], " $@"; + like($@, qr/malformed UTF-8 character/, "ill-formed utf8 <$ill> throws error"); + is($d, undef, "without warning"); + $w = undef; } - my $s = Encode::decode_utf8($love); # User tries to double decode wide-char to unicode with Encode - is(Cpanel::JSON::XS->new->utf8->encode ([$s]), "[\"I \342\235\244 perl\"]", 'utf8 enc utf8 [RT #84244]'); } -is(Cpanel::JSON::XS->new->binary->encode ([$love]), '["I \xe2\x9d\xa4 perl"]', 'utf8 enc binary'); diff -Nru libcpanel-json-xs-perl-3.0210/t/03_types.t libcpanel-json-xs-perl-3.0239/t/03_types.t --- libcpanel-json-xs-perl-3.0210/t/03_types.t 2015-11-26 13:40:21.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/03_types.t 2017-07-27 20:15:44.000000000 +0000 @@ -1,4 +1,4 @@ -BEGIN { $| = 1; print "1..84\n"; } +BEGIN { $| = 1; print "1..85\n"; } use utf8; use Cpanel::JSON::XS; @@ -22,7 +22,7 @@ ok ("$false" eq "0", "false: stringified $false eq 0"); #ok ("$false" eq "false", "false: stringified $false eq false"); #ok ("$true" eq "1", "true: stringified $true eq 1"); -ok ("$true" eq "true", "true: stringified $true"); +ok ("$true" eq "1", "true: stringified $true"); { my $FH; my $fn = "tmp_$$"; @@ -32,7 +32,7 @@ open $FH, "<", $fn; my $s = <$FH>; close $FH; - ok ($s eq "0true\n", $s); # 11 + ok ($s eq "01\n", $s); # 11 unlink $fn; } @@ -50,7 +50,7 @@ ok ('[{},[],[],{}]' eq encode_json decode_json ('[{},[], [ ] ,{ }]')); ok ('[{"1":[5]}]' eq encode_json [{1 => [5]}]); ok ('{"1":2,"3":4}' eq Cpanel::JSON::XS->new->canonical (1)->encode (decode_json '{ "1" : 2, "3" : 4 }')); -ok ('{"1":2,"3":1.2}' eq Cpanel::JSON::XS->new->canonical (1)->encode (decode_json '{ "1" : 2, "3" : 1.2 }')); +ok ('{"1":2,"3":1.2}' eq Cpanel::JSON::XS->new->canonical (1)->encode (decode_json '{ "1" : 2, "3" : 1.2 }')); #24 ok ('[true]' eq encode_json [Cpanel::JSON::XS::true]); ok ('[false]' eq encode_json [Cpanel::JSON::XS::false]); @@ -65,6 +65,8 @@ ok ($v == ((decode_json encode_json [$v])->[0])); } +ok ('[1.0]' eq encode_json [1.0]); + ok (30123 == ((decode_json encode_json [30123])->[0])); ok (32123 == ((decode_json encode_json [32123])->[0])); ok (32456 == ((decode_json encode_json [32456])->[0])); diff -Nru libcpanel-json-xs-perl-3.0210/t/110_bignum.t libcpanel-json-xs-perl-3.0239/t/110_bignum.t --- libcpanel-json-xs-perl-3.0210/t/110_bignum.t 2015-12-02 16:38:17.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/110_bignum.t 2017-03-29 09:51:37.000000000 +0000 @@ -5,7 +5,7 @@ eval q| require Math::BigInt |; $has_bignum = $@ ? 0 : 1; } -use Test::More $has_bignum ? (tests => 6) : (skip_all => "Can't load Math::BigInt"); +use Test::More $has_bignum ? (tests => 10) : (skip_all => "Can't load Math::BigInt"); use Cpanel::JSON::XS; use Devel::Peek; @@ -29,7 +29,7 @@ my $e = $json->encode($num); is($e, $fix . '100000000000000000000000000000000000000', 'encode bigint') - or Dump( $e ); + or Dump( $e ); $num = $json->decode(q|2.0000000000000000001|); isa_ok($num, 'Math::BigFloat'); @@ -38,3 +38,17 @@ $e = $json->encode($num); is($e, '2.0000000000000000001', 'encode bigfloat') or Dump $e; +$num = $json->decode(q|[100000000000000000000000000000000000000]|)->[0]; + +isa_ok( $num, 'Math::BigInt' ); +is( + "$num", + $fix . '100000000000000000000000000000000000000', + 'decode bigint inside structure' +) or Dump($num); + +$num = $json->decode(q|[2.0000000000000000001]|)->[0]; +isa_ok( $num, 'Math::BigFloat' ); + +is( "$num", '2.0000000000000000001', 'decode bigfloat inside structure' ) + or Dump $num; diff -Nru libcpanel-json-xs-perl-3.0210/t/114_decode_prefix.t libcpanel-json-xs-perl-3.0239/t/114_decode_prefix.t --- libcpanel-json-xs-perl-3.0210/t/114_decode_prefix.t 2015-11-30 16:17:08.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/114_decode_prefix.t 2017-03-29 09:51:37.000000000 +0000 @@ -1,7 +1,7 @@ #!/usr/bin/perl use strict; -use Test::More tests => 8; +use Test::More tests => 12; use Cpanel::JSON::XS; @@ -23,3 +23,9 @@ eval { $json->decode_prefix( "\n" ) }; ok( $@ =~ /malformed JSON/ ); eval { $json->decode_prefix('null') }; ok $@ =~ /allow_nonref/; +my $buffer = "[0][1][2][3]"; +for (0..3) { + my ($data, $size) = $json->decode_prefix($buffer); + $buffer = substr($buffer,$size); + is ($size, 3, "advance offset $buffer #82"); +} diff -Nru libcpanel-json-xs-perl-3.0210/t/117_numbers.t libcpanel-json-xs-perl-3.0239/t/117_numbers.t --- libcpanel-json-xs-perl-3.0210/t/117_numbers.t 2015-01-31 19:57:23.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/117_numbers.t 2017-08-28 18:55:10.000000000 +0000 @@ -2,40 +2,107 @@ use Cpanel::JSON::XS; use Test::More; use Config; -plan tests => 19; +plan skip_all => "Yet unhandled inf/nan with $^O" if $^O eq 'dec_osf'; +plan tests => 25; -is encode_json([9**9**9]), '[null]', "inf -> null"; +# infnan_mode = 0: +is encode_json([9**9**9]), '[null]', "inf -> null stringify_infnan(0)"; is encode_json([-sin(9**9**9)]), '[null]', "nan -> null"; is encode_json([-9**9**9]), '[null]', "-inf -> null"; is encode_json([sin(9**9**9)]), '[null]', "-nan -> null"; is encode_json([9**9**9/9**9**9]), '[null]', "-nan -> null"; +# infnan_mode = 1: # platform specific strings my $json = Cpanel::JSON::XS->new->stringify_infnan; +my $have_qnan = ($^O eq 'MSWin32' || $^O eq 'aix') ? 1 : 0; +# TODO dec_osf +# variants as in t/op/infnan.t +my (@inf, @neg_inf, @nan, @neg_nan); my ($inf, $nan) = ($^O eq 'MSWin32') ? ('1.#INF','1.#QNAN') : ($^O eq 'solaris') ? ('Infinity','NaN') : + ($^O eq 'aix') ? ('inf','NANQ') : + ($^O eq 'hpux') ? ('++','-?') : ('inf','nan'); -my $neg_nan = ($^O eq 'MSWin32') ? "-1.#IND" : "-".$nan; +my $neg_nan = + ($^O eq 'MSWin32') ? "-1.#IND" : + ($^O eq 'hpux') ? "?" : + "-".$nan; +my $neg_inf = + ($^O eq 'hpux') ? "---" : + "-".$inf; + +if ($^O eq 'MSWin32' and $Config{ccflags} =~ /-D__USE_MINGW_ANSI_STDIO/) { + $have_qnan = 0; + ($inf, $neg_inf, $nan, $neg_nan) = ('inf','-inf','nan','-nan'); + @inf = ($inf); + @neg_inf = ($neg_inf); + @nan = ($nan); + @neg_nan = ($neg_nan); +} +elsif ($^O eq 'MSWin32') { # new ucrtd.dll + ($inf, $neg_inf, $nan, $neg_nan) = ('inf','-inf','nan','-nan'); + @inf = ('1.#INF', 'inf'); + @neg_inf = ('-1.#INF', '-inf'); + @nan = ('1.#QNAN', 'nan'); + @neg_nan = ('-1.#IND', '-nan', '-nan(ind)'); +} else { + @inf = ($inf); + @neg_inf = ($neg_inf); + @nan = ($nan); + @neg_nan = ($neg_nan); +} # newlib and glibc 2.5 have no -nan support, just nan. The BSD's neither, but they might # come up with it lateron, as darwin did. #if ($^O eq 'cygwin' or ($Config{glibc_version} && $Config{glibc_version} < 2.6)) { # $neg_nan = $nan; #} -is $json->encode([9**9**9]), "[\"$inf\"]", "inf -> \"inf\""; -is $json->encode([-9**9**9]), "[\"-$inf\"]", "-inf -> \"-inf\""; +sub match { + my ($r, $tmpl, $desc, @list) = @_; + my $match = shift @list; + my $m = $tmpl; + $m =~ s/__XX__/$match/; + $match = $m; + for my $m1 (@list) { # at least one must match + $m = $tmpl; + $m =~ s/__XX__/$m1/; + diag "try $m eq $r" if $ENV{TEST_VERBOSE}; + $match = $m if $r eq $m; + } + is $r, $match, $desc; +} + +my $r = $json->encode([9**9**9]); +$r =~ s/\.0$// if $^O eq 'MSWin32'; +match($r, "[\"__XX__\"]", "inf -> \"inf\" stringify_infnan(1)", @inf); + +$r = $json->encode([-9**9**9]); +$r =~ s/\.0$// if $^O eq 'MSWin32'; +match($r, "[\"__XX__\"]", "-inf -> \"-inf\"", @neg_inf); + # The concept of negative nan is not portable and varies too much. -# Windows even emits neg_nan for the first test sometimes. -like $json->encode([-sin(9**9**9)]), qr/\[\"($neg_nan|$nan)\"\]/, "nan -> \"nan\""; -like $json->encode([sin(9**9**9)]), qr/\[\"($neg_nan|$nan)\"\]/, "-nan -> \"-nan\""; -like $json->encode([9**9**9/9**9**9]), qr/\[\"($neg_nan|$nan)\"\]/, "-nan -> \"-nan\""; +# Windows even emits neg_nan for the first test sometimes. HP-UX has all tests reverse. +match($json->encode([-sin(9**9**9)]), "[\"__XX__\"]", "nan -> \"nan\"", @nan, @neg_nan); +match($json->encode([sin(9**9**9)]), "[\"__XX__\"]", "-nan -> \"-nan\"", @nan, @neg_nan); +match($json->encode([9**9**9/9**9**9]), "[\"__XX__\"]", "-nan -> \"-nan\"", @nan, @neg_nan); +# infnan_mode = 2: # inf/nan values, as in JSON::XS and older releases. $json = Cpanel::JSON::XS->new->stringify_infnan(2); -is $json->encode([9**9**9]), "[$inf]", "inf"; -is $json->encode([-9**9**9]), "[-$inf]", "-inf"; -like $json->encode([-sin(9**9**9)]), qr/\[($neg_nan|$nan)\]/, "nan"; -like $json->encode([sin(9**9**9)]), qr/\[($neg_nan|$nan)\]/, "-nan"; -like $json->encode([9**9**9/9**9**9]), qr/\[($neg_nan|$nan)\]/, "-nan"; +match($json->encode([9**9**9]), "[__XX__]", "inf stringify_infnan(2)", @inf); +match($json->encode([-9**9**9]), "[__XX__]", "-inf", @neg_inf); +match($json->encode([-sin(9**9**9)]), "[__XX__]", "nan", @nan, @neg_nan); +match($json->encode([sin(9**9**9)]), "[__XX__]", "-nan", @nan, @neg_nan); +match($json->encode([9**9**9/9**9**9]), "[__XX__]", "-nan", @nan, @neg_nan); + +# infnan_mode = 3: +# inf/nan values unified to inf/-inf/nan strings. no qnan/snan/negative nan +$json = Cpanel::JSON::XS->new->stringify_infnan(3); +is $json->encode([9**9**9]), '["inf"]', "inf stringify_infnan(3)"; +is $json->encode([-9**9**9]), '["-inf"]', "-inf"; +is $json->encode([-sin(9**9**9)]), '["nan"]', "nan"; +is $json->encode([9**9**9/9**9**9]), '["nan"]', "nan or -nan"; +is $json->encode([sin(9**9**9)]), '["nan"]', "nan or -nan"; my $num = 3; my $str = "$num"; @@ -47,8 +114,22 @@ $str = '0 but true'; $num = 1 + $str; -is encode_json({test => [$num, $str]}), '{"test":[1,"0 but true"]}', 'int/string dualvar'; +# 5.6 is broken, converts $num (IV+PV) to pure NV +my $resnum = ($] < 5.007) ? '1.0' : '1'; +is encode_json({test => [$num, $str]}), qq|{"test":[$resnum,"0 but true"]}|, + 'int/string dualvar'; $str = 'bar'; { no warnings "numeric"; $num = 23 + $str } -is encode_json({test => [$num, $str]}), '{"test":[23,"bar"]}', , 'int/string dualvar'; +# 5.6 and >5.10 is also arguably broken: +# converts $num (IV+PV) to pure NOK+POK, not IOK+POK. +$resnum = ($] > 5.007 && $] <= 5.010) ? '23' : '23.0'; +is encode_json({test => [$num, $str]}), qq|{"test":[$resnum,"bar"]}|, + 'int/string dualvar'; + +{ + use POSIX qw(setlocale); + setlocale(&POSIX::LC_ALL, "fr_FR.utf-8"); + is encode_json({"invalid" => 123.45}), qq|{"invalid":123.45}|, + "numeric radix"; +} diff -Nru libcpanel-json-xs-perl-3.0210/t/11_pc_expo.t libcpanel-json-xs-perl-3.0239/t/11_pc_expo.t --- libcpanel-json-xs-perl-3.0210/t/11_pc_expo.t 2015-01-31 19:57:23.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/11_pc_expo.t 2017-03-29 09:51:37.000000000 +0000 @@ -20,7 +20,7 @@ $obj = $pc->decode($js); is($obj->[0], -123400, 'digit -1.234e5'); $js = $pc->encode($obj); -is($js,'[-123400]', 'digit -1.234e5'); +is($js,'[-123400.0]', 'digit -1.234e5'); $js = q|[1.23E-4]|; $obj = $pc->decode($js); @@ -36,5 +36,11 @@ $obj = $pc->decode($js); is($obj->[0], 1.01e+30, 'digit 1.01e+30'); $js = $pc->encode($obj); -like($js,qr/\[1.01[Ee]\+0?30\]/, 'digit 1.01e+30'); - +if ($Config::Config{usequadmath}) { + is($js,'[1010000000000000000000000000000.0]', 'digit 1010000000000000000000000000000.0 (quadmath)'); +} elsif ($Config::Config{uselongdouble} && $Config::Config{ptrsize} > 4) { + like($js, qr/^\[(1010000000000000000000000000000\.0|1.01[Ee]\+0?30)\]/, + 'digit (64bit ld)'); # esp. non-intel +} else { + like($js,qr/\[1.01[Ee]\+0?30\]/, 'digit 1.01e+30'); +} diff -Nru libcpanel-json-xs-perl-3.0210/t/12_blessed.t libcpanel-json-xs-perl-3.0239/t/12_blessed.t --- libcpanel-json-xs-perl-3.0210/t/12_blessed.t 2015-12-02 16:26:16.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/12_blessed.t 2016-10-06 08:43:33.000000000 +0000 @@ -68,8 +68,8 @@ $js->filter_json_single_key_object ("a"); ok (4 == $js->decode ('[{"a":4}]')->[0]{a}); -if ($]<5.008) { - print "ok 18 # skip 5.6\n"; +if ($]<5.008002) { + print "ok 18 # skip 5.6 + 5.8.1\n"; } else { $js->filter_json_single_key_object (a => sub { }); ok (4 == $js->decode ('[{"a":4}]')->[0]{a}); diff -Nru libcpanel-json-xs-perl-3.0210/t/20_unknown.t libcpanel-json-xs-perl-3.0239/t/20_unknown.t --- libcpanel-json-xs-perl-3.0210/t/20_unknown.t 2015-12-02 16:26:16.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/20_unknown.t 2017-07-27 20:15:44.000000000 +0000 @@ -2,15 +2,16 @@ use strict; use Test::More; BEGIN { - eval 'require JSON;' - or plan skip_all => 'JSON required for cross testing'; + # allow_unknown method added to JSON::PP in 2.09 + eval 'use JSON::PP 2.09 (); 1' + or plan skip_all => 'JSON::PP 2.09 required for cross testing'; $ENV{PERL_JSON_BACKEND} = 'JSON::PP'; } plan tests => 32; -use JSON (); +use JSON::PP (); use Cpanel::JSON::XS (); -my $pp = JSON->new; +my $pp = JSON::PP->new; my $json = Cpanel::JSON::XS->new; eval q| $json->encode( [ sub {} ] ) |; diff -Nru libcpanel-json-xs-perl-3.0210/t/25_boolean.t libcpanel-json-xs-perl-3.0239/t/25_boolean.t --- libcpanel-json-xs-perl-3.0210/t/25_boolean.t 2015-12-02 22:45:39.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/25_boolean.t 2017-07-29 15:18:21.000000000 +0000 @@ -1,19 +1,17 @@ use strict; -use Test::More tests => 17; +use Test::More tests => 32; use Cpanel::JSON::XS (); +use Config; my $booltrue = q({"is_true":true}); my $boolfalse = q({"is_false":false}); -# since 5.16 yes/no is !0/!1, but for earlier perls we need to use a BoolSV -my $a = 0; -my $yes = do{$a==0}; # < 5.16 !0 is not sv_yes -my $no = do{$a==1}; # < 5.16 !1 is not sv_no -my $yesno = [ $yes, $no ]; # native yes/no. YAML::XS compatible my $truefalse = "[true,false]"; my $cjson = Cpanel::JSON::XS->new; my $true = Cpanel::JSON::XS::true; my $false = Cpanel::JSON::XS::false; +my $nonref_cjson = Cpanel::JSON::XS->new->allow_nonref; + # from JSON::MaybeXS my $data = $cjson->decode('{"foo": true, "bar": false, "baz": 1}'); ok($cjson->is_bool($data->{foo}), 'true decodes to a bool') @@ -37,15 +35,54 @@ is( $cjson->encode( [ $true, $false] ), $truefalse ); -TODO: { - local $TODO = 'GH #39'; - is( $cjson->encode( $yesno ), $truefalse, "map yes/no to [true,false]"); +# GH #39 +# perl block which returns sv_no or sv_yes +is( $nonref_cjson->encode( do{(my $a=0)==1} ), "false", "map do{(my \$a)=0)==1} to false"); +is( $nonref_cjson->encode( do{(my $a=0)==1} ), "false", "map do{(my \$a)=0)==1} to false"); +is( $nonref_cjson->encode( do{(my $a=1)==1} ), "true", "map do{(my \$a)=1)==1} to true"); +is( $nonref_cjson->encode( do{(my $a=1)==1} ), "true", "map do{(my \$a)=1)==1} to true"); + +# GH #39 +# XS function UNIVERSAL::isa returns sv_no or sv_yes +is( $nonref_cjson->encode( UNIVERSAL::isa('0', '1') ), "false", "map UNIVERSAL::isa('0', '1') to false"); +is( $nonref_cjson->encode( UNIVERSAL::isa('0', '1') ), "false", "map UNIVERSAL::isa('0', '1') to false"); +is( $nonref_cjson->encode( UNIVERSAL::isa('UNIVERSAL', 'UNIVERSAL') ), "true", "map UNIVERSAL::isa('UNIVERSAL', 'UNIVERSAL') to true"); +is( $nonref_cjson->encode( UNIVERSAL::isa('UNIVERSAL', 'UNIVERSAL') ), "true", "map UNIVERSAL::isa('UNIVERSAL', 'UNIVERSAL') to true"); + +# GH #39 +# XS function utf8::is_utf8 returns sv_no or sv_yes +SKIP: { + skip 'Perl 5.8 is needed for boolean tests based on utf8::upgrade()+utf8::is_utf8()', 4 if $] < 5.008; + is( $nonref_cjson->encode( do{utf8::is_utf8(my $a)} ), "false", "map do{utf8::is_utf8(my \$a)} to false"); + is( $nonref_cjson->encode( do{utf8::is_utf8(my $a)} ), "false", "map do{utf8::is_utf8(my \$a)} to false"); + my $utf8 = ''; + utf8::upgrade($utf8); + is( $nonref_cjson->encode( do{utf8::is_utf8($utf8)} ), "true", "map do{utf8::is_utf8(\$utf8)} to true"); + is( $nonref_cjson->encode( do{utf8::is_utf8($utf8)} ), "true", "map do{utf8::is_utf8(\$utf8)} to true"); +} + +# GH #39 stringification. enabled with 5.16, stable fix with 5.20 +if ($] < 5.020 && $Config{useithreads}) { + # random results threaded + my ($strue, $sfalse) = (qr/^(1|true)$/, qr/^(""||false)$/); + like( $nonref_cjson->encode( !1 ), $sfalse, "map !1 to false"); + like( $nonref_cjson->encode( !1 ), $sfalse, "map !1 to false"); + like( $nonref_cjson->encode( !0 ), $strue, "map !0 to 1/true"); + like( $nonref_cjson->encode( !0 ), $strue, "map !0 to 1/true"); +} else { + # perl expression which evaluates to stable sv_no or sv_yes + my ($strue, $sfalse) = ("true", "false"); + is( $nonref_cjson->encode( !1 ), $sfalse, "map !1 to false"); + is( $nonref_cjson->encode( !1 ), $sfalse, "map !1 to false"); + is( $nonref_cjson->encode( !0 ), $strue, "map !0 to true"); + is( $nonref_cjson->encode( !0 ), $strue, "map !0 to true"); } + $js = $cjson->decode( $truefalse ); ok ($js->[0] == $true, "decode true to yes"); ok ($js->[1] == $false, "decode false to no"); -ok( Cpanel::JSON::XS::is_bool($js->[0]) ); -ok( Cpanel::JSON::XS::is_bool($js->[1]) ); +ok( Cpanel::JSON::XS::is_bool($js->[0]), "true is_bool"); +ok( Cpanel::JSON::XS::is_bool($js->[1]), "false is_bool"); # GH #53 -ok( !Cpanel::JSON::XS::is_bool( [] ) ); +ok( !Cpanel::JSON::XS::is_bool( [] ), "[] !is_bool"); diff -Nru libcpanel-json-xs-perl-3.0210/t/26_duplicate.t libcpanel-json-xs-perl-3.0239/t/26_duplicate.t --- libcpanel-json-xs-perl-3.0210/t/26_duplicate.t 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/26_duplicate.t 2017-07-27 20:15:44.000000000 +0000 @@ -0,0 +1,13 @@ +use Test::More tests => 4; +use Cpanel::JSON::XS; + +my $json = Cpanel::JSON::XS->new; + +# disallow dupkeys: +ok (!eval { $json->decode ('{"a":"b","a":"c"}') }); # y_object_duplicated_key.json +ok (!eval { $json->decode ('{"a":"b","a":"b"}') }); # y_object_duplicated_key_and_value.json + +$json->relaxed; +is (encode_json $json->decode ('{"a":"b","a":"c"}'), '{"a":"c"}'); # y_object_duplicated_key.json +is (encode_json $json->decode ('{"a":"b","a":"b"}'), '{"a":"b"}'); # y_object_duplicated_key_and_value.json + diff -Nru libcpanel-json-xs-perl-3.0210/t/30_jsonspec.t libcpanel-json-xs-perl-3.0239/t/30_jsonspec.t --- libcpanel-json-xs-perl-3.0210/t/30_jsonspec.t 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/30_jsonspec.t 2017-07-27 20:15:44.000000000 +0000 @@ -0,0 +1,197 @@ +# regressions and differences from the JSON Specs and JSON::PP +# detected by http://seriot.ch/json/parsing.html +use Test::More ($] >= 5.008) ? (tests => 686) : (skip_all => "needs 5.8"); +use Cpanel::JSON::XS; +BEGIN { + require Encode if $] >= 5.008 && $] < 5.020; # Currently required for <5.20 +} +my $json = Cpanel::JSON::XS->new->utf8->allow_nonref; +my $relaxed = Cpanel::JSON::XS->new->utf8->allow_nonref->relaxed; + +# fixme: +# n_string_UTF8_surrogate_U+D800 ["EDA080"] <=> [""] unicode +# done: +# i_string_unicode_*_nonchar ["\uDBFF\uDFFE"] (add warning as in core) +# i_string_not_in_unicode_range Code point 0x13FFFF is not Unicode UTF8_DISALLOW_SUPER +# y_string_utf16, y_string_utf16be, y_string_utf32, y_string_utf32be fixed with 3.0222 +my %todo; +$todo{'y_string_nonCharacterInUTF-8_U+FFFF'}++ if $] < 5.013; +$todo{'n_string_UTF8_surrogate_U+D800'}++ if $] >= 5.012; +if ($] < 5.008) { + # 5.6 has no multibyte support + $todo{$_}++ for qw( + n_string_overlong_sequence_2_bytes + n_string_overlong_sequence_6_bytes_null + ); +} + +# undefined i_ tests: +# also pass with relaxed +my %i_pass = map{$_ => 1} + qw( + i_number_neg_int_huge_exp + i_number_pos_double_huge_exp + i_structure_500_nested_arrays + i_structure_UTF-8_BOM_empty_object + i_string_unicode_U+10FFFE_nonchar + i_string_unicode_U+1FFFE_nonchar + i_string_unicode_U+FDD0_nonchar + i_string_unicode_U+FFFE_nonchar + ); +# should also fail with relaxed, except i_string_not_in_unicode_range +my %i_parseerr = map{$_ => 1} + qw( + i_object_key_lone_2nd_surrogate + i_string_1st_surrogate_but_2nd_missing + i_string_1st_valid_surrogate_2nd_invalid + i_string_incomplete_surrogate_and_escape_valid + i_string_incomplete_surrogate_pair + i_string_incomplete_surrogates_escape_valid + i_string_inverted_surrogates_U+1D11E + i_string_lone_second_surrogate + i_string_truncated-utf-8 + i_string_UTF-16_invalid_lonely_surrogate + i_string_UTF-16_invalid_surrogate + i_string_UTF-8_invalid_sequence + i_string_not_in_unicode_range + y_object_duplicated_key + y_object_duplicated_key_and_value + ); +# should parse and return undef: +my %i_empty = map{$_ => 1} + qw( + ); + +# parser need to fail +sub n_error { + my ($str, $name) = @_; + $@ = ''; + my $result = eval { $json->decode($str) }; + TODO: { + local $TODO = "$name" if exists $todo{$name}; + isnt($@, '', "parsing error with $name ".substr($@,0,40)); + is($result, undef, "undef result with $name"); + } +} +# parser need to succeed, result should be valid +sub y_pass { + my ($str, $name) = @_; + $@ = ''; + my $result = $todo{$name} ? eval { $json->decode($str) } : $json->decode($str); + TODO: { + local $TODO = "$name" if exists $todo{$name}; + is($@, '', "no parsing error with $name ".substr($@,0,40)); + if ($str eq 'null') { + is($result, undef, "valid result with $name"); + } else { + isnt($result, undef, "valid result with $name"); + } + } +} + +# result undefined, relaxed may vary +sub i_undefined { + my ($str, $name) = @_; + $@ = ''; + my $result = eval { $json->decode($str) }; + if ($result) { diag("valid result with $name"); } + elsif ($@) { diag("parser error with $name $@"); } + else { diag("no result with $name"); } + $@ = ''; + $result = eval { $relaxed->decode($str) }; + if ($result) { diag("relaxed: valid result with $name"); } + elsif ($@) { diag("relaxed: parser error with $name $@"); } + else { diag("relaxed: no result with $name"); } +} +# result undefined, parsing succeeds, result ok +sub i_pass { + my ($str, $name) = @_; + $@ = ''; + my $w; + if ($name =~ /nonchar/) { # check the warning + require warnings; + warnings->import($] < 5.014 ? 'utf8' : 'nonchar'); + $SIG{__WARN__} = sub { $w = shift }; + } + my $result = $todo{$name} ? eval { $json->decode($str) } : $json->decode($str); + my $warn = $w; + TODO: { + local $TODO = "$name" if exists $todo{$name}; + is($@, '', "no parsing error with undefined $name ".substr($@,0,40)); + isnt($result, undef, "valid result with undefined $name"); + if ($name =~ /nonchar/) { + like ($warn, qr/^Unicode non-character U\+[10DFE]+ is/); + $w = ''; + } + $@ = ''; + #diag "$name $str"; + $result = eval { $relaxed->decode($str) }; + $warn = $w; + is($@, '', "no parsing error with undefined $name relaxed ".substr($@,0,40)); + isnt($result, undef, "valid result with undefined $name relaxed"); + if ($name =~ /nonchar/) { + is($warn, ''); + $w = ''; + } + } +} +# result undefined, parsing failed +sub i_error { + my ($str, $name) = @_; + $@ = ''; + my $result = eval { $json->decode($str) }; + TODO: { + local $TODO = "$name" if exists $todo{$name}; + isnt($@, '', "parsing error with undefined $name ".substr($@,0,40)); + is($result, undef, "no result with undefined $name"); + $@ = ''; + $result = eval { $relaxed->decode($str) }; + if ($name eq 'i_string_not_in_unicode_range') { + is($@, '', "no parsing error with undefined $name relaxed ".substr($@,0,40)); + isnt($result, undef, "valid result with undefined $name relaxed"); + } else { + isnt($@, '', "parsing error with undefined $name relaxed ".substr($@,0,40)); + is($result, undef, "no result with undefined $name relaxed"); + } + } +} + +# todo: test_transform also +for my $f () { + my $s; + { + local $/; + my $fh; + my $mode = $] < 5.008 ? "<" : "<:bytes"; + open $fh, $mode, $f or die "read $f: $!"; + $s = <$fh>; + close $fh; + } + my ($base) = ($f =~ m|test_parsing/(.*)\.json|); + # This is arguably a specification bug. it should error on default + if ($base =~ /y_object_duplicated_key/) { + n_error($s, $base); + } + elsif ($base =~ /^y_/) { + y_pass($s, $base); + } + elsif ($base =~ /^n_/) { + n_error($s, $base); + } + elsif ($base =~ /^i_/) { + if ($i_pass{$base}) { + i_pass($s, $base); + } elsif ($i_parseerr{$base}) { + i_error($s, $base); + } else { + i_undefined($s, $base); + } + } +} + +#n_error("[1,\n1\n,1", "n_array_unclosed_with_new_lines.json"); +#n_error("[\"a\",\n4\n,1,", "n_array_newlines_unclosed.json"); +#i_pass("[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]", "i_structure_500_nested_arrays.json"); +#n_error("\x{EF}\x{BB}\x{BF}\x{00}{}","i_structure_UTF-8_BOM_empty_object.json"); + +#done_testing; diff -Nru libcpanel-json-xs-perl-3.0210/t/31_bom.t libcpanel-json-xs-perl-3.0239/t/31_bom.t --- libcpanel-json-xs-perl-3.0210/t/31_bom.t 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/31_bom.t 2017-07-27 20:15:44.000000000 +0000 @@ -0,0 +1,30 @@ +# Detect BOM and possibly convert to UTF-8 and set UTF8 flag. +# +# https://tools.ietf.org/html/rfc7159#section-8.1 +# JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32. +use Test::More ($] >= 5.008) ? (tests => 5) : (skip_all => "needs 5.8");; +use Cpanel::JSON::XS; +use Encode; # Currently required for <5.20 +use utf8; +my $json = Cpanel::JSON::XS->new->utf8->allow_nonref; + +# parser need to succeed, result should be valid +sub y_pass { + my ($str, $name) = @_; + my $result = $json->decode($str); + my $expected = ["é"]; + is_deeply($result, $expected, "bom $name"); +} + +my @bom = + ( + ["\xef\xbb\xbf[\"\303\251\"]", 'UTF-8'], + ["\xfe\xff\000\133\000\042\000\351\000\042\000\135", 'UTF16-LE'], + ["\xff\xfe\133\000\042\000\351\000\042\000\135\000", 'UTF16-BE'], + ["\xff\xfe\000\000\133\000\000\000\042\000\000\000\351\000\000\000\042\000\000\000\135\000\000\000", 'UTF32-LE'], + ["\000\000\xfe\xff\000\000\000\133\000\000\000\042\000\000\000\351\000\000\000\042\000\000\000\135", 'UTF32-BE'], + ); + +for my $bom (@bom) { + y_pass(@$bom); +} diff -Nru libcpanel-json-xs-perl-3.0210/t/96_interop_pp.t libcpanel-json-xs-perl-3.0239/t/96_interop_pp.t --- libcpanel-json-xs-perl-3.0210/t/96_interop_pp.t 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/96_interop_pp.t 2017-07-27 20:15:44.000000000 +0000 @@ -0,0 +1,41 @@ +use Test::More; +BEGIN { + # for cperl CORE + eval "require JSON::PP;"; + if ($@) { + plan skip_all => "JSON::PP required for testing interop_pp"; + exit 0; + } else { + plan tests => 3; + } + $ENV{PERL_JSON_BACKEND} = 0; +} + +use JSON::PP (); # limitation: for interop with JSON load JSON::PP before Cpanel::JSON::XS +use Cpanel::JSON::XS (); + +my $cjson = Cpanel::JSON::XS->new; +my $boolstring = q({"is_true":true}); +my $js; +{ + local $ENV{PERL_JSON_BACKEND} = 'JSON::PP'; + my $json = JSON::PP->new; + $js = $json->decode( $boolstring ); + # bless { is_true => 1 }, "JSON::PP::Boolean" +} + +is ($cjson->encode( $js ), $boolstring) or diag "\$JSON::VERSION=$JSON::VERSION"; + +{ + local $ENV{PERL_JSON_BACKEND} = 'Cpanel::JSON::XS'; + my $json = JSON::PP->new; + $js = $json->decode( $boolstring ); + # bless { is_true => 1}, "Types::Serialiser" +} + +is($cjson->encode( $js ), $boolstring) + or diag "\$JSON::PP::VERSION=$JSON::PP::VERSION"; + +$js = $cjson->decode( $boolstring ); +is ($cjson->encode( $js ), $boolstring) or diag(ref $js->{is_true}); + diff -Nru libcpanel-json-xs-perl-3.0210/t/96_mojo.t libcpanel-json-xs-perl-3.0239/t/96_mojo.t --- libcpanel-json-xs-perl-3.0210/t/96_mojo.t 2015-11-25 19:24:17.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/96_mojo.t 2017-07-27 20:15:44.000000000 +0000 @@ -35,8 +35,18 @@ my $mj = Mojo::JSON::encode_json( $yesno ); $js = $cjson->decode( $mj ); -is( $js->[0], '', 'can decode Mojo false' ); +# fragile +ok( $js->[0] eq '' or $js->[0] == 0 or !$js->[0], 'can decode Mojo false' ); is( $js->[1], 1, 'can decode Mojo true' ); # Note this is fragile. it depends on the internal representation of booleans. -is_deeply( $js, ['', 1], 'can decode Mojo booleans (fragile)' ) - or diag( $mj, $js ); +# It can also be ['0', '1'] +if ($js->[0] eq '') { + is_deeply( $js, ['', 1], 'can decode Mojo booleans' ) + or diag( $mj, $js ); +} else { + TODO: { + local $TODO = 'fragile false => "0"'; + is_deeply( $js, ['', 1], 'can decode Mojo booleans' ) + or diag( $mj, $js ); + } +} diff -Nru libcpanel-json-xs-perl-3.0210/t/appveyor-test.bat libcpanel-json-xs-perl-3.0239/t/appveyor-test.bat --- libcpanel-json-xs-perl-3.0210/t/appveyor-test.bat 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/appveyor-test.bat 2017-07-27 20:15:44.000000000 +0000 @@ -0,0 +1,41 @@ +@echo off + +rem Test::MinimumVersion JSON +set REQS=Pod::Text Time::Piece common::sense Mojo::JSON Test::LeakTrace Test::CPAN::Meta Test::Pod Test::Pod::Coverage +set PERL_MM_USE_DEFAULT=1 + +if not "%PLATFORM%" == "x64" set WIN64=undef +if "%STRAWBERRY%" == "1" goto gcc +if "%MSVC_CPERL%" == "1" goto msvc + +:gcc + +set PATH=C:\strawberry\perl\bin;C:\strawberry\perl\site\bin;C:\strawberry\c\bin;%PATH% +echo cpan -T %REQS% +call cpan -T %REQS% || exit /b 1 +echo perl Makefile.PL +perl Makefile.PL || exit /b 1 +rem strawberry switched with 5.26 from dmake to gmake +echo $Config{make} +perl -MConfig -e "system({$Config{make}} $Config{make}); exit(($? < 0 || $? & 127) ? 1 : ($? >> 8));" || exit /b 1 +echo $Config{make} test +perl -MConfig -e "system({$Config{make}} $Config{make}, 'test'); exit(($? < 0 || $? & 127) ? 1 : ($? >> 8));" || exit /b 1 + +exit /b + +:msvc +if "%PLATFORM%" == "x64" set PLATFORM=amd64 +rem 14 deviates from cperl with linker errors for the libc runtime +set MSVC_VERSION=12 +call "C:\Program Files (x86)\Microsoft Visual Studio %MSVC_VERSION%.0\VC\vcvarsall.bat" %PLATFORM% || exit /b 1 + +set PATH=C:\cperl\bin;C:\cperl\site\bin;%PATH% +echo cperl -S cpan -T %REQS% +cperl -S cpan -T %REQS% || exit /b 1 +echo cperl Makefile.PL +cperl Makefile.PL || exit /b 1 +echo nmake +nmake || exit /b 1 +echo nmake test +nmake test || exit /b 1 + diff -Nru libcpanel-json-xs-perl-3.0210/t/gh70-asan.t libcpanel-json-xs-perl-3.0239/t/gh70-asan.t --- libcpanel-json-xs-perl-3.0210/t/gh70-asan.t 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/gh70-asan.t 2016-10-07 17:18:15.000000000 +0000 @@ -0,0 +1,12 @@ +#! perl +# check a too short new() argument to memcmp, only with asan or valgrind. +# GH #70 + +use Test::Simple tests => 1; + +package J; +use base "Cpanel::JSON::XS"; +J->new; + +package main; +ok(1); diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_number_neg_int_huge_exp.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_number_neg_int_huge_exp.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_number_neg_int_huge_exp.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_number_neg_int_huge_exp.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-1e+9999] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_number_pos_double_huge_exp.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_number_pos_double_huge_exp.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_number_pos_double_huge_exp.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_number_pos_double_huge_exp.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1.5e+9999] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_object_key_lone_2nd_surrogate.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_object_key_lone_2nd_surrogate.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_object_key_lone_2nd_surrogate.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_object_key_lone_2nd_surrogate.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"\uDFAA":0} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_1st_surrogate_but_2nd_missing.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_1st_surrogate_but_2nd_missing.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_1st_surrogate_but_2nd_missing.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_1st_surrogate_but_2nd_missing.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uDADA"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD888\u1234"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD800\n"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_incomplete_surrogate_pair.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_incomplete_surrogate_pair.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_incomplete_surrogate_pair.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_incomplete_surrogate_pair.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uDd1ea"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_incomplete_surrogates_escape_valid.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_incomplete_surrogates_escape_valid.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_incomplete_surrogates_escape_valid.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_incomplete_surrogates_escape_valid.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD800\uD800\n"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_inverted_surrogates_U+1D11E.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_inverted_surrogates_U+1D11E.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_inverted_surrogates_U+1D11E.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_inverted_surrogates_U+1D11E.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uDd1e\uD834"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_lone_second_surrogate.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_lone_second_surrogate.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_lone_second_surrogate.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_lone_second_surrogate.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uDFAA"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_not_in_unicode_range.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_not_in_unicode_range.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_not_in_unicode_range.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_not_in_unicode_range.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["ô¿¿¿"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_truncated-utf-8.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_truncated-utf-8.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_truncated-utf-8.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_truncated-utf-8.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["àÿ"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_unicode_U+10FFFE_nonchar.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_unicode_U+10FFFE_nonchar.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_unicode_U+10FFFE_nonchar.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_unicode_U+10FFFE_nonchar.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uDBFF\uDFFE"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_unicode_U+1FFFE_nonchar.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_unicode_U+1FFFE_nonchar.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_unicode_U+1FFFE_nonchar.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_unicode_U+1FFFE_nonchar.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD83F\uDFFE"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_unicode_U+FDD0_nonchar.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_unicode_U+FDD0_nonchar.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_unicode_U+FDD0_nonchar.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_unicode_U+FDD0_nonchar.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uFDD0"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_unicode_U+FFFE_nonchar.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_unicode_U+FFFE_nonchar.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_unicode_U+FFFE_nonchar.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_unicode_U+FFFE_nonchar.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uFFFE"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_UTF-16_invalid_lonely_surrogate.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_UTF-16_invalid_lonely_surrogate.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_UTF-16_invalid_lonely_surrogate.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_UTF-16_invalid_lonely_surrogate.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\ud800"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_UTF-16_invalid_surrogate.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_UTF-16_invalid_surrogate.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_UTF-16_invalid_surrogate.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_UTF-16_invalid_surrogate.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\ud800abc"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_UTF-8_invalid_sequence.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_UTF-8_invalid_sequence.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_string_UTF-8_invalid_sequence.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_string_UTF-8_invalid_sequence.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["日шú"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_structure_500_nested_arrays.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_structure_500_nested_arrays.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_structure_500_nested_arrays.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_structure_500_nested_arrays.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/i_structure_UTF-8_BOM_empty_object.json libcpanel-json-xs-perl-3.0239/t/test_parsing/i_structure_UTF-8_BOM_empty_object.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/i_structure_UTF-8_BOM_empty_object.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/i_structure_UTF-8_BOM_empty_object.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_1_true_without_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_1_true_without_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_1_true_without_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_1_true_without_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1 true] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_a_invalid_utf8.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_a_invalid_utf8.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_a_invalid_utf8.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_a_invalid_utf8.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[aå] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_colon_instead_of_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_colon_instead_of_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_colon_instead_of_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_colon_instead_of_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["": 1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_comma_after_close.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_comma_after_close.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_comma_after_close.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_comma_after_close.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[""], \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_comma_and_number.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_comma_and_number.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_comma_and_number.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_comma_and_number.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[,1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_double_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_double_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_double_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_double_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1,,2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_double_extra_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_double_extra_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_double_extra_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_double_extra_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["x",,] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_extra_close.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_extra_close.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_extra_close.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_extra_close.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["x"]] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_extra_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_extra_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_extra_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_extra_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["",] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_incomplete_invalid_value.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_incomplete_invalid_value.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_incomplete_invalid_value.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_incomplete_invalid_value.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[x \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_incomplete.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_incomplete.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_incomplete.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_incomplete.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["x" \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_inner_array_no_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_inner_array_no_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_inner_array_no_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_inner_array_no_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[3[4]] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_invalid_utf8.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_invalid_utf8.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_invalid_utf8.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_invalid_utf8.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[ÿ] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_items_separated_by_semicolon.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_items_separated_by_semicolon.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_items_separated_by_semicolon.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_items_separated_by_semicolon.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1:2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_just_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_just_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_just_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_just_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[,] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_just_minus.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_just_minus.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_just_minus.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_just_minus.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_missing_value.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_missing_value.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_missing_value.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_missing_value.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[ , ""] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_newlines_unclosed.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_newlines_unclosed.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_newlines_unclosed.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_newlines_unclosed.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1,3 @@ +["a", +4 +,1, \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_number_and_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_number_and_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_number_and_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_number_and_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1,] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_number_and_several_commas.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_number_and_several_commas.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_number_and_several_commas.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_number_and_several_commas.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1,,] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_spaces_vertical_tab_formfeed.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_spaces_vertical_tab_formfeed.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_spaces_vertical_tab_formfeed.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_spaces_vertical_tab_formfeed.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[" a"\f] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_star_inside.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_star_inside.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_star_inside.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_star_inside.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[*] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_unclosed.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_unclosed.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_unclosed.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_unclosed.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["" \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_unclosed_trailing_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_unclosed_trailing_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_unclosed_trailing_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_unclosed_trailing_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1, \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_unclosed_with_new_lines.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_unclosed_with_new_lines.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_unclosed_with_new_lines.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_unclosed_with_new_lines.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1,3 @@ +[1, +1 +,1 \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_unclosed_with_object_inside.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_unclosed_with_object_inside.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_array_unclosed_with_object_inside.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_array_unclosed_with_object_inside.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[{} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_incomplete_false.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_incomplete_false.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_incomplete_false.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_incomplete_false.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[fals] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_incomplete_null.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_incomplete_null.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_incomplete_null.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_incomplete_null.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[nul] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_incomplete_true.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_incomplete_true.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_incomplete_true.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_incomplete_true.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[tru] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0.1.2.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0.1.2.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0.1.2.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0.1.2.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0.1.2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_-01.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_-01.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_-01.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_-01.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-01] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0.3e.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0.3e.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0.3e.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0.3e.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0.3e] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0.3e+.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0.3e+.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0.3e+.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0.3e+.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0.3e+] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0_capital_E.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0_capital_E.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0_capital_E.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0_capital_E.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0E] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0_capital_E+.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0_capital_E+.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0_capital_E+.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0_capital_E+.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0E+] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0.e1.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0.e1.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0.e1.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0.e1.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0.e1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0e.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0e.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0e.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0e.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0e] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0e+.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0e+.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_0e+.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_0e+.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0e+] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_1_000.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_1_000.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_1_000.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_1_000.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1 000.0] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_1.0e-.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_1.0e-.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_1.0e-.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_1.0e-.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1.0e-] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_1.0e.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_1.0e.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_1.0e.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_1.0e.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1.0e] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_1.0e+.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_1.0e+.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_1.0e+.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_1.0e+.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1.0e+] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_-1.0..json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_-1.0..json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_-1.0..json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_-1.0..json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-1.0.] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_1eE2.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_1eE2.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_1eE2.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_1eE2.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1eE2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_.-1.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_.-1.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_.-1.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_.-1.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[.-1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_+1.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_+1.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_+1.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_+1.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[+1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_.2e-3.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_.2e-3.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_.2e-3.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_.2e-3.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[.2e-3] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_2.e-3.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_2.e-3.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_2.e-3.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_2.e-3.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[2.e-3] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_2.e+3.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_2.e+3.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_2.e+3.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_2.e+3.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[2.e+3] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_2.e3.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_2.e3.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_2.e3.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_2.e3.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[2.e3] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_-2..json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_-2..json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_-2..json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_-2..json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-2.] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_9.e+.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_9.e+.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_9.e+.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_9.e+.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[9.e+] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_expression.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_expression.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_expression.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_expression.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1+2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_hex_1_digit.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_hex_1_digit.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_hex_1_digit.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_hex_1_digit.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0x1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_hex_2_digits.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_hex_2_digits.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_hex_2_digits.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_hex_2_digits.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0x42] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_infinity.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_infinity.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_infinity.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_infinity.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[Infinity] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_+Inf.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_+Inf.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_+Inf.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_+Inf.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[+Inf] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_Inf.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_Inf.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_Inf.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_Inf.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[Inf] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_invalid+-.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_invalid+-.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_invalid+-.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_invalid+-.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0e+-1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_invalid-negative-real.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_invalid-negative-real.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_invalid-negative-real.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_invalid-negative-real.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-123.123foo] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_invalid-utf-8-in-bigger-int.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_invalid-utf-8-in-bigger-int.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_invalid-utf-8-in-bigger-int.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_invalid-utf-8-in-bigger-int.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[123å] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_invalid-utf-8-in-exponent.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_invalid-utf-8-in-exponent.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_invalid-utf-8-in-exponent.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_invalid-utf-8-in-exponent.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1e1å] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_invalid-utf-8-in-int.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_invalid-utf-8-in-int.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_invalid-utf-8-in-int.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_invalid-utf-8-in-int.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0å] diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_++.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_++.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_++.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_++.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[++1234] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_minus_infinity.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_minus_infinity.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_minus_infinity.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_minus_infinity.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-Infinity] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_minus_sign_with_trailing_garbage.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_minus_sign_with_trailing_garbage.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_minus_sign_with_trailing_garbage.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_minus_sign_with_trailing_garbage.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-foo] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_minus_space_1.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_minus_space_1.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_minus_space_1.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_minus_space_1.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[- 1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_-NaN.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_-NaN.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_-NaN.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_-NaN.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-NaN] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_NaN.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_NaN.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_NaN.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_NaN.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[NaN] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_neg_int_starting_with_zero.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_neg_int_starting_with_zero.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_neg_int_starting_with_zero.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_neg_int_starting_with_zero.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-012] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_neg_real_without_int_part.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_neg_real_without_int_part.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_neg_real_without_int_part.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_neg_real_without_int_part.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-.123] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_neg_with_garbage_at_end.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_neg_with_garbage_at_end.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_neg_with_garbage_at_end.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_neg_with_garbage_at_end.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-1x] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_real_garbage_after_e.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_real_garbage_after_e.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_real_garbage_after_e.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_real_garbage_after_e.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1ea] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_real_with_invalid_utf8_after_e.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_real_with_invalid_utf8_after_e.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_real_with_invalid_utf8_after_e.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_real_with_invalid_utf8_after_e.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1eå] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_real_without_fractional_part.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_real_without_fractional_part.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_real_without_fractional_part.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_real_without_fractional_part.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1.] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_starting_with_dot.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_starting_with_dot.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_starting_with_dot.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_starting_with_dot.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[.123] \ No newline at end of file Binary files /tmp/tmpT8E1tw/h6PSyt8O3d/libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_then_00.json and /tmp/tmpT8E1tw/Yyob7ssCPj/libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_then_00.json differ diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_U+FF11_fullwidth_digit_one.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_U+FF11_fullwidth_digit_one.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_U+FF11_fullwidth_digit_one.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_U+FF11_fullwidth_digit_one.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_with_alpha_char.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_with_alpha_char.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_with_alpha_char.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_with_alpha_char.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1.8011670033376514H-308] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_with_alpha.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_with_alpha.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_with_alpha.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_with_alpha.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1.2a-3] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_with_leading_zero.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_with_leading_zero.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_number_with_leading_zero.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_number_with_leading_zero.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[012] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_bad_value.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_bad_value.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_bad_value.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_bad_value.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["x", truth] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_bracket_key.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_bracket_key.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_bracket_key.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_bracket_key.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{[: "x"} diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_comma_instead_of_colon.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_comma_instead_of_colon.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_comma_instead_of_colon.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_comma_instead_of_colon.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"x", null} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_double_colon.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_double_colon.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_double_colon.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_double_colon.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"x"::"b"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_emoji.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_emoji.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_emoji.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_emoji.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{🇨🇭} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_garbage_at_end.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_garbage_at_end.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_garbage_at_end.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_garbage_at_end.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"a" 123} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_key_with_single_quotes.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_key_with_single_quotes.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_key_with_single_quotes.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_key_with_single_quotes.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{key: 'value'} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_missing_colon.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_missing_colon.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_missing_colon.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_missing_colon.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a" b} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_missing_key.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_missing_key.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_missing_key.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_missing_key.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{:"b"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_missing_semicolon.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_missing_semicolon.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_missing_semicolon.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_missing_semicolon.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a" "b"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_missing_value.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_missing_value.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_missing_value.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_missing_value.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a": \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_no-colon.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_no-colon.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_no-colon.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_no-colon.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a" \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_non_string_key_but_huge_number_instead.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_non_string_key_but_huge_number_instead.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_non_string_key_but_huge_number_instead.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_non_string_key_but_huge_number_instead.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{9999E9999:1} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_non_string_key.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_non_string_key.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_non_string_key.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_non_string_key.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{1:1} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_pi_in_key_and_trailing_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_pi_in_key_and_trailing_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_pi_in_key_and_trailing_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_pi_in_key_and_trailing_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"¹":"0",} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_repeated_null_null.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_repeated_null_null.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_repeated_null_null.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_repeated_null_null.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{null:null,null:null} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_several_trailing_commas.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_several_trailing_commas.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_several_trailing_commas.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_several_trailing_commas.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"id":0,,,,,} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_single_quote.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_single_quote.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_single_quote.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_single_quote.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{'a':0} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_trailing_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_trailing_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_trailing_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_trailing_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"id":0,} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_trailing_comment.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_trailing_comment.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_trailing_comment.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_trailing_comment.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"b"}/**/ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_trailing_comment_open.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_trailing_comment_open.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_trailing_comment_open.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_trailing_comment_open.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"b"}/**// \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_trailing_comment_slash_open_incomplete.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_trailing_comment_slash_open_incomplete.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_trailing_comment_slash_open_incomplete.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_trailing_comment_slash_open_incomplete.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"b"}/ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_trailing_comment_slash_open.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_trailing_comment_slash_open.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_trailing_comment_slash_open.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_trailing_comment_slash_open.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"b"}// \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_two_commas_in_a_row.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_two_commas_in_a_row.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_two_commas_in_a_row.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_two_commas_in_a_row.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"b",,"c":"d"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_unquoted_key.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_unquoted_key.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_unquoted_key.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_unquoted_key.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{a: "b"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_unterminated-value.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_unterminated-value.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_unterminated-value.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_unterminated-value.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"a \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_with_single_string.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_with_single_string.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_with_single_string.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_with_single_string.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{ "foo" : "bar", "a" } \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_with_trailing_garbage.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_with_trailing_garbage.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_object_with_trailing_garbage.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_object_with_trailing_garbage.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"b"}# \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_single_space.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_single_space.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_single_space.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_single_space.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ + \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_1_surrogate_then_escape.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_1_surrogate_then_escape.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_1_surrogate_then_escape.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_1_surrogate_then_escape.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD800\"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_1_surrogate_then_escape_u1.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_1_surrogate_then_escape_u1.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_1_surrogate_then_escape_u1.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_1_surrogate_then_escape_u1.json 2016-10-28 08:31:16.000000000 +0000 @@ -0,0 +1 @@ +["\uD800\u1"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_1_surrogate_then_escape_u1x.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_1_surrogate_then_escape_u1x.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_1_surrogate_then_escape_u1x.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_1_surrogate_then_escape_u1x.json 2016-10-28 08:31:16.000000000 +0000 @@ -0,0 +1 @@ +["\uD800\u1x"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_1_surrogate_then_escape_u.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_1_surrogate_then_escape_u.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_1_surrogate_then_escape_u.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_1_surrogate_then_escape_u.json 2016-10-28 08:31:16.000000000 +0000 @@ -0,0 +1 @@ +["\uD800\u"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_accentuated_char_no_quotes.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_accentuated_char_no_quotes.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_accentuated_char_no_quotes.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_accentuated_char_no_quotes.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[é] \ No newline at end of file Binary files /tmp/tmpT8E1tw/h6PSyt8O3d/libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_backslash_00.json and /tmp/tmpT8E1tw/Yyob7ssCPj/libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_backslash_00.json differ diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_escaped_backslash_bad.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_escaped_backslash_bad.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_escaped_backslash_bad.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_escaped_backslash_bad.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\\\"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_escaped_ctrl_char_tab.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_escaped_ctrl_char_tab.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_escaped_ctrl_char_tab.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_escaped_ctrl_char_tab.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\ "] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_escaped_emoji.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_escaped_emoji.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_escaped_emoji.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_escaped_emoji.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\🌀"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_escape_x.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_escape_x.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_escape_x.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_escape_x.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\x00"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_incomplete_escaped_character.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_incomplete_escaped_character.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_incomplete_escaped_character.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_incomplete_escaped_character.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u00A"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_incomplete_escape.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_incomplete_escape.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_incomplete_escape.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_incomplete_escape.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_incomplete_surrogate_escape_invalid.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_incomplete_surrogate_escape_invalid.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_incomplete_surrogate_escape_invalid.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_incomplete_surrogate_escape_invalid.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD800\uD800\x"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_invalid_backslash_esc.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_invalid_backslash_esc.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_invalid_backslash_esc.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_invalid_backslash_esc.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\a"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_invalid_unicode_escape.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_invalid_unicode_escape.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_invalid_unicode_escape.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_invalid_unicode_escape.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uqqqq"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_invalid_utf8_after_escape.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_invalid_utf8_after_escape.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_invalid_utf8_after_escape.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_invalid_utf8_after_escape.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\å"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_invalid-utf-8-in-escape.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_invalid-utf-8-in-escape.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_invalid-utf-8-in-escape.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_invalid-utf-8-in-escape.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uå"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_invalid_utf-8.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_invalid_utf-8.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_invalid_utf-8.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_invalid_utf-8.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["ÿ"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_iso_latin_1.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_iso_latin_1.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_iso_latin_1.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_iso_latin_1.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["é"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_leading_uescaped_thinspace.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_leading_uescaped_thinspace.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_leading_uescaped_thinspace.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_leading_uescaped_thinspace.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[\u0020"asd"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_lone_utf8_continuation_byte.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_lone_utf8_continuation_byte.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_lone_utf8_continuation_byte.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_lone_utf8_continuation_byte.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[""] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_no_quotes_with_bad_escape.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_no_quotes_with_bad_escape.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_no_quotes_with_bad_escape.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_no_quotes_with_bad_escape.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[\n] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_overlong_sequence_2_bytes.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_overlong_sequence_2_bytes.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_overlong_sequence_2_bytes.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_overlong_sequence_2_bytes.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["À¯"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_overlong_sequence_6_bytes.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_overlong_sequence_6_bytes.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_overlong_sequence_6_bytes.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_overlong_sequence_6_bytes.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["üƒ¿¿¿¿"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_overlong_sequence_6_bytes_null.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_overlong_sequence_6_bytes_null.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_overlong_sequence_6_bytes_null.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_overlong_sequence_6_bytes_null.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["ü€€€€€"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_single_doublequote.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_single_doublequote.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_single_doublequote.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_single_doublequote.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +" \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_single_quote.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_single_quote.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_single_quote.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_single_quote.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +['single quote'] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_single_string_no_double_quotes.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_single_string_no_double_quotes.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_single_string_no_double_quotes.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_single_string_no_double_quotes.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +abc \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_start_escape_unclosed.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_start_escape_unclosed.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_start_escape_unclosed.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_start_escape_unclosed.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\ \ No newline at end of file Binary files /tmp/tmpT8E1tw/h6PSyt8O3d/libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_unescaped_crtl_char.json and /tmp/tmpT8E1tw/Yyob7ssCPj/libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_unescaped_crtl_char.json differ diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_unescaped_newline.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_unescaped_newline.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_unescaped_newline.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_unescaped_newline.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1,2 @@ +["new +line"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_unescaped_tab.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_unescaped_tab.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_unescaped_tab.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_unescaped_tab.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[" "] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_unicode_CapitalU.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_unicode_CapitalU.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_unicode_CapitalU.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_unicode_CapitalU.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +"\UA66D" \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_UTF-16_incomplete_surrogate.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_UTF-16_incomplete_surrogate.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_UTF-16_incomplete_surrogate.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_UTF-16_incomplete_surrogate.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD834\uDd"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_UTF8_surrogate_U+D800.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_UTF8_surrogate_U+D800.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_UTF8_surrogate_U+D800.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_UTF8_surrogate_U+D800.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["í €"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_with_trailing_garbage.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_with_trailing_garbage.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_string_with_trailing_garbage.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_string_with_trailing_garbage.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +""x \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_100000_opening_arrays.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_100000_opening_arrays.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_100000_opening_arrays.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_100000_opening_arrays.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_array_trailing_garbage.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_array_trailing_garbage.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_array_trailing_garbage.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_array_trailing_garbage.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1]x \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_array_with_extra_array_close.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_array_with_extra_array_close.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_array_with_extra_array_close.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_array_with_extra_array_close.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1]] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_array_with_unclosed_string.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_array_with_unclosed_string.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_array_with_unclosed_string.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_array_with_unclosed_string.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["asd] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_ascii-unicode-identifier.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_ascii-unicode-identifier.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_ascii-unicode-identifier.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_ascii-unicode-identifier.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +aÃ¥ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_capitalized_True.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_capitalized_True.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_capitalized_True.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_capitalized_True.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[True] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_close_unopened_array.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_close_unopened_array.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_close_unopened_array.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_close_unopened_array.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_comma_instead_of_closing_brace.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_comma_instead_of_closing_brace.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_comma_instead_of_closing_brace.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_comma_instead_of_closing_brace.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"x": true, \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_double_array.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_double_array.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_double_array.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_double_array.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[][] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_end_array.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_end_array.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_end_array.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_end_array.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_incomplete_UTF8_BOM.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_incomplete_UTF8_BOM.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_incomplete_UTF8_BOM.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_incomplete_UTF8_BOM.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +ï»{} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_lone-invalid-utf-8.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_lone-invalid-utf-8.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_lone-invalid-utf-8.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_lone-invalid-utf-8.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +å \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_lone-open-bracket.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_lone-open-bracket.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_lone-open-bracket.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_lone-open-bracket.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_lt.gt.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_lt.gt.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_lt.gt.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_lt.gt.json 2016-10-28 08:31:16.000000000 +0000 @@ -0,0 +1 @@ +<.> \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_ltnullgt.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_ltnullgt.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_ltnullgt.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_ltnullgt.json 2016-10-28 08:31:16.000000000 +0000 @@ -0,0 +1 @@ +[] \ No newline at end of file Binary files /tmp/tmpT8E1tw/h6PSyt8O3d/libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_null-byte-outside-string.json and /tmp/tmpT8E1tw/Yyob7ssCPj/libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_null-byte-outside-string.json differ diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_number_with_trailing_garbage.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_number_with_trailing_garbage.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_number_with_trailing_garbage.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_number_with_trailing_garbage.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +2@ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_object_followed_by_closing_object.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_object_followed_by_closing_object.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_object_followed_by_closing_object.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_object_followed_by_closing_object.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{}} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_object_unclosed_no_value.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_object_unclosed_no_value.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_object_unclosed_no_value.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_object_unclosed_no_value.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"": \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_object_with_comment.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_object_with_comment.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_object_with_comment.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_object_with_comment.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":/*comment*/"b"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_object_with_trailing_garbage.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_object_with_trailing_garbage.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_object_with_trailing_garbage.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_object_with_trailing_garbage.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a": true} "x" \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_apostrophe.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_apostrophe.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_apostrophe.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_apostrophe.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[' \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[, \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_object.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_object.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_object.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_object.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"":[{"": diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_open_object.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_open_object.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_open_object.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_open_object.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[{ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_open_string.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_open_string.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_open_string.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_open_string.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["a \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_string.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_string.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_array_string.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_array_string.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["a" \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object_close_array.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object_close_array.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object_close_array.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object_close_array.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object_comma.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object_comma.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object_comma.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object_comma.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{, \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object_open_array.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object_open_array.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object_open_array.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object_open_array.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{[ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object_open_string.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object_open_string.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object_open_string.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object_open_string.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object_string_with_apostrophes.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object_string_with_apostrophes.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_object_string_with_apostrophes.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_object_string_with_apostrophes.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{'a' \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_open.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_open.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_open_open.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_open_open.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\{["\{["\{["\{ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_single_point.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_single_point.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_single_point.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_single_point.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +é \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_single_star.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_single_star.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_single_star.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_single_star.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +* \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_trailing_#.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_trailing_#.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_trailing_#.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_trailing_#.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"b"}#{} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_U+2060_word_joined.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_U+2060_word_joined.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_U+2060_word_joined.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_U+2060_word_joined.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[â ] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_uescaped_LF_before_string.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_uescaped_LF_before_string.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_uescaped_LF_before_string.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_uescaped_LF_before_string.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[\u000A""] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unclosed_array.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unclosed_array.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unclosed_array.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unclosed_array.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1 \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unclosed_array_partial_null.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unclosed_array_partial_null.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unclosed_array_partial_null.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unclosed_array_partial_null.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[ false, nul \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unclosed_array_unfinished_false.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unclosed_array_unfinished_false.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unclosed_array_unfinished_false.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unclosed_array_unfinished_false.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[ true, fals \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unclosed_array_unfinished_true.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unclosed_array_unfinished_true.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unclosed_array_unfinished_true.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unclosed_array_unfinished_true.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[ false, tru \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unclosed_object.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unclosed_object.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unclosed_object.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unclosed_object.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"asd":"asd" \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unicode-identifier.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unicode-identifier.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_unicode-identifier.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_unicode-identifier.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +Ã¥ \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_UTF8_BOM_no_data.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_UTF8_BOM_no_data.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_UTF8_BOM_no_data.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_UTF8_BOM_no_data.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ + \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_whitespace_formfeed.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_whitespace_formfeed.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_whitespace_formfeed.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_whitespace_formfeed.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_whitespace_U+2060_word_joiner.json libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_whitespace_U+2060_word_joiner.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/n_structure_whitespace_U+2060_word_joiner.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/n_structure_whitespace_U+2060_word_joiner.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[â ] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_arraysWithSpaces.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_arraysWithSpaces.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_arraysWithSpaces.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_arraysWithSpaces.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[[] ] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_empty.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_empty.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_empty.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_empty.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_empty-string.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_empty-string.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_empty-string.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_empty-string.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[""] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_ending_with_newline.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_ending_with_newline.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_ending_with_newline.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_ending_with_newline.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["a"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_false.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_false.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_false.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_false.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[false] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_heterogeneous.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_heterogeneous.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_heterogeneous.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_heterogeneous.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[null, 1, "1", {}] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_null.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_null.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_null.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_null.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[null] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_with_1_and_newline.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_with_1_and_newline.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_with_1_and_newline.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_with_1_and_newline.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1,2 @@ +[1 +] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_with_leading_space.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_with_leading_space.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_with_leading_space.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_with_leading_space.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ + [1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_with_several_null.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_with_several_null.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_with_several_null.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_with_several_null.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1,null,null,null,2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_with_trailing_space.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_with_trailing_space.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_array_with_trailing_space.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_array_with_trailing_space.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_0e+1.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_0e+1.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_0e+1.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_0e+1.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0e+1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_0e1.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_0e1.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_0e1.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_0e1.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0e1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_after_space.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_after_space.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_after_space.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_after_space.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[ 4] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_double_close_to_zero.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_double_close_to_zero.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_double_close_to_zero.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_double_close_to_zero.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-0.000000000000000000000000000000000000000000000000000000000000000000000000000001] diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_double_huge_neg_exp.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_double_huge_neg_exp.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_double_huge_neg_exp.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_double_huge_neg_exp.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[123.456e-789] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_huge_exp.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_huge_exp.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_huge_exp.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_huge_exp.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[0.4e00669999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999969999999006] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_int_with_exp.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_int_with_exp.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_int_with_exp.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_int_with_exp.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[20e1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[123e65] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_minus_zero.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_minus_zero.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_minus_zero.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_minus_zero.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-0] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_negative_int.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_negative_int.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_negative_int.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_negative_int.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-123] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_negative_one.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_negative_one.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_negative_one.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_negative_one.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-1] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_negative_zero.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_negative_zero.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_negative_zero.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_negative_zero.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-0] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_capital_e.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_capital_e.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_capital_e.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_capital_e.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1E22] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_capital_e_neg_exp.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_capital_e_neg_exp.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_capital_e_neg_exp.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_capital_e_neg_exp.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1E-2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_capital_e_pos_exp.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_capital_e_pos_exp.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_capital_e_pos_exp.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_capital_e_pos_exp.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1E+2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_exponent.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_exponent.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_exponent.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_exponent.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[123e45] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_fraction_exponent.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_fraction_exponent.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_fraction_exponent.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_fraction_exponent.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[123.456e78] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_neg_exp.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_neg_exp.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_neg_exp.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_neg_exp.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1e-2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_neg_overflow.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_neg_overflow.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_neg_overflow.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_neg_overflow.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-123123e100000] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_pos_exponent.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_pos_exponent.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_pos_exponent.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_pos_exponent.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1e+2] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_pos_overflow.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_pos_overflow.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_pos_overflow.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_pos_overflow.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[123123e100000] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_underflow.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_underflow.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_real_underflow.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_real_underflow.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[123e-10000000] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_simple_int.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_simple_int.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_simple_int.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_simple_int.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[123] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_simple_real.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_simple_real.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_simple_real.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_simple_real.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[123.456789] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_too_big_neg_int.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_too_big_neg_int.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_too_big_neg_int.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_too_big_neg_int.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-123123123123123123123123123123] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_too_big_pos_int.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_too_big_pos_int.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_too_big_pos_int.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_too_big_pos_int.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[100000000000000000000] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_very_big_negative_int.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_very_big_negative_int.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_number_very_big_negative_int.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_number_very_big_negative_int.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[-237462374673276894279832749832423479823246327846] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_basic.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_basic.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_basic.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_basic.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"asd":"sdf"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_duplicated_key_and_value.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_duplicated_key_and_value.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_duplicated_key_and_value.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_duplicated_key_and_value.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"b","a":"b"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_duplicated_key.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_duplicated_key.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_duplicated_key.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_duplicated_key.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":"b","a":"c"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_empty.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_empty.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_empty.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_empty.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_empty_key.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_empty_key.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_empty_key.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_empty_key.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"":0} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_escaped_null_in_key.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_escaped_null_in_key.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_escaped_null_in_key.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_escaped_null_in_key.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"foo\u0000bar": 42} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_extreme_numbers.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_extreme_numbers.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_extreme_numbers.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_extreme_numbers.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{ "min": -1.0e+28, "max": 1.0e+28 } diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"asd":"sdf", "dfg":"fgh"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_long_strings.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_long_strings.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_long_strings.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_long_strings.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"x":[{"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}], "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_simple.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_simple.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_simple.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_simple.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":[]} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_string_unicode.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_string_unicode.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_string_unicode.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_string_unicode.json 2016-10-27 16:57:42.000000000 +0000 @@ -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 -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_with_newlines.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_with_newlines.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_object_with_newlines.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_object_with_newlines.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1,3 @@ +{ +"a": "b" +} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u0060\u012a\u12AB"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_accepted_surrogate_pair.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_accepted_surrogate_pair.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_accepted_surrogate_pair.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_accepted_surrogate_pair.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD801\udc37"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_accepted_surrogate_pairs.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_accepted_surrogate_pairs.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_accepted_surrogate_pairs.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_accepted_surrogate_pairs.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\ud83d\ude39\ud83d\udc8d"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_allowed_escapes.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_allowed_escapes.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_allowed_escapes.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_allowed_escapes.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\"\\\/\b\f\n\r\t"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_backslash_and_u_escaped_zero.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_backslash_and_u_escaped_zero.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_backslash_and_u_escaped_zero.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_backslash_and_u_escaped_zero.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\\u0000"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_backslash_doublequotes.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_backslash_doublequotes.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_backslash_doublequotes.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_backslash_doublequotes.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\""] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_comments.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_comments.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_comments.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_comments.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["a/*b*/c/*d//e"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_double_escape_a.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_double_escape_a.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_double_escape_a.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_double_escape_a.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\\a"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_double_escape_n.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_double_escape_n.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_double_escape_n.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_double_escape_n.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\\n"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_escaped_control_character.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_escaped_control_character.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_escaped_control_character.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_escaped_control_character.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u0012"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_escaped_noncharacter.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_escaped_noncharacter.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_escaped_noncharacter.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_escaped_noncharacter.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uFFFF"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_in_array.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_in_array.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_in_array.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_in_array.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["asd"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_in_array_with_leading_space.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_in_array_with_leading_space.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_in_array_with_leading_space.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_in_array_with_leading_space.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[ "asd"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_last_surrogates_1_and_2.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_last_surrogates_1_and_2.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_last_surrogates_1_and_2.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_last_surrogates_1_and_2.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uDBFF\uDFFF"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_newline_uescaped.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_newline_uescaped.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_newline_uescaped.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_newline_uescaped.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["new\u00A0line"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["ô¿¿"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["𛿿"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["ï¿¿"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_null_escape.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_null_escape.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_null_escape.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_null_escape.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u0000"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_one-byte-utf-8.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_one-byte-utf-8.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_one-byte-utf-8.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_one-byte-utf-8.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u002c"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_pi.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_pi.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_pi.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_pi.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["Ï€"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_simple_ascii.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_simple_ascii.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_simple_ascii.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_simple_ascii.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["asd "] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_space.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_space.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_space.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_space.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +" " \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_three-byte-utf-8.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_three-byte-utf-8.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_three-byte-utf-8.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_three-byte-utf-8.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u0821"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_two-byte-utf-8.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_two-byte-utf-8.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_two-byte-utf-8.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_two-byte-utf-8.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u0123"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_u+2028_line_sep.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_u+2028_line_sep.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_u+2028_line_sep.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_u+2028_line_sep.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["
"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_u+2029_par_sep.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_u+2029_par_sep.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_u+2029_par_sep.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_u+2029_par_sep.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["
"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_uEscape.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_uEscape.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_uEscape.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_uEscape.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u0061\u30af\u30EA\u30b9"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unescaped_char_delete.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unescaped_char_delete.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unescaped_char_delete.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unescaped_char_delete.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[""] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicode_2.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicode_2.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicode_2.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicode_2.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["â‚㈴â‚"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicodeEscapedBackslash.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicodeEscapedBackslash.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicodeEscapedBackslash.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicodeEscapedBackslash.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u005C"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicode_escaped_double_quote.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicode_escaped_double_quote.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicode_escaped_double_quote.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicode_escaped_double_quote.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u0022"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicode.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicode.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicode.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicode.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uA66D"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u200B"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicode_U+2064_invisible_plus.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicode_U+2064_invisible_plus.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_unicode_U+2064_invisible_plus.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_unicode_U+2064_invisible_plus.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\u2064"] \ No newline at end of file Binary files /tmp/tmpT8E1tw/h6PSyt8O3d/libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_utf16be.json and /tmp/tmpT8E1tw/Yyob7ssCPj/libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_utf16be.json differ Binary files /tmp/tmpT8E1tw/h6PSyt8O3d/libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_utf16.json and /tmp/tmpT8E1tw/Yyob7ssCPj/libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_utf16.json differ diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD834\uDd1e"] \ No newline at end of file Binary files /tmp/tmpT8E1tw/h6PSyt8O3d/libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_utf32be.json and /tmp/tmpT8E1tw/Yyob7ssCPj/libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_utf32be.json differ Binary files /tmp/tmpT8E1tw/h6PSyt8O3d/libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_utf32.json and /tmp/tmpT8E1tw/Yyob7ssCPj/libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_utf32.json differ diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_utf8.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_utf8.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_utf8.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_utf8.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["€ð„ž"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_with_del_character.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_with_del_character.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_string_with_del_character.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_string_with_del_character.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["aa"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_false.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_false.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_false.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_false.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +false \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_int.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_int.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_int.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_int.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +42 \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_negative_real.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_negative_real.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_negative_real.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_negative_real.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +-0.1 \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_null.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_null.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_null.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_null.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +null \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_string.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_string.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_string.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_string.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +"asd" \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_true.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_true.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_lonely_true.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_lonely_true.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +true \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_string_empty.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_string_empty.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_string_empty.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_string_empty.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +"" \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_trailing_newline.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_trailing_newline.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_trailing_newline.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_trailing_newline.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["a"] diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_true_in_array.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_true_in_array.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_true_in_array.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_true_in_array.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[true] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_whitespace_array.json libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_whitespace_array.json --- libcpanel-json-xs-perl-3.0210/t/test_parsing/y_structure_whitespace_array.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_parsing/y_structure_whitespace_array.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ + [] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/number_1.000000000000000005.json libcpanel-json-xs-perl-3.0239/t/test_transform/number_1.000000000000000005.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/number_1.000000000000000005.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/number_1.000000000000000005.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1.000000000000000005] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/number_10000000000000000999.json libcpanel-json-xs-perl-3.0239/t/test_transform/number_10000000000000000999.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/number_10000000000000000999.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/number_10000000000000000999.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[10000000000000000999] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/number_1000000000000000.json libcpanel-json-xs-perl-3.0239/t/test_transform/number_1000000000000000.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/number_1000000000000000.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/number_1000000000000000.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1000000000000000] diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/number_1.0.json libcpanel-json-xs-perl-3.0239/t/test_transform/number_1.0.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/number_1.0.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/number_1.0.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1.0] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/number_1e6.json libcpanel-json-xs-perl-3.0239/t/test_transform/number_1e6.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/number_1e6.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/number_1e6.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1E6] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/number_1e-999.json libcpanel-json-xs-perl-3.0239/t/test_transform/number_1e-999.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/number_1e-999.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/number_1e-999.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +[1E-999] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/object_key_nfc_nfd.json libcpanel-json-xs-perl-3.0239/t/test_transform/object_key_nfc_nfd.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/object_key_nfc_nfd.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/object_key_nfc_nfd.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"é":"NFC","eÌ":"NFD"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/object_key_nfd_nfc.json libcpanel-json-xs-perl-3.0239/t/test_transform/object_key_nfd_nfc.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/object_key_nfd_nfc.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/object_key_nfd_nfc.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"eÌ":"NFD","é":"NFC"} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/object_same_key_different_values.json libcpanel-json-xs-perl-3.0239/t/test_transform/object_same_key_different_values.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/object_same_key_different_values.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/object_same_key_different_values.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":1,"a":2} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/object_same_key_same_value.json libcpanel-json-xs-perl-3.0239/t/test_transform/object_same_key_same_value.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/object_same_key_same_value.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/object_same_key_same_value.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":1,"a":1} \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/object_same_key_unclear_values.json libcpanel-json-xs-perl-3.0239/t/test_transform/object_same_key_unclear_values.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/object_same_key_unclear_values.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/object_same_key_unclear_values.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +{"a":0, "a":-0} diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/string_1_escaped_invalid_codepoint.json libcpanel-json-xs-perl-3.0239/t/test_transform/string_1_escaped_invalid_codepoint.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/string_1_escaped_invalid_codepoint.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/string_1_escaped_invalid_codepoint.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD800"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/string_1_invalid_codepoint.json libcpanel-json-xs-perl-3.0239/t/test_transform/string_1_invalid_codepoint.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/string_1_invalid_codepoint.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/string_1_invalid_codepoint.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["í €"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/string_2_escaped_invalid_codepoints.json libcpanel-json-xs-perl-3.0239/t/test_transform/string_2_escaped_invalid_codepoints.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/string_2_escaped_invalid_codepoints.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/string_2_escaped_invalid_codepoints.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD800\uD800"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/string_2_invalid_codepoints.json libcpanel-json-xs-perl-3.0239/t/test_transform/string_2_invalid_codepoints.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/string_2_invalid_codepoints.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/string_2_invalid_codepoints.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["í €í €"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/string_3_escaped_invalid_codepoints.json libcpanel-json-xs-perl-3.0239/t/test_transform/string_3_escaped_invalid_codepoints.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/string_3_escaped_invalid_codepoints.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/string_3_escaped_invalid_codepoints.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["\uD800\uD800\uD800"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/string_3_invalid_codepoints.json libcpanel-json-xs-perl-3.0239/t/test_transform/string_3_invalid_codepoints.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/string_3_invalid_codepoints.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/string_3_invalid_codepoints.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["í €í €í €"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/test_transform/string_with_escaped_NULL.json libcpanel-json-xs-perl-3.0239/t/test_transform/string_with_escaped_NULL.json --- libcpanel-json-xs-perl-3.0210/t/test_transform/string_with_escaped_NULL.json 1970-01-01 00:00:00.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/test_transform/string_with_escaped_NULL.json 2016-10-27 16:57:42.000000000 +0000 @@ -0,0 +1 @@ +["A\u0000B"] \ No newline at end of file diff -Nru libcpanel-json-xs-perl-3.0210/t/z_kwalitee.t libcpanel-json-xs-perl-3.0239/t/z_kwalitee.t --- libcpanel-json-xs-perl-3.0210/t/z_kwalitee.t 2015-11-25 19:24:17.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/z_kwalitee.t 2016-01-10 16:47:50.000000000 +0000 @@ -7,7 +7,7 @@ plan skip_all => 'requires Test::More 0.88' if Test::More->VERSION < 0.88; plan skip_all => 'This test is only run for the module author' - unless -d '.git' || $ENV{AUTHOR_TESTING}; + unless -d '.git' || $ENV{AUTHOR_TESTING} || $ENV{RELEASE_TESTING}; # Missing XS dependencies are usually not caught by EUMM # And they are usually only XS-loaded by the importer, not require. diff -Nru libcpanel-json-xs-perl-3.0210/t/z_perl_minimum_version.t libcpanel-json-xs-perl-3.0239/t/z_perl_minimum_version.t --- libcpanel-json-xs-perl-3.0210/t/z_perl_minimum_version.t 2015-10-23 09:00:11.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/z_perl_minimum_version.t 2017-07-27 20:15:44.000000000 +0000 @@ -9,7 +9,7 @@ my @MODULES = ( 'Perl::MinimumVersion 1.20', - 'Test::MinimumVersion 0.008', + 'Test::MinimumVersion 0.101082', ); # Don't run tests during end-user installs diff -Nru libcpanel-json-xs-perl-3.0210/t/z_pod-spelling.t libcpanel-json-xs-perl-3.0239/t/z_pod-spelling.t --- libcpanel-json-xs-perl-3.0210/t/z_pod-spelling.t 2015-12-03 11:56:30.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/z_pod-spelling.t 2017-03-29 09:51:37.000000000 +0000 @@ -13,65 +13,117 @@ all_pod_files_spelling_ok(); __DATA__ -interop -nonref -Lehmann -bencode -clzf -commandline -fromformat -le -toformat -yaml BMP +BOM +BOM's BSON +CBOR CVE +Cpanel Crockford +Crockford's +DESERIALIZATION +Deserializing ECMAscript GPL +IETF Iceweasel +JSON +JSON's KOI Lehmann +Lehmann MLEHMANN Mojo +MongoDB MovableType +NOK +NaN's +OO +QNAN Reini +SNAN +STDIN +STDOUT SixApart Storable TCP +UTF XSS amd +arg +arrayrefs ascii autodetection backported backrefs +bencode +bugtracker cPanel +cbor +classname +clzf +codepoints codeset codesets +commandline conformant +cpan datastructure +deserialization +deserialize +deserialized deserializer +deserializing +fromformat +github +hashrefs +interop +interoperability ithread ithreads +javascript +javascript's +json latin +le nan +nd ness +noncharacters +nonref numifying onwards optimizations parsable +parsers postprocessing ppport +qnan queryable +recurses recursing +repo resizes roundtripping +runtime sanify +serializer +serializers +snan src +storable +stringifies +stringifying superset +syck testsuite th +toformat typeless un +unblessed unicode +utf xs +yaml diff -Nru libcpanel-json-xs-perl-3.0210/t/z_pod.t libcpanel-json-xs-perl-3.0239/t/z_pod.t --- libcpanel-json-xs-perl-3.0210/t/z_pod.t 2015-01-31 19:57:23.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/t/z_pod.t 2015-12-03 18:26:20.000000000 +0000 @@ -1,5 +1,10 @@ # -*- perl -*- +use strict; use Test::More; + +plan skip_all => 'This test is only run for the module author' + unless -d '.git' || $ENV{AUTHOR_TESTING}; + eval "use Test::Pod 1.00"; plan skip_all => "Test::Pod 1.00 required for testing POD" if $@; all_pod_files_ok(); diff -Nru libcpanel-json-xs-perl-3.0210/.travis.yml libcpanel-json-xs-perl-3.0239/.travis.yml --- libcpanel-json-xs-perl-3.0210/.travis.yml 2015-11-26 11:24:06.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/.travis.yml 2017-07-29 15:18:21.000000000 +0000 @@ -10,17 +10,27 @@ - "5.18" - "5.20" - "5.22" - - "5.22-thr" - - "5.22-dbg" - - "5.22-thr-dbg" - - "5.22-mb" + - "5.24" + - "5.26" + #- "5.26-thr" + #- "5.26-dbg" + #- "5.26-thr-dbg" + #- "5.26-mb" - "dev" - - "blead" +# - "blead" -#addons: -# apt: -# packages: -# - gperf +# slows down already cached versions by 3 (33s => 1m45s) +# (i.e. cache download: 9s, setup: 45s-130s) +# but speeds up building the non-cached versions (5.24-*) by 2 (3m50s => 1m45s) +# overall: 25min => 35min, so disable the perl cache +#cache: +# directories: +# - /home/travis/perl5/perlbrew/ + +addons: + apt: + packages: + - aspell # blead and 5.6 stumble over YAML and more missing dependencies # for Devel::Cover::Report::Coveralls @@ -30,9 +40,12 @@ - ln -s `which true` /home/travis/bin/cpansign - eval $(curl https://travis-perl.github.io/init) --auto install: - - export AUTOMATED_TESTING=1 HARNESS_TIMER=1 AUTHOR_TESTING=0 RELEASE_TESTING=0 + - export AUTOMATED_TESTING=1 HARNESS_TIMER=1 - cpan-install --deps # installs prereqs, including recommends - cpan-install JSON JSON::PP JSON::XS Mojo::JSON Test::LeakTrace Time::Piece + - test x$AUTHOR_TESTING = x1 && cpan-install Test::CPAN::Meta Test::MinimumVersion + Pod::Spell::CommonMistakes Class::XSAccessor Test::Kwalitee Test::Spelling + Text::CSV_XS Test::Pod Test::Pod::Coverage - cpan-install --coverage # installs converage prereqs, if enabled before_script: @@ -50,6 +63,7 @@ env: COVERAGE=1 AUTHOR_TESTING=1 # enables coverage+coveralls reporting allow_failures: - env: COVERAGE=1 AUTHOR_TESTING=1 + - perl: "blead" # Hack to not run on tag pushes: branches: diff -Nru libcpanel-json-xs-perl-3.0210/typemap libcpanel-json-xs-perl-3.0239/typemap --- libcpanel-json-xs-perl-3.0210/typemap 2015-01-31 19:57:23.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/typemap 2016-06-02 16:27:01.000000000 +0000 @@ -8,9 +8,12 @@ SvROK ($arg) && SvOBJECT (SvRV ($arg)) && (SvSTASH (SvRV ($arg)) == JSON_STASH || sv_derived_from ($arg, \"Cpanel::JSON::XS\")) - )) - croak (\"object is not of type Cpanel::JSON::XS\"); - /**/ + )) { + if (SvPOK ($arg)) + croak (\"string is not of type Cpanel::JSON::XS. You need to create the object with new\"); + else + croak (\"object is not of type Cpanel::JSON::XS\"); + } $var = (JSON *)SvPVX (SvRV ($arg)); diff -Nru libcpanel-json-xs-perl-3.0210/XS.pm libcpanel-json-xs-perl-3.0239/XS.pm --- libcpanel-json-xs-perl-3.0210/XS.pm 2015-12-03 11:56:31.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/XS.pm 2017-08-28 18:55:10.000000000 +0000 @@ -1,5 +1,7 @@ package Cpanel::JSON::XS; -our $VERSION = '3.0210'; +our $VERSION = '3.0239'; +our $XS_VERSION = $VERSION; +# $VERSION = eval $VERSION; =pod @@ -71,8 +73,8 @@ =item * strict checking of JSON correctness There is no guessing, no generating of illegal JSON texts by default, -and only JSON is accepted as input by default (the latter is a security -feature). +and only JSON is accepted as input by default. the latter is a security +feature. =item * fast @@ -110,25 +112,32 @@ - stricter decode_json() as documented. non-refs are disallowed. added a 2nd optional argument. decode() honors now allow_nonref. -- fixed encode of numbers for dual-vars. Different string representations - are preserved, but numbers with temporary strings which represent the same number - are here treated as numbers, not strings. Cpanel::JSON::XS is a bit slower, but - preserves numeric types better. +- fixed encode of numbers for dual-vars. Different string + representations are preserved, but numbers with temporary strings + which represent the same number are here treated as numbers, not + strings. Cpanel::JSON::XS is a bit slower, but preserves numeric + types better. + +- numbers ending with .0 stay numbers, are not converted to + integers. [#63] dual-vars which are represented as number not + integer (42+"bar" != 5.8.9) are now encoded as number (=> 42.0) + because internally it's now a NOK type. However !!1 which is + wrongly encoded in 5.8 as "1"/1.0 is still represented as integer. - different handling of inf/nan. Default now to null, optionally with - -DSTRINGIFY_INFNAN to "inf"/"nan". [#28, #32] + stringify_infnan() to "inf"/"nan". [#28, #32] - added C extension, non-JSON and non JSON parsable, allows C<\xNN> and C<\NNN> sequences. -- 5.6.2 support; sacrificing some utf8 features (assuming bytes all-over), - no multi-byte unicode characters. +- 5.6.2 support; sacrificing some utf8 features (assuming bytes + all-over), no multi-byte unicode characters with 5.6. - interop for true/false overloading. JSON::XS, JSON::PP and Mojo::JSON representations for booleans are accepted and JSON::XS accepts Cpanel::JSON::XS booleans [#13, #37] - Fixed overloading of booleans. Cpanel::JSON::XS::true stringifies now - to true, not 1. + Fixed overloading of booleans. Cpanel::JSON::XS::true stringifies again + to "1", not "true", analog to all other JSON modules. - native boolean mapping of yes and no to true and false, as in YAML::XS. In perl C is yes, C is no. @@ -141,7 +150,9 @@ - is_bool can be called as method, JSON::XS::is_bool not. -- Performance Optimizations for threaded Perls +- performance optimizations for threaded Perls + +- relaxed mode, allowing many popular extensions - additional fixes for: @@ -154,17 +165,34 @@ - #41 overloading of booleans, use the object not the reference. + - #62 -Dusequadmath conversion and no SEGV. + + - #72 parsing of values followed \0, like 1\0 does fail. + + - #72 parsing of illegal unicode or non-unicode characters. + + - #96 locale-insensitive numeric conversion + - public maintenance and bugtracker - use ppport.h, sanify XS.xs comment styles, harness C coding style -- common::sense is optional. When available it is not used in the published - production module, just during development and testing. - -- extended testsuite +- common::sense is optional. When available it is not used in the + published production module, just during development and testing. -- support many more options and methods from JSON::PP +- extended testsuite, passes all http://seriot.ch/parsing_json.html + tests. In fact it is the only know JSON decoder which does so, + while also being the fastest. + +- support many more options and methods from JSON::PP: + stringify_infnan, allow_unknown, allow_stringify, allow_barekey, + encode_stringify, allow_bignum, allow_singlequote, sort_by + (partially), escape_slash, convert_blessed, ... optional + decode_json(, allow_nonref) arg. + relaxed implements allow_dupkeys. +- support all 5 unicode BOM's: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, + UTF-32BE, encoding internally to UTF-8. =cut @@ -174,7 +202,9 @@ sub to_json($@) { if ($] >= 5.008) { require Carp; - Carp::croak ("Cpanel::JSON::XS::to_json has been renamed to encode_json, either downgrade to pre-2.0 versions of Cpanel::JSON::XS or rename the call"); + Carp::croak ("Cpanel::JSON::XS::to_json has been renamed to encode_json,". + " either downgrade to pre-2.0 versions of Cpanel::JSON::XS or". + " rename the call"); } else { _to_json(@_); } @@ -183,7 +213,9 @@ sub from_json($@) { if ($] >= 5.008) { require Carp; - Carp::croak ("Cpanel::JSON::XS::from_json has been renamed to decode_json, either downgrade to pre-2.0 versions of Cpanel::JSON::XS or rename the call"); + Carp::croak ("Cpanel::JSON::XS::from_json has been renamed to decode_json,". + " either downgrade to pre-2.0 versions of Cpanel::JSON::XS or". + " rename the call"); } else { _from_json(@_); } @@ -212,9 +244,9 @@ =item $perl_scalar = decode_json $json_text [, $allow_nonref ] -The opposite of C: expects an UTF-8 (binary) string of an json reference -and tries to parse that as an UTF-8 encoded JSON text, returning the resulting -reference. Croaks on error. +The opposite of C: expects an UTF-8 (binary) string of an +json reference and tries to parse that as an UTF-8 encoded JSON text, +returning the resulting reference. Croaks on error. This function call is functionally identical to: @@ -226,18 +258,20 @@ 3.0116 and JSON::XS did not set allow_nonref but allowed them due to a bug in the decoder. -If the new optional $allow_nonref argument is set and not false, the allow_nonref -option will be set and the function will act is described as in the relaxed RFC 7159 -allowing all values such as objects, arrays, strings, numbers, "null", "true", and "false". +If the new optional $allow_nonref argument is set and not false, the +allow_nonref option will be set and the function will act is described +as in the relaxed RFC 7159 allowing all values such as objects, +arrays, strings, numbers, "null", "true", and "false". =item $is_boolean = Cpanel::JSON::XS::is_bool $scalar -Returns true if the passed scalar represents either C or -C, two constants that act like C<1> and C<0>, respectively -and are used to represent JSON C and C values in Perl. +Returns true if the passed scalar represents either C +or C, two constants that act like C<1> and C<0>, +respectively and are used to represent JSON C and C +values in Perl. -See MAPPING, below, for more information on how JSON values are mapped to -Perl. +See MAPPING, below, for more information on how JSON values are mapped +to Perl. =back @@ -271,21 +305,37 @@ =item 2. Perl does I associate an encoding with your strings. ... until you force it to, e.g. when matching it against a regex, or -printing the scalar to a file, in which case Perl either interprets your -string as locale-encoded text, octets/binary, or as Unicode, depending -on various settings. In no case is an encoding stored together with your -data, it is I that decides encoding, not any magical meta data. +printing the scalar to a file, in which case Perl either interprets +your string as locale-encoded text, octets/binary, or as Unicode, +depending on various settings. In no case is an encoding stored +together with your data, it is I that decides encoding, not any +magical meta data. =item 3. The internal utf-8 flag has no meaning with regards to the encoding of your string. -=item 4. A "Unicode String" is simply a string where each character can be -validly interpreted as a Unicode code point. +=item 4. A "Unicode String" is simply a string where each character +can be validly interpreted as a Unicode code point. + +If you have UTF-8 encoded data, it is no longer a Unicode string, but +a Unicode string encoded in UTF-8, giving you a binary string. -If you have UTF-8 encoded data, it is no longer a Unicode string, but a -Unicode string encoded in UTF-8, giving you a binary string. +=item 5. A string containing "high" (> 255) character values is I +a UTF-8 string. -=item 5. A string containing "high" (> 255) character values is I a UTF-8 string. +=item 6. Unicode noncharacters only warn, as in core. + +The 66 Unicode noncharacters U+FDD0..U+FDEF, and U+*FFFE, U+*FFFF just +warn, see L. But +illegal surrogate pairs fail to parse. + +=item 7. Raw non-Unicode characters above U+10FFFF are disallowed. + +Raw non-Unicode characters outside the valid unicode range fail to +parse, because "A string is a sequence of zero or more Unicode +characters" RFC 7159 section 1 and "JSON text SHALL be encoded in +Unicode RFC 7159 section 8.1. We use now the UTF8_DISALLOW_SUPER +flag when parsing unicode. =back @@ -372,9 +422,9 @@ If the C<$enable> argument is true (or missing), then the C method will not try to detect an UTF-8 encoding in any JSON string, it will strictly interpret it as byte sequence. The result might contain -new C<\xNN> sequences, which is B. The C method -forbids C<\uNNNN> sequences and accepts C<\xNN> and octal C<\NNN> -sequences. +new C<\xNN> sequences, which is B. The C +method forbids C<\uNNNN> sequences and accepts C<\xNN> and octal +C<\NNN> sequences. There is also a special logic for perl 5.6 and utf8. 5.6 encodes any string to utf-8 automatically when seeing a codepoint >= C<0x80> and @@ -469,9 +519,9 @@ =item $enabled = $json->get_indent -If C<$enable> is true (or missing), then the C method will use a multiline -format as output, putting every array member or object/hash key-value pair -into its own line, indenting them properly. +If C<$enable> is true (or missing), then the C method will use +a multiline format as output, putting every array member or +object/hash key-value pair into its own line, indenting them properly. If C<$enable> is false, no newlines or indenting will be produced, and the resulting JSON text is guaranteed not to contain any C. @@ -500,10 +550,10 @@ =item $enabled = $json->get_space_after -If C<$enable> is true (or missing), then the C method will add an extra -optional space after the C<:> separating keys from values in JSON objects -and extra whitespace after the C<,> separating key-value pairs and array -members. +If C<$enable> is true (or missing), then the C method will add +an extra optional space after the C<:> separating keys from values in +JSON objects and extra whitespace after the C<,> separating key-value +pairs and array members. If C<$enable> is false, then the C method will not add any extra space at those places. @@ -586,6 +636,12 @@ { foo:"bar" } +=item * duplicate keys + +With relaxed decoding of duplicate keys does not error and are silently accepted. +See L: +RFC 7159 section 4: "The names within an object should be unique." + =back @@ -593,8 +649,9 @@ =item $enabled = $json->get_canonical -If C<$enable> is true (or missing), then the C method will output JSON objects -by sorting their keys. This is adding a comparatively high overhead. +If C<$enable> is true (or missing), then the C method will +output JSON objects by sorting their keys. This is adding a +comparatively high overhead. If C<$enable> is false, then the C method will output key-value pairs in the order Perl stores them (which will likely change between runs @@ -668,7 +725,6 @@ $json->allow_barekey->decode('{foo:"bar"}'); - =item $json = $json->allow_bignum ([$enable]) =item $enabled = $json->get_allow_bignum @@ -679,8 +735,9 @@ the big integer Perl cannot handle as integer into a L object and convert a floating number (any) into a L. -On the contrary, C converts C objects and C -objects into JSON numbers with C enable. +On the contrary, C converts C objects and +C objects into JSON numbers with C +enable. $json->allow_nonref->allow_blessed->allow_bignum; $bigfloat = $json->decode('2.000000000000000000000000001'); @@ -699,10 +756,10 @@ =item $enabled = $json->get_allow_nonref -If C<$enable> is true (or missing), then the C method can convert a -non-reference into its corresponding string, number or null JSON value, -which is an extension to RFC4627. Likewise, C will accept those JSON -values instead of croaking. +If C<$enable> is true (or missing), then the C method can +convert a non-reference into its corresponding string, number or null +JSON value, which is an extension to RFC4627. Likewise, C will +accept those JSON values instead of croaking. If C<$enable> is false, then the C method will croak if it isn't passed an arrayref or hashref, as JSON texts must either be an object @@ -948,29 +1005,37 @@ If no argument is given, the limit check will be deactivated (same as when C<0> is specified). -See SECURITY CONSIDERATIONS, below, for more info on why this is useful. +See L, below, for more info on why this is useful. =item $json->stringify_infnan ([$infnan_mode = 1]) =item $infnan_mode = $json->get_stringify_infnan -Get or set how Cpanel::JSON::XS encodes C or C for numeric -values. +Get or set how Cpanel::JSON::XS encodes C, C<-inf> or C for numeric +values. Also qnan, snan or negative nan on some platforms. C: infnan_mode = 0. Similar to most JSON modules in other languages. +Always null. -stringified: infnan_mode = 1. As in Mojo::JSON. +stringified: infnan_mode = 1. As in Mojo::JSON. Platform specific strings. +Stringified via sprintf(%g), with double quotes. -inf/nan: infnan_mode = 2. As in JSON::XS, and older releases. Produces invalid JSON. +inf/nan: infnan_mode = 2. As in JSON::XS, and older releases. +Passes through platform dependent values, invalid JSON. Stringified via +sprintf(%g), but without double quotes. + +"inf/-inf/nan": infnan_mode = 3. Platform independent inf/nan/-inf +strings. No QNAN/SNAN/negative NAN support, unified to "nan". Much +easier to detect, but may conflict with valid strings. =item $json_text = $json->encode ($perl_scalar) Converts the given Perl data structure (a simple scalar or a reference to a hash or array) to its JSON representation. Simple scalars will be -converted into JSON string or number sequences, while references to arrays -become JSON arrays and references to hashes become JSON objects. Undefined -Perl values (e.g. C) become JSON C values. Neither C -nor C values will be generated. +converted into JSON string or number sequences, while references to +arrays become JSON arrays and references to hashes become JSON +objects. Undefined Perl values (e.g. C) become JSON C +values. Neither C nor C values will be generated. =item $perl_scalar = $json->decode ($json_text) @@ -992,7 +1057,7 @@ and you need to know where the JSON text ends. Cpanel::JSON::XS->new->decode_prefix ("[1] the tail") - => ([], 3) + => ([1], 3) =item $json->to_json ($perl_hash_or_arrayref) @@ -1016,14 +1081,14 @@ is much more efficient (and can be implemented with a minimum of method calls). -Cpanel::JSON::XS will only attempt to parse the JSON text once it is sure it -has enough text to get a decisive result, using a very simple but -truly incremental parser. This means that it sometimes won't stop as -early as the full parser, for example, it doesn't detect mismatched -parentheses. The only thing it guarantees is that it starts decoding as -soon as a syntactically valid JSON text has been seen. This means you need -to set resource limits (e.g. C) to ensure the parser will stop -parsing in the presence if syntax errors. +Cpanel::JSON::XS will only attempt to parse the JSON text once it is +sure it has enough text to get a decisive result, using a very simple +but truly incremental parser. This means that it sometimes won't stop +as early as the full parser, for example, it doesn't detect mismatched +parentheses. The only thing it guarantees is that it starts decoding +as soon as a syntactically valid JSON text has been seen. This means +you need to set resource limits (e.g. C) to ensure the +parser will stop parsing in the presence if syntax errors. The following methods implement this incremental parser. @@ -1103,15 +1168,16 @@ =head2 LIMITATIONS All options that affect decoding are supported, except -C. The reason for this is that it cannot be made to -work sensibly: JSON objects and arrays are self-delimited, i.e. you can concatenate -them back to back and still decode them perfectly. This does not hold true -for JSON numbers, however. - -For example, is the string C<1> a single JSON number, or is it simply the -start of C<12>? Or is C<12> a single JSON number, or the concatenation -of C<1> and C<2>? In neither case you can tell, and this is why Cpanel::JSON::XS -takes the conservative route and disallows this case. +C. The reason for this is that it cannot be made to work +sensibly: JSON objects and arrays are self-delimited, i.e. you can +concatenate them back to back and still decode them perfectly. This +does not hold true for JSON numbers, however. + +For example, is the string C<1> a single JSON number, or is it simply +the start of C<12>? Or is C<12> a single JSON number, or the +concatenation of C<1> and C<2>? In neither case you can tell, and this +is why Cpanel::JSON::XS takes the conservative route and disallows +this case. =head2 EXAMPLES @@ -1177,11 +1243,11 @@ but you cannot load it into memory fully (this has actually happened in the real world :). -Well, you lost, you have to implement your own JSON parser. But Cpanel::JSON::XS -can still help you: You implement a (very simple) array parser and let -JSON decode the array elements, which are all full JSON objects on their -own (this wouldn't work if the array elements could be JSON numbers, for -example): +Well, you lost, you have to implement your own JSON parser. But +Cpanel::JSON::XS can still help you: You implement a (very simple) +array parser and let JSON decode the array elements, which are all +full JSON objects on their own (this wouldn't work if the array +elements could be JSON numbers, for example): my $json = new Cpanel::JSON::XS; @@ -1249,14 +1315,33 @@ that we are trying to be correct (bear with me if I am wrong, I never ran the above example :). +=head1 BOM + +Detect all unicode B on decode. +Which are UTF-8, UTF-16LE, UTF-16BE, UTF-32LE and UTF-32BE. + +B: With perls older than 5.20 you need load the Encode module +before loading a multibyte BOM, i.e. >= UTF-16. Otherwise an error is +thrown. This is an implementation limitation and might get fixed later. + +See L +I<"JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32."> + +I<"Implementations MUST NOT add a byte order mark to the beginning of a +JSON text", "implementations (...) MAY ignore the presence of a byte +order mark rather than treating it as an error".> +See also L. + +Beware that Cpanel::JSON::XS is currently the only JSON module which +does accept and decode a BOM. =head1 MAPPING -This section describes how Cpanel::JSON::XS maps Perl values to JSON values and -vice versa. These mappings are designed to "do the right thing" in most -circumstances automatically, preserving round-tripping characteristics -(what you put in comes out as something equivalent). +This section describes how Cpanel::JSON::XS maps Perl values to JSON +values and vice versa. These mappings are designed to "do the right +thing" in most circumstances automatically, preserving round-tripping +characteristics (what you put in comes out as something equivalent). For the more enlightened: note that in the following descriptions, lowercase I refers to the Perl interpreter, while uppercase I @@ -1290,12 +1375,12 @@ the conversion details, but an integer may take slightly less memory and might represent more values exactly than floating point numbers. -If the number consists of digits only, Cpanel::JSON::XS will try to represent -it as an integer value. If that fails, it will try to represent it as -a numeric (floating point) value if that is possible without loss of -precision. Otherwise it will preserve the number as a string value (in -which case you lose roundtripping ability, as the JSON number will be -re-encoded to a JSON string). +If the number consists of digits only, Cpanel::JSON::XS will try to +represent it as an integer value. If that fails, it will try to +represent it as a numeric (floating point) value if that is possible +without loss of precision. Otherwise it will preserve the number as a +string value (in which case you lose roundtripping ability, as the +JSON number will be re-encoded to a JSON string). Numbers containing a fractional or exponential part will always be represented as numeric (floating point) values, possibly at a loss of @@ -1390,7 +1475,7 @@ respectively. You can also use C<\1> and C<\0> or C and C directly if you want. - encode_json [Cpanel::JSON::XS::true, Cpanel::JSON::XS::true] # yields [false,true] + encode_json [Cpanel::JSON::XS::true, Cpanel::JSON::XS::true] # yields [false,true] encode_json [!1, !0] # yields [false,true] =item blessed objects @@ -1466,9 +1551,9 @@ =head3 SERIALIZATION -What happens when C encounters a Perl object depends on the -C, C and C settings, which are -used in this order: +What happens when C encounters a Perl object depends +on the C, C and C +settings, which are used in this order: =over 4 @@ -1747,6 +1832,17 @@ This works because C<__proto__> is not valid outside of strings, so every occurrence of C<"__proto__"\s*:> must be a string used as property name. +Unicode non-characters between U+FFFD and U+10FFFF are decoded either +to the recommended U+FFFD REPLACEMENT CHARACTER (see Unicode PR #121: +Recommended Practice for Replacement Characters), or in the binary or +relaxed mode left as is, keeping the illegal non-characters as before. + +Raw non-Unicode characters outside the valid unicode range fail now to +parse, because "A string is a sequence of zero or more Unicode +characters" RFC 7159 section 1 and "JSON text SHALL be encoded in +Unicode RFC 7159 section 8.1. We use now the UTF8_DISALLOW_SUPER +flag when parsing unicode. + If you know of other incompatibilities, please let me know. @@ -1838,6 +1934,25 @@ =head1 INTEROP with JSON and JSON::XS and other JSON modules +As long as you only serialize data that can be directly expressed in +JSON, C is incapable of generating invalid JSON +output (modulo bugs, but C has found more bugs in the +official JSON testsuite (1) than the official JSON testsuite has found +in C (0)). +C is currently the only known JSON decoder which passes all +L tests, while being the fastest also. + +When you have trouble decoding JSON generated by this module using other +decoders, then it is very likely that you have an encoding mismatch or the +other decoder is broken. + +When decoding, C is strict by default and will likely catch +all errors. There are currently two settings that change this: +C makes C accept (but not generate) some +non-standard extensions, and C or C will +allow you to encode and decode Perl objects, at the cost of being +totally insecure and not outputting valid JSON anymore. + JSON-XS-3.01 broke interoperability with JSON-2.90 with booleans. See L. Cpanel::JSON::XS needs to know the JSON and JSON::XS versions to be able work @@ -1846,19 +1961,83 @@ true/false overloading and boolean representations are supported. -JSON::XS and JSON::PP representations are accepted and older JSON::XS accepts -Cpanel::JSON::XS booleans. All JSON modules JSON, JSON, PP, JSON::XS, Cpanel::JSON::XS -produce JSON::PP::Boolean objects, just Mojo and JSON::YAJL not. -Mojo produces Mojo::JSON::_Bool and JSON::YAJL::Parser just an unblessed IV. +JSON::XS and JSON::PP representations are accepted and older JSON::XS +accepts Cpanel::JSON::XS booleans. All JSON modules JSON, JSON, PP, +JSON::XS, Cpanel::JSON::XS produce JSON::PP::Boolean objects, just +Mojo and JSON::YAJL not. Mojo produces Mojo::JSON::_Bool and +JSON::YAJL::Parser just an unblessed IV. Cpanel::JSON::XS accepts JSON::PP::Boolean and Mojo::JSON::_Bool objects as booleans. I cannot think of any reason to still use JSON::XS anymore. + +=head2 TAGGED VALUE SYNTAX AND STANDARD JSON EN/DECODERS + +When you use C to use the extended (and also nonstandard +and invalid) JSON syntax for serialized objects, and you still want to +decode the generated serialize objects, you can run a regex to replace +the tagged syntax by standard JSON arrays (it only works for "normal" +package names without comma, newlines or single colons). First, the +readable Perl version: + + # if your FREEZE methods return no values, you need this replace first: + $json =~ s/\( \s* (" (?: [^\\":,]+|\\.|::)* ") \s* \) \s* \[\s*\]/[$1]/gx; + + # this works for non-empty constructor arg lists: + $json =~ s/\( \s* (" (?: [^\\":,]+|\\.|::)* ") \s* \) \s* \[/[$1,/gx; + +And here is a less readable version that is easy to adapt to other +languages: + + $json =~ s/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/[$1,/g; + +Here is an ECMAScript version (same regex): + + json = json.replace (/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/g, "[$1,"); + +Since this syntax converts to standard JSON arrays, it might be hard to +distinguish serialized objects from normal arrays. You can prepend a +"magic number" as first array element to reduce chances of a collision: + + $json =~ s/\(\s*("([^\\":,]+|\\.|::)*")\s*\)\s*\[/["XU1peReLzT4ggEllLanBYq4G9VzliwKF",$1,/g; + +And after decoding the JSON text, you could walk the data +structure looking for arrays with a first element of +C. + +The same approach can be used to create the tagged format with another +encoder. First, you create an array with the magic string as first member, +the classname as second, and constructor arguments last, encode it as part +of your JSON structure, and then: + + $json =~ s/\[\s*"XU1peReLzT4ggEllLanBYq4G9VzliwKF"\s*,\s*("([^\\":,]+|\\.|::)*")\s*,/($1)[/g; + +Again, this has some limitations - the magic string must not be encoded +with character escapes, and the constructor arguments must be non-empty. + + +=head1 RFC7159 + +Since this module was written, Google has written a new JSON RFC, RFC 7159 +(and RFC7158). Unfortunately, this RFC breaks compatibility with both the +original JSON specification on www.json.org and RFC4627. + +As far as I can see, you can get partial compatibility when parsing by +using C<< ->allow_nonref >>. However, consider the security implications +of doing so. + +I haven't decided yet when to break compatibility with RFC4627 by default +(and potentially leave applications insecure) and change the default to +follow RFC7159, but application authors are well advised to call C<< +->allow_nonref(0) >> even if this is the current default, if they cannot +handle non-reference values, in preparation for the day when the default +will change. + =head1 SECURITY CONSIDERATIONS -JSON::XS is not only fast, JSON is generally the most secure -serializing format, because it is the only one besides +JSON::XS and Cpanel::JSON::XS are not only fast. JSON is generally the +most secure serializing format, because it is the only one besides Data::MessagePack, which does not deserialize objects per default. For all languages, not just perl. The binary variant BSON (MongoDB) does more but is unsafe. @@ -1867,8 +2046,8 @@ JSON and trick perl into expanding them, thereby triggering certain methods. Watch L for an exploit demo for "CVE-2015-1592 SixApart MovableType Storable Perl -Code Execution" for a deserializer which expands -objects. Deserializing even coderefs (methods, functions) or external +Code Execution" for a deserializer which expands objects. +Deserializing even coderefs (methods, functions) or external data would be considered the most dangerous. Security relevant overview of serializers regarding deserializing @@ -1929,6 +2108,46 @@ security right). You might also want to also look at L special escape rules to prevent from XSS attacks. +=head1 "OLD" VS. "NEW" JSON (RFC 4627 VS. RFC 7159) + +TL;DR: Due to security concerns, Cpanel::JSON::XS will not allow +scalar data in JSON texts by default - you need to create your own +Cpanel::JSON::XS object and enable C: + + + my $json = JSON::XS->new->allow_nonref; + + $text = $json->encode ($data); + $data = $json->decode ($text); + +The long version: JSON being an important and supposedly stable format, +the IETF standardized it as RFC 4627 in 2006. Unfortunately the inventor +of JSON Douglas Crockford unilaterally changed the definition of JSON in +javascript. Rather than create a fork, the IETF decided to standardize the +new syntax (apparently, so I as told, without finding it very amusing). + +The biggest difference between the original JSON and the new JSON is that +the new JSON supports scalars (anything other than arrays and objects) at +the top-level of a JSON text. While this is strictly backwards compatible +to older versions, it breaks a number of protocols that relied on sending +JSON back-to-back, and is a minor security concern. + +For example, imagine you have two banks communicating, and on one side, +the JSON coder gets upgraded. Two messages, such as C<10> and C<1000> +might then be confused to mean C<101000>, something that couldn't happen +in the original JSON, because neither of these messages would be valid +JSON. + +If one side accepts these messages, then an upgrade in the coder on either +side could result in this becoming exploitable. + +This module has always allowed these messages as an optional extension, by +default disabled. The security concerns are the reason why the default is +still disabled, but future versions might/will likely upgrade to the newer +RFC as default format, so you are advised to check your implementation +and/or override the default with C<< ->allow_nonref (0) >> to ensure that +future versions are safe. + =head1 THREADS Cpanel::JSON::XS has proper ithreads support, unlike JSON::XS. If you @@ -1980,29 +2199,34 @@ sub is_bool($) { shift if @_ == 2; # as method call (ref($_[0]) and UNIVERSAL::isa( $_[0], JSON::PP::Boolean::)) - or (exists $INC{'Types/Serializer.pm'} and Types::Serialiser::is_bool($_[0])) + or (exists $INC{'Types/Serialiser.pm'} and Types::Serialiser::is_bool($_[0])) } -XSLoader::load 'Cpanel::JSON::XS', $VERSION; +XSLoader::load 'Cpanel::JSON::XS', $XS_VERSION; package JSON::PP::Boolean; -use overload - "0+" => sub { ${$_[0]} }, - "++" => sub { $_[0] = ${$_[0]} + 1 }, - "--" => sub { $_[0] = ${$_[0]} - 1 }, - '""' => sub { ${$_[0]} == 1 ? 'true' : '0' }, # GH 29 - 'eq' => sub { - my ($obj, $op) = ref ($_[0]) ? ($_[0], $_[1]) : ($_[1], $_[0]); - if ($op eq 'true' or $op eq 'false') { - return "$obj" eq 'true' ? 'true' eq $op : 'false' eq $op; - } - else { - return $obj ? 1 == $op : 0 == $op; - } - }, - fallback => 1; +use overload (); + +BEGIN { + local $^W; # silence redefine warnings. no warnings 'redefine' does not help + &overload::import( 'overload', # workaround 5.6 reserved keyword warning + "0+" => sub { ${$_[0]} }, + "++" => sub { $_[0] = ${$_[0]} + 1 }, + "--" => sub { $_[0] = ${$_[0]} - 1 }, + '""' => sub { ${$_[0]} == 1 ? '1' : '0' }, # GH 29 + 'eq' => sub { + my ($obj, $op) = ref ($_[0]) ? ($_[0], $_[1]) : ($_[1], $_[0]); + if ($op eq 'true' or $op eq 'false') { + return "$obj" eq '1' ? 'true' eq $op : 'false' eq $op; + } + else { + return $obj ? 1 == $op : 0 == $op; + } + }, + fallback => 1); +} 1; @@ -2024,11 +2248,11 @@ Marc Lehmann , http://home.schmorp.de/ -Reini Urban , http://cpanel.net/ +Reini Urban =head1 MAINTAINER -Reini Urban +Reini Urban =cut diff -Nru libcpanel-json-xs-perl-3.0210/XS.xs libcpanel-json-xs-perl-3.0239/XS.xs --- libcpanel-json-xs-perl-3.0210/XS.xs 2015-12-03 09:43:50.000000000 +0000 +++ libcpanel-json-xs-perl-3.0239/XS.xs 2017-08-28 18:55:10.000000000 +0000 @@ -2,7 +2,6 @@ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" -#define NEED_PL_parser #define NEED_grok_number #define NEED_grok_numeric_radix #define NEED_newRV_noinc @@ -29,18 +28,65 @@ #define HAVE_BAD_POWL #endif -#if defined(_WIN32) -#define STR_INF "1.#INF" -#define STR_NAN "1.#IND" -#define STR_QNAN "1.#QNAN" -#else -#if defined(sun) || defined(__sun) +#if PERL_VERSION < 22 && defined(HAS_SETLOCALE) +#define NEED_NUMERIC_LOCALE_C +#endif + +/* FIXME: still a refcount error */ +#define HAVE_DECODE_BOM +#define UTF8BOM "\357\273\277" /* EF BB BF */ +#define UTF16BOM "\377\376" /* FF FE or +UFEFF */ +#define UTF16BOM_BE "\376\377" /* FE FF */ +#define UTF32BOM "\377\376\000\000" /* FF FE 00 00 or +UFEFF */ +#define UTF32BOM_BE "\000\000\376\377" /* 00 00 FE FF */ + +/* mingw with USE_LONG_DOUBLE (and implied USE_MINGW_ANSI_STDIO) do use the + non-msvcrt inf/nan stringification in sprintf(). */ +#if defined(WIN32) && !defined(__USE_MINGW_ANSI_STDIO) && !defined(USE_LONG_DOUBLE) +/* new ucrtd.dll runtime? We do not probe the runtime or variants in the Makefile.PL yet. */ +#define STR_INF "inf" +#define STR_INF2 "inf.0" +#define STR_NAN "nan" +#define STR_QNAN "nan(ind)" +/* old standard msvcrt.dll */ +#define STR_INF3 "1.#INF" +#define STR_INF4 "1.#INF.0" +#define STR_NAN2 "1.#IND" +#define STR_QNAN2 "1.#QNAN" +#define HAVE_QNAN +#elif defined(sun) || defined(__sun) #define STR_INF "Infinity" #define STR_NAN "NaN" +#elif defined(__hpux) +#define STR_INF "++" +#define STR_NAN "-?" +#define HAVE_NEG_NAN +#define STR_NEG_INF "---" +#define STR_NEG_NAN "?" #else #define STR_INF "inf" #define STR_NAN "nan" #endif + +/* modfl() segfaults for -Duselongdouble && 64-bit mingw64 && mingw + runtime version 4.0 [perl #125924] */ +#if defined(USE_LONG_DOUBLE) && defined(__MINGW64__) \ + && __MINGW64_VERSION_MAJOR == 4 && __MINGW64_VERSION_MINOR == 0 +#undef HAS_MODFL +#undef Perl_modf +#define Perl_modf(nv, ip) mingw_modfl(nv, ip) +long double +mingw_modfl(long double x, long double *ip) +{ + *ip = truncl(x); + return (x == *ip ? copysignl(0.0L, x) : x - *ip); +} +#endif + +#if defined(_AIX) +#define HAVE_QNAN +#undef STR_QNAN +#define STR_QNAN "NANQ" #endif /* some old perls do not have this, try to make it work, no */ @@ -70,11 +116,26 @@ #ifndef HeKUTF8 #define HeKUTF8(he) 0 #endif +#ifndef GV_NOADD_NOINIT +#define GV_NOADD_NOINIT 0 +#endif /* since 5.8.1 */ #ifndef SvIsCOW_shared_hash #define SvIsCOW_shared_hash(pv) 0 #endif +/* 5.8.1 has a broken assert_not_ROK */ +#if PERL_VERSION == 8 && PERL_SUBVERSION == 1 +# undef assert_not_ROK +# if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) +# define assert_not_ROK(sv) ({assert(!SvROK(sv) || !SvRV(sv));}), +# else +# define assert_not_ROK(sv) +# endif +#endif /* compatibility with perl <5.14 */ +#ifndef PERL_UNICODE_MAX +#define PERL_UNICODE_MAX 0x10FFFF +#endif #ifndef HvNAMELEN_get # define HvNAMELEN_get(hv) strlen (HvNAME (hv)) #endif @@ -84,6 +145,63 @@ #ifndef HvNAMEUTF8 # define HvNAMEUTF8(hv) 0 #endif +/* since 5.14 check use warnings 'nonchar' */ +#ifdef WARN_NONCHAR +#define WARNER_NONCHAR(hi) \ + Perl_ck_warner_d(aTHX_ packWARN(WARN_NONCHAR), \ + "Unicode non-character U+%04" UVXf " is not " \ + "recommended for open interchange", hi) +/* before check use warnings 'utf8' */ +#elif PERL_VERSION > 10 +#define WARNER_NONCHAR(hi) \ + Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), \ + "Unicode non-character U+%04" UVXf " is illegal " \ + "for interchange", hi) +#else +#define WARNER_NONCHAR(hi) \ + Perl_warner(aTHX_ packWARN(WARN_UTF8), \ + "Unicode non-character U+%04lX is illegal", (unsigned long)hi) +#endif + +/* since 5.16 */ +#ifndef GV_NO_SVGMAGIC +#define GV_NO_SVGMAGIC 0 +#endif +/* since 5.18 */ +#ifndef SvREFCNT_dec_NN +#define SvREFCNT_dec_NN(sv) SvREFCNT_dec(sv) +#endif +/* from cperl */ +#ifndef strEQc +/* the buffer ends with \0, includes comparison of the \0. + better than strEQ as it uses memcmp, word-wise comparison. */ +# define strEQc(s, c) memEQ(s, ("" c ""), sizeof(c)) +#endif +#ifndef memEQc +/* excluding the final \0, so the string s may continue */ +# define memEQc(s, c) memEQ(s, ("" c ""), sizeof(c)-1) +#endif + +/* av_len has 2 different possible types */ +#ifndef HVMAX_T +# if PERL_VERSION >= 20 +# define HVMAX_T SSize_t +# else +# define HVMAX_T I32 +# endif +#endif +/* and riter 3 */ +#ifndef RITER_T +# ifdef USE_CPERL +# if PERL_VERSION >= 25 +# define RITER_T U32 +# else +# define RITER_T SSize_t +# endif +# else +# define RITER_T I32 +# endif +#endif /* three extra for rounding, sign, and end of string */ #define IVUV_MAXCHARS (sizeof (UV) * CHAR_BIT * 28 / 93 + 3) @@ -119,11 +237,7 @@ #define SHORT_STRING_LEN 16384 // special-case strings of up to this size -#if PERL_VERSION >= 8 #define DECODE_WANTS_OCTETS(json) ((json)->flags & F_UTF8) -#else -#define DECODE_WANTS_OCTETS(json) (0) -#endif #define SB do { #define SE } while (0) @@ -135,9 +249,10 @@ # define _expect(expr,value) (expr) # define INLINE static #endif - -#define expect_false(expr) _expect ((expr) != 0, 0) -#define expect_true(expr) _expect ((expr) != 0, 1) +#ifndef LIKELY +#define LIKELY(expr) _expect ((long)(expr) != 0, 1) +#define UNLIKELY(expr) _expect ((long)(expr) != 0, 0) +#endif #define IN_RANGE_INC(type,val,beg,end) \ ((unsigned type)((unsigned type)(val) - (unsigned type)(beg)) \ @@ -231,7 +346,11 @@ get_bool (pTHX_ const char *name) { dMY_CXT; +#if PERL_VERSION > 7 SV *sv = get_sv (name, 1); +#else + SV *sv = GvSV(gv_fetchpv(name, 1, SVt_PV)); +#endif SV* rv = SvRV(sv); if (!SvOBJECT(sv) || !SvSTASH(sv)) { SvREADONLY_off (sv); @@ -246,7 +365,8 @@ INLINE void shrink (pTHX_ SV *sv) { - sv_utf8_downgrade (sv, 1); + /* ignore errors */ + (void)sv_utf8_downgrade (sv, 1); if (SvLEN (sv) > SvCUR (sv) + 1) { @@ -264,41 +384,96 @@ /* but use the very good perl function to parse anything else. */ /* note that we never call this function for a ascii codepoints */ INLINE UV -decode_utf8 (pTHX_ unsigned char *s, STRLEN len, STRLEN *clen) +decode_utf8 (pTHX_ unsigned char *s, STRLEN len, int relaxed, STRLEN *clen) { - if (expect_true (len >= 2 - && IN_RANGE_INC (char, s[0], 0xc2, 0xdf) - && IN_RANGE_INC (char, s[1], 0x80, 0xbf))) + if (LIKELY(len >= 2 + && IN_RANGE_INC (char, s[0], 0xc2, 0xdf) + && IN_RANGE_INC (char, s[1], 0x80, 0xbf))) { *clen = 2; return ((s[0] & 0x1f) << 6) | (s[1] & 0x3f); } else { +/* Since perl 5.14 we can disallow illegal unicode above U+10FFFF. + Before we could only warn with warnings 'utf8'. + We accept only valid unicode, unless we are in the relaxed mode. */ +#if PERL_VERSION > 12 + UV c = utf8n_to_uvuni (s, len, clen, + UTF8_CHECK_ONLY | (relaxed ? 0 : UTF8_DISALLOW_SUPER)); +#elif PERL_VERSION >= 8 + UV c = utf8n_to_uvuni (s, len, clen, UTF8_CHECK_ONLY); +#endif +#if PERL_VERSION >= 8 && PERL_VERSION <= 12 + if (c > PERL_UNICODE_MAX && !relaxed) + *clen = -1; +#endif #if PERL_VERSION >= 8 - return utf8n_to_uvuni (s, len, clen, UTF8_CHECK_ONLY); + return c; #else - /* for perl 5.6 */ - return utf8_to_uv(s, len, clen, UTF8_CHECK_ONLY); + /* 5.6 does not detect certain ill-formed sequences, esp. overflows, + which are security relevant. so we add code to detect these. */ + UV c = utf8_to_uv(s, len, clen, UTF8_CHECK_ONLY); + if (!relaxed) { + if (!c || c > PERL_UNICODE_MAX) + *clen = -1; + /* need to check manually for some overflows. 5.6 unicode bug */ + else if (len >= 2 + && IN_RANGE_INC (char, s[0], 0xc0, 0xfe) + && !IN_RANGE_INC (char, s[0], 0xc2, 0xdf)) { + U8 *s0, *send; + UV uv = *s; + UV expectlen = UTF8SKIP(s); + +#define UTF_CONTINUATION_MASK ((U8) ((1U << 6) - 1)) +#define UTF_ACCUMULATION_OVERFLOW_MASK \ + (((UV) UTF_CONTINUATION_MASK) << ((sizeof(UV) * 8) - 6)) + + s0 = s; + /*printf ("maybe overlong <%.*s> %d/%d %x %x\n", len, s, c, + *clen, s[0], s[1]);*/ + if (*clen > 4) { + *clen = -1; + return c; + } + send = (U8*) s0 + ((expectlen <= len) ? len : len); + for (s = s0 + 1; s < send; s++) { + if (LIKELY(UTF8_IS_CONTINUATION(*s))) { + if (uv & UTF_ACCUMULATION_OVERFLOW_MASK) { + /*printf ("overflow\n");*/ + *clen = -1; + return c; + } + uv = UTF8_ACCUMULATE(uv, *s); + } + else { + /*printf ("unexpected non continuation\n");*/ + *clen = -1; + return c; + } + } + } + } + return c; #endif } } -/* likewise for encoding, also never called for ascii codepoints */ -/* this function takes advantage of this fact, although current gccs */ -/* seem to optimise the check for >= 0x80 away anyways */ +/* Likewise for encoding, also never called for ascii codepoints. */ +/* This function takes advantage of this fact, although current gcc's */ +/* seem to optimise the check for >= 0x80 away anyways. */ INLINE unsigned char * encode_utf8 (unsigned char *s, UV ch) { - if (expect_false (ch < 0x000080)) + if (UNLIKELY(ch < 0x000080)) *s++ = ch; - else if (expect_true (ch < 0x000800)) + else if (LIKELY(ch < 0x000800)) *s++ = 0xc0 | ( ch >> 6), *s++ = 0x80 | ( ch & 0x3f); - else if ( ch < 0x010000) + else if (ch < 0x010000) *s++ = 0xe0 | ( ch >> 12), *s++ = 0x80 | ((ch >> 6) & 0x3f), *s++ = 0x80 | ( ch & 0x3f); - else if ( ch < 0x110000) + else if (ch < 0x110000) *s++ = 0xf0 | ( ch >> 18), *s++ = 0x80 | ((ch >> 12) & 0x3f), *s++ = 0x80 | ((ch >> 6) & 0x3f), @@ -307,13 +482,13 @@ return s; } -/* convert offset pointer to character index, sv must be string */ +/* convert offset to character index, sv must be string */ static STRLEN -ptr_to_index (pTHX_ SV *sv, const U8 *offset) +ptr_to_index (pTHX_ SV *sv, const STRLEN offset) { return SvUTF8 (sv) - ? utf8_distance ((U8*)offset, (U8*)SvPVX (sv)) - : offset - (U8*)SvPVX (sv); + ? (STRLEN)utf8_distance ((U8*)(SvPVX(sv)+offset), (U8*)SvPVX (sv)) + : offset; } /*/////////////////////////////////////////////////////////////////////////// */ @@ -357,7 +532,7 @@ #else /* if we recurse too deep, skip all remaining digits */ /* to avoid a stack overflow attack */ - if (expect_false (--maxdepth <= 0)) + if (UNLIKELY(--maxdepth <= 0)) while (((U8)*s - '0') < 10) ++s; @@ -365,7 +540,7 @@ { U8 dig = (U8)*s - '0'; - if (expect_false (dig >= 10)) + if (UNLIKELY(dig >= 10)) { if (dig == (U8)((U8)'.' - (U8)'0')) { @@ -446,6 +621,57 @@ return neg ? -accum : accum; } + + +/* target of scalar reference is bool? -1 == nope, 0 == false, 1 == true */ +static int +ref_bool_type (pTHX_ SV *sv) +{ + svtype svt = SvTYPE (sv); + + if (svt < SVt_PVAV) + { + STRLEN len = 0; + char *pv = svt ? SvPV (sv, len) : 0; + + if (len == 1) { + if (*pv == '1') + return 1; + else if (*pv == '0') + return 0; + } + + } + + return -1; +} + +/* returns whether scalar is not a reference in the sense of allow_nonref */ +static int +json_nonref (pTHX_ SV *scalar) +{ + if (!SvROK (scalar)) + return 1; + + scalar = SvRV (scalar); + + if (!SvOBJECT (scalar) && ref_bool_type (aTHX_ scalar) >= 0) + return 1; + + if (SvOBJECT (scalar)) { + dMY_CXT; + HV *bstash = MY_CXT.json_boolean_stash; + HV *oldstash = MY_CXT.jsonold_boolean_stash; + HV *mstash = MY_CXT.mojo_boolean_stash; + HV *stash = SvSTASH (scalar); + + if (stash == bstash || stash == mstash || stash == oldstash) + return 1; + } + + return 0; +} + /*/////////////////////////////////////////////////////////////////////////// */ /* encoder */ @@ -463,7 +689,12 @@ INLINE void need (pTHX_ enc_t *enc, STRLEN len) { - if (expect_false (enc->cur + len >= enc->end)) +#if PERL_VERSION > 6 + DEBUG_v(Perl_deb(aTHX_ "need enc: %p %p %4ld, want: %lu\n", enc->cur, enc->end, + (long)(enc->end - enc->cur), (unsigned long)len)); +#endif + assert(enc->cur <= enc->end); + if (UNLIKELY(enc->cur + len >= enc->end)) { STRLEN cur = enc->cur - (char *)SvPVX (enc->sv); SvGROW (enc->sv, cur + (len < (cur >> 2) ? cur >> 2 : len) + 1); @@ -499,50 +730,66 @@ while (str < end) { unsigned char ch = *(unsigned char *)str; - - if (expect_true (ch >= 0x20 && ch < 0x80)) /* most common case */ +#if PERL_VERSION > 6 + DEBUG_v(Perl_deb(aTHX_ "str enc: %p %p %4ld, want: %lu\n", enc->cur, enc->end, + (long)(enc->end - enc->cur), (long unsigned)len)); +#endif + if (LIKELY(ch >= 0x20 && ch < 0x80)) /* most common case */ { - if (expect_false (ch == '"')) /* but with slow exceptions */ + assert(enc->cur <= enc->end); + if (UNLIKELY(ch == '"')) /* but with slow exceptions */ { - need (aTHX_ enc, len += 1); + need (aTHX_ enc, 2); *enc->cur++ = '\\'; *enc->cur++ = '"'; + ++len; } - else if (expect_false (ch == '\\')) + else if (UNLIKELY(ch == '\\')) { - need (aTHX_ enc, len += 1); + need (aTHX_ enc, 2); *enc->cur++ = '\\'; *enc->cur++ = '\\'; + ++len; } - else if (expect_false (ch == '/' && (enc->json.flags & F_ESCAPE_SLASH))) + else if (UNLIKELY(ch == '/' && (enc->json.flags & F_ESCAPE_SLASH))) { - need (aTHX_ enc, len += 1); + need (aTHX_ enc, 2); *enc->cur++ = '\\'; *enc->cur++ = '/'; + ++len; } - else + else { + need (aTHX_ enc, 1); *enc->cur++ = ch; + } ++str; } else { + assert(enc->cur <= enc->end); switch (ch) { - case '\010': need (aTHX_ enc, len += 1); *enc->cur++ = '\\'; *enc->cur++ = 'b'; ++str; break; - case '\011': need (aTHX_ enc, len += 1); *enc->cur++ = '\\'; *enc->cur++ = 't'; ++str; break; - case '\012': need (aTHX_ enc, len += 1); *enc->cur++ = '\\'; *enc->cur++ = 'n'; ++str; break; - case '\014': need (aTHX_ enc, len += 1); *enc->cur++ = '\\'; *enc->cur++ = 'f'; ++str; break; - case '\015': need (aTHX_ enc, len += 1); *enc->cur++ = '\\'; *enc->cur++ = 'r'; ++str; break; + case '\010': need (aTHX_ enc, 2); + *enc->cur++ = '\\'; *enc->cur++ = 'b'; ++len; ++str; break; + case '\011': need (aTHX_ enc, 2); + *enc->cur++ = '\\'; *enc->cur++ = 't'; ++len; ++str; break; + case '\012': need (aTHX_ enc, 2); + *enc->cur++ = '\\'; *enc->cur++ = 'n'; ++len; ++str; break; + case '\014': need (aTHX_ enc, 2); + *enc->cur++ = '\\'; *enc->cur++ = 'f'; ++len; ++str; break; + case '\015': need (aTHX_ enc, 2); + *enc->cur++ = '\\'; *enc->cur++ = 'r'; ++len; ++str; break; - default: - { + default: + { STRLEN clen; UV uch; if (is_utf8 && !(enc->json.flags & F_BINARY)) { - uch = decode_utf8 (aTHX_ (unsigned char *)str, end - str, &clen); + uch = decode_utf8 (aTHX_ (unsigned char *)str, end - str, + enc->json.flags & F_RELAXED, &clen); if (clen == (STRLEN)-1) croak ("malformed or illegal unicode character in string [%.11s], cannot convert to JSON", str); } @@ -557,49 +804,55 @@ if (enc->json.flags & F_BINARY) { /* MB cannot arrive here */ - need (aTHX_ enc, len += 3); + need (aTHX_ enc, 4); *enc->cur++ = '\\'; *enc->cur++ = 'x'; *enc->cur++ = PL_hexdigit [(uch >> 4) & 15]; *enc->cur++ = PL_hexdigit [ uch & 15]; + len += 3; } else if (uch >= 0x10000UL) { if (uch >= 0x110000UL) croak ("out of range codepoint (0x%lx) encountered, unrepresentable in JSON", (unsigned long)uch); - need (aTHX_ enc, len += 11); + need (aTHX_ enc, 12); sprintf (enc->cur, "\\u%04x\\u%04x", (int)((uch - 0x10000) / 0x400 + 0xD800), (int)((uch - 0x10000) % 0x400 + 0xDC00)); enc->cur += 12; + len += 11; } else { - need (aTHX_ enc, len += 5); + need (aTHX_ enc, 6); *enc->cur++ = '\\'; *enc->cur++ = 'u'; *enc->cur++ = PL_hexdigit [ uch >> 12 ]; *enc->cur++ = PL_hexdigit [(uch >> 8) & 15]; *enc->cur++ = PL_hexdigit [(uch >> 4) & 15]; *enc->cur++ = PL_hexdigit [ uch & 15]; + len += 5; } str += clen; } else if (enc->json.flags & F_LATIN1) { + need (aTHX_ enc, 1); *enc->cur++ = uch; str += clen; } else if (enc->json.flags & F_BINARY) { + need (aTHX_ enc, 1); *enc->cur++ = uch; str += clen; } else if (is_utf8) { - need (aTHX_ enc, len += clen); + need (aTHX_ enc, clen); + len += clen; do { *enc->cur++ = *str++; @@ -607,10 +860,11 @@ while (--clen); } else - { - need (aTHX_ enc, len += UTF8_MAXBYTES - 1); /* never more than 11 bytes needed */ + { /* never more than 11 bytes needed */ + need (aTHX_ enc, UTF8_MAXBYTES); enc->cur = (char*)encode_utf8 ((U8*)enc->cur, uch); ++str; + len += UTF8_MAXBYTES - 1; } } } @@ -621,6 +875,12 @@ } INLINE void +encode_const_str (pTHX_ enc_t *enc, const char *str, STRLEN len, int is_utf8) +{ + encode_str (aTHX_ enc, (char *)str, len, is_utf8); +} + +INLINE void encode_indent (pTHX_ enc_t *enc) { if (enc->json.flags & F_INDENT) @@ -636,7 +896,6 @@ INLINE void encode_space (pTHX_ enc_t *enc) { - need (aTHX_ enc, 1); encode_ch (aTHX_ enc, ' '); } @@ -645,7 +904,6 @@ { if (enc->json.flags & F_INDENT) { - need (aTHX_ enc, 1); encode_ch (aTHX_ enc, '\n'); } } @@ -666,7 +924,7 @@ static void encode_av (pTHX_ enc_t *enc, AV *av) { - int i, len = av_len (av); + HVMAX_T i, len = av_len (av); if (enc->indent >= enc->json.max_depth) croak (ERR_NESTING_EXCEEDED); @@ -686,7 +944,7 @@ if (svp) encode_sv (aTHX_ enc, *svp); else - encode_str (aTHX_ enc, "null", 4, 0); + encode_const_str (aTHX_ enc, "null", 4, 0); if (i < len) encode_comma (aTHX_ enc); @@ -715,7 +973,7 @@ encode_str (aTHX_ enc, str, len, SvUTF8 (sv)); } else - encode_str (aTHX_ enc, HeKEY (he), HeKLEN (he), HeKUTF8 (he)); + encode_str (aTHX_ enc, HeKEY (he), (STRLEN)HeKLEN (he), HeKUTF8 (he)); encode_ch (aTHX_ enc, '"'); @@ -764,7 +1022,7 @@ /* caused by randomised hash orderings */ if (enc->json.flags & F_CANONICAL && !SvTIED_mg((SV*)hv, PERL_MAGIC_tied)) { - int count = hv_iterinit (hv); + RITER_T i, count = hv_iterinit (hv); if (SvMAGICAL (hv)) { @@ -782,7 +1040,7 @@ if (count) { - int i, fast = 1; + int fast = 1; HE *hes_stack [STACK_HES]; HE **hes = hes_stack; @@ -830,7 +1088,7 @@ encode_indent (aTHX_ enc); he = hes [count]; encode_hk (aTHX_ enc, he); - encode_sv (aTHX_ enc, expect_false (SvMAGICAL (hv)) ? hv_iterval (hv, he) : HeVAL (he)); + encode_sv (aTHX_ enc, UNLIKELY(SvMAGICAL (hv)) ? hv_iterval (hv, he) : HeVAL (he)); if (count) encode_comma (aTHX_ enc); @@ -850,7 +1108,7 @@ { encode_indent (aTHX_ enc); encode_hk (aTHX_ enc, he); - encode_sv (aTHX_ enc, expect_false (SvMAGICAL (hv)) ? hv_iterval (hv, he) : HeVAL (he)); + encode_sv (aTHX_ enc, UNLIKELY(SvMAGICAL (hv)) ? hv_iterval (hv, he) : HeVAL (he)); if (!(he = hv_iternext (hv))) break; @@ -873,7 +1131,6 @@ STRLEN len; SV *pv = NULL; svtype type = SvTYPE(sv); - int amg = 0; #if PERL_VERSION <= 8 MAGIC *mg; #endif @@ -898,7 +1155,7 @@ if (isref && !(enc->json.flags & F_ALLOW_UNKNOWN)) croak ("cannot encode reference to scalar '%s' unless the scalar is 0 or 1", SvPV_nolen (sv_2mortal (newRV_inc (sv)))); - encode_str (aTHX_ enc, "null", 4, 0); + encode_const_str (aTHX_ enc, "null", 4, 0); return; } /* sv_2pv_flags does not accept those types: */ @@ -907,21 +1164,30 @@ #if PERL_VERSION > 7 pv = newSVpvs(""); sv_copypv(pv, sv); + SvSETMAGIC(pv); + str = SvPVutf8_force(pv, len); #else - STRLEN len; char *s; - pv = newSVpvs(""); - s = SvPV(sv,len); - sv_setpvn(pv,s,len); - if (SvUTF8(sv)) + if (isref) { + pv = AMG_CALLun(sv,string); + len = SvCUR(pv); + str = SvPVX(pv); + SvREFCNT_inc(pv); + } + else { + pv = newSVpvs(""); + s = SvPV(sv,len); + sv_setpvn(pv,s,len); + if (SvUTF8(sv)) SvUTF8_on(pv); - else + else SvUTF8_off(pv); + SvSETMAGIC(pv); + str = SvPVutf8_force(pv, len); + } #endif - SvSETMAGIC(pv); - str = SvPVutf8_force(pv, len); if (!len) { - encode_str (aTHX_ enc, "null", 4, 0); + encode_const_str (aTHX_ enc, "null", 4, 0); SvREFCNT_dec(pv); return; } @@ -956,7 +1222,7 @@ } } if (!str) - encode_str (aTHX_ enc, "null", 4, 0); + encode_const_str (aTHX_ enc, "null", 4, 0); else { if (isref != 1) encode_ch (aTHX_ enc, '"'); @@ -983,7 +1249,7 @@ SvGETMAGIC (sv); svt = SvTYPE (sv); - if (expect_false (SvOBJECT (sv))) + if (UNLIKELY(SvOBJECT (sv))) { dMY_CXT; HV *bstash = MY_CXT.json_boolean_stash; /* JSON-XS-3.x interop (Types::Serialiser/JSON::PP::Boolean) */ @@ -994,9 +1260,9 @@ if (stash == bstash || stash == mstash || stash == oldstash) { if (SvIV (sv)) - encode_str (aTHX_ enc, "true", 4, 0); + encode_const_str (aTHX_ enc, "true", 4, 0); else - encode_str (aTHX_ enc, "false", 5, 0); + encode_const_str (aTHX_ enc, "false", 5, 0); } else if ((enc->json.flags & F_ALLOW_TAGS) && (method = gv_fetchmethod_autoload (stash, "FREEZE", 0))) @@ -1005,7 +1271,7 @@ dSP; int count, items; - ENTER; SAVETMPS; PUSHMARK (SP); + ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP); EXTEND (SP, 2); PUSHs (rv); PUSHs (MY_CXT.sv_json); @@ -1076,7 +1342,7 @@ else if (enc->json.flags & F_CONV_BLESSED) encode_stringify(aTHX_ enc, sv, 0); else if (enc->json.flags & F_ALLOW_BLESSED) - encode_str (aTHX_ enc, "null", 4, 0); + encode_const_str (aTHX_ enc, "null", 4, 0); else croak ("encountered object '%s', but neither allow_blessed, convert_blessed nor allow_tags settings are enabled (or TO_JSON/FREEZE method missing)", SvPV_nolen (sv_2mortal (newRV_inc (sv)))); @@ -1087,23 +1353,22 @@ encode_av (aTHX_ enc, (AV *)sv); else if (svt < SVt_PVAV && svt != SVt_PVGV) { - STRLEN len = 0; - char *pv = svt ? SvPV (sv, len) : 0; + int bool_type = ref_bool_type (aTHX_ sv); - if (len == 1 && *pv == '1') - encode_str (aTHX_ enc, "true", 4, 0); - else if (len == 1 && *pv == '0') - encode_str (aTHX_ enc, "false", 5, 0); + if (bool_type == 1) + encode_const_str (aTHX_ enc, "true", 4, 0); + else if (bool_type == 0) + encode_const_str (aTHX_ enc, "false", 5, 0); else if (enc->json.flags & F_ALLOW_STRINGIFY) encode_stringify(aTHX_ enc, sv, SvROK(sv)); else if (enc->json.flags & F_ALLOW_UNKNOWN) - encode_str (aTHX_ enc, "null", 4, 0); + encode_const_str (aTHX_ enc, "null", 4, 0); else croak ("cannot encode reference to scalar '%s' unless the scalar is 0 or 1", SvPV_nolen (sv_2mortal (newRV_inc (sv)))); } else if (enc->json.flags & F_ALLOW_UNKNOWN) - encode_str (aTHX_ enc, "null", 4, 0); + encode_const_str (aTHX_ enc, "null", 4, 0); else croak ("encountered %s, but JSON can only represent references to arrays or hashes", SvPV_nolen (sv_2mortal (newRV_inc (sv)))); @@ -1114,33 +1379,123 @@ { SvGETMAGIC (sv); - if (expect_false(sv == &PL_sv_yes )) + if (UNLIKELY(sv == &PL_sv_yes )) { - encode_str (aTHX_ enc, "true", 4, 0); + encode_const_str (aTHX_ enc, "true", 4, 0); } - else if (expect_false(sv == &PL_sv_no )) + else if (UNLIKELY(sv == &PL_sv_no )) { - encode_str (aTHX_ enc, "false", 5, 0); + encode_const_str (aTHX_ enc, "false", 5, 0); } else if (SvNOKp (sv)) { char *savecur, *saveend; + char inf_or_nan = 0; +#ifdef NEED_NUMERIC_LOCALE_C + char *locale = NULL; +#endif + NV nv = SvNVX(sv); /* trust that perl will do the right thing w.r.t. JSON syntax. */ need (aTHX_ enc, NV_DIG + 32); savecur = enc->cur; saveend = enc->end; - (void)Gconvert (SvNVX (sv), NV_DIG, 0, enc->cur); - if (strEQ(enc->cur, STR_INF) || strEQ(enc->cur, STR_NAN) -#if defined(_WIN32) - || strEQ(enc->cur, STR_QNAN) -#endif - || (*enc->cur == '-' && - (strEQ(enc->cur+1, STR_INF) || strEQ(enc->cur+1, STR_NAN) -#if defined(_WIN32) - || strEQ(enc->cur+1, STR_QNAN) +#if defined(HAVE_ISINF) && defined(HAVE_ISNAN) + /* With no stringify_infnan we can skip the conversion, returning null. */ + if (enc->json.infnan_mode == 0) { +# if defined(USE_QUADMATH) && defined(HAVE_ISINFL) && defined(HAVE_ISNANL) + if (UNLIKELY(isinfl(nv) || isnanl(nv))) +# else + if (UNLIKELY(isinf(nv) || isnan(nv))) +# endif + { + goto is_inf_or_nan; + } + } +#endif + /* locale insensitive sprintf radix #96 */ +#ifdef NEED_NUMERIC_LOCALE_C + locale = setlocale(LC_NUMERIC, NULL); + if (!locale || strNE(locale, "C")) { + setlocale(LC_NUMERIC, "C"); + } +#endif +#ifdef USE_QUADMATH + quadmath_snprintf(enc->cur, enc->end - enc->cur, "%.*Qg", (int)NV_DIG, nv); +#else + (void)Gconvert (nv, NV_DIG, 0, enc->cur); +#endif +#ifdef NEED_NUMERIC_LOCALE_C + if (locale) + setlocale(LC_NUMERIC, locale); +#endif + +#ifdef STR_INF4 + if (UNLIKELY(strEQc(enc->cur, STR_INF) + || strEQc(enc->cur, STR_INF2) + || strEQc(enc->cur, STR_INF3) + || strEQc(enc->cur, STR_INF4))) +#elif defined(STR_INF2) + if (UNLIKELY(strEQc(enc->cur, STR_INF) + || strEQc(enc->cur, STR_INF2))) +#else + if (UNLIKELY(strEQc(enc->cur, STR_INF))) +#endif + inf_or_nan = 1; +#if defined(__hpux) + else if (UNLIKELY(strEQc(enc->cur, STR_NEG_INF))) + inf_or_nan = 2; + else if (UNLIKELY(strEQc(enc->cur, STR_NEG_NAN))) + inf_or_nan = 3; +#endif + else if +#ifdef HAVE_QNAN +# ifdef STR_QNAN2 + (UNLIKELY(strEQc(enc->cur, STR_NAN) + || strEQc(enc->cur, STR_QNAN) + || strEQc(enc->cur, STR_NAN2) + || strEQc(enc->cur, STR_QNAN2))) +# else + (UNLIKELY(strEQc(enc->cur, STR_NAN) + || strEQc(enc->cur, STR_QNAN))) +# endif +#else + (UNLIKELY(strEQc(enc->cur, STR_NAN))) +#endif + inf_or_nan = 3; + else if (*enc->cur == '-') { +#ifdef STR_INF4 + if (UNLIKELY(strEQc(enc->cur+1, STR_INF) + || strEQc(enc->cur+1, STR_INF2) + || strEQc(enc->cur+1, STR_INF3) + || strEQc(enc->cur+1, STR_INF4))) +#elif defined(STR_INF2) + if (UNLIKELY(strEQc(enc->cur+1, STR_INF) + || strEQc(enc->cur+1, STR_INF2))) +#else + if (UNLIKELY(strEQc(enc->cur+1, STR_INF))) +#endif + inf_or_nan = 2; + else if +#ifdef HAVE_QNAN +# ifdef STR_QNAN2 + (UNLIKELY(strEQc(enc->cur+1, STR_NAN) + || strEQc(enc->cur+1, STR_QNAN) + || strEQc(enc->cur+1, STR_NAN2) + || strEQc(enc->cur+1, STR_QNAN2))) +# else + (UNLIKELY(strEQc(enc->cur+1, STR_NAN) + || strEQc(enc->cur+1, STR_QNAN))) +# endif +#else + (UNLIKELY(strEQc(enc->cur+1, STR_NAN))) +#endif + inf_or_nan = 3; + } + if (UNLIKELY(inf_or_nan)) { +#if defined(HAVE_ISINF) && defined(HAVE_ISNAN) + is_inf_or_nan: #endif - ))) { if (enc->json.infnan_mode == 0) { strncpy(enc->cur, "null\0", 5); } @@ -1151,8 +1506,17 @@ *(enc->cur + l+1) = '"'; *(enc->cur + l+2) = 0; } + else if (enc->json.infnan_mode == 3) { + if (inf_or_nan == 1) + strncpy(enc->cur, "\"inf\"\0", 6); + else if (inf_or_nan == 2) + strncpy(enc->cur, "\"-inf\"\0", 7); + else if (inf_or_nan == 3) + strncpy(enc->cur, "\"nan\"\0", 6); + } else if (enc->json.infnan_mode != 2) { - croak ("invalid stringify_infnan mode %c. Must be 0, 1 or 2", enc->json.infnan_mode); + croak ("invalid stringify_infnan mode %c. Must be 0, 1, 2 or 3", + enc->json.infnan_mode); } } if (SvPOKp (sv) && !strEQ(enc->cur, SvPVX (sv))) { @@ -1166,6 +1530,19 @@ *enc->cur = 0; } else { + NV intpart; + if (!( inf_or_nan || Perl_modf(SvNVX(sv), &intpart) || SvIOK(sv) + || strchr(enc->cur,'e') || strchr(enc->cur,'E') +#if PERL_VERSION < 10 + /* !!1 with 5.8 */ + || (SvPOKp(sv) && strEQc(SvPVX(sv), "1") + && SvNVX(sv) == 1.0) /* yes */ +#endif + ) ) + { + char *tempend = enc->cur + strlen(enc->cur); + strncpy(tempend, ".0\0", 3); + } enc->cur += strlen (enc->cur); } } @@ -1181,7 +1558,7 @@ /* optimise the "small number case" */ /* code will likely be branchless and use only a single multiplication */ /* works for numbers up to 59074 */ - I32 i = SvIVX (sv); + I32 i = (I32)SvIVX (sv); U32 u; char digit, nz = 0; @@ -1215,8 +1592,8 @@ saveend = enc->end; enc->cur += SvIsUV(sv) - ? snprintf (enc->cur, IVUV_MAXCHARS, "%"UVuf, (UV)SvUVX (sv)) - : snprintf (enc->cur, IVUV_MAXCHARS, "%"IVdf, (IV)SvIVX (sv)); + ? snprintf (enc->cur, IVUV_MAXCHARS, "%" UVuf, (UV)SvUVX (sv)) + : snprintf (enc->cur, IVUV_MAXCHARS, "%" IVdf, (IV)SvIVX (sv)); } if (SvPOKp (sv) && !strEQ(savecur, SvPVX (sv))) { @@ -1241,7 +1618,7 @@ else if (SvROK (sv)) encode_rv (aTHX_ enc, sv); else if (!SvOK (sv) || enc->json.flags & F_ALLOW_UNKNOWN) - encode_str (aTHX_ enc, "null", 4, 0); + encode_const_str (aTHX_ enc, "null", 4, 0); else croak ("encountered perl type (%s,0x%x) that JSON cannot handle, check your input data", SvPV_nolen (sv), (unsigned int)SvFLAGS (sv)); @@ -1252,7 +1629,7 @@ { enc_t enc; - if (!(json->flags & F_ALLOW_NONREF) && !SvROK (scalar)) + if (!(json->flags & F_ALLOW_NONREF) && json_nonref (aTHX_ scalar)) croak ("hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this)"); enc.json = *json; @@ -1313,7 +1690,7 @@ if (ch > 0x20) { - if (expect_false (ch == '#')) + if (UNLIKELY(ch == '#')) { if (dec->json.flags & F_RELAXED) decode_comment (dec); @@ -1352,7 +1729,7 @@ "; } */ -const static signed char decode_hexdigit[256] = { +static const signed char decode_hexdigit[256] = { 0 >= '0' && 0 <= '9' ? 0 - '0' : 0 >= 'a' && 0 <= 'f' ? 0 - 'a' + 10 : 0 >= 'A' && 0 <= 'F' ? 0 - 'A' + 10 : -1 , 1 >= '0' && 1 <= '9' ? 1 - '0' : 1 >= 'a' && 1 <= 'f' ? 1 - 'a' + 10 @@ -1873,10 +2250,10 @@ signed char d1, d2, d3, d4; unsigned char *cur = (unsigned char *)dec->cur; - d1 = decode_hexdigit [cur [0]]; if (expect_false (d1 < 0)) ERR ("exactly four hexadecimal digits expected"); - d2 = decode_hexdigit [cur [1]]; if (expect_false (d2 < 0)) ERR ("exactly four hexadecimal digits expected"); - d3 = decode_hexdigit [cur [2]]; if (expect_false (d3 < 0)) ERR ("exactly four hexadecimal digits expected"); - d4 = decode_hexdigit [cur [3]]; if (expect_false (d4 < 0)) ERR ("exactly four hexadecimal digits expected"); + d1 = decode_hexdigit [cur [0]]; if (UNLIKELY(d1 < 0)) ERR ("exactly four hexadecimal digits expected"); + d2 = decode_hexdigit [cur [1]]; if (UNLIKELY(d2 < 0)) ERR ("exactly four hexadecimal digits expected"); + d3 = decode_hexdigit [cur [2]]; if (UNLIKELY(d3 < 0)) ERR ("exactly four hexadecimal digits expected"); + d4 = decode_hexdigit [cur [3]]; if (UNLIKELY(d4 < 0)) ERR ("exactly four hexadecimal digits expected"); dec->cur += 4; @@ -1895,8 +2272,8 @@ signed char d1, d2; unsigned char *cur = (unsigned char *)dec->cur; - d1 = decode_hexdigit [cur [0]]; if (expect_false (d1 < 0)) ERR ("exactly two hexadecimal digits expected"); - d2 = decode_hexdigit [cur [1]]; if (expect_false (d2 < 0)) ERR ("exactly two hexadecimal digits expected"); + d1 = decode_hexdigit [cur [0]]; if (UNLIKELY(d1 < 0)) ERR ("exactly two hexadecimal digits expected"); + d2 = decode_hexdigit [cur [1]]; if (UNLIKELY(d2 < 0)) ERR ("exactly two hexadecimal digits expected"); dec->cur += 2; return ((UV)d1) << 4 | ((UV)d2); @@ -1937,12 +2314,12 @@ { ch = *(unsigned char *)dec_cur++; - if (expect_false (ch == endstr)) + if (UNLIKELY(ch == endstr)) { --dec_cur; break; } - else if (expect_false (ch == '\\')) + else if (UNLIKELY(ch == '\\')) { switch (*dec_cur) { @@ -1999,33 +2376,63 @@ /* possibly a surrogate pair */ if (hi >= 0xd800) { - if (hi < 0xdc00) - { - if (dec_cur [0] != '\\' || dec_cur [1] != 'u') - ERR ("missing low surrogate character in surrogate pair"); - - dec_cur += 2; - - dec->cur = dec_cur; - lo = decode_4hex (dec); - dec_cur = dec->cur; - if (lo == (UV)-1) - goto fail; - - if (lo < 0xdc00 || lo >= 0xe000) - ERR ("surrogate pair expected"); - - hi = (hi - 0xD800) * 0x400 + (lo - 0xDC00) + 0x10000; + if (hi < 0xdc00) { + if (dec_cur [0] != '\\' || dec_cur [1] != 'u') + ERR ("missing low surrogate character in surrogate pair"); + + dec_cur += 2; + + dec->cur = dec_cur; + lo = decode_4hex (dec); + dec_cur = dec->cur; + if (lo == (UV)-1) + goto fail; + + if (lo < 0xdc00 || lo >= 0xe000) + ERR ("surrogate pair expected"); + + hi = (hi - 0xD800) * 0x400 + (lo - 0xDC00) + 0x10000; + if (UNLIKELY( + !(dec->json.flags & F_RELAXED) + && (((hi & 0xfffe) == 0xfffe) + || ((hi & 0xffff) == 0xffff)))) { + WARNER_NONCHAR(hi); } - else if (hi < 0xe000) { + } + else if (UNLIKELY(hi < 0xe000)) { ERR ("missing high surrogate character in surrogate pair"); - } - } + } + else +/* check 66 noncharacters U+FDD0..U+FDEF, U+FFFE, U+FFFF + and U+1FFFE, U+1FFFF, U+2FFFE, U+2FFFF, ... U+10FFFE, U+10FFFF (issue #74) + and warn as in core. + See http://www.unicode.org/versions/corrigendum9.html. + + https://www.rfc-editor.org/errata_search.php?rfc=7159&eid=3984 + The WG's consensus was to leave the full range present + in the ABNF and add the interoperability guidance about + values outside the Unicode accepted range. + + http://seriot.ch/parsing_json.html#25 According to the Unicode + standard, illformed subsequences should be replaced by U+FFFD + REPLACEMENT CHARACTER. (See Unicode PR #121: Recommended Practice + for Replacement Characters). Several parsers use replacement + characters, while other keep the escaped form or produce an + non-Unicode character (see Section 5 - Parsing Contents). This + values are not for interchange, only for application internal use. + They are different from private use. Most parsers accept these. +*/ + if (UNLIKELY( + !(dec->json.flags & F_RELAXED) + && ((hi >= 0xfdd0 && hi <= 0xfdef) + || (hi >= 0xfffe && hi <= 0xffff)))) { + WARNER_NONCHAR(hi); + } + } if (hi >= 0x80) { utf8 = 1; - cur = (char*)encode_utf8 ((U8*)cur, hi); } else @@ -2038,9 +2445,9 @@ ERR ("illegal backslash escape sequence in string"); } } - else if (expect_true (ch >= 0x20 && ch < 0x80)) { + else if (LIKELY(ch >= 0x20 && ch < 0x80)) { *cur++ = ch; - if (expect_false (allow_squote && ch == 0x27)) { + if (UNLIKELY(allow_squote && ch == 0x27)) { --dec_cur; break; } @@ -2051,7 +2458,8 @@ --dec_cur; - decode_utf8 (aTHX_ (U8*)dec_cur, dec->end - dec_cur, &clen); + decode_utf8 (aTHX_ (U8*)dec_cur, dec->end - dec_cur, + dec->json.flags & F_RELAXED, &clen); if (clen == (STRLEN)-1) ERR ("malformed UTF-8 character in JSON string"); @@ -2219,7 +2627,7 @@ if (numtype & IS_NUMBER_IN_UV) { if (numtype & IS_NUMBER_NEG) { - if (uv < (UV)IV_MIN) + if (uv <= (UV)(IV_MAX) + 1) return newSViv (-(IV)uv); } else @@ -2240,7 +2648,7 @@ if (dec->json.flags & F_ALLOW_BIGNUM) { SV* pv = newSVpvs("require Math::BigInt && return Math::BigInt->new(\""); - sv_catpv(pv, start); + sv_catpvn(pv, start, dec->cur - start); sv_catpvs(pv, "\");"); eval_sv(pv, G_SCALAR); SvREFCNT_dec(pv); @@ -2258,7 +2666,7 @@ if (dec->json.flags & F_ALLOW_BIGNUM) { SV* pv = newSVpvs("require Math::BigFloat && return Math::BigFloat->new(\""); - sv_catpv(pv, start); + sv_catpvn(pv, start, dec->cur - start); sv_catpvs(pv, "\");"); eval_sv(pv, G_SCALAR); SvREFCNT_dec(pv); @@ -2336,6 +2744,7 @@ HV *hv = newHV (); int allow_squote = dec->json.flags & F_ALLOW_SQUOTE; int allow_barekey = dec->json.flags & F_ALLOW_BAREKEY; + int relaxed = dec->json.flags & F_RELAXED; char endstr = '"'; DEC_INC_DEPTH; @@ -2348,10 +2757,10 @@ { int is_bare = allow_barekey; - if (expect_false(allow_barekey + if (UNLIKELY(allow_barekey && *dec->cur >= 'A' && *dec->cur <= 'z')) ; - else if (expect_false(allow_squote)) { + else if (UNLIKELY(allow_squote)) { if (*dec->cur != '"' && *dec->cur != 0x27) { ERR ("'\"' or ''' expected"); } @@ -2382,6 +2791,7 @@ || allow_squote)) { /* slow path, back up and use decode_str */ + /* utf8 hash keys are handled here */ SV *key = _decode_str (aTHX_ dec, endstr); if (!key) goto fail; @@ -2408,7 +2818,18 @@ { /* fast path, got a simple key */ char *key = dec->cur; - int len = p - key; + U32 len = p - key; + assert(p >= key && p - key < I32_MAX); +#if PTRSIZE >= 8 + /* hv_store can only handle I32 len, which might overflow */ + /* perl5 just silently truncates it, cperl panics */ + if (UNLIKELY(p - key > I32_MAX)) + ERR ("Hash key too large"); +#endif + if (!relaxed && UNLIKELY(hv_exists (hv, key, len))) { + ERR ("Duplicate keys not allowed"); + } + dec->cur = p + 1; decode_ws (dec); if (*p != ':') EXPECT_CH (':'); @@ -2418,8 +2839,13 @@ if (!value) goto fail; + /* Note: not a utf8 hash key */ +#if PERL_VERSION > 8 || (PERL_VERSION == 8 && PERL_SUBVERSION >= 9) + hv_common (hv, NULL, key, len, 0, + HV_FETCH_ISSTORE|HV_FETCH_JUST_SV, value, 0); +#else hv_store (hv, key, len, value, 0); - +#endif break; } @@ -2457,22 +2883,23 @@ { if (dec->json.cb_sk_object && HvKEYS (hv) == 1) { - HE *cb, *he; + HE *cb = NULL, *he; hv_iterinit (hv); he = hv_iternext (hv); hv_iterinit (hv); - /* the next line creates a mortal sv each time its called. */ + /* the next line creates a mortal sv each time it's called. */ /* might want to optimise this for common cases. */ - cb = hv_fetch_ent (dec->json.cb_sk_object, hv_iterkeysv (he), 0, 0); + if (LIKELY((long)he)) + cb = hv_fetch_ent (dec->json.cb_sk_object, hv_iterkeysv (he), 0, 0); if (cb) { dSP; - int count; + I32 count; - ENTER; SAVETMPS; PUSHMARK (SP); + ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP); XPUSHs (HeVAL (he)); sv_2mortal (sv); @@ -2494,9 +2921,9 @@ if (dec->json.cb_object) { dSP; - int count; + I32 count; - ENTER; SAVETMPS; PUSHMARK (SP); + ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP); XPUSHs (sv_2mortal (sv)); PUTBACK; count = call_sv (dec->json.cb_object, G_ARRAY); SPAGAIN; @@ -2561,7 +2988,7 @@ { dMY_CXT; AV *av = (AV *)SvRV (val); - int i, len = av_len (av) + 1; + HVMAX_T i, len = av_len (av) + 1; HV *stash = gv_stashsv (tag, 0); SV *sv; GV *method; @@ -2575,7 +3002,7 @@ if (!method) ERR ("cannot decode perl-object (package does not have a THAW method)"); - ENTER; SAVETMPS; PUSHMARK (SP); + ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP); EXTEND (SP, len + 2); /* we re-bless the reference to get overload and other niceties right */ PUSHs (tag); @@ -2629,7 +3056,7 @@ return decode_num (aTHX_ dec); case 't': - if (dec->end - dec->cur >= 4 && !memcmp (dec->cur, "true", 4)) + if (dec->end - dec->cur >= 4 && memEQc(dec->cur, "true")) { dMY_CXT; dec->cur += 4; @@ -2641,7 +3068,7 @@ break; case 'f': - if (dec->end - dec->cur >= 5 && !memcmp (dec->cur, "false", 5)) + if (dec->end - dec->cur >= 5 && memEQc(dec->cur, "false")) { dMY_CXT; dec->cur += 5; @@ -2653,7 +3080,7 @@ break; case 'n': - if (dec->end - dec->cur >= 4 && !memcmp (dec->cur, "null", 4)) + if (dec->end - dec->cur >= 4 && memEQc(dec->cur, "null")) { dec->cur += 4; return newSVsv(&PL_sv_undef); @@ -2672,17 +3099,68 @@ return 0; } +/* decode UTF32-LE/... to UTF-8: + $utf8 = Encode::decode("UTF-32", $string); */ +static SV * +decode_bom(pTHX_ const char* encoding, SV* string, STRLEN offset) +{ + dSP; + I32 items; + PERL_UNUSED_ARG(offset); + +#ifndef HAVE_DECODE_BOM + croak ("Cannot handle multibyte BOM yet"); + return string; +#else + ENTER; +#if PERL_VERSION > 18 + /* on older perls (<5.20) this corrupts ax */ + Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, newSVpvs("Encode"), + NULL, NULL, NULL); +#else + if (!get_cvs("Encode::decode", GV_NOADD_NOINIT|GV_NO_SVGMAGIC)) + croak("Multibyte BOM needs to use Encode before"); +#endif + LEAVE; + ENTER; + PUSHMARK(SP); + XPUSHs(newSVpvn(encoding, strlen(encoding))); + XPUSHs(string); + PUTBACK; + /* Calling Encode::Unicode::decode_xs would be faster, but we'd need the blessed + enc hash from find_encoding() then. e.g. $Encode::Encoding{'UTF-16LE'} + bless {Name=>UTF-16,size=>2,endian=>'',ucs2=>undef}, 'Encode::Unicode'; + And currenty we enjoy the simplicity of the BOM offset advance by + endianness autodetection. + */ + items = call_sv(MUTABLE_SV(get_cvs("Encode::decode", + GV_NOADD_NOINIT|GV_NO_SVGMAGIC)), G_SCALAR); + SPAGAIN; + if (items >= 0 && SvPOK(TOPs)) { + LEAVE; + SvUTF8_on(TOPs); + return POPs; + } else { + LEAVE; + return string; + } +#endif +} + static SV * -decode_json (pTHX_ SV *string, JSON *json, U8 **offset_return) +decode_json (pTHX_ SV *string, JSON *json, STRLEN *offset_return) { dec_t dec; SV *sv; - dMY_CXT; + STRLEN len, offset = 0; + int converted = 0; + /*dMY_CXT;*/ /* work around bugs in 5.10 where manipulating magic values * makes perl ignore the magic in subsequent accesses. * also make a copy of non-PV values, to get them into a clean * state (SvPV should do that, but it's buggy, see below). + * But breaks decode_prefix with offset. */ /*SvGETMAGIC (string);*/ if (SvMAGICAL (string) || !SvPOK (string) || SvIsCOW_shared_hash(string)) @@ -2702,24 +3180,65 @@ */ { #ifdef DEBUGGING - STRLEN offset = SvOK (string) ? sv_len (string) : 0; + len = SvOK (string) ? sv_len (string) : 0; #else - STRLEN offset = SvCUR (string); + len = SvCUR (string); #endif - if (offset > json->max_size && json->max_size) + if (UNLIKELY(len > json->max_size && json->max_size)) croak ("attempted decode of JSON text of %lu bytes size, but max_size is set to %lu", - (unsigned long)SvCUR (string), (unsigned long)json->max_size); + (unsigned long)len, (unsigned long)json->max_size); } -#if PERL_VERSION >= 8 - if (DECODE_WANTS_OCTETS (json)) - sv_utf8_downgrade (string, 0); - else - sv_utf8_upgrade (string); -#endif + /* Detect BOM and possibly convert to UTF-8 and set UTF8 flag. - SvGROW (string, SvCUR (string) + 1); /* should basically be a NOP */ + https://tools.ietf.org/html/rfc7159#section-8.1 + JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32. + Byte Order Mark - While section 8.1 states "Implementations MUST + NOT add a byte order mark to the beginning of a JSON text", + "implementations (...) MAY ignore the presence of a byte order + mark rather than treating it as an error". */ + if (UNLIKELY(len > 2 && SvPOK(string))) { + U8 *s = (U8*)SvPVX (string); + if (*s >= 0xEF) { + if (len >= 3 && memEQc(s, UTF8BOM)) { + json->flags |= F_UTF8; + converted++; + offset = 3; + SvPV_set(string, SvPVX_mutable (string) + 3); + SvCUR_set(string, len - 3); + SvUTF8_on(string); + /* omitting the endian name will skip the BOM in the result */ + } else if (len >= 4 && memEQc(s, UTF32BOM)) { + string = decode_bom(aTHX_ "UTF-32", string, 4); + json->flags |= F_UTF8; + converted++; + } else if (memEQc(s, UTF16BOM)) { + string = decode_bom(aTHX_ "UTF-16", string, 2); + json->flags |= F_UTF8; + converted++; + } else if (memEQc(s, UTF16BOM_BE)) { + string = decode_bom(aTHX_ "UTF-16", string, 2); + json->flags |= F_UTF8; + converted++; + } + } else if (UNLIKELY(len >= 4 && !*s && memEQc(s, UTF32BOM_BE))) { + string = decode_bom(aTHX_ "UTF-32", string, 4); + json->flags |= F_UTF8; + converted++; + } + } + + if (LIKELY(!converted)) { + if (DECODE_WANTS_OCTETS (json)) + sv_utf8_downgrade (string, 0); + else + sv_utf8_upgrade (string); + } + + /* should basically be a NOP but needed for 5.6 with undef */ + if (!SvPOK(string)) + SvGROW (string, SvCUR (string) + 1); dec.json = *json; dec.cur = SvPVX (string); @@ -2735,21 +3254,30 @@ decode_ws (&dec); sv = decode_sv (aTHX_ &dec); - if (offset_return) - *offset_return = (U8*)dec.cur; + if (offset_return) { + if (dec.cur < SvPVX (string) || dec.cur > SvEND (string)) + *offset_return = 0; + else + *offset_return = dec.cur - SvPVX (string); + } if (!(offset_return || !sv)) { /* check for trailing garbage */ decode_ws (&dec); - if (*dec.cur) + if ((dec.end - dec.cur) || *dec.cur) { dec.err = "garbage after JSON object"; SvREFCNT_dec (sv); - sv = 0; + sv = NULL; } } + /* restore old utf8 string with BOM */ + if (UNLIKELY(offset)) { + SvPV_set(string, SvPVX_mutable (string) - offset); + SvCUR_set(string, len); + } if (!sv) { @@ -2757,6 +3285,7 @@ #if PERL_VERSION >= 8 /* horrible hack to silence warning inside pv_uni_display */ + /* TODO: Can be omitted with newer perls */ COP cop = *PL_curcop; cop.cop_warnings = pWARN_NONE; ENTER; @@ -2767,14 +3296,11 @@ #endif croak ("%s, at character offset %d (before \"%s\")", dec.err, - (int)ptr_to_index (aTHX_ string, (U8*)dec.cur), + (int)ptr_to_index (aTHX_ string, dec.cur-SvPVX(string)), dec.cur != dec.end ? SvPV_nolen (uni) : "(end of string)"); } - if (!(dec.json.flags & F_ALLOW_NONREF) && - (!SvROK (sv) - || SvRV(sv) == SvRV(MY_CXT.json_true) - || SvRV(sv) == SvRV(MY_CXT.json_false))) + if (!(dec.json.flags & F_ALLOW_NONREF) && json_nonref(aTHX_ sv)) croak ("JSON text must be an object or array (but found number, string, true, false or null, use allow_nonref to allow this)"); return sv_2mortal (sv); @@ -2907,7 +3433,7 @@ case '[': case '{': case '(': - if (++self->incr_nest > self->max_depth) + if (++self->incr_nest > (int)self->max_depth) croak (ERR_NESTING_EXCEEDED); break; @@ -2927,9 +3453,6 @@ } } } - - modechange: - ; } interrupt: @@ -2943,12 +3466,19 @@ MODULE = Cpanel::JSON::XS PACKAGE = Cpanel::JSON::XS +#if PERL_VERSION > 7 +# define NODEBUG_ON \ + CvNODEBUG_on (get_cv ("Cpanel::JSON::XS::incr_text", 0)); +#else +# define NODEBUG_ON +#endif + BOOT: { MY_CXT_INIT; init_MY_CXT(aTHX_ &MY_CXT); - CvNODEBUG_on (get_cv ("Cpanel::JSON::XS::incr_text", 0)); /* the debugger completely breaks lvalue subs */ + NODEBUG_ON; /* the debugger completely breaks lvalue subs */ } PROTOTYPES: DISABLE @@ -2960,7 +3490,7 @@ #ifdef USE_ITHREADS void CLONE (...) - CODE: + PPCODE: { MY_CXT_CLONE; /* possible declaration */ init_MY_CXT(aTHX_ &MY_CXT); @@ -2970,18 +3500,17 @@ #endif void END(...) - PREINIT: + PREINIT: dMY_CXT; SV * sv; - PPCODE: + PPCODE: sv = MY_CXT.sv_json; MY_CXT.sv_json = NULL; - /* todo use SvREFCNT_dec_NN once ppport is fixed */ - SvREFCNT_dec(sv); + SvREFCNT_dec_NN(sv); return; /* skip implicit PUTBACK, returning @_ to caller, more efficient*/ void new (char *klass) - PPCODE: + PPCODE: { dMY_CXT; SV *pv = NEWSV (0, sizeof (JSON)); @@ -2989,12 +3518,12 @@ json_init ((JSON *)SvPVX (pv)); XPUSHs (sv_2mortal (sv_bless ( newRV_noinc (pv), - strEQ (klass, "Cpanel::JSON::XS") ? JSON_STASH : gv_stashpv (klass, 1) + strEQc (klass, "Cpanel::JSON::XS") ? JSON_STASH : gv_stashpv (klass, 1) ))); } void ascii (JSON *self, int enable = 1) - ALIAS: + ALIAS: ascii = F_ASCII latin1 = F_LATIN1 binary = F_BINARY @@ -3016,18 +3545,15 @@ allow_bignum = F_ALLOW_BIGNUM escape_slash = F_ESCAPE_SLASH allow_stringify = F_ALLOW_STRINGIFY - PPCODE: -{ + PPCODE: if (enable) self->flags |= ix; else self->flags &= ~ix; - XPUSHs (ST (0)); -} void get_ascii (JSON *self) - ALIAS: + ALIAS: get_ascii = F_ASCII get_latin1 = F_LATIN1 get_binary = F_BINARY @@ -3048,47 +3574,47 @@ get_allow_bignum = F_ALLOW_BIGNUM get_escape_slash = F_ESCAPE_SLASH get_allow_stringify = F_ALLOW_STRINGIFY - PPCODE: + PPCODE: XPUSHs (boolSV (self->flags & ix)); void max_depth (JSON *self, U32 max_depth = 0x80000000UL) - PPCODE: + PPCODE: self->max_depth = max_depth; XPUSHs (ST (0)); U32 get_max_depth (JSON *self) - CODE: + CODE: RETVAL = self->max_depth; - OUTPUT: + OUTPUT: RETVAL void max_size (JSON *self, U32 max_size = 0) - PPCODE: + PPCODE: self->max_size = max_size; XPUSHs (ST (0)); int get_max_size (JSON *self) - CODE: + CODE: RETVAL = self->max_size; - OUTPUT: + OUTPUT: RETVAL void stringify_infnan (JSON *self, IV infnan_mode = 1) - PPCODE: - self->infnan_mode = (unsigned char)infnan_mode; - if (self->infnan_mode < 0 || self->infnan_mode > 2) { - croak ("invalid stringify_infnan mode %c. Must be 0, 1 or 2", self->infnan_mode); + PPCODE: + if (infnan_mode > 3 || infnan_mode < 0) { + croak ("invalid stringify_infnan mode %d. Must be 0, 1, 2 or 3", (int)infnan_mode); } + self->infnan_mode = (unsigned char)infnan_mode; XPUSHs (ST (0)); int get_stringify_infnan (JSON *self) - CODE: + CODE: RETVAL = (int)self->infnan_mode; - OUTPUT: + OUTPUT: RETVAL void sort_by (JSON *self, SV* cb = &PL_sv_yes) - PPCODE: + PPCODE: { SvREFCNT_dec (self->cb_sort_by); self->cb_sort_by = SvOK (cb) ? newSVsv (cb) : 0; @@ -3100,7 +3626,7 @@ void filter_json_object (JSON *self, SV *cb = &PL_sv_undef) - PPCODE: + PPCODE: { SvREFCNT_dec (self->cb_object); self->cb_object = SvOK (cb) ? newSVsv (cb) : 0; @@ -3109,16 +3635,16 @@ } void filter_json_single_key_object (JSON *self, SV *key, SV *cb = &PL_sv_undef) - PPCODE: + PPCODE: { if (!self->cb_sk_object) self->cb_sk_object = newHV (); if (SvOK (cb)) - hv_store_ent (self->cb_sk_object, key, newSVsv (cb), 0); + (void)hv_store_ent (self->cb_sk_object, key, newSVsv (cb), 0); else { - hv_delete_ent (self->cb_sk_object, key, G_DISCARD, 0); + (void)hv_delete_ent (self->cb_sk_object, key, G_DISCARD, 0); if (!HvKEYS (self->cb_sk_object)) { @@ -3131,20 +3657,20 @@ } void encode (JSON *self, SV *scalar) - PPCODE: + PPCODE: PUTBACK; scalar = encode_json (aTHX_ scalar, self); SPAGAIN; XPUSHs (scalar); void decode (JSON *self, SV *jsonstr) - PPCODE: + PPCODE: PUTBACK; jsonstr = decode_json (aTHX_ jsonstr, self, 0); SPAGAIN; XPUSHs (jsonstr); void decode_prefix (JSON *self, SV *jsonstr) - PPCODE: + PPCODE: { SV *sv; - U8 *offset; + STRLEN offset; PUTBACK; sv = decode_json (aTHX_ jsonstr, self, &offset); SPAGAIN; EXTEND (SP, 2); PUSHs (sv); @@ -3152,7 +3678,7 @@ } void incr_parse (JSON *self, SV *jsonstr = 0) - PPCODE: + PPCODE: { if (!self->incr_text) self->incr_text = newSVpvn ("", 0); @@ -3207,13 +3733,14 @@ do { SV *sv; - U8 *offset; + STRLEN offset; + char *endp; if (!INCR_DONE (self)) { incr_parse (self); - if (self->incr_pos > self->max_size && self->max_size) + if (UNLIKELY(self->incr_pos > self->max_size && self->max_size)) croak ("attempted decode of JSON text of %lu bytes size, but max_size is set to %lu", (unsigned long)self->incr_pos, (unsigned long)self->max_size); @@ -3233,13 +3760,14 @@ PUTBACK; sv = decode_json (aTHX_ self->incr_text, self, &offset); SPAGAIN; XPUSHs (sv); - self->incr_pos -= offset - (U8*)SvPVX (self->incr_text); + endp = SvPVX(self->incr_text) + offset; + self->incr_pos -= offset; self->incr_nest = 0; self->incr_mode = 0; #if PERL_VERSION > 9 - sv_chop (self->incr_text, (const char* const)offset); + sv_chop (self->incr_text, (const char* const)endp); #else - sv_chop (self->incr_text, (char*)offset); + sv_chop (self->incr_text, (char*)endp); #endif } while (GIMME_V == G_ARRAY); @@ -3248,23 +3776,23 @@ #if PERL_VERSION > 6 SV *incr_text (JSON *self) - ATTRS: lvalue - CODE: + ATTRS: lvalue + CODE: { - if (self->incr_pos) + if (UNLIKELY(self->incr_pos)) croak ("incr_text can not be called when the incremental parser already started parsing"); RETVAL = self->incr_text ? SvREFCNT_inc (self->incr_text) : &PL_sv_undef; } - OUTPUT: + OUTPUT: RETVAL #else SV *incr_text (JSON *self) - CODE: + CODE: { - if (self->incr_pos) + if (UNLIKELY(self->incr_pos)) croak ("incr_text can not be called when the incremental parser already started parsing"); RETVAL = self->incr_text ? SvREFCNT_inc (self->incr_text) : &PL_sv_undef;