From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web10.9814.1583396961718160959 for ; Thu, 05 Mar 2020 00:29:22 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.24, mailfrom: bob.c.feng@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Mar 2020 00:29:19 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,517,1574150400"; d="scan'208";a="413446428" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga005.jf.intel.com with ESMTP; 05 Mar 2020 00:29:14 -0800 Received: from shsmsx603.ccr.corp.intel.com (10.109.6.143) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 5 Mar 2020 00:28:55 -0800 Received: from shsmsx601.ccr.corp.intel.com (10.109.6.141) by SHSMSX603.ccr.corp.intel.com (10.109.6.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 5 Mar 2020 16:28:51 +0800 Received: from shsmsx601.ccr.corp.intel.com ([10.109.6.141]) by SHSMSX601.ccr.corp.intel.com ([10.109.6.141]) with mapi id 15.01.1713.004; Thu, 5 Mar 2020 16:28:51 +0800 From: "Bob Feng" To: "devel@edk2.groups.io" , "Feng, Bob C" , "Zhang, Shenglei" CC: "Gao, Liming" Subject: Re: [edk2-devel] [PATCH 2/2] BaseTools: Make brotli a submodule Thread-Topic: [edk2-devel] [PATCH 2/2] BaseTools: Make brotli a submodule Thread-Index: AQHV8EGgYYNkmk/V7Eugqk2xe9/ESqg5qG9ggAAGq1A= Date: Thu, 5 Mar 2020 08:28:50 +0000 Message-ID: <51e47f5f1e544bceb2ef6fbf0af235c8@intel.com> References: <20200302031944.13544-1-shenglei.zhang@intel.com> <20200302031944.13544-3-shenglei.zhang@intel.com> <15F959C75C03A288.12001@groups.io> In-Reply-To: <15F959C75C03A288.12001@groups.io> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.36] MIME-Version: 1.0 Return-Path: bob.c.feng@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Shenglei, Would you also add comment in BZ why we need change to submodule way? Thanks, Bob -----Original Message----- From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Bob = Feng Sent: Thursday, March 5, 2020 4:04 PM To: Zhang, Shenglei ; devel@edk2.groups.io Cc: Gao, Liming Subject: Re: [edk2-devel] [PATCH 2/2] BaseTools: Make brotli a submodule Shenglei, Please update BZ status as IN_PROGRESS and add patch link. Thanks, Bob -----Original Message----- From: Zhang, Shenglei=20 Sent: Monday, March 2, 2020 11:20 AM To: devel@edk2.groups.io Cc: Feng, Bob C ; Gao, Liming Subject: [PATCH 2/2] BaseTools: Make brotli a submodule Use submodule way to access brotli in BaseTools based on brotli version 666c3280cc11dc433c303d79a83d4ffbdd12cc8d. https://bugzilla.tianocore.org/show_bug.cgi?id=3D2558 Cc: Bob Feng Cc: Liming Gao Signed-off-by: Shenglei Zhang --- .../C/BrotliCompress/common/dictionary.c | 5905 ----------------- .../C/BrotliCompress/common/transform.c | 235 - .../Source/C/BrotliCompress/dec/bit_reader.c | 48 - .../Source/C/BrotliCompress/dec/decode.c | 2497 ------- .../Source/C/BrotliCompress/dec/huffman.c | 356 - BaseTools/Source/C/BrotliCompress/dec/state.c | 164 - .../BrotliCompress/enc/backward_references.c | 144 - .../enc/backward_references_hq.c | 830 --- .../Source/C/BrotliCompress/enc/bit_cost.c | 35 - .../C/BrotliCompress/enc/block_splitter.c | 194 - .../C/BrotliCompress/enc/brotli_bit_stream.c | 1331 ---- .../Source/C/BrotliCompress/enc/cluster.c | 56 - .../C/BrotliCompress/enc/compress_fragment.c | 790 --- .../enc/compress_fragment_two_pass.c | 645 -- .../C/BrotliCompress/enc/dictionary_hash.c | 1120 ---- .../Source/C/BrotliCompress/enc/encode.c | 1864 ------ .../C/BrotliCompress/enc/encoder_dict.c | 32 - .../C/BrotliCompress/enc/entropy_encode.c | 501 -- .../Source/C/BrotliCompress/enc/histogram.c | 100 - .../C/BrotliCompress/enc/literal_cost.c | 175 - .../Source/C/BrotliCompress/enc/memory.c | 170 - .../Source/C/BrotliCompress/enc/metablock.c | 667 -- .../Source/C/BrotliCompress/enc/static_dict.c | 486 -- .../Source/C/BrotliCompress/enc/utf8_util.c | 85 - .../Source/C/BrotliCompress/tools/brotli.c | 1143 ---- .gitmodules | 3 + BaseTools/Source/C/BrotliCompress/GNUmakefile | 54 +- BaseTools/Source/C/BrotliCompress/LICENSE | 19 - BaseTools/Source/C/BrotliCompress/Makefile | 52 +- BaseTools/Source/C/BrotliCompress/README.md | 26 - BaseTools/Source/C/BrotliCompress/ReadMe.txt | 2 - BaseTools/Source/C/BrotliCompress/brotli | 1 + .../C/BrotliCompress/common/constants.h | 64 - .../Source/C/BrotliCompress/common/context.h | 261 - .../C/BrotliCompress/common/dictionary.h | 64 - .../Source/C/BrotliCompress/common/platform.h | 558 -- .../C/BrotliCompress/common/transform.h | 80 - .../Source/C/BrotliCompress/common/version.h | 26 - .../Source/C/BrotliCompress/dec/bit_reader.h | 309 - .../Source/C/BrotliCompress/dec/huffman.h | 72 - .../Source/C/BrotliCompress/dec/prefix.h | 750 --- BaseTools/Source/C/BrotliCompress/dec/state.h | 258 - .../brotli-comparison-study-2015-09-22.pdf | Bin 215208 -> 0 bytes .../BrotliCompress/enc/backward_references.h | 38 - .../enc/backward_references_hq.h | 93 - .../enc/backward_references_inc.h | 153 - .../Source/C/BrotliCompress/enc/bit_cost.h | 63 - .../C/BrotliCompress/enc/bit_cost_inc.h | 127 - .../C/BrotliCompress/enc/block_encoder_inc.h | 34 - .../C/BrotliCompress/enc/block_splitter.h | 51 - .../C/BrotliCompress/enc/block_splitter_inc.h | 431 -- .../C/BrotliCompress/enc/brotli_bit_stream.h | 84 - .../Source/C/BrotliCompress/enc/cluster.h | 48 - .../Source/C/BrotliCompress/enc/cluster_inc.h | 317 - .../Source/C/BrotliCompress/enc/command.h | 190 - .../C/BrotliCompress/enc/compress_fragment.h | 61 - .../enc/compress_fragment_two_pass.h | 54 - .../C/BrotliCompress/enc/dictionary_hash.h | 24 - .../C/BrotliCompress/enc/encoder_dict.h | 41 - .../C/BrotliCompress/enc/entropy_encode.h | 122 - .../enc/entropy_encode_static.h | 539 -- .../Source/C/BrotliCompress/enc/fast_log.h | 147 - .../C/BrotliCompress/enc/find_match_length.h | 80 - BaseTools/Source/C/BrotliCompress/enc/hash.h | 497 -- .../C/BrotliCompress/enc/hash_composite_inc.h | 133 - .../enc/hash_forgetful_chain_inc.h | 254 - .../enc/hash_longest_match64_inc.h | 266 - .../enc/hash_longest_match_inc.h | 258 - .../enc/hash_longest_match_quickly_inc.h | 235 - .../C/BrotliCompress/enc/hash_rolling_inc.h | 215 - .../enc/hash_to_binary_tree_inc.h | 327 - .../Source/C/BrotliCompress/enc/histogram.h | 63 - .../C/BrotliCompress/enc/histogram_inc.h | 51 - .../C/BrotliCompress/enc/literal_cost.h | 30 - .../Source/C/BrotliCompress/enc/memory.h | 102 - .../Source/C/BrotliCompress/enc/metablock.h | 105 - .../C/BrotliCompress/enc/metablock_inc.h | 183 - .../Source/C/BrotliCompress/enc/params.h | 44 - .../Source/C/BrotliCompress/enc/prefix.h | 53 - .../Source/C/BrotliCompress/enc/quality.h | 165 - .../Source/C/BrotliCompress/enc/ringbuffer.h | 164 - .../Source/C/BrotliCompress/enc/static_dict.h | 40 - .../C/BrotliCompress/enc/static_dict_lut.h | 5864 ---------------- .../Source/C/BrotliCompress/enc/utf8_util.h | 32 - .../Source/C/BrotliCompress/enc/write_bits.h | 85 - .../C/BrotliCompress/include/brotli/decode.h | 344 - .../C/BrotliCompress/include/brotli/encode.h | 427 -- .../C/BrotliCompress/include/brotli/port.h | 274 - .../C/BrotliCompress/include/brotli/types.h | 83 - .../Source/C/BrotliCompress/tools/brotli.md | 107 - Readme.md | 3 +- 91 files changed, 59 insertions(+), 35214 deletions(-) delete mode 100644 BaseTools/Source/C/BrotliCompress/common/dictionary.c delete mode 100644 BaseTools/Source/C/BrotliCompress/common/transform.c delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.c delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/decode.c delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.c delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_referen= ces.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_referen= ces_hq.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/brotli_bit_strea= m.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragmen= t.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragmen= t_two_pass.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.= c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encode.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.c delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.c delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.c delete mode 100644 BaseTools/Source/C/BrotliCompress/LICENSE delete mode 100644 BaseTools/Source/C/BrotliCompress/README.md delete mode 100644 BaseTools/Source/C/BrotliCompress/ReadMe.txt create mode 160000 BaseTools/Source/C/BrotliCompress/brotli delete mode 100644 BaseTools/Source/C/BrotliCompress/common/constants.h delete mode 100644 BaseTools/Source/C/BrotliCompress/common/context.h delete mode 100644 BaseTools/Source/C/BrotliCompress/common/dictionary.h delete mode 100644 BaseTools/Source/C/BrotliCompress/common/platform.h delete mode 100644 BaseTools/Source/C/BrotliCompress/common/transform.h delete mode 100644 BaseTools/Source/C/BrotliCompress/common/version.h delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.h delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.h delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/prefix.h delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.h delete mode 100644 BaseTools/Source/C/BrotliCompress/docs/brotli-comparis= on-study-2015-09-22.pdf delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_referen= ces.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_referen= ces_hq.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_referen= ces_inc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_encoder_in= c.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter_i= nc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/brotli_bit_strea= m.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/command.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragmen= t.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragmen= t_two_pass.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.= h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode_s= tatic.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/fast_log.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/find_match_lengt= h.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_composite_i= nc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_c= hain_inc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_mat= ch64_inc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_mat= ch_inc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_mat= ch_quickly_inc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc= .h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_t= ree_inc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/params.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/prefix.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/quality.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.= h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.h delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/write_bits.h delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/decod= e.h delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/encod= e.h delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/port.= h delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/types= .h delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.md diff --git a/BaseTools/Source/C/BrotliCompress/common/dictionary.c b/BaseT= ools/Source/C/BrotliCompress/common/dictionary.c deleted file mode 100644 index 7fd076194825..000000000000 --- a/BaseTools/Source/C/BrotliCompress/common/dictionary.c +++ /dev/null @@ -1,5905 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -#include "./dictionary.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#ifndef BROTLI_EXTERNAL_DICTIONARY_DATA -static const uint8_t kBrotliDictionaryData[] =3D -{ -116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,= 107,99, -111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101= ,99,105 -,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,= 119,111 -,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,10= 8,111, -118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108= ,105, -110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,1= 19,111, -114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,1= 12,97, -103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101= ,97,99, -104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,10= 8,101, -117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119= ,115, -101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,= 116,117 -,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116= ,110,97 -,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,= 101,108 -,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,10= 8,100, -101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114= ,101, -115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,= 110,99, -97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117= ,102, -105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,11= 6,103, -111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115= ,109, -105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115= ,108,97 -,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,11= 9,105, -108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,9= 7,103, -101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,= 97,110, -108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99= ,104, -102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,1= 01,108, -111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,10= 1,104, -111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,10= 8,101, -115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,= 48,48, -37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,= 101,102 -,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101= ,104,97 -,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,1= 12,97, -115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121= ,112, -101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105= ,110, -107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,11= 1,119, -110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,= 108,101 -,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,= 108,97, -117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,= 118,111 -,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,= 98,111, -114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,= 107,105 -,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,= 101,116 -,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,10= 8,116, -116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112= ,121,49 -,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116= ,111, -117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114= ,97,121 -,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,= 101,115 -,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,= 114,105 -,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,9= 8,62, -112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,10= 0,109, -117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,1= 19,97, -110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,1= 18,101, -115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,= 103,111 -,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111= ,99,107 -,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,1= 02,101, -120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,= 100,114 -,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,10= 1,115, -116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,9= 8,97,98 -,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116= ,115, -102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101= ,112, -116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,= 100,70, -111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,11= 4,117, -110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,1= 14,101, -119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,= 120,59, -46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,= 110,111 -,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,1= 02,97, -99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97= ,109, -101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97= ,115, -121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111= ,115, -116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108= ,108, -101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,11= 9,74,83 -,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,11= 1,116, -115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,= 115,104 -,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,1= 20,114, -105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,9= 7,108, -108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,1= 05,114, -108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,1= 04,105, -102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,1= 11,114, -100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97= ,119, -104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,10= 1,102, -99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115= ,115, -102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,= 97,103, -101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105= ,114, -108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,1= 12,115, -35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,= 104,112 -,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,1= 3,10,32 -,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104= ,97,116 -,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,10= 2,108, -97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,1= 16,111, -108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,11= 0,101, -109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99= ,111, -111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,11= 1,115, -116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,1= 16,104, -97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,4= 8,48,48 -,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,1= 14,117, -103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,= 101,110 -,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,11= 4,101, -108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97= ,112, -101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,1= 11,116, -103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,12= 0,39,39 -,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111= ,114, -116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101= ,101, -109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,11= 5,91,48 -,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,12= 5,109, -97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,1= 15,105, -122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,1= 18,105, -99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,= 99,107, -98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108= ,101, -116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,1= 11,108, -115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,10= 5,108, -108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,1= 10,107, -60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232= ,98,97, -114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,11= 1,110, -102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,1= 16,115, -47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,= 97,109, -115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,8= 4,50,49 -,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,6= 2,115, -111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,= 49,62, -56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52= ,54,90, -110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,22= 8,39,41 -,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,11= 1,110, -100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,= 97,110, -107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97= ,51,48, -112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73= ,99,97, -115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113= ,117, -101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105= ,110, -100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,= 54,90, -72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,9= 8,111, -120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,5= 8,51,53 -,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59= ,97,110 -,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105= ,114, -101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,= 125,101 -,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,10= 6,101, -119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,= 48,48, -119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,= 121,99, -117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,10= 8,99, -111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,= 115,99, -97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,1= 10,117, -110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41= ,46,10, -10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,= 101,109 -,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,= 116,115 -,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,11= 2,101, -116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,6= 8,91,48 -,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,10= 5,110, -60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,1= 01,124, -45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,3= 2,115, -97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,1= 3,10,48 -,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,= 58,47, -47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,= 46,106, -115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125= ,113, -117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,= 50,48, -49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,5= 0,50,50 -,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,= 48,50, -57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,5= 3,50,48 -,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,= 48,57, -50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,5= 0,48,48 -,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,= 54,49, -57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,5= 7,56,57 -,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,= 49,57, -56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,5= 5,54,49 -,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,= 57,54, -57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,5= 1,49,57 -,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,= 53,54, -49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,4= 9,48,48 -,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,19= 5,161, -115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97= ,99,101 -,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173= ,118, -105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,= 111,116 -,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,= 105,112 -,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115= ,116, -111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,1= 11,116, -111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,= 97,110, -116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,= 111,110 -,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,10= 8,111, -100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,= 176,208 -,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,= 181,208 -,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,= 190,209 -,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,= 176,208 -,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,= 190,208 -,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,= 190,208 -,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,= 139,209 -,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,= 176,208 -,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,= 183,208 -,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,= 182,217 -,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,= 132,216 -,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,= 136,217 -,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,= 179,216 -,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,= 175,217 -,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,= 138,216 -,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,= 133,216 -,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,= 168,217 -,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,= 100,101 -,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,1= 05,116, -101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,10= 8,108, -98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,1= 00,111, -114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,10= 8,116, -97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,1= 19,111, -114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,= 97,116, -101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111= ,119, -101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,1= 10,112, -117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111= ,111, -108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,= 114,103 -,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,9= 7,99, -101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,9= 9,107, -103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101= ,110,97 -,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115= ,121, -111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114= ,103, -114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,10= 2,111, -114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,1= 02,116, -101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,= 108,111 -,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98= ,101, -108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,11= 0,107, -115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,11= 7,110, -100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,1= 14,109, -115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118= ,101, -100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,1= 01,100, -111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99= ,107, -108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99= ,107, -115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110= ,103, -109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,10= 1,115, -116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115= ,119, -114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,10= 1,115, -116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,= 115,105 -,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,1= 19,104, -105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115= ,112, -111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,= 105,118 -,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116= ,111, -114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111= ,117, -114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,= 112,108 -,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116= ,101, -115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,11= 6,114, -97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108= ,121,98 -,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,10= 4,108, -101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100= ,84,101 -,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,= 115,105 -,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,= 100,105 -,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,= 101,100 -,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,1= 16,106, -117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,1= 14,98, -114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,10= 2,105, -108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,10= 8,105, -99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109= ,97,105 -,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,1= 09,105, -116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101= ,114, -116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110= ,100, -114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,= 101,115 -,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,1= 01,109, -112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,10= 9,105, -103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,1= 14,114, -97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,1= 05,111, -110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,= 108,101 -,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,= 58,102, -114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,10= 1,110, -101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,1= 04,111, -118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,= 105,120 -,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111= ,112, -105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,1= 08,105, -116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99= ,104, -113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98= ,116,97 -,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,= 121,111 -,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117= ,110, -116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117= ,101, -114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48= ,48,48, -83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,= 100,101 -,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,= 115,108 -,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,10= 1,109, -105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,1= 12,108, -97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,10= 8,97, -105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114= ,111, -110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108= ,116, -105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,= 101,110 -,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,11= 2,115, -115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,= 121,102 -,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100= ,109, -105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97= ,105, -108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,= 103,115 -,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,9= 7,115, -105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,10= 4,101, -97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,1= 14,105, -109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,9= 7,115, -101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,11= 0,97, -109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,10= 5,111, -110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,10= 1,114, -105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,= 99,111, -109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,= 57,57, -48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,10= 8,108, -115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,5= 0,62,97 -,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,9= 7,114, -100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114= ,117, -116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,11= 6,97, -108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105= ,101, -102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,= 107,115 -,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116= ,114, -121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108= ,97,105 -,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,= 111,114 -,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,= 114,116 -,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,= 67,111, -117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102= ,117, -110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109= ,111, -118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116= ,101, -120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,11= 1,112, -34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102= ,108, -111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,= 97,110, -107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,10= 3,110, -100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34= ,112,97 -,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,= 111,110 -,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101= ,100,99 -,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,= 104,111 -,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112= ,114, -111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,3= 3,45,45 -,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,9= 9,116, -102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,= 32,115, -101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,= 97,118, -101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,= 101,101 -,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112= ,120,59 -,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,= 108,105 -,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59= ,105, -102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,9= 9,117, -115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,11= 0,116, -60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,= 108,116 -,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,= 117,112 -,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116= ,101, -119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101= ,108, -103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115= ,116, -117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,= 114,101 -,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,5= 9,56,48 -,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111= ,99,107 -,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116= ,115,70 -,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,1= 05,110, -100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32= ,61,99, -101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,= 101,108 -,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97= ,105, -110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101= ,108,45 -,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,9= 8,111, -100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,= 47,114, -111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102= ,101, -101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,= 112,120 -,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,1= 08,108, -35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,4= 8,48, -112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,1= 01,112, -108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105= ,103, -104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,1= 12,115, -114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110= ,46,78, -97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,= 99,111, -109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,6= 5,82,84 -,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,10= 2,111, -114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,1= 11,114, -115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,= 45,10, -111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97= ,115, -105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,4= 9,48,98 -,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107= ,101, -118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,1= 06,112, -103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,= 101,104 -,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,9= 7,109, -101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62= ,10,10, -35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,11= 5,104, -101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,1= 01,110, -116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,= 34,119, -111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,1= 0,38, -108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,= 97,108, -60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,= 61,32, -34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105= ,97,110 -,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,11= 0,109, -97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,1= 09,103, -34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,1= 21,68, -97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,6= 0,47, -104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,5= 9,116, -121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,= 46,106, -115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,= 13,10, -102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,= 13,10,9 -,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100= ,105, -110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103= ,97,115 -,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,1= 09,105, -115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,11= 1,115, -112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,11= 0,101, -104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,= 101,110 -,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111= ,109, -101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115= ,115, -195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,11= 6,97, -110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115= ,105, -116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,9= 7,121, -111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110= ,116, -101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117= ,101, -118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117= ,105, -101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,10= 1,114, -195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115= ,116,97 -,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,10= 8,111, -115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,= 101,108 -,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,10= 5,111, -116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,11= 1,108, -105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,= 97,98, -114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,= 97,98, -101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110= ,101, -114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115= ,116, -111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,= 101,114 -,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,= 111,115 -,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111= ,115,97 -,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,10= 1,98, -117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,1= 00,105, -99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,= 195,179 -,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,= 116,97, -97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,= 111,99, -114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99= ,97,114 -,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,16= 1,114, -101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,10= 1,100, -97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,1= 14,111, -106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,= 101,110 -,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,1= 15,105, -103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,1= 08,97, -115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97= ,115,97 -,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,10= 8,111, -195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,9= 7,114, -102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,= 97,99, -97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,9= 7,117, -116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116= ,105, -112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,9= 7,100, -114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,= 98,111, -115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,9= 7,115, -117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,= 99,104, -105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,11= 5,116, -97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,= 115,111 -,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,= 116,97, -108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,= 114,112 -,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,9= 8,111, -108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,1= 14,101, -97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,10= 8,101, -97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,= 101,115 -,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,1= 02,105, -114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111= ,103,97 -,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,11= 5,101, -111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,10= 8,111, -99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,11= 1,101, -116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,11= 5,105, -101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,1= 01,115, -101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,1= 17,111, -116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,1= 15,101, -118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,= 116,105 -,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108= ,108, -117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,= 105,108 -,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117= ,108, -116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,1= 10,111, -114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117= ,114,99 -,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,1= 01,109, -111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,= 114,100 -,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,9= 7,108, -97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,1= 11,108, -108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,10= 3,116, -104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116= ,97,117 -,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,10= 9,109, -101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101= ,114, -101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,= 111,117 -,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,1= 15,111, -110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,1= 15,102, -111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,10= 1,111, -112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114= ,99,104 -,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,11= 1,102, -102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,9= 8,109, -105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,9= 7,100, -104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,11= 5,99, -104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98= ,97,116 -,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,= 114,105 -,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,10= 9,112, -108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110= ,103, -115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,11= 5,113, -117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,9= 8,108, -101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,11= 4,70, -114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101= ,112, -101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,= 101,100 -,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116= ,111, -103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,1= 16,105, -99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,= 97,116, -116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100= ,100, -101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117= ,108, -118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,1= 01,99, -114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,= 116,115 -,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,11= 6,104, -105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97= ,116, -101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111= ,114, -118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,10= 9,111, -118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,1= 16,108, -121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,10= 3,114, -111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,1= 11,114, -101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104= ,109, -111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101= ,110, -116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100= ,108, -101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,= 109,97, -110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,= 119,101 -,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,11= 6,115, -101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,= 112,105 -,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111= ,110, -115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,1= 04,111, -115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,= 111,110 -,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,1= 05,102, -114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,= 98,101, -114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,1= 15,107, -105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105= ,108, -118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116= ,101, -114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,1= 15,105, -110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100= ,103, -101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,1= 15,101, -110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,= 105,114 -,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110= ,103, -110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101= ,120, -116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,1= 11,119, -115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,1= 09,101, -109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,10= 2,105, -103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,10= 0,67, -104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,1= 19,97, -121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,6= 2,41, -123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,9= 7,100, -101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,1= 10,98, -114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,1= 07,105, -110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,11= 0,103, -66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,= 111,114 -,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,11= 5,116, -108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,= 116,114 -,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,= 109,101 -,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,11= 8,105, -101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117= ,116,32 -,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,= 97,109, -101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99= ,101, -105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,11= 7,115, -101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99= ,101, -110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108= ,97,110 -,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,= 101,102 -,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110= ,117,97 -,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,10= 9,101, -110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100= ,108, -101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,= 115,107 -,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,10= 3,114, -101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,10= 0,100, -111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,= 98,62, -60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,11= 6,97, -114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,11= 0,97, -100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,11= 0,66, -114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,12= 1,111, -110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100= ,109,97 -,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49= ,62,10, -95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,3= 2,47,62 -,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114= ,79,120 -,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,= 115,116 -,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61= ,34,97, -112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,= 97,110, -107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,= 108,97, -110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,9= 9,101, -110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114= ,112, -114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,1= 05,110, -34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62= ,102,97 -,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97= ,99,111 -,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,= 114,101 -,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,10= 3,104, -116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,10= 8,115, -105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,1= 10,103, -34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,= 115,111 -,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,1= 05,100, -101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,3= 2,87, -105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97= ,103, -101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,= 112,97, -114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,= 103,108 -,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,1= 15,97, -121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,1= 00,101, -114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,9= 8,108, -111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,1= 10,103, -114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101= ,120, -117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,1= 11,98, -116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,11= 0,99,46 -,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,= 111,100 -,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,= 111,46, -70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,1= 15,101, -32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114= ,32,102 -,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,1= 11,109, -97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103= ,60,47, -102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,= 103,101 -,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,= 97,102, -114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108= ,97,99, -101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,= 112,97, -103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,= 97,114, -116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115= ,99,104 -,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114= ,101, -115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83= ,117,98 -,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,1= 01,84, -104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,10= 1,119, -115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117= ,114, -121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99= ,114, -111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,1= 18,101, -112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,9= 7,118, -105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,10= 0,65, -112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116= ,101, -109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,= 115,99, -97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100= ,105,97 -,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58= ,115, -104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115= ,117, -109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,10= 1,115, -114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,10= 1,97, -115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104= ,105, -108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,1= 02,114, -101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,12= 1,62,98 -,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,1= 09,101, -34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,= 118,115 -,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,1= 02,101, -101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,= 60,47, -110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,1= 01,115, -61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,= 97,109, -112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,4= 5,99, -111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,1= 14,116, -32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,4= 9,46, -106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108= ,101, -114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,1= 05,100, -101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,1= 14,46, -120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108= ,111,99 -,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,11= 0,118, -105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,1= 05,110, -103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,= 114,62, -10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,9= 7,103, -121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,17= 5,217, -136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,1= 48,228, -191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,1= 84,128, -228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,2= 29,157, -155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,1= 80,228, -184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,1= 88,129, -228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,2= 31,179, -187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,1= 37,232, -175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,1= 48,168, -230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,2= 30,156, -175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,1= 89,230, -144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,1= 56,168, -231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,2= 33,162, -145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,1= 56,230, -148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,1= 84,130, -229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,2= 29,184, -131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,1= 87,229, -155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,1= 37,139, -230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,2= 29,188, -143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,1= 42,230, -155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,1= 59,165, -233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,2= 28,187, -150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,1= 28,228, -188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,1= 37,136, -230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,2= 32,174, -161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,1= 65,230, -180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,1= 41,154, -229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,2= 28,189, -149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,1= 34,231, -164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,1= 56,128, -232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,2= 33,153, -133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,1= 90,230, -156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,1= 89,141, -231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,2= 30,160, -183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,1= 40,229, -155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,1= 59,179, -228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,2= 28,184, -154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,1= 35,229, -144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,1= 60,148, -231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,2= 31,155, -174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,1= 39,230, -131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,1= 47,129, -231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,2= 30,186, -144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,1= 28,230, -181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,1= 66,129, -230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,2= 32,131, -189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,1= 75,229, -159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,1= 39,155, -232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,2= 29,186, -183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,1= 66,228, -187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,1= 48,159, -228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,2= 31,164, -186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,1= 52,229, -136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,1= 83,165, -229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,2= 29,143, -139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,1= 47,230, -142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,1= 33,168, -229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,2= 28,186, -140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,1= 33,232, -191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,1= 59,185, -232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,2= 28,184, -186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,1= 82,229, -168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,1= 88,128, -229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,2= 32,191, -142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,1= 39,228, -187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,1= 74,162, -230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,2= 28,186, -186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,1= 76,231, -166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,1= 84,141, -229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,2= 32,175, -162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,1= 32,229, -190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,1= 48,191, -231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,2= 30,186, -144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,1= 68,229, -133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,1= 39,177, -232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,2= 29,165, -179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,1= 54,229, -187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,1= 78,190, -229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,2= 32,168, -128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,1= 34,230, -157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,1= 91,152, -230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,2= 32,144, -165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,1= 41,232, -175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,1= 33,172, -229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,2= 33,135, -143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,1= 68,230, -138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,1= 46,168, -232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,2= 32,175, -183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,1= 78,229, -143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,1= 44,141, -231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,2= 30,152, -142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,1= 52,231, -168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,1= 43,170, -230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,2= 28,184, -148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,1= 29,231, -138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,1= 91,133, -233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,2= 29,128, -145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,1= 72,233, -130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,1= 52,175, -229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,2= 33,153, -162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,1= 42,228, -186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,1= 73,163, -229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,2= 31,179, -187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,1= 65,228, -184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,1= 86,134, -232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,2= 31,144, -131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,1= 42,232, -137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,1= 56,159, -231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,2= 29,158, -139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,1= 56,230, -157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,1= 42,159, -229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,2= 28,186, -186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,1= 73,233, -155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,1= 55,160, -230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,2= 28,184, -154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,1= 67,230, -156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,1= 84,147, -232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,2= 28,187, -183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,1= 73,229, -174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,1= 90,151, -229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,2= 29,147, -129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,1= 83,232, -174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,1= 86,186, -230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,2= 29,135, -186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,1= 90,231, -131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,1= 43,145, -229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,2= 28,184, -154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,1= 84,229, -142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,1= 62,158, -229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,2= 29,144, -142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,1= 80,232, -174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,1= 37,136, -228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,2= 29,141, -176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,1= 85,229, -173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,1= 36,169, -231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,2= 28,185, -136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,1= 59,233, -155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,1= 84,128, -232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,2= 28,191, -161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,1= 68,228, -186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,1= 33,136, -231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,2= 33,161, -140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,1= 65,232, -179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,1= 34,156, -228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,2= 29,143, -151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,1= 36,229, -138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,1= 56,141, -229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,2= 30,156, -141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,1= 57,228, -184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,1= 56,137, -230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,2= 32,131, -189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,1= 73,233, -156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,1= 85,139, -233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,2= 32,175, -137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,1= 77,230, -156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,1= 56,186, -228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,2= 31,137, -169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,1= 29,229, -133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,1= 43,144, -231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,2= 33,128, -154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,1= 71,230, -173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,1= 33,141, -228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,2= 32,168, -138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,1= 33,232, -128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,1= 80,180, -229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,2= 31,132, -182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,1= 69,233, -130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,1= 87,163, -231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,2= 31,155, -174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,1= 45,232, -167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,1= 87,165, -229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,2= 28,189, -179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,1= 56,231, -142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,1= 76,143, -230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,2= 32,135, -179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,1= 28,229, -164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,1= 37,136, -230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,2= 30,131, -133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,1= 83,229, -141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,1= 86,167, -231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,2= 28,184, -156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,1= 39,231, -187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,1= 48,191, -230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,2= 29,138, -155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,1= 66,228, -186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,1= 28,160, -230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,2= 30,152, -147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,1= 76,229, -189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,1= 64,167, -229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,2= 30,131, -133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,1= 33,228, -185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,1= 84,190, -230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,2= 29,133, -165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,1= 82,232, -135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,1= 66,136, -229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,2= 30,150, -135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,1= 86,231, -155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,1= 55,162, -233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,2= 33,149, -191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,1= 82,231, -187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,1= 30,161, -228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,2= 28,191, -161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,1= 60,228, -187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,1= 84,139, -230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,2= 31,132, -182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,1= 88,232, -191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,1= 82,133, -232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,2= 28,187, -152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,1= 58,230, -137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,1= 42,168, -229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,2= 29,140, -150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,1= 69,232, -175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,1= 91,135, -229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,2= 29,186, -166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,1= 52,231, -153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,1= 33,141, -232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,2= 28,189, -147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,1= 72,229, -189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,1= 84,156, -230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,2= 32,129, -140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,1= 61,233, -161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,1= 61,174, -229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,2= 30,158, -129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,1= 57,230, -156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,1= 51,133, -230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,2= 32,171, -150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,1= 73,231, -171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,1= 84,173, -229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,2= 30,180, -165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,1= 64,230, -156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,1= 84,184, -232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,2= 29,189, -147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,1= 73,232, -130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,1= 45,152, -229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,2= 29,133, -183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,1= 36,229, -138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,1= 88,149, -232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,2= 32,174, -161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,1= 57,232, -167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,1= 91,152, -232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,2= 29,173, -151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,1= 59,229, -143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,1= 36,144, -228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,2= 29,159, -159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,1= 68,231, -187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,1= 33,141, -231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,2= 30,132, -159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,1= 63,230, -143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,1= 68,139, -229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,2= 28,184, -170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,1= 38,229, -136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,1= 51,168, -230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,2= 29,133, -182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,1= 68,230, -136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,1= 36,144, -233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,2= 32,181, -155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,1= 80,231, -156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,1= 68,129, -230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,2= 30,131, -160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,1= 89,229, -133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,1= 37,185, -231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,2= 28,186, -167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,1= 88,229, -133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,1= 86,171, -229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,2= 29,144, -136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,1= 35,231, -190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,1= 87,136, -228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,2= 31,139, -144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,1= 56,229, -134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,1= 75,185, -232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,2= 29,175, -185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,1= 32,229, -189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,1= 72,163, -232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,2= 29,144, -145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,1= 89,229, -189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,1= 54,143, -231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,2= 28,184, -154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,1= 42,229, -149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,1= 37,147, -233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,2= 28,186, -142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,1= 39,229, -173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,1= 49,191, -230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,2= 29,156, -176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,1= 62,229, -136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,1= 74,140, -229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,2= 29,134, -141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,1= 37,232, -139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,1= 42,169, -229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,2= 29,143, -175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,1= 87,230, -131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,1= 28,167, -232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,2= 31,156, -139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,1= 29,233, -187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,1= 56,159, -229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,2= 29,134, -138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,1= 89,228, -188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,1= 39,128, -230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,2= 29,133, -187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,1= 68,231, -144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110= ,118, -105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105= ,111, -116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101= ,115, -116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110= ,116, -114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101= ,110, -112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,1= 05,117, -100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,= 101,115 -,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,1= 15,101, -103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,11= 0,116, -111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111= ,110, -117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113= ,117, -105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117= ,110,97 -,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,= 114,114 -,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,1= 01,111, -118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117= ,101, -114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,9= 9,101, -110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,11= 7,105, -101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115= ,111, -109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,= 105,101 -,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,= 111,112 -,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,1= 00,101, -109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,= 101,108 -,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,= 99,111, -109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,1= 14,112, -111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114= ,118, -105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,= 100,114 -,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,10= 8,111, -113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99= ,114, -105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,10= 1,114, -116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,= 101,101 -,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114= ,111, -112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,10= 5,108, -118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,= 98,106, -101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,1= 09,97, -115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,= 115,105 -,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,11= 7,101, -98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,= 115,101 -,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105= ,101, -110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97= ,114, -115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,1= 15,116, -105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105= ,116, -111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111= ,101, -118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,1= 18,105, -101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97= ,195, -161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,1= 12,195, -179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,= 115,108 -,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111= ,109, -195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,= 100,111 -,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,= 100,105 -,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130= ,208, -190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,1= 90,208, -178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,1= 30,208, -176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,1= 76,208, -186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,1= 84,208, -146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,1= 30,208, -190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,1= 81,209, -130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,1= 81,208, -188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,1= 89,208, -176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,1= 30,208, -190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,1= 88,208, -161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,1= 78,208, -176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,1= 76,208, -186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,1= 84,209, -141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,1= 91,209, -128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,1= 89,209, -143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,1= 85,208, -146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,1= 30,208, -190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,1= 84,209, -128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,1= 34,209, -141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,1= 80,208, -190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,1= 89,208, -190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,1= 36,224, -164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,1= 64,149, -224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,2= 24,165, -135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,1= 28,224, -164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,1= 64,185, -224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,2= 24,164, -185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,1= 90,106, -97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164= ,133, -224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,2= 24,164, -190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,1= 68,224, -164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,1= 64,165, -224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,2= 24,165, -128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,1= 35,224, -164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,1= 64,137, -224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,2= 24,165, -139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,1= 36,224, -164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,1= 64,172, -224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,2= 24,164, -178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,1= 28,224, -164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,1= 35,216, -176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,1= 32,217, -137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,1= 77,217, -131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,1= 85,216, -177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,1= 36,217, -133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,1= 67,217, -132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,1= 36,216, -173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,1= 68,216, -175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,1= 67,216, -167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,1= 68,216, -185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,1= 33,217, -134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,1= 67,217, -132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,1= 32,217, -138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,1= 34,216, -176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,1= 32,217, -131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,1= 33,216, -181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,1= 29,217, -138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,1= 69,216, -167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,1= 74,216, -167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,1= 32,217, -138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,1= 34,216, -174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,1= 80,216, -167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,1= 81,216, -181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,1= 75,217, -134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,1= 67,216, -173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,1= 72,216, -168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,1= 69,216, -179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,1= 86,216, -178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,1= 32,217, -135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,1= 68,217, -132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,1= 80,217, -138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,1= 38,217, -131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,1= 68,216, -168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,1= 68,217, -138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,1= 35,217, -133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,1= 77,217, -130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,1= 15,101, -114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102= ,100, -101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114= ,116, -115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,1= 15,115, -102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,1= 14,121, -97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,10= 1,115, -114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,10= 1,115, -115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105= ,98,108 -,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110= ,111, -119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110= ,97,109 -,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,= 98,108, -101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,= 112,108 -,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,9= 8,115, -105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,1= 12,116, -105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,1= 09,105, -108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,= 97,100, -100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,11= 4,99, -111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,= 116,102 -,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,= 100,115 -,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,1= 01,99, -117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,= 121,108 -,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,10= 1,114, -115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,= 101,115 -,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,11= 4,97, -109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116= ,116, -101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117= ,114,99 -,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,11= 4,116, -110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101= ,97,110 -,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,1= 17,108, -116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,1= 14,111, -106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,12= 0,112, -105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,11= 0,103, -108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80= ,108, -101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97= ,118, -101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,= 83,112, -97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,= 109,101 -,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,1= 14,113, -117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,= 108,115 -,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,11= 1,110, -119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,10= 5,97, -108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,9= 8,101, -114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,11= 4,108, -105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,10= 5,99, -116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116= ,114,97 -,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,1= 01,110, -116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,1= 01,97, -115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,10= 8,105, -115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,= 86,101, -114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,10= 1,112, -108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117= ,115, -111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,= 110,115 -,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,= 121,99, -101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,= 101,97, -110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,1= 01,100, -112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,= 97,108, -99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114= ,101,99 -,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105= ,100, -100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,= 32,97, -110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,1= 16,103, -101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,1= 10,103, -80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,1= 14,115, -99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,11= 5,101, -99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,5= 9,72, -105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108= ,117, -112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,10= 7,114, -101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110= ,103,67 -,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110= ,115,98 -,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,1= 04,102, -105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,= 121,98, -101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110= ,103, -100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,1= 10,115, -101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,= 108,99, -108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110= ,101,97 -,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,= 119,112 -,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,= 32,107, -105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,= 110,100 -,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,11= 6,115, -45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,11= 6,97, -100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,= 103,100 -,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,10= 1,100, -71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,10= 9,62, -105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,11= 0,101, -100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,1= 08,101, -98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111= ,114, -109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,9= 7,103, -111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,9= 7,103, -101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,10= 5,110, -103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,= 114,97, -108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,= 111,116 -,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101= ,115, -101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97= ,110, -100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,1= 18,101, -116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,= 100,105 -,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115= ,114,97 -,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103= ,108,97 -,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,1= 08,101, -97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109= ,112,97 -,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93= ,38,113 -,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,= 97,108, -117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,= 116,97, -116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,= 109,111 -,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,= 105,110 -,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,= 105,109 -,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,10= 4,101, -97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,1= 07,105, -110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,11= 5,102, -111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,1= 08,97, -100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,1= 14,116, -114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108= ,116, -115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103= ,101, -108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,1= 17,110, -116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,11= 4,116, -32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110= ,101, -100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,= 97,118, -101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,1= 14,99, -104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,1= 05,118, -101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,11= 6,101, -100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118= ,105, -110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,11= 4,104, -97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,11= 5,32, -117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,= 114,111 -,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,= 114,111 -,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,= 101,120 -,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,5= 8,101, -118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,= 112,101 -,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,1= 16,115, -121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,1= 15,109, -117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,1= 03,125, -41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,9= 9,111, -110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,1= 12,108, -97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,11= 4,32,39 -,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101= ,97,100 -,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,= 97,98, -105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,4= 1,46,32 -,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,9= 9,105, -101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97= ,110, -100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69= ,97,115 -,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,= 67,104, -97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,= 115,117 -,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,10= 3,46, -104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114= ,110,99 -,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,1= 00,74, -117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,1= 15,84, -104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,= 101,112 -,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,1= 00,101, -58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,1= 05,99, -95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,10= 1,100, -99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,1= 00,115, -112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,= 114,101 -,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,11= 6,101, -114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109= ,97,110 -,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,1= 04,105, -112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,1= 04,101, -115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97= ,114, -116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108= ,101,97 -,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,1= 05,98, -101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,= 97,109, -112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115= ,119, -101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101= ,102, -101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,8= 3,101, -118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,1= 11,117, -116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,= 101,110 -,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114= ,101, -118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,= 10,87, -104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,10= 0,101, -114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,= 100,101 -,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115= ,116, -115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,11= 6,105, -111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,1= 07,101, -116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116= ,110, -101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,1= 08,103, -105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,= 97,98, -108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,10= 4,101, -114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,= 116,105 -,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,= 62,13, -10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,= 115,32, -111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,9= 7,110, -103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,5= 9,13,10 -,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,= 114,58, -108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48= ,60,47, -104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,= 101,108 -,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,1= 11,110, -97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,10= 5,103, -104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,= 114,32, -101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,1= 08,117, -115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68= ,111, -117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,= 70,111, -114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,11= 8,101, -104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118= ,97,108 -,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,= 32,115, -109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,= 114,101 -,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,1= 15,112, -108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,10= 5,100, -100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,9= 7,98, -105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,11= 1,110, -100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97= ,112, -112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,= 110,108 -,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,12= 1,112, -105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,1= 18,101, -110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,1= 14,101, -32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105= ,109,97 -,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,10= 3,105, -110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,= 116,101 -,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,1= 10,108, -97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112= ,120,59 -,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112= ,97,110 -,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,10= 1,97, -116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,= 105,110 -,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,1= 01,103, -101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119= ,105, -116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,1= 16,101, -115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,10= 1,100, -105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,= 111,32, -119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,= 105,99, -105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97= ,114, -107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,11= 1,109, -98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,9= 8,114, -32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,= 118,97, -99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,= 111,108 -,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114= ,115, -105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,1= 12,105, -99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,= 114,105 -,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,= 112,112 -,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119= ,105, -100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,1= 01,99, -116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,12= 1,111, -117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,= 114,110 -,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,1= 11,117, -114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108= ,97,115 -,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108= ,111, -114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,10= 8,108, -105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120= ,101,99 -,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101= ,102,97 -,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114= ,116, -101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,= 99,101, -101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,= 110,101 -,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,= 111,110 -,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32= ,45,45, -62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105= ,110, -103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,1= 01,110, -116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,= 99,116, -100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,1= 05,110, -103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112= ,104,32 -,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,= 101,62, -97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44= ,32,69, -108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,1= 14,72, -117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,= 101,115 -,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,11= 5,80, -114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,= 101,38, -113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,11= 2,101, -114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,1= 03,114, -97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121= ,105, -100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32= ,116, -104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,1= 14,101, -103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115= ,87,104 -,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,1= 14,101, -118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,4= 7,115, -104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65= ,117, -115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,= 73,110, -32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73= ,115, -108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,= 105,101 -,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,11= 1,115, -101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99= ,101, -112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,= 116,109 -,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,10= 1,110, -109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99= ,116, -109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,= 108,101 -,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,= 111,38, -99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,7= 9,112, -116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103= ,99,111 -,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103= ,106, -117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,1= 21,105, -116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,= 100,108 -,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,= 47,34, -32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,11= 6,100, -105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,1= 14,112, -104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117= ,115, -105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114= ,101, -118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,9= 7,110, -100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,11= 5,119, -97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,= 121,109 -,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99= ,116,68 -,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,9= 9,117, -115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32= ,66,111 -,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63= ,97,114 -,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,= 46,104, -116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65= ,108, -108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,= 108,115 -,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,10= 8,97, -114,101,45,45,62,10,60,115,99,102,105,114,101,102,111,120,97,115,32,109,1= 17,99, -104,97,112,112,108,105,101,115,105,110,100,101,120,44,32,115,44,32,98,117= ,116,32 -,116,121,112,101,32,61,32,10,13,10,60,33,45,45,116,111,119,97,114,100,115= ,82,101 -,99,111,114,100,115,80,114,105,118,97,116,101,70,111,114,101,105,103,110,= 80,114, -101,109,105,101,114,99,104,111,105,99,101,115,86,105,114,116,117,97,108,1= 14,101, -116,117,114,110,115,67,111,109,109,101,110,116,80,111,119,101,114,101,100= ,105, -110,108,105,110,101,59,112,111,118,101,114,116,121,99,104,97,109,98,101,1= 14,76, -105,118,105,110,103,32,118,111,108,117,109,101,115,65,110,116,104,111,110= ,121, -108,111,103,105,110,34,32,82,101,108,97,116,101,100,69,99,111,110,111,109= ,121, -114,101,97,99,104,101,115,99,117,116,116,105,110,103,103,114,97,118,105,1= 16,121, -108,105,102,101,32,105,110,67,104,97,112,116,101,114,45,115,104,97,100,11= 1,119, -78,111,116,97,98,108,101,60,47,116,100,62,13,10,32,114,101,116,117,114,11= 0,115, -116,97,100,105,117,109,119,105,100,103,101,116,115,118,97,114,121,105,110= ,103, -116,114,97,118,101,108,115,104,101,108,100,32,98,121,119,104,111,32,97,11= 4,101, -119,111,114,107,32,105,110,102,97,99,117,108,116,121,97,110,103,117,108,9= 7,114, -119,104,111,32,104,97,100,97,105,114,112,111,114,116,116,111,119,110,32,1= 11,102, -10,10,83,111,109,101,32,39,99,108,105,99,107,39,99,104,97,114,103,101,115= ,107, -101,121,119,111,114,100,105,116,32,119,105,108,108,99,105,116,121,32,111,= 102,40, -116,104,105,115,41,59,65,110,100,114,101,119,32,117,110,105,113,117,101,3= 2,99, -104,101,99,107,101,100,111,114,32,109,111,114,101,51,48,48,112,120,59,32,= 114,101 -,116,117,114,110,59,114,115,105,111,110,61,34,112,108,117,103,105,110,115= ,119, -105,116,104,105,110,32,104,101,114,115,101,108,102,83,116,97,116,105,111,= 110,70, -101,100,101,114,97,108,118,101,110,116,117,114,101,112,117,98,108,105,115= ,104, -115,101,110,116,32,116,111,116,101,110,115,105,111,110,97,99,116,114,101,= 115,115 -,99,111,109,101,32,116,111,102,105,110,103,101,114,115,68,117,107,101,32,= 111,102 -,112,101,111,112,108,101,44,101,120,112,108,111,105,116,119,104,97,116,32= ,105, -115,104,97,114,109,111,110,121,97,32,109,97,106,111,114,34,58,34,104,116,= 116,112 -,105,110,32,104,105,115,32,109,101,110,117,34,62,10,109,111,110,116,104,1= 08,121, -111,102,102,105,99,101,114,99,111,117,110,99,105,108,103,97,105,110,105,1= 10,103, -101,118,101,110,32,105,110,83,117,109,109,97,114,121,100,97,116,101,32,11= 1,102, -108,111,121,97,108,116,121,102,105,116,110,101,115,115,97,110,100,32,119,= 97,115, -101,109,112,101,114,111,114,115,117,112,114,101,109,101,83,101,99,111,110= ,100,32 -,104,101,97,114,105,110,103,82,117,115,115,105,97,110,108,111,110,103,101= ,115, -116,65,108,98,101,114,116,97,108,97,116,101,114,97,108,115,101,116,32,111= ,102,32 -,115,109,97,108,108,34,62,46,97,112,112,101,110,100,100,111,32,119,105,11= 6,104, -102,101,100,101,114,97,108,98,97,110,107,32,111,102,98,101,110,101,97,116= ,104,68 -,101,115,112,105,116,101,67,97,112,105,116,97,108,103,114,111,117,110,100= ,115,41 -,44,32,97,110,100,32,112,101,114,99,101,110,116,105,116,32,102,114,111,10= 9,99, -108,111,115,105,110,103,99,111,110,116,97,105,110,73,110,115,116,101,97,1= 00,102, -105,102,116,101,101,110,97,115,32,119,101,108,108,46,121,97,104,111,111,4= 6,114, -101,115,112,111,110,100,102,105,103,104,116,101,114,111,98,115,99,117,114= ,101, -114,101,102,108,101,99,116,111,114,103,97,110,105,99,61,32,77,97,116,104,= 46,101, -100,105,116,105,110,103,111,110,108,105,110,101,32,112,97,100,100,105,110= ,103,97 -,32,119,104,111,108,101,111,110,101,114,114,111,114,121,101,97,114,32,111= ,102, -101,110,100,32,111,102,32,98,97,114,114,105,101,114,119,104,101,110,32,10= 5,116, -104,101,97,100,101,114,32,104,111,109,101,32,111,102,114,101,115,117,109,= 101,100 -,114,101,110,97,109,101,100,115,116,114,111,110,103,62,104,101,97,116,105= ,110, -103,114,101,116,97,105,110,115,99,108,111,117,100,102,114,119,97,121,32,1= 11,102, -32,77,97,114,99,104,32,49,107,110,111,119,105,110,103,105,110,32,112,97,1= 14,116, -66,101,116,119,101,101,110,108,101,115,115,111,110,115,99,108,111,115,101= ,115, -116,118,105,114,116,117,97,108,108,105,110,107,115,34,62,99,114,111,115,1= 15,101, -100,69,78,68,32,45,45,62,102,97,109,111,117,115,32,97,119,97,114,100,101,= 100,76, -105,99,101,110,115,101,72,101,97,108,116,104,32,102,97,105,114,108,121,32= ,119, -101,97,108,116,104,121,109,105,110,105,109,97,108,65,102,114,105,99,97,11= 0,99, -111,109,112,101,116,101,108,97,98,101,108,34,62,115,105,110,103,105,110,1= 03,102, -97,114,109,101,114,115,66,114,97,115,105,108,41,100,105,115,99,117,115,11= 5,114, -101,112,108,97,99,101,71,114,101,103,111,114,121,102,111,110,116,32,99,11= 1,112, -117,114,115,117,101,100,97,112,112,101,97,114,115,109,97,107,101,32,117,1= 12,114, -111,117,110,100,101,100,98,111,116,104,32,111,102,98,108,111,99,107,101,1= 00,115, -97,119,32,116,104,101,111,102,102,105,99,101,115,99,111,108,111,117,114,1= 15,105, -102,40,100,111,99,117,119,104,101,110,32,104,101,101,110,102,111,114,99,1= 01,112, -117,115,104,40,102,117,65,117,103,117,115,116,32,85,84,70,45,56,34,62,70,= 97,110, -116,97,115,121,105,110,32,109,111,115,116,105,110,106,117,114,101,100,85,= 115,117 -,97,108,108,121,102,97,114,109,105,110,103,99,108,111,115,117,114,101,111= ,98,106 -,101,99,116,32,100,101,102,101,110,99,101,117,115,101,32,111,102,32,77,10= 1,100, -105,99,97,108,60,98,111,100,121,62,10,101,118,105,100,101,110,116,98,101,= 32,117, -115,101,100,107,101,121,67,111,100,101,115,105,120,116,101,101,110,73,115= ,108,97 -,109,105,99,35,48,48,48,48,48,48,101,110,116,105,114,101,32,119,105,100,1= 01,108, -121,32,97,99,116,105,118,101,32,40,116,121,112,101,111,102,111,110,101,32= ,99,97, -110,99,111,108,111,114,32,61,115,112,101,97,107,101,114,101,120,116,101,1= 10,100, -115,80,104,121,115,105,99,115,116,101,114,114,97,105,110,60,116,98,111,10= 0,121, -62,102,117,110,101,114,97,108,118,105,101,119,105,110,103,109,105,100,100= ,108, -101,32,99,114,105,99,107,101,116,112,114,111,112,104,101,116,115,104,105,= 102,116 -,101,100,100,111,99,116,111,114,115,82,117,115,115,101,108,108,32,116,97,= 114,103 -,101,116,99,111,109,112,97,99,116,97,108,103,101,98,114,97,115,111,99,105= ,97,108 -,45,98,117,108,107,32,111,102,109,97,110,32,97,110,100,60,47,116,100,62,1= 0,32, -104,101,32,108,101,102,116,41,46,118,97,108,40,41,102,97,108,115,101,41,5= 9,108, -111,103,105,99,97,108,98,97,110,107,105,110,103,104,111,109,101,32,116,11= 1,110, -97,109,105,110,103,32,65,114,105,122,111,110,97,99,114,101,100,105,116,11= 5,41,59 -,10,125,41,59,10,102,111,117,110,100,101,114,105,110,32,116,117,114,110,6= 7,111, -108,108,105,110,115,98,101,102,111,114,101,32,66,117,116,32,116,104,101,9= 9,104, -97,114,103,101,100,84,105,116,108,101,34,62,67,97,112,116,97,105,110,115,= 112,101 -,108,108,101,100,103,111,100,100,101,115,115,84,97,103,32,45,45,62,65,100= ,100, -105,110,103,58,98,117,116,32,119,97,115,82,101,99,101,110,116,32,112,97,1= 16,105, -101,110,116,98,97,99,107,32,105,110,61,102,97,108,115,101,38,76,105,110,9= 9,111, -108,110,119,101,32,107,110,111,119,67,111,117,110,116,101,114,74,117,100,= 97,105, -115,109,115,99,114,105,112,116,32,97,108,116,101,114,101,100,39,93,41,59,= 10,32, -32,104,97,115,32,116,104,101,117,110,99,108,101,97,114,69,118,101,110,116= ,39,44, -98,111,116,104,32,105,110,110,111,116,32,97,108,108,10,10,60,33,45,45,32,= 112,108 -,97,99,105,110,103,104,97,114,100,32,116,111,32,99,101,110,116,101,114,11= 5,111, -114,116,32,111,102,99,108,105,101,110,116,115,115,116,114,101,101,116,115= ,66,101 -,114,110,97,114,100,97,115,115,101,114,116,115,116,101,110,100,32,116,111= ,102,97 -,110,116,97,115,121,100,111,119,110,32,105,110,104,97,114,98,111,117,114,= 70,114, -101,101,100,111,109,106,101,119,101,108,114,121,47,97,98,111,117,116,46,4= 6,115, -101,97,114,99,104,108,101,103,101,110,100,115,105,115,32,109,97,100,101,1= 09,111, -100,101,114,110,32,111,110,108,121,32,111,110,111,110,108,121,32,116,111,= 105,109 -,97,103,101,34,32,108,105,110,101,97,114,32,112,97,105,110,116,101,114,97= ,110, -100,32,110,111,116,114,97,114,101,108,121,32,97,99,114,111,110,121,109,10= 0,101, -108,105,118,101,114,115,104,111,114,116,101,114,48,48,38,97,109,112,59,97= ,115,32 -,109,97,110,121,119,105,100,116,104,61,34,47,42,32,60,33,91,67,116,105,11= 6,108, -101,32,61,111,102,32,116,104,101,32,108,111,119,101,115,116,32,112,105,99= ,107, -101,100,32,101,115,99,97,112,101,100,117,115,101,115,32,111,102,112,101,1= 11,112, -108,101,115,32,80,117,98,108,105,99,77,97,116,116,104,101,119,116,97,99,1= 16,105, -99,115,100,97,109,97,103,101,100,119,97,121,32,102,111,114,108,97,119,115= ,32,111 -,102,101,97,115,121,32,116,111,32,119,105,110,100,111,119,115,116,114,111= ,110, -103,32,32,115,105,109,112,108,101,125,99,97,116,99,104,40,115,101,118,101= ,110, -116,104,105,110,102,111,98,111,120,119,101,110,116,32,116,111,112,97,105,= 110,116 -,101,100,99,105,116,105,122,101,110,73,32,100,111,110,39,116,114,101,116,= 114,101 -,97,116,46,32,83,111,109,101,32,119,119,46,34,41,59,10,98,111,109,98,105,= 110,103 -,109,97,105,108,116,111,58,109,97,100,101,32,105,110,46,32,77,97,110,121,= 32,99, -97,114,114,105,101,115,124,124,123,125,59,119,105,119,111,114,107,32,111,= 102,115 -,121,110,111,110,121,109,100,101,102,101,97,116,115,102,97,118,111,114,10= 1,100, -111,112,116,105,99,97,108,112,97,103,101,84,114,97,117,110,108,101,115,11= 5,32, -115,101,110,100,105,110,103,108,101,102,116,34,62,60,99,111,109,83,99,111= ,114,65 -,108,108,32,116,104,101,106,81,117,101,114,121,46,116,111,117,114,105,115= ,116,67 -,108,97,115,115,105,99,102,97,108,115,101,34,32,87,105,108,104,101,108,10= 9,115, -117,98,117,114,98,115,103,101,110,117,105,110,101,98,105,115,104,111,112,= 115,46, -115,112,108,105,116,40,103,108,111,98,97,108,32,102,111,108,108,111,119,1= 15,98, -111,100,121,32,111,102,110,111,109,105,110,97,108,67,111,110,116,97,99,11= 6,115, -101,99,117,108,97,114,108,101,102,116,32,116,111,99,104,105,101,102,108,1= 21,45, -104,105,100,100,101,110,45,98,97,110,110,101,114,60,47,108,105,62,10,10,4= 6,32,87 -,104,101,110,32,105,110,32,98,111,116,104,100,105,115,109,105,115,115,69,= 120,112 -,108,111,114,101,97,108,119,97,121,115,32,118,105,97,32,116,104,101,115,1= 12,97, -195,177,111,108,119,101,108,102,97,114,101,114,117,108,105,110,103,32,97,= 114,114 -,97,110,103,101,99,97,112,116,97,105,110,104,105,115,32,115,111,110,114,1= 17,108, -101,32,111,102,104,101,32,116,111,111,107,105,116,115,101,108,102,44,61,4= 8,38,97 -,109,112,59,40,99,97,108,108,101,100,115,97,109,112,108,101,115,116,111,3= 2,109, -97,107,101,99,111,109,47,112,97,103,77,97,114,116,105,110,32,75,101,110,1= 10,101, -100,121,97,99,99,101,112,116,115,102,117,108,108,32,111,102,104,97,110,10= 0,108, -101,100,66,101,115,105,100,101,115,47,47,45,45,62,60,47,97,98,108,101,32,= 116,111 -,116,97,114,103,101,116,115,101,115,115,101,110,99,101,104,105,109,32,116= ,111,32 -,105,116,115,32,98,121,32,99,111,109,109,111,110,46,109,105,110,101,114,9= 7,108, -116,111,32,116,97,107,101,119,97,121,115,32,116,111,115,46,111,114,103,47= ,108,97 -,100,118,105,115,101,100,112,101,110,97,108,116,121,115,105,109,112,108,1= 01,58, -105,102,32,116,104,101,121,76,101,116,116,101,114,115,97,32,115,104,111,1= 14,116, -72,101,114,98,101,114,116,115,116,114,105,107,101,115,32,103,114,111,117,= 112,115 -,46,108,101,110,103,116,104,102,108,105,103,104,116,115,111,118,101,114,1= 08,97, -112,115,108,111,119,108,121,32,108,101,115,115,101,114,32,115,111,99,105,= 97,108, -32,60,47,112,62,10,9,9,105,116,32,105,110,116,111,114,97,110,107,101,100,= 32,114, -97,116,101,32,111,102,117,108,62,13,10,32,32,97,116,116,101,109,112,116,1= 12,97, -105,114,32,111,102,109,97,107,101,32,105,116,75,111,110,116,97,107,116,65= ,110, -116,111,110,105,111,104,97,118,105,110,103,32,114,97,116,105,110,103,115,= 32,97, -99,116,105,118,101,115,116,114,101,97,109,115,116,114,97,112,112,101,100,= 34,41, -46,99,115,115,40,104,111,115,116,105,108,101,108,101,97,100,32,116,111,10= 8,105, -116,116,108,101,32,103,114,111,117,112,115,44,80,105,99,116,117,114,101,4= 5,45,62 -,13,10,13,10,32,114,111,119,115,61,34,32,111,98,106,101,99,116,105,110,11= 8,101, -114,115,101,60,102,111,111,116,101,114,67,117,115,116,111,109,86,62,60,92= ,47,115 -,99,114,115,111,108,118,105,110,103,67,104,97,109,98,101,114,115,108,97,1= 18,101, -114,121,119,111,117,110,100,101,100,119,104,101,114,101,97,115,33,61,32,3= 9,117, -110,100,102,111,114,32,97,108,108,112,97,114,116,108,121,32,45,114,105,10= 3,104, -116,58,65,114,97,98,105,97,110,98,97,99,107,101,100,32,99,101,110,116,117= ,114, -121,117,110,105,116,32,111,102,109,111,98,105,108,101,45,69,117,114,111,1= 12,101, -44,105,115,32,104,111,109,101,114,105,115,107,32,111,102,100,101,115,105,= 114,101 -,100,67,108,105,110,116,111,110,99,111,115,116,32,111,102,97,103,101,32,1= 11,102, -32,98,101,99,111,109,101,32,110,111,110,101,32,111,102,112,38,113,117,111= ,116,59 -,77,105,100,100,108,101,32,101,97,100,39,41,91,48,67,114,105,116,105,99,1= 15,115, -116,117,100,105,111,115,62,38,99,111,112,121,59,103,114,111,117,112,34,62= ,97,115 -,115,101,109,98,108,109,97,107,105,110,103,32,112,114,101,115,115,101,100= ,119, -105,100,103,101,116,46,112,115,58,34,32,63,32,114,101,98,117,105,108,116,= 98,121, -32,115,111,109,101,70,111,114,109,101,114,32,101,100,105,116,111,114,115,= 100,101 -,108,97,121,101,100,67,97,110,111,110,105,99,104,97,100,32,116,104,101,11= 2,117, -115,104,105,110,103,99,108,97,115,115,61,34,98,117,116,32,97,114,101,112,= 97,114, -116,105,97,108,66,97,98,121,108,111,110,98,111,116,116,111,109,32,99,97,1= 14,114, -105,101,114,67,111,109,109,97,110,100,105,116,115,32,117,115,101,65,115,3= 2,119, -105,116,104,99,111,117,114,115,101,115,97,32,116,104,105,114,100,100,101,= 110,111 -,116,101,115,97,108,115,111,32,105,110,72,111,117,115,116,111,110,50,48,1= 12,120, -59,34,62,97,99,99,117,115,101,100,100,111,117,98,108,101,32,103,111,97,10= 8,32, -111,102,70,97,109,111,117,115,32,41,46,98,105,110,100,40,112,114,105,101,= 115,116 -,115,32,79,110,108,105,110,101,105,110,32,74,117,108,121,115,116,32,43,32= ,34,103 -,99,111,110,115,117,108,116,100,101,99,105,109,97,108,104,101,108,112,102= ,117, -108,114,101,118,105,118,101,100,105,115,32,118,101,114,121,114,39,43,39,1= 05,112, -116,108,111,115,105,110,103,32,102,101,109,97,108,101,115,105,115,32,97,1= 08,115, -111,115,116,114,105,110,103,115,100,97,121,115,32,111,102,97,114,114,105,= 118,97, -108,102,117,116,117,114,101,32,60,111,98,106,101,99,116,102,111,114,99,10= 5,110, -103,83,116,114,105,110,103,40,34,32,47,62,10,9,9,104,101,114,101,32,105,1= 15,101, -110,99,111,100,101,100,46,32,32,84,104,101,32,98,97,108,108,111,111,110,1= 00,111, -110,101,32,98,121,47,99,111,109,109,111,110,98,103,99,111,108,111,114,108= ,97,119 -,32,111,102,32,73,110,100,105,97,110,97,97,118,111,105,100,101,100,98,117= ,116,32 -,116,104,101,50,112,120,32,51,112,120,106,113,117,101,114,121,46,97,102,1= 16,101, -114,32,97,112,111,108,105,99,121,46,109,101,110,32,97,110,100,102,111,111= ,116, -101,114,45,61,32,116,114,117,101,59,102,111,114,32,117,115,101,115,99,114= ,101, -101,110,46,73,110,100,105,97,110,32,105,109,97,103,101,32,61,102,97,109,1= 05,108, -121,44,104,116,116,112,58,47,47,32,38,110,98,115,112,59,100,114,105,118,1= 01,114, -115,101,116,101,114,110,97,108,115,97,109,101,32,97,115,110,111,116,105,9= 9,101, -100,118,105,101,119,101,114,115,125,41,40,41,59,10,32,105,115,32,109,111,= 114,101 -,115,101,97,115,111,110,115,102,111,114,109,101,114,32,116,104,101,32,110= ,101, -119,105,115,32,106,117,115,116,99,111,110,115,101,110,116,32,83,101,97,11= 4,99, -104,119,97,115,32,116,104,101,119,104,121,32,116,104,101,115,104,105,112,= 112,101 -,100,98,114,62,60,98,114,62,119,105,100,116,104,58,32,104,101,105,103,104= ,116,61 -,109,97,100,101,32,111,102,99,117,105,115,105,110,101,105,115,32,116,104,= 97,116, -97,32,118,101,114,121,32,65,100,109,105,114,97,108,32,102,105,120,101,100= ,59,110 -,111,114,109,97,108,32,77,105,115,115,105,111,110,80,114,101,115,115,44,3= 2,111, -110,116,97,114,105,111,99,104,97,114,115,101,116,116,114,121,32,116,111,3= 2,105, -110,118,97,100,101,100,61,34,116,114,117,101,34,115,112,97,99,105,110,103= ,105, -115,32,109,111,115,116,97,32,109,111,114,101,32,116,111,116,97,108,108,12= 1,102, -97,108,108,32,111,102,125,41,59,13,10,32,32,105,109,109,101,110,115,101,1= 16,105, -109,101,32,105,110,115,101,116,32,111,117,116,115,97,116,105,115,102,121,= 116,111 -,32,102,105,110,100,100,111,119,110,32,116,111,108,111,116,32,111,102,32,= 80,108, -97,121,101,114,115,105,110,32,74,117,110,101,113,117,97,110,116,117,109,1= 10,111, -116,32,116,104,101,116,105,109,101,32,116,111,100,105,115,116,97,110,116,= 70,105, -110,110,105,115,104,115,114,99,32,61,32,40,115,105,110,103,108,101,32,104= ,101, -108,112,32,111,102,71,101,114,109,97,110,32,108,97,119,32,97,110,100,108,= 97,98, -101,108,101,100,102,111,114,101,115,116,115,99,111,111,107,105,110,103,11= 5,112, -97,99,101,34,62,104,101,97,100,101,114,45,119,101,108,108,32,97,115,83,11= 6,97, -110,108,101,121,98,114,105,100,103,101,115,47,103,108,111,98,97,108,67,11= 4,111, -97,116,105,97,32,65,98,111,117,116,32,91,48,93,59,10,32,32,105,116,44,32,= 97,110, -100,103,114,111,117,112,101,100,98,101,105,110,103,32,97,41,123,116,104,1= 14,111, -119,104,101,32,109,97,100,101,108,105,103,104,116,101,114,101,116,104,105= ,99,97, -108,70,70,70,70,70,70,34,98,111,116,116,111,109,34,108,105,107,101,32,97,= 32,101, -109,112,108,111,121,115,108,105,118,101,32,105,110,97,115,32,115,101,101,= 110,112 -,114,105,110,116,101,114,109,111,115,116,32,111,102,117,98,45,108,105,110= ,107, -114,101,106,101,99,116,115,97,110,100,32,117,115,101,105,109,97,103,101,3= 4,62, -115,117,99,99,101,101,100,102,101,101,100,105,110,103,78,117,99,108,101,9= 7,114, -105,110,102,111,114,109,97,116,111,32,104,101,108,112,87,111,109,101,110,= 39,115, -78,101,105,116,104,101,114,77,101,120,105,99,97,110,112,114,111,116,101,1= 05,110, -60,116,97,98,108,101,32,98,121,32,109,97,110,121,104,101,97,108,116,104,1= 21,108, -97,119,115,117,105,116,100,101,118,105,115,101,100,46,112,117,115,104,40,= 123,115 -,101,108,108,101,114,115,115,105,109,112,108,121,32,84,104,114,111,117,10= 3,104, -46,99,111,111,107,105,101,32,73,109,97,103,101,40,111,108,100,101,114,34,= 62,117, -115,46,106,115,34,62,32,83,105,110,99,101,32,117,110,105,118,101,114,115,= 108,97, -114,103,101,114,32,111,112,101,110,32,116,111,33,45,45,32,101,110,100,108= ,105, -101,115,32,105,110,39,93,41,59,13,10,32,32,109,97,114,107,101,116,119,104= ,111,32 -,105,115,32,40,34,68,79,77,67,111,109,97,110,97,103,101,100,111,110,101,3= 2,102, -111,114,116,121,112,101,111,102,32,75,105,110,103,100,111,109,112,114,111= ,102, -105,116,115,112,114,111,112,111,115,101,116,111,32,115,104,111,119,99,101= ,110, -116,101,114,59,109,97,100,101,32,105,116,100,114,101,115,115,101,100,119,= 101,114 -,101,32,105,110,109,105,120,116,117,114,101,112,114,101,99,105,115,101,97= ,114, -105,115,105,110,103,115,114,99,32,61,32,39,109,97,107,101,32,97,32,115,10= 1,99, -117,114,101,100,66,97,112,116,105,115,116,118,111,116,105,110,103,32,10,9= ,9,118, -97,114,32,77,97,114,99,104,32,50,103,114,101,119,32,117,112,67,108,105,10= 9,97, -116,101,46,114,101,109,111,118,101,115,107,105,108,108,101,100,119,97,121= ,32,116 -,104,101,60,47,104,101,97,100,62,102,97,99,101,32,111,102,97,99,116,105,1= 10,103, -32,114,105,103,104,116,34,62,116,111,32,119,111,114,107,114,101,100,117,9= 9,101, -115,104,97,115,32,104,97,100,101,114,101,99,116,101,100,115,104,111,119,4= 0,41,59 -,97,99,116,105,111,110,61,98,111,111,107,32,111,102,97,110,32,97,114,101,= 97,61, -61,32,34,104,116,116,60,104,101,97,100,101,114,10,60,104,116,109,108,62,9= 9,111, -110,102,111,114,109,102,97,99,105,110,103,32,99,111,111,107,105,101,46,11= 4,101, -108,121,32,111,110,104,111,115,116,101,100,32,46,99,117,115,116,111,109,1= 04,101, -32,119,101,110,116,98,117,116,32,102,111,114,115,112,114,101,97,100,32,70= ,97,109 -,105,108,121,32,97,32,109,101,97,110,115,111,117,116,32,116,104,101,102,1= 11,114, -117,109,115,46,102,111,111,116,97,103,101,34,62,77,111,98,105,108,67,108,= 101,109 -,101,110,116,115,34,32,105,100,61,34,97,115,32,104,105,103,104,105,110,11= 6,101, -110,115,101,45,45,62,60,33,45,45,102,101,109,97,108,101,32,105,115,32,115= ,101, -101,110,105,109,112,108,105,101,100,115,101,116,32,116,104,101,97,32,115,= 116,97, -116,101,97,110,100,32,104,105,115,102,97,115,116,101,115,116,98,101,115,1= 05,100, -101,115,98,117,116,116,111,110,95,98,111,117,110,100,101,100,34,62,60,105= ,109, -103,32,73,110,102,111,98,111,120,101,118,101,110,116,115,44,97,32,121,111= ,117, -110,103,97,110,100,32,97,114,101,78,97,116,105,118,101,32,99,104,101,97,1= 12,101, -114,84,105,109,101,111,117,116,97,110,100,32,104,97,115,101,110,103,105,1= 10,101, -115,119,111,110,32,116,104,101,40,109,111,115,116,108,121,114,105,103,104= ,116,58 -,32,102,105,110,100,32,97,32,45,98,111,116,116,111,109,80,114,105,110,99,= 101,32, -97,114,101,97,32,111,102,109,111,114,101,32,111,102,115,101,97,114,99,104= ,95,110 -,97,116,117,114,101,44,108,101,103,97,108,108,121,112,101,114,105,111,100= ,44,108 -,97,110,100,32,111,102,111,114,32,119,105,116,104,105,110,100,117,99,101,= 100,112 -,114,111,118,105,110,103,109,105,115,115,105,108,101,108,111,99,97,108,10= 8,121, -65,103,97,105,110,115,116,116,104,101,32,119,97,121,107,38,113,117,111,11= 6,59, -112,120,59,34,62,13,10,112,117,115,104,101,100,32,97,98,97,110,100,111,11= 0,110, -117,109,101,114,97,108,67,101,114,116,97,105,110,73,110,32,116,104,105,11= 5,109, -111,114,101,32,105,110,111,114,32,115,111,109,101,110,97,109,101,32,105,1= 15,97, -110,100,44,32,105,110,99,114,111,119,110,101,100,73,83,66,78,32,48,45,99,= 114,101 -,97,116,101,115,79,99,116,111,98,101,114,109,97,121,32,110,111,116,99,101= ,110, -116,101,114,32,108,97,116,101,32,105,110,68,101,102,101,110,99,101,101,11= 0,97,99 -,116,101,100,119,105,115,104,32,116,111,98,114,111,97,100,108,121,99,111,= 111,108 -,105,110,103,111,110,108,111,97,100,61,105,116,46,32,84,104,101,114,101,9= 9,111, -118,101,114,77,101,109,98,101,114,115,104,101,105,103,104,116,32,97,115,1= 15,117, -109,101,115,60,104,116,109,108,62,10,112,101,111,112,108,101,46,105,110,3= 2,111, -110,101,32,61,119,105,110,100,111,119,102,111,111,116,101,114,95,97,32,10= 3,111, -111,100,32,114,101,107,108,97,109,97,111,116,104,101,114,115,44,116,111,3= 2,116, -104,105,115,95,99,111,111,107,105,101,112,97,110,101,108,34,62,76,111,110= ,100, -111,110,44,100,101,102,105,110,101,115,99,114,117,115,104,101,100,98,97,1= 12,116, -105,115,109,99,111,97,115,116,97,108,115,116,97,116,117,115,32,116,105,11= 6,108, -101,34,32,109,111,118,101,32,116,111,108,111,115,116,32,105,110,98,101,11= 6,116, -101,114,32,105,109,112,108,105,101,115,114,105,118,97,108,114,121,115,101= ,114, -118,101,114,115,32,83,121,115,116,101,109,80,101,114,104,97,112,115,101,1= 15,32, -97,110,100,32,99,111,110,116,101,110,100,102,108,111,119,105,110,103,108,= 97,115, -116,101,100,32,114,105,115,101,32,105,110,71,101,110,101,115,105,115,118,= 105,101 -,119,32,111,102,114,105,115,105,110,103,32,115,101,101,109,32,116,111,98,= 117,116 -,32,105,110,32,98,97,99,107,105,110,103,104,101,32,119,105,108,108,103,10= 5,118, -101,110,32,97,103,105,118,105,110,103,32,99,105,116,105,101,115,46,102,10= 8,111, -119,32,111,102,32,76,97,116,101,114,32,97,108,108,32,98,117,116,72,105,10= 3,104, -119,97,121,111,110,108,121,32,98,121,115,105,103,110,32,111,102,104,101,3= 2,100, -111,101,115,100,105,102,102,101,114,115,98,97,116,116,101,114,121,38,97,1= 09,112, -59,108,97,115,105,110,103,108,101,115,116,104,114,101,97,116,115,105,110,= 116,101 -,103,101,114,116,97,107,101,32,111,110,114,101,102,117,115,101,100,99,97,= 108,108 -,101,100,32,61,85,83,38,97,109,112,83,101,101,32,116,104,101,110,97,116,1= 05,118, -101,115,98,121,32,116,104,105,115,115,121,115,116,101,109,46,104,101,97,1= 00,32, -111,102,58,104,111,118,101,114,44,108,101,115,98,105,97,110,115,117,114,1= 10,97, -109,101,97,110,100,32,97,108,108,99,111,109,109,111,110,47,104,101,97,100= ,101, -114,95,95,112,97,114,97,109,115,72,97,114,118,97,114,100,47,112,105,120,1= 01,108, -46,114,101,109,111,118,97,108,115,111,32,108,111,110,103,114,111,108,101,= 32,111, -102,106,111,105,110,116,108,121,115,107,121,115,99,114,97,85,110,105,99,1= 11,100, -101,98,114,32,47,62,13,10,65,116,108,97,110,116,97,110,117,99,108,101,117= ,115,67 -,111,117,110,116,121,44,112,117,114,101,108,121,32,99,111,117,110,116,34,= 62,101, -97,115,105,108,121,32,98,117,105,108,100,32,97,111,110,99,108,105,99,107,= 97,32, -103,105,118,101,110,112,111,105,110,116,101,114,104,38,113,117,111,116,59= ,101, -118,101,110,116,115,32,101,108,115,101,32,123,10,100,105,116,105,111,110,= 115,110 -,111,119,32,116,104,101,44,32,119,105,116,104,32,109,97,110,32,119,104,11= 1,111, -114,103,47,87,101,98,111,110,101,32,97,110,100,99,97,118,97,108,114,121,7= 2,101, -32,100,105,101,100,115,101,97,116,116,108,101,48,48,44,48,48,48,32,123,11= 9,105, -110,100,111,119,104,97,118,101,32,116,111,105,102,40,119,105,110,100,97,1= 10,100, -32,105,116,115,115,111,108,101,108,121,32,109,38,113,117,111,116,59,114,1= 01,110, -101,119,101,100,68,101,116,114,111,105,116,97,109,111,110,103,115,116,101= ,105, -116,104,101,114,32,116,104,101,109,32,105,110,83,101,110,97,116,111,114,8= 5,115, -60,47,97,62,60,75,105,110,103,32,111,102,70,114,97,110,99,105,115,45,112,= 114,111 -,100,117,99,104,101,32,117,115,101,100,97,114,116,32,97,110,100,104,105,1= 09,32, -97,110,100,117,115,101,100,32,98,121,115,99,111,114,105,110,103,97,116,32= ,104, -111,109,101,116,111,32,104,97,118,101,114,101,108,97,116,101,115,105,98,1= 05,108, -105,116,121,102,97,99,116,105,111,110,66,117,102,102,97,108,111,108,105,1= 10,107, -34,62,60,119,104,97,116,32,104,101,102,114,101,101,32,116,111,67,105,116,= 121,32, -111,102,99,111,109,101,32,105,110,115,101,99,116,111,114,115,99,111,117,1= 10,116, -101,100,111,110,101,32,100,97,121,110,101,114,118,111,117,115,115,113,117= ,97,114 -,101,32,125,59,105,102,40,103,111,105,110,32,119,104,97,116,105,109,103,3= 4,32,97 -,108,105,115,32,111,110,108,121,115,101,97,114,99,104,47,116,117,101,115,= 100,97, -121,108,111,111,115,101,108,121,83,111,108,111,109,111,110,115,101,120,11= 7,97, -108,32,45,32,60,97,32,104,114,109,101,100,105,117,109,34,68,79,32,78,79,8= 4,32,70 -,114,97,110,99,101,44,119,105,116,104,32,97,32,119,97,114,32,97,110,100,1= 15,101, -99,111,110,100,32,116,97,107,101,32,97,32,62,13,10,13,10,13,10,109,97,114= ,107, -101,116,46,104,105,103,104,119,97,121,100,111,110,101,32,105,110,99,116,1= 05,118, -105,116,121,34,108,97,115,116,34,62,111,98,108,105,103,101,100,114,105,11= 5,101, -32,116,111,34,117,110,100,101,102,105,109,97,100,101,32,116,111,32,69,97,= 114,108 -,121,32,112,114,97,105,115,101,100,105,110,32,105,116,115,32,102,111,114,= 32,104, -105,115,97,116,104,108,101,116,101,74,117,112,105,116,101,114,89,97,104,1= 11,111, -33,32,116,101,114,109,101,100,32,115,111,32,109,97,110,121,114,101,97,108= ,108, -121,32,115,46,32,84,104,101,32,97,32,119,111,109,97,110,63,118,97,108,117= ,101,61 -,100,105,114,101,99,116,32,114,105,103,104,116,34,32,98,105,99,121,99,108= ,101,97 -,99,105,110,103,61,34,100,97,121,32,97,110,100,115,116,97,116,105,110,103= ,82,97, -116,104,101,114,44,104,105,103,104,101,114,32,79,102,102,105,99,101,32,97= ,114, -101,32,110,111,119,116,105,109,101,115,44,32,119,104,101,110,32,97,32,112= ,97,121 -,32,102,111,114,111,110,32,116,104,105,115,45,108,105,110,107,34,62,59,98= ,111, -114,100,101,114,97,114,111,117,110,100,32,97,110,110,117,97,108,32,116,10= 4,101, -32,78,101,119,112,117,116,32,116,104,101,46,99,111,109,34,32,116,97,107,1= 05,110, -32,116,111,97,32,98,114,105,101,102,40,105,110,32,116,104,101,103,114,111= ,117, -112,115,46,59,32,119,105,100,116,104,101,110,122,121,109,101,115,115,105,= 109,112 -,108,101,32,105,110,32,108,97,116,101,123,114,101,116,117,114,110,116,104= ,101, -114,97,112,121,97,32,112,111,105,110,116,98,97,110,110,105,110,103,105,11= 0,107, -115,34,62,10,40,41,59,34,32,114,101,97,32,112,108,97,99,101,92,117,48,48,= 51,67, -97,97,98,111,117,116,32,97,116,114,62,13,10,9,9,99,99,111,117,110,116,32,= 103,105 -,118,101,115,32,97,60,83,67,82,73,80,84,82,97,105,108,119,97,121,116,104,= 101,109 -,101,115,47,116,111,111,108,98,111,120,66,121,73,100,40,34,120,104,117,10= 9,97, -110,115,44,119,97,116,99,104,101,115,105,110,32,115,111,109,101,32,105,10= 2,32,40 -,119,105,99,111,109,105,110,103,32,102,111,114,109,97,116,115,32,85,110,1= 00,101, -114,32,98,117,116,32,104,97,115,104,97,110,100,101,100,32,109,97,100,101,= 32,98, -121,116,104,97,110,32,105,110,102,101,97,114,32,111,102,100,101,110,111,1= 16,101, -100,47,105,102,114,97,109,101,108,101,102,116,32,105,110,118,111,108,116,= 97,103, -101,105,110,32,101,97,99,104,97,38,113,117,111,116,59,98,97,115,101,32,11= 1,102, -73,110,32,109,97,110,121,117,110,100,101,114,103,111,114,101,103,105,109,= 101,115 -,97,99,116,105,111,110,32,60,47,112,62,13,10,60,117,115,116,111,109,86,97= ,59,38, -103,116,59,60,47,105,109,112,111,114,116,115,111,114,32,116,104,97,116,10= 9,111, -115,116,108,121,32,38,97,109,112,59,114,101,32,115,105,122,101,61,34,60,4= 7,97,62 -,60,47,104,97,32,99,108,97,115,115,112,97,115,115,105,118,101,72,111,115,= 116,32, -61,32,87,104,101,116,104,101,114,102,101,114,116,105,108,101,86,97,114,10= 5,111, -117,115,61,91,93,59,40,102,117,99,97,109,101,114,97,115,47,62,60,47,116,1= 00,62, -97,99,116,115,32,97,115,73,110,32,115,111,109,101,62,13,10,13,10,60,33,11= 1,114, -103,97,110,105,115,32,60,98,114,32,47,62,66,101,105,106,105,110,103,99,97= ,116,97 -,108,195,160,100,101,117,116,115,99,104,101,117,114,111,112,101,117,101,1= 17,115, -107,97,114,97,103,97,101,105,108,103,101,115,118,101,110,115,107,97,101,1= 15,112, -97,195,177,97,109,101,110,115,97,106,101,117,115,117,97,114,105,111,116,1= 14,97, -98,97,106,111,109,195,169,120,105,99,111,112,195,161,103,105,110,97,115,1= 05,101, -109,112,114,101,115,105,115,116,101,109,97,111,99,116,117,98,114,101,100,= 117,114 -,97,110,116,101,97,195,177,97,100,105,114,101,109,112,114,101,115,97,109,= 111,109 -,101,110,116,111,110,117,101,115,116,114,111,112,114,105,109,101,114,97,1= 16,114, -97,118,195,169,115,103,114,97,99,105,97,115,110,117,101,115,116,114,97,11= 2,114, -111,99,101,115,111,101,115,116,97,100,111,115,99,97,108,105,100,97,100,11= 2,101, -114,115,111,110,97,110,195,186,109,101,114,111,97,99,117,101,114,100,111,= 109,195 -,186,115,105,99,97,109,105,101,109,98,114,111,111,102,101,114,116,97,115,= 97,108, -103,117,110,111,115,112,97,195,173,115,101,115,101,106,101,109,112,108,11= 1,100, -101,114,101,99,104,111,97,100,101,109,195,161,115,112,114,105,118,97,100,= 111,97, -103,114,101,103,97,114,101,110,108,97,99,101,115,112,111,115,105,98,108,1= 01,104, -111,116,101,108,101,115,115,101,118,105,108,108,97,112,114,105,109,101,11= 4,111, -195,186,108,116,105,109,111,101,118,101,110,116,111,115,97,114,99,104,105= ,118, -111,99,117,108,116,117,114,97,109,117,106,101,114,101,115,101,110,116,114= ,97,100 -,97,97,110,117,110,99,105,111,101,109,98,97,114,103,111,109,101,114,99,97= ,100, -111,103,114,97,110,100,101,115,101,115,116,117,100,105,111,109,101,106,11= 1,114, -101,115,102,101,98,114,101,114,111,100,105,115,101,195,177,111,116,117,11= 4,105, -115,109,111,99,195,179,100,105,103,111,112,111,114,116,97,100,97,101,115,= 112,97, -99,105,111,102,97,109,105,108,105,97,97,110,116,111,110,105,111,112,101,1= 14,109, -105,116,101,103,117,97,114,100,97,114,97,108,103,117,110,97,115,112,114,1= 01,99, -105,111,115,97,108,103,117,105,101,110,115,101,110,116,105,100,111,118,10= 5,115, -105,116,97,115,116,195,173,116,117,108,111,99,111,110,111,99,101,114,115,= 101,103 -,117,110,100,111,99,111,110,115,101,106,111,102,114,97,110,99,105,97,109,= 105,110 -,117,116,111,115,115,101,103,117,110,100,97,116,101,110,101,109,111,115,1= 01,102, -101,99,116,111,115,109,195,161,108,97,103,97,115,101,115,105,195,179,110,= 114,101 -,118,105,115,116,97,103,114,97,110,97,100,97,99,111,109,112,114,97,114,10= 5,110, -103,114,101,115,111,103,97,114,99,195,173,97,97,99,99,105,195,179,110,101= ,99,117 -,97,100,111,114,113,117,105,101,110,101,115,105,110,99,108,117,115,111,10= 0,101, -98,101,114,195,161,109,97,116,101,114,105,97,104,111,109,98,114,101,115,1= 09,117, -101,115,116,114,97,112,111,100,114,195,173,97,109,97,195,177,97,110,97,19= 5,186, -108,116,105,109,97,101,115,116,97,109,111,115,111,102,105,99,105,97,108,1= 16,97, -109,98,105,101,110,110,105,110,103,195,186,110,115,97,108,117,100,111,115= ,112, -111,100,101,109,111,115,109,101,106,111,114,97,114,112,111,115,105,116,10= 5,111, -110,98,117,115,105,110,101,115,115,104,111,109,101,112,97,103,101,115,101= ,99,117 -,114,105,116,121,108,97,110,103,117,97,103,101,115,116,97,110,100,97,114,= 100,99, -97,109,112,97,105,103,110,102,101,97,116,117,114,101,115,99,97,116,101,10= 3,111, -114,121,101,120,116,101,114,110,97,108,99,104,105,108,100,114,101,110,114= ,101, -115,101,114,118,101,100,114,101,115,101,97,114,99,104,101,120,99,104,97,1= 10,103, -101,102,97,118,111,114,105,116,101,116,101,109,112,108,97,116,101,109,105= ,108, -105,116,97,114,121,105,110,100,117,115,116,114,121,115,101,114,118,105,99= ,101, -115,109,97,116,101,114,105,97,108,112,114,111,100,117,99,116,115,122,45,1= 05,110, -100,101,120,58,99,111,109,109,101,110,116,115,115,111,102,116,119,97,114,= 101,99, -111,109,112,108,101,116,101,99,97,108,101,110,100,97,114,112,108,97,116,1= 02,111, -114,109,97,114,116,105,99,108,101,115,114,101,113,117,105,114,101,100,109= ,111, -118,101,109,101,110,116,113,117,101,115,116,105,111,110,98,117,105,108,10= 0,105, -110,103,112,111,108,105,116,105,99,115,112,111,115,115,105,98,108,101,114= ,101, -108,105,103,105,111,110,112,104,121,115,105,99,97,108,102,101,101,100,98,= 97,99, -107,114,101,103,105,115,116,101,114,112,105,99,116,117,114,101,115,100,10= 5,115, -97,98,108,101,100,112,114,111,116,111,99,111,108,97,117,100,105,101,110,9= 9,101, -115,101,116,116,105,110,103,115,97,99,116,105,118,105,116,121,101,108,101= ,109, -101,110,116,115,108,101,97,114,110,105,110,103,97,110,121,116,104,105,110= ,103,97 -,98,115,116,114,97,99,116,112,114,111,103,114,101,115,115,111,118,101,114= ,118, -105,101,119,109,97,103,97,122,105,110,101,101,99,111,110,111,109,105,99,1= 16,114, -97,105,110,105,110,103,112,114,101,115,115,117,114,101,118,97,114,105,111= ,117, -115,32,60,115,116,114,111,110,103,62,112,114,111,112,101,114,116,121,115,= 104,111 -,112,112,105,110,103,116,111,103,101,116,104,101,114,97,100,118,97,110,99= ,101, -100,98,101,104,97,118,105,111,114,100,111,119,110,108,111,97,100,102,101,= 97,116, -117,114,101,100,102,111,111,116,98,97,108,108,115,101,108,101,99,116,101,= 100,76, -97,110,103,117,97,103,101,100,105,115,116,97,110,99,101,114,101,109,101,1= 09,98, -101,114,116,114,97,99,107,105,110,103,112,97,115,115,119,111,114,100,109,= 111,100 -,105,102,105,101,100,115,116,117,100,101,110,116,115,100,105,114,101,99,1= 16,108, -121,102,105,103,104,116,105,110,103,110,111,114,116,104,101,114,110,100,9= 7,116, -97,98,97,115,101,102,101,115,116,105,118,97,108,98,114,101,97,107,105,110= ,103, -108,111,99,97,116,105,111,110,105,110,116,101,114,110,101,116,100,114,111= ,112, -100,111,119,110,112,114,97,99,116,105,99,101,101,118,105,100,101,110,99,1= 01,102, -117,110,99,116,105,111,110,109,97,114,114,105,97,103,101,114,101,115,112,= 111,110 -,115,101,112,114,111,98,108,101,109,115,110,101,103,97,116,105,118,101,11= 2,114, -111,103,114,97,109,115,97,110,97,108,121,115,105,115,114,101,108,101,97,1= 15,101, -100,98,97,110,110,101,114,34,62,112,117,114,99,104,97,115,101,112,111,108= ,105,99 -,105,101,115,114,101,103,105,111,110,97,108,99,114,101,97,116,105,118,101= ,97,114 -,103,117,109,101,110,116,98,111,111,107,109,97,114,107,114,101,102,101,11= 4,114, -101,114,99,104,101,109,105,99,97,108,100,105,118,105,115,105,111,110,99,9= 7,108, -108,98,97,99,107,115,101,112,97,114,97,116,101,112,114,111,106,101,99,116= ,115,99 -,111,110,102,108,105,99,116,104,97,114,100,119,97,114,101,105,110,116,101= ,114, -101,115,116,100,101,108,105,118,101,114,121,109,111,117,110,116,97,105,11= 0,111, -98,116,97,105,110,101,100,61,32,102,97,108,115,101,59,102,111,114,40,118,= 97,114, -32,97,99,99,101,112,116,101,100,99,97,112,97,99,105,116,121,99,111,109,11= 2,117, -116,101,114,105,100,101,110,116,105,116,121,97,105,114,99,114,97,102,116,= 101,109 -,112,108,111,121,101,100,112,114,111,112,111,115,101,100,100,111,109,101,= 115,116 -,105,99,105,110,99,108,117,100,101,115,112,114,111,118,105,100,101,100,10= 4,111, -115,112,105,116,97,108,118,101,114,116,105,99,97,108,99,111,108,108,97,11= 2,115, -101,97,112,112,114,111,97,99,104,112,97,114,116,110,101,114,115,108,111,1= 03,111, -34,62,60,97,100,97,117,103,104,116,101,114,97,117,116,104,111,114,34,32,9= 9,117, -108,116,117,114,97,108,102,97,109,105,108,105,101,115,47,105,109,97,103,1= 01,115, -47,97,115,115,101,109,98,108,121,112,111,119,101,114,102,117,108,116,101,= 97,99, -104,105,110,103,102,105,110,105,115,104,101,100,100,105,115,116,114,105,9= 9,116, -99,114,105,116,105,99,97,108,99,103,105,45,98,105,110,47,112,117,114,112,= 111,115 -,101,115,114,101,113,117,105,114,101,115,101,108,101,99,116,105,111,110,9= 8,101, -99,111,109,105,110,103,112,114,111,118,105,100,101,115,97,99,97,100,101,1= 09,105, -99,101,120,101,114,99,105,115,101,97,99,116,117,97,108,108,121,109,101,10= 0,105, -99,105,110,101,99,111,110,115,116,97,110,116,97,99,99,105,100,101,110,116= ,77,97, -103,97,122,105,110,101,100,111,99,117,109,101,110,116,115,116,97,114,116,= 105,110 -,103,98,111,116,116,111,109,34,62,111,98,115,101,114,118,101,100,58,32,38= ,113, -117,111,116,59,101,120,116,101,110,100,101,100,112,114,101,118,105,111,11= 7,115, -83,111,102,116,119,97,114,101,99,117,115,116,111,109,101,114,100,101,99,1= 05,115, -105,111,110,115,116,114,101,110,103,116,104,100,101,116,97,105,108,101,10= 0,115, -108,105,103,104,116,108,121,112,108,97,110,110,105,110,103,116,101,120,11= 6,97, -114,101,97,99,117,114,114,101,110,99,121,101,118,101,114,121,111,110,101,= 115,116 -,114,97,105,103,104,116,116,114,97,110,115,102,101,114,112,111,115,105,11= 6,105, -118,101,112,114,111,100,117,99,101,100,104,101,114,105,116,97,103,101,115= ,104, -105,112,112,105,110,103,97,98,115,111,108,117,116,101,114,101,99,101,105,= 118,101 -,100,114,101,108,101,118,97,110,116,98,117,116,116,111,110,34,32,118,105,= 111,108 -,101,110,99,101,97,110,121,119,104,101,114,101,98,101,110,101,102,105,116= ,115, -108,97,117,110,99,104,101,100,114,101,99,101,110,116,108,121,97,108,108,1= 05,97, -110,99,101,102,111,108,108,111,119,101,100,109,117,108,116,105,112,108,10= 1,98, -117,108,108,101,116,105,110,105,110,99,108,117,100,101,100,111,99,99,117,= 114,114 -,101,100,105,110,116,101,114,110,97,108,36,40,116,104,105,115,41,46,114,1= 01,112, -117,98,108,105,99,62,60,116,114,62,60,116,100,99,111,110,103,114,101,115,= 115,114 -,101,99,111,114,100,101,100,117,108,116,105,109,97,116,101,115,111,108,11= 7,116, -105,111,110,60,117,108,32,105,100,61,34,100,105,115,99,111,118,101,114,72= ,111, -109,101,60,47,97,62,119,101,98,115,105,116,101,115,110,101,116,119,111,11= 4,107, -115,97,108,116,104,111,117,103,104,101,110,116,105,114,101,108,121,109,10= 1,109, -111,114,105,97,108,109,101,115,115,97,103,101,115,99,111,110,116,105,110,= 117,101 -,97,99,116,105,118,101,34,62,115,111,109,101,119,104,97,116,118,105,99,11= 6,111, -114,105,97,87,101,115,116,101,114,110,32,32,116,105,116,108,101,61,34,76,= 111,99, -97,116,105,111,110,99,111,110,116,114,97,99,116,118,105,115,105,116,111,1= 14,115, -68,111,119,110,108,111,97,100,119,105,116,104,111,117,116,32,114,105,103,= 104,116 -,34,62,10,109,101,97,115,117,114,101,115,119,105,100,116,104,32,61,32,118= ,97,114 -,105,97,98,108,101,105,110,118,111,108,118,101,100,118,105,114,103,105,11= 0,105, -97,110,111,114,109,97,108,108,121,104,97,112,112,101,110,101,100,97,99,99= ,111, -117,110,116,115,115,116,97,110,100,105,110,103,110,97,116,105,111,110,97,= 108,82, -101,103,105,115,116,101,114,112,114,101,112,97,114,101,100,99,111,110,116= ,114, -111,108,115,97,99,99,117,114,97,116,101,98,105,114,116,104,100,97,121,115= ,116, -114,97,116,101,103,121,111,102,102,105,99,105,97,108,103,114,97,112,104,1= 05,99, -115,99,114,105,109,105,110,97,108,112,111,115,115,105,98,108,121,99,111,1= 10,115, -117,109,101,114,80,101,114,115,111,110,97,108,115,112,101,97,107,105,110,= 103,118 -,97,108,105,100,97,116,101,97,99,104,105,101,118,101,100,46,106,112,103,3= 4,32,47 -,62,109,97,99,104,105,110,101,115,60,47,104,50,62,10,32,32,107,101,121,11= 9,111, -114,100,115,102,114,105,101,110,100,108,121,98,114,111,116,104,101,114,11= 5,99, -111,109,98,105,110,101,100,111,114,105,103,105,110,97,108,99,111,109,112,= 111,115 -,101,100,101,120,112,101,99,116,101,100,97,100,101,113,117,97,116,101,112= ,97,107 -,105,115,116,97,110,102,111,108,108,111,119,34,32,118,97,108,117,97,98,10= 8,101, -60,47,108,97,98,101,108,62,114,101,108,97,116,105,118,101,98,114,105,110,= 103,105 -,110,103,105,110,99,114,101,97,115,101,103,111,118,101,114,110,111,114,11= 2,108, -117,103,105,110,115,47,76,105,115,116,32,111,102,32,72,101,97,100,101,114= ,34,62, -34,32,110,97,109,101,61,34,32,40,38,113,117,111,116,59,103,114,97,100,117= ,97,116 -,101,60,47,104,101,97,100,62,10,99,111,109,109,101,114,99,101,109,97,108,= 97,121, -115,105,97,100,105,114,101,99,116,111,114,109,97,105,110,116,97,105,110,5= 9,104, -101,105,103,104,116,58,115,99,104,101,100,117,108,101,99,104,97,110,103,1= 05,110, -103,98,97,99,107,32,116,111,32,99,97,116,104,111,108,105,99,112,97,116,11= 6,101, -114,110,115,99,111,108,111,114,58,32,35,103,114,101,97,116,101,115,116,11= 5,117, -112,112,108,105,101,115,114,101,108,105,97,98,108,101,60,47,117,108,62,10= ,9,9,60 -,115,101,108,101,99,116,32,99,105,116,105,122,101,110,115,99,108,111,116,= 104,105 -,110,103,119,97,116,99,104,105,110,103,60,108,105,32,105,100,61,34,115,11= 2,101, -99,105,102,105,99,99,97,114,114,121,105,110,103,115,101,110,116,101,110,9= 9,101, -60,99,101,110,116,101,114,62,99,111,110,116,114,97,115,116,116,104,105,11= 0,107, -105,110,103,99,97,116,99,104,40,101,41,115,111,117,116,104,101,114,110,77= ,105,99 -,104,97,101,108,32,109,101,114,99,104,97,110,116,99,97,114,111,117,115,10= 1,108, -112,97,100,100,105,110,103,58,105,110,116,101,114,105,111,114,46,115,112,= 108,105 -,116,40,34,108,105,122,97,116,105,111,110,79,99,116,111,98,101,114,32,41,= 123,114 -,101,116,117,114,110,105,109,112,114,111,118,101,100,45,45,38,103,116,59,= 10,10, -99,111,118,101,114,97,103,101,99,104,97,105,114,109,97,110,46,112,110,103= ,34,32, -47,62,115,117,98,106,101,99,116,115,82,105,99,104,97,114,100,32,119,104,9= 7,116, -101,118,101,114,112,114,111,98,97,98,108,121,114,101,99,111,118,101,114,1= 21,98, -97,115,101,98,97,108,108,106,117,100,103,109,101,110,116,99,111,110,110,1= 01,99, -116,46,46,99,115,115,34,32,47,62,32,119,101,98,115,105,116,101,114,101,11= 2,111, -114,116,101,100,100,101,102,97,117,108,116,34,47,62,60,47,97,62,13,10,101= ,108, -101,99,116,114,105,99,115,99,111,116,108,97,110,100,99,114,101,97,116,105= ,111, -110,113,117,97,110,116,105,116,121,46,32,73,83,66,78,32,48,100,105,100,32= ,110, -111,116,32,105,110,115,116,97,110,99,101,45,115,101,97,114,99,104,45,34,3= 2,108, -97,110,103,61,34,115,112,101,97,107,101,114,115,67,111,109,112,117,116,10= 1,114, -99,111,110,116,97,105,110,115,97,114,99,104,105,118,101,115,109,105,110,1= 05,115, -116,101,114,114,101,97,99,116,105,111,110,100,105,115,99,111,117,110,116,= 73,116, -97,108,105,97,110,111,99,114,105,116,101,114,105,97,115,116,114,111,110,1= 03,108, -121,58,32,39,104,116,116,112,58,39,115,99,114,105,112,116,39,99,111,118,1= 01,114, -105,110,103,111,102,102,101,114,105,110,103,97,112,112,101,97,114,101,100= ,66,114 -,105,116,105,115,104,32,105,100,101,110,116,105,102,121,70,97,99,101,98,1= 11,111, -107,110,117,109,101,114,111,117,115,118,101,104,105,99,108,101,115,99,111= ,110,99 -,101,114,110,115,65,109,101,114,105,99,97,110,104,97,110,100,108,105,110,= 103,100 -,105,118,32,105,100,61,34,87,105,108,108,105,97,109,32,112,114,111,118,10= 5,100, -101,114,95,99,111,110,116,101,110,116,97,99,99,117,114,97,99,121,115,101,= 99,116, -105,111,110,32,97,110,100,101,114,115,111,110,102,108,101,120,105,98,108,= 101,67, -97,116,101,103,111,114,121,108,97,119,114,101,110,99,101,60,115,99,114,10= 5,112, -116,62,108,97,121,111,117,116,61,34,97,112,112,114,111,118,101,100,32,109= ,97,120 -,105,109,117,109,104,101,97,100,101,114,34,62,60,47,116,97,98,108,101,62,= 83,101, -114,118,105,99,101,115,104,97,109,105,108,116,111,110,99,117,114,114,101,= 110,116 -,32,99,97,110,97,100,105,97,110,99,104,97,110,110,101,108,115,47,116,104,= 101,109 -,101,115,47,47,97,114,116,105,99,108,101,111,112,116,105,111,110,97,108,1= 12,111, -114,116,117,103,97,108,118,97,108,117,101,61,34,34,105,110,116,101,114,11= 8,97, -108,119,105,114,101,108,101,115,115,101,110,116,105,116,108,101,100,97,10= 3,101, -110,99,105,101,115,83,101,97,114,99,104,34,32,109,101,97,115,117,114,101,= 100,116 -,104,111,117,115,97,110,100,115,112,101,110,100,105,110,103,38,104,101,10= 8,108, -105,112,59,110,101,119,32,68,97,116,101,34,32,115,105,122,101,61,34,112,9= 7,103, -101,78,97,109,101,109,105,100,100,108,101,34,32,34,32,47,62,60,47,97,62,1= 04,105, -100,100,101,110,34,62,115,101,113,117,101,110,99,101,112,101,114,115,111,= 110,97, -108,111,118,101,114,102,108,111,119,111,112,105,110,105,111,110,115,105,1= 08,108, -105,110,111,105,115,108,105,110,107,115,34,62,10,9,60,116,105,116,108,101= ,62,118 -,101,114,115,105,111,110,115,115,97,116,117,114,100,97,121,116,101,114,10= 9,105, -110,97,108,105,116,101,109,112,114,111,112,101,110,103,105,110,101,101,11= 4,115, -101,99,116,105,111,110,115,100,101,115,105,103,110,101,114,112,114,111,11= 2,111, -115,97,108,61,34,102,97,108,115,101,34,69,115,112,97,195,177,111,108,114,= 101,108 -,101,97,115,101,115,115,117,98,109,105,116,34,32,101,114,38,113,117,111,1= 16,59, -97,100,100,105,116,105,111,110,115,121,109,112,116,111,109,115,111,114,10= 5,101, -110,116,101,100,114,101,115,111,117,114,99,101,114,105,103,104,116,34,62,= 60,112, -108,101,97,115,117,114,101,115,116,97,116,105,111,110,115,104,105,115,116= ,111, -114,121,46,108,101,97,118,105,110,103,32,32,98,111,114,100,101,114,61,99,= 111,110 -,116,101,110,116,115,99,101,110,116,101,114,34,62,46,10,10,83,111,109,101= ,32,100 -,105,114,101,99,116,101,100,115,117,105,116,97,98,108,101,98,117,108,103,= 97,114, -105,97,46,115,104,111,119,40,41,59,100,101,115,105,103,110,101,100,71,101= ,110, -101,114,97,108,32,99,111,110,99,101,112,116,115,69,120,97,109,112,108,101= ,115, -119,105,108,108,105,97,109,115,79,114,105,103,105,110,97,108,34,62,60,115= ,112,97 -,110,62,115,101,97,114,99,104,34,62,111,112,101,114,97,116,111,114,114,10= 1,113, -117,101,115,116,115,97,32,38,113,117,111,116,59,97,108,108,111,119,105,11= 0,103, -68,111,99,117,109,101,110,116,114,101,118,105,115,105,111,110,46,32,10,10= ,84,104 -,101,32,121,111,117,114,115,101,108,102,67,111,110,116,97,99,116,32,109,1= 05,99, -104,105,103,97,110,69,110,103,108,105,115,104,32,99,111,108,117,109,98,10= 5,97, -112,114,105,111,114,105,116,121,112,114,105,110,116,105,110,103,100,114,1= 05,110, -107,105,110,103,102,97,99,105,108,105,116,121,114,101,116,117,114,110,101= ,100,67 -,111,110,116,101,110,116,32,111,102,102,105,99,101,114,115,82,117,115,115= ,105,97 -,110,32,103,101,110,101,114,97,116,101,45,56,56,53,57,45,49,34,105,110,10= 0,105, -99,97,116,101,102,97,109,105,108,105,97,114,32,113,117,97,108,105,116,121= ,109,97 -,114,103,105,110,58,48,32,99,111,110,116,101,110,116,118,105,101,119,112,= 111,114 -,116,99,111,110,116,97,99,116,115,45,116,105,116,108,101,34,62,112,111,11= 4,116, -97,98,108,101,46,108,101,110,103,116,104,32,101,108,105,103,105,98,108,10= 1,105, -110,118,111,108,118,101,115,97,116,108,97,110,116,105,99,111,110,108,111,= 97,100, -61,34,100,101,102,97,117,108,116,46,115,117,112,112,108,105,101,100,112,9= 7,121, -109,101,110,116,115,103,108,111,115,115,97,114,121,10,10,65,102,116,101,1= 14,32, -103,117,105,100,97,110,99,101,60,47,116,100,62,60,116,100,101,110,99,111,= 100,105 -,110,103,109,105,100,100,108,101,34,62,99,97,109,101,32,116,111,32,100,10= 5,115, -112,108,97,121,115,115,99,111,116,116,105,115,104,106,111,110,97,116,104,= 97,110, -109,97,106,111,114,105,116,121,119,105,100,103,101,116,115,46,99,108,105,= 110,105 -,99,97,108,116,104,97,105,108,97,110,100,116,101,97,99,104,101,114,115,60= ,104, -101,97,100,62,10,9,97,102,102,101,99,116,101,100,115,117,112,112,111,114,= 116,115 -,112,111,105,110,116,101,114,59,116,111,83,116,114,105,110,103,60,47,115,= 109,97, -108,108,62,111,107,108,97,104,111,109,97,119,105,108,108,32,98,101,32,105= ,110, -118,101,115,116,111,114,48,34,32,97,108,116,61,34,104,111,108,105,100,97,= 121,115 -,82,101,115,111,117,114,99,101,108,105,99,101,110,115,101,100,32,40,119,1= 04,105, -99,104,32,46,32,65,102,116,101,114,32,99,111,110,115,105,100,101,114,118,= 105,115 -,105,116,105,110,103,101,120,112,108,111,114,101,114,112,114,105,109,97,1= 14,121, -32,115,101,97,114,99,104,34,32,97,110,100,114,111,105,100,34,113,117,105,= 99,107, -108,121,32,109,101,101,116,105,110,103,115,101,115,116,105,109,97,116,101= ,59,114 -,101,116,117,114,110,32,59,99,111,108,111,114,58,35,32,104,101,105,103,10= 4,116, -61,97,112,112,114,111,118,97,108,44,32,38,113,117,111,116,59,32,99,104,10= 1,99, -107,101,100,46,109,105,110,46,106,115,34,109,97,103,110,101,116,105,99,62= ,60,47, -97,62,60,47,104,102,111,114,101,99,97,115,116,46,32,87,104,105,108,101,32= ,116, -104,117,114,115,100,97,121,100,118,101,114,116,105,115,101,38,101,97,99,1= 17,116, -101,59,104,97,115,67,108,97,115,115,101,118,97,108,117,97,116,101,111,114= ,100, -101,114,105,110,103,101,120,105,115,116,105,110,103,112,97,116,105,101,11= 0,116, -115,32,79,110,108,105,110,101,32,99,111,108,111,114,97,100,111,79,112,116= ,105, -111,110,115,34,99,97,109,112,98,101,108,108,60,33,45,45,32,101,110,100,60= ,47,115 -,112,97,110,62,60,60,98,114,32,47,62,13,10,95,112,111,112,117,112,115,124= ,115,99 -,105,101,110,99,101,115,44,38,113,117,111,116,59,32,113,117,97,108,105,11= 6,121, -32,87,105,110,100,111,119,115,32,97,115,115,105,103,110,101,100,104,101,1= 05,103, -104,116,58,32,60,98,32,99,108,97,115,115,108,101,38,113,117,111,116,59,32= ,118,97 -,108,117,101,61,34,32,67,111,109,112,97,110,121,101,120,97,109,112,108,10= 1,115, -60,105,102,114,97,109,101,32,98,101,108,105,101,118,101,115,112,114,101,1= 15,101, -110,116,115,109,97,114,115,104,97,108,108,112,97,114,116,32,111,102,32,11= 2,114, -111,112,101,114,108,121,41,46,10,10,84,104,101,32,116,97,120,111,110,111,= 109,121 -,109,117,99,104,32,111,102,32,60,47,115,112,97,110,62,10,34,32,100,97,116= ,97,45, -115,114,116,117,103,117,195,170,115,115,99,114,111,108,108,84,111,32,112,= 114,111 -,106,101,99,116,60,104,101,97,100,62,13,10,97,116,116,111,114,110,101,121= ,101, -109,112,104,97,115,105,115,115,112,111,110,115,111,114,115,102,97,110,99,= 121,98, -111,120,119,111,114,108,100,39,115,32,119,105,108,100,108,105,102,101,99,= 104,101 -,99,107,101,100,61,115,101,115,115,105,111,110,115,112,114,111,103,114,97= ,109, -109,112,120,59,102,111,110,116,45,32,80,114,111,106,101,99,116,106,111,11= 7,114, -110,97,108,115,98,101,108,105,101,118,101,100,118,97,99,97,116,105,111,11= 0,116, -104,111,109,112,115,111,110,108,105,103,104,116,105,110,103,97,110,100,32= ,116, -104,101,32,115,112,101,99,105,97,108,32,98,111,114,100,101,114,61,48,99,1= 04,101, -99,107,105,110,103,60,47,116,98,111,100,121,62,60,98,117,116,116,111,110,= 32,67, -111,109,112,108,101,116,101,99,108,101,97,114,102,105,120,10,60,104,101,9= 7,100, -62,10,97,114,116,105,99,108,101,32,60,115,101,99,116,105,111,110,102,105,= 110,100 -,105,110,103,115,114,111,108,101,32,105,110,32,112,111,112,117,108,97,114= ,32,32, -79,99,116,111,98,101,114,119,101,98,115,105,116,101,32,101,120,112,111,11= 5,117, -114,101,117,115,101,100,32,116,111,32,32,99,104,97,110,103,101,115,111,11= 2,101, -114,97,116,101,100,99,108,105,99,107,105,110,103,101,110,116,101,114,105,= 110,103 -,99,111,109,109,97,110,100,115,105,110,102,111,114,109,101,100,32,110,117= ,109,98 -,101,114,115,32,32,60,47,100,105,118,62,99,114,101,97,116,105,110,103,111= ,110,83 -,117,98,109,105,116,109,97,114,121,108,97,110,100,99,111,108,108,101,103,= 101,115 -,97,110,97,108,121,116,105,99,108,105,115,116,105,110,103,115,99,111,110,= 116,97, -99,116,46,108,111,103,103,101,100,73,110,97,100,118,105,115,111,114,121,1= 15,105, -98,108,105,110,103,115,99,111,110,116,101,110,116,34,115,38,113,117,111,1= 16,59, -41,115,46,32,84,104,105,115,32,112,97,99,107,97,103,101,115,99,104,101,99= ,107,98 -,111,120,115,117,103,103,101,115,116,115,112,114,101,103,110,97,110,116,1= 16,111, -109,111,114,114,111,119,115,112,97,99,105,110,103,61,105,99,111,110,46,11= 2,110, -103,106,97,112,97,110,101,115,101,99,111,100,101,98,97,115,101,98,117,116= ,116, -111,110,34,62,103,97,109,98,108,105,110,103,115,117,99,104,32,97,115,32,4= 4,32, -119,104,105,108,101,32,60,47,115,112,97,110,62,32,109,105,115,115,111,117= ,114, -105,115,112,111,114,116,105,110,103,116,111,112,58,49,112,120,32,46,60,47= ,115, -112,97,110,62,116,101,110,115,105,111,110,115,119,105,100,116,104,61,34,5= 0,108, -97,122,121,108,111,97,100,110,111,118,101,109,98,101,114,117,115,101,100,= 32,105, -110,32,104,101,105,103,104,116,61,34,99,114,105,112,116,34,62,10,38,110,9= 8,115, -112,59,60,47,60,116,114,62,60,116,100,32,104,101,105,103,104,116,58,50,47= ,112, -114,111,100,117,99,116,99,111,117,110,116,114,121,32,105,110,99,108,117,1= 00,101, -32,102,111,111,116,101,114,34,32,38,108,116,59,33,45,45,32,116,105,116,10= 8,101, -34,62,60,47,106,113,117,101,114,121,46,60,47,102,111,114,109,62,10,40,231= ,174, -128,228,189,147,41,40,231,185,129,233,171,148,41,104,114,118,97,116,115,1= 07,105, -105,116,97,108,105,97,110,111,114,111,109,195,162,110,196,131,116,195,188= ,114, -107,195,167,101,216,167,216,177,216,175,217,136,116,97,109,98,105,195,169= ,110, -110,111,116,105,99,105,97,115,109,101,110,115,97,106,101,115,112,101,114,= 115,111 -,110,97,115,100,101,114,101,99,104,111,115,110,97,99,105,111,110,97,108,1= 15,101, -114,118,105,99,105,111,99,111,110,116,97,99,116,111,117,115,117,97,114,10= 5,111, -115,112,114,111,103,114,97,109,97,103,111,98,105,101,114,110,111,101,109,= 112,114 -,101,115,97,115,97,110,117,110,99,105,111,115,118,97,108,101,110,99,105,9= 7,99, -111,108,111,109,98,105,97,100,101,115,112,117,195,169,115,100,101,112,111= ,114, -116,101,115,112,114,111,121,101,99,116,111,112,114,111,100,117,99,116,111= ,112, -195,186,98,108,105,99,111,110,111,115,111,116,114,111,115,104,105,115,116= ,111, -114,105,97,112,114,101,115,101,110,116,101,109,105,108,108,111,110,101,11= 5,109, -101,100,105,97,110,116,101,112,114,101,103,117,110,116,97,97,110,116,101,= 114,105 -,111,114,114,101,99,117,114,115,111,115,112,114,111,98,108,101,109,97,115= ,97,110 -,116,105,97,103,111,110,117,101,115,116,114,111,115,111,112,105,110,105,1= 95,179, -110,105,109,112,114,105,109,105,114,109,105,101,110,116,114,97,115,97,109= ,195, -169,114,105,99,97,118,101,110,100,101,100,111,114,115,111,99,105,101,100,= 97,100, -114,101,115,112,101,99,116,111,114,101,97,108,105,122,97,114,114,101,103,= 105,115 -,116,114,111,112,97,108,97,98,114,97,115,105,110,116,101,114,195,169,115,= 101,110 -,116,111,110,99,101,115,101,115,112,101,99,105,97,108,109,105,101,109,98,= 114,111 -,115,114,101,97,108,105,100,97,100,99,195,179,114,100,111,98,97,122,97,11= 4,97, -103,111,122,97,112,195,161,103,105,110,97,115,115,111,99,105,97,108,101,1= 15,98, -108,111,113,117,101,97,114,103,101,115,116,105,195,179,110,97,108,113,117= ,105, -108,101,114,115,105,115,116,101,109,97,115,99,105,101,110,99,105,97,115,9= 9,111, -109,112,108,101,116,111,118,101,114,115,105,195,179,110,99,111,109,112,10= 8,101, -116,97,101,115,116,117,100,105,111,115,112,195,186,98,108,105,99,97,111,9= 8,106, -101,116,105,118,111,97,108,105,99,97,110,116,101,98,117,115,99,97,100,111= ,114,99 -,97,110,116,105,100,97,100,101,110,116,114,97,100,97,115,97,99,99,105,111= ,110, -101,115,97,114,99,104,105,118,111,115,115,117,112,101,114,105,111,114,109= ,97,121 -,111,114,195,173,97,97,108,101,109,97,110,105,97,102,117,110,99,105,195,1= 79,110, -195,186,108,116,105,109,111,115,104,97,99,105,101,110,100,111,97,113,117,= 101,108 -,108,111,115,101,100,105,99,105,195,179,110,102,101,114,110,97,110,100,11= 1,97, -109,98,105,101,110,116,101,102,97,99,101,98,111,111,107,110,117,101,115,1= 16,114, -97,115,99,108,105,101,110,116,101,115,112,114,111,99,101,115,111,115,98,9= 7,115, -116,97,110,116,101,112,114,101,115,101,110,116,97,114,101,112,111,114,116= ,97,114 -,99,111,110,103,114,101,115,111,112,117,98,108,105,99,97,114,99,111,109,1= 01,114, -99,105,111,99,111,110,116,114,97,116,111,106,195,179,118,101,110,101,115,= 100,105 -,115,116,114,105,116,111,116,195,169,99,110,105,99,97,99,111,110,106,117,= 110,116 -,111,101,110,101,114,103,195,173,97,116,114,97,98,97,106,97,114,97,115,11= 6,117, -114,105,97,115,114,101,99,105,101,110,116,101,117,116,105,108,105,122,97,= 114,98, -111,108,101,116,195,173,110,115,97,108,118,97,100,111,114,99,111,114,114,= 101,99, -116,97,116,114,97,98,97,106,111,115,112,114,105,109,101,114,111,115,110,1= 01,103, -111,99,105,111,115,108,105,98,101,114,116,97,100,100,101,116,97,108,108,1= 01,115, -112,97,110,116,97,108,108,97,112,114,195,179,120,105,109,111,97,108,109,1= 01,114, -195,173,97,97,110,105,109,97,108,101,115,113,117,105,195,169,110,101,115,= 99,111, -114,97,122,195,179,110,115,101,99,99,105,195,179,110,98,117,115,99,97,110= ,100, -111,111,112,99,105,111,110,101,115,101,120,116,101,114,105,111,114,99,111= ,110,99 -,101,112,116,111,116,111,100,97,118,195,173,97,103,97,108,101,114,195,173= ,97,101 -,115,99,114,105,98,105,114,109,101,100,105,99,105,110,97,108,105,99,101,1= 10,99, -105,97,99,111,110,115,117,108,116,97,97,115,112,101,99,116,111,115,99,114= ,195, -173,116,105,99,97,100,195,179,108,97,114,101,115,106,117,115,116,105,99,1= 05,97, -100,101,98,101,114,195,161,110,112,101,114,195,173,111,100,111,110,101,99= ,101, -115,105,116,97,109,97,110,116,101,110,101,114,112,101,113,117,101,195,177= ,111, -114,101,99,105,98,105,100,97,116,114,105,98,117,110,97,108,116,101,110,10= 1,114, -105,102,101,99,97,110,99,105,195,179,110,99,97,110,97,114,105,97,115,100,= 101,115 -,99,97,114,103,97,100,105,118,101,114,115,111,115,109,97,108,108,111,114,= 99,97, -114,101,113,117,105,101,114,101,116,195,169,99,110,105,99,111,100,101,98,= 101,114 -,195,173,97,118,105,118,105,101,110,100,97,102,105,110,97,110,122,97,115,= 97,100, -101,108,97,110,116,101,102,117,110,99,105,111,110,97,99,111,110,115,101,1= 06,111, -115,100,105,102,195,173,99,105,108,99,105,117,100,97,100,101,115,97,110,1= 16,105, -103,117,97,115,97,118,97,110,122,97,100,97,116,195,169,114,109,105,110,11= 1,117, -110,105,100,97,100,101,115,115,195,161,110,99,104,101,122,99,97,109,112,9= 7,195, -177,97,115,111,102,116,111,110,105,99,114,101,118,105,115,116,97,115,99,1= 11,110, -116,105,101,110,101,115,101,99,116,111,114,101,115,109,111,109,101,110,11= 6,111, -115,102,97,99,117,108,116,97,100,99,114,195,169,100,105,116,111,100,105,1= 18,101, -114,115,97,115,115,117,112,117,101,115,116,111,102,97,99,116,111,114,101,= 115,115 -,101,103,117,110,100,111,115,112,101,113,117,101,195,177,97,208,179,208,1= 90,208, -180,208,176,208,181,209,129,208,187,208,184,208,181,209,129,209,130,209,1= 40,208, -177,209,139,208,187,208,190,208,177,209,139,209,130,209,140,209,141,209,1= 30,208, -190,208,188,208,149,209,129,208,187,208,184,209,130,208,190,208,179,208,1= 90,208, -188,208,181,208,189,209,143,208,178,209,129,208,181,209,133,209,141,209,1= 30,208, -190,208,185,208,180,208,176,208,182,208,181,208,177,209,139,208,187,208,1= 84,208, -179,208,190,208,180,209,131,208,180,208,181,208,189,209,140,209,141,209,1= 30,208, -190,209,130,208,177,209,139,208,187,208,176,209,129,208,181,208,177,209,1= 43,208, -190,208,180,208,184,208,189,209,129,208,181,208,177,208,181,208,189,208,1= 76,208, -180,208,190,209,129,208,176,208,185,209,130,209,132,208,190,209,130,208,1= 90,208, -189,208,181,208,179,208,190,209,129,208,178,208,190,208,184,209,129,208,1= 78,208, -190,208,185,208,184,208,179,209,128,209,139,209,130,208,190,208,182,208,1= 81,208, -178,209,129,208,181,208,188,209,129,208,178,208,190,209,142,208,187,208,1= 84,209, -136,209,140,209,141,209,130,208,184,209,133,208,191,208,190,208,186,208,1= 76,208, -180,208,189,208,181,208,185,208,180,208,190,208,188,208,176,208,188,208,1= 84,209, -128,208,176,208,187,208,184,208,177,208,190,209,130,208,181,208,188,209,1= 31,209, -133,208,190,209,130,209,143,208,180,208,178,209,131,209,133,209,129,208,1= 81,209, -130,208,184,208,187,209,142,208,180,208,184,208,180,208,181,208,187,208,1= 90,208, -188,208,184,209,128,208,181,209,130,208,181,208,177,209,143,209,129,208,1= 78,208, -190,208,181,208,178,208,184,208,180,208,181,209,135,208,181,208,179,208,1= 90,209, -141,209,130,208,184,208,188,209,129,209,135,208,181,209,130,209,130,208,1= 81,208, -188,209,139,209,134,208,181,208,189,209,139,209,129,209,130,208,176,208,1= 87,208, -178,208,181,208,180,209,140,209,130,208,181,208,188,208,181,208,178,208,1= 90,208, -180,209,139,209,130,208,181,208,177,208,181,208,178,209,139,209,136,208,1= 81,208, -189,208,176,208,188,208,184,209,130,208,184,208,191,208,176,209,130,208,1= 90,208, -188,209,131,208,191,209,128,208,176,208,178,208,187,208,184,209,134,208,1= 76,208, -190,208,180,208,189,208,176,208,179,208,190,208,180,209,139,208,183,208,1= 89,208, -176,209,142,208,188,208,190,208,179,209,131,208,180,209,128,209,131,208,1= 79,208, -178,209,129,208,181,208,185,208,184,208,180,208,181,209,130,208,186,208,1= 84,208, -189,208,190,208,190,208,180,208,189,208,190,208,180,208,181,208,187,208,1= 76,208, -180,208,181,208,187,208,181,209,129,209,128,208,190,208,186,208,184,209,1= 42,208, -189,209,143,208,178,208,181,209,129,209,140,208,149,209,129,209,130,209,1= 40,209, -128,208,176,208,183,208,176,208,189,208,176,209,136,208,184,216,167,217,1= 32,217, -132,217,135,216,167,217,132,216,170,217,138,216,172,217,133,217,138,216,1= 85,216, -174,216,167,216,181,216,169,216,167,217,132,216,176,217,138,216,185,217,1= 32,217, -138,217,135,216,172,216,175,217,138,216,175,216,167,217,132,216,162,217,1= 34,216, -167,217,132,216,177,216,175,216,170,216,173,217,131,217,133,216,181,217,1= 29,216, -173,216,169,217,131,216,167,217,134,216,170,216,167,217,132,217,132,217,1= 38,217, -138,217,131,217,136,217,134,216,180,216,168,217,131,216,169,217,129,217,1= 38,217, -135,216,167,216,168,217,134,216,167,216,170,216,173,217,136,216,167,216,1= 61,216, -163,217,131,216,171,216,177,216,174,217,132,216,167,217,132,216,167,217,1= 32,216, -173,216,168,216,175,217,132,217,138,217,132,216,175,216,177,217,136,216,1= 79,216, -167,216,182,216,186,216,183,216,170,217,131,217,136,217,134,217,135,217,1= 34,216, -167,217,131,216,179,216,167,216,173,216,169,217,134,216,167,216,175,217,1= 38,216, -167,217,132,216,183,216,168,216,185,217,132,217,138,217,131,216,180,217,1= 31,216, -177,216,167,217,138,217,133,217,131,217,134,217,133,217,134,217,135,216,1= 67,216, -180,216,177,217,131,216,169,216,177,216,166,217,138,216,179,217,134,216,1= 80,217, -138,216,183,217,133,216,167,216,176,216,167,216,167,217,132,217,129,217,1= 34,216, -180,216,168,216,167,216,168,216,170,216,185,216,168,216,177,216,177,216,1= 73,217, -133,216,169,217,131,216,167,217,129,216,169,217,138,217,130,217,136,217,1= 32,217, -133,216,177,217,131,216,178,217,131,217,132,217,133,216,169,216,163,216,1= 73,217, -133,216,175,217,130,217,132,216,168,217,138,217,138,216,185,217,134,217,1= 38,216, -181,217,136,216,177,216,169,216,183,216,177,217,138,217,130,216,180,216,1= 67,216, -177,217,131,216,172,217,136,216,167,217,132,216,163,216,174,216,177,217,1= 37,217, -133,216,185,217,134,216,167,216,167,216,168,216,173,216,171,216,185,216,1= 77,217, -136,216,182,216,168,216,180,217,131,217,132,217,133,216,179,216,172,217,1= 32,216, -168,217,134,216,167,217,134,216,174,216,167,217,132,216,175,217,131,216,1= 70,216, -167,216,168,217,131,217,132,217,138,216,169,216,168,216,175,217,136,217,1= 34,216, -163,217,138,216,182,216,167,217,138,217,136,216,172,216,175,217,129,216,1= 77,217, -138,217,130,217,131,216,170,216,168,216,170,216,163,217,129,216,182,217,1= 32,217, -133,216,183,216,168,216,174,216,167,217,131,216,171,216,177,216,168,216,1= 67,216, -177,217,131,216,167,217,129,216,182,217,132,216,167,216,173,217,132,217,1= 37,217, -134,217,129,216,179,217,135,216,163,217,138,216,167,217,133,216,177,216,1= 75,217, -136,216,175,216,163,217,134,217,135,216,167,216,175,217,138,217,134,216,1= 67,216, -167,217,132,216,167,217,134,217,133,216,185,216,177,216,182,216,170,216,1= 85,217, -132,217,133,216,175,216,167,216,174,217,132,217,133,217,133,217,131,217,1= 34,0,0, -0,0,0,0,0,0,1,0,1,0,1,0,1,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,0,1,2,3,4,5,6= ,7,7,6, -5,4,3,2,1,0,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,16,17,18,19,20,21= ,22,23, -23,22,21,20,19,18,17,16,24,25,26,27,28,29,30,31,31,30,29,28,27,26,25,24,2= 55,255, -255,255,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1= ,0,0,0, -3,0,0,0,255,255,0,1,0,0,0,1,0,0,255,255,0,1,0,0,0,8,0,8,0,8,0,8,0,0,0,1,0= ,2,0,3, -0,4,0,5,0,6,0,7,114,101,115,111,117,114,99,101,115,99,111,117,110,116,114= ,105, -101,115,113,117,101,115,116,105,111,110,115,101,113,117,105,112,109,101,1= 10,116, -99,111,109,109,117,110,105,116,121,97,118,97,105,108,97,98,108,101,104,10= 5,103, -104,108,105,103,104,116,68,84,68,47,120,104,116,109,108,109,97,114,107,10= 1,116, -105,110,103,107,110,111,119,108,101,100,103,101,115,111,109,101,116,104,1= 05,110, -103,99,111,110,116,97,105,110,101,114,100,105,114,101,99,116,105,111,110,= 115,117 -,98,115,99,114,105,98,101,97,100,118,101,114,116,105,115,101,99,104,97,11= 4,97,99 -,116,101,114,34,32,118,97,108,117,101,61,34,60,47,115,101,108,101,99,116,= 62,65, -117,115,116,114,97,108,105,97,34,32,99,108,97,115,115,61,34,115,105,116,1= 17,97, -116,105,111,110,97,117,116,104,111,114,105,116,121,102,111,108,108,111,11= 9,105, -110,103,112,114,105,109,97,114,105,108,121,111,112,101,114,97,116,105,111= ,110,99 -,104,97,108,108,101,110,103,101,100,101,118,101,108,111,112,101,100,97,11= 0,111, -110,121,109,111,117,115,102,117,110,99,116,105,111,110,32,102,117,110,99,= 116,105 -,111,110,115,99,111,109,112,97,110,105,101,115,115,116,114,117,99,116,117= ,114, -101,97,103,114,101,101,109,101,110,116,34,32,116,105,116,108,101,61,34,11= 2,111, -116,101,110,116,105,97,108,101,100,117,99,97,116,105,111,110,97,114,103,1= 17,109, -101,110,116,115,115,101,99,111,110,100,97,114,121,99,111,112,121,114,105,= 103,104 -,116,108,97,110,103,117,97,103,101,115,101,120,99,108,117,115,105,118,101= ,99,111 -,110,100,105,116,105,111,110,60,47,102,111,114,109,62,13,10,115,116,97,11= 6,101, -109,101,110,116,97,116,116,101,110,116,105,111,110,66,105,111,103,114,97,= 112,104 -,121,125,32,101,108,115,101,32,123,10,115,111,108,117,116,105,111,110,115= ,119, -104,101,110,32,116,104,101,32,65,110,97,108,121,116,105,99,115,116,101,10= 9,112, -108,97,116,101,115,100,97,110,103,101,114,111,117,115,115,97,116,101,108,= 108,105 -,116,101,100,111,99,117,109,101,110,116,115,112,117,98,108,105,115,104,10= 1,114, -105,109,112,111,114,116,97,110,116,112,114,111,116,111,116,121,112,101,10= 5,110, -102,108,117,101,110,99,101,38,114,97,113,117,111,59,60,47,101,102,102,101= ,99,116 -,105,118,101,103,101,110,101,114,97,108,108,121,116,114,97,110,115,102,11= 1,114, -109,98,101,97,117,116,105,102,117,108,116,114,97,110,115,112,111,114,116,= 111,114 -,103,97,110,105,122,101,100,112,117,98,108,105,115,104,101,100,112,114,11= 1,109, -105,110,101,110,116,117,110,116,105,108,32,116,104,101,116,104,117,109,98= ,110,97 -,105,108,78,97,116,105,111,110,97,108,32,46,102,111,99,117,115,40,41,59,1= 11,118, -101,114,32,116,104,101,32,109,105,103,114,97,116,105,111,110,97,110,110,1= 11,117, -110,99,101,100,102,111,111,116,101,114,34,62,10,101,120,99,101,112,116,10= 5,111, -110,108,101,115,115,32,116,104,97,110,101,120,112,101,110,115,105,118,101= ,102, -111,114,109,97,116,105,111,110,102,114,97,109,101,119,111,114,107,116,101= ,114, -114,105,116,111,114,121,110,100,105,99,97,116,105,111,110,99,117,114,114,= 101,110 -,116,108,121,99,108,97,115,115,78,97,109,101,99,114,105,116,105,99,105,11= 5,109, -116,114,97,100,105,116,105,111,110,101,108,115,101,119,104,101,114,101,65= ,108, -101,120,97,110,100,101,114,97,112,112,111,105,110,116,101,100,109,97,116,= 101,114 -,105,97,108,115,98,114,111,97,100,99,97,115,116,109,101,110,116,105,111,1= 10,101, -100,97,102,102,105,108,105,97,116,101,60,47,111,112,116,105,111,110,62,11= 6,114, -101,97,116,109,101,110,116,100,105,102,102,101,114,101,110,116,47,100,101= ,102,97 -,117,108,116,46,80,114,101,115,105,100,101,110,116,111,110,99,108,105,99,= 107,61, -34,98,105,111,103,114,97,112,104,121,111,116,104,101,114,119,105,115,101,= 112,101 -,114,109,97,110,101,110,116,70,114,97,110,195,167,97,105,115,72,111,108,1= 08,121, -119,111,111,100,101,120,112,97,110,115,105,111,110,115,116,97,110,100,97,= 114,100 -,115,60,47,115,116,121,108,101,62,10,114,101,100,117,99,116,105,111,110,6= 8,101, -99,101,109,98,101,114,32,112,114,101,102,101,114,114,101,100,67,97,109,98= ,114, -105,100,103,101,111,112,112,111,110,101,110,116,115,66,117,115,105,110,10= 1,115, -115,32,99,111,110,102,117,115,105,111,110,62,10,60,116,105,116,108,101,62= ,112, -114,101,115,101,110,116,101,100,101,120,112,108,97,105,110,101,100,100,11= 1,101, -115,32,110,111,116,32,119,111,114,108,100,119,105,100,101,105,110,116,101= ,114, -102,97,99,101,112,111,115,105,116,105,111,110,115,110,101,119,115,112,97,= 112,101 -,114,60,47,116,97,98,108,101,62,10,109,111,117,110,116,97,105,110,115,108= ,105, -107,101,32,116,104,101,32,101,115,115,101,110,116,105,97,108,102,105,110,= 97,110, -99,105,97,108,115,101,108,101,99,116,105,111,110,97,99,116,105,111,110,61= ,34,47, -97,98,97,110,100,111,110,101,100,69,100,117,99,97,116,105,111,110,112,97,= 114,115 -,101,73,110,116,40,115,116,97,98,105,108,105,116,121,117,110,97,98,108,10= 1,32, -116,111,60,47,116,105,116,108,101,62,10,114,101,108,97,116,105,111,110,11= 5,78, -111,116,101,32,116,104,97,116,101,102,102,105,99,105,101,110,116,112,101,= 114,102 -,111,114,109,101,100,116,119,111,32,121,101,97,114,115,83,105,110,99,101,= 32,116, -104,101,116,104,101,114,101,102,111,114,101,119,114,97,112,112,101,114,34= ,62,97, -108,116,101,114,110,97,116,101,105,110,99,114,101,97,115,101,100,66,97,11= 6,116, -108,101,32,111,102,112,101,114,99,101,105,118,101,100,116,114,121,105,110= ,103,32 -,116,111,110,101,99,101,115,115,97,114,121,112,111,114,116,114,97,121,101= ,100, -101,108,101,99,116,105,111,110,115,69,108,105,122,97,98,101,116,104,60,47= ,105, -102,114,97,109,101,62,100,105,115,99,111,118,101,114,121,105,110,115,117,= 114,97, -110,99,101,115,46,108,101,110,103,116,104,59,108,101,103,101,110,100,97,1= 14,121, -71,101,111,103,114,97,112,104,121,99,97,110,100,105,100,97,116,101,99,111= ,114, -112,111,114,97,116,101,115,111,109,101,116,105,109,101,115,115,101,114,11= 8,105, -99,101,115,46,105,110,104,101,114,105,116,101,100,60,47,115,116,114,111,1= 10,103, -62,67,111,109,109,117,110,105,116,121,114,101,108,105,103,105,111,117,115= ,108, -111,99,97,116,105,111,110,115,67,111,109,109,105,116,116,101,101,98,117,1= 05,108, -100,105,110,103,115,116,104,101,32,119,111,114,108,100,110,111,32,108,111= ,110, -103,101,114,98,101,103,105,110,110,105,110,103,114,101,102,101,114,101,11= 0,99, -101,99,97,110,110,111,116,32,98,101,102,114,101,113,117,101,110,99,121,11= 6,121, -112,105,99,97,108,108,121,105,110,116,111,32,116,104,101,32,114,101,108,9= 7,116, -105,118,101,59,114,101,99,111,114,100,105,110,103,112,114,101,115,105,100= ,101, -110,116,105,110,105,116,105,97,108,108,121,116,101,99,104,110,105,113,117= ,101, -116,104,101,32,111,116,104,101,114,105,116,32,99,97,110,32,98,101,101,120= ,105, -115,116,101,110,99,101,117,110,100,101,114,108,105,110,101,116,104,105,11= 5,32, -116,105,109,101,116,101,108,101,112,104,111,110,101,105,116,101,109,115,9= 9,111, -112,101,112,114,97,99,116,105,99,101,115,97,100,118,97,110,116,97,103,101= ,41,59, -114,101,116,117,114,110,32,70,111,114,32,111,116,104,101,114,112,114,111,= 118,105 -,100,105,110,103,100,101,109,111,99,114,97,99,121,98,111,116,104,32,116,1= 04,101, -32,101,120,116,101,110,115,105,118,101,115,117,102,102,101,114,105,110,10= 3,115, -117,112,112,111,114,116,101,100,99,111,109,112,117,116,101,114,115,32,102= ,117, -110,99,116,105,111,110,112,114,97,99,116,105,99,97,108,115,97,105,100,32,= 116,104 -,97,116,105,116,32,109,97,121,32,98,101,69,110,103,108,105,115,104,60,47,= 102,114 -,111,109,32,116,104,101,32,115,99,104,101,100,117,108,101,100,100,111,119= ,110, -108,111,97,100,115,60,47,108,97,98,101,108,62,10,115,117,115,112,101,99,1= 16,101, -100,109,97,114,103,105,110,58,32,48,115,112,105,114,105,116,117,97,108,60= ,47,104 -,101,97,100,62,10,10,109,105,99,114,111,115,111,102,116,103,114,97,100,11= 7,97, -108,108,121,100,105,115,99,117,115,115,101,100,104,101,32,98,101,99,97,10= 9,101, -101,120,101,99,117,116,105,118,101,106,113,117,101,114,121,46,106,115,104= ,111, -117,115,101,104,111,108,100,99,111,110,102,105,114,109,101,100,112,117,11= 4,99, -104,97,115,101,100,108,105,116,101,114,97,108,108,121,100,101,115,116,114= ,111, -121,101,100,117,112,32,116,111,32,116,104,101,118,97,114,105,97,116,105,1= 11,110, -114,101,109,97,105,110,105,110,103,105,116,32,105,115,32,110,111,116,99,1= 01,110, -116,117,114,105,101,115,74,97,112,97,110,101,115,101,32,97,109,111,110,10= 3,32, -116,104,101,99,111,109,112,108,101,116,101,100,97,108,103,111,114,105,116= ,104, -109,105,110,116,101,114,101,115,116,115,114,101,98,101,108,108,105,111,11= 0,117, -110,100,101,102,105,110,101,100,101,110,99,111,117,114,97,103,101,114,101= ,115, -105,122,97,98,108,101,105,110,118,111,108,118,105,110,103,115,101,110,115= ,105, -116,105,118,101,117,110,105,118,101,114,115,97,108,112,114,111,118,105,11= 5,105, -111,110,40,97,108,116,104,111,117,103,104,102,101,97,116,117,114,105,110,= 103,99, -111,110,100,117,99,116,101,100,41,44,32,119,104,105,99,104,32,99,111,110,= 116,105 -,110,117,101,100,45,104,101,97,100,101,114,34,62,70,101,98,114,117,97,114= ,121,32 -,110,117,109,101,114,111,117,115,32,111,118,101,114,102,108,111,119,58,99= ,111, -109,112,111,110,101,110,116,102,114,97,103,109,101,110,116,115,101,120,99= ,101, -108,108,101,110,116,99,111,108,115,112,97,110,61,34,116,101,99,104,110,10= 5,99,97 -,108,110,101,97,114,32,116,104,101,32,65,100,118,97,110,99,101,100,32,115= ,111, -117,114,99,101,32,111,102,101,120,112,114,101,115,115,101,100,72,111,110,= 103,32, -75,111,110,103,32,70,97,99,101,98,111,111,107,109,117,108,116,105,112,108= ,101,32 -,109,101,99,104,97,110,105,115,109,101,108,101,118,97,116,105,111,110,111= ,102, -102,101,110,115,105,118,101,60,47,102,111,114,109,62,10,9,115,112,111,110= ,115, -111,114,101,100,100,111,99,117,109,101,110,116,46,111,114,32,38,113,117,1= 11,116, -59,116,104,101,114,101,32,97,114,101,116,104,111,115,101,32,119,104,111,1= 09,111, -118,101,109,101,110,116,115,112,114,111,99,101,115,115,101,115,100,105,10= 2,102, -105,99,117,108,116,115,117,98,109,105,116,116,101,100,114,101,99,111,109,= 109,101 -,110,100,99,111,110,118,105,110,99,101,100,112,114,111,109,111,116,105,11= 0,103, -34,32,119,105,100,116,104,61,34,46,114,101,112,108,97,99,101,40,99,108,97= ,115, -115,105,99,97,108,99,111,97,108,105,116,105,111,110,104,105,115,32,102,10= 5,114, -115,116,100,101,99,105,115,105,111,110,115,97,115,115,105,115,116,97,110,= 116,105 -,110,100,105,99,97,116,101,100,101,118,111,108,117,116,105,111,110,45,119= ,114,97 -,112,112,101,114,34,101,110,111,117,103,104,32,116,111,97,108,111,110,103= ,32,116 -,104,101,100,101,108,105,118,101,114,101,100,45,45,62,13,10,60,33,45,45,6= 5,109, -101,114,105,99,97,110,32,112,114,111,116,101,99,116,101,100,78,111,118,10= 1,109, -98,101,114,32,60,47,115,116,121,108,101,62,60,102,117,114,110,105,116,117= ,114, -101,73,110,116,101,114,110,101,116,32,32,111,110,98,108,117,114,61,34,115= ,117, -115,112,101,110,100,101,100,114,101,99,105,112,105,101,110,116,98,97,115,= 101,100 -,32,111,110,32,77,111,114,101,111,118,101,114,44,97,98,111,108,105,115,10= 4,101, -100,99,111,108,108,101,99,116,101,100,119,101,114,101,32,109,97,100,101,1= 01,109, -111,116,105,111,110,97,108,101,109,101,114,103,101,110,99,121,110,97,114,= 114,97, -116,105,118,101,97,100,118,111,99,97,116,101,115,112,120,59,98,111,114,10= 0,101, -114,99,111,109,109,105,116,116,101,100,100,105,114,61,34,108,116,114,34,1= 01,109, -112,108,111,121,101,101,115,114,101,115,101,97,114,99,104,46,32,115,101,1= 08,101, -99,116,101,100,115,117,99,99,101,115,115,111,114,99,117,115,116,111,109,1= 01,114, -115,100,105,115,112,108,97,121,101,100,83,101,112,116,101,109,98,101,114,= 97,100, -100,67,108,97,115,115,40,70,97,99,101,98,111,111,107,32,115,117,103,103,1= 01,115, -116,101,100,97,110,100,32,108,97,116,101,114,111,112,101,114,97,116,105,1= 10,103, -101,108,97,98,111,114,97,116,101,83,111,109,101,116,105,109,101,115,73,11= 0,115, -116,105,116,117,116,101,99,101,114,116,97,105,110,108,121,105,110,115,116= ,97,108 -,108,101,100,102,111,108,108,111,119,101,114,115,74,101,114,117,115,97,10= 8,101, -109,116,104,101,121,32,104,97,118,101,99,111,109,112,117,116,105,110,103,= 103,101 -,110,101,114,97,116,101,100,112,114,111,118,105,110,99,101,115,103,117,97= ,114,97 -,110,116,101,101,97,114,98,105,116,114,97,114,121,114,101,99,111,103,110,= 105,122 -,101,119,97,110,116,101,100,32,116,111,112,120,59,119,105,100,116,104,58,= 116,104 -,101,111,114,121,32,111,102,98,101,104,97,118,105,111,117,114,87,104,105,= 108,101 -,32,116,104,101,101,115,116,105,109,97,116,101,100,98,101,103,97,110,32,1= 16,111, -32,105,116,32,98,101,99,97,109,101,109,97,103,110,105,116,117,100,101,109= ,117, -115,116,32,104,97,118,101,109,111,114,101,32,116,104,97,110,68,105,114,10= 1,99, -116,111,114,121,101,120,116,101,110,115,105,111,110,115,101,99,114,101,11= 6,97, -114,121,110,97,116,117,114,97,108,108,121,111,99,99,117,114,114,105,110,1= 03,118, -97,114,105,97,98,108,101,115,103,105,118,101,110,32,116,104,101,112,108,9= 7,116, -102,111,114,109,46,60,47,108,97,98,101,108,62,60,102,97,105,108,101,100,3= 2,116, -111,99,111,109,112,111,117,110,100,115,107,105,110,100,115,32,111,102,32,= 115,111 -,99,105,101,116,105,101,115,97,108,111,110,103,115,105,100,101,32,45,45,3= 8,103, -116,59,10,10,115,111,117,116,104,119,101,115,116,116,104,101,32,114,105,1= 03,104, -116,114,97,100,105,97,116,105,111,110,109,97,121,32,104,97,118,101,32,117= ,110, -101,115,99,97,112,101,40,115,112,111,107,101,110,32,105,110,34,32,104,114= ,101, -102,61,34,47,112,114,111,103,114,97,109,109,101,111,110,108,121,32,116,10= 4,101, -32,99,111,109,101,32,102,114,111,109,100,105,114,101,99,116,111,114,121,9= 8,117, -114,105,101,100,32,105,110,97,32,115,105,109,105,108,97,114,116,104,101,1= 21,32, -119,101,114,101,60,47,102,111,110,116,62,60,47,78,111,114,119,101,103,105= ,97,110 -,115,112,101,99,105,102,105,101,100,112,114,111,100,117,99,105,110,103,11= 2,97, -115,115,101,110,103,101,114,40,110,101,119,32,68,97,116,101,116,101,109,1= 12,111, -114,97,114,121,102,105,99,116,105,111,110,97,108,65,102,116,101,114,32,11= 6,104, -101,101,113,117,97,116,105,111,110,115,100,111,119,110,108,111,97,100,46,= 114,101 -,103,117,108,97,114,108,121,100,101,118,101,108,111,112,101,114,97,98,111= ,118, -101,32,116,104,101,108,105,110,107,101,100,32,116,111,112,104,101,110,111= ,109, -101,110,97,112,101,114,105,111,100,32,111,102,116,111,111,108,116,105,112= ,34,62, -115,117,98,115,116,97,110,99,101,97,117,116,111,109,97,116,105,99,97,115,= 112,101 -,99,116,32,111,102,65,109,111,110,103,32,116,104,101,99,111,110,110,101,9= 9,116, -101,100,101,115,116,105,109,97,116,101,115,65,105,114,32,70,111,114,99,10= 1,115, -121,115,116,101,109,32,111,102,111,98,106,101,99,116,105,118,101,105,109,= 109,101 -,100,105,97,116,101,109,97,107,105,110,103,32,105,116,112,97,105,110,116,= 105,110 -,103,115,99,111,110,113,117,101,114,101,100,97,114,101,32,115,116,105,108= ,108, -112,114,111,99,101,100,117,114,101,103,114,111,119,116,104,32,111,102,104= ,101,97 -,100,101,100,32,98,121,69,117,114,111,112,101,97,110,32,100,105,118,105,1= 15,105, -111,110,115,109,111,108,101,99,117,108,101,115,102,114,97,110,99,104,105,= 115,101 -,105,110,116,101,110,116,105,111,110,97,116,116,114,97,99,116,101,100,99,= 104,105 -,108,100,104,111,111,100,97,108,115,111,32,117,115,101,100,100,101,100,10= 5,99,97 -,116,101,100,115,105,110,103,97,112,111,114,101,100,101,103,114,101,101,3= 2,111, -102,102,97,116,104,101,114,32,111,102,99,111,110,102,108,105,99,116,115,6= 0,47,97 -,62,60,47,112,62,10,99,97,109,101,32,102,114,111,109,119,101,114,101,32,1= 17,115, -101,100,110,111,116,101,32,116,104,97,116,114,101,99,101,105,118,105,110,= 103,69, -120,101,99,117,116,105,118,101,101,118,101,110,32,109,111,114,101,97,99,9= 9,101, -115,115,32,116,111,99,111,109,109,97,110,100,101,114,80,111,108,105,116,1= 05,99, -97,108,109,117,115,105,99,105,97,110,115,100,101,108,105,99,105,111,117,1= 15,112, -114,105,115,111,110,101,114,115,97,100,118,101,110,116,32,111,102,85,84,7= 0,45,56 -,34,32,47,62,60,33,91,67,68,65,84,65,91,34,62,67,111,110,116,97,99,116,83= ,111, -117,116,104,101,114,110,32,98,103,99,111,108,111,114,61,34,115,101,114,10= 5,101, -115,32,111,102,46,32,73,116,32,119,97,115,32,105,110,32,69,117,114,111,11= 2,101, -112,101,114,109,105,116,116,101,100,118,97,108,105,100,97,116,101,46,97,1= 12,112, -101,97,114,105,110,103,111,102,102,105,99,105,97,108,115,115,101,114,105,= 111,117 -,115,108,121,45,108,97,110,103,117,97,103,101,105,110,105,116,105,97,116,= 101,100 -,101,120,116,101,110,100,105,110,103,108,111,110,103,45,116,101,114,109,1= 05,110, -102,108,97,116,105,111,110,115,117,99,104,32,116,104,97,116,103,101,116,6= 7,111, -111,107,105,101,109,97,114,107,101,100,32,98,121,60,47,98,117,116,116,111= ,110,62 -,105,109,112,108,101,109,101,110,116,98,117,116,32,105,116,32,105,115,105= ,110,99 -,114,101,97,115,101,115,100,111,119,110,32,116,104,101,32,114,101,113,117= ,105, -114,105,110,103,100,101,112,101,110,100,101,110,116,45,45,62,10,60,33,45,= 45,32, -105,110,116,101,114,118,105,101,119,87,105,116,104,32,116,104,101,32,99,1= 11,112, -105,101,115,32,111,102,99,111,110,115,101,110,115,117,115,119,97,115,32,9= 8,117, -105,108,116,86,101,110,101,122,117,101,108,97,40,102,111,114,109,101,114,= 108,121 -,116,104,101,32,115,116,97,116,101,112,101,114,115,111,110,110,101,108,11= 5,116, -114,97,116,101,103,105,99,102,97,118,111,117,114,32,111,102,105,110,118,1= 01,110, -116,105,111,110,87,105,107,105,112,101,100,105,97,99,111,110,116,105,110,= 101,110 -,116,118,105,114,116,117,97,108,108,121,119,104,105,99,104,32,119,97,115,= 112,114 -,105,110,99,105,112,108,101,67,111,109,112,108,101,116,101,32,105,100,101= ,110, -116,105,99,97,108,115,104,111,119,32,116,104,97,116,112,114,105,109,105,1= 16,105, -118,101,97,119,97,121,32,102,114,111,109,109,111,108,101,99,117,108,97,11= 4,112, -114,101,99,105,115,101,108,121,100,105,115,115,111,108,118,101,100,85,110= ,100, -101,114,32,116,104,101,118,101,114,115,105,111,110,61,34,62,38,110,98,115= ,112,59 -,60,47,73,116,32,105,115,32,116,104,101,32,84,104,105,115,32,105,115,32,1= 19,105, -108,108,32,104,97,118,101,111,114,103,97,110,105,115,109,115,115,111,109,= 101,32, -116,105,109,101,70,114,105,101,100,114,105,99,104,119,97,115,32,102,105,1= 14,115, -116,116,104,101,32,111,110,108,121,32,102,97,99,116,32,116,104,97,116,102= ,111, -114,109,32,105,100,61,34,112,114,101,99,101,100,105,110,103,84,101,99,104= ,110, -105,99,97,108,112,104,121,115,105,99,105,115,116,111,99,99,117,114,115,32= ,105, -110,110,97,118,105,103,97,116,111,114,115,101,99,116,105,111,110,34,62,11= 5,112, -97,110,32,105,100,61,34,115,111,117,103,104,116,32,116,111,98,101,108,111= ,119,32 -,116,104,101,115,117,114,118,105,118,105,110,103,125,60,47,115,116,121,10= 8,101, -62,104,105,115,32,100,101,97,116,104,97,115,32,105,110,32,116,104,101,99,= 97,117, -115,101,100,32,98,121,112,97,114,116,105,97,108,108,121,101,120,105,115,1= 16,105, -110,103,32,117,115,105,110,103,32,116,104,101,119,97,115,32,103,105,118,1= 01,110, -97,32,108,105,115,116,32,111,102,108,101,118,101,108,115,32,111,102,110,1= 11,116, -105,111,110,32,111,102,79,102,102,105,99,105,97,108,32,100,105,115,109,10= 5,115, -115,101,100,115,99,105,101,110,116,105,115,116,114,101,115,101,109,98,108= ,101, -115,100,117,112,108,105,99,97,116,101,101,120,112,108,111,115,105,118,101= ,114, -101,99,111,118,101,114,101,100,97,108,108,32,111,116,104,101,114,103,97,1= 08,108, -101,114,105,101,115,123,112,97,100,100,105,110,103,58,112,101,111,112,108= ,101,32 -,111,102,114,101,103,105,111,110,32,111,102,97,100,100,114,101,115,115,10= 1,115, -97,115,115,111,99,105,97,116,101,105,109,103,32,97,108,116,61,34,105,110,= 32,109, -111,100,101,114,110,115,104,111,117,108,100,32,98,101,109,101,116,104,111= ,100,32 -,111,102,114,101,112,111,114,116,105,110,103,116,105,109,101,115,116,97,1= 09,112, -110,101,101,100,101,100,32,116,111,116,104,101,32,71,114,101,97,116,114,1= 01,103, -97,114,100,105,110,103,115,101,101,109,101,100,32,116,111,118,105,101,119= ,101, -100,32,97,115,105,109,112,97,99,116,32,111,110,105,100,101,97,32,116,104,= 97,116, -116,104,101,32,87,111,114,108,100,104,101,105,103,104,116,32,111,102,101,= 120,112 -,97,110,100,105,110,103,84,104,101,115,101,32,97,114,101,99,117,114,114,1= 01,110, -116,34,62,99,97,114,101,102,117,108,108,121,109,97,105,110,116,97,105,110= ,115,99 -,104,97,114,103,101,32,111,102,67,108,97,115,115,105,99,97,108,97,100,100= ,114, -101,115,115,101,100,112,114,101,100,105,99,116,101,100,111,119,110,101,11= 4,115, -104,105,112,60,100,105,118,32,105,100,61,34,114,105,103,104,116,34,62,13,= 10,114, -101,115,105,100,101,110,99,101,108,101,97,118,101,32,116,104,101,99,111,1= 10,116, -101,110,116,34,62,97,114,101,32,111,102,116,101,110,32,32,125,41,40,41,59= ,13,10, -112,114,111,98,97,98,108,121,32,80,114,111,102,101,115,115,111,114,45,98,= 117,116 -,116,111,110,34,32,114,101,115,112,111,110,100,101,100,115,97,121,115,32,= 116,104 -,97,116,104,97,100,32,116,111,32,98,101,112,108,97,99,101,100,32,105,110,= 72,117, -110,103,97,114,105,97,110,115,116,97,116,117,115,32,111,102,115,101,114,1= 18,101, -115,32,97,115,85,110,105,118,101,114,115,97,108,101,120,101,99,117,116,10= 5,111, -110,97,103,103,114,101,103,97,116,101,102,111,114,32,119,104,105,99,104,1= 05,110, -102,101,99,116,105,111,110,97,103,114,101,101,100,32,116,111,104,111,119,= 101,118 -,101,114,44,32,112,111,112,117,108,97,114,34,62,112,108,97,99,101,100,32,= 111,110 -,99,111,110,115,116,114,117,99,116,101,108,101,99,116,111,114,97,108,115,= 121,109 -,98,111,108,32,111,102,105,110,99,108,117,100,105,110,103,114,101,116,117= ,114, -110,32,116,111,97,114,99,104,105,116,101,99,116,67,104,114,105,115,116,10= 5,97, -110,112,114,101,118,105,111,117,115,32,108,105,118,105,110,103,32,105,110= ,101,97 -,115,105,101,114,32,116,111,112,114,111,102,101,115,115,111,114,10,38,108= ,116,59 -,33,45,45,32,101,102,102,101,99,116,32,111,102,97,110,97,108,121,116,105,= 99,115, -119,97,115,32,116,97,107,101,110,119,104,101,114,101,32,116,104,101,116,1= 11,111, -107,32,111,118,101,114,98,101,108,105,101,102,32,105,110,65,102,114,105,1= 07,97, -97,110,115,97,115,32,102,97,114,32,97,115,112,114,101,118,101,110,116,101= ,100, -119,111,114,107,32,119,105,116,104,97,32,115,112,101,99,105,97,108,60,102= ,105, -101,108,100,115,101,116,67,104,114,105,115,116,109,97,115,82,101,116,114,= 105,101 -,118,101,100,10,10,73,110,32,116,104,101,32,98,97,99,107,32,105,110,116,1= 11,110, -111,114,116,104,101,97,115,116,109,97,103,97,122,105,110,101,115,62,60,11= 5,116, -114,111,110,103,62,99,111,109,109,105,116,116,101,101,103,111,118,101,114= ,110, -105,110,103,103,114,111,117,112,115,32,111,102,115,116,111,114,101,100,32= ,105, -110,101,115,116,97,98,108,105,115,104,97,32,103,101,110,101,114,97,108,10= 5,116, -115,32,102,105,114,115,116,116,104,101,105,114,32,111,119,110,112,111,112= ,117, -108,97,116,101,100,97,110,32,111,98,106,101,99,116,67,97,114,105,98,98,10= 1,97, -110,97,108,108,111,119,32,116,104,101,100,105,115,116,114,105,99,116,115,= 119,105 -,115,99,111,110,115,105,110,108,111,99,97,116,105,111,110,46,59,32,119,10= 5,100, -116,104,58,32,105,110,104,97,98,105,116,101,100,83,111,99,105,97,108,105,= 115,116 -,74,97,110,117,97,114,121,32,49,60,47,102,111,111,116,101,114,62,115,105,= 109,105 -,108,97,114,108,121,99,104,111,105,99,101,32,111,102,116,104,101,32,115,9= 7,109, -101,32,115,112,101,99,105,102,105,99,32,98,117,115,105,110,101,115,115,32= ,84,104 -,101,32,102,105,114,115,116,46,108,101,110,103,116,104,59,32,100,101,115,= 105,114 -,101,32,116,111,100,101,97,108,32,119,105,116,104,115,105,110,99,101,32,1= 16,104, -101,117,115,101,114,65,103,101,110,116,99,111,110,99,101,105,118,101,100,= 105,110 -,100,101,120,46,112,104,112,97,115,32,38,113,117,111,116,59,101,110,103,9= 7,103, -101,32,105,110,114,101,99,101,110,116,108,121,44,102,101,119,32,121,101,9= 7,114, -115,119,101,114,101,32,97,108,115,111,10,60,104,101,97,100,62,10,60,101,1= 00,105, -116,101,100,32,98,121,97,114,101,32,107,110,111,119,110,99,105,116,105,10= 1,115, -32,105,110,97,99,99,101,115,115,107,101,121,99,111,110,100,101,109,110,10= 1,100, -97,108,115,111,32,104,97,118,101,115,101,114,118,105,99,101,115,44,102,97= ,109, -105,108,121,32,111,102,83,99,104,111,111,108,32,111,102,99,111,110,118,10= 1,114, -116,101,100,110,97,116,117,114,101,32,111,102,32,108,97,110,103,117,97,10= 3,101, -109,105,110,105,115,116,101,114,115,60,47,111,98,106,101,99,116,62,116,10= 4,101, -114,101,32,105,115,32,97,32,112,111,112,117,108,97,114,115,101,113,117,10= 1,110, -99,101,115,97,100,118,111,99,97,116,101,100,84,104,101,121,32,119,101,114= ,101,97 -,110,121,32,111,116,104,101,114,108,111,99,97,116,105,111,110,61,101,110,= 116,101 -,114,32,116,104,101,109,117,99,104,32,109,111,114,101,114,101,102,108,101= ,99,116 -,101,100,119,97,115,32,110,97,109,101,100,111,114,105,103,105,110,97,108,= 32,97, -32,116,121,112,105,99,97,108,119,104,101,110,32,116,104,101,121,101,110,1= 03,105, -110,101,101,114,115,99,111,117,108,100,32,110,111,116,114,101,115,105,100= ,101, -110,116,115,119,101,100,110,101,115,100,97,121,116,104,101,32,116,104,105= ,114, -100,32,112,114,111,100,117,99,116,115,74,97,110,117,97,114,121,32,50,119,= 104,97, -116,32,116,104,101,121,97,32,99,101,114,116,97,105,110,114,101,97,99,116,= 105,111 -,110,115,112,114,111,99,101,115,115,111,114,97,102,116,101,114,32,104,105= ,115, -116,104,101,32,108,97,115,116,32,99,111,110,116,97,105,110,101,100,34,62,= 60,47, -100,105,118,62,10,60,47,97,62,60,47,116,100,62,100,101,112,101,110,100,32= ,111, -110,115,101,97,114,99,104,34,62,10,112,105,101,99,101,115,32,111,102,99,1= 11,109, -112,101,116,105,110,103,82,101,102,101,114,101,110,99,101,116,101,110,110= ,101, -115,115,101,101,119,104,105,99,104,32,104,97,115,32,118,101,114,115,105,1= 11,110, -61,60,47,115,112,97,110,62,32,60,60,47,104,101,97,100,101,114,62,103,105,= 118,101 -,115,32,116,104,101,104,105,115,116,111,114,105,97,110,118,97,108,117,101= ,61,34, -34,62,112,97,100,100,105,110,103,58,48,118,105,101,119,32,116,104,97,116,= 116,111 -,103,101,116,104,101,114,44,116,104,101,32,109,111,115,116,32,119,97,115,= 32,102, -111,117,110,100,115,117,98,115,101,116,32,111,102,97,116,116,97,99,107,32= ,111, -110,99,104,105,108,100,114,101,110,44,112,111,105,110,116,115,32,111,102,= 112,101 -,114,115,111,110,97,108,32,112,111,115,105,116,105,111,110,58,97,108,108,= 101,103 -,101,100,108,121,67,108,101,118,101,108,97,110,100,119,97,115,32,108,97,1= 16,101, -114,97,110,100,32,97,102,116,101,114,97,114,101,32,103,105,118,101,110,11= 9,97, -115,32,115,116,105,108,108,115,99,114,111,108,108,105,110,103,100,101,115= ,105, -103,110,32,111,102,109,97,107,101,115,32,116,104,101,109,117,99,104,32,10= 8,101, -115,115,65,109,101,114,105,99,97,110,115,46,10,10,65,102,116,101,114,32,4= 4,32,98 -,117,116,32,116,104,101,77,117,115,101,117,109,32,111,102,108,111,117,105= ,115, -105,97,110,97,40,102,114,111,109,32,116,104,101,109,105,110,110,101,115,1= 11,116, -97,112,97,114,116,105,99,108,101,115,97,32,112,114,111,99,101,115,115,68,= 111,109 -,105,110,105,99,97,110,118,111,108,117,109,101,32,111,102,114,101,116,117= ,114, -110,105,110,103,100,101,102,101,110,115,105,118,101,48,48,112,120,124,114= ,105, -103,104,109,97,100,101,32,102,114,111,109,109,111,117,115,101,111,118,101= ,114,34 -,32,115,116,121,108,101,61,34,115,116,97,116,101,115,32,111,102,40,119,10= 4,105, -99,104,32,105,115,99,111,110,116,105,110,117,101,115,70,114,97,110,99,105= ,115,99 -,111,98,117,105,108,100,105,110,103,32,119,105,116,104,111,117,116,32,97,= 119,105 -,116,104,32,115,111,109,101,119,104,111,32,119,111,117,108,100,97,32,102,= 111,114 -,109,32,111,102,97,32,112,97,114,116,32,111,102,98,101,102,111,114,101,32= ,105, -116,107,110,111,119,110,32,97,115,32,32,83,101,114,118,105,99,101,115,108= ,111,99 -,97,116,105,111,110,32,97,110,100,32,111,102,116,101,110,109,101,97,115,1= 17,114, -105,110,103,97,110,100,32,105,116,32,105,115,112,97,112,101,114,98,97,99,= 107,118 -,97,108,117,101,115,32,111,102,13,10,60,116,105,116,108,101,62,61,32,119,= 105,110 -,100,111,119,46,100,101,116,101,114,109,105,110,101,101,114,38,113,117,11= 1,116, -59,32,112,108,97,121,101,100,32,98,121,97,110,100,32,101,97,114,108,121,6= 0,47,99 -,101,110,116,101,114,62,102,114,111,109,32,116,104,105,115,116,104,101,32= ,116, -104,114,101,101,112,111,119,101,114,32,97,110,100,111,102,32,38,113,117,1= 11,116, -59,105,110,110,101,114,72,84,77,76,60,97,32,104,114,101,102,61,34,121,58,= 105,110 -,108,105,110,101,59,67,104,117,114,99,104,32,111,102,116,104,101,32,101,1= 18,101, -110,116,118,101,114,121,32,104,105,103,104,111,102,102,105,99,105,97,108,= 32,45, -104,101,105,103,104,116,58,32,99,111,110,116,101,110,116,61,34,47,99,103,= 105,45, -98,105,110,47,116,111,32,99,114,101,97,116,101,97,102,114,105,107,97,97,1= 10,115, -101,115,112,101,114,97,110,116,111,102,114,97,110,195,167,97,105,115,108,= 97,116, -118,105,101,197,161,117,108,105,101,116,117,118,105,197,179,196,140,101,1= 97,161, -116,105,110,97,196,141,101,197,161,116,105,110,97,224,185,132,224,184,151= ,224, -184,162,230,151,165,230,156,172,232,170,158,231,174,128,228,189,147,229,1= 73,151, -231,185,129,233,171,148,229,173,151,237,149,156,234,181,173,236,150,180,2= 28,184, -186,228,187,128,228,185,136,232,174,161,231,174,151,230,156,186,231,172,1= 48,232, -174,176,230,156,172,232,168,142,232,171,150,229,141,128,230,156,141,229,1= 38,161, -229,153,168,228,186,146,232,129,148,231,189,145,230,136,191,229,156,176,2= 28,186, -167,228,191,177,228,185,144,233,131,168,229,135,186,231,137,136,231,164,1= 90,230, -142,146,232,161,140,230,166,156,233,131,168,232,144,189,230,160,188,232,1= 91,155, -228,184,128,230,173,165,230,148,175,228,187,152,229,174,157,233,170,140,2= 32,175, -129,231,160,129,229,167,148,229,145,152,228,188,154,230,149,176,230,141,1= 74,229, -186,147,230,182,136,232,180,185,232,128,133,229,138,158,229,133,172,229,1= 74,164, -232,174,168,232,174,186,229,140,186,230,183,177,229,156,179,229,184,130,2= 30,146, -173,230,148,190,229,153,168,229,140,151,228,186,172,229,184,130,229,164,1= 67,229, -173,166,231,148,159,232,182,138,230,157,165,232,182,138,231,174,161,231,1= 44,134, -229,145,152,228,191,161,230,129,175,231,189,145,115,101,114,118,105,99,10= 5,111, -115,97,114,116,195,173,99,117,108,111,97,114,103,101,110,116,105,110,97,9= 8,97, -114,99,101,108,111,110,97,99,117,97,108,113,117,105,101,114,112,117,98,10= 8,105, -99,97,100,111,112,114,111,100,117,99,116,111,115,112,111,108,195,173,116,= 105,99, -97,114,101,115,112,117,101,115,116,97,119,105,107,105,112,101,100,105,97,= 115,105 -,103,117,105,101,110,116,101,98,195,186,115,113,117,101,100,97,99,111,109= ,117, -110,105,100,97,100,115,101,103,117,114,105,100,97,100,112,114,105,110,99,= 105,112 -,97,108,112,114,101,103,117,110,116,97,115,99,111,110,116,101,110,105,100= ,111, -114,101,115,112,111,110,100,101,114,118,101,110,101,122,117,101,108,97,11= 2,114, -111,98,108,101,109,97,115,100,105,99,105,101,109,98,114,101,114,101,108,9= 7,99, -105,195,179,110,110,111,118,105,101,109,98,114,101,115,105,109,105,108,97= ,114, -101,115,112,114,111,121,101,99,116,111,115,112,114,111,103,114,97,109,97,= 115,105 -,110,115,116,105,116,117,116,111,97,99,116,105,118,105,100,97,100,101,110= ,99,117 -,101,110,116,114,97,101,99,111,110,111,109,195,173,97,105,109,195,161,103= ,101, -110,101,115,99,111,110,116,97,99,116,97,114,100,101,115,99,97,114,103,97,= 114,110 -,101,99,101,115,97,114,105,111,97,116,101,110,99,105,195,179,110,116,101,= 108,195 -,169,102,111,110,111,99,111,109,105,115,105,195,179,110,99,97,110,99,105,= 111,110 -,101,115,99,97,112,97,99,105,100,97,100,101,110,99,111,110,116,114,97,114= ,97,110 -,195,161,108,105,115,105,115,102,97,118,111,114,105,116,111,115,116,195,1= 69,114, -109,105,110,111,115,112,114,111,118,105,110,99,105,97,101,116,105,113,117= ,101, -116,97,115,101,108,101,109,101,110,116,111,115,102,117,110,99,105,111,110= ,101, -115,114,101,115,117,108,116,97,100,111,99,97,114,195,161,99,116,101,114,1= 12,114, -111,112,105,101,100,97,100,112,114,105,110,99,105,112,105,111,110,101,99,= 101,115 -,105,100,97,100,109,117,110,105,99,105,112,97,108,99,114,101,97,99,105,19= 5,179, -110,100,101,115,99,97,114,103,97,115,112,114,101,115,101,110,99,105,97,99= ,111, -109,101,114,99,105,97,108,111,112,105,110,105,111,110,101,115,101,106,101= ,114,99 -,105,99,105,111,101,100,105,116,111,114,105,97,108,115,97,108,97,109,97,1= 10,99, -97,103,111,110,122,195,161,108,101,122,100,111,99,117,109,101,110,116,111= ,112, -101,108,195,173,99,117,108,97,114,101,99,105,101,110,116,101,115,103,101,= 110,101 -,114,97,108,101,115,116,97,114,114,97,103,111,110,97,112,114,195,161,99,1= 16,105, -99,97,110,111,118,101,100,97,100,101,115,112,114,111,112,117,101,115,116,= 97,112, -97,99,105,101,110,116,101,115,116,195,169,99,110,105,99,97,115,111,98,106= ,101, -116,105,118,111,115,99,111,110,116,97,99,116,111,115,224,164,174,224,165,= 135,224 -,164,130,224,164,178,224,164,191,224,164,143,224,164,185,224,165,136,224,= 164,130 -,224,164,151,224,164,175,224,164,190,224,164,184,224,164,190,224,164,165,= 224,164 -,143,224,164,181,224,164,130,224,164,176,224,164,185,224,165,135,224,164,= 149,224 -,165,139,224,164,136,224,164,149,224,165,129,224,164,155,224,164,176,224,= 164,185 -,224,164,190,224,164,172,224,164,190,224,164,166,224,164,149,224,164,185,= 224,164 -,190,224,164,184,224,164,173,224,165,128,224,164,185,224,165,129,224,164,= 143,224 -,164,176,224,164,185,224,165,128,224,164,174,224,165,136,224,164,130,224,= 164,166 -,224,164,191,224,164,168,224,164,172,224,164,190,224,164,164,100,105,112,= 108,111 -,100,111,99,115,224,164,184,224,164,174,224,164,175,224,164,176,224,165,1= 30,224, -164,170,224,164,168,224,164,190,224,164,174,224,164,170,224,164,164,224,1= 64,190, -224,164,171,224,164,191,224,164,176,224,164,148,224,164,184,224,164,164,2= 24,164, -164,224,164,176,224,164,185,224,164,178,224,165,139,224,164,151,224,164,1= 85,224, -165,129,224,164,134,224,164,172,224,164,190,224,164,176,224,164,166,224,1= 65,135, -224,164,182,224,164,185,224,165,129,224,164,136,224,164,150,224,165,135,2= 24,164, -178,224,164,175,224,164,166,224,164,191,224,164,149,224,164,190,224,164,1= 74,224, -164,181,224,165,135,224,164,172,224,164,164,224,165,128,224,164,168,224,1= 64,172, -224,165,128,224,164,154,224,164,174,224,165,140,224,164,164,224,164,184,2= 24,164, -190,224,164,178,224,164,178,224,165,135,224,164,150,224,164,156,224,165,1= 37,224, -164,172,224,164,174,224,164,166,224,164,166,224,164,164,224,164,165,224,1= 64,190, -224,164,168,224,164,185,224,165,128,224,164,182,224,164,185,224,164,176,2= 24,164, -133,224,164,178,224,164,151,224,164,149,224,164,173,224,165,128,224,164,1= 68,224, -164,151,224,164,176,224,164,170,224,164,190,224,164,184,224,164,176,224,1= 64,190, -224,164,164,224,164,149,224,164,191,224,164,143,224,164,137,224,164,184,2= 24,165, -135,224,164,151,224,164,175,224,165,128,224,164,185,224,165,130,224,164,1= 29,224, -164,134,224,164,151,224,165,135,224,164,159,224,165,128,224,164,174,224,1= 64,150, -224,165,139,224,164,156,224,164,149,224,164,190,224,164,176,224,164,133,2= 24,164, -173,224,165,128,224,164,151,224,164,175,224,165,135,224,164,164,224,165,1= 29,224, -164,174,224,164,181,224,165,139,224,164,159,224,164,166,224,165,135,224,1= 64,130, -224,164,133,224,164,151,224,164,176,224,164,144,224,164,184,224,165,135,2= 24,164, -174,224,165,135,224,164,178,224,164,178,224,164,151,224,164,190,224,164,1= 85,224, -164,190,224,164,178,224,164,138,224,164,170,224,164,176,224,164,154,224,1= 64,190, -224,164,176,224,164,144,224,164,184,224,164,190,224,164,166,224,165,135,2= 24,164, -176,224,164,156,224,164,191,224,164,184,224,164,166,224,164,191,224,164,1= 78,224, -164,172,224,164,130,224,164,166,224,164,172,224,164,168,224,164,190,224,1= 64,185, -224,165,130,224,164,130,224,164,178,224,164,190,224,164,150,224,164,156,2= 24,165, -128,224,164,164,224,164,172,224,164,159,224,164,168,224,164,174,224,164,1= 91,224, -164,178,224,164,135,224,164,184,224,165,135,224,164,134,224,164,168,224,1= 65,135, -224,164,168,224,164,175,224,164,190,224,164,149,224,165,129,224,164,178,2= 24,164, -178,224,165,137,224,164,151,224,164,173,224,164,190,224,164,151,224,164,1= 76,224, -165,135,224,164,178,224,164,156,224,164,151,224,164,185,224,164,176,224,1= 64,190, -224,164,174,224,164,178,224,164,151,224,165,135,224,164,170,224,165,135,2= 24,164, -156,224,164,185,224,164,190,224,164,165,224,164,135,224,164,184,224,165,1= 28,224, -164,184,224,164,185,224,165,128,224,164,149,224,164,178,224,164,190,224,1= 64,160, -224,165,128,224,164,149,224,164,185,224,164,190,224,164,129,224,164,166,2= 24,165, -130,224,164,176,224,164,164,224,164,185,224,164,164,224,164,184,224,164,1= 90,224, -164,164,224,164,175,224,164,190,224,164,166,224,164,134,224,164,175,224,1= 64,190, -224,164,170,224,164,190,224,164,149,224,164,149,224,165,140,224,164,168,2= 24,164, -182,224,164,190,224,164,174,224,164,166,224,165,135,224,164,150,224,164,1= 75,224, -164,185,224,165,128,224,164,176,224,164,190,224,164,175,224,164,150,224,1= 65,129, -224,164,166,224,164,178,224,164,151,224,165,128,99,97,116,101,103,111,114= ,105, -101,115,101,120,112,101,114,105,101,110,99,101,60,47,116,105,116,108,101,= 62,13, -10,67,111,112,121,114,105,103,104,116,32,106,97,118,97,115,99,114,105,112= ,116,99 -,111,110,100,105,116,105,111,110,115,101,118,101,114,121,116,104,105,110,= 103,60, -112,32,99,108,97,115,115,61,34,116,101,99,104,110,111,108,111,103,121,98,= 97,99, -107,103,114,111,117,110,100,60,97,32,99,108,97,115,115,61,34,109,97,110,9= 7,103, -101,109,101,110,116,38,99,111,112,121,59,32,50,48,49,106,97,118,97,83,99,= 114,105 -,112,116,99,104,97,114,97,99,116,101,114,115,98,114,101,97,100,99,114,117= ,109,98 -,116,104,101,109,115,101,108,118,101,115,104,111,114,105,122,111,110,116,= 97,108, -103,111,118,101,114,110,109,101,110,116,67,97,108,105,102,111,114,110,105= ,97,97, -99,116,105,118,105,116,105,101,115,100,105,115,99,111,118,101,114,101,100= ,78,97, -118,105,103,97,116,105,111,110,116,114,97,110,115,105,116,105,111,110,99,= 111,110 -,110,101,99,116,105,111,110,110,97,118,105,103,97,116,105,111,110,97,112,= 112,101 -,97,114,97,110,99,101,60,47,116,105,116,108,101,62,60,109,99,104,101,99,1= 07,98, -111,120,34,32,116,101,99,104,110,105,113,117,101,115,112,114,111,116,101,= 99,116, -105,111,110,97,112,112,97,114,101,110,116,108,121,97,115,32,119,101,108,1= 08,32, -97,115,117,110,116,39,44,32,39,85,65,45,114,101,115,111,108,117,116,105,1= 11,110, -111,112,101,114,97,116,105,111,110,115,116,101,108,101,118,105,115,105,11= 1,110, -116,114,97,110,115,108,97,116,101,100,87,97,115,104,105,110,103,116,111,1= 10,110, -97,118,105,103,97,116,111,114,46,32,61,32,119,105,110,100,111,119,46,105,= 109,112 -,114,101,115,115,105,111,110,38,108,116,59,98,114,38,103,116,59,108,105,1= 16,101, -114,97,116,117,114,101,112,111,112,117,108,97,116,105,111,110,98,103,99,1= 11,108, -111,114,61,34,35,101,115,112,101,99,105,97,108,108,121,32,99,111,110,116,= 101,110 -,116,61,34,112,114,111,100,117,99,116,105,111,110,110,101,119,115,108,101= ,116, -116,101,114,112,114,111,112,101,114,116,105,101,115,100,101,102,105,110,1= 05,116, -105,111,110,108,101,97,100,101,114,115,104,105,112,84,101,99,104,110,111,= 108,111 -,103,121,80,97,114,108,105,97,109,101,110,116,99,111,109,112,97,114,105,1= 15,111, -110,117,108,32,99,108,97,115,115,61,34,46,105,110,100,101,120,79,102,40,3= 4,99, -111,110,99,108,117,115,105,111,110,100,105,115,99,117,115,115,105,111,110= ,99,111 -,109,112,111,110,101,110,116,115,98,105,111,108,111,103,105,99,97,108,82,= 101,118 -,111,108,117,116,105,111,110,95,99,111,110,116,97,105,110,101,114,117,110= ,100, -101,114,115,116,111,111,100,110,111,115,99,114,105,112,116,62,60,112,101,= 114,109 -,105,115,115,105,111,110,101,97,99,104,32,111,116,104,101,114,97,116,109,= 111,115 -,112,104,101,114,101,32,111,110,102,111,99,117,115,61,34,60,102,111,114,1= 09,32, -105,100,61,34,112,114,111,99,101,115,115,105,110,103,116,104,105,115,46,1= 18,97, -108,117,101,103,101,110,101,114,97,116,105,111,110,67,111,110,102,101,114= ,101, -110,99,101,115,117,98,115,101,113,117,101,110,116,119,101,108,108,45,107,= 110,111 -,119,110,118,97,114,105,97,116,105,111,110,115,114,101,112,117,116,97,116= ,105, -111,110,112,104,101,110,111,109,101,110,111,110,100,105,115,99,105,112,10= 8,105, -110,101,108,111,103,111,46,112,110,103,34,32,40,100,111,99,117,109,101,11= 0,116, -44,98,111,117,110,100,97,114,105,101,115,101,120,112,114,101,115,115,105,= 111,110 -,115,101,116,116,108,101,109,101,110,116,66,97,99,107,103,114,111,117,110= ,100, -111,117,116,32,111,102,32,116,104,101,101,110,116,101,114,112,114,105,115= ,101,40 -,34,104,116,116,112,115,58,34,32,117,110,101,115,99,97,112,101,40,34,112,= 97,115, -115,119,111,114,100,34,32,100,101,109,111,99,114,97,116,105,99,60,97,32,1= 04,114, -101,102,61,34,47,119,114,97,112,112,101,114,34,62,10,109,101,109,98,101,1= 14,115, -104,105,112,108,105,110,103,117,105,115,116,105,99,112,120,59,112,97,100,= 100,105 -,110,103,112,104,105,108,111,115,111,112,104,121,97,115,115,105,115,116,9= 7,110, -99,101,117,110,105,118,101,114,115,105,116,121,102,97,99,105,108,105,116,= 105,101 -,115,114,101,99,111,103,110,105,122,101,100,112,114,101,102,101,114,101,1= 10,99, -101,105,102,32,40,116,121,112,101,111,102,109,97,105,110,116,97,105,110,1= 01,100, -118,111,99,97,98,117,108,97,114,121,104,121,112,111,116,104,101,115,105,1= 15,46, -115,117,98,109,105,116,40,41,59,38,97,109,112,59,110,98,115,112,59,97,110= ,110, -111,116,97,116,105,111,110,98,101,104,105,110,100,32,116,104,101,70,111,1= 17,110, -100,97,116,105,111,110,112,117,98,108,105,115,104,101,114,34,97,115,115,1= 17,109, -112,116,105,111,110,105,110,116,114,111,100,117,99,101,100,99,111,114,114= ,117, -112,116,105,111,110,115,99,105,101,110,116,105,115,116,115,101,120,112,10= 8,105, -99,105,116,108,121,105,110,115,116,101,97,100,32,111,102,100,105,109,101,= 110,115 -,105,111,110,115,32,111,110,67,108,105,99,107,61,34,99,111,110,115,105,10= 0,101, -114,101,100,100,101,112,97,114,116,109,101,110,116,111,99,99,117,112,97,1= 16,105, -111,110,115,111,111,110,32,97,102,116,101,114,105,110,118,101,115,116,109= ,101, -110,116,112,114,111,110,111,117,110,99,101,100,105,100,101,110,116,105,10= 2,105, -101,100,101,120,112,101,114,105,109,101,110,116,77,97,110,97,103,101,109,= 101,110 -,116,103,101,111,103,114,97,112,104,105,99,34,32,104,101,105,103,104,116,= 61,34, -108,105,110,107,32,114,101,108,61,34,46,114,101,112,108,97,99,101,40,47,1= 00,101, -112,114,101,115,115,105,111,110,99,111,110,102,101,114,101,110,99,101,112= ,117, -110,105,115,104,109,101,110,116,101,108,105,109,105,110,97,116,101,100,11= 4,101, -115,105,115,116,97,110,99,101,97,100,97,112,116,97,116,105,111,110,111,11= 2,112, -111,115,105,116,105,111,110,119,101,108,108,32,107,110,111,119,110,115,11= 7,112, -112,108,101,109,101,110,116,100,101,116,101,114,109,105,110,101,100,104,4= 9,32,99 -,108,97,115,115,61,34,48,112,120,59,109,97,114,103,105,110,109,101,99,104= ,97,110 -,105,99,97,108,115,116,97,116,105,115,116,105,99,115,99,101,108,101,98,11= 4,97, -116,101,100,71,111,118,101,114,110,109,101,110,116,10,10,68,117,114,105,1= 10,103, -32,116,100,101,118,101,108,111,112,101,114,115,97,114,116,105,102,105,99,= 105,97, -108,101,113,117,105,118,97,108,101,110,116,111,114,105,103,105,110,97,116= ,101, -100,67,111,109,109,105,115,115,105,111,110,97,116,116,97,99,104,109,101,1= 10,116, -60,115,112,97,110,32,105,100,61,34,116,104,101,114,101,32,119,101,114,101= ,78,101 -,100,101,114,108,97,110,100,115,98,101,121,111,110,100,32,116,104,101,114= ,101, -103,105,115,116,101,114,101,100,106,111,117,114,110,97,108,105,115,116,10= 2,114, -101,113,117,101,110,116,108,121,97,108,108,32,111,102,32,116,104,101,108,= 97,110, -103,61,34,101,110,34,32,60,47,115,116,121,108,101,62,13,10,97,98,115,111,= 108,117 -,116,101,59,32,115,117,112,112,111,114,116,105,110,103,101,120,116,114,10= 1,109, -101,108,121,32,109,97,105,110,115,116,114,101,97,109,60,47,115,116,114,11= 1,110, -103,62,32,112,111,112,117,108,97,114,105,116,121,101,109,112,108,111,121,= 109,101 -,110,116,60,47,116,97,98,108,101,62,13,10,32,99,111,108,115,112,97,110,61= ,34,60, -47,102,111,114,109,62,10,32,32,99,111,110,118,101,114,115,105,111,110,97,= 98,111, -117,116,32,116,104,101,32,60,47,112,62,60,47,100,105,118,62,105,110,116,1= 01,103, -114,97,116,101,100,34,32,108,97,110,103,61,34,101,110,80,111,114,116,117,= 103,117 -,101,115,101,115,117,98,115,116,105,116,117,116,101,105,110,100,105,118,1= 05,100, -117,97,108,105,109,112,111,115,115,105,98,108,101,109,117,108,116,105,109= ,101, -100,105,97,97,108,109,111,115,116,32,97,108,108,112,120,32,115,111,108,10= 5,100, -32,35,97,112,97,114,116,32,102,114,111,109,115,117,98,106,101,99,116,32,1= 16,111, -105,110,32,69,110,103,108,105,115,104,99,114,105,116,105,99,105,122,101,1= 00,101, -120,99,101,112,116,32,102,111,114,103,117,105,100,101,108,105,110,101,115= ,111, -114,105,103,105,110,97,108,108,121,114,101,109,97,114,107,97,98,108,101,1= 16,104, -101,32,115,101,99,111,110,100,104,50,32,99,108,97,115,115,61,34,60,97,32,= 116,105 -,116,108,101,61,34,40,105,110,99,108,117,100,105,110,103,112,97,114,97,10= 9,101, -116,101,114,115,112,114,111,104,105,98,105,116,101,100,61,32,34,104,116,1= 16,112, -58,47,47,100,105,99,116,105,111,110,97,114,121,112,101,114,99,101,112,116= ,105, -111,110,114,101,118,111,108,117,116,105,111,110,102,111,117,110,100,97,11= 6,105, -111,110,112,120,59,104,101,105,103,104,116,58,115,117,99,99,101,115,115,1= 02,117, -108,115,117,112,112,111,114,116,101,114,115,109,105,108,108,101,110,110,1= 05,117, -109,104,105,115,32,102,97,116,104,101,114,116,104,101,32,38,113,117,111,1= 16,59, -110,111,45,114,101,112,101,97,116,59,99,111,109,109,101,114,99,105,97,108= ,105, -110,100,117,115,116,114,105,97,108,101,110,99,111,117,114,97,103,101,100,= 97,109, -111,117,110,116,32,111,102,32,117,110,111,102,102,105,99,105,97,108,101,1= 02,102, -105,99,105,101,110,99,121,82,101,102,101,114,101,110,99,101,115,99,111,11= 1,114, -100,105,110,97,116,101,100,105,115,99,108,97,105,109,101,114,101,120,112,= 101,100 -,105,116,105,111,110,100,101,118,101,108,111,112,105,110,103,99,97,108,99= ,117, -108,97,116,101,100,115,105,109,112,108,105,102,105,101,100,108,101,103,10= 5,116, -105,109,97,116,101,115,117,98,115,116,114,105,110,103,40,48,34,32,99,108,= 97,115, -115,61,34,99,111,109,112,108,101,116,101,108,121,105,108,108,117,115,116,= 114,97, -116,101,102,105,118,101,32,121,101,97,114,115,105,110,115,116,114,117,109= ,101, -110,116,80,117,98,108,105,115,104,105,110,103,49,34,32,99,108,97,115,115,= 61,34, -112,115,121,99,104,111,108,111,103,121,99,111,110,102,105,100,101,110,99,= 101,110 -,117,109,98,101,114,32,111,102,32,97,98,115,101,110,99,101,32,111,102,102= ,111,99 -,117,115,101,100,32,111,110,106,111,105,110,101,100,32,116,104,101,115,11= 6,114, -117,99,116,117,114,101,115,112,114,101,118,105,111,117,115,108,121,62,60,= 47,105, -102,114,97,109,101,62,111,110,99,101,32,97,103,97,105,110,98,117,116,32,1= 14,97, -116,104,101,114,105,109,109,105,103,114,97,110,116,115,111,102,32,99,111,= 117,114 -,115,101,44,97,32,103,114,111,117,112,32,111,102,76,105,116,101,114,97,11= 6,117, -114,101,85,110,108,105,107,101,32,116,104,101,60,47,97,62,38,110,98,115,1= 12,59, -10,102,117,110,99,116,105,111,110,32,105,116,32,119,97,115,32,116,104,101= ,67,111 -,110,118,101,110,116,105,111,110,97,117,116,111,109,111,98,105,108,101,80= ,114, -111,116,101,115,116,97,110,116,97,103,103,114,101,115,115,105,118,101,97,= 102,116 -,101,114,32,116,104,101,32,83,105,109,105,108,97,114,108,121,44,34,32,47,= 62,60, -47,100,105,118,62,99,111,108,108,101,99,116,105,111,110,13,10,102,117,110= ,99,116 -,105,111,110,118,105,115,105,98,105,108,105,116,121,116,104,101,32,117,11= 5,101, -32,111,102,118,111,108,117,110,116,101,101,114,115,97,116,116,114,97,99,1= 16,105, -111,110,117,110,100,101,114,32,116,104,101,32,116,104,114,101,97,116,101,= 110,101 -,100,42,60,33,91,67,68,65,84,65,91,105,109,112,111,114,116,97,110,99,101,= 105,110 -,32,103,101,110,101,114,97,108,116,104,101,32,108,97,116,116,101,114,60,4= 7,102, -111,114,109,62,10,60,47,46,105,110,100,101,120,79,102,40,39,105,32,61,32,= 48,59, -32,105,32,60,100,105,102,102,101,114,101,110,99,101,100,101,118,111,116,1= 01,100, -32,116,111,116,114,97,100,105,116,105,111,110,115,115,101,97,114,99,104,3= 2,102, -111,114,117,108,116,105,109,97,116,101,108,121,116,111,117,114,110,97,109= ,101, -110,116,97,116,116,114,105,98,117,116,101,115,115,111,45,99,97,108,108,10= 1,100, -32,125,10,60,47,115,116,121,108,101,62,101,118,97,108,117,97,116,105,111,= 110,101 -,109,112,104,97,115,105,122,101,100,97,99,99,101,115,115,105,98,108,101,6= 0,47, -115,101,99,116,105,111,110,62,115,117,99,99,101,115,115,105,111,110,97,10= 8,111, -110,103,32,119,105,116,104,77,101,97,110,119,104,105,108,101,44,105,110,1= 00,117, -115,116,114,105,101,115,60,47,97,62,60,98,114,32,47,62,104,97,115,32,98,1= 01,99, -111,109,101,97,115,112,101,99,116,115,32,111,102,84,101,108,101,118,105,1= 15,105, -111,110,115,117,102,102,105,99,105,101,110,116,98,97,115,107,101,116,98,9= 7,108, -108,98,111,116,104,32,115,105,100,101,115,99,111,110,116,105,110,117,105,= 110,103 -,97,110,32,97,114,116,105,99,108,101,60,105,109,103,32,97,108,116,61,34,9= 7,100, -118,101,110,116,117,114,101,115,104,105,115,32,109,111,116,104,101,114,10= 9,97, -110,99,104,101,115,116,101,114,112,114,105,110,99,105,112,108,101,115,112= ,97,114 -,116,105,99,117,108,97,114,99,111,109,109,101,110,116,97,114,121,101,102,= 102,101 -,99,116,115,32,111,102,100,101,99,105,100,101,100,32,116,111,34,62,60,115= ,116, -114,111,110,103,62,112,117,98,108,105,115,104,101,114,115,74,111,117,114,= 110,97, -108,32,111,102,100,105,102,102,105,99,117,108,116,121,102,97,99,105,108,1= 05,116, -97,116,101,97,99,99,101,112,116,97,98,108,101,115,116,121,108,101,46,99,1= 15,115, -34,9,102,117,110,99,116,105,111,110,32,105,110,110,111,118,97,116,105,111= ,110,62 -,67,111,112,121,114,105,103,104,116,115,105,116,117,97,116,105,111,110,11= 5,119, -111,117,108,100,32,104,97,118,101,98,117,115,105,110,101,115,115,101,115,= 68,105, -99,116,105,111,110,97,114,121,115,116,97,116,101,109,101,110,116,115,111,= 102,116 -,101,110,32,117,115,101,100,112,101,114,115,105,115,116,101,110,116,105,1= 10,32, -74,97,110,117,97,114,121,99,111,109,112,114,105,115,105,110,103,60,47,116= ,105, -116,108,101,62,10,9,100,105,112,108,111,109,97,116,105,99,99,111,110,116,= 97,105, -110,105,110,103,112,101,114,102,111,114,109,105,110,103,101,120,116,101,1= 10,115, -105,111,110,115,109,97,121,32,110,111,116,32,98,101,99,111,110,99,101,112= ,116,32 -,111,102,32,111,110,99,108,105,99,107,61,34,73,116,32,105,115,32,97,108,1= 15,111, -102,105,110,97,110,99,105,97,108,32,109,97,107,105,110,103,32,116,104,101= ,76,117 -,120,101,109,98,111,117,114,103,97,100,100,105,116,105,111,110,97,108,97,= 114,101 -,32,99,97,108,108,101,100,101,110,103,97,103,101,100,32,105,110,34,115,99= ,114, -105,112,116,34,41,59,98,117,116,32,105,116,32,119,97,115,101,108,101,99,1= 16,114, -111,110,105,99,111,110,115,117,98,109,105,116,61,34,10,60,33,45,45,32,69,= 110,100 -,32,101,108,101,99,116,114,105,99,97,108,111,102,102,105,99,105,97,108,10= 8,121, -115,117,103,103,101,115,116,105,111,110,116,111,112,32,111,102,32,116,104= ,101, -117,110,108,105,107,101,32,116,104,101,65,117,115,116,114,97,108,105,97,1= 10,79, -114,105,103,105,110,97,108,108,121,114,101,102,101,114,101,110,99,101,115= ,10,60, -47,104,101,97,100,62,13,10,114,101,99,111,103,110,105,115,101,100,105,110= ,105, -116,105,97,108,105,122,101,108,105,109,105,116,101,100,32,116,111,65,108,= 101,120 -,97,110,100,114,105,97,114,101,116,105,114,101,109,101,110,116,65,100,118= ,101, -110,116,117,114,101,115,102,111,117,114,32,121,101,97,114,115,10,10,38,10= 8,116, -59,33,45,45,32,105,110,99,114,101,97,115,105,110,103,100,101,99,111,114,9= 7,116, -105,111,110,104,51,32,99,108,97,115,115,61,34,111,114,105,103,105,110,115= ,32,111 -,102,111,98,108,105,103,97,116,105,111,110,114,101,103,117,108,97,116,105= ,111, -110,99,108,97,115,115,105,102,105,101,100,40,102,117,110,99,116,105,111,1= 10,40, -97,100,118,97,110,116,97,103,101,115,98,101,105,110,103,32,116,104,101,32= ,104, -105,115,116,111,114,105,97,110,115,60,98,97,115,101,32,104,114,101,102,11= 4,101, -112,101,97,116,101,100,108,121,119,105,108,108,105,110,103,32,116,111,99,= 111,109 -,112,97,114,97,98,108,101,100,101,115,105,103,110,97,116,101,100,110,111,= 109,105 -,110,97,116,105,111,110,102,117,110,99,116,105,111,110,97,108,105,110,115= ,105, -100,101,32,116,104,101,114,101,118,101,108,97,116,105,111,110,101,110,100= ,32,111 -,102,32,116,104,101,115,32,102,111,114,32,116,104,101,32,97,117,116,104,1= 11,114, -105,122,101,100,114,101,102,117,115,101,100,32,116,111,116,97,107,101,32,= 112,108 -,97,99,101,97,117,116,111,110,111,109,111,117,115,99,111,109,112,114,111,= 109,105 -,115,101,112,111,108,105,116,105,99,97,108,32,114,101,115,116,97,117,114,= 97,110, -116,116,119,111,32,111,102,32,116,104,101,70,101,98,114,117,97,114,121,32= ,50,113 -,117,97,108,105,116,121,32,111,102,115,119,102,111,98,106,101,99,116,46,1= 17,110, -100,101,114,115,116,97,110,100,110,101,97,114,108,121,32,97,108,108,119,1= 14,105, -116,116,101,110,32,98,121,105,110,116,101,114,118,105,101,119,115,34,32,1= 19,105, -100,116,104,61,34,49,119,105,116,104,100,114,97,119,97,108,102,108,111,97= ,116,58 -,108,101,102,116,105,115,32,117,115,117,97,108,108,121,99,97,110,100,105,= 100,97, -116,101,115,110,101,119,115,112,97,112,101,114,115,109,121,115,116,101,11= 4,105, -111,117,115,68,101,112,97,114,116,109,101,110,116,98,101,115,116,32,107,1= 10,111, -119,110,112,97,114,108,105,97,109,101,110,116,115,117,112,112,114,101,115= ,115, -101,100,99,111,110,118,101,110,105,101,110,116,114,101,109,101,109,98,101= ,114, -101,100,100,105,102,102,101,114,101,110,116,32,115,121,115,116,101,109,97= ,116, -105,99,104,97,115,32,108,101,100,32,116,111,112,114,111,112,97,103,97,110= ,100,97 -,99,111,110,116,114,111,108,108,101,100,105,110,102,108,117,101,110,99,10= 1,115, -99,101,114,101,109,111,110,105,97,108,112,114,111,99,108,97,105,109,101,1= 00,80, -114,111,116,101,99,116,105,111,110,108,105,32,99,108,97,115,115,61,34,83,= 99,105, -101,110,116,105,102,105,99,99,108,97,115,115,61,34,110,111,45,116,114,97,= 100,101 -,109,97,114,107,115,109,111,114,101,32,116,104,97,110,32,119,105,100,101,= 115,112 -,114,101,97,100,76,105,98,101,114,97,116,105,111,110,116,111,111,107,32,1= 12,108, -97,99,101,100,97,121,32,111,102,32,116,104,101,97,115,32,108,111,110,103,= 32,97, -115,105,109,112,114,105,115,111,110,101,100,65,100,100,105,116,105,111,11= 0,97, -108,10,60,104,101,97,100,62,10,60,109,76,97,98,111,114,97,116,111,114,121= ,78,111 -,118,101,109,98,101,114,32,50,101,120,99,101,112,116,105,111,110,115,73,1= 10,100, -117,115,116,114,105,97,108,118,97,114,105,101,116,121,32,111,102,102,108,= 111,97, -116,58,32,108,101,102,68,117,114,105,110,103,32,116,104,101,97,115,115,10= 1,115, -115,109,101,110,116,104,97,118,101,32,98,101,101,110,32,100,101,97,108,11= 5,32, -119,105,116,104,83,116,97,116,105,115,116,105,99,115,111,99,99,117,114,11= 4,101, -110,99,101,47,117,108,62,60,47,100,105,118,62,99,108,101,97,114,102,105,1= 20,34, -62,116,104,101,32,112,117,98,108,105,99,109,97,110,121,32,121,101,97,114,= 115,119 -,104,105,99,104,32,119,101,114,101,111,118,101,114,32,116,105,109,101,44,= 115,121 -,110,111,110,121,109,111,117,115,99,111,110,116,101,110,116,34,62,10,112,= 114,101 -,115,117,109,97,98,108,121,104,105,115,32,102,97,109,105,108,121,117,115,= 101,114 -,65,103,101,110,116,46,117,110,101,120,112,101,99,116,101,100,105,110,99,= 108,117 -,100,105,110,103,32,99,104,97,108,108,101,110,103,101,100,97,32,109,105,1= 10,111, -114,105,116,121,117,110,100,101,102,105,110,101,100,34,98,101,108,111,110= ,103, -115,32,116,111,116,97,107,101,110,32,102,114,111,109,105,110,32,79,99,116= ,111,98 -,101,114,112,111,115,105,116,105,111,110,58,32,115,97,105,100,32,116,111,= 32,98, -101,114,101,108,105,103,105,111,117,115,32,70,101,100,101,114,97,116,105,= 111,110 -,32,114,111,119,115,112,97,110,61,34,111,110,108,121,32,97,32,102,101,119= ,109, -101,97,110,116,32,116,104,97,116,108,101,100,32,116,111,32,116,104,101,45= ,45,62, -13,10,60,100,105,118,32,60,102,105,101,108,100,115,101,116,62,65,114,99,1= 04,98, -105,115,104,111,112,32,99,108,97,115,115,61,34,110,111,98,101,105,110,103= ,32,117 -,115,101,100,97,112,112,114,111,97,99,104,101,115,112,114,105,118,105,108= ,101, -103,101,115,110,111,115,99,114,105,112,116,62,10,114,101,115,117,108,116,= 115,32, -105,110,109,97,121,32,98,101,32,116,104,101,69,97,115,116,101,114,32,101,= 103,103 -,109,101,99,104,97,110,105,115,109,115,114,101,97,115,111,110,97,98,108,1= 01,80, -111,112,117,108,97,116,105,111,110,67,111,108,108,101,99,116,105,111,110,= 115,101 -,108,101,99,116,101,100,34,62,110,111,115,99,114,105,112,116,62,13,47,105= ,110, -100,101,120,46,112,104,112,97,114,114,105,118,97,108,32,111,102,45,106,11= 5,115, -100,107,39,41,41,59,109,97,110,97,103,101,100,32,116,111,105,110,99,111,1= 09,112, -108,101,116,101,99,97,115,117,97,108,116,105,101,115,99,111,109,112,108,1= 01,116, -105,111,110,67,104,114,105,115,116,105,97,110,115,83,101,112,116,101,109,= 98,101, -114,32,97,114,105,116,104,109,101,116,105,99,112,114,111,99,101,100,117,1= 14,101, -115,109,105,103,104,116,32,104,97,118,101,80,114,111,100,117,99,116,105,1= 11,110, -105,116,32,97,112,112,101,97,114,115,80,104,105,108,111,115,111,112,104,1= 21,102, -114,105,101,110,100,115,104,105,112,108,101,97,100,105,110,103,32,116,111= ,103, -105,118,105,110,103,32,116,104,101,116,111,119,97,114,100,32,116,104,101,= 103,117 -,97,114,97,110,116,101,101,100,100,111,99,117,109,101,110,116,101,100,99,= 111,108 -,111,114,58,35,48,48,48,118,105,100,101,111,32,103,97,109,101,99,111,109,= 109,105 -,115,115,105,111,110,114,101,102,108,101,99,116,105,110,103,99,104,97,110= ,103, -101,32,116,104,101,97,115,115,111,99,105,97,116,101,100,115,97,110,115,45= ,115, -101,114,105,102,111,110,107,101,121,112,114,101,115,115,59,32,112,97,100,= 100,105 -,110,103,58,72,101,32,119,97,115,32,116,104,101,117,110,100,101,114,108,1= 21,105, -110,103,116,121,112,105,99,97,108,108,121,32,44,32,97,110,100,32,116,104,= 101,32, -115,114,99,69,108,101,109,101,110,116,115,117,99,99,101,115,115,105,118,1= 01,115, -105,110,99,101,32,116,104,101,32,115,104,111,117,108,100,32,98,101,32,110= ,101, -116,119,111,114,107,105,110,103,97,99,99,111,117,110,116,105,110,103,117,= 115,101 -,32,111,102,32,116,104,101,108,111,119,101,114,32,116,104,97,110,115,104,= 111,119 -,115,32,116,104,97,116,60,47,115,112,97,110,62,10,9,9,99,111,109,112,108,= 97,105, -110,116,115,99,111,110,116,105,110,117,111,117,115,113,117,97,110,116,105= ,116, -105,101,115,97,115,116,114,111,110,111,109,101,114,104,101,32,100,105,100= ,32,110 -,111,116,100,117,101,32,116,111,32,105,116,115,97,112,112,108,105,101,100= ,32,116 -,111,97,110,32,97,118,101,114,97,103,101,101,102,102,111,114,116,115,32,1= 16,111, -116,104,101,32,102,117,116,117,114,101,97,116,116,101,109,112,116,32,116,= 111,84, -104,101,114,101,102,111,114,101,44,99,97,112,97,98,105,108,105,116,121,82= ,101, -112,117,98,108,105,99,97,110,119,97,115,32,102,111,114,109,101,100,69,108= ,101,99 -,116,114,111,110,105,99,107,105,108,111,109,101,116,101,114,115,99,104,97= ,108, -108,101,110,103,101,115,112,117,98,108,105,115,104,105,110,103,116,104,10= 1,32, -102,111,114,109,101,114,105,110,100,105,103,101,110,111,117,115,100,105,1= 14,101, -99,116,105,111,110,115,115,117,98,115,105,100,105,97,114,121,99,111,110,1= 15,112, -105,114,97,99,121,100,101,116,97,105,108,115,32,111,102,97,110,100,32,105= ,110,32 -,116,104,101,97,102,102,111,114,100,97,98,108,101,115,117,98,115,116,97,1= 10,99, -101,115,114,101,97,115,111,110,32,102,111,114,99,111,110,118,101,110,116,= 105,111 -,110,105,116,101,109,116,121,112,101,61,34,97,98,115,111,108,117,116,101,= 108,121 -,115,117,112,112,111,115,101,100,108,121,114,101,109,97,105,110,101,100,3= 2,97,97 -,116,116,114,97,99,116,105,118,101,116,114,97,118,101,108,108,105,110,103= ,115, -101,112,97,114,97,116,101,108,121,102,111,99,117,115,101,115,32,111,110,1= 01,108, -101,109,101,110,116,97,114,121,97,112,112,108,105,99,97,98,108,101,102,11= 1,117, -110,100,32,116,104,97,116,115,116,121,108,101,115,104,101,101,116,109,97,= 110,117 -,115,99,114,105,112,116,115,116,97,110,100,115,32,102,111,114,32,110,111,= 45,114, -101,112,101,97,116,40,115,111,109,101,116,105,109,101,115,67,111,109,109,= 101,114 -,99,105,97,108,105,110,32,65,109,101,114,105,99,97,117,110,100,101,114,11= 6,97, -107,101,110,113,117,97,114,116,101,114,32,111,102,97,110,32,101,120,97,10= 9,112, -108,101,112,101,114,115,111,110,97,108,108,121,105,110,100,101,120,46,112= ,104, -112,63,60,47,98,117,116,116,111,110,62,10,112,101,114,99,101,110,116,97,1= 03,101, -98,101,115,116,45,107,110,111,119,110,99,114,101,97,116,105,110,103,32,97= ,34,32, -100,105,114,61,34,108,116,114,76,105,101,117,116,101,110,97,110,116,10,60= ,100, -105,118,32,105,100,61,34,116,104,101,121,32,119,111,117,108,100,97,98,105= ,108, -105,116,121,32,111,102,109,97,100,101,32,117,112,32,111,102,110,111,116,1= 01,100, -32,116,104,97,116,99,108,101,97,114,32,116,104,97,116,97,114,103,117,101,= 32,116, -104,97,116,116,111,32,97,110,111,116,104,101,114,99,104,105,108,100,114,1= 01,110, -39,115,112,117,114,112,111,115,101,32,111,102,102,111,114,109,117,108,97,= 116,101 -,100,98,97,115,101,100,32,117,112,111,110,116,104,101,32,114,101,103,105,= 111,110 -,115,117,98,106,101,99,116,32,111,102,112,97,115,115,101,110,103,101,114,= 115,112 -,111,115,115,101,115,115,105,111,110,46,10,10,73,110,32,116,104,101,32,66= ,101, -102,111,114,101,32,116,104,101,97,102,116,101,114,119,97,114,100,115,99,1= 17,114, -114,101,110,116,108,121,32,97,99,114,111,115,115,32,116,104,101,115,99,10= 5,101, -110,116,105,102,105,99,99,111,109,109,117,110,105,116,121,46,99,97,112,10= 5,116, -97,108,105,115,109,105,110,32,71,101,114,109,97,110,121,114,105,103,104,1= 16,45, -119,105,110,103,116,104,101,32,115,121,115,116,101,109,83,111,99,105,101,= 116,121 -,32,111,102,112,111,108,105,116,105,99,105,97,110,100,105,114,101,99,116,= 105,111 -,110,58,119,101,110,116,32,111,110,32,116,111,114,101,109,111,118,97,108,= 32,111, -102,32,78,101,119,32,89,111,114,107,32,97,112,97,114,116,109,101,110,116,= 115,105 -,110,100,105,99,97,116,105,111,110,100,117,114,105,110,103,32,116,104,101= ,117, -110,108,101,115,115,32,116,104,101,104,105,115,116,111,114,105,99,97,108,= 104,97, -100,32,98,101,101,110,32,97,100,101,102,105,110,105,116,105,118,101,105,1= 10,103, -114,101,100,105,101,110,116,97,116,116,101,110,100,97,110,99,101,67,101,1= 10,116, -101,114,32,102,111,114,112,114,111,109,105,110,101,110,99,101,114,101,97,= 100,121 -,83,116,97,116,101,115,116,114,97,116,101,103,105,101,115,98,117,116,32,1= 05,110, -32,116,104,101,97,115,32,112,97,114,116,32,111,102,99,111,110,115,116,105= ,116, -117,116,101,99,108,97,105,109,32,116,104,97,116,108,97,98,111,114,97,116,= 111,114 -,121,99,111,109,112,97,116,105,98,108,101,102,97,105,108,117,114,101,32,1= 11,102, -44,32,115,117,99,104,32,97,115,32,98,101,103,97,110,32,119,105,116,104,11= 7,115, -105,110,103,32,116,104,101,32,116,111,32,112,114,111,118,105,100,101,102,= 101,97, -116,117,114,101,32,111,102,102,114,111,109,32,119,104,105,99,104,47,34,32= ,99,108 -,97,115,115,61,34,103,101,111,108,111,103,105,99,97,108,115,101,118,101,1= 14,97, -108,32,111,102,100,101,108,105,98,101,114,97,116,101,105,109,112,111,114,= 116,97, -110,116,32,104,111,108,100,115,32,116,104,97,116,105,110,103,38,113,117,1= 11,116, -59,32,118,97,108,105,103,110,61,116,111,112,116,104,101,32,71,101,114,109= ,97,110 -,111,117,116,115,105,100,101,32,111,102,110,101,103,111,116,105,97,116,10= 1,100, -104,105,115,32,99,97,114,101,101,114,115,101,112,97,114,97,116,105,111,11= 0,105, -100,61,34,115,101,97,114,99,104,119,97,115,32,99,97,108,108,101,100,116,1= 04,101, -32,102,111,117,114,116,104,114,101,99,114,101,97,116,105,111,110,111,116,= 104,101 -,114,32,116,104,97,110,112,114,101,118,101,110,116,105,111,110,119,104,10= 5,108, -101,32,116,104,101,32,101,100,117,99,97,116,105,111,110,44,99,111,110,110= ,101,99 -,116,105,110,103,97,99,99,117,114,97,116,101,108,121,119,101,114,101,32,9= 8,117, -105,108,116,119,97,115,32,107,105,108,108,101,100,97,103,114,101,101,109,= 101,110 -,116,115,109,117,99,104,32,109,111,114,101,32,68,117,101,32,116,111,32,11= 6,104, -101,119,105,100,116,104,58,32,49,48,48,115,111,109,101,32,111,116,104,101= ,114,75 -,105,110,103,100,111,109,32,111,102,116,104,101,32,101,110,116,105,114,10= 1,102, -97,109,111,117,115,32,102,111,114,116,111,32,99,111,110,110,101,99,116,11= 1,98, -106,101,99,116,105,118,101,115,116,104,101,32,70,114,101,110,99,104,112,1= 01,111, -112,108,101,32,97,110,100,102,101,97,116,117,114,101,100,34,62,105,115,32= ,115,97 -,105,100,32,116,111,115,116,114,117,99,116,117,114,97,108,114,101,102,101= ,114, -101,110,100,117,109,109,111,115,116,32,111,102,116,101,110,97,32,115,101,= 112,97, -114,97,116,101,45,62,10,60,100,105,118,32,105,100,32,79,102,102,105,99,10= 5,97, -108,32,119,111,114,108,100,119,105,100,101,46,97,114,105,97,45,108,97,98,= 101,108 -,116,104,101,32,112,108,97,110,101,116,97,110,100,32,105,116,32,119,97,11= 5,100, -34,32,118,97,108,117,101,61,34,108,111,111,107,105,110,103,32,97,116,98,1= 01,110, -101,102,105,99,105,97,108,97,114,101,32,105,110,32,116,104,101,109,111,11= 0,105, -116,111,114,105,110,103,114,101,112,111,114,116,101,100,108,121,116,104,1= 01,32, -109,111,100,101,114,110,119,111,114,107,105,110,103,32,111,110,97,108,108= ,111, -119,101,100,32,116,111,119,104,101,114,101,32,116,104,101,32,105,110,110,= 111,118 -,97,116,105,118,101,60,47,97,62,60,47,100,105,118,62,115,111,117,110,100,= 116,114 -,97,99,107,115,101,97,114,99,104,70,111,114,109,116,101,110,100,32,116,11= 1,32,98 -,101,105,110,112,117,116,32,105,100,61,34,111,112,101,110,105,110,103,32,= 111,102 -,114,101,115,116,114,105,99,116,101,100,97,100,111,112,116,101,100,32,98,= 121,97, -100,100,114,101,115,115,105,110,103,116,104,101,111,108,111,103,105,97,11= 0,109, -101,116,104,111,100,115,32,111,102,118,97,114,105,97,110,116,32,111,102,6= 7,104, -114,105,115,116,105,97,110,32,118,101,114,121,32,108,97,114,103,101,97,11= 7,116, -111,109,111,116,105,118,101,98,121,32,102,97,114,32,116,104,101,114,97,11= 0,103, -101,32,102,114,111,109,112,117,114,115,117,105,116,32,111,102,102,111,108= ,108, -111,119,32,116,104,101,98,114,111,117,103,104,116,32,116,111,105,110,32,6= 9,110, -103,108,97,110,100,97,103,114,101,101,32,116,104,97,116,97,99,99,117,115,= 101,100 -,32,111,102,99,111,109,101,115,32,102,114,111,109,112,114,101,118,101,110= ,116, -105,110,103,100,105,118,32,115,116,121,108,101,61,104,105,115,32,111,114,= 32,104, -101,114,116,114,101,109,101,110,100,111,117,115,102,114,101,101,100,111,1= 09,32, -111,102,99,111,110,99,101,114,110,105,110,103,48,32,49,101,109,32,49,101,= 109,59, -66,97,115,107,101,116,98,97,108,108,47,115,116,121,108,101,46,99,115,115,= 97,110, -32,101,97,114,108,105,101,114,101,118,101,110,32,97,102,116,101,114,47,34= ,32,116 -,105,116,108,101,61,34,46,99,111,109,47,105,110,100,101,120,116,97,107,10= 5,110, -103,32,116,104,101,112,105,116,116,115,98,117,114,103,104,99,111,110,116,= 101,110 -,116,34,62,13,60,115,99,114,105,112,116,62,40,102,116,117,114,110,101,100= ,32,111 -,117,116,104,97,118,105,110,103,32,116,104,101,60,47,115,112,97,110,62,13= ,10,32, -111,99,99,97,115,105,111,110,97,108,98,101,99,97,117,115,101,32,105,116,1= 15,116, -97,114,116,101,100,32,116,111,112,104,121,115,105,99,97,108,108,121,62,60= ,47,100 -,105,118,62,10,32,32,99,114,101,97,116,101,100,32,98,121,67,117,114,114,1= 01,110, -116,108,121,44,32,98,103,99,111,108,111,114,61,34,116,97,98,105,110,100,1= 01,120, -61,34,100,105,115,97,115,116,114,111,117,115,65,110,97,108,121,116,105,99= ,115,32 -,97,108,115,111,32,104,97,115,32,97,62,60,100,105,118,32,105,100,61,34,60= ,47,115 -,116,121,108,101,62,10,60,99,97,108,108,101,100,32,102,111,114,115,105,11= 0,103, -101,114,32,97,110,100,46,115,114,99,32,61,32,34,47,47,118,105,111,108,97,= 116,105 -,111,110,115,116,104,105,115,32,112,111,105,110,116,99,111,110,115,116,97= ,110, -116,108,121,105,115,32,108,111,99,97,116,101,100,114,101,99,111,114,100,1= 05,110, -103,115,100,32,102,114,111,109,32,116,104,101,110,101,100,101,114,108,97,= 110,100 -,115,112,111,114,116,117,103,117,195,170,115,215,162,215,145,215,168,215,= 153,215 -,170,217,129,216,167,216,177,216,179,219,140,100,101,115,97,114,114,111,1= 08,108, -111,99,111,109,101,110,116,97,114,105,111,101,100,117,99,97,99,105,195,17= 9,110, -115,101,112,116,105,101,109,98,114,101,114,101,103,105,115,116,114,97,100= ,111, -100,105,114,101,99,99,105,195,179,110,117,98,105,99,97,99,105,195,179,110= ,112, -117,98,108,105,99,105,100,97,100,114,101,115,112,117,101,115,116,97,115,1= 14,101, -115,117,108,116,97,100,111,115,105,109,112,111,114,116,97,110,116,101,114= ,101, -115,101,114,118,97,100,111,115,97,114,116,195,173,99,117,108,111,115,100,= 105,102 -,101,114,101,110,116,101,115,115,105,103,117,105,101,110,116,101,115,114,= 101,112 -,195,186,98,108,105,99,97,115,105,116,117,97,99,105,195,179,110,109,105,1= 10,105, -115,116,101,114,105,111,112,114,105,118,97,99,105,100,97,100,100,105,114,= 101,99, -116,111,114,105,111,102,111,114,109,97,99,105,195,179,110,112,111,98,108,= 97,99, -105,195,179,110,112,114,101,115,105,100,101,110,116,101,99,111,110,116,10= 1,110, -105,100,111,115,97,99,99,101,115,111,114,105,111,115,116,101,99,104,110,1= 11,114, -97,116,105,112,101,114,115,111,110,97,108,101,115,99,97,116,101,103,111,1= 14,195, -173,97,101,115,112,101,99,105,97,108,101,115,100,105,115,112,111,110,105,= 98,108, -101,97,99,116,117,97,108,105,100,97,100,114,101,102,101,114,101,110,99,10= 5,97, -118,97,108,108,97,100,111,108,105,100,98,105,98,108,105,111,116,101,99,97= ,114, -101,108,97,99,105,111,110,101,115,99,97,108,101,110,100,97,114,105,111,11= 2,111, -108,195,173,116,105,99,97,115,97,110,116,101,114,105,111,114,101,115,100,= 111,99, -117,109,101,110,116,111,115,110,97,116,117,114,97,108,101,122,97,109,97,1= 16,101, -114,105,97,108,101,115,100,105,102,101,114,101,110,99,105,97,101,99,111,1= 10,195, -179,109,105,99,97,116,114,97,110,115,112,111,114,116,101,114,111,100,114,= 195,173 -,103,117,101,122,112,97,114,116,105,99,105,112,97,114,101,110,99,117,101,= 110,116 -,114,97,110,100,105,115,99,117,115,105,195,179,110,101,115,116,114,117,99= ,116, -117,114,97,102,117,110,100,97,99,105,195,179,110,102,114,101,99,117,101,1= 10,116, -101,115,112,101,114,109,97,110,101,110,116,101,116,111,116,97,108,109,101= ,110, -116,101,208,188,208,190,208,182,208,189,208,190,208,177,209,131,208,180,2= 08,181, -209,130,208,188,208,190,208,182,208,181,209,130,208,178,209,128,208,181,2= 08,188, -209,143,209,130,208,176,208,186,208,182,208,181,209,135,209,130,208,190,2= 08,177, -209,139,208,177,208,190,208,187,208,181,208,181,208,190,209,135,208,181,2= 08,189, -209,140,209,141,209,130,208,190,208,179,208,190,208,186,208,190,208,179,2= 08,180, -208,176,208,191,208,190,209,129,208,187,208,181,208,178,209,129,208,181,2= 08,179, -208,190,209,129,208,176,208,185,209,130,208,181,209,135,208,181,209,128,2= 08,181, -208,183,208,188,208,190,208,179,209,131,209,130,209,129,208,176,208,185,2= 09,130, -208,176,208,182,208,184,208,183,208,189,208,184,208,188,208,181,208,182,2= 08,180, -209,131,208,177,209,131,208,180,209,131,209,130,208,159,208,190,208,184,2= 09,129, -208,186,208,183,208,180,208,181,209,129,209,140,208,178,208,184,208,180,2= 08,181, -208,190,209,129,208,178,209,143,208,183,208,184,208,189,209,131,208,182,2= 08,189, -208,190,209,129,208,178,208,190,208,181,208,185,208,187,209,142,208,180,2= 08,181, -208,185,208,191,208,190,209,128,208,189,208,190,208,188,208,189,208,190,2= 08,179, -208,190,208,180,208,181,209,130,208,181,208,185,209,129,208,178,208,190,2= 08,184, -209,133,208,191,209,128,208,176,208,178,208,176,209,130,208,176,208,186,2= 08,190, -208,185,208,188,208,181,209,129,209,130,208,190,208,184,208,188,208,181,2= 08,181, -209,130,208,182,208,184,208,183,208,189,209,140,208,190,208,180,208,189,2= 08,190, -208,185,208,187,209,131,209,135,209,136,208,181,208,191,208,181,209,128,2= 08,181, -208,180,209,135,208,176,209,129,209,130,208,184,209,135,208,176,209,129,2= 09,130, -209,140,209,128,208,176,208,177,208,190,209,130,208,189,208,190,208,178,2= 09,139, -209,133,208,191,209,128,208,176,208,178,208,190,209,129,208,190,208,177,2= 08,190, -208,185,208,191,208,190,209,130,208,190,208,188,208,188,208,181,208,189,2= 08,181, -208,181,209,135,208,184,209,129,208,187,208,181,208,189,208,190,208,178,2= 09,139, -208,181,209,131,209,129,208,187,209,131,208,179,208,190,208,186,208,190,2= 08,187, -208,190,208,189,208,176,208,183,208,176,208,180,209,130,208,176,208,186,2= 08,190, -208,181,209,130,208,190,208,179,208,180,208,176,208,191,208,190,209,135,2= 09,130, -208,184,208,159,208,190,209,129,208,187,208,181,209,130,208,176,208,186,2= 08,184, -208,181,208,189,208,190,208,178,209,139,208,185,209,129,209,130,208,190,2= 08,184, -209,130,209,130,208,176,208,186,208,184,209,133,209,129,209,128,208,176,2= 08,183, -209,131,208,161,208,176,208,189,208,186,209,130,209,132,208,190,209,128,2= 09,131, -208,188,208,154,208,190,208,179,208,180,208,176,208,186,208,189,208,184,2= 08,179, -208,184,209,129,208,187,208,190,208,178,208,176,208,189,208,176,209,136,2= 08,181, -208,185,208,189,208,176,208,185,209,130,208,184,209,129,208,178,208,190,2= 08,184, -208,188,209,129,208,178,209,143,208,183,209,140,208,187,209,142,208,177,2= 08,190, -208,185,209,135,208,176,209,129,209,130,208,190,209,129,209,128,208,181,2= 08,180, -208,184,208,154,209,128,208,190,208,188,208,181,208,164,208,190,209,128,2= 09,131, -208,188,209,128,209,139,208,189,208,186,208,181,209,129,209,130,208,176,2= 08,187, -208,184,208,191,208,190,208,184,209,129,208,186,209,130,209,139,209,129,2= 09,143, -209,135,208,188,208,181,209,129,209,143,209,134,209,134,208,181,208,189,2= 09,130, -209,128,209,130,209,128,209,131,208,180,208,176,209,129,208,176,208,188,2= 09,139, -209,133,209,128,209,139,208,189,208,186,208,176,208,157,208,190,208,178,2= 09,139, -208,185,209,135,208,176,209,129,208,190,208,178,208,188,208,181,209,129,2= 09,130, -208,176,209,132,208,184,208,187,209,140,208,188,208,188,208,176,209,128,2= 09,130, -208,176,209,129,209,130,209,128,208,176,208,189,208,188,208,181,209,129,2= 09,130, -208,181,209,130,208,181,208,186,209,129,209,130,208,189,208,176,209,136,2= 08,184, -209,133,208,188,208,184,208,189,209,131,209,130,208,184,208,188,208,181,2= 08,189, -208,184,208,184,208,188,208,181,209,142,209,130,208,189,208,190,208,188,2= 08,181, -209,128,208,179,208,190,209,128,208,190,208,180,209,129,208,176,208,188,2= 08,190, -208,188,209,141,209,130,208,190,208,188,209,131,208,186,208,190,208,189,2= 09,134, -208,181,209,129,208,178,208,190,208,181,208,188,208,186,208,176,208,186,2= 08,190, -208,185,208,144,209,128,209,133,208,184,208,178,217,133,217,134,216,170,2= 16,175, -217,137,216,165,216,177,216,179,216,167,217,132,216,177,216,179,216,167,2= 17,132, -216,169,216,167,217,132,216,185,216,167,217,133,217,131,216,170,216,168,2= 17,135, -216,167,216,168,216,177,216,167,217,133,216,172,216,167,217,132,217,138,2= 17,136, -217,133,216,167,217,132,216,181,217,136,216,177,216,172,216,175,217,138,2= 16,175, -216,169,216,167,217,132,216,185,216,182,217,136,216,165,216,182,216,167,2= 17,129, -216,169,216,167,217,132,217,130,216,179,217,133,216,167,217,132,216,185,2= 16,167, -216,168,216,170,216,173,217,133,217,138,217,132,217,133,217,132,217,129,2= 16,167, -216,170,217,133,217,132,216,170,217,130,217,137,216,170,216,185,216,175,2= 17,138, -217,132,216,167,217,132,216,180,216,185,216,177,216,163,216,174,216,168,2= 16,167, -216,177,216,170,216,183,217,136,217,138,216,177,216,185,217,132,217,138,2= 17,131, -217,133,216,165,216,177,217,129,216,167,217,130,216,183,217,132,216,168,2= 16,167, -216,170,216,167,217,132,217,132,216,186,216,169,216,170,216,177,216,170,2= 17,138, -216,168,216,167,217,132,217,134,216,167,216,179,216,167,217,132,216,180,2= 17,138, -216,174,217,133,217,134,216,170,216,175,217,138,216,167,217,132,216,185,2= 16,177, -216,168,216,167,217,132,217,130,216,181,216,181,216,167,217,129,217,132,2= 16,167, -217,133,216,185,217,132,217,138,217,135,216,167,216,170,216,173,216,175,2= 17,138, -216,171,216,167,217,132,217,132,217,135,217,133,216,167,217,132,216,185,2= 17,133, -217,132,217,133,217,131,216,170,216,168,216,169,217,138,217,133,217,131,2= 17,134, -217,131,216,167,217,132,216,183,217,129,217,132,217,129,217,138,216,175,2= 17,138, -217,136,216,165,216,175,216,167,216,177,216,169,216,170,216,167,216,177,2= 17,138, -216,174,216,167,217,132,216,181,216,173,216,169,216,170,216,179,216,172,2= 17,138, -217,132,216,167,217,132,217,136,217,130,216,170,216,185,217,134,216,175,2= 17,133, -216,167,217,133,216,175,217,138,217,134,216,169,216,170,216,181,217,133,2= 17,138, -217,133,216,163,216,177,216,180,217,138,217,129,216,167,217,132,216,176,2= 17,138, -217,134,216,185,216,177,216,168,217,138,216,169,216,168,217,136,216,167,2= 16,168, -216,169,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,179,2= 17,129, -216,177,217,133,216,180,216,167,217,131,217,132,216,170,216,185,216,167,2= 17,132, -217,137,216,167,217,132,216,163,217,136,217,132,216,167,217,132,216,179,2= 17,134, -216,169,216,172,216,167,217,133,216,185,216,169,216,167,217,132,216,181,2= 16,173, -217,129,216,167,217,132,216,175,217,138,217,134,217,131,217,132,217,133,2= 16,167, -216,170,216,167,217,132,216,174,216,167,216,181,216,167,217,132,217,133,2= 17,132, -217,129,216,163,216,185,216,182,216,167,216,161,217,131,216,170,216,167,2= 16,168, -216,169,216,167,217,132,216,174,217,138,216,177,216,177,216,179,216,167,2= 16,166, -217,132,216,167,217,132,217,130,217,132,216,168,216,167,217,132,216,163,2= 16,175, -216,168,217,133,217,130,216,167,216,183,216,185,217,133,216,177,216,167,2= 16,179, -217,132,217,133,217,134,216,183,217,130,216,169,216,167,217,132,217,131,2= 16,170, -216,168,216,167,217,132,216,177,216,172,217,132,216,167,216,180,216,170,2= 16,177, -217,131,216,167,217,132,217,130,216,175,217,133,217,138,216,185,216,183,2= 17,138, -217,131,115,66,121,84,97,103,78,97,109,101,40,46,106,112,103,34,32,97,108= ,116,61 -,34,49,112,120,32,115,111,108,105,100,32,35,46,103,105,102,34,32,97,108,1= 16,61, -34,116,114,97,110,115,112,97,114,101,110,116,105,110,102,111,114,109,97,1= 16,105, -111,110,97,112,112,108,105,99,97,116,105,111,110,34,32,111,110,99,108,105= ,99,107 -,61,34,101,115,116,97,98,108,105,115,104,101,100,97,100,118,101,114,116,1= 05,115, -105,110,103,46,112,110,103,34,32,97,108,116,61,34,101,110,118,105,114,111= ,110, -109,101,110,116,112,101,114,102,111,114,109,97,110,99,101,97,112,112,114,= 111,112 -,114,105,97,116,101,38,97,109,112,59,109,100,97,115,104,59,105,109,109,10= 1,100, -105,97,116,101,108,121,60,47,115,116,114,111,110,103,62,60,47,114,97,116,= 104,101 -,114,32,116,104,97,110,116,101,109,112,101,114,97,116,117,114,101,100,101= ,118, -101,108,111,112,109,101,110,116,99,111,109,112,101,116,105,116,105,111,11= 0,112, -108,97,99,101,104,111,108,100,101,114,118,105,115,105,98,105,108,105,116,= 121,58, -99,111,112,121,114,105,103,104,116,34,62,48,34,32,104,101,105,103,104,116= ,61,34, -101,118,101,110,32,116,104,111,117,103,104,114,101,112,108,97,99,101,109,= 101,110 -,116,100,101,115,116,105,110,97,116,105,111,110,67,111,114,112,111,114,97= ,116, -105,111,110,60,117,108,32,99,108,97,115,115,61,34,65,115,115,111,99,105,9= 7,116, -105,111,110,105,110,100,105,118,105,100,117,97,108,115,112,101,114,115,11= 2,101, -99,116,105,118,101,115,101,116,84,105,109,101,111,117,116,40,117,114,108,= 40,104, -116,116,112,58,47,47,109,97,116,104,101,109,97,116,105,99,115,109,97,114,= 103,105 -,110,45,116,111,112,58,101,118,101,110,116,117,97,108,108,121,32,100,101,= 115,99, -114,105,112,116,105,111,110,41,32,110,111,45,114,101,112,101,97,116,99,11= 1,108, -108,101,99,116,105,111,110,115,46,74,80,71,124,116,104,117,109,98,124,112= ,97,114 -,116,105,99,105,112,97,116,101,47,104,101,97,100,62,60,98,111,100,121,102= ,108, -111,97,116,58,108,101,102,116,59,60,108,105,32,99,108,97,115,115,61,34,10= 4,117, -110,100,114,101,100,115,32,111,102,10,10,72,111,119,101,118,101,114,44,32= ,99,111 -,109,112,111,115,105,116,105,111,110,99,108,101,97,114,58,98,111,116,104,= 59,99, -111,111,112,101,114,97,116,105,111,110,119,105,116,104,105,110,32,116,104= ,101,32 -,108,97,98,101,108,32,102,111,114,61,34,98,111,114,100,101,114,45,116,111= ,112,58 -,78,101,119,32,90,101,97,108,97,110,100,114,101,99,111,109,109,101,110,10= 0,101, -100,112,104,111,116,111,103,114,97,112,104,121,105,110,116,101,114,101,11= 5,116, -105,110,103,38,108,116,59,115,117,112,38,103,116,59,99,111,110,116,114,11= 1,118, -101,114,115,121,78,101,116,104,101,114,108,97,110,100,115,97,108,116,101,= 114,110 -,97,116,105,118,101,109,97,120,108,101,110,103,116,104,61,34,115,119,105,= 116,122 -,101,114,108,97,110,100,68,101,118,101,108,111,112,109,101,110,116,101,11= 5,115, -101,110,116,105,97,108,108,121,10,10,65,108,116,104,111,117,103,104,32,60= ,47,116 -,101,120,116,97,114,101,97,62,116,104,117,110,100,101,114,98,105,114,100,= 114,101 -,112,114,101,115,101,110,116,101,100,38,97,109,112,59,110,100,97,115,104,= 59,115, -112,101,99,117,108,97,116,105,111,110,99,111,109,109,117,110,105,116,105,= 101,115 -,108,101,103,105,115,108,97,116,105,111,110,101,108,101,99,116,114,111,11= 0,105, -99,115,10,9,60,100,105,118,32,105,100,61,34,105,108,108,117,115,116,114,9= 7,116, -101,100,101,110,103,105,110,101,101,114,105,110,103,116,101,114,114,105,1= 16,111, -114,105,101,115,97,117,116,104,111,114,105,116,105,101,115,100,105,115,11= 6,114, -105,98,117,116,101,100,54,34,32,104,101,105,103,104,116,61,34,115,97,110,= 115,45, -115,101,114,105,102,59,99,97,112,97,98,108,101,32,111,102,32,100,105,115,= 97,112, -112,101,97,114,101,100,105,110,116,101,114,97,99,116,105,118,101,108,111,= 111,107 -,105,110,103,32,102,111,114,105,116,32,119,111,117,108,100,32,98,101,65,1= 02,103, -104,97,110,105,115,116,97,110,119,97,115,32,99,114,101,97,116,101,100,77,= 97,116, -104,46,102,108,111,111,114,40,115,117,114,114,111,117,110,100,105,110,103= ,99,97, -110,32,97,108,115,111,32,98,101,111,98,115,101,114,118,97,116,105,111,110= ,109,97 -,105,110,116,101,110,97,110,99,101,101,110,99,111,117,110,116,101,114,101= ,100,60 -,104,50,32,99,108,97,115,115,61,34,109,111,114,101,32,114,101,99,101,110,= 116,105 -,116,32,104,97,115,32,98,101,101,110,105,110,118,97,115,105,111,110,32,11= 1,102, -41,46,103,101,116,84,105,109,101,40,41,102,117,110,100,97,109,101,110,116= ,97,108 -,68,101,115,112,105,116,101,32,116,104,101,34,62,60,100,105,118,32,105,10= 0,61,34 -,105,110,115,112,105,114,97,116,105,111,110,101,120,97,109,105,110,97,116= ,105, -111,110,112,114,101,112,97,114,97,116,105,111,110,101,120,112,108,97,110,= 97,116, -105,111,110,60,105,110,112,117,116,32,105,100,61,34,60,47,97,62,60,47,115= ,112,97 -,110,62,118,101,114,115,105,111,110,115,32,111,102,105,110,115,116,114,11= 7,109, -101,110,116,115,98,101,102,111,114,101,32,116,104,101,32,32,61,32,39,104,= 116,116 -,112,58,47,47,68,101,115,99,114,105,112,116,105,111,110,114,101,108,97,11= 6,105, -118,101,108,121,32,46,115,117,98,115,116,114,105,110,103,40,101,97,99,104= ,32,111 -,102,32,116,104,101,101,120,112,101,114,105,109,101,110,116,115,105,110,1= 02,108, -117,101,110,116,105,97,108,105,110,116,101,103,114,97,116,105,111,110,109= ,97,110 -,121,32,112,101,111,112,108,101,100,117,101,32,116,111,32,116,104,101,32,= 99,111, -109,98,105,110,97,116,105,111,110,100,111,32,110,111,116,32,104,97,118,10= 1,77, -105,100,100,108,101,32,69,97,115,116,60,110,111,115,99,114,105,112,116,62= ,60,99, -111,112,121,114,105,103,104,116,34,32,112,101,114,104,97,112,115,32,116,1= 04,101, -105,110,115,116,105,116,117,116,105,111,110,105,110,32,68,101,99,101,109,= 98,101, -114,97,114,114,97,110,103,101,109,101,110,116,109,111,115,116,32,102,97,1= 09,111, -117,115,112,101,114,115,111,110,97,108,105,116,121,99,114,101,97,116,105,= 111,110 -,32,111,102,108,105,109,105,116,97,116,105,111,110,115,101,120,99,108,117= ,115, -105,118,101,108,121,115,111,118,101,114,101,105,103,110,116,121,45,99,111= ,110, -116,101,110,116,34,62,10,60,116,100,32,99,108,97,115,115,61,34,117,110,10= 0,101, -114,103,114,111,117,110,100,112,97,114,97,108,108,101,108,32,116,111,100,= 111,99, -116,114,105,110,101,32,111,102,111,99,99,117,112,105,101,100,32,98,121,11= 6,101, -114,109,105,110,111,108,111,103,121,82,101,110,97,105,115,115,97,110,99,1= 01,97, -32,110,117,109,98,101,114,32,111,102,115,117,112,112,111,114,116,32,102,1= 11,114, -101,120,112,108,111,114,97,116,105,111,110,114,101,99,111,103,110,105,116= ,105, -111,110,112,114,101,100,101,99,101,115,115,111,114,60,105,109,103,32,115,= 114,99, -61,34,47,60,104,49,32,99,108,97,115,115,61,34,112,117,98,108,105,99,97,11= 6,105, -111,110,109,97,121,32,97,108,115,111,32,98,101,115,112,101,99,105,97,108,= 105,122 -,101,100,60,47,102,105,101,108,100,115,101,116,62,112,114,111,103,114,101= ,115, -115,105,118,101,109,105,108,108,105,111,110,115,32,111,102,115,116,97,116= ,101, -115,32,116,104,97,116,101,110,102,111,114,99,101,109,101,110,116,97,114,1= 11,117, -110,100,32,116,104,101,32,111,110,101,32,97,110,111,116,104,101,114,46,11= 2,97, -114,101,110,116,78,111,100,101,97,103,114,105,99,117,108,116,117,114,101,= 65,108, -116,101,114,110,97,116,105,118,101,114,101,115,101,97,114,99,104,101,114,= 115,116 -,111,119,97,114,100,115,32,116,104,101,77,111,115,116,32,111,102,32,116,1= 04,101, -109,97,110,121,32,111,116,104,101,114,32,40,101,115,112,101,99,105,97,108= ,108, -121,60,116,100,32,119,105,100,116,104,61,34,59,119,105,100,116,104,58,49,= 48,48, -37,105,110,100,101,112,101,110,100,101,110,116,60,104,51,32,99,108,97,115= ,115,61 -,34,32,111,110,99,104,97,110,103,101,61,34,41,46,97,100,100,67,108,97,115= ,115,40 -,105,110,116,101,114,97,99,116,105,111,110,79,110,101,32,111,102,32,116,1= 04,101, -32,100,97,117,103,104,116,101,114,32,111,102,97,99,99,101,115,115,111,114= ,105, -101,115,98,114,97,110,99,104,101,115,32,111,102,13,10,60,100,105,118,32,1= 05,100, -61,34,116,104,101,32,108,97,114,103,101,115,116,100,101,99,108,97,114,97,= 116,105 -,111,110,114,101,103,117,108,97,116,105,111,110,115,73,110,102,111,114,10= 9,97, -116,105,111,110,116,114,97,110,115,108,97,116,105,111,110,100,111,99,117,= 109,101 -,110,116,97,114,121,105,110,32,111,114,100,101,114,32,116,111,34,62,10,60= ,104, -101,97,100,62,10,60,34,32,104,101,105,103,104,116,61,34,49,97,99,114,111,= 115,115 -,32,116,104,101,32,111,114,105,101,110,116,97,116,105,111,110,41,59,60,47= ,115,99 -,114,105,112,116,62,105,109,112,108,101,109,101,110,116,101,100,99,97,110= ,32,98, -101,32,115,101,101,110,116,104,101,114,101,32,119,97,115,32,97,100,101,10= 9,111, -110,115,116,114,97,116,101,99,111,110,116,97,105,110,101,114,34,62,99,111= ,110, -110,101,99,116,105,111,110,115,116,104,101,32,66,114,105,116,105,115,104,= 119,97, -115,32,119,114,105,116,116,101,110,33,105,109,112,111,114,116,97,110,116,= 59,112, -120,59,32,109,97,114,103,105,110,45,102,111,108,108,111,119,101,100,32,98= ,121,97 -,98,105,108,105,116,121,32,116,111,32,99,111,109,112,108,105,99,97,116,10= 1,100, -100,117,114,105,110,103,32,116,104,101,32,105,109,109,105,103,114,97,116,= 105,111 -,110,97,108,115,111,32,99,97,108,108,101,100,60,104,52,32,99,108,97,115,1= 15,61, -34,100,105,115,116,105,110,99,116,105,111,110,114,101,112,108,97,99,101,1= 00,32, -98,121,103,111,118,101,114,110,109,101,110,116,115,108,111,99,97,116,105,= 111,110 -,32,111,102,105,110,32,78,111,118,101,109,98,101,114,119,104,101,116,104,= 101,114 -,32,116,104,101,60,47,112,62,10,60,47,100,105,118,62,97,99,113,117,105,11= 5,105, -116,105,111,110,99,97,108,108,101,100,32,116,104,101,32,112,101,114,115,1= 01,99, -117,116,105,111,110,100,101,115,105,103,110,97,116,105,111,110,123,102,11= 1,110, -116,45,115,105,122,101,58,97,112,112,101,97,114,101,100,32,105,110,105,11= 0,118, -101,115,116,105,103,97,116,101,101,120,112,101,114,105,101,110,99,101,100= ,109, -111,115,116,32,108,105,107,101,108,121,119,105,100,101,108,121,32,117,115= ,101, -100,100,105,115,99,117,115,115,105,111,110,115,112,114,101,115,101,110,99= ,101,32 -,111,102,32,40,100,111,99,117,109,101,110,116,46,101,120,116,101,110,115,= 105,118 -,101,108,121,73,116,32,104,97,115,32,98,101,101,110,105,116,32,100,111,10= 1,115, -32,110,111,116,99,111,110,116,114,97,114,121,32,116,111,105,110,104,97,98= ,105, -116,97,110,116,115,105,109,112,114,111,118,101,109,101,110,116,115,99,104= ,111, -108,97,114,115,104,105,112,99,111,110,115,117,109,112,116,105,111,110,105= ,110, -115,116,114,117,99,116,105,111,110,102,111,114,32,101,120,97,109,112,108,= 101,111 -,110,101,32,111,114,32,109,111,114,101,112,120,59,32,112,97,100,100,105,1= 10,103, -116,104,101,32,99,117,114,114,101,110,116,97,32,115,101,114,105,101,115,3= 2,111, -102,97,114,101,32,117,115,117,97,108,108,121,114,111,108,101,32,105,110,3= 2,116, -104,101,112,114,101,118,105,111,117,115,108,121,32,100,101,114,105,118,97= ,116, -105,118,101,115,101,118,105,100,101,110,99,101,32,111,102,101,120,112,101= ,114, -105,101,110,99,101,115,99,111,108,111,114,115,99,104,101,109,101,115,116,= 97,116, -101,100,32,116,104,97,116,99,101,114,116,105,102,105,99,97,116,101,60,47,= 97,62, -60,47,100,105,118,62,10,32,115,101,108,101,99,116,101,100,61,34,104,105,1= 03,104, -32,115,99,104,111,111,108,114,101,115,112,111,110,115,101,32,116,111,99,1= 11,109, -102,111,114,116,97,98,108,101,97,100,111,112,116,105,111,110,32,111,102,1= 16,104, -114,101,101,32,121,101,97,114,115,116,104,101,32,99,111,117,110,116,114,1= 21,105, -110,32,70,101,98,114,117,97,114,121,115,111,32,116,104,97,116,32,116,104,= 101,112 -,101,111,112,108,101,32,119,104,111,32,112,114,111,118,105,100,101,100,32= ,98,121 -,60,112,97,114,97,109,32,110,97,109,101,97,102,102,101,99,116,101,100,32,= 98,121, -105,110,32,116,101,114,109,115,32,111,102,97,112,112,111,105,110,116,109,= 101,110 -,116,73,83,79,45,56,56,53,57,45,49,34,119,97,115,32,98,111,114,110,32,105= ,110, -104,105,115,116,111,114,105,99,97,108,32,114,101,103,97,114,100,101,100,3= 2,97, -115,109,101,97,115,117,114,101,109,101,110,116,105,115,32,98,97,115,101,1= 00,32, -111,110,32,97,110,100,32,111,116,104,101,114,32,58,32,102,117,110,99,116,= 105,111 -,110,40,115,105,103,110,105,102,105,99,97,110,116,99,101,108,101,98,114,9= 7,116, -105,111,110,116,114,97,110,115,109,105,116,116,101,100,47,106,115,47,106,= 113,117 -,101,114,121,46,105,115,32,107,110,111,119,110,32,97,115,116,104,101,111,= 114,101 -,116,105,99,97,108,32,116,97,98,105,110,100,101,120,61,34,105,116,32,99,1= 11,117, -108,100,32,98,101,60,110,111,115,99,114,105,112,116,62,10,104,97,118,105,= 110,103 -,32,98,101,101,110,13,10,60,104,101,97,100,62,13,10,60,32,38,113,117,111,= 116,59, -84,104,101,32,99,111,109,112,105,108,97,116,105,111,110,104,101,32,104,97= ,100,32 -,98,101,101,110,112,114,111,100,117,99,101,100,32,98,121,112,104,105,108,= 111,115 -,111,112,104,101,114,99,111,110,115,116,114,117,99,116,101,100,105,110,11= 6,101, -110,100,101,100,32,116,111,97,109,111,110,103,32,111,116,104,101,114,99,1= 11,109, -112,97,114,101,100,32,116,111,116,111,32,115,97,121,32,116,104,97,116,69,= 110,103 -,105,110,101,101,114,105,110,103,97,32,100,105,102,102,101,114,101,110,11= 6,114, -101,102,101,114,114,101,100,32,116,111,100,105,102,102,101,114,101,110,99= ,101, -115,98,101,108,105,101,102,32,116,104,97,116,112,104,111,116,111,103,114,= 97,112, -104,115,105,100,101,110,116,105,102,121,105,110,103,72,105,115,116,111,11= 4,121, -32,111,102,32,82,101,112,117,98,108,105,99,32,111,102,110,101,99,101,115,= 115,97, -114,105,108,121,112,114,111,98,97,98,105,108,105,116,121,116,101,99,104,1= 10,105, -99,97,108,108,121,108,101,97,118,105,110,103,32,116,104,101,115,112,101,9= 9,116, -97,99,117,108,97,114,102,114,97,99,116,105,111,110,32,111,102,101,108,101= ,99,116 -,114,105,99,105,116,121,104,101,97,100,32,111,102,32,116,104,101,114,101,= 115,116 -,97,117,114,97,110,116,115,112,97,114,116,110,101,114,115,104,105,112,101= ,109, -112,104,97,115,105,115,32,111,110,109,111,115,116,32,114,101,99,101,110,1= 16,115, -104,97,114,101,32,119,105,116,104,32,115,97,121,105,110,103,32,116,104,97= ,116, -102,105,108,108,101,100,32,119,105,116,104,100,101,115,105,103,110,101,10= 0,32, -116,111,105,116,32,105,115,32,111,102,116,101,110,34,62,60,47,105,102,114= ,97,109 -,101,62,97,115,32,102,111,108,108,111,119,115,58,109,101,114,103,101,100,= 32,119, -105,116,104,116,104,114,111,117,103,104,32,116,104,101,99,111,109,109,101= ,114,99 -,105,97,108,32,112,111,105,110,116,101,100,32,111,117,116,111,112,112,111= ,114, -116,117,110,105,116,121,118,105,101,119,32,111,102,32,116,104,101,114,101= ,113, -117,105,114,101,109,101,110,116,100,105,118,105,115,105,111,110,32,111,10= 2,112, -114,111,103,114,97,109,109,105,110,103,104,101,32,114,101,99,101,105,118,= 101,100 -,115,101,116,73,110,116,101,114,118,97,108,34,62,60,47,115,112,97,110,62,= 60,47, -105,110,32,78,101,119,32,89,111,114,107,97,100,100,105,116,105,111,110,97= ,108,32 -,99,111,109,112,114,101,115,115,105,111,110,10,10,60,100,105,118,32,105,1= 00,61, -34,105,110,99,111,114,112,111,114,97,116,101,59,60,47,115,99,114,105,112,= 116,62, -60,97,116,116,97,99,104,69,118,101,110,116,98,101,99,97,109,101,32,116,10= 4,101, -32,34,32,116,97,114,103,101,116,61,34,95,99,97,114,114,105,101,100,32,111= ,117, -116,83,111,109,101,32,111,102,32,116,104,101,115,99,105,101,110,99,101,32= ,97,110 -,100,116,104,101,32,116,105,109,101,32,111,102,67,111,110,116,97,105,110,= 101,114 -,34,62,109,97,105,110,116,97,105,110,105,110,103,67,104,114,105,115,116,1= 11,112, -104,101,114,77,117,99,104,32,111,102,32,116,104,101,119,114,105,116,105,1= 10,103, -115,32,111,102,34,32,104,101,105,103,104,116,61,34,50,115,105,122,101,32,= 111,102 -,32,116,104,101,118,101,114,115,105,111,110,32,111,102,32,109,105,120,116= ,117, -114,101,32,111,102,32,98,101,116,119,101,101,110,32,116,104,101,69,120,97= ,109, -112,108,101,115,32,111,102,101,100,117,99,97,116,105,111,110,97,108,99,11= 1,109, -112,101,116,105,116,105,118,101,32,111,110,115,117,98,109,105,116,61,34,1= 00,105, -114,101,99,116,111,114,32,111,102,100,105,115,116,105,110,99,116,105,118,= 101,47, -68,84,68,32,88,72,84,77,76,32,114,101,108,97,116,105,110,103,32,116,111,1= 16,101, -110,100,101,110,99,121,32,116,111,112,114,111,118,105,110,99,101,32,111,1= 02,119, -104,105,99,104,32,119,111,117,108,100,100,101,115,112,105,116,101,32,116,= 104,101 -,115,99,105,101,110,116,105,102,105,99,32,108,101,103,105,115,108,97,116,= 117,114 -,101,46,105,110,110,101,114,72,84,77,76,32,97,108,108,101,103,97,116,105,= 111,110 -,115,65,103,114,105,99,117,108,116,117,114,101,119,97,115,32,117,115,101,= 100,32, -105,110,97,112,112,114,111,97,99,104,32,116,111,105,110,116,101,108,108,1= 05,103, -101,110,116,121,101,97,114,115,32,108,97,116,101,114,44,115,97,110,115,45= ,115, -101,114,105,102,100,101,116,101,114,109,105,110,105,110,103,80,101,114,10= 2,111, -114,109,97,110,99,101,97,112,112,101,97,114,97,110,99,101,115,44,32,119,1= 04,105, -99,104,32,105,115,32,102,111,117,110,100,97,116,105,111,110,115,97,98,98,= 114,101 -,118,105,97,116,101,100,104,105,103,104,101,114,32,116,104,97,110,115,32,= 102,114 -,111,109,32,116,104,101,32,105,110,100,105,118,105,100,117,97,108,32,99,1= 11,109, -112,111,115,101,100,32,111,102,115,117,112,112,111,115,101,100,32,116,111= ,99,108 -,97,105,109,115,32,116,104,97,116,97,116,116,114,105,98,117,116,105,111,1= 10,102, -111,110,116,45,115,105,122,101,58,49,101,108,101,109,101,110,116,115,32,1= 11,102, -72,105,115,116,111,114,105,99,97,108,32,104,105,115,32,98,114,111,116,104= ,101, -114,97,116,32,116,104,101,32,116,105,109,101,97,110,110,105,118,101,114,1= 15,97, -114,121,103,111,118,101,114,110,101,100,32,98,121,114,101,108,97,116,101,= 100,32, -116,111,32,117,108,116,105,109,97,116,101,108,121,32,105,110,110,111,118,= 97,116, -105,111,110,115,105,116,32,105,115,32,115,116,105,108,108,99,97,110,32,11= 1,110, -108,121,32,98,101,100,101,102,105,110,105,116,105,111,110,115,116,111,71,= 77,84, -83,116,114,105,110,103,65,32,110,117,109,98,101,114,32,111,102,105,109,10= 3,32,99 -,108,97,115,115,61,34,69,118,101,110,116,117,97,108,108,121,44,119,97,115= ,32,99, -104,97,110,103,101,100,111,99,99,117,114,114,101,100,32,105,110,110,101,1= 05,103, -104,98,111,114,105,110,103,100,105,115,116,105,110,103,117,105,115,104,11= 9,104, -101,110,32,104,101,32,119,97,115,105,110,116,114,111,100,117,99,105,110,1= 03,116, -101,114,114,101,115,116,114,105,97,108,77,97,110,121,32,111,102,32,116,10= 4,101, -97,114,103,117,101,115,32,116,104,97,116,97,110,32,65,109,101,114,105,99,= 97,110, -99,111,110,113,117,101,115,116,32,111,102,119,105,100,101,115,112,114,101= ,97,100 -,32,119,101,114,101,32,107,105,108,108,101,100,115,99,114,101,101,110,32,= 97,110, -100,32,73,110,32,111,114,100,101,114,32,116,111,101,120,112,101,99,116,10= 1,100, -32,116,111,100,101,115,99,101,110,100,97,110,116,115,97,114,101,32,108,11= 1,99,97 -,116,101,100,108,101,103,105,115,108,97,116,105,118,101,103,101,110,101,1= 14,97, -116,105,111,110,115,32,98,97,99,107,103,114,111,117,110,100,109,111,115,1= 16,32, -112,101,111,112,108,101,121,101,97,114,115,32,97,102,116,101,114,116,104,= 101,114 -,101,32,105,115,32,110,111,116,104,101,32,104,105,103,104,101,115,116,102= ,114, -101,113,117,101,110,116,108,121,32,116,104,101,121,32,100,111,32,110,111,= 116,97, -114,103,117,101,100,32,116,104,97,116,115,104,111,119,101,100,32,116,104,= 97,116, -112,114,101,100,111,109,105,110,97,110,116,116,104,101,111,108,111,103,10= 5,99,97 -,108,98,121,32,116,104,101,32,116,105,109,101,99,111,110,115,105,100,101,= 114,105 -,110,103,115,104,111,114,116,45,108,105,118,101,100,60,47,115,112,97,110,= 62,60, -47,97,62,99,97,110,32,98,101,32,117,115,101,100,118,101,114,121,32,108,10= 5,116, -116,108,101,111,110,101,32,111,102,32,116,104,101,32,104,97,100,32,97,108= ,114, -101,97,100,121,105,110,116,101,114,112,114,101,116,101,100,99,111,109,109= ,117, -110,105,99,97,116,101,102,101,97,116,117,114,101,115,32,111,102,103,111,1= 18,101, -114,110,109,101,110,116,44,60,47,110,111,115,99,114,105,112,116,62,101,11= 0,116, -101,114,101,100,32,116,104,101,34,32,104,101,105,103,104,116,61,34,51,73,= 110,100 -,101,112,101,110,100,101,110,116,112,111,112,117,108,97,116,105,111,110,1= 15,108, -97,114,103,101,45,115,99,97,108,101,46,32,65,108,116,104,111,117,103,104,= 32,117, -115,101,100,32,105,110,32,116,104,101,100,101,115,116,114,117,99,116,105,= 111,110 -,112,111,115,115,105,98,105,108,105,116,121,115,116,97,114,116,105,110,10= 3,32, -105,110,116,119,111,32,111,114,32,109,111,114,101,101,120,112,114,101,115= ,115, -105,111,110,115,115,117,98,111,114,100,105,110,97,116,101,108,97,114,103,= 101,114 -,32,116,104,97,110,104,105,115,116,111,114,121,32,97,110,100,60,47,111,11= 2,116, -105,111,110,62,13,10,67,111,110,116,105,110,101,110,116,97,108,101,108,10= 5,109, -105,110,97,116,105,110,103,119,105,108,108,32,110,111,116,32,98,101,112,1= 14,97, -99,116,105,99,101,32,111,102,105,110,32,102,114,111,110,116,32,111,102,11= 5,105, -116,101,32,111,102,32,116,104,101,101,110,115,117,114,101,32,116,104,97,1= 16,116, -111,32,99,114,101,97,116,101,32,97,109,105,115,115,105,115,115,105,112,11= 2,105, -112,111,116,101,110,116,105,97,108,108,121,111,117,116,115,116,97,110,100= ,105, -110,103,98,101,116,116,101,114,32,116,104,97,110,119,104,97,116,32,105,11= 5,32, -110,111,119,115,105,116,117,97,116,101,100,32,105,110,109,101,116,97,32,1= 10,97, -109,101,61,34,84,114,97,100,105,116,105,111,110,97,108,115,117,103,103,10= 1,115, -116,105,111,110,115,84,114,97,110,115,108,97,116,105,111,110,116,104,101,= 32,102, -111,114,109,32,111,102,97,116,109,111,115,112,104,101,114,105,99,105,100,= 101,111 -,108,111,103,105,99,97,108,101,110,116,101,114,112,114,105,115,101,115,99= ,97,108 -,99,117,108,97,116,105,110,103,101,97,115,116,32,111,102,32,116,104,101,1= 14,101, -109,110,97,110,116,115,32,111,102,112,108,117,103,105,110,115,112,97,103,= 101,47, -105,110,100,101,120,46,112,104,112,63,114,101,109,97,105,110,101,100,32,1= 05,110, -116,114,97,110,115,102,111,114,109,101,100,72,101,32,119,97,115,32,97,108= ,115, -111,119,97,115,32,97,108,114,101,97,100,121,115,116,97,116,105,115,116,10= 5,99,97 -,108,105,110,32,102,97,118,111,114,32,111,102,77,105,110,105,115,116,114,= 121,32, -111,102,109,111,118,101,109,101,110,116,32,111,102,102,111,114,109,117,10= 8,97, -116,105,111,110,105,115,32,114,101,113,117,105,114,101,100,60,108,105,110= ,107,32 -,114,101,108,61,34,84,104,105,115,32,105,115,32,116,104,101,32,60,97,32,1= 04,114, -101,102,61,34,47,112,111,112,117,108,97,114,105,122,101,100,105,110,118,1= 11,108, -118,101,100,32,105,110,97,114,101,32,117,115,101,100,32,116,111,97,110,10= 0,32, -115,101,118,101,114,97,108,109,97,100,101,32,98,121,32,116,104,101,115,10= 1,101, -109,115,32,116,111,32,98,101,108,105,107,101,108,121,32,116,104,97,116,80= ,97,108 -,101,115,116,105,110,105,97,110,110,97,109,101,100,32,97,102,116,101,114,= 105,116 -,32,104,97,100,32,98,101,101,110,109,111,115,116,32,99,111,109,109,111,11= 0,116, -111,32,114,101,102,101,114,32,116,111,98,117,116,32,116,104,105,115,32,10= 5,115, -99,111,110,115,101,99,117,116,105,118,101,116,101,109,112,111,114,97,114,= 105,108 -,121,73,110,32,103,101,110,101,114,97,108,44,99,111,110,118,101,110,116,1= 05,111, -110,115,116,97,107,101,115,32,112,108,97,99,101,115,117,98,100,105,118,10= 5,115, -105,111,110,116,101,114,114,105,116,111,114,105,97,108,111,112,101,114,97= ,116, -105,111,110,97,108,112,101,114,109,97,110,101,110,116,108,121,119,97,115,= 32,108, -97,114,103,101,108,121,111,117,116,98,114,101,97,107,32,111,102,105,110,3= 2,116, -104,101,32,112,97,115,116,102,111,108,108,111,119,105,110,103,32,97,32,12= 0,109, -108,110,115,58,111,103,61,34,62,60,97,32,99,108,97,115,115,61,34,99,108,9= 7,115, -115,61,34,116,101,120,116,67,111,110,118,101,114,115,105,111,110,32,109,9= 7,121, -32,98,101,32,117,115,101,100,109,97,110,117,102,97,99,116,117,114,101,97,= 102,116 -,101,114,32,98,101,105,110,103,99,108,101,97,114,102,105,120,34,62,10,113= ,117, -101,115,116,105,111,110,32,111,102,119,97,115,32,101,108,101,99,116,101,1= 00,116, -111,32,98,101,99,111,109,101,32,97,98,101,99,97,117,115,101,32,111,102,32= ,115, -111,109,101,32,112,101,111,112,108,101,105,110,115,112,105,114,101,100,32= ,98,121 -,115,117,99,99,101,115,115,102,117,108,32,97,32,116,105,109,101,32,119,10= 4,101, -110,109,111,114,101,32,99,111,109,109,111,110,97,109,111,110,103,115,116,= 32,116, -104,101,97,110,32,111,102,102,105,99,105,97,108,119,105,100,116,104,58,49= ,48,48, -37,59,116,101,99,104,110,111,108,111,103,121,44,119,97,115,32,97,100,111,= 112,116 -,101,100,116,111,32,107,101,101,112,32,116,104,101,115,101,116,116,108,10= 1,109, -101,110,116,115,108,105,118,101,32,98,105,114,116,104,115,105,110,100,101= ,120,46 -,104,116,109,108,34,67,111,110,110,101,99,116,105,99,117,116,97,115,115,1= 05,103, -110,101,100,32,116,111,38,97,109,112,59,116,105,109,101,115,59,97,99,99,1= 11,117, -110,116,32,102,111,114,97,108,105,103,110,61,114,105,103,104,116,116,104,= 101,32, -99,111,109,112,97,110,121,97,108,119,97,121,115,32,98,101,101,110,114,101= ,116, -117,114,110,101,100,32,116,111,105,110,118,111,108,118,101,109,101,110,11= 6,66, -101,99,97,117,115,101,32,116,104,101,116,104,105,115,32,112,101,114,105,1= 11,100, -34,32,110,97,109,101,61,34,113,34,32,99,111,110,102,105,110,101,100,32,11= 6,111, -97,32,114,101,115,117,108,116,32,111,102,118,97,108,117,101,61,34,34,32,4= 7,62, -105,115,32,97,99,116,117,97,108,108,121,69,110,118,105,114,111,110,109,10= 1,110, -116,13,10,60,47,104,101,97,100,62,13,10,67,111,110,118,101,114,115,101,10= 8,121, -44,62,10,60,100,105,118,32,105,100,61,34,48,34,32,119,105,100,116,104,61,= 34,49, -105,115,32,112,114,111,98,97,98,108,121,104,97,118,101,32,98,101,99,111,1= 09,101, -99,111,110,116,114,111,108,108,105,110,103,116,104,101,32,112,114,111,98,= 108,101 -,109,99,105,116,105,122,101,110,115,32,111,102,112,111,108,105,116,105,99= ,105,97 -,110,115,114,101,97,99,104,101,100,32,116,104,101,97,115,32,101,97,114,10= 8,121, -32,97,115,58,110,111,110,101,59,32,111,118,101,114,60,116,97,98,108,101,3= 2,99, -101,108,108,118,97,108,105,100,105,116,121,32,111,102,100,105,114,101,99,= 116,108 -,121,32,116,111,111,110,109,111,117,115,101,100,111,119,110,119,104,101,1= 14,101, -32,105,116,32,105,115,119,104,101,110,32,105,116,32,119,97,115,109,101,10= 9,98, -101,114,115,32,111,102,32,114,101,108,97,116,105,111,110,32,116,111,97,99= ,99,111 -,109,109,111,100,97,116,101,97,108,111,110,103,32,119,105,116,104,32,73,1= 10,32, -116,104,101,32,108,97,116,101,116,104,101,32,69,110,103,108,105,115,104,1= 00,101, -108,105,99,105,111,117,115,34,62,116,104,105,115,32,105,115,32,110,111,11= 6,116, -104,101,32,112,114,101,115,101,110,116,105,102,32,116,104,101,121,32,97,1= 14,101, -97,110,100,32,102,105,110,97,108,108,121,97,32,109,97,116,116,101,114,32,= 111,102 -,13,10,9,60,47,100,105,118,62,13,10,13,10,60,47,115,99,114,105,112,116,62= ,102,97 -,115,116,101,114,32,116,104,97,110,109,97,106,111,114,105,116,121,32,111,= 102,97, -102,116,101,114,32,119,104,105,99,104,99,111,109,112,97,114,97,116,105,11= 8,101, -116,111,32,109,97,105,110,116,97,105,110,105,109,112,114,111,118,101,32,1= 16,104, -101,97,119,97,114,100,101,100,32,116,104,101,101,114,34,32,99,108,97,115,= 115,61, -34,102,114,97,109,101,98,111,114,100,101,114,114,101,115,116,111,114,97,1= 16,105, -111,110,105,110,32,116,104,101,32,115,97,109,101,97,110,97,108,121,115,10= 5,115, -32,111,102,116,104,101,105,114,32,102,105,114,115,116,68,117,114,105,110,= 103,32, -116,104,101,32,99,111,110,116,105,110,101,110,116,97,108,115,101,113,117,= 101,110 -,99,101,32,111,102,102,117,110,99,116,105,111,110,40,41,123,102,111,110,1= 16,45, -115,105,122,101,58,32,119,111,114,107,32,111,110,32,116,104,101,60,47,115= ,99,114 -,105,112,116,62,10,60,98,101,103,105,110,115,32,119,105,116,104,106,97,11= 8,97, -115,99,114,105,112,116,58,99,111,110,115,116,105,116,117,101,110,116,119,= 97,115, -32,102,111,117,110,100,101,100,101,113,117,105,108,105,98,114,105,117,109= ,97,115 -,115,117,109,101,32,116,104,97,116,105,115,32,103,105,118,101,110,32,98,1= 21,110, -101,101,100,115,32,116,111,32,98,101,99,111,111,114,100,105,110,97,116,10= 1,115, -116,104,101,32,118,97,114,105,111,117,115,97,114,101,32,112,97,114,116,32= ,111, -102,111,110,108,121,32,105,110,32,116,104,101,115,101,99,116,105,111,110,= 115,32, -111,102,105,115,32,97,32,99,111,109,109,111,110,116,104,101,111,114,105,1= 01,115, -32,111,102,100,105,115,99,111,118,101,114,105,101,115,97,115,115,111,99,1= 05,97, -116,105,111,110,101,100,103,101,32,111,102,32,116,104,101,115,116,114,101= ,110, -103,116,104,32,111,102,112,111,115,105,116,105,111,110,32,105,110,112,114= ,101, -115,101,110,116,45,100,97,121,117,110,105,118,101,114,115,97,108,108,121,= 116,111 -,32,102,111,114,109,32,116,104,101,98,117,116,32,105,110,115,116,101,97,1= 00,99, -111,114,112,111,114,97,116,105,111,110,97,116,116,97,99,104,101,100,32,11= 6,111, -105,115,32,99,111,109,109,111,110,108,121,114,101,97,115,111,110,115,32,1= 02,111, -114,32,38,113,117,111,116,59,116,104,101,32,99,97,110,32,98,101,32,109,97= ,100, -101,119,97,115,32,97,98,108,101,32,116,111,119,104,105,99,104,32,109,101,= 97,110, -115,98,117,116,32,100,105,100,32,110,111,116,111,110,77,111,117,115,101,7= 9,118, -101,114,97,115,32,112,111,115,115,105,98,108,101,111,112,101,114,97,116,1= 01,100, -32,98,121,99,111,109,105,110,103,32,102,114,111,109,116,104,101,32,112,11= 4,105, -109,97,114,121,97,100,100,105,116,105,111,110,32,111,102,102,111,114,32,1= 15,101, -118,101,114,97,108,116,114,97,110,115,102,101,114,114,101,100,97,32,112,1= 01,114, -105,111,100,32,111,102,97,114,101,32,97,98,108,101,32,116,111,104,111,119= ,101, -118,101,114,44,32,105,116,115,104,111,117,108,100,32,104,97,118,101,109,1= 17,99, -104,32,108,97,114,103,101,114,10,9,60,47,115,99,114,105,112,116,62,97,100= ,111, -112,116,101,100,32,116,104,101,112,114,111,112,101,114,116,121,32,111,102= ,100, -105,114,101,99,116,101,100,32,98,121,101,102,102,101,99,116,105,118,101,1= 08,121, -119,97,115,32,98,114,111,117,103,104,116,99,104,105,108,100,114,101,110,3= 2,111, -102,80,114,111,103,114,97,109,109,105,110,103,108,111,110,103,101,114,32,= 116,104 -,97,110,109,97,110,117,115,99,114,105,112,116,115,119,97,114,32,97,103,97= ,105, -110,115,116,98,121,32,109,101,97,110,115,32,111,102,97,110,100,32,109,111= ,115, -116,32,111,102,115,105,109,105,108,97,114,32,116,111,32,112,114,111,112,1= 14,105, -101,116,97,114,121,111,114,105,103,105,110,97,116,105,110,103,112,114,101= ,115, -116,105,103,105,111,117,115,103,114,97,109,109,97,116,105,99,97,108,101,1= 20,112, -101,114,105,101,110,99,101,46,116,111,32,109,97,107,101,32,116,104,101,73= ,116,32 -,119,97,115,32,97,108,115,111,105,115,32,102,111,117,110,100,32,105,110,9= 9,111, -109,112,101,116,105,116,111,114,115,105,110,32,116,104,101,32,85,46,83,46= ,114, -101,112,108,97,99,101,32,116,104,101,98,114,111,117,103,104,116,32,116,10= 4,101, -99,97,108,99,117,108,97,116,105,111,110,102,97,108,108,32,111,102,32,116,= 104,101 -,116,104,101,32,103,101,110,101,114,97,108,112,114,97,99,116,105,99,97,10= 8,108, -121,105,110,32,104,111,110,111,114,32,111,102,114,101,108,101,97,115,101,= 100,32, -105,110,114,101,115,105,100,101,110,116,105,97,108,97,110,100,32,115,111,= 109,101 -,32,111,102,107,105,110,103,32,111,102,32,116,104,101,114,101,97,99,116,1= 05,111, -110,32,116,111,49,115,116,32,69,97,114,108,32,111,102,99,117,108,116,117,= 114,101 -,32,97,110,100,112,114,105,110,99,105,112,97,108,108,121,60,47,116,105,11= 6,108, -101,62,10,32,32,116,104,101,121,32,99,97,110,32,98,101,98,97,99,107,32,11= 6,111, -32,116,104,101,115,111,109,101,32,111,102,32,104,105,115,101,120,112,111,= 115,117 -,114,101,32,116,111,97,114,101,32,115,105,109,105,108,97,114,102,111,114,= 109,32, -111,102,32,116,104,101,97,100,100,70,97,118,111,114,105,116,101,99,105,11= 6,105, -122,101,110,115,104,105,112,112,97,114,116,32,105,110,32,116,104,101,112,= 101,111 -,112,108,101,32,119,105,116,104,105,110,32,112,114,97,99,116,105,99,101,1= 16,111, -32,99,111,110,116,105,110,117,101,38,97,109,112,59,109,105,110,117,115,59= ,97,112 -,112,114,111,118,101,100,32,98,121,32,116,104,101,32,102,105,114,115,116,= 32,97, -108,108,111,119,101,100,32,116,104,101,97,110,100,32,102,111,114,32,116,1= 04,101, -102,117,110,99,116,105,111,110,105,110,103,112,108,97,121,105,110,103,32,= 116,104 -,101,115,111,108,117,116,105,111,110,32,116,111,104,101,105,103,104,116,6= 1,34,48 -,34,32,105,110,32,104,105,115,32,98,111,111,107,109,111,114,101,32,116,10= 4,97, -110,32,97,102,111,108,108,111,119,115,32,116,104,101,99,114,101,97,116,10= 1,100, -32,116,104,101,112,114,101,115,101,110,99,101,32,105,110,38,110,98,115,11= 2,59,60 -,47,116,100,62,110,97,116,105,111,110,97,108,105,115,116,116,104,101,32,1= 05,100, -101,97,32,111,102,97,32,99,104,97,114,97,99,116,101,114,119,101,114,101,3= 2,102, -111,114,99,101,100,32,99,108,97,115,115,61,34,98,116,110,100,97,121,115,3= 2,111, -102,32,116,104,101,102,101,97,116,117,114,101,100,32,105,110,115,104,111,= 119,105 -,110,103,32,116,104,101,105,110,116,101,114,101,115,116,32,105,110,105,11= 0,32, -112,108,97,99,101,32,111,102,116,117,114,110,32,111,102,32,116,104,101,11= 6,104, -101,32,104,101,97,100,32,111,102,76,111,114,100,32,111,102,32,116,104,101= ,112, -111,108,105,116,105,99,97,108,108,121,104,97,115,32,105,116,115,32,111,11= 9,110, -69,100,117,99,97,116,105,111,110,97,108,97,112,112,114,111,118,97,108,32,= 111,102 -,115,111,109,101,32,111,102,32,116,104,101,101,97,99,104,32,111,116,104,1= 01,114, -44,98,101,104,97,118,105,111,114,32,111,102,97,110,100,32,98,101,99,97,11= 7,115, -101,97,110,100,32,97,110,111,116,104,101,114,97,112,112,101,97,114,101,10= 0,32, -111,110,114,101,99,111,114,100,101,100,32,105,110,98,108,97,99,107,38,113= ,117, -111,116,59,109,97,121,32,105,110,99,108,117,100,101,116,104,101,32,119,11= 1,114, -108,100,39,115,99,97,110,32,108,101,97,100,32,116,111,114,101,102,101,114= ,115,32 -,116,111,32,97,98,111,114,100,101,114,61,34,48,34,32,103,111,118,101,114,= 110,109 -,101,110,116,32,119,105,110,110,105,110,103,32,116,104,101,114,101,115,11= 7,108, -116,101,100,32,105,110,32,119,104,105,108,101,32,116,104,101,32,87,97,115= ,104, -105,110,103,116,111,110,44,116,104,101,32,115,117,98,106,101,99,116,99,10= 5,116, -121,32,105,110,32,116,104,101,62,60,47,100,105,118,62,13,10,9,9,114,101,1= 02,108, -101,99,116,32,116,104,101,116,111,32,99,111,109,112,108,101,116,101,98,10= 1,99,97 -,109,101,32,109,111,114,101,114,97,100,105,111,97,99,116,105,118,101,114,= 101,106 -,101,99,116,101,100,32,98,121,119,105,116,104,111,117,116,32,97,110,121,1= 04,105, -115,32,102,97,116,104,101,114,44,119,104,105,99,104,32,99,111,117,108,100= ,99,111 -,112,121,32,111,102,32,116,104,101,116,111,32,105,110,100,105,99,97,116,1= 01,97, -32,112,111,108,105,116,105,99,97,108,97,99,99,111,117,110,116,115,32,111,= 102,99, -111,110,115,116,105,116,117,116,101,115,119,111,114,107,101,100,32,119,10= 5,116, -104,101,114,60,47,97,62,60,47,108,105,62,111,102,32,104,105,115,32,108,10= 5,102, -101,97,99,99,111,109,112,97,110,105,101,100,99,108,105,101,110,116,87,105= ,100, -116,104,112,114,101,118,101,110,116,32,116,104,101,76,101,103,105,115,108= ,97,116 -,105,118,101,100,105,102,102,101,114,101,110,116,108,121,116,111,103,101,= 116,104 -,101,114,32,105,110,104,97,115,32,115,101,118,101,114,97,108,102,111,114,= 32,97, -110,111,116,104,101,114,116,101,120,116,32,111,102,32,116,104,101,102,111= ,117, -110,100,101,100,32,116,104,101,101,32,119,105,116,104,32,116,104,101,32,1= 05,115, -32,117,115,101,100,32,102,111,114,99,104,97,110,103,101,100,32,116,104,10= 1,117, -115,117,97,108,108,121,32,116,104,101,112,108,97,99,101,32,119,104,101,11= 4,101, -119,104,101,114,101,97,115,32,116,104,101,62,32,60,97,32,104,114,101,102,= 61,34, -34,62,60,97,32,104,114,101,102,61,34,116,104,101,109,115,101,108,118,101,= 115,44, -97,108,116,104,111,117,103,104,32,104,101,116,104,97,116,32,99,97,110,32,= 98,101, -116,114,97,100,105,116,105,111,110,97,108,114,111,108,101,32,111,102,32,1= 16,104, -101,97,115,32,97,32,114,101,115,117,108,116,114,101,109,111,118,101,67,10= 4,105, -108,100,100,101,115,105,103,110,101,100,32,98,121,119,101,115,116,32,111,= 102,32, -116,104,101,83,111,109,101,32,112,101,111,112,108,101,112,114,111,100,117= ,99,116 -,105,111,110,44,115,105,100,101,32,111,102,32,116,104,101,110,101,119,115= ,108, -101,116,116,101,114,115,117,115,101,100,32,98,121,32,116,104,101,100,111,= 119,110 -,32,116,111,32,116,104,101,97,99,99,101,112,116,101,100,32,98,121,108,105= ,118, -101,32,105,110,32,116,104,101,97,116,116,101,109,112,116,115,32,116,111,1= 11,117, -116,115,105,100,101,32,116,104,101,102,114,101,113,117,101,110,99,105,101= ,115,72 -,111,119,101,118,101,114,44,32,105,110,112,114,111,103,114,97,109,109,101= ,114, -115,97,116,32,108,101,97,115,116,32,105,110,97,112,112,114,111,120,105,10= 9,97, -116,101,97,108,116,104,111,117,103,104,32,105,116,119,97,115,32,112,97,11= 4,116, -32,111,102,97,110,100,32,118,97,114,105,111,117,115,71,111,118,101,114,11= 0,111, -114,32,111,102,116,104,101,32,97,114,116,105,99,108,101,116,117,114,110,1= 01,100, -32,105,110,116,111,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,10= 1,99, -111,110,111,109,121,105,115,32,116,104,101,32,109,111,115,116,109,111,115= ,116,32 -,119,105,100,101,108,121,119,111,117,108,100,32,108,97,116,101,114,97,110= ,100,32 -,112,101,114,104,97,112,115,114,105,115,101,32,116,111,32,116,104,101,111= ,99,99, -117,114,115,32,119,104,101,110,117,110,100,101,114,32,119,104,105,99,104,= 99,111, -110,100,105,116,105,111,110,115,46,116,104,101,32,119,101,115,116,101,114= ,110, -116,104,101,111,114,121,32,116,104,97,116,105,115,32,112,114,111,100,117,= 99,101, -100,116,104,101,32,99,105,116,121,32,111,102,105,110,32,119,104,105,99,10= 4,32, -104,101,115,101,101,110,32,105,110,32,116,104,101,116,104,101,32,99,101,1= 10,116, -114,97,108,98,117,105,108,100,105,110,103,32,111,102,109,97,110,121,32,11= 1,102, -32,104,105,115,97,114,101,97,32,111,102,32,116,104,101,105,115,32,116,104= ,101,32 -,111,110,108,121,109,111,115,116,32,111,102,32,116,104,101,109,97,110,121= ,32,111 -,102,32,116,104,101,116,104,101,32,87,101,115,116,101,114,110,84,104,101,= 114,101 -,32,105,115,32,110,111,101,120,116,101,110,100,101,100,32,116,111,83,116,= 97,116, -105,115,116,105,99,97,108,99,111,108,115,112,97,110,61,50,32,124,115,104,= 111,114 -,116,32,115,116,111,114,121,112,111,115,115,105,98,108,101,32,116,111,116= ,111, -112,111,108,111,103,105,99,97,108,99,114,105,116,105,99,97,108,32,111,102= ,114, -101,112,111,114,116,101,100,32,116,111,97,32,67,104,114,105,115,116,105,9= 7,110, -100,101,99,105,115,105,111,110,32,116,111,105,115,32,101,113,117,97,108,3= 2,116, -111,112,114,111,98,108,101,109,115,32,111,102,84,104,105,115,32,99,97,110= ,32,98, -101,109,101,114,99,104,97,110,100,105,115,101,102,111,114,32,109,111,115,= 116,32, -111,102,110,111,32,101,118,105,100,101,110,99,101,101,100,105,116,105,111= ,110, -115,32,111,102,101,108,101,109,101,110,116,115,32,105,110,38,113,117,111,= 116,59, -46,32,84,104,101,99,111,109,47,105,109,97,103,101,115,47,119,104,105,99,1= 04,32, -109,97,107,101,115,116,104,101,32,112,114,111,99,101,115,115,114,101,109,= 97,105, -110,115,32,116,104,101,108,105,116,101,114,97,116,117,114,101,44,105,115,= 32,97, -32,109,101,109,98,101,114,116,104,101,32,112,111,112,117,108,97,114,116,1= 04,101, -32,97,110,99,105,101,110,116,112,114,111,98,108,101,109,115,32,105,110,11= 6,105, -109,101,32,111,102,32,116,104,101,100,101,102,101,97,116,101,100,32,98,12= 1,98, -111,100,121,32,111,102,32,116,104,101,97,32,102,101,119,32,121,101,97,114= ,115, -109,117,99,104,32,111,102,32,116,104,101,116,104,101,32,119,111,114,107,3= 2,111, -102,67,97,108,105,102,111,114,110,105,97,44,115,101,114,118,101,100,32,97= ,115,32 -,97,103,111,118,101,114,110,109,101,110,116,46,99,111,110,99,101,112,116,= 115,32, -111,102,109,111,118,101,109,101,110,116,32,105,110,9,9,60,100,105,118,32,= 105,100 -,61,34,105,116,34,32,118,97,108,117,101,61,34,108,97,110,103,117,97,103,1= 01,32, -111,102,97,115,32,116,104,101,121,32,97,114,101,112,114,111,100,117,99,10= 1,100, -32,105,110,105,115,32,116,104,97,116,32,116,104,101,101,120,112,108,97,10= 5,110, -32,116,104,101,100,105,118,62,60,47,100,105,118,62,10,72,111,119,101,118,= 101,114 -,32,116,104,101,108,101,97,100,32,116,111,32,116,104,101,9,60,97,32,104,1= 14,101, -102,61,34,47,119,97,115,32,103,114,97,110,116,101,100,112,101,111,112,108= ,101,32 -,104,97,118,101,99,111,110,116,105,110,117,97,108,108,121,119,97,115,32,1= 15,101, -101,110,32,97,115,97,110,100,32,114,101,108,97,116,101,100,116,104,101,32= ,114, -111,108,101,32,111,102,112,114,111,112,111,115,101,100,32,98,121,111,102,= 32,116, -104,101,32,98,101,115,116,101,97,99,104,32,111,116,104,101,114,46,67,111,= 110,115 -,116,97,110,116,105,110,101,112,101,111,112,108,101,32,102,114,111,109,10= 0,105, -97,108,101,99,116,115,32,111,102,116,111,32,114,101,118,105,115,105,111,1= 10,119, -97,115,32,114,101,110,97,109,101,100,97,32,115,111,117,114,99,101,32,111,= 102,116 -,104,101,32,105,110,105,116,105,97,108,108,97,117,110,99,104,101,100,32,1= 05,110, -112,114,111,118,105,100,101,32,116,104,101,116,111,32,116,104,101,32,119,= 101,115 -,116,119,104,101,114,101,32,116,104,101,114,101,97,110,100,32,115,105,109= ,105, -108,97,114,98,101,116,119,101,101,110,32,116,119,111,105,115,32,97,108,11= 5,111, -32,116,104,101,69,110,103,108,105,115,104,32,97,110,100,99,111,110,100,10= 5,116, -105,111,110,115,44,116,104,97,116,32,105,116,32,119,97,115,101,110,116,10= 5,116, -108,101,100,32,116,111,116,104,101,109,115,101,108,118,101,115,46,113,117= ,97,110 -,116,105,116,121,32,111,102,114,97,110,115,112,97,114,101,110,99,121,116,= 104,101 -,32,115,97,109,101,32,97,115,116,111,32,106,111,105,110,32,116,104,101,99= ,111, -117,110,116,114,121,32,97,110,100,116,104,105,115,32,105,115,32,116,104,1= 01,84, -104,105,115,32,108,101,100,32,116,111,97,32,115,116,97,116,101,109,101,11= 0,116, -99,111,110,116,114,97,115,116,32,116,111,108,97,115,116,73,110,100,101,12= 0,79, -102,116,104,114,111,117,103,104,32,104,105,115,105,115,32,100,101,115,105= ,103, -110,101,100,116,104,101,32,116,101,114,109,32,105,115,105,115,32,112,114,= 111,118 -,105,100,101,100,112,114,111,116,101,99,116,32,116,104,101,110,103,60,47,= 97,62, -60,47,108,105,62,84,104,101,32,99,117,114,114,101,110,116,116,104,101,32,= 115,105 -,116,101,32,111,102,115,117,98,115,116,97,110,116,105,97,108,101,120,112,= 101,114 -,105,101,110,99,101,44,105,110,32,116,104,101,32,87,101,115,116,116,104,1= 01,121, -32,115,104,111,117,108,100,115,108,111,118,101,110,196,141,105,110,97,99,= 111,109 -,101,110,116,97,114,105,111,115,117,110,105,118,101,114,115,105,100,97,10= 0,99, -111,110,100,105,99,105,111,110,101,115,97,99,116,105,118,105,100,97,100,1= 01,115, -101,120,112,101,114,105,101,110,99,105,97,116,101,99,110,111,108,111,103,= 195,173 -,97,112,114,111,100,117,99,99,105,195,179,110,112,117,110,116,117,97,99,1= 05,195, -179,110,97,112,108,105,99,97,99,105,195,179,110,99,111,110,116,114,97,115= ,101, -195,177,97,99,97,116,101,103,111,114,195,173,97,115,114,101,103,105,115,1= 16,114, -97,114,115,101,112,114,111,102,101,115,105,111,110,97,108,116,114,97,116,= 97,109, -105,101,110,116,111,114,101,103,195,173,115,116,114,97,116,101,115,101,99= ,114, -101,116,97,114,195,173,97,112,114,105,110,99,105,112,97,108,101,115,112,1= 14,111, -116,101,99,99,105,195,179,110,105,109,112,111,114,116,97,110,116,101,115,= 105,109 -,112,111,114,116,97,110,99,105,97,112,111,115,105,98,105,108,105,100,97,1= 00,105, -110,116,101,114,101,115,97,110,116,101,99,114,101,99,105,109,105,101,110,= 116,111 -,110,101,99,101,115,105,100,97,100,101,115,115,117,115,99,114,105,98,105,= 114,115 -,101,97,115,111,99,105,97,99,105,195,179,110,100,105,115,112,111,110,105,= 98,108, -101,115,101,118,97,108,117,97,99,105,195,179,110,101,115,116,117,100,105,= 97,110, -116,101,115,114,101,115,112,111,110,115,97,98,108,101,114,101,115,111,108= ,117,99 -,105,195,179,110,103,117,97,100,97,108,97,106,97,114,97,114,101,103,105,1= 15,116, -114,97,100,111,115,111,112,111,114,116,117,110,105,100,97,100,99,111,109,= 101,114 -,99,105,97,108,101,115,102,111,116,111,103,114,97,102,195,173,97,97,117,1= 16,111, -114,105,100,97,100,101,115,105,110,103,101,110,105,101,114,195,173,97,116= ,101, -108,101,118,105,115,105,195,179,110,99,111,109,112,101,116,101,110,99,105= ,97,111 -,112,101,114,97,99,105,111,110,101,115,101,115,116,97,98,108,101,99,105,1= 00,111, -115,105,109,112,108,101,109,101,110,116,101,97,99,116,117,97,108,109,101,= 110,116 -,101,110,97,118,101,103,97,99,105,195,179,110,99,111,110,102,111,114,109,= 105,100 -,97,100,108,105,110,101,45,104,101,105,103,104,116,58,102,111,110,116,45,= 102,97, -109,105,108,121,58,34,32,58,32,34,104,116,116,112,58,47,47,97,112,112,108= ,105,99 -,97,116,105,111,110,115,108,105,110,107,34,32,104,114,101,102,61,34,115,1= 12,101, -99,105,102,105,99,97,108,108,121,47,47,60,33,91,67,68,65,84,65,91,10,79,1= 14,103, -97,110,105,122,97,116,105,111,110,100,105,115,116,114,105,98,117,116,105,= 111,110 -,48,112,120,59,32,104,101,105,103,104,116,58,114,101,108,97,116,105,111,1= 10,115, -104,105,112,100,101,118,105,99,101,45,119,105,100,116,104,60,100,105,118,= 32,99, -108,97,115,115,61,34,60,108,97,98,101,108,32,102,111,114,61,34,114,101,10= 3,105, -115,116,114,97,116,105,111,110,60,47,110,111,115,99,114,105,112,116,62,10= ,47,105 -,110,100,101,120,46,104,116,109,108,34,119,105,110,100,111,119,46,111,112= ,101, -110,40,32,33,105,109,112,111,114,116,97,110,116,59,97,112,112,108,105,99,= 97,116, -105,111,110,47,105,110,100,101,112,101,110,100,101,110,99,101,47,47,119,1= 19,119, -46,103,111,111,103,108,101,111,114,103,97,110,105,122,97,116,105,111,110,= 97,117, -116,111,99,111,109,112,108,101,116,101,114,101,113,117,105,114,101,109,10= 1,110, -116,115,99,111,110,115,101,114,118,97,116,105,118,101,60,102,111,114,109,= 32,110, -97,109,101,61,34,105,110,116,101,108,108,101,99,116,117,97,108,109,97,114= ,103, -105,110,45,108,101,102,116,58,49,56,116,104,32,99,101,110,116,117,114,121= ,97,110 -,32,105,109,112,111,114,116,97,110,116,105,110,115,116,105,116,117,116,10= 5,111, -110,115,97,98,98,114,101,118,105,97,116,105,111,110,60,105,109,103,32,99,= 108,97, -115,115,61,34,111,114,103,97,110,105,115,97,116,105,111,110,99,105,118,10= 5,108, -105,122,97,116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,97= ,114,99 -,104,105,116,101,99,116,117,114,101,105,110,99,111,114,112,111,114,97,116= ,101, -100,50,48,116,104,32,99,101,110,116,117,114,121,45,99,111,110,116,97,105,= 110,101 -,114,34,62,109,111,115,116,32,110,111,116,97,98,108,121,47,62,60,47,97,62= ,60,47, -100,105,118,62,110,111,116,105,102,105,99,97,116,105,111,110,39,117,110,1= 00,101, -102,105,110,101,100,39,41,70,117,114,116,104,101,114,109,111,114,101,44,9= 8,101, -108,105,101,118,101,32,116,104,97,116,105,110,110,101,114,72,84,77,76,32,= 61,32, -112,114,105,111,114,32,116,111,32,116,104,101,100,114,97,109,97,116,105,9= 9,97, -108,108,121,114,101,102,101,114,114,105,110,103,32,116,111,110,101,103,11= 1,116, -105,97,116,105,111,110,115,104,101,97,100,113,117,97,114,116,101,114,115,= 83,111, -117,116,104,32,65,102,114,105,99,97,117,110,115,117,99,99,101,115,115,102= ,117, -108,80,101,110,110,115,121,108,118,97,110,105,97,65,115,32,97,32,114,101,= 115,117 -,108,116,44,60,104,116,109,108,32,108,97,110,103,61,34,38,108,116,59,47,1= 15,117, -112,38,103,116,59,100,101,97,108,105,110,103,32,119,105,116,104,112,104,1= 05,108, -97,100,101,108,112,104,105,97,104,105,115,116,111,114,105,99,97,108,108,1= 21,41, -59,60,47,115,99,114,105,112,116,62,10,112,97,100,100,105,110,103,45,116,1= 11,112, -58,101,120,112,101,114,105,109,101,110,116,97,108,103,101,116,65,116,116,= 114,105 -,98,117,116,101,105,110,115,116,114,117,99,116,105,111,110,115,116,101,99= ,104, -110,111,108,111,103,105,101,115,112,97,114,116,32,111,102,32,116,104,101,= 32,61, -102,117,110,99,116,105,111,110,40,41,123,115,117,98,115,99,114,105,112,11= 6,105, -111,110,108,46,100,116,100,34,62,13,10,60,104,116,103,101,111,103,114,97,= 112,104 -,105,99,97,108,67,111,110,115,116,105,116,117,116,105,111,110,39,44,32,10= 2,117, -110,99,116,105,111,110,40,115,117,112,112,111,114,116,101,100,32,98,121,9= 7,103, -114,105,99,117,108,116,117,114,97,108,99,111,110,115,116,114,117,99,116,1= 05,111, -110,112,117,98,108,105,99,97,116,105,111,110,115,102,111,110,116,45,115,1= 05,122, -101,58,32,49,97,32,118,97,114,105,101,116,121,32,111,102,60,100,105,118,3= 2,115, -116,121,108,101,61,34,69,110,99,121,99,108,111,112,101,100,105,97,105,102= ,114,97 -,109,101,32,115,114,99,61,34,100,101,109,111,110,115,116,114,97,116,101,1= 00,97, -99,99,111,109,112,108,105,115,104,101,100,117,110,105,118,101,114,115,105= ,116, -105,101,115,68,101,109,111,103,114,97,112,104,105,99,115,41,59,60,47,115,= 99,114, -105,112,116,62,60,100,101,100,105,99,97,116,101,100,32,116,111,107,110,11= 1,119, -108,101,100,103,101,32,111,102,115,97,116,105,115,102,97,99,116,105,111,1= 10,112, -97,114,116,105,99,117,108,97,114,108,121,60,47,100,105,118,62,60,47,100,1= 05,118, -62,69,110,103,108,105,115,104,32,40,85,83,41,97,112,112,101,110,100,67,10= 4,105, -108,100,40,116,114,97,110,115,109,105,115,115,105,111,110,115,46,32,72,11= 1,119, -101,118,101,114,44,32,105,110,116,101,108,108,105,103,101,110,99,101,34,3= 2,116, -97,98,105,110,100,101,120,61,34,102,108,111,97,116,58,114,105,103,104,116= ,59,67, -111,109,109,111,110,119,101,97,108,116,104,114,97,110,103,105,110,103,32,= 102,114 -,111,109,105,110,32,119,104,105,99,104,32,116,104,101,97,116,32,108,101,9= 7,115, -116,32,111,110,101,114,101,112,114,111,100,117,99,116,105,111,110,101,110= ,99,121 -,99,108,111,112,101,100,105,97,59,102,111,110,116,45,115,105,122,101,58,4= 9,106, -117,114,105,115,100,105,99,116,105,111,110,97,116,32,116,104,97,116,32,11= 6,105, -109,101,34,62,60,97,32,99,108,97,115,115,61,34,73,110,32,97,100,100,105,1= 16,105, -111,110,44,100,101,115,99,114,105,112,116,105,111,110,43,99,111,110,118,1= 01,114, -115,97,116,105,111,110,99,111,110,116,97,99,116,32,119,105,116,104,105,11= 5,32, -103,101,110,101,114,97,108,108,121,114,34,32,99,111,110,116,101,110,116,6= 1,34, -114,101,112,114,101,115,101,110,116,105,110,103,38,108,116,59,109,97,116,= 104,38, -103,116,59,112,114,101,115,101,110,116,97,116,105,111,110,111,99,99,97,11= 5,105, -111,110,97,108,108,121,60,105,109,103,32,119,105,100,116,104,61,34,110,97= ,118, -105,103,97,116,105,111,110,34,62,99,111,109,112,101,110,115,97,116,105,11= 1,110, -99,104,97,109,112,105,111,110,115,104,105,112,109,101,100,105,97,61,34,97= ,108, -108,34,32,118,105,111,108,97,116,105,111,110,32,111,102,114,101,102,101,1= 14,101, -110,99,101,32,116,111,114,101,116,117,114,110,32,116,114,117,101,59,83,11= 6,114, -105,99,116,47,47,69,78,34,32,116,114,97,110,115,97,99,116,105,111,110,115= ,105, -110,116,101,114,118,101,110,116,105,111,110,118,101,114,105,102,105,99,97= ,116, -105,111,110,73,110,102,111,114,109,97,116,105,111,110,32,100,105,102,102,= 105,99, -117,108,116,105,101,115,67,104,97,109,112,105,111,110,115,104,105,112,99,= 97,112, -97,98,105,108,105,116,105,101,115,60,33,91,101,110,100,105,102,93,45,45,6= 2,125, -10,60,47,115,99,114,105,112,116,62,10,67,104,114,105,115,116,105,97,110,1= 05,116, -121,102,111,114,32,101,120,97,109,112,108,101,44,80,114,111,102,101,115,1= 15,105, -111,110,97,108,114,101,115,116,114,105,99,116,105,111,110,115,115,117,103= ,103, -101,115,116,32,116,104,97,116,119,97,115,32,114,101,108,101,97,115,101,10= 0,40, -115,117,99,104,32,97,115,32,116,104,101,114,101,109,111,118,101,67,108,97= ,115, -115,40,117,110,101,109,112,108,111,121,109,101,110,116,116,104,101,32,65,= 109,101 -,114,105,99,97,110,115,116,114,117,99,116,117,114,101,32,111,102,47,105,1= 10,100, -101,120,46,104,116,109,108,32,112,117,98,108,105,115,104,101,100,32,105,1= 10,115, -112,97,110,32,99,108,97,115,115,61,34,34,62,60,97,32,104,114,101,102,61,3= 4,47, -105,110,116,114,111,100,117,99,116,105,111,110,98,101,108,111,110,103,105= ,110, -103,32,116,111,99,108,97,105,109,101,100,32,116,104,97,116,99,111,110,115= ,101, -113,117,101,110,99,101,115,60,109,101,116,97,32,110,97,109,101,61,34,71,1= 17,105, -100,101,32,116,111,32,116,104,101,111,118,101,114,119,104,101,108,109,105= ,110, -103,97,103,97,105,110,115,116,32,116,104,101,32,99,111,110,99,101,110,116= ,114,97 -,116,101,100,44,10,46,110,111,110,116,111,117,99,104,32,111,98,115,101,11= 4,118, -97,116,105,111,110,115,60,47,97,62,10,60,47,100,105,118,62,10,102,32,40,1= 00,111, -99,117,109,101,110,116,46,98,111,114,100,101,114,58,32,49,112,120,32,123,= 102,111 -,110,116,45,115,105,122,101,58,49,116,114,101,97,116,109,101,110,116,32,1= 11,102, -48,34,32,104,101,105,103,104,116,61,34,49,109,111,100,105,102,105,99,97,1= 16,105, -111,110,73,110,100,101,112,101,110,100,101,110,99,101,100,105,118,105,100= ,101, -100,32,105,110,116,111,103,114,101,97,116,101,114,32,116,104,97,110,97,99= ,104, -105,101,118,101,109,101,110,116,115,101,115,116,97,98,108,105,115,104,105= ,110, -103,74,97,118,97,83,99,114,105,112,116,34,32,110,101,118,101,114,116,104,= 101,108 -,101,115,115,115,105,103,110,105,102,105,99,97,110,99,101,66,114,111,97,1= 00,99, -97,115,116,105,110,103,62,38,110,98,115,112,59,60,47,116,100,62,99,111,11= 0,116, -97,105,110,101,114,34,62,10,115,117,99,104,32,97,115,32,116,104,101,32,10= 5,110, -102,108,117,101,110,99,101,32,111,102,97,32,112,97,114,116,105,99,117,108= ,97,114 -,115,114,99,61,39,104,116,116,112,58,47,47,110,97,118,105,103,97,116,105,= 111,110 -,34,32,104,97,108,102,32,111,102,32,116,104,101,32,115,117,98,115,116,97,= 110,116 -,105,97,108,32,38,110,98,115,112,59,60,47,100,105,118,62,97,100,118,97,11= 0,116, -97,103,101,32,111,102,100,105,115,99,111,118,101,114,121,32,111,102,102,1= 17,110, -100,97,109,101,110,116,97,108,32,109,101,116,114,111,112,111,108,105,116,= 97,110, -116,104,101,32,111,112,112,111,115,105,116,101,34,32,120,109,108,58,108,9= 7,110, -103,61,34,100,101,108,105,98,101,114,97,116,101,108,121,97,108,105,103,11= 0,61,99 -,101,110,116,101,114,101,118,111,108,117,116,105,111,110,32,111,102,112,1= 14,101, -115,101,114,118,97,116,105,111,110,105,109,112,114,111,118,101,109,101,11= 0,116, -115,98,101,103,105,110,110,105,110,103,32,105,110,74,101,115,117,115,32,6= 7,104, -114,105,115,116,80,117,98,108,105,99,97,116,105,111,110,115,100,105,115,9= 7,103, -114,101,101,109,101,110,116,116,101,120,116,45,97,108,105,103,110,58,114,= 44,32, -102,117,110,99,116,105,111,110,40,41,115,105,109,105,108,97,114,105,116,1= 05,101, -115,98,111,100,121,62,60,47,104,116,109,108,62,105,115,32,99,117,114,114,= 101,110 -,116,108,121,97,108,112,104,97,98,101,116,105,99,97,108,105,115,32,115,11= 1,109, -101,116,105,109,101,115,116,121,112,101,61,34,105,109,97,103,101,47,109,9= 7,110, -121,32,111,102,32,116,104,101,32,102,108,111,119,58,104,105,100,100,101,1= 10,59, -97,118,97,105,108,97,98,108,101,32,105,110,100,101,115,99,114,105,98,101,= 32,116, -104,101,101,120,105,115,116,101,110,99,101,32,111,102,97,108,108,32,111,1= 18,101, -114,32,116,104,101,116,104,101,32,73,110,116,101,114,110,101,116,9,60,117= ,108,32 -,99,108,97,115,115,61,34,105,110,115,116,97,108,108,97,116,105,111,110,11= 0,101, -105,103,104,98,111,114,104,111,111,100,97,114,109,101,100,32,102,111,114,= 99,101, -115,114,101,100,117,99,105,110,103,32,116,104,101,99,111,110,116,105,110,= 117,101 -,115,32,116,111,78,111,110,101,116,104,101,108,101,115,115,44,116,101,109= ,112, -101,114,97,116,117,114,101,115,10,9,9,60,97,32,104,114,101,102,61,34,99,1= 08,111, -115,101,32,116,111,32,116,104,101,101,120,97,109,112,108,101,115,32,111,1= 02,32, -105,115,32,97,98,111,117,116,32,116,104,101,40,115,101,101,32,98,101,108,= 111,119 -,41,46,34,32,105,100,61,34,115,101,97,114,99,104,112,114,111,102,101,115,= 115,105 -,111,110,97,108,105,115,32,97,118,97,105,108,97,98,108,101,116,104,101,32= ,111, -102,102,105,99,105,97,108,9,9,60,47,115,99,114,105,112,116,62,10,10,9,9,6= 0,100, -105,118,32,105,100,61,34,97,99,99,101,108,101,114,97,116,105,111,110,116,= 104,114 -,111,117,103,104,32,116,104,101,32,72,97,108,108,32,111,102,32,70,97,109,= 101,100 -,101,115,99,114,105,112,116,105,111,110,115,116,114,97,110,115,108,97,116= ,105, -111,110,115,105,110,116,101,114,102,101,114,101,110,99,101,32,116,121,112= ,101,61 -,39,116,101,120,116,47,114,101,99,101,110,116,32,121,101,97,114,115,105,1= 10,32, -116,104,101,32,119,111,114,108,100,118,101,114,121,32,112,111,112,117,108= ,97,114 -,123,98,97,99,107,103,114,111,117,110,100,58,116,114,97,100,105,116,105,1= 11,110, -97,108,32,115,111,109,101,32,111,102,32,116,104,101,32,99,111,110,110,101= ,99,116 -,101,100,32,116,111,101,120,112,108,111,105,116,97,116,105,111,110,101,10= 9,101, -114,103,101,110,99,101,32,111,102,99,111,110,115,116,105,116,117,116,105,= 111,110 -,65,32,72,105,115,116,111,114,121,32,111,102,115,105,103,110,105,102,105,= 99,97, -110,116,32,109,97,110,117,102,97,99,116,117,114,101,100,101,120,112,101,9= 9,116, -97,116,105,111,110,115,62,60,110,111,115,99,114,105,112,116,62,60,99,97,1= 10,32, -98,101,32,102,111,117,110,100,98,101,99,97,117,115,101,32,116,104,101,32,= 104,97, -115,32,110,111,116,32,98,101,101,110,110,101,105,103,104,98,111,117,114,1= 05,110, -103,119,105,116,104,111,117,116,32,116,104,101,32,97,100,100,101,100,32,1= 16,111, -32,116,104,101,9,60,108,105,32,99,108,97,115,115,61,34,105,110,115,116,11= 4,117, -109,101,110,116,97,108,83,111,118,105,101,116,32,85,110,105,111,110,97,99= ,107, -110,111,119,108,101,100,103,101,100,119,104,105,99,104,32,99,97,110,32,98= ,101, -110,97,109,101,32,102,111,114,32,116,104,101,97,116,116,101,110,116,105,1= 11,110, -32,116,111,97,116,116,101,109,112,116,115,32,116,111,32,100,101,118,101,1= 08,111, -112,109,101,110,116,115,73,110,32,102,97,99,116,44,32,116,104,101,60,108,= 105,32, -99,108,97,115,115,61,34,97,105,109,112,108,105,99,97,116,105,111,110,115,= 115,117 -,105,116,97,98,108,101,32,102,111,114,109,117,99,104,32,111,102,32,116,10= 4,101, -32,99,111,108,111,110,105,122,97,116,105,111,110,112,114,101,115,105,100,= 101,110 -,116,105,97,108,99,97,110,99,101,108,66,117,98,98,108,101,32,73,110,102,1= 11,114, -109,97,116,105,111,110,109,111,115,116,32,111,102,32,116,104,101,32,105,1= 15,32, -100,101,115,99,114,105,98,101,100,114,101,115,116,32,111,102,32,116,104,1= 01,32, -109,111,114,101,32,111,114,32,108,101,115,115,105,110,32,83,101,112,116,1= 01,109, -98,101,114,73,110,116,101,108,108,105,103,101,110,99,101,115,114,99,61,34= ,104, -116,116,112,58,47,47,112,120,59,32,104,101,105,103,104,116,58,32,97,118,9= 7,105, -108,97,98,108,101,32,116,111,109,97,110,117,102,97,99,116,117,114,101,114= ,104, -117,109,97,110,32,114,105,103,104,116,115,108,105,110,107,32,104,114,101,= 102,61, -34,47,97,118,97,105,108,97,98,105,108,105,116,121,112,114,111,112,111,114= ,116, -105,111,110,97,108,111,117,116,115,105,100,101,32,116,104,101,32,97,115,1= 16,114, -111,110,111,109,105,99,97,108,104,117,109,97,110,32,98,101,105,110,103,11= 5,110, -97,109,101,32,111,102,32,116,104,101,32,97,114,101,32,102,111,117,110,100= ,32,105 -,110,97,114,101,32,98,97,115,101,100,32,111,110,115,109,97,108,108,101,11= 4,32, -116,104,97,110,97,32,112,101,114,115,111,110,32,119,104,111,101,120,112,9= 7,110, -115,105,111,110,32,111,102,97,114,103,117,105,110,103,32,116,104,97,116,1= 10,111, -119,32,107,110,111,119,110,32,97,115,73,110,32,116,104,101,32,101,97,114,= 108,121 -,105,110,116,101,114,109,101,100,105,97,116,101,100,101,114,105,118,101,1= 00,32, -102,114,111,109,83,99,97,110,100,105,110,97,118,105,97,110,60,47,97,62,60= ,47,100 -,105,118,62,13,10,99,111,110,115,105,100,101,114,32,116,104,101,97,110,32= ,101, -115,116,105,109,97,116,101,100,116,104,101,32,78,97,116,105,111,110,97,10= 8,60, -100,105,118,32,105,100,61,34,112,97,103,114,101,115,117,108,116,105,110,1= 03,32, -105,110,99,111,109,109,105,115,115,105,111,110,101,100,97,110,97,108,111,= 103,111 -,117,115,32,116,111,97,114,101,32,114,101,113,117,105,114,101,100,47,117,= 108,62, -10,60,47,100,105,118,62,10,119,97,115,32,98,97,115,101,100,32,111,110,97,= 110,100 -,32,98,101,99,97,109,101,32,97,38,110,98,115,112,59,38,110,98,115,112,59,= 116,34, -32,118,97,108,117,101,61,34,34,32,119,97,115,32,99,97,112,116,117,114,101= ,100, -110,111,32,109,111,114,101,32,116,104,97,110,114,101,115,112,101,99,116,1= 05,118, -101,108,121,99,111,110,116,105,110,117,101,32,116,111,32,62,13,10,60,104,= 101,97, -100,62,13,10,60,119,101,114,101,32,99,114,101,97,116,101,100,109,111,114,= 101,32, -103,101,110,101,114,97,108,105,110,102,111,114,109,97,116,105,111,110,32,= 117,115 -,101,100,32,102,111,114,32,116,104,101,105,110,100,101,112,101,110,100,10= 1,110, -116,32,116,104,101,32,73,109,112,101,114,105,97,108,99,111,109,112,111,11= 0,101, -110,116,32,111,102,116,111,32,116,104,101,32,110,111,114,116,104,105,110,= 99,108, -117,100,101,32,116,104,101,32,67,111,110,115,116,114,117,99,116,105,111,1= 10,115, -105,100,101,32,111,102,32,116,104,101,32,119,111,117,108,100,32,110,111,1= 16,32, -98,101,102,111,114,32,105,110,115,116,97,110,99,101,105,110,118,101,110,1= 16,105, -111,110,32,111,102,109,111,114,101,32,99,111,109,112,108,101,120,99,111,1= 08,108, -101,99,116,105,118,101,108,121,98,97,99,107,103,114,111,117,110,100,58,32= ,116, -101,120,116,45,97,108,105,103,110,58,32,105,116,115,32,111,114,105,103,10= 5,110, -97,108,105,110,116,111,32,97,99,99,111,117,110,116,116,104,105,115,32,112= ,114, -111,99,101,115,115,97,110,32,101,120,116,101,110,115,105,118,101,104,111,= 119,101 -,118,101,114,44,32,116,104,101,116,104,101,121,32,97,114,101,32,110,111,1= 16,114, -101,106,101,99,116,101,100,32,116,104,101,99,114,105,116,105,99,105,115,1= 09,32, -111,102,100,117,114,105,110,103,32,119,104,105,99,104,112,114,111,98,97,9= 8,108, -121,32,116,104,101,116,104,105,115,32,97,114,116,105,99,108,101,40,102,11= 7,110, -99,116,105,111,110,40,41,123,73,116,32,115,104,111,117,108,100,32,98,101,= 97,110, -32,97,103,114,101,101,109,101,110,116,97,99,99,105,100,101,110,116,97,108= ,108, -121,100,105,102,102,101,114,115,32,102,114,111,109,65,114,99,104,105,116,= 101,99, -116,117,114,101,98,101,116,116,101,114,32,107,110,111,119,110,97,114,114,= 97,110, -103,101,109,101,110,116,115,105,110,102,108,117,101,110,99,101,32,111,110= ,97,116 -,116,101,110,100,101,100,32,116,104,101,105,100,101,110,116,105,99,97,108= ,32,116 -,111,115,111,117,116,104,32,111,102,32,116,104,101,112,97,115,115,32,116,= 104,114 -,111,117,103,104,120,109,108,34,32,116,105,116,108,101,61,34,119,101,105,= 103,104 -,116,58,98,111,108,100,59,99,114,101,97,116,105,110,103,32,116,104,101,10= 0,105, -115,112,108,97,121,58,110,111,110,101,114,101,112,108,97,99,101,100,32,11= 6,104, -101,60,105,109,103,32,115,114,99,61,34,47,105,104,116,116,112,115,58,47,4= 7,119, -119,119,46,87,111,114,108,100,32,87,97,114,32,73,73,116,101,115,116,105,1= 09,111, -110,105,97,108,115,102,111,117,110,100,32,105,110,32,116,104,101,114,101,= 113,117 -,105,114,101,100,32,116,111,32,97,110,100,32,116,104,97,116,32,116,104,10= 1,98, -101,116,119,101,101,110,32,116,104,101,32,119,97,115,32,100,101,115,105,1= 03,110, -101,100,99,111,110,115,105,115,116,115,32,111,102,32,99,111,110,115,105,1= 00,101, -114,97,98,108,121,112,117,98,108,105,115,104,101,100,32,98,121,116,104,10= 1,32, -108,97,110,103,117,97,103,101,67,111,110,115,101,114,118,97,116,105,111,1= 10,99, -111,110,115,105,115,116,101,100,32,111,102,114,101,102,101,114,32,116,111= ,32,116 -,104,101,98,97,99,107,32,116,111,32,116,104,101,32,99,115,115,34,32,109,1= 01,100, -105,97,61,34,80,101,111,112,108,101,32,102,114,111,109,32,97,118,97,105,1= 08,97, -98,108,101,32,111,110,112,114,111,118,101,100,32,116,111,32,98,101,115,11= 7,103, -103,101,115,116,105,111,110,115,34,119,97,115,32,107,110,111,119,110,32,9= 7,115, -118,97,114,105,101,116,105,101,115,32,111,102,108,105,107,101,108,121,32,= 116,111 -,32,98,101,99,111,109,112,114,105,115,101,100,32,111,102,115,117,112,112,= 111,114 -,116,32,116,104,101,32,104,97,110,100,115,32,111,102,32,116,104,101,99,11= 1,117, -112,108,101,100,32,119,105,116,104,99,111,110,110,101,99,116,32,97,110,10= 0,32,98 -,111,114,100,101,114,58,110,111,110,101,59,112,101,114,102,111,114,109,97= ,110,99 -,101,115,98,101,102,111,114,101,32,98,101,105,110,103,108,97,116,101,114,= 32,98, -101,99,97,109,101,99,97,108,99,117,108,97,116,105,111,110,115,111,102,116= ,101, -110,32,99,97,108,108,101,100,114,101,115,105,100,101,110,116,115,32,111,1= 02,109, -101,97,110,105,110,103,32,116,104,97,116,62,60,108,105,32,99,108,97,115,1= 15,61, -34,101,118,105,100,101,110,99,101,32,102,111,114,101,120,112,108,97,110,9= 7,116, -105,111,110,115,101,110,118,105,114,111,110,109,101,110,116,115,34,62,60,= 47,97, -62,60,47,100,105,118,62,119,104,105,99,104,32,97,108,108,111,119,115,73,1= 10,116, -114,111,100,117,99,116,105,111,110,100,101,118,101,108,111,112,101,100,32= ,98,121 -,97,32,119,105,100,101,32,114,97,110,103,101,111,110,32,98,101,104,97,108= ,102,32 -,111,102,118,97,108,105,103,110,61,34,116,111,112,34,112,114,105,110,99,1= 05,112, -108,101,32,111,102,97,116,32,116,104,101,32,116,105,109,101,44,60,47,110,= 111,115 -,99,114,105,112,116,62,13,115,97,105,100,32,116,111,32,104,97,118,101,105= ,110,32 -,116,104,101,32,102,105,114,115,116,119,104,105,108,101,32,111,116,104,10= 1,114, -115,104,121,112,111,116,104,101,116,105,99,97,108,112,104,105,108,111,115= ,111, -112,104,101,114,115,112,111,119,101,114,32,111,102,32,116,104,101,99,111,= 110,116 -,97,105,110,101,100,32,105,110,112,101,114,102,111,114,109,101,100,32,98,= 121,105 -,110,97,98,105,108,105,116,121,32,116,111,119,101,114,101,32,119,114,105,= 116,116 -,101,110,115,112,97,110,32,115,116,121,108,101,61,34,105,110,112,117,116,= 32,110, -97,109,101,61,34,116,104,101,32,113,117,101,115,116,105,111,110,105,110,1= 16,101, -110,100,101,100,32,102,111,114,114,101,106,101,99,116,105,111,110,32,111,= 102,105 -,109,112,108,105,101,115,32,116,104,97,116,105,110,118,101,110,116,101,10= 0,32, -116,104,101,116,104,101,32,115,116,97,110,100,97,114,100,119,97,115,32,11= 2,114, -111,98,97,98,108,121,108,105,110,107,32,98,101,116,119,101,101,110,112,11= 4,111, -102,101,115,115,111,114,32,111,102,105,110,116,101,114,97,99,116,105,111,= 110,115 -,99,104,97,110,103,105,110,103,32,116,104,101,73,110,100,105,97,110,32,79= ,99,101 -,97,110,32,99,108,97,115,115,61,34,108,97,115,116,119,111,114,107,105,110= ,103,32 -,119,105,116,104,39,104,116,116,112,58,47,47,119,119,119,46,121,101,97,11= 4,115, -32,98,101,102,111,114,101,84,104,105,115,32,119,97,115,32,116,104,101,114= ,101,99 -,114,101,97,116,105,111,110,97,108,101,110,116,101,114,105,110,103,32,116= ,104, -101,109,101,97,115,117,114,101,109,101,110,116,115,97,110,32,101,120,116,= 114,101 -,109,101,108,121,118,97,108,117,101,32,111,102,32,116,104,101,115,116,97,= 114,116 -,32,111,102,32,116,104,101,10,60,47,115,99,114,105,112,116,62,10,10,97,11= 0,32, -101,102,102,111,114,116,32,116,111,105,110,99,114,101,97,115,101,32,116,1= 04,101, -116,111,32,116,104,101,32,115,111,117,116,104,115,112,97,99,105,110,103,6= 1,34,48 -,34,62,115,117,102,102,105,99,105,101,110,116,108,121,116,104,101,32,69,1= 17,114, -111,112,101,97,110,99,111,110,118,101,114,116,101,100,32,116,111,99,108,1= 01,97, -114,84,105,109,101,111,117,116,100,105,100,32,110,111,116,32,104,97,118,1= 01,99, -111,110,115,101,113,117,101,110,116,108,121,102,111,114,32,116,104,101,32= ,110, -101,120,116,101,120,116,101,110,115,105,111,110,32,111,102,101,99,111,110= ,111, -109,105,99,32,97,110,100,97,108,116,104,111,117,103,104,32,116,104,101,97= ,114, -101,32,112,114,111,100,117,99,101,100,97,110,100,32,119,105,116,104,32,11= 6,104, -101,105,110,115,117,102,102,105,99,105,101,110,116,103,105,118,101,110,32= ,98,121 -,32,116,104,101,115,116,97,116,105,110,103,32,116,104,97,116,101,120,112,= 101,110 -,100,105,116,117,114,101,115,60,47,115,112,97,110,62,60,47,97,62,10,116,1= 04,111, -117,103,104,116,32,116,104,97,116,111,110,32,116,104,101,32,98,97,115,105= ,115,99 -,101,108,108,112,97,100,100,105,110,103,61,105,109,97,103,101,32,111,102,= 32,116, -104,101,114,101,116,117,114,110,105,110,103,32,116,111,105,110,102,111,11= 4,109, -97,116,105,111,110,44,115,101,112,97,114,97,116,101,100,32,98,121,97,115,= 115,97, -115,115,105,110,97,116,101,100,115,34,32,99,111,110,116,101,110,116,61,34= ,97,117 -,116,104,111,114,105,116,121,32,111,102,110,111,114,116,104,119,101,115,1= 16,101, -114,110,60,47,100,105,118,62,10,60,100,105,118,32,34,62,60,47,100,105,118= ,62,13, -10,32,32,99,111,110,115,117,108,116,97,116,105,111,110,99,111,109,109,117= ,110, -105,116,121,32,111,102,116,104,101,32,110,97,116,105,111,110,97,108,105,1= 16,32, -115,104,111,117,108,100,32,98,101,112,97,114,116,105,99,105,112,97,110,11= 6,115, -32,97,108,105,103,110,61,34,108,101,102,116,116,104,101,32,103,114,101,97= ,116, -101,115,116,115,101,108,101,99,116,105,111,110,32,111,102,115,117,112,101= ,114, -110,97,116,117,114,97,108,100,101,112,101,110,100,101,110,116,32,111,110,= 105,115 -,32,109,101,110,116,105,111,110,101,100,97,108,108,111,119,105,110,103,32= ,116, -104,101,119,97,115,32,105,110,118,101,110,116,101,100,97,99,99,111,109,11= 2,97, -110,121,105,110,103,104,105,115,32,112,101,114,115,111,110,97,108,97,118,= 97,105, -108,97,98,108,101,32,97,116,115,116,117,100,121,32,111,102,32,116,104,101= ,111, -110,32,116,104,101,32,111,116,104,101,114,101,120,101,99,117,116,105,111,= 110,32, -111,102,72,117,109,97,110,32,82,105,103,104,116,115,116,101,114,109,115,3= 2,111, -102,32,116,104,101,97,115,115,111,99,105,97,116,105,111,110,115,114,101,1= 15,101, -97,114,99,104,32,97,110,100,115,117,99,99,101,101,100,101,100,32,98,121,1= 00,101, -102,101,97,116,101,100,32,116,104,101,97,110,100,32,102,114,111,109,32,11= 6,104, -101,98,117,116,32,116,104,101,121,32,97,114,101,99,111,109,109,97,110,100= ,101, -114,32,111,102,115,116,97,116,101,32,111,102,32,116,104,101,121,101,97,11= 4,115, -32,111,102,32,97,103,101,116,104,101,32,115,116,117,100,121,32,111,102,60= ,117, -108,32,99,108,97,115,115,61,34,115,112,108,97,99,101,32,105,110,32,116,10= 4,101, -119,104,101,114,101,32,104,101,32,119,97,115,60,108,105,32,99,108,97,115,= 115,61, -34,102,116,104,101,114,101,32,97,114,101,32,110,111,119,104,105,99,104,32= ,98,101 -,99,97,109,101,104,101,32,112,117,98,108,105,115,104,101,100,101,120,112,= 114,101 -,115,115,101,100,32,105,110,116,111,32,119,104,105,99,104,32,116,104,101,= 99,111, -109,109,105,115,115,105,111,110,101,114,102,111,110,116,45,119,101,105,10= 3,104, -116,58,116,101,114,114,105,116,111,114,121,32,111,102,101,120,116,101,110= ,115, -105,111,110,115,34,62,82,111,109,97,110,32,69,109,112,105,114,101,101,113= ,117,97 -,108,32,116,111,32,116,104,101,73,110,32,99,111,110,116,114,97,115,116,44= ,104, -111,119,101,118,101,114,44,32,97,110,100,105,115,32,116,121,112,105,99,97= ,108, -108,121,97,110,100,32,104,105,115,32,119,105,102,101,40,97,108,115,111,32= ,99,97, -108,108,101,100,62,60,117,108,32,99,108,97,115,115,61,34,101,102,102,101,= 99,116, -105,118,101,108,121,32,101,118,111,108,118,101,100,32,105,110,116,111,115= ,101, -101,109,32,116,111,32,104,97,118,101,119,104,105,99,104,32,105,115,32,116= ,104, -101,116,104,101,114,101,32,119,97,115,32,110,111,97,110,32,101,120,99,101= ,108, -108,101,110,116,97,108,108,32,111,102,32,116,104,101,115,101,100,101,115,= 99,114, -105,98,101,100,32,98,121,73,110,32,112,114,97,99,116,105,99,101,44,98,114= ,111,97 -,100,99,97,115,116,105,110,103,99,104,97,114,103,101,100,32,119,105,116,1= 04,114, -101,102,108,101,99,116,101,100,32,105,110,115,117,98,106,101,99,116,101,1= 00,32, -116,111,109,105,108,105,116,97,114,121,32,97,110,100,116,111,32,116,104,1= 01,32, -112,111,105,110,116,101,99,111,110,111,109,105,99,97,108,108,121,115,101,= 116,84, -97,114,103,101,116,105,110,103,97,114,101,32,97,99,116,117,97,108,108,121= ,118, -105,99,116,111,114,121,32,111,118,101,114,40,41,59,60,47,115,99,114,105,1= 12,116, -62,99,111,110,116,105,110,117,111,117,115,108,121,114,101,113,117,105,114= ,101, -100,32,102,111,114,101,118,111,108,117,116,105,111,110,97,114,121,97,110,= 32,101, -102,102,101,99,116,105,118,101,110,111,114,116,104,32,111,102,32,116,104,= 101,44, -32,119,104,105,99,104,32,119,97,115,32,102,114,111,110,116,32,111,102,32,= 116,104 -,101,111,114,32,111,116,104,101,114,119,105,115,101,115,111,109,101,32,10= 2,111, -114,109,32,111,102,104,97,100,32,110,111,116,32,98,101,101,110,103,101,11= 0,101, -114,97,116,101,100,32,98,121,105,110,102,111,114,109,97,116,105,111,110,4= 6,112, -101,114,109,105,116,116,101,100,32,116,111,105,110,99,108,117,100,101,115= ,32,116 -,104,101,100,101,118,101,108,111,112,109,101,110,116,44,101,110,116,101,1= 14,101, -100,32,105,110,116,111,116,104,101,32,112,114,101,118,105,111,117,115,99,= 111,110 -,115,105,115,116,101,110,116,108,121,97,114,101,32,107,110,111,119,110,32= ,97,115 -,116,104,101,32,102,105,101,108,100,32,111,102,116,104,105,115,32,116,121= ,112, -101,32,111,102,103,105,118,101,110,32,116,111,32,116,104,101,116,104,101,= 32,116, -105,116,108,101,32,111,102,99,111,110,116,97,105,110,115,32,116,104,101,1= 05,110, -115,116,97,110,99,101,115,32,111,102,105,110,32,116,104,101,32,110,111,11= 4,116, -104,100,117,101,32,116,111,32,116,104,101,105,114,97,114,101,32,100,101,1= 15,105, -103,110,101,100,99,111,114,112,111,114,97,116,105,111,110,115,119,97,115,= 32,116, -104,97,116,32,116,104,101,111,110,101,32,111,102,32,116,104,101,115,101,1= 09,111, -114,101,32,112,111,112,117,108,97,114,115,117,99,99,101,101,100,101,100,3= 2,105, -110,115,117,112,112,111,114,116,32,102,114,111,109,105,110,32,100,105,102= ,102, -101,114,101,110,116,100,111,109,105,110,97,116,101,100,32,98,121,100,101,= 115,105 -,103,110,101,100,32,102,111,114,111,119,110,101,114,115,104,105,112,32,11= 1,102, -97,110,100,32,112,111,115,115,105,98,108,121,115,116,97,110,100,97,114,10= 0,105, -122,101,100,114,101,115,112,111,110,115,101,84,101,120,116,119,97,115,32,= 105,110 -,116,101,110,100,101,100,114,101,99,101,105,118,101,100,32,116,104,101,97= ,115, -115,117,109,101,100,32,116,104,97,116,97,114,101,97,115,32,111,102,32,116= ,104, -101,112,114,105,109,97,114,105,108,121,32,105,110,116,104,101,32,98,97,11= 5,105, -115,32,111,102,105,110,32,116,104,101,32,115,101,110,115,101,97,99,99,111= ,117, -110,116,115,32,102,111,114,100,101,115,116,114,111,121,101,100,32,98,121,= 97,116, -32,108,101,97,115,116,32,116,119,111,119,97,115,32,100,101,99,108,97,114,= 101,100 -,99,111,117,108,100,32,110,111,116,32,98,101,83,101,99,114,101,116,97,114= ,121,32 -,111,102,97,112,112,101,97,114,32,116,111,32,98,101,109,97,114,103,105,11= 0,45, -116,111,112,58,49,47,94,92,115,43,124,92,115,43,36,47,103,101,41,123,116,= 104,114 -,111,119,32,101,125,59,116,104,101,32,115,116,97,114,116,32,111,102,116,1= 19,111, -32,115,101,112,97,114,97,116,101,108,97,110,103,117,97,103,101,32,97,110,= 100,119 -,104,111,32,104,97,100,32,98,101,101,110,111,112,101,114,97,116,105,111,1= 10,32, -111,102,100,101,97,116,104,32,111,102,32,116,104,101,114,101,97,108,32,11= 0,117, -109,98,101,114,115,9,60,108,105,110,107,32,114,101,108,61,34,112,114,111,= 118,105 -,100,101,100,32,116,104,101,116,104,101,32,115,116,111,114,121,32,111,102= ,99,111 -,109,112,101,116,105,116,105,111,110,115,101,110,103,108,105,115,104,32,4= 0,85,75 -,41,101,110,103,108,105,115,104,32,40,85,83,41,208,156,208,190,208,189,20= 8,179, -208,190,208,187,208,161,209,128,208,191,209,129,208,186,208,184,209,129,2= 09,128, -208,191,209,129,208,186,208,184,209,129,209,128,208,191,209,129,208,186,2= 08,190, -217,132,216,185,216,177,216,168,217,138,216,169,230,173,163,233,171,148,2= 28,184, -173,230,150,135,231,174,128,228,189,147,228,184,173,230,150,135,231,185,1= 29,228, -189,147,228,184,173,230,150,135,230,156,137,233,153,144,229,133,172,229,1= 43,184, -228,186,186,230,176,145,230,148,191,229,186,156,233,152,191,233,135,140,2= 29,183, -180,229,183,180,231,164,190,228,188,154,228,184,187,228,185,137,230,147,1= 41,228, -189,156,231,179,187,231,187,159,230,148,191,231,173,150,230,179,149,232,1= 67,132, -105,110,102,111,114,109,97,99,105,195,179,110,104,101,114,114,97,109,105,= 101,110 -,116,97,115,101,108,101,99,116,114,195,179,110,105,99,111,100,101,115,99,= 114,105 -,112,99,105,195,179,110,99,108,97,115,105,102,105,99,97,100,111,115,99,11= 1,110, -111,99,105,109,105,101,110,116,111,112,117,98,108,105,99,97,99,105,195,17= 9,110, -114,101,108,97,99,105,111,110,97,100,97,115,105,110,102,111,114,109,195,1= 61,116, -105,99,97,114,101,108,97,99,105,111,110,97,100,111,115,100,101,112,97,114= ,116,97 -,109,101,110,116,111,116,114,97,98,97,106,97,100,111,114,101,115,100,105,= 114,101 -,99,116,97,109,101,110,116,101,97,121,117,110,116,97,109,105,101,110,116,= 111,109 -,101,114,99,97,100,111,76,105,98,114,101,99,111,110,116,195,161,99,116,10= 1,110, -111,115,104,97,98,105,116,97,99,105,111,110,101,115,99,117,109,112,108,10= 5,109, -105,101,110,116,111,114,101,115,116,97,117,114,97,110,116,101,115,100,105= ,115, -112,111,115,105,99,105,195,179,110,99,111,110,115,101,99,117,101,110,99,1= 05,97, -101,108,101,99,116,114,195,179,110,105,99,97,97,112,108,105,99,97,99,105,= 111,110 -,101,115,100,101,115,99,111,110,101,99,116,97,100,111,105,110,115,116,97,= 108,97, -99,105,195,179,110,114,101,97,108,105,122,97,99,105,195,179,110,117,116,1= 05,108, -105,122,97,99,105,195,179,110,101,110,99,105,99,108,111,112,101,100,105,9= 7,101, -110,102,101,114,109,101,100,97,100,101,115,105,110,115,116,114,117,109,10= 1,110, -116,111,115,101,120,112,101,114,105,101,110,99,105,97,115,105,110,115,116= ,105, -116,117,99,105,195,179,110,112,97,114,116,105,99,117,108,97,114,101,115,1= 15,117, -98,99,97,116,101,103,111,114,105,97,209,130,208,190,208,187,209,140,208,1= 86,208, -190,208,160,208,190,209,129,209,129,208,184,208,184,209,128,208,176,208,1= 77,208, -190,209,130,209,139,208,177,208,190,208,187,209,140,209,136,208,181,208,1= 91,209, -128,208,190,209,129,209,130,208,190,208,188,208,190,208,182,208,181,209,1= 30,208, -181,208,180,209,128,209,131,208,179,208,184,209,133,209,129,208,187,209,1= 31,209, -135,208,176,208,181,209,129,208,181,208,185,209,135,208,176,209,129,208,1= 78,209, -129,208,181,208,179,208,180,208,176,208,160,208,190,209,129,209,129,208,1= 84,209, -143,208,156,208,190,209,129,208,186,208,178,208,181,208,180,209,128,209,1= 31,208, -179,208,184,208,181,208,179,208,190,209,128,208,190,208,180,208,176,208,1= 78,208, -190,208,191,209,128,208,190,209,129,208,180,208,176,208,189,208,189,209,1= 39,209, -133,208,180,208,190,208,187,208,182,208,189,209,139,208,184,208,188,208,1= 81,208, -189,208,189,208,190,208,156,208,190,209,129,208,186,208,178,209,139,209,1= 28,209, -131,208,177,208,187,208,181,208,185,208,156,208,190,209,129,208,186,208,1= 78,208, -176,209,129,209,130,209,128,208,176,208,189,209,139,208,189,208,184,209,1= 35,208, -181,208,179,208,190,209,128,208,176,208,177,208,190,209,130,208,181,208,1= 80,208, -190,208,187,208,182,208,181,208,189,209,131,209,129,208,187,209,131,208,1= 79,208, -184,209,130,208,181,208,191,208,181,209,128,209,140,208,158,208,180,208,1= 89,208, -176,208,186,208,190,208,191,208,190,209,130,208,190,208,188,209,131,209,1= 28,208, -176,208,177,208,190,209,130,209,131,208,176,208,191,209,128,208,181,208,1= 87,209, -143,208,178,208,190,208,190,208,177,209,137,208,181,208,190,208,180,208,1= 89,208, -190,208,179,208,190,209,129,208,178,208,190,208,181,208,179,208,190,209,1= 29,209, -130,208,176,209,130,209,140,208,184,208,180,209,128,209,131,208,179,208,1= 90,208, -185,209,132,208,190,209,128,209,131,208,188,208,181,209,133,208,190,209,1= 28,208, -190,209,136,208,190,208,191,209,128,208,190,209,130,208,184,208,178,209,1= 29,209, -129,209,139,208,187,208,186,208,176,208,186,208,176,208,182,208,180,209,1= 39,208, -185,208,178,208,187,208,176,209,129,209,130,208,184,208,179,209,128,209,1= 31,208, -191,208,191,209,139,208,178,208,188,208,181,209,129,209,130,208,181,209,1= 28,208, -176,208,177,208,190,209,130,208,176,209,129,208,186,208,176,208,183,208,1= 76,208, -187,208,191,208,181,209,128,208,178,209,139,208,185,208,180,208,181,208,1= 87,208, -176,209,130,209,140,208,180,208,181,208,189,209,140,208,179,208,184,208,1= 91,208, -181,209,128,208,184,208,190,208,180,208,177,208,184,208,183,208,189,208,1= 81,209, -129,208,190,209,129,208,189,208,190,208,178,208,181,208,188,208,190,208,1= 88,208, -181,208,189,209,130,208,186,209,131,208,191,208,184,209,130,209,140,208,1= 80,208, -190,208,187,208,182,208,189,208,176,209,128,208,176,208,188,208,186,208,1= 76,209, -133,208,189,208,176,209,135,208,176,208,187,208,190,208,160,208,176,208,1= 77,208, -190,209,130,208,176,208,162,208,190,208,187,209,140,208,186,208,190,209,1= 29,208, -190,208,178,209,129,208,181,208,188,208,178,209,130,208,190,209,128,208,1= 90,208, -185,208,189,208,176,209,135,208,176,208,187,208,176,209,129,208,191,208,1= 84,209, -129,208,190,208,186,209,129,208,187,209,131,208,182,208,177,209,139,209,1= 29,208, -184,209,129,209,130,208,181,208,188,208,191,208,181,209,135,208,176,209,1= 30,208, -184,208,189,208,190,208,178,208,190,208,179,208,190,208,191,208,190,208,1= 88,208, -190,209,137,208,184,209,129,208,176,208,185,209,130,208,190,208,178,208,1= 91,208, -190,209,135,208,181,208,188,209,131,208,191,208,190,208,188,208,190,209,1= 37,209, -140,208,180,208,190,208,187,208,182,208,189,208,190,209,129,209,129,209,1= 39,208, -187,208,186,208,184,208,177,209,139,209,129,209,130,209,128,208,190,208,1= 80,208, -176,208,189,208,189,209,139,208,181,208,188,208,189,208,190,208,179,208,1= 84,208, -181,208,191,209,128,208,190,208,181,208,186,209,130,208,161,208,181,208,1= 85,209, -135,208,176,209,129,208,188,208,190,208,180,208,181,208,187,208,184,209,1= 30,208, -176,208,186,208,190,208,179,208,190,208,190,208,189,208,187,208,176,208,1= 85,208, -189,208,179,208,190,209,128,208,190,208,180,208,181,208,178,208,181,209,1= 28,209, -129,208,184,209,143,209,129,209,130,209,128,208,176,208,189,208,181,209,1= 32,208, -184,208,187,209,140,208,188,209,139,209,131,209,128,208,190,208,178,208,1= 89,209, -143,209,128,208,176,208,183,208,189,209,139,209,133,208,184,209,129,208,1= 86,208, -176,209,130,209,140,208,189,208,181,208,180,208,181,208,187,209,142,209,1= 43,208, -189,208,178,208,176,209,128,209,143,208,188,208,181,208,189,209,140,209,1= 36,208, -181,208,188,208,189,208,190,208,179,208,184,209,133,208,180,208,176,208,1= 89,208, -189,208,190,208,185,208,183,208,189,208,176,209,135,208,184,209,130,208,1= 89,208, -181,208,187,209,140,208,183,209,143,209,132,208,190,209,128,209,131,208,1= 88,208, -176,208,162,208,181,208,191,208,181,209,128,209,140,208,188,208,181,209,1= 29,209, -143,209,134,208,176,208,183,208,176,209,137,208,184,209,130,209,139,208,1= 55,209, -131,209,135,209,136,208,184,208,181,224,164,168,224,164,185,224,165,128,2= 24,164, -130,224,164,149,224,164,176,224,164,168,224,165,135,224,164,133,224,164,1= 70,224, -164,168,224,165,135,224,164,149,224,164,191,224,164,175,224,164,190,224,1= 64,149, -224,164,176,224,165,135,224,164,130,224,164,133,224,164,168,224,165,141,2= 24,164, -175,224,164,149,224,165,141,224,164,175,224,164,190,224,164,151,224,164,1= 90,224, -164,135,224,164,161,224,164,172,224,164,190,224,164,176,224,165,135,224,1= 64,149, -224,164,191,224,164,184,224,165,128,224,164,166,224,164,191,224,164,175,2= 24,164, -190,224,164,170,224,164,185,224,164,178,224,165,135,224,164,184,224,164,1= 91,224, -164,130,224,164,185,224,164,173,224,164,190,224,164,176,224,164,164,224,1= 64,133, -224,164,170,224,164,168,224,165,128,224,164,181,224,164,190,224,164,178,2= 24,165, -135,224,164,184,224,165,135,224,164,181,224,164,190,224,164,149,224,164,1= 76,224, -164,164,224,165,135,224,164,174,224,165,135,224,164,176,224,165,135,224,1= 64,185, -224,165,139,224,164,168,224,165,135,224,164,184,224,164,149,224,164,164,2= 24,165, -135,224,164,172,224,164,185,224,165,129,224,164,164,224,164,184,224,164,1= 90,224, -164,135,224,164,159,224,164,185,224,165,139,224,164,151,224,164,190,224,1= 64,156, -224,164,190,224,164,168,224,165,135,224,164,174,224,164,191,224,164,168,2= 24,164, -159,224,164,149,224,164,176,224,164,164,224,164,190,224,164,149,224,164,1= 76,224, -164,168,224,164,190,224,164,137,224,164,168,224,164,149,224,165,135,224,1= 64,175, -224,164,185,224,164,190,224,164,129,224,164,184,224,164,172,224,164,184,2= 24,165, -135,224,164,173,224,164,190,224,164,183,224,164,190,224,164,134,224,164,1= 70,224, -164,149,224,165,135,224,164,178,224,164,191,224,164,175,224,165,135,224,1= 64,182, -224,165,129,224,164,176,224,165,130,224,164,135,224,164,184,224,164,149,2= 24,165, -135,224,164,152,224,164,130,224,164,159,224,165,135,224,164,174,224,165,1= 35,224, -164,176,224,165,128,224,164,184,224,164,149,224,164,164,224,164,190,224,1= 64,174, -224,165,135,224,164,176,224,164,190,224,164,178,224,165,135,224,164,149,2= 24,164, -176,224,164,133,224,164,167,224,164,191,224,164,149,224,164,133,224,164,1= 70,224, -164,168,224,164,190,224,164,184,224,164,174,224,164,190,224,164,156,224,1= 64,174, -224,165,129,224,164,157,224,165,135,224,164,149,224,164,190,224,164,176,2= 24,164, -163,224,164,185,224,165,139,224,164,164,224,164,190,224,164,149,224,164,1= 61,224, -164,188,224,165,128,224,164,175,224,164,185,224,164,190,224,164,130,224,1= 64,185, -224,165,139,224,164,159,224,164,178,224,164,182,224,164,172,224,165,141,2= 24,164, -166,224,164,178,224,164,191,224,164,175,224,164,190,224,164,156,224,165,1= 28,224, -164,181,224,164,168,224,164,156,224,164,190,224,164,164,224,164,190,224,1= 64,149, -224,165,136,224,164,184,224,165,135,224,164,134,224,164,170,224,164,149,2= 24,164, -190,224,164,181,224,164,190,224,164,178,224,165,128,224,164,166,224,165,1= 35,224, -164,168,224,165,135,224,164,170,224,165,130,224,164,176,224,165,128,224,1= 64,170, -224,164,190,224,164,168,224,165,128,224,164,137,224,164,184,224,164,149,2= 24,165, -135,224,164,185,224,165,139,224,164,151,224,165,128,224,164,172,224,165,1= 36,224, -164,160,224,164,149,224,164,134,224,164,170,224,164,149,224,165,128,224,1= 64,181, -224,164,176,224,165,141,224,164,183,224,164,151,224,164,190,224,164,130,2= 24,164, -181,224,164,134,224,164,170,224,164,149,224,165,139,224,164,156,224,164,1= 91,224, -164,178,224,164,190,224,164,156,224,164,190,224,164,168,224,164,190,224,1= 64,184, -224,164,185,224,164,174,224,164,164,224,164,185,224,164,174,224,165,135,2= 24,164, -130,224,164,137,224,164,168,224,164,149,224,165,128,224,164,175,224,164,1= 90,224, -164,185,224,165,130,224,164,166,224,164,176,224,165,141,224,164,156,224,1= 64,184, -224,165,130,224,164,154,224,165,128,224,164,170,224,164,184,224,164,130,2= 24,164, -166,224,164,184,224,164,181,224,164,190,224,164,178,224,164,185,224,165,1= 39,224, -164,168,224,164,190,224,164,185,224,165,139,224,164,164,224,165,128,224,1= 64,156, -224,165,136,224,164,184,224,165,135,224,164,181,224,164,190,224,164,170,2= 24,164, -184,224,164,156,224,164,168,224,164,164,224,164,190,224,164,168,224,165,1= 35,224, -164,164,224,164,190,224,164,156,224,164,190,224,164,176,224,165,128,224,1= 64,152, -224,164,190,224,164,175,224,164,178,224,164,156,224,164,191,224,164,178,2= 24,165, -135,224,164,168,224,165,128,224,164,154,224,165,135,224,164,156,224,164,1= 90,224, -164,130,224,164,154,224,164,170,224,164,164,224,165,141,224,164,176,224,1= 64,151, -224,165,130,224,164,151,224,164,178,224,164,156,224,164,190,224,164,164,2= 24,165, -135,224,164,172,224,164,190,224,164,185,224,164,176,224,164,134,224,164,1= 70,224, -164,168,224,165,135,224,164,181,224,164,190,224,164,185,224,164,168,224,1= 64,135, -224,164,184,224,164,149,224,164,190,224,164,184,224,165,129,224,164,172,2= 24,164, -185,224,164,176,224,164,185,224,164,168,224,165,135,224,164,135,224,164,1= 84,224, -164,184,224,165,135,224,164,184,224,164,185,224,164,191,224,164,164,224,1= 64,172, -224,164,161,224,164,188,224,165,135,224,164,152,224,164,159,224,164,168,2= 24,164, -190,224,164,164,224,164,178,224,164,190,224,164,182,224,164,170,224,164,1= 90,224, -164,130,224,164,154,224,164,182,224,165,141,224,164,176,224,165,128,224,1= 64,172, -224,164,161,224,164,188,224,165,128,224,164,185,224,165,139,224,164,164,2= 24,165, -135,224,164,184,224,164,190,224,164,136,224,164,159,224,164,182,224,164,1= 90,224, -164,175,224,164,166,224,164,184,224,164,149,224,164,164,224,165,128,224,1= 64,156, -224,164,190,224,164,164,224,165,128,224,164,181,224,164,190,224,164,178,2= 24,164, -190,224,164,185,224,164,156,224,164,190,224,164,176,224,164,170,224,164,1= 59,224, -164,168,224,164,190,224,164,176,224,164,150,224,164,168,224,165,135,224,1= 64,184, -224,164,161,224,164,188,224,164,149,224,164,174,224,164,191,224,164,178,2= 24,164, -190,224,164,137,224,164,184,224,164,149,224,165,128,224,164,149,224,165,1= 35,224, -164,181,224,164,178,224,164,178,224,164,151,224,164,164,224,164,190,224,1= 64,150, -224,164,190,224,164,168,224,164,190,224,164,133,224,164,176,224,165,141,2= 24,164, -165,224,164,156,224,164,185,224,164,190,224,164,130,224,164,166,224,165,1= 35,224, -164,150,224,164,190,224,164,170,224,164,185,224,164,178,224,165,128,224,1= 64,168, -224,164,191,224,164,175,224,164,174,224,164,172,224,164,191,224,164,168,2= 24,164, -190,224,164,172,224,165,136,224,164,130,224,164,149,224,164,149,224,164,1= 85,224, -165,128,224,164,130,224,164,149,224,164,185,224,164,168,224,164,190,224,1= 64,166, -224,165,135,224,164,164,224,164,190,224,164,185,224,164,174,224,164,178,2= 24,165, -135,224,164,149,224,164,190,224,164,171,224,165,128,224,164,156,224,164,1= 72,224, -164,149,224,164,191,224,164,164,224,165,129,224,164,176,224,164,164,224,1= 64,174, -224,164,190,224,164,130,224,164,151,224,164,181,224,164,185,224,165,128,2= 24,164, -130,224,164,176,224,165,139,224,164,156,224,164,188,224,164,174,224,164,1= 91,224, -164,178,224,165,128,224,164,134,224,164,176,224,165,139,224,164,170,224,1= 64,184, -224,165,135,224,164,168,224,164,190,224,164,175,224,164,190,224,164,166,2= 24,164, -181,224,164,178,224,165,135,224,164,168,224,165,135,224,164,150,224,164,1= 90,224, -164,164,224,164,190,224,164,149,224,164,176,224,165,128,224,164,172,224,1= 64,137, -224,164,168,224,164,149,224,164,190,224,164,156,224,164,181,224,164,190,2= 24,164, -172,224,164,170,224,165,130,224,164,176,224,164,190,224,164,172,224,164,1= 61,224, -164,188,224,164,190,224,164,184,224,165,140,224,164,166,224,164,190,224,1= 64,182, -224,165,135,224,164,175,224,164,176,224,164,149,224,164,191,224,164,175,2= 24,165, -135,224,164,149,224,164,185,224,164,190,224,164,130,224,164,133,224,164,1= 49,224, -164,184,224,164,176,224,164,172,224,164,168,224,164,190,224,164,143,224,1= 64,181, -224,164,185,224,164,190,224,164,130,224,164,184,224,165,141,224,164,165,2= 24,164, -178,224,164,174,224,164,191,224,164,178,224,165,135,224,164,178,224,165,1= 35,224, -164,150,224,164,149,224,164,181,224,164,191,224,164,183,224,164,175,224,1= 64,149, -224,165,141,224,164,176,224,164,130,224,164,184,224,164,174,224,165,130,2= 24,164, -185,224,164,165,224,164,190,224,164,168,224,164,190,216,170,216,179,216,1= 70,216, -183,217,138,216,185,217,133,216,180,216,167,216,177,217,131,216,169,216,1= 68,217, -136,216,167,216,179,216,183,216,169,216,167,217,132,216,181,217,129,216,1= 73,216, -169,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,1= 74,216, -167,216,181,216,169,216,167,217,132,217,133,216,178,217,138,216,175,216,1= 67,217, -132,216,185,216,167,217,133,216,169,216,167,217,132,217,131,216,167,216,1= 70,216, -168,216,167,217,132,216,177,216,175,217,136,216,175,216,168,216,177,217,1= 34,216, -167,217,133,216,172,216,167,217,132,216,175,217,136,217,132,216,169,216,1= 67,217, -132,216,185,216,167,217,132,217,133,216,167,217,132,217,133,217,136,217,1= 30,216, -185,216,167,217,132,216,185,216,177,216,168,217,138,216,167,217,132,216,1= 79,216, -177,217,138,216,185,216,167,217,132,216,172,217,136,216,167,217,132,216,1= 67,217, -132,216,176,217,135,216,167,216,168,216,167,217,132,216,173,217,138,216,1= 67,216, -169,216,167,217,132,216,173,217,130,217,136,217,130,216,167,217,132,217,1= 31,216, -177,217,138,217,133,216,167,217,132,216,185,216,177,216,167,217,130,217,1= 33,216, -173,217,129,217,136,216,184,216,169,216,167,217,132,216,171,216,167,217,1= 34,217, -138,217,133,216,180,216,167,217,135,216,175,216,169,216,167,217,132,217,1= 33,216, -177,216,163,216,169,216,167,217,132,217,130,216,177,216,162,217,134,216,1= 67,217, -132,216,180,216,168,216,167,216,168,216,167,217,132,216,173,217,136,216,1= 67,216, -177,216,167,217,132,216,172,216,175,217,138,216,175,216,167,217,132,216,1= 63,216, -179,216,177,216,169,216,167,217,132,216,185,217,132,217,136,217,133,217,1= 33,216, -172,217,133,217,136,216,185,216,169,216,167,217,132,216,177,216,173,217,1= 33,217, -134,216,167,217,132,217,134,217,130,216,167,216,183,217,129,217,132,216,1= 79,216, -183,217,138,217,134,216,167,217,132,217,131,217,136,217,138,216,170,216,1= 67,217, -132,216,175,217,134,217,138,216,167,216,168,216,177,217,131,216,167,216,1= 70,217, -135,216,167,217,132,216,177,217,138,216,167,216,182,216,170,216,173,217,1= 38,216, -167,216,170,217,138,216,168,216,170,217,136,217,130,217,138,216,170,216,1= 67,217, -132,216,163,217,136,217,132,217,137,216,167,217,132,216,168,216,177,217,1= 38,216, -175,216,167,217,132,217,131,217,132,216,167,217,133,216,167,217,132,216,1= 77,216, -167,216,168,216,183,216,167,217,132,216,180,216,174,216,181,217,138,216,1= 79,217, -138,216,167,216,177,216,167,216,170,216,167,217,132,216,171,216,167,217,1= 32,216, -171,216,167,217,132,216,181,217,132,216,167,216,169,216,167,217,132,216,1= 73,216, -175,217,138,216,171,216,167,217,132,216,178,217,136,216,167,216,177,216,1= 67,217, -132,216,174,217,132,217,138,216,172,216,167,217,132,216,172,217,133,217,1= 38,216, -185,216,167,217,132,216,185,216,167,217,133,217,135,216,167,217,132,216,1= 72,217, -133,216,167,217,132,216,167,217,132,216,179,216,167,216,185,216,169,217,1= 33,216, -180,216,167,217,135,216,175,217,135,216,167,217,132,216,177,216,166,217,1= 38,216, -179,216,167,217,132,216,175,216,174,217,136,217,132,216,167,217,132,217,1= 29,217, -134,217,138,216,169,216,167,217,132,217,131,216,170,216,167,216,168,216,1= 67,217, -132,216,175,217,136,216,177,217,138,216,167,217,132,216,175,216,177,217,1= 36,216, -179,216,167,216,179,216,170,216,186,216,177,217,130,216,170,216,181,216,1= 67,217, -133,217,138,217,133,216,167,217,132,216,168,217,134,216,167,216,170,216,1= 67,217, -132,216,185,216,184,217,138,217,133,101,110,116,101,114,116,97,105,110,10= 9,101, -110,116,117,110,100,101,114,115,116,97,110,100,105,110,103,32,61,32,102,1= 17,110, -99,116,105,111,110,40,41,46,106,112,103,34,32,119,105,100,116,104,61,34,9= 9,111, -110,102,105,103,117,114,97,116,105,111,110,46,112,110,103,34,32,119,105,1= 00,116, -104,61,34,60,98,111,100,121,32,99,108,97,115,115,61,34,77,97,116,104,46,1= 14,97, -110,100,111,109,40,41,99,111,110,116,101,109,112,111,114,97,114,121,32,85= ,110, -105,116,101,100,32,83,116,97,116,101,115,99,105,114,99,117,109,115,116,97= ,110,99 -,101,115,46,97,112,112,101,110,100,67,104,105,108,100,40,111,114,103,97,1= 10,105, -122,97,116,105,111,110,115,60,115,112,97,110,32,99,108,97,115,115,61,34,3= 4,62,60 -,105,109,103,32,115,114,99,61,34,47,100,105,115,116,105,110,103,117,105,1= 15,104, -101,100,116,104,111,117,115,97,110,100,115,32,111,102,32,99,111,109,109,1= 17,110, -105,99,97,116,105,111,110,99,108,101,97,114,34,62,60,47,100,105,118,62,10= 5,110, -118,101,115,116,105,103,97,116,105,111,110,102,97,118,105,99,111,110,46,1= 05,99, -111,34,32,109,97,114,103,105,110,45,114,105,103,104,116,58,98,97,115,101,= 100,32, -111,110,32,116,104,101,32,77,97,115,115,97,99,104,117,115,101,116,116,115= ,116,97 -,98,108,101,32,98,111,114,100,101,114,61,105,110,116,101,114,110,97,116,1= 05,111, -110,97,108,97,108,115,111,32,107,110,111,119,110,32,97,115,112,114,111,11= 0,117, -110,99,105,97,116,105,111,110,98,97,99,107,103,114,111,117,110,100,58,35,= 102,112 -,97,100,100,105,110,103,45,108,101,102,116,58,70,111,114,32,101,120,97,10= 9,112, -108,101,44,32,109,105,115,99,101,108,108,97,110,101,111,117,115,38,108,11= 6,59,47 -,109,97,116,104,38,103,116,59,112,115,121,99,104,111,108,111,103,105,99,9= 7,108, -105,110,32,112,97,114,116,105,99,117,108,97,114,101,97,114,99,104,34,32,1= 16,121, -112,101,61,34,102,111,114,109,32,109,101,116,104,111,100,61,34,97,115,32,= 111,112 -,112,111,115,101,100,32,116,111,83,117,112,114,101,109,101,32,67,111,117,= 114,116 -,111,99,99,97,115,105,111,110,97,108,108,121,32,65,100,100,105,116,105,11= 1,110, -97,108,108,121,44,78,111,114,116,104,32,65,109,101,114,105,99,97,112,120,= 59,98, -97,99,107,103,114,111,117,110,100,111,112,112,111,114,116,117,110,105,116= ,105, -101,115,69,110,116,101,114,116,97,105,110,109,101,110,116,46,116,111,76,1= 11,119, -101,114,67,97,115,101,40,109,97,110,117,102,97,99,116,117,114,105,110,103= ,112, -114,111,102,101,115,115,105,111,110,97,108,32,99,111,109,98,105,110,101,1= 00,32, -119,105,116,104,70,111,114,32,105,110,115,116,97,110,99,101,44,99,111,110= ,115, -105,115,116,105,110,103,32,111,102,34,32,109,97,120,108,101,110,103,116,1= 04,61, -34,114,101,116,117,114,110,32,102,97,108,115,101,59,99,111,110,115,99,105= ,111, -117,115,110,101,115,115,77,101,100,105,116,101,114,114,97,110,101,97,110,= 101,120 -,116,114,97,111,114,100,105,110,97,114,121,97,115,115,97,115,115,105,110,= 97,116, -105,111,110,115,117,98,115,101,113,117,101,110,116,108,121,32,98,117,116,= 116,111 -,110,32,116,121,112,101,61,34,116,104,101,32,110,117,109,98,101,114,32,11= 1,102, -116,104,101,32,111,114,105,103,105,110,97,108,32,99,111,109,112,114,101,1= 04,101, -110,115,105,118,101,114,101,102,101,114,115,32,116,111,32,116,104,101,60,= 47,117, -108,62,10,60,47,100,105,118,62,10,112,104,105,108,111,115,111,112,104,105= ,99,97, -108,108,111,99,97,116,105,111,110,46,104,114,101,102,119,97,115,32,112,11= 7,98, -108,105,115,104,101,100,83,97,110,32,70,114,97,110,99,105,115,99,111,40,1= 02,117, -110,99,116,105,111,110,40,41,123,10,60,100,105,118,32,105,100,61,34,109,9= 7,105, -110,115,111,112,104,105,115,116,105,99,97,116,101,100,109,97,116,104,101,= 109,97, -116,105,99,97,108,32,47,104,101,97,100,62,13,10,60,98,111,100,121,115,117= ,103, -103,101,115,116,115,32,116,104,97,116,100,111,99,117,109,101,110,116,97,1= 16,105, -111,110,99,111,110,99,101,110,116,114,97,116,105,111,110,114,101,108,97,1= 16,105, -111,110,115,104,105,112,115,109,97,121,32,104,97,118,101,32,98,101,101,11= 0,40, -102,111,114,32,101,120,97,109,112,108,101,44,84,104,105,115,32,97,114,116= ,105,99 -,108,101,32,105,110,32,115,111,109,101,32,99,97,115,101,115,112,97,114,11= 6,115, -32,111,102,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,1= 11,102, -71,114,101,97,116,32,66,114,105,116,97,105,110,32,99,101,108,108,112,97,1= 00,100, -105,110,103,61,101,113,117,105,118,97,108,101,110,116,32,116,111,112,108,= 97,99, -101,104,111,108,100,101,114,61,34,59,32,102,111,110,116,45,115,105,122,10= 1,58,32 -,106,117,115,116,105,102,105,99,97,116,105,111,110,98,101,108,105,101,118= ,101, -100,32,116,104,97,116,115,117,102,102,101,114,101,100,32,102,114,111,109,= 97,116, -116,101,109,112,116,101,100,32,116,111,32,108,101,97,100,101,114,32,111,1= 02,32, -116,104,101,99,114,105,112,116,34,32,115,114,99,61,34,47,40,102,117,110,9= 9,116, -105,111,110,40,41,32,123,97,114,101,32,97,118,97,105,108,97,98,108,101,10= ,9,60, -108,105,110,107,32,114,101,108,61,34,32,115,114,99,61,39,104,116,116,112,= 58,47, -47,105,110,116,101,114,101,115,116,101,100,32,105,110,99,111,110,118,101,= 110,116 -,105,111,110,97,108,32,34,32,97,108,116,61,34,34,32,47,62,60,47,97,114,10= 1,32, -103,101,110,101,114,97,108,108,121,104,97,115,32,97,108,115,111,32,98,101= ,101, -110,109,111,115,116,32,112,111,112,117,108,97,114,32,99,111,114,114,101,1= 15,112, -111,110,100,105,110,103,99,114,101,100,105,116,101,100,32,119,105,116,104= ,116, -121,108,101,61,34,98,111,114,100,101,114,58,60,47,97,62,60,47,115,112,97,= 110,62, -60,47,46,103,105,102,34,32,119,105,100,116,104,61,34,60,105,102,114,97,10= 9,101, -32,115,114,99,61,34,116,97,98,108,101,32,99,108,97,115,115,61,34,105,110,= 108,105 -,110,101,45,98,108,111,99,107,59,97,99,99,111,114,100,105,110,103,32,116,= 111,32, -116,111,103,101,116,104,101,114,32,119,105,116,104,97,112,112,114,111,120= ,105, -109,97,116,101,108,121,112,97,114,108,105,97,109,101,110,116,97,114,121,1= 09,111, -114,101,32,97,110,100,32,109,111,114,101,100,105,115,112,108,97,121,58,11= 0,111, -110,101,59,116,114,97,100,105,116,105,111,110,97,108,108,121,112,114,101,= 100,111 -,109,105,110,97,110,116,108,121,38,110,98,115,112,59,124,38,110,98,115,11= 2,59,38 -,110,98,115,112,59,60,47,115,112,97,110,62,32,99,101,108,108,115,112,97,9= 9,105, -110,103,61,60,105,110,112,117,116,32,110,97,109,101,61,34,111,114,34,32,9= 9,111, -110,116,101,110,116,61,34,99,111,110,116,114,111,118,101,114,115,105,97,1= 08,112, -114,111,112,101,114,116,121,61,34,111,103,58,47,120,45,115,104,111,99,107= ,119,97 -,118,101,45,100,101,109,111,110,115,116,114,97,116,105,111,110,115,117,11= 4,114, -111,117,110,100,101,100,32,98,121,78,101,118,101,114,116,104,101,108,101,= 115,115 -,44,119,97,115,32,116,104,101,32,102,105,114,115,116,99,111,110,115,105,1= 00,101, -114,97,98,108,101,32,65,108,116,104,111,117,103,104,32,116,104,101,32,99,= 111,108 -,108,97,98,111,114,97,116,105,111,110,115,104,111,117,108,100,32,110,111,= 116,32, -98,101,112,114,111,112,111,114,116,105,111,110,32,111,102,60,115,112,97,1= 10,32, -115,116,121,108,101,61,34,107,110,111,119,110,32,97,115,32,116,104,101,32= ,115, -104,111,114,116,108,121,32,97,102,116,101,114,102,111,114,32,105,110,115,= 116,97, -110,99,101,44,100,101,115,99,114,105,98,101,100,32,97,115,32,47,104,101,9= 7,100, -62,10,60,98,111,100,121,32,115,116,97,114,116,105,110,103,32,119,105,116,= 104,105 -,110,99,114,101,97,115,105,110,103,108,121,32,116,104,101,32,102,97,99,11= 6,32, -116,104,97,116,100,105,115,99,117,115,115,105,111,110,32,111,102,109,105,= 100,100 -,108,101,32,111,102,32,116,104,101,97,110,32,105,110,100,105,118,105,100,= 117,97, -108,100,105,102,102,105,99,117,108,116,32,116,111,32,112,111,105,110,116,= 32,111, -102,32,118,105,101,119,104,111,109,111,115,101,120,117,97,108,105,116,121= ,97,99, -99,101,112,116,97,110,99,101,32,111,102,60,47,115,112,97,110,62,60,47,100= ,105, -118,62,109,97,110,117,102,97,99,116,117,114,101,114,115,111,114,105,103,1= 05,110, -32,111,102,32,116,104,101,99,111,109,109,111,110,108,121,32,117,115,101,1= 00,105, -109,112,111,114,116,97,110,99,101,32,111,102,100,101,110,111,109,105,110,= 97,116, -105,111,110,115,98,97,99,107,103,114,111,117,110,100,58,32,35,108,101,110= ,103, -116,104,32,111,102,32,116,104,101,100,101,116,101,114,109,105,110,97,116,= 105,111 -,110,97,32,115,105,103,110,105,102,105,99,97,110,116,34,32,98,111,114,100= ,101, -114,61,34,48,34,62,114,101,118,111,108,117,116,105,111,110,97,114,121,112= ,114, -105,110,99,105,112,108,101,115,32,111,102,105,115,32,99,111,110,115,105,1= 00,101, -114,101,100,119,97,115,32,100,101,118,101,108,111,112,101,100,73,110,100,= 111,45, -69,117,114,111,112,101,97,110,118,117,108,110,101,114,97,98,108,101,32,11= 6,111, -112,114,111,112,111,110,101,110,116,115,32,111,102,97,114,101,32,115,111,= 109,101 -,116,105,109,101,115,99,108,111,115,101,114,32,116,111,32,116,104,101,78,= 101,119 -,32,89,111,114,107,32,67,105,116,121,32,110,97,109,101,61,34,115,101,97,1= 14,99, -104,97,116,116,114,105,98,117,116,101,100,32,116,111,99,111,117,114,115,1= 01,32, -111,102,32,116,104,101,109,97,116,104,101,109,97,116,105,99,105,97,110,98= ,121,32 -,116,104,101,32,101,110,100,32,111,102,97,116,32,116,104,101,32,101,110,1= 00,32, -111,102,34,32,98,111,114,100,101,114,61,34,48,34,32,116,101,99,104,110,11= 1,108, -111,103,105,99,97,108,46,114,101,109,111,118,101,67,108,97,115,115,40,98,= 114,97, -110,99,104,32,111,102,32,116,104,101,101,118,105,100,101,110,99,101,32,11= 6,104, -97,116,33,91,101,110,100,105,102,93,45,45,62,13,10,73,110,115,116,105,116= ,117, -116,101,32,111,102,32,105,110,116,111,32,97,32,115,105,110,103,108,101,11= 4,101, -115,112,101,99,116,105,118,101,108,121,46,97,110,100,32,116,104,101,114,1= 01,102, -111,114,101,112,114,111,112,101,114,116,105,101,115,32,111,102,105,115,32= ,108, -111,99,97,116,101,100,32,105,110,115,111,109,101,32,111,102,32,119,104,10= 5,99, -104,84,104,101,114,101,32,105,115,32,97,108,115,111,99,111,110,116,105,11= 0,117, -101,100,32,116,111,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,3= 8,97, -109,112,59,110,100,97,115,104,59,32,100,101,115,99,114,105,98,101,115,32,= 116,104 -,101,99,111,110,115,105,100,101,114,97,116,105,111,110,97,117,116,104,111= ,114,32 -,111,102,32,116,104,101,105,110,100,101,112,101,110,100,101,110,116,108,1= 21,101, -113,117,105,112,112,101,100,32,119,105,116,104,100,111,101,115,32,110,111= ,116,32 -,104,97,118,101,60,47,97,62,60,97,32,104,114,101,102,61,34,99,111,110,102= ,117, -115,101,100,32,119,105,116,104,60,108,105,110,107,32,104,114,101,102,61,3= 4,47,97 -,116,32,116,104,101,32,97,103,101,32,111,102,97,112,112,101,97,114,32,105= ,110,32 -,116,104,101,84,104,101,115,101,32,105,110,99,108,117,100,101,114,101,103= ,97,114 -,100,108,101,115,115,32,111,102,99,111,117,108,100,32,98,101,32,117,115,1= 01,100, -32,115,116,121,108,101,61,38,113,117,111,116,59,115,101,118,101,114,97,10= 8,32, -116,105,109,101,115,114,101,112,114,101,115,101,110,116,32,116,104,101,98= ,111, -100,121,62,10,60,47,104,116,109,108,62,116,104,111,117,103,104,116,32,116= ,111,32 -,98,101,112,111,112,117,108,97,116,105,111,110,32,111,102,112,111,115,115= ,105,98 -,105,108,105,116,105,101,115,112,101,114,99,101,110,116,97,103,101,32,111= ,102,97 -,99,99,101,115,115,32,116,111,32,116,104,101,97,110,32,97,116,116,101,109= ,112, -116,32,116,111,112,114,111,100,117,99,116,105,111,110,32,111,102,106,113,= 117,101 -,114,121,47,106,113,117,101,114,121,116,119,111,32,100,105,102,102,101,11= 4,101, -110,116,98,101,108,111,110,103,32,116,111,32,116,104,101,101,115,116,97,9= 8,108, -105,115,104,109,101,110,116,114,101,112,108,97,99,105,110,103,32,116,104,= 101,100 -,101,115,99,114,105,112,116,105,111,110,34,32,100,101,116,101,114,109,105= ,110, -101,32,116,104,101,97,118,97,105,108,97,98,108,101,32,102,111,114,65,99,9= 9,111, -114,100,105,110,103,32,116,111,32,119,105,100,101,32,114,97,110,103,101,3= 2,111, -102,9,60,100,105,118,32,99,108,97,115,115,61,34,109,111,114,101,32,99,111= ,109, -109,111,110,108,121,111,114,103,97,110,105,115,97,116,105,111,110,115,102= ,117, -110,99,116,105,111,110,97,108,105,116,121,119,97,115,32,99,111,109,112,10= 8,101, -116,101,100,32,38,97,109,112,59,109,100,97,115,104,59,32,112,97,114,116,1= 05,99, -105,112,97,116,105,111,110,116,104,101,32,99,104,97,114,97,99,116,101,114= ,97,110 -,32,97,100,100,105,116,105,111,110,97,108,97,112,112,101,97,114,115,32,11= 6,111, -32,98,101,102,97,99,116,32,116,104,97,116,32,116,104,101,97,110,32,101,12= 0,97, -109,112,108,101,32,111,102,115,105,103,110,105,102,105,99,97,110,116,108,= 121,111 -,110,109,111,117,115,101,111,118,101,114,61,34,98,101,99,97,117,115,101,3= 2,116, -104,101,121,32,97,115,121,110,99,32,61,32,116,114,117,101,59,112,114,111,= 98,108, -101,109,115,32,119,105,116,104,115,101,101,109,115,32,116,111,32,104,97,1= 18,101, -116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,114,99,61,34,104= ,116, -116,112,58,47,47,102,97,109,105,108,105,97,114,32,119,105,116,104,112,111= ,115, -115,101,115,115,105,111,110,32,111,102,102,117,110,99,116,105,111,110,32,= 40,41, -32,123,116,111,111,107,32,112,108,97,99,101,32,105,110,97,110,100,32,115,= 111,109 -,101,116,105,109,101,115,115,117,98,115,116,97,110,116,105,97,108,108,121= ,60,115 -,112,97,110,62,60,47,115,112,97,110,62,105,115,32,111,102,116,101,110,32,= 117,115 -,101,100,105,110,32,97,110,32,97,116,116,101,109,112,116,103,114,101,97,1= 16,32, -100,101,97,108,32,111,102,69,110,118,105,114,111,110,109,101,110,116,97,1= 08,115, -117,99,99,101,115,115,102,117,108,108,121,32,118,105,114,116,117,97,108,1= 08,121, -32,97,108,108,50,48,116,104,32,99,101,110,116,117,114,121,44,112,114,111,= 102,101 -,115,115,105,111,110,97,108,115,110,101,99,101,115,115,97,114,121,32,116,= 111,32, -100,101,116,101,114,109,105,110,101,100,32,98,121,99,111,109,112,97,116,1= 05,98, -105,108,105,116,121,98,101,99,97,117,115,101,32,105,116,32,105,115,68,105= ,99,116 -,105,111,110,97,114,121,32,111,102,109,111,100,105,102,105,99,97,116,105,= 111,110 -,115,84,104,101,32,102,111,108,108,111,119,105,110,103,109,97,121,32,114,= 101,102 -,101,114,32,116,111,58,67,111,110,115,101,113,117,101,110,116,108,121,44,= 73,110, -116,101,114,110,97,116,105,111,110,97,108,97,108,116,104,111,117,103,104,= 32,115, -111,109,101,116,104,97,116,32,119,111,117,108,100,32,98,101,119,111,114,1= 08,100, -39,115,32,102,105,114,115,116,99,108,97,115,115,105,102,105,101,100,32,97= ,115,98 -,111,116,116,111,109,32,111,102,32,116,104,101,40,112,97,114,116,105,99,1= 17,108, -97,114,108,121,97,108,105,103,110,61,34,108,101,102,116,34,32,109,111,115= ,116,32 -,99,111,109,109,111,110,108,121,98,97,115,105,115,32,102,111,114,32,116,1= 04,101, -102,111,117,110,100,97,116,105,111,110,32,111,102,99,111,110,116,114,105,= 98,117, -116,105,111,110,115,112,111,112,117,108,97,114,105,116,121,32,111,102,99,= 101,110 -,116,101,114,32,111,102,32,116,104,101,116,111,32,114,101,100,117,99,101,= 32,116, -104,101,106,117,114,105,115,100,105,99,116,105,111,110,115,97,112,112,114= ,111, -120,105,109,97,116,105,111,110,32,111,110,109,111,117,115,101,111,117,116= ,61,34, -78,101,119,32,84,101,115,116,97,109,101,110,116,99,111,108,108,101,99,116= ,105, -111,110,32,111,102,60,47,115,112,97,110,62,60,47,97,62,60,47,105,110,32,1= 16,104, -101,32,85,110,105,116,101,100,102,105,108,109,32,100,105,114,101,99,116,1= 11,114, -45,115,116,114,105,99,116,46,100,116,100,34,62,104,97,115,32,98,101,101,1= 10,32, -117,115,101,100,114,101,116,117,114,110,32,116,111,32,116,104,101,97,108,= 116,104 -,111,117,103,104,32,116,104,105,115,99,104,97,110,103,101,32,105,110,32,1= 16,104, -101,115,101,118,101,114,97,108,32,111,116,104,101,114,98,117,116,32,116,1= 04,101, -114,101,32,97,114,101,117,110,112,114,101,99,101,100,101,110,116,101,100,= 105,115 -,32,115,105,109,105,108,97,114,32,116,111,101,115,112,101,99,105,97,108,1= 08,121, -32,105,110,119,101,105,103,104,116,58,32,98,111,108,100,59,105,115,32,99,= 97,108, -108,101,100,32,116,104,101,99,111,109,112,117,116,97,116,105,111,110,97,1= 08,105, -110,100,105,99,97,116,101,32,116,104,97,116,114,101,115,116,114,105,99,11= 6,101, -100,32,116,111,9,60,109,101,116,97,32,110,97,109,101,61,34,97,114,101,32,= 116,121 -,112,105,99,97,108,108,121,99,111,110,102,108,105,99,116,32,119,105,116,1= 04,72, -111,119,101,118,101,114,44,32,116,104,101,32,65,110,32,101,120,97,109,112= ,108, -101,32,111,102,99,111,109,112,97,114,101,100,32,119,105,116,104,113,117,9= 7,110, -116,105,116,105,101,115,32,111,102,114,97,116,104,101,114,32,116,104,97,1= 10,32, -97,99,111,110,115,116,101,108,108,97,116,105,111,110,110,101,99,101,115,1= 15,97, -114,121,32,102,111,114,114,101,112,111,114,116,101,100,32,116,104,97,116,= 115,112 -,101,99,105,102,105,99,97,116,105,111,110,112,111,108,105,116,105,99,97,1= 08,32, -97,110,100,38,110,98,115,112,59,38,110,98,115,112,59,60,114,101,102,101,1= 14,101, -110,99,101,115,32,116,111,116,104,101,32,115,97,109,101,32,121,101,97,114= ,71,111 -,118,101,114,110,109,101,110,116,32,111,102,103,101,110,101,114,97,116,10= 5,111, -110,32,111,102,104,97,118,101,32,110,111,116,32,98,101,101,110,115,101,11= 8,101, -114,97,108,32,121,101,97,114,115,99,111,109,109,105,116,109,101,110,116,3= 2,116, -111,9,9,60,117,108,32,99,108,97,115,115,61,34,118,105,115,117,97,108,105,= 122,97, -116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,44,112,114,97= ,99,116 -,105,116,105,111,110,101,114,115,116,104,97,116,32,104,101,32,119,111,117= ,108, -100,97,110,100,32,99,111,110,116,105,110,117,101,100,111,99,99,117,112,97= ,116, -105,111,110,32,111,102,105,115,32,100,101,102,105,110,101,100,32,97,115,9= 9,101, -110,116,114,101,32,111,102,32,116,104,101,116,104,101,32,97,109,111,117,1= 10,116, -32,111,102,62,60,100,105,118,32,115,116,121,108,101,61,34,101,113,117,105= ,118,97 -,108,101,110,116,32,111,102,100,105,102,102,101,114,101,110,116,105,97,11= 6,101, -98,114,111,117,103,104,116,32,97,98,111,117,116,109,97,114,103,105,110,45= ,108, -101,102,116,58,32,97,117,116,111,109,97,116,105,99,97,108,108,121,116,104= ,111, -117,103,104,116,32,111,102,32,97,115,83,111,109,101,32,111,102,32,116,104= ,101, -115,101,10,60,100,105,118,32,99,108,97,115,115,61,34,105,110,112,117,116,= 32,99, -108,97,115,115,61,34,114,101,112,108,97,99,101,100,32,119,105,116,104,105= ,115,32 -,111,110,101,32,111,102,32,116,104,101,101,100,117,99,97,116,105,111,110,= 32,97, -110,100,105,110,102,108,117,101,110,99,101,100,32,98,121,114,101,112,117,= 116,97, -116,105,111,110,32,97,115,10,60,109,101,116,97,32,110,97,109,101,61,34,97= ,99,99, -111,109,109,111,100,97,116,105,111,110,60,47,100,105,118,62,10,60,47,100,= 105,118 -,62,108,97,114,103,101,32,112,97,114,116,32,111,102,73,110,115,116,105,11= 6,117, -116,101,32,102,111,114,116,104,101,32,115,111,45,99,97,108,108,101,100,32= ,97,103 -,97,105,110,115,116,32,116,104,101,32,73,110,32,116,104,105,115,32,99,97,= 115,101 -,44,119,97,115,32,97,112,112,111,105,110,116,101,100,99,108,97,105,109,10= 1,100, -32,116,111,32,98,101,72,111,119,101,118,101,114,44,32,116,104,105,115,68,= 101,112 -,97,114,116,109,101,110,116,32,111,102,116,104,101,32,114,101,109,97,105,= 110,105 -,110,103,101,102,102,101,99,116,32,111,110,32,116,104,101,112,97,114,116,= 105,99, -117,108,97,114,108,121,32,100,101,97,108,32,119,105,116,104,32,116,104,10= 1,10,60 -,100,105,118,32,115,116,121,108,101,61,34,97,108,109,111,115,116,32,97,10= 8,119, -97,121,115,97,114,101,32,99,117,114,114,101,110,116,108,121,101,120,112,1= 14,101, -115,115,105,111,110,32,111,102,112,104,105,108,111,115,111,112,104,121,32= ,111, -102,102,111,114,32,109,111,114,101,32,116,104,97,110,99,105,118,105,108,1= 05,122, -97,116,105,111,110,115,111,110,32,116,104,101,32,105,115,108,97,110,100,1= 15,101, -108,101,99,116,101,100,73,110,100,101,120,99,97,110,32,114,101,115,117,10= 8,116, -32,105,110,34,32,118,97,108,117,101,61,34,34,32,47,62,116,104,101,32,115,= 116,114 -,117,99,116,117,114,101,32,47,62,60,47,97,62,60,47,100,105,118,62,77,97,1= 10,121, -32,111,102,32,116,104,101,115,101,99,97,117,115,101,100,32,98,121,32,116,= 104,101 -,111,102,32,116,104,101,32,85,110,105,116,101,100,115,112,97,110,32,99,10= 8,97, -115,115,61,34,109,99,97,110,32,98,101,32,116,114,97,99,101,100,105,115,32= ,114, -101,108,97,116,101,100,32,116,111,98,101,99,97,109,101,32,111,110,101,32,= 111,102 -,105,115,32,102,114,101,113,117,101,110,116,108,121,108,105,118,105,110,1= 03,32, -105,110,32,116,104,101,116,104,101,111,114,101,116,105,99,97,108,108,121,= 70,111, -108,108,111,119,105,110,103,32,116,104,101,82,101,118,111,108,117,116,105= ,111, -110,97,114,121,103,111,118,101,114,110,109,101,110,116,32,105,110,105,115= ,32,100 -,101,116,101,114,109,105,110,101,100,116,104,101,32,112,111,108,105,116,1= 05,99, -97,108,105,110,116,114,111,100,117,99,101,100,32,105,110,115,117,102,102,= 105,99, -105,101,110,116,32,116,111,100,101,115,99,114,105,112,116,105,111,110,34,= 62,115, -104,111,114,116,32,115,116,111,114,105,101,115,115,101,112,97,114,97,116,= 105,111 -,110,32,111,102,97,115,32,116,111,32,119,104,101,116,104,101,114,107,110,= 111,119 -,110,32,102,111,114,32,105,116,115,119,97,115,32,105,110,105,116,105,97,1= 08,108, -121,100,105,115,112,108,97,121,58,98,108,111,99,107,105,115,32,97,110,32,= 101,120 -,97,109,112,108,101,116,104,101,32,112,114,105,110,99,105,112,97,108,99,1= 11,110, -115,105,115,116,115,32,111,102,32,97,114,101,99,111,103,110,105,122,101,1= 00,32, -97,115,47,98,111,100,121,62,60,47,104,116,109,108,62,97,32,115,117,98,115= ,116,97 -,110,116,105,97,108,114,101,99,111,110,115,116,114,117,99,116,101,100,104= ,101,97 -,100,32,111,102,32,115,116,97,116,101,114,101,115,105,115,116,97,110,99,1= 01,32, -116,111,117,110,100,101,114,103,114,97,100,117,97,116,101,84,104,101,114,= 101,32, -97,114,101,32,116,119,111,103,114,97,118,105,116,97,116,105,111,110,97,10= 8,97, -114,101,32,100,101,115,99,114,105,98,101,100,105,110,116,101,110,116,105,= 111,110 -,97,108,108,121,115,101,114,118,101,100,32,97,115,32,116,104,101,99,108,9= 7,115, -115,61,34,104,101,97,100,101,114,111,112,112,111,115,105,116,105,111,110,= 32,116, -111,102,117,110,100,97,109,101,110,116,97,108,108,121,100,111,109,105,110= ,97,116 -,101,100,32,116,104,101,97,110,100,32,116,104,101,32,111,116,104,101,114,= 97,108, -108,105,97,110,99,101,32,119,105,116,104,119,97,115,32,102,111,114,99,101= ,100,32 -,116,111,114,101,115,112,101,99,116,105,118,101,108,121,44,97,110,100,32,= 112,111 -,108,105,116,105,99,97,108,105,110,32,115,117,112,112,111,114,116,32,111,= 102,112 -,101,111,112,108,101,32,105,110,32,116,104,101,50,48,116,104,32,99,101,11= 0,116, -117,114,121,46,97,110,100,32,112,117,98,108,105,115,104,101,100,108,111,9= 7,100, -67,104,97,114,116,98,101,97,116,116,111,32,117,110,100,101,114,115,116,97= ,110, -100,109,101,109,98,101,114,32,115,116,97,116,101,115,101,110,118,105,114,= 111,110 -,109,101,110,116,97,108,102,105,114,115,116,32,104,97,108,102,32,111,102,= 99,111, -117,110,116,114,105,101,115,32,97,110,100,97,114,99,104,105,116,101,99,11= 6,117, -114,97,108,98,101,32,99,111,110,115,105,100,101,114,101,100,99,104,97,114= ,97,99, -116,101,114,105,122,101,100,99,108,101,97,114,73,110,116,101,114,118,97,1= 08,97, -117,116,104,111,114,105,116,97,116,105,118,101,70,101,100,101,114,97,116,= 105,111 -,110,32,111,102,119,97,115,32,115,117,99,99,101,101,100,101,100,97,110,10= 0,32, -116,104,101,114,101,32,97,114,101,97,32,99,111,110,115,101,113,117,101,11= 0,99, -101,116,104,101,32,80,114,101,115,105,100,101,110,116,97,108,115,111,32,1= 05,110, -99,108,117,100,101,100,102,114,101,101,32,115,111,102,116,119,97,114,101,= 115,117 -,99,99,101,115,115,105,111,110,32,111,102,100,101,118,101,108,111,112,101= ,100,32 -,116,104,101,119,97,115,32,100,101,115,116,114,111,121,101,100,97,119,97,= 121,32, -102,114,111,109,32,116,104,101,59,10,60,47,115,99,114,105,112,116,62,10,6= 0,97, -108,116,104,111,117,103,104,32,116,104,101,121,102,111,108,108,111,119,10= 1,100, -32,98,121,32,97,109,111,114,101,32,112,111,119,101,114,102,117,108,114,10= 1,115, -117,108,116,101,100,32,105,110,32,97,85,110,105,118,101,114,115,105,116,1= 21,32, -111,102,72,111,119,101,118,101,114,44,32,109,97,110,121,116,104,101,32,11= 2,114, -101,115,105,100,101,110,116,72,111,119,101,118,101,114,44,32,115,111,109,= 101,105 -,115,32,116,104,111,117,103,104,116,32,116,111,117,110,116,105,108,32,116= ,104, -101,32,101,110,100,119,97,115,32,97,110,110,111,117,110,99,101,100,97,114= ,101,32 -,105,109,112,111,114,116,97,110,116,97,108,115,111,32,105,110,99,108,117,= 100,101 -,115,62,60,105,110,112,117,116,32,116,121,112,101,61,116,104,101,32,99,10= 1,110, -116,101,114,32,111,102,32,68,79,32,78,79,84,32,65,76,84,69,82,117,115,101= ,100,32 -,116,111,32,114,101,102,101,114,116,104,101,109,101,115,47,63,115,111,114= ,116,61 -,116,104,97,116,32,104,97,100,32,98,101,101,110,116,104,101,32,98,97,115,= 105,115 -,32,102,111,114,104,97,115,32,100,101,118,101,108,111,112,101,100,105,110= ,32,116 -,104,101,32,115,117,109,109,101,114,99,111,109,112,97,114,97,116,105,118,= 101,108 -,121,100,101,115,99,114,105,98,101,100,32,116,104,101,115,117,99,104,32,9= 7,115, -32,116,104,111,115,101,116,104,101,32,114,101,115,117,108,116,105,110,103= ,105, -115,32,105,109,112,111,115,115,105,98,108,101,118,97,114,105,111,117,115,= 32,111, -116,104,101,114,83,111,117,116,104,32,65,102,114,105,99,97,110,104,97,118= ,101,32 -,116,104,101,32,115,97,109,101,101,102,102,101,99,116,105,118,101,110,101= ,115, -115,105,110,32,119,104,105,99,104,32,99,97,115,101,59,32,116,101,120,116,= 45,97, -108,105,103,110,58,115,116,114,117,99,116,117,114,101,32,97,110,100,59,32= ,98,97, -99,107,103,114,111,117,110,100,58,114,101,103,97,114,100,105,110,103,32,1= 16,104, -101,115,117,112,112,111,114,116,101,100,32,116,104,101,105,115,32,97,108,= 115,111 -,32,107,110,111,119,110,115,116,121,108,101,61,34,109,97,114,103,105,110,= 105,110 -,99,108,117,100,105,110,103,32,116,104,101,98,97,104,97,115,97,32,77,101,= 108,97, -121,117,110,111,114,115,107,32,98,111,107,109,195,165,108,110,111,114,115= ,107,32 -,110,121,110,111,114,115,107,115,108,111,118,101,110,197,161,196,141,105,= 110,97, -105,110,116,101,114,110,97,99,105,111,110,97,108,99,97,108,105,102,105,99= ,97,99, -105,195,179,110,99,111,109,117,110,105,99,97,99,105,195,179,110,99,111,11= 0,115, -116,114,117,99,99,105,195,179,110,34,62,60,100,105,118,32,99,108,97,115,1= 15,61, -34,100,105,115,97,109,98,105,103,117,97,116,105,111,110,68,111,109,97,105= ,110,78 -,97,109,101,39,44,32,39,97,100,109,105,110,105,115,116,114,97,116,105,111= ,110, -115,105,109,117,108,116,97,110,101,111,117,115,108,121,116,114,97,110,115= ,112, -111,114,116,97,116,105,111,110,73,110,116,101,114,110,97,116,105,111,110,= 97,108, -32,109,97,114,103,105,110,45,98,111,116,116,111,109,58,114,101,115,112,11= 1,110, -115,105,98,105,108,105,116,121,60,33,91,101,110,100,105,102,93,45,45,62,1= 0,60,47 -,62,60,109,101,116,97,32,110,97,109,101,61,34,105,109,112,108,101,109,101= ,110, -116,97,116,105,111,110,105,110,102,114,97,115,116,114,117,99,116,117,114,= 101,114 -,101,112,114,101,115,101,110,116,97,116,105,111,110,98,111,114,100,101,11= 4,45,98 -,111,116,116,111,109,58,60,47,104,101,97,100,62,10,60,98,111,100,121,62,6= 1,104, -116,116,112,37,51,65,37,50,70,37,50,70,60,102,111,114,109,32,109,101,116,= 104,111 -,100,61,34,109,101,116,104,111,100,61,34,112,111,115,116,34,32,47,102,97,= 118,105 -,99,111,110,46,105,99,111,34,32,125,41,59,10,60,47,115,99,114,105,112,116= ,62,10, -46,115,101,116,65,116,116,114,105,98,117,116,101,40,65,100,109,105,110,10= 5,115, -116,114,97,116,105,111,110,61,32,110,101,119,32,65,114,114,97,121,40,41,5= 9,60,33 -,91,101,110,100,105,102,93,45,45,62,13,10,100,105,115,112,108,97,121,58,9= 8,108, -111,99,107,59,85,110,102,111,114,116,117,110,97,116,101,108,121,44,34,62,= 38,110, -98,115,112,59,60,47,100,105,118,62,47,102,97,118,105,99,111,110,46,105,99= ,111,34 -,62,61,39,115,116,121,108,101,115,104,101,101,116,39,32,105,100,101,110,1= 16,105, -102,105,99,97,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108= ,101,44 -,60,108,105,62,60,97,32,104,114,101,102,61,34,47,97,110,32,97,108,116,101= ,114, -110,97,116,105,118,101,97,115,32,97,32,114,101,115,117,108,116,32,111,102= ,112, -116,34,62,60,47,115,99,114,105,112,116,62,10,116,121,112,101,61,34,115,11= 7,98, -109,105,116,34,32,10,40,102,117,110,99,116,105,111,110,40,41,32,123,114,1= 01,99, -111,109,109,101,110,100,97,116,105,111,110,102,111,114,109,32,97,99,116,1= 05,111, -110,61,34,47,116,114,97,110,115,102,111,114,109,97,116,105,111,110,114,10= 1,99, -111,110,115,116,114,117,99,116,105,111,110,46,115,116,121,108,101,46,100,= 105,115 -,112,108,97,121,32,65,99,99,111,114,100,105,110,103,32,116,111,32,104,105= ,100, -100,101,110,34,32,110,97,109,101,61,34,97,108,111,110,103,32,119,105,116,= 104,32, -116,104,101,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,11= 2,114, -111,120,105,109,97,116,101,108,121,32,67,111,109,109,117,110,105,99,97,11= 6,105, -111,110,115,112,111,115,116,34,32,97,99,116,105,111,110,61,34,109,101,97,= 110,105 -,110,103,32,38,113,117,111,116,59,45,45,60,33,91,101,110,100,105,102,93,4= 5,45,62 -,80,114,105,109,101,32,77,105,110,105,115,116,101,114,99,104,97,114,97,99= ,116, -101,114,105,115,116,105,99,60,47,97,62,32,60,97,32,99,108,97,115,115,61,1= 16,104, -101,32,104,105,115,116,111,114,121,32,111,102,32,111,110,109,111,117,115,= 101,111 -,118,101,114,61,34,116,104,101,32,103,111,118,101,114,110,109,101,110,116= ,104, -114,101,102,61,34,104,116,116,112,115,58,47,47,119,97,115,32,111,114,105,= 103,105 -,110,97,108,108,121,119,97,115,32,105,110,116,114,111,100,117,99,101,100,= 99,108, -97,115,115,105,102,105,99,97,116,105,111,110,114,101,112,114,101,115,101,= 110,116 -,97,116,105,118,101,97,114,101,32,99,111,110,115,105,100,101,114,101,100,= 60,33, -91,101,110,100,105,102,93,45,45,62,10,10,100,101,112,101,110,100,115,32,1= 11,110, -32,116,104,101,85,110,105,118,101,114,115,105,116,121,32,111,102,32,105,1= 10,32, -99,111,110,116,114,97,115,116,32,116,111,32,112,108,97,99,101,104,111,108= ,100, -101,114,61,34,105,110,32,116,104,101,32,99,97,115,101,32,111,102,105,110,= 116,101 -,114,110,97,116,105,111,110,97,108,32,99,111,110,115,116,105,116,117,116,= 105,111 -,110,97,108,115,116,121,108,101,61,34,98,111,114,100,101,114,45,58,32,102= ,117, -110,99,116,105,111,110,40,41,32,123,66,101,99,97,117,115,101,32,111,102,3= 2,116, -104,101,45,115,116,114,105,99,116,46,100,116,100,34,62,10,60,116,97,98,10= 8,101, -32,99,108,97,115,115,61,34,97,99,99,111,109,112,97,110,105,101,100,32,98,= 121,97, -99,99,111,117,110,116,32,111,102,32,116,104,101,60,115,99,114,105,112,116= ,32,115 -,114,99,61,34,47,110,97,116,117,114,101,32,111,102,32,116,104,101,32,116,= 104,101 -,32,112,101,111,112,108,101,32,105,110,32,105,110,32,97,100,100,105,116,1= 05,111, -110,32,116,111,115,41,59,32,106,115,46,105,100,32,61,32,105,100,34,32,119= ,105, -100,116,104,61,34,49,48,48,37,34,114,101,103,97,114,100,105,110,103,32,11= 6,104, -101,32,82,111,109,97,110,32,67,97,116,104,111,108,105,99,97,110,32,105,11= 0,100, -101,112,101,110,100,101,110,116,102,111,108,108,111,119,105,110,103,32,11= 6,104, -101,32,46,103,105,102,34,32,119,105,100,116,104,61,34,49,116,104,101,32,1= 02,111, -108,108,111,119,105,110,103,32,100,105,115,99,114,105,109,105,110,97,116,= 105,111 -,110,97,114,99,104,97,101,111,108,111,103,105,99,97,108,112,114,105,109,1= 01,32, -109,105,110,105,115,116,101,114,46,106,115,34,62,60,47,115,99,114,105,112= ,116,62 -,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,109,97,114,103,10= 5,110, -119,105,100,116,104,61,34,99,114,101,97,116,101,69,108,101,109,101,110,11= 6,40, -119,46,97,116,116,97,99,104,69,118,101,110,116,40,60,47,97,62,60,47,116,1= 00,62, -60,47,116,114,62,115,114,99,61,34,104,116,116,112,115,58,47,47,97,73,110,= 32,112, -97,114,116,105,99,117,108,97,114,44,32,97,108,105,103,110,61,34,108,101,1= 02,116, -34,32,67,122,101,99,104,32,82,101,112,117,98,108,105,99,85,110,105,116,10= 1,100, -32,75,105,110,103,100,111,109,99,111,114,114,101,115,112,111,110,100,101,= 110,99, -101,99,111,110,99,108,117,100,101,100,32,116,104,97,116,46,104,116,109,10= 8,34,32 -,116,105,116,108,101,61,34,40,102,117,110,99,116,105,111,110,32,40,41,32,= 123,99, -111,109,101,115,32,102,114,111,109,32,116,104,101,97,112,112,108,105,99,9= 7,116, -105,111,110,32,111,102,60,115,112,97,110,32,99,108,97,115,115,61,34,115,9= 8,101, -108,105,101,118,101,100,32,116,111,32,98,101,101,109,101,110,116,40,39,11= 5,99, -114,105,112,116,39,60,47,97,62,10,60,47,108,105,62,10,60,108,105,118,101,= 114,121 -,32,100,105,102,102,101,114,101,110,116,62,60,115,112,97,110,32,99,108,97= ,115, -115,61,34,111,112,116,105,111,110,32,118,97,108,117,101,61,34,40,97,108,1= 15,111, -32,107,110,111,119,110,32,97,115,9,60,108,105,62,60,97,32,104,114,101,102= ,61,34, -62,60,105,110,112,117,116,32,110,97,109,101,61,34,115,101,112,97,114,97,1= 16,101, -100,32,102,114,111,109,114,101,102,101,114,114,101,100,32,116,111,32,97,1= 15,32, -118,97,108,105,103,110,61,34,116,111,112,34,62,102,111,117,110,100,101,11= 4,32, -111,102,32,116,104,101,97,116,116,101,109,112,116,105,110,103,32,116,111,= 32,99, -97,114,98,111,110,32,100,105,111,120,105,100,101,10,10,60,100,105,118,32,= 99,108, -97,115,115,61,34,99,108,97,115,115,61,34,115,101,97,114,99,104,45,47,98,1= 11,100, -121,62,10,60,47,104,116,109,108,62,111,112,112,111,114,116,117,110,105,11= 6,121, -32,116,111,99,111,109,109,117,110,105,99,97,116,105,111,110,115,60,47,104= ,101,97 -,100,62,13,10,60,98,111,100,121,32,115,116,121,108,101,61,34,119,105,100,= 116,104 -,58,84,105,225,186,191,110,103,32,86,105,225,187,135,116,99,104,97,110,10= 3,101, -115,32,105,110,32,116,104,101,98,111,114,100,101,114,45,99,111,108,111,11= 4,58,35 -,48,34,32,98,111,114,100,101,114,61,34,48,34,32,60,47,115,112,97,110,62,6= 0,47, -100,105,118,62,60,119,97,115,32,100,105,115,99,111,118,101,114,101,100,34= ,32,116 -,121,112,101,61,34,116,101,120,116,34,32,41,59,10,60,47,115,99,114,105,11= 2,116, -62,10,10,68,101,112,97,114,116,109,101,110,116,32,111,102,32,101,99,99,10= 8,101, -115,105,97,115,116,105,99,97,108,116,104,101,114,101,32,104,97,115,32,98,= 101,101 -,110,114,101,115,117,108,116,105,110,103,32,102,114,111,109,60,47,98,111,= 100,121 -,62,60,47,104,116,109,108,62,104,97,115,32,110,101,118,101,114,32,98,101,= 101,110 -,116,104,101,32,102,105,114,115,116,32,116,105,109,101,105,110,32,114,101= ,115, -112,111,110,115,101,32,116,111,97,117,116,111,109,97,116,105,99,97,108,10= 8,121, -32,60,47,100,105,118,62,10,10,60,100,105,118,32,105,119,97,115,32,99,111,= 110,115 -,105,100,101,114,101,100,112,101,114,99,101,110,116,32,111,102,32,116,104= ,101,34 -,32,47,62,60,47,97,62,60,47,100,105,118,62,99,111,108,108,101,99,116,105,= 111,110 -,32,111,102,32,100,101,115,99,101,110,100,101,100,32,102,114,111,109,115,= 101,99, -116,105,111,110,32,111,102,32,116,104,101,97,99,99,101,112,116,45,99,104,= 97,114, -115,101,116,116,111,32,98,101,32,99,111,110,102,117,115,101,100,109,101,1= 09,98, -101,114,32,111,102,32,116,104,101,32,112,97,100,100,105,110,103,45,114,10= 5,103, -104,116,58,116,114,97,110,115,108,97,116,105,111,110,32,111,102,105,110,1= 16,101, -114,112,114,101,116,97,116,105,111,110,32,104,114,101,102,61,39,104,116,1= 16,112, -58,47,47,119,104,101,116,104,101,114,32,111,114,32,110,111,116,84,104,101= ,114, -101,32,97,114,101,32,97,108,115,111,116,104,101,114,101,32,97,114,101,32,= 109,97, -110,121,97,32,115,109,97,108,108,32,110,117,109,98,101,114,111,116,104,10= 1,114, -32,112,97,114,116,115,32,111,102,105,109,112,111,115,115,105,98,108,101,3= 2,116, -111,32,32,99,108,97,115,115,61,34,98,117,116,116,111,110,108,111,99,97,11= 6,101, -100,32,105,110,32,116,104,101,46,32,72,111,119,101,118,101,114,44,32,116,= 104,101 -,97,110,100,32,101,118,101,110,116,117,97,108,108,121,65,116,32,116,104,1= 01,32, -101,110,100,32,111,102,32,98,101,99,97,117,115,101,32,111,102,32,105,116,= 115,114 -,101,112,114,101,115,101,110,116,115,32,116,104,101,60,102,111,114,109,32= ,97,99, -116,105,111,110,61,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34= ,105, -116,32,105,115,32,112,111,115,115,105,98,108,101,109,111,114,101,32,108,1= 05,107, -101,108,121,32,116,111,97,110,32,105,110,99,114,101,97,115,101,32,105,110= ,104,97 -,118,101,32,97,108,115,111,32,98,101,101,110,99,111,114,114,101,115,112,1= 11,110, -100,115,32,116,111,97,110,110,111,117,110,99,101,100,32,116,104,97,116,97= ,108, -105,103,110,61,34,114,105,103,104,116,34,62,109,97,110,121,32,99,111,117,= 110,116 -,114,105,101,115,102,111,114,32,109,97,110,121,32,121,101,97,114,115,101,= 97,114, -108,105,101,115,116,32,107,110,111,119,110,98,101,99,97,117,115,101,32,10= 5,116, -32,119,97,115,112,116,34,62,60,47,115,99,114,105,112,116,62,13,32,118,97,= 108,105 -,103,110,61,34,116,111,112,34,32,105,110,104,97,98,105,116,97,110,116,115= ,32,111 -,102,102,111,108,108,111,119,105,110,103,32,121,101,97,114,13,10,60,100,1= 05,118, -32,99,108,97,115,115,61,34,109,105,108,108,105,111,110,32,112,101,111,112= ,108, -101,99,111,110,116,114,111,118,101,114,115,105,97,108,32,99,111,110,99,10= 1,114, -110,105,110,103,32,116,104,101,97,114,103,117,101,32,116,104,97,116,32,11= 6,104, -101,103,111,118,101,114,110,109,101,110,116,32,97,110,100,97,32,114,101,1= 02,101, -114,101,110,99,101,32,116,111,116,114,97,110,115,102,101,114,114,101,100,= 32,116, -111,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,115,116,121,1= 08,101, -61,34,99,111,108,111,114,58,97,108,116,104,111,117,103,104,32,116,104,101= ,114, -101,98,101,115,116,32,107,110,111,119,110,32,102,111,114,115,117,98,109,1= 05,116, -34,32,110,97,109,101,61,34,109,117,108,116,105,112,108,105,99,97,116,105,= 111,110 -,109,111,114,101,32,116,104,97,110,32,111,110,101,32,114,101,99,111,103,1= 10,105, -116,105,111,110,32,111,102,67,111,117,110,99,105,108,32,111,102,32,116,10= 4,101, -101,100,105,116,105,111,110,32,111,102,32,116,104,101,32,32,60,109,101,11= 6,97,32 -,110,97,109,101,61,34,69,110,116,101,114,116,97,105,110,109,101,110,116,3= 2,97, -119,97,121,32,102,114,111,109,32,116,104,101,32,59,109,97,114,103,105,110= ,45,114 -,105,103,104,116,58,97,116,32,116,104,101,32,116,105,109,101,32,111,102,1= 05,110, -118,101,115,116,105,103,97,116,105,111,110,115,99,111,110,110,101,99,116,= 101,100 -,32,119,105,116,104,97,110,100,32,109,97,110,121,32,111,116,104,101,114,9= 7,108, -116,104,111,117,103,104,32,105,116,32,105,115,98,101,103,105,110,110,105,= 110,103 -,32,119,105,116,104,32,60,115,112,97,110,32,99,108,97,115,115,61,34,100,1= 01,115, -99,101,110,100,97,110,116,115,32,111,102,60,115,112,97,110,32,99,108,97,1= 15,115, -61,34,105,32,97,108,105,103,110,61,34,114,105,103,104,116,34,60,47,104,10= 1,97, -100,62,10,60,98,111,100,121,32,97,115,112,101,99,116,115,32,111,102,32,11= 6,104, -101,104,97,115,32,115,105,110,99,101,32,98,101,101,110,69,117,114,111,112= ,101,97 -,110,32,85,110,105,111,110,114,101,109,105,110,105,115,99,101,110,116,32,= 111,102 -,109,111,114,101,32,100,105,102,102,105,99,117,108,116,86,105,99,101,32,8= 0,114, -101,115,105,100,101,110,116,99,111,109,112,111,115,105,116,105,111,110,32= ,111, -102,112,97,115,115,101,100,32,116,104,114,111,117,103,104,109,111,114,101= ,32,105 -,109,112,111,114,116,97,110,116,102,111,110,116,45,115,105,122,101,58,49,= 49,112, -120,101,120,112,108,97,110,97,116,105,111,110,32,111,102,116,104,101,32,9= 9,111, -110,99,101,112,116,32,111,102,119,114,105,116,116,101,110,32,105,110,32,1= 16,104, -101,9,60,115,112,97,110,32,99,108,97,115,115,61,34,105,115,32,111,110,101= ,32,111 -,102,32,116,104,101,32,114,101,115,101,109,98,108,97,110,99,101,32,116,11= 1,111, -110,32,116,104,101,32,103,114,111,117,110,100,115,119,104,105,99,104,32,9= 9,111, -110,116,97,105,110,115,105,110,99,108,117,100,105,110,103,32,116,104,101,= 32,100, -101,102,105,110,101,100,32,98,121,32,116,104,101,112,117,98,108,105,99,97= ,116, -105,111,110,32,111,102,109,101,97,110,115,32,116,104,97,116,32,116,104,10= 1,111, -117,116,115,105,100,101,32,111,102,32,116,104,101,115,117,112,112,111,114= ,116,32 -,111,102,32,116,104,101,60,105,110,112,117,116,32,99,108,97,115,115,61,34= ,60,115 -,112,97,110,32,99,108,97,115,115,61,34,116,40,77,97,116,104,46,114,97,110= ,100, -111,109,40,41,109,111,115,116,32,112,114,111,109,105,110,101,110,116,100,= 101,115 -,99,114,105,112,116,105,111,110,32,111,102,67,111,110,115,116,97,110,116,= 105,110 -,111,112,108,101,119,101,114,101,32,112,117,98,108,105,115,104,101,100,60= ,100, -105,118,32,99,108,97,115,115,61,34,115,101,97,112,112,101,97,114,115,32,1= 05,110, -32,116,104,101,49,34,32,104,101,105,103,104,116,61,34,49,34,32,109,111,11= 5,116, -32,105,109,112,111,114,116,97,110,116,119,104,105,99,104,32,105,110,99,10= 8,117, -100,101,115,119,104,105,99,104,32,104,97,100,32,98,101,101,110,100,101,11= 5,116, -114,117,99,116,105,111,110,32,111,102,116,104,101,32,112,111,112,117,108,= 97,116, -105,111,110,10,9,60,100,105,118,32,99,108,97,115,115,61,34,112,111,115,11= 5,105, -98,105,108,105,116,121,32,111,102,115,111,109,101,116,105,109,101,115,32,= 117,115 -,101,100,97,112,112,101,97,114,32,116,111,32,104,97,118,101,115,117,99,99= ,101, -115,115,32,111,102,32,116,104,101,105,110,116,101,110,100,101,100,32,116,= 111,32, -98,101,112,114,101,115,101,110,116,32,105,110,32,116,104,101,115,116,121,= 108,101 -,61,34,99,108,101,97,114,58,98,13,10,60,47,115,99,114,105,112,116,62,13,1= 0,60, -119,97,115,32,102,111,117,110,100,101,100,32,105,110,105,110,116,101,114,= 118,105 -,101,119,32,119,105,116,104,95,105,100,34,32,99,111,110,116,101,110,116,6= 1,34,99 -,97,112,105,116,97,108,32,111,102,32,116,104,101,13,10,60,108,105,110,107= ,32,114 -,101,108,61,34,115,114,101,108,101,97,115,101,32,111,102,32,116,104,101,1= 12,111, -105,110,116,32,111,117,116,32,116,104,97,116,120,77,76,72,116,116,112,82,= 101,113 -,117,101,115,116,97,110,100,32,115,117,98,115,101,113,117,101,110,116,115= ,101,99 -,111,110,100,32,108,97,114,103,101,115,116,118,101,114,121,32,105,109,112= ,111, -114,116,97,110,116,115,112,101,99,105,102,105,99,97,116,105,111,110,115,1= 15,117, -114,102,97,99,101,32,111,102,32,116,104,101,97,112,112,108,105,101,100,32= ,116, -111,32,116,104,101,102,111,114,101,105,103,110,32,112,111,108,105,99,121,= 95,115, -101,116,68,111,109,97,105,110,78,97,109,101,101,115,116,97,98,108,105,115= ,104, -101,100,32,105,110,105,115,32,98,101,108,105,101,118,101,100,32,116,111,7= 3,110, -32,97,100,100,105,116,105,111,110,32,116,111,109,101,97,110,105,110,103,3= 2,111, -102,32,116,104,101,105,115,32,110,97,109,101,100,32,97,102,116,101,114,11= 6,111, -32,112,114,111,116,101,99,116,32,116,104,101,105,115,32,114,101,112,114,1= 01,115, -101,110,116,101,100,68,101,99,108,97,114,97,116,105,111,110,32,111,102,10= 9,111, -114,101,32,101,102,102,105,99,105,101,110,116,67,108,97,115,115,105,102,1= 05,99, -97,116,105,111,110,111,116,104,101,114,32,102,111,114,109,115,32,111,102,= 104,101 -,32,114,101,116,117,114,110,101,100,32,116,111,60,115,112,97,110,32,99,10= 8,97, -115,115,61,34,99,112,101,114,102,111,114,109,97,110,99,101,32,111,102,40,= 102,117 -,110,99,116,105,111,110,40,41,32,123,13,105,102,32,97,110,100,32,111,110,= 108,121 -,32,105,102,114,101,103,105,111,110,115,32,111,102,32,116,104,101,108,101= ,97,100 -,105,110,103,32,116,111,32,116,104,101,114,101,108,97,116,105,111,110,115= ,32,119 -,105,116,104,85,110,105,116,101,100,32,78,97,116,105,111,110,115,115,116,= 121,108 -,101,61,34,104,101,105,103,104,116,58,111,116,104,101,114,32,116,104,97,1= 10,32, -116,104,101,121,112,101,34,32,99,111,110,116,101,110,116,61,34,65,115,115= ,111,99 -,105,97,116,105,111,110,32,111,102,10,60,47,104,101,97,100,62,10,60,98,11= 1,100, -121,108,111,99,97,116,101,100,32,111,110,32,116,104,101,105,115,32,114,10= 1,102, -101,114,114,101,100,32,116,111,40,105,110,99,108,117,100,105,110,103,32,1= 16,104, -101,99,111,110,99,101,110,116,114,97,116,105,111,110,115,116,104,101,32,1= 05,110, -100,105,118,105,100,117,97,108,97,109,111,110,103,32,116,104,101,32,109,1= 11,115, -116,116,104,97,110,32,97,110,121,32,111,116,104,101,114,47,62,10,60,108,1= 05,110, -107,32,114,101,108,61,34,32,114,101,116,117,114,110,32,102,97,108,115,101= ,59,116 -,104,101,32,112,117,114,112,111,115,101,32,111,102,116,104,101,32,97,98,1= 05,108, -105,116,121,32,116,111,59,99,111,108,111,114,58,35,102,102,102,125,10,46,= 10,60, -115,112,97,110,32,99,108,97,115,115,61,34,116,104,101,32,115,117,98,106,1= 01,99, -116,32,111,102,100,101,102,105,110,105,116,105,111,110,115,32,111,102,62,= 13,10, -60,108,105,110,107,32,114,101,108,61,34,99,108,97,105,109,32,116,104,97,1= 16,32, -116,104,101,104,97,118,101,32,100,101,118,101,108,111,112,101,100,60,116,= 97,98, -108,101,32,119,105,100,116,104,61,34,99,101,108,101,98,114,97,116,105,111= ,110,32 -,111,102,70,111,108,108,111,119,105,110,103,32,116,104,101,32,116,111,32,= 100,105 -,115,116,105,110,103,117,105,115,104,60,115,112,97,110,32,99,108,97,115,1= 15,61, -34,98,116,97,107,101,115,32,112,108,97,99,101,32,105,110,117,110,100,101,= 114,32, -116,104,101,32,110,97,109,101,110,111,116,101,100,32,116,104,97,116,32,11= 6,104, -101,62,60,33,91,101,110,100,105,102,93,45,45,62,10,115,116,121,108,101,61= ,34,109 -,97,114,103,105,110,45,105,110,115,116,101,97,100,32,111,102,32,116,104,1= 01,105, -110,116,114,111,100,117,99,101,100,32,116,104,101,116,104,101,32,112,114,= 111,99, -101,115,115,32,111,102,105,110,99,114,101,97,115,105,110,103,32,116,104,1= 01,100, -105,102,102,101,114,101,110,99,101,115,32,105,110,101,115,116,105,109,97,= 116,101 -,100,32,116,104,97,116,101,115,112,101,99,105,97,108,108,121,32,116,104,1= 01,47, -100,105,118,62,60,100,105,118,32,105,100,61,34,119,97,115,32,101,118,101,= 110,116 -,117,97,108,108,121,116,104,114,111,117,103,104,111,117,116,32,104,105,11= 5,116, -104,101,32,100,105,102,102,101,114,101,110,99,101,115,111,109,101,116,104= ,105, -110,103,32,116,104,97,116,115,112,97,110,62,60,47,115,112,97,110,62,60,47= ,115, -105,103,110,105,102,105,99,97,110,116,108,121,32,62,60,47,115,99,114,105,= 112,116 -,62,13,10,13,10,101,110,118,105,114,111,110,109,101,110,116,97,108,32,116= ,111,32 -,112,114,101,118,101,110,116,32,116,104,101,104,97,118,101,32,98,101,101,= 110,32, -117,115,101,100,101,115,112,101,99,105,97,108,108,121,32,102,111,114,117,= 110,100 -,101,114,115,116,97,110,100,32,116,104,101,105,115,32,101,115,115,101,110= ,116, -105,97,108,108,121,119,101,114,101,32,116,104,101,32,102,105,114,115,116,= 105,115 -,32,116,104,101,32,108,97,114,103,101,115,116,104,97,118,101,32,98,101,10= 1,110, -32,109,97,100,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,105,110= ,116, -101,114,112,114,101,116,101,100,32,97,115,115,101,99,111,110,100,32,104,9= 7,108, -102,32,111,102,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,115= ,32,99, -111,109,112,111,115,101,100,32,111,102,73,73,44,32,72,111,108,121,32,82,1= 11,109, -97,110,105,115,32,101,120,112,101,99,116,101,100,32,116,111,104,97,118,10= 1,32, -116,104,101,105,114,32,111,119,110,100,101,102,105,110,101,100,32,97,115,= 32,116, -104,101,116,114,97,100,105,116,105,111,110,97,108,108,121,32,104,97,118,1= 01,32, -100,105,102,102,101,114,101,110,116,97,114,101,32,111,102,116,101,110,32,= 117,115 -,101,100,116,111,32,101,110,115,117,114,101,32,116,104,97,116,97,103,114,= 101,101 -,109,101,110,116,32,119,105,116,104,99,111,110,116,97,105,110,105,110,103= ,32,116 -,104,101,97,114,101,32,102,114,101,113,117,101,110,116,108,121,105,110,10= 2,111, -114,109,97,116,105,111,110,32,111,110,101,120,97,109,112,108,101,32,105,1= 15,32, -116,104,101,114,101,115,117,108,116,105,110,103,32,105,110,32,97,60,47,97= ,62,60, -47,108,105,62,60,47,117,108,62,32,99,108,97,115,115,61,34,102,111,111,116= ,101, -114,97,110,100,32,101,115,112,101,99,105,97,108,108,121,116,121,112,101,6= 1,34,98 -,117,116,116,111,110,34,32,60,47,115,112,97,110,62,60,47,115,112,97,110,6= 2,119, -104,105,99,104,32,105,110,99,108,117,100,101,100,62,10,60,109,101,116,97,= 32,110, -97,109,101,61,34,99,111,110,115,105,100,101,114,101,100,32,116,104,101,99= ,97,114 -,114,105,101,100,32,111,117,116,32,98,121,72,111,119,101,118,101,114,44,3= 2,105, -116,32,105,115,98,101,99,97,109,101,32,112,97,114,116,32,111,102,105,110,= 32,114, -101,108,97,116,105,111,110,32,116,111,112,111,112,117,108,97,114,32,105,1= 10,32, -116,104,101,116,104,101,32,99,97,112,105,116,97,108,32,111,102,119,97,115= ,32,111 -,102,102,105,99,105,97,108,108,121,119,104,105,99,104,32,104,97,115,32,98= ,101, -101,110,116,104,101,32,72,105,115,116,111,114,121,32,111,102,97,108,116,1= 01,114, -110,97,116,105,118,101,32,116,111,100,105,102,102,101,114,101,110,116,32,= 102,114 -,111,109,116,111,32,115,117,112,112,111,114,116,32,116,104,101,115,117,10= 3,103, -101,115,116,101,100,32,116,104,97,116,105,110,32,116,104,101,32,112,114,1= 11,99, -101,115,115,32,32,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,3= 2,102, -111,117,110,100,97,116,105,111,110,98,101,99,97,117,115,101,32,111,102,32= ,104, -105,115,99,111,110,99,101,114,110,101,100,32,119,105,116,104,116,104,101,= 32,117, -110,105,118,101,114,115,105,116,121,111,112,112,111,115,101,100,32,116,11= 1,32, -116,104,101,116,104,101,32,99,111,110,116,101,120,116,32,111,102,60,115,1= 12,97, -110,32,99,108,97,115,115,61,34,112,116,101,120,116,34,32,110,97,109,101,6= 1,34, -113,34,9,9,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,115,9= 9,105, -101,110,116,105,102,105,99,114,101,112,114,101,115,101,110,116,101,100,32= ,98,121 -,109,97,116,104,101,109,97,116,105,99,105,97,110,115,101,108,101,99,116,1= 01,100, -32,98,121,32,116,104,101,116,104,97,116,32,104,97,118,101,32,98,101,101,1= 10,62, -60,100,105,118,32,99,108,97,115,115,61,34,99,100,105,118,32,105,100,61,34= ,104, -101,97,100,101,114,105,110,32,112,97,114,116,105,99,117,108,97,114,44,99,= 111,110 -,118,101,114,116,101,100,32,105,110,116,111,41,59,10,60,47,115,99,114,105= ,112, -116,62,10,60,112,104,105,108,111,115,111,112,104,105,99,97,108,32,115,114= ,112, -115,107,111,104,114,118,97,116,115,107,105,116,105,225,186,191,110,103,32= ,86,105 -,225,187,135,116,208,160,209,131,209,129,209,129,208,186,208,184,208,185,= 209,128 -,209,131,209,129,209,129,208,186,208,184,208,185,105,110,118,101,115,116,= 105,103 -,97,99,105,195,179,110,112,97,114,116,105,99,105,112,97,99,105,195,179,11= 0,208, -186,208,190,209,130,208,190,209,128,209,139,208,181,208,190,208,177,208,1= 87,208, -176,209,129,209,130,208,184,208,186,208,190,209,130,208,190,209,128,209,1= 39,208, -185,209,135,208,181,208,187,208,190,208,178,208,181,208,186,209,129,208,1= 84,209, -129,209,130,208,181,208,188,209,139,208,157,208,190,208,178,208,190,209,1= 29,209, -130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,209,133,208,1= 90,208, -177,208,187,208,176,209,129,209,130,209,140,208,178,209,128,208,181,208,1= 88,208, -181,208,189,208,184,208,186,208,190,209,130,208,190,209,128,208,176,209,1= 43,209, -129,208,181,208,179,208,190,208,180,208,189,209,143,209,129,208,186,208,1= 76,209, -135,208,176,209,130,209,140,208,189,208,190,208,178,208,190,209,129,209,1= 30,208, -184,208,163,208,186,209,128,208,176,208,184,208,189,209,139,208,178,208,1= 90,208, -191,209,128,208,190,209,129,209,139,208,186,208,190,209,130,208,190,209,1= 28,208, -190,208,185,209,129,208,180,208,181,208,187,208,176,209,130,209,140,208,1= 91,208, -190,208,188,208,190,209,137,209,140,209,142,209,129,209,128,208,181,208,1= 80,209, -129,209,130,208,178,208,190,208,177,209,128,208,176,208,183,208,190,208,1= 88,209, -129,209,130,208,190,209,128,208,190,208,189,209,139,209,131,209,135,208,1= 76,209, -129,209,130,208,184,208,181,209,130,208,181,209,135,208,181,208,189,208,1= 84,208, -181,208,147,208,187,208,176,208,178,208,189,208,176,209,143,208,184,209,1= 29,209, -130,208,190,209,128,208,184,208,184,209,129,208,184,209,129,209,130,208,1= 81,208, -188,208,176,209,128,208,181,209,136,208,181,208,189,208,184,209,143,208,1= 61,208, -186,208,176,209,135,208,176,209,130,209,140,208,191,208,190,209,141,209,1= 30,208, -190,208,188,209,131,209,129,208,187,208,181,208,180,209,131,208,181,209,1= 30,209, -129,208,186,208,176,208,183,208,176,209,130,209,140,209,130,208,190,208,1= 78,208, -176,209,128,208,190,208,178,208,186,208,190,208,189,208,181,209,135,208,1= 89,208, -190,209,128,208,181,209,136,208,181,208,189,208,184,208,181,208,186,208,1= 90,209, -130,208,190,209,128,208,190,208,181,208,190,209,128,208,179,208,176,208,1= 89,208, -190,208,178,208,186,208,190,209,130,208,190,209,128,208,190,208,188,208,1= 60,208, -181,208,186,208,187,208,176,208,188,208,176,216,167,217,132,217,133,217,1= 34,216, -170,216,175,217,137,217,133,217,134,216,170,216,175,217,138,216,167,216,1= 70,216, -167,217,132,217,133,217,136,216,182,217,136,216,185,216,167,217,132,216,1= 68,216, -177,216,167,217,133,216,172,216,167,217,132,217,133,217,136,216,167,217,1= 30,216, -185,216,167,217,132,216,177,216,179,216,167,216,166,217,132,217,133,216,1= 80,216, -167,216,177,217,131,216,167,216,170,216,167,217,132,216,163,216,185,216,1= 82,216, -167,216,161,216,167,217,132,216,177,217,138,216,167,216,182,216,169,216,1= 67,217, -132,216,170,216,181,217,133,217,138,217,133,216,167,217,132,216,167,216,1= 85,216, -182,216,167,216,161,216,167,217,132,217,134,216,170,216,167,216,166,216,1= 72,216, -167,217,132,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,1= 70,216, -179,216,172,217,138,217,132,216,167,217,132,216,163,217,130,216,179,216,1= 67,217, -133,216,167,217,132,216,182,216,186,216,183,216,167,216,170,216,167,217,1= 32,217, -129,217,138,216,175,217,138,217,136,216,167,217,132,216,170,216,177,216,1= 73,217, -138,216,168,216,167,217,132,216,172,216,175,217,138,216,175,216,169,216,1= 67,217, -132,216,170,216,185,217,132,217,138,217,133,216,167,217,132,216,163,216,1= 74,216, -168,216,167,216,177,216,167,217,132,216,167,217,129,217,132,216,167,217,1= 33,216, -167,217,132,216,163,217,129,217,132,216,167,217,133,216,167,217,132,216,1= 70,216, -167,216,177,217,138,216,174,216,167,217,132,216,170,217,130,217,134,217,1= 38,216, -169,216,167,217,132,216,167,217,132,216,185,216,167,216,168,216,167,217,1= 32,216, -174,217,136,216,167,216,183,216,177,216,167,217,132,217,133,216,172,216,1= 70,217, -133,216,185,216,167,217,132,216,175,217,138,217,131,217,136,216,177,216,1= 67,217, -132,216,179,217,138,216,167,216,173,216,169,216,185,216,168,216,175,216,1= 67,217, -132,217,132,217,135,216,167,217,132,216,170,216,177,216,168,217,138,216,1= 69,216, -167,217,132,216,177,217,136,216,167,216,168,216,183,216,167,217,132,216,1= 63,216, -175,216,168,217,138,216,169,216,167,217,132,216,167,216,174,216,168,216,1= 67,216, -177,216,167,217,132,217,133,216,170,216,173,216,175,216,169,216,167,217,1= 32,216, -167,216,186,216,167,217,134,217,138,99,117,114,115,111,114,58,112,111,105= ,110, -116,101,114,59,60,47,116,105,116,108,101,62,10,60,109,101,116,97,32,34,32= ,104, -114,101,102,61,34,104,116,116,112,58,47,47,34,62,60,115,112,97,110,32,99,= 108,97, -115,115,61,34,109,101,109,98,101,114,115,32,111,102,32,116,104,101,32,119= ,105, -110,100,111,119,46,108,111,99,97,116,105,111,110,118,101,114,116,105,99,9= 7,108, -45,97,108,105,103,110,58,47,97,62,32,124,32,60,97,32,104,114,101,102,61,3= 4,60,33 -,100,111,99,116,121,112,101,32,104,116,109,108,62,109,101,100,105,97,61,3= 4,115, -99,114,101,101,110,34,32,60,111,112,116,105,111,110,32,118,97,108,117,101= ,61,34, -102,97,118,105,99,111,110,46,105,99,111,34,32,47,62,10,9,9,60,100,105,118= ,32,99, -108,97,115,115,61,34,99,104,97,114,97,99,116,101,114,105,115,116,105,99,1= 15,34, -32,109,101,116,104,111,100,61,34,103,101,116,34,32,47,98,111,100,121,62,1= 0,60,47 -,104,116,109,108,62,10,115,104,111,114,116,99,117,116,32,105,99,111,110,3= 4,32, -100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,112,97,100,100,1= 05,110, -103,45,98,111,116,116,111,109,58,114,101,112,114,101,115,101,110,116,97,1= 16,105, -118,101,115,115,117,98,109,105,116,34,32,118,97,108,117,101,61,34,97,108,= 105,103 -,110,61,34,99,101,110,116,101,114,34,32,116,104,114,111,117,103,104,111,1= 17,116, -32,116,104,101,32,115,99,105,101,110,99,101,32,102,105,99,116,105,111,110= ,10,32, -32,60,100,105,118,32,99,108,97,115,115,61,34,115,117,98,109,105,116,34,32= ,99,108 -,97,115,115,61,34,111,110,101,32,111,102,32,116,104,101,32,109,111,115,11= 6,32, -118,97,108,105,103,110,61,34,116,111,112,34,62,60,119,97,115,32,101,115,1= 16,97, -98,108,105,115,104,101,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13= ,10,114 -,101,116,117,114,110,32,102,97,108,115,101,59,34,62,41,46,115,116,121,108= ,101,46 -,100,105,115,112,108,97,121,98,101,99,97,117,115,101,32,111,102,32,116,10= 4,101, -32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,102,111,11= 4,109, -32,97,99,116,105,111,110,61,34,47,125,98,111,100,121,123,109,97,114,103,1= 05,110, -58,48,59,69,110,99,121,99,108,111,112,101,100,105,97,32,111,102,118,101,1= 14,115, -105,111,110,32,111,102,32,116,104,101,32,46,99,114,101,97,116,101,69,108,= 101,109 -,101,110,116,40,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,60,= 47,100, -105,118,62,10,60,47,100,105,118,62,10,10,97,100,109,105,110,105,115,116,1= 14,97, -116,105,118,101,32,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10= 4,105, -115,116,111,114,121,32,111,102,32,116,104,101,32,34,62,60,105,110,112,117= ,116,32 -,116,121,112,101,61,34,112,111,114,116,105,111,110,32,111,102,32,116,104,= 101,32, -97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,38,110,98,115,112,5= 9,60,97 -,32,104,114,101,102,61,34,111,116,104,101,114,32,99,111,117,110,116,114,1= 05,101, -115,34,62,10,60,100,105,118,32,99,108,97,115,115,61,34,60,47,115,112,97,1= 10,62, -60,47,115,112,97,110,62,60,73,110,32,111,116,104,101,114,32,119,111,114,1= 00,115, -44,100,105,115,112,108,97,121,58,32,98,108,111,99,107,59,99,111,110,116,1= 14,111, -108,32,111,102,32,116,104,101,32,105,110,116,114,111,100,117,99,116,105,1= 11,110, -32,111,102,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,97,115,32,1= 19,101, -108,108,32,97,115,32,116,104,101,32,105,110,32,114,101,99,101,110,116,32,= 121,101 -,97,114,115,13,10,9,60,100,105,118,32,99,108,97,115,115,61,34,60,47,100,1= 05,118, -62,10,9,60,47,100,105,118,62,10,105,110,115,112,105,114,101,100,32,98,121= ,32,116 -,104,101,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,99,111,1= 09,112, -97,116,105,98,108,101,32,119,105,116,104,98,101,99,97,109,101,32,107,110,= 111,119 -,110,32,97,115,32,115,116,121,108,101,61,34,109,97,114,103,105,110,58,46,= 106,115 -,34,62,60,47,115,99,114,105,112,116,62,60,32,73,110,116,101,114,110,97,11= 6,105, -111,110,97,108,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110= ,71,101 -,114,109,97,110,32,108,97,110,103,117,97,103,101,32,115,116,121,108,101,6= 1,34,99 -,111,108,111,114,58,35,67,111,109,109,117,110,105,115,116,32,80,97,114,11= 6,121, -99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,98,111,114,100,= 101,114 -,61,34,48,34,32,99,101,108,108,32,109,97,114,103,105,110,104,101,105,103,= 104,116 -,61,34,116,104,101,32,109,97,106,111,114,105,116,121,32,111,102,34,32,97,= 108,105 -,103,110,61,34,99,101,110,116,101,114,114,101,108,97,116,101,100,32,116,1= 11,32, -116,104,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,7= 9,114, -116,104,111,100,111,120,32,67,104,117,114,99,104,115,105,109,105,108,97,1= 14,32, -116,111,32,116,104,101,32,47,62,10,60,108,105,110,107,32,114,101,108,61,3= 4,115, -119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,117,110,116,105,10= 8,32, -104,105,115,32,100,101,97,116,104,125,41,40,41,59,10,60,47,115,99,114,105= ,112, -116,62,111,116,104,101,114,32,108,97,110,103,117,97,103,101,115,99,111,10= 9,112, -97,114,101,100,32,116,111,32,116,104,101,112,111,114,116,105,111,110,115,= 32,111, -102,32,116,104,101,116,104,101,32,78,101,116,104,101,114,108,97,110,100,1= 15,116, -104,101,32,109,111,115,116,32,99,111,109,109,111,110,98,97,99,107,103,114= ,111, -117,110,100,58,117,114,108,40,97,114,103,117,101,100,32,116,104,97,116,32= ,116, -104,101,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,110,99= ,108, -117,100,101,100,32,105,110,32,116,104,101,78,111,114,116,104,32,65,109,10= 1,114, -105,99,97,110,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,= 105,110 -,116,101,114,112,114,101,116,97,116,105,111,110,115,116,104,101,32,116,11= 4,97, -100,105,116,105,111,110,97,108,100,101,118,101,108,111,112,109,101,110,11= 6,32, -111,102,32,102,114,101,113,117,101,110,116,108,121,32,117,115,101,100,97,= 32,99, -111,108,108,101,99,116,105,111,110,32,111,102,118,101,114,121,32,115,105,= 109,105 -,108,97,114,32,116,111,115,117,114,114,111,117,110,100,105,110,103,32,116= ,104, -101,101,120,97,109,112,108,101,32,111,102,32,116,104,105,115,97,108,105,1= 03,110, -61,34,99,101,110,116,101,114,34,62,119,111,117,108,100,32,104,97,118,101,= 32,98, -101,101,110,105,109,97,103,101,95,99,97,112,116,105,111,110,32,61,97,116,= 116,97, -99,104,101,100,32,116,111,32,116,104,101,115,117,103,103,101,115,116,105,= 110,103 -,32,116,104,97,116,105,110,32,116,104,101,32,102,111,114,109,32,111,102,3= 2,105, -110,118,111,108,118,101,100,32,105,110,32,116,104,101,105,115,32,100,101,= 114,105 -,118,101,100,32,102,114,111,109,110,97,109,101,100,32,97,102,116,101,114,= 32,116, -104,101,73,110,116,114,111,100,117,99,116,105,111,110,32,116,111,114,101,= 115,116 -,114,105,99,116,105,111,110,115,32,111,110,32,115,116,121,108,101,61,34,1= 19,105, -100,116,104,58,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,11= 6,104, -101,32,99,114,101,97,116,105,111,110,32,111,102,109,111,115,116,32,105,10= 9,112, -111,114,116,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,9= 7,110, -100,114,101,115,117,108,116,101,100,32,105,110,32,116,104,101,99,111,108,= 108,97, -112,115,101,32,111,102,32,116,104,101,84,104,105,115,32,109,101,97,110,11= 5,32, -116,104,97,116,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,= 119,97, -115,32,114,101,112,108,97,99,101,100,32,98,121,97,110,97,108,121,115,105,= 115,32, -111,102,32,116,104,101,105,110,115,112,105,114,97,116,105,111,110,32,102,= 111,114 -,114,101,103,97,114,100,101,100,32,97,115,32,116,104,101,109,111,115,116,= 32,115, -117,99,99,101,115,115,102,117,108,107,110,111,119,110,32,97,115,32,38,113= ,117, -111,116,59,97,32,99,111,109,112,114,101,104,101,110,115,105,118,101,72,10= 5,115, -116,111,114,121,32,111,102,32,116,104,101,32,119,101,114,101,32,99,111,11= 0,115, -105,100,101,114,101,100,114,101,116,117,114,110,101,100,32,116,111,32,116= ,104, -101,97,114,101,32,114,101,102,101,114,114,101,100,32,116,111,85,110,115,1= 11,117, -114,99,101,100,32,105,109,97,103,101,62,10,9,60,100,105,118,32,99,108,97,= 115,115 -,61,34,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,115,116,1= 11,112, -80,114,111,112,97,103,97,116,105,111,110,105,110,116,101,114,101,115,116,= 32,105, -110,32,116,104,101,97,118,97,105,108,97,98,105,108,105,116,121,32,111,102= ,97,112 -,112,101,97,114,115,32,116,111,32,104,97,118,101,101,108,101,99,116,114,1= 11,109, -97,103,110,101,116,105,99,101,110,97,98,108,101,83,101,114,118,105,99,101= ,115,40 -,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,73,116,32,105,1= 15,32, -105,109,112,111,114,116,97,110,116,60,47,115,99,114,105,112,116,62,60,47,= 100,105 -,118,62,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,114,101,10= 8,97, -116,105,118,101,32,116,111,32,116,104,101,97,115,32,97,32,114,101,115,117= ,108, -116,32,111,102,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,1= 02,70, -111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,109,101,116,104,11= 1,100, -61,34,112,111,115,116,34,32,119,97,115,32,102,111,108,108,111,119,101,100= ,32,98, -121,38,97,109,112,59,109,100,97,115,104,59,32,116,104,101,116,104,101,32,= 97,112, -112,108,105,99,97,116,105,111,110,106,115,34,62,60,47,115,99,114,105,112,= 116,62, -13,10,117,108,62,60,47,100,105,118,62,60,47,100,105,118,62,97,102,116,101= ,114,32 -,116,104,101,32,100,101,97,116,104,119,105,116,104,32,114,101,115,112,101= ,99,116 -,32,116,111,115,116,121,108,101,61,34,112,97,100,100,105,110,103,58,105,1= 15,32, -112,97,114,116,105,99,117,108,97,114,108,121,100,105,115,112,108,97,121,5= 8,105, -110,108,105,110,101,59,32,116,121,112,101,61,34,115,117,98,109,105,116,34= ,32,105 -,115,32,100,105,118,105,100,101,100,32,105,110,116,111,228,184,173,230,15= 0,135, -32,40,231,174,128,228,189,147,41,114,101,115,112,111,110,115,97,98,105,10= 8,105, -100,97,100,97,100,109,105,110,105,115,116,114,97,99,105,195,179,110,105,1= 10,116, -101,114,110,97,99,105,111,110,97,108,101,115,99,111,114,114,101,115,112,1= 11,110, -100,105,101,110,116,101,224,164,137,224,164,170,224,164,175,224,165,139,2= 24,164, -151,224,164,170,224,165,130,224,164,176,224,165,141,224,164,181,224,164,1= 85,224, -164,174,224,164,190,224,164,176,224,165,135,224,164,178,224,165,139,224,1= 64,151, -224,165,139,224,164,130,224,164,154,224,165,129,224,164,168,224,164,190,2= 24,164, -181,224,164,178,224,165,135,224,164,149,224,164,191,224,164,168,224,164,1= 84,224, -164,176,224,164,149,224,164,190,224,164,176,224,164,170,224,165,129,224,1= 64,178, -224,164,191,224,164,184,224,164,150,224,165,139,224,164,156,224,165,135,2= 24,164, -130,224,164,154,224,164,190,224,164,185,224,164,191,224,164,143,224,164,1= 73,224, -165,135,224,164,156,224,165,135,224,164,130,224,164,182,224,164,190,224,1= 64,174, -224,164,191,224,164,178,224,164,185,224,164,174,224,164,190,224,164,176,2= 24,165, -128,224,164,156,224,164,190,224,164,151,224,164,176,224,164,163,224,164,1= 72,224, -164,168,224,164,190,224,164,168,224,165,135,224,164,149,224,165,129,224,1= 64,174, -224,164,190,224,164,176,224,164,172,224,165,141,224,164,178,224,165,137,2= 24,164, -151,224,164,174,224,164,190,224,164,178,224,164,191,224,164,149,224,164,1= 74,224, -164,185,224,164,191,224,164,178,224,164,190,224,164,170,224,165,131,224,1= 64,183, -224,165,141,224,164,160,224,164,172,224,164,162,224,164,188,224,164,164,2= 24,165, -135,224,164,173,224,164,190,224,164,156,224,164,170,224,164,190,224,164,1= 49,224, -165,141,224,164,178,224,164,191,224,164,149,224,164,159,224,165,141,224,1= 64,176, -224,165,135,224,164,168,224,164,150,224,164,191,224,164,178,224,164,190,2= 24,164, -171,224,164,166,224,165,140,224,164,176,224,164,190,224,164,168,224,164,1= 74,224, -164,190,224,164,174,224,164,178,224,165,135,224,164,174,224,164,164,224,1= 64,166, -224,164,190,224,164,168,224,164,172,224,164,190,224,164,156,224,164,190,2= 24,164, -176,224,164,181,224,164,191,224,164,149,224,164,190,224,164,184,224,164,1= 49,224, -165,141,224,164,175,224,165,139,224,164,130,224,164,154,224,164,190,224,1= 64,185, -224,164,164,224,165,135,224,164,170,224,164,185,224,165,129,224,164,129,2= 24,164, -154,224,164,172,224,164,164,224,164,190,224,164,175,224,164,190,224,164,1= 84,224, -164,130,224,164,181,224,164,190,224,164,166,224,164,166,224,165,135,224,1= 64,150, -224,164,168,224,165,135,224,164,170,224,164,191,224,164,155,224,164,178,2= 24,165, -135,224,164,181,224,164,191,224,164,182,224,165,135,224,164,183,224,164,1= 76,224, -164,190,224,164,156,224,165,141,224,164,175,224,164,137,224,164,164,224,1= 65,141, -224,164,164,224,164,176,224,164,174,224,165,129,224,164,130,224,164,172,2= 24,164, -136,224,164,166,224,165,139,224,164,168,224,165,139,224,164,130,224,164,1= 37,224, -164,170,224,164,149,224,164,176,224,164,163,224,164,170,224,164,162,224,1= 64,188, -224,165,135,224,164,130,224,164,184,224,165,141,224,164,165,224,164,191,2= 24,164, -164,224,164,171,224,164,191,224,164,178,224,165,141,224,164,174,224,164,1= 74,224, -165,129,224,164,150,224,165,141,224,164,175,224,164,133,224,164,154,224,1= 65,141, -224,164,155,224,164,190,224,164,155,224,165,130,224,164,159,224,164,164,2= 24,165, -128,224,164,184,224,164,130,224,164,151,224,165,128,224,164,164,224,164,1= 56,224, -164,190,224,164,143,224,164,151,224,164,190,224,164,181,224,164,191,224,1= 64,173, -224,164,190,224,164,151,224,164,152,224,164,163,224,165,141,224,164,159,2= 24,165, -135,224,164,166,224,165,130,224,164,184,224,164,176,224,165,135,224,164,1= 66,224, -164,191,224,164,168,224,165,139,224,164,130,224,164,185,224,164,164,224,1= 65,141, -224,164,175,224,164,190,224,164,184,224,165,135,224,164,149,224,165,141,2= 24,164, -184,224,164,151,224,164,190,224,164,130,224,164,167,224,165,128,224,164,1= 81,224, -164,191,224,164,182,224,165,141,224,164,181,224,164,176,224,164,190,224,1= 64,164, -224,165,135,224,164,130,224,164,166,224,165,136,224,164,159,224,165,141,2= 24,164, -184,224,164,168,224,164,149,224,165,141,224,164,182,224,164,190,224,164,1= 84,224, -164,190,224,164,174,224,164,168,224,165,135,224,164,133,224,164,166,224,1= 64,190, -224,164,178,224,164,164,224,164,172,224,164,191,224,164,156,224,164,178,2= 24,165, -128,224,164,170,224,165,129,224,164,176,224,165,130,224,164,183,224,164,1= 85,224, -164,191,224,164,130,224,164,166,224,165,128,224,164,174,224,164,191,224,1= 64,164, -224,165,141,224,164,176,224,164,149,224,164,181,224,164,191,224,164,164,2= 24,164, -190,224,164,176,224,165,129,224,164,170,224,164,175,224,165,135,224,164,1= 84,224, -165,141,224,164,165,224,164,190,224,164,168,224,164,149,224,164,176,224,1= 65,139, -224,164,161,224,164,188,224,164,174,224,165,129,224,164,149,224,165,141,2= 24,164, -164,224,164,175,224,165,139,224,164,156,224,164,168,224,164,190,224,164,1= 49,224, -165,131,224,164,170,224,164,175,224,164,190,224,164,170,224,165,139,224,1= 64,184, -224,165,141,224,164,159,224,164,152,224,164,176,224,165,135,224,164,178,2= 24,165, -130,224,164,149,224,164,190,224,164,176,224,165,141,224,164,175,224,164,1= 81,224, -164,191,224,164,154,224,164,190,224,164,176,224,164,184,224,165,130,224,1= 64,154, -224,164,168,224,164,190,224,164,174,224,165,130,224,164,178,224,165,141,2= 24,164, -175,224,164,166,224,165,135,224,164,150,224,165,135,224,164,130,224,164,1= 85,224, -164,174,224,165,135,224,164,182,224,164,190,224,164,184,224,165,141,224,1= 64,149, -224,165,130,224,164,178,224,164,174,224,165,136,224,164,130,224,164,168,2= 24,165, -135,224,164,164,224,165,136,224,164,175,224,164,190,224,164,176,224,164,1= 56,224, -164,191,224,164,184,224,164,149,224,165,135,114,115,115,43,120,109,108,34= ,32,116 -,105,116,108,101,61,34,45,116,121,112,101,34,32,99,111,110,116,101,110,11= 6,61,34 -,116,105,116,108,101,34,32,99,111,110,116,101,110,116,61,34,97,116,32,116= ,104, -101,32,115,97,109,101,32,116,105,109,101,46,106,115,34,62,60,47,115,99,11= 4,105, -112,116,62,10,60,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,3= 2,60,47 -,115,112,97,110,62,60,47,97,62,60,47,108,105,62,118,101,114,116,105,99,97= ,108,45 -,97,108,105,103,110,58,116,47,106,113,117,101,114,121,46,109,105,110,46,1= 06,115, -34,62,46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,32,115,11= 6,121, -108,101,61,34,112,97,100,100,105,110,103,45,125,41,40,41,59,10,60,47,115,= 99,114, -105,112,116,62,10,60,47,115,112,97,110,62,60,97,32,104,114,101,102,61,34,= 60,97, -32,104,114,101,102,61,34,104,116,116,112,58,47,47,41,59,32,114,101,116,11= 7,114, -110,32,102,97,108,115,101,59,116,101,120,116,45,100,101,99,111,114,97,116= ,105, -111,110,58,32,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,98,1= 11,114, -100,101,114,45,99,111,108,108,97,112,115,101,58,97,115,115,111,99,105,97,= 116,101 -,100,32,119,105,116,104,32,66,97,104,97,115,97,32,73,110,100,111,110,101,= 115,105 -,97,69,110,103,108,105,115,104,32,108,97,110,103,117,97,103,101,60,116,10= 1,120, -116,32,120,109,108,58,115,112,97,99,101,61,46,103,105,102,34,32,98,111,11= 4,100, -101,114,61,34,48,34,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,1= 0,111, -118,101,114,102,108,111,119,58,104,105,100,100,101,110,59,105,109,103,32,= 115,114 -,99,61,34,104,116,116,112,58,47,47,97,100,100,69,118,101,110,116,76,105,1= 15,116, -101,110,101,114,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114= ,32,115 -,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,47,102,97,118,105,99= ,111, -110,46,105,99,111,34,32,47,62,111,112,101,114,97,116,105,110,103,32,115,1= 21,115, -116,101,109,34,32,115,116,121,108,101,61,34,119,105,100,116,104,58,49,116= ,97,114 -,103,101,116,61,34,95,98,108,97,110,107,34,62,83,116,97,116,101,32,85,110= ,105, -118,101,114,115,105,116,121,116,101,120,116,45,97,108,105,103,110,58,108,= 101,102 -,116,59,10,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,44,32= ,105, -110,99,108,117,100,105,110,103,32,116,104,101,32,97,114,111,117,110,100,3= 2,116, -104,101,32,119,111,114,108,100,41,59,13,10,60,47,115,99,114,105,112,116,6= 2,13,10 -,60,34,32,115,116,121,108,101,61,34,104,101,105,103,104,116,58,59,111,118= ,101, -114,102,108,111,119,58,104,105,100,100,101,110,109,111,114,101,32,105,110= ,102, -111,114,109,97,116,105,111,110,97,110,32,105,110,116,101,114,110,97,116,1= 05,111, -110,97,108,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,111,= 110,101 -,32,111,102,32,116,104,101,32,102,105,114,115,116,99,97,110,32,98,101,32,= 102,111 -,117,110,100,32,105,110,32,60,47,100,105,118,62,10,9,9,60,47,100,105,118,= 62,10, -100,105,115,112,108,97,121,58,32,110,111,110,101,59,34,62,34,32,47,62,10,= 60,108, -105,110,107,32,114,101,108,61,34,10,32,32,40,102,117,110,99,116,105,111,1= 10,40, -41,32,123,116,104,101,32,49,53,116,104,32,99,101,110,116,117,114,121,46,1= 12,114, -101,118,101,110,116,68,101,102,97,117,108,116,40,108,97,114,103,101,32,11= 0,117, -109,98,101,114,32,111,102,32,66,121,122,97,110,116,105,110,101,32,69,109,= 112,105 -,114,101,46,106,112,103,124,116,104,117,109,98,124,108,101,102,116,124,11= 8,97, -115,116,32,109,97,106,111,114,105,116,121,32,111,102,109,97,106,111,114,1= 05,116, -121,32,111,102,32,116,104,101,32,32,97,108,105,103,110,61,34,99,101,110,1= 16,101, -114,34,62,85,110,105,118,101,114,115,105,116,121,32,80,114,101,115,115,10= 0,111, -109,105,110,97,116,101,100,32,98,121,32,116,104,101,83,101,99,111,110,100= ,32,87, -111,114,108,100,32,87,97,114,100,105,115,116,114,105,98,117,116,105,111,1= 10,32, -111,102,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,1= 16,104, -101,32,114,101,115,116,32,111,102,32,116,104,101,32,99,104,97,114,97,99,1= 16,101, -114,105,122,101,100,32,98,121,32,114,101,108,61,34,110,111,102,111,108,10= 8,111, -119,34,62,100,101,114,105,118,101,115,32,102,114,111,109,32,116,104,101,1= 14,97, -116,104,101,114,32,116,104,97,110,32,116,104,101,32,97,32,99,111,109,98,1= 05,110, -97,116,105,111,110,32,111,102,115,116,121,108,101,61,34,119,105,100,116,1= 04,58, -49,48,48,69,110,103,108,105,115,104,45,115,112,101,97,107,105,110,103,99,= 111,109 -,112,117,116,101,114,32,115,99,105,101,110,99,101,98,111,114,100,101,114,= 61,34, -48,34,32,97,108,116,61,34,116,104,101,32,101,120,105,115,116,101,110,99,1= 01,32, -111,102,68,101,109,111,99,114,97,116,105,99,32,80,97,114,116,121,34,32,11= 5,116, -121,108,101,61,34,109,97,114,103,105,110,45,70,111,114,32,116,104,105,115= ,32,114 -,101,97,115,111,110,44,46,106,115,34,62,60,47,115,99,114,105,112,116,62,1= 0,9,115 -,66,121,84,97,103,78,97,109,101,40,115,41,91,48,93,106,115,34,62,60,47,11= 5,99, -114,105,112,116,62,13,10,60,46,106,115,34,62,60,47,115,99,114,105,112,116= ,62,13, -10,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,39,32,97,108= ,116,61 -,39,39,32,99,108,97,115,115,61,39,102,111,114,109,97,116,105,111,110,32,1= 11,102, -32,116,104,101,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,= 32,60, -47,97,62,60,47,100,105,118,62,60,47,100,105,118,62,47,112,97,103,101,62,1= 0,32,32 -,60,112,97,103,101,62,10,60,100,105,118,32,99,108,97,115,115,61,34,99,111= ,110, -116,98,101,99,97,109,101,32,116,104,101,32,102,105,114,115,116,98,97,104,= 97,115, -97,32,73,110,100,111,110,101,115,105,97,101,110,103,108,105,115,104,32,40= ,115, -105,109,112,108,101,41,206,149,206,187,206,187,206,183,206,189,206,185,20= 6,186, -206,172,209,133,209,128,208,178,208,176,209,130,209,129,208,186,208,184,2= 08,186, -208,190,208,188,208,191,208,176,208,189,208,184,208,184,209,143,208,178,2= 08,187, -209,143,208,181,209,130,209,129,209,143,208,148,208,190,208,177,208,176,2= 08,178, -208,184,209,130,209,140,209,135,208,181,208,187,208,190,208,178,208,181,2= 08,186, -208,176,209,128,208,176,208,183,208,178,208,184,209,130,208,184,209,143,2= 08,152, -208,189,209,130,208,181,209,128,208,189,208,181,209,130,208,158,209,130,2= 08,178, -208,181,209,130,208,184,209,130,209,140,208,189,208,176,208,191,209,128,2= 08,184, -208,188,208,181,209,128,208,184,208,189,209,130,208,181,209,128,208,189,2= 08,181, -209,130,208,186,208,190,209,130,208,190,209,128,208,190,208,179,208,190,2= 09,129, -209,130,209,128,208,176,208,189,208,184,209,134,209,139,208,186,208,176,2= 09,135, -208,181,209,129,209,130,208,178,208,181,209,131,209,129,208,187,208,190,2= 08,178, -208,184,209,143,209,133,208,191,209,128,208,190,208,177,208,187,208,181,2= 08,188, -209,139,208,191,208,190,208,187,209,131,209,135,208,184,209,130,209,140,2= 09,143, -208,178,208,187,209,143,209,142,209,130,209,129,209,143,208,189,208,176,2= 08,184, -208,177,208,190,208,187,208,181,208,181,208,186,208,190,208,188,208,191,2= 08,176, -208,189,208,184,209,143,208,178,208,189,208,184,208,188,208,176,208,189,2= 08,184, -208,181,209,129,209,128,208,181,208,180,209,129,209,130,208,178,208,176,2= 16,167, -217,132,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,2= 16,177, -216,166,217,138,216,179,217,138,216,169,216,167,217,132,216,167,217,134,2= 16,170, -217,130,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216,167,2= 16,170, -217,131,216,167,217,132,216,179,217,138,216,167,216,177,216,167,216,170,2= 16,167, -217,132,217,133,217,131,216,170,217,136,216,168,216,169,216,167,217,132,2= 16,179, -216,185,217,136,216,175,217,138,216,169,216,167,216,173,216,181,216,167,2= 16,166, -217,138,216,167,216,170,216,167,217,132,216,185,216,167,217,132,217,133,2= 17,138, -216,169,216,167,217,132,216,181,217,136,216,170,217,138,216,167,216,170,2= 16,167, -217,132,216,167,217,134,216,170,216,177,217,134,216,170,216,167,217,132,2= 16,170, -216,181,216,167,217,133,217,138,217,133,216,167,217,132,216,165,216,179,2= 17,132, -216,167,217,133,217,138,216,167,217,132,217,133,216,180,216,167,216,177,2= 17,131, -216,169,216,167,217,132,217,133,216,177,216,166,217,138,216,167,216,170,1= 14,111, -98,111,116,115,34,32,99,111,110,116,101,110,116,61,34,60,100,105,118,32,1= 05,100, -61,34,102,111,111,116,101,114,34,62,116,104,101,32,85,110,105,116,101,100= ,32,83, -116,97,116,101,115,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,= 47,47, -46,106,112,103,124,114,105,103,104,116,124,116,104,117,109,98,124,46,106,= 115,34, -62,60,47,115,99,114,105,112,116,62,13,10,60,108,111,99,97,116,105,111,110= ,46,112 -,114,111,116,111,99,111,108,102,114,97,109,101,98,111,114,100,101,114,61,= 34,48, -34,32,115,34,32,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,60,47,= 97,62, -60,47,100,105,118,62,60,47,100,105,118,62,60,102,111,110,116,45,119,101,1= 05,103, -104,116,58,98,111,108,100,59,38,113,117,111,116,59,32,97,110,100,32,38,11= 3,117, -111,116,59,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,= 32,109, -97,114,103,105,110,58,48,59,112,97,100,100,105,110,103,58,34,32,114,101,1= 08,61, -34,110,111,102,111,108,108,111,119,34,32,80,114,101,115,105,100,101,110,1= 16,32, -111,102,32,116,104,101,32,116,119,101,110,116,105,101,116,104,32,99,101,1= 10,116, -117,114,121,101,118,105,115,105,111,110,62,10,32,32,60,47,112,97,103,101,= 73,110, -116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,97,46,97,115,12= 1,110, -99,32,61,32,116,114,117,101,59,13,10,105,110,102,111,114,109,97,116,105,1= 11,110, -32,97,98,111,117,116,60,100,105,118,32,105,100,61,34,104,101,97,100,101,1= 14,34, -62,34,32,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,60,97,32,10= 4,114, -101,102,61,34,104,116,116,112,115,58,47,47,60,100,105,118,32,105,100,61,3= 4,99, -111,110,116,101,110,116,34,60,47,100,105,118,62,13,10,60,47,100,105,118,6= 2,13,10 -,60,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,60,1= 05,109, -103,32,115,114,99,61,39,104,116,116,112,58,47,47,97,99,99,111,114,100,105= ,110, -103,32,116,111,32,116,104,101,32,10,60,47,98,111,100,121,62,10,60,47,104,= 116,109 -,108,62,10,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,5= 8,115, -99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,65,114,105,97,1= 08,44, -32,72,101,108,118,101,116,105,99,97,44,60,47,97,62,60,115,112,97,110,32,9= 9,108, -97,115,115,61,34,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,11= 6,32, -112,111,108,105,116,105,99,97,108,32,112,97,114,116,105,101,115,116,100,6= 2,60,47 -,116,114,62,60,47,116,97,98,108,101,62,60,104,114,101,102,61,34,104,116,1= 16,112, -58,47,47,119,119,119,46,105,110,116,101,114,112,114,101,116,97,116,105,11= 1,110, -32,111,102,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,3= 2,100, -111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,99,104,97,114,= 115,101 -,116,61,34,117,116,102,45,56,34,62,10,98,101,103,105,110,110,105,110,103,= 32,111, -102,32,116,104,101,32,114,101,118,101,97,108,101,100,32,116,104,97,116,32= ,116, -104,101,116,101,108,101,118,105,115,105,111,110,32,115,101,114,105,101,11= 5,34,32 -,114,101,108,61,34,110,111,102,111,108,108,111,119,34,62,32,116,97,114,10= 3,101, -116,61,34,95,98,108,97,110,107,34,62,99,108,97,105,109,105,110,103,32,116= ,104,97 -,116,32,116,104,101,104,116,116,112,37,51,65,37,50,70,37,50,70,119,119,11= 9,46, -109,97,110,105,102,101,115,116,97,116,105,111,110,115,32,111,102,80,114,1= 05,109, -101,32,77,105,110,105,115,116,101,114,32,111,102,105,110,102,108,117,101,= 110,99, -101,100,32,98,121,32,116,104,101,99,108,97,115,115,61,34,99,108,101,97,11= 4,102, -105,120,34,62,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10,13,10,11= 6,104, -114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,67,104,117,114,= 99,104, -32,111,102,32,69,110,103,108,97,110,100,111,102,32,78,111,114,116,104,32,= 67,97, -114,111,108,105,110,97,115,113,117,97,114,101,32,107,105,108,111,109,101,= 116,114 -,101,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,= 100,105 -,115,116,105,110,99,116,32,102,114,111,109,32,116,104,101,99,111,109,109,= 111,110 -,108,121,32,107,110,111,119,110,32,97,115,80,104,111,110,101,116,105,99,3= 2,65, -108,112,104,97,98,101,116,100,101,99,108,97,114,101,100,32,116,104,97,116= ,32,116 -,104,101,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,= 66,101, -110,106,97,109,105,110,32,70,114,97,110,107,108,105,110,114,111,108,101,4= 5,112, -108,97,121,105,110,103,32,103,97,109,101,116,104,101,32,85,110,105,118,10= 1,114, -115,105,116,121,32,111,102,105,110,32,87,101,115,116,101,114,110,32,69,11= 7,114, -111,112,101,112,101,114,115,111,110,97,108,32,99,111,109,112,117,116,101,= 114,80, -114,111,106,101,99,116,32,71,117,116,101,110,98,101,114,103,114,101,103,9= 7,114, -100,108,101,115,115,32,111,102,32,116,104,101,104,97,115,32,98,101,101,11= 0,32, -112,114,111,112,111,115,101,100,116,111,103,101,116,104,101,114,32,119,10= 5,116, -104,32,116,104,101,62,60,47,108,105,62,60,108,105,32,99,108,97,115,115,61= ,34,105 -,110,32,115,111,109,101,32,99,111,117,110,116,114,105,101,115,109,105,110= ,46,106 -,115,34,62,60,47,115,99,114,105,112,116,62,111,102,32,116,104,101,32,112,= 111,112 -,117,108,97,116,105,111,110,111,102,102,105,99,105,97,108,32,108,97,110,1= 03,117, -97,103,101,60,105,109,103,32,115,114,99,61,34,105,109,97,103,101,115,47,1= 05,100, -101,110,116,105,102,105,101,100,32,98,121,32,116,104,101,110,97,116,117,1= 14,97, -108,32,114,101,115,111,117,114,99,101,115,99,108,97,115,115,105,102,105,9= 9,97, -116,105,111,110,32,111,102,99,97,110,32,98,101,32,99,111,110,115,105,100,= 101,114 -,101,100,113,117,97,110,116,117,109,32,109,101,99,104,97,110,105,99,115,7= 8,101, -118,101,114,116,104,101,108,101,115,115,44,32,116,104,101,109,105,108,108= ,105, -111,110,32,121,101,97,114,115,32,97,103,111,60,47,98,111,100,121,62,13,10= ,60,47, -104,116,109,108,62,13,206,149,206,187,206,187,206,183,206,189,206,185,206= ,186, -206,172,10,116,97,107,101,32,97,100,118,97,110,116,97,103,101,32,111,102,= 97,110, -100,44,32,97,99,99,111,114,100,105,110,103,32,116,111,97,116,116,114,105,= 98,117, -116,101,100,32,116,111,32,116,104,101,77,105,99,114,111,115,111,102,116,3= 2,87, -105,110,100,111,119,115,116,104,101,32,102,105,114,115,116,32,99,101,110,= 116,117 -,114,121,117,110,100,101,114,32,116,104,101,32,99,111,110,116,114,111,108= ,100, -105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,115,104,111,114= ,116, -108,121,32,97,102,116,101,114,32,116,104,101,110,111,116,97,98,108,101,32= ,101, -120,99,101,112,116,105,111,110,116,101,110,115,32,111,102,32,116,104,111,= 117,115 -,97,110,100,115,115,101,118,101,114,97,108,32,100,105,102,102,101,114,101= ,110, -116,97,114,111,117,110,100,32,116,104,101,32,119,111,114,108,100,46,114,1= 01,97, -99,104,105,110,103,32,109,105,108,105,116,97,114,121,105,115,111,108,97,1= 16,101, -100,32,102,114,111,109,32,116,104,101,111,112,112,111,115,105,116,105,111= ,110,32 -,116,111,32,116,104,101,116,104,101,32,79,108,100,32,84,101,115,116,97,10= 9,101, -110,116,65,102,114,105,99,97,110,32,65,109,101,114,105,99,97,110,115,105,= 110,115 -,101,114,116,101,100,32,105,110,116,111,32,116,104,101,115,101,112,97,114= ,97,116 -,101,32,102,114,111,109,32,116,104,101,109,101,116,114,111,112,111,108,10= 5,116, -97,110,32,97,114,101,97,109,97,107,101,115,32,105,116,32,112,111,115,115,= 105,98, -108,101,97,99,107,110,111,119,108,101,100,103,101,100,32,116,104,97,116,9= 7,114, -103,117,97,98,108,121,32,116,104,101,32,109,111,115,116,116,121,112,101,6= 1,34, -116,101,120,116,47,99,115,115,34,62,10,116,104,101,32,73,110,116,101,114,= 110,97, -116,105,111,110,97,108,65,99,99,111,114,100,105,110,103,32,116,111,32,116= ,104, -101,32,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,99,111,= 105,110 -,99,105,100,101,32,119,105,116,104,32,116,104,101,116,119,111,45,116,104,= 105,114 -,100,115,32,111,102,32,116,104,101,68,117,114,105,110,103,32,116,104,105,= 115,32, -116,105,109,101,44,100,117,114,105,110,103,32,116,104,101,32,112,101,114,= 105,111 -,100,97,110,110,111,117,110,99,101,100,32,116,104,97,116,32,104,101,116,1= 04,101, -32,105,110,116,101,114,110,97,116,105,111,110,97,108,97,110,100,32,109,11= 1,114, -101,32,114,101,99,101,110,116,108,121,98,101,108,105,101,118,101,100,32,1= 16,104, -97,116,32,116,104,101,99,111,110,115,99,105,111,117,115,110,101,115,115,3= 2,97, -110,100,102,111,114,109,101,114,108,121,32,107,110,111,119,110,32,97,115,= 115,117 -,114,114,111,117,110,100,101,100,32,98,121,32,116,104,101,102,105,114,115= ,116,32 -,97,112,112,101,97,114,101,100,32,105,110,111,99,99,97,115,105,111,110,97= ,108, -108,121,32,117,115,101,100,112,111,115,105,116,105,111,110,58,97,98,115,1= 11,108, -117,116,101,59,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,34= ,32,112 -,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,116,101= ,120, -116,45,97,108,105,103,110,58,99,101,110,116,101,114,59,106,97,120,47,108,= 105,98, -115,47,106,113,117,101,114,121,47,49,46,98,97,99,107,103,114,111,117,110,= 100,45, -99,111,108,111,114,58,35,116,121,112,101,61,34,97,112,112,108,105,99,97,1= 16,105, -111,110,47,97,110,103,117,97,103,101,34,32,99,111,110,116,101,110,116,61,= 34,60, -109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,80,114,105= ,118,97 -,99,121,32,80,111,108,105,99,121,60,47,97,62,101,40,34,37,51,67,115,99,11= 4,105, -112,116,32,115,114,99,61,39,34,32,116,97,114,103,101,116,61,34,95,98,108,= 97,110, -107,34,62,79,110,32,116,104,101,32,111,116,104,101,114,32,104,97,110,100,= 44,46, -106,112,103,124,116,104,117,109,98,124,114,105,103,104,116,124,50,60,47,1= 00,105, -118,62,60,100,105,118,32,99,108,97,115,115,61,34,60,100,105,118,32,115,11= 6,121, -108,101,61,34,102,108,111,97,116,58,110,105,110,101,116,101,101,110,116,1= 04,32, -99,101,110,116,117,114,121,60,47,98,111,100,121,62,13,10,60,47,104,116,10= 9,108, -62,13,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,115,= 59,116, -101,120,116,45,97,108,105,103,110,58,99,101,110,116,101,114,102,111,110,1= 16,45, -119,101,105,103,104,116,58,32,98,111,108,100,59,32,65,99,99,111,114,100,1= 05,110, -103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,3= 2,98, -101,116,119,101,101,110,34,32,102,114,97,109,101,98,111,114,100,101,114,6= 1,34,48 -,34,32,34,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58= ,108, -105,110,107,32,104,114,101,102,61,34,104,116,116,112,58,47,47,104,116,109= ,108,52 -,47,108,111,111,115,101,46,100,116,100,34,62,10,100,117,114,105,110,103,3= 2,116, -104,105,115,32,112,101,114,105,111,100,60,47,116,100,62,60,47,116,114,62,= 60,47, -116,97,98,108,101,62,99,108,111,115,101,108,121,32,114,101,108,97,116,101= ,100,32 -,116,111,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109= ,101,59 -,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,105,110,= 112,117 -,116,32,116,121,112,101,61,34,116,101,120,116,34,32,60,115,112,97,110,32,= 115,116 -,121,108,101,61,34,102,111,110,116,45,111,110,114,101,97,100,121,115,116,= 97,116, -101,99,104,97,110,103,101,9,60,100,105,118,32,99,108,97,115,115,61,34,99,= 108,101 -,97,114,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,4= 6,32,70 -,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,32,119,105= ,100, -101,32,118,97,114,105,101,116,121,32,111,102,32,60,33,68,79,67,84,89,80,6= 9,32, -104,116,109,108,62,13,10,60,38,110,98,115,112,59,38,110,98,115,112,59,38,= 110,98, -115,112,59,34,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,= 115,116 -,121,108,101,61,34,102,108,111,97,116,58,108,101,102,116,59,99,111,110,99= ,101, -114,110,101,100,32,119,105,116,104,32,116,104,101,61,104,116,116,112,37,5= 1,65,37 -,50,70,37,50,70,119,119,119,46,105,110,32,112,111,112,117,108,97,114,32,9= 9,117, -108,116,117,114,101,116,121,112,101,61,34,116,101,120,116,47,99,115,115,3= 4,32,47 -,62,105,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,72= ,97,114 -,118,97,114,100,32,85,110,105,118,101,114,115,105,116,121,116,121,108,101= ,115, -104,101,101,116,34,32,104,114,101,102,61,34,47,116,104,101,32,109,97,105,= 110,32, -99,104,97,114,97,99,116,101,114,79,120,102,111,114,100,32,85,110,105,118,= 101,114 -,115,105,116,121,32,32,110,97,109,101,61,34,107,101,121,119,111,114,100,1= 15,34, -32,99,115,116,121,108,101,61,34,116,101,120,116,45,97,108,105,103,110,58,= 116,104 -,101,32,85,110,105,116,101,100,32,75,105,110,103,100,111,109,102,101,100,= 101,114 -,97,108,32,103,111,118,101,114,110,109,101,110,116,60,100,105,118,32,115,= 116,121 -,108,101,61,34,109,97,114,103,105,110,32,100,101,112,101,110,100,105,110,= 103,32, -111,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,1= 11,102, -32,116,104,101,60,100,105,118,32,99,108,97,115,115,61,34,104,101,97,100,1= 01,114, -46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,100,101,1= 15,116, -114,117,99,116,105,111,110,32,111,102,32,116,104,101,115,108,105,103,104,= 116,108 -,121,32,100,105,102,102,101,114,101,110,116,105,110,32,97,99,99,111,114,1= 00,97, -110,99,101,32,119,105,116,104,116,101,108,101,99,111,109,109,117,110,105,= 99,97, -116,105,111,110,115,105,110,100,105,99,97,116,101,115,32,116,104,97,116,3= 2,116, -104,101,115,104,111,114,116,108,121,32,116,104,101,114,101,97,102,116,101= ,114, -101,115,112,101,99,105,97,108,108,121,32,105,110,32,116,104,101,32,69,117= ,114, -111,112,101,97,110,32,99,111,117,110,116,114,105,101,115,72,111,119,101,1= 18,101, -114,44,32,116,104,101,114,101,32,97,114,101,115,114,99,61,34,104,116,116,= 112,58, -47,47,115,116,97,116,105,99,115,117,103,103,101,115,116,101,100,32,116,10= 4,97, -116,32,116,104,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,119,11= 9,119, -46,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,84,10= 1,108, -101,99,111,109,109,117,110,105,99,97,116,105,111,110,115,34,32,114,101,10= 8,61,34 -,110,111,102,111,108,108,111,119,34,32,116,72,111,108,121,32,82,111,109,9= 7,110, -32,69,109,112,101,114,111,114,97,108,109,111,115,116,32,101,120,99,108,11= 7,115, -105,118,101,108,121,34,32,98,111,114,100,101,114,61,34,48,34,32,97,108,11= 6,61,34 -,83,101,99,114,101,116,97,114,121,32,111,102,32,83,116,97,116,101,99,117,= 108,109 -,105,110,97,116,105,110,103,32,105,110,32,116,104,101,67,73,65,32,87,111,= 114,108 -,100,32,70,97,99,116,98,111,111,107,116,104,101,32,109,111,115,116,32,105= ,109, -112,111,114,116,97,110,116,97,110,110,105,118,101,114,115,97,114,121,32,1= 11,102, -32,116,104,101,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110= ,100,45 -,60,108,105,62,60,101,109,62,60,97,32,104,114,101,102,61,34,47,116,104,10= 1,32,65 -,116,108,97,110,116,105,99,32,79,99,101,97,110,115,116,114,105,99,116,108= ,121,32 -,115,112,101,97,107,105,110,103,44,115,104,111,114,116,108,121,32,98,101,= 102,111 -,114,101,32,116,104,101,100,105,102,102,101,114,101,110,116,32,116,121,11= 2,101, -115,32,111,102,116,104,101,32,79,116,116,111,109,97,110,32,69,109,112,105= ,114, -101,62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,65,110= ,32,73, -110,116,114,111,100,117,99,116,105,111,110,32,116,111,99,111,110,115,101,= 113,117 -,101,110,99,101,32,111,102,32,116,104,101,100,101,112,97,114,116,117,114,= 101,32, -102,114,111,109,32,116,104,101,67,111,110,102,101,100,101,114,97,116,101,= 32,83, -116,97,116,101,115,105,110,100,105,103,101,110,111,117,115,32,112,101,111= ,112, -108,101,115,80,114,111,99,101,101,100,105,110,103,115,32,111,102,32,116,1= 04,101, -105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,116,= 104,101 -,111,114,105,101,115,32,104,97,118,101,32,98,101,101,110,105,110,118,111,= 108,118 -,101,109,101,110,116,32,105,110,32,116,104,101,100,105,118,105,100,101,10= 0,32, -105,110,116,111,32,116,104,114,101,101,97,100,106,97,99,101,110,116,32,99= ,111, -117,110,116,114,105,101,115,105,115,32,114,101,115,112,111,110,115,105,98= ,108, -101,32,102,111,114,100,105,115,115,111,108,117,116,105,111,110,32,111,102= ,32,116 -,104,101,99,111,108,108,97,98,111,114,97,116,105,111,110,32,119,105,116,1= 04,119, -105,100,101,108,121,32,114,101,103,97,114,100,101,100,32,97,115,104,105,1= 15,32, -99,111,110,116,101,109,112,111,114,97,114,105,101,115,102,111,117,110,100= ,105, -110,103,32,109,101,109,98,101,114,32,111,102,68,111,109,105,110,105,99,97= ,110,32 -,82,101,112,117,98,108,105,99,103,101,110,101,114,97,108,108,121,32,97,99= ,99,101 -,112,116,101,100,116,104,101,32,112,111,115,115,105,98,105,108,105,116,12= 1,32, -111,102,97,114,101,32,97,108,115,111,32,97,118,97,105,108,97,98,108,101,1= 17,110, -100,101,114,32,99,111,110,115,116,114,117,99,116,105,111,110,114,101,115,= 116,111 -,114,97,116,105,111,110,32,111,102,32,116,104,101,116,104,101,32,103,101,= 110,101 -,114,97,108,32,112,117,98,108,105,99,105,115,32,97,108,109,111,115,116,32= ,101, -110,116,105,114,101,108,121,112,97,115,115,101,115,32,116,104,114,111,117= ,103, -104,32,116,104,101,104,97,115,32,98,101,101,110,32,115,117,103,103,101,11= 5,116, -101,100,99,111,109,112,117,116,101,114,32,97,110,100,32,118,105,100,101,1= 11,71, -101,114,109,97,110,105,99,32,108,97,110,103,117,97,103,101,115,32,97,99,9= 9,111, -114,100,105,110,103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,= 101,110 -,116,32,102,114,111,109,32,116,104,101,115,104,111,114,116,108,121,32,97,= 102,116 -,101,114,119,97,114,100,115,104,114,101,102,61,34,104,116,116,112,115,58,= 47,47, -119,119,119,46,114,101,99,101,110,116,32,100,101,118,101,108,111,112,109,= 101,110 -,116,66,111,97,114,100,32,111,102,32,68,105,114,101,99,116,111,114,115,60= ,100, -105,118,32,99,108,97,115,115,61,34,115,101,97,114,99,104,124,32,60,97,32,= 104,114 -,101,102,61,34,104,116,116,112,58,47,47,73,110,32,112,97,114,116,105,99,1= 17,108, -97,114,44,32,116,104,101,77,117,108,116,105,112,108,101,32,102,111,111,11= 6,110, -111,116,101,115,111,114,32,111,116,104,101,114,32,115,117,98,115,116,97,1= 10,99, -101,116,104,111,117,115,97,110,100,115,32,111,102,32,121,101,97,114,115,1= 16,114, -97,110,115,108,97,116,105,111,110,32,111,102,32,116,104,101,60,47,100,105= ,118,62 -,13,10,60,47,100,105,118,62,13,10,13,10,60,97,32,104,114,101,102,61,34,10= 5,110, -100,101,120,46,112,104,112,119,97,115,32,101,115,116,97,98,108,105,115,10= 4,101, -100,32,105,110,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,= 62,10, -112,97,114,116,105,99,105,112,97,116,101,32,105,110,32,116,104,101,97,32,= 115,116 -,114,111,110,103,32,105,110,102,108,117,101,110,99,101,115,116,121,108,10= 1,61,34 -,109,97,114,103,105,110,45,116,111,112,58,114,101,112,114,101,115,101,110= ,116, -101,100,32,98,121,32,116,104,101,103,114,97,100,117,97,116,101,100,32,102= ,114, -111,109,32,116,104,101,84,114,97,100,105,116,105,111,110,97,108,108,121,4= 4,32, -116,104,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41= ,59,72, -111,119,101,118,101,114,44,32,115,105,110,99,101,32,116,104,101,47,100,10= 5,118, -62,10,60,47,100,105,118,62,10,60,100,105,118,32,108,101,102,116,59,32,109= ,97,114 -,103,105,110,45,108,101,102,116,58,112,114,111,116,101,99,116,105,111,110= ,32,97, -103,97,105,110,115,116,48,59,32,118,101,114,116,105,99,97,108,45,97,108,1= 05,103, -110,58,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,10= 1,116, -121,112,101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,47,100,105,= 118,62, -10,60,100,105,118,32,99,108,97,115,115,61,34,32,99,108,97,115,115,61,34,9= 9,108, -101,97,114,102,105,120,34,62,60,100,105,118,32,99,108,97,115,115,61,34,10= 2,111, -111,116,101,114,9,9,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,1= 16,104, -101,32,109,111,116,105,111,110,32,112,105,99,116,117,114,101,208,145,209,= 138,208 -,187,208,179,208,176,209,128,209,129,208,186,208,184,208,177,209,138,208,= 187,208 -,179,208,176,209,128,209,129,208,186,208,184,208,164,208,181,208,180,208,= 181,209 -,128,208,176,209,134,208,184,208,184,208,189,208,181,209,129,208,186,208,= 190,208 -,187,209,140,208,186,208,190,209,129,208,190,208,190,208,177,209,137,208,= 181,208 -,189,208,184,208,181,209,129,208,190,208,190,208,177,209,137,208,181,208,= 189,208 -,184,209,143,208,191,209,128,208,190,208,179,209,128,208,176,208,188,208,= 188,209 -,139,208,158,209,130,208,191,209,128,208,176,208,178,208,184,209,130,209,= 140,208 -,177,208,181,209,129,208,191,208,187,208,176,209,130,208,189,208,190,208,= 188,208 -,176,209,130,208,181,209,128,208,184,208,176,208,187,209,139,208,191,208,= 190,208 -,183,208,178,208,190,208,187,209,143,208,181,209,130,208,191,208,190,209,= 129,208 -,187,208,181,208,180,208,189,208,184,208,181,209,128,208,176,208,183,208,= 187,208 -,184,209,135,208,189,209,139,209,133,208,191,209,128,208,190,208,180,209,= 131,208 -,186,209,134,208,184,208,184,208,191,209,128,208,190,208,179,209,128,208,= 176,208 -,188,208,188,208,176,208,191,208,190,208,187,208,189,208,190,209,129,209,= 130,209 -,140,209,142,208,189,208,176,209,133,208,190,208,180,208,184,209,130,209,= 129,209 -,143,208,184,208,183,208,177,209,128,208,176,208,189,208,189,208,190,208,= 181,208 -,189,208,176,209,129,208,181,208,187,208,181,208,189,208,184,209,143,208,= 184,208 -,183,208,188,208,181,208,189,208,181,208,189,208,184,209,143,208,186,208,= 176,209 -,130,208,181,208,179,208,190,209,128,208,184,208,184,208,144,208,187,208,= 181,208 -,186,209,129,208,176,208,189,208,180,209,128,224,164,166,224,165,141,224,= 164,181 -,224,164,190,224,164,176,224,164,190,224,164,174,224,165,136,224,164,168,= 224,165 -,129,224,164,133,224,164,178,224,164,170,224,165,141,224,164,176,224,164,= 166,224 -,164,190,224,164,168,224,164,173,224,164,190,224,164,176,224,164,164,224,= 165,128 -,224,164,175,224,164,133,224,164,168,224,165,129,224,164,166,224,165,135,= 224,164 -,182,224,164,185,224,164,191,224,164,168,224,165,141,224,164,166,224,165,= 128,224 -,164,135,224,164,130,224,164,161,224,164,191,224,164,175,224,164,190,224,= 164,166 -,224,164,191,224,164,178,224,165,141,224,164,178,224,165,128,224,164,133,= 224,164 -,167,224,164,191,224,164,149,224,164,190,224,164,176,224,164,181,224,165,= 128,224 -,164,161,224,164,191,224,164,175,224,165,139,224,164,154,224,164,191,224,= 164,159 -,224,165,141,224,164,160,224,165,135,224,164,184,224,164,174,224,164,190,= 224,164 -,154,224,164,190,224,164,176,224,164,156,224,164,130,224,164,149,224,165,= 141,224 -,164,182,224,164,168,224,164,166,224,165,129,224,164,168,224,164,191,224,= 164,175 -,224,164,190,224,164,170,224,165,141,224,164,176,224,164,175,224,165,139,= 224,164 -,151,224,164,133,224,164,168,224,165,129,224,164,184,224,164,190,224,164,= 176,224 -,164,145,224,164,168,224,164,178,224,164,190,224,164,135,224,164,168,224,= 164,170 -,224,164,190,224,164,176,224,165,141,224,164,159,224,165,128,224,164,182,= 224,164 -,176,224,165,141,224,164,164,224,165,139,224,164,130,224,164,178,224,165,= 139,224 -,164,149,224,164,184,224,164,173,224,164,190,224,164,171,224,164,188,224,= 165,141 -,224,164,178,224,165,136,224,164,182,224,164,182,224,164,176,224,165,141,= 224,164 -,164,224,165,135,224,164,130,224,164,170,224,165,141,224,164,176,224,164,= 166,224 -,165,135,224,164,182,224,164,170,224,165,141,224,164,178,224,165,135,224,= 164,175 -,224,164,176,224,164,149,224,165,135,224,164,130,224,164,166,224,165,141,= 224,164 -,176,224,164,184,224,165,141,224,164,165,224,164,191,224,164,164,224,164,= 191,224 -,164,137,224,164,164,224,165,141,224,164,170,224,164,190,224,164,166,224,= 164,137 -,224,164,168,224,165,141,224,164,185,224,165,135,224,164,130,224,164,154,= 224,164 -,191,224,164,159,224,165,141,224,164,160,224,164,190,224,164,175,224,164,= 190,224 -,164,164,224,165,141,224,164,176,224,164,190,224,164,156,224,165,141,224,= 164,175 -,224,164,190,224,164,166,224,164,190,224,164,170,224,165,129,224,164,176,= 224,164 -,190,224,164,168,224,165,135,224,164,156,224,165,139,224,164,161,224,164,= 188,224 -,165,135,224,164,130,224,164,133,224,164,168,224,165,129,224,164,181,224,= 164,190 -,224,164,166,224,164,182,224,165,141,224,164,176,224,165,135,224,164,163,= 224,165 -,128,224,164,182,224,164,191,224,164,149,224,165,141,224,164,183,224,164,= 190,224 -,164,184,224,164,176,224,164,149,224,164,190,224,164,176,224,165,128,224,= 164,184 -,224,164,130,224,164,151,224,165,141,224,164,176,224,164,185,224,164,170,= 224,164 -,176,224,164,191,224,164,163,224,164,190,224,164,174,224,164,172,224,165,= 141,224 -,164,176,224,164,190,224,164,130,224,164,161,224,164,172,224,164,154,224,= 165,141 -,224,164,154,224,165,139,224,164,130,224,164,137,224,164,170,224,164,178,= 224,164 -,172,224,165,141,224,164,167,224,164,174,224,164,130,224,164,164,224,165,= 141,224 -,164,176,224,165,128,224,164,184,224,164,130,224,164,170,224,164,176,224,= 165,141 -,224,164,149,224,164,137,224,164,174,224,165,141,224,164,174,224,165,128,= 224,164 -,166,224,164,174,224,164,190,224,164,167,224,165,141,224,164,175,224,164,= 174,224 -,164,184,224,164,185,224,164,190,224,164,175,224,164,164,224,164,190,224,= 164,182 -,224,164,172,224,165,141,224,164,166,224,165,139,224,164,130,224,164,174,= 224,165 -,128,224,164,161,224,164,191,224,164,175,224,164,190,224,164,134,224,164,= 136,224 -,164,170,224,165,128,224,164,143,224,164,178,224,164,174,224,165,139,224,= 164,172 -,224,164,190,224,164,135,224,164,178,224,164,184,224,164,130,224,164,150,= 224,165 -,141,224,164,175,224,164,190,224,164,134,224,164,170,224,164,176,224,165,= 135,224 -,164,182,224,164,168,224,164,133,224,164,168,224,165,129,224,164,172,224,= 164,130 -,224,164,167,224,164,172,224,164,190,224,164,156,224,164,188,224,164,190,= 224,164 -,176,224,164,168,224,164,181,224,165,128,224,164,168,224,164,164,224,164,= 174,224 -,164,170,224,165,141,224,164,176,224,164,174,224,165,129,224,164,150,224,= 164,170 -,224,165,141,224,164,176,224,164,182,224,165,141,224,164,168,224,164,170,= 224,164 -,176,224,164,191,224,164,181,224,164,190,224,164,176,224,164,168,224,165,= 129,224 -,164,149,224,164,184,224,164,190,224,164,168,224,164,184,224,164,174,224,= 164,176 -,224,165,141,224,164,165,224,164,168,224,164,134,224,164,175,224,165,139,= 224,164 -,156,224,164,191,224,164,164,224,164,184,224,165,139,224,164,174,224,164,= 181,224 -,164,190,224,164,176,216,167,217,132,217,133,216,180,216,167,216,177,217,= 131,216 -,167,216,170,216,167,217,132,217,133,217,134,216,170,216,175,217,138,216,= 167,216 -,170,216,167,217,132,217,131,217,133,216,168,217,138,217,136,216,170,216,= 177,216 -,167,217,132,217,133,216,180,216,167,217,135,216,175,216,167,216,170,216,= 185,216 -,175,216,175,216,167,217,132,216,178,217,136,216,167,216,177,216,185,216,= 175,216 -,175,216,167,217,132,216,177,216,175,217,136,216,175,216,167,217,132,216,= 165,216 -,179,217,132,216,167,217,133,217,138,216,169,216,167,217,132,217,129,217,= 136,216 -,170,217,136,216,180,217,136,216,168,216,167,217,132,217,133,216,179,216,= 167,216 -,168,217,130,216,167,216,170,216,167,217,132,217,133,216,185,217,132,217,= 136,217 -,133,216,167,216,170,216,167,217,132,217,133,216,179,217,132,216,179,217,= 132,216 -,167,216,170,216,167,217,132,216,172,216,177,216,167,217,129,217,138,217,= 131,216 -,179,216,167,217,132,216,167,216,179,217,132,216,167,217,133,217,138,216,= 169,216 -,167,217,132,216,167,216,170,216,181,216,167,217,132,216,167,216,170,107,= 101,121 -,119,111,114,100,115,34,32,99,111,110,116,101,110,116,61,34,119,51,46,111= ,114, -103,47,49,57,57,57,47,120,104,116,109,108,34,62,60,97,32,116,97,114,103,1= 01,116, -61,34,95,98,108,97,110,107,34,32,116,101,120,116,47,104,116,109,108,59,32= ,99,104 -,97,114,115,101,116,61,34,32,116,97,114,103,101,116,61,34,95,98,108,97,11= 0,107, -34,62,60,116,97,98,108,101,32,99,101,108,108,112,97,100,100,105,110,103,6= 1,34,97 -,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,116,1= 01,120, -116,45,97,108,105,103,110,58,32,99,101,110,116,101,114,59,116,111,32,108,= 97,115, -116,32,118,101,114,115,105,111,110,32,98,121,32,98,97,99,107,103,114,111,= 117,110 -,100,45,99,111,108,111,114,58,32,35,34,32,104,114,101,102,61,34,104,116,1= 16,112, -58,47,47,119,119,119,46,47,100,105,118,62,60,47,100,105,118,62,60,100,105= ,118,32 -,105,100,61,60,97,32,104,114,101,102,61,34,35,34,32,99,108,97,115,115,61,= 34,34, -62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,99,114,105= ,112, -116,34,32,115,114,99,61,34,104,116,116,112,58,47,47,10,60,115,99,114,105,= 112,116 -,32,108,97,110,103,117,97,103,101,61,34,47,47,69,78,34,32,34,104,116,116,= 112,58, -47,47,119,119,119,46,119,101,110,99,111,100,101,85,82,73,67,111,109,112,1= 11,110, -101,110,116,40,34,32,104,114,101,102,61,34,106,97,118,97,115,99,114,105,1= 12,116, -58,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,116,101,110,116,1= 00,111, -99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,112,111,115= ,105, -116,105,111,110,58,32,97,98,115,111,108,117,116,101,59,115,99,114,105,112= ,116,32 -,115,114,99,61,34,104,116,116,112,58,47,47,32,115,116,121,108,101,61,34,1= 09,97, -114,103,105,110,45,116,111,112,58,46,109,105,110,46,106,115,34,62,60,47,1= 15,99, -114,105,112,116,62,10,60,47,100,105,118,62,10,60,100,105,118,32,99,108,97= ,115, -115,61,34,119,51,46,111,114,103,47,49,57,57,57,47,120,104,116,109,108,34,= 32,10, -13,10,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,62,100,105,115,= 116,105 -,110,99,116,105,111,110,32,98,101,116,119,101,101,110,47,34,32,116,97,114= ,103, -101,116,61,34,95,98,108,97,110,107,34,62,60,108,105,110,107,32,104,114,10= 1,102, -61,34,104,116,116,112,58,47,47,101,110,99,111,100,105,110,103,61,34,117,1= 16,102, -45,56,34,63,62,10,119,46,97,100,100,69,118,101,110,116,76,105,115,116,101= ,110, -101,114,63,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,119,119,1= 19,46, -105,99,111,110,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,32,11= 5,116, -121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,58,116,121,112,101= ,61,34, -116,101,120,116,47,99,115,115,34,32,47,62,10,109,101,116,97,32,112,114,11= 1,112, -101,114,116,121,61,34,111,103,58,116,60,105,110,112,117,116,32,116,121,11= 2,101, -61,34,116,101,120,116,34,32,32,115,116,121,108,101,61,34,116,101,120,116,= 45,97, -108,105,103,110,58,116,104,101,32,100,101,118,101,108,111,112,109,101,110= ,116,32 -,111,102,32,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,= 34,116, -101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,= 105,115 -,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,116,97,98= ,108, -101,32,119,105,100,116,104,61,34,49,48,48,37,34,32,73,110,32,97,100,100,1= 05,116, -105,111,110,32,116,111,32,116,104,101,32,99,111,110,116,114,105,98,117,11= 6,101, -100,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,1= 15,32, -98,101,116,119,101,101,110,100,101,118,101,108,111,112,109,101,110,116,32= ,111, -102,32,116,104,101,32,73,116,32,105,115,32,105,109,112,111,114,116,97,110= ,116,32 -,116,111,32,60,47,115,99,114,105,112,116,62,10,10,60,115,99,114,105,112,1= 16,32, -32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,62,= 60,47, -115,112,97,110,62,60,115,112,97,110,32,105,100,61,103,98,76,105,98,114,97= ,114, -121,32,111,102,32,67,111,110,103,114,101,115,115,60,105,109,103,32,115,11= 4,99,61 -,34,104,116,116,112,58,47,47,105,109,69,110,103,108,105,115,104,32,116,11= 4,97, -110,115,108,97,116,105,111,110,65,99,97,100,101,109,121,32,111,102,32,83,= 99,105, -101,110,99,101,115,100,105,118,32,115,116,121,108,101,61,34,100,105,115,1= 12,108, -97,121,58,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116= ,104, -101,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,105,100,41= ,105, -110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,69,10= 8,101, -109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,60,109,101,116,9= 7,32, -112,114,111,112,101,114,116,121,61,34,111,103,58,208,145,209,138,208,187,= 208,179 -,208,176,209,128,209,129,208,186,208,184,10,32,116,121,112,101,61,34,116,= 101,120 -,116,34,32,110,97,109,101,61,34,62,80,114,105,118,97,99,121,32,80,111,108= ,105,99 -,121,60,47,97,62,97,100,109,105,110,105,115,116,101,114,101,100,32,98,121= ,32,116 -,104,101,101,110,97,98,108,101,83,105,110,103,108,101,82,101,113,117,101,= 115,116 -,115,116,121,108,101,61,38,113,117,111,116,59,109,97,114,103,105,110,58,6= 0,47, -100,105,118,62,60,47,100,105,118,62,60,47,100,105,118,62,60,62,60,105,109= ,103,32 -,115,114,99,61,34,104,116,116,112,58,47,47,105,32,115,116,121,108,101,61,= 38,113, -117,111,116,59,102,108,111,97,116,58,114,101,102,101,114,114,101,100,32,1= 16,111, -32,97,115,32,116,104,101,32,116,111,116,97,108,32,112,111,112,117,108,97,= 116,105 -,111,110,32,111,102,105,110,32,87,97,115,104,105,110,103,116,111,110,44,3= 2,68,46 -,67,46,32,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,= 45,97, -109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,44,111,= 114,103 -,97,110,105,122,97,116,105,111,110,32,111,102,32,116,104,101,112,97,114,1= 16,105, -99,105,112,97,116,101,100,32,105,110,32,116,104,101,116,104,101,32,105,11= 0,116, -114,111,100,117,99,116,105,111,110,32,111,102,105,100,101,110,116,105,102= ,105, -101,100,32,119,105,116,104,32,116,104,101,102,105,99,116,105,111,110,97,1= 08,32, -99,104,97,114,97,99,116,101,114,32,79,120,102,111,114,100,32,85,110,105,1= 18,101, -114,115,105,116,121,32,109,105,115,117,110,100,101,114,115,116,97,110,100= ,105, -110,103,32,111,102,84,104,101,114,101,32,97,114,101,44,32,104,111,119,101= ,118, -101,114,44,115,116,121,108,101,115,104,101,101,116,34,32,104,114,101,102,= 61,34, -47,67,111,108,117,109,98,105,97,32,85,110,105,118,101,114,115,105,116,121= ,101, -120,112,97,110,100,101,100,32,116,111,32,105,110,99,108,117,100,101,117,1= 15,117, -97,108,108,121,32,114,101,102,101,114,114,101,100,32,116,111,105,110,100,= 105,99, -97,116,105,110,103,32,116,104,97,116,32,116,104,101,104,97,118,101,32,115= ,117, -103,103,101,115,116,101,100,32,116,104,97,116,97,102,102,105,108,105,97,1= 16,101, -100,32,119,105,116,104,32,116,104,101,99,111,114,114,101,108,97,116,105,1= 11,110, -32,98,101,116,119,101,101,110,110,117,109,98,101,114,32,111,102,32,100,10= 5,102, -102,101,114,101,110,116,62,60,47,116,100,62,60,47,116,114,62,60,47,116,97= ,98,108 -,101,62,82,101,112,117,98,108,105,99,32,111,102,32,73,114,101,108,97,110,= 100,10, -60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,117,110,1= 00,101, -114,32,116,104,101,32,105,110,102,108,117,101,110,99,101,99,111,110,116,1= 14,105, -98,117,116,105,111,110,32,116,111,32,116,104,101,79,102,102,105,99,105,97= ,108,32 -,119,101,98,115,105,116,101,32,111,102,104,101,97,100,113,117,97,114,116,= 101,114 -,115,32,111,102,32,116,104,101,99,101,110,116,101,114,101,100,32,97,114,1= 11,117, -110,100,32,116,104,101,105,109,112,108,105,99,97,116,105,111,110,115,32,1= 11,102, -32,116,104,101,104,97,118,101,32,98,101,101,110,32,100,101,118,101,108,11= 1,112, -101,100,70,101,100,101,114,97,108,32,82,101,112,117,98,108,105,99,32,111,= 102,98, -101,99,97,109,101,32,105,110,99,114,101,97,115,105,110,103,108,121,99,111= ,110, -116,105,110,117,97,116,105,111,110,32,111,102,32,116,104,101,78,111,116,1= 01,44, -32,104,111,119,101,118,101,114,44,32,116,104,97,116,115,105,109,105,108,9= 7,114, -32,116,111,32,116,104,97,116,32,111,102,32,99,97,112,97,98,105,108,105,11= 6,105, -101,115,32,111,102,32,116,104,101,97,99,99,111,114,100,97,110,99,101,32,1= 19,105, -116,104,32,116,104,101,112,97,114,116,105,99,105,112,97,110,116,115,32,10= 5,110, -32,116,104,101,102,117,114,116,104,101,114,32,100,101,118,101,108,111,112= ,109, -101,110,116,117,110,100,101,114,32,116,104,101,32,100,105,114,101,99,116,= 105,111 -,110,105,115,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,101= ,100, -104,105,115,32,121,111,117,110,103,101,114,32,98,114,111,116,104,101,114,= 60,47, -116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,60,97,32,104,116,1= 16,112, -45,101,113,117,105,118,61,34,88,45,85,65,45,112,104,121,115,105,99,97,108= ,32,112 -,114,111,112,101,114,116,105,101,115,111,102,32,66,114,105,116,105,115,10= 4,32,67 -,111,108,117,109,98,105,97,104,97,115,32,98,101,101,110,32,99,114,105,116= ,105,99 -,105,122,101,100,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,= 116,105 -,111,110,113,117,101,115,116,105,111,110,115,32,97,98,111,117,116,32,116,= 104,101 -,112,97,115,115,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101= ,48,34, -32,99,101,108,108,112,97,100,100,105,110,103,61,34,48,34,32,116,104,111,1= 17,115, -97,110,100,115,32,111,102,32,112,101,111,112,108,101,114,101,100,105,114,= 101,99, -116,115,32,104,101,114,101,46,32,70,111,114,104,97,118,101,32,99,104,105,= 108,100 -,114,101,110,32,117,110,100,101,114,37,51,69,37,51,67,47,115,99,114,105,1= 12,116, -37,51,69,34,41,41,59,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47= ,47,119 -,119,119,46,60,108,105,62,60,97,32,104,114,101,102,61,34,104,116,116,112,= 58,47, -47,115,105,116,101,95,110,97,109,101,34,32,99,111,110,116,101,110,116,61,= 34,116, -101,120,116,45,100,101,99,111,114,97,116,105,111,110,58,110,111,110,101,1= 15,116, -121,108,101,61,34,100,105,115,112,108,97,121,58,32,110,111,110,101,60,109= ,101, -116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,88,45,110,101,119,= 32,68, -97,116,101,40,41,46,103,101,116,84,105,109,101,40,41,32,116,121,112,101,6= 1,34, -105,109,97,103,101,47,120,45,105,99,111,110,34,60,47,115,112,97,110,62,60= ,115, -112,97,110,32,99,108,97,115,115,61,34,108,97,110,103,117,97,103,101,61,34= ,106,97 -,118,97,115,99,114,105,112,116,119,105,110,100,111,119,46,108,111,99,97,1= 16,105, -111,110,46,104,114,101,102,60,97,32,104,114,101,102,61,34,106,97,118,97,1= 15,99, -114,105,112,116,58,45,45,62,13,10,60,115,99,114,105,112,116,32,116,121,11= 2,101, -61,34,116,60,97,32,104,114,101,102,61,39,104,116,116,112,58,47,47,119,119= ,119,46 -,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,114,101,102,61,34= ,60,47, -100,105,118,62,13,10,60,100,105,118,32,99,108,97,115,115,61,34,60,115,99,= 114,105 -,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,34,32,114,101,108,6= 1,34, -115,116,121,108,101,115,104,101,101,116,34,32,116,60,47,100,105,118,62,10= ,60,115 -,99,114,105,112,116,32,116,121,112,101,61,47,97,62,32,60,97,32,104,114,10= 1,102, -61,34,104,116,116,112,58,47,47,32,97,108,108,111,119,84,114,97,110,115,11= 2,97, -114,101,110,99,121,61,34,88,45,85,65,45,67,111,109,112,97,116,105,98,108,= 101,34, -32,99,111,110,114,101,108,97,116,105,111,110,115,104,105,112,32,98,101,11= 6,119, -101,101,110,10,60,47,115,99,114,105,112,116,62,13,10,60,115,99,114,105,11= 2,116, -32,60,47,97,62,60,47,108,105,62,60,47,117,108,62,60,47,100,105,118,62,97,= 115,115 -,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,1= 11,103, -114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,60,47,97,62,6= 0,97,32 -,104,114,101,102,61,34,104,116,116,112,58,47,47,60,47,97,62,60,47,108,105= ,62,60, -108,105,32,99,108,97,115,115,61,34,102,111,114,109,32,97,99,116,105,111,1= 10,61, -34,104,116,116,112,58,47,47,60,100,105,118,32,115,116,121,108,101,61,34,1= 00,105, -115,112,108,97,121,58,116,121,112,101,61,34,116,101,120,116,34,32,110,97,= 109,101 -,61,34,113,34,60,116,97,98,108,101,32,119,105,100,116,104,61,34,49,48,48,= 37,34, -32,98,97,99,107,103,114,111,117,110,100,45,112,111,115,105,116,105,111,11= 0,58,34 -,32,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,114,1= 01,108, -61,34,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,54,62,60= ,117, -108,62,60,108,105,62,60,97,32,104,114,101,102,61,34,32,32,60,109,101,116,= 97,32, -104,116,116,112,45,101,113,117,105,118,61,34,99,115,115,34,32,109,101,100= ,105,97 -,61,34,115,99,114,101,101,110,34,32,114,101,115,112,111,110,115,105,98,10= 8,101, -32,102,111,114,32,116,104,101,32,34,32,116,121,112,101,61,34,97,112,112,1= 08,105, -99,97,116,105,111,110,47,34,32,115,116,121,108,101,61,34,98,97,99,107,103= ,114, -111,117,110,100,45,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117= ,116, -102,45,56,34,32,97,108,108,111,119,116,114,97,110,115,112,97,114,101,110,= 99,121, -61,34,115,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34= ,116, -101,13,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,= 34,62, -60,47,115,112,97,110,62,60,115,112,97,110,32,99,108,97,115,115,61,34,48,3= 4,32,99 -,101,108,108,115,112,97,99,105,110,103,61,34,48,34,62,59,10,60,47,115,99,= 114,105 -,112,116,62,10,60,115,99,114,105,112,116,32,115,111,109,101,116,105,109,1= 01,115, -32,99,97,108,108,101,100,32,116,104,101,100,111,101,115,32,110,111,116,32= ,110, -101,99,101,115,115,97,114,105,108,121,70,111,114,32,109,111,114,101,32,10= 5,110, -102,111,114,109,97,116,105,111,110,97,116,32,116,104,101,32,98,101,103,10= 5,110, -110,105,110,103,32,111,102,32,60,33,68,79,67,84,89,80,69,32,104,116,109,1= 08,62, -60,104,116,109,108,112,97,114,116,105,99,117,108,97,114,108,121,32,105,11= 0,32, -116,104,101,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,97= ,109, -101,61,34,106,97,118,97,115,99,114,105,112,116,58,118,111,105,100,40,48,4= 1,59,34 -,101,102,102,101,99,116,105,118,101,110,101,115,115,32,111,102,32,116,104= ,101,32 -,97,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,10= 3,101, -110,101,114,97,108,108,121,32,99,111,110,115,105,100,101,114,101,100,62,6= 0,105, -110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,34,62,60,4= 7,115, -99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,116,104,114,111,117= ,103, -104,111,117,116,32,116,104,101,32,119,111,114,108,100,99,111,109,109,111,= 110,32, -109,105,115,99,111,110,99,101,112,116,105,111,110,97,115,115,111,99,105,9= 7,116, -105,111,110,32,119,105,116,104,32,116,104,101,60,47,100,105,118,62,10,60,= 47,100, -105,118,62,10,60,100,105,118,32,99,100,117,114,105,110,103,32,104,105,115= ,32,108 -,105,102,101,116,105,109,101,44,99,111,114,114,101,115,112,111,110,100,10= 5,110, -103,32,116,111,32,116,104,101,116,121,112,101,61,34,105,109,97,103,101,47= ,120,45 -,105,99,111,110,34,32,97,110,32,105,110,99,114,101,97,115,105,110,103,32,= 110,117 -,109,98,101,114,100,105,112,108,111,109,97,116,105,99,32,114,101,108,97,1= 16,105, -111,110,115,97,114,101,32,111,102,116,101,110,32,99,111,110,115,105,100,1= 01,114, -101,100,109,101,116,97,32,99,104,97,114,115,101,116,61,34,117,116,102,45,= 56,34, -32,60,105,110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,= 101,120 -,97,109,112,108,101,115,32,105,110,99,108,117,100,101,32,116,104,101,34,6= 2,60, -105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,105,112,97,114,1= 16,105, -99,105,112,97,116,105,111,110,32,105,110,32,116,104,101,116,104,101,32,10= 1,115, -116,97,98,108,105,115,104,109,101,110,116,32,111,102,10,60,47,100,105,118= ,62,10, -60,100,105,118,32,99,108,97,115,115,61,34,38,97,109,112,59,110,98,115,112= ,59,38, -97,109,112,59,110,98,115,112,59,116,111,32,100,101,116,101,114,109,105,11= 0,101, -32,119,104,101,116,104,101,114,113,117,105,116,101,32,100,105,102,102,101= ,114, -101,110,116,32,102,114,111,109,109,97,114,107,101,100,32,116,104,101,32,9= 8,101, -103,105,110,110,105,110,103,100,105,115,116,97,110,99,101,32,98,101,116,1= 19,101, -101,110,32,116,104,101,99,111,110,116,114,105,98,117,116,105,111,110,115,= 32,116, -111,32,116,104,101,99,111,110,102,108,105,99,116,32,98,101,116,119,101,10= 1,110, -32,116,104,101,119,105,100,101,108,121,32,99,111,110,115,105,100,101,114,= 101,100 -,32,116,111,119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,102,10= 5,114, -115,116,119,105,116,104,32,118,97,114,121,105,110,103,32,100,101,103,114,= 101,101 -,115,104,97,118,101,32,115,112,101,99,117,108,97,116,101,100,32,116,104,9= 7,116, -40,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,1= 16,112, -97,114,116,105,99,105,112,97,116,105,110,103,32,105,110,32,116,104,101,11= 1,114, -105,103,105,110,97,108,108,121,32,100,101,118,101,108,111,112,101,100,101= ,116,97 -,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,32,116,121,11= 2,101, -61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,105,110,116,101,114,99= ,104,97 -,110,103,101,97,98,108,121,32,119,105,116,104,109,111,114,101,32,99,108,1= 11,115, -101,108,121,32,114,101,108,97,116,101,100,115,111,99,105,97,108,32,97,110= ,100,32 -,112,111,108,105,116,105,99,97,108,116,104,97,116,32,119,111,117,108,100,= 32,111, -116,104,101,114,119,105,115,101,112,101,114,112,101,110,100,105,99,117,10= 8,97, -114,32,116,111,32,116,104,101,115,116,121,108,101,32,116,121,112,101,61,3= 4,116, -101,120,116,47,99,115,115,116,121,112,101,61,34,115,117,98,109,105,116,34= ,32,110 -,97,109,101,61,34,102,97,109,105,108,105,101,115,32,114,101,115,105,100,1= 05,110, -103,32,105,110,100,101,118,101,108,111,112,105,110,103,32,99,111,117,110,= 116,114 -,105,101,115,99,111,109,112,117,116,101,114,32,112,114,111,103,114,97,109= ,109, -105,110,103,101,99,111,110,111,109,105,99,32,100,101,118,101,108,111,112,= 109,101 -,110,116,100,101,116,101,114,109,105,110,97,116,105,111,110,32,111,102,32= ,116, -104,101,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,= 105,111 -,110,111,110,32,115,101,118,101,114,97,108,32,111,99,99,97,115,105,111,11= 0,115, -112,111,114,116,117,103,117,195,170,115,32,40,69,117,114,111,112,101,117,= 41,208, -163,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,1= 76,209, -131,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,1= 76,208, -160,208,190,209,129,209,129,208,184,208,185,209,129,208,186,208,190,208,1= 85,208, -188,208,176,209,130,208,181,209,128,208,184,208,176,208,187,208,190,208,1= 78,208, -184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,208,1= 84,209, -131,208,191,209,128,208,176,208,178,208,187,208,181,208,189,208,184,209,1= 43,208, -189,208,181,208,190,208,177,209,133,208,190,208,180,208,184,208,188,208,1= 90,208, -184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,1= 43,208, -152,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,1= 43,208, -160,208,181,209,129,208,191,209,131,208,177,208,187,208,184,208,186,208,1= 84,208, -186,208,190,208,187,208,184,209,135,208,181,209,129,209,130,208,178,208,1= 90,208, -184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,1= 42,209, -130,208,181,209,128,209,128,208,184,209,130,208,190,209,128,208,184,208,1= 84,208, -180,208,190,209,129,209,130,208,176,209,130,208,190,209,135,208,189,208,1= 90,216, -167,217,132,217,133,216,170,217,136,216,167,216,172,216,175,217,136,217,1= 34,216, -167,217,132,216,167,216,180,216,170,216,177,216,167,217,131,216,167,216,1= 70,216, -167,217,132,216,167,217,130,216,170,216,177,216,167,216,173,216,167,216,1= 70,104, -116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,32,115,1= 01,116, -84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,100,10= 5,115, -112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,59,60,105,= 110,112 -,117,116,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,116,121,11= 2,101, -32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,60,105,109,10= 3,32, -115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,34,32,34,104,116= ,116, -112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,115,104,111,114,116,= 99,117, -116,32,105,99,111,110,34,32,104,114,101,102,61,34,34,32,97,117,116,111,99= ,111, -109,112,108,101,116,101,61,34,111,102,102,34,32,60,47,97,62,60,47,100,105= ,118,62 -,60,100,105,118,32,99,108,97,115,115,61,60,47,97,62,60,47,108,105,62,10,6= 0,108, -105,32,99,108,97,115,115,61,34,99,115,115,34,32,116,121,112,101,61,34,116= ,101, -120,116,47,99,115,115,34,32,60,102,111,114,109,32,97,99,116,105,111,110,6= 1,34, -104,116,116,112,58,47,47,120,116,47,99,115,115,34,32,104,114,101,102,61,3= 4,104, -116,116,112,58,47,47,108,105,110,107,32,114,101,108,61,34,97,108,116,101,= 114,110 -,97,116,101,34,32,13,10,60,115,99,114,105,112,116,32,116,121,112,101,61,3= 4,116, -101,120,116,47,32,111,110,99,108,105,99,107,61,34,106,97,118,97,115,99,11= 4,105, -112,116,58,40,110,101,119,32,68,97,116,101,41,46,103,101,116,84,105,109,1= 01,40, -41,125,104,101,105,103,104,116,61,34,49,34,32,119,105,100,116,104,61,34,4= 9,34,32 -,80,101,111,112,108,101,39,115,32,82,101,112,117,98,108,105,99,32,111,102= ,32,32, -60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,11= 6,101, -120,116,45,100,101,99,111,114,97,116,105,111,110,58,117,110,100,101,114,1= 16,104, -101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,60= ,47,100 -,105,118,62,10,60,47,100,105,118,62,10,60,47,100,105,118,62,10,101,115,11= 6,97,98 -,108,105,115,104,109,101,110,116,32,111,102,32,116,104,101,32,60,47,100,1= 05,118, -62,60,47,100,105,118,62,60,47,100,105,118,62,60,47,100,35,118,105,101,119= ,112, -111,114,116,123,109,105,110,45,104,101,105,103,104,116,58,10,60,115,99,11= 4,105, -112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,111,112,116,105,111,= 110,62, -60,111,112,116,105,111,110,32,118,97,108,117,101,61,111,102,116,101,110,3= 2,114, -101,102,101,114,114,101,100,32,116,111,32,97,115,32,47,111,112,116,105,11= 1,110, -62,10,60,111,112,116,105,111,110,32,118,97,108,117,60,33,68,79,67,84,89,8= 0,69,32 -,104,116,109,108,62,10,60,33,45,45,91,73,110,116,101,114,110,97,116,105,1= 11,110, -97,108,32,65,105,114,112,111,114,116,62,10,60,97,32,104,114,101,102,61,34= ,104, -116,116,112,58,47,47,119,119,119,60,47,97,62,60,97,32,104,114,101,102,61,= 34,104, -116,116,112,58,47,47,119,224,184,160,224,184,178,224,184,169,224,184,178,= 224,185 -,132,224,184,151,224,184,162,225,131,165,225,131,144,225,131,160,225,131,= 151,225 -,131,163,225,131,154,225,131,152,230,173,163,233,171,148,228,184,173,230,= 150,135 -,32,40,231,185,129,233,171,148,41,224,164,168,224,164,191,224,164,176,224= ,165, -141,224,164,166,224,165,135,224,164,182,224,164,161,224,164,190,224,164,1= 37,224, -164,168,224,164,178,224,165,139,224,164,161,224,164,149,224,165,141,224,1= 64,183, -224,165,135,224,164,164,224,165,141,224,164,176,224,164,156,224,164,190,2= 24,164, -168,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184,224,164,1= 30,224, -164,172,224,164,130,224,164,167,224,164,191,224,164,164,224,164,184,224,1= 65,141, -224,164,165,224,164,190,224,164,170,224,164,168,224,164,190,224,164,184,2= 24,165, -141,224,164,181,224,165,128,224,164,149,224,164,190,224,164,176,224,164,1= 84,224, -164,130,224,164,184,224,165,141,224,164,149,224,164,176,224,164,163,224,1= 64,184, -224,164,190,224,164,174,224,164,151,224,165,141,224,164,176,224,165,128,2= 24,164, -154,224,164,191,224,164,159,224,165,141,224,164,160,224,165,139,224,164,1= 30,224, -164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,1= 64,168, -224,164,133,224,164,174,224,165,135,224,164,176,224,164,191,224,164,149,2= 24,164, -190,224,164,181,224,164,191,224,164,173,224,164,191,224,164,168,224,165,1= 41,224, -164,168,224,164,151,224,164,190,224,164,161,224,164,191,224,164,175,224,1= 64,190, -224,164,129,224,164,149,224,165,141,224,164,175,224,165,139,224,164,130,2= 24,164, -149,224,164,191,224,164,184,224,165,129,224,164,176,224,164,149,224,165,1= 41,224, -164,183,224,164,190,224,164,170,224,164,185,224,165,129,224,164,129,224,1= 64,154, -224,164,164,224,165,128,224,164,170,224,165,141,224,164,176,224,164,172,2= 24,164, -130,224,164,167,224,164,168,224,164,159,224,164,191,224,164,170,224,165,1= 41,224, -164,170,224,164,163,224,165,128,224,164,149,224,165,141,224,164,176,224,1= 64,191, -224,164,149,224,165,135,224,164,159,224,164,170,224,165,141,224,164,176,2= 24,164, -190,224,164,176,224,164,130,224,164,173,224,164,170,224,165,141,224,164,1= 76,224, -164,190,224,164,170,224,165,141,224,164,164,224,164,174,224,164,190,224,1= 64,178, -224,164,191,224,164,149,224,165,139,224,164,130,224,164,176,224,164,171,2= 24,164, -188,224,165,141,224,164,164,224,164,190,224,164,176,224,164,168,224,164,1= 91,224, -164,176,224,165,141,224,164,174,224,164,190,224,164,163,224,164,178,224,1= 64,191, -224,164,174,224,164,191,224,164,159,224,165,135,224,164,161,100,101,115,9= 9,114, -105,112,116,105,111,110,34,32,99,111,110,116,101,110,116,61,34,100,111,99= ,117, -109,101,110,116,46,108,111,99,97,116,105,111,110,46,112,114,111,116,46,10= 3,101, -116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,60,3= 3,68,79 -,67,84,89,80,69,32,104,116,109,108,62,10,60,104,116,109,108,32,60,109,101= ,116,97 -,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,58,117,114,10= 8,34,32 -,99,111,110,116,101,110,116,61,34,104,116,116,112,58,47,47,46,99,115,115,= 34,32, -114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,115,116,121,= 108,101 -,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,62,116,121,112= ,101,61 -,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,119,51,46,1= 11,114, -103,47,49,57,57,57,47,120,104,116,109,108,34,32,120,109,108,116,121,112,1= 01,61, -34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,109,101,= 116,104 -,111,100,61,34,103,101,116,34,32,97,99,116,105,111,110,61,34,108,105,110,= 107,32, -114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,32,61,32,= 100,111 -,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,116,121= ,112, -101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,34,32,47,62,99,101,= 108,108 -,112,97,100,100,105,110,103,61,34,48,34,32,99,101,108,108,115,112,46,99,1= 15,115, -34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,60,47,97,= 62,60, -47,108,105,62,60,108,105,62,60,97,32,104,114,101,102,61,34,34,32,119,105,= 100,116 -,104,61,34,49,34,32,104,101,105,103,104,116,61,34,49,34,34,62,60,97,32,10= 4,114, -101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,121,108,101= ,61,34, -100,105,115,112,108,97,121,58,110,111,110,101,59,34,62,97,108,116,101,114= ,110,97 -,116,101,34,32,116,121,112,101,61,34,97,112,112,108,105,45,47,47,87,51,67= ,47,47, -68,84,68,32,88,72,84,77,76,32,49,46,48,32,101,108,108,115,112,97,99,105,1= 10,103, -61,34,48,34,32,99,101,108,108,112,97,100,32,116,121,112,101,61,34,104,105= ,100, -100,101,110,34,32,118,97,108,117,101,61,34,47,97,62,38,110,98,115,112,59,= 60,115, -112,97,110,32,114,111,108,101,61,34,115,10,60,105,110,112,117,116,32,116,= 121,112 -,101,61,34,104,105,100,100,101,110,34,32,108,97,110,103,117,97,103,101,61= ,34,74, -97,118,97,83,99,114,105,112,116,34,32,32,100,111,99,117,109,101,110,116,4= 6,103, -101,116,69,108,101,109,101,110,116,115,66,103,61,34,48,34,32,99,101,108,1= 08,115, -112,97,99,105,110,103,61,34,48,34,32,121,112,101,61,34,116,101,120,116,47= ,99,115 -,115,34,32,109,101,100,105,97,61,34,116,121,112,101,61,39,116,101,120,116= ,47,106 -,97,118,97,115,99,114,105,112,116,39,119,105,116,104,32,116,104,101,32,10= 1,120, -99,101,112,116,105,111,110,32,111,102,32,121,112,101,61,34,116,101,120,11= 6,47,99 -,115,115,34,32,114,101,108,61,34,115,116,32,104,101,105,103,104,116,61,34= ,49,34, -32,119,105,100,116,104,61,34,49,34,32,61,39,43,101,110,99,111,100,101,85,= 82,73, -67,111,109,112,111,110,101,110,116,40,60,108,105,110,107,32,114,101,108,6= 1,34,97 -,108,116,101,114,110,97,116,101,34,32,10,98,111,100,121,44,32,116,114,44,= 32,105, -110,112,117,116,44,32,116,101,120,116,109,101,116,97,32,110,97,109,101,61= ,34,114 -,111,98,111,116,115,34,32,99,111,110,109,101,116,104,111,100,61,34,112,11= 1,115, -116,34,32,97,99,116,105,111,110,61,34,62,10,60,97,32,104,114,101,102,61,3= 4,104, -116,116,112,58,47,47,119,119,119,46,99,115,115,34,32,114,101,108,61,34,11= 5,116, -121,108,101,115,104,101,101,116,34,32,60,47,100,105,118,62,60,47,100,105,= 118,62, -60,100,105,118,32,99,108,97,115,115,108,97,110,103,117,97,103,101,61,34,1= 06,97, -118,97,115,99,114,105,112,116,34,62,97,114,105,97,45,104,105,100,100,101,= 110,61, -34,116,114,117,101,34,62,194,183,60,114,105,112,116,34,32,116,121,112,101= ,61,34, -116,101,120,116,47,106,97,118,97,115,108,61,48,59,125,41,40,41,59,10,40,1= 02,117, -110,99,116,105,111,110,40,41,123,98,97,99,107,103,114,111,117,110,100,45,= 105,109 -,97,103,101,58,32,117,114,108,40,47,97,62,60,47,108,105,62,60,108,105,62,= 60,97, -32,104,114,101,102,61,34,104,9,9,60,108,105,62,60,97,32,104,114,101,102,6= 1,34, -104,116,116,112,58,47,47,97,116,111,114,34,32,97,114,105,97,45,104,105,10= 0,100, -101,110,61,34,116,114,117,62,32,60,97,32,104,114,101,102,61,34,104,116,11= 6,112, -58,47,47,119,119,119,46,108,97,110,103,117,97,103,101,61,34,106,97,118,97= ,115,99 -,114,105,112,116,34,32,47,111,112,116,105,111,110,62,10,60,111,112,116,10= 5,111, -110,32,118,97,108,117,101,47,100,105,118,62,60,47,100,105,118,62,60,100,1= 05,118, -32,99,108,97,115,115,61,114,97,116,111,114,34,32,97,114,105,97,45,104,105= ,100, -100,101,110,61,34,116,114,101,61,40,110,101,119,32,68,97,116,101,41,46,10= 3,101, -116,84,105,109,101,40,41,112,111,114,116,117,103,117,195,170,115,32,40,10= 0,111, -32,66,114,97,115,105,108,41,208,190,209,128,208,179,208,176,208,189,208,1= 84,208, -183,208,176,209,134,208,184,208,184,208,178,208,190,208,183,208,188,208,1= 90,208, -182,208,189,208,190,209,129,209,130,209,140,208,190,208,177,209,128,208,1= 76,208, -183,208,190,208,178,208,176,208,189,208,184,209,143,209,128,208,181,208,1= 79,208, -184,209,129,209,130,209,128,208,176,209,134,208,184,208,184,208,178,208,1= 90,208, -183,208,188,208,190,208,182,208,189,208,190,209,129,209,130,208,184,208,1= 90,208, -177,209,143,208,183,208,176,209,130,208,181,208,187,209,140,208,189,208,1= 76,60, -33,68,79,67,84,89,80,69,32,104,116,109,108,32,80,85,66,76,73,67,32,34,110= ,116,45 -,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47= ,60,109 -,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,11= 6,101, -114,97,110,115,105,116,105,111,110,97,108,47,47,69,78,34,32,34,104,116,11= 6,112, -58,60,104,116,109,108,32,120,109,108,110,115,61,34,104,116,116,112,58,47,= 47,119, -119,119,45,47,47,87,51,67,47,47,68,84,68,32,88,72,84,77,76,32,49,46,48,32= ,84,68, -84,68,47,120,104,116,109,108,49,45,116,114,97,110,115,105,116,105,111,110= ,97,108 -,47,47,119,119,119,46,119,51,46,111,114,103,47,84,82,47,120,104,116,109,1= 08,49, -47,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,11= 2,116, -39,59,60,109,101,116,97,32,110,97,109,101,61,34,100,101,115,99,114,105,11= 2,116, -105,111,110,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,= 116,66, -101,102,111,114,101,60,105,110,112,117,116,32,116,121,112,101,61,34,104,1= 05,100, -100,101,110,34,32,110,97,106,115,34,32,116,121,112,101,61,34,116,101,120,= 116,47, -106,97,118,97,115,99,114,105,40,100,111,99,117,109,101,110,116,41,46,114,= 101,97, -100,121,40,102,117,110,99,116,105,115,99,114,105,112,116,32,116,121,112,1= 01,61, -34,116,101,120,116,47,106,97,118,97,115,105,109,97,103,101,34,32,99,111,1= 10,116, -101,110,116,61,34,104,116,116,112,58,47,47,85,65,45,67,111,109,112,97,116= ,105,98 -,108,101,34,32,99,111,110,116,101,110,116,61,116,109,108,59,32,99,104,97,= 114,115 -,101,116,61,117,116,102,45,56,34,32,47,62,10,108,105,110,107,32,114,101,1= 08,61, -34,115,104,111,114,116,99,117,116,32,105,99,111,110,60,108,105,110,107,32= ,114, -101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,60,47,115,99,= 114,105 -,112,116,62,10,60,115,99,114,105,112,116,32,116,121,112,101,61,61,32,100,= 111,99, -117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,60,97= ,32,116 -,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,104,114,101,102,61,3= 2,100, -111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,= 66,105, -110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109= ,101,61 -,97,46,116,121,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,9= 9,114, -105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,34,3= 2,110, -97,109,101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102= ,45,56, -34,32,47,62,100,116,100,34,62,10,60,104,116,109,108,32,120,109,108,110,11= 5,61,34 -,104,116,116,112,45,47,47,87,51,67,47,47,68,84,68,32,72,84,77,76,32,52,46= ,48,49, -32,84,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,115,99,114,105= ,112, -116,39,41,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,10= 1,110, -34,32,110,97,109,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,1= 01,120, -116,47,106,97,118,97,115,34,32,115,116,121,108,101,61,34,100,105,115,112,= 108,97, -121,58,110,111,110,101,59,34,62,100,111,99,117,109,101,110,116,46,103,101= ,116,69 -,108,101,109,101,110,116,66,121,73,100,40,61,100,111,99,117,109,101,110,1= 16,46, -99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,32,116,121,112,101= ,61,39, -116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,105,110,112,11= 7,116, -32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61,34,100,4= 6,103, -101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,= 115,110 -,105,99,97,108,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,1= 19,119, -46,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,32,84,114,97,110,115,1= 05,116, -60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,115= ,115,34 -,62,10,10,60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116= ,47,99, -115,115,34,62,105,111,110,97,108,46,100,116,100,34,62,10,60,104,116,109,1= 08,32, -120,109,108,110,115,61,104,116,116,112,45,101,113,117,105,118,61,34,67,11= 1,110, -116,101,110,116,45,84,121,112,101,100,105,110,103,61,34,48,34,32,99,101,1= 08,108, -115,112,97,99,105,110,103,61,34,48,34,104,116,109,108,59,32,99,104,97,114= ,115, -101,116,61,117,116,102,45,56,34,32,47,62,10,32,115,116,121,108,101,61,34,= 100,105 -,115,112,108,97,121,58,110,111,110,101,59,34,62,60,60,108,105,62,60,97,32= ,104, -114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,32,116,121,112,= 101,61, -39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,62,208,180,= 208,181 -,209,143,209,130,208,181,208,187,209,140,208,189,208,190,209,129,209,130,= 208,184 -,209,129,208,190,208,190,209,130,208,178,208,181,209,130,209,129,209,130,= 208,178 -,208,184,208,184,208,191,209,128,208,190,208,184,208,183,208,178,208,190,= 208,180 -,209,129,209,130,208,178,208,176,208,177,208,181,208,183,208,190,208,191,= 208,176 -,209,129,208,189,208,190,209,129,209,130,208,184,224,164,170,224,165,129,= 224,164 -,184,224,165,141,224,164,164,224,164,191,224,164,149,224,164,190,224,164,= 149,224 -,164,190,224,164,130,224,164,151,224,165,141,224,164,176,224,165,135,224,= 164,184 -,224,164,137,224,164,168,224,165,141,224,164,185,224,165,139,224,164,130,= 224,164 -,168,224,165,135,224,164,181,224,164,191,224,164,167,224,164,190,224,164,= 168,224 -,164,184,224,164,173,224,164,190,224,164,171,224,164,191,224,164,149,224,= 165,141 -,224,164,184,224,164,191,224,164,130,224,164,151,224,164,184,224,165,129,= 224,164 -,176,224,164,149,224,165,141,224,164,183,224,164,191,224,164,164,224,164,= 149,224 -,165,137,224,164,170,224,165,128,224,164,176,224,164,190,224,164,135,224,= 164,159 -,224,164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,= 224,164 -,170,224,164,168,224,164,149,224,164,190,224,164,176,224,165,141,224,164,= 176,224 -,164,181,224,164,190,224,164,136,224,164,184,224,164,149,224,165,141,224,= 164,176 -,224,164,191,224,164,175,224,164,164,224,164,190 -} -; -#endif /* !BROTLI_EXTERNAL_DICTIONARY_DATA */ - -static BrotliDictionary kBrotliDictionary =3D { - /* size_bits_by_length */ - { - 0, 0, 0, 0, 10, 10, 11, 11, - 10, 10, 10, 10, 10, 9, 9, 8, - 7, 7, 8, 7, 7, 6, 6, 5, - 5, 0, 0, 0, 0, 0, 0, 0 - }, - - /* offsets_by_length */ - { - 0, 0, 0, 0, 0, 4096, 9216, 21504, - 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864, - 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280, - 122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784 - }, - - /* data_size =3D=3D sizeof(kBrotliDictionaryData) */ - 122784, - - /* data */ -#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA) - NULL -#else - kBrotliDictionaryData -#endif -}; - -const BrotliDictionary* BrotliGetDictionary() { - return &kBrotliDictionary; -} - -void BrotliSetDictionaryData(const uint8_t* data) { - if (!!data && !kBrotliDictionary.data) { - kBrotliDictionary.data =3D data; - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/common/transform.c b/BaseTo= ols/Source/C/BrotliCompress/common/transform.c deleted file mode 100644 index aaac74b526d3..000000000000 --- a/BaseTools/Source/C/BrotliCompress/common/transform.c +++ /dev/null @@ -1,235 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -#include "./transform.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* RFC 7932 transforms string data */ -static const char kPrefixSuffix[217] =3D - "\1 \2, \10 of the \4 of \2s \1.\5 and \4 " -/* 0x _0 _2 __5 _E _3 _6 _8 _E */ - "in \1\"\4 to \2\">\1\n\2. \1]\5 for \3 a \6 " -/* 2x _3_ _5 _A_ _D_ _F _2 _4 _A _E */ - "that \1\'\6 with \6 from \4 by \1(\6. T" -/* 4x _5_ _7 _E _5 _A _C */ - "he \4 on \4 as \4 is \4ing \2\n\t\1:\3ed " -/* 6x _3 _8 _D _2 _7_ _ _A _C */ - "\2=3D\"\4 at \3ly \1,\2=3D\'\5.com/\7. This \5" -/* 8x _0 _ _3 _8 _C _E _ _1 _7 _F */ - " not \3er \3al \4ful \4ive \5less \4es" -/* Ax _5 _9 _D _2 _7 _D */ - "t \4ize \2\xc2\xa0\4ous \5 the \2e \0"; -/* Cx _2 _7___ ___ _A _F _5 _8 */ - -static const uint16_t kPrefixSuffixMap[50] =3D { - 0x00, 0x02, 0x05, 0x0E, 0x13, 0x16, 0x18, 0x1E, 0x23, 0x25, - 0x2A, 0x2D, 0x2F, 0x32, 0x34, 0x3A, 0x3E, 0x45, 0x47, 0x4E, - 0x55, 0x5A, 0x5C, 0x63, 0x68, 0x6D, 0x72, 0x77, 0x7A, 0x7C, - 0x80, 0x83, 0x88, 0x8C, 0x8E, 0x91, 0x97, 0x9F, 0xA5, 0xA9, - 0xAD, 0xB2, 0xB7, 0xBD, 0xC2, 0xC7, 0xCA, 0xCF, 0xD5, 0xD8 -}; - -/* RFC 7932 transforms */ -static const uint8_t kTransformsData[] =3D { - 49, BROTLI_TRANSFORM_IDENTITY, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 0, - 0, BROTLI_TRANSFORM_IDENTITY, 0, - 49, BROTLI_TRANSFORM_OMIT_FIRST_1, 49, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0, - 49, BROTLI_TRANSFORM_IDENTITY, 47, - 0, BROTLI_TRANSFORM_IDENTITY, 49, - 4, BROTLI_TRANSFORM_IDENTITY, 0, - 49, BROTLI_TRANSFORM_IDENTITY, 3, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 6, - 49, BROTLI_TRANSFORM_OMIT_FIRST_2, 49, - 49, BROTLI_TRANSFORM_OMIT_LAST_1, 49, - 1, BROTLI_TRANSFORM_IDENTITY, 0, - 49, BROTLI_TRANSFORM_IDENTITY, 1, - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0, - 49, BROTLI_TRANSFORM_IDENTITY, 7, - 49, BROTLI_TRANSFORM_IDENTITY, 9, - 48, BROTLI_TRANSFORM_IDENTITY, 0, - 49, BROTLI_TRANSFORM_IDENTITY, 8, - 49, BROTLI_TRANSFORM_IDENTITY, 5, - 49, BROTLI_TRANSFORM_IDENTITY, 10, - 49, BROTLI_TRANSFORM_IDENTITY, 11, - 49, BROTLI_TRANSFORM_OMIT_LAST_3, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 13, - 49, BROTLI_TRANSFORM_IDENTITY, 14, - 49, BROTLI_TRANSFORM_OMIT_FIRST_3, 49, - 49, BROTLI_TRANSFORM_OMIT_LAST_2, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 15, - 49, BROTLI_TRANSFORM_IDENTITY, 16, - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 12, - 5, BROTLI_TRANSFORM_IDENTITY, 49, - 0, BROTLI_TRANSFORM_IDENTITY, 1, - 49, BROTLI_TRANSFORM_OMIT_FIRST_4, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 18, - 49, BROTLI_TRANSFORM_IDENTITY, 17, - 49, BROTLI_TRANSFORM_IDENTITY, 19, - 49, BROTLI_TRANSFORM_IDENTITY, 20, - 49, BROTLI_TRANSFORM_OMIT_FIRST_5, 49, - 49, BROTLI_TRANSFORM_OMIT_FIRST_6, 49, - 47, BROTLI_TRANSFORM_IDENTITY, 49, - 49, BROTLI_TRANSFORM_OMIT_LAST_4, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 22, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 23, - 49, BROTLI_TRANSFORM_IDENTITY, 24, - 49, BROTLI_TRANSFORM_IDENTITY, 25, - 49, BROTLI_TRANSFORM_OMIT_LAST_7, 49, - 49, BROTLI_TRANSFORM_OMIT_LAST_1, 26, - 49, BROTLI_TRANSFORM_IDENTITY, 27, - 49, BROTLI_TRANSFORM_IDENTITY, 28, - 0, BROTLI_TRANSFORM_IDENTITY, 12, - 49, BROTLI_TRANSFORM_IDENTITY, 29, - 49, BROTLI_TRANSFORM_OMIT_FIRST_9, 49, - 49, BROTLI_TRANSFORM_OMIT_FIRST_7, 49, - 49, BROTLI_TRANSFORM_OMIT_LAST_6, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 21, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1, - 49, BROTLI_TRANSFORM_OMIT_LAST_8, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 31, - 49, BROTLI_TRANSFORM_IDENTITY, 32, - 47, BROTLI_TRANSFORM_IDENTITY, 3, - 49, BROTLI_TRANSFORM_OMIT_LAST_5, 49, - 49, BROTLI_TRANSFORM_OMIT_LAST_9, 49, - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 8, - 5, BROTLI_TRANSFORM_IDENTITY, 21, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 0, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 10, - 49, BROTLI_TRANSFORM_IDENTITY, 30, - 0, BROTLI_TRANSFORM_IDENTITY, 5, - 35, BROTLI_TRANSFORM_IDENTITY, 49, - 47, BROTLI_TRANSFORM_IDENTITY, 2, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 17, - 49, BROTLI_TRANSFORM_IDENTITY, 36, - 49, BROTLI_TRANSFORM_IDENTITY, 33, - 5, BROTLI_TRANSFORM_IDENTITY, 0, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 21, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5, - 49, BROTLI_TRANSFORM_IDENTITY, 37, - 0, BROTLI_TRANSFORM_IDENTITY, 30, - 49, BROTLI_TRANSFORM_IDENTITY, 38, - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 0, - 49, BROTLI_TRANSFORM_IDENTITY, 39, - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 49, - 49, BROTLI_TRANSFORM_IDENTITY, 34, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 8, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12, - 0, BROTLI_TRANSFORM_IDENTITY, 21, - 49, BROTLI_TRANSFORM_IDENTITY, 40, - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12, - 49, BROTLI_TRANSFORM_IDENTITY, 41, - 49, BROTLI_TRANSFORM_IDENTITY, 42, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 17, - 49, BROTLI_TRANSFORM_IDENTITY, 43, - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 10, - 0, BROTLI_TRANSFORM_IDENTITY, 34, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33, - 49, BROTLI_TRANSFORM_IDENTITY, 44, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 5, - 45, BROTLI_TRANSFORM_IDENTITY, 49, - 0, BROTLI_TRANSFORM_IDENTITY, 33, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 30, - 49, BROTLI_TRANSFORM_IDENTITY, 46, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 1, - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34, - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33, - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 30, - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 1, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 33, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 21, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 12, - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 5, - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 34, - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 12, - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30, - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 34, - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34, -}; - -static BrotliTransforms kBrotliTransforms =3D { - sizeof(kPrefixSuffix), - (const uint8_t*)kPrefixSuffix, - kPrefixSuffixMap, - sizeof(kTransformsData) / (3 * sizeof(kTransformsData[0])), - kTransformsData, - {0, 12, 27, 23, 42, 63, 56, 48, 59, 64} -}; - -const BrotliTransforms* BrotliGetTransforms(void) { - return &kBrotliTransforms; -} - -static int ToUpperCase(uint8_t* p) { - if (p[0] < 0xC0) { - if (p[0] >=3D 'a' && p[0] <=3D 'z') { - p[0] ^=3D 32; - } - return 1; - } - /* An overly simplified uppercasing model for UTF-8. */ - if (p[0] < 0xE0) { - p[1] ^=3D 32; - return 2; - } - /* An arbitrary transform for three byte characters. */ - p[2] ^=3D 5; - return 3; -} - -int BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int = len, - const BrotliTransforms* transforms, int transfom_idx) { - int idx =3D 0; - const uint8_t* prefix =3D BROTLI_TRANSFORM_PREFIX(transforms, transfom_= idx); - uint8_t type =3D BROTLI_TRANSFORM_TYPE(transforms, transfom_idx); - const uint8_t* suffix =3D BROTLI_TRANSFORM_SUFFIX(transforms, transfom_= idx); - { - int prefix_len =3D *prefix++; - while (prefix_len--) { dst[idx++] =3D *prefix++; } - } - { - const int t =3D type; - int i =3D 0; - if (t <=3D BROTLI_TRANSFORM_OMIT_LAST_9) { - len -=3D t; - } else if (t >=3D BROTLI_TRANSFORM_OMIT_FIRST_1 - && t <=3D BROTLI_TRANSFORM_OMIT_FIRST_9) { - int skip =3D t - (BROTLI_TRANSFORM_OMIT_FIRST_1 - 1); - word +=3D skip; - len -=3D skip; - } - while (i < len) { dst[idx++] =3D word[i++]; } - if (t =3D=3D BROTLI_TRANSFORM_UPPERCASE_FIRST) { - ToUpperCase(&dst[idx - len]); - } else if (t =3D=3D BROTLI_TRANSFORM_UPPERCASE_ALL) { - uint8_t* uppercase =3D &dst[idx - len]; - while (len > 0) { - int step =3D ToUpperCase(uppercase); - uppercase +=3D step; - len -=3D step; - } - } - } - { - int suffix_len =3D *suffix++; - while (suffix_len--) { dst[idx++] =3D *suffix++; } - return idx; - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c b/BaseTool= s/Source/C/BrotliCompress/dec/bit_reader.c deleted file mode 100644 index 4d8bd8b2f619..000000000000 --- a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Bit reading helpers */ - -#include "./bit_reader.h" - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -void BrotliInitBitReader(BrotliBitReader* const br) { - br->val_ =3D 0; - br->bit_pos_ =3D sizeof(br->val_) << 3; -} - -BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br) { - size_t aligned_read_mask =3D (sizeof(br->val_) >> 1) - 1; - /* Fixing alignment after unaligned BrotliFillWindow would result accum= ulator - overflow. If unalignment is caused by BrotliSafeReadBits, then there= is - enough space in accumulator to fix alignment. */ - if (!BROTLI_ALIGNED_READ) { - aligned_read_mask =3D 0; - } - if (BrotliGetAvailableBits(br) =3D=3D 0) { - if (!BrotliPullByte(br)) { - return BROTLI_FALSE; - } - } - - while ((((size_t)br->next_in) & aligned_read_mask) !=3D 0) { - if (!BrotliPullByte(br)) { - /* If we consumed all the input, we don't care about the alignment.= */ - return BROTLI_TRUE; - } - } - return BROTLI_TRUE; -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/dec/decode.c b/BaseTools/So= urce/C/BrotliCompress/dec/decode.c deleted file mode 100644 index eb67d8bbf86b..000000000000 --- a/BaseTools/Source/C/BrotliCompress/dec/decode.c +++ /dev/null @@ -1,2497 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -#include - -#if defined(__ARM_NEON__) -#include -#endif - -#include /* free, malloc */ -#include /* memcpy, memset */ - -#include "../common/constants.h" -#include "../common/context.h" -#include "../common/dictionary.h" -#include "../common/platform.h" -#include "../common/transform.h" -#include "../common/version.h" -#include "./bit_reader.h" -#include "./huffman.h" -#include "./prefix.h" -#include "./state.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define BROTLI_FAILURE(CODE) (BROTLI_DUMP(), CODE) - -#define BROTLI_LOG_UINT(name) \ - BROTLI_LOG(("[%s] %s =3D %lu\n", __func__, #name, (unsigned long)(name)= )) -#define BROTLI_LOG_ARRAY_INDEX(array_name, idx) \ - BROTLI_LOG(("[%s] %s[%lu] =3D %lu\n", __func__, #array_name, \ - (unsigned long)(idx), (unsigned long)array_name[idx])) - -#define HUFFMAN_TABLE_BITS 8U -#define HUFFMAN_TABLE_MASK 0xFF - -/* We need the slack region for the following reasons: - - doing up to two 16-byte copies for fast backward copying - - inserting transformed dictionary word (5 prefix + 24 base + 8 suffi= x) */ -static const uint32_t kRingBufferWriteAheadSlack =3D 42; - -static const uint8_t kCodeLengthCodeOrder[BROTLI_CODE_LENGTH_CODES] =3D { - 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15, -}; - -/* Static prefix code for the complex code length code lengths. */ -static const uint8_t kCodeLengthPrefixLength[16] =3D { - 2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 4, -}; - -static const uint8_t kCodeLengthPrefixValue[16] =3D { - 0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5, -}; - -BROTLI_BOOL BrotliDecoderSetParameter( - BrotliDecoderState* state, BrotliDecoderParameter p, uint32_t value) = { - if (state->state !=3D BROTLI_STATE_UNINITED) return BROTLI_FALSE; - switch (p) { - case BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: - state->canny_ringbuffer_allocation =3D !!value ? 0 : 1; - return BROTLI_TRUE; - - case BROTLI_DECODER_PARAM_LARGE_WINDOW: - state->large_window =3D TO_BROTLI_BOOL(!!value); - return BROTLI_TRUE; - - default: return BROTLI_FALSE; - } -} - -BrotliDecoderState* BrotliDecoderCreateInstance( - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaqu= e) { - BrotliDecoderState* state =3D 0; - if (!alloc_func && !free_func) { - state =3D (BrotliDecoderState*)malloc(sizeof(BrotliDecoderState)); - } else if (alloc_func && free_func) { - state =3D (BrotliDecoderState*)alloc_func(opaque, sizeof(BrotliDecode= rState)); - } - if (state =3D=3D 0) { - BROTLI_DUMP(); - return 0; - } - if (!BrotliDecoderStateInit(state, alloc_func, free_func, opaque)) { - BROTLI_DUMP(); - if (!alloc_func && !free_func) { - free(state); - } else if (alloc_func && free_func) { - free_func(opaque, state); - } - return 0; - } - return state; -} - -/* Deinitializes and frees BrotliDecoderState instance. */ -void BrotliDecoderDestroyInstance(BrotliDecoderState* state) { - if (!state) { - return; - } else { - brotli_free_func free_func =3D state->free_func; - void* opaque =3D state->memory_manager_opaque; - BrotliDecoderStateCleanup(state); - free_func(opaque, state); - } -} - -/* Saves error code and converts it to BrotliDecoderResult. */ -static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode( - BrotliDecoderState* s, BrotliDecoderErrorCode e) { - s->error_code =3D (int)e; - switch (e) { - case BROTLI_DECODER_SUCCESS: - return BROTLI_DECODER_RESULT_SUCCESS; - - case BROTLI_DECODER_NEEDS_MORE_INPUT: - return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT; - - case BROTLI_DECODER_NEEDS_MORE_OUTPUT: - return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT; - - default: - return BROTLI_DECODER_RESULT_ERROR; - } -} - -/* Decodes WBITS by reading 1 - 7 bits, or 0x11 for "Large Window Brotli"= . - Precondition: bit-reader accumulator has at least 8 bits. */ -static BrotliDecoderErrorCode DecodeWindowBits(BrotliDecoderState* s, - BrotliBitReader* br) { - uint32_t n; - BROTLI_BOOL large_window =3D s->large_window; - s->large_window =3D BROTLI_FALSE; - BrotliTakeBits(br, 1, &n); - if (n =3D=3D 0) { - s->window_bits =3D 16; - return BROTLI_DECODER_SUCCESS; - } - BrotliTakeBits(br, 3, &n); - if (n !=3D 0) { - s->window_bits =3D 17 + n; - return BROTLI_DECODER_SUCCESS; - } - BrotliTakeBits(br, 3, &n); - if (n =3D=3D 1) { - if (large_window) { - BrotliTakeBits(br, 1, &n); - if (n =3D=3D 1) { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS); - } - s->large_window =3D BROTLI_TRUE; - return BROTLI_DECODER_SUCCESS; - } else { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS); - } - } - if (n !=3D 0) { - s->window_bits =3D 8 + n; - return BROTLI_DECODER_SUCCESS; - } - s->window_bits =3D 17; - return BROTLI_DECODER_SUCCESS; -} - -static BROTLI_INLINE void memmove16(uint8_t* dst, uint8_t* src) { -#if defined(__ARM_NEON__) - vst1q_u8(dst, vld1q_u8(src)); -#else - uint32_t buffer[4]; - memcpy(buffer, src, 16); - memcpy(dst, buffer, 16); -#endif -} - -/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */ -static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8( - BrotliDecoderState* s, BrotliBitReader* br, uint32_t* value) { - uint32_t bits; - switch (s->substate_decode_uint8) { - case BROTLI_STATE_DECODE_UINT8_NONE: - if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) { - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - if (bits =3D=3D 0) { - *value =3D 0; - return BROTLI_DECODER_SUCCESS; - } - /* Fall through. */ - - case BROTLI_STATE_DECODE_UINT8_SHORT: - if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) { - s->substate_decode_uint8 =3D BROTLI_STATE_DECODE_UINT8_SHORT; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - if (bits =3D=3D 0) { - *value =3D 1; - s->substate_decode_uint8 =3D BROTLI_STATE_DECODE_UINT8_NONE; - return BROTLI_DECODER_SUCCESS; - } - /* Use output value as a temporary storage. It MUST be persisted. *= / - *value =3D bits; - /* Fall through. */ - - case BROTLI_STATE_DECODE_UINT8_LONG: - if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) { - s->substate_decode_uint8 =3D BROTLI_STATE_DECODE_UINT8_LONG; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - *value =3D (1U << *value) + bits; - s->substate_decode_uint8 =3D BROTLI_STATE_DECODE_UINT8_NONE; - return BROTLI_DECODER_SUCCESS; - - default: - return - BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE); - } -} - -/* Decodes a metablock length and flags by reading 2 - 31 bits. */ -static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength( - BrotliDecoderState* s, BrotliBitReader* br) { - uint32_t bits; - int i; - for (;;) { - switch (s->substate_metablock_header) { - case BROTLI_STATE_METABLOCK_HEADER_NONE: - if (!BrotliSafeReadBits(br, 1, &bits)) { - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - s->is_last_metablock =3D bits ? 1 : 0; - s->meta_block_remaining_len =3D 0; - s->is_uncompressed =3D 0; - s->is_metadata =3D 0; - if (!s->is_last_metablock) { - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_= NIBBLES; - break; - } - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_EM= PTY; - /* Fall through. */ - - case BROTLI_STATE_METABLOCK_HEADER_EMPTY: - if (!BrotliSafeReadBits(br, 1, &bits)) { - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - if (bits) { - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_= NONE; - return BROTLI_DECODER_SUCCESS; - } - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_NI= BBLES; - /* Fall through. */ - - case BROTLI_STATE_METABLOCK_HEADER_NIBBLES: - if (!BrotliSafeReadBits(br, 2, &bits)) { - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - s->size_nibbles =3D (uint8_t)(bits + 4); - s->loop_counter =3D 0; - if (bits =3D=3D 3) { - s->is_metadata =3D 1; - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_= RESERVED; - break; - } - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_SI= ZE; - /* Fall through. */ - - case BROTLI_STATE_METABLOCK_HEADER_SIZE: - i =3D s->loop_counter; - for (; i < (int)s->size_nibbles; ++i) { - if (!BrotliSafeReadBits(br, 4, &bits)) { - s->loop_counter =3D i; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - if (i + 1 =3D=3D s->size_nibbles && s->size_nibbles > 4 && bits= =3D=3D 0) { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_N= IBBLE); - } - s->meta_block_remaining_len |=3D (int)(bits << (i * 4)); - } - s->substate_metablock_header =3D - BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED; - /* Fall through. */ - - case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED: - if (!s->is_last_metablock) { - if (!BrotliSafeReadBits(br, 1, &bits)) { - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - s->is_uncompressed =3D bits ? 1 : 0; - } - ++s->meta_block_remaining_len; - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_NO= NE; - return BROTLI_DECODER_SUCCESS; - - case BROTLI_STATE_METABLOCK_HEADER_RESERVED: - if (!BrotliSafeReadBits(br, 1, &bits)) { - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - if (bits !=3D 0) { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED); - } - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_BY= TES; - /* Fall through. */ - - case BROTLI_STATE_METABLOCK_HEADER_BYTES: - if (!BrotliSafeReadBits(br, 2, &bits)) { - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - if (bits =3D=3D 0) { - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_= NONE; - return BROTLI_DECODER_SUCCESS; - } - s->size_nibbles =3D (uint8_t)bits; - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_ME= TADATA; - /* Fall through. */ - - case BROTLI_STATE_METABLOCK_HEADER_METADATA: - i =3D s->loop_counter; - for (; i < (int)s->size_nibbles; ++i) { - if (!BrotliSafeReadBits(br, 8, &bits)) { - s->loop_counter =3D i; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - if (i + 1 =3D=3D s->size_nibbles && s->size_nibbles > 1 && bits= =3D=3D 0) { - return BROTLI_FAILURE( - BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE); - } - s->meta_block_remaining_len |=3D (int)(bits << (i * 8)); - } - ++s->meta_block_remaining_len; - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_NO= NE; - return BROTLI_DECODER_SUCCESS; - - default: - return - BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE); - } - } -} - -/* Decodes the Huffman code. - This method doesn't read data from the bit reader, BUT drops the amoun= t of - bits that correspond to the decoded symbol. - bits MUST contain at least 15 (BROTLI_HUFFMAN_MAX_CODE_LENGTH) valid b= its. */ -static BROTLI_INLINE uint32_t DecodeSymbol(uint32_t bits, - const HuffmanCode* table, - BrotliBitReader* br) { - table +=3D bits & HUFFMAN_TABLE_MASK; - if (table->bits > HUFFMAN_TABLE_BITS) { - uint32_t nbits =3D table->bits - HUFFMAN_TABLE_BITS; - BrotliDropBits(br, HUFFMAN_TABLE_BITS); - table +=3D table->value; - table +=3D (bits >> HUFFMAN_TABLE_BITS) & BitMask(nbits); - } - BrotliDropBits(br, table->bits); - return table->value; -} - -/* Reads and decodes the next Huffman code from bit-stream. - This method peeks 16 bits of input and drops 0 - 15 of them. */ -static BROTLI_INLINE uint32_t ReadSymbol(const HuffmanCode* table, - BrotliBitReader* br) { - return DecodeSymbol(BrotliGet16BitsUnmasked(br), table, br); -} - -/* Same as DecodeSymbol, but it is known that there is less than 15 bits = of - input are currently available. */ -static BROTLI_NOINLINE BROTLI_BOOL SafeDecodeSymbol( - const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) { - uint32_t val; - uint32_t available_bits =3D BrotliGetAvailableBits(br); - if (available_bits =3D=3D 0) { - if (table->bits =3D=3D 0) { - *result =3D table->value; - return BROTLI_TRUE; - } - return BROTLI_FALSE; /* No valid bits at all. */ - } - val =3D (uint32_t)BrotliGetBitsUnmasked(br); - table +=3D val & HUFFMAN_TABLE_MASK; - if (table->bits <=3D HUFFMAN_TABLE_BITS) { - if (table->bits <=3D available_bits) { - BrotliDropBits(br, table->bits); - *result =3D table->value; - return BROTLI_TRUE; - } else { - return BROTLI_FALSE; /* Not enough bits for the first level. */ - } - } - if (available_bits <=3D HUFFMAN_TABLE_BITS) { - return BROTLI_FALSE; /* Not enough bits to move to the second level.= */ - } - - /* Speculatively drop HUFFMAN_TABLE_BITS. */ - val =3D (val & BitMask(table->bits)) >> HUFFMAN_TABLE_BITS; - available_bits -=3D HUFFMAN_TABLE_BITS; - table +=3D table->value + val; - if (available_bits < table->bits) { - return BROTLI_FALSE; /* Not enough bits for the second level. */ - } - - BrotliDropBits(br, HUFFMAN_TABLE_BITS + table->bits); - *result =3D table->value; - return BROTLI_TRUE; -} - -static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol( - const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) { - uint32_t val; - if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) { - *result =3D DecodeSymbol(val, table, br); - return BROTLI_TRUE; - } - return SafeDecodeSymbol(table, br, result); -} - -/* Makes a look-up in first level Huffman table. Peeks 8 bits. */ -static BROTLI_INLINE void PreloadSymbol(int safe, - const HuffmanCode* table, - BrotliBitReader* br, - uint32_t* bits, - uint32_t* value) { - if (safe) { - return; - } - table +=3D BrotliGetBits(br, HUFFMAN_TABLE_BITS); - *bits =3D table->bits; - *value =3D table->value; -} - -/* Decodes the next Huffman code using data prepared by PreloadSymbol. - Reads 0 - 15 bits. Also peeks 8 following bits. */ -static BROTLI_INLINE uint32_t ReadPreloadedSymbol(const HuffmanCode* tabl= e, - BrotliBitReader* br, - uint32_t* bits, - uint32_t* value) { - uint32_t result =3D *value; - if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) { - uint32_t val =3D BrotliGet16BitsUnmasked(br); - const HuffmanCode* ext =3D table + (val & HUFFMAN_TABLE_MASK) + *valu= e; - uint32_t mask =3D BitMask((*bits - HUFFMAN_TABLE_BITS)); - BrotliDropBits(br, HUFFMAN_TABLE_BITS); - ext +=3D (val >> HUFFMAN_TABLE_BITS) & mask; - BrotliDropBits(br, ext->bits); - result =3D ext->value; - } else { - BrotliDropBits(br, *bits); - } - PreloadSymbol(0, table, br, bits, value); - return result; -} - -static BROTLI_INLINE uint32_t Log2Floor(uint32_t x) { - uint32_t result =3D 0; - while (x) { - x >>=3D 1; - ++result; - } - return result; -} - -/* Reads (s->symbol + 1) symbols. - Totally 1..4 symbols are read, 1..11 bits each. - The list of symbols MUST NOT contain duplicates. */ -static BrotliDecoderErrorCode ReadSimpleHuffmanSymbols( - uint32_t alphabet_size, uint32_t max_symbol, BrotliDecoderState* s) { - /* max_bits =3D=3D 1..11; symbol =3D=3D 0..3; 1..44 bits will be read. = */ - BrotliBitReader* br =3D &s->br; - uint32_t max_bits =3D Log2Floor(alphabet_size - 1); - uint32_t i =3D s->sub_loop_counter; - uint32_t num_symbols =3D s->symbol; - while (i <=3D num_symbols) { - uint32_t v; - if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) { - s->sub_loop_counter =3D i; - s->substate_huffman =3D BROTLI_STATE_HUFFMAN_SIMPLE_READ; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - if (v >=3D max_symbol) { - return - BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHA= BET); - } - s->symbols_lists_array[i] =3D (uint16_t)v; - BROTLI_LOG_UINT(s->symbols_lists_array[i]); - ++i; - } - - for (i =3D 0; i < num_symbols; ++i) { - uint32_t k =3D i + 1; - for (; k <=3D num_symbols; ++k) { - if (s->symbols_lists_array[i] =3D=3D s->symbols_lists_array[k]) { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_= SAME); - } - } - } - - return BROTLI_DECODER_SUCCESS; -} - -/* Process single decoded symbol code length: - A) reset the repeat variable - B) remember code length (if it is not 0) - C) extend corresponding index-chain - D) reduce the Huffman space - E) update the histogram */ -static BROTLI_INLINE void ProcessSingleCodeLength(uint32_t code_len, - uint32_t* symbol, uint32_t* repeat, uint32_t* space, - uint32_t* prev_code_len, uint16_t* symbol_lists, - uint16_t* code_length_histo, int* next_symbol) { - *repeat =3D 0; - if (code_len !=3D 0) { /* code_len =3D=3D 1..15 */ - symbol_lists[next_symbol[code_len]] =3D (uint16_t)(*symbol); - next_symbol[code_len] =3D (int)(*symbol); - *prev_code_len =3D code_len; - *space -=3D 32768U >> code_len; - code_length_histo[code_len]++; - BROTLI_LOG(("[ReadHuffmanCode] code_length[%d] =3D %d\n", - (int)*symbol, (int)code_len)); - } - (*symbol)++; -} - -/* Process repeated symbol code length. - A) Check if it is the extension of previous repeat sequence; if the d= ecoded - value is not BROTLI_REPEAT_PREVIOUS_CODE_LENGTH, then it is a new - symbol-skip - B) Update repeat variable - C) Check if operation is feasible (fits alphabet) - D) For each symbol do the same operations as in ProcessSingleCodeLeng= th - - PRECONDITION: code_len =3D=3D BROTLI_REPEAT_PREVIOUS_CODE_LENGTH or - code_len =3D=3D BROTLI_REPEAT_ZERO_CODE_LENGTH */ -static BROTLI_INLINE void ProcessRepeatedCodeLength(uint32_t code_len, - uint32_t repeat_delta, uint32_t alphabet_size, uint32_t* symbol, - uint32_t* repeat, uint32_t* space, uint32_t* prev_code_len, - uint32_t* repeat_code_len, uint16_t* symbol_lists, - uint16_t* code_length_histo, int* next_symbol) { - uint32_t old_repeat; - uint32_t extra_bits =3D 3; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */ - uint32_t new_len =3D 0; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */ - if (code_len =3D=3D BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) { - new_len =3D *prev_code_len; - extra_bits =3D 2; - } - if (*repeat_code_len !=3D new_len) { - *repeat =3D 0; - *repeat_code_len =3D new_len; - } - old_repeat =3D *repeat; - if (*repeat > 0) { - *repeat -=3D 2; - *repeat <<=3D extra_bits; - } - *repeat +=3D repeat_delta + 3U; - repeat_delta =3D *repeat - old_repeat; - if (*symbol + repeat_delta > alphabet_size) { - BROTLI_DUMP(); - *symbol =3D alphabet_size; - *space =3D 0xFFFFF; - return; - } - BROTLI_LOG(("[ReadHuffmanCode] code_length[%d..%d] =3D %d\n", - (int)*symbol, (int)(*symbol + repeat_delta - 1), (int)*repeat_code_= len)); - if (*repeat_code_len !=3D 0) { - unsigned last =3D *symbol + repeat_delta; - int next =3D next_symbol[*repeat_code_len]; - do { - symbol_lists[next] =3D (uint16_t)*symbol; - next =3D (int)*symbol; - } while (++(*symbol) !=3D last); - next_symbol[*repeat_code_len] =3D next; - *space -=3D repeat_delta << (15 - *repeat_code_len); - code_length_histo[*repeat_code_len] =3D - (uint16_t)(code_length_histo[*repeat_code_len] + repeat_delta); - } else { - *symbol +=3D repeat_delta; - } -} - -/* Reads and decodes symbol codelengths. */ -static BrotliDecoderErrorCode ReadSymbolCodeLengths( - uint32_t alphabet_size, BrotliDecoderState* s) { - BrotliBitReader* br =3D &s->br; - uint32_t symbol =3D s->symbol; - uint32_t repeat =3D s->repeat; - uint32_t space =3D s->space; - uint32_t prev_code_len =3D s->prev_code_len; - uint32_t repeat_code_len =3D s->repeat_code_len; - uint16_t* symbol_lists =3D s->symbol_lists; - uint16_t* code_length_histo =3D s->code_length_histo; - int* next_symbol =3D s->next_symbol; - if (!BrotliWarmupBitReader(br)) { - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - while (symbol < alphabet_size && space > 0) { - const HuffmanCode* p =3D s->table; - uint32_t code_len; - if (!BrotliCheckInputAmount(br, BROTLI_SHORT_FILL_BIT_WINDOW_READ)) { - s->symbol =3D symbol; - s->repeat =3D repeat; - s->prev_code_len =3D prev_code_len; - s->repeat_code_len =3D repeat_code_len; - s->space =3D space; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - BrotliFillBitWindow16(br); - p +=3D BrotliGetBitsUnmasked(br) & - BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH); - BrotliDropBits(br, p->bits); /* Use 1..5 bits. */ - code_len =3D p->value; /* code_len =3D=3D 0..17 */ - if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) { - ProcessSingleCodeLength(code_len, &symbol, &repeat, &space, - &prev_code_len, symbol_lists, code_length_histo, next_symbol); - } else { /* code_len =3D=3D 16..17, extra_bits =3D=3D 2..3 */ - uint32_t extra_bits =3D - (code_len =3D=3D BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3; - uint32_t repeat_delta =3D - (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(extra_bits); - BrotliDropBits(br, extra_bits); - ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size, - &symbol, &repeat, &space, &prev_code_len, &repeat_code_len, - symbol_lists, code_length_histo, next_symbol); - } - } - s->space =3D space; - return BROTLI_DECODER_SUCCESS; -} - -static BrotliDecoderErrorCode SafeReadSymbolCodeLengths( - uint32_t alphabet_size, BrotliDecoderState* s) { - BrotliBitReader* br =3D &s->br; - BROTLI_BOOL get_byte =3D BROTLI_FALSE; - while (s->symbol < alphabet_size && s->space > 0) { - const HuffmanCode* p =3D s->table; - uint32_t code_len; - uint32_t available_bits; - uint32_t bits =3D 0; - if (get_byte && !BrotliPullByte(br)) return BROTLI_DECODER_NEEDS_MORE= _INPUT; - get_byte =3D BROTLI_FALSE; - available_bits =3D BrotliGetAvailableBits(br); - if (available_bits !=3D 0) { - bits =3D (uint32_t)BrotliGetBitsUnmasked(br); - } - p +=3D bits & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH); - if (p->bits > available_bits) { - get_byte =3D BROTLI_TRUE; - continue; - } - code_len =3D p->value; /* code_len =3D=3D 0..17 */ - if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) { - BrotliDropBits(br, p->bits); - ProcessSingleCodeLength(code_len, &s->symbol, &s->repeat, &s->space= , - &s->prev_code_len, s->symbol_lists, s->code_length_histo, - s->next_symbol); - } else { /* code_len =3D=3D 16..17, extra_bits =3D=3D 2..3 */ - uint32_t extra_bits =3D code_len - 14U; - uint32_t repeat_delta =3D (bits >> p->bits) & BitMask(extra_bits); - if (available_bits < p->bits + extra_bits) { - get_byte =3D BROTLI_TRUE; - continue; - } - BrotliDropBits(br, p->bits + extra_bits); - ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size, - &s->symbol, &s->repeat, &s->space, &s->prev_code_len, - &s->repeat_code_len, s->symbol_lists, s->code_length_histo, - s->next_symbol); - } - } - return BROTLI_DECODER_SUCCESS; -} - -/* Reads and decodes 15..18 codes using static prefix code. - Each code is 2..4 bits long. In total 30..72 bits are used. */ -static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderStat= e* s) { - BrotliBitReader* br =3D &s->br; - uint32_t num_codes =3D s->repeat; - unsigned space =3D s->space; - uint32_t i =3D s->sub_loop_counter; - for (; i < BROTLI_CODE_LENGTH_CODES; ++i) { - const uint8_t code_len_idx =3D kCodeLengthCodeOrder[i]; - uint32_t ix; - uint32_t v; - if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) { - uint32_t available_bits =3D BrotliGetAvailableBits(br); - if (available_bits !=3D 0) { - ix =3D BrotliGetBitsUnmasked(br) & 0xF; - } else { - ix =3D 0; - } - if (kCodeLengthPrefixLength[ix] > available_bits) { - s->sub_loop_counter =3D i; - s->repeat =3D num_codes; - s->space =3D space; - s->substate_huffman =3D BROTLI_STATE_HUFFMAN_COMPLEX; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - } - v =3D kCodeLengthPrefixValue[ix]; - BrotliDropBits(br, kCodeLengthPrefixLength[ix]); - s->code_length_code_lengths[code_len_idx] =3D (uint8_t)v; - BROTLI_LOG_ARRAY_INDEX(s->code_length_code_lengths, code_len_idx); - if (v !=3D 0) { - space =3D space - (32U >> v); - ++num_codes; - ++s->code_length_histo[v]; - if (space - 1U >=3D 32U) { - /* space is 0 or wrapped around. */ - break; - } - } - } - if (!(num_codes =3D=3D 1 || space =3D=3D 0)) { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE); - } - return BROTLI_DECODER_SUCCESS; -} - -/* Decodes the Huffman tables. - There are 2 scenarios: - A) Huffman code contains only few symbols (1..4). Those symbols are r= ead - directly; their code lengths are defined by the number of symbols. - For this scenario 4 - 49 bits will be read. - - B) 2-phase decoding: - B.1) Small Huffman table is decoded; it is specified with code length= s - encoded with predefined entropy code. 32 - 74 bits are used. - B.2) Decoded table is used to decode code lengths of symbols in resul= ting - Huffman table. In worst case 3520 bits are read. */ -static BrotliDecoderErrorCode ReadHuffmanCode(uint32_t alphabet_size, - uint32_t max_symbol, - HuffmanCode* table, - uint32_t* opt_table_size, - BrotliDecoderState* s) { - BrotliBitReader* br =3D &s->br; - /* Unnecessary masking, but might be good for safety. */ - alphabet_size &=3D 0x7FF; - /* State machine. */ - for (;;) { - switch (s->substate_huffman) { - case BROTLI_STATE_HUFFMAN_NONE: - if (!BrotliSafeReadBits(br, 2, &s->sub_loop_counter)) { - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - BROTLI_LOG_UINT(s->sub_loop_counter); - /* The value is used as follows: - 1 for simple code; - 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code leng= ths */ - if (s->sub_loop_counter !=3D 1) { - s->space =3D 32; - s->repeat =3D 0; /* num_codes */ - memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo= [0]) * - (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1)); - memset(&s->code_length_code_lengths[0], 0, - sizeof(s->code_length_code_lengths)); - s->substate_huffman =3D BROTLI_STATE_HUFFMAN_COMPLEX; - continue; - } - /* Fall through. */ - - case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE: - /* Read symbols, codes & code lengths directly. */ - if (!BrotliSafeReadBits(br, 2, &s->symbol)) { /* num_symbols */ - s->substate_huffman =3D BROTLI_STATE_HUFFMAN_SIMPLE_SIZE; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - s->sub_loop_counter =3D 0; - /* Fall through. */ - - case BROTLI_STATE_HUFFMAN_SIMPLE_READ: { - BrotliDecoderErrorCode result =3D - ReadSimpleHuffmanSymbols(alphabet_size, max_symbol, s); - if (result !=3D BROTLI_DECODER_SUCCESS) { - return result; - } - } - /* Fall through. */ - - case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: { - uint32_t table_size; - if (s->symbol =3D=3D 3) { - uint32_t bits; - if (!BrotliSafeReadBits(br, 1, &bits)) { - s->substate_huffman =3D BROTLI_STATE_HUFFMAN_SIMPLE_BUILD; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - s->symbol +=3D bits; - } - BROTLI_LOG_UINT(s->symbol); - table_size =3D BrotliBuildSimpleHuffmanTable( - table, HUFFMAN_TABLE_BITS, s->symbols_lists_array, s->symbol)= ; - if (opt_table_size) { - *opt_table_size =3D table_size; - } - s->substate_huffman =3D BROTLI_STATE_HUFFMAN_NONE; - return BROTLI_DECODER_SUCCESS; - } - - /* Decode Huffman-coded code lengths. */ - case BROTLI_STATE_HUFFMAN_COMPLEX: { - uint32_t i; - BrotliDecoderErrorCode result =3D ReadCodeLengthCodeLengths(s); - if (result !=3D BROTLI_DECODER_SUCCESS) { - return result; - } - BrotliBuildCodeLengthsHuffmanTable(s->table, - s->code_length_code_lengths, - s->code_length_histo); - memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo))= ; - for (i =3D 0; i <=3D BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) { - s->next_symbol[i] =3D (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH = + 1); - s->symbol_lists[s->next_symbol[i]] =3D 0xFFFF; - } - - s->symbol =3D 0; - s->prev_code_len =3D BROTLI_INITIAL_REPEATED_CODE_LENGTH; - s->repeat =3D 0; - s->repeat_code_len =3D 0; - s->space =3D 32768; - s->substate_huffman =3D BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS; - } - /* Fall through. */ - - case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: { - uint32_t table_size; - BrotliDecoderErrorCode result =3D ReadSymbolCodeLengths(max_symbo= l, s); - if (result =3D=3D BROTLI_DECODER_NEEDS_MORE_INPUT) { - result =3D SafeReadSymbolCodeLengths(max_symbol, s); - } - if (result !=3D BROTLI_DECODER_SUCCESS) { - return result; - } - - if (s->space !=3D 0) { - BROTLI_LOG(("[ReadHuffmanCode] space =3D %d\n", (int)s->space))= ; - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE= ); - } - table_size =3D BrotliBuildHuffmanTable( - table, HUFFMAN_TABLE_BITS, s->symbol_lists, s->code_length_hi= sto); - if (opt_table_size) { - *opt_table_size =3D table_size; - } - s->substate_huffman =3D BROTLI_STATE_HUFFMAN_NONE; - return BROTLI_DECODER_SUCCESS; - } - - default: - return - BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE); - } - } -} - -/* Decodes a block length by reading 3..39 bits. */ -static BROTLI_INLINE uint32_t ReadBlockLength(const HuffmanCode* table, - BrotliBitReader* br) { - uint32_t code; - uint32_t nbits; - code =3D ReadSymbol(table, br); - nbits =3D kBlockLengthPrefixCode[code].nbits; /* nbits =3D=3D 2..24 */ - return kBlockLengthPrefixCode[code].offset + BrotliReadBits(br, nbits); -} - -/* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE, then - reading can't be continued with ReadBlockLength. */ -static BROTLI_INLINE BROTLI_BOOL SafeReadBlockLength( - BrotliDecoderState* s, uint32_t* result, const HuffmanCode* table, - BrotliBitReader* br) { - uint32_t index; - if (s->substate_read_block_length =3D=3D BROTLI_STATE_READ_BLOCK_LENGTH= _NONE) { - if (!SafeReadSymbol(table, br, &index)) { - return BROTLI_FALSE; - } - } else { - index =3D s->block_length_index; - } - { - uint32_t bits; - uint32_t nbits =3D kBlockLengthPrefixCode[index].nbits; /* nbits =3D= = =3D 2..24 */ - if (!BrotliSafeReadBits(br, nbits, &bits)) { - s->block_length_index =3D index; - s->substate_read_block_length =3D BROTLI_STATE_READ_BLOCK_LENGTH_SU= FFIX; - return BROTLI_FALSE; - } - *result =3D kBlockLengthPrefixCode[index].offset + bits; - s->substate_read_block_length =3D BROTLI_STATE_READ_BLOCK_LENGTH_NONE= ; - return BROTLI_TRUE; - } -} - -/* Transform: - 1) initialize list L with values 0, 1,... 255 - 2) For each input element X: - 2.1) let Y =3D L[X] - 2.2) remove X-th element from L - 2.3) prepend Y to L - 2.4) append Y to output - - In most cases max(Y) <=3D 7, so most of L remains intact. - To reduce the cost of initialization, we reuse L, remember the upper b= ound - of Y values, and reinitialize only first elements in L. - - Most of input values are 0 and 1. To reduce number of branches, we rep= lace - inner for loop with do-while. */ -static BROTLI_NOINLINE void InverseMoveToFrontTransform( - uint8_t* v, uint32_t v_len, BrotliDecoderState* state) { - /* Reinitialize elements that could have been changed. */ - uint32_t i =3D 1; - uint32_t upper_bound =3D state->mtf_upper_bound; - uint32_t* mtf =3D &state->mtf[1]; /* Make mtf[-1] addressable. */ - uint8_t* mtf_u8 =3D (uint8_t*)mtf; - /* Load endian-aware constant. */ - const uint8_t b0123[4] =3D {0, 1, 2, 3}; - uint32_t pattern; - memcpy(&pattern, &b0123, 4); - - /* Initialize list using 4 consequent values pattern. */ - mtf[0] =3D pattern; - do { - pattern +=3D 0x04040404; /* Advance all 4 values by 4. */ - mtf[i] =3D pattern; - i++; - } while (i <=3D upper_bound); - - /* Transform the input. */ - upper_bound =3D 0; - for (i =3D 0; i < v_len; ++i) { - int index =3D v[i]; - uint8_t value =3D mtf_u8[index]; - upper_bound |=3D v[i]; - v[i] =3D value; - mtf_u8[-1] =3D value; - do { - index--; - mtf_u8[index + 1] =3D mtf_u8[index]; - } while (index >=3D 0); - } - /* Remember amount of elements to be reinitialized. */ - state->mtf_upper_bound =3D upper_bound >> 2; -} - -/* Decodes a series of Huffman table using ReadHuffmanCode function. */ -static BrotliDecoderErrorCode HuffmanTreeGroupDecode( - HuffmanTreeGroup* group, BrotliDecoderState* s) { - if (s->substate_tree_group !=3D BROTLI_STATE_TREE_GROUP_LOOP) { - s->next =3D group->codes; - s->htree_index =3D 0; - s->substate_tree_group =3D BROTLI_STATE_TREE_GROUP_LOOP; - } - while (s->htree_index < group->num_htrees) { - uint32_t table_size; - BrotliDecoderErrorCode result =3D - ReadHuffmanCode(group->alphabet_size, group->max_symbol, - s->next, &table_size, s); - if (result !=3D BROTLI_DECODER_SUCCESS) return result; - group->htrees[s->htree_index] =3D s->next; - s->next +=3D table_size; - ++s->htree_index; - } - s->substate_tree_group =3D BROTLI_STATE_TREE_GROUP_NONE; - return BROTLI_DECODER_SUCCESS; -} - -/* Decodes a context map. - Decoding is done in 4 phases: - 1) Read auxiliary information (6..16 bits) and allocate memory. - In case of trivial context map, decoding is finished at this phase= . - 2) Decode Huffman table using ReadHuffmanCode function. - This table will be used for reading context map items. - 3) Read context map items; "0" values could be run-length encoded. - 4) Optionally, apply InverseMoveToFront transform to the resulting ma= p. */ -static BrotliDecoderErrorCode DecodeContextMap(uint32_t context_map_size, - uint32_t* num_htrees, - uint8_t** context_map_arg, - BrotliDecoderState* s) { - BrotliBitReader* br =3D &s->br; - BrotliDecoderErrorCode result =3D BROTLI_DECODER_SUCCESS; - - switch ((int)s->substate_context_map) { - case BROTLI_STATE_CONTEXT_MAP_NONE: - result =3D DecodeVarLenUint8(s, br, num_htrees); - if (result !=3D BROTLI_DECODER_SUCCESS) { - return result; - } - (*num_htrees)++; - s->context_index =3D 0; - BROTLI_LOG_UINT(context_map_size); - BROTLI_LOG_UINT(*num_htrees); - *context_map_arg =3D - (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)context_map_size); - if (*context_map_arg =3D=3D 0) { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP); - } - if (*num_htrees <=3D 1) { - memset(*context_map_arg, 0, (size_t)context_map_size); - return BROTLI_DECODER_SUCCESS; - } - s->substate_context_map =3D BROTLI_STATE_CONTEXT_MAP_READ_PREFIX; - /* Fall through. */ - - case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: { - uint32_t bits; - /* In next stage ReadHuffmanCode uses at least 4 bits, so it is saf= e - to peek 4 bits ahead. */ - if (!BrotliSafeGetBits(br, 5, &bits)) { - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - if ((bits & 1) !=3D 0) { /* Use RLE for zeros. */ - s->max_run_length_prefix =3D (bits >> 1) + 1; - BrotliDropBits(br, 5); - } else { - s->max_run_length_prefix =3D 0; - BrotliDropBits(br, 1); - } - BROTLI_LOG_UINT(s->max_run_length_prefix); - s->substate_context_map =3D BROTLI_STATE_CONTEXT_MAP_HUFFMAN; - } - /* Fall through. */ - - case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: { - uint32_t alphabet_size =3D *num_htrees + s->max_run_length_prefix; - result =3D ReadHuffmanCode(alphabet_size, alphabet_size, - s->context_map_table, NULL, s); - if (result !=3D BROTLI_DECODER_SUCCESS) return result; - s->code =3D 0xFFFF; - s->substate_context_map =3D BROTLI_STATE_CONTEXT_MAP_DECODE; - } - /* Fall through. */ - - case BROTLI_STATE_CONTEXT_MAP_DECODE: { - uint32_t context_index =3D s->context_index; - uint32_t max_run_length_prefix =3D s->max_run_length_prefix; - uint8_t* context_map =3D *context_map_arg; - uint32_t code =3D s->code; - BROTLI_BOOL skip_preamble =3D (code !=3D 0xFFFF); - while (context_index < context_map_size || skip_preamble) { - if (!skip_preamble) { - if (!SafeReadSymbol(s->context_map_table, br, &code)) { - s->code =3D 0xFFFF; - s->context_index =3D context_index; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - BROTLI_LOG_UINT(code); - - if (code =3D=3D 0) { - context_map[context_index++] =3D 0; - continue; - } - if (code > max_run_length_prefix) { - context_map[context_index++] =3D - (uint8_t)(code - max_run_length_prefix); - continue; - } - } else { - skip_preamble =3D BROTLI_FALSE; - } - /* RLE sub-stage. */ - { - uint32_t reps; - if (!BrotliSafeReadBits(br, code, &reps)) { - s->code =3D code; - s->context_index =3D context_index; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - reps +=3D 1U << code; - BROTLI_LOG_UINT(reps); - if (context_index + reps > context_map_size) { - return - BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_RE= PEAT); - } - do { - context_map[context_index++] =3D 0; - } while (--reps); - } - } - } - /* Fall through. */ - - case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: { - uint32_t bits; - if (!BrotliSafeReadBits(br, 1, &bits)) { - s->substate_context_map =3D BROTLI_STATE_CONTEXT_MAP_TRANSFORM; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - if (bits !=3D 0) { - InverseMoveToFrontTransform(*context_map_arg, context_map_size, s= ); - } - s->substate_context_map =3D BROTLI_STATE_CONTEXT_MAP_NONE; - return BROTLI_DECODER_SUCCESS; - } - - default: - return - BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE); - } -} - -/* Decodes a command or literal and updates block type ring-buffer. - Reads 3..54 bits. */ -static BROTLI_INLINE BROTLI_BOOL DecodeBlockTypeAndLength( - int safe, BrotliDecoderState* s, int tree_type) { - uint32_t max_block_type =3D s->num_block_types[tree_type]; - const HuffmanCode* type_tree =3D &s->block_type_trees[ - tree_type * BROTLI_HUFFMAN_MAX_SIZE_258]; - const HuffmanCode* len_tree =3D &s->block_len_trees[ - tree_type * BROTLI_HUFFMAN_MAX_SIZE_26]; - BrotliBitReader* br =3D &s->br; - uint32_t* ringbuffer =3D &s->block_type_rb[tree_type * 2]; - uint32_t block_type; - if (max_block_type <=3D 1) { - return BROTLI_FALSE; - } - - /* Read 0..15 + 3..39 bits. */ - if (!safe) { - block_type =3D ReadSymbol(type_tree, br); - s->block_length[tree_type] =3D ReadBlockLength(len_tree, br); - } else { - BrotliBitReaderState memento; - BrotliBitReaderSaveState(br, &memento); - if (!SafeReadSymbol(type_tree, br, &block_type)) return BROTLI_FALSE; - if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br= )) { - s->substate_read_block_length =3D BROTLI_STATE_READ_BLOCK_LENGTH_NO= NE; - BrotliBitReaderRestoreState(br, &memento); - return BROTLI_FALSE; - } - } - - if (block_type =3D=3D 1) { - block_type =3D ringbuffer[1] + 1; - } else if (block_type =3D=3D 0) { - block_type =3D ringbuffer[0]; - } else { - block_type -=3D 2; - } - if (block_type >=3D max_block_type) { - block_type -=3D max_block_type; - } - ringbuffer[0] =3D ringbuffer[1]; - ringbuffer[1] =3D block_type; - return BROTLI_TRUE; -} - -static BROTLI_INLINE void DetectTrivialLiteralBlockTypes( - BrotliDecoderState* s) { - size_t i; - for (i =3D 0; i < 8; ++i) s->trivial_literal_contexts[i] =3D 0; - for (i =3D 0; i < s->num_block_types[0]; i++) { - size_t offset =3D i << BROTLI_LITERAL_CONTEXT_BITS; - size_t error =3D 0; - size_t sample =3D s->context_map[offset]; - size_t j; - for (j =3D 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) { - BROTLI_REPEAT(4, error |=3D s->context_map[offset + j++] ^ sample;) - } - if (error =3D=3D 0) { - s->trivial_literal_contexts[i >> 5] |=3D 1u << (i & 31); - } - } -} - -static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) { - uint8_t context_mode; - size_t trivial; - uint32_t block_type =3D s->block_type_rb[1]; - uint32_t context_offset =3D block_type << BROTLI_LITERAL_CONTEXT_BITS; - s->context_map_slice =3D s->context_map + context_offset; - trivial =3D s->trivial_literal_contexts[block_type >> 5]; - s->trivial_literal_context =3D (trivial >> (block_type & 31)) & 1; - s->literal_htree =3D s->literal_hgroup.htrees[s->context_map_slice[0]]; - context_mode =3D s->context_modes[block_type] & 3; - s->context_lookup =3D BROTLI_CONTEXT_LUT(context_mode); -} - -/* Decodes the block type and updates the state for literal context. - Reads 3..54 bits. */ -static BROTLI_INLINE BROTLI_BOOL DecodeLiteralBlockSwitchInternal( - int safe, BrotliDecoderState* s) { - if (!DecodeBlockTypeAndLength(safe, s, 0)) { - return BROTLI_FALSE; - } - PrepareLiteralDecoding(s); - return BROTLI_TRUE; -} - -static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliDecoderState* = s) { - DecodeLiteralBlockSwitchInternal(0, s); -} - -static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch( - BrotliDecoderState* s) { - return DecodeLiteralBlockSwitchInternal(1, s); -} - -/* Block switch for insert/copy length. - Reads 3..54 bits. */ -static BROTLI_INLINE BROTLI_BOOL DecodeCommandBlockSwitchInternal( - int safe, BrotliDecoderState* s) { - if (!DecodeBlockTypeAndLength(safe, s, 1)) { - return BROTLI_FALSE; - } - s->htree_command =3D s->insert_copy_hgroup.htrees[s->block_type_rb[3]]; - return BROTLI_TRUE; -} - -static void BROTLI_NOINLINE DecodeCommandBlockSwitch(BrotliDecoderState* = s) { - DecodeCommandBlockSwitchInternal(0, s); -} - -static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeCommandBlockSwitch( - BrotliDecoderState* s) { - return DecodeCommandBlockSwitchInternal(1, s); -} - -/* Block switch for distance codes. - Reads 3..54 bits. */ -static BROTLI_INLINE BROTLI_BOOL DecodeDistanceBlockSwitchInternal( - int safe, BrotliDecoderState* s) { - if (!DecodeBlockTypeAndLength(safe, s, 2)) { - return BROTLI_FALSE; - } - s->dist_context_map_slice =3D s->dist_context_map + - (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS); - s->dist_htree_index =3D s->dist_context_map_slice[s->distance_context]; - return BROTLI_TRUE; -} - -static void BROTLI_NOINLINE DecodeDistanceBlockSwitch(BrotliDecoderState*= s) { - DecodeDistanceBlockSwitchInternal(0, s); -} - -static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch( - BrotliDecoderState* s) { - return DecodeDistanceBlockSwitchInternal(1, s); -} - -static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wra= p) { - size_t pos =3D wrap && s->pos > s->ringbuffer_size ? - (size_t)s->ringbuffer_size : (size_t)(s->pos); - size_t partial_pos_rb =3D (s->rb_roundtrips * (size_t)s->ringbuffer_siz= e) + pos; - return partial_pos_rb - s->partial_pos_out; -} - -/* Dumps output. - Returns BROTLI_DECODER_NEEDS_MORE_OUTPUT only if there is more output = to push - and either ring-buffer is as big as window size, or |force| is true. *= / -static BrotliDecoderErrorCode BROTLI_NOINLINE WriteRingBuffer( - BrotliDecoderState* s, size_t* available_out, uint8_t** next_out, - size_t* total_out, BROTLI_BOOL force) { - uint8_t* start =3D - s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask); - size_t to_write =3D UnwrittenBytes(s, BROTLI_TRUE); - size_t num_written =3D *available_out; - if (num_written > to_write) { - num_written =3D to_write; - } - if (s->meta_block_remaining_len < 0) { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1); - } - if (next_out && !*next_out) { - *next_out =3D start; - } else { - if (next_out) { - memcpy(*next_out, start, num_written); - *next_out +=3D num_written; - } - } - *available_out -=3D num_written; - BROTLI_LOG_UINT(to_write); - BROTLI_LOG_UINT(num_written); - s->partial_pos_out +=3D num_written; - if (total_out) { - *total_out =3D s->partial_pos_out; - } - if (num_written < to_write) { - if (s->ringbuffer_size =3D=3D (1 << s->window_bits) || force) { - return BROTLI_DECODER_NEEDS_MORE_OUTPUT; - } else { - return BROTLI_DECODER_SUCCESS; - } - } - /* Wrap ring buffer only if it has reached its maximal size. */ - if (s->ringbuffer_size =3D=3D (1 << s->window_bits) && - s->pos >=3D s->ringbuffer_size) { - s->pos -=3D s->ringbuffer_size; - s->rb_roundtrips++; - s->should_wrap_ringbuffer =3D (size_t)s->pos !=3D 0 ? 1 : 0; - } - return BROTLI_DECODER_SUCCESS; -} - -static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) { - if (s->should_wrap_ringbuffer) { - memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos); - s->should_wrap_ringbuffer =3D 0; - } -} - -/* Allocates ring-buffer. - - s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize be= fore - this function is called. - - Last two bytes of ring-buffer are initialized to 0, so context calcula= tion - could be done uniformly for the first two and all other positions. */ -static BROTLI_BOOL BROTLI_NOINLINE BrotliEnsureRingBuffer( - BrotliDecoderState* s) { - uint8_t* old_ringbuffer =3D s->ringbuffer; - if (s->ringbuffer_size =3D=3D s->new_ringbuffer_size) { - return BROTLI_TRUE; - } - - s->ringbuffer =3D (uint8_t*)BROTLI_DECODER_ALLOC(s, - (size_t)(s->new_ringbuffer_size) + kRingBufferWriteAheadSlack); - if (s->ringbuffer =3D=3D 0) { - /* Restore previous value. */ - s->ringbuffer =3D old_ringbuffer; - return BROTLI_FALSE; - } - s->ringbuffer[s->new_ringbuffer_size - 2] =3D 0; - s->ringbuffer[s->new_ringbuffer_size - 1] =3D 0; - - if (!!old_ringbuffer) { - memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos); - BROTLI_DECODER_FREE(s, old_ringbuffer); - } - - s->ringbuffer_size =3D s->new_ringbuffer_size; - s->ringbuffer_mask =3D s->new_ringbuffer_size - 1; - s->ringbuffer_end =3D s->ringbuffer + s->ringbuffer_size; - - return BROTLI_TRUE; -} - -static BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutp= ut( - size_t* available_out, uint8_t** next_out, size_t* total_out, - BrotliDecoderState* s) { - /* TODO: avoid allocation for single uncompressed block. */ - if (!BrotliEnsureRingBuffer(s)) { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1); - } - - /* State machine */ - for (;;) { - switch (s->substate_uncompressed) { - case BROTLI_STATE_UNCOMPRESSED_NONE: { - int nbytes =3D (int)BrotliGetRemainingBytes(&s->br); - if (nbytes > s->meta_block_remaining_len) { - nbytes =3D s->meta_block_remaining_len; - } - if (s->pos + nbytes > s->ringbuffer_size) { - nbytes =3D s->ringbuffer_size - s->pos; - } - /* Copy remaining bytes from s->br.buf_ to ring-buffer. */ - BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes); - s->pos +=3D nbytes; - s->meta_block_remaining_len -=3D nbytes; - if (s->pos < 1 << s->window_bits) { - if (s->meta_block_remaining_len =3D=3D 0) { - return BROTLI_DECODER_SUCCESS; - } - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - s->substate_uncompressed =3D BROTLI_STATE_UNCOMPRESSED_WRITE; - } - /* Fall through. */ - - case BROTLI_STATE_UNCOMPRESSED_WRITE: { - BrotliDecoderErrorCode result; - result =3D WriteRingBuffer( - s, available_out, next_out, total_out, BROTLI_FALSE); - if (result !=3D BROTLI_DECODER_SUCCESS) { - return result; - } - if (s->ringbuffer_size =3D=3D 1 << s->window_bits) { - s->max_distance =3D s->max_backward_distance; - } - s->substate_uncompressed =3D BROTLI_STATE_UNCOMPRESSED_NONE; - break; - } - } - } - BROTLI_DCHECK(0); /* Unreachable */ -} - -/* Calculates the smallest feasible ring buffer. - - If we know the data size is small, do not allocate more ring buffer - size than needed to reduce memory usage. - - When this method is called, metablock size and flags MUST be decoded. = */ -static void BROTLI_NOINLINE BrotliCalculateRingBufferSize( - BrotliDecoderState* s) { - int window_size =3D 1 << s->window_bits; - int new_ringbuffer_size =3D window_size; - /* We need at least 2 bytes of ring buffer size to get the last two - bytes for context from there */ - int min_size =3D s->ringbuffer_size ? s->ringbuffer_size : 1024; - int output_size; - - /* If maximum is already reached, no further extension is retired. */ - if (s->ringbuffer_size =3D=3D window_size) { - return; - } - - /* Metadata blocks does not touch ring buffer. */ - if (s->is_metadata) { - return; - } - - if (!s->ringbuffer) { - output_size =3D 0; - } else { - output_size =3D s->pos; - } - output_size +=3D s->meta_block_remaining_len; - min_size =3D min_size < output_size ? output_size : min_size; - - if (!!s->canny_ringbuffer_allocation) { - /* Reduce ring buffer size to save memory when server is unscrupulous= . - In worst case memory usage might be 1.5x bigger for a short period= of - ring buffer reallocation. */ - while ((new_ringbuffer_size >> 1) >=3D min_size) { - new_ringbuffer_size >>=3D 1; - } - } - - s->new_ringbuffer_size =3D new_ringbuffer_size; -} - -/* Reads 1..256 2-bit context modes. */ -static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) { - BrotliBitReader* br =3D &s->br; - int i =3D s->loop_counter; - - while (i < (int)s->num_block_types[0]) { - uint32_t bits; - if (!BrotliSafeReadBits(br, 2, &bits)) { - s->loop_counter =3D i; - return BROTLI_DECODER_NEEDS_MORE_INPUT; - } - s->context_modes[i] =3D (uint8_t)bits; - BROTLI_LOG_ARRAY_INDEX(s->context_modes, i); - i++; - } - return BROTLI_DECODER_SUCCESS; -} - -static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* = s) { - if (s->distance_code =3D=3D 0) { - --s->dist_rb_idx; - s->distance_code =3D s->dist_rb[s->dist_rb_idx & 3]; - /* Compensate double distance-ring-buffer roll for dictionary items. = */ - s->distance_context =3D 1; - } else { - int distance_code =3D s->distance_code << 1; - /* kDistanceShortCodeIndexOffset has 2-bit values from LSB: - 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 */ - const uint32_t kDistanceShortCodeIndexOffset =3D 0xAAAFFF1B; - /* kDistanceShortCodeValueOffset has 2-bit values from LSB: - -0, 0,-0, 0,-1, 1,-2, 2,-3, 3,-1, 1,-2, 2,-3, 3 */ - const uint32_t kDistanceShortCodeValueOffset =3D 0xFA5FA500; - int v =3D (s->dist_rb_idx + - (int)(kDistanceShortCodeIndexOffset >> distance_code)) & 0x3; - s->distance_code =3D s->dist_rb[v]; - v =3D (int)(kDistanceShortCodeValueOffset >> distance_code) & 0x3; - if ((distance_code & 0x3) !=3D 0) { - s->distance_code +=3D v; - } else { - s->distance_code -=3D v; - if (s->distance_code <=3D 0) { - /* A huge distance will cause a BROTLI_FAILURE() soon. - This is a little faster than failing here. */ - s->distance_code =3D 0x7FFFFFFF; - } - } - } -} - -static BROTLI_INLINE BROTLI_BOOL SafeReadBits( - BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { - if (n_bits !=3D 0) { - return BrotliSafeReadBits(br, n_bits, val); - } else { - *val =3D 0; - return BROTLI_TRUE; - } -} - -/* Precondition: s->distance_code < 0. */ -static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal( - int safe, BrotliDecoderState* s, BrotliBitReader* br) { - int distval; - BrotliBitReaderState memento; - HuffmanCode* distance_tree =3D s->distance_hgroup.htrees[s->dist_htree_= index]; - if (!safe) { - s->distance_code =3D (int)ReadSymbol(distance_tree, br); - } else { - uint32_t code; - BrotliBitReaderSaveState(br, &memento); - if (!SafeReadSymbol(distance_tree, br, &code)) { - return BROTLI_FALSE; - } - s->distance_code =3D (int)code; - } - /* Convert the distance code to the actual distance by possibly - looking up past distances from the s->ringbuffer. */ - s->distance_context =3D 0; - if ((s->distance_code & ~0xF) =3D=3D 0) { - TakeDistanceFromRingBuffer(s); - --s->block_length[2]; - return BROTLI_TRUE; - } - distval =3D s->distance_code - (int)s->num_direct_distance_codes; - if (distval >=3D 0) { - uint32_t nbits; - int postfix; - int offset; - if (!safe && (s->distance_postfix_bits =3D=3D 0)) { - nbits =3D ((uint32_t)distval >> 1) + 1; - offset =3D ((2 + (distval & 1)) << nbits) - 4; - s->distance_code =3D (int)s->num_direct_distance_codes + offset + - (int)BrotliReadBits(br, nbits); - } else { - /* This branch also works well when s->distance_postfix_bits =3D=3D= 0. */ - uint32_t bits; - postfix =3D distval & s->distance_postfix_mask; - distval >>=3D s->distance_postfix_bits; - nbits =3D ((uint32_t)distval >> 1) + 1; - if (safe) { - if (!SafeReadBits(br, nbits, &bits)) { - s->distance_code =3D -1; /* Restore precondition. */ - BrotliBitReaderRestoreState(br, &memento); - return BROTLI_FALSE; - } - } else { - bits =3D BrotliReadBits(br, nbits); - } - offset =3D ((2 + (distval & 1)) << nbits) - 4; - s->distance_code =3D (int)s->num_direct_distance_codes + - ((offset + (int)bits) << s->distance_postfix_bits) + postfix; - } - } - s->distance_code =3D s->distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES= + 1; - --s->block_length[2]; - return BROTLI_TRUE; -} - -static BROTLI_INLINE void ReadDistance( - BrotliDecoderState* s, BrotliBitReader* br) { - ReadDistanceInternal(0, s, br); -} - -static BROTLI_INLINE BROTLI_BOOL SafeReadDistance( - BrotliDecoderState* s, BrotliBitReader* br) { - return ReadDistanceInternal(1, s, br); -} - -static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal( - int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_len= gth) { - uint32_t cmd_code; - uint32_t insert_len_extra =3D 0; - uint32_t copy_length; - CmdLutElement v; - BrotliBitReaderState memento; - if (!safe) { - cmd_code =3D ReadSymbol(s->htree_command, br); - } else { - BrotliBitReaderSaveState(br, &memento); - if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) { - return BROTLI_FALSE; - } - } - v =3D kCmdLut[cmd_code]; - s->distance_code =3D v.distance_code; - s->distance_context =3D v.context; - s->dist_htree_index =3D s->dist_context_map_slice[s->distance_context]; - *insert_length =3D v.insert_len_offset; - if (!safe) { - if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits !=3D 0)) { - insert_len_extra =3D BrotliReadBits(br, v.insert_len_extra_bits); - } - copy_length =3D BrotliReadBits(br, v.copy_len_extra_bits); - } else { - if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) || - !SafeReadBits(br, v.copy_len_extra_bits, ©_length)) { - BrotliBitReaderRestoreState(br, &memento); - return BROTLI_FALSE; - } - } - s->copy_length =3D (int)copy_length + v.copy_len_offset; - --s->block_length[1]; - *insert_length +=3D (int)insert_len_extra; - return BROTLI_TRUE; -} - -static BROTLI_INLINE void ReadCommand( - BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) { - ReadCommandInternal(0, s, br, insert_length); -} - -static BROTLI_INLINE BROTLI_BOOL SafeReadCommand( - BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) { - return ReadCommandInternal(1, s, br, insert_length); -} - -static BROTLI_INLINE BROTLI_BOOL CheckInputAmount( - int safe, BrotliBitReader* const br, size_t num) { - if (safe) { - return BROTLI_TRUE; - } - return BrotliCheckInputAmount(br, num); -} - -#define BROTLI_SAFE(METHOD) \ - { \ - if (safe) { \ - if (!Safe##METHOD) { \ - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; \ - goto saveStateAndReturn; \ - } \ - } else { \ - METHOD; \ - } \ - } - -static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal( - int safe, BrotliDecoderState* s) { - int pos =3D s->pos; - int i =3D s->loop_counter; - BrotliDecoderErrorCode result =3D BROTLI_DECODER_SUCCESS; - BrotliBitReader* br =3D &s->br; - - if (!CheckInputAmount(safe, br, 28)) { - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - goto saveStateAndReturn; - } - if (!safe) { - BROTLI_UNUSED(BrotliWarmupBitReader(br)); - } - - /* Jump into state machine. */ - if (s->state =3D=3D BROTLI_STATE_COMMAND_BEGIN) { - goto CommandBegin; - } else if (s->state =3D=3D BROTLI_STATE_COMMAND_INNER) { - goto CommandInner; - } else if (s->state =3D=3D BROTLI_STATE_COMMAND_POST_DECODE_LITERALS) { - goto CommandPostDecodeLiterals; - } else if (s->state =3D=3D BROTLI_STATE_COMMAND_POST_WRAP_COPY) { - goto CommandPostWrapCopy; - } else { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE); - } - -CommandBegin: - if (safe) { - s->state =3D BROTLI_STATE_COMMAND_BEGIN; - } - if (!CheckInputAmount(safe, br, 28)) { /* 156 bits + 7 bytes */ - s->state =3D BROTLI_STATE_COMMAND_BEGIN; - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - goto saveStateAndReturn; - } - if (BROTLI_PREDICT_FALSE(s->block_length[1] =3D=3D 0)) { - BROTLI_SAFE(DecodeCommandBlockSwitch(s)); - goto CommandBegin; - } - /* Read the insert/copy length in the command. */ - BROTLI_SAFE(ReadCommand(s, br, &i)); - BROTLI_LOG(("[ProcessCommandsInternal] pos =3D %d insert =3D %d copy = =3D %d\n", - pos, i, s->copy_length)); - if (i =3D=3D 0) { - goto CommandPostDecodeLiterals; - } - s->meta_block_remaining_len -=3D i; - -CommandInner: - if (safe) { - s->state =3D BROTLI_STATE_COMMAND_INNER; - } - /* Read the literals in the command. */ - if (s->trivial_literal_context) { - uint32_t bits; - uint32_t value; - PreloadSymbol(safe, s->literal_htree, br, &bits, &value); - do { - if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */ - s->state =3D BROTLI_STATE_COMMAND_INNER; - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - goto saveStateAndReturn; - } - if (BROTLI_PREDICT_FALSE(s->block_length[0] =3D=3D 0)) { - BROTLI_SAFE(DecodeLiteralBlockSwitch(s)); - PreloadSymbol(safe, s->literal_htree, br, &bits, &value); - if (!s->trivial_literal_context) goto CommandInner; - } - if (!safe) { - s->ringbuffer[pos] =3D - (uint8_t)ReadPreloadedSymbol(s->literal_htree, br, &bits, &va= lue); - } else { - uint32_t literal; - if (!SafeReadSymbol(s->literal_htree, br, &literal)) { - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - goto saveStateAndReturn; - } - s->ringbuffer[pos] =3D (uint8_t)literal; - } - --s->block_length[0]; - BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos); - ++pos; - if (BROTLI_PREDICT_FALSE(pos =3D=3D s->ringbuffer_size)) { - s->state =3D BROTLI_STATE_COMMAND_INNER_WRITE; - --i; - goto saveStateAndReturn; - } - } while (--i !=3D 0); - } else { - uint8_t p1 =3D s->ringbuffer[(pos - 1) & s->ringbuffer_mask]; - uint8_t p2 =3D s->ringbuffer[(pos - 2) & s->ringbuffer_mask]; - do { - const HuffmanCode* hc; - uint8_t context; - if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */ - s->state =3D BROTLI_STATE_COMMAND_INNER; - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - goto saveStateAndReturn; - } - if (BROTLI_PREDICT_FALSE(s->block_length[0] =3D=3D 0)) { - BROTLI_SAFE(DecodeLiteralBlockSwitch(s)); - if (s->trivial_literal_context) goto CommandInner; - } - context =3D BROTLI_CONTEXT(p1, p2, s->context_lookup); - BROTLI_LOG_UINT(context); - hc =3D s->literal_hgroup.htrees[s->context_map_slice[context]]; - p2 =3D p1; - if (!safe) { - p1 =3D (uint8_t)ReadSymbol(hc, br); - } else { - uint32_t literal; - if (!SafeReadSymbol(hc, br, &literal)) { - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - goto saveStateAndReturn; - } - p1 =3D (uint8_t)literal; - } - s->ringbuffer[pos] =3D p1; - --s->block_length[0]; - BROTLI_LOG_UINT(s->context_map_slice[context]); - BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask); - ++pos; - if (BROTLI_PREDICT_FALSE(pos =3D=3D s->ringbuffer_size)) { - s->state =3D BROTLI_STATE_COMMAND_INNER_WRITE; - --i; - goto saveStateAndReturn; - } - } while (--i !=3D 0); - } - BROTLI_LOG_UINT(s->meta_block_remaining_len); - if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <=3D 0)) { - s->state =3D BROTLI_STATE_METABLOCK_DONE; - goto saveStateAndReturn; - } - -CommandPostDecodeLiterals: - if (safe) { - s->state =3D BROTLI_STATE_COMMAND_POST_DECODE_LITERALS; - } - if (s->distance_code >=3D 0) { - /* Implicit distance case. */ - s->distance_context =3D s->distance_code ? 0 : 1; - --s->dist_rb_idx; - s->distance_code =3D s->dist_rb[s->dist_rb_idx & 3]; - } else { - /* Read distance code in the command, unless it was implicitly zero. = */ - if (BROTLI_PREDICT_FALSE(s->block_length[2] =3D=3D 0)) { - BROTLI_SAFE(DecodeDistanceBlockSwitch(s)); - } - BROTLI_SAFE(ReadDistance(s, br)); - } - BROTLI_LOG(("[ProcessCommandsInternal] pos =3D %d distance =3D %d\n", - pos, s->distance_code)); - if (s->max_distance !=3D s->max_backward_distance) { - s->max_distance =3D - (pos < s->max_backward_distance) ? pos : s->max_backward_distance= ; - } - i =3D s->copy_length; - /* Apply copy of LZ77 back-reference, or static dictionary reference if - the distance is larger than the max LZ77 distance */ - if (s->distance_code > s->max_distance) { - /* The maximum allowed distance is BROTLI_MAX_ALLOWED_DISTANCE =3D 0x= 7FFFFFFC. - With this choice, no signed overflow can occur after decoding - a special distance code (e.g., after adding 3 to the last distance= ). */ - if (s->distance_code > BROTLI_MAX_ALLOWED_DISTANCE) { - BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d " - "len: %d bytes left: %d\n", - pos, s->distance_code, i, s->meta_block_remaining_len)); - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DISTANCE); - } - if (i >=3D BROTLI_MIN_DICTIONARY_WORD_LENGTH && - i <=3D BROTLI_MAX_DICTIONARY_WORD_LENGTH) { - int address =3D s->distance_code - s->max_distance - 1; - const BrotliDictionary* words =3D s->dictionary; - const BrotliTransforms* transforms =3D s->transforms; - int offset =3D (int)s->dictionary->offsets_by_length[i]; - uint32_t shift =3D s->dictionary->size_bits_by_length[i]; - - int mask =3D (int)BitMask(shift); - int word_idx =3D address & mask; - int transform_idx =3D address >> shift; - /* Compensate double distance-ring-buffer roll. */ - s->dist_rb_idx +=3D s->distance_context; - offset +=3D word_idx * i; - if (BROTLI_PREDICT_FALSE(!words->data)) { - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET); - } - if (transform_idx < (int)transforms->num_transforms) { - const uint8_t* word =3D &words->data[offset]; - int len =3D i; - if (transform_idx =3D=3D transforms->cutOffTransforms[0]) { - memcpy(&s->ringbuffer[pos], word, (size_t)len); - BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s]\= n", - len, word)); - } else { - len =3D BrotliTransformDictionaryWord(&s->ringbuffer[pos], word= , len, - transforms, transform_idx); - BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s],= " - " transform_idx =3D %d, transformed: [%.*s]\n", - i, word, transform_idx, len, &s->ringbuffer[pos])); - } - pos +=3D len; - s->meta_block_remaining_len -=3D len; - if (pos >=3D s->ringbuffer_size) { - s->state =3D BROTLI_STATE_COMMAND_POST_WRITE_1; - goto saveStateAndReturn; - } - } else { - BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d " - "len: %d bytes left: %d\n", - pos, s->distance_code, i, s->meta_block_remaining_len)); - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM); - } - } else { - BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d " - "len: %d bytes left: %d\n", - pos, s->distance_code, i, s->meta_block_remaining_len)); - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY); - } - } else { - int src_start =3D (pos - s->distance_code) & s->ringbuffer_mask; - uint8_t* copy_dst =3D &s->ringbuffer[pos]; - uint8_t* copy_src =3D &s->ringbuffer[src_start]; - int dst_end =3D pos + i; - int src_end =3D src_start + i; - /* Update the recent distances cache. */ - s->dist_rb[s->dist_rb_idx & 3] =3D s->distance_code; - ++s->dist_rb_idx; - s->meta_block_remaining_len -=3D i; - /* There are 32+ bytes of slack in the ring-buffer allocation. - Also, we have 16 short codes, that make these 16 bytes irrelevant - in the ring-buffer. Let's copy over them as a first guess. */ - memmove16(copy_dst, copy_src); - if (src_end > pos && dst_end > src_start) { - /* Regions intersect. */ - goto CommandPostWrapCopy; - } - if (dst_end >=3D s->ringbuffer_size || src_end >=3D s->ringbuffer_siz= e) { - /* At least one region wraps. */ - goto CommandPostWrapCopy; - } - pos +=3D i; - if (i > 16) { - if (i > 32) { - memcpy(copy_dst + 16, copy_src + 16, (size_t)(i - 16)); - } else { - /* This branch covers about 45% cases. - Fixed size short copy allows more compiler optimizations. */ - memmove16(copy_dst + 16, copy_src + 16); - } - } - } - BROTLI_LOG_UINT(s->meta_block_remaining_len); - if (s->meta_block_remaining_len <=3D 0) { - /* Next metablock, if any. */ - s->state =3D BROTLI_STATE_METABLOCK_DONE; - goto saveStateAndReturn; - } else { - goto CommandBegin; - } -CommandPostWrapCopy: - { - int wrap_guard =3D s->ringbuffer_size - pos; - while (--i >=3D 0) { - s->ringbuffer[pos] =3D - s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask]; - ++pos; - if (BROTLI_PREDICT_FALSE(--wrap_guard =3D=3D 0)) { - s->state =3D BROTLI_STATE_COMMAND_POST_WRITE_2; - goto saveStateAndReturn; - } - } - } - if (s->meta_block_remaining_len <=3D 0) { - /* Next metablock, if any. */ - s->state =3D BROTLI_STATE_METABLOCK_DONE; - goto saveStateAndReturn; - } else { - goto CommandBegin; - } - -saveStateAndReturn: - s->pos =3D pos; - s->loop_counter =3D i; - return result; -} - -#undef BROTLI_SAFE - -static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands( - BrotliDecoderState* s) { - return ProcessCommandsInternal(0, s); -} - -static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands( - BrotliDecoderState* s) { - return ProcessCommandsInternal(1, s); -} - -/* Returns the maximum number of distance symbols which can only represen= t - distances not exceeding BROTLI_MAX_ALLOWED_DISTANCE. */ -static uint32_t BrotliMaxDistanceSymbol(uint32_t ndirect, uint32_t npostf= ix) { - static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] =3D {0, 4, 12, 28}= ; - static const uint32_t diff[BROTLI_MAX_NPOSTFIX + 1] =3D {73, 126, 228, = 424}; - uint32_t postfix =3D 1U << npostfix; - if (ndirect < bound[npostfix]) { - return ndirect + diff[npostfix] + postfix; - } else if (ndirect > bound[npostfix] + postfix) { - return ndirect + diff[npostfix]; - } else { - return bound[npostfix] + diff[npostfix] + postfix; - } -} - -BrotliDecoderResult BrotliDecoderDecompress( - size_t encoded_size, const uint8_t* encoded_buffer, size_t* decoded_s= ize, - uint8_t* decoded_buffer) { - BrotliDecoderState s; - BrotliDecoderResult result; - size_t total_out =3D 0; - size_t available_in =3D encoded_size; - const uint8_t* next_in =3D encoded_buffer; - size_t available_out =3D *decoded_size; - uint8_t* next_out =3D decoded_buffer; - if (!BrotliDecoderStateInit(&s, 0, 0, 0)) { - return BROTLI_DECODER_RESULT_ERROR; - } - result =3D BrotliDecoderDecompressStream( - &s, &available_in, &next_in, &available_out, &next_out, &total_out)= ; - *decoded_size =3D total_out; - BrotliDecoderStateCleanup(&s); - if (result !=3D BROTLI_DECODER_RESULT_SUCCESS) { - result =3D BROTLI_DECODER_RESULT_ERROR; - } - return result; -} - -/* Invariant: input stream is never overconsumed: - - invalid input implies that the whole stream is invalid -> any amoun= t of - input could be read and discarded - - when result is "needs more input", then at least one more byte is R= EQUIRED - to complete decoding; all input data MUST be consumed by decoder, s= o - client could swap the input buffer - - when result is "needs more output" decoder MUST ensure that it does= n't - hold more than 7 bits in bit reader; this saves client from swappin= g input - buffer ahead of time - - when result is "success" decoder MUST return all unused data back t= o input - buffer; this is possible because the invariant is held on enter */ -BrotliDecoderResult BrotliDecoderDecompressStream( - BrotliDecoderState* s, size_t* available_in, const uint8_t** next_in, - size_t* available_out, uint8_t** next_out, size_t* total_out) { - BrotliDecoderErrorCode result =3D BROTLI_DECODER_SUCCESS; - BrotliBitReader* br =3D &s->br; - /* Ensure that |total_out| is set, even if no data will ever be pushed = out. */ - if (total_out) { - *total_out =3D s->partial_pos_out; - } - /* Do not try to process further in a case of unrecoverable error. */ - if ((int)s->error_code < 0) { - return BROTLI_DECODER_RESULT_ERROR; - } - if (*available_out && (!next_out || !*next_out)) { - return SaveErrorCode( - s, BROTLI_FAILURE(BROTLI_DECODER_ERROR_INVALID_ARGUMENTS)); - } - if (!*available_out) next_out =3D 0; - if (s->buffer_length =3D=3D 0) { /* Just connect bit reader to input s= tream. */ - br->avail_in =3D *available_in; - br->next_in =3D *next_in; - } else { - /* At least one byte of input is required. More than one byte of inpu= t may - be required to complete the transaction -> reading more data must = be - done in a loop -> do it in a main loop. */ - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - br->next_in =3D &s->buffer.u8[0]; - } - /* State machine */ - for (;;) { - if (result !=3D BROTLI_DECODER_SUCCESS) { - /* Error, needs more input/output. */ - if (result =3D=3D BROTLI_DECODER_NEEDS_MORE_INPUT) { - if (s->ringbuffer !=3D 0) { /* Pro-actively push output. */ - BrotliDecoderErrorCode intermediate_result =3D WriteRingBuffer(= s, - available_out, next_out, total_out, BROTLI_TRUE); - /* WriteRingBuffer checks s->meta_block_remaining_len validity.= */ - if ((int)intermediate_result < 0) { - result =3D intermediate_result; - break; - } - } - if (s->buffer_length !=3D 0) { /* Used with internal buffer. */ - if (br->avail_in =3D=3D 0) { - /* Successfully finished read transaction. - Accumulator contains less than 8 bits, because internal bu= ffer - is expanded byte-by-byte until it is enough to complete re= ad. */ - s->buffer_length =3D 0; - /* Switch to input stream and restart. */ - result =3D BROTLI_DECODER_SUCCESS; - br->avail_in =3D *available_in; - br->next_in =3D *next_in; - continue; - } else if (*available_in !=3D 0) { - /* Not enough data in buffer, but can take one more byte from - input stream. */ - result =3D BROTLI_DECODER_SUCCESS; - s->buffer.u8[s->buffer_length] =3D **next_in; - s->buffer_length++; - br->avail_in =3D s->buffer_length; - (*next_in)++; - (*available_in)--; - /* Retry with more data in buffer. */ - continue; - } - /* Can't finish reading and no more input. */ - break; - } else { /* Input stream doesn't contain enough input. */ - /* Copy tail to internal buffer and return. */ - *next_in =3D br->next_in; - *available_in =3D br->avail_in; - while (*available_in) { - s->buffer.u8[s->buffer_length] =3D **next_in; - s->buffer_length++; - (*next_in)++; - (*available_in)--; - } - break; - } - /* Unreachable. */ - } - - /* Fail or needs more output. */ - - if (s->buffer_length !=3D 0) { - /* Just consumed the buffered input and produced some output. Oth= erwise - it would result in "needs more input". Reset internal buffer. = */ - s->buffer_length =3D 0; - } else { - /* Using input stream in last iteration. When decoder switches to= input - stream it has less than 8 bits in accumulator, so it is safe t= o - return unused accumulator bits there. */ - BrotliBitReaderUnload(br); - *available_in =3D br->avail_in; - *next_in =3D br->next_in; - } - break; - } - switch (s->state) { - case BROTLI_STATE_UNINITED: - /* Prepare to the first read. */ - if (!BrotliWarmupBitReader(br)) { - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - break; - } - /* Decode window size. */ - result =3D DecodeWindowBits(s, br); /* Reads 1..8 bits. */ - if (result !=3D BROTLI_DECODER_SUCCESS) { - break; - } - if (s->large_window) { - s->state =3D BROTLI_STATE_LARGE_WINDOW_BITS; - break; - } - s->state =3D BROTLI_STATE_INITIALIZE; - break; - - case BROTLI_STATE_LARGE_WINDOW_BITS: - if (!BrotliSafeReadBits(br, 6, &s->window_bits)) { - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - break; - } - if (s->window_bits < BROTLI_LARGE_MIN_WBITS || - s->window_bits > BROTLI_LARGE_MAX_WBITS) { - result =3D BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BI= TS); - break; - } - s->state =3D BROTLI_STATE_INITIALIZE; - /* Fall through. */ - - case BROTLI_STATE_INITIALIZE: - BROTLI_LOG_UINT(s->window_bits); - /* Maximum distance, see section 9.1. of the spec. */ - s->max_backward_distance =3D (1 << s->window_bits) - BROTLI_WINDO= W_GAP; - - /* Allocate memory for both block_type_trees and block_len_trees.= */ - s->block_type_trees =3D (HuffmanCode*)BROTLI_DECODER_ALLOC(s, - sizeof(HuffmanCode) * 3 * - (BROTLI_HUFFMAN_MAX_SIZE_258 + BROTLI_HUFFMAN_MAX_SIZE_26= )); - if (s->block_type_trees =3D=3D 0) { - result =3D BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE= _TREES); - break; - } - s->block_len_trees =3D - s->block_type_trees + 3 * BROTLI_HUFFMAN_MAX_SIZE_258; - - s->state =3D BROTLI_STATE_METABLOCK_BEGIN; - /* Fall through. */ - - case BROTLI_STATE_METABLOCK_BEGIN: - BrotliDecoderStateMetablockBegin(s); - BROTLI_LOG_UINT(s->pos); - s->state =3D BROTLI_STATE_METABLOCK_HEADER; - /* Fall through. */ - - case BROTLI_STATE_METABLOCK_HEADER: - result =3D DecodeMetaBlockLength(s, br); /* Reads 2 - 31 bits. *= / - if (result !=3D BROTLI_DECODER_SUCCESS) { - break; - } - BROTLI_LOG_UINT(s->is_last_metablock); - BROTLI_LOG_UINT(s->meta_block_remaining_len); - BROTLI_LOG_UINT(s->is_metadata); - BROTLI_LOG_UINT(s->is_uncompressed); - if (s->is_metadata || s->is_uncompressed) { - if (!BrotliJumpToByteBoundary(br)) { - result =3D BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING= _1); - break; - } - } - if (s->is_metadata) { - s->state =3D BROTLI_STATE_METADATA; - break; - } - if (s->meta_block_remaining_len =3D=3D 0) { - s->state =3D BROTLI_STATE_METABLOCK_DONE; - break; - } - BrotliCalculateRingBufferSize(s); - if (s->is_uncompressed) { - s->state =3D BROTLI_STATE_UNCOMPRESSED; - break; - } - s->loop_counter =3D 0; - s->state =3D BROTLI_STATE_HUFFMAN_CODE_0; - break; - - case BROTLI_STATE_UNCOMPRESSED: { - result =3D CopyUncompressedBlockToOutput( - available_out, next_out, total_out, s); - if (result !=3D BROTLI_DECODER_SUCCESS) { - break; - } - s->state =3D BROTLI_STATE_METABLOCK_DONE; - break; - } - - case BROTLI_STATE_METADATA: - for (; s->meta_block_remaining_len > 0; --s->meta_block_remaining= _len) { - uint32_t bits; - /* Read one byte and ignore it. */ - if (!BrotliSafeReadBits(br, 8, &bits)) { - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - break; - } - } - if (result =3D=3D BROTLI_DECODER_SUCCESS) { - s->state =3D BROTLI_STATE_METABLOCK_DONE; - } - break; - - case BROTLI_STATE_HUFFMAN_CODE_0: - if (s->loop_counter >=3D 3) { - s->state =3D BROTLI_STATE_METABLOCK_HEADER_2; - break; - } - /* Reads 1..11 bits. */ - result =3D DecodeVarLenUint8(s, br, &s->num_block_types[s->loop_c= ounter]); - if (result !=3D BROTLI_DECODER_SUCCESS) { - break; - } - s->num_block_types[s->loop_counter]++; - BROTLI_LOG_UINT(s->num_block_types[s->loop_counter]); - if (s->num_block_types[s->loop_counter] < 2) { - s->loop_counter++; - break; - } - s->state =3D BROTLI_STATE_HUFFMAN_CODE_1; - /* Fall through. */ - - case BROTLI_STATE_HUFFMAN_CODE_1: { - uint32_t alphabet_size =3D s->num_block_types[s->loop_counter] + = 2; - int tree_offset =3D s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258= ; - result =3D ReadHuffmanCode(alphabet_size, alphabet_size, - &s->block_type_trees[tree_offset], NULL, s); - if (result !=3D BROTLI_DECODER_SUCCESS) break; - s->state =3D BROTLI_STATE_HUFFMAN_CODE_2; - } - /* Fall through. */ - - case BROTLI_STATE_HUFFMAN_CODE_2: { - uint32_t alphabet_size =3D BROTLI_NUM_BLOCK_LEN_SYMBOLS; - int tree_offset =3D s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26; - result =3D ReadHuffmanCode(alphabet_size, alphabet_size, - &s->block_len_trees[tree_offset], NULL, s); - if (result !=3D BROTLI_DECODER_SUCCESS) break; - s->state =3D BROTLI_STATE_HUFFMAN_CODE_3; - } - /* Fall through. */ - - case BROTLI_STATE_HUFFMAN_CODE_3: { - int tree_offset =3D s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26; - if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter], - &s->block_len_trees[tree_offset], br)) { - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - break; - } - BROTLI_LOG_UINT(s->block_length[s->loop_counter]); - s->loop_counter++; - s->state =3D BROTLI_STATE_HUFFMAN_CODE_0; - break; - } - - case BROTLI_STATE_METABLOCK_HEADER_2: { - uint32_t bits; - if (!BrotliSafeReadBits(br, 6, &bits)) { - result =3D BROTLI_DECODER_NEEDS_MORE_INPUT; - break; - } - s->distance_postfix_bits =3D bits & BitMask(2); - bits >>=3D 2; - s->num_direct_distance_codes =3D BROTLI_NUM_DISTANCE_SHORT_CODES = + - (bits << s->distance_postfix_bits); - BROTLI_LOG_UINT(s->num_direct_distance_codes); - BROTLI_LOG_UINT(s->distance_postfix_bits); - s->distance_postfix_mask =3D (int)BitMask(s->distance_postfix_bit= s); - s->context_modes =3D - (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s->num_block_types[= 0]); - if (s->context_modes =3D=3D 0) { - result =3D BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MO= DES); - break; - } - s->loop_counter =3D 0; - s->state =3D BROTLI_STATE_CONTEXT_MODES; - } - /* Fall through. */ - - case BROTLI_STATE_CONTEXT_MODES: - result =3D ReadContextModes(s); - if (result !=3D BROTLI_DECODER_SUCCESS) { - break; - } - s->state =3D BROTLI_STATE_CONTEXT_MAP_1; - /* Fall through. */ - - case BROTLI_STATE_CONTEXT_MAP_1: - result =3D DecodeContextMap( - s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS, - &s->num_literal_htrees, &s->context_map, s); - if (result !=3D BROTLI_DECODER_SUCCESS) { - break; - } - DetectTrivialLiteralBlockTypes(s); - s->state =3D BROTLI_STATE_CONTEXT_MAP_2; - /* Fall through. */ - - case BROTLI_STATE_CONTEXT_MAP_2: { - uint32_t num_direct_codes =3D - s->num_direct_distance_codes - BROTLI_NUM_DISTANCE_SHORT_CODE= S; - uint32_t num_distance_codes =3D BROTLI_DISTANCE_ALPHABET_SIZE( - s->distance_postfix_bits, num_direct_codes, - (s->large_window ? BROTLI_LARGE_MAX_DISTANCE_BITS : - BROTLI_MAX_DISTANCE_BITS)); - uint32_t max_distance_symbol =3D (s->large_window ? - BrotliMaxDistanceSymbol( - num_direct_codes, s->distance_postfix_bits) : - num_distance_codes); - BROTLI_BOOL allocation_success =3D BROTLI_TRUE; - result =3D DecodeContextMap( - s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS, - &s->num_dist_htrees, &s->dist_context_map, s); - if (result !=3D BROTLI_DECODER_SUCCESS) { - break; - } - allocation_success &=3D BrotliDecoderHuffmanTreeGroupInit( - s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS, - BROTLI_NUM_LITERAL_SYMBOLS, s->num_literal_htrees); - allocation_success &=3D BrotliDecoderHuffmanTreeGroupInit( - s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS, - BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]); - allocation_success &=3D BrotliDecoderHuffmanTreeGroupInit( - s, &s->distance_hgroup, num_distance_codes, - max_distance_symbol, s->num_dist_htrees); - if (!allocation_success) { - return SaveErrorCode(s, - BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS)); - } - s->loop_counter =3D 0; - s->state =3D BROTLI_STATE_TREE_GROUP; - } - /* Fall through. */ - - case BROTLI_STATE_TREE_GROUP: { - HuffmanTreeGroup* hgroup =3D NULL; - switch (s->loop_counter) { - case 0: hgroup =3D &s->literal_hgroup; break; - case 1: hgroup =3D &s->insert_copy_hgroup; break; - case 2: hgroup =3D &s->distance_hgroup; break; - default: return SaveErrorCode(s, BROTLI_FAILURE( - BROTLI_DECODER_ERROR_UNREACHABLE)); - } - result =3D HuffmanTreeGroupDecode(hgroup, s); - if (result !=3D BROTLI_DECODER_SUCCESS) break; - s->loop_counter++; - if (s->loop_counter >=3D 3) { - PrepareLiteralDecoding(s); - s->dist_context_map_slice =3D s->dist_context_map; - s->htree_command =3D s->insert_copy_hgroup.htrees[0]; - if (!BrotliEnsureRingBuffer(s)) { - result =3D BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUF= FER_2); - break; - } - s->state =3D BROTLI_STATE_COMMAND_BEGIN; - } - break; - } - - case BROTLI_STATE_COMMAND_BEGIN: - /* Fall through. */ - case BROTLI_STATE_COMMAND_INNER: - /* Fall through. */ - case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS: - /* Fall through. */ - case BROTLI_STATE_COMMAND_POST_WRAP_COPY: - result =3D ProcessCommands(s); - if (result =3D=3D BROTLI_DECODER_NEEDS_MORE_INPUT) { - result =3D SafeProcessCommands(s); - } - break; - - case BROTLI_STATE_COMMAND_INNER_WRITE: - /* Fall through. */ - case BROTLI_STATE_COMMAND_POST_WRITE_1: - /* Fall through. */ - case BROTLI_STATE_COMMAND_POST_WRITE_2: - result =3D WriteRingBuffer( - s, available_out, next_out, total_out, BROTLI_FALSE); - if (result !=3D BROTLI_DECODER_SUCCESS) { - break; - } - WrapRingBuffer(s); - if (s->ringbuffer_size =3D=3D 1 << s->window_bits) { - s->max_distance =3D s->max_backward_distance; - } - if (s->state =3D=3D BROTLI_STATE_COMMAND_POST_WRITE_1) { - if (s->meta_block_remaining_len =3D=3D 0) { - /* Next metablock, if any. */ - s->state =3D BROTLI_STATE_METABLOCK_DONE; - } else { - s->state =3D BROTLI_STATE_COMMAND_BEGIN; - } - break; - } else if (s->state =3D=3D BROTLI_STATE_COMMAND_POST_WRITE_2) { - s->state =3D BROTLI_STATE_COMMAND_POST_WRAP_COPY; - } else { /* BROTLI_STATE_COMMAND_INNER_WRITE */ - if (s->loop_counter =3D=3D 0) { - if (s->meta_block_remaining_len =3D=3D 0) { - s->state =3D BROTLI_STATE_METABLOCK_DONE; - } else { - s->state =3D BROTLI_STATE_COMMAND_POST_DECODE_LITERALS; - } - break; - } - s->state =3D BROTLI_STATE_COMMAND_INNER; - } - break; - - case BROTLI_STATE_METABLOCK_DONE: - if (s->meta_block_remaining_len < 0) { - result =3D BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LEN= GTH_2); - break; - } - BrotliDecoderStateCleanupAfterMetablock(s); - if (!s->is_last_metablock) { - s->state =3D BROTLI_STATE_METABLOCK_BEGIN; - break; - } - if (!BrotliJumpToByteBoundary(br)) { - result =3D BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2= ); - break; - } - if (s->buffer_length =3D=3D 0) { - BrotliBitReaderUnload(br); - *available_in =3D br->avail_in; - *next_in =3D br->next_in; - } - s->state =3D BROTLI_STATE_DONE; - /* Fall through. */ - - case BROTLI_STATE_DONE: - if (s->ringbuffer !=3D 0) { - result =3D WriteRingBuffer( - s, available_out, next_out, total_out, BROTLI_TRUE); - if (result !=3D BROTLI_DECODER_SUCCESS) { - break; - } - } - return SaveErrorCode(s, result); - } - } - return SaveErrorCode(s, result); -} - -BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s) { - /* After unrecoverable error remaining output is considered nonsensical= . */ - if ((int)s->error_code < 0) { - return BROTLI_FALSE; - } - return TO_BROTLI_BOOL( - s->ringbuffer !=3D 0 && UnwrittenBytes(s, BROTLI_FALSE) !=3D 0); -} - -const uint8_t* BrotliDecoderTakeOutput(BrotliDecoderState* s, size_t* siz= e) { - uint8_t* result =3D 0; - size_t available_out =3D *size ? *size : 1u << 24; - size_t requested_out =3D available_out; - BrotliDecoderErrorCode status; - if ((s->ringbuffer =3D=3D 0) || ((int)s->error_code < 0)) { - *size =3D 0; - return 0; - } - WrapRingBuffer(s); - status =3D WriteRingBuffer(s, &available_out, &result, 0, BROTLI_TRUE); - /* Either WriteRingBuffer returns those "success" codes... */ - if (status =3D=3D BROTLI_DECODER_SUCCESS || - status =3D=3D BROTLI_DECODER_NEEDS_MORE_OUTPUT) { - *size =3D requested_out - available_out; - } else { - /* ... or stream is broken. Normally this should be caught by - BrotliDecoderDecompressStream, this is just a safeguard. */ - if ((int)status < 0) SaveErrorCode(s, status); - *size =3D 0; - result =3D 0; - } - return result; -} - -BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* s) { - return TO_BROTLI_BOOL(s->state !=3D BROTLI_STATE_UNINITED || - BrotliGetAvailableBits(&s->br) !=3D 0); -} - -BROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* s) { - return TO_BROTLI_BOOL(s->state =3D=3D BROTLI_STATE_DONE) && - !BrotliDecoderHasMoreOutput(s); -} - -BrotliDecoderErrorCode BrotliDecoderGetErrorCode(const BrotliDecoderState= * s) { - return (BrotliDecoderErrorCode)s->error_code; -} - -const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c) { - switch (c) { -#define BROTLI_ERROR_CODE_CASE_(PREFIX, NAME, CODE) \ - case BROTLI_DECODER ## PREFIX ## NAME: return #NAME; -#define BROTLI_NOTHING_ - BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_CASE_, BROTLI_NOTHI= NG_) -#undef BROTLI_ERROR_CODE_CASE_ -#undef BROTLI_NOTHING_ - default: return "INVALID"; - } -} - -uint32_t BrotliDecoderVersion() { - return BROTLI_VERSION; -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/dec/huffman.c b/BaseTools/S= ource/C/BrotliCompress/dec/huffman.c deleted file mode 100644 index 4ad0dc6bd0eb..000000000000 --- a/BaseTools/Source/C/BrotliCompress/dec/huffman.c +++ /dev/null @@ -1,356 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Utilities for building Huffman decoding tables. */ - -#include "./huffman.h" - -#include /* memcpy, memset */ - -#include "../common/constants.h" -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define BROTLI_REVERSE_BITS_MAX 8 - -#if defined(BROTLI_RBIT) -#define BROTLI_REVERSE_BITS_BASE \ - ((sizeof(brotli_reg_t) << 3) - BROTLI_REVERSE_BITS_MAX) -#else -#define BROTLI_REVERSE_BITS_BASE 0 -static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] =3D { - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, - 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, - 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, - 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, - 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, - 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, - 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, - 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, - 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, - 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, - 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, - 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, - 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, - 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, - 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, - 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, - 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, - 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, - 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, - 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, - 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, - 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, - 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, - 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, - 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF -}; -#endif /* BROTLI_RBIT */ - -#define BROTLI_REVERSE_BITS_LOWEST \ - ((brotli_reg_t)1 << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_= BASE)) - -/* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE, BROTLI_REVERSE_BITS_M= AX), - where reverse(value, len) is the bit-wise reversal of the len least - significant bits of value. */ -static BROTLI_INLINE brotli_reg_t BrotliReverseBits(brotli_reg_t num) { -#if defined(BROTLI_RBIT) - return BROTLI_RBIT(num); -#else - return kReverseBits[num]; -#endif -} - -/* Stores code in table[0], table[step], table[2*step], ..., table[end] *= / -/* Assumes that end is an integer multiple of step */ -static BROTLI_INLINE void ReplicateValue(HuffmanCode* table, - int step, int end, - HuffmanCode code) { - do { - end -=3D step; - table[end] =3D code; - } while (end > 0); -} - -/* Returns the table width of the next 2nd level table. |count| is the hi= stogram - of bit lengths for the remaining symbols, |len| is the code length of = the - next processed symbol. */ -static BROTLI_INLINE int NextTableBitSize(const uint16_t* const count, - int len, int root_bits) { - int left =3D 1 << (len - root_bits); - while (len < BROTLI_HUFFMAN_MAX_CODE_LENGTH) { - left -=3D count[len]; - if (left <=3D 0) break; - ++len; - left <<=3D 1; - } - return len - root_bits; -} - -void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table, - const uint8_t* const code_lengths= , - uint16_t* count) { - HuffmanCode code; /* current table entry */ - int symbol; /* symbol index in original or sorted table */ - brotli_reg_t key; /* prefix code */ - brotli_reg_t key_step; /* prefix code addend */ - int step; /* step size to replicate values in current tab= le */ - int table_size; /* size of current table */ - int sorted[BROTLI_CODE_LENGTH_CODES]; /* symbols sorted by code length= */ - /* offsets in sorted table for each length */ - int offset[BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1]; - int bits; - int bits_count; - BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH <=3D - BROTLI_REVERSE_BITS_MAX); - - /* Generate offsets into sorted symbol table by code length. */ - symbol =3D -1; - bits =3D 1; - BROTLI_REPEAT(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH, { - symbol +=3D count[bits]; - offset[bits] =3D symbol; - bits++; - }); - /* Symbols with code length 0 are placed after all other symbols. */ - offset[0] =3D BROTLI_CODE_LENGTH_CODES - 1; - - /* Sort symbols by length, by symbol order within each length. */ - symbol =3D BROTLI_CODE_LENGTH_CODES; - do { - BROTLI_REPEAT(6, { - symbol--; - sorted[offset[code_lengths[symbol]]--] =3D symbol; - }); - } while (symbol !=3D 0); - - table_size =3D 1 << BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH; - - /* Special case: all symbols but one have 0 code length. */ - if (offset[0] =3D=3D 0) { - code.bits =3D 0; - code.value =3D (uint16_t)sorted[0]; - for (key =3D 0; key < (brotli_reg_t)table_size; ++key) { - table[key] =3D code; - } - return; - } - - /* Fill in table. */ - key =3D 0; - key_step =3D BROTLI_REVERSE_BITS_LOWEST; - symbol =3D 0; - bits =3D 1; - step =3D 2; - do { - code.bits =3D (uint8_t)bits; - for (bits_count =3D count[bits]; bits_count !=3D 0; --bits_count) { - code.value =3D (uint16_t)sorted[symbol++]; - ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, co= de); - key +=3D key_step; - } - step <<=3D 1; - key_step >>=3D 1; - } while (++bits <=3D BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH); -} - -uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table, - int root_bits, - const uint16_t* const symbol_lists, - uint16_t* count) { - HuffmanCode code; /* current table entry */ - HuffmanCode* table; /* next available space in table */ - int len; /* current code length */ - int symbol; /* symbol index in original or sorted table */ - brotli_reg_t key; /* prefix code */ - brotli_reg_t key_step; /* prefix code addend */ - brotli_reg_t sub_key; /* 2nd level table prefix code */ - brotli_reg_t sub_key_step; /* 2nd level table prefix code addend */ - int step; /* step size to replicate values in current tab= le */ - int table_bits; /* key length of current table */ - int table_size; /* size of current table */ - int total_size; /* sum of root table size and 2nd level table s= izes */ - int max_length =3D -1; - int bits; - int bits_count; - - BROTLI_DCHECK(root_bits <=3D BROTLI_REVERSE_BITS_MAX); - BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH - root_bits <=3D - BROTLI_REVERSE_BITS_MAX); - - while (symbol_lists[max_length] =3D=3D 0xFFFF) max_length--; - max_length +=3D BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1; - - table =3D root_table; - table_bits =3D root_bits; - table_size =3D 1 << table_bits; - total_size =3D table_size; - - /* Fill in the root table. Reduce the table size to if possible, - and create the repetitions by memcpy. */ - if (table_bits > max_length) { - table_bits =3D max_length; - table_size =3D 1 << table_bits; - } - key =3D 0; - key_step =3D BROTLI_REVERSE_BITS_LOWEST; - bits =3D 1; - step =3D 2; - do { - code.bits =3D (uint8_t)bits; - symbol =3D bits - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1); - for (bits_count =3D count[bits]; bits_count !=3D 0; --bits_count) { - symbol =3D symbol_lists[symbol]; - code.value =3D (uint16_t)symbol; - ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, co= de); - key +=3D key_step; - } - step <<=3D 1; - key_step >>=3D 1; - } while (++bits <=3D table_bits); - - /* If root_bits !=3D table_bits then replicate to fill the remaining sl= ots. */ - while (total_size !=3D table_size) { - memcpy(&table[table_size], &table[0], - (size_t)table_size * sizeof(table[0])); - table_size <<=3D 1; - } - - /* Fill in 2nd level tables and add pointers to root table. */ - key_step =3D BROTLI_REVERSE_BITS_LOWEST >> (root_bits - 1); - sub_key =3D (BROTLI_REVERSE_BITS_LOWEST << 1); - sub_key_step =3D BROTLI_REVERSE_BITS_LOWEST; - for (len =3D root_bits + 1, step =3D 2; len <=3D max_length; ++len) { - symbol =3D len - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1); - for (; count[len] !=3D 0; --count[len]) { - if (sub_key =3D=3D (BROTLI_REVERSE_BITS_LOWEST << 1U)) { - table +=3D table_size; - table_bits =3D NextTableBitSize(count, len, root_bits); - table_size =3D 1 << table_bits; - total_size +=3D table_size; - sub_key =3D BrotliReverseBits(key); - key +=3D key_step; - root_table[sub_key].bits =3D (uint8_t)(table_bits + root_bits); - root_table[sub_key].value =3D - (uint16_t)(((size_t)(table - root_table)) - sub_key); - sub_key =3D 0; - } - code.bits =3D (uint8_t)(len - root_bits); - symbol =3D symbol_lists[symbol]; - code.value =3D (uint16_t)symbol; - ReplicateValue( - &table[BrotliReverseBits(sub_key)], step, table_size, code); - sub_key +=3D sub_key_step; - } - step <<=3D 1; - sub_key_step >>=3D 1; - } - return (uint32_t)total_size; -} - -uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table, - int root_bits, - uint16_t* val, - uint32_t num_symbols) { - uint32_t table_size =3D 1; - const uint32_t goal_size =3D 1U << root_bits; - switch (num_symbols) { - case 0: - table[0].bits =3D 0; - table[0].value =3D val[0]; - break; - case 1: - table[0].bits =3D 1; - table[1].bits =3D 1; - if (val[1] > val[0]) { - table[0].value =3D val[0]; - table[1].value =3D val[1]; - } else { - table[0].value =3D val[1]; - table[1].value =3D val[0]; - } - table_size =3D 2; - break; - case 2: - table[0].bits =3D 1; - table[0].value =3D val[0]; - table[2].bits =3D 1; - table[2].value =3D val[0]; - if (val[2] > val[1]) { - table[1].value =3D val[1]; - table[3].value =3D val[2]; - } else { - table[1].value =3D val[2]; - table[3].value =3D val[1]; - } - table[1].bits =3D 2; - table[3].bits =3D 2; - table_size =3D 4; - break; - case 3: { - int i, k; - for (i =3D 0; i < 3; ++i) { - for (k =3D i + 1; k < 4; ++k) { - if (val[k] < val[i]) { - uint16_t t =3D val[k]; - val[k] =3D val[i]; - val[i] =3D t; - } - } - } - for (i =3D 0; i < 4; ++i) { - table[i].bits =3D 2; - } - table[0].value =3D val[0]; - table[2].value =3D val[1]; - table[1].value =3D val[2]; - table[3].value =3D val[3]; - table_size =3D 4; - break; - } - case 4: { - int i; - if (val[3] < val[2]) { - uint16_t t =3D val[3]; - val[3] =3D val[2]; - val[2] =3D t; - } - for (i =3D 0; i < 7; ++i) { - table[i].value =3D val[0]; - table[i].bits =3D (uint8_t)(1 + (i & 1)); - } - table[1].value =3D val[1]; - table[3].value =3D val[2]; - table[5].value =3D val[1]; - table[7].value =3D val[3]; - table[3].bits =3D 3; - table[7].bits =3D 3; - table_size =3D 8; - break; - } - } - while (table_size !=3D goal_size) { - memcpy(&table[table_size], &table[0], - (size_t)table_size * sizeof(table[0])); - table_size <<=3D 1; - } - return goal_size; -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/dec/state.c b/BaseTools/Sou= rce/C/BrotliCompress/dec/state.c deleted file mode 100644 index 88ecfb68b684..000000000000 --- a/BaseTools/Source/C/BrotliCompress/dec/state.c +++ /dev/null @@ -1,164 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -#include "./state.h" - -#include /* free, malloc */ - -#include -#include "./huffman.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s, - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaqu= e) { - if (!alloc_func) { - s->alloc_func =3D BrotliDefaultAllocFunc; - s->free_func =3D BrotliDefaultFreeFunc; - s->memory_manager_opaque =3D 0; - } else { - s->alloc_func =3D alloc_func; - s->free_func =3D free_func; - s->memory_manager_opaque =3D opaque; - } - - s->error_code =3D 0; /* BROTLI_DECODER_NO_ERROR */ - - BrotliInitBitReader(&s->br); - s->state =3D BROTLI_STATE_UNINITED; - s->large_window =3D 0; - s->substate_metablock_header =3D BROTLI_STATE_METABLOCK_HEADER_NONE; - s->substate_tree_group =3D BROTLI_STATE_TREE_GROUP_NONE; - s->substate_context_map =3D BROTLI_STATE_CONTEXT_MAP_NONE; - s->substate_uncompressed =3D BROTLI_STATE_UNCOMPRESSED_NONE; - s->substate_huffman =3D BROTLI_STATE_HUFFMAN_NONE; - s->substate_decode_uint8 =3D BROTLI_STATE_DECODE_UINT8_NONE; - s->substate_read_block_length =3D BROTLI_STATE_READ_BLOCK_LENGTH_NONE; - - s->buffer_length =3D 0; - s->loop_counter =3D 0; - s->pos =3D 0; - s->rb_roundtrips =3D 0; - s->partial_pos_out =3D 0; - - s->block_type_trees =3D NULL; - s->block_len_trees =3D NULL; - s->ringbuffer =3D NULL; - s->ringbuffer_size =3D 0; - s->new_ringbuffer_size =3D 0; - s->ringbuffer_mask =3D 0; - - s->context_map =3D NULL; - s->context_modes =3D NULL; - s->dist_context_map =3D NULL; - s->context_map_slice =3D NULL; - s->dist_context_map_slice =3D NULL; - - s->sub_loop_counter =3D 0; - - s->literal_hgroup.codes =3D NULL; - s->literal_hgroup.htrees =3D NULL; - s->insert_copy_hgroup.codes =3D NULL; - s->insert_copy_hgroup.htrees =3D NULL; - s->distance_hgroup.codes =3D NULL; - s->distance_hgroup.htrees =3D NULL; - - s->is_last_metablock =3D 0; - s->is_uncompressed =3D 0; - s->is_metadata =3D 0; - s->should_wrap_ringbuffer =3D 0; - s->canny_ringbuffer_allocation =3D 1; - - s->window_bits =3D 0; - s->max_distance =3D 0; - s->dist_rb[0] =3D 16; - s->dist_rb[1] =3D 15; - s->dist_rb[2] =3D 11; - s->dist_rb[3] =3D 4; - s->dist_rb_idx =3D 0; - s->block_type_trees =3D NULL; - s->block_len_trees =3D NULL; - - /* Make small negative indexes addressable. */ - s->symbol_lists =3D &s->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LEN= GTH + 1]; - - s->mtf_upper_bound =3D 63; - - s->dictionary =3D BrotliGetDictionary(); - s->transforms =3D BrotliGetTransforms(); - - return BROTLI_TRUE; -} - -void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s) { - s->meta_block_remaining_len =3D 0; - s->block_length[0] =3D 1U << 24; - s->block_length[1] =3D 1U << 24; - s->block_length[2] =3D 1U << 24; - s->num_block_types[0] =3D 1; - s->num_block_types[1] =3D 1; - s->num_block_types[2] =3D 1; - s->block_type_rb[0] =3D 1; - s->block_type_rb[1] =3D 0; - s->block_type_rb[2] =3D 1; - s->block_type_rb[3] =3D 0; - s->block_type_rb[4] =3D 1; - s->block_type_rb[5] =3D 0; - s->context_map =3D NULL; - s->context_modes =3D NULL; - s->dist_context_map =3D NULL; - s->context_map_slice =3D NULL; - s->literal_htree =3D NULL; - s->dist_context_map_slice =3D NULL; - s->dist_htree_index =3D 0; - s->context_lookup =3D NULL; - s->literal_hgroup.codes =3D NULL; - s->literal_hgroup.htrees =3D NULL; - s->insert_copy_hgroup.codes =3D NULL; - s->insert_copy_hgroup.htrees =3D NULL; - s->distance_hgroup.codes =3D NULL; - s->distance_hgroup.htrees =3D NULL; -} - -void BrotliDecoderStateCleanupAfterMetablock(BrotliDecoderState* s) { - BROTLI_DECODER_FREE(s, s->context_modes); - BROTLI_DECODER_FREE(s, s->context_map); - BROTLI_DECODER_FREE(s, s->dist_context_map); - BROTLI_DECODER_FREE(s, s->literal_hgroup.htrees); - BROTLI_DECODER_FREE(s, s->insert_copy_hgroup.htrees); - BROTLI_DECODER_FREE(s, s->distance_hgroup.htrees); -} - -void BrotliDecoderStateCleanup(BrotliDecoderState* s) { - BrotliDecoderStateCleanupAfterMetablock(s); - - BROTLI_DECODER_FREE(s, s->ringbuffer); - BROTLI_DECODER_FREE(s, s->block_type_trees); -} - -BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(BrotliDecoderState* s, - HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t max_symbol, - uint32_t ntrees) { - /* Pack two allocations into one */ - const size_t max_table_size =3D kMaxHuffmanTableSize[(alphabet_size + 3= 1) >> 5]; - const size_t code_size =3D sizeof(HuffmanCode) * ntrees * max_table_siz= e; - const size_t htree_size =3D sizeof(HuffmanCode*) * ntrees; - /* Pointer alignment is, hopefully, wider than sizeof(HuffmanCode). */ - HuffmanCode** p =3D (HuffmanCode**)BROTLI_DECODER_ALLOC(s, - code_size + htree_size); - group->alphabet_size =3D (uint16_t)alphabet_size; - group->max_symbol =3D (uint16_t)max_symbol; - group->num_htrees =3D (uint16_t)ntrees; - group->htrees =3D p; - group->codes =3D (HuffmanCode*)(&p[ntrees]); - return !!p; -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references.c b= /BaseTools/Source/C/BrotliCompress/enc/backward_references.c deleted file mode 100644 index d14679abcddc..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/backward_references.c +++ /dev/null @@ -1,144 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Function to find backward reference copies. */ - -#include "./backward_references.h" - -#include "../common/constants.h" -#include "../common/dictionary.h" -#include "../common/platform.h" -#include -#include "./command.h" -#include "./dictionary_hash.h" -#include "./memory.h" -#include "./quality.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance, - size_t max_distance, - const int* dist_cache) { - if (distance <=3D max_distance) { - size_t distance_plus_3 =3D distance + 3; - size_t offset0 =3D distance_plus_3 - (size_t)dist_cache[0]; - size_t offset1 =3D distance_plus_3 - (size_t)dist_cache[1]; - if (distance =3D=3D (size_t)dist_cache[0]) { - return 0; - } else if (distance =3D=3D (size_t)dist_cache[1]) { - return 1; - } else if (offset0 < 7) { - return (0x9750468 >> (4 * offset0)) & 0xF; - } else if (offset1 < 7) { - return (0xFDB1ACE >> (4 * offset1)) & 0xF; - } else if (distance =3D=3D (size_t)dist_cache[2]) { - return 2; - } else if (distance =3D=3D (size_t)dist_cache[3]) { - return 3; - } - } - return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1; -} - -#define EXPAND_CAT(a, b) CAT(a, b) -#define CAT(a, b) a ## b -#define FN(X) EXPAND_CAT(X, HASHER()) -#define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER())) - -#define PREFIX() N - -#define HASHER() H2 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H3 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H4 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H5 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H6 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H40 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H41 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H42 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H54 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H35 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H55 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#define HASHER() H65 -/* NOLINTNEXTLINE(build/include) */ -#include "./backward_references_inc.h" -#undef HASHER - -#undef PREFIX - -#undef EXPORT_FN -#undef FN -#undef CAT -#undef EXPAND_CAT - -void BrotliCreateBackwardReferences( - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, - Command* commands, size_t* num_commands, size_t* num_literals) { - switch (params->hasher.type) { -#define CASE_(N) \ - case N: \ - CreateBackwardReferencesNH ## N( \ - num_bytes, position, ringbuffer, \ - ringbuffer_mask, params, hasher, dist_cache, \ - last_insert_len, commands, num_commands, num_literals); \ - return; - FOR_GENERIC_HASHERS(CASE_) -#undef CASE_ - default: - break; - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.= c b/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c deleted file mode 100644 index 89320335ea32..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c +++ /dev/null @@ -1,830 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Function to find backward reference copies. */ - -#include "./backward_references_hq.h" - -#include /* memcpy, memset */ - -#include "../common/constants.h" -#include "../common/platform.h" -#include -#include "./command.h" -#include "./fast_log.h" -#include "./find_match_length.h" -#include "./literal_cost.h" -#include "./memory.h" -#include "./params.h" -#include "./prefix.h" -#include "./quality.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE 544 - -static const float kInfinity =3D 1.7e38f; /* ~=3D 2 ^ 127 */ - -static const uint32_t kDistanceCacheIndex[] =3D { - 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, -}; -static const int kDistanceCacheOffset[] =3D { - 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3 -}; - -void BrotliInitZopfliNodes(ZopfliNode* array, size_t length) { - ZopfliNode stub; - size_t i; - stub.length =3D 1; - stub.distance =3D 0; - stub.dcode_insert_length =3D 0; - stub.u.cost =3D kInfinity; - for (i =3D 0; i < length; ++i) array[i] =3D stub; -} - -static BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode* self= ) { - return self->length & 0x1FFFFFF; -} - -static BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode* self= ) { - const uint32_t modifier =3D self->length >> 25; - return ZopfliNodeCopyLength(self) + 9u - modifier; -} - -static BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode* se= lf) { - return self->distance; -} - -static BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode* se= lf) { - const uint32_t short_code =3D self->dcode_insert_length >> 27; - return short_code =3D=3D 0 ? - ZopfliNodeCopyDistance(self) + BROTLI_NUM_DISTANCE_SHORT_CODES - 1 = : - short_code - 1; -} - -static BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const ZopfliNode* s= elf) { - return ZopfliNodeCopyLength(self) + (self->dcode_insert_length & 0x7FFF= FFF); -} - -/* Histogram based cost model for zopflification. */ -typedef struct ZopfliCostModel { - /* The insert and copy length symbols. */ - float cost_cmd_[BROTLI_NUM_COMMAND_SYMBOLS]; - float* cost_dist_; - uint32_t distance_histogram_size; - /* Cumulative costs of literals per position in the stream. */ - float* literal_costs_; - float min_cost_cmd_; - size_t num_bytes_; -} ZopfliCostModel; - -static void InitZopfliCostModel( - MemoryManager* m, ZopfliCostModel* self, const BrotliDistanceParams* = dist, - size_t num_bytes) { - uint32_t distance_histogram_size =3D dist->alphabet_size; - if (distance_histogram_size > BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SI= ZE) { - distance_histogram_size =3D BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SI= ZE; - } - self->num_bytes_ =3D num_bytes; - self->literal_costs_ =3D BROTLI_ALLOC(m, float, num_bytes + 2); - self->cost_dist_ =3D BROTLI_ALLOC(m, float, dist->alphabet_size); - self->distance_histogram_size =3D distance_histogram_size; - if (BROTLI_IS_OOM(m)) return; -} - -static void CleanupZopfliCostModel(MemoryManager* m, ZopfliCostModel* sel= f) { - BROTLI_FREE(m, self->literal_costs_); - BROTLI_FREE(m, self->cost_dist_); -} - -static void SetCost(const uint32_t* histogram, size_t histogram_size, - BROTLI_BOOL literal_histogram, float* cost) { - size_t sum =3D 0; - size_t missing_symbol_sum; - float log2sum; - float missing_symbol_cost; - size_t i; - for (i =3D 0; i < histogram_size; i++) { - sum +=3D histogram[i]; - } - log2sum =3D (float)FastLog2(sum); - missing_symbol_sum =3D sum; - if (!literal_histogram) { - for (i =3D 0; i < histogram_size; i++) { - if (histogram[i] =3D=3D 0) missing_symbol_sum++; - } - } - missing_symbol_cost =3D (float)FastLog2(missing_symbol_sum) + 2; - for (i =3D 0; i < histogram_size; i++) { - if (histogram[i] =3D=3D 0) { - cost[i] =3D missing_symbol_cost; - continue; - } - - /* Shannon bits for this symbol. */ - cost[i] =3D log2sum - (float)FastLog2(histogram[i]); - - /* Cannot be coded with less than 1 bit */ - if (cost[i] < 1) cost[i] =3D 1; - } -} - -static void ZopfliCostModelSetFromCommands(ZopfliCostModel* self, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const Command* commands, - size_t num_commands, - size_t last_insert_len) { - uint32_t histogram_literal[BROTLI_NUM_LITERAL_SYMBOLS]; - uint32_t histogram_cmd[BROTLI_NUM_COMMAND_SYMBOLS]; - uint32_t histogram_dist[BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE]; - float cost_literal[BROTLI_NUM_LITERAL_SYMBOLS]; - size_t pos =3D position - last_insert_len; - float min_cost_cmd =3D kInfinity; - size_t i; - float* cost_cmd =3D self->cost_cmd_; - - memset(histogram_literal, 0, sizeof(histogram_literal)); - memset(histogram_cmd, 0, sizeof(histogram_cmd)); - memset(histogram_dist, 0, sizeof(histogram_dist)); - - for (i =3D 0; i < num_commands; i++) { - size_t inslength =3D commands[i].insert_len_; - size_t copylength =3D CommandCopyLen(&commands[i]); - size_t distcode =3D commands[i].dist_prefix_ & 0x3FF; - size_t cmdcode =3D commands[i].cmd_prefix_; - size_t j; - - histogram_cmd[cmdcode]++; - if (cmdcode >=3D 128) histogram_dist[distcode]++; - - for (j =3D 0; j < inslength; j++) { - histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++; - } - - pos +=3D inslength + copylength; - } - - SetCost(histogram_literal, BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_TRUE, - cost_literal); - SetCost(histogram_cmd, BROTLI_NUM_COMMAND_SYMBOLS, BROTLI_FALSE, - cost_cmd); - SetCost(histogram_dist, self->distance_histogram_size, BROTLI_FALSE, - self->cost_dist_); - - for (i =3D 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) { - min_cost_cmd =3D BROTLI_MIN(float, min_cost_cmd, cost_cmd[i]); - } - self->min_cost_cmd_ =3D min_cost_cmd; - - { - float* literal_costs =3D self->literal_costs_; - float literal_carry =3D 0.0; - size_t num_bytes =3D self->num_bytes_; - literal_costs[0] =3D 0.0; - for (i =3D 0; i < num_bytes; ++i) { - literal_carry +=3D - cost_literal[ringbuffer[(position + i) & ringbuffer_mask]]; - literal_costs[i + 1] =3D literal_costs[i] + literal_carry; - literal_carry -=3D literal_costs[i + 1] - literal_costs[i]; - } - } -} - -static void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask) { - float* literal_costs =3D self->literal_costs_; - float literal_carry =3D 0.0; - float* cost_dist =3D self->cost_dist_; - float* cost_cmd =3D self->cost_cmd_; - size_t num_bytes =3D self->num_bytes_; - size_t i; - BrotliEstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask, - ringbuffer, &literal_costs[1]); - literal_costs[0] =3D 0.0; - for (i =3D 0; i < num_bytes; ++i) { - literal_carry +=3D literal_costs[i + 1]; - literal_costs[i + 1] =3D literal_costs[i] + literal_carry; - literal_carry -=3D literal_costs[i + 1] - literal_costs[i]; - } - for (i =3D 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) { - cost_cmd[i] =3D (float)FastLog2(11 + (uint32_t)i); - } - for (i =3D 0; i < self->distance_histogram_size; ++i) { - cost_dist[i] =3D (float)FastLog2(20 + (uint32_t)i); - } - self->min_cost_cmd_ =3D (float)FastLog2(11); -} - -static BROTLI_INLINE float ZopfliCostModelGetCommandCost( - const ZopfliCostModel* self, uint16_t cmdcode) { - return self->cost_cmd_[cmdcode]; -} - -static BROTLI_INLINE float ZopfliCostModelGetDistanceCost( - const ZopfliCostModel* self, size_t distcode) { - return self->cost_dist_[distcode]; -} - -static BROTLI_INLINE float ZopfliCostModelGetLiteralCosts( - const ZopfliCostModel* self, size_t from, size_t to) { - return self->literal_costs_[to] - self->literal_costs_[from]; -} - -static BROTLI_INLINE float ZopfliCostModelGetMinCostCmd( - const ZopfliCostModel* self) { - return self->min_cost_cmd_; -} - -/* REQUIRES: len >=3D 2, start_pos <=3D pos */ -/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */ -/* Maintains the "ZopfliNode array invariant". */ -static BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos, - size_t start_pos, size_t len, size_t len_code, size_t dist, - size_t short_code, float cost) { - ZopfliNode* next =3D &nodes[pos + len]; - next->length =3D (uint32_t)(len | ((len + 9u - len_code) << 25)); - next->distance =3D (uint32_t)dist; - next->dcode_insert_length =3D (uint32_t)( - (short_code << 27) | (pos - start_pos)); - next->u.cost =3D cost; -} - -typedef struct PosData { - size_t pos; - int distance_cache[4]; - float costdiff; - float cost; -} PosData; - -/* Maintains the smallest 8 cost difference together with their positions= */ -typedef struct StartPosQueue { - PosData q_[8]; - size_t idx_; -} StartPosQueue; - -static BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) { - self->idx_ =3D 0; -} - -static size_t StartPosQueueSize(const StartPosQueue* self) { - return BROTLI_MIN(size_t, self->idx_, 8); -} - -static void StartPosQueuePush(StartPosQueue* self, const PosData* posdata= ) { - size_t offset =3D ~(self->idx_++) & 7; - size_t len =3D StartPosQueueSize(self); - size_t i; - PosData* q =3D self->q_; - q[offset] =3D *posdata; - /* Restore the sorted order. In the list of |len| items at most |len - = 1| - adjacent element comparisons / swaps are required. */ - for (i =3D 1; i < len; ++i) { - if (q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff) { - BROTLI_SWAP(PosData, q, offset & 7, (offset + 1) & 7); - } - ++offset; - } -} - -static const PosData* StartPosQueueAt(const StartPosQueue* self, size_t k= ) { - return &self->q_[(k - self->idx_) & 7]; -} - -/* Returns the minimum possible copy length that can improve the cost of = any */ -/* future position. */ -static size_t ComputeMinimumCopyLength(const float start_cost, - const ZopfliNode* nodes, - const size_t num_bytes, - const size_t pos) { - /* Compute the minimum possible cost of reaching any future position. *= / - float min_cost =3D start_cost; - size_t len =3D 2; - size_t next_len_bucket =3D 4; - size_t next_len_offset =3D 10; - while (pos + len <=3D num_bytes && nodes[pos + len].u.cost <=3D min_cos= t) { - /* We already reached (pos + len) with no more cost than the minimum - possible cost of reaching anything from this pos, so there is no p= oint in - looking for lengths <=3D len. */ - ++len; - if (len =3D=3D next_len_offset) { - /* We reached the next copy length code bucket, so we add one more - extra bit to the minimum cost. */ - min_cost +=3D 1.0f; - next_len_offset +=3D next_len_bucket; - next_len_bucket *=3D 2; - } - } - return len; -} - -/* REQUIRES: nodes[pos].cost < kInfinity - REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". *= / -static uint32_t ComputeDistanceShortcut(const size_t block_start, - const size_t pos, - const size_t max_backward, - const size_t gap, - const ZopfliNode* nodes) { - const size_t clen =3D ZopfliNodeCopyLength(&nodes[pos]); - const size_t ilen =3D nodes[pos].dcode_insert_length & 0x7FFFFFF; - const size_t dist =3D ZopfliNodeCopyDistance(&nodes[pos]); - /* Since |block_start + pos| is the end position of the command, the co= py part - starts from |block_start + pos - clen|. Distances that are greater t= han - this or greater than |max_backward| are static dictionary references= , and - do not update the last distances. Also distance code 0 (last distanc= e) - does not update the last distances. */ - if (pos =3D=3D 0) { - return 0; - } else if (dist + clen <=3D block_start + pos + gap && - dist <=3D max_backward + gap && - ZopfliNodeDistanceCode(&nodes[pos]) > 0) { - return (uint32_t)pos; - } else { - return nodes[pos - clen - ilen].u.shortcut; - } -} - -/* Fills in dist_cache[0..3] with the last four distances (as defined by - Section 4. of the Spec) that would be used at (block_start + pos) if w= e - used the shortest path of commands from block_start, computed from - nodes[0..pos]. The last four distances at block_start are in - starting_dist_cache[0..3]. - REQUIRES: nodes[pos].cost < kInfinity - REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". *= / -static void ComputeDistanceCache(const size_t pos, - const int* starting_dist_cache, - const ZopfliNode* nodes, - int* dist_cache) { - int idx =3D 0; - size_t p =3D nodes[pos].u.shortcut; - while (idx < 4 && p > 0) { - const size_t ilen =3D nodes[p].dcode_insert_length & 0x7FFFFFF; - const size_t clen =3D ZopfliNodeCopyLength(&nodes[p]); - const size_t dist =3D ZopfliNodeCopyDistance(&nodes[p]); - dist_cache[idx++] =3D (int)dist; - /* Because of prerequisite, p >=3D clen + ilen >=3D 2. */ - p =3D nodes[p - clen - ilen].u.shortcut; - } - for (; idx < 4; ++idx) { - dist_cache[idx] =3D *starting_dist_cache++; - } -} - -/* Maintains "ZopfliNode array invariant" and pushes node to the queue, i= f it - is eligible. */ -static void EvaluateNode( - const size_t block_start, const size_t pos, const size_t max_backward= _limit, - const size_t gap, const int* starting_dist_cache, - const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode* nodes= ) { - /* Save cost, because ComputeDistanceCache invalidates it. */ - float node_cost =3D nodes[pos].u.cost; - nodes[pos].u.shortcut =3D ComputeDistanceShortcut( - block_start, pos, max_backward_limit, gap, nodes); - if (node_cost <=3D ZopfliCostModelGetLiteralCosts(model, 0, pos)) { - PosData posdata; - posdata.pos =3D pos; - posdata.cost =3D node_cost; - posdata.costdiff =3D node_cost - - ZopfliCostModelGetLiteralCosts(model, 0, pos); - ComputeDistanceCache( - pos, starting_dist_cache, nodes, posdata.distance_cache); - StartPosQueuePush(queue, &posdata); - } -} - -/* Returns longest copy length. */ -static size_t UpdateNodes( - const size_t num_bytes, const size_t block_start, const size_t pos, - const uint8_t* ringbuffer, const size_t ringbuffer_mask, - const BrotliEncoderParams* params, const size_t max_backward_limit, - const int* starting_dist_cache, const size_t num_matches, - const BackwardMatch* matches, const ZopfliCostModel* model, - StartPosQueue* queue, ZopfliNode* nodes) { - const size_t cur_ix =3D block_start + pos; - const size_t cur_ix_masked =3D cur_ix & ringbuffer_mask; - const size_t max_distance =3D BROTLI_MIN(size_t, cur_ix, max_backward_l= imit); - const size_t max_len =3D num_bytes - pos; - const size_t max_zopfli_len =3D MaxZopfliLen(params); - const size_t max_iters =3D MaxZopfliCandidates(params); - size_t min_len; - size_t result =3D 0; - size_t k; - size_t gap =3D 0; - - EvaluateNode(block_start, pos, max_backward_limit, gap, starting_dist_c= ache, - model, queue, nodes); - - { - const PosData* posdata =3D StartPosQueueAt(queue, 0); - float min_cost =3D (posdata->cost + ZopfliCostModelGetMinCostCmd(mode= l) + - ZopfliCostModelGetLiteralCosts(model, posdata->pos, pos)); - min_len =3D ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos)= ; - } - - /* Go over the command starting positions in order of increasing cost - difference. */ - for (k =3D 0; k < max_iters && k < StartPosQueueSize(queue); ++k) { - const PosData* posdata =3D StartPosQueueAt(queue, k); - const size_t start =3D posdata->pos; - const uint16_t inscode =3D GetInsertLengthCode(pos - start); - const float start_costdiff =3D posdata->costdiff; - const float base_cost =3D start_costdiff + (float)GetInsertExtra(insc= ode) + - ZopfliCostModelGetLiteralCosts(model, 0, pos); - - /* Look for last distance matches using the distance cache from this - starting position. */ - size_t best_len =3D min_len - 1; - size_t j =3D 0; - for (; j < BROTLI_NUM_DISTANCE_SHORT_CODES && best_len < max_len; ++j= ) { - const size_t idx =3D kDistanceCacheIndex[j]; - const size_t backward =3D - (size_t)(posdata->distance_cache[idx] + kDistanceCacheOffset[j]= ); - size_t prev_ix =3D cur_ix - backward; - size_t len =3D 0; - uint8_t continuation =3D ringbuffer[cur_ix_masked + best_len]; - if (cur_ix_masked + best_len > ringbuffer_mask) { - break; - } - if (BROTLI_PREDICT_FALSE(backward > max_distance + gap)) { - continue; - } - if (backward <=3D max_distance) { - if (prev_ix >=3D cur_ix) { - continue; - } - - prev_ix &=3D ringbuffer_mask; - if (prev_ix + best_len > ringbuffer_mask || - continuation !=3D ringbuffer[prev_ix + best_len]) { - continue; - } - len =3D FindMatchLengthWithLimit(&ringbuffer[prev_ix], - &ringbuffer[cur_ix_masked], - max_len); - } else { - continue; - } - { - const float dist_cost =3D base_cost + - ZopfliCostModelGetDistanceCost(model, j); - size_t l; - for (l =3D best_len + 1; l <=3D len; ++l) { - const uint16_t copycode =3D GetCopyLengthCode(l); - const uint16_t cmdcode =3D - CombineLengthCodes(inscode, copycode, j =3D=3D 0); - const float cost =3D (cmdcode < 128 ? base_cost : dist_cost) + - (float)GetCopyExtra(copycode) + - ZopfliCostModelGetCommandCost(model, cmdcode); - if (cost < nodes[pos + l].u.cost) { - UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, co= st); - result =3D BROTLI_MAX(size_t, result, l); - } - best_len =3D l; - } - } - } - - /* At higher iterations look only for new last distance matches, sinc= e - looking only for new command start positions with the same distanc= es - does not help much. */ - if (k >=3D 2) continue; - - { - /* Loop through all possible copy lengths at this position. */ - size_t len =3D min_len; - for (j =3D 0; j < num_matches; ++j) { - BackwardMatch match =3D matches[j]; - size_t dist =3D match.distance; - BROTLI_BOOL is_dictionary_match =3D - TO_BROTLI_BOOL(dist > max_distance + gap); - /* We already tried all possible last distance matches, so we can= use - normal distance code here. */ - size_t dist_code =3D dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1; - uint16_t dist_symbol; - uint32_t distextra; - uint32_t distnumextra; - float dist_cost; - size_t max_match_len; - PrefixEncodeCopyDistance( - dist_code, params->dist.num_direct_distance_codes, - params->dist.distance_postfix_bits, &dist_symbol, &distextra)= ; - distnumextra =3D dist_symbol >> 10; - dist_cost =3D base_cost + (float)distnumextra + - ZopfliCostModelGetDistanceCost(model, dist_symbol & 0x3FF); - - /* Try all copy lengths up until the maximum copy length correspo= nding - to this distance. If the distance refers to the static diction= ary, or - the maximum length is long enough, try only one maximum length= . */ - max_match_len =3D BackwardMatchLength(&match); - if (len < max_match_len && - (is_dictionary_match || max_match_len > max_zopfli_len)) { - len =3D max_match_len; - } - for (; len <=3D max_match_len; ++len) { - const size_t len_code =3D - is_dictionary_match ? BackwardMatchLengthCode(&match) : len= ; - const uint16_t copycode =3D GetCopyLengthCode(len_code); - const uint16_t cmdcode =3D CombineLengthCodes(inscode, copycode= , 0); - const float cost =3D dist_cost + (float)GetCopyExtra(copycode) = + - ZopfliCostModelGetCommandCost(model, cmdcode); - if (cost < nodes[pos + len].u.cost) { - UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, c= ost); - result =3D BROTLI_MAX(size_t, result, len); - } - } - } - } - } - return result; -} - -static size_t ComputeShortestPathFromNodes(size_t num_bytes, - ZopfliNode* nodes) { - size_t index =3D num_bytes; - size_t num_commands =3D 0; - while ((nodes[index].dcode_insert_length & 0x7FFFFFF) =3D=3D 0 && - nodes[index].length =3D=3D 1) --index; - nodes[index].u.next =3D BROTLI_UINT32_MAX; - while (index !=3D 0) { - size_t len =3D ZopfliNodeCommandLength(&nodes[index]); - index -=3D len; - nodes[index].u.next =3D (uint32_t)len; - num_commands++; - } - return num_commands; -} - -/* REQUIRES: nodes !=3D NULL and len(nodes) >=3D num_bytes + 1 */ -void BrotliZopfliCreateCommands(const size_t num_bytes, - const size_t block_start, - const size_t max_backward_limit, - const ZopfliNode* nodes, - int* dist_cache, - size_t* last_insert_len, - const BrotliEncoderParams* params, - Command* commands, - size_t* num_literals) { - size_t pos =3D 0; - uint32_t offset =3D nodes[0].u.next; - size_t i; - size_t gap =3D 0; - for (i =3D 0; offset !=3D BROTLI_UINT32_MAX; i++) { - const ZopfliNode* next =3D &nodes[pos + offset]; - size_t copy_length =3D ZopfliNodeCopyLength(next); - size_t insert_length =3D next->dcode_insert_length & 0x7FFFFFF; - pos +=3D insert_length; - offset =3D next->u.next; - if (i =3D=3D 0) { - insert_length +=3D *last_insert_len; - *last_insert_len =3D 0; - } - { - size_t distance =3D ZopfliNodeCopyDistance(next); - size_t len_code =3D ZopfliNodeLengthCode(next); - size_t max_distance =3D - BROTLI_MIN(size_t, block_start + pos, max_backward_limit); - BROTLI_BOOL is_dictionary =3D TO_BROTLI_BOOL(distance > max_distanc= e + gap); - size_t dist_code =3D ZopfliNodeDistanceCode(next); - InitCommand(&commands[i], ¶ms->dist, insert_length, - copy_length, (int)len_code - (int)copy_length, dist_code); - - if (!is_dictionary && dist_code > 0) { - dist_cache[3] =3D dist_cache[2]; - dist_cache[2] =3D dist_cache[1]; - dist_cache[1] =3D dist_cache[0]; - dist_cache[0] =3D (int)distance; - } - } - - *num_literals +=3D insert_length; - pos +=3D copy_length; - } - *last_insert_len +=3D num_bytes - pos; -} - -static size_t ZopfliIterate(size_t num_bytes, - size_t position, - const uint8_t* ringbuffer, - size_t ringbuffer_mask, - const BrotliEncoderParams* params, - const size_t max_backward_limit, - const size_t gap, - const int* dist_cache, - const ZopfliCostModel* model, - const uint32_t* num_matches, - const BackwardMatch* matches, - ZopfliNode* nodes) { - const size_t max_zopfli_len =3D MaxZopfliLen(params); - StartPosQueue queue; - size_t cur_match_pos =3D 0; - size_t i; - nodes[0].length =3D 0; - nodes[0].u.cost =3D 0; - InitStartPosQueue(&queue); - for (i =3D 0; i + 3 < num_bytes; i++) { - size_t skip =3D UpdateNodes(num_bytes, position, i, ringbuffer, - ringbuffer_mask, params, max_backward_limit, dist_cache, - num_matches[i], &matches[cur_match_pos], model, &queue, nodes); - if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip =3D 0; - cur_match_pos +=3D num_matches[i]; - if (num_matches[i] =3D=3D 1 && - BackwardMatchLength(&matches[cur_match_pos - 1]) > max_zopfli_len= ) { - skip =3D BROTLI_MAX(size_t, - BackwardMatchLength(&matches[cur_match_pos - 1]), skip); - } - if (skip > 1) { - skip--; - while (skip) { - i++; - if (i + 3 >=3D num_bytes) break; - EvaluateNode(position, i, max_backward_limit, gap, dist_cache, mo= del, - &queue, nodes); - cur_match_pos +=3D num_matches[i]; - skip--; - } - } - } - return ComputeShortestPathFromNodes(num_bytes, nodes); -} - -/* REQUIRES: nodes !=3D NULL and len(nodes) >=3D num_bytes + 1 */ -size_t BrotliZopfliComputeShortestPath(MemoryManager* m, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - const size_t max_backward_limit, const int* dist_cache, HasherHandle = hasher, - ZopfliNode* nodes) { - const size_t max_zopfli_len =3D MaxZopfliLen(params); - ZopfliCostModel model; - StartPosQueue queue; - BackwardMatch matches[2 * (MAX_NUM_MATCHES_H10 + 64)]; - const size_t store_end =3D num_bytes >=3D StoreLookaheadH10() ? - position + num_bytes - StoreLookaheadH10() + 1 : position; - size_t i; - size_t gap =3D 0; - size_t lz_matches_offset =3D 0; - nodes[0].length =3D 0; - nodes[0].u.cost =3D 0; - InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes); - if (BROTLI_IS_OOM(m)) return 0; - ZopfliCostModelSetFromLiteralCosts( - &model, position, ringbuffer, ringbuffer_mask); - InitStartPosQueue(&queue); - for (i =3D 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) { - const size_t pos =3D position + i; - const size_t max_distance =3D BROTLI_MIN(size_t, pos, max_backward_li= mit); - size_t skip; - size_t num_matches =3D FindAllMatchesH10(hasher, ¶ms->dictionary, - ringbuffer, ringbuffer_mask, pos, num_bytes - i, max_distance, ga= p, - params, &matches[lz_matches_offset]); - if (num_matches > 0 && - BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len) = { - matches[0] =3D matches[num_matches - 1]; - num_matches =3D 1; - } - skip =3D UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_m= ask, - params, max_backward_limit, dist_cache, num_matches, matches, &mo= del, - &queue, nodes); - if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip =3D 0; - if (num_matches =3D=3D 1 && BackwardMatchLength(&matches[0]) > max_zo= pfli_len) { - skip =3D BROTLI_MAX(size_t, BackwardMatchLength(&matches[0]), skip)= ; - } - if (skip > 1) { - /* Add the tail of the copy to the hasher. */ - StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, BROTLI_= MIN( - size_t, pos + skip, store_end)); - skip--; - while (skip) { - i++; - if (i + HashTypeLengthH10() - 1 >=3D num_bytes) break; - EvaluateNode(position, i, max_backward_limit, gap, dist_cache, &m= odel, - &queue, nodes); - skip--; - } - } - } - CleanupZopfliCostModel(m, &model); - return ComputeShortestPathFromNodes(num_bytes, nodes); -} - -void BrotliCreateZopfliBackwardReferences(MemoryManager* m, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, - Command* commands, size_t* num_commands, size_t* num_literals) { - const size_t max_backward_limit =3D BROTLI_MAX_BACKWARD_LIMIT(params->l= gwin); - ZopfliNode* nodes; - nodes =3D BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1); - if (BROTLI_IS_OOM(m)) return; - BrotliInitZopfliNodes(nodes, num_bytes + 1); - *num_commands +=3D BrotliZopfliComputeShortestPath(m, - num_bytes, position, ringbuffer, ringbuffer_mask, - params, max_backward_limit, dist_cache, hasher, nodes); - if (BROTLI_IS_OOM(m)) return; - BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit, nod= es, - dist_cache, last_insert_len, params, commands, num_literals); - BROTLI_FREE(m, nodes); -} - -void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, - Command* commands, size_t* num_commands, size_t* num_literals) { - const size_t max_backward_limit =3D BROTLI_MAX_BACKWARD_LIMIT(params->l= gwin); - uint32_t* num_matches =3D BROTLI_ALLOC(m, uint32_t, num_bytes); - size_t matches_size =3D 4 * num_bytes; - const size_t store_end =3D num_bytes >=3D StoreLookaheadH10() ? - position + num_bytes - StoreLookaheadH10() + 1 : position; - size_t cur_match_pos =3D 0; - size_t i; - size_t orig_num_literals; - size_t orig_last_insert_len; - int orig_dist_cache[4]; - size_t orig_num_commands; - ZopfliCostModel model; - ZopfliNode* nodes; - BackwardMatch* matches =3D BROTLI_ALLOC(m, BackwardMatch, matches_size)= ; - size_t gap =3D 0; - size_t shadow_matches =3D 0; - if (BROTLI_IS_OOM(m)) return; - for (i =3D 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) { - const size_t pos =3D position + i; - size_t max_distance =3D BROTLI_MIN(size_t, pos, max_backward_limit); - size_t max_length =3D num_bytes - i; - size_t num_found_matches; - size_t cur_match_end; - size_t j; - /* Ensure that we have enough free slots. */ - BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size, - cur_match_pos + MAX_NUM_MATCHES_H10 + shadow_matches); - if (BROTLI_IS_OOM(m)) return; - num_found_matches =3D FindAllMatchesH10(hasher, - ¶ms->dictionary, ringbuffer, ringbuffer_mask, pos, max_length= , - max_distance, gap, params, &matches[cur_match_pos + shadow_matche= s]); - cur_match_end =3D cur_match_pos + num_found_matches; - for (j =3D cur_match_pos; j + 1 < cur_match_end; ++j) { - BROTLI_DCHECK(BackwardMatchLength(&matches[j]) <=3D - BackwardMatchLength(&matches[j + 1])); - } - num_matches[i] =3D (uint32_t)num_found_matches; - if (num_found_matches > 0) { - const size_t match_len =3D BackwardMatchLength(&matches[cur_match_e= nd - 1]); - if (match_len > MAX_ZOPFLI_LEN_QUALITY_11) { - const size_t skip =3D match_len - 1; - matches[cur_match_pos++] =3D matches[cur_match_end - 1]; - num_matches[i] =3D 1; - /* Add the tail of the copy to the hasher. */ - StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, - BROTLI_MIN(size_t, pos + match_len, store_end)); - memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0])); - i +=3D skip; - } else { - cur_match_pos =3D cur_match_end; - } - } - } - orig_num_literals =3D *num_literals; - orig_last_insert_len =3D *last_insert_len; - memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0])); - orig_num_commands =3D *num_commands; - nodes =3D BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1); - if (BROTLI_IS_OOM(m)) return; - InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes); - if (BROTLI_IS_OOM(m)) return; - for (i =3D 0; i < 2; i++) { - BrotliInitZopfliNodes(nodes, num_bytes + 1); - if (i =3D=3D 0) { - ZopfliCostModelSetFromLiteralCosts( - &model, position, ringbuffer, ringbuffer_mask); - } else { - ZopfliCostModelSetFromCommands(&model, position, ringbuffer, - ringbuffer_mask, commands, *num_commands - orig_num_commands, - orig_last_insert_len); - } - *num_commands =3D orig_num_commands; - *num_literals =3D orig_num_literals; - *last_insert_len =3D orig_last_insert_len; - memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0])); - *num_commands +=3D ZopfliIterate(num_bytes, position, ringbuffer, - ringbuffer_mask, params, max_backward_limit, gap, dist_cache, - &model, num_matches, matches, nodes); - BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit, - nodes, dist_cache, last_insert_len, params, commands, num_literal= s); - } - CleanupZopfliCostModel(m, &model); - BROTLI_FREE(m, nodes); - BROTLI_FREE(m, matches); - BROTLI_FREE(m, num_matches); -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c b/BaseTools/= Source/C/BrotliCompress/enc/bit_cost.c deleted file mode 100644 index c8ee842ce3b3..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Functions to estimate the bit cost of Huffman trees. */ - -#include "./bit_cost.h" - -#include "../common/constants.h" -#include "../common/platform.h" -#include -#include "./fast_log.h" -#include "./histogram.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define FN(X) X ## Literal -#include "./bit_cost_inc.h" /* NOLINT(build/include) */ -#undef FN - -#define FN(X) X ## Command -#include "./bit_cost_inc.h" /* NOLINT(build/include) */ -#undef FN - -#define FN(X) X ## Distance -#include "./bit_cost_inc.h" /* NOLINT(build/include) */ -#undef FN - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c b/Base= Tools/Source/C/BrotliCompress/enc/block_splitter.c deleted file mode 100644 index 344a629c7dce..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c +++ /dev/null @@ -1,194 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Block split point selection utilities. */ - -#include "./block_splitter.h" - -#include /* memcpy, memset */ - -#include "../common/platform.h" -#include "./bit_cost.h" -#include "./cluster.h" -#include "./command.h" -#include "./fast_log.h" -#include "./histogram.h" -#include "./memory.h" -#include "./quality.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static const size_t kMaxLiteralHistograms =3D 100; -static const size_t kMaxCommandHistograms =3D 50; -static const double kLiteralBlockSwitchCost =3D 28.1; -static const double kCommandBlockSwitchCost =3D 13.5; -static const double kDistanceBlockSwitchCost =3D 14.6; -static const size_t kLiteralStrideLength =3D 70; -static const size_t kCommandStrideLength =3D 40; -static const size_t kSymbolsPerLiteralHistogram =3D 544; -static const size_t kSymbolsPerCommandHistogram =3D 530; -static const size_t kSymbolsPerDistanceHistogram =3D 544; -static const size_t kMinLengthForBlockSplitting =3D 128; -static const size_t kIterMulForRefining =3D 2; -static const size_t kMinItersForRefining =3D 100; - -static size_t CountLiterals(const Command* cmds, const size_t num_command= s) { - /* Count how many we have. */ - size_t total_length =3D 0; - size_t i; - for (i =3D 0; i < num_commands; ++i) { - total_length +=3D cmds[i].insert_len_; - } - return total_length; -} - -static void CopyLiteralsToByteArray(const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t offset, - const size_t mask, - uint8_t* literals) { - size_t pos =3D 0; - size_t from_pos =3D offset & mask; - size_t i; - for (i =3D 0; i < num_commands; ++i) { - size_t insert_len =3D cmds[i].insert_len_; - if (from_pos + insert_len > mask) { - size_t head_size =3D mask + 1 - from_pos; - memcpy(literals + pos, data + from_pos, head_size); - from_pos =3D 0; - pos +=3D head_size; - insert_len -=3D head_size; - } - if (insert_len > 0) { - memcpy(literals + pos, data + from_pos, insert_len); - pos +=3D insert_len; - } - from_pos =3D (from_pos + insert_len + CommandCopyLen(&cmds[i])) & mas= k; - } -} - -static BROTLI_INLINE uint32_t MyRand(uint32_t* seed) { - /* Initial seed should be 7. In this case, loop length is (1 << 29). */ - *seed *=3D 16807U; - return *seed; -} - -static BROTLI_INLINE double BitCost(size_t count) { - return count =3D=3D 0 ? -2.0 : FastLog2(count); -} - -#define HISTOGRAMS_PER_BATCH 64 -#define CLUSTERS_PER_BATCH 16 - -#define FN(X) X ## Literal -#define DataType uint8_t -/* NOLINTNEXTLINE(build/include) */ -#include "./block_splitter_inc.h" -#undef DataType -#undef FN - -#define FN(X) X ## Command -#define DataType uint16_t -/* NOLINTNEXTLINE(build/include) */ -#include "./block_splitter_inc.h" -#undef FN - -#define FN(X) X ## Distance -/* NOLINTNEXTLINE(build/include) */ -#include "./block_splitter_inc.h" -#undef DataType -#undef FN - -void BrotliInitBlockSplit(BlockSplit* self) { - self->num_types =3D 0; - self->num_blocks =3D 0; - self->types =3D 0; - self->lengths =3D 0; - self->types_alloc_size =3D 0; - self->lengths_alloc_size =3D 0; -} - -void BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) { - BROTLI_FREE(m, self->types); - BROTLI_FREE(m, self->lengths); -} - -void BrotliSplitBlock(MemoryManager* m, - const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t pos, - const size_t mask, - const BrotliEncoderParams* params, - BlockSplit* literal_split, - BlockSplit* insert_and_copy_split, - BlockSplit* dist_split) { - { - size_t literals_count =3D CountLiterals(cmds, num_commands); - uint8_t* literals =3D BROTLI_ALLOC(m, uint8_t, literals_count); - if (BROTLI_IS_OOM(m)) return; - /* Create a continuous array of literals. */ - CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals= ); - /* Create the block split on the array of literals. - Literal histograms have alphabet size 256. */ - SplitByteVectorLiteral( - m, literals, literals_count, - kSymbolsPerLiteralHistogram, kMaxLiteralHistograms, - kLiteralStrideLength, kLiteralBlockSwitchCost, params, - literal_split); - if (BROTLI_IS_OOM(m)) return; - BROTLI_FREE(m, literals); - } - - { - /* Compute prefix codes for commands. */ - uint16_t* insert_and_copy_codes =3D BROTLI_ALLOC(m, uint16_t, num_com= mands); - size_t i; - if (BROTLI_IS_OOM(m)) return; - for (i =3D 0; i < num_commands; ++i) { - insert_and_copy_codes[i] =3D cmds[i].cmd_prefix_; - } - /* Create the block split on the array of command prefixes. */ - SplitByteVectorCommand( - m, insert_and_copy_codes, num_commands, - kSymbolsPerCommandHistogram, kMaxCommandHistograms, - kCommandStrideLength, kCommandBlockSwitchCost, params, - insert_and_copy_split); - if (BROTLI_IS_OOM(m)) return; - /* TODO: reuse for distances? */ - BROTLI_FREE(m, insert_and_copy_codes); - } - - { - /* Create a continuous array of distance prefixes. */ - uint16_t* distance_prefixes =3D BROTLI_ALLOC(m, uint16_t, num_command= s); - size_t j =3D 0; - size_t i; - if (BROTLI_IS_OOM(m)) return; - for (i =3D 0; i < num_commands; ++i) { - const Command* cmd =3D &cmds[i]; - if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >=3D 128) { - distance_prefixes[j++] =3D cmd->dist_prefix_ & 0x3FF; - } - } - /* Create the block split on the array of distance prefixes. */ - SplitByteVectorDistance( - m, distance_prefixes, j, - kSymbolsPerDistanceHistogram, kMaxCommandHistograms, - kCommandStrideLength, kDistanceBlockSwitchCost, params, - dist_split); - if (BROTLI_IS_OOM(m)) return; - BROTLI_FREE(m, distance_prefixes); - } -} - - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c b/B= aseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c deleted file mode 100644 index 50b10eda851b..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c +++ /dev/null @@ -1,1331 +0,0 @@ -/* Copyright 2014 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Brotli bit stream functions to support the low level format. There are= no - compression algorithms here, just the right ordering of bits to match = the - specs. */ - -#include "./brotli_bit_stream.h" - -#include /* memcpy, memset */ - -#include "../common/constants.h" -#include "../common/context.h" -#include "../common/platform.h" -#include -#include "./entropy_encode.h" -#include "./entropy_encode_static.h" -#include "./fast_log.h" -#include "./histogram.h" -#include "./memory.h" -#include "./write_bits.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define MAX_HUFFMAN_TREE_SIZE (2 * BROTLI_NUM_COMMAND_SYMBOLS + 1) -/* The maximum size of Huffman dictionary for distances assuming that - NPOSTFIX =3D 0 and NDIRECT =3D 0. */ -#define MAX_SIMPLE_DISTANCE_ALPHABET_SIZE \ - BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_LARGE_MAX_DISTANCE_BITS) -/* MAX_SIMPLE_DISTANCE_ALPHABET_SIZE =3D=3D 140 */ - -/* Represents the range of values belonging to a prefix code: - [offset, offset + 2^nbits) */ -typedef struct PrefixCodeRange { - uint32_t offset; - uint32_t nbits; -} PrefixCodeRange; - -static const PrefixCodeRange - kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] =3D { - { 1, 2}, { 5, 2}, { 9, 2}, {13, 2}, {17, 3}, { 25, 3}, { 33, 3}, - {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4}, {113, 5}, {145, 5}, - {177, 5}, { 209, 5}, { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8}, - {753, 9}, {1265, 10}, {2289, 11}, {4337, 12}, {8433, 13}, {16625, 24} -}; - -static BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) { - uint32_t code =3D (len >=3D 177) ? (len >=3D 753 ? 20 : 14) : (len >=3D= 41 ? 7 : 0); - while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) && - len >=3D kBlockLengthPrefixCode[code + 1].offset) ++code; - return code; -} - -static BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t* = code, - uint32_t* n_extra, uint32_t* extra) { - *code =3D BlockLengthPrefixCode(len); - *n_extra =3D kBlockLengthPrefixCode[*code].nbits; - *extra =3D len - kBlockLengthPrefixCode[*code].offset; -} - -typedef struct BlockTypeCodeCalculator { - size_t last_type; - size_t second_last_type; -} BlockTypeCodeCalculator; - -static void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) { - self->last_type =3D 1; - self->second_last_type =3D 0; -} - -static BROTLI_INLINE size_t NextBlockTypeCode( - BlockTypeCodeCalculator* calculator, uint8_t type) { - size_t type_code =3D (type =3D=3D calculator->last_type + 1) ? 1u : - (type =3D=3D calculator->second_last_type) ? 0u : type + 2u; - calculator->second_last_type =3D calculator->last_type; - calculator->last_type =3D type; - return type_code; -} - -/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3) - REQUIRES: length > 0 - REQUIRES: length <=3D (1 << 24) */ -static void BrotliEncodeMlen(size_t length, uint64_t* bits, - size_t* numbits, uint64_t* nibblesbits) { - size_t lg =3D (length =3D=3D 1) ? 1 : Log2FloorNonZero((uint32_t)(lengt= h - 1)) + 1; - size_t mnibbles =3D (lg < 16 ? 16 : (lg + 3)) / 4; - BROTLI_DCHECK(length > 0); - BROTLI_DCHECK(length <=3D (1 << 24)); - BROTLI_DCHECK(lg <=3D 24); - *nibblesbits =3D mnibbles - 4; - *numbits =3D mnibbles * 4; - *bits =3D length - 1; -} - -static BROTLI_INLINE void StoreCommandExtra( - const Command* cmd, size_t* storage_ix, uint8_t* storage) { - uint32_t copylen_code =3D CommandCopyLenCode(cmd); - uint16_t inscode =3D GetInsertLengthCode(cmd->insert_len_); - uint16_t copycode =3D GetCopyLengthCode(copylen_code); - uint32_t insnumextra =3D GetInsertExtra(inscode); - uint64_t insextraval =3D cmd->insert_len_ - GetInsertBase(inscode); - uint64_t copyextraval =3D copylen_code - GetCopyBase(copycode); - uint64_t bits =3D (copyextraval << insnumextra) | insextraval; - BrotliWriteBits( - insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage); -} - -/* Data structure that stores almost everything that is needed to encode = each - block switch command. */ -typedef struct BlockSplitCode { - BlockTypeCodeCalculator type_code_calculator; - uint8_t type_depths[BROTLI_MAX_BLOCK_TYPE_SYMBOLS]; - uint16_t type_bits[BROTLI_MAX_BLOCK_TYPE_SYMBOLS]; - uint8_t length_depths[BROTLI_NUM_BLOCK_LEN_SYMBOLS]; - uint16_t length_bits[BROTLI_NUM_BLOCK_LEN_SYMBOLS]; -} BlockSplitCode; - -/* Stores a number between 0 and 255. */ -static void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* stora= ge) { - if (n =3D=3D 0) { - BrotliWriteBits(1, 0, storage_ix, storage); - } else { - size_t nbits =3D Log2FloorNonZero(n); - BrotliWriteBits(1, 1, storage_ix, storage); - BrotliWriteBits(3, nbits, storage_ix, storage); - BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage)= ; - } -} - -/* Stores the compressed meta-block header. - REQUIRES: length > 0 - REQUIRES: length <=3D (1 << 24) */ -static void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block, - size_t length, - size_t* storage_ix, - uint8_t* storage) { - uint64_t lenbits; - size_t nlenbits; - uint64_t nibblesbits; - - /* Write ISLAST bit. */ - BrotliWriteBits(1, (uint64_t)is_final_block, storage_ix, storage); - /* Write ISEMPTY bit. */ - if (is_final_block) { - BrotliWriteBits(1, 0, storage_ix, storage); - } - - BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits); - BrotliWriteBits(2, nibblesbits, storage_ix, storage); - BrotliWriteBits(nlenbits, lenbits, storage_ix, storage); - - if (!is_final_block) { - /* Write ISUNCOMPRESSED bit. */ - BrotliWriteBits(1, 0, storage_ix, storage); - } -} - -/* Stores the uncompressed meta-block header. - REQUIRES: length > 0 - REQUIRES: length <=3D (1 << 24) */ -static void BrotliStoreUncompressedMetaBlockHeader(size_t length, - size_t* storage_ix, - uint8_t* storage) { - uint64_t lenbits; - size_t nlenbits; - uint64_t nibblesbits; - - /* Write ISLAST bit. - Uncompressed block cannot be the last one, so set to 0. */ - BrotliWriteBits(1, 0, storage_ix, storage); - BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits); - BrotliWriteBits(2, nibblesbits, storage_ix, storage); - BrotliWriteBits(nlenbits, lenbits, storage_ix, storage); - /* Write ISUNCOMPRESSED bit. */ - BrotliWriteBits(1, 1, storage_ix, storage); -} - -static void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask( - const int num_codes, const uint8_t* code_length_bitdepth, - size_t* storage_ix, uint8_t* storage) { - static const uint8_t kStorageOrder[BROTLI_CODE_LENGTH_CODES] =3D { - 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15 - }; - /* The bit lengths of the Huffman code over the code length alphabet - are compressed with the following static Huffman code: - Symbol Code - ------ ---- - 0 00 - 1 1110 - 2 110 - 3 01 - 4 10 - 5 1111 */ - static const uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] =3D { - 0, 7, 3, 2, 1, 15 - }; - static const uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] =3D { - 2, 4, 3, 2, 2, 4 - }; - - size_t skip_some =3D 0; /* skips none. */ - - /* Throw away trailing zeros: */ - size_t codes_to_store =3D BROTLI_CODE_LENGTH_CODES; - if (num_codes > 1) { - for (; codes_to_store > 0; --codes_to_store) { - if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] !=3D 0)= { - break; - } - } - } - if (code_length_bitdepth[kStorageOrder[0]] =3D=3D 0 && - code_length_bitdepth[kStorageOrder[1]] =3D=3D 0) { - skip_some =3D 2; /* skips two. */ - if (code_length_bitdepth[kStorageOrder[2]] =3D=3D 0) { - skip_some =3D 3; /* skips three. */ - } - } - BrotliWriteBits(2, skip_some, storage_ix, storage); - { - size_t i; - for (i =3D skip_some; i < codes_to_store; ++i) { - size_t l =3D code_length_bitdepth[kStorageOrder[i]]; - BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l], - kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage); - } - } -} - -static void BrotliStoreHuffmanTreeToBitMask( - const size_t huffman_tree_size, const uint8_t* huffman_tree, - const uint8_t* huffman_tree_extra_bits, const uint8_t* code_length_bi= tdepth, - const uint16_t* code_length_bitdepth_symbols, - size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage)= { - size_t i; - for (i =3D 0; i < huffman_tree_size; ++i) { - size_t ix =3D huffman_tree[i]; - BrotliWriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbol= s[ix], - storage_ix, storage); - /* Extra bits */ - switch (ix) { - case BROTLI_REPEAT_PREVIOUS_CODE_LENGTH: - BrotliWriteBits(2, huffman_tree_extra_bits[i], storage_ix, storag= e); - break; - case BROTLI_REPEAT_ZERO_CODE_LENGTH: - BrotliWriteBits(3, huffman_tree_extra_bits[i], storage_ix, storag= e); - break; - } - } -} - -static void StoreSimpleHuffmanTree(const uint8_t* depths, - size_t symbols[4], - size_t num_symbols, - size_t max_bits, - size_t* storage_ix, uint8_t* storage) = { - /* value of 1 indicates a simple Huffman code */ - BrotliWriteBits(2, 1, storage_ix, storage); - BrotliWriteBits(2, num_symbols - 1, storage_ix, storage); /* NSYM - 1 = */ - - { - /* Sort */ - size_t i; - for (i =3D 0; i < num_symbols; i++) { - size_t j; - for (j =3D i + 1; j < num_symbols; j++) { - if (depths[symbols[j]] < depths[symbols[i]]) { - BROTLI_SWAP(size_t, symbols, j, i); - } - } - } - } - - if (num_symbols =3D=3D 2) { - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); - } else if (num_symbols =3D=3D 3) { - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); - } else { - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[3], storage_ix, storage); - /* tree-select */ - BrotliWriteBits(1, depths[symbols[0]] =3D=3D 1 ? 1 : 0, storage_ix, s= torage); - } -} - -/* num =3D alphabet size - depths =3D symbol depths */ -void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num, - HuffmanTree* tree, - size_t* storage_ix, uint8_t* storage) { - /* Write the Huffman tree into the brotli-representation. - The command alphabet is the largest, so this allocation will fit all - alphabets. */ - uint8_t huffman_tree[BROTLI_NUM_COMMAND_SYMBOLS]; - uint8_t huffman_tree_extra_bits[BROTLI_NUM_COMMAND_SYMBOLS]; - size_t huffman_tree_size =3D 0; - uint8_t code_length_bitdepth[BROTLI_CODE_LENGTH_CODES] =3D { 0 }; - uint16_t code_length_bitdepth_symbols[BROTLI_CODE_LENGTH_CODES]; - uint32_t huffman_tree_histogram[BROTLI_CODE_LENGTH_CODES] =3D { 0 }; - size_t i; - int num_codes =3D 0; - size_t code =3D 0; - - BROTLI_DCHECK(num <=3D BROTLI_NUM_COMMAND_SYMBOLS); - - BrotliWriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree, - huffman_tree_extra_bits); - - /* Calculate the statistics of the Huffman tree in brotli-representatio= n. */ - for (i =3D 0; i < huffman_tree_size; ++i) { - ++huffman_tree_histogram[huffman_tree[i]]; - } - - for (i =3D 0; i < BROTLI_CODE_LENGTH_CODES; ++i) { - if (huffman_tree_histogram[i]) { - if (num_codes =3D=3D 0) { - code =3D i; - num_codes =3D 1; - } else if (num_codes =3D=3D 1) { - num_codes =3D 2; - break; - } - } - } - - /* Calculate another Huffman tree to use for compressing both the - earlier Huffman tree with. */ - BrotliCreateHuffmanTree(huffman_tree_histogram, BROTLI_CODE_LENGTH_CODE= S, - 5, tree, code_length_bitdepth); - BrotliConvertBitDepthsToSymbols(code_length_bitdepth, - BROTLI_CODE_LENGTH_CODES, - code_length_bitdepth_symbols); - - /* Now, we have all the data, let's start storing it */ - BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bit= depth, - storage_ix, storage); - - if (num_codes =3D=3D 1) { - code_length_bitdepth[code] =3D 0; - } - - /* Store the real Huffman tree now. */ - BrotliStoreHuffmanTreeToBitMask(huffman_tree_size, - huffman_tree, - huffman_tree_extra_bits, - code_length_bitdepth, - code_length_bitdepth_symbols, - storage_ix, storage); -} - -/* Builds a Huffman tree from histogram[0:length] into depth[0:length] an= d - bits[0:length] and stores the encoded tree to the bit stream. */ -static void BuildAndStoreHuffmanTree(const uint32_t* histogram, - const size_t histogram_length, - const size_t alphabet_size, - HuffmanTree* tree, - uint8_t* depth, - uint16_t* bits, - size_t* storage_ix, - uint8_t* storage) { - size_t count =3D 0; - size_t s4[4] =3D { 0 }; - size_t i; - size_t max_bits =3D 0; - for (i =3D 0; i < histogram_length; i++) { - if (histogram[i]) { - if (count < 4) { - s4[count] =3D i; - } else if (count > 4) { - break; - } - count++; - } - } - - { - size_t max_bits_counter =3D alphabet_size - 1; - while (max_bits_counter) { - max_bits_counter >>=3D 1; - ++max_bits; - } - } - - if (count <=3D 1) { - BrotliWriteBits(4, 1, storage_ix, storage); - BrotliWriteBits(max_bits, s4[0], storage_ix, storage); - depth[s4[0]] =3D 0; - bits[s4[0]] =3D 0; - return; - } - - memset(depth, 0, histogram_length * sizeof(depth[0])); - BrotliCreateHuffmanTree(histogram, histogram_length, 15, tree, depth); - BrotliConvertBitDepthsToSymbols(depth, histogram_length, bits); - - if (count <=3D 4) { - StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storag= e); - } else { - BrotliStoreHuffmanTree(depth, histogram_length, tree, storage_ix, sto= rage); - } -} - -static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree( - const HuffmanTree* v0, const HuffmanTree* v1) { - return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_); -} - -void BrotliBuildAndStoreHuffmanTreeFast(MemoryManager* m, - const uint32_t* histogram, - const size_t histogram_total, - const size_t max_bits, - uint8_t* depth, uint16_t* bits, - size_t* storage_ix, - uint8_t* storage) { - size_t count =3D 0; - size_t symbols[4] =3D { 0 }; - size_t length =3D 0; - size_t total =3D histogram_total; - while (total !=3D 0) { - if (histogram[length]) { - if (count < 4) { - symbols[count] =3D length; - } - ++count; - total -=3D histogram[length]; - } - ++length; - } - - if (count <=3D 1) { - BrotliWriteBits(4, 1, storage_ix, storage); - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); - depth[symbols[0]] =3D 0; - bits[symbols[0]] =3D 0; - return; - } - - memset(depth, 0, length * sizeof(depth[0])); - { - const size_t max_tree_size =3D 2 * length + 1; - HuffmanTree* tree =3D BROTLI_ALLOC(m, HuffmanTree, max_tree_size); - uint32_t count_limit; - if (BROTLI_IS_OOM(m)) return; - for (count_limit =3D 1; ; count_limit *=3D 2) { - HuffmanTree* node =3D tree; - size_t l; - for (l =3D length; l !=3D 0;) { - --l; - if (histogram[l]) { - if (BROTLI_PREDICT_TRUE(histogram[l] >=3D count_limit)) { - InitHuffmanTree(node, histogram[l], -1, (int16_t)l); - } else { - InitHuffmanTree(node, count_limit, -1, (int16_t)l); - } - ++node; - } - } - { - const int n =3D (int)(node - tree); - HuffmanTree sentinel; - int i =3D 0; /* Points to the next leaf node. */ - int j =3D n + 1; /* Points to the next non-leaf node. */ - int k; - - SortHuffmanTreeItems(tree, (size_t)n, SortHuffmanTree); - /* The nodes are: - [0, n): the sorted leaf nodes that we start with. - [n]: we add a sentinel here. - [n + 1, 2n): new parent nodes are added here, starting from - (n+1). These are naturally in ascending order. - [2n]: we add a sentinel at the end as well. - There will be (2n+1) elements at the end. */ - InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1); - *node++ =3D sentinel; - *node++ =3D sentinel; - - for (k =3D n - 1; k > 0; --k) { - int left, right; - if (tree[i].total_count_ <=3D tree[j].total_count_) { - left =3D i; - ++i; - } else { - left =3D j; - ++j; - } - if (tree[i].total_count_ <=3D tree[j].total_count_) { - right =3D i; - ++i; - } else { - right =3D j; - ++j; - } - /* The sentinel node becomes the parent node. */ - node[-1].total_count_ =3D - tree[left].total_count_ + tree[right].total_count_; - node[-1].index_left_ =3D (int16_t)left; - node[-1].index_right_or_value_ =3D (int16_t)right; - /* Add back the last sentinel node. */ - *node++ =3D sentinel; - } - if (BrotliSetDepth(2 * n - 1, tree, depth, 14)) { - /* We need to pack the Huffman tree in 14 bits. If this was not - successful, add fake entities to the lowest values and retry= . */ - break; - } - } - } - BROTLI_FREE(m, tree); - } - BrotliConvertBitDepthsToSymbols(depth, length, bits); - if (count <=3D 4) { - size_t i; - /* value of 1 indicates a simple Huffman code */ - BrotliWriteBits(2, 1, storage_ix, storage); - BrotliWriteBits(2, count - 1, storage_ix, storage); /* NSYM - 1 */ - - /* Sort */ - for (i =3D 0; i < count; i++) { - size_t j; - for (j =3D i + 1; j < count; j++) { - if (depth[symbols[j]] < depth[symbols[i]]) { - BROTLI_SWAP(size_t, symbols, j, i); - } - } - } - - if (count =3D=3D 2) { - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); - } else if (count =3D=3D 3) { - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); - } else { - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[2], storage_ix, storage); - BrotliWriteBits(max_bits, symbols[3], storage_ix, storage); - /* tree-select */ - BrotliWriteBits(1, depth[symbols[0]] =3D=3D 1 ? 1 : 0, storage_ix, = storage); - } - } else { - uint8_t previous_value =3D 8; - size_t i; - /* Complex Huffman Tree */ - StoreStaticCodeLengthCode(storage_ix, storage); - - /* Actual RLE coding. */ - for (i =3D 0; i < length;) { - const uint8_t value =3D depth[i]; - size_t reps =3D 1; - size_t k; - for (k =3D i + 1; k < length && depth[k] =3D=3D value; ++k) { - ++reps; - } - i +=3D reps; - if (value =3D=3D 0) { - BrotliWriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps], - storage_ix, storage); - } else { - if (previous_value !=3D value) { - BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value]= , - storage_ix, storage); - --reps; - } - if (reps < 3) { - while (reps !=3D 0) { - reps--; - BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[valu= e], - storage_ix, storage); - } - } else { - reps -=3D 3; - BrotliWriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps]= , - storage_ix, storage); - } - previous_value =3D value; - } - } - } -} - -static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) { - size_t i =3D 0; - for (; i < v_size; ++i) { - if (v[i] =3D=3D value) return i; - } - return i; -} - -static void MoveToFront(uint8_t* v, size_t index) { - uint8_t value =3D v[index]; - size_t i; - for (i =3D index; i !=3D 0; --i) { - v[i] =3D v[i - 1]; - } - v[0] =3D value; -} - -static void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in, - const size_t v_size, - uint32_t* v_out) { - size_t i; - uint8_t mtf[256]; - uint32_t max_value; - if (v_size =3D=3D 0) { - return; - } - max_value =3D v_in[0]; - for (i =3D 1; i < v_size; ++i) { - if (v_in[i] > max_value) max_value =3D v_in[i]; - } - BROTLI_DCHECK(max_value < 256u); - for (i =3D 0; i <=3D max_value; ++i) { - mtf[i] =3D (uint8_t)i; - } - { - size_t mtf_size =3D max_value + 1; - for (i =3D 0; i < v_size; ++i) { - size_t index =3D IndexOf(mtf, mtf_size, (uint8_t)v_in[i]); - BROTLI_DCHECK(index < mtf_size); - v_out[i] =3D (uint32_t)index; - MoveToFront(mtf, index); - } - } -} - -/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix c= ode of - the run length plus extra bits (lower 9 bits is the prefix code and th= e rest - are the extra bits). Non-zero values in v[] are shifted by - *max_length_prefix. Will not create prefix codes bigger than the initi= al - value of *max_run_length_prefix. The prefix code of run length L is si= mply - Log2Floor(L) and the number of extra bits is the same as the prefix co= de. */ -static void RunLengthCodeZeros(const size_t in_size, - uint32_t* BROTLI_RESTRICT v, size_t* BROTLI_RESTRICT out_size, - uint32_t* BROTLI_RESTRICT max_run_length_prefix) { - uint32_t max_reps =3D 0; - size_t i; - uint32_t max_prefix; - for (i =3D 0; i < in_size;) { - uint32_t reps =3D 0; - for (; i < in_size && v[i] !=3D 0; ++i) ; - for (; i < in_size && v[i] =3D=3D 0; ++i) { - ++reps; - } - max_reps =3D BROTLI_MAX(uint32_t, reps, max_reps); - } - max_prefix =3D max_reps > 0 ? Log2FloorNonZero(max_reps) : 0; - max_prefix =3D BROTLI_MIN(uint32_t, max_prefix, *max_run_length_prefix)= ; - *max_run_length_prefix =3D max_prefix; - *out_size =3D 0; - for (i =3D 0; i < in_size;) { - BROTLI_DCHECK(*out_size <=3D i); - if (v[i] !=3D 0) { - v[*out_size] =3D v[i] + *max_run_length_prefix; - ++i; - ++(*out_size); - } else { - uint32_t reps =3D 1; - size_t k; - for (k =3D i + 1; k < in_size && v[k] =3D=3D 0; ++k) { - ++reps; - } - i +=3D reps; - while (reps !=3D 0) { - if (reps < (2u << max_prefix)) { - uint32_t run_length_prefix =3D Log2FloorNonZero(reps); - const uint32_t extra_bits =3D reps - (1u << run_length_prefix); - v[*out_size] =3D run_length_prefix + (extra_bits << 9); - ++(*out_size); - break; - } else { - const uint32_t extra_bits =3D (1u << max_prefix) - 1u; - v[*out_size] =3D max_prefix + (extra_bits << 9); - reps -=3D (2u << max_prefix) - 1u; - ++(*out_size); - } - } - } - } -} - -#define SYMBOL_BITS 9 - -static void EncodeContextMap(MemoryManager* m, - const uint32_t* context_map, - size_t context_map_size, - size_t num_clusters, - HuffmanTree* tree, - size_t* storage_ix, uint8_t* storage) { - size_t i; - uint32_t* rle_symbols; - uint32_t max_run_length_prefix =3D 6; - size_t num_rle_symbols =3D 0; - uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; - static const uint32_t kSymbolMask =3D (1u << SYMBOL_BITS) - 1u; - uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; - uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; - - StoreVarLenUint8(num_clusters - 1, storage_ix, storage); - - if (num_clusters =3D=3D 1) { - return; - } - - rle_symbols =3D BROTLI_ALLOC(m, uint32_t, context_map_size); - if (BROTLI_IS_OOM(m)) return; - MoveToFrontTransform(context_map, context_map_size, rle_symbols); - RunLengthCodeZeros(context_map_size, rle_symbols, - &num_rle_symbols, &max_run_length_prefix); - memset(histogram, 0, sizeof(histogram)); - for (i =3D 0; i < num_rle_symbols; ++i) { - ++histogram[rle_symbols[i] & kSymbolMask]; - } - { - BROTLI_BOOL use_rle =3D TO_BROTLI_BOOL(max_run_length_prefix > 0); - BrotliWriteBits(1, (uint64_t)use_rle, storage_ix, storage); - if (use_rle) { - BrotliWriteBits(4, max_run_length_prefix - 1, storage_ix, storage); - } - } - BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefi= x, - num_clusters + max_run_length_prefix, - tree, depths, bits, storage_ix, storage); - for (i =3D 0; i < num_rle_symbols; ++i) { - const uint32_t rle_symbol =3D rle_symbols[i] & kSymbolMask; - const uint32_t extra_bits_val =3D rle_symbols[i] >> SYMBOL_BITS; - BrotliWriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, sto= rage); - if (rle_symbol > 0 && rle_symbol <=3D max_run_length_prefix) { - BrotliWriteBits(rle_symbol, extra_bits_val, storage_ix, storage); - } - } - BrotliWriteBits(1, 1, storage_ix, storage); /* use move-to-front */ - BROTLI_FREE(m, rle_symbols); -} - -/* Stores the block switch command with index block_ix to the bit stream.= */ -static BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code, - const uint32_t block_len, - const uint8_t block_type, - BROTLI_BOOL is_first_block, - size_t* storage_ix, - uint8_t* storage) { - size_t typecode =3D NextBlockTypeCode(&code->type_code_calculator, bloc= k_type); - size_t lencode; - uint32_t len_nextra; - uint32_t len_extra; - if (!is_first_block) { - BrotliWriteBits(code->type_depths[typecode], code->type_bits[typecode= ], - storage_ix, storage); - } - GetBlockLengthPrefixCode(block_len, &lencode, &len_nextra, &len_extra); - - BrotliWriteBits(code->length_depths[lencode], code->length_bits[lencode= ], - storage_ix, storage); - BrotliWriteBits(len_nextra, len_extra, storage_ix, storage); -} - -/* Builds a BlockSplitCode data structure from the block split given by t= he - vector of block types and block lengths and stores it to the bit strea= m. */ -static void BuildAndStoreBlockSplitCode(const uint8_t* types, - const uint32_t* lengths, - const size_t num_blocks, - const size_t num_types, - HuffmanTree* tree, - BlockSplitCode* code, - size_t* storage_ix, - uint8_t* storage) { - uint32_t type_histo[BROTLI_MAX_BLOCK_TYPE_SYMBOLS]; - uint32_t length_histo[BROTLI_NUM_BLOCK_LEN_SYMBOLS]; - size_t i; - BlockTypeCodeCalculator type_code_calculator; - memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0])); - memset(length_histo, 0, sizeof(length_histo)); - InitBlockTypeCodeCalculator(&type_code_calculator); - for (i =3D 0; i < num_blocks; ++i) { - size_t type_code =3D NextBlockTypeCode(&type_code_calculator, types[i= ]); - if (i !=3D 0) ++type_histo[type_code]; - ++length_histo[BlockLengthPrefixCode(lengths[i])]; - } - StoreVarLenUint8(num_types - 1, storage_ix, storage); - if (num_types > 1) { /* TODO: else? could StoreBlockSwitch occur? */ - BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, num_types + 2= , tree, - &code->type_depths[0], &code->type_bits[0], - storage_ix, storage); - BuildAndStoreHuffmanTree(&length_histo[0], BROTLI_NUM_BLOCK_LEN_SYMBO= LS, - BROTLI_NUM_BLOCK_LEN_SYMBOLS, - tree, &code->length_depths[0], - &code->length_bits[0], storage_ix, storage); - StoreBlockSwitch(code, lengths[0], types[0], 1, storage_ix, storage); - } -} - -/* Stores a context map where the histogram type is always the block type= . */ -static void StoreTrivialContextMap(size_t num_types, - size_t context_bits, - HuffmanTree* tree, - size_t* storage_ix, - uint8_t* storage) { - StoreVarLenUint8(num_types - 1, storage_ix, storage); - if (num_types > 1) { - size_t repeat_code =3D context_bits - 1u; - size_t repeat_bits =3D (1u << repeat_code) - 1u; - size_t alphabet_size =3D num_types + repeat_code; - uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; - uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; - uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS]; - size_t i; - memset(histogram, 0, alphabet_size * sizeof(histogram[0])); - /* Write RLEMAX. */ - BrotliWriteBits(1, 1, storage_ix, storage); - BrotliWriteBits(4, repeat_code - 1, storage_ix, storage); - histogram[repeat_code] =3D (uint32_t)num_types; - histogram[0] =3D 1; - for (i =3D context_bits; i < alphabet_size; ++i) { - histogram[i] =3D 1; - } - BuildAndStoreHuffmanTree(histogram, alphabet_size, alphabet_size, - tree, depths, bits, storage_ix, storage); - for (i =3D 0; i < num_types; ++i) { - size_t code =3D (i =3D=3D 0 ? 0 : i + context_bits - 1); - BrotliWriteBits(depths[code], bits[code], storage_ix, storage); - BrotliWriteBits( - depths[repeat_code], bits[repeat_code], storage_ix, storage); - BrotliWriteBits(repeat_code, repeat_bits, storage_ix, storage); - } - /* Write IMTF (inverse-move-to-front) bit. */ - BrotliWriteBits(1, 1, storage_ix, storage); - } -} - -/* Manages the encoding of one block category (literal, command or distan= ce). */ -typedef struct BlockEncoder { - size_t histogram_length_; - size_t num_block_types_; - const uint8_t* block_types_; /* Not owned. */ - const uint32_t* block_lengths_; /* Not owned. */ - size_t num_blocks_; - BlockSplitCode block_split_code_; - size_t block_ix_; - size_t block_len_; - size_t entropy_ix_; - uint8_t* depths_; - uint16_t* bits_; -} BlockEncoder; - -static void InitBlockEncoder(BlockEncoder* self, size_t histogram_length, - size_t num_block_types, const uint8_t* block_types, - const uint32_t* block_lengths, const size_t num_blocks) { - self->histogram_length_ =3D histogram_length; - self->num_block_types_ =3D num_block_types; - self->block_types_ =3D block_types; - self->block_lengths_ =3D block_lengths; - self->num_blocks_ =3D num_blocks; - InitBlockTypeCodeCalculator(&self->block_split_code_.type_code_calculat= or); - self->block_ix_ =3D 0; - self->block_len_ =3D num_blocks =3D=3D 0 ? 0 : block_lengths[0]; - self->entropy_ix_ =3D 0; - self->depths_ =3D 0; - self->bits_ =3D 0; -} - -static void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self) { - BROTLI_FREE(m, self->depths_); - BROTLI_FREE(m, self->bits_); -} - -/* Creates entropy codes of block lengths and block types and stores them - to the bit stream. */ -static void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self, - HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) { - BuildAndStoreBlockSplitCode(self->block_types_, self->block_lengths_, - self->num_blocks_, self->num_block_types_, tree, &self->block_split= _code_, - storage_ix, storage); -} - -/* Stores the next symbol with the entropy code of the current block type= . - Updates the block type and block length at block boundaries. */ -static void StoreSymbol(BlockEncoder* self, size_t symbol, size_t* storag= e_ix, - uint8_t* storage) { - if (self->block_len_ =3D=3D 0) { - size_t block_ix =3D ++self->block_ix_; - uint32_t block_len =3D self->block_lengths_[block_ix]; - uint8_t block_type =3D self->block_types_[block_ix]; - self->block_len_ =3D block_len; - self->entropy_ix_ =3D block_type * self->histogram_length_; - StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0, - storage_ix, storage); - } - --self->block_len_; - { - size_t ix =3D self->entropy_ix_ + symbol; - BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, stora= ge); - } -} - -/* Stores the next symbol with the entropy code of the current block type= and - context value. - Updates the block type and block length at block boundaries. */ -static void StoreSymbolWithContext(BlockEncoder* self, size_t symbol, - size_t context, const uint32_t* context_map, size_t* storage_ix, - uint8_t* storage, const size_t context_bits) { - if (self->block_len_ =3D=3D 0) { - size_t block_ix =3D ++self->block_ix_; - uint32_t block_len =3D self->block_lengths_[block_ix]; - uint8_t block_type =3D self->block_types_[block_ix]; - self->block_len_ =3D block_len; - self->entropy_ix_ =3D (size_t)block_type << context_bits; - StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0, - storage_ix, storage); - } - --self->block_len_; - { - size_t histo_ix =3D context_map[self->entropy_ix_ + context]; - size_t ix =3D histo_ix * self->histogram_length_ + symbol; - BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, stora= ge); - } -} - -#define FN(X) X ## Literal -/* NOLINTNEXTLINE(build/include) */ -#include "./block_encoder_inc.h" -#undef FN - -#define FN(X) X ## Command -/* NOLINTNEXTLINE(build/include) */ -#include "./block_encoder_inc.h" -#undef FN - -#define FN(X) X ## Distance -/* NOLINTNEXTLINE(build/include) */ -#include "./block_encoder_inc.h" -#undef FN - -static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) { - *storage_ix =3D (*storage_ix + 7u) & ~7u; - storage[*storage_ix >> 3] =3D 0; -} - -void BrotliStoreMetaBlock(MemoryManager* m, - const uint8_t* input, size_t start_pos, size_t length, size_t mask, - uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last, - const BrotliEncoderParams* params, ContextType literal_context_mode, - const Command* commands, size_t n_commands, const MetaBlockSplit* mb, - size_t* storage_ix, uint8_t* storage) { - - size_t pos =3D start_pos; - size_t i; - uint32_t num_distance_symbols =3D params->dist.alphabet_size; - uint32_t num_effective_distance_symbols =3D num_distance_symbols; - HuffmanTree* tree; - ContextLut literal_context_lut =3D BROTLI_CONTEXT_LUT(literal_context_m= ode); - BlockEncoder literal_enc; - BlockEncoder command_enc; - BlockEncoder distance_enc; - const BrotliDistanceParams* dist =3D ¶ms->dist; - if (params->large_window && - num_effective_distance_symbols > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMB= OLS) { - num_effective_distance_symbols =3D BROTLI_NUM_HISTOGRAM_DISTANCE_SYMB= OLS; - } - - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); - - tree =3D BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE); - if (BROTLI_IS_OOM(m)) return; - InitBlockEncoder(&literal_enc, BROTLI_NUM_LITERAL_SYMBOLS, - mb->literal_split.num_types, mb->literal_split.types, - mb->literal_split.lengths, mb->literal_split.num_blocks); - InitBlockEncoder(&command_enc, BROTLI_NUM_COMMAND_SYMBOLS, - mb->command_split.num_types, mb->command_split.types, - mb->command_split.lengths, mb->command_split.num_blocks); - InitBlockEncoder(&distance_enc, num_effective_distance_symbols, - mb->distance_split.num_types, mb->distance_split.types, - mb->distance_split.lengths, mb->distance_split.num_blocks); - - BuildAndStoreBlockSwitchEntropyCodes(&literal_enc, tree, storage_ix, st= orage); - BuildAndStoreBlockSwitchEntropyCodes(&command_enc, tree, storage_ix, st= orage); - BuildAndStoreBlockSwitchEntropyCodes( - &distance_enc, tree, storage_ix, storage); - - BrotliWriteBits(2, dist->distance_postfix_bits, storage_ix, storage); - BrotliWriteBits( - 4, dist->num_direct_distance_codes >> dist->distance_postfix_bits, - storage_ix, storage); - for (i =3D 0; i < mb->literal_split.num_types; ++i) { - BrotliWriteBits(2, literal_context_mode, storage_ix, storage); - } - - if (mb->literal_context_map_size =3D=3D 0) { - StoreTrivialContextMap(mb->literal_histograms_size, - BROTLI_LITERAL_CONTEXT_BITS, tree, storage_ix, storage); - } else { - EncodeContextMap(m, - mb->literal_context_map, mb->literal_context_map_size, - mb->literal_histograms_size, tree, storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - } - - if (mb->distance_context_map_size =3D=3D 0) { - StoreTrivialContextMap(mb->distance_histograms_size, - BROTLI_DISTANCE_CONTEXT_BITS, tree, storage_ix, storage); - } else { - EncodeContextMap(m, - mb->distance_context_map, mb->distance_context_map_size, - mb->distance_histograms_size, tree, storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - } - - BuildAndStoreEntropyCodesLiteral(m, &literal_enc, mb->literal_histogram= s, - mb->literal_histograms_size, BROTLI_NUM_LITERAL_SYMBOLS, tree, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - BuildAndStoreEntropyCodesCommand(m, &command_enc, mb->command_histogram= s, - mb->command_histograms_size, BROTLI_NUM_COMMAND_SYMBOLS, tree, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - BuildAndStoreEntropyCodesDistance(m, &distance_enc, mb->distance_histog= rams, - mb->distance_histograms_size, num_distance_symbols, tree, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - BROTLI_FREE(m, tree); - - for (i =3D 0; i < n_commands; ++i) { - const Command cmd =3D commands[i]; - size_t cmd_code =3D cmd.cmd_prefix_; - StoreSymbol(&command_enc, cmd_code, storage_ix, storage); - StoreCommandExtra(&cmd, storage_ix, storage); - if (mb->literal_context_map_size =3D=3D 0) { - size_t j; - for (j =3D cmd.insert_len_; j !=3D 0; --j) { - StoreSymbol(&literal_enc, input[pos & mask], storage_ix, storage)= ; - ++pos; - } - } else { - size_t j; - for (j =3D cmd.insert_len_; j !=3D 0; --j) { - size_t context =3D - BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut); - uint8_t literal =3D input[pos & mask]; - StoreSymbolWithContext(&literal_enc, literal, context, - mb->literal_context_map, storage_ix, storage, - BROTLI_LITERAL_CONTEXT_BITS); - prev_byte2 =3D prev_byte; - prev_byte =3D literal; - ++pos; - } - } - pos +=3D CommandCopyLen(&cmd); - if (CommandCopyLen(&cmd)) { - prev_byte2 =3D input[(pos - 2) & mask]; - prev_byte =3D input[(pos - 1) & mask]; - if (cmd.cmd_prefix_ >=3D 128) { - size_t dist_code =3D cmd.dist_prefix_ & 0x3FF; - uint32_t distnumextra =3D cmd.dist_prefix_ >> 10; - uint64_t distextra =3D cmd.dist_extra_; - if (mb->distance_context_map_size =3D=3D 0) { - StoreSymbol(&distance_enc, dist_code, storage_ix, storage); - } else { - size_t context =3D CommandDistanceContext(&cmd); - StoreSymbolWithContext(&distance_enc, dist_code, context, - mb->distance_context_map, storage_ix, storage, - BROTLI_DISTANCE_CONTEXT_BITS); - } - BrotliWriteBits(distnumextra, distextra, storage_ix, storage); - } - } - } - CleanupBlockEncoder(m, &distance_enc); - CleanupBlockEncoder(m, &command_enc); - CleanupBlockEncoder(m, &literal_enc); - if (is_last) { - JumpToByteBoundary(storage_ix, storage); - } -} - -static void BuildHistograms(const uint8_t* input, - size_t start_pos, - size_t mask, - const Command* commands, - size_t n_commands, - HistogramLiteral* lit_histo, - HistogramCommand* cmd_histo, - HistogramDistance* dist_histo) { - size_t pos =3D start_pos; - size_t i; - for (i =3D 0; i < n_commands; ++i) { - const Command cmd =3D commands[i]; - size_t j; - HistogramAddCommand(cmd_histo, cmd.cmd_prefix_); - for (j =3D cmd.insert_len_; j !=3D 0; --j) { - HistogramAddLiteral(lit_histo, input[pos & mask]); - ++pos; - } - pos +=3D CommandCopyLen(&cmd); - if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >=3D 128) { - HistogramAddDistance(dist_histo, cmd.dist_prefix_ & 0x3FF); - } - } -} - -static void StoreDataWithHuffmanCodes(const uint8_t* input, - size_t start_pos, - size_t mask, - const Command* commands, - size_t n_commands, - const uint8_t* lit_depth, - const uint16_t* lit_bits, - const uint8_t* cmd_depth, - const uint16_t* cmd_bits, - const uint8_t* dist_depth, - const uint16_t* dist_bits, - size_t* storage_ix, - uint8_t* storage) { - size_t pos =3D start_pos; - size_t i; - for (i =3D 0; i < n_commands; ++i) { - const Command cmd =3D commands[i]; - const size_t cmd_code =3D cmd.cmd_prefix_; - size_t j; - BrotliWriteBits( - cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage); - StoreCommandExtra(&cmd, storage_ix, storage); - for (j =3D cmd.insert_len_; j !=3D 0; --j) { - const uint8_t literal =3D input[pos & mask]; - BrotliWriteBits( - lit_depth[literal], lit_bits[literal], storage_ix, storage); - ++pos; - } - pos +=3D CommandCopyLen(&cmd); - if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >=3D 128) { - const size_t dist_code =3D cmd.dist_prefix_ & 0x3FF; - const uint32_t distnumextra =3D cmd.dist_prefix_ >> 10; - const uint32_t distextra =3D cmd.dist_extra_; - BrotliWriteBits(dist_depth[dist_code], dist_bits[dist_code], - storage_ix, storage); - BrotliWriteBits(distnumextra, distextra, storage_ix, storage); - } - } -} - -void BrotliStoreMetaBlockTrivial(MemoryManager* m, - const uint8_t* input, size_t start_pos, size_t length, size_t mask, - BROTLI_BOOL is_last, const BrotliEncoderParams* params, - const Command* commands, size_t n_commands, - size_t* storage_ix, uint8_t* storage) { - HistogramLiteral lit_histo; - HistogramCommand cmd_histo; - HistogramDistance dist_histo; - uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS]; - uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS]; - uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS]; - uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS]; - uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; - uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; - HuffmanTree* tree; - uint32_t num_distance_symbols =3D params->dist.alphabet_size; - - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); - - HistogramClearLiteral(&lit_histo); - HistogramClearCommand(&cmd_histo); - HistogramClearDistance(&dist_histo); - - BuildHistograms(input, start_pos, mask, commands, n_commands, - &lit_histo, &cmd_histo, &dist_histo); - - BrotliWriteBits(13, 0, storage_ix, storage); - - tree =3D BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE); - if (BROTLI_IS_OOM(m)) return; - BuildAndStoreHuffmanTree(lit_histo.data_, BROTLI_NUM_LITERAL_SYMBOLS, - BROTLI_NUM_LITERAL_SYMBOLS, tree, - lit_depth, lit_bits, - storage_ix, storage); - BuildAndStoreHuffmanTree(cmd_histo.data_, BROTLI_NUM_COMMAND_SYMBOLS, - BROTLI_NUM_COMMAND_SYMBOLS, tree, - cmd_depth, cmd_bits, - storage_ix, storage); - BuildAndStoreHuffmanTree(dist_histo.data_, MAX_SIMPLE_DISTANCE_ALPHABET= _SIZE, - num_distance_symbols, tree, - dist_depth, dist_bits, - storage_ix, storage); - BROTLI_FREE(m, tree); - StoreDataWithHuffmanCodes(input, start_pos, mask, commands, - n_commands, lit_depth, lit_bits, - cmd_depth, cmd_bits, - dist_depth, dist_bits, - storage_ix, storage); - if (is_last) { - JumpToByteBoundary(storage_ix, storage); - } -} - -void BrotliStoreMetaBlockFast(MemoryManager* m, - const uint8_t* input, size_t start_pos, size_t length, size_t mask, - BROTLI_BOOL is_last, const BrotliEncoderParams* params, - const Command* commands, size_t n_commands, - size_t* storage_ix, uint8_t* storage) { - uint32_t num_distance_symbols =3D params->dist.alphabet_size; - uint32_t distance_alphabet_bits =3D - Log2FloorNonZero(num_distance_symbols - 1) + 1; - - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); - - BrotliWriteBits(13, 0, storage_ix, storage); - - if (n_commands <=3D 128) { - uint32_t histogram[BROTLI_NUM_LITERAL_SYMBOLS] =3D { 0 }; - size_t pos =3D start_pos; - size_t num_literals =3D 0; - size_t i; - uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS]; - uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS]; - for (i =3D 0; i < n_commands; ++i) { - const Command cmd =3D commands[i]; - size_t j; - for (j =3D cmd.insert_len_; j !=3D 0; --j) { - ++histogram[input[pos & mask]]; - ++pos; - } - num_literals +=3D cmd.insert_len_; - pos +=3D CommandCopyLen(&cmd); - } - BrotliBuildAndStoreHuffmanTreeFast(m, histogram, num_literals, - /* max_bits =3D */ 8, - lit_depth, lit_bits, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - StoreStaticCommandHuffmanTree(storage_ix, storage); - StoreStaticDistanceHuffmanTree(storage_ix, storage); - StoreDataWithHuffmanCodes(input, start_pos, mask, commands, - n_commands, lit_depth, lit_bits, - kStaticCommandCodeDepth, - kStaticCommandCodeBits, - kStaticDistanceCodeDepth, - kStaticDistanceCodeBits, - storage_ix, storage); - } else { - HistogramLiteral lit_histo; - HistogramCommand cmd_histo; - HistogramDistance dist_histo; - uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS]; - uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS]; - uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS]; - uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS]; - uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; - uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; - HistogramClearLiteral(&lit_histo); - HistogramClearCommand(&cmd_histo); - HistogramClearDistance(&dist_histo); - BuildHistograms(input, start_pos, mask, commands, n_commands, - &lit_histo, &cmd_histo, &dist_histo); - BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo.data_, - lit_histo.total_count_, - /* max_bits =3D */ 8, - lit_depth, lit_bits, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - BrotliBuildAndStoreHuffmanTreeFast(m, cmd_histo.data_, - cmd_histo.total_count_, - /* max_bits =3D */ 10, - cmd_depth, cmd_bits, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - BrotliBuildAndStoreHuffmanTreeFast(m, dist_histo.data_, - dist_histo.total_count_, - /* max_bits =3D */ - distance_alphabet_bits, - dist_depth, dist_bits, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - StoreDataWithHuffmanCodes(input, start_pos, mask, commands, - n_commands, lit_depth, lit_bits, - cmd_depth, cmd_bits, - dist_depth, dist_bits, - storage_ix, storage); - } - - if (is_last) { - JumpToByteBoundary(storage_ix, storage); - } -} - -/* This is for storing uncompressed blocks (simple raw storage of - bytes-as-bytes). */ -void BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block, - const uint8_t* BROTLI_RESTRICT inpu= t, - size_t position, size_t mask, - size_t len, - size_t* BROTLI_RESTRICT storage_ix, - uint8_t* BROTLI_RESTRICT storage) { - size_t masked_pos =3D position & mask; - BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage); - JumpToByteBoundary(storage_ix, storage); - - if (masked_pos + len > mask + 1) { - size_t len1 =3D mask + 1 - masked_pos; - memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1); - *storage_ix +=3D len1 << 3; - len -=3D len1; - masked_pos =3D 0; - } - memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len); - *storage_ix +=3D len << 3; - - /* We need to clear the next 4 bytes to continue to be - compatible with BrotliWriteBits. */ - BrotliWriteBitsPrepareStorage(*storage_ix, storage); - - /* Since the uncompressed block itself may not be the final block, add = an - empty one after this. */ - if (is_final_block) { - BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ - BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ - JumpToByteBoundary(storage_ix, storage); - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster.c b/BaseTools/S= ource/C/BrotliCompress/enc/cluster.c deleted file mode 100644 index fdb4fa7d3ab2..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/cluster.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Functions for clustering similar histograms together. */ - -#include "./cluster.h" - -#include "../common/platform.h" -#include -#include "./bit_cost.h" /* BrotliPopulationCost */ -#include "./fast_log.h" -#include "./histogram.h" -#include "./memory.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess( - const HistogramPair* p1, const HistogramPair* p2) { - if (p1->cost_diff !=3D p2->cost_diff) { - return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff); - } - return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1)); -} - -/* Returns entropy reduction of the context map when we combine two clust= ers. */ -static BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b)= { - size_t size_c =3D size_a + size_b; - return (double)size_a * FastLog2(size_a) + - (double)size_b * FastLog2(size_b) - - (double)size_c * FastLog2(size_c); -} - -#define CODE(X) X - -#define FN(X) X ## Literal -#include "./cluster_inc.h" /* NOLINT(build/include) */ -#undef FN - -#define FN(X) X ## Command -#include "./cluster_inc.h" /* NOLINT(build/include) */ -#undef FN - -#define FN(X) X ## Distance -#include "./cluster_inc.h" /* NOLINT(build/include) */ -#undef FN - -#undef CODE - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c b/B= aseTools/Source/C/BrotliCompress/enc/compress_fragment.c deleted file mode 100644 index ca61bc0a7f0d..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c +++ /dev/null @@ -1,790 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Function for fast encoding of an input fragment, independently from th= e input - history. This function uses one-pass processing: when we find a backwa= rd - match, we immediately emit the corresponding command and literal codes= to - the bit stream. - - Adapted from the CompressFragment() function in - https://github.com/google/snappy/blob/master/snappy.cc */ - -#include "./compress_fragment.h" - -#include /* memcmp, memcpy, memset */ - -#include "../common/constants.h" -#include "../common/platform.h" -#include -#include "./brotli_bit_stream.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./find_match_length.h" -#include "./memory.h" -#include "./write_bits.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18) - -/* kHashMul32 multiplier has these properties: - * The multiplier must be odd. Otherwise we may lose the highest bit. - * No long streaks of ones or zeros. - * There is no effort to ensure that it is a prime, the oddity is enoug= h - for this use. - * The number has been tuned heuristically against compression benchmar= ks. */ -static const uint32_t kHashMul32 =3D 0x1E35A7BD; - -static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) { - const uint64_t h =3D (BROTLI_UNALIGNED_LOAD64LE(p) << 24) * kHashMul32; - return (uint32_t)(h >> shift); -} - -static BROTLI_INLINE uint32_t HashBytesAtOffset( - uint64_t v, int offset, size_t shift) { - BROTLI_DCHECK(offset >=3D 0); - BROTLI_DCHECK(offset <=3D 3); - { - const uint64_t h =3D ((v >> (8 * offset)) << 24) * kHashMul32; - return (uint32_t)(h >> shift); - } -} - -static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t= * p2) { - return TO_BROTLI_BOOL( - BrotliUnalignedRead32(p1) =3D=3D BrotliUnalignedRead32(p2) && - p1[4] =3D=3D p2[4]); -} - -/* Builds a literal prefix code into "depths" and "bits" based on the sta= tistics - of the "input" string and stores it into the bit stream. - Note that the prefix code here is built from the pre-LZ77 input, there= fore - we can only approximate the statistics of the actual literal stream. - Moreover, for long inputs we build a histogram from a sample of the in= put - and thus have to assign a non-zero depth for each literal. - Returns estimated compression ratio millibytes/char for encoding given= input - with generated code. */ -static size_t BuildAndStoreLiteralPrefixCode(MemoryManager* m, - const uint8_t* input, - const size_t input_size, - uint8_t depths[256], - uint16_t bits[256], - size_t* storage_ix, - uint8_t* storage) { - uint32_t histogram[256] =3D { 0 }; - size_t histogram_total; - size_t i; - if (input_size < (1 << 15)) { - for (i =3D 0; i < input_size; ++i) { - ++histogram[input[i]]; - } - histogram_total =3D input_size; - for (i =3D 0; i < 256; ++i) { - /* We weigh the first 11 samples with weight 3 to account for the - balancing effect of the LZ77 phase on the histogram. */ - const uint32_t adjust =3D 2 * BROTLI_MIN(uint32_t, histogram[i], 11= u); - histogram[i] +=3D adjust; - histogram_total +=3D adjust; - } - } else { - static const size_t kSampleRate =3D 29; - for (i =3D 0; i < input_size; i +=3D kSampleRate) { - ++histogram[input[i]]; - } - histogram_total =3D (input_size + kSampleRate - 1) / kSampleRate; - for (i =3D 0; i < 256; ++i) { - /* We add 1 to each population count to avoid 0 bit depths (since t= his is - only a sample and we don't know if the symbol appears or not), a= nd we - weigh the first 11 samples with weight 3 to account for the bala= ncing - effect of the LZ77 phase on the histogram (more frequent symbols= are - more likely to be in backward references instead as literals). *= / - const uint32_t adjust =3D 1 + 2 * BROTLI_MIN(uint32_t, histogram[i]= , 11u); - histogram[i] +=3D adjust; - histogram_total +=3D adjust; - } - } - BrotliBuildAndStoreHuffmanTreeFast(m, histogram, histogram_total, - /* max_bits =3D */ 8, - depths, bits, storage_ix, storage); - if (BROTLI_IS_OOM(m)) return 0; - { - size_t literal_ratio =3D 0; - for (i =3D 0; i < 256; ++i) { - if (histogram[i]) literal_ratio +=3D histogram[i] * depths[i]; - } - /* Estimated encoding ratio, millibytes per symbol. */ - return (literal_ratio * 125) / histogram_total; - } -} - -/* Builds a command and distance prefix code (each 64 symbols) into "dept= h" and - "bits" based on "histogram" and stores it into the bit stream. */ -static void BuildAndStoreCommandPrefixCode(const uint32_t histogram[128], - uint8_t depth[128], uint16_t bits[128], size_t* storage_ix, - uint8_t* storage) { - /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */ - HuffmanTree tree[129]; - uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] =3D { 0 }; - uint16_t cmd_bits[64]; - - BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth); - BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]); - /* We have to jump through a few hoops here in order to compute - the command bits because the symbols are in a different order than i= n - the full alphabet. This looks complicated, but having the symbols - in this order in the command bits saves a few branches in the Emit* - functions. */ - memcpy(cmd_depth, depth, 24); - memcpy(cmd_depth + 24, depth + 40, 8); - memcpy(cmd_depth + 32, depth + 24, 8); - memcpy(cmd_depth + 40, depth + 48, 8); - memcpy(cmd_depth + 48, depth + 32, 8); - memcpy(cmd_depth + 56, depth + 56, 8); - BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits); - memcpy(bits, cmd_bits, 48); - memcpy(bits + 24, cmd_bits + 32, 16); - memcpy(bits + 32, cmd_bits + 48, 16); - memcpy(bits + 40, cmd_bits + 24, 16); - memcpy(bits + 48, cmd_bits + 40, 16); - memcpy(bits + 56, cmd_bits + 56, 16); - BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]); - { - /* Create the bit length array for the full command alphabet. */ - size_t i; - memset(cmd_depth, 0, 64); /* only 64 first values were used */ - memcpy(cmd_depth, depth, 8); - memcpy(cmd_depth + 64, depth + 8, 8); - memcpy(cmd_depth + 128, depth + 16, 8); - memcpy(cmd_depth + 192, depth + 24, 8); - memcpy(cmd_depth + 384, depth + 32, 8); - for (i =3D 0; i < 8; ++i) { - cmd_depth[128 + 8 * i] =3D depth[40 + i]; - cmd_depth[256 + 8 * i] =3D depth[48 + i]; - cmd_depth[448 + 8 * i] =3D depth[56 + i]; - } - BrotliStoreHuffmanTree( - cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage)= ; - } - BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage); -} - -/* REQUIRES: insertlen < 6210 */ -static BROTLI_INLINE void EmitInsertLen(size_t insertlen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (insertlen < 6) { - const size_t code =3D insertlen + 40; - BrotliWriteBits(depth[code], bits[code], storage_ix, storage); - ++histo[code]; - } else if (insertlen < 130) { - const size_t tail =3D insertlen - 2; - const uint32_t nbits =3D Log2FloorNonZero(tail) - 1u; - const size_t prefix =3D tail >> nbits; - const size_t inscode =3D (nbits << 1) + prefix + 42; - BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage); - BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage)= ; - ++histo[inscode]; - } else if (insertlen < 2114) { - const size_t tail =3D insertlen - 66; - const uint32_t nbits =3D Log2FloorNonZero(tail); - const size_t code =3D nbits + 50; - BrotliWriteBits(depth[code], bits[code], storage_ix, storage); - BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, stora= ge); - ++histo[code]; - } else { - BrotliWriteBits(depth[61], bits[61], storage_ix, storage); - BrotliWriteBits(12, insertlen - 2114, storage_ix, storage); - ++histo[61]; - } -} - -static BROTLI_INLINE void EmitLongInsertLen(size_t insertlen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (insertlen < 22594) { - BrotliWriteBits(depth[62], bits[62], storage_ix, storage); - BrotliWriteBits(14, insertlen - 6210, storage_ix, storage); - ++histo[62]; - } else { - BrotliWriteBits(depth[63], bits[63], storage_ix, storage); - BrotliWriteBits(24, insertlen - 22594, storage_ix, storage); - ++histo[63]; - } -} - -static BROTLI_INLINE void EmitCopyLen(size_t copylen, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (copylen < 10) { - BrotliWriteBits( - depth[copylen + 14], bits[copylen + 14], storage_ix, storage); - ++histo[copylen + 14]; - } else if (copylen < 134) { - const size_t tail =3D copylen - 6; - const uint32_t nbits =3D Log2FloorNonZero(tail) - 1u; - const size_t prefix =3D tail >> nbits; - const size_t code =3D (nbits << 1) + prefix + 20; - BrotliWriteBits(depth[code], bits[code], storage_ix, storage); - BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage)= ; - ++histo[code]; - } else if (copylen < 2118) { - const size_t tail =3D copylen - 70; - const uint32_t nbits =3D Log2FloorNonZero(tail); - const size_t code =3D nbits + 28; - BrotliWriteBits(depth[code], bits[code], storage_ix, storage); - BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, stora= ge); - ++histo[code]; - } else { - BrotliWriteBits(depth[39], bits[39], storage_ix, storage); - BrotliWriteBits(24, copylen - 2118, storage_ix, storage); - ++histo[39]; - } -} - -static BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen, - const uint8_t depth[128= ], - const uint16_t bits[128= ], - uint32_t histo[128], - size_t* storage_ix, - uint8_t* storage) { - if (copylen < 12) { - BrotliWriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, st= orage); - ++histo[copylen - 4]; - } else if (copylen < 72) { - const size_t tail =3D copylen - 8; - const uint32_t nbits =3D Log2FloorNonZero(tail) - 1; - const size_t prefix =3D tail >> nbits; - const size_t code =3D (nbits << 1) + prefix + 4; - BrotliWriteBits(depth[code], bits[code], storage_ix, storage); - BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage)= ; - ++histo[code]; - } else if (copylen < 136) { - const size_t tail =3D copylen - 8; - const size_t code =3D (tail >> 5) + 30; - BrotliWriteBits(depth[code], bits[code], storage_ix, storage); - BrotliWriteBits(5, tail & 31, storage_ix, storage); - BrotliWriteBits(depth[64], bits[64], storage_ix, storage); - ++histo[code]; - ++histo[64]; - } else if (copylen < 2120) { - const size_t tail =3D copylen - 72; - const uint32_t nbits =3D Log2FloorNonZero(tail); - const size_t code =3D nbits + 28; - BrotliWriteBits(depth[code], bits[code], storage_ix, storage); - BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, stora= ge); - BrotliWriteBits(depth[64], bits[64], storage_ix, storage); - ++histo[code]; - ++histo[64]; - } else { - BrotliWriteBits(depth[39], bits[39], storage_ix, storage); - BrotliWriteBits(24, copylen - 2120, storage_ix, storage); - BrotliWriteBits(depth[64], bits[64], storage_ix, storage); - ++histo[39]; - ++histo[64]; - } -} - -static BROTLI_INLINE void EmitDistance(size_t distance, - const uint8_t depth[128], - const uint16_t bits[128], - uint32_t histo[128], - size_t* storage_ix, uint8_t* stora= ge) { - const size_t d =3D distance + 3; - const uint32_t nbits =3D Log2FloorNonZero(d) - 1u; - const size_t prefix =3D (d >> nbits) & 1; - const size_t offset =3D (2 + prefix) << nbits; - const size_t distcode =3D 2 * (nbits - 1) + prefix + 80; - BrotliWriteBits(depth[distcode], bits[distcode], storage_ix, storage); - BrotliWriteBits(nbits, d - offset, storage_ix, storage); - ++histo[distcode]; -} - -static BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_t= len, - const uint8_t depth[256], - const uint16_t bits[256], - size_t* storage_ix, uint8_t* stora= ge) { - size_t j; - for (j =3D 0; j < len; j++) { - const uint8_t lit =3D input[j]; - BrotliWriteBits(depth[lit], bits[lit], storage_ix, storage); - } -} - -/* REQUIRES: len <=3D 1 << 24. */ -static void BrotliStoreMetaBlockHeader( - size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix, - uint8_t* storage) { - size_t nibbles =3D 6; - /* ISLAST */ - BrotliWriteBits(1, 0, storage_ix, storage); - if (len <=3D (1U << 16)) { - nibbles =3D 4; - } else if (len <=3D (1U << 20)) { - nibbles =3D 5; - } - BrotliWriteBits(2, nibbles - 4, storage_ix, storage); - BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage); - /* ISUNCOMPRESSED */ - BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage); -} - -static void UpdateBits(size_t n_bits, uint32_t bits, size_t pos, - uint8_t* array) { - while (n_bits > 0) { - size_t byte_pos =3D pos >> 3; - size_t n_unchanged_bits =3D pos & 7; - size_t n_changed_bits =3D BROTLI_MIN(size_t, n_bits, 8 - n_unchanged_= bits); - size_t total_bits =3D n_unchanged_bits + n_changed_bits; - uint32_t mask =3D - (~((1u << total_bits) - 1u)) | ((1u << n_unchanged_bits) - 1u); - uint32_t unchanged_bits =3D array[byte_pos] & mask; - uint32_t changed_bits =3D bits & ((1u << n_changed_bits) - 1u); - array[byte_pos] =3D - (uint8_t)((changed_bits << n_unchanged_bits) | unchanged_bits); - n_bits -=3D n_changed_bits; - bits >>=3D n_changed_bits; - pos +=3D n_changed_bits; - } -} - -static void RewindBitPosition(const size_t new_storage_ix, - size_t* storage_ix, uint8_t* storage) { - const size_t bitpos =3D new_storage_ix & 7; - const size_t mask =3D (1u << bitpos) - 1; - storage[new_storage_ix >> 3] &=3D (uint8_t)mask; - *storage_ix =3D new_storage_ix; -} - -static BROTLI_BOOL ShouldMergeBlock( - const uint8_t* data, size_t len, const uint8_t* depths) { - size_t histo[256] =3D { 0 }; - static const size_t kSampleRate =3D 43; - size_t i; - for (i =3D 0; i < len; i +=3D kSampleRate) { - ++histo[data[i]]; - } - { - const size_t total =3D (len + kSampleRate - 1) / kSampleRate; - double r =3D (FastLog2(total) + 0.5) * (double)total + 200; - for (i =3D 0; i < 256; ++i) { - r -=3D (double)histo[i] * (depths[i] + FastLog2(histo[i])); - } - return TO_BROTLI_BOOL(r >=3D 0.0); - } -} - -/* Acceptable loss for uncompressible speedup is 2% */ -#define MIN_RATIO 980 - -static BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode( - const uint8_t* metablock_start, const uint8_t* next_emit, - const size_t insertlen, const size_t literal_ratio) { - const size_t compressed =3D (size_t)(next_emit - metablock_start); - if (compressed * 50 > insertlen) { - return BROTLI_FALSE; - } else { - return TO_BROTLI_BOOL(literal_ratio > MIN_RATIO); - } -} - -static void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t= * end, - const size_t storage_ix_start, - size_t* storage_ix, uint8_t* storag= e) { - const size_t len =3D (size_t)(end - begin); - RewindBitPosition(storage_ix_start, storage_ix, storage); - BrotliStoreMetaBlockHeader(len, 1, storage_ix, storage); - *storage_ix =3D (*storage_ix + 7u) & ~7u; - memcpy(&storage[*storage_ix >> 3], begin, len); - *storage_ix +=3D len << 3; - storage[*storage_ix >> 3] =3D 0; -} - -static uint32_t kCmdHistoSeed[128] =3D { - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 0, 0, 0, -}; - -static BROTLI_INLINE void BrotliCompressFragmentFastImpl( - MemoryManager* m, const uint8_t* input, size_t input_size, - BROTLI_BOOL is_last, int* table, size_t table_bits, uint8_t cmd_depth= [128], - uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, - size_t* storage_ix, uint8_t* storage) { - uint32_t cmd_histo[128]; - const uint8_t* ip_end; - - /* "next_emit" is a pointer to the first byte that is not covered by a - previous copy. Bytes between "next_emit" and the start of the next c= opy or - the end of the input will be emitted as literal bytes. */ - const uint8_t* next_emit =3D input; - /* Save the start of the first block for position and distance computat= ions. - */ - const uint8_t* base_ip =3D input; - - static const size_t kFirstBlockSize =3D 3 << 15; - static const size_t kMergeBlockSize =3D 1 << 16; - - const size_t kInputMarginBytes =3D BROTLI_WINDOW_GAP; - const size_t kMinMatchLen =3D 5; - - const uint8_t* metablock_start =3D input; - size_t block_size =3D BROTLI_MIN(size_t, input_size, kFirstBlockSize); - size_t total_block_size =3D block_size; - /* Save the bit position of the MLEN field of the meta-block header, so= that - we can update it later if we decide to extend this meta-block. */ - size_t mlen_storage_ix =3D *storage_ix + 3; - - uint8_t lit_depth[256]; - uint16_t lit_bits[256]; - - size_t literal_ratio; - - const uint8_t* ip; - int last_distance; - - const size_t shift =3D 64u - table_bits; - - BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage); - /* No block splits, no contexts. */ - BrotliWriteBits(13, 0, storage_ix, storage); - - literal_ratio =3D BuildAndStoreLiteralPrefixCode( - m, input, block_size, lit_depth, lit_bits, storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - - { - /* Store the pre-compressed command and distance prefix codes. */ - size_t i; - for (i =3D 0; i + 7 < *cmd_code_numbits; i +=3D 8) { - BrotliWriteBits(8, cmd_code[i >> 3], storage_ix, storage); - } - } - BrotliWriteBits(*cmd_code_numbits & 7, cmd_code[*cmd_code_numbits >> 3]= , - storage_ix, storage); - - emit_commands: - /* Initialize the command and distance histograms. We will gather - statistics of command and distance codes during the processing - of this block and use it to update the command and distance - prefix codes for the next block. */ - memcpy(cmd_histo, kCmdHistoSeed, sizeof(kCmdHistoSeed)); - - /* "ip" is the input pointer. */ - ip =3D input; - last_distance =3D -1; - ip_end =3D input + block_size; - - if (BROTLI_PREDICT_TRUE(block_size >=3D kInputMarginBytes)) { - /* For the last block, we need to keep a 16 bytes margin so that we c= an be - sure that all distances are at most window size - 16. - For all other blocks, we only need to keep a margin of 5 bytes so = that - we don't go over the block size with a copy. */ - const size_t len_limit =3D BROTLI_MIN(size_t, block_size - kMinMatchL= en, - input_size - kInputMarginBytes); - const uint8_t* ip_limit =3D input + len_limit; - - uint32_t next_hash; - for (next_hash =3D Hash(++ip, shift); ; ) { - /* Step 1: Scan forward in the input looking for a 5-byte-long matc= h. - If we get close to exhausting the input then goto emit_remainder= . - - Heuristic match skipping: If 32 bytes are scanned with no matche= s - found, start looking only at every other byte. If 32 more bytes = are - scanned, look at every third byte, etc.. When a match is found, - immediately go back to looking at every byte. This is a small lo= ss - (~5% performance, ~0.1% density) for compressible data due to mo= re - bookkeeping, but for non-compressible data (such as JPEG) it's a= huge - win since the compressor quickly "realizes" the data is incompre= ssible - and doesn't bother looking for matches everywhere. - - The "skip" variable keeps track of how many bytes there are sinc= e the - last match; dividing it by 32 (i.e. right-shifting by five) give= s the - number of bytes to move ahead for each iteration. */ - uint32_t skip =3D 32; - - const uint8_t* next_ip =3D ip; - const uint8_t* candidate; - BROTLI_DCHECK(next_emit < ip); -trawl: - do { - uint32_t hash =3D next_hash; - uint32_t bytes_between_hash_lookups =3D skip++ >> 5; - BROTLI_DCHECK(hash =3D=3D Hash(next_ip, shift)); - ip =3D next_ip; - next_ip =3D ip + bytes_between_hash_lookups; - if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) { - goto emit_remainder; - } - next_hash =3D Hash(next_ip, shift); - candidate =3D ip - last_distance; - if (IsMatch(ip, candidate)) { - if (BROTLI_PREDICT_TRUE(candidate < ip)) { - table[hash] =3D (int)(ip - base_ip); - break; - } - } - candidate =3D base_ip + table[hash]; - BROTLI_DCHECK(candidate >=3D base_ip); - BROTLI_DCHECK(candidate < ip); - - table[hash] =3D (int)(ip - base_ip); - } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate))); - - /* Check copy distance. If candidate is not feasible, continue sear= ch. - Checking is done outside of hot loop to reduce overhead. */ - if (ip - candidate > MAX_DISTANCE) goto trawl; - - /* Step 2: Emit the found match together with the literal bytes fro= m - "next_emit" to the bit stream, and then see if we can find a nex= t match - immediately afterwards. Repeat until we find no match for the in= put - without emitting some literal bytes. */ - - { - /* We have a 5-byte match at ip, and we need to emit bytes in - [next_emit, ip). */ - const uint8_t* base =3D ip; - size_t matched =3D 5 + FindMatchLengthWithLimit( - candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5); - int distance =3D (int)(base - candidate); /* > 0 */ - size_t insert =3D (size_t)(base - next_emit); - ip +=3D matched; - BROTLI_DCHECK(0 =3D=3D memcmp(base, candidate, matched)); - if (BROTLI_PREDICT_TRUE(insert < 6210)) { - EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - } else if (ShouldUseUncompressedMode(metablock_start, next_emit, = insert, - literal_ratio)) { - EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_i= x - 3, - storage_ix, storage); - input_size -=3D (size_t)(base - input); - input =3D base; - next_emit =3D input; - goto next_block; - } else { - EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - } - EmitLiterals(next_emit, insert, lit_depth, lit_bits, - storage_ix, storage); - if (distance =3D=3D last_distance) { - BrotliWriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storag= e); - ++cmd_histo[64]; - } else { - EmitDistance((size_t)distance, cmd_depth, cmd_bits, - cmd_histo, storage_ix, storage); - last_distance =3D distance; - } - EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - - next_emit =3D ip; - if (BROTLI_PREDICT_FALSE(ip >=3D ip_limit)) { - goto emit_remainder; - } - /* We could immediately start working at ip now, but to improve - compression we first update "table" with the hashes of some po= sitions - within the last copy. */ - { - uint64_t input_bytes =3D BROTLI_UNALIGNED_LOAD64LE(ip - 3); - uint32_t prev_hash =3D HashBytesAtOffset(input_bytes, 0, shift)= ; - uint32_t cur_hash =3D HashBytesAtOffset(input_bytes, 3, shift); - table[prev_hash] =3D (int)(ip - base_ip - 3); - prev_hash =3D HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] =3D (int)(ip - base_ip - 2); - prev_hash =3D HashBytesAtOffset(input_bytes, 2, shift); - table[prev_hash] =3D (int)(ip - base_ip - 1); - - candidate =3D base_ip + table[cur_hash]; - table[cur_hash] =3D (int)(ip - base_ip); - } - } - - while (IsMatch(ip, candidate)) { - /* We have a 5-byte match at ip, and no need to emit any literal = bytes - prior to ip. */ - const uint8_t* base =3D ip; - size_t matched =3D 5 + FindMatchLengthWithLimit( - candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5); - if (ip - candidate > MAX_DISTANCE) break; - ip +=3D matched; - last_distance =3D (int)(base - candidate); /* > 0 */ - BROTLI_DCHECK(0 =3D=3D memcmp(base, candidate, matched)); - EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - EmitDistance((size_t)last_distance, cmd_depth, cmd_bits, - cmd_histo, storage_ix, storage); - - next_emit =3D ip; - if (BROTLI_PREDICT_FALSE(ip >=3D ip_limit)) { - goto emit_remainder; - } - /* We could immediately start working at ip now, but to improve - compression we first update "table" with the hashes of some po= sitions - within the last copy. */ - { - uint64_t input_bytes =3D BROTLI_UNALIGNED_LOAD64LE(ip - 3); - uint32_t prev_hash =3D HashBytesAtOffset(input_bytes, 0, shift)= ; - uint32_t cur_hash =3D HashBytesAtOffset(input_bytes, 3, shift); - table[prev_hash] =3D (int)(ip - base_ip - 3); - prev_hash =3D HashBytesAtOffset(input_bytes, 1, shift); - table[prev_hash] =3D (int)(ip - base_ip - 2); - prev_hash =3D HashBytesAtOffset(input_bytes, 2, shift); - table[prev_hash] =3D (int)(ip - base_ip - 1); - - candidate =3D base_ip + table[cur_hash]; - table[cur_hash] =3D (int)(ip - base_ip); - } - } - - next_hash =3D Hash(++ip, shift); - } - } - - emit_remainder: - BROTLI_DCHECK(next_emit <=3D ip_end); - input +=3D block_size; - input_size -=3D block_size; - block_size =3D BROTLI_MIN(size_t, input_size, kMergeBlockSize); - - /* Decide if we want to continue this meta-block instead of emitting th= e - last insert-only command. */ - if (input_size > 0 && - total_block_size + block_size <=3D (1 << 20) && - ShouldMergeBlock(input, block_size, lit_depth)) { - BROTLI_DCHECK(total_block_size > (1 << 16)); - /* Update the size of the current meta-block and continue emitting co= mmands. - We can do this because the current size and the new size both have= 5 - nibbles. */ - total_block_size +=3D block_size; - UpdateBits(20, (uint32_t)(total_block_size - 1), mlen_storage_ix, sto= rage); - goto emit_commands; - } - - /* Emit the remaining bytes as literals. */ - if (next_emit < ip_end) { - const size_t insert =3D (size_t)(ip_end - next_emit); - if (BROTLI_PREDICT_TRUE(insert < 6210)) { - EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, st= orage); - } else if (ShouldUseUncompressedMode(metablock_start, next_emit, inse= rt, - literal_ratio)) { - EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix = - 3, - storage_ix, storage); - } else { - EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo, - storage_ix, storage); - EmitLiterals(next_emit, insert, lit_depth, lit_bits, - storage_ix, storage); - } - } - next_emit =3D ip_end; - -next_block: - /* If we have more data, write a new meta-block header and prefix codes= and - then continue emitting commands. */ - if (input_size > 0) { - metablock_start =3D input; - block_size =3D BROTLI_MIN(size_t, input_size, kFirstBlockSize); - total_block_size =3D block_size; - /* Save the bit position of the MLEN field of the meta-block header, = so that - we can update it later if we decide to extend this meta-block. */ - mlen_storage_ix =3D *storage_ix + 3; - BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage); - /* No block splits, no contexts. */ - BrotliWriteBits(13, 0, storage_ix, storage); - literal_ratio =3D BuildAndStoreLiteralPrefixCode( - m, input, block_size, lit_depth, lit_bits, storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits, - storage_ix, storage); - goto emit_commands; - } - - if (!is_last) { - /* If this is not the last block, update the command and distance pre= fix - codes for the next block and store the compressed forms. */ - cmd_code[0] =3D 0; - *cmd_code_numbits =3D 0; - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits, - cmd_code_numbits, cmd_code); - } -} - -#define FOR_TABLE_BITS_(X) X(9) X(11) X(13) X(15) - -#define BAKE_METHOD_PARAM_(B) \ -static BROTLI_NOINLINE void BrotliCompressFragmentFastImpl ## B( = \ - MemoryManager* m, const uint8_t* input, size_t input_size, = \ - BROTLI_BOOL is_last, int* table, uint8_t cmd_depth[128], = \ - uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, = \ - size_t* storage_ix, uint8_t* storage) { = \ - BrotliCompressFragmentFastImpl(m, input, input_size, is_last, table, B,= \ - cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storag= e); \ -} -FOR_TABLE_BITS_(BAKE_METHOD_PARAM_) -#undef BAKE_METHOD_PARAM_ - -void BrotliCompressFragmentFast( - MemoryManager* m, const uint8_t* input, size_t input_size, - BROTLI_BOOL is_last, int* table, size_t table_size, uint8_t cmd_depth= [128], - uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, - size_t* storage_ix, uint8_t* storage) { - const size_t initial_storage_ix =3D *storage_ix; - const size_t table_bits =3D Log2FloorNonZero(table_size); - - if (input_size =3D=3D 0) { - BROTLI_DCHECK(is_last); - BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ - BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ - *storage_ix =3D (*storage_ix + 7u) & ~7u; - return; - } - - switch (table_bits) { -#define CASE_(B) \ - case B: \ - BrotliCompressFragmentFastImpl ## B( \ - m, input, input_size, is_last, table, cmd_depth, cmd_bits, \ - cmd_code_numbits, cmd_code, storage_ix, storage); \ - break; - FOR_TABLE_BITS_(CASE_) -#undef CASE_ - default: BROTLI_DCHECK(0); break; - } - - /* If output is larger than single uncompressed block, rewrite it. */ - if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) { - EmitUncompressedMetaBlock(input, input + input_size, initial_storage_= ix, - storage_ix, storage); - } - - if (is_last) { - BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ - BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ - *storage_ix =3D (*storage_ix + 7u) & ~7u; - } -} - -#undef FOR_TABLE_BITS_ - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_p= ass.c b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c deleted file mode 100644 index 0d4d3b597eb9..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c +++ /dev/null @@ -1,645 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Function for fast encoding of an input fragment, independently from th= e input - history. This function uses two-pass processing: in the first pass we = save - the found backward matches and literal bytes into a buffer, and in the - second pass we emit them into the bit stream using prefix codes built = based - on the actual command and literal byte histograms. */ - -#include "./compress_fragment_two_pass.h" - -#include /* memcmp, memcpy, memset */ - -#include "../common/constants.h" -#include "../common/platform.h" -#include -#include "./bit_cost.h" -#include "./brotli_bit_stream.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./find_match_length.h" -#include "./memory.h" -#include "./write_bits.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18) - -/* kHashMul32 multiplier has these properties: - * The multiplier must be odd. Otherwise we may lose the highest bit. - * No long streaks of ones or zeros. - * There is no effort to ensure that it is a prime, the oddity is enoug= h - for this use. - * The number has been tuned heuristically against compression benchmar= ks. */ -static const uint32_t kHashMul32 =3D 0x1E35A7BD; - -static BROTLI_INLINE uint32_t Hash(const uint8_t* p, - size_t shift, size_t length) { - const uint64_t h =3D - (BROTLI_UNALIGNED_LOAD64LE(p) << ((8 - length) * 8)) * kHashMul32; - return (uint32_t)(h >> shift); -} - -static BROTLI_INLINE uint32_t HashBytesAtOffset(uint64_t v, size_t offset= , - size_t shift, size_t length) { - BROTLI_DCHECK(offset <=3D 8 - length); - { - const uint64_t h =3D ((v >> (8 * offset)) << ((8 - length) * 8)) * kH= ashMul32; - return (uint32_t)(h >> shift); - } -} - -static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t= * p2, - size_t length) { - if (BrotliUnalignedRead32(p1) =3D=3D BrotliUnalignedRead32(p2)) { - if (length =3D=3D 4) return BROTLI_TRUE; - return TO_BROTLI_BOOL(p1[4] =3D=3D p2[4] && p1[5] =3D=3D p2[5]); - } - return BROTLI_FALSE; -} - -/* Builds a command and distance prefix code (each 64 symbols) into "dept= h" and - "bits" based on "histogram" and stores it into the bit stream. */ -static void BuildAndStoreCommandPrefixCode( - const uint32_t histogram[128], - uint8_t depth[128], uint16_t bits[128], - size_t* storage_ix, uint8_t* storage) { - /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */ - HuffmanTree tree[129]; - uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] =3D { 0 }; - uint16_t cmd_bits[64]; - BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth); - BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]); - /* We have to jump through a few hoops here in order to compute - the command bits because the symbols are in a different order than i= n - the full alphabet. This looks complicated, but having the symbols - in this order in the command bits saves a few branches in the Emit* - functions. */ - memcpy(cmd_depth, depth + 24, 24); - memcpy(cmd_depth + 24, depth, 8); - memcpy(cmd_depth + 32, depth + 48, 8); - memcpy(cmd_depth + 40, depth + 8, 8); - memcpy(cmd_depth + 48, depth + 56, 8); - memcpy(cmd_depth + 56, depth + 16, 8); - BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits); - memcpy(bits, cmd_bits + 24, 16); - memcpy(bits + 8, cmd_bits + 40, 16); - memcpy(bits + 16, cmd_bits + 56, 16); - memcpy(bits + 24, cmd_bits, 48); - memcpy(bits + 48, cmd_bits + 32, 16); - memcpy(bits + 56, cmd_bits + 48, 16); - BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]); - { - /* Create the bit length array for the full command alphabet. */ - size_t i; - memset(cmd_depth, 0, 64); /* only 64 first values were used */ - memcpy(cmd_depth, depth + 24, 8); - memcpy(cmd_depth + 64, depth + 32, 8); - memcpy(cmd_depth + 128, depth + 40, 8); - memcpy(cmd_depth + 192, depth + 48, 8); - memcpy(cmd_depth + 384, depth + 56, 8); - for (i =3D 0; i < 8; ++i) { - cmd_depth[128 + 8 * i] =3D depth[i]; - cmd_depth[256 + 8 * i] =3D depth[8 + i]; - cmd_depth[448 + 8 * i] =3D depth[16 + i]; - } - BrotliStoreHuffmanTree( - cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage)= ; - } - BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage); -} - -static BROTLI_INLINE void EmitInsertLen( - uint32_t insertlen, uint32_t** commands) { - if (insertlen < 6) { - **commands =3D insertlen; - } else if (insertlen < 130) { - const uint32_t tail =3D insertlen - 2; - const uint32_t nbits =3D Log2FloorNonZero(tail) - 1u; - const uint32_t prefix =3D tail >> nbits; - const uint32_t inscode =3D (nbits << 1) + prefix + 2; - const uint32_t extra =3D tail - (prefix << nbits); - **commands =3D inscode | (extra << 8); - } else if (insertlen < 2114) { - const uint32_t tail =3D insertlen - 66; - const uint32_t nbits =3D Log2FloorNonZero(tail); - const uint32_t code =3D nbits + 10; - const uint32_t extra =3D tail - (1u << nbits); - **commands =3D code | (extra << 8); - } else if (insertlen < 6210) { - const uint32_t extra =3D insertlen - 2114; - **commands =3D 21 | (extra << 8); - } else if (insertlen < 22594) { - const uint32_t extra =3D insertlen - 6210; - **commands =3D 22 | (extra << 8); - } else { - const uint32_t extra =3D insertlen - 22594; - **commands =3D 23 | (extra << 8); - } - ++(*commands); -} - -static BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t** commands= ) { - if (copylen < 10) { - **commands =3D (uint32_t)(copylen + 38); - } else if (copylen < 134) { - const size_t tail =3D copylen - 6; - const size_t nbits =3D Log2FloorNonZero(tail) - 1; - const size_t prefix =3D tail >> nbits; - const size_t code =3D (nbits << 1) + prefix + 44; - const size_t extra =3D tail - (prefix << nbits); - **commands =3D (uint32_t)(code | (extra << 8)); - } else if (copylen < 2118) { - const size_t tail =3D copylen - 70; - const size_t nbits =3D Log2FloorNonZero(tail); - const size_t code =3D nbits + 52; - const size_t extra =3D tail - ((size_t)1 << nbits); - **commands =3D (uint32_t)(code | (extra << 8)); - } else { - const size_t extra =3D copylen - 2118; - **commands =3D (uint32_t)(63 | (extra << 8)); - } - ++(*commands); -} - -static BROTLI_INLINE void EmitCopyLenLastDistance( - size_t copylen, uint32_t** commands) { - if (copylen < 12) { - **commands =3D (uint32_t)(copylen + 20); - ++(*commands); - } else if (copylen < 72) { - const size_t tail =3D copylen - 8; - const size_t nbits =3D Log2FloorNonZero(tail) - 1; - const size_t prefix =3D tail >> nbits; - const size_t code =3D (nbits << 1) + prefix + 28; - const size_t extra =3D tail - (prefix << nbits); - **commands =3D (uint32_t)(code | (extra << 8)); - ++(*commands); - } else if (copylen < 136) { - const size_t tail =3D copylen - 8; - const size_t code =3D (tail >> 5) + 54; - const size_t extra =3D tail & 31; - **commands =3D (uint32_t)(code | (extra << 8)); - ++(*commands); - **commands =3D 64; - ++(*commands); - } else if (copylen < 2120) { - const size_t tail =3D copylen - 72; - const size_t nbits =3D Log2FloorNonZero(tail); - const size_t code =3D nbits + 52; - const size_t extra =3D tail - ((size_t)1 << nbits); - **commands =3D (uint32_t)(code | (extra << 8)); - ++(*commands); - **commands =3D 64; - ++(*commands); - } else { - const size_t extra =3D copylen - 2120; - **commands =3D (uint32_t)(63 | (extra << 8)); - ++(*commands); - **commands =3D 64; - ++(*commands); - } -} - -static BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t** comm= ands) { - uint32_t d =3D distance + 3; - uint32_t nbits =3D Log2FloorNonZero(d) - 1; - const uint32_t prefix =3D (d >> nbits) & 1; - const uint32_t offset =3D (2 + prefix) << nbits; - const uint32_t distcode =3D 2 * (nbits - 1) + prefix + 80; - uint32_t extra =3D d - offset; - **commands =3D distcode | (extra << 8); - ++(*commands); -} - -/* REQUIRES: len <=3D 1 << 24. */ -static void BrotliStoreMetaBlockHeader( - size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix, - uint8_t* storage) { - size_t nibbles =3D 6; - /* ISLAST */ - BrotliWriteBits(1, 0, storage_ix, storage); - if (len <=3D (1U << 16)) { - nibbles =3D 4; - } else if (len <=3D (1U << 20)) { - nibbles =3D 5; - } - BrotliWriteBits(2, nibbles - 4, storage_ix, storage); - BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage); - /* ISUNCOMPRESSED */ - BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage); -} - -static BROTLI_INLINE void CreateCommands(const uint8_t* input, - size_t block_size, size_t input_size, const uint8_t* base_ip, int* ta= ble, - size_t table_bits, size_t min_match, - uint8_t** literals, uint32_t** commands) { - /* "ip" is the input pointer. */ - const uint8_t* ip =3D input; - const size_t shift =3D 64u - table_bits; - const uint8_t* ip_end =3D input + block_size; - /* "next_emit" is a pointer to the first byte that is not covered by a - previous copy. Bytes between "next_emit" and the start of the next c= opy or - the end of the input will be emitted as literal bytes. */ - const uint8_t* next_emit =3D input; - - int last_distance =3D -1; - const size_t kInputMarginBytes =3D BROTLI_WINDOW_GAP; - - if (BROTLI_PREDICT_TRUE(block_size >=3D kInputMarginBytes)) { - /* For the last block, we need to keep a 16 bytes margin so that we c= an be - sure that all distances are at most window size - 16. - For all other blocks, we only need to keep a margin of 5 bytes so = that - we don't go over the block size with a copy. */ - const size_t len_limit =3D BROTLI_MIN(size_t, block_size - min_match, - input_size - kInputMarginBytes); - const uint8_t* ip_limit =3D input + len_limit; - - uint32_t next_hash; - for (next_hash =3D Hash(++ip, shift, min_match); ; ) { - /* Step 1: Scan forward in the input looking for a 6-byte-long matc= h. - If we get close to exhausting the input then goto emit_remainder= . - - Heuristic match skipping: If 32 bytes are scanned with no matche= s - found, start looking only at every other byte. If 32 more bytes = are - scanned, look at every third byte, etc.. When a match is found, - immediately go back to looking at every byte. This is a small lo= ss - (~5% performance, ~0.1% density) for compressible data due to mo= re - bookkeeping, but for non-compressible data (such as JPEG) it's a= huge - win since the compressor quickly "realizes" the data is incompre= ssible - and doesn't bother looking for matches everywhere. - - The "skip" variable keeps track of how many bytes there are sinc= e the - last match; dividing it by 32 (ie. right-shifting by five) gives= the - number of bytes to move ahead for each iteration. */ - uint32_t skip =3D 32; - - const uint8_t* next_ip =3D ip; - const uint8_t* candidate; - - BROTLI_DCHECK(next_emit < ip); -trawl: - do { - uint32_t hash =3D next_hash; - uint32_t bytes_between_hash_lookups =3D skip++ >> 5; - ip =3D next_ip; - BROTLI_DCHECK(hash =3D=3D Hash(ip, shift, min_match)); - next_ip =3D ip + bytes_between_hash_lookups; - if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) { - goto emit_remainder; - } - next_hash =3D Hash(next_ip, shift, min_match); - candidate =3D ip - last_distance; - if (IsMatch(ip, candidate, min_match)) { - if (BROTLI_PREDICT_TRUE(candidate < ip)) { - table[hash] =3D (int)(ip - base_ip); - break; - } - } - candidate =3D base_ip + table[hash]; - BROTLI_DCHECK(candidate >=3D base_ip); - BROTLI_DCHECK(candidate < ip); - - table[hash] =3D (int)(ip - base_ip); - } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate, min_match))); - - /* Check copy distance. If candidate is not feasible, continue sear= ch. - Checking is done outside of hot loop to reduce overhead. */ - if (ip - candidate > MAX_DISTANCE) goto trawl; - - /* Step 2: Emit the found match together with the literal bytes fro= m - "next_emit", and then see if we can find a next match immediatel= y - afterwards. Repeat until we find no match for the input - without emitting some literal bytes. */ - - { - /* We have a 6-byte match at ip, and we need to emit bytes in - [next_emit, ip). */ - const uint8_t* base =3D ip; - size_t matched =3D min_match + FindMatchLengthWithLimit( - candidate + min_match, ip + min_match, - (size_t)(ip_end - ip) - min_match); - int distance =3D (int)(base - candidate); /* > 0 */ - int insert =3D (int)(base - next_emit); - ip +=3D matched; - BROTLI_DCHECK(0 =3D=3D memcmp(base, candidate, matched)); - EmitInsertLen((uint32_t)insert, commands); - memcpy(*literals, next_emit, (size_t)insert); - *literals +=3D insert; - if (distance =3D=3D last_distance) { - **commands =3D 64; - ++(*commands); - } else { - EmitDistance((uint32_t)distance, commands); - last_distance =3D distance; - } - EmitCopyLenLastDistance(matched, commands); - - next_emit =3D ip; - if (BROTLI_PREDICT_FALSE(ip >=3D ip_limit)) { - goto emit_remainder; - } - { - /* We could immediately start working at ip now, but to improve - compression we first update "table" with the hashes of some - positions within the last copy. */ - uint64_t input_bytes; - uint32_t cur_hash; - uint32_t prev_hash; - if (min_match =3D=3D 4) { - input_bytes =3D BROTLI_UNALIGNED_LOAD64LE(ip - 3); - cur_hash =3D HashBytesAtOffset(input_bytes, 3, shift, min_mat= ch); - prev_hash =3D HashBytesAtOffset(input_bytes, 0, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 3); - prev_hash =3D HashBytesAtOffset(input_bytes, 1, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 2); - prev_hash =3D HashBytesAtOffset(input_bytes, 0, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 1); - } else { - input_bytes =3D BROTLI_UNALIGNED_LOAD64LE(ip - 5); - prev_hash =3D HashBytesAtOffset(input_bytes, 0, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 5); - prev_hash =3D HashBytesAtOffset(input_bytes, 1, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 4); - prev_hash =3D HashBytesAtOffset(input_bytes, 2, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 3); - input_bytes =3D BROTLI_UNALIGNED_LOAD64LE(ip - 2); - cur_hash =3D HashBytesAtOffset(input_bytes, 2, shift, min_mat= ch); - prev_hash =3D HashBytesAtOffset(input_bytes, 0, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 2); - prev_hash =3D HashBytesAtOffset(input_bytes, 1, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 1); - } - - candidate =3D base_ip + table[cur_hash]; - table[cur_hash] =3D (int)(ip - base_ip); - } - } - - while (ip - candidate <=3D MAX_DISTANCE && - IsMatch(ip, candidate, min_match)) { - /* We have a 6-byte match at ip, and no need to emit any - literal bytes prior to ip. */ - const uint8_t* base =3D ip; - size_t matched =3D min_match + FindMatchLengthWithLimit( - candidate + min_match, ip + min_match, - (size_t)(ip_end - ip) - min_match); - ip +=3D matched; - last_distance =3D (int)(base - candidate); /* > 0 */ - BROTLI_DCHECK(0 =3D=3D memcmp(base, candidate, matched)); - EmitCopyLen(matched, commands); - EmitDistance((uint32_t)last_distance, commands); - - next_emit =3D ip; - if (BROTLI_PREDICT_FALSE(ip >=3D ip_limit)) { - goto emit_remainder; - } - { - /* We could immediately start working at ip now, but to improve - compression we first update "table" with the hashes of some - positions within the last copy. */ - uint64_t input_bytes; - uint32_t cur_hash; - uint32_t prev_hash; - if (min_match =3D=3D 4) { - input_bytes =3D BROTLI_UNALIGNED_LOAD64LE(ip - 3); - cur_hash =3D HashBytesAtOffset(input_bytes, 3, shift, min_mat= ch); - prev_hash =3D HashBytesAtOffset(input_bytes, 0, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 3); - prev_hash =3D HashBytesAtOffset(input_bytes, 1, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 2); - prev_hash =3D HashBytesAtOffset(input_bytes, 2, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 1); - } else { - input_bytes =3D BROTLI_UNALIGNED_LOAD64LE(ip - 5); - prev_hash =3D HashBytesAtOffset(input_bytes, 0, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 5); - prev_hash =3D HashBytesAtOffset(input_bytes, 1, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 4); - prev_hash =3D HashBytesAtOffset(input_bytes, 2, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 3); - input_bytes =3D BROTLI_UNALIGNED_LOAD64LE(ip - 2); - cur_hash =3D HashBytesAtOffset(input_bytes, 2, shift, min_mat= ch); - prev_hash =3D HashBytesAtOffset(input_bytes, 0, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 2); - prev_hash =3D HashBytesAtOffset(input_bytes, 1, shift, min_ma= tch); - table[prev_hash] =3D (int)(ip - base_ip - 1); - } - - candidate =3D base_ip + table[cur_hash]; - table[cur_hash] =3D (int)(ip - base_ip); - } - } - - next_hash =3D Hash(++ip, shift, min_match); - } - } - -emit_remainder: - BROTLI_DCHECK(next_emit <=3D ip_end); - /* Emit the remaining bytes as literals. */ - if (next_emit < ip_end) { - const uint32_t insert =3D (uint32_t)(ip_end - next_emit); - EmitInsertLen(insert, commands); - memcpy(*literals, next_emit, insert); - *literals +=3D insert; - } -} - -static void StoreCommands(MemoryManager* m, - const uint8_t* literals, const size_t num_liter= als, - const uint32_t* commands, const size_t num_comm= ands, - size_t* storage_ix, uint8_t* storage) { - static const uint32_t kNumExtraBits[128] =3D { - 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 1= 4, 24, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10,= 24, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, - 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, - 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, - }; - static const uint32_t kInsertOffset[24] =3D { - 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322= , 578, - 1090, 2114, 6210, 22594, - }; - - uint8_t lit_depths[256]; - uint16_t lit_bits[256]; - uint32_t lit_histo[256] =3D { 0 }; - uint8_t cmd_depths[128] =3D { 0 }; - uint16_t cmd_bits[128] =3D { 0 }; - uint32_t cmd_histo[128] =3D { 0 }; - size_t i; - for (i =3D 0; i < num_literals; ++i) { - ++lit_histo[literals[i]]; - } - BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo, num_literals, - /* max_bits =3D */ 8, - lit_depths, lit_bits, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - - for (i =3D 0; i < num_commands; ++i) { - const uint32_t code =3D commands[i] & 0xFF; - BROTLI_DCHECK(code < 128); - ++cmd_histo[code]; - } - cmd_histo[1] +=3D 1; - cmd_histo[2] +=3D 1; - cmd_histo[64] +=3D 1; - cmd_histo[84] +=3D 1; - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depths, cmd_bits, - storage_ix, storage); - - for (i =3D 0; i < num_commands; ++i) { - const uint32_t cmd =3D commands[i]; - const uint32_t code =3D cmd & 0xFF; - const uint32_t extra =3D cmd >> 8; - BROTLI_DCHECK(code < 128); - BrotliWriteBits(cmd_depths[code], cmd_bits[code], storage_ix, storage= ); - BrotliWriteBits(kNumExtraBits[code], extra, storage_ix, storage); - if (code < 24) { - const uint32_t insert =3D kInsertOffset[code] + extra; - uint32_t j; - for (j =3D 0; j < insert; ++j) { - const uint8_t lit =3D *literals; - BrotliWriteBits(lit_depths[lit], lit_bits[lit], storage_ix, stora= ge); - ++literals; - } - } - } -} - -/* Acceptable loss for uncompressible speedup is 2% */ -#define MIN_RATIO 0.98 -#define SAMPLE_RATE 43 - -static BROTLI_BOOL ShouldCompress( - const uint8_t* input, size_t input_size, size_t num_literals) { - double corpus_size =3D (double)input_size; - if (num_literals < MIN_RATIO * corpus_size) { - return BROTLI_TRUE; - } else { - uint32_t literal_histo[256] =3D { 0 }; - const double max_total_bit_cost =3D corpus_size * 8 * MIN_RATIO / SAM= PLE_RATE; - size_t i; - for (i =3D 0; i < input_size; i +=3D SAMPLE_RATE) { - ++literal_histo[input[i]]; - } - return TO_BROTLI_BOOL(BitsEntropy(literal_histo, 256) < max_total_bit= _cost); - } -} - -static void RewindBitPosition(const size_t new_storage_ix, - size_t* storage_ix, uint8_t* storage) { - const size_t bitpos =3D new_storage_ix & 7; - const size_t mask =3D (1u << bitpos) - 1; - storage[new_storage_ix >> 3] &=3D (uint8_t)mask; - *storage_ix =3D new_storage_ix; -} - -static void EmitUncompressedMetaBlock(const uint8_t* input, size_t input_= size, - size_t* storage_ix, uint8_t* storag= e) { - BrotliStoreMetaBlockHeader(input_size, 1, storage_ix, storage); - *storage_ix =3D (*storage_ix + 7u) & ~7u; - memcpy(&storage[*storage_ix >> 3], input, input_size); - *storage_ix +=3D input_size << 3; - storage[*storage_ix >> 3] =3D 0; -} - -static BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl( - MemoryManager* m, const uint8_t* input, size_t input_size, - BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, - int* table, size_t table_bits, size_t min_match, - size_t* storage_ix, uint8_t* storage) { - /* Save the start of the first block for position and distance computat= ions. - */ - const uint8_t* base_ip =3D input; - BROTLI_UNUSED(is_last); - - while (input_size > 0) { - size_t block_size =3D - BROTLI_MIN(size_t, input_size, kCompressFragmentTwoPassBlockSize)= ; - uint32_t* commands =3D command_buf; - uint8_t* literals =3D literal_buf; - size_t num_literals; - CreateCommands(input, block_size, input_size, base_ip, table, - table_bits, min_match, &literals, &commands); - num_literals =3D (size_t)(literals - literal_buf); - if (ShouldCompress(input, block_size, num_literals)) { - const size_t num_commands =3D (size_t)(commands - command_buf); - BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage); - /* No block splits, no contexts. */ - BrotliWriteBits(13, 0, storage_ix, storage); - StoreCommands(m, literal_buf, num_literals, command_buf, num_comman= ds, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - } else { - /* Since we did not find many backward references and the entropy o= f - the data is close to 8 bits, we can simply emit an uncompressed = block. - This makes compression speed of uncompressible data about 3x fas= ter. */ - EmitUncompressedMetaBlock(input, block_size, storage_ix, storage); - } - input +=3D block_size; - input_size -=3D block_size; - } -} - -#define FOR_TABLE_BITS_(X) \ - X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17) - -#define BAKE_METHOD_PARAM_(B) = \ -static BROTLI_NOINLINE void BrotliCompressFragmentTwoPassImpl ## B( = \ - MemoryManager* m, const uint8_t* input, size_t input_size, = \ - BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, = \ - int* table, size_t* storage_ix, uint8_t* storage) { = \ - size_t min_match =3D (B <=3D 15) ? 4 : 6; = \ - BrotliCompressFragmentTwoPassImpl(m, input, input_size, is_last, comman= d_buf,\ - literal_buf, table, B, min_match, storage_ix, storage); = \ -} -FOR_TABLE_BITS_(BAKE_METHOD_PARAM_) -#undef BAKE_METHOD_PARAM_ - -void BrotliCompressFragmentTwoPass( - MemoryManager* m, const uint8_t* input, size_t input_size, - BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, - int* table, size_t table_size, size_t* storage_ix, uint8_t* storage) = { - const size_t initial_storage_ix =3D *storage_ix; - const size_t table_bits =3D Log2FloorNonZero(table_size); - switch (table_bits) { -#define CASE_(B) \ - case B: \ - BrotliCompressFragmentTwoPassImpl ## B( \ - m, input, input_size, is_last, command_buf, \ - literal_buf, table, storage_ix, storage); \ - break; - FOR_TABLE_BITS_(CASE_) -#undef CASE_ - default: BROTLI_DCHECK(0); break; - } - - /* If output is larger than single uncompressed block, rewrite it. */ - if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) { - RewindBitPosition(initial_storage_ix, storage_ix, storage); - EmitUncompressedMetaBlock(input, input_size, storage_ix, storage); - } - - if (is_last) { - BrotliWriteBits(1, 1, storage_ix, storage); /* islast */ - BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */ - *storage_ix =3D (*storage_ix + 7u) & ~7u; - } -} - -#undef FOR_TABLE_BITS_ - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c b/Bas= eTools/Source/C/BrotliCompress/enc/dictionary_hash.c deleted file mode 100644 index 03355c030372..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c +++ /dev/null @@ -1,1120 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Hash table on the 4-byte prefixes of static dictionary words. */ - -#include "../common/platform.h" -#include "./dictionary_hash.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -BROTLI_INTERNAL const uint16_t kStaticDictionaryHash[32768] =3D { -32072,0,0,0,0,0,0,0,0,21860,0,0,0,0,0,0,0,40486,0,0,0,0,0,45798,0,0,0,0,0= ,0,1292 -,0,0,0,0,4964,278,23717,0,19972,0,0,0,0,0,0,0,0,0,0,0,0,2126,16102,0,0,0,= 14437,0 -,0,0,0,0,0,0,26727,2253,0,0,17252,0,0,0,0,0,0,0,0,0,3622,0,0,0,0,22984,0,= 0,0,0,0 -,0,16647,0,34247,0,0,0,0,0,48486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2511,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19532,0,0,24004,0,0,0= ,9828,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,31974,0,0,0,0,0,0,0,0,20650,2404,0,20773,1677,9031,0= ,6404,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67= 61,7206 -,0,0,21992,22983,0,0,3529,0,1864,0,0,0,0,0,0,11046,0,0,9641,0,0,0,6507,0,= 0,36934 -,21576,62375,0,0,0,0,0,0,0,0,0,8294,0,0,0,0,0,0,0,40807,0,0,0,39398,8136,= 0,0,0,0 -,0,0,0,8875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7941,0,0,25609,0,0,0,= 936, -3716,3213,15687,0,0,0,0,0,52519,0,17381,0,0,0,0,1320,5797,0,21029,0,0,647= 2,807,0 -,0,0,0,0,0,0,0,0,0,13545,0,0,0,3624,0,0,0,29674,30820,0,31237,0,6596,0,0,= 0,0,0,0 -,0,0,0,64070,0,0,0,0,0,0,0,0,0,0,0,22278,0,37446,0,0,0,0,7240,423,0,24612= ,21705, -17636,0,0,0,0,0,0,1833,0,0,0,328,6021,0,0,0,19974,0,0,0,0,0,0,0,0,0,62119= ,4178,0 -,0,0,0,12100,8617,0,0,16900,0,36678,0,0,0,35366,0,51718,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,20998,0,62086,0,0,0,0,0,5542,0,0,0,0,0,0,0,0,0,0,0,14629,10952,2592= 7,0,0,0 -,0,19849,0,0,0,0,0,0,0,30952,3046,14314,12998,0,0,0,15268,0,40582,30216,6= 2118,0, -0,0,20132,0,0,0,0,0,12005,0,0,0,52358,0,0,0,0,24778,0,44,33095,0,0,0,0,0,= 26372,0 -,0,0,0,0,3781,0,0,17928,9479,0,0,0,0,0,0,0,0,32297,28613,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,47174,11723,0,0,0,0,0,0,0,0,0,2536,55143,0,0,6410,0,0,0,0,0,0,0,0,5629= 4,11914 -,0,529,0,30184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8261,0,0,28808,58854,2= 2633, -965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64135,0,0,331,3684,0,1605,0,0,0= ,0,0,0, -0,0,0,0,16650,37,0,23622,3144,15429,0,0,0,0,0,0,0,0,0,0,22443,69,0,0,0,0,= 0,0,0,0 -,17832,0,0,0,0,0,0,0,0,0,11113,0,0,0,0,18309,0,0,0,0,0,0,0,0,0,26630,0,0,= 25512, -25895,0,0,0,0,0,0,0,0,0,0,0,16901,0,0,0,27558,0,0,9418,0,0,0,3508,0,0,0,0= ,0,0,0, -0,37990,9289,8517,0,0,0,0,1578,1604,23944,0,0,14916,12781,0,0,0,0,0,0,0,1= 2105,0, -16617,0,0,0,0,0,0,0,0,0,0,0,0,21348,11240,28870,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,5772,0,0,27812,0,0,0,0,0,0,0,8324,0,0,0,0,0,0,0,0,0,0,16748,1157,0,0,= 18794, -16324,25898,935,8333,0,0,0,0,0,0,0,0,18246,0,18086,0,46854,0,0,0,0,0,0,33= 9,0,0, -25188,12780,12166,6409,0,0,0,0,16516,0,27012,28395,0,0,0,0,0,0,0,1420,0,0= ,0,9768 -,52967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,324,0,0,0,0,0,0,0,0,0,64998,0,0,= 0,0,0, -21893,0,0,0,0,0,47366,0,0,0,870,0,0,0,12646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,26020,16360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1809,0,0,0,6601,15878,0,0,0,0= ,0, -29092,0,28516,0,0,0,0,0,0,0,0,0,21988,0,0,0,42950,0,0,0,0,0,0,0,0,0,0,513= 3,1318, -0,0,0,0,0,0,0,0,0,0,0,54982,24904,0,0,0,0,0,0,0,0,0,0,51526,0,0,0,0,0,368= 5,0,0,0 -,0,10062,9412,0,0,0,31460,5708,6181,0,0,0,0,0,0,0,0,0,5575,0,0,0,0,0,0,0,= 0,0,0, -27144,57478,0,0,0,0,0,0,7084,0,21993,53126,0,0,0,0,8397,0,0,5733,0,0,0,0,= 0,2116, -0,24742,0,11271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1133,0,4873,0,0,38310,0,0= ,0,0,0, -0,0,0,0,0,0,0,17932,0,0,18053,0,0,0,25510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1= 7798,0, -26214,0,0,0,0,0,0,0,0,23016,17415,20392,164,0,0,0,0,0,0,0,0,0,0,0,3239,0,= 46119,0 -,0,0,28580,0,0,0,0,0,0,0,0,0,7621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41478,0,0= ,31016, -55334,10056,1924,0,0,0,0,0,36614,0,36711,0,0,0,0,0,0,0,0,0,0,13994,59303,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,26501,0,5639,0,0,0,0,0,0,13897,1253,0,0,0,0,0,5095= ,0,0,0, -28869,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8646,0,0,0,0,25641,17796,0,0,0,0,= 0,0,0, -13316,620,6309,11819,0,0,0,0,0,0,0,0,0,904,1095,0,24229,0,0,28744,49703,0= ,23077, -0,0,0,0,32392,0,0,0,0,35271,0,28740,5866,0,0,0,0,0,0,0,4361,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7917,8869,0,0,0,13924,0= ,0,0,0, -0,41958,0,0,0,0,0,0,6766,13989,0,0,0,903,0,0,24010,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,64390,0,22468,0,25861,0,0,0,0,23656,5317,0,0,0,0,0,0,23017,544= 5,16009 -,0,0,0,0,0,0,0,0,48006,10473,0,0,14404,0,0,0,42183,0,0,0,51270,0,0,10602,= 24132,0 -,0,0,0,0,43782,0,0,17834,0,0,0,25576,27205,0,0,0,0,0,0,0,0,29066,0,0,0,0,= 0,626, -1988,14700,0,0,0,0,0,0,0,0,0,0,0,0,57670,0,0,0,0,0,0,0,0,0,44710,0,0,0,0,= 3848, -7623,0,0,0,0,0,0,0,0,0,0,0,42374,0,0,0,0,0,0,0,0,19272,6436,0,0,5256,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,19685,0,0,0,0,0,0,0,0,0,0,0,0,0,39783,0,0,0,0,30984,0,0,= 0,0,0,0 -,28230,0,0,0,29028,10538,3205,0,0,0,0,0,0,0,0,0,0,0,5636,840,295,0,0,8488= ,8198,0 -,0,0,0,0,0,0,0,0,20580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4074,19526,0,0= ,0,0, -31144,64038,0,0,0,0,0,0,16716,0,0,0,0,0,0,0,0,0,0,0,17706,0,0,0,0,0,0,506= 30,0, -50503,0,0,0,0,0,0,0,0,0,0,0,25446,0,0,0,13831,0,0,0,0,0,0,2696,4039,0,0,0= ,0, -25288,0,12076,2054,0,48934,0,0,0,0,16969,59431,17259,35335,0,0,0,0,0,0,0,= 0,0,0,0 -,0,31275,0,0,0,1097,0,0,0,0,0,0,0,0,0,0,0,776,839,0,0,29386,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,5864,12134,0,0,0,0,0,0,0,25349,0,0,0,0,0,0,0,0,= 0,61447 -,0,0,0,0,0,0,0,0,0,24678,0,0,0,63335,0,28836,8142,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4494,0,0,0,0,0,14088,1188,0,16260= ,0,0,0, -16421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,276,0,0,17060,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24076,29445,0,33543,0= ,4901,0 -,0,12522,0,0,62471,0,0,0,0,0,0,0,0,0,0,4046,0,0,0,0,20486,0,15460,2217,51= 719,0,0 -,0,0,0,23495,0,0,0,0,0,0,15370,0,15849,0,15113,0,0,0,0,0,0,0,0,27972,7337= ,0,0,0, -0,30342,0,0,0,0,0,0,0,0,32299,23940,0,17766,0,0,0,0,0,0,6184,0,20904,0,0,= 0,0,0,0 -,0,0,0,0,31492,0,0,0,5509,0,0,0,0,0,0,0,0,2669,50182,0,0,12299,0,0,0,0,0,= 0,0, -5257,28167,0,0,0,0,0,0,0,0,0,0,0,11750,3890,0,0,26500,0,0,0,0,0,0,0,49318= ,0,0,0, -0,0,0,0,10981,0,0,0,0,0,0,0,0,17961,1831,0,0,0,0,0,0,0,29638,0,0,0,0,2647= 3,0, -6216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,2868= 3,39975 -,0,0,0,0,0,51654,0,0,0,27527,0,0,0,0,0,0,0,0,30859,3268,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28772,0,18212,0,0,0,0,25448,65446,0= ,0,0,0, -0,0,3337,1670,0,0,0,0,0,19332,0,0,0,0,24936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,1043,0 -,0,0,0,15814,0,21670,0,0,0,0,0,0,0,16263,0,0,0,0,0,0,0,0,0,32454,0,30630,= 0,0, -20170,9926,0,0,0,18247,0,0,14376,0,2056,17191,0,0,0,0,0,0,0,7812,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,22474,52806,1588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1= 0825,0, -0,0,0,40934,0,0,0,0,0,0,0,28677,0,0,5714,0,0,0,0,0,0,0,0,0,0,0,0,0,25865,= 22246,0 -,0,0,0,17256,35751,0,0,0,0,0,0,0,0,8236,0,32108,0,0,0,43,14342,0,16517,0,= 0,30732 -,0,4012,133,0,40583,971,23942,0,0,27275,0,0,0,204,0,0,27140,7564,44327,27= 592, -57958,0,0,0,0,22344,25701,0,0,0,0,0,0,0,19524,31755,0,0,28102,0,59111,0,0= ,0,0,0, -0,0,12261,0,44934,0,0,0,0,31560,0,11114,0,0,0,0,0,0,0,0,0,0,0,18953,18311= ,0, -45159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2059,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0, -19399,0,0,0,0,0,0,0,0,0,0,0,0,0,58534,0,0,0,0,0,0,0,0,0,0,0,0,22411,23943= ,0,0,0, -0,0,0,11690,0,0,4069,0,0,2668,6342,0,0,0,0,0,0,27658,1766,0,0,0,0,23240,5= 6070,0, -0,0,0,0,0,0,0,0,0,0,0,0,34119,0,24453,0,0,0,0,21867,0,17610,9894,0,0,2797= 6,38790 -,0,0,0,43654,0,31559,12202,23142,0,0,0,50343,0,0,0,0,0,32806,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,49895,0,0,0,0,15786,4263,0,0,0,0,4746,3814,0,0,0,0,0,0= ,17192, -453,17323,0,20328,4036,0,0,0,15844,0,0,0,0,27561,31940,32296,0,0,0,0,0,0,= 0,11499 -,11782,0,0,0,0,9738,50471,0,0,0,0,0,35430,0,0,0,0,0,29734,0,0,0,36551,0,0= ,0,0, -9257,5606,0,13829,0,7015,0,0,0,0,0,25127,0,0,19051,0,0,0,0,0,0,0,0,0,0,0,= 0,0, -2572,0,0,0,0,0,0,29797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42342,0,0,0,= 0,9293, -0,17896,56038,4077,0,0,0,29899,37351,0,30823,0,8326,0,0,0,18342,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18569,54054,0,0,0,0,0,0,0,0,0,37254,0,0,3= 1433, -61510,0,2022,0,0,0,0,0,25381,0,0,0,0,0,0,0,0,0,0,0,0,0,2149,25289,0,0,0,0= ,0,0,0, -0,0,0,12516,14185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8676,0,= 0,0,0,0 -,0,0,0,0,0,0,36486,0,0,0,0,10889,9607,0,28711,0,0,0,0,0,0,0,0,0,0,28490,0= ,0,0,0, -26181,10283,1701,0,0,0,0,0,0,0,0,0,14980,0,7783,0,27846,0,0,0,56486,3892,= 0,0,0, -5770,16583,0,26309,13422,20292,0,0,0,0,0,0,0,0,0,28742,0,0,0,0,14536,1158= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25801,0,0,0,0,0,0,0,0,0,0,0,0,42438,0,3= 332,0,0 -,0,0,0,0,0,0,0,8327,0,0,0,0,0,0,0,0,0,0,0,0,17353,1447,0,0,8427,48518,135= 9,0,0,0 -,0,0,14986,0,32168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9230,2791,0,0,0,0,0,= 0,0,0, -16073,31623,4269,0,0,0,0,0,0,4519,0,0,27912,58950,0,0,0,0,0,0,0,0,8361,19= 812,0,0 -,0,0,6056,7877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21701,0,0,0,0,0,0,0,= 0,0,0,0 -,0,9128,1125,0,16548,0,0,0,0,0,0,0,0,0,0,17292,6854,21352,0,2380,0,0,4007= ,0,0,0, -0,0,24357,4202,0,0,0,0,0,0,0,0,0,0,0,0,0,10664,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,42823,3022,0,0,0,0,0,0,0,0,0,0,0,0,14373,0,20677,3304,2759,20522,6= 4903,0, -0,0,38,0,0,0,0,0,0,0,0,0,0,0,27814,2802,8870,3758,1255,0,0,0,0,0,0,0,0,30= 027, -9510,0,0,0,0,17864,14855,0,0,0,0,0,0,0,0,0,0,23404,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0, -51462,0,0,0,0,0,0,0,45734,0,0,23467,32327,0,0,10826,52999,0,0,0,33222,313= 36, -64326,0,0,0,0,0,0,0,32166,0,0,3891,0,0,0,7017,645,0,0,0,0,0,0,27915,46087= ,0,0,0, -21863,0,34246,0,0,16715,0,0,0,0,14052,21416,0,0,0,0,0,0,0,0,39846,0,0,0,0= ,0, -38982,0,0,17512,7460,0,0,0,0,0,0,0,0,0,15428,0,0,0,0,0,0,0,28356,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,25445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11879,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,19911,0,20007,0,0,0,10855,943,0,0,10821,0,0,0,0,4170,0,0,0= ,0,0,0, -0,0,0,9836,0,0,0,0,0,0,0,0,0,0,65415,0,0,0,0,0,0,0,0,9865,24646,0,0,0,0,0= ,40519, -0,0,0,0,0,0,0,0,0,12804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22091,23655,0,0,0= ,0,0,0, -0,31686,0,0,0,58599,0,0,0,0,0,0,0,0,0,0,0,0,0,19620,0,0,0,0,0,0,0,0,0,0,0= ,0,0, -24421,0,28100,0,0,0,31268,0,3204,0,0,0,0,0,0,0,0,0,14822,0,0,0,0,19947,10= 182,0,0 -,9480,14821,4398,0,0,14532,0,0,0,48871,1873,0,0,0,0,0,0,0,589,1541,0,0,0,= 0,0, -23333,0,0,0,14149,0,0,0,0,1296,14374,0,27300,0,0,0,0,0,0,7276,0,0,0,0,0,0= ,47718, -0,0,0,0,0,0,0,0,0,0,5164,1765,0,14405,0,37574,1994,0,6636,0,0,0,0,0,0,0,0= ,27815, -0,0,0,0,2568,6820,0,0,0,0,0,0,0,0,0,0,11336,26247,0,0,23912,0,0,0,30536,0= ,0, -34342,0,17799,0,0,0,22149,0,6118,0,25732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,26600,5190,0,0,1142,0,0,0,0,0,0,0,0,39527,0,0,0,0,0,39494,0,0,0,= 0,0,0,0 -,0,0,0,3085,0,0,0,0,0,0,0,4786,0,0,0,28873,6532,0,0,26664,0,9193,11719,0,= 0,0,0,0 -,0,31752,64646,0,0,0,0,0,0,0,0,0,0,0,11397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 25094,0 -,0,18153,20167,0,0,0,17254,0,0,878,0,0,0,0,0,0,0,0,0,0,24166,0,0,0,0,0,0,= 0,0,0,0 -,0,0,26059,0,0,0,0,0,0,0,0,0,0,0,0,0,31592,0,0,8167,24362,6212,0,34758,0,= 0,0,0,0 -,0,32520,0,0,44679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17989,8681,29222= ,0,0,0, -0,0,0,0,0,10251,4902,1452,15207,0,0,0,0,0,0,0,22822,0,10469,0,0,0,0,0,0,1= 9337, -17670,107,11494,0,0,0,0,27305,2565,0,0,0,0,0,0,0,64518,200,28389,0,0,0,0,= 31208,0 -,30762,0,0,0,0,0,29321,60518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3209= ,3237, -12490,22663,0,0,0,18789,31464,16391,0,0,0,0,0,0,0,0,0,0,0,20646,0,0,0,272= 38,0,0, -0,0,0,15940,4488,6951,0,0,0,46342,0,0,0,0,0,0,0,0,0,28965,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,20584,3367,0,25350,0,0,0,0,0,0,0,0,0,0,0,0,1814,0,0,0,0,0,0,0,0,0,0= ,17125, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55943,0,0,0,0,0,24133,0,0,0,0,0,0,0,0,0,0,0= ,0,2929 -,0,0,50086,0,2918,25356,30052,115,11846,0,0,0,0,3056,0,0,0,0,17639,239,19= 815,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36806,0,0,0,0,0,0,0,0,0,0,0,0,0,21479,0,0,= 0,0,0, -28420,11786,4772,0,0,3368,36295,0,31463,0,0,14665,996,0,20582,0,0,0,9988,= 0,23685 -,0,0,0,52551,0,0,0,0,0,0,0,7556,0,0,0,0,0,0,0,1895,2186,0,0,0,0,0,27755,2= 5447,0, -0,0,0,31052,63270,0,0,0,0,0,0,0,36742,0,24804,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,31048,0,0,0,0,0,0,0,0,0,21290,2276,0,0,0,0,26475,0,0,0,0,0,= 0,0,0,0 -,0,15332,0,0,0,0,0,0,0,0,3176,19431,0,0,0,0,0,0,0,62726,0,0,0,25380,0,0,2= 7883, -1316,0,0,7724,3015,0,0,0,0,6697,0,0,47910,0,0,0,0,0,0,0,0,0,3141,0,0,0,14= 820,0,0 -,0,0,9326,0,0,0,0,0,0,0,0,0,0,31493,0,0,0,0,0,6566,0,0,0,0,0,0,6569,1348,= 0,25638 -,0,0,0,0,0,20324,0,0,17067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11876,0,41030,0,0,= 0,26405 -,0,0,0,0,0,0,0,0,0,11431,28137,14950,0,10151,0,0,0,0,0,0,0,29574,0,0,0,0,= 27176, -57446,0,0,0,0,28650,57574,1387,0,0,0,0,0,0,0,0,0,0,58247,0,0,0,0,0,0,0,16= 805,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3526,0,15781,0,5572,13352,0,0,0,0,= 0,18665 -,23463,0,0,0,0,0,0,15405,6885,0,0,0,0,15272,0,0,0,0,0,0,0,0,9861,0,0,0,0,= 0,0,0,0 -,9512,4037,0,0,11563,49639,0,0,0,0,0,0,27880,57830,0,0,0,0,0,41831,0,2192= 4,0,0,0 -,0,0,0,0,25509,0,27462,0,18085,0,0,0,0,0,0,0,0,0,0,0,0,13898,8068,26441,0= ,0,0,0, -0,0,25316,0,0,0,0,16298,7397,5706,19239,0,0,0,0,0,0,0,0,1392,50919,0,0,0,= 0,0, -53863,0,0,0,0,1451,0,0,0,0,0,0,0,0,0,0,35847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,17801,15813,0,12740,0,0,0,32967,0,0,0,0,0,0,5389,0,0,0,0,0,0,0,0,0,0,311= 43,0, -20548,0,0,0,0,0,0,0,0,0,51686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0, -12109,19015,0,34983,0,21732,3600,0,0,0,0,47750,17288,43975,22857,47559,0,= 0,0,0, -26408,48358,0,0,0,0,0,0,0,0,0,0,0,0,0,30470,0,0,23560,4581,0,22404,0,4928= 6,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49831,0,0,0,27525,31691,7,0,0,25835,0,0,= 0,0,0, -4201,16485,0,20676,0,0,0,0,3753,23303,16264,3878,0,0,0,0,0,0,11434,0,0,0,= 0,0,0, -7589,0,0,0,0,0,0,0,0,0,57095,0,0,0,0,0,0,0,0,0,0,0,22820,11146,49158,0,23= 623,0,0 -,0,0,0,0,0,13893,0,0,0,0,0,0,11722,60071,1258,0,0,0,0,0,0,18564,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,27945,0,0,0,0,5479,0,20006,17608,3431,10988,30180,0,0,0,0,0,0= ,0, -24581,14,0,0,0,0,0,0,25572,0,0,0,28612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 53543,0 -,0,0,0,0,0,0,0,0,0,0,33670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8710,0,14116,0,0= ,116, -292,0,0,0,37831,0,43078,0,0,0,0,0,0,0,0,21832,0,0,32134,783,0,0,30982,0,0= ,0,68,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5932,0,0,0,185= 05, -15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3630,16965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,17797,0,0,0,0,0,0,520,42150,0,0,3122,0,0,0,22506,0,0,0,0,0,0,0,0,2= 8550,0, -0,0,50278,0,0,13641,5958,0,35238,0,0,0,0,0,0,0,0,29993,18724,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,20619,9319,0,0,0,0,23977,0,5193,0,0,12196,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,24390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20105,677,= 0,0,0,0 -,0,0,0,0,29419,0,0,0,0,0,0,0,0,0,20266,0,0,0,0,10631,0,0,0,0,0,0,0,0,0,47= 655,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26628,12744,0,20648,0,0,0,= 432,0,0 -,0,0,0,0,0,0,0,0,646,0,25604,0,0,0,0,0,0,0,0,0,0,0,0,0,63782,0,0,0,0,2461= 6,0,0,0 -,21291,0,0,0,0,0,0,0,0,0,0,45638,0,0,0,0,1931,0,0,0,20521,59975,0,20614,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,56231,0,0,0,0,0,29991,0,52871,0,20934,0,0,0,0,0,0,0= ,16871, -0,0,0,0,0,0,0,0,0,0,0,0,0,7237,0,0,0,0,0,47558,0,0,0,0,0,0,0,0,0,0,0,1040= 6,0,0,0 -,0,0,0,0,43046,0,0,2930,0,12936,0,0,0,0,0,0,0,0,0,0,0,0,31141,0,0,0,0,0,0= ,0, -37639,0,17572,0,0,0,0,0,0,0,0,0,0,31240,0,0,0,0,0,688,0,0,0,0,0,1648,0,0,= 0,0, -10055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,6345,199,0,34= 982,0,0 -,0,0,0,0,0,0,0,0,0,0,0,56839,0,0,0,0,0,48902,0,13412,0,0,0,0,0,0,0,0,2441= ,4420,0 -,0,0,0,20428,933,0,0,0,0,0,0,0,45383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,54726,0,0,0,0,0,0,0,0,0,0,0,0,17036,741,0,0,0,0,0,0,0,27589,0,= 0,30282 -,18950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2248,0,0,0,0,0,0,0,0,0,25993,0= ,0,0, -2443,0,0,31622,0,14150,0,0,0,28679,0,0,0,0,0,0,15464,0,0,0,0,54694,0,0,0,= 0,0,0, -3827,0,0,0,3756,0,9897,0,0,0,0,0,19082,31239,0,0,0,0,0,0,0,0,0,0,0,24580,= 0,0,0,0 -,0,0,0,0,0,16580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27625,0,0,0,784,4647,32652,0= ,0, -63494,0,0,0,0,0,0,0,21062,0,0,0,0,0,0,0,0,0,0,3404,58470,0,32325,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,18634,2789,0,0,0,0,0,0,0,8548,0,0,0,22501,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,15881,0,0,0,0,35879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7978,17956= ,0,0,0, -0,0,0,0,24324,0,0,4937,0,0,0,8168,0,13420,10340,0,0,0,0,0,11780,0,0,0,0,0= ,0,0,0, -0,0,16712,0,0,0,0,0,0,0,17640,17991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,2953,0,0,0,0,0,0,0,9100,16806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,306= 67,0,0, -19013,0,0,0,0,0,0,205,15334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1969,0,0,0,0,0,0,= 0,26248 -,52518,0,49798,0,0,0,0,0,0,0,9668,0,0,0,0,0,4742,0,0,21641,0,0,0,0,0,0,53= 574,0,0 -,0,0,0,0,5707,0,0,0,0,0,0,0,3018,12454,0,0,0,0,2920,262,0,0,0,0,0,0,0,0,0= ,0,3593 -,0,0,0,0,0,0,0,0,0,0,23910,0,0,0,0,0,0,0,55879,0,0,0,0,0,775,0,43270,5066= ,48967, -0,0,22986,4165,8971,44838,0,0,0,0,0,62279,272,0,0,0,0,51430,0,0,0,0,0,0,2= 8234,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13349,0,0,0,51111,20265,13861,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,585,7494,0,0,0,0,0,0,0,0,21768,62407,0,0,0,0,7979= ,166,0, -0,0,0,0,0,0,0,0,38918,0,56742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16296,5767,0,0,= 0,0,0,0 -,0,32068,0,0,0,0,0,0,0,0,0,0,0,0,0,29796,0,0,0,0,0,0,0,0,23916,30183,0,58= 791,0,0 -,0,0,0,0,0,20518,0,0,0,0,8969,0,0,0,183,0,0,0,0,0,2314,17445,0,0,0,0,0,0,= 0,0,0, -23748,0,0,8139,4839,27914,0,0,0,0,0,0,0,0,0,0,0,0,29478,0,0,16552,26663,0= ,53767, -0,0,13960,8039,18696,0,0,0,0,0,0,0,0,0,0,0,782,16005,0,0,0,0,0,0,0,0,6258= ,56806, -16456,12455,0,0,0,0,0,0,0,23780,0,0,0,0,0,0,9355,0,0,0,7273,41063,24780,5= 7766,0, -0,0,0,0,0,0,0,0,0,3820,2597,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29225,61126,0,0,0= ,58439, -15691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37190,22408,967,0,0= ,0, -23078,26858,0,0,0,19753,0,0,0,0,0,0,0,0,0,5416,13702,0,0,0,0,0,52742,2039= 4,38567 -,0,0,0,51079,0,0,136,8516,0,0,0,0,0,0,0,0,0,0,0,27588,0,0,0,0,0,0,0,0,0,0= ,531,0, -0,0,0,0,0,0,0,0,8936,5031,12520,19334,0,0,22827,30247,28074,31140,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,27497,18148,20104,59079,0,0,0,0,0,0,0,0,0,24389,0,0,6125,0,= 0,0,0, -9541,0,0,24553,29095,0,0,0,0,0,0,0,25444,0,0,9643,0,0,63047,0,0,0,0,0,0,0= ,0,0, -39558,0,0,0,0,0,0,20620,11815,499,0,5128,2278,0,0,0,0,0,46310,0,0,0,0,0,0= ,0,0, -23530,40166,2440,0,0,0,0,0,0,0,0,0,0,15174,0,0,0,0,0,0,0,0,0,0,26922,0,0,= 0,0,0,0 -,0,0,0,0,26758,0,0,0,0,0,51911,0,0,23532,0,0,0,0,51238,25737,44486,12622,= 0,0,0,0 -,0,0,3078,0,9253,0,0,1128,22023,0,0,0,21350,0,16420,0,0,0,0,0,0,0,65094,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22532,0,48774,0,34503,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,9797,0,0,0,0,0,0,0,13797,0,38279,0,0,1738,0,489,46343,0,45382,0,0,0= ,0,0,0, -0,0,0,29030,0,0,0,0,0,0,6220,56550,0,0,0,0,0,26885,0,28806,0,0,0,0,0,0,0,= 0,0,0,0 -,45958,0,0,0,0,20553,49927,0,0,0,0,0,0,3019,12358,0,0,0,0,0,0,0,0,0,0,265= 71, -13319,0,0,653,23399,0,0,0,0,0,0,0,0,22316,0,0,21188,0,0,0,0,0,0,0,0,0,275= 56,0,0, -0,0,0,0,0,27878,21483,27653,0,29701,237,0,10632,0,0,0,0,33766,0,0,0,0,0,0= ,31563, -0,0,0,0,0,1416,2439,0,0,0,0,0,0,0,0,0,0,9611,0,0,0,0,0,0,0,5611,16581,266= 01, -35462,0,0,0,26756,0,59271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26984,57734= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7882,0,0,0,19528,6469,0,0,1161,0,0,0,7688,20935= ,425,0, -0,0,0,0,0,0,0,12519,0,12902,0,0,0,0,0,0,0,0,0,0,2411,0,11725,26086,0,0,20= 201,0,0 -,0,0,0,0,0,0,11045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30471,0,0,0,0,0,0,0,0,0,= 0,0, -21541,1141,21190,0,9188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,1093,0,0,0,0,0,0,= 0,0, -4842,0,13672,0,0,12230,0,0,0,10532,0,0,8937,0,0,0,0,0,0,0,0,0,0,28996,0,0= ,11720, -26982,0,46182,0,43911,31754,0,1160,3940,0,20772,0,0,0,0,0,24549,0,32582,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,31845,0,0,0,0,0,0,0,2310,11788,0,0,43047,0,0,0,= 18853,0 -,0,0,0,0,0,0,0,0,63622,0,0,7048,17318,0,0,0,21957,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,1039,6279,0,0,0,0,0,0,0,0,0,0,0,0,0,12197,0,0,0,0,0,0,0= ,0,0, -46470,0,0,24,19719,0,0,0,0,0,0,0,0,0,39335,0,0,0,0,0,0,0,0,0,0,21353,3846= ,0,0,0, -0,0,0,0,36679,0,0,0,0,0,0,0,0,0,0,0,11268,0,0,0,0,0,9382,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,29926,0,33606,0,4708,2828,0,0,29543,0,0,0,0,0,29893,0,0,0,0,0,0,0,0,36= 63,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10920,7111,0,0,0,0,0,0,= 0,0,0,0 -,9384,0,0,0,0,0,0,0,0,0,0,0,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37094,0= ,0,0, -27110,0,0,0,0,0,0,21865,0,27753,30214,0,0,0,0,0,57895,0,0,0,0,0,0,0,0,0,0= ,12648, -5446,0,0,0,0,0,0,0,0,0,0,19784,17124,0,52007,0,0,0,0,0,0,0,0,758,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,24900,0,0,0,0,0,1476,0,65031,0,0,1205,46663,0,30023,= 11625, -1094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10058,0,0,0,0,0,0,28455,0,0,0,0,0,0,0,0,= 0,0,0, -14788,0,0,0,0,16808,0,0,742,0,0,0,0,0,0,0,0,0,0,0,21636,0,0,0,0,0,0,0,0,0= ,0,0,0, -15944,23207,0,0,0,0,247,0,0,0,0,24743,0,0,0,5252,0,0,0,0,0,0,0,0,29961,18= 660, -21099,46791,0,7045,0,0,0,0,25707,0,0,17412,3828,0,0,0,0,0,0,0,0,0,0,0,580= 3,5637, -0,38151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60103,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,853,0,0,0,0,0,0,30215,0,0,0,0,0,0,0,8741,0,0,0,0,0,27366,0,0,0,0,= 171, -4070,0,0,0,0,0,0,0,0,24073,7366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2184,= 5189,0, -20932,1545,4996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7684,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6313,0,0,0,0,0,0,0,30826,0,0,0= ,0,0,0, -0,0,0,0,27463,0,0,0,0,0,0,0,0,0,0,21640,63303,0,0,3275,31111,0,0,0,0,0,0,= 0,11556 -,0,14756,0,0,0,15108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23914,28966,0,0,0,4965,0= ,0,0,0, -0,0,0,0,0,0,10216,5223,0,0,0,0,0,0,0,0,0,27142,0,0,1173,20198,0,0,0,0,0,5= 6614,0, -0,0,0,0,4612,0,0,0,0,0,0,0,0,0,0,11822,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1776= 9,7910, -0,0,31880,0,0,6055,0,0,0,0,0,0,0,0,0,0,8970,0,0,0,0,0,0,0,0,0,0,0,16840,2= 3879,0, -0,11051,0,0,0,32552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20842,13701,0,0,0,37191= ,7373, -10471,17482,25348,0,0,0,38502,0,0,0,0,0,0,0,0,0,21509,6058,0,0,0,0,0,0,31= 73,0,0, -0,9543,0,0,0,0,0,0,17768,12708,0,0,0,0,0,37030,0,0,0,0,0,0,0,0,0,0,12748,= 48743,0 -,11718,0,0,25194,0,0,0,9033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5028,0,30118,0,0,= 0,0,0, -42759,0,0,3720,0,0,0,0,0,0,25190,0,0,0,0,0,0,0,0,0,0,5450,5125,0,58086,0,= 0,0,0,0 -,27716,0,0,0,0,0,0,0,0,0,22052,0,0,0,0,26249,0,15947,3460,0,0,0,35814,0,0= ,0,7813 -,19500,32167,0,18597,0,0,0,0,0,28644,0,0,0,60743,0,0,0,0,0,29636,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,17220,15885,9414,9642,0,0,0,593,0,0,24228,0,0,0,0,0,40422,0,26= 244,0, -23109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64902,0,0,0,0,3979,60007,0,0,= 0,28199 -,0,0,0,43142,0,0,0,0,0,0,0,29158,0,30532,0,0,0,0,13256,0,0,0,0,16549,0,0,= 0,0,0, -26116,0,0,0,0,0,0,0,0,22825,0,0,0,0,0,0,0,1065,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,18985,4805,0,0,0,0,0,17702,0,0,0,0,0,0,0,0,0,0,3468,0,0,0,0,1344= 7,0,0,0 -,0,0,0,0,0,0,0,0,56871,0,0,1776,15780,0,0,2603,0,10280,31366,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,11592,3591,0,2372,0,0,0,0,0,0,0,20004,0,0,0,0,0,0,12072,518,0,0,= 1960, -8999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7178,32999,0,0,0,0,0,0,1641,0,0,0,0,0,0,= 0,6764, -9893,490,4005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25258,5541,0,14053,306,2074= 3,0,0, -9422,0,0,0,0,0,0,0,11977,260,0,35175,0,0,0,0,0,0,0,18405,0,0,0,16582,0,0,= 0,22470 -,0,0,0,0,0,0,2792,0,0,0,14026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14858,390= 9,0,0,0 -,57671,0,0,0,0,0,0,15979,0,0,0,2794,15239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2= 6884, -9070,0,0,0,0,51846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19499,37127,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,19205,10350,11910,0,0,0,0,15083,23108,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,169,0,0,0,0,0,0,0,0,0,0,0,15274,41735,0,56774,0,0,2825,0,1= 4025, -389,0,0,0,0,0,0,0,0,21482,31910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20456,710,0,0= ,25032, -21797,0,0,0,0,0,0,0,0,0,0,32427,21252,0,30150,0,43174,0,0,0,0,0,0,0,0,0,0= ,0,0, -11403,0,0,1029,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6892,9252,0,63= 206, -3496,14406,0,0,0,0,0,0,0,0,0,0,22568,0,0,21253,0,0,0,0,0,0,0,39623,0,0,10= 189,0,0 -,0,0,0,0,0,0,0,0,0,0,0,30729,59910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3305,0,0,0= ,0,0,0, -0,0,0,7660,24871,0,838,0,0,0,0,0,0,0,0,0,0,0,0,12013,13252,0,551,0,0,0,43= 207,0, -30567,0,0,0,0,0,0,0,0,28394,30724,0,0,0,0,0,0,0,0,0,0,22665,22725,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,29414,0,0,0,0,16074,8966,245,1445,0,0,0,0,24872,0,0,0= ,0, -13124,0,35527,0,0,0,0,0,0,13259,10917,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0, -25191,0,0,0,13956,0,0,0,0,0,0,0,54631,19625,12070,3083,0,0,0,0,14436,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,21766,0,15463,29322,0,0,0,0,0,0,29990,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,23653,0,0,0,0,0,0,0,0,2643,0,0,21223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,4114,0,0,0,0,0,0,0,0,34790,0,0,0,0,0,0,0,16103,0,0,0,0,0,0,297,3620,3= 338, -10372,0,14727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29924,22473,1= 3895, -15529,32455,30378,13540,0,28807,0,0,0,0,0,0,0,64582,18380,0,0,0,0,0,0,0,0= ,0,0,0, -0,38598,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32710,0,0,0,0,45= 90,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64935,0,0,0,0,0,0,0,0,0,0,0,0,167= 44,0,0, -0,0,0,0,20005,0,0,13608,1191,0,0,0,62183,0,0,0,0,0,24484,0,0,0,0,0,0,0,0,= 0,0, -17643,0,0,0,0,0,0,0,0,0,0,0,0,5380,0,0,32328,0,0,63814,0,0,0,2919,0,0,0,0= ,17034, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,60295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,7690,486,0,0,0,39270,0,49094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12555,0,0,0,0,= 0,0,0,0 -,0,0,0,0,20967,17993,12647,0,0,0,16036,32616,0,0,0,0,16294,8555,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35174,0,0,0,0,0,0,30346,0,0,0,0,0= ,0,0, -14797,3652,0,0,8268,12934,0,54950,0,0,0,0,2632,33959,0,23175,0,0,0,0,0,36= 262,0,0 -,0,0,0,0,32684,26918,0,32676,0,0,0,0,0,0,0,0,0,0,15625,11943,1206,0,0,0,0= ,18052, -0,0,0,0,0,16422,0,0,0,26404,0,0,28777,0,0,24902,0,0,408,45351,0,35719,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,3658,17446,0,165,0,0,0,0,0,0,0,6151,0,0,24424,0,0,0,0,0= ,0,0, -24170,24293,0,0,0,0,0,0,0,0,0,11847,0,39591,0,0,0,0,0,0,9549,2788,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1010,0,0,0,0,0,0,26055,31724,0,= 24233, -1828,0,0,0,0,0,0,0,0,0,17284,0,0,0,0,19464,0,0,0,0,0,0,0,0,32452,0,0,0,28= 871,0,0 -,0,0,17704,53383,0,0,0,0,0,0,0,0,0,17892,1938,0,0,0,0,0,16362,0,0,21605,0= ,0,5003 -,0,0,0,0,0,0,22693,0,22342,0,0,0,55846,0,0,0,0,0,0,0,0,0,22853,0,0,0,0,0,= 0,0,0, -6600,263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24836,0,0,0,0,0,0,= 0,0,0, -40711,0,0,0,0,0,33894,0,0,0,0,0,0,13000,0,0,0,0,0,0,0,0,0,0,30308,0,0,0,0= ,0,0, -5386,0,0,0,0,0,0,27844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17740,= 0,0,0,0 -,25093,29064,0,0,0,0,0,0,0,12680,11462,0,0,0,0,0,0,0,0,84,7303,0,0,0,0,0,= 0,0,0,0 -,0,0,27044,457,0,22924,58246,19016,0,2606,45703,0,5157,0,25028,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,2065,0,0,0,0,0,31946,0,0,0,0,0,0,0,0,0,0,0,0,33382= ,0, -47878,0,0,0,0,0,0,0,0,25004,0,0,0,0,0,0,0,26153,35654,0,58055,30668,0,0,0= ,0, -25988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4456,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,7560,20583,0,0,0,0,0,0,0,0,0,37510,0,0,0,0,0,0,0,0,0,42822,0,0,0,0,0= ,0,0,0, -0,0,0,1733,0,0,0,8196,0,0,11241,0,30572,60326,0,15013,0,0,0,40646,0,23812= ,0, -10022,0,0,0,0,0,0,0,0,12874,31015,0,0,0,0,0,0,1608,0,0,0,0,18308,0,0,0,0,= 27114,0 -,0,0,0,0,0,0,7944,1382,0,11813,0,0,0,0,0,0,0,0,0,0,0,0,0,24517,0,11621,0,= 0,0,0,0 -,0,0,0,0,0,0,21702,0,0,13100,8262,2644,7973,0,0,0,0,0,0,0,0,0,0,0,0,1033,= 12581,0 -,25221,0,0,0,40998,16301,62983,0,0,0,0,1263,9318,0,0,0,18854,0,0,1741,338= 95,0,0, -0,0,0,0,26377,0,0,0,0,0,0,0,0,0,0,32165,0,51143,0,0,0,0,0,29412,0,0,0,0,0= ,0,0,0, -1674,4230,0,0,0,0,0,10502,0,0,0,0,5545,0,0,0,0,0,2099,45158,0,0,0,0,0,0,0= ,0,0,0, -14157,0,26955,0,0,0,0,0,0,0,0,0,17096,0,0,0,0,0,0,0,0,0,0,0,0,0,27050,672= 6,0,0,0 -,0,0,0,0,0,28554,0,0,7142,0,0,0,0,16936,0,0,0,25833,0,4399,6980,0,46214,0= ,0,0,0, -0,10630,21164,0,0,0,0,0,0,0,2446,48551,0,0,0,0,0,0,0,0,0,0,0,13381,0,0,0,= 0,0,0,0 -,0,15400,12135,0,0,0,0,0,4774,586,0,0,0,0,0,0,0,0,23751,9736,4548,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25577,29607,6250,1637,0,0,0= ,0, -22024,0,0,0,0,22308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37414,24044,0,0,0,14474= ,29735, -0,7077,0,45990,0,0,0,0,30568,40039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0, -6150,0,4228,0,0,0,0,0,27687,0,0,0,0,0,0,0,24548,21513,1350,0,0,0,33607,0,= 0,0,0,0 -,0,0,0,11784,1414,0,0,0,0,0,0,0,18244,940,0,0,0,0,0,0,7270,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,16709,0,0,0,0,0,0,0,48935,0,0,0,0,0,0,23660,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,53350,0,0,0,0,0,0,4236,16358,0,4422,6665,32644,0,0,744,18084,0,11014,0,0= ,0,0,0, -29508,0,0,0,0,0,0,0,7686,0,0,13289,5478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,12872,0,0,24134,1005,22916,0,31429,23400,0,0,0,0,0,0,0,28424,= 0,0,0, -25706,27109,0,0,26345,0,0,0,0,0,0,25126,0,0,88,0,0,0,0,0,0,0,17032,0,0,21= 799,0,0 -,10060,0,12296,21892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20777,14311,0,58= 182, -32232,0,10282,0,2121,11527,0,0,0,12325,0,0,0,0,0,0,0,28804,2344,8133,0,0,= 0,0, -21864,62695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2771,= 0,0, -23204,0,0,0,0,0,6278,0,0,0,0,0,26597,0,0,0,0,23144,0,0,0,0,0,31816,20070,= 0,0,0,0 -,0,0,0,0,0,0,24456,2118,0,0,0,0,6570,1156,0,0,0,0,0,0,0,30406,0,0,0,28388= ,3572,0 -,0,26599,12426,5286,0,0,0,0,0,4967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24970,2416= 7,0,0,0 -,0,28745,4678,0,0,0,0,0,0,0,1444,236,0,0,0,0,0,0,0,0,19428,0,0,0,0,0,0,20= 92,0,0, -0,0,0,0,0,0,0,2827,0,0,0,0,0,19881,19204,0,11749,0,0,0,0,0,0,0,17958,0,17= 894,0, -18726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,21510,5033,0,0,0,0,22855,0,0,0,0,0,14598,0,29605,0,0,0,0,0= ,0,0,0, -617,0,0,0,0,47142,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,2225= ,14823, -0,0,2637,6182,78,15078,0,0,0,0,20264,0,0,0,0,0,0,36743,4140,44551,17352,2= 5703,0, -0,0,0,0,0,0,0,0,0,0,0,14024,0,0,0,0,0,0,28004,0,0,0,0,0,7588,0,0,0,0,0,0,= 0,2087, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18028,0,0,0,300,14212,0,0,1386,40327,= 0,0,0,0 -,0,0,31082,0,0,22374,0,0,0,0,0,35718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0, -26532,7756,0,0,18982,0,0,0,0,0,0,0,0,6440,1159,7180,0,0,0,0,0,0,45766,0,5= 7798,0, -16740,0,0,6802,60454,0,0,0,26470,0,0,0,0,0,65382,4362,7750,0,0,0,0,0,0,90= 96,4743 -,334,0,0,0,0,0,0,39974,0,0,0,25828,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30= 27,0,0, -0,15816,0,0,0,0,0,0,0,0,48327,0,0,0,0,0,0,0,0,0,0,16168,41799,0,0,24458,8= 581,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12292,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,54503,0,0,0,0,5097,30852,18664,0,0,0,0,0,0,16484,0,0,27337= ,0,0,0, -0,0,0,0,0,0,0,0,0,35942,0,0,0,0,0,0,0,4356,0,0,0,0,0,57030,0,0,1417,41191= ,0,0,0, -0,0,23429,0,0,0,0,10024,21735,0,0,10126,0,0,0,0,19046,0,0,0,0,0,0,24105,4= 710,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4394,0,0,0,0,13253,0,56391,0,0,0,0,0,0,0= ,0,0,0, -0,19174,0,0,0,0,0,0,0,0,0,55974,0,0,0,52070,0,15620,0,0,0,0,0,2660,0,0,0,= 0,21644 -,0,0,52455,0,0,0,0,0,0,0,0,0,8902,0,0,0,0,0,0,3116,0,464,34726,0,0,0,0,0,= 0,25003 -,12423,0,27172,1896,7335,0,0,0,0,0,35686,0,0,0,0,3472,0,0,0,0,22406,0,0,0= ,0,0,0, -0,0,0,45254,0,0,0,0,0,0,0,0,0,0,0,0,0,21124,23594,33127,0,0,0,0,0,0,16684= ,22087, -0,0,0,0,0,0,0,0,0,0,0,0,8714,0,0,0,0,0,0,0,0,0,0,55814,0,0,0,0,0,0,4109,2= 3460,0, -0,8874,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,29960,63398,1302,0= ,0,0,0, -0,0,0,0,24806,0,0,0,0,0,0,0,0,0,9799,0,0,0,0,0,0,0,31333,0,0,0,0,0,19557,= 0,0,0,0 -,0,5701,0,0,0,63014,0,0,0,0,0,0,0,21254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124= 84,0,0, -0,48326,0,0,0,0,0,0,0,0,0,0,0,15783,0,0,1202,0,0,0,0,23174,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,3086,49191,0,0,5387,15141,0,0,0,3365,0,0,0,0,20076= ,14021, -0,0,0,0,0,0,0,0,0,0,376,40198,0,0,0,52039,0,24932,0,0,0,0,808,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,9860,0,0,0,0,0,23719,0,21476,0,0,0,0,20776,4807,0,0,3177,16678,= 0,0,110 -,10853,0,0,0,17382,0,0,0,0,0,0,0,0,0,43462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,7500,4966,0,0,0,0,0,0,0,52102,0,24516,0,0,0,0,0,0,0,0,0,0,0,0,0,26= 535,0,0 -,0,46247,0,0,0,15557,0,0,0,0,76,52327,0,0,0,0,17866,0,0,0,0,0,0,0,0,0,0,4= 6758,0, -0,0,0,0,19173,0,0,0,0,0,0,0,0,0,44038,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,2985,0 -,0,0,0,0,0,14310,0,0,2125,45831,0,0,0,0,0,0,9838,0,13227,19492,0,0,0,2976= 4,0,0,0 -,0,686,30053,0,0,0,0,0,30789,139,20837,0,0,0,0,502,18533,0,0,0,0,0,19111,= 0,0,0,0 -,0,31396,0,0,0,17444,0,0,0,0,0,0,0,49862,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2561= 0,550,0 -,0,561,0,29034,0,0,0,3528,0,0,0,1715,14661,18,63463,0,0,0,0,0,0,0,0,0,0,1= 4186,0, -0,0,0,0,0,0,0,0,0,0,29578,59014,0,39430,0,0,0,0,2250,16612,0,31780,0,0,0,= 0,0,0, -462,16967,0,29029,0,0,0,0,0,23462,0,0,0,0,0,0,0,0,1768,0,6025,16998,1804,= 0,0, -54182,0,0,0,0,0,0,0,0,14124,0,6154,29702,0,0,0,0,0,7716,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,48807,0,8292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16389,59= 33,0, -14857,51303,0,0,0,0,0,0,0,0,0,0,0,35623,9097,23047,0,0,23112,0,0,0,0,0,43= 8,0,0,0 -,0,0,0,0,151,9254,1390,0,0,0,0,0,0,54215,0,0,0,0,6187,0,0,0,0,13095,0,0,0= ,0,0,0, -0,0,0,0,0,0,9866,0,0,59622,0,0,0,0,0,0,0,0,0,25286,0,0,23848,32069,0,0,0,= 0,0,0,0 -,0,0,9255,2187,15270,437,0,0,0,0,0,0,0,0,0,0,19493,0,0,0,0,0,0,0,0,0,0,0,= 11748,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16902,0,0,0,0,0,0,0,0,0,22212,1865,1= 7543,0, -0,0,0,0,0,21996,0,0,0,0,55975,0,0,0,0,0,0,0,0,32138,21156,0,0,0,0,0,0,142= 49,0,0, -0,2388,0,0,0,0,6823,0,0,0,0,0,0,0,0,0,0,0,0,0,26694,0,0,6059,53511,0,0,0,= 0,0,0,0 -,49542,6159,0,0,0,0,0,0,0,0,0,0,0,0,0,1036,24036,0,2501,0,0,0,0,0,0,17419= ,51271, -3377,15142,0,0,0,0,0,0,5007,62374,0,56935,0,0,0,0,0,0,0,0,0,0,0,24422,0,0= ,0,0,0, -0,0,0,942,0,0,0,0,0,0,0,0,0,0,28263,0,0,0,0,0,0,0,15622,0,19749,0,0,1611,= 0,22219 -,48583,25129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17476,0,0,0,0,0,0,0,= 0,0,0, -721,0,0,0,0,32518,0,0,0,18469,0,0,0,0,0,0,5896,29927,3657,23046,0,0,3214,= 0,0,0,0 -,0,0,0,0,0,112,0,0,0,0,0,3048,455,0,31012,0,0,0,0,0,0,0,23270,0,32677,0,0= ,0,0,0, -38086,0,0,0,0,0,0,0,0,0,0,0,0,0,4900,0,0,0,0,0,0,0,0,0,25541,0,18788,0,0,= 22248, -1351,0,61734,4524,30629,0,14887,242,29063,0,0,14408,4741,0,0,0,37318,0,0,= 0,0,0,0 -,0,0,0,0,0,0,8106,0,32107,0,0,0,0,0,0,0,0,0,0,0,1481,0,0,28132,0,25798,0,= 59783,0 -,0,0,0,0,59078,0,0,0,23366,0,0,0,0,0,0,0,30887,0,0,0,0,16200,0,0,0,335,0,= 0,0,714 -,0,0,0,0,0,0,0,0,0,0,0,0,0,30730,9478,0,0,0,0,0,0,0,0,0,0,0,18790,0,0,0,0= ,663,0, -0,0,1034,31431,0,0,0,0,0,0,0,0,0,0,30120,0,0,0,0,13925,0,0,0,0,0,0,2280,1= 3414,0, -0,0,0,0,0,22028,23687,3017,11047,0,0,21738,18630,0,0,0,0,0,0,0,30246,0,0,= 0,0,0,0 -,0,0,0,0,0,0,17257,0,21896,63783,0,0,0,21094,0,18662,0,25700,0,22533,0,0,= 0,0,0, -6341,5800,11111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,153= 99, -12970,6501,0,0,3179,26438,0,0,0,0,0,0,0,15750,0,13062,0,0,0,0,0,0,0,0,0,0= ,142,0, -0,0,0,21284,11177,4391,0,0,0,0,19595,40647,0,0,0,0,0,11877,0,0,0,26439,0,= 0,0,0, -695,49126,27467,11972,0,0,0,0,0,0,9961,0,0,0,31722,62982,0,0,0,0,15817,52= 710,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24614,0,0,0,0,0,20550,0,0,5034,3942,0,= 0,0, -45927,0,0,0,0,0,0,0,0,0,0,2548,0,0,0,0,0,0,45606,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,3405,12582,15563,54087,0,0,0,0,0,0,0,0,0,0,0,0,24202,5893,0,= 0,0, -44230,0,0,0,5605,0,47782,0,32230,0,0,0,0,0,0,0,0,0,0,0,7014,0,0,0,0,16488= ,3175,0 -,27237,0,0,0,0,0,40902,0,0,0,0,0,0,0,32004,31434,0,24392,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,29130,58214,0,0,0,0,0,0,29002,0,0,0,0,0,0,0,0,0,0,55366,0,0,0,= 0,0,0,0 -,0,0,0,0,37926,0,0,0,0,0,0,0,0,1290,0,0,0,4713,0,0,0,0,0,0,0,0,0,0,0,0,0,= 20812,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1803,966,0,17700,0,0,654,19109,0,51655,0,0,0= ,0,0, -10470,1584,0,0,0,0,0,0,0,2506,0,0,25159,4303,0,0,0,395,15879,0,0,0,0,0,0,= 0,0,0,0 -,1352,6535,0,19652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4722,7909,= 0,0,0,0 -,30152,0,0,64742,0,0,0,0,0,0,2153,9125,0,0,279,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,41894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,1328,17030,0,0,0,0,0,0,0,54151,0,0,0,0,1775,54535,0,0,0,0,31624,= 0,0,0, -7150,0,0,0,0,0,0,0,1840,35943,0,0,0,0,0,56455,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -64486,0,0,0,51174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,4134 -,0,0,0,0,0,0,0,0,0,0,0,17092,0,0,0,0,0,0,0,0,0,0,0,0,12,16134,19883,39943= ,10281, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44711,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0, -14125,2407,0,0,0,0,0,0,0,0,0,0,26921,0,0,0,0,0,22188,0,20810,10053,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28170,0,15= 208,0,0 -,32517,5736,19271,3562,10534,0,0,0,59655,0,0,0,0,27084,60422,0,0,24969,0,= 0,0, -2636,0,0,0,0,26277,0,0,0,0,0,0,0,0,0,0,0,30596,3594,0,0,0,8362,14565,0,0,= 0,0,0,0 -,10793,12326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5906,59686,0,0,23081,517,0,15556= ,0,0,0, -8486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,19877 -,0,0,0,0,0,0,0,0,7497,0,0,26085,0,0,23784,63591,6568,6310,0,0,0,0,0,0,0,0= ,0, -10054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7018,14470,18858,0,5641,10660,0,0,0,0,0= ,0,0, -35526,1515,0,0,0,0,0,0,0,0,0,0,0,27656,0,0,9606,0,39590,0,0,0,0,0,0,0,0,0= ,0,0, -53926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,4327,12649,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,20199,0,0,0,0,0,0,26730,0,0,0,19400,14695,0,3133= 4,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19589,0,0,0,0,0,0,0,0,5064,11908,0,2= 7333,0, -0,0,0,0,0,0,47751,0,0,0,26662,0,0,0,0,0,0,0,55655,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,6245,0,0,0,0,0,0,0,0,23368,63911,0,0,0,0,0,0,0,0,1974,0,0,0,0= ,0,0,0, -8520,24037,0,0,0,0,0,0,0,26279,0,0,0,22886,0,0,0,27782,0,30694,0,0,0,0,0,= 0,0,0,0 -,0,0,33703,0,0,0,30405,0,34598,0,51047,0,0,0,0,1908,0,0,0,0,0,0,0,0,0,0,1= 511, -21897,0,0,0,0,0,0,51398,0,24870,0,32647,0,0,0,35015,0,0,0,0,0,0,0,11204,0= ,0,0,0, -0,0,7758,57991,0,0,0,30949,0,0,22,15140,9162,0,0,0,0,0,0,25540,20136,7108= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16427,10789,9805,0,0,0,0,0,0,0,0,0,4680,0,0= ,52679, -0,0,0,0,0,14884,0,0,0,16804,0,0,0,0,0,0,9578,5287,0,0,0,0,0,0,0,34054,0,0= ,0,0,0, -19076,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7627,55719,0,39463,14446,58374,0,0,0,0,= 23465, -15845,0,0,0,0,0,38534,0,0,0,17893,10922,0,7176,678,0,0,0,0,0,0,0,0,3113,4= 6279,0, -0,0,0,0,0,0,23334,0,0,18088,23268,0,62342,0,0,0,16613,0,0,0,0,0,0,0,0,0,3= 8182,0, -0,0,0,0,0,25292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10344,71,6446,0,0,1893,= 0,0, -1106,0,28680,30756,0,41126,0,0,1492,0,15341,0,0,0,0,17575,0,21220,0,0,0,0= ,0, -25060,2088,21828,0,0,0,0,0,358,0,0,0,0,0,16708,0,0,0,1668,0,0,0,0,0,12260= ,0,0,0, -0,0,0,0,0,4078,0,0,0,0,0,12713,6215,0,0,20329,0,0,0,0,0,0,0,0,0,0,31204,0= ,0,0,0, -0,0,0,0,0,0,3732,0,1646,0,0,27460,0,34406,17128,14341,0,0,0,0,0,19527,0,0= ,0,0,0, -0,0,0,0,0,6120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8551,21546,10212,3= 020, -2951,0,17638,0,0,6985,44999,2218,8197,0,0,30472,63366,0,26660,0,0,0,0,0,0= ,0,0,0, -0,0,0,1265,0,0,0,0,0,0,0,2610,0,0,0,11278,20295,0,0,0,0,0,19780,0,0,0,0,0= ,0,2353 -,10852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5421,24292,0,0,0,0,0,0,0,0,0,0,0,0,0,3= 4407,0, -0,0,0,0,0,15432,20774,0,0,0,0,0,0,0,0,12360,10757,0,0,0,33126,0,0,0,0,0,0= ,0,0,0, -0,0,29573,0,2343,0,0,0,0,0,63079,0,0,0,0,0,0,0,0,0,43015,0,16038,0,0,0,0,= 0,0,0,0 -,1480,25573,0,0,0,0,0,0,0,8839,0,0,0,0,0,0,0,24645,0,0,0,0,0,0,0,0,0,0,0,= 0,0, -5063,0,0,0,0,0,45830,0,0,0,0,0,0,0,0,0,0,823,0,0,64039,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,15300,0,0,0,0,0,0,2924,46759,6760,19268,0,0,0,0,0,0,0,0,0,34182,0,0,3977= ,18149, -0,0,0,32199,0,0,0,0,0,0,0,0,0,23524,25994,0,0,10343,0,0,0,9733,0,0,0,0,0,= 0,0,0,0 -,4740,0,0,0,0,0,0,0,0,0,16741,0,0,4626,23367,0,0,31400,0,0,3557,0,0,4234,= 0,0,0,0 -,0,0,28486,0,0,0,0,0,14213,0,57191,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,65318,= 29832,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29989,0,31846,0,0,8170,0,0,4421,27626,= 30884,0 -,0,20204,0,0,0,0,44614,534,20868,0,0,0,0,0,0,0,0,0,0,0,0,0,28710,0,10277,= 0,0,0,0 -,0,29511,0,19813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27020,0,0,0,0,0,= 0,53094 -,0,35207,0,0,0,37542,0,61766,8584,8037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,12488 -,22757,0,0,0,0,0,0,0,0,0,0,0,0,0,23814,0,0,0,0,0,0,0,0,0,19973,0,0,0,6394= 3,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36006,0,0,0,19012,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,8580,0,0,0,0,0,0,0,18021,0,0,0,0,0,0,0,0,80,1254,0,0,0,42630,0,0= ,0,0,0, -0,0,16262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2124,25479,0,0,0,0,16873,0,0,0,= 0,3142, -0,0,18443,0,0,0,0,0,3917,0,8841,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,20645,0,0,0,0,0,0,0,0,0,0,0,9284,0,0,24394,41351,0,0,0,42087,0,62566,0= ,0,0,0, -0,0,0,0,0,0,6728,4199,0,0,0,0,25515,0,1231,0,374,15623,0,29956,0,14118,0,= 0,0,0,0 -,19047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31718,0,0,0,0,0,0,0,0,0,0,0,20900,0,= 16743,0 -,0,0,28902,0,0,0,0,0,0,0,0,0,0,0,0,2578,0,0,0,0,0,0,0,0,0,13838,0,0,10052= ,0,0,0, -0,7432,43783,17097,0,0,0,0,0,873,0,0,0,398,0,0,0,0,0,0,0,0,0,8459,23559,0= ,53030, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35750,0,4071,0,0,0,38662,0,41414,0,0,0,0,11= 656,0,0 -,0,0,0,4011,42695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25353,0,0,0,0,0,0,0,27177,2= 2372,0, -0,0,0,0,30980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46278,397= 6,12711 -,0,0,0,0,0,0,0,0,0,0,0,20517,0,0,0,0,0,0,0,0,0,0,0,0,4072,11078,0,0,16553= ,2405,0 -,0,0,0,0,0,0,0,2670,0,0,0,0,0,0,32998,0,0,0,0,0,0,0,47046,0,30533,0,0,110= 50,9734 -,13129,0,0,0,0,23494,0,0,0,0,0,58310,0,0,0,57543,0,0,0,0,0,0,0,0,0,0,0,0,= 0,454,0 -,0,0,0,0,0,5163,59687,2220,0,0,0,0,0,0,29510,0,0,0,0,0,0,0,0,0,0,0,17316,= 0,20069 -,0,0,0,0,0,0,0,0,0,5319,0,0,0,0,0,0,0,0,0,27174,0,0,0,0,0,0,0,22949,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,19208,0,0,0,0,0,0,20933,0,0,6026,8742,0,0,0,17380,0,13127= ,2797,0 -,0,30116,0,0,5963,8004,0,57126,0,0,0,0,0,42854,14792,30759,0,24964,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,16933,0,0,0,0,0,0,15176,40839,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0, -788,30341,0,0,0,0,21036,24102,0,0,0,0,30123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -22597,31531,26789,0,59559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9352,29863,0,0,0,0,= 0,0,0,0 -,0,24551,0,0,0,0,0,0,0,20516,0,0,0,39462,3665,0,28265,0,8778,64262,0,5741= 4,9132, -0,0,18276,0,0,0,0,0,0,0,0,0,0,26344,30725,524,19751,0,13796,0,0,0,0,0,0,0= ,0,0,0, -18155,0,12841,0,74,24998,13579,1061,0,64199,0,0,8776,0,0,60231,0,25412,0,= 0,0, -59143,0,0,0,0,0,0,14344,1510,0,0,0,38374,0,0,0,0,0,0,0,0,13353,0,0,0,0,0,= 0,0,0,0 -,0,9446,0,0,0,0,0,0,0,32613,0,0,0,0,0,0,0,0,0,0,0,0,0,19844,0,0,0,0,14859= ,0,0,0, -0,6662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14154,0,29770,0,0,= 0,0,0, -16520,2182,0,0,0,0,0,36102,3340,0,0,0,0,0,0,0,0,25189,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,15720,0,0,0,0,0,0,22758,0,0,304,0,3243,14117,0,0,0,0,0,0,0,0,0,0,51= 30, -12679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21733,10441,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,36103,0,0,0,0,0,23590,0,57479,0,0,0,0,0,0,0,0,0,0,0,0,108= 24, -18372,0,0,0,0,0,35078,15722,12967,0,0,0,0,0,34599,0,0,0,0,0,0,0,0,0,0,0,0= ,0, -53639,0,38630,0,0,0,0,0,0,31017,11333,0,0,0,0,19144,0,9513,0,0,0,0,0,0,0,= 0,56711 -,24042,0,1197,0,0,58502,0,0,0,0,0,0,0,0,0,8230,6121,18628,0,0,0,0,0,0,252= 90,0,0, -0,0,0,1514,0,0,0,0,0,0,0,14378,9798,32363,0,0,0,0,0,9577,0,0,0,0,0,0,2678= 8,0,0,0 -,0,0,0,330,10533,0,0,0,0,0,42246,0,0,0,0,0,0,5074,21028,0,38119,0,0,0,0,0= ,0,248, -0,31176,62054,0,53287,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,0,0,9224,2117,0,0= ,0,0, -15818,5607,0,52582,0,0,0,0,0,0,0,0,18248,24005,23018,0,0,0,0,0,0,0,0,0,0,= 0,0,0, -427,0,0,39910,0,0,7080,11399,0,0,0,0,0,0,0,0,0,0,22220,57894,0,0,0,0,0,0,= 0,13156 -,0,1413,1007,0,0,0,0,21415,0,21543,0,0,0,0,0,0,0,0,0,41702,22538,9573,0,0= ,0,8806 -,0,0,6920,56359,0,0,0,0,0,0,0,0,0,0,0,42215,0,0,13708,0,0,0,0,0,0,0,0,0,0= ,16453, -0,0,0,0,0,0,1582,1764,3282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11653,0,0,0,0,1213= 9,0, -29482,31076,1673,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40262,0,0,0,= 33862,0 -,0,0,0,0,20996,0,0,0,0,0,4615,0,0,0,0,0,0,0,0,0,0,0,43943,333,19367,0,0,0= ,0,0,0, -0,26821,0,32389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4936,11687,0,0,0,0,0,0,0,0,0,= 10885,0 -,0,0,0,0,25926,0,0,0,0,0,0,15851,0,0,0,0,0,0,0,0,0,8360,0,17130,7942,0,11= 460,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,18150,14248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0, -22310,0,0,0,42758,0,0,0,0,0,0,0,0,29354,5574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,31109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11236,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,9156,0,0,1801,14023,0,0,0,0,0,62406,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0, -23620,0,0,0,0,0,0,0,0,0,0,31018,65510,0,0,0,0,0,0,0,26182,0,0,0,0,0,0,0,2= 7717,0, -0,0,0,0,0,0,46950,0,0,0,0,0,0,0,0,0,0,0,0,0,31108,0,11366,0,0,0,3717,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8552,6054,3339,0,0,0,0,5= 1622,0, -0,0,0,0,0,0,3718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28358,0,2756,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,1462,0,0,27622,0,0,0,0,0,0,0,62502,14410,56743,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,12206,0,0,0,0,0,0,0,0,0,0,0,0,36550,0,38054,0,= 0,0, -21221,0,0,0,0,0,0,0,27077,0,0,16906,0,12587,12101,0,0,0,0,0,0,10414,28775= ,21769, -60167,0,56646,0,0,0,0,0,20740,0,0,0,0,0,0,5931,5351,0,65478,0,0,0,0,0,0,7= 977, -52647,0,4868,0,0,0,55463,0,0,0,0,0,32197,0,0,0,0,0,13445,0,0,0,26631,0,0,= 0,0,0, -11237,0,0,0,0,209,1285,0,0,1928,0,0,0,0,43334,23849,23172,0,0,0,0,0,0,0,0= ,24712, -62439,8811,3463,20457,0,0,0,0,0,0,0,0,0,16008,56263,0,0,0,0,0,0,0,0,0,0,0= ,60358, -22761,6565,0,0,30888,27686,0,0,0,17093,0,0,0,0,22121,0,0,0,7593,14182,0,2= 8103,0, -0,0,0,0,45126,0,0,0,0,0,0,0,0,0,0,0,0,0,31844,0,0,0,0,0,0,0,0,0,0,0,0,0,1= 8500,0, -0,0,0,28202,0,0,0,0,0,0,0,0,26308,0,29541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -29572,0,0,0,21285,0,0,0,0,0,60839,0,0,0,0,0,30407,15949,2981,0,0,0,46439,= 0,0,0,0 -,0,23911,26505,25222,12811,5895,0,6343,0,0,0,0,0,0,0,0,0,0,0,31815,0,0,0,= 0,0,0,0 -,0,19688,10245,0,0,0,31301,26985,28964,0,0,0,0,0,0,0,0,27208,31172,0,0,0,= 0,216,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16292,0,0,0,0,0,8743,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,6438,0,0,0,33319,0,0,0,33286,0,0,0,0,0,0,0,0,0,22181,7499,24774= ,0, -10756,0,44775,724,0,25768,25669,24873,5349,25257,0,0,54566,0,0,0,0,0,0,0,= 0,0,0,0 -,327,439,357,0,0,6536,8452,0,0,1802,0,0,61350,0,15045,0,0,0,0,0,0,0,0,0,0= ,0, -38343,0,0,0,0,0,0,0,0,0,0,32491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0, -22885,0,0,32073,0,0,0,9546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27748,0,0,2317= 6,0,0,0 -,0,0,0,0,0,0,0,0,0,24583,0,0,0,0,0,34118,0,0,0,0,2158,0,5586,30340,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,24452,0,0,0,0,2409,4390,0,24196,0,0,0,0,0,0,32264,26948,2058= 7,0,0,0 -,2155,0,0,0,0,0,0,0,0,0,0,0,4328,26276,0,0,0,0,0,0,0,0,23564,0,12458,1136= 7,0,0, -25162,0,0,0,0,0,0,65414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32966,0= ,0,0, -34662,0,0,0,0,0,39238,0,0,0,0,11400,10214,266,12452,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,15173,0,0,0,13668,0,13222,0,23364,0,0,0,0,0,11941,0,0,0,0,0,0,0= ,0,0, -25575,0,0,0,57383,0,0,0,10308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,2865,9287,75,0,0,0,0,0,0,0,0,0,0,21508,22380,59526,0,0,0,23589,0,0,= 0,51590 -,0,0,0,0,0,0,0,0,0,0,0,4645,3980,28295,0,0,0,0,0,12388,0,0,0,0,0,0,0,0,0,= 0,0, -21734,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41767,0,0,0,0,0,0,0,18436,0,0= ,0,0,0, -0,0,21958,0,19430,0,0,1204,0,0,0,0,0,0,0,0,0,3240,55239,0,0,0,0,0,30660,0= ,0,0, -28901,0,0,0,0,4716,0,0,0,0,0,0,0,0,0,0,0,11754,0,0,0,0,22086,0,22564,8749= ,0,0, -28391,0,0,0,0,0,0,0,0,0,0,0,2886,0,0,0,0,0,0,0,29062,0,0,0,0,0,0,0,40358,= 0,0, -15916,39526,0,13735,0,0,0,0,28938,0,407,4006,0,0,0,26916,0,0,0,0,0,27526,= 30280,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24586,0,2464= 9,5126, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8684,0,0,0,0,0,0,0,23019,0,22377,= 18599,0 -,0,0,0,0,0,0,0,0,0,27593,9735,0,20196,0,0,0,0,28168,48423,0,0,0,0,0,31399= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,13892,0,0,0,0,0,17606,0,0,15242,29767,26378,17701= ,0,0, -14472,0,4840,0,0,0,0,0,0,24708,0,9349,4330,0,0,0,0,0,0,0,16137,0,0,34854,= 0,0,0,0 -,0,0,0,0,0,0,0,25063,0,0,0,0,0,0,6603,12583,0,0,0,0,0,0,0,0,7433,29188,0,= 0,0,0,0 -,31270,0,0,22920,3143,0,0,0,0,0,23461,0,0,0,0,0,0,0,0,618,0,0,0,0,21381,0= ,11524, -0,0,0,0,0,0,21004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,23239,0,0,0,0,0,0,0,0= ,0,0,0, -0,2313,0,0,40614,0,0,14825,0,0,0,0,0,0,46535,0,41190,7853,0,31656,0,0,0,0= ,0,0,0, -0,0,3433,5255,0,0,0,0,0,0,0,33958,0,0,0,0,72,15493,0,0,0,0,0,0,0,36070,0,= 0,0,0,0 -,0,0,14724,0,0,0,0,0,29828,0,0,0,0,0,0,0,18822,20008,0,0,0,0,2438,2952,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,3342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24420,0,19908,0,0,0,810= 1,0, -17479,0,0,3530,0,8202,29319,0,0,1132,6789,0,0,23881,0,0,0,4810,0,0,46918,= 0,0,0, -41574,0,0,0,0,0,0,0,0,0,48582,0,0,0,0,0,0,0,0,0,0,0,0,0,39334,0,0,0,26117= ,0,0,0, -0,0,0,5100,0,0,0,0,0,23496,27813,4045,54918,0,0,0,0,0,0,6473,7428,0,0,0,0= ,6792,0 -,0,0,0,0,3560,32103,0,0,0,0,0,0,0,0,0,0,0,54790,0,0,6926,0,0,0,0,16518,0,= 0,0,0,0 -,20806,0,0,0,0,1841,3174,0,0,0,0,9612,18374,0,0,0,0,32744,0,0,9671,0,5987= 9,0, -23300,8073,0,0,14758,0,0,0,10342,0,0,0,0,0,0,24808,14759,0,0,0,0,0,0,5515= ,0,0, -14852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2354,23271,0,32740,0,0,0,0,= 0,0,0,0 -,0,0,18472,0,0,0,0,0,0,0,0,33190,0,0,0,0,0,0,0,0,8972,21669,0,0,0,0,0,0,0= ,0,0,0, -0,25574,0,0,0,0,5096,0,14283,55367,0,0,0,0,0,0,0,0,0,12644,0,0,0,0,4651,0= ,0,0,0, -0,0,0,661,0,0,13638,19466,0,0,0,0,0,31273,0,8010,0,0,0,0,0,3211,0,0,0,0,6= 3430,0, -0,0,0,0,15237,0,0,0,0,0,0,19018,2437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 14312,0 -,0,0,0,16836,0,0,471,35975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,6023,0,0,0,0,0,0,0,0,11593,9639,0,0,0,55783,0,5700,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27908,0,26598,0,0,6667,6470,0,0,0,0= ,0,0,0, -62534,0,0,0,0,16522,27911,0,0,10025,7172,0,0,779,0,360,17477,0,0,0,61991,= 7752, -7717,1494,0,0,0,26569,40742,0,0,0,0,0,0,0,26406,10474,32196,0,0,0,0,0,505= 67, -16521,11716,0,0,0,0,0,55558,0,0,0,0,0,0,0,0,0,0,0,61926,0,26436,0,0,0,0,4= 459, -10598,0,0,0,0,0,0,0,0,0,0,0,9223,0,29318,0,0,0,0,0,60423,0,0,0,0,0,0,0,47= 078,0, -50246,0,12612,0,0,0,0,0,0,0,61799,0,55015,0,21060,7309,0,0,0,0,0,11976,0,= 0,0,0, -23527,0,0,0,0,0,0,10347,15942,0,34023,0,0,0,0,4969,0,0,0,0,0,0,0,0,28997,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36454,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0, -3466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 19716, -28872,0,0,0,0,0,22152,0,0,0,0,0,0,26342,0,0,0,9764,0,0,0,0,0,0,0,21798,0,= 0,0,0, -13,6853,32136,0,0,0,0,0,0,0,750,0,0,54502,0,0,0,0,0,0,0,0,0,46183,0,0,625= ,22854, -0,0,0,0,2061,23588,0,0,11049,56262,0,0,18538,1509,0,0,17258,4453,0,0,0,0,= 12429,0 -,0,0,0,8102,0,0,0,0,0,0,8074,0,23852,0,0,0,0,0,0,0,0,0,0,0,16136,3428,0,2= 7876,0, -0,0,7332,0,0,0,0,0,28900,0,0,2284,0,0,17573,201,1508,0,0,0,0,0,0,0,0,0,31= 365, -27688,22565,0,0,0,5159,0,0,0,0,4584,42599,0,0,0,44422,1068,23173,0,0,0,61= 3,0,0,0 -,12645,0,0,0,0,0,27076,6732,0,0,0,3913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,22244,29992,15911,0,0,0,0,0,22982,0,0,0,0,0,0,0,50= 598,0,0 -,0,0,0,0,5161,1574,0,0,0,0,0,0,0,0,0,19108,0,0,0,35014,0,0,0,25956,29067,= 0,0,0,0 -,0,0,0,0,0,0,47079,0,0,0,0,0,0,0,0,0,0,1356,61927,0,0,0,64455,2122,64231,= 0,0, -18763,0,0,0,0,0,0,0,0,0,907,34471,0,0,0,39078,0,0,1995,0,0,0,0,0,0,0,0,0,= 0,56518 -,0,0,0,0,0,0,0,0,0,0,0,0,822,0,15978,44423,0,0,3112,325,0,0,0,0,0,15397,0= ,0,0,0, -0,0,0,0,0,0,1193,4294,4968,15559,0,46150,0,0,0,0,0,18917,0,0,0,0,0,0,9928= ,37543, -0,0,0,0,13097,36999,0,0,0,15430,0,0,8424,29639,0,0,0,0,0,0,0,0,0,0,0,0,0,= 25734,0 -,0,0,0,0,0,0,0,0,0,0,0,0,40487,0,13284,0,11141,0,0,0,32388,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5298,57702,0,0,0,0,0,0,0,13060,0,0,0,0= ,0,0, -8233,42278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36422,0,0,0,7972,0,0= ,0, -18437,0,0,0,0,7406,0,0,0,9225,0,0,0,0,0,0,0,0,0,13865,47591,18220,53703,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2796,0,0,0,0,0,24940,1722= 3,0,0,0 -,13221,0,0,0,0,0,0,0,0,0,0,15848,0,0,0,0,0,6122,1735,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,16968,18151,0,0,0,0,0,47494,0,0,0,0,0,0,26089,19494,0,0,0,0,0,15= 494,0,0 -,0,0,0,0,0,0,0,0,28809,0,0,0,0,42727,0,55174,0,0,0,0,0,0,0,0,0,0,0,20485,= 0,0,0,0 -,0,0,0,0,0,0,0,58598,0,0,0,0,0,0,0,0,0,0,0,0,0,15172,0,0,0,0,0,0,0,0,0,35= 302,0, -48135,20972,33094,0,0,0,0,0,9765,0,0,0,0,0,0,0,0,0,39559,0,0,13736,6950,0= ,0,0,0, -23658,8903,0,0,0,0,0,0,0,22662,0,0,0,0,0,58886,7468,0,0,0,0,0,0,0,0,64550= ,0,0,0, -0,0,47622,0,0,0,50886,0,0,0,0,0,57606,912,0,0,0,0,0,0,0,0,0,1449,0,1169,0= ,718, -46151,12104,0,0,0,0,0,0,48230,0,0,0,0,0,0,0,0,0,0,1259,0,0,33734,23208,62= 567,0, -65158,0,0,0,0,0,0,0,0,0,0,28684,59878,0,0,0,0,0,0,0,0,0,0,25769,0,0,0,0,6= 5479,0, -0,0,0,555,22789,0,19748,1769,10246,8680,0,0,0,0,0,0,0,0,0,14250,0,5899,33= 03,0,0, -0,0,0,0,0,0,21097,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21638,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,10795,0,0,0,16204,0,0,0,0,0,26986,2469,0,14660,0,0,0,0,0,= 45447, -12234,3494,4555,10566,0,0,0,0,0,0,0,0,0,0,0,0,2801,0,0,0,15755,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,39654,0,0,0,0,0,0,6763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0, -33574,0,10279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63527,0,0,3912,0,0,7492,0,0,0= ,35142, -0,0,0,0,0,0,17576,8103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16713,4198,0,0,478= 2,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,16228,0,0,0,0,25961,20166,0,0,0,10980,0,0,0,0,0,14= 340, -18922,14567,0,44199,0,0,0,0,0,0,0,18406,0,0,0,0,0,37606,0,0,0,0,0,0,0,0,0= ,20902, -0,0,0,56358,0,38342,0,0,0,0,9514,36071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2170= 0,0,0, -5266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134,0,1453,0,0,0,0,0,3882= ,0,0,0, -0,0,0,0,0,4004,0,0,0,51910,0,0,0,0,0,23076,4648,0,0,0,31051,25351,0,0,0,2= 2884,0, -0,0,0,0,63975,0,0,2376,16997,0,0,2096,0,0,0,3373,7046,0,0,0,0,0,0,0,30726= ,0,0,0, -0,20,0,13707,614,0,0,12840,3079,0,0,0,0,0,51046,3729,0,32680,0,0,0,0,0,24= 008, -62759,0,0,4745,0,0,0,0,0,0,0,0,0,0,0,0,0,2414,0,0,44262,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,24937,0,0,0,0,0,0,0,0,19140,0,13575,0,0,0,0,0,0,0,39110,0,0,0,28036,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,4261,0,0,0,0,5992,0,264,0,0,0,0,0,0,0,13739,0,2= 1928,0, -0,0,0,0,0,0,0,0,0,0,4232,15110,0,0,0,0,0,0,0,0,0,30022,0,0,27977,0,0,0,0,= 0,24776 -,0,0,0,0,0,2962,0,0,0,0,0,0,26564,22441,0,0,0,0,0,13640,11205,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,19305,1894,0,0,0,0,0,0,0,0,0,0,9389,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,14119, -5224,135,0,0,0,0,0,0,0,0,0,25796,0,0,0,0,0,0,7470,0,0,0,0,63815,0,55654,0= ,0, -12584,0,1524,33223,0,0,0,9895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,11624, -0,0,0,5614,0,0,0,0,0,0,0,21320,0,0,53607,0,51206,0,0,0,25863,0,0,0,0,0,0,= 0,0,0,0 -,0,8964,1740,0,0,0,0,0,0,0,0,13476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 7975,0, -0,3306,8134,0,8389,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25766,0,0,0,0,0,0,0= ,0,0, -52166,0,0,0,0,0,0,0,0,0,0,0,0,0,21477,31112,31652,0,0,0,0,0,0,0,28452,0,0= ,0, -44231,0,0,0,0,0,0,0,24805,0,0,0,0,0,0,0,0,0,0,12428,6471,0,0,0,0,525,1792= 6,0,0,0 -,26919,0,0,18120,0,0,0,30024,0,0,0,0,0,0,0,0,0,0,29189,0,0,0,43559,0,0,0,= 0,0,0, -19787,7557,0,59334,0,0,10184,6085,0,44039,0,0,0,0,0,0,0,11175,0,0,0,0,304= 40, -63110,0,0,0,0,0,0,11017,0,0,0,0,0,0,0,0,27204,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,29126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,5226,2727,0,1= 5588,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4650,0,2675,0,0,32420,0,0,0,615= 11,0,0, -5419,17829,2123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38183,2640,0,11274,14533,1842= ,0,0, -42663,12681,3430,0,11845,0,0,0,0,0,0,0,0,0,6533,0,0,0,0,0,54598,0,0,0,0,0= ,0,0,0, -0,0,0,0,12616,38535,0,0,0,0,0,32229,0,0,0,54279,0,48614,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,31401,0,0,0,0,34310,0,0,0,22788,0,52134,0,0,0,0,0,0,0,23302,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,40678,0,0,0,51463,535,0,0,0,0,15525,0,0,0,0,0,0,490= 4,869,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63718,0,0,0,0,0,0,0,0,1678,0,692= ,0,0,0, -0,0,0,0,0,0,26216,0,0,0,0,0,29355,0,0,0,0,25095,0,0,0,0,4335,0,0,0,0,0,14= 538,0,0 -,0,0,0,0,0,0,0,27273,55014,0,0,0,0,0,27271,0,0,0,0,0,30468,0,0,0,0,18186,= 0,0,0,0 -,0,14345,0,0,0,2152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58438,21034,0,23339,21318= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,21412,0,0,0,0,0,0,0,12869,0,0,4875,0,0,0,0,29191,= 0,0,0,0 -,0,0,1640,10247,0,14244,0,0,0,0,9867,0,0,0,0,0,12363,0,0,7653,0,0,4168,26= 63,0, -4580,0,11143,0,0,0,0,0,0,0,30662,0,0,0,0,0,6724,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,13764,0,0,0,0,0,0,0,0,0,0,0,0,234,6821,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,25639,0,0,0,0,0,0,0,0,0,29958,0,3461,0,0,0,0,0,0,0,0,0= ,28324, -18795,7013,12746,11655,0,37287,0,0,10953,7718,9705,0,0,0,0,0,0,0,0,0,0,46= 534,0,0 -,0,0,0,0,0,0,0,0,8137,17988,0,25156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41415,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15784,6918,0,0,0,0,7019,10919= ,0,0,0, -0,0,0,0,0,0,0,4171,55495,4940,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22440,193= 33,0,0, -28136,0,6249,21317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53414,0,0,0,5731= 8,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39303,0,0,0,0,0,19940,0,0,0,0,0,0,0,2554= 3,0,0,0 -,0,0,0,0,0,0,0,0,0,2698,3911,0,0,0,26790,0,0,0,0,0,0,32424,0,0,18470,0,0,= 0,14726 -,29834,0,0,0,0,0,0,0,0,0,0,0,1000,4197,0,0,0,19366,0,0,0,39878,0,0,0,0,21= 85,8901 -,5288,9829,25000,0,0,0,0,0,0,1062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3= 5622,0, -0,23048,62503,6506,0,0,0,0,0,0,0,13609,10438,0,0,0,0,0,0,0,0,0,0,7723,421= 19,0,0, -0,0,0,13317,0,0,0,41606,0,27111,0,0,21194,11461,0,0,0,0,26856,58342,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,20940,48710,0,0,0,0,0,0,5227,0,0,0,0,0,10061,31300,0,0,0,= 19236,0 -,0,0,0,0,30277,13896,0,0,0,12876,13159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,428, -46951,13134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15462,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,21668,0,0,0,0,0,0,0,0,0,0,0,0,2249,0,0,0,0,44967,= 0,0,0,0 -,0,0,3465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24868,0,0,0,0,0,23909,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,2190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1616= 4,0, -10437,0,0,5263,20102,20938,0,0,0,1192,1030,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,21385,4870,0,0,0,0,0,0,0,0,0,0,0,18596,0,0,0,0,1422,4038,2858,0,0,0,0,= 0,0,0,0 -,48998,0,0,0,0,0,0,0,0,6508,37350,0,0,0,0,0,0,0,0,17001,39431,0,0,0,0,0,3= 0182,0, -21445,7403,28164,0,51750,0,0,0,62631,0,0,0,0,0,0,0,31206,0,0,0,0,0,0,0,0,= 0,0,0, -7751,0,0,0,0,0,0,0,0,0,13477,0,0,456,26693,0,0,0,0,0,0,0,0,0,0,0,0,14890,= 0,0,0,0 -,0,26697,22022,13225,27364,0,0,0,18884,0,0,0,0,0,0,0,0,3659,0,0,0,0,0,0,0= ,0,0,0, -0,1448,5413,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,18091,18725,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,22118,0,0,0,18981,0,0,0,0,0,0,0,0,0,29223,3724,0,0,0,0,43526,0,0,0,25668= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21545,9862,0,22692,32201,60646,0,73= 00,0,0, -0,58887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19460,0,0,0,0,0,0,0,0,0,503= 42,0, -65255,4360,17286,0,0,0,0,0,0,0,28708,0,0,30025,60102,0,0,0,0,0,0,0,0,0,47= 014,0, -31973,0,9572,0,0,0,0,0,0,0,18501,0,0,0,0,0,14597,0,0,0,53735,5228,22183,0= ,0,0,0, -0,0,1554,24164,0,0,0,0,0,0,0,0,0,0,0,0,10827,0,0,0,0,34918,0,0,0,0,22252,= 0,0, -46855,0,0,0,0,0,31207,0,0,10733,0,0,63334,0,0,0,0,8616,50119,20169,12678,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58087,20298,5,0,0,30920,0,0,0,0,0,0,0,296,= 13190,0 -,30663,0,0,18536,12228,0,6788,0,0,0,0,30890,21796,0,0,526,0,0,0,0,0,0,0,0= ,0,0,0, -0,20965,0,0,0,0,2161,0,0,0,0,0,0,24038,0,0,0,0,13544,7398,0,0,32522,9605,= 0,0,0,0 -,3208,7590,0,0,0,43846,0,0,0,38663,0,0,0,0,0,39014,4142,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,6373,0,0,13676,0,0,0,0,30374,21288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22791,0,0,0,0,0,37958,0,0,0,0,0,0,0,0,0,0,= 9452, -9990,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4841,0,0,0,0,18820,152,0,0,0,0,0,13260,3= 334,0,0 -,24234,8422,0,17957,0,0,0,10244,0,0,0,0,0,0,0,0,0,0,0,7204,0,0,0,0,1201,2= 6151,0, -31173,0,0,0,0,0,0,0,0,0,0,0,0,0,64838,4203,7525,521,0,18888,37031,0,0,0,0= ,0,0,0, -0,7082,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4490,12487,0,0,0,0,0,0,0,366= 15,0,0, -0,14854,0,0,0,0,0,0,0,0,0,0,0,0,6539,13029,9704,38983,0,0,0,0,168,10405,0= ,0,0,0, -394,25607,0,57063,0,0,0,0,0,0,0,0,0,0,16141,19878,0,0,0,0,0,0,0,0,0,29446= ,0, -12036,0,0,0,0,0,6982,18572,0,24584,14535,0,0,0,0,0,0,0,0,0,0,16,0,21642,0= ,0,0,0, -0,0,5254,0,0,0,0,0,0,0,0,1622,0,0,0,0,0,0,0,0,0,0,0,0,0,3853,9126,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,7241,10982,0,0,0,0,0,0,0,0,0,0,0,0,0,0,950,0,0,57990,0,= 0,277,0 -,0,0,694,36007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42470,0,0,0,0,18= 409, -51142,0,0,0,0,0,0,0,0,0,28646,0,0,0,30693,0,0,0,0,0,56295,5544,0,0,0,0,85= 18,8366 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4567= 0,0,0, -9608,33062,0,0,0,0,0,0,0,0,0,0,0,18694,0,0,0,0,1672,23493,0,0,6955,7655,0= ,36134, -0,0,0,0,0,0,0,0,23432,647,0,0,0,0,0,0,0,0,0,0,0,13382,0,0,0,19621,0,0,0,0= ,0,0,0, -0,0,20228,0,0,2728,31495,0,0,0,0,29096,22213,235,35495,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,5348,0,0,0,0,8968,1989,0,0,1066,0,0,11492,5965,31367,0,0,0,0,0,0,0,0= ,0,0,0, -18727,0,0,0,6757,0,0,10765,4646,0,36166,0,27943,0,0,26888,8420,0,0,0,0,0,= 0,0,0,0 -,29316,0,0,0,0,0,0,0,0,0,0,4975,0,0,0,14762,3111,0,0,0,0,0,43399,0,0,0,0,= 0,0,0, -18980,0,0,0,0,0,44550,0,0,0,0,4051,0,0,0,0,37734,0,0,0,0,0,5188,0,0,0,0,0= ,24486, -0,5989,0,41159,0,0,0,0,0,0,0,0,0,20326,0,0,747,6884,0,0,0,41798,0,0,3117,= 22919,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21032,0,0,0,0,0,0,0,0,9574,0,0,0,0= ,0,0, -4302,0,0,0,0,0,0,0,0,0,0,0,21068,34630,0,0,0,0,0,64071,0,0,0,0,0,0,26667,= 7943,0, -0,0,0,0,52934,0,0,17002,0,0,0,0,0,0,20294,0,0,0,0,0,0,0,0,0,27301,18347,7= 974,0,0 -,0,0,0,0,0,0,16874,0,0,0,0,45414,0,0,0,0,0,0,648,1575,0,0,0,31749,0,0,0,2= 3301,0, -0,0,0,0,0,0,0,0,0,0,0,15912,50535,0,0,0,0,1993,8582,0,0,0,0,0,0,0,38438,0= ,0,0,0, -0,0,0,0,0,0,0,0,15850,6183,0,0,0,0,3402,0,0,27494,0,0,749,0,0,0,0,0,0,0,2= 6025, -29606,0,0,7144,19622,30504,0,0,0,0,0,0,0,0,21316,0,0,0,0,0,0,0,0,0,21444,= 0,0, -1289,6919,0,0,0,0,0,0,8299,0,0,0,14090,35655,0,0,0,0,0,0,0,0,2377,15206,0= ,0,6028 -,4452,0,25508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50310,0,0,0,0,1269,0,0,0,0,0,= 0,0,0,0 -,0,0,0,51014,0,0,0,0,0,0,0,9286,0,7429,0,0,28393,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,16680,452,0,0,0,0,0,23718,0,0,0,31750,0,0,0,0,0,0,0,0,3568,0,0,136= 04,0,0, -0,0,0,25255,0,0,0,50982,0,56582,0,0,7467,0,0,0,0,30181,0,0,0,0,0,0,0,3056= 4,7208, -7845,0,0,0,0,0,0,7726,0,0,0,0,62182,0,0,0,41094,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,22695,0,0,0,0,0,0,17736,0,0,0,0,0,0,0,0,50054,0,0,0,14180,0= ,0,0,0, -0,0,8974,0,0,0,0,0,0,0,0,23332,0,0,0,11140,0,0,0,0,0,0,0,24262,27145,9540= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,26537,45510,6062,3879,0,0,20233,25991,0,0,17803,0,0= ,0,0,0, -13962,5508,16971,27013,7437,31494,0,0,0,0,0,0,0,0,0,0,4714,0,0,0,0,0,0,0,= 0,17189 -,0,0,0,0,0,27492,0,0,26953,0,0,0,0,0,0,0,0,0,0,41319,0,0,0,0,0,0,0,0,0,0,= 0,47430 -,19596,12549,0,0,0,8390,1006,0,0,0,0,0,0,0,0,0,0,24100,17577,4,0,0,0,0,0,= 22277,0 -,0,0,0,0,0,0,26692,0,0,0,0,0,24676,0,0,0,0,0,0,0,0,0,0,0,0,0,29477,0,0,0,= 21573,0 -,0,0,0,0,0,0,0,0,0,9864,14214,0,0,0,0,0,0,25771,5766,0,0,8909,8679,0,0,68= 61, -16166,0,38887,0,0,0,0,0,0,12392,8678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0, -52646,1354,2950,0,14692,0,0,10572,49830,0,0,0,0,0,0,0,0,3626,582,0,0,0,55= 750,0,0 -,0,30885,0,0,0,0,0,0,0,0,0,0,0,0,0,5830,0,0,2090,0,0,0,0,0,0,0,0,0,0,0,0,= 31142,0 -,0,0,0,0,10503,0,0,18825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0, -57158,0,0,30792,63526,0,0,0,9863,16267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,18824,0,0,0,0,0,0,19653,25388,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9292,0,0,0,0,0,0,0,0,0,0,36358,0,0,0,0,0= ,0,0,0, -0,0,25480,23015,0,0,10440,6725,0,0,0,22436,24265,15109,0,0,0,62311,8906,3= 4534,0, -0,0,0,0,0,15913,1319,0,0,20296,1477,30760,0,25928,16772,0,0,1069,0,0,0,0,= 0,0,0,0 -,0,0,0,0,17029,0,31909,0,0,0,0,0,0,0,0,0,0,0,41638,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,41542,0,21478,0,0,0,9796,0,0,0,0,0,0,0,0,0,0,22187,58343,0,0,0,2= 4295,0, -0,0,0,0,61831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2833,5829,0,0,0,62855,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,16676,0,0,0,0,0,0,13577,27431,0,0,0,0,21480,10501,0= ,16932, -0,0,0,0,0,22918,0,48294,2574,2150,0,0,0,0,1897,4518,0,0,0,0,0,0,25064,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47942,0,0,0,0,10990= ,13767, -25705,37863,21672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43430,1712,0,0,= 0,0, -18886,0,0,0,0,0,0,0,0,0,0,0,0,0,10535,0,0,0,0,0,0,0,15012,0,0,0,0,0,0,0,0= ,0,0, -14734,0,0,55782,0,0,30824,10886,0,0,0,0,0,51302,0,0,8012,0,0,0,0,0,20680,= 6981,0, -57415,11,0,0,18277,0,14564,0,0,0,32390,0,0,0,0,0,0,0,0,0,0,0,0,19113,5158= ,0, -11172,0,16774,0,0,0,0,0,0,0,0,0,0,0,0,10315,13830,0,0,0,0,0,0,10410,7141,= 0,0,0,0 -,0,18116,0,0,0,44615,15403,13958,0,1540,14632,19525,24201,19781,0,0,0,241= 65,0, -38951,0,0,0,0,0,6308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17416,15749,3438,13255,0= ,0,0,0, -0,0,0,0,0,0,0,32228,0,0,0,0,176,0,0,50566,0,0,0,0,0,0,0,0,0,0,0,0,0,21540= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,58982,0,0,0,0,0,0,0,0,0,5284,0,0,0,0,0,0,25897,28= 326,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15945,0,0,0,9804,293,0,0,0,0,0,0,0,13988,230= 82,4677 -,0,0,0,0,0,0,0,0,0,0,0,5670,0,0,0,0,0,0,0,44070,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,6405,0,30692,0,0,0,61702,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,45926,0,15398,0,0,0,0,0,0,4554,2692,0,0,0,0,0,32485,0,0,0,10084,0,0,0,0,= 0,0, -24297,0,0,0,0,0,0,0,0,22790,0,0,0,55110,0,0,0,0,0,0,0,0,0,0,0,0,7112,0,31= 530, -45255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40743,17226,2= 2599,0, -0,0,0,0,0,0,0,3695,0,0,0,0,0,0,0,0,0,0,56999,0,0,0,0,0,13799,3114,21287,1= 353, -7591,0,0,0,8455,0,0,6824,0,0,0,0,0,0,0,14569,0,0,0,29000,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,19979,0,18376,0,0,0,0,0,0,0,0,0,0,0,0,11332,0,0,0,49863,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,2191,7527,23148,58022,0,0,0,30631,0,26565,0,0,0,0,0,0,0,0,0,0,= 0,0,754 -,0,0,15877,0,0,0,0,0,0,0,17510,7657,2821,0,0,0,0,0,0,0,0,0,41927,0,0,0,0,= 0,0,0,0 -,2569,34439,0,0,3790,0,0,0,15339,8775,0,0,0,0,0,0,0,0,0,0,0,15908,0,0,214= 19,8359 -,0,0,0,0,424,0,0,0,0,0,0,25318,8008,20551,0,0,0,45735,30058,30372,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,26180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31432,10567,0,0= ,0,0, -17450,0,0,0,0,0,0,30310,0,38022,0,0,0,0,0,28932,0,0,0,0,0,43910,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,22180,12075,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22247,0,0,2= 2826, -12359,0,0,0,0,4105,50407,0,0,0,0,0,0,13581,28583,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,28936,0,0,0,0,0,17673,10310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,905,= 57862, -1580,0,0,0,0,58630,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1347= 9,0,0, -14153,13286,0,0,9259,0,0,0,0,0,6606,3524,0,0,0,0,0,6567,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,631,49255,0,0,0,0,0,42886,0,38215,0,0,0,0,0,0,0,0= ,17580, -0,0,0,0,0,0,0,0,55046,0,0,0,0,0,0,0,0,0,10213,0,0,0,0,3604,37767,0,0,0,0,= 0,0,0,0 -,0,0,0,30950,0,0,0,0,0,0,0,0,0,62087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 23528,0 -,0,0,0,0,0,0,0,0,28715,4229,0,0,0,0,0,0,0,0,0,0,1226,26820,0,0,0,12133,69= 84,261, -21130,32548,0,0,0,0,0,0,3565,12390,20713,28071,0,0,1706,25287,0,0,0,0,0,0= ,0,0, -14670,0,0,0,0,0,0,30534,0,0,0,12615,0,43750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,28228, -0,0,0,0,0,0,0,45095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1224,3975,10954,6375,= 0,0,0,0 -,0,0,0,0,0,0,23180,20100,0,0,0,0,25736,8519,0,0,0,0,0,6663,0,2534,0,0,0,0= ,0,0,0, -0,23720,0,0,0,0,0,0,0,0,0,0,19398,0,47814,26281,49702,0,0,4332,12965,0,0,= 5704, -3206,0,0,0,0,0,0,0,0,0,0,0,0,0,15396,0,0,0,44102,0,0,0,0,0,0,0,0,0,0,0,0,= 0,25317 -,1064,39271,27433,0,14952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14308,0,0,0,0,0= ,0,2763 -,4100,0,0,0,0,0,0,18792,0,0,0,22154,32583,0,6244,0,0,0,0,0,0,0,49478,0,0,= 0,0,0,0 -,0,0,0,0,0,21894,0,0,11048,0,0,0,0,0,0,11685,0,53862,0,0,15114,0,13870,0,= 0,0,0,0 -,0,0,919,0,0,0,31916,0,22570,101,0,0,0,0,0,0,0,0,0,7333,0,0,0,0,3272,0,0,= 0,0, -27718,32712,0,0,0,0,0,0,0,0,0,1782,0,3688,0,0,0,0,29862,0,0,0,0,0,0,0,224= 69,0,0, -0,0,0,0,0,55302,850,15492,0,0,0,5927,19786,13350,0,25702,0,0,0,0,0,0,0,0,= 0,0,0, -40390,0,0,0,0,0,0,0,0,0,0,0,0,0,20260,0,0,0,0,0,0,0,0,0,0,0,0,0,15335,839= 4,0,0,0 -,0,0,0,26566,0,0,0,0,843,2245,0,0,0,0,0,0,0,0,6959,0,20488,1638,0,0,11533= ,50759, -0,0,0,0,0,20871,0,0,0,0,0,24519,0,0,0,0,9544,23591,0,0,0,0,0,0,0,0,0,0,20= 969, -7109,29001,0,0,32422,31720,64294,0,0,0,0,16106,0,0,0,6930,4933,0,0,0,2291= 7,0, -27015,0,0,0,0,19880,8070,0,0,0,0,23945,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0, -3310,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18439,0,0,0,20742,0,0,0,10597,0,0,0= ,0,0,0, -0,0,0,0,0,0,20236,0,0,0,16584,3429,0,0,0,0,0,0,0,0,27241,0,0,0,0,16132,0,= 0,0,0,0 -,0,0,0,0,0,0,0,244,28261,0,0,0,0,0,0,0,29509,0,0,0,0,0,0,0,0,2921,31781,0= ,0,0,0, -0,0,6408,4196,344,0,0,0,0,0,0,0,0,0,0,0,0,0,11689,45863,0,0,0,0,906,3301,= 0,0, -25544,32421,0,0,0,0,0,0,0,0,1260,61607,0,27302,0,0,8682,16614,0,0,0,0,108= 30,0,0, -9604,15049,13413,0,0,0,0,0,0,26761,0,0,0,0,0,0,61990,0,0,0,0,0,12580,0,0,= 11432,0 -,0,0,0,0,22507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12389,0,0,0,0,= 0,0, -2408,22661,14507,43239,0,9700,0,0,24714,0,0,0,0,0,0,0,0,23972,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,34086,0,0,22955,7238,0,0,0,0,0,28485,13806,20038,0,0,0,0,22602,0,= 0,0, -1645,22340,0,0,0,0,0,0,0,0,0,0,0,26502,0,0,554,0,0,0,0,61735,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,2694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,883,27879,15948,0,3242,57= 382,0,0 -,0,0,0,0,13930,0,0,0,0,0,30922,0,4137,52615,0,0,0,0,0,0,0,0,0,0,0,0,0,319= 11, -16072,0,0,0,0,0,0,0,0,0,0,0,0,26340,0,61671,0,0,0,0,3145,56199,0,0,0,0,0,= 0,0,0,0 -,0,0,0,280,0,5131,33479,0,15751,0,0,0,0,0,0,4136,1446,0,0,0,0,0,0,11304,1= 7863,0, -0,0,0,0,25125,0,0,0,36646,6057,0,0,0,855,11301,0,0,0,0,0,64774,0,0,0,1939= 7,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,1040,27367,0,0,0,0,0,0,0,0,0,0,0,0,0,64358,0,0= ,178, -132,0,0,14763,24455,0,0,0,46374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46246,0,0,0= ,37382, -0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8166,0,0,6921,0,0,0,9163,0,0= ,0,119, -0,0,0,23146,17156,0,0,0,0,0,9127,0,0,0,17927,0,0,0,0,0,22084,0,0,0,0,0,39= 879,0,0 -,2035,0,1067,0,0,0,0,0,16652,59591,0,0,0,0,0,0,0,0,0,0,0,0,20171,0,0,0,0,= 17733,0 -,0,0,0,0,32037,0,0,0,0,0,14277,0,0,0,0,0,0,0,42022,0,0,26793,20358,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,8907,0,0,0,0,0,0,0,0,27780,0,0,0,0,32330,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,39399,0,9732,0,16199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,854,0,2984,45063,25418,26980,22539,0,9133,3653,15528,28743,4649,= 0,616, -65127,0,0,0,61863,0,0,0,0,0,0,0,55303,0,0,0,0,0,0,0,0,23880,0,0,0,0,0,0,0= ,31848, -62854,0,0,0,0,0,0,0,0,0,0,0,49606,0,27974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,32580,0,0,0,26052,4043,0,0,40454,0,0,26056,30565,0,0,0,0,0,0,0,31398,= 0,0,0,0 -,0,0,0,0,29288,1797,0,0,3220,0,0,0,0,0,0,0,0,0,20427,0,0,0,0,23621,0,0,0,= 0,0,0,0 -,0,0,24261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35591,0,0,6862,0,0,0,4265,0,= 6285, -5383,0,0,0,0,0,36870,0,39847,0,0,17224,5414,27882,58118,0,0,13224,4262,0,= 0,0, -31302,0,0,1388,2982,11881,0,0,0,0,0,0,16837,809,0,24140,10724,0,0,0,0,583= 5,0,0,0 -,0,0,0,0,0,0,0,0,1256,19237,0,0,0,0,0,0,0,5796,11848,0,0,52870,11464,0,0,= 0,0,0,0 -,0,0,0,5645,9158,0,25223,0,0,0,0,0,39142,24968,8135,32104,28678,0,0,0,463= 11,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23820,0,0,0,0,0,4050,0,1323,25220,0,0,0,2= 0133,0, -0,0,0,0,0,0,0,0,0,0,9381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,13444,1198,60806,0,0,0,0,17356,50247,30632,0,0,0,0,0,0,0,1= 1944, -999,0,0,0,0,4010,10404,0,0,0,0,0,0,10346,0,0,49510,0,0,0,0,0,0,0,0,0,0,0,= 0,0, -38919,0,0,0,0,0,0,6351,60966,20137,487,0,0,0,0,0,0,655,2406,17387,43303,0= ,0,0, -17063,0,0,213,0,0,0,0,0,0,17221,0,0,0,0,0,0,0,0,0,0,0,10820,0,0,0,0,369,6= ,0,0, -9098,21093,0,31653,0,0,0,0,0,0,0,0,0,27143,0,0,16234,0,0,0,0,0,0,0,0,6020= ,31723, -28293,0,0,0,0,1936,30695,0,0,0,0,0,52902,0,0,29512,10791,0,20420,0,0,1601= 0,0,0,0 -,0,0,0,0,0,0,0,0,5324,0,0,0,0,0,0,0,0,0,0,0,0,13383,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,24328,0,0,0,0,0,0,40870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,24648,0,0,0,0,0,0,0,7786,2852,0,0,0,0,0,0,0,0,0,44678,0,17925,0,0,105= ,53062, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18762,0,0,40679,0,0,0,16165,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,20390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62310,1= 322, -14247,0,0,0,0,0,0,0,0,1832,6052,0,0,11882,0,0,0,0,17668,0,28262,0,29542,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28007,0,0,0= ,57223, -1585,0,0,0,0,0,0,0,0,0,0,0,21162,0,0,62247,0,0,0,0,0,25414,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,36326,0,0,0,23845,0,0,0,0,0,0,0,2693,0,0,0,0,0,0= ,0, -13125,0,31236,0,0,0,0,0,22502,0,0,0,0,0,0,5994,10309,0,0,0,7269,0,0,0,0,1= 7929,0, -1011,44647,0,0,0,0,0,14919,0,0,0,0,20586,5350,0,0,0,45702,0,13189,0,0,0,0= ,0,0,0, -0,0,35782,17992,0,0,0,0,0,8203,0,0,0,0,0,0,56678,0,0,0,0,0,38087,4233,0,2= 127,0,0 -,0,0,0,0,0,0,0,0,10148,0,0,0,2021,0,0,0,0,0,0,0,47206,0,0,0,0,0,0,0,9220,= 0,0,0,0 -,19465,0,0,0,0,0,0,0,0,39206,0,38055,0,0,0,0,0,0,0,46982,0,0,0,0,0,22054,= 3850,0, -0,0,0,0,0,0,55,0,10542,0,0,0,0,7239,0,0,0,0,0,59367,0,0,14761,0,0,0,0,430= 79,0,0, -0,0,0,2726,0,0,9582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3= 7478,0, -0,0,31364,0,0,0,0,0,0,0,0,20393,8933,0,0,0,0,0,9380,0,0,0,0,16905,549,0,0= ,0,0, -182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,= 19242,0 -,0,0,0,0,0,24933,0,6276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42310,2= 3595, -24068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13191,6158,2567,0,0,268,47047,0,0,0,0= ,0,0,0, -0,0,27940,0,0,0,0,0,26726,0,0,0,0,8200,1222,31562,0,0,0,0,0,0,0,0,0,2922,= 8231, -8904,29157,0,0,0,0,0,0,0,0,23976,4836,0,0,0,0,0,0,0,0,0,0,0,0,31658,0,0,3= 1685,0, -0,2889,6213,0,0,0,0,0,13605,0,0,0,0,0,24772,0,0,0,0,0,0,0,0,0,0,20684,264= 68, -24075,0,0,0,21193,0,715,679,0,0,0,0,0,0,3050,7654,0,0,0,13798,0,0,0,0,15,= 27973,0 -,0,8491,2086,0,0,0,43206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60391,0,0,= 0,0,0,0 -,0,25892,0,22276,0,34374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20165,0,0,= 25672,0 -,0,0,1811,24839,0,31044,0,0,25513,0,0,0,0,0,12810,0,0,62438,0,0,1325,0,36= 4,3782, -0,0,0,0,0,0,0,0,8042,19687,0,0,0,33415,0,0,0,0,0,0,0,0,0,0,0,7205,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,11844,0,0,0,0,3341,1543,6698,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,29766,0,0,0,0,0,0,0,0,0,0,0,41158,0,24294,0,3844= ,12329, -0,0,0,13738,0,0,0,0,0,0,0,0,26245,0,0,0,0,0,0,6378,0,343,4838,0,0,0,24358= ,11688, -0,0,0,0,0,0,0,0,0,1489,34759,0,0,0,0,363,51974,1878,11013,0,0,32265,59782= ,0,0,0, -28421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140= 89,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,29257,61222,0,30661,0,28327,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -27108,8843,0,9673,2084,0,0,0,16327,0,48455,0,0,0,0,0,0,4876,9316,0,0,0,0,= 0,0,0,0 -,0,0,0,0,9035,18852,0,0,0,0,0,0,0,0,0,0,0,0,0,4164,0,0,14827,1349,0,0,0,0= ,0, -11909,0,0,0,0,0,0,0,0,0,21765,0,0,0,0,0,0,0,0,31272,63910,0,0,0,25924,0,0= ,0,0,0, -0,0,0,0,44487,0,0,0,20612,0,0,27754,31428,0,0,0,0,0,0,0,17287,0,3943,0,0,= 0,63302 -,0,0,0,0,25256,19942,0,55142,0,39046,0,0,0,0,0,0,0,15367,0,0,0,0,0,0,0,0,= 0,0,0, -28422,0,0,0,0,0,0,0,0,0,0,0,0,9576,63847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,25226,5734,0,0,0,0,0,0,13801,4997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,43942,1270,2566,6284,0,0,16230,0,0,0,20678,0,0,0,0,0,38855,0= ,0,0,0, -29643,0,0,0,41,3655,0,0,0,0,0,14276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,15686,0,0,0,15718,0,50694,0,0,16232,8007,0,0,0,= 5060, -329,11591,51,0,0,0,0,0,0,0,0,0,13065,7302,27530,15366,0,24934,0,0,0,17828= ,0,0, -4552,6311,0,0,0,0,0,0,0,0,0,0,0,47686,368,12103,10122,33830,0,0,599,18534= ,9579, -49479,0,5668,0,0,0,0,0,0,0,0,0,13157,0,0,0,0,23274,14055,0,0,0,0,0,48903,= 0,0,0,0 -,0,0,1871,0,15434,0,0,0,16174,62470,0,0,0,0,0,0,0,0,0,0,0,7749,0,0,0,0,0,= 0,0, -30501,0,0,0,0,25675,0,0,0,0,0,0,0,0,0,0,9285,0,0,25323,1669,0,0,0,0,0,0,0= ,0,0,0, -0,3588,0,0,0,0,0,32902,0,0,4426,0,0,0,0,57959,0,0,0,0,0,0,29898,58278,0,0= ,0,0, -11880,1220,0,0,0,41479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23141,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,42566,0,0,0,0,0,0,0,40167,9484,3493,0,0,0,0,0,21126,0,0,0,0,8649,189= 18,0,0, -0,0,0,0,0,34886,2601,0,0,0,0,12518,0,0,0,0,7976,10311,0,0,0,0,0,0,0,45190= ,0,0,0, -0,0,0,0,0,0,0,16842,20229,0,0,0,0,0,0,7528,4614,0,0,0,0,0,30086,0,0,0,167= 1,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,9896,6277,0,0,0,0,0,61191,0,41287,0,21956,0,0,2001= 0,0,0,0 -,0,0,0,0,0,0,0,0,13195,0,0,0,0,1381,0,0,0,0,365,30951,24268,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,7044,0,0,0,0,0,0,0,0,0,0,27944,359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,28487,0,0,77,0,0,0,0,0,0,0,0,56775,12586,8421,0,0,0,0,0,0,26185,1459= 9,0,0, -8040,5702,12585,3109,0,0,0,0,0,21574,5388,0,0,0,0,0,0,0,5106,52454,0,0,0,= 0,0,0,0 -,0,1907,29895,0,6116,0,0,0,0,11081,5285,0,28069,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,4104 -,0,0,0,0,0,0,41511,0,0,0,0,0,0,5262,0,0,0,503,4231,7720,34343,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7304,10374,1718,0,0,29127,0,0,0,0,0,0,0,0,2= 3497, -22567,6952,2340,0,0,0,0,0,0,0,0,20360,12453,0,45094,0,0,0,0,0,28582,0,0,0= ,0,680, -0,0,0,0,0,0,0,0,0,0,0,0,0,23084,0,0,0,30696,0,0,0,0,45862,0,0,0,0,0,0,0,0= ,0,0,0, -0,5580,6053,0,0,0,0,0,0,0,0,0,0,712,70,0,0,26091,11335,0,0,0,0,13612,0,13= 160, -1926,435,51559,0,0,0,0,0,0,0,0,0,0,0,0,0,47302,19083,0,0,12742,0,1607,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,6155,37095,0,0,0,0,0,18948,7146,0,0,0,0,0,0,0,7= 848, -2055,0,0,0,0,8910,0,19336,0,0,48070,8490,0,0,0,0,0,0,0,9932,56423,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,4133,0,0,0,0,0,0,0,0,0,43398,0,0,0,0,0,0,0,0,16173,0,= 0,0,0,0 -,0,0,32011,0,0,30918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26854,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,20389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18889,0,0,0,0,8965,0,0,0,44358,0,0,0= ,8997,0 -,34055,0,0,0,0,0,29350,0,0,501,17767,0,0,32457,60262,0,0,0,30886,0,0,3757= ,1063,0 -,0,0,25637,0,0,0,0,0,28068,0,26374,0,0,0,0,0,0,0,0,0,0,0,11684,0,0,0,0,0,= 0,24779 -,229,0,13766,0,0,7402,11525,0,0,0,0,0,0,0,0,26313,23686,0,0,29736,47527,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27268,0,0,0,0,553,0,0,0,0,0,0,32038,0,0,0,0= ,1135, -26596,0,0,12300,14631,0,0,0,43238,0,871,0,0,31496,0,8457,17669,0,12836,0,= 0,0, -22726,0,38758,0,0,375,6564,0,0,0,0,0,0,0,0,0,0,0,0,170,18535,0,22948,0,0,= 32360,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,25764,0,0,0,0,0,0,0,0,0,0,0,15652,0,0,0,32774,= 0,0,0,0 -,0,0,0,0,0,28551,0,0,0,0,0,0,0,0,0,0,0,0,15145,0,0,0,21100,27654,0,0,0,0,= 0,0, -4874,26215,0,1639,0,0,0,0,0,0,0,0,0,0,4169,0,0,0,0,0,7336,0,0,0,0,21572,0= ,0,0,0, -0,0,0,0,0,24644,1675,2533,0,0,0,53318,0,13094,0,0,0,0,0,0,0,6246,0,22020,= 0,0,0,0 -,0,0,0,0,0,0,0,28453,5576,5124,0,0,0,0,0,0,0,0,0,0,0,0,0,27910,0,29382,18= 216, -8583,0,0,0,39174,0,43558,0,0,0,0,0,0,0,0,0,11973,0,0,0,0,0,23397,0,0,0,0,= 6091,0, -0,0,0,0,0,0,6474,16197,14217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,26728,0,567,48839,0,0,0,0,0,15271,0,0,31818,43974,2450,0,0,0,0,0,0= ,0, -11368,9191,0,44454,0,0,0,0,0,0,14568,12293,0,0,0,8453,0,0,0,0,0,0,0,0,0,0= ,0,0, -32040,0,0,0,0,0,0,0,0,0,0,0,0,902,0,0,0,27236,5612,11495,0,0,0,0,0,0,0,0,= 9194, -23684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27430,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0, -26217,44870,0,0,0,0,0,0,5581,7173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -52775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20968,18340,0,0,0,0,0,0,0,0,410= 7,11239 -,0,0,0,0,0,0,0,0,0,0,0,29381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21990,= 0,0,0,0 -,0,0,0,0,0,48806,0,0,0,32292,0,0,0,0,0,0,0,10884,0,0,0,0,0,0,0,0,0,0,2756= 2,0, -5643,0,0,0,0,0,0,0,0,0,3089,31525,0,19684,0,0,0,0,0,0,0,61415,0,0,0,0,0,3= 6198,0, -0,0,0,0,0,0,7908,0,0,0,0,872,743,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,32484,0,0,0,0,0,34822,0,0,0,0,0,50726,0,0,0,0,7274,0,0,0,15= 304, -11526,0,0,0,3047,0,0,0,0,0,0,22376,0,0,0,846,0,0,0,0,35815,0,0,0,23652,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,23721,2148,0,0,0,0,0,0,14856,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,1358,0,3082,0,0,0,848,10949,0,0,0,0,0,0,6504,0,0,14372,0,0,= 0,0,0,0 -,0,0,0,0,8201,9958,0,0,0,0,0,0,24266,0,0,0,0,0,0,0,0,26469,0,0,0,0,18604,= 2053,0, -33511,0,0,0,0,0,9222,0,0,0,0,0,44006,0,0,0,0,0,0,0,0,0,0,0,41895,0,0,0,0,= 0,0,0,0 -,12044,390,0,0,0,0,0,4935,0,48646,0,56102,3052,16070,0,0,0,0,0,0,0,8612,9= 320, -38311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,500,0,0,0,0,429= 18,0, -32550,0,0,0,0,0,0,0,0,27434,57926,17064,0,0,46502,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,26760,6756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,624,0,5000,0,0,0,0,3= 2293,0, -0,0,0,0,0,0,0,0,0,0,0,0,26246,0,0,0,0,0,0,0,0,23,7301,0,0,0,36199,0,40838= ,0,0,0, -0,0,0,0,0,0,0,0,0,27178,57350,0,0,12457,9317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16810,0,0,0,14510,0,0,0,0,21319,0,0,0,13= 508,17, -11365,0,0,0,0,5291,0,8329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27685,0,0,0,0,0= ,0,0, -52006,0,0,0,7493,0,44263,0,0,0,0,0,0,0,0,9800,0,0,0,25676,61478,0,0,0,0,0= ,0,5773 -,0,0,0,0,41991,26057,0,0,0,0,0,0,0,0,0,0,22629,0,0,0,47783,362,1959,23468= ,0,0,0, -10921,0,0,0,3150,0,0,0,0,0,0,0,0,0,0,0,32456,0,0,0,0,0,0,0,4559,3270,0,0,= 983,0,0 -,26343,0,33446,0,0,0,61767,0,48390,0,0,0,0,0,0,0,2790,0,39782,7849,0,0,0,= 0,0,0,0 -,1544,2183,0,0,0,0,0,0,0,0,4040,2471,20009,30020,0,0,11242,0,0,0,5578,533= 82,0, -22631,0,0,0,0,0,0,0,0,0,0,0,12901,0,0,0,0,0,0,0,0,0,0,0,0,215,0,0,9030,0,= 0,0,0,0 -,0,265,1412,0,0,11626,3687,0,0,0,0,0,0,0,0,0,0,0,0,17449,24359,0,0,26729,= 40134,0 -,0,0,0,29768,61958,0,0,0,0,0,0,0,0,20908,0,0,0,0,0,11016,0,0,47462,21547,= 5926,0, -0,14728,2983,24104,15301,0,0,0,0,0,32645,0,0,0,0,0,0,0,3300,0,0,0,15972,0= ,0,0,0, -0,0,6634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3076,0,30983,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,106,0,0,0,0,12775,0,0,0,0,7177,18022,0,0,0,0,0,22534,0,0,0,0,0,0,0,0,0,= 0,0, -49894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27560,0,0,0,0,30278,10668,2= 3877,0, -0,0,0,0,0,0,29124,0,0,0,0,0,0,0,0,0,0,0,0,0,20870,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,44582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48454,0,0,0,0,6442,0,16330,22= 951,0,0 -,16904,0,0,0,0,644,0,0,0,40038,0,0,0,37222,0,0,0,9830,0,0,0,0,0,34919,0,0= ,0,0,0, -0,0,0,0,0,0,13733,0,0,0,28196,0,0,0,0,0,19876,0,0,0,0,0,0,0,23558,0,11142= ,0, -27781,0,0,0,0,13864,0,0,0,24682,47847,0,0,0,0,6890,0,0,0,0,0,3981,0,0,0,0= ,0,0,0, -0,0,0,0,1772,0,0,0,0,0,0,0,3603,1991,0,27396,8652,0,18312,0,0,0,0,30054,0= ,0,0,0, -0,0,0,11270,0,0,0,0,0,0,0,0,0,20708,0,0,0,0,338,0,0,0,0,0,0,0,7050,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,14862,0,0,3492,0,0,0,55878,0,0,0,16486,0,0,0,18119,0,0,0,0,0= ,0,2154 -,1284,0,0,23113,31751,0,0,29547,0,0,0,0,0,0,36647,0,0,0,0,0,0,0,0,0,0,0,1= 8183,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7913,0,0,0,0,20644,0,0,10508,0,0,0,0,0,0,0,0,0,= 0,0,0, -43622,0,0,0,0,0,40966,0,0,0,0,0,0,0,0,0,0,246,901,11529,5191,0,0,0,0,0,0,= 0,0,0,0 -,0,24454,0,0,26665,27590,0,27397,0,0,0,0,0,0,23562,2949,0,0,30344,62214,0= ,47334, -2026,18885,0,0,0,48678,0,0,0,22694,0,0,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,15465,0,0,0,0,38822,0,0,0,0,945,32708,0,54791,0,14918,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,23396,0,0,0,0,0,0,5486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77= 22,0,0, -0,0,0,0,0,0,0,0,0,30856,64166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35206,0,0,0,3= 0535,0, -0,0,0,0,0,0,0,0,62663,0,0,1096,17574,31820,0,0,14375,4402,27207,0,0,21448= ,4676,0 -,0,0,0,16585,5094,0,0,0,0,0,0,0,0,4845,0,0,32870,0,0,0,0,0,0,0,0,0,0,3146= 6,0,0,0 -,0,31783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4522,16039,0,0,0,0,0= ,0,0,0, -0,14469,0,0,0,0,0,0,0,0,0,0,7464,4773,0,0,0,0,0,0,0,0,18636,0,0,0,25640,0= ,0,0,0, -0,0,2244,0,0,11818,0,1168,0,0,0,0,0,0,0,6540,23079,13770,7719,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58150= ,528, -34502,32682,0,0,12997,0,0,0,0,0,2214,0,0,0,0,0,58567,0,0,0,26375,0,0,0,0,= 0,0,0,0 -,0,26437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26121,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,32005,22952,59047,0,13543,0,0,0,0,0,0,0,0,16328,0,0,33542,0,0,0,19782,= 0,0,0, -16644,0,0,0,0,31688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10276= ,0,0,0, -0,0,0,0,36327,0,0,29480,0,0,0,777,12709,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,273= 98,0,0, -0,4455,9037,31397,0,9221,0,0,0,60487,20840,1796,0,0,0,0,0,0,0,0,8364,0,0,= 0,0,0,0 -,0,0,0,0,0,19752,44902,0,38566,0,0,18027,0,0,0,0,0,0,0,0,10662,0,0,0,0,0,= 11812,0 -,0,0,0,0,0,0,0,0,19910,0,0,0,45030,0,0,0,0,0,0,0,0,0,0,0,0,19978,5127,0,1= 1620,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,19817,0,5579,9350,0,0,21002,19718,0,0,0,21926,0,0,0,0,0,0,0,0,0,0,0,0,0= ,20711, -0,0,0,20197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40550,0,0,0,57510,0,0,0= ,53895, -0,0,15017,0,17000,39367,2347,0,0,0,0,0,0,0,0,0,8588,0,0,0,0,0,3273,17862,= 3498, -2085,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19048,0,0,0,0,0,11978,58631,= 0,0,0,0 -,0,0,523,0,12969,198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28197,0,47846,0,0,= 0,0,0,0 -,0,0,0,4549,0,0,0,0,0,0,0,0,0,0,687,14917,748,8229,0,0,0,0,0,0,2476,12935= ,0,0,0, -0,0,0,22792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27528,59142,0,0,20876,20134= ,0,0,0, -0,440,12068,0,58951,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48038,0,0,0,60999,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,15716,7498,5476,0,0,0,0,20202,37959,0,0,0,0,0,0,0,0,0,0= ,0,0, -29801,0,5451,0,0,0,0,0,0,0,0,0,0,50790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 24485,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13573,0,0,22856,0,0,0,0,21927,0,= 0,0,0,0 -,0,9130,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,0,0,0,2282,583,0,0,0,0,0,0,0,0,0,= 0,3726, -26503,0,0,0,0,0,0,9258,0,0,0,0,0,0,0,0,21604,0,0,0,45574,0,0,0,0,0,20710,= 0,0,0, -42694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1163,6694,0,0,0,0,0,0,0,10948,0,0,0,297= 00,0,0, -0,0,0,58823,3796,27399,20939,10180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0, -19,29287,28649,14534,0,0,16428,45607,0,0,0,0,0,0,25322,0,4908,0,0,0,0,0,0= ,25476, -29097,14246,11053,0,0,0,0,0,0,0,0,18502,0,0,0,44390,0,0,0,17765,0,0,0,0,0= ,0, -24520,0,0,0,0,0,0,0,0,0,0,17319,0,0,0,0,0,0,0,0,0,0,0,0,0,28166,0,0,0,0,0= ,48198, -0,0,31467,0,24585,0,0,0,0,18692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23596= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7236,968,13637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0, -3763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14791,0,0,0,12324,0,1274= 1,0,0,0 -,0,0,0,0,0,0,11108,0,0,0,0,4009,40295,20616,4357,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0, -15015,0,0,0,0,0,43751,0,0,0,0,0,0,0,0,0,0,0,23013,0,0,0,0,0,0,0,0,0,0,0,0= ,0, -45542,0,0,0,0,0,0,0,0,0,23974,0,0,0,0,17480,20647,0,0,0,0,0,0,8876,0,0,40= 806,0,0 -,0,0,0,0,0,14502,17160,17764,0,0,31594,35431,0,0,2890,0,0,0,0,0,0,0,0,275= 24,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8228,0,56583,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,34278,0,0,0,0,0,0,0,0,0,0,0,0,0,2662,0,26724,0,0,0,0,0,0,0,64198= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,3049, -54983,0,0,0,0,0,0,0,837,0,17604,0,0,0,0,0,28838,0,0,0,0,0,0,26312,0,0,391= 0,0,0,0 -,25830,0,0,0,0,0,8391,0,19845,19240,1092,0,0,5449,0,0,0,0,17188,0,0,0,0,0= ,0,0,0, -0,10629,0,0,6671,61094,5832,8358,0,0,0,55078,0,0,0,0,0,29860,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,51494,0,28647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25989,0,0,3015= 3,61318 -,0,0,0,0,0,0,0,24903,0,0,0,4388,0,42054,0,0,0,0,0,0,0,53158,0,0,0,0,0,0,0= ,50918, -0,0,0,0,0,0,26251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5929,2853,0,3= 7126, -7372,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2027,934,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,55686,0,0,5672,5447,0,62758,0,0,0,0,0,0,0,0,0,0,0,0,2923,0,55= 6,1415, -0,0,0,0,0,0,0,0,0,8645,0,9477,0,0,0,0,0,0,0,48742,0,0,0,0,0,0,0,0,0,0,242= 35,228, -0,0,0,0,0,0,0,0,0,0,16970,18823,0,0,0,0,0,0,0,0,0,25158,0,0,0,0,0,18567,2= 0072, -2823,14313,1830,0,0,0,0,0,0,0,0,27048,23526,0,0,0,0,0,997,492,0,14730,166= 77,396, -13574,0,0,0,41671,0,0,0,0,0,0,0,19045,0,0,0,421,17545,3110,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,47111,14475,56551,0,0,0,0,0,0,0,0,0,0,3697,0,0,0,0,0,0,49382,0,3= 5559,0, -0,0,0,40,0,11496,15621,0,8550,0,0,0,63462,0,0,0,0,0,0,0,36966,0,50406,0,4= 6022, -1001,0,0,12069,3249,0,0,0,0,0,0,0,0,0,0,0,0,0,15241,0,0,0,0,0,0,0,0,64743= ,0,0,0, -0,0,58759,0,0,0,0,1136,26981,0,0,0,0,0,0,0,17732,0,0,0,17157,20011,6629,0= ,43879, -0,0,0,13572,25128,10759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28676,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,875,24007,0,0,0,0,7628,0,0,0,0,0,12268,0,0,0,0,0,0,0,= 0,19300 -,23210,356,0,0,0,0,0,0,0,0,0,15236,0,0,0,0,0,49670,0,0,0,0,0,0,0,21764,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,13931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45799,0,0,43= 6,3589, -0,0,11402,0,0,0,0,0,0,0,0,0,0,62822,0,0,0,39814,588,0,0,0,0,0,0,27750,0,0= ,0,0,0, -0,1609,22660,2346,18951,0,16068,0,0,0,0,0,0,5162,11110,0,0,0,0,15048,1060= ,0,7879 -,18280,326,0,14886,19656,0,7594,0,0,0,0,0,781,581,0,16198,0,0,0,0,0,0,107= 8,9892, -0,0,0,0,0,0,0,0,0,0,4489,0,0,0,0,33798,0,0,0,54534,0,0,0,0,0,0,0,33158,0,= 0,0,0,0 -,0,0,0,0,42086,13834,2757,8456,16773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3434= ,0,0,0, -0,0,3946,29668,0,0,30634,36775,0,0,0,0,0,24901,0,16069,6280,0,0,0,0,41990= ,0,0,0, -0,0,0,0,27365,0,0,0,0,0,0,0,0,0,0,1450,44807,0,0,0,32100,0,0,0,0,0,35110,= 0,0,0,0 -,0,0,0,0,17448,19591,0,0,0,0,0,0,0,0,0,0,0,0,1739,0,0,0,0,5511,0,0,0,3293= 4,0,0,0 -,0,0,0,0,0,0,18180,0,0,0,23428,19754,0,0,31174,3021,31655,23464,0,0,0,0,0= ,0, -57255,0,0,21292,64487,0,0,0,0,0,0,25802,9189,0,0,0,0,0,49254,0,0,0,0,0,0,= 0,0,0,0 -,5837,50023,0,0,0,0,0,0,0,0,0,15495,0,0,0,0,0,51942,0,0,0,0,0,0,0,0,28104= ,58662, -0,50214,0,0,0,0,0,0,0,0,2988,0,22888,31812,0,0,0,0,0,2020,0,18916,0,0,0,0= ,0,0,0, -23973,0,0,0,0,17516,11717,0,0,0,55911,0,0,0,0,0,0,0,2855,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,46822,0,24710,28586,0,0,0,1556,0,0,30117,0,0,22090,57127,3403,= 14087,0 -,0,0,0,0,0,0,0,0,0,1041,0,10633,6916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27269,0,0,13322,18055,0,29380,0,56454,= 0,0,120 -,0,0,8773,0,0,0,0,16040,0,0,0,0,0,0,0,27242,23781,0,1572,0,28134,0,0,1512= ,0,0,0, -0,0,0,27684,0,38470,0,0,0,0,0,0,1513,8709,0,0,0,0,0,0,0,0,0,0,0,46566,0,0= ,0,0, -28521,61159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24356,0,0,0,0,0,0,0,0,0,130= 28,0, -5863,0,0,15693,0,0,0,0,0,0,0,1131,23398,0,0,0,0,0,0,0,26212,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,18404,0,0,0,0,1457,26183,0,0,2475,7110,0,0,0,0,27180,60166,0,0,0,20= 262,0, -41862,0,0,0,0,0,0,0,0,0,0,2762,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26148,0,0,0,0,= 0,0,0,0 -,0,28229,0,0,0,29254,0,0,0,0,0,0,0,0,0,0,27690,0,0,13636,12776,1862,0,0,0= ,0,0,0, -17225,3271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28039,0,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,4457,18117,0,2023,402,0,0,0,0,0,0,0,0,0,0,0,0,0,104,36= 54,0,0, -0,0,0,0,0,0,18440,0,0,0,0,0,0,0,0,29861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,22150,0,0,0,0,0,0,0,0,0,0,0,0,24074,0,0,0,0,0,0,0,0,12004,0= ,32358, -0,0,3081,0,0,0,0,0,0,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,10792,1799,21322,0,= 7880, -12613,0,0,0,0,0,0,0,0,13993,0,0,0,16202,0,0,0,0,32102,0,37223,0,10500,0,0= ,0,0,0, -0,0,0,32008,0,0,0,0,0,23816,3236,0,0,0,0,0,23237,0,0,5642,0,4684,294,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,26852,0,0,0,0,0,0,7148,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,7890,61798,939,0,0,56679,0,0,0,0,0,27078,202,5029,0,0= ,0,0,0, -0,0,0,0,28005,0,0,15273,24741,5676,20452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55= 910,0,0 -,0,0,5069,27942,0,21092,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12517,0,0,0= ,0,0,0, -0,0,0,0,0,0,21384,28260,0,2502,20108,0,0,0,0,0,0,0,0,0,0,0,0,46726,0,3079= 0,0,0,0 -,0,0,14725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,6372,0,0,0,12422,15182,0,8683= ,0, -10665,19462,0,0,0,0,0,0,1590,0,31628,0,22632,19750,0,0,0,0,0,0,0,24198,0,= 0,0,0,0 -,50662,0,0,0,0,0,0,0,0,0,0,9131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11015,0,0,0,0= ,0,0,0, -0,16490,54695,0,0,0,0,0,0,0,0,12937,0,0,0,0,16004,0,0,0,0,0,0,0,0,0,2181,= 6923,0, -0,0,0,0,0,0,15624,11302,0,0,5673,7559,0,0,14668,15684,0,0,0,0,0,0,24204,4= 8134,0, -24230,0,55527,0,0,3464,19141,0,0,0,0}; - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/encode.c b/BaseTools/So= urce/C/BrotliCompress/enc/encode.c deleted file mode 100644 index 93824d620373..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/encode.c +++ /dev/null @@ -1,1864 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Implementation of Brotli compressor. */ - -#include - -#include /* free, malloc */ -#include /* memcpy, memset */ - -#include "../common/constants.h" -#include "../common/context.h" -#include "../common/platform.h" -#include "../common/version.h" -#include "./backward_references.h" -#include "./backward_references_hq.h" -#include "./bit_cost.h" -#include "./brotli_bit_stream.h" -#include "./compress_fragment.h" -#include "./compress_fragment_two_pass.h" -#include "./encoder_dict.h" -#include "./entropy_encode.h" -#include "./fast_log.h" -#include "./hash.h" -#include "./histogram.h" -#include "./memory.h" -#include "./metablock.h" -#include "./prefix.h" -#include "./quality.h" -#include "./ringbuffer.h" -#include "./utf8_util.h" -#include "./write_bits.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src)); - -typedef enum BrotliEncoderStreamState { - /* Default state. */ - BROTLI_STREAM_PROCESSING =3D 0, - /* Intermediate state; after next block is emitted, byte-padding should= be - performed before getting back to default state. */ - BROTLI_STREAM_FLUSH_REQUESTED =3D 1, - /* Last metablock was produced; no more input is acceptable. */ - BROTLI_STREAM_FINISHED =3D 2, - /* Flushing compressed block and writing meta-data block header. */ - BROTLI_STREAM_METADATA_HEAD =3D 3, - /* Writing metadata block body. */ - BROTLI_STREAM_METADATA_BODY =3D 4 -} BrotliEncoderStreamState; - -typedef struct BrotliEncoderStateStruct { - BrotliEncoderParams params; - - MemoryManager memory_manager_; - - HasherHandle hasher_; - uint64_t input_pos_; - RingBuffer ringbuffer_; - size_t cmd_alloc_size_; - Command* commands_; - size_t num_commands_; - size_t num_literals_; - size_t last_insert_len_; - uint64_t last_flush_pos_; - uint64_t last_processed_pos_; - int dist_cache_[BROTLI_NUM_DISTANCE_SHORT_CODES]; - int saved_dist_cache_[4]; - uint16_t last_bytes_; - uint8_t last_bytes_bits_; - uint8_t prev_byte_; - uint8_t prev_byte2_; - size_t storage_size_; - uint8_t* storage_; - /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */ - int small_table_[1 << 10]; /* 4KiB */ - int* large_table_; /* Allocated only when needed */ - size_t large_table_size_; - /* Command and distance prefix codes (each 64 symbols, stored back-to-b= ack) - used for the next block in FAST_ONE_PASS_COMPRESSION_QUALITY. The co= mmand - prefix code is over a smaller alphabet with the following 64 symbols= : - 0 - 15: insert length code 0, copy length code 0 - 15, same dista= nce - 16 - 39: insert length code 0, copy length code 0 - 23 - 40 - 63: insert length code 0 - 23, copy length code 0 - Note that symbols 16 and 40 represent the same code in the full alph= abet, - but we do not use either of them in FAST_ONE_PASS_COMPRESSION_QUALIT= Y. */ - uint8_t cmd_depths_[128]; - uint16_t cmd_bits_[128]; - /* The compressed form of the command and distance prefix codes for the= next - block in FAST_ONE_PASS_COMPRESSION_QUALITY. */ - uint8_t cmd_code_[512]; - size_t cmd_code_numbits_; - /* Command and literal buffers for FAST_TWO_PASS_COMPRESSION_QUALITY. *= / - uint32_t* command_buf_; - uint8_t* literal_buf_; - - uint8_t* next_out_; - size_t available_out_; - size_t total_out_; - /* Temporary buffer for padding flush bits or metadata block header / b= ody. */ - union { - uint64_t u64[2]; - uint8_t u8[16]; - } tiny_buf_; - uint32_t remaining_metadata_bytes_; - BrotliEncoderStreamState stream_state_; - - BROTLI_BOOL is_last_block_emitted_; - BROTLI_BOOL is_initialized_; -} BrotliEncoderStateStruct; - -static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s); - -static size_t InputBlockSize(BrotliEncoderState* s) { - return (size_t)1 << s->params.lgblock; -} - -static uint64_t UnprocessedInputSize(BrotliEncoderState* s) { - return s->input_pos_ - s->last_processed_pos_; -} - -static size_t RemainingInputBlockSize(BrotliEncoderState* s) { - const uint64_t delta =3D UnprocessedInputSize(s); - size_t block_size =3D InputBlockSize(s); - if (delta >=3D block_size) return 0; - return block_size - (size_t)delta; -} - -BROTLI_BOOL BrotliEncoderSetParameter( - BrotliEncoderState* state, BrotliEncoderParameter p, uint32_t value) = { - /* Changing parameters on the fly is not implemented yet. */ - if (state->is_initialized_) return BROTLI_FALSE; - /* TODO: Validate/clamp parameters here. */ - switch (p) { - case BROTLI_PARAM_MODE: - state->params.mode =3D (BrotliEncoderMode)value; - return BROTLI_TRUE; - - case BROTLI_PARAM_QUALITY: - state->params.quality =3D (int)value; - return BROTLI_TRUE; - - case BROTLI_PARAM_LGWIN: - state->params.lgwin =3D (int)value; - return BROTLI_TRUE; - - case BROTLI_PARAM_LGBLOCK: - state->params.lgblock =3D (int)value; - return BROTLI_TRUE; - - case BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: - if ((value !=3D 0) && (value !=3D 1)) return BROTLI_FALSE; - state->params.disable_literal_context_modeling =3D TO_BROTLI_BOOL(!= !value); - return BROTLI_TRUE; - - case BROTLI_PARAM_SIZE_HINT: - state->params.size_hint =3D value; - return BROTLI_TRUE; - - case BROTLI_PARAM_LARGE_WINDOW: - state->params.large_window =3D TO_BROTLI_BOOL(!!value); - return BROTLI_TRUE; - - case BROTLI_PARAM_NPOSTFIX: - state->params.dist.distance_postfix_bits =3D value; - return BROTLI_TRUE; - - case BROTLI_PARAM_NDIRECT: - state->params.dist.num_direct_distance_codes =3D value; - return BROTLI_TRUE; - - default: return BROTLI_FALSE; - } -} - -/* Wraps 64-bit input position to 32-bit ring-buffer position preserving - "not-a-first-lap" feature. */ -static uint32_t WrapPosition(uint64_t position) { - uint32_t result =3D (uint32_t)position; - uint64_t gb =3D position >> 30; - if (gb > 2) { - /* Wrap every 2GiB; The first 3GB are continuous. */ - result =3D (result & ((1u << 30) - 1)) | ((uint32_t)((gb - 1) & 1) + = 1) << 30; - } - return result; -} - -static uint8_t* GetBrotliStorage(BrotliEncoderState* s, size_t size) { - MemoryManager* m =3D &s->memory_manager_; - if (s->storage_size_ < size) { - BROTLI_FREE(m, s->storage_); - s->storage_ =3D BROTLI_ALLOC(m, uint8_t, size); - if (BROTLI_IS_OOM(m)) return NULL; - s->storage_size_ =3D size; - } - return s->storage_; -} - -static size_t HashTableSize(size_t max_table_size, size_t input_size) { - size_t htsize =3D 256; - while (htsize < max_table_size && htsize < input_size) { - htsize <<=3D 1; - } - return htsize; -} - -static int* GetHashTable(BrotliEncoderState* s, int quality, - size_t input_size, size_t* table_size) { - /* Use smaller hash table when input.size() is smaller, since we - fill the table, incurring O(hash table size) overhead for - compression, and if the input is short, we won't need that - many hash table entries anyway. */ - MemoryManager* m =3D &s->memory_manager_; - const size_t max_table_size =3D MaxHashTableSize(quality); - size_t htsize =3D HashTableSize(max_table_size, input_size); - int* table; - BROTLI_DCHECK(max_table_size >=3D 256); - if (quality =3D=3D FAST_ONE_PASS_COMPRESSION_QUALITY) { - /* Only odd shifts are supported by fast-one-pass. */ - if ((htsize & 0xAAAAA) =3D=3D 0) { - htsize <<=3D 1; - } - } - - if (htsize <=3D sizeof(s->small_table_) / sizeof(s->small_table_[0])) { - table =3D s->small_table_; - } else { - if (htsize > s->large_table_size_) { - s->large_table_size_ =3D htsize; - BROTLI_FREE(m, s->large_table_); - s->large_table_ =3D BROTLI_ALLOC(m, int, htsize); - if (BROTLI_IS_OOM(m)) return 0; - } - table =3D s->large_table_; - } - - *table_size =3D htsize; - memset(table, 0, htsize * sizeof(*table)); - return table; -} - -static void EncodeWindowBits(int lgwin, BROTLI_BOOL large_window, - uint16_t* last_bytes, uint8_t* last_bytes_bits) { - if (large_window) { - *last_bytes =3D (uint16_t)(((lgwin & 0x3F) << 8) | 0x11); - *last_bytes_bits =3D 14; - } else { - if (lgwin =3D=3D 16) { - *last_bytes =3D 0; - *last_bytes_bits =3D 1; - } else if (lgwin =3D=3D 17) { - *last_bytes =3D 1; - *last_bytes_bits =3D 7; - } else if (lgwin > 17) { - *last_bytes =3D (uint16_t)(((lgwin - 17) << 1) | 0x01); - *last_bytes_bits =3D 4; - } else { - *last_bytes =3D (uint16_t)(((lgwin - 8) << 4) | 0x01); - *last_bytes_bits =3D 7; - } - } -} - -/* Initializes the command and distance prefix codes for the first block.= */ -static void InitCommandPrefixCodes(uint8_t cmd_depths[128], - uint16_t cmd_bits[128], - uint8_t cmd_code[512], - size_t* cmd_code_numbits) { - static const uint8_t kDefaultCommandDepths[128] =3D { - 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, - 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, - 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6, - 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, - 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - }; - static const uint16_t kDefaultCommandBits[128] =3D { - 0, 0, 8, 9, 3, 35, 7, 71, - 39, 103, 23, 47, 175, 111, 239, 31, - 0, 0, 0, 4, 12, 2, 10, 6, - 13, 29, 11, 43, 27, 59, 87, 55, - 15, 79, 319, 831, 191, 703, 447, 959, - 0, 14, 1, 25, 5, 21, 19, 51, - 119, 159, 95, 223, 479, 991, 63, 575, - 127, 639, 383, 895, 255, 767, 511, 1023, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12, - 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255, - 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095, - }; - static const uint8_t kDefaultCommandCode[] =3D { - 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc= 6, - 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8= c, - 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xa= a, - 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x9= 4, - 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00, - }; - static const size_t kDefaultCommandCodeNumBits =3D 448; - COPY_ARRAY(cmd_depths, kDefaultCommandDepths); - COPY_ARRAY(cmd_bits, kDefaultCommandBits); - - /* Initialize the pre-compressed form of the command and distance prefi= x - codes. */ - COPY_ARRAY(cmd_code, kDefaultCommandCode); - *cmd_code_numbits =3D kDefaultCommandCodeNumBits; -} - -/* Decide about the context map based on the ability of the prediction - ability of the previous byte UTF8-prefix on the next byte. The - prediction ability is calculated as Shannon entropy. Here we need - Shannon entropy instead of 'BitsEntropy' since the prefix will be - encoded with the remaining 6 bits of the following byte, and - BitsEntropy will assume that symbol to be stored alone using Huffman - coding. */ -static void ChooseContextMap(int quality, - uint32_t* bigram_histo, - size_t* num_literal_contexts, - const uint32_t** literal_context_map) { - static const uint32_t kStaticContextMapContinuation[64] =3D { - 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - static const uint32_t kStaticContextMapSimpleUTF8[64] =3D { - 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - - uint32_t monogram_histo[3] =3D { 0 }; - uint32_t two_prefix_histo[6] =3D { 0 }; - size_t total; - size_t i; - size_t dummy; - double entropy[4]; - for (i =3D 0; i < 9; ++i) { - monogram_histo[i % 3] +=3D bigram_histo[i]; - two_prefix_histo[i % 6] +=3D bigram_histo[i]; - } - entropy[1] =3D ShannonEntropy(monogram_histo, 3, &dummy); - entropy[2] =3D (ShannonEntropy(two_prefix_histo, 3, &dummy) + - ShannonEntropy(two_prefix_histo + 3, 3, &dummy)); - entropy[3] =3D 0; - for (i =3D 0; i < 3; ++i) { - entropy[3] +=3D ShannonEntropy(bigram_histo + 3 * i, 3, &dummy); - } - - total =3D monogram_histo[0] + monogram_histo[1] + monogram_histo[2]; - BROTLI_DCHECK(total !=3D 0); - entropy[0] =3D 1.0 / (double)total; - entropy[1] *=3D entropy[0]; - entropy[2] *=3D entropy[0]; - entropy[3] *=3D entropy[0]; - - if (quality < MIN_QUALITY_FOR_HQ_CONTEXT_MODELING) { - /* 3 context models is a bit slower, don't use it at lower qualities.= */ - entropy[3] =3D entropy[1] * 10; - } - /* If expected savings by symbol are less than 0.2 bits, skip the - context modeling -- in exchange for faster decoding speed. */ - if (entropy[1] - entropy[2] < 0.2 && - entropy[1] - entropy[3] < 0.2) { - *num_literal_contexts =3D 1; - } else if (entropy[2] - entropy[3] < 0.02) { - *num_literal_contexts =3D 2; - *literal_context_map =3D kStaticContextMapSimpleUTF8; - } else { - *num_literal_contexts =3D 3; - *literal_context_map =3D kStaticContextMapContinuation; - } -} - -/* Decide if we want to use a more complex static context map containing = 13 - context values, based on the entropy reduction of histograms over the - first 5 bits of literals. */ -static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input, - size_t start_pos, size_t length, size_t mask, int quality, size_t siz= e_hint, - size_t* num_literal_contexts, const uint32_t** literal_context_map) { - static const uint32_t kStaticContextMapComplexUTF8[64] =3D { - 11, 11, 12, 12, /* 0 special */ - 0, 0, 0, 0, /* 4 lf */ - 1, 1, 9, 9, /* 8 space */ - 2, 2, 2, 2, /* !, first after space/lf and after something else. */ - 1, 1, 1, 1, /* " */ - 8, 3, 3, 3, /* % */ - 1, 1, 1, 1, /* ({[ */ - 2, 2, 2, 2, /* }]) */ - 8, 4, 4, 4, /* :; */ - 8, 7, 4, 4, /* . */ - 8, 0, 0, 0, /* > */ - 3, 3, 3, 3, /* [0..9] */ - 5, 5, 10, 5, /* [A-Z] */ - 5, 5, 10, 5, - 6, 6, 6, 6, /* [a-z] */ - 6, 6, 6, 6, - }; - BROTLI_UNUSED(quality); - /* Try the more complex static context map only for long data. */ - if (size_hint < (1 << 20)) { - return BROTLI_FALSE; - } else { - const size_t end_pos =3D start_pos + length; - /* To make entropy calculations faster and to fit on the stack, we co= llect - histograms over the 5 most significant bits of literals. One histo= gram - without context and 13 additional histograms for each context valu= e. */ - uint32_t combined_histo[32] =3D { 0 }; - uint32_t context_histo[13][32] =3D { { 0 } }; - uint32_t total =3D 0; - double entropy[3]; - size_t dummy; - size_t i; - ContextLut utf8_lut =3D BROTLI_CONTEXT_LUT(CONTEXT_UTF8); - for (; start_pos + 64 <=3D end_pos; start_pos +=3D 4096) { - const size_t stride_end_pos =3D start_pos + 64; - uint8_t prev2 =3D input[start_pos & mask]; - uint8_t prev1 =3D input[(start_pos + 1) & mask]; - size_t pos; - /* To make the analysis of the data faster we only examine 64 byte = long - strides at every 4kB intervals. */ - for (pos =3D start_pos + 2; pos < stride_end_pos; ++pos) { - const uint8_t literal =3D input[pos & mask]; - const uint8_t context =3D (uint8_t)kStaticContextMapComplexUTF8[ - BROTLI_CONTEXT(prev1, prev2, utf8_lut)]; - ++total; - ++combined_histo[literal >> 3]; - ++context_histo[context][literal >> 3]; - prev2 =3D prev1; - prev1 =3D literal; - } - } - entropy[1] =3D ShannonEntropy(combined_histo, 32, &dummy); - entropy[2] =3D 0; - for (i =3D 0; i < 13; ++i) { - entropy[2] +=3D ShannonEntropy(&context_histo[i][0], 32, &dummy); - } - entropy[0] =3D 1.0 / (double)total; - entropy[1] *=3D entropy[0]; - entropy[2] *=3D entropy[0]; - /* The triggering heuristics below were tuned by compressing the indi= vidual - files of the silesia corpus. If we skip this kind of context model= ing - for not very well compressible input (i.e. entropy using context m= odeling - is 60% of maximal entropy) or if expected savings by symbol are le= ss - than 0.2 bits, then in every case when it triggers, the final comp= ression - ratio is improved. Note however that this heuristics might be too = strict - for some cases and could be tuned further. */ - if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) { - return BROTLI_FALSE; - } else { - *num_literal_contexts =3D 13; - *literal_context_map =3D kStaticContextMapComplexUTF8; - return BROTLI_TRUE; - } - } -} - -static void DecideOverLiteralContextModeling(const uint8_t* input, - size_t start_pos, size_t length, size_t mask, int quality, size_t siz= e_hint, - size_t* num_literal_contexts, const uint32_t** literal_context_map) { - if (quality < MIN_QUALITY_FOR_CONTEXT_MODELING || length < 64) { - return; - } else if (ShouldUseComplexStaticContextMap( - input, start_pos, length, mask, quality, size_hint, - num_literal_contexts, literal_context_map)) { - /* Context map was already set, nothing else to do. */ - } else { - /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysi= s of - UTF8 data faster we only examine 64 byte long strides at every 4kB - intervals. */ - const size_t end_pos =3D start_pos + length; - uint32_t bigram_prefix_histo[9] =3D { 0 }; - for (; start_pos + 64 <=3D end_pos; start_pos +=3D 4096) { - static const int lut[4] =3D { 0, 0, 1, 2 }; - const size_t stride_end_pos =3D start_pos + 64; - int prev =3D lut[input[start_pos & mask] >> 6] * 3; - size_t pos; - for (pos =3D start_pos + 1; pos < stride_end_pos; ++pos) { - const uint8_t literal =3D input[pos & mask]; - ++bigram_prefix_histo[prev + lut[literal >> 6]]; - prev =3D lut[literal >> 6] * 3; - } - } - ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contex= ts, - literal_context_map); - } -} - -static BROTLI_BOOL ShouldCompress( - const uint8_t* data, const size_t mask, const uint64_t last_flush_pos= , - const size_t bytes, const size_t num_literals, const size_t num_comma= nds) { - if (num_commands < (bytes >> 8) + 2) { - if (num_literals > 0.99 * (double)bytes) { - uint32_t literal_histo[256] =3D { 0 }; - static const uint32_t kSampleRate =3D 13; - static const double kMinEntropy =3D 7.92; - const double bit_cost_threshold =3D - (double)bytes * kMinEntropy / kSampleRate; - size_t t =3D (bytes + kSampleRate - 1) / kSampleRate; - uint32_t pos =3D (uint32_t)last_flush_pos; - size_t i; - for (i =3D 0; i < t; i++) { - ++literal_histo[data[pos & mask]]; - pos +=3D kSampleRate; - } - if (BitsEntropy(literal_histo, 256) > bit_cost_threshold) { - return BROTLI_FALSE; - } - } - } - return BROTLI_TRUE; -} - -/* Chooses the literal context mode for a metablock */ -static ContextType ChooseContextMode(const BrotliEncoderParams* params, - const uint8_t* data, const size_t pos, const size_t mask, - const size_t length) { - /* We only do the computation for the option of something else than - CONTEXT_UTF8 for the highest qualities */ - if (params->quality >=3D MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING && - !BrotliIsMostlyUTF8(data, pos, mask, length, kMinUTF8Ratio)) { - return CONTEXT_SIGNED; - } - return CONTEXT_UTF8; -} - -static void WriteMetaBlockInternal(MemoryManager* m, - const uint8_t* data, - const size_t mask, - const uint64_t last_flush_pos, - const size_t bytes, - const BROTLI_BOOL is_last, - ContextType literal_context_mode, - const BrotliEncoderParams* params, - const uint8_t prev_byte, - const uint8_t prev_byte2, - const size_t num_literals, - const size_t num_commands, - Command* commands, - const int* saved_dist_cache, - int* dist_cache, - size_t* storage_ix, - uint8_t* storage) { - const uint32_t wrapped_last_flush_pos =3D WrapPosition(last_flush_pos); - uint16_t last_bytes; - uint8_t last_bytes_bits; - ContextLut literal_context_lut =3D BROTLI_CONTEXT_LUT(literal_context_m= ode); - BrotliEncoderParams block_params =3D *params; - - if (bytes =3D=3D 0) { - /* Write the ISLAST and ISEMPTY bits. */ - BrotliWriteBits(2, 3, storage_ix, storage); - *storage_ix =3D (*storage_ix + 7u) & ~7u; - return; - } - - if (!ShouldCompress(data, mask, last_flush_pos, bytes, - num_literals, num_commands)) { - /* Restore the distance cache, as its last update by - CreateBackwardReferences is now unused. */ - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - BrotliStoreUncompressedMetaBlock(is_last, data, - wrapped_last_flush_pos, mask, bytes, - storage_ix, storage); - return; - } - - BROTLI_DCHECK(*storage_ix <=3D 14); - last_bytes =3D (uint16_t)((storage[1] << 8) | storage[0]); - last_bytes_bits =3D (uint8_t)(*storage_ix); - if (params->quality <=3D MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) { - BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos, - bytes, mask, is_last, params, - commands, num_commands, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) { - BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos, - bytes, mask, is_last, params, - commands, num_commands, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - } else { - MetaBlockSplit mb; - InitMetaBlockSplit(&mb); - if (params->quality < MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) { - size_t num_literal_contexts =3D 1; - const uint32_t* literal_context_map =3D NULL; - if (!params->disable_literal_context_modeling) { - DecideOverLiteralContextModeling( - data, wrapped_last_flush_pos, bytes, mask, params->quality, - params->size_hint, &num_literal_contexts, - &literal_context_map); - } - BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask, - prev_byte, prev_byte2, literal_context_lut, num_literal_context= s, - literal_context_map, commands, num_commands, &mb); - if (BROTLI_IS_OOM(m)) return; - } else { - BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask, &block_= params, - prev_byte, prev_byte2, - commands, num_commands, - literal_context_mode, - &mb); - if (BROTLI_IS_OOM(m)) return; - } - if (params->quality >=3D MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS) { - /* The number of distance symbols effectively used for distance - histograms. It might be less than distance alphabet size - for "Large Window Brotli" (32-bit). */ - uint32_t num_effective_dist_codes =3D block_params.dist.alphabet_si= ze; - if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOL= S) { - num_effective_dist_codes =3D BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOL= S; - } - BrotliOptimizeHistograms(num_effective_dist_codes, &mb); - } - BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask, - prev_byte, prev_byte2, - is_last, - &block_params, - literal_context_mode, - commands, num_commands, - &mb, - storage_ix, storage); - if (BROTLI_IS_OOM(m)) return; - DestroyMetaBlockSplit(m, &mb); - } - if (bytes + 4 < (*storage_ix >> 3)) { - /* Restore the distance cache and last byte. */ - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - storage[0] =3D (uint8_t)last_bytes; - storage[1] =3D (uint8_t)(last_bytes >> 8); - *storage_ix =3D last_bytes_bits; - BrotliStoreUncompressedMetaBlock(is_last, data, - wrapped_last_flush_pos, mask, - bytes, storage_ix, storage); - } -} - -static void ChooseDistanceParams(BrotliEncoderParams* params) { - uint32_t distance_postfix_bits =3D 0; - uint32_t num_direct_distance_codes =3D 0; - - if (params->quality >=3D MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS) { - uint32_t ndirect_msb; - if (params->mode =3D=3D BROTLI_MODE_FONT) { - distance_postfix_bits =3D 1; - num_direct_distance_codes =3D 12; - } else { - distance_postfix_bits =3D params->dist.distance_postfix_bits; - num_direct_distance_codes =3D params->dist.num_direct_distance_code= s; - } - ndirect_msb =3D (num_direct_distance_codes >> distance_postfix_bits) = & 0x0F; - if (distance_postfix_bits > BROTLI_MAX_NPOSTFIX || - num_direct_distance_codes > BROTLI_MAX_NDIRECT || - (ndirect_msb << distance_postfix_bits) !=3D num_direct_distance_c= odes) { - distance_postfix_bits =3D 0; - num_direct_distance_codes =3D 0; - } - } - - BrotliInitDistanceParams( - params, distance_postfix_bits, num_direct_distance_codes); -} - -static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) { - if (BROTLI_IS_OOM(&s->memory_manager_)) return BROTLI_FALSE; - if (s->is_initialized_) return BROTLI_TRUE; - - SanitizeParams(&s->params); - s->params.lgblock =3D ComputeLgBlock(&s->params); - ChooseDistanceParams(&s->params); - - s->remaining_metadata_bytes_ =3D BROTLI_UINT32_MAX; - - RingBufferSetup(&s->params, &s->ringbuffer_); - - /* Initialize last byte with stream header. */ - { - int lgwin =3D s->params.lgwin; - if (s->params.quality =3D=3D FAST_ONE_PASS_COMPRESSION_QUALITY || - s->params.quality =3D=3D FAST_TWO_PASS_COMPRESSION_QUALITY) { - lgwin =3D BROTLI_MAX(int, lgwin, 18); - } - EncodeWindowBits(lgwin, s->params.large_window, - &s->last_bytes_, &s->last_bytes_bits_); - } - - if (s->params.quality =3D=3D FAST_ONE_PASS_COMPRESSION_QUALITY) { - InitCommandPrefixCodes(s->cmd_depths_, s->cmd_bits_, - s->cmd_code_, &s->cmd_code_numbits_); - } - - s->is_initialized_ =3D BROTLI_TRUE; - return BROTLI_TRUE; -} - -static void BrotliEncoderInitParams(BrotliEncoderParams* params) { - params->mode =3D BROTLI_DEFAULT_MODE; - params->large_window =3D BROTLI_FALSE; - params->quality =3D BROTLI_DEFAULT_QUALITY; - params->lgwin =3D BROTLI_DEFAULT_WINDOW; - params->lgblock =3D 0; - params->size_hint =3D 0; - params->disable_literal_context_modeling =3D BROTLI_FALSE; - BrotliInitEncoderDictionary(¶ms->dictionary); - params->dist.distance_postfix_bits =3D 0; - params->dist.num_direct_distance_codes =3D 0; - params->dist.alphabet_size =3D - BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS); - params->dist.max_distance =3D BROTLI_MAX_DISTANCE; -} - -static void BrotliEncoderInitState(BrotliEncoderState* s) { - BrotliEncoderInitParams(&s->params); - s->input_pos_ =3D 0; - s->num_commands_ =3D 0; - s->num_literals_ =3D 0; - s->last_insert_len_ =3D 0; - s->last_flush_pos_ =3D 0; - s->last_processed_pos_ =3D 0; - s->prev_byte_ =3D 0; - s->prev_byte2_ =3D 0; - s->storage_size_ =3D 0; - s->storage_ =3D 0; - s->hasher_ =3D NULL; - s->large_table_ =3D NULL; - s->large_table_size_ =3D 0; - s->cmd_code_numbits_ =3D 0; - s->command_buf_ =3D NULL; - s->literal_buf_ =3D NULL; - s->next_out_ =3D NULL; - s->available_out_ =3D 0; - s->total_out_ =3D 0; - s->stream_state_ =3D BROTLI_STREAM_PROCESSING; - s->is_last_block_emitted_ =3D BROTLI_FALSE; - s->is_initialized_ =3D BROTLI_FALSE; - - RingBufferInit(&s->ringbuffer_); - - s->commands_ =3D 0; - s->cmd_alloc_size_ =3D 0; - - /* Initialize distance cache. */ - s->dist_cache_[0] =3D 4; - s->dist_cache_[1] =3D 11; - s->dist_cache_[2] =3D 15; - s->dist_cache_[3] =3D 16; - /* Save the state of the distance cache in case we need to restore it f= or - emitting an uncompressed block. */ - memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache= _)); -} - -BrotliEncoderState* BrotliEncoderCreateInstance( - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaqu= e) { - BrotliEncoderState* state =3D 0; - if (!alloc_func && !free_func) { - state =3D (BrotliEncoderState*)malloc(sizeof(BrotliEncoderState)); - } else if (alloc_func && free_func) { - state =3D (BrotliEncoderState*)alloc_func(opaque, sizeof(BrotliEncode= rState)); - } - if (state =3D=3D 0) { - /* BROTLI_DUMP(); */ - return 0; - } - BrotliInitMemoryManager( - &state->memory_manager_, alloc_func, free_func, opaque); - BrotliEncoderInitState(state); - return state; -} - -static void BrotliEncoderCleanupState(BrotliEncoderState* s) { - MemoryManager* m =3D &s->memory_manager_; - if (BROTLI_IS_OOM(m)) { - BrotliWipeOutMemoryManager(m); - return; - } - BROTLI_FREE(m, s->storage_); - BROTLI_FREE(m, s->commands_); - RingBufferFree(m, &s->ringbuffer_); - DestroyHasher(m, &s->hasher_); - BROTLI_FREE(m, s->large_table_); - BROTLI_FREE(m, s->command_buf_); - BROTLI_FREE(m, s->literal_buf_); -} - -/* Deinitializes and frees BrotliEncoderState instance. */ -void BrotliEncoderDestroyInstance(BrotliEncoderState* state) { - if (!state) { - return; - } else { - MemoryManager* m =3D &state->memory_manager_; - brotli_free_func free_func =3D m->free_func; - void* opaque =3D m->opaque; - BrotliEncoderCleanupState(state); - free_func(opaque, state); - } -} - -/* - Copies the given input data to the internal ring buffer of the compres= sor. - No processing of the data occurs at this time and this function can be - called multiple times before calling WriteBrotliData() to process the - accumulated input. At most input_block_size() bytes of input data can = be - copied to the ring buffer, otherwise the next WriteBrotliData() will f= ail. - */ -static void CopyInputToRingBuffer(BrotliEncoderState* s, - const size_t input_size, - const uint8_t* input_buffer) { - RingBuffer* ringbuffer_ =3D &s->ringbuffer_; - MemoryManager* m =3D &s->memory_manager_; - RingBufferWrite(m, input_buffer, input_size, ringbuffer_); - if (BROTLI_IS_OOM(m)) return; - s->input_pos_ +=3D input_size; - - /* TL;DR: If needed, initialize 7 more bytes in the ring buffer to make= the - hashing not depend on uninitialized data. This makes compression - deterministic and it prevents uninitialized memory warnings in Valgr= ind. - Even without erasing, the output would be valid (but nondeterministi= c). - - Background information: The compressor stores short (at most 8 bytes= ) - substrings of the input already read in a hash table, and detects - repetitions by looking up such substrings in the hash table. If it - can find a substring, it checks whether the substring is really ther= e - in the ring buffer (or it's just a hash collision). Should the hash - table become corrupt, this check makes sure that the output is - still valid, albeit the compression ratio would be bad. - - The compressor populates the hash table from the ring buffer as it's - reading new bytes from the input. However, at the last few indexes o= f - the ring buffer, there are not enough bytes to build full-length - substrings from. Since the hash table always contains full-length - substrings, we erase with dummy zeros here to make sure that those - substrings will contain zeros at the end instead of uninitialized - data. - - Please note that erasing is not necessary (because the - memory region is already initialized since he ring buffer - has a `tail' that holds a copy of the beginning,) so we - skip erasing if we have already gone around at least once in - the ring buffer. - - Only clear during the first round of ring-buffer writes. On - subsequent rounds data in the ring-buffer would be affected. */ - if (ringbuffer_->pos_ <=3D ringbuffer_->mask_) { - /* This is the first time when the ring buffer is being written. - We clear 7 bytes just after the bytes that have been copied from - the input buffer. - - The ring-buffer has a "tail" that holds a copy of the beginning, - but only once the ring buffer has been fully written once, i.e., - pos <=3D mask. For the first time, we need to write values - in this tail (where index may be larger than mask), so that - we have exactly defined behavior and don't read uninitialized - memory. Due to performance reasons, hashing reads data using a - LOAD64, which can go 7 bytes beyond the bytes written in the - ring-buffer. */ - memset(ringbuffer_->buffer_ + ringbuffer_->pos_, 0, 7); - } -} - -/* Marks all input as processed. - Returns true if position wrapping occurs. */ -static BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) { - uint32_t wrapped_last_processed_pos =3D WrapPosition(s->last_processed_= pos_); - uint32_t wrapped_input_pos =3D WrapPosition(s->input_pos_); - s->last_processed_pos_ =3D s->input_pos_; - return TO_BROTLI_BOOL(wrapped_input_pos < wrapped_last_processed_pos); -} - -static void ExtendLastCommand(BrotliEncoderState* s, uint32_t* bytes, - uint32_t* wrapped_last_processed_pos) { - Command* last_command =3D &s->commands_[s->num_commands_ - 1]; - const uint8_t* data =3D s->ringbuffer_.buffer_; - const uint32_t mask =3D s->ringbuffer_.mask_; - uint64_t max_backward_distance =3D - (((uint64_t)1) << s->params.lgwin) - BROTLI_WINDOW_GAP; - uint64_t last_copy_len =3D last_command->copy_len_ & 0x1FFFFFF; - uint64_t last_processed_pos =3D s->last_processed_pos_ - last_copy_len; - uint64_t max_distance =3D last_processed_pos < max_backward_distance ? - last_processed_pos : max_backward_distance; - uint64_t cmd_dist =3D (uint64_t)s->dist_cache_[0]; - uint32_t distance_code =3D CommandRestoreDistanceCode(last_command, - &s->params.dist); - if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES || - distance_code - (BROTLI_NUM_DISTANCE_SHORT_CODES - 1) =3D=3D cmd_di= st) { - if (cmd_dist <=3D max_distance) { - while (*bytes !=3D 0 && data[*wrapped_last_processed_pos & mask] = =3D=3D - data[(*wrapped_last_processed_pos - cmd_dist) & mask]) { - last_command->copy_len_++; - (*bytes)--; - (*wrapped_last_processed_pos)++; - } - } - /* The copy length is at most the metablock size, and thus expressibl= e. */ - GetLengthCode(last_command->insert_len_, - (size_t)((int)(last_command->copy_len_ & 0x1FFFFFF) + - (int)(last_command->copy_len_ >> 25)), - TO_BROTLI_BOOL((last_command->dist_prefix_ & 0x3FF) =3D= = =3D 0), - &last_command->cmd_prefix_); - } -} - -/* - Processes the accumulated input data and sets |*out_size| to the lengt= h of - the new output meta-block, or to zero if no new output meta-block has = been - created (in this case the processed input data is buffered internally)= . - If |*out_size| is positive, |*output| points to the start of the outpu= t - data. If |is_last| or |force_flush| is BROTLI_TRUE, an output meta-blo= ck is - always created. However, until |is_last| is BROTLI_TRUE encoder may re= tain up - to 7 bits of the last byte of output. To force encoder to dump the rem= aining - bits use WriteMetadata() to append an empty meta-data block. - Returns BROTLI_FALSE if the size of the input data is larger than - input_block_size(). - */ -static BROTLI_BOOL EncodeData( - BrotliEncoderState* s, const BROTLI_BOOL is_last, - const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) { - const uint64_t delta =3D UnprocessedInputSize(s); - uint32_t bytes =3D (uint32_t)delta; - uint32_t wrapped_last_processed_pos =3D WrapPosition(s->last_processed_= pos_); - uint8_t* data; - uint32_t mask; - MemoryManager* m =3D &s->memory_manager_; - ContextType literal_context_mode; - - data =3D s->ringbuffer_.buffer_; - mask =3D s->ringbuffer_.mask_; - - /* Adding more blocks after "last" block is forbidden. */ - if (s->is_last_block_emitted_) return BROTLI_FALSE; - if (is_last) s->is_last_block_emitted_ =3D BROTLI_TRUE; - - if (delta > InputBlockSize(s)) { - return BROTLI_FALSE; - } - if (s->params.quality =3D=3D FAST_TWO_PASS_COMPRESSION_QUALITY && - !s->command_buf_) { - s->command_buf_ =3D - BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize); - s->literal_buf_ =3D - BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - } - - if (s->params.quality =3D=3D FAST_ONE_PASS_COMPRESSION_QUALITY || - s->params.quality =3D=3D FAST_TWO_PASS_COMPRESSION_QUALITY) { - uint8_t* storage; - size_t storage_ix =3D s->last_bytes_bits_; - size_t table_size; - int* table; - - if (delta =3D=3D 0 && !is_last) { - /* We have no new input data and we don't have to finish the stream= , so - nothing to do. */ - *out_size =3D 0; - return BROTLI_TRUE; - } - storage =3D GetBrotliStorage(s, 2 * bytes + 503); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - storage[0] =3D (uint8_t)s->last_bytes_; - storage[1] =3D (uint8_t)(s->last_bytes_ >> 8); - table =3D GetHashTable(s, s->params.quality, bytes, &table_size); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - if (s->params.quality =3D=3D FAST_ONE_PASS_COMPRESSION_QUALITY) { - BrotliCompressFragmentFast( - m, &data[wrapped_last_processed_pos & mask], - bytes, is_last, - table, table_size, - s->cmd_depths_, s->cmd_bits_, - &s->cmd_code_numbits_, s->cmd_code_, - &storage_ix, storage); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - } else { - BrotliCompressFragmentTwoPass( - m, &data[wrapped_last_processed_pos & mask], - bytes, is_last, - s->command_buf_, s->literal_buf_, - table, table_size, - &storage_ix, storage); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - } - s->last_bytes_ =3D (uint16_t)(storage[storage_ix >> 3]); - s->last_bytes_bits_ =3D storage_ix & 7u; - UpdateLastProcessedPos(s); - *output =3D &storage[0]; - *out_size =3D storage_ix >> 3; - return BROTLI_TRUE; - } - - { - /* Theoretical max number of commands is 1 per 2 bytes. */ - size_t newsize =3D s->num_commands_ + bytes / 2 + 1; - if (newsize > s->cmd_alloc_size_) { - Command* new_commands; - /* Reserve a bit more memory to allow merging with a next block - without reallocation: that would impact speed. */ - newsize +=3D (bytes / 4) + 16; - s->cmd_alloc_size_ =3D newsize; - new_commands =3D BROTLI_ALLOC(m, Command, newsize); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - if (s->commands_) { - memcpy(new_commands, s->commands_, sizeof(Command) * s->num_comma= nds_); - BROTLI_FREE(m, s->commands_); - } - s->commands_ =3D new_commands; - } - } - - InitOrStitchToPreviousBlock(m, &s->hasher_, data, mask, &s->params, - wrapped_last_processed_pos, bytes, is_last); - - literal_context_mode =3D ChooseContextMode( - &s->params, data, WrapPosition(s->last_flush_pos_), - mask, (size_t)(s->input_pos_ - s->last_flush_pos_)); - - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - - if (s->num_commands_ && s->last_insert_len_ =3D=3D 0) { - ExtendLastCommand(s, &bytes, &wrapped_last_processed_pos); - } - - if (s->params.quality =3D=3D ZOPFLIFICATION_QUALITY) { - BROTLI_DCHECK(s->params.hasher.type =3D=3D 10); - BrotliCreateZopfliBackwardReferences(m, - bytes, wrapped_last_processed_pos, - data, mask, &s->params, s->hasher_, s->dist_cache_, - &s->last_insert_len_, &s->commands_[s->num_commands_], - &s->num_commands_, &s->num_literals_); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - } else if (s->params.quality =3D=3D HQ_ZOPFLIFICATION_QUALITY) { - BROTLI_DCHECK(s->params.hasher.type =3D=3D 10); - BrotliCreateHqZopfliBackwardReferences(m, - bytes, wrapped_last_processed_pos, - data, mask, &s->params, s->hasher_, s->dist_cache_, - &s->last_insert_len_, &s->commands_[s->num_commands_], - &s->num_commands_, &s->num_literals_); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - } else { - BrotliCreateBackwardReferences( - bytes, wrapped_last_processed_pos, - data, mask, &s->params, s->hasher_, s->dist_cache_, - &s->last_insert_len_, &s->commands_[s->num_commands_], - &s->num_commands_, &s->num_literals_); - } - - { - const size_t max_length =3D MaxMetablockSize(&s->params); - const size_t max_literals =3D max_length / 8; - const size_t max_commands =3D max_length / 8; - const size_t processed_bytes =3D (size_t)(s->input_pos_ - s->last_flu= sh_pos_); - /* If maximal possible additional block doesn't fit metablock, flush = now. */ - /* TODO: Postpone decision until next block arrives? */ - const BROTLI_BOOL next_input_fits_metablock =3D TO_BROTLI_BOOL( - processed_bytes + InputBlockSize(s) <=3D max_length); - /* If block splitting is not used, then flush as soon as there is som= e - amount of commands / literals produced. */ - const BROTLI_BOOL should_flush =3D TO_BROTLI_BOOL( - s->params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT && - s->num_literals_ + s->num_commands_ >=3D MAX_NUM_DELAYED_SYMBOLS)= ; - if (!is_last && !force_flush && !should_flush && - next_input_fits_metablock && - s->num_literals_ < max_literals && - s->num_commands_ < max_commands) { - /* Merge with next input block. Everything will happen later. */ - if (UpdateLastProcessedPos(s)) { - HasherReset(s->hasher_); - } - *out_size =3D 0; - return BROTLI_TRUE; - } - } - - /* Create the last insert-only command. */ - if (s->last_insert_len_ > 0) { - InitInsertCommand(&s->commands_[s->num_commands_++], s->last_insert_l= en_); - s->num_literals_ +=3D s->last_insert_len_; - s->last_insert_len_ =3D 0; - } - - if (!is_last && s->input_pos_ =3D=3D s->last_flush_pos_) { - /* We have no new input data and we don't have to finish the stream, = so - nothing to do. */ - *out_size =3D 0; - return BROTLI_TRUE; - } - BROTLI_DCHECK(s->input_pos_ >=3D s->last_flush_pos_); - BROTLI_DCHECK(s->input_pos_ > s->last_flush_pos_ || is_last); - BROTLI_DCHECK(s->input_pos_ - s->last_flush_pos_ <=3D 1u << 24); - { - const uint32_t metablock_size =3D - (uint32_t)(s->input_pos_ - s->last_flush_pos_); - uint8_t* storage =3D GetBrotliStorage(s, 2 * metablock_size + 503); - size_t storage_ix =3D s->last_bytes_bits_; - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - storage[0] =3D (uint8_t)s->last_bytes_; - storage[1] =3D (uint8_t)(s->last_bytes_ >> 8); - WriteMetaBlockInternal( - m, data, mask, s->last_flush_pos_, metablock_size, is_last, - literal_context_mode, &s->params, s->prev_byte_, s->prev_byte2_, - s->num_literals_, s->num_commands_, s->commands_, s->saved_dist_c= ache_, - s->dist_cache_, &storage_ix, storage); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - s->last_bytes_ =3D (uint16_t)(storage[storage_ix >> 3]); - s->last_bytes_bits_ =3D storage_ix & 7u; - s->last_flush_pos_ =3D s->input_pos_; - if (UpdateLastProcessedPos(s)) { - HasherReset(s->hasher_); - } - if (s->last_flush_pos_ > 0) { - s->prev_byte_ =3D data[((uint32_t)s->last_flush_pos_ - 1) & mask]; - } - if (s->last_flush_pos_ > 1) { - s->prev_byte2_ =3D data[(uint32_t)(s->last_flush_pos_ - 2) & mask]; - } - s->num_commands_ =3D 0; - s->num_literals_ =3D 0; - /* Save the state of the distance cache in case we need to restore it= for - emitting an uncompressed block. */ - memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cac= he_)); - *output =3D &storage[0]; - *out_size =3D storage_ix >> 3; - return BROTLI_TRUE; - } -} - -/* Dumps remaining output bits and metadata header to |header|. - Returns number of produced bytes. - REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long= . - REQUIRED: |block_size| <=3D (1 << 24). */ -static size_t WriteMetadataHeader( - BrotliEncoderState* s, const size_t block_size, uint8_t* header) { - size_t storage_ix; - storage_ix =3D s->last_bytes_bits_; - header[0] =3D (uint8_t)s->last_bytes_; - header[1] =3D (uint8_t)(s->last_bytes_ >> 8); - s->last_bytes_ =3D 0; - s->last_bytes_bits_ =3D 0; - - BrotliWriteBits(1, 0, &storage_ix, header); - BrotliWriteBits(2, 3, &storage_ix, header); - BrotliWriteBits(1, 0, &storage_ix, header); - if (block_size =3D=3D 0) { - BrotliWriteBits(2, 0, &storage_ix, header); - } else { - uint32_t nbits =3D (block_size =3D=3D 1) ? 0 : - (Log2FloorNonZero((uint32_t)block_size - 1) + 1); - uint32_t nbytes =3D (nbits + 7) / 8; - BrotliWriteBits(2, nbytes, &storage_ix, header); - BrotliWriteBits(8 * nbytes, block_size - 1, &storage_ix, header); - } - return (storage_ix + 7u) >> 3; -} - -static BROTLI_BOOL BrotliCompressBufferQuality10( - int lgwin, size_t input_size, const uint8_t* input_buffer, - size_t* encoded_size, uint8_t* encoded_buffer) { - MemoryManager memory_manager; - MemoryManager* m =3D &memory_manager; - - const size_t mask =3D BROTLI_SIZE_MAX >> 1; - const size_t max_backward_limit =3D BROTLI_MAX_BACKWARD_LIMIT(lgwin); - int dist_cache[4] =3D { 4, 11, 15, 16 }; - int saved_dist_cache[4] =3D { 4, 11, 15, 16 }; - BROTLI_BOOL ok =3D BROTLI_TRUE; - const size_t max_out_size =3D *encoded_size; - size_t total_out_size =3D 0; - uint16_t last_bytes; - uint8_t last_bytes_bits; - HasherHandle hasher =3D NULL; - - const size_t hasher_eff_size =3D - BROTLI_MIN(size_t, input_size, max_backward_limit + BROTLI_WINDOW_G= AP); - - BrotliEncoderParams params; - - const int lgmetablock =3D BROTLI_MIN(int, 24, lgwin + 1); - size_t max_block_size; - const size_t max_metablock_size =3D (size_t)1 << lgmetablock; - const size_t max_literals_per_metablock =3D max_metablock_size / 8; - const size_t max_commands_per_metablock =3D max_metablock_size / 8; - size_t metablock_start =3D 0; - uint8_t prev_byte =3D 0; - uint8_t prev_byte2 =3D 0; - - BrotliEncoderInitParams(¶ms); - params.quality =3D 10; - params.lgwin =3D lgwin; - if (lgwin > BROTLI_MAX_WINDOW_BITS) { - params.large_window =3D BROTLI_TRUE; - } - SanitizeParams(¶ms); - params.lgblock =3D ComputeLgBlock(¶ms); - ChooseDistanceParams(¶ms); - max_block_size =3D (size_t)1 << params.lgblock; - - BrotliInitMemoryManager(m, 0, 0, 0); - - BROTLI_DCHECK(input_size <=3D mask + 1); - EncodeWindowBits(lgwin, params.large_window, &last_bytes, &last_bytes_b= its); - InitOrStitchToPreviousBlock(m, &hasher, input_buffer, mask, ¶ms, - 0, hasher_eff_size, BROTLI_TRUE); - if (BROTLI_IS_OOM(m)) goto oom; - - while (ok && metablock_start < input_size) { - const size_t metablock_end =3D - BROTLI_MIN(size_t, input_size, metablock_start + max_metablock_si= ze); - const size_t expected_num_commands =3D - (metablock_end - metablock_start) / 12 + 16; - Command* commands =3D 0; - size_t num_commands =3D 0; - size_t last_insert_len =3D 0; - size_t num_literals =3D 0; - size_t metablock_size =3D 0; - size_t cmd_alloc_size =3D 0; - BROTLI_BOOL is_last; - uint8_t* storage; - size_t storage_ix; - - ContextType literal_context_mode =3D ChooseContextMode(¶ms, - input_buffer, metablock_start, mask, metablock_end - metablock_st= art); - - size_t block_start; - for (block_start =3D metablock_start; block_start < metablock_end; ) = { - size_t block_size =3D - BROTLI_MIN(size_t, metablock_end - block_start, max_block_size)= ; - ZopfliNode* nodes =3D BROTLI_ALLOC(m, ZopfliNode, block_size + 1); - size_t path_size; - size_t new_cmd_alloc_size; - if (BROTLI_IS_OOM(m)) goto oom; - BrotliInitZopfliNodes(nodes, block_size + 1); - StitchToPreviousBlockH10(hasher, block_size, block_start, - input_buffer, mask); - path_size =3D BrotliZopfliComputeShortestPath(m, - block_size, block_start, input_buffer, mask, ¶ms, - max_backward_limit, dist_cache, hasher, nodes); - if (BROTLI_IS_OOM(m)) goto oom; - /* We allocate a command buffer in the first iteration of this loop= that - will be likely big enough for the whole metablock, so that for m= ost - inputs we will not have to reallocate in later iterations. We do= the - allocation here and not before the loop, because if the input is= small, - this will be allocated after the Zopfli cost model is freed, so = this - will not increase peak memory usage. - TODO: If the first allocation is too small, increase command - buffer size exponentially. */ - new_cmd_alloc_size =3D BROTLI_MAX(size_t, expected_num_commands, - num_commands + path_size + 1); - if (cmd_alloc_size !=3D new_cmd_alloc_size) { - Command* new_commands =3D BROTLI_ALLOC(m, Command, new_cmd_alloc_= size); - if (BROTLI_IS_OOM(m)) goto oom; - cmd_alloc_size =3D new_cmd_alloc_size; - if (commands) { - memcpy(new_commands, commands, sizeof(Command) * num_commands); - BROTLI_FREE(m, commands); - } - commands =3D new_commands; - } - BrotliZopfliCreateCommands(block_size, block_start, max_backward_li= mit, - &nodes[0], dist_cache, &last_insert_len, - ¶ms, &commands[num_commands], - &num_literals); - num_commands +=3D path_size; - block_start +=3D block_size; - metablock_size +=3D block_size; - BROTLI_FREE(m, nodes); - if (num_literals > max_literals_per_metablock || - num_commands > max_commands_per_metablock) { - break; - } - } - - if (last_insert_len > 0) { - InitInsertCommand(&commands[num_commands++], last_insert_len); - num_literals +=3D last_insert_len; - } - - is_last =3D TO_BROTLI_BOOL(metablock_start + metablock_size =3D=3D in= put_size); - storage =3D NULL; - storage_ix =3D last_bytes_bits; - - if (metablock_size =3D=3D 0) { - /* Write the ISLAST and ISEMPTY bits. */ - storage =3D BROTLI_ALLOC(m, uint8_t, 16); - if (BROTLI_IS_OOM(m)) goto oom; - storage[0] =3D (uint8_t)last_bytes; - storage[1] =3D (uint8_t)(last_bytes >> 8); - BrotliWriteBits(2, 3, &storage_ix, storage); - storage_ix =3D (storage_ix + 7u) & ~7u; - } else if (!ShouldCompress(input_buffer, mask, metablock_start, - metablock_size, num_literals, num_commands= )) { - /* Restore the distance cache, as its last update by - CreateBackwardReferences is now unused. */ - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - storage =3D BROTLI_ALLOC(m, uint8_t, metablock_size + 16); - if (BROTLI_IS_OOM(m)) goto oom; - storage[0] =3D (uint8_t)last_bytes; - storage[1] =3D (uint8_t)(last_bytes >> 8); - BrotliStoreUncompressedMetaBlock(is_last, input_buffer, - metablock_start, mask, metablock_s= ize, - &storage_ix, storage); - } else { - MetaBlockSplit mb; - BrotliEncoderParams block_params =3D params; - InitMetaBlockSplit(&mb); - BrotliBuildMetaBlock(m, input_buffer, metablock_start, mask, - &block_params, - prev_byte, prev_byte2, - commands, num_commands, - literal_context_mode, - &mb); - if (BROTLI_IS_OOM(m)) goto oom; - { - /* The number of distance symbols effectively used for distance - histograms. It might be less than distance alphabet size - for "Large Window Brotli" (32-bit). */ - uint32_t num_effective_dist_codes =3D block_params.dist.alphabet_= size; - if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMB= OLS) { - num_effective_dist_codes =3D BROTLI_NUM_HISTOGRAM_DISTANCE_SYMB= OLS; - } - BrotliOptimizeHistograms(num_effective_dist_codes, &mb); - } - storage =3D BROTLI_ALLOC(m, uint8_t, 2 * metablock_size + 503); - if (BROTLI_IS_OOM(m)) goto oom; - storage[0] =3D (uint8_t)last_bytes; - storage[1] =3D (uint8_t)(last_bytes >> 8); - BrotliStoreMetaBlock(m, input_buffer, metablock_start, metablock_si= ze, - mask, prev_byte, prev_byte2, - is_last, - &block_params, - literal_context_mode, - commands, num_commands, - &mb, - &storage_ix, storage); - if (BROTLI_IS_OOM(m)) goto oom; - if (metablock_size + 4 < (storage_ix >> 3)) { - /* Restore the distance cache and last byte. */ - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); - storage[0] =3D (uint8_t)last_bytes; - storage[1] =3D (uint8_t)(last_bytes >> 8); - storage_ix =3D last_bytes_bits; - BrotliStoreUncompressedMetaBlock(is_last, input_buffer, - metablock_start, mask, - metablock_size, &storage_ix, sto= rage); - } - DestroyMetaBlockSplit(m, &mb); - } - last_bytes =3D (uint16_t)(storage[storage_ix >> 3]); - last_bytes_bits =3D storage_ix & 7u; - metablock_start +=3D metablock_size; - if (metablock_start < input_size) { - prev_byte =3D input_buffer[metablock_start - 1]; - prev_byte2 =3D input_buffer[metablock_start - 2]; - } - /* Save the state of the distance cache in case we need to restore it= for - emitting an uncompressed block. */ - memcpy(saved_dist_cache, dist_cache, 4 * sizeof(dist_cache[0])); - - { - const size_t out_size =3D storage_ix >> 3; - total_out_size +=3D out_size; - if (total_out_size <=3D max_out_size) { - memcpy(encoded_buffer, storage, out_size); - encoded_buffer +=3D out_size; - } else { - ok =3D BROTLI_FALSE; - } - } - BROTLI_FREE(m, storage); - BROTLI_FREE(m, commands); - } - - *encoded_size =3D total_out_size; - DestroyHasher(m, &hasher); - return ok; - -oom: - BrotliWipeOutMemoryManager(m); - return BROTLI_FALSE; -} - -size_t BrotliEncoderMaxCompressedSize(size_t input_size) { - /* [window bits / empty metadata] + N * [uncompressed] + [last empty] *= / - size_t num_large_blocks =3D input_size >> 14; - size_t overhead =3D 2 + (4 * num_large_blocks) + 3 + 1; - size_t result =3D input_size + overhead; - if (input_size =3D=3D 0) return 2; - return (result < input_size) ? 0 : result; -} - -/* Wraps data to uncompressed brotli stream with minimal window size. - |output| should point at region with at least BrotliEncoderMaxCompress= edSize - addressable bytes. - Returns the length of stream. */ -static size_t MakeUncompressedStream( - const uint8_t* input, size_t input_size, uint8_t* output) { - size_t size =3D input_size; - size_t result =3D 0; - size_t offset =3D 0; - if (input_size =3D=3D 0) { - output[0] =3D 6; - return 1; - } - output[result++] =3D 0x21; /* window bits =3D 10, is_last =3D false */ - output[result++] =3D 0x03; /* empty metadata, padding */ - while (size > 0) { - uint32_t nibbles =3D 0; - uint32_t chunk_size; - uint32_t bits; - chunk_size =3D (size > (1u << 24)) ? (1u << 24) : (uint32_t)size; - if (chunk_size > (1u << 16)) nibbles =3D (chunk_size > (1u << 20)) ? = 2 : 1; - bits =3D - (nibbles << 1) | ((chunk_size - 1) << 3) | (1u << (19 + 4 * nibbl= es)); - output[result++] =3D (uint8_t)bits; - output[result++] =3D (uint8_t)(bits >> 8); - output[result++] =3D (uint8_t)(bits >> 16); - if (nibbles =3D=3D 2) output[result++] =3D (uint8_t)(bits >> 24); - memcpy(&output[result], &input[offset], chunk_size); - result +=3D chunk_size; - offset +=3D chunk_size; - size -=3D chunk_size; - } - output[result++] =3D 3; - return result; -} - -BROTLI_BOOL BrotliEncoderCompress( - int quality, int lgwin, BrotliEncoderMode mode, size_t input_size, - const uint8_t* input_buffer, size_t* encoded_size, - uint8_t* encoded_buffer) { - BrotliEncoderState* s; - size_t out_size =3D *encoded_size; - const uint8_t* input_start =3D input_buffer; - uint8_t* output_start =3D encoded_buffer; - size_t max_out_size =3D BrotliEncoderMaxCompressedSize(input_size); - if (out_size =3D=3D 0) { - /* Output buffer needs at least one byte. */ - return BROTLI_FALSE; - } - if (input_size =3D=3D 0) { - /* Handle the special case of empty input. */ - *encoded_size =3D 1; - *encoded_buffer =3D 6; - return BROTLI_TRUE; - } - if (quality =3D=3D 10) { - /* TODO: Implement this direct path for all quality levels. */ - const int lg_win =3D BROTLI_MIN(int, BROTLI_LARGE_MAX_WINDOW_BITS, - BROTLI_MAX(int, 16, lgwin)); - int ok =3D BrotliCompressBufferQuality10(lg_win, input_size, input_bu= ffer, - encoded_size, encoded_buffer); - if (!ok || (max_out_size && *encoded_size > max_out_size)) { - goto fallback; - } - return BROTLI_TRUE; - } - - s =3D BrotliEncoderCreateInstance(0, 0, 0); - if (!s) { - return BROTLI_FALSE; - } else { - size_t available_in =3D input_size; - const uint8_t* next_in =3D input_buffer; - size_t available_out =3D *encoded_size; - uint8_t* next_out =3D encoded_buffer; - size_t total_out =3D 0; - BROTLI_BOOL result =3D BROTLI_FALSE; - BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)quality)= ; - BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin); - BrotliEncoderSetParameter(s, BROTLI_PARAM_MODE, (uint32_t)mode); - BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, (uint32_t)input_= size); - if (lgwin > BROTLI_MAX_WINDOW_BITS) { - BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, BROTLI_TRUE= ); - } - result =3D BrotliEncoderCompressStream(s, BROTLI_OPERATION_FINISH, - &available_in, &next_in, &available_out, &next_out, &total_out); - if (!BrotliEncoderIsFinished(s)) result =3D 0; - *encoded_size =3D total_out; - BrotliEncoderDestroyInstance(s); - if (!result || (max_out_size && *encoded_size > max_out_size)) { - goto fallback; - } - return BROTLI_TRUE; - } -fallback: - *encoded_size =3D 0; - if (!max_out_size) return BROTLI_FALSE; - if (out_size >=3D max_out_size) { - *encoded_size =3D - MakeUncompressedStream(input_start, input_size, output_start); - return BROTLI_TRUE; - } - return BROTLI_FALSE; -} - -static void InjectBytePaddingBlock(BrotliEncoderState* s) { - uint32_t seal =3D s->last_bytes_; - size_t seal_bits =3D s->last_bytes_bits_; - uint8_t* destination; - s->last_bytes_ =3D 0; - s->last_bytes_bits_ =3D 0; - /* is_last =3D 0, data_nibbles =3D 11, reserved =3D 0, meta_nibbles =3D= 00 */ - seal |=3D 0x6u << seal_bits; - seal_bits +=3D 6; - /* If we have already created storage, then append to it. - Storage is valid until next block is being compressed. */ - if (s->next_out_) { - destination =3D s->next_out_ + s->available_out_; - } else { - destination =3D s->tiny_buf_.u8; - s->next_out_ =3D destination; - } - destination[0] =3D (uint8_t)seal; - if (seal_bits > 8) destination[1] =3D (uint8_t)(seal >> 8); - if (seal_bits > 16) destination[2] =3D (uint8_t)(seal >> 16); - s->available_out_ +=3D (seal_bits + 7) >> 3; -} - -/* Injects padding bits or pushes compressed data to output. - Returns false if nothing is done. */ -static BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s, - size_t* available_out, uint8_t** next_out, size_t* total_out) { - if (s->stream_state_ =3D=3D BROTLI_STREAM_FLUSH_REQUESTED && - s->last_bytes_bits_ !=3D 0) { - InjectBytePaddingBlock(s); - return BROTLI_TRUE; - } - - if (s->available_out_ !=3D 0 && *available_out !=3D 0) { - size_t copy_output_size =3D - BROTLI_MIN(size_t, s->available_out_, *available_out); - memcpy(*next_out, s->next_out_, copy_output_size); - *next_out +=3D copy_output_size; - *available_out -=3D copy_output_size; - s->next_out_ +=3D copy_output_size; - s->available_out_ -=3D copy_output_size; - s->total_out_ +=3D copy_output_size; - if (total_out) *total_out =3D s->total_out_; - return BROTLI_TRUE; - } - - return BROTLI_FALSE; -} - -static void CheckFlushComplete(BrotliEncoderState* s) { - if (s->stream_state_ =3D=3D BROTLI_STREAM_FLUSH_REQUESTED && - s->available_out_ =3D=3D 0) { - s->stream_state_ =3D BROTLI_STREAM_PROCESSING; - s->next_out_ =3D 0; - } -} - -static BROTLI_BOOL BrotliEncoderCompressStreamFast( - BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_i= n, - const uint8_t** next_in, size_t* available_out, uint8_t** next_out, - size_t* total_out) { - const size_t block_size_limit =3D (size_t)1 << s->params.lgwin; - const size_t buf_size =3D BROTLI_MIN(size_t, kCompressFragmentTwoPassBl= ockSize, - BROTLI_MIN(size_t, *available_in, block_size_limit)); - uint32_t* tmp_command_buf =3D NULL; - uint32_t* command_buf =3D NULL; - uint8_t* tmp_literal_buf =3D NULL; - uint8_t* literal_buf =3D NULL; - MemoryManager* m =3D &s->memory_manager_; - if (s->params.quality !=3D FAST_ONE_PASS_COMPRESSION_QUALITY && - s->params.quality !=3D FAST_TWO_PASS_COMPRESSION_QUALITY) { - return BROTLI_FALSE; - } - if (s->params.quality =3D=3D FAST_TWO_PASS_COMPRESSION_QUALITY) { - if (!s->command_buf_ && buf_size =3D=3D kCompressFragmentTwoPassBlock= Size) { - s->command_buf_ =3D - BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize); - s->literal_buf_ =3D - BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - } - if (s->command_buf_) { - command_buf =3D s->command_buf_; - literal_buf =3D s->literal_buf_; - } else { - tmp_command_buf =3D BROTLI_ALLOC(m, uint32_t, buf_size); - tmp_literal_buf =3D BROTLI_ALLOC(m, uint8_t, buf_size); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - command_buf =3D tmp_command_buf; - literal_buf =3D tmp_literal_buf; - } - } - - while (BROTLI_TRUE) { - if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) { - continue; - } - - /* Compress block only when internal output buffer is empty, stream i= s not - finished, there is no pending flush request, and there is either - additional input or pending operation. */ - if (s->available_out_ =3D=3D 0 && - s->stream_state_ =3D=3D BROTLI_STREAM_PROCESSING && - (*available_in !=3D 0 || op !=3D BROTLI_OPERATION_PROCESS)) { - size_t block_size =3D BROTLI_MIN(size_t, block_size_limit, *availab= le_in); - BROTLI_BOOL is_last =3D - (*available_in =3D=3D block_size) && (op =3D=3D BROTLI_OPERATIO= N_FINISH); - BROTLI_BOOL force_flush =3D - (*available_in =3D=3D block_size) && (op =3D=3D BROTLI_OPERATIO= N_FLUSH); - size_t max_out_size =3D 2 * block_size + 503; - BROTLI_BOOL inplace =3D BROTLI_TRUE; - uint8_t* storage =3D NULL; - size_t storage_ix =3D s->last_bytes_bits_; - size_t table_size; - int* table; - - if (force_flush && block_size =3D=3D 0) { - s->stream_state_ =3D BROTLI_STREAM_FLUSH_REQUESTED; - continue; - } - if (max_out_size <=3D *available_out) { - storage =3D *next_out; - } else { - inplace =3D BROTLI_FALSE; - storage =3D GetBrotliStorage(s, max_out_size); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - } - storage[0] =3D (uint8_t)s->last_bytes_; - storage[1] =3D (uint8_t)(s->last_bytes_ >> 8); - table =3D GetHashTable(s, s->params.quality, block_size, &table_siz= e); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - - if (s->params.quality =3D=3D FAST_ONE_PASS_COMPRESSION_QUALITY) { - BrotliCompressFragmentFast(m, *next_in, block_size, is_last, tabl= e, - table_size, s->cmd_depths_, s->cmd_bits_, &s->cmd_code_numbit= s_, - s->cmd_code_, &storage_ix, storage); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - } else { - BrotliCompressFragmentTwoPass(m, *next_in, block_size, is_last, - command_buf, literal_buf, table, table_size, - &storage_ix, storage); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; - } - *next_in +=3D block_size; - *available_in -=3D block_size; - if (inplace) { - size_t out_bytes =3D storage_ix >> 3; - BROTLI_DCHECK(out_bytes <=3D *available_out); - BROTLI_DCHECK((storage_ix & 7) =3D=3D 0 || out_bytes < *available= _out); - *next_out +=3D out_bytes; - *available_out -=3D out_bytes; - s->total_out_ +=3D out_bytes; - if (total_out) *total_out =3D s->total_out_; - } else { - size_t out_bytes =3D storage_ix >> 3; - s->next_out_ =3D storage; - s->available_out_ =3D out_bytes; - } - s->last_bytes_ =3D (uint16_t)(storage[storage_ix >> 3]); - s->last_bytes_bits_ =3D storage_ix & 7u; - - if (force_flush) s->stream_state_ =3D BROTLI_STREAM_FLUSH_REQUESTED= ; - if (is_last) s->stream_state_ =3D BROTLI_STREAM_FINISHED; - continue; - } - break; - } - BROTLI_FREE(m, tmp_command_buf); - BROTLI_FREE(m, tmp_literal_buf); - CheckFlushComplete(s); - return BROTLI_TRUE; -} - -static BROTLI_BOOL ProcessMetadata( - BrotliEncoderState* s, size_t* available_in, const uint8_t** next_in, - size_t* available_out, uint8_t** next_out, size_t* total_out) { - if (*available_in > (1u << 24)) return BROTLI_FALSE; - /* Switch to metadata block workflow, if required. */ - if (s->stream_state_ =3D=3D BROTLI_STREAM_PROCESSING) { - s->remaining_metadata_bytes_ =3D (uint32_t)*available_in; - s->stream_state_ =3D BROTLI_STREAM_METADATA_HEAD; - } - if (s->stream_state_ !=3D BROTLI_STREAM_METADATA_HEAD && - s->stream_state_ !=3D BROTLI_STREAM_METADATA_BODY) { - return BROTLI_FALSE; - } - - while (BROTLI_TRUE) { - if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) { - continue; - } - if (s->available_out_ !=3D 0) break; - - if (s->input_pos_ !=3D s->last_flush_pos_) { - BROTLI_BOOL result =3D EncodeData(s, BROTLI_FALSE, BROTLI_TRUE, - &s->available_out_, &s->next_out_); - if (!result) return BROTLI_FALSE; - continue; - } - - if (s->stream_state_ =3D=3D BROTLI_STREAM_METADATA_HEAD) { - s->next_out_ =3D s->tiny_buf_.u8; - s->available_out_ =3D - WriteMetadataHeader(s, s->remaining_metadata_bytes_, s->next_ou= t_); - s->stream_state_ =3D BROTLI_STREAM_METADATA_BODY; - continue; - } else { - /* Exit workflow only when there is no more input and no more outpu= t. - Otherwise client may continue producing empty metadata blocks. *= / - if (s->remaining_metadata_bytes_ =3D=3D 0) { - s->remaining_metadata_bytes_ =3D BROTLI_UINT32_MAX; - s->stream_state_ =3D BROTLI_STREAM_PROCESSING; - break; - } - if (*available_out) { - /* Directly copy input to output. */ - uint32_t copy =3D (uint32_t)BROTLI_MIN( - size_t, s->remaining_metadata_bytes_, *available_out); - memcpy(*next_out, *next_in, copy); - *next_in +=3D copy; - *available_in -=3D copy; - s->remaining_metadata_bytes_ -=3D copy; - *next_out +=3D copy; - *available_out -=3D copy; - } else { - /* This guarantees progress in "TakeOutput" workflow. */ - uint32_t copy =3D BROTLI_MIN(uint32_t, s->remaining_metadata_byte= s_, 16); - s->next_out_ =3D s->tiny_buf_.u8; - memcpy(s->next_out_, *next_in, copy); - *next_in +=3D copy; - *available_in -=3D copy; - s->remaining_metadata_bytes_ -=3D copy; - s->available_out_ =3D copy; - } - continue; - } - } - - return BROTLI_TRUE; -} - -static void UpdateSizeHint(BrotliEncoderState* s, size_t available_in) { - if (s->params.size_hint =3D=3D 0) { - uint64_t delta =3D UnprocessedInputSize(s); - uint64_t tail =3D available_in; - uint32_t limit =3D 1u << 30; - uint32_t total; - if ((delta >=3D limit) || (tail >=3D limit) || ((delta + tail) >=3D l= imit)) { - total =3D limit; - } else { - total =3D (uint32_t)(delta + tail); - } - s->params.size_hint =3D total; - } -} - -BROTLI_BOOL BrotliEncoderCompressStream( - BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_i= n, - const uint8_t** next_in, size_t* available_out,uint8_t** next_out, - size_t* total_out) { - if (!EnsureInitialized(s)) return BROTLI_FALSE; - - /* Unfinished metadata block; check requirements. */ - if (s->remaining_metadata_bytes_ !=3D BROTLI_UINT32_MAX) { - if (*available_in !=3D s->remaining_metadata_bytes_) return BROTLI_FA= LSE; - if (op !=3D BROTLI_OPERATION_EMIT_METADATA) return BROTLI_FALSE; - } - - if (op =3D=3D BROTLI_OPERATION_EMIT_METADATA) { - UpdateSizeHint(s, 0); /* First data metablock might be emitted here.= */ - return ProcessMetadata( - s, available_in, next_in, available_out, next_out, total_out); - } - - if (s->stream_state_ =3D=3D BROTLI_STREAM_METADATA_HEAD || - s->stream_state_ =3D=3D BROTLI_STREAM_METADATA_BODY) { - return BROTLI_FALSE; - } - - if (s->stream_state_ !=3D BROTLI_STREAM_PROCESSING && *available_in != =3D 0) { - return BROTLI_FALSE; - } - if (s->params.quality =3D=3D FAST_ONE_PASS_COMPRESSION_QUALITY || - s->params.quality =3D=3D FAST_TWO_PASS_COMPRESSION_QUALITY) { - return BrotliEncoderCompressStreamFast(s, op, available_in, next_in, - available_out, next_out, total_out); - } - while (BROTLI_TRUE) { - size_t remaining_block_size =3D RemainingInputBlockSize(s); - - if (remaining_block_size !=3D 0 && *available_in !=3D 0) { - size_t copy_input_size =3D - BROTLI_MIN(size_t, remaining_block_size, *available_in); - CopyInputToRingBuffer(s, copy_input_size, *next_in); - *next_in +=3D copy_input_size; - *available_in -=3D copy_input_size; - continue; - } - - if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) { - continue; - } - - /* Compress data only when internal output buffer is empty, stream is= not - finished and there is no pending flush request. */ - if (s->available_out_ =3D=3D 0 && - s->stream_state_ =3D=3D BROTLI_STREAM_PROCESSING) { - if (remaining_block_size =3D=3D 0 || op !=3D BROTLI_OPERATION_PROCE= SS) { - BROTLI_BOOL is_last =3D TO_BROTLI_BOOL( - (*available_in =3D=3D 0) && op =3D=3D BROTLI_OPERATION_FINISH= ); - BROTLI_BOOL force_flush =3D TO_BROTLI_BOOL( - (*available_in =3D=3D 0) && op =3D=3D BROTLI_OPERATION_FLUSH)= ; - BROTLI_BOOL result; - UpdateSizeHint(s, *available_in); - result =3D EncodeData(s, is_last, force_flush, - &s->available_out_, &s->next_out_); - if (!result) return BROTLI_FALSE; - if (force_flush) s->stream_state_ =3D BROTLI_STREAM_FLUSH_REQUEST= ED; - if (is_last) s->stream_state_ =3D BROTLI_STREAM_FINISHED; - continue; - } - } - break; - } - CheckFlushComplete(s); - return BROTLI_TRUE; -} - -BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) { - return TO_BROTLI_BOOL(s->stream_state_ =3D=3D BROTLI_STREAM_FINISHED && - !BrotliEncoderHasMoreOutput(s)); -} - -BROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) { - return TO_BROTLI_BOOL(s->available_out_ !=3D 0); -} - -const uint8_t* BrotliEncoderTakeOutput(BrotliEncoderState* s, size_t* siz= e) { - size_t consumed_size =3D s->available_out_; - uint8_t* result =3D s->next_out_; - if (*size) { - consumed_size =3D BROTLI_MIN(size_t, *size, s->available_out_); - } - if (consumed_size) { - s->next_out_ +=3D consumed_size; - s->available_out_ -=3D consumed_size; - s->total_out_ +=3D consumed_size; - CheckFlushComplete(s); - *size =3D consumed_size; - } else { - *size =3D 0; - result =3D 0; - } - return result; -} - -uint32_t BrotliEncoderVersion(void) { - return BROTLI_VERSION; -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c b/BaseTo= ols/Source/C/BrotliCompress/enc/encoder_dict.c deleted file mode 100644 index 956d50c0b578..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright 2017 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -#include "./encoder_dict.h" - -#include "../common/dictionary.h" -#include "../common/transform.h" -#include "./dictionary_hash.h" -#include "./hash.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict) { - dict->words =3D BrotliGetDictionary(); - - dict->hash_table =3D kStaticDictionaryHash; - dict->buckets =3D kStaticDictionaryBuckets; - dict->dict_words =3D kStaticDictionaryWords; - - dict->cutoffTransformsCount =3D kCutoffTransformsCount; - dict->cutoffTransforms =3D kCutoffTransforms; - -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c b/Base= Tools/Source/C/BrotliCompress/enc/entropy_encode.c deleted file mode 100644 index e3f0d2edaabe..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c +++ /dev/null @@ -1,501 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Entropy encoding (Huffman) utilities. */ - -#include "./entropy_encode.h" - -#include /* memset */ - -#include "../common/constants.h" -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -BROTLI_BOOL BrotliSetDepth( - int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) { - int stack[16]; - int level =3D 0; - int p =3D p0; - BROTLI_DCHECK(max_depth <=3D 15); - stack[0] =3D -1; - while (BROTLI_TRUE) { - if (pool[p].index_left_ >=3D 0) { - level++; - if (level > max_depth) return BROTLI_FALSE; - stack[level] =3D pool[p].index_right_or_value_; - p =3D pool[p].index_left_; - continue; - } else { - depth[pool[p].index_right_or_value_] =3D (uint8_t)level; - } - while (level >=3D 0 && stack[level] =3D=3D -1) level--; - if (level < 0) return BROTLI_TRUE; - p =3D stack[level]; - stack[level] =3D -1; - } -} - -/* Sort the root nodes, least popular first. */ -static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree( - const HuffmanTree* v0, const HuffmanTree* v1) { - if (v0->total_count_ !=3D v1->total_count_) { - return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_); - } - return TO_BROTLI_BOOL(v0->index_right_or_value_ > v1->index_right_or_va= lue_); -} - -/* This function will create a Huffman tree. - - The catch here is that the tree cannot be arbitrarily deep. - Brotli specifies a maximum depth of 15 bits for "code trees" - and 7 bits for "code length code trees." - - count_limit is the value that is to be faked as the minimum value - and this minimum value is raised until the tree matches the - maximum length requirement. - - This algorithm is not of excellent performance for very long data bloc= ks, - especially when population counts are longer than 2**tree_limit, but - we are not planning to use this with extremely long blocks. - - See http://en.wikipedia.org/wiki/Huffman_coding */ -void BrotliCreateHuffmanTree(const uint32_t* data, - const size_t length, - const int tree_limit, - HuffmanTree* tree, - uint8_t* depth) { - uint32_t count_limit; - HuffmanTree sentinel; - InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1); - /* For block sizes below 64 kB, we never need to do a second iteration - of this loop. Probably all of our block sizes will be smaller than - that, so this loop is mostly of academic interest. If we actually - would need this, we would be better off with the Katajainen algorith= m. */ - for (count_limit =3D 1; ; count_limit *=3D 2) { - size_t n =3D 0; - size_t i; - size_t j; - size_t k; - for (i =3D length; i !=3D 0;) { - --i; - if (data[i]) { - const uint32_t count =3D BROTLI_MAX(uint32_t, data[i], count_limi= t); - InitHuffmanTree(&tree[n++], count, -1, (int16_t)i); - } - } - - if (n =3D=3D 1) { - depth[tree[0].index_right_or_value_] =3D 1; /* Only one element. *= / - break; - } - - SortHuffmanTreeItems(tree, n, SortHuffmanTree); - - /* The nodes are: - [0, n): the sorted leaf nodes that we start with. - [n]: we add a sentinel here. - [n + 1, 2n): new parent nodes are added here, starting from - (n+1). These are naturally in ascending order. - [2n]: we add a sentinel at the end as well. - There will be (2n+1) elements at the end. */ - tree[n] =3D sentinel; - tree[n + 1] =3D sentinel; - - i =3D 0; /* Points to the next leaf node. */ - j =3D n + 1; /* Points to the next non-leaf node. */ - for (k =3D n - 1; k !=3D 0; --k) { - size_t left, right; - if (tree[i].total_count_ <=3D tree[j].total_count_) { - left =3D i; - ++i; - } else { - left =3D j; - ++j; - } - if (tree[i].total_count_ <=3D tree[j].total_count_) { - right =3D i; - ++i; - } else { - right =3D j; - ++j; - } - - { - /* The sentinel node becomes the parent node. */ - size_t j_end =3D 2 * n - k; - tree[j_end].total_count_ =3D - tree[left].total_count_ + tree[right].total_count_; - tree[j_end].index_left_ =3D (int16_t)left; - tree[j_end].index_right_or_value_ =3D (int16_t)right; - - /* Add back the last sentinel node. */ - tree[j_end + 1] =3D sentinel; - } - } - if (BrotliSetDepth((int)(2 * n - 1), &tree[0], depth, tree_limit)) { - /* We need to pack the Huffman tree in tree_limit bits. If this was= not - successful, add fake entities to the lowest values and retry. */ - break; - } - } -} - -static void Reverse(uint8_t* v, size_t start, size_t end) { - --end; - while (start < end) { - uint8_t tmp =3D v[start]; - v[start] =3D v[end]; - v[end] =3D tmp; - ++start; - --end; - } -} - -static void BrotliWriteHuffmanTreeRepetitions( - const uint8_t previous_value, - const uint8_t value, - size_t repetitions, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data) { - BROTLI_DCHECK(repetitions > 0); - if (previous_value !=3D value) { - tree[*tree_size] =3D value; - extra_bits_data[*tree_size] =3D 0; - ++(*tree_size); - --repetitions; - } - if (repetitions =3D=3D 7) { - tree[*tree_size] =3D value; - extra_bits_data[*tree_size] =3D 0; - ++(*tree_size); - --repetitions; - } - if (repetitions < 3) { - size_t i; - for (i =3D 0; i < repetitions; ++i) { - tree[*tree_size] =3D value; - extra_bits_data[*tree_size] =3D 0; - ++(*tree_size); - } - } else { - size_t start =3D *tree_size; - repetitions -=3D 3; - while (BROTLI_TRUE) { - tree[*tree_size] =3D BROTLI_REPEAT_PREVIOUS_CODE_LENGTH; - extra_bits_data[*tree_size] =3D repetitions & 0x3; - ++(*tree_size); - repetitions >>=3D 2; - if (repetitions =3D=3D 0) { - break; - } - --repetitions; - } - Reverse(tree, start, *tree_size); - Reverse(extra_bits_data, start, *tree_size); - } -} - -static void BrotliWriteHuffmanTreeRepetitionsZeros( - size_t repetitions, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data) { - if (repetitions =3D=3D 11) { - tree[*tree_size] =3D 0; - extra_bits_data[*tree_size] =3D 0; - ++(*tree_size); - --repetitions; - } - if (repetitions < 3) { - size_t i; - for (i =3D 0; i < repetitions; ++i) { - tree[*tree_size] =3D 0; - extra_bits_data[*tree_size] =3D 0; - ++(*tree_size); - } - } else { - size_t start =3D *tree_size; - repetitions -=3D 3; - while (BROTLI_TRUE) { - tree[*tree_size] =3D BROTLI_REPEAT_ZERO_CODE_LENGTH; - extra_bits_data[*tree_size] =3D repetitions & 0x7; - ++(*tree_size); - repetitions >>=3D 3; - if (repetitions =3D=3D 0) { - break; - } - --repetitions; - } - Reverse(tree, start, *tree_size); - Reverse(extra_bits_data, start, *tree_size); - } -} - -void BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts, - uint8_t* good_for_rle) { - size_t nonzero_count =3D 0; - size_t stride; - size_t limit; - size_t sum; - const size_t streak_limit =3D 1240; - /* Let's make the Huffman code more compatible with RLE encoding. */ - size_t i; - for (i =3D 0; i < length; i++) { - if (counts[i]) { - ++nonzero_count; - } - } - if (nonzero_count < 16) { - return; - } - while (length !=3D 0 && counts[length - 1] =3D=3D 0) { - --length; - } - if (length =3D=3D 0) { - return; /* All zeros. */ - } - /* Now counts[0..length - 1] does not have trailing zeros. */ - { - size_t nonzeros =3D 0; - uint32_t smallest_nonzero =3D 1 << 30; - for (i =3D 0; i < length; ++i) { - if (counts[i] !=3D 0) { - ++nonzeros; - if (smallest_nonzero > counts[i]) { - smallest_nonzero =3D counts[i]; - } - } - } - if (nonzeros < 5) { - /* Small histogram will model it well. */ - return; - } - if (smallest_nonzero < 4) { - size_t zeros =3D length - nonzeros; - if (zeros < 6) { - for (i =3D 1; i < length - 1; ++i) { - if (counts[i - 1] !=3D 0 && counts[i] =3D=3D 0 && counts[i + 1]= !=3D 0) { - counts[i] =3D 1; - } - } - } - } - if (nonzeros < 28) { - return; - } - } - /* 2) Let's mark all population counts that already can be encoded - with an RLE code. */ - memset(good_for_rle, 0, length); - { - /* Let's not spoil any of the existing good RLE codes. - Mark any seq of 0's that is longer as 5 as a good_for_rle. - Mark any seq of non-0's that is longer as 7 as a good_for_rle. */ - uint32_t symbol =3D counts[0]; - size_t step =3D 0; - for (i =3D 0; i <=3D length; ++i) { - if (i =3D=3D length || counts[i] !=3D symbol) { - if ((symbol =3D=3D 0 && step >=3D 5) || - (symbol !=3D 0 && step >=3D 7)) { - size_t k; - for (k =3D 0; k < step; ++k) { - good_for_rle[i - k - 1] =3D 1; - } - } - step =3D 1; - if (i !=3D length) { - symbol =3D counts[i]; - } - } else { - ++step; - } - } - } - /* 3) Let's replace those population counts that lead to more RLE codes= . - Math here is in 24.8 fixed point representation. */ - stride =3D 0; - limit =3D 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420; - sum =3D 0; - for (i =3D 0; i <=3D length; ++i) { - if (i =3D=3D length || good_for_rle[i] || - (i !=3D 0 && good_for_rle[i - 1]) || - (256 * counts[i] - limit + streak_limit) >=3D 2 * streak_limit) { - if (stride >=3D 4 || (stride >=3D 3 && sum =3D=3D 0)) { - size_t k; - /* The stride must end, collapse what we have, if we have enough = (4). */ - size_t count =3D (sum + stride / 2) / stride; - if (count =3D=3D 0) { - count =3D 1; - } - if (sum =3D=3D 0) { - /* Don't make an all zeros stride to be upgraded to ones. */ - count =3D 0; - } - for (k =3D 0; k < stride; ++k) { - /* We don't want to change value at counts[i], - that is already belonging to the next stride. Thus - 1. */ - counts[i - k - 1] =3D (uint32_t)count; - } - } - stride =3D 0; - sum =3D 0; - if (i < length - 2) { - /* All interesting strides have a count of at least 4, */ - /* at least when non-zeros. */ - limit =3D 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 += 420; - } else if (i < length) { - limit =3D 256 * counts[i]; - } else { - limit =3D 0; - } - } - ++stride; - if (i !=3D length) { - sum +=3D counts[i]; - if (stride >=3D 4) { - limit =3D (256 * sum + stride / 2) / stride; - } - if (stride =3D=3D 4) { - limit +=3D 120; - } - } - } -} - -static void DecideOverRleUse(const uint8_t* depth, const size_t length, - BROTLI_BOOL* use_rle_for_non_zero, - BROTLI_BOOL* use_rle_for_zero) { - size_t total_reps_zero =3D 0; - size_t total_reps_non_zero =3D 0; - size_t count_reps_zero =3D 1; - size_t count_reps_non_zero =3D 1; - size_t i; - for (i =3D 0; i < length;) { - const uint8_t value =3D depth[i]; - size_t reps =3D 1; - size_t k; - for (k =3D i + 1; k < length && depth[k] =3D=3D value; ++k) { - ++reps; - } - if (reps >=3D 3 && value =3D=3D 0) { - total_reps_zero +=3D reps; - ++count_reps_zero; - } - if (reps >=3D 4 && value !=3D 0) { - total_reps_non_zero +=3D reps; - ++count_reps_non_zero; - } - i +=3D reps; - } - *use_rle_for_non_zero =3D - TO_BROTLI_BOOL(total_reps_non_zero > count_reps_non_zero * 2); - *use_rle_for_zero =3D TO_BROTLI_BOOL(total_reps_zero > count_reps_zero = * 2); -} - -void BrotliWriteHuffmanTree(const uint8_t* depth, - size_t length, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data) { - uint8_t previous_value =3D BROTLI_INITIAL_REPEATED_CODE_LENGTH; - size_t i; - BROTLI_BOOL use_rle_for_non_zero =3D BROTLI_FALSE; - BROTLI_BOOL use_rle_for_zero =3D BROTLI_FALSE; - - /* Throw away trailing zeros. */ - size_t new_length =3D length; - for (i =3D 0; i < length; ++i) { - if (depth[length - i - 1] =3D=3D 0) { - --new_length; - } else { - break; - } - } - - /* First gather statistics on if it is a good idea to do RLE. */ - if (length > 50) { - /* Find RLE coding for longer codes. - Shorter codes seem not to benefit from RLE. */ - DecideOverRleUse(depth, new_length, - &use_rle_for_non_zero, &use_rle_for_zero); - } - - /* Actual RLE coding. */ - for (i =3D 0; i < new_length;) { - const uint8_t value =3D depth[i]; - size_t reps =3D 1; - if ((value !=3D 0 && use_rle_for_non_zero) || - (value =3D=3D 0 && use_rle_for_zero)) { - size_t k; - for (k =3D i + 1; k < new_length && depth[k] =3D=3D value; ++k) { - ++reps; - } - } - if (value =3D=3D 0) { - BrotliWriteHuffmanTreeRepetitionsZeros( - reps, tree_size, tree, extra_bits_data); - } else { - BrotliWriteHuffmanTreeRepetitions(previous_value, - value, reps, tree_size, - tree, extra_bits_data); - previous_value =3D value; - } - i +=3D reps; - } -} - -static uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) { - static const size_t kLut[16] =3D { /* Pre-reversed 4-bit values. */ - 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E, - 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F - }; - size_t retval =3D kLut[bits & 0x0F]; - size_t i; - for (i =3D 4; i < num_bits; i +=3D 4) { - retval <<=3D 4; - bits =3D (uint16_t)(bits >> 4); - retval |=3D kLut[bits & 0x0F]; - } - retval >>=3D ((0 - num_bits) & 0x03); - return (uint16_t)retval; -} - -/* 0..15 are values for bits */ -#define MAX_HUFFMAN_BITS 16 - -void BrotliConvertBitDepthsToSymbols(const uint8_t* depth, - size_t len, - uint16_t* bits) { - /* In Brotli, all bit depths are [1..15] - 0 bit depth means that the symbol does not exist. */ - uint16_t bl_count[MAX_HUFFMAN_BITS] =3D { 0 }; - uint16_t next_code[MAX_HUFFMAN_BITS]; - size_t i; - int code =3D 0; - for (i =3D 0; i < len; ++i) { - ++bl_count[depth[i]]; - } - bl_count[0] =3D 0; - next_code[0] =3D 0; - for (i =3D 1; i < MAX_HUFFMAN_BITS; ++i) { - code =3D (code + bl_count[i - 1]) << 1; - next_code[i] =3D (uint16_t)code; - } - for (i =3D 0; i < len; ++i) { - if (depth[i]) { - bits[i] =3D BrotliReverseBits(depth[i], next_code[depth[i]]++); - } - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram.c b/BaseTools= /Source/C/BrotliCompress/enc/histogram.c deleted file mode 100644 index d3bfa3a79a80..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/histogram.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Build per-context histograms of literals, commands and distance codes.= */ - -#include "./histogram.h" - -#include "../common/context.h" -#include "./block_splitter.h" -#include "./command.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -typedef struct BlockSplitIterator { - const BlockSplit* split_; /* Not owned. */ - size_t idx_; - size_t type_; - size_t length_; -} BlockSplitIterator; - -static void InitBlockSplitIterator(BlockSplitIterator* self, - const BlockSplit* split) { - self->split_ =3D split; - self->idx_ =3D 0; - self->type_ =3D 0; - self->length_ =3D split->lengths ? split->lengths[0] : 0; -} - -static void BlockSplitIteratorNext(BlockSplitIterator* self) { - if (self->length_ =3D=3D 0) { - ++self->idx_; - self->type_ =3D self->split_->types[self->idx_]; - self->length_ =3D self->split_->lengths[self->idx_]; - } - --self->length_; -} - -void BrotliBuildHistogramsWithContext( - const Command* cmds, const size_t num_commands, - const BlockSplit* literal_split, const BlockSplit* insert_and_copy_sp= lit, - const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t start= _pos, - size_t mask, uint8_t prev_byte, uint8_t prev_byte2, - const ContextType* context_modes, HistogramLiteral* literal_histogram= s, - HistogramCommand* insert_and_copy_histograms, - HistogramDistance* copy_dist_histograms) { - size_t pos =3D start_pos; - BlockSplitIterator literal_it; - BlockSplitIterator insert_and_copy_it; - BlockSplitIterator dist_it; - size_t i; - - InitBlockSplitIterator(&literal_it, literal_split); - InitBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split); - InitBlockSplitIterator(&dist_it, dist_split); - for (i =3D 0; i < num_commands; ++i) { - const Command* cmd =3D &cmds[i]; - size_t j; - BlockSplitIteratorNext(&insert_and_copy_it); - HistogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it.ty= pe_], - cmd->cmd_prefix_); - /* TODO: unwrap iterator blocks. */ - for (j =3D cmd->insert_len_; j !=3D 0; --j) { - size_t context; - BlockSplitIteratorNext(&literal_it); - context =3D literal_it.type_; - if (context_modes) { - ContextLut lut =3D BROTLI_CONTEXT_LUT(context_modes[context]); - context =3D (context << BROTLI_LITERAL_CONTEXT_BITS) + - BROTLI_CONTEXT(prev_byte, prev_byte2, lut); - } - HistogramAddLiteral(&literal_histograms[context], - ringbuffer[pos & mask]); - prev_byte2 =3D prev_byte; - prev_byte =3D ringbuffer[pos & mask]; - ++pos; - } - pos +=3D CommandCopyLen(cmd); - if (CommandCopyLen(cmd)) { - prev_byte2 =3D ringbuffer[(pos - 2) & mask]; - prev_byte =3D ringbuffer[(pos - 1) & mask]; - if (cmd->cmd_prefix_ >=3D 128) { - size_t context; - BlockSplitIteratorNext(&dist_it); - context =3D (dist_it.type_ << BROTLI_DISTANCE_CONTEXT_BITS) + - CommandDistanceContext(cmd); - HistogramAddDistance(©_dist_histograms[context], - cmd->dist_prefix_ & 0x3FF); - } - } - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c b/BaseTo= ols/Source/C/BrotliCompress/enc/literal_cost.c deleted file mode 100644 index de780dcc99b0..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c +++ /dev/null @@ -1,175 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Literal cost model to allow backward reference replacement to be effic= ient. -*/ - -#include "./literal_cost.h" - -#include "../common/platform.h" -#include -#include "./fast_log.h" -#include "./utf8_util.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static size_t UTF8Position(size_t last, size_t c, size_t clamp) { - if (c < 128) { - return 0; /* Next one is the 'Byte 1' again. */ - } else if (c >=3D 192) { /* Next one is the 'Byte 2' of utf-8 encoding= . */ - return BROTLI_MIN(size_t, 1, clamp); - } else { - /* Let's decide over the last byte if this ends the sequence. */ - if (last < 0xE0) { - return 0; /* Completed two or three byte coding. */ - } else { /* Next one is the 'Byte 3' of utf-8 encoding. */ - return BROTLI_MIN(size_t, 2, clamp); - } - } -} - -static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t ma= sk, - const uint8_t* data) { - size_t counts[3] =3D { 0 }; - size_t max_utf8 =3D 1; /* should be 2, but 1 compresses better. */ - size_t last_c =3D 0; - size_t i; - for (i =3D 0; i < len; ++i) { - size_t c =3D data[(pos + i) & mask]; - ++counts[UTF8Position(last_c, c, 2)]; - last_c =3D c; - } - if (counts[2] < 500) { - max_utf8 =3D 1; - } - if (counts[1] + counts[2] < 25) { - max_utf8 =3D 0; - } - return max_utf8; -} - -static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_= t mask, - const uint8_t* data, float* c= ost) { - /* max_utf8 is 0 (normal ASCII single byte modeling), - 1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */ - const size_t max_utf8 =3D DecideMultiByteStatsLevel(pos, len, mask, dat= a); - size_t histogram[3][256] =3D { { 0 } }; - size_t window_half =3D 495; - size_t in_window =3D BROTLI_MIN(size_t, window_half, len); - size_t in_window_utf8[3] =3D { 0 }; - - size_t i; - { /* Bootstrap histograms. */ - size_t last_c =3D 0; - size_t utf8_pos =3D 0; - for (i =3D 0; i < in_window; ++i) { - size_t c =3D data[(pos + i) & mask]; - ++histogram[utf8_pos][c]; - ++in_window_utf8[utf8_pos]; - utf8_pos =3D UTF8Position(last_c, c, max_utf8); - last_c =3D c; - } - } - - /* Compute bit costs with sliding window. */ - for (i =3D 0; i < len; ++i) { - if (i >=3D window_half) { - /* Remove a byte in the past. */ - size_t c =3D - i < window_half + 1 ? 0 : data[(pos + i - window_half - 1) & ma= sk]; - size_t last_c =3D - i < window_half + 2 ? 0 : data[(pos + i - window_half - 2) & ma= sk]; - size_t utf8_pos2 =3D UTF8Position(last_c, c, max_utf8); - --histogram[utf8_pos2][data[(pos + i - window_half) & mask]]; - --in_window_utf8[utf8_pos2]; - } - if (i + window_half < len) { - /* Add a byte in the future. */ - size_t c =3D data[(pos + i + window_half - 1) & mask]; - size_t last_c =3D data[(pos + i + window_half - 2) & mask]; - size_t utf8_pos2 =3D UTF8Position(last_c, c, max_utf8); - ++histogram[utf8_pos2][data[(pos + i + window_half) & mask]]; - ++in_window_utf8[utf8_pos2]; - } - { - size_t c =3D i < 1 ? 0 : data[(pos + i - 1) & mask]; - size_t last_c =3D i < 2 ? 0 : data[(pos + i - 2) & mask]; - size_t utf8_pos =3D UTF8Position(last_c, c, max_utf8); - size_t masked_pos =3D (pos + i) & mask; - size_t histo =3D histogram[utf8_pos][data[masked_pos]]; - double lit_cost; - if (histo =3D=3D 0) { - histo =3D 1; - } - lit_cost =3D FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo); - lit_cost +=3D 0.02905; - if (lit_cost < 1.0) { - lit_cost *=3D 0.5; - lit_cost +=3D 0.5; - } - /* Make the first bytes more expensive -- seems to help, not sure w= hy. - Perhaps because the entropy source is changing its properties - rapidly in the beginning of the file, perhaps because the beginn= ing - of the data is a statistical "anomaly". */ - if (i < 2000) { - lit_cost +=3D 0.7 - ((double)(2000 - i) / 2000.0 * 0.35); - } - cost[i] =3D (float)lit_cost; - } - } -} - -void BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mas= k, - const uint8_t* data, float* cost) = { - if (BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) { - EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost); - return; - } else { - size_t histogram[256] =3D { 0 }; - size_t window_half =3D 2000; - size_t in_window =3D BROTLI_MIN(size_t, window_half, len); - - /* Bootstrap histogram. */ - size_t i; - for (i =3D 0; i < in_window; ++i) { - ++histogram[data[(pos + i) & mask]]; - } - - /* Compute bit costs with sliding window. */ - for (i =3D 0; i < len; ++i) { - size_t histo; - if (i >=3D window_half) { - /* Remove a byte in the past. */ - --histogram[data[(pos + i - window_half) & mask]]; - --in_window; - } - if (i + window_half < len) { - /* Add a byte in the future. */ - ++histogram[data[(pos + i + window_half) & mask]]; - ++in_window; - } - histo =3D histogram[data[(pos + i) & mask]]; - if (histo =3D=3D 0) { - histo =3D 1; - } - { - double lit_cost =3D FastLog2(in_window) - FastLog2(histo); - lit_cost +=3D 0.029; - if (lit_cost < 1.0) { - lit_cost *=3D 0.5; - lit_cost +=3D 0.5; - } - cost[i] =3D (float)lit_cost; - } - } - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/memory.c b/BaseTools/So= urce/C/BrotliCompress/enc/memory.c deleted file mode 100644 index f0b2f13f6472..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/memory.c +++ /dev/null @@ -1,170 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Algorithms for distributing the literals and commands of a metablock b= etween - block types and contexts. */ - -#include "./memory.h" - -#include /* exit, free, malloc */ -#include /* memcpy */ - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define MAX_PERM_ALLOCATED 128 -#define MAX_NEW_ALLOCATED 64 -#define MAX_NEW_FREED 64 - -#define PERM_ALLOCATED_OFFSET 0 -#define NEW_ALLOCATED_OFFSET MAX_PERM_ALLOCATED -#define NEW_FREED_OFFSET (MAX_PERM_ALLOCATED + MAX_NEW_ALLOCATED) - -void BrotliInitMemoryManager( - MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free= _func, - void* opaque) { - if (!alloc_func) { - m->alloc_func =3D BrotliDefaultAllocFunc; - m->free_func =3D BrotliDefaultFreeFunc; - m->opaque =3D 0; - } else { - m->alloc_func =3D alloc_func; - m->free_func =3D free_func; - m->opaque =3D opaque; - } -#if !defined(BROTLI_ENCODER_EXIT_ON_OOM) - m->is_oom =3D BROTLI_FALSE; - m->perm_allocated =3D 0; - m->new_allocated =3D 0; - m->new_freed =3D 0; -#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ -} - -#if defined(BROTLI_ENCODER_EXIT_ON_OOM) - -void* BrotliAllocate(MemoryManager* m, size_t n) { - void* result =3D m->alloc_func(m->opaque, n); - if (!result) exit(EXIT_FAILURE); - return result; -} - -void BrotliFree(MemoryManager* m, void* p) { - m->free_func(m->opaque, p); -} - -void BrotliWipeOutMemoryManager(MemoryManager* m) { - BROTLI_UNUSED(m); -} - -#else /* BROTLI_ENCODER_EXIT_ON_OOM */ - -static void SortPointers(void** items, const size_t n) { - /* Shell sort. */ - static const size_t gaps[] =3D {23, 10, 4, 1}; - int g =3D 0; - for (; g < 4; ++g) { - size_t gap =3D gaps[g]; - size_t i; - for (i =3D gap; i < n; ++i) { - size_t j =3D i; - void* tmp =3D items[i]; - for (; j >=3D gap && tmp < items[j - gap]; j -=3D gap) { - items[j] =3D items[j - gap]; - } - items[j] =3D tmp; - } - } -} - -static size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) = { - size_t a_read_index =3D 0; - size_t b_read_index =3D 0; - size_t a_write_index =3D 0; - size_t b_write_index =3D 0; - size_t annihilated =3D 0; - while (a_read_index < a_len && b_read_index < b_len) { - if (a[a_read_index] =3D=3D b[b_read_index]) { - a_read_index++; - b_read_index++; - annihilated++; - } else if (a[a_read_index] < b[b_read_index]) { - a[a_write_index++] =3D a[a_read_index++]; - } else { - b[b_write_index++] =3D b[b_read_index++]; - } - } - while (a_read_index < a_len) a[a_write_index++] =3D a[a_read_index++]; - while (b_read_index < b_len) b[b_write_index++] =3D b[b_read_index++]; - return annihilated; -} - -static void CollectGarbagePointers(MemoryManager* m) { - size_t annihilated; - SortPointers(m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated); - SortPointers(m->pointers + NEW_FREED_OFFSET, m->new_freed); - annihilated =3D Annihilate( - m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated, - m->pointers + NEW_FREED_OFFSET, m->new_freed); - m->new_allocated -=3D annihilated; - m->new_freed -=3D annihilated; - - if (m->new_freed !=3D 0) { - annihilated =3D Annihilate( - m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated, - m->pointers + NEW_FREED_OFFSET, m->new_freed); - m->perm_allocated -=3D annihilated; - m->new_freed -=3D annihilated; - BROTLI_DCHECK(m->new_freed =3D=3D 0); - } - - if (m->new_allocated !=3D 0) { - BROTLI_DCHECK(m->perm_allocated + m->new_allocated <=3D MAX_PERM_ALLO= CATED); - memcpy(m->pointers + PERM_ALLOCATED_OFFSET + m->perm_allocated, - m->pointers + NEW_ALLOCATED_OFFSET, - sizeof(void*) * m->new_allocated); - m->perm_allocated +=3D m->new_allocated; - m->new_allocated =3D 0; - SortPointers(m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated); - } -} - -void* BrotliAllocate(MemoryManager* m, size_t n) { - void* result =3D m->alloc_func(m->opaque, n); - if (!result) { - m->is_oom =3D BROTLI_TRUE; - return NULL; - } - if (m->new_allocated =3D=3D MAX_NEW_ALLOCATED) CollectGarbagePointers(m= ); - m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] =3D result; - return result; -} - -void BrotliFree(MemoryManager* m, void* p) { - if (!p) return; - m->free_func(m->opaque, p); - if (m->new_freed =3D=3D MAX_NEW_FREED) CollectGarbagePointers(m); - m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] =3D p; -} - -void BrotliWipeOutMemoryManager(MemoryManager* m) { - size_t i; - CollectGarbagePointers(m); - /* Now all unfreed pointers are in perm-allocated list. */ - for (i =3D 0; i < m->perm_allocated; ++i) { - m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]); - } - m->perm_allocated =3D 0; -} - -#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock.c b/BaseTools= /Source/C/BrotliCompress/enc/metablock.c deleted file mode 100644 index 2fc3e28d02af..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/metablock.c +++ /dev/null @@ -1,667 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Algorithms for distributing the literals and commands of a metablock b= etween - block types and contexts. */ - -#include "./metablock.h" - -#include "../common/constants.h" -#include "../common/context.h" -#include "../common/platform.h" -#include -#include "./bit_cost.h" -#include "./block_splitter.h" -#include "./cluster.h" -#include "./entropy_encode.h" -#include "./histogram.h" -#include "./memory.h" -#include "./quality.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -void BrotliInitDistanceParams(BrotliEncoderParams* params, - uint32_t npostfix, uint32_t ndirect) { - BrotliDistanceParams* dist_params =3D ¶ms->dist; - uint32_t alphabet_size, max_distance; - - dist_params->distance_postfix_bits =3D npostfix; - dist_params->num_direct_distance_codes =3D ndirect; - - alphabet_size =3D BROTLI_DISTANCE_ALPHABET_SIZE( - npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS); - max_distance =3D ndirect + (1U << (BROTLI_MAX_DISTANCE_BITS + npostfix = + 2)) - - (1U << (npostfix + 2)); - - if (params->large_window) { - static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] =3D {0, 4, 12, 2= 8}; - uint32_t postfix =3D 1U << npostfix; - alphabet_size =3D BROTLI_DISTANCE_ALPHABET_SIZE( - npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS); - /* The maximum distance is set so that no distance symbol used can en= code - a distance larger than BROTLI_MAX_ALLOWED_DISTANCE with all - its extra bits set. */ - if (ndirect < bound[npostfix]) { - max_distance =3D BROTLI_MAX_ALLOWED_DISTANCE - (bound[npostfix] - n= direct); - } else if (ndirect >=3D bound[npostfix] + postfix) { - max_distance =3D (3U << 29) - 4 + (ndirect - bound[npostfix]); - } else { - max_distance =3D BROTLI_MAX_ALLOWED_DISTANCE; - } - } - - dist_params->alphabet_size =3D alphabet_size; - dist_params->max_distance =3D max_distance; -} - -static void RecomputeDistancePrefixes(Command* cmds, - size_t num_commands, - const BrotliDistanceParams* orig_pa= rams, - const BrotliDistanceParams* new_par= ams) { - size_t i; - - if (orig_params->distance_postfix_bits =3D=3D new_params->distance_post= fix_bits && - orig_params->num_direct_distance_codes =3D=3D - new_params->num_direct_distance_codes) { - return; - } - - for (i =3D 0; i < num_commands; ++i) { - Command* cmd =3D &cmds[i]; - if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >=3D 128) { - PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd, orig_param= s), - new_params->num_direct_distance_codes, - new_params->distance_postfix_bits, - &cmd->dist_prefix_, - &cmd->dist_extra_); - } - } -} - -static BROTLI_BOOL ComputeDistanceCost(const Command* cmds, - size_t num_commands, - const BrotliDistanceParams* orig_p= arams, - const BrotliDistanceParams* new_pa= rams, - double* cost) { - size_t i; - BROTLI_BOOL equal_params =3D BROTLI_FALSE; - uint16_t dist_prefix; - uint32_t dist_extra; - double extra_bits =3D 0.0; - HistogramDistance histo; - HistogramClearDistance(&histo); - - if (orig_params->distance_postfix_bits =3D=3D new_params->distance_post= fix_bits && - orig_params->num_direct_distance_codes =3D=3D - new_params->num_direct_distance_codes) { - equal_params =3D BROTLI_TRUE; - } - - for (i =3D 0; i < num_commands; i++) { - const Command* cmd =3D &cmds[i]; - if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >=3D 128) { - if (equal_params) { - dist_prefix =3D cmd->dist_prefix_; - } else { - uint32_t distance =3D CommandRestoreDistanceCode(cmd, orig_params= ); - if (distance > new_params->max_distance) { - return BROTLI_FALSE; - } - PrefixEncodeCopyDistance(distance, - new_params->num_direct_distance_codes, - new_params->distance_postfix_bits, - &dist_prefix, - &dist_extra); - } - HistogramAddDistance(&histo, dist_prefix & 0x3FF); - extra_bits +=3D dist_prefix >> 10; - } - } - - *cost =3D BrotliPopulationCostDistance(&histo) + extra_bits; - return BROTLI_TRUE; -} - -void BrotliBuildMetaBlock(MemoryManager* m, - const uint8_t* ringbuffer, - const size_t pos, - const size_t mask, - BrotliEncoderParams* params, - uint8_t prev_byte, - uint8_t prev_byte2, - Command* cmds, - size_t num_commands, - ContextType literal_context_mode, - MetaBlockSplit* mb) { - /* Histogram ids need to fit in one byte. */ - static const size_t kMaxNumberOfHistograms =3D 256; - HistogramDistance* distance_histograms; - HistogramLiteral* literal_histograms; - ContextType* literal_context_modes =3D NULL; - size_t literal_histograms_size; - size_t distance_histograms_size; - size_t i; - size_t literal_context_multiplier =3D 1; - uint32_t npostfix; - uint32_t ndirect_msb =3D 0; - BROTLI_BOOL check_orig =3D BROTLI_TRUE; - double best_dist_cost =3D 1e99; - BrotliEncoderParams orig_params =3D *params; - BrotliEncoderParams new_params =3D *params; - - for (npostfix =3D 0; npostfix <=3D BROTLI_MAX_NPOSTFIX; npostfix++) { - for (; ndirect_msb < 16; ndirect_msb++) { - uint32_t ndirect =3D ndirect_msb << npostfix; - BROTLI_BOOL skip; - double dist_cost; - BrotliInitDistanceParams(&new_params, npostfix, ndirect); - if (npostfix =3D=3D orig_params.dist.distance_postfix_bits && - ndirect =3D=3D orig_params.dist.num_direct_distance_codes) { - check_orig =3D BROTLI_FALSE; - } - skip =3D !ComputeDistanceCost( - cmds, num_commands, - &orig_params.dist, &new_params.dist, &dist_cost); - if (skip || (dist_cost > best_dist_cost)) { - break; - } - best_dist_cost =3D dist_cost; - params->dist =3D new_params.dist; - } - if (ndirect_msb > 0) ndirect_msb--; - ndirect_msb /=3D 2; - } - if (check_orig) { - double dist_cost; - ComputeDistanceCost(cmds, num_commands, - &orig_params.dist, &orig_params.dist, &dist_cost)= ; - if (dist_cost < best_dist_cost) { - /* NB: currently unused; uncomment when more param tuning is added.= */ - /* best_dist_cost =3D dist_cost; */ - params->dist =3D orig_params.dist; - } - } - RecomputeDistancePrefixes(cmds, num_commands, - &orig_params.dist, ¶ms->dist); - - BrotliSplitBlock(m, cmds, num_commands, - ringbuffer, pos, mask, params, - &mb->literal_split, - &mb->command_split, - &mb->distance_split); - if (BROTLI_IS_OOM(m)) return; - - if (!params->disable_literal_context_modeling) { - literal_context_multiplier =3D 1 << BROTLI_LITERAL_CONTEXT_BITS; - literal_context_modes =3D - BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types); - if (BROTLI_IS_OOM(m)) return; - for (i =3D 0; i < mb->literal_split.num_types; ++i) { - literal_context_modes[i] =3D literal_context_mode; - } - } - - literal_histograms_size =3D - mb->literal_split.num_types * literal_context_multiplier; - literal_histograms =3D - BROTLI_ALLOC(m, HistogramLiteral, literal_histograms_size); - if (BROTLI_IS_OOM(m)) return; - ClearHistogramsLiteral(literal_histograms, literal_histograms_size); - - distance_histograms_size =3D - mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS; - distance_histograms =3D - BROTLI_ALLOC(m, HistogramDistance, distance_histograms_size); - if (BROTLI_IS_OOM(m)) return; - ClearHistogramsDistance(distance_histograms, distance_histograms_size); - - BROTLI_DCHECK(mb->command_histograms =3D=3D 0); - mb->command_histograms_size =3D mb->command_split.num_types; - mb->command_histograms =3D - BROTLI_ALLOC(m, HistogramCommand, mb->command_histograms_size); - if (BROTLI_IS_OOM(m)) return; - ClearHistogramsCommand(mb->command_histograms, mb->command_histograms_s= ize); - - BrotliBuildHistogramsWithContext(cmds, num_commands, - &mb->literal_split, &mb->command_split, &mb->distance_split, - ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes= , - literal_histograms, mb->command_histograms, distance_histograms); - BROTLI_FREE(m, literal_context_modes); - - BROTLI_DCHECK(mb->literal_context_map =3D=3D 0); - mb->literal_context_map_size =3D - mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS; - mb->literal_context_map =3D - BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size); - if (BROTLI_IS_OOM(m)) return; - - BROTLI_DCHECK(mb->literal_histograms =3D=3D 0); - mb->literal_histograms_size =3D mb->literal_context_map_size; - mb->literal_histograms =3D - BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size); - if (BROTLI_IS_OOM(m)) return; - - BrotliClusterHistogramsLiteral(m, literal_histograms, literal_histogram= s_size, - kMaxNumberOfHistograms, mb->literal_histograms, - &mb->literal_histograms_size, mb->literal_context_map); - if (BROTLI_IS_OOM(m)) return; - BROTLI_FREE(m, literal_histograms); - - if (params->disable_literal_context_modeling) { - /* Distribute assignment to all contexts. */ - for (i =3D mb->literal_split.num_types; i !=3D 0;) { - size_t j =3D 0; - i--; - for (; j < (1 << BROTLI_LITERAL_CONTEXT_BITS); j++) { - mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] = =3D - mb->literal_context_map[i]; - } - } - } - - BROTLI_DCHECK(mb->distance_context_map =3D=3D 0); - mb->distance_context_map_size =3D - mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS; - mb->distance_context_map =3D - BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size); - if (BROTLI_IS_OOM(m)) return; - - BROTLI_DCHECK(mb->distance_histograms =3D=3D 0); - mb->distance_histograms_size =3D mb->distance_context_map_size; - mb->distance_histograms =3D - BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size); - if (BROTLI_IS_OOM(m)) return; - - BrotliClusterHistogramsDistance(m, distance_histograms, - mb->distance_context_map_size, - kMaxNumberOfHistograms, - mb->distance_histograms, - &mb->distance_histograms_size, - mb->distance_context_map); - if (BROTLI_IS_OOM(m)) return; - BROTLI_FREE(m, distance_histograms); -} - -#define FN(X) X ## Literal -#include "./metablock_inc.h" /* NOLINT(build/include) */ -#undef FN - -#define FN(X) X ## Command -#include "./metablock_inc.h" /* NOLINT(build/include) */ -#undef FN - -#define FN(X) X ## Distance -#include "./metablock_inc.h" /* NOLINT(build/include) */ -#undef FN - -#define BROTLI_MAX_STATIC_CONTEXTS 13 - -/* Greedy block splitter for one block category (literal, command or dist= ance). - Gathers histograms for all context buckets. */ -typedef struct ContextBlockSplitter { - /* Alphabet size of particular block category. */ - size_t alphabet_size_; - size_t num_contexts_; - size_t max_block_types_; - /* We collect at least this many symbols for each block. */ - size_t min_block_size_; - /* We merge histograms A and B if - entropy(A+B) < entropy(A) + entropy(B) + split_threshold_, - where A is the current histogram and B is the histogram of the last = or the - second last block type. */ - double split_threshold_; - - size_t num_blocks_; - BlockSplit* split_; /* not owned */ - HistogramLiteral* histograms_; /* not owned */ - size_t* histograms_size_; /* not owned */ - - /* The number of symbols that we want to collect before deciding on whe= ther - or not to merge the block with a previous one or emit a new block. *= / - size_t target_block_size_; - /* The number of symbols in the current histogram. */ - size_t block_size_; - /* Offset of the current histogram. */ - size_t curr_histogram_ix_; - /* Offset of the histograms of the previous two block types. */ - size_t last_histogram_ix_[2]; - /* Entropy of the previous two block types. */ - double last_entropy_[2 * BROTLI_MAX_STATIC_CONTEXTS]; - /* The number of times we merged the current block with the last one. *= / - size_t merge_last_count_; -} ContextBlockSplitter; - -static void InitContextBlockSplitter( - MemoryManager* m, ContextBlockSplitter* self, size_t alphabet_size, - size_t num_contexts, size_t min_block_size, double split_threshold, - size_t num_symbols, BlockSplit* split, HistogramLiteral** histograms, - size_t* histograms_size) { - size_t max_num_blocks =3D num_symbols / min_block_size + 1; - size_t max_num_types; - BROTLI_DCHECK(num_contexts <=3D BROTLI_MAX_STATIC_CONTEXTS); - - self->alphabet_size_ =3D alphabet_size; - self->num_contexts_ =3D num_contexts; - self->max_block_types_ =3D BROTLI_MAX_NUMBER_OF_BLOCK_TYPES / num_conte= xts; - self->min_block_size_ =3D min_block_size; - self->split_threshold_ =3D split_threshold; - self->num_blocks_ =3D 0; - self->split_ =3D split; - self->histograms_size_ =3D histograms_size; - self->target_block_size_ =3D min_block_size; - self->block_size_ =3D 0; - self->curr_histogram_ix_ =3D 0; - self->merge_last_count_ =3D 0; - - /* We have to allocate one more histogram than the maximum number of bl= ock - types for the current histogram when the meta-block is too big. */ - max_num_types =3D - BROTLI_MIN(size_t, max_num_blocks, self->max_block_types_ + 1); - BROTLI_ENSURE_CAPACITY(m, uint8_t, - split->types, split->types_alloc_size, max_num_blocks); - BROTLI_ENSURE_CAPACITY(m, uint32_t, - split->lengths, split->lengths_alloc_size, max_num_blocks); - if (BROTLI_IS_OOM(m)) return; - split->num_blocks =3D max_num_blocks; - if (BROTLI_IS_OOM(m)) return; - BROTLI_DCHECK(*histograms =3D=3D 0); - *histograms_size =3D max_num_types * num_contexts; - *histograms =3D BROTLI_ALLOC(m, HistogramLiteral, *histograms_size); - self->histograms_ =3D *histograms; - if (BROTLI_IS_OOM(m)) return; - /* Clear only current histogram. */ - ClearHistogramsLiteral(&self->histograms_[0], num_contexts); - self->last_histogram_ix_[0] =3D self->last_histogram_ix_[1] =3D 0; -} - -/* Does either of three things: - (1) emits the current block with a new block type; - (2) emits the current block with the type of the second last block; - (3) merges the current block with the last block. */ -static void ContextBlockSplitterFinishBlock( - ContextBlockSplitter* self, MemoryManager* m, BROTLI_BOOL is_final) { - BlockSplit* split =3D self->split_; - const size_t num_contexts =3D self->num_contexts_; - double* last_entropy =3D self->last_entropy_; - HistogramLiteral* histograms =3D self->histograms_; - - if (self->block_size_ < self->min_block_size_) { - self->block_size_ =3D self->min_block_size_; - } - if (self->num_blocks_ =3D=3D 0) { - size_t i; - /* Create first block. */ - split->lengths[0] =3D (uint32_t)self->block_size_; - split->types[0] =3D 0; - - for (i =3D 0; i < num_contexts; ++i) { - last_entropy[i] =3D - BitsEntropy(histograms[i].data_, self->alphabet_size_); - last_entropy[num_contexts + i] =3D last_entropy[i]; - } - ++self->num_blocks_; - ++split->num_types; - self->curr_histogram_ix_ +=3D num_contexts; - if (self->curr_histogram_ix_ < *self->histograms_size_) { - ClearHistogramsLiteral( - &self->histograms_[self->curr_histogram_ix_], self->num_context= s_); - } - self->block_size_ =3D 0; - } else if (self->block_size_ > 0) { - /* Try merging the set of histograms for the current block type with = the - respective set of histograms for the last and second last block ty= pes. - Decide over the split based on the total reduction of entropy acro= ss - all contexts. */ - double entropy[BROTLI_MAX_STATIC_CONTEXTS]; - HistogramLiteral* combined_histo =3D - BROTLI_ALLOC(m, HistogramLiteral, 2 * num_contexts); - double combined_entropy[2 * BROTLI_MAX_STATIC_CONTEXTS]; - double diff[2] =3D { 0.0 }; - size_t i; - if (BROTLI_IS_OOM(m)) return; - for (i =3D 0; i < num_contexts; ++i) { - size_t curr_histo_ix =3D self->curr_histogram_ix_ + i; - size_t j; - entropy[i] =3D BitsEntropy(histograms[curr_histo_ix].data_, - self->alphabet_size_); - for (j =3D 0; j < 2; ++j) { - size_t jx =3D j * num_contexts + i; - size_t last_histogram_ix =3D self->last_histogram_ix_[j] + i; - combined_histo[jx] =3D histograms[curr_histo_ix]; - HistogramAddHistogramLiteral(&combined_histo[jx], - &histograms[last_histogram_ix]); - combined_entropy[jx] =3D BitsEntropy( - &combined_histo[jx].data_[0], self->alphabet_size_); - diff[j] +=3D combined_entropy[jx] - entropy[i] - last_entropy[jx]= ; - } - } - - if (split->num_types < self->max_block_types_ && - diff[0] > self->split_threshold_ && - diff[1] > self->split_threshold_) { - /* Create new block. */ - split->lengths[self->num_blocks_] =3D (uint32_t)self->block_size_; - split->types[self->num_blocks_] =3D (uint8_t)split->num_types; - self->last_histogram_ix_[1] =3D self->last_histogram_ix_[0]; - self->last_histogram_ix_[0] =3D split->num_types * num_contexts; - for (i =3D 0; i < num_contexts; ++i) { - last_entropy[num_contexts + i] =3D last_entropy[i]; - last_entropy[i] =3D entropy[i]; - } - ++self->num_blocks_; - ++split->num_types; - self->curr_histogram_ix_ +=3D num_contexts; - if (self->curr_histogram_ix_ < *self->histograms_size_) { - ClearHistogramsLiteral( - &self->histograms_[self->curr_histogram_ix_], self->num_conte= xts_); - } - self->block_size_ =3D 0; - self->merge_last_count_ =3D 0; - self->target_block_size_ =3D self->min_block_size_; - } else if (diff[1] < diff[0] - 20.0) { - /* Combine this block with second last block. */ - split->lengths[self->num_blocks_] =3D (uint32_t)self->block_size_; - split->types[self->num_blocks_] =3D split->types[self->num_blocks_ = - 2]; - BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1); - for (i =3D 0; i < num_contexts; ++i) { - histograms[self->last_histogram_ix_[0] + i] =3D - combined_histo[num_contexts + i]; - last_entropy[num_contexts + i] =3D last_entropy[i]; - last_entropy[i] =3D combined_entropy[num_contexts + i]; - HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]); - } - ++self->num_blocks_; - self->block_size_ =3D 0; - self->merge_last_count_ =3D 0; - self->target_block_size_ =3D self->min_block_size_; - } else { - /* Combine this block with last block. */ - split->lengths[self->num_blocks_ - 1] +=3D (uint32_t)self->block_si= ze_; - for (i =3D 0; i < num_contexts; ++i) { - histograms[self->last_histogram_ix_[0] + i] =3D combined_histo[i]= ; - last_entropy[i] =3D combined_entropy[i]; - if (split->num_types =3D=3D 1) { - last_entropy[num_contexts + i] =3D last_entropy[i]; - } - HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]); - } - self->block_size_ =3D 0; - if (++self->merge_last_count_ > 1) { - self->target_block_size_ +=3D self->min_block_size_; - } - } - BROTLI_FREE(m, combined_histo); - } - if (is_final) { - *self->histograms_size_ =3D split->num_types * num_contexts; - split->num_blocks =3D self->num_blocks_; - } -} - -/* Adds the next symbol to the current block type and context. When the - current block reaches the target size, decides on merging the block. *= / -static void ContextBlockSplitterAddSymbol( - ContextBlockSplitter* self, MemoryManager* m, - size_t symbol, size_t context) { - HistogramAddLiteral(&self->histograms_[self->curr_histogram_ix_ + conte= xt], - symbol); - ++self->block_size_; - if (self->block_size_ =3D=3D self->target_block_size_) { - ContextBlockSplitterFinishBlock(self, m, /* is_final =3D */ BROTLI_FA= LSE); - if (BROTLI_IS_OOM(m)) return; - } -} - -static void MapStaticContexts(MemoryManager* m, - size_t num_contexts, - const uint32_t* static_context_map, - MetaBlockSplit* mb) { - size_t i; - BROTLI_DCHECK(mb->literal_context_map =3D=3D 0); - mb->literal_context_map_size =3D - mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS; - mb->literal_context_map =3D - BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size); - if (BROTLI_IS_OOM(m)) return; - - for (i =3D 0; i < mb->literal_split.num_types; ++i) { - uint32_t offset =3D (uint32_t)(i * num_contexts); - size_t j; - for (j =3D 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS); ++j) { - mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =3D - offset + static_context_map[j]; - } - } -} - -static BROTLI_INLINE void BrotliBuildMetaBlockGreedyInternal( - MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask, - uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut= , - const size_t num_contexts, const uint32_t* static_context_map, - const Command* commands, size_t n_commands, MetaBlockSplit* mb) { - union { - BlockSplitterLiteral plain; - ContextBlockSplitter ctx; - } lit_blocks; - BlockSplitterCommand cmd_blocks; - BlockSplitterDistance dist_blocks; - size_t num_literals =3D 0; - size_t i; - for (i =3D 0; i < n_commands; ++i) { - num_literals +=3D commands[i].insert_len_; - } - - if (num_contexts =3D=3D 1) { - InitBlockSplitterLiteral(m, &lit_blocks.plain, 256, 512, 400.0, - num_literals, &mb->literal_split, &mb->literal_histograms, - &mb->literal_histograms_size); - } else { - InitContextBlockSplitter(m, &lit_blocks.ctx, 256, num_contexts, 512, = 400.0, - num_literals, &mb->literal_split, &mb->literal_histograms, - &mb->literal_histograms_size); - } - if (BROTLI_IS_OOM(m)) return; - InitBlockSplitterCommand(m, &cmd_blocks, BROTLI_NUM_COMMAND_SYMBOLS, 10= 24, - 500.0, n_commands, &mb->command_split, &mb->command_histograms, - &mb->command_histograms_size); - if (BROTLI_IS_OOM(m)) return; - InitBlockSplitterDistance(m, &dist_blocks, 64, 512, 100.0, n_commands, - &mb->distance_split, &mb->distance_histograms, - &mb->distance_histograms_size); - if (BROTLI_IS_OOM(m)) return; - - for (i =3D 0; i < n_commands; ++i) { - const Command cmd =3D commands[i]; - size_t j; - BlockSplitterAddSymbolCommand(&cmd_blocks, cmd.cmd_prefix_); - for (j =3D cmd.insert_len_; j !=3D 0; --j) { - uint8_t literal =3D ringbuffer[pos & mask]; - if (num_contexts =3D=3D 1) { - BlockSplitterAddSymbolLiteral(&lit_blocks.plain, literal); - } else { - size_t context =3D - BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut); - ContextBlockSplitterAddSymbol(&lit_blocks.ctx, m, literal, - static_context_map[context]); - if (BROTLI_IS_OOM(m)) return; - } - prev_byte2 =3D prev_byte; - prev_byte =3D literal; - ++pos; - } - pos +=3D CommandCopyLen(&cmd); - if (CommandCopyLen(&cmd)) { - prev_byte2 =3D ringbuffer[(pos - 2) & mask]; - prev_byte =3D ringbuffer[(pos - 1) & mask]; - if (cmd.cmd_prefix_ >=3D 128) { - BlockSplitterAddSymbolDistance(&dist_blocks, cmd.dist_prefix_ & 0= x3FF); - } - } - } - - if (num_contexts =3D=3D 1) { - BlockSplitterFinishBlockLiteral( - &lit_blocks.plain, /* is_final =3D */ BROTLI_TRUE); - } else { - ContextBlockSplitterFinishBlock( - &lit_blocks.ctx, m, /* is_final =3D */ BROTLI_TRUE); - if (BROTLI_IS_OOM(m)) return; - } - BlockSplitterFinishBlockCommand(&cmd_blocks, /* is_final =3D */ BROTLI_= TRUE); - BlockSplitterFinishBlockDistance(&dist_blocks, /* is_final =3D */ BROTL= I_TRUE); - - if (num_contexts > 1) { - MapStaticContexts(m, num_contexts, static_context_map, mb); - } -} - -void BrotliBuildMetaBlockGreedy(MemoryManager* m, - const uint8_t* ringbuffer, - size_t pos, - size_t mask, - uint8_t prev_byte, - uint8_t prev_byte2, - ContextLut literal_context_lut, - size_t num_contexts, - const uint32_t* static_context_map, - const Command* commands, - size_t n_commands, - MetaBlockSplit* mb) { - if (num_contexts =3D=3D 1) { - BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byt= e, - prev_byte2, literal_context_lut, 1, NULL, commands, n_commands, m= b); - } else { - BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byt= e, - prev_byte2, literal_context_lut, num_contexts, static_context_map= , - commands, n_commands, mb); - } -} - -void BrotliOptimizeHistograms(uint32_t num_distance_codes, - MetaBlockSplit* mb) { - uint8_t good_for_rle[BROTLI_NUM_COMMAND_SYMBOLS]; - size_t i; - for (i =3D 0; i < mb->literal_histograms_size; ++i) { - BrotliOptimizeHuffmanCountsForRle(256, mb->literal_histograms[i].data= _, - good_for_rle); - } - for (i =3D 0; i < mb->command_histograms_size; ++i) { - BrotliOptimizeHuffmanCountsForRle(BROTLI_NUM_COMMAND_SYMBOLS, - mb->command_histograms[i].data_, - good_for_rle); - } - for (i =3D 0; i < mb->distance_histograms_size; ++i) { - BrotliOptimizeHuffmanCountsForRle(num_distance_codes, - mb->distance_histograms[i].data_, - good_for_rle); - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict.c b/BaseToo= ls/Source/C/BrotliCompress/enc/static_dict.c deleted file mode 100644 index bad13a7f1693..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/static_dict.c +++ /dev/null @@ -1,486 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -#include "./static_dict.h" - -#include "../common/dictionary.h" -#include "../common/platform.h" -#include "../common/transform.h" -#include "./encoder_dict.h" -#include "./find_match_length.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static BROTLI_INLINE uint32_t Hash(const uint8_t* data) { - uint32_t h =3D BROTLI_UNALIGNED_LOAD32LE(data) * kDictHashMul32; - /* The higher bits contain more mixture from the multiplication, - so we take our results from there. */ - return h >> (32 - kDictNumBits); -} - -static BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t le= n_code, - uint32_t* matches) { - uint32_t match =3D (uint32_t)((distance << 5) + len_code); - matches[len] =3D BROTLI_MIN(uint32_t, matches[len], match); -} - -static BROTLI_INLINE size_t DictMatchLength(const BrotliDictionary* dicti= onary, - const uint8_t* data, - size_t id, - size_t len, - size_t maxlen) { - const size_t offset =3D dictionary->offsets_by_length[len] + len * id; - return FindMatchLengthWithLimit(&dictionary->data[offset], data, - BROTLI_MIN(size_t, len, maxlen)); -} - -static BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary* dictiona= ry, - DictWord w, const uint8_t* data, size_t max_length) { - if (w.len > max_length) { - return BROTLI_FALSE; - } else { - const size_t offset =3D dictionary->offsets_by_length[w.len] + - (size_t)w.len * (size_t)w.idx; - const uint8_t* dict =3D &dictionary->data[offset]; - if (w.transform =3D=3D 0) { - /* Match against base dictionary word. */ - return - TO_BROTLI_BOOL(FindMatchLengthWithLimit(dict, data, w.len) =3D= =3D w.len); - } else if (w.transform =3D=3D 10) { - /* Match against uppercase first transform. - Note that there are only ASCII uppercase words in the lookup tab= le. */ - return TO_BROTLI_BOOL(dict[0] >=3D 'a' && dict[0] <=3D 'z' && - (dict[0] ^ 32) =3D=3D data[0] && - FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) = =3D=3D - w.len - 1u); - } else { - /* Match against uppercase all transform. - Note that there are only ASCII uppercase words in the lookup tab= le. */ - size_t i; - for (i =3D 0; i < w.len; ++i) { - if (dict[i] >=3D 'a' && dict[i] <=3D 'z') { - if ((dict[i] ^ 32) !=3D data[i]) return BROTLI_FALSE; - } else { - if (dict[i] !=3D data[i]) return BROTLI_FALSE; - } - } - return BROTLI_TRUE; - } - } -} - -BROTLI_BOOL BrotliFindAllStaticDictionaryMatches( - const BrotliEncoderDictionary* dictionary, const uint8_t* data, - size_t min_length, size_t max_length, uint32_t* matches) { - BROTLI_BOOL has_found_match =3D BROTLI_FALSE; - { - size_t offset =3D dictionary->buckets[Hash(data)]; - BROTLI_BOOL end =3D !offset; - while (!end) { - DictWord w =3D dictionary->dict_words[offset++]; - const size_t l =3D w.len & 0x1F; - const size_t n =3D (size_t)1 << dictionary->words->size_bits_by_len= gth[l]; - const size_t id =3D w.idx; - end =3D !!(w.len & 0x80); - w.len =3D (uint8_t)l; - if (w.transform =3D=3D 0) { - const size_t matchlen =3D - DictMatchLength(dictionary->words, data, id, l, max_length); - const uint8_t* s; - size_t minlen; - size_t maxlen; - size_t len; - /* Transform "" + BROTLI_TRANSFORM_IDENTITY + "" */ - if (matchlen =3D=3D l) { - AddMatch(id, l, l, matches); - has_found_match =3D BROTLI_TRUE; - } - /* Transforms "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "" and - "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "ing " */ - if (matchlen >=3D l - 1) { - AddMatch(id + 12 * n, l - 1, l, matches); - if (l + 2 < max_length && - data[l - 1] =3D=3D 'i' && data[l] =3D=3D 'n' && data[l + 1]= =3D=3D 'g' && - data[l + 2] =3D=3D ' ') { - AddMatch(id + 49 * n, l + 3, l, matches); - } - has_found_match =3D BROTLI_TRUE; - } - /* Transform "" + BROTLI_TRANSFORM_OMIT_LAST_# + "" (# =3D 2 .. 9= ) */ - minlen =3D min_length; - if (l > 9) minlen =3D BROTLI_MAX(size_t, minlen, l - 9); - maxlen =3D BROTLI_MIN(size_t, matchlen, l - 2); - for (len =3D minlen; len <=3D maxlen; ++len) { - size_t cut =3D l - len; - size_t transform_id =3D (cut << 2) + - (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F= ); - AddMatch(id + transform_id * n, len, l, matches); - has_found_match =3D BROTLI_TRUE; - } - if (matchlen < l || l + 6 >=3D max_length) { - continue; - } - s =3D &data[l]; - /* Transforms "" + BROTLI_TRANSFORM_IDENTITY + */ - if (s[0] =3D=3D ' ') { - AddMatch(id + n, l + 1, l, matches); - if (s[1] =3D=3D 'a') { - if (s[2] =3D=3D ' ') { - AddMatch(id + 28 * n, l + 3, l, matches); - } else if (s[2] =3D=3D 's') { - if (s[3] =3D=3D ' ') AddMatch(id + 46 * n, l + 4, l, matche= s); - } else if (s[2] =3D=3D 't') { - if (s[3] =3D=3D ' ') AddMatch(id + 60 * n, l + 4, l, matche= s); - } else if (s[2] =3D=3D 'n') { - if (s[3] =3D=3D 'd' && s[4] =3D=3D ' ') { - AddMatch(id + 10 * n, l + 5, l, matches); - } - } - } else if (s[1] =3D=3D 'b') { - if (s[2] =3D=3D 'y' && s[3] =3D=3D ' ') { - AddMatch(id + 38 * n, l + 4, l, matches); - } - } else if (s[1] =3D=3D 'i') { - if (s[2] =3D=3D 'n') { - if (s[3] =3D=3D ' ') AddMatch(id + 16 * n, l + 4, l, matche= s); - } else if (s[2] =3D=3D 's') { - if (s[3] =3D=3D ' ') AddMatch(id + 47 * n, l + 4, l, matche= s); - } - } else if (s[1] =3D=3D 'f') { - if (s[2] =3D=3D 'o') { - if (s[3] =3D=3D 'r' && s[4] =3D=3D ' ') { - AddMatch(id + 25 * n, l + 5, l, matches); - } - } else if (s[2] =3D=3D 'r') { - if (s[3] =3D=3D 'o' && s[4] =3D=3D 'm' && s[5] =3D=3D ' ') = { - AddMatch(id + 37 * n, l + 6, l, matches); - } - } - } else if (s[1] =3D=3D 'o') { - if (s[2] =3D=3D 'f') { - if (s[3] =3D=3D ' ') AddMatch(id + 8 * n, l + 4, l, matches= ); - } else if (s[2] =3D=3D 'n') { - if (s[3] =3D=3D ' ') AddMatch(id + 45 * n, l + 4, l, matche= s); - } - } else if (s[1] =3D=3D 'n') { - if (s[2] =3D=3D 'o' && s[3] =3D=3D 't' && s[4] =3D=3D ' ') { - AddMatch(id + 80 * n, l + 5, l, matches); - } - } else if (s[1] =3D=3D 't') { - if (s[2] =3D=3D 'h') { - if (s[3] =3D=3D 'e') { - if (s[4] =3D=3D ' ') AddMatch(id + 5 * n, l + 5, l, match= es); - } else if (s[3] =3D=3D 'a') { - if (s[4] =3D=3D 't' && s[5] =3D=3D ' ') { - AddMatch(id + 29 * n, l + 6, l, matches); - } - } - } else if (s[2] =3D=3D 'o') { - if (s[3] =3D=3D ' ') AddMatch(id + 17 * n, l + 4, l, matche= s); - } - } else if (s[1] =3D=3D 'w') { - if (s[2] =3D=3D 'i' && s[3] =3D=3D 't' && s[4] =3D=3D 'h' && = s[5] =3D=3D ' ') { - AddMatch(id + 35 * n, l + 6, l, matches); - } - } - } else if (s[0] =3D=3D '"') { - AddMatch(id + 19 * n, l + 1, l, matches); - if (s[1] =3D=3D '>') { - AddMatch(id + 21 * n, l + 2, l, matches); - } - } else if (s[0] =3D=3D '.') { - AddMatch(id + 20 * n, l + 1, l, matches); - if (s[1] =3D=3D ' ') { - AddMatch(id + 31 * n, l + 2, l, matches); - if (s[2] =3D=3D 'T' && s[3] =3D=3D 'h') { - if (s[4] =3D=3D 'e') { - if (s[5] =3D=3D ' ') AddMatch(id + 43 * n, l + 6, l, matc= hes); - } else if (s[4] =3D=3D 'i') { - if (s[5] =3D=3D 's' && s[6] =3D=3D ' ') { - AddMatch(id + 75 * n, l + 7, l, matches); - } - } - } - } - } else if (s[0] =3D=3D ',') { - AddMatch(id + 76 * n, l + 1, l, matches); - if (s[1] =3D=3D ' ') { - AddMatch(id + 14 * n, l + 2, l, matches); - } - } else if (s[0] =3D=3D '\n') { - AddMatch(id + 22 * n, l + 1, l, matches); - if (s[1] =3D=3D '\t') { - AddMatch(id + 50 * n, l + 2, l, matches); - } - } else if (s[0] =3D=3D ']') { - AddMatch(id + 24 * n, l + 1, l, matches); - } else if (s[0] =3D=3D '\'') { - AddMatch(id + 36 * n, l + 1, l, matches); - } else if (s[0] =3D=3D ':') { - AddMatch(id + 51 * n, l + 1, l, matches); - } else if (s[0] =3D=3D '(') { - AddMatch(id + 57 * n, l + 1, l, matches); - } else if (s[0] =3D=3D '=3D') { - if (s[1] =3D=3D '"') { - AddMatch(id + 70 * n, l + 2, l, matches); - } else if (s[1] =3D=3D '\'') { - AddMatch(id + 86 * n, l + 2, l, matches); - } - } else if (s[0] =3D=3D 'a') { - if (s[1] =3D=3D 'l' && s[2] =3D=3D ' ') { - AddMatch(id + 84 * n, l + 3, l, matches); - } - } else if (s[0] =3D=3D 'e') { - if (s[1] =3D=3D 'd') { - if (s[2] =3D=3D ' ') AddMatch(id + 53 * n, l + 3, l, matches)= ; - } else if (s[1] =3D=3D 'r') { - if (s[2] =3D=3D ' ') AddMatch(id + 82 * n, l + 3, l, matches)= ; - } else if (s[1] =3D=3D 's') { - if (s[2] =3D=3D 't' && s[3] =3D=3D ' ') { - AddMatch(id + 95 * n, l + 4, l, matches); - } - } - } else if (s[0] =3D=3D 'f') { - if (s[1] =3D=3D 'u' && s[2] =3D=3D 'l' && s[3] =3D=3D ' ') { - AddMatch(id + 90 * n, l + 4, l, matches); - } - } else if (s[0] =3D=3D 'i') { - if (s[1] =3D=3D 'v') { - if (s[2] =3D=3D 'e' && s[3] =3D=3D ' ') { - AddMatch(id + 92 * n, l + 4, l, matches); - } - } else if (s[1] =3D=3D 'z') { - if (s[2] =3D=3D 'e' && s[3] =3D=3D ' ') { - AddMatch(id + 100 * n, l + 4, l, matches); - } - } - } else if (s[0] =3D=3D 'l') { - if (s[1] =3D=3D 'e') { - if (s[2] =3D=3D 's' && s[3] =3D=3D 's' && s[4] =3D=3D ' ') { - AddMatch(id + 93 * n, l + 5, l, matches); - } - } else if (s[1] =3D=3D 'y') { - if (s[2] =3D=3D ' ') AddMatch(id + 61 * n, l + 3, l, matches)= ; - } - } else if (s[0] =3D=3D 'o') { - if (s[1] =3D=3D 'u' && s[2] =3D=3D 's' && s[3] =3D=3D ' ') { - AddMatch(id + 106 * n, l + 4, l, matches); - } - } - } else { - /* Set is_all_caps=3D0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and - is_all_caps=3D1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL) - transform. */ - const BROTLI_BOOL is_all_caps =3D - TO_BROTLI_BOOL(w.transform !=3D BROTLI_TRANSFORM_UPPERCASE_FI= RST); - const uint8_t* s; - if (!IsMatch(dictionary->words, w, data, max_length)) { - continue; - } - /* Transform "" + kUppercase{First,All} + "" */ - AddMatch(id + (is_all_caps ? 44 : 9) * n, l, l, matches); - has_found_match =3D BROTLI_TRUE; - if (l + 1 >=3D max_length) { - continue; - } - /* Transforms "" + kUppercase{First,All} + */ - s =3D &data[l]; - if (s[0] =3D=3D ' ') { - AddMatch(id + (is_all_caps ? 68 : 4) * n, l + 1, l, matches); - } else if (s[0] =3D=3D '"') { - AddMatch(id + (is_all_caps ? 87 : 66) * n, l + 1, l, matches); - if (s[1] =3D=3D '>') { - AddMatch(id + (is_all_caps ? 97 : 69) * n, l + 2, l, matches)= ; - } - } else if (s[0] =3D=3D '.') { - AddMatch(id + (is_all_caps ? 101 : 79) * n, l + 1, l, matches); - if (s[1] =3D=3D ' ') { - AddMatch(id + (is_all_caps ? 114 : 88) * n, l + 2, l, matches= ); - } - } else if (s[0] =3D=3D ',') { - AddMatch(id + (is_all_caps ? 112 : 99) * n, l + 1, l, matches); - if (s[1] =3D=3D ' ') { - AddMatch(id + (is_all_caps ? 107 : 58) * n, l + 2, l, matches= ); - } - } else if (s[0] =3D=3D '\'') { - AddMatch(id + (is_all_caps ? 94 : 74) * n, l + 1, l, matches); - } else if (s[0] =3D=3D '(') { - AddMatch(id + (is_all_caps ? 113 : 78) * n, l + 1, l, matches); - } else if (s[0] =3D=3D '=3D') { - if (s[1] =3D=3D '"') { - AddMatch(id + (is_all_caps ? 105 : 104) * n, l + 2, l, matche= s); - } else if (s[1] =3D=3D '\'') { - AddMatch(id + (is_all_caps ? 116 : 108) * n, l + 2, l, matche= s); - } - } - } - } - } - /* Transforms with prefixes " " and "." */ - if (max_length >=3D 5 && (data[0] =3D=3D ' ' || data[0] =3D=3D '.')) { - BROTLI_BOOL is_space =3D TO_BROTLI_BOOL(data[0] =3D=3D ' '); - size_t offset =3D dictionary->buckets[Hash(&data[1])]; - BROTLI_BOOL end =3D !offset; - while (!end) { - DictWord w =3D dictionary->dict_words[offset++]; - const size_t l =3D w.len & 0x1F; - const size_t n =3D (size_t)1 << dictionary->words->size_bits_by_len= gth[l]; - const size_t id =3D w.idx; - end =3D !!(w.len & 0x80); - w.len =3D (uint8_t)l; - if (w.transform =3D=3D 0) { - const uint8_t* s; - if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) { - continue; - } - /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + "" and - "." + BROTLI_TRANSFORM_IDENTITY + "" */ - AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches); - has_found_match =3D BROTLI_TRUE; - if (l + 2 >=3D max_length) { - continue; - } - /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + and - "." + BROTLI_TRANSFORM_IDENTITY + - */ - s =3D &data[l + 1]; - if (s[0] =3D=3D ' ') { - AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches); - } else if (s[0] =3D=3D '(') { - AddMatch(id + (is_space ? 89 : 67) * n, l + 2, l, matches); - } else if (is_space) { - if (s[0] =3D=3D ',') { - AddMatch(id + 103 * n, l + 2, l, matches); - if (s[1] =3D=3D ' ') { - AddMatch(id + 33 * n, l + 3, l, matches); - } - } else if (s[0] =3D=3D '.') { - AddMatch(id + 71 * n, l + 2, l, matches); - if (s[1] =3D=3D ' ') { - AddMatch(id + 52 * n, l + 3, l, matches); - } - } else if (s[0] =3D=3D '=3D') { - if (s[1] =3D=3D '"') { - AddMatch(id + 81 * n, l + 3, l, matches); - } else if (s[1] =3D=3D '\'') { - AddMatch(id + 98 * n, l + 3, l, matches); - } - } - } - } else if (is_space) { - /* Set is_all_caps=3D0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and - is_all_caps=3D1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL) - transform. */ - const BROTLI_BOOL is_all_caps =3D - TO_BROTLI_BOOL(w.transform !=3D BROTLI_TRANSFORM_UPPERCASE_FI= RST); - const uint8_t* s; - if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) { - continue; - } - /* Transforms " " + kUppercase{First,All} + "" */ - AddMatch(id + (is_all_caps ? 85 : 30) * n, l + 1, l, matches); - has_found_match =3D BROTLI_TRUE; - if (l + 2 >=3D max_length) { - continue; - } - /* Transforms " " + kUppercase{First,All} + */ - s =3D &data[l + 1]; - if (s[0] =3D=3D ' ') { - AddMatch(id + (is_all_caps ? 83 : 15) * n, l + 2, l, matches); - } else if (s[0] =3D=3D ',') { - if (!is_all_caps) { - AddMatch(id + 109 * n, l + 2, l, matches); - } - if (s[1] =3D=3D ' ') { - AddMatch(id + (is_all_caps ? 111 : 65) * n, l + 3, l, matches= ); - } - } else if (s[0] =3D=3D '.') { - AddMatch(id + (is_all_caps ? 115 : 96) * n, l + 2, l, matches); - if (s[1] =3D=3D ' ') { - AddMatch(id + (is_all_caps ? 117 : 91) * n, l + 3, l, matches= ); - } - } else if (s[0] =3D=3D '=3D') { - if (s[1] =3D=3D '"') { - AddMatch(id + (is_all_caps ? 110 : 118) * n, l + 3, l, matche= s); - } else if (s[1] =3D=3D '\'') { - AddMatch(id + (is_all_caps ? 119 : 120) * n, l + 3, l, matche= s); - } - } - } - } - } - if (max_length >=3D 6) { - /* Transforms with prefixes "e ", "s ", ", " and "\xC2\xA0" */ - if ((data[1] =3D=3D ' ' && - (data[0] =3D=3D 'e' || data[0] =3D=3D 's' || data[0] =3D=3D ',')= ) || - (data[0] =3D=3D 0xC2 && data[1] =3D=3D 0xA0)) { - size_t offset =3D dictionary->buckets[Hash(&data[2])]; - BROTLI_BOOL end =3D !offset; - while (!end) { - DictWord w =3D dictionary->dict_words[offset++]; - const size_t l =3D w.len & 0x1F; - const size_t n =3D (size_t)1 << dictionary->words->size_bits_by_l= ength[l]; - const size_t id =3D w.idx; - end =3D !!(w.len & 0x80); - w.len =3D (uint8_t)l; - if (w.transform =3D=3D 0 && - IsMatch(dictionary->words, w, &data[2], max_length - 2)) { - if (data[0] =3D=3D 0xC2) { - AddMatch(id + 102 * n, l + 2, l, matches); - has_found_match =3D BROTLI_TRUE; - } else if (l + 2 < max_length && data[l + 2] =3D=3D ' ') { - size_t t =3D data[0] =3D=3D 'e' ? 18 : (data[0] =3D=3D 's' ? = 7 : 13); - AddMatch(id + t * n, l + 3, l, matches); - has_found_match =3D BROTLI_TRUE; - } - } - } - } - } - if (max_length >=3D 9) { - /* Transforms with prefixes " the " and ".com/" */ - if ((data[0] =3D=3D ' ' && data[1] =3D=3D 't' && data[2] =3D=3D 'h' &= & - data[3] =3D=3D 'e' && data[4] =3D=3D ' ') || - (data[0] =3D=3D '.' && data[1] =3D=3D 'c' && data[2] =3D=3D 'o' &= & - data[3] =3D=3D 'm' && data[4] =3D=3D '/')) { - size_t offset =3D dictionary->buckets[Hash(&data[5])]; - BROTLI_BOOL end =3D !offset; - while (!end) { - DictWord w =3D dictionary->dict_words[offset++]; - const size_t l =3D w.len & 0x1F; - const size_t n =3D (size_t)1 << dictionary->words->size_bits_by_l= ength[l]; - const size_t id =3D w.idx; - end =3D !!(w.len & 0x80); - w.len =3D (uint8_t)l; - if (w.transform =3D=3D 0 && - IsMatch(dictionary->words, w, &data[5], max_length - 5)) { - AddMatch(id + (data[0] =3D=3D ' ' ? 41 : 72) * n, l + 5, l, mat= ches); - has_found_match =3D BROTLI_TRUE; - if (l + 5 < max_length) { - const uint8_t* s =3D &data[l + 5]; - if (data[0] =3D=3D ' ') { - if (l + 8 < max_length && - s[0] =3D=3D ' ' && s[1] =3D=3D 'o' && s[2] =3D=3D 'f' &= & s[3] =3D=3D ' ') { - AddMatch(id + 62 * n, l + 9, l, matches); - if (l + 12 < max_length && - s[4] =3D=3D 't' && s[5] =3D=3D 'h' && s[6] =3D=3D 'e'= && s[7] =3D=3D ' ') { - AddMatch(id + 73 * n, l + 13, l, matches); - } - } - } - } - } - } - } - } - return has_found_match; -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c b/BaseTools= /Source/C/BrotliCompress/enc/utf8_util.c deleted file mode 100644 index 9d21aa9fa3ed..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Heuristics for deciding about the UTF8-ness of strings. */ - -#include "./utf8_util.h" - -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static size_t BrotliParseAsUTF8( - int* symbol, const uint8_t* input, size_t size) { - /* ASCII */ - if ((input[0] & 0x80) =3D=3D 0) { - *symbol =3D input[0]; - if (*symbol > 0) { - return 1; - } - } - /* 2-byte UTF8 */ - if (size > 1u && - (input[0] & 0xE0) =3D=3D 0xC0 && - (input[1] & 0xC0) =3D=3D 0x80) { - *symbol =3D (((input[0] & 0x1F) << 6) | - (input[1] & 0x3F)); - if (*symbol > 0x7F) { - return 2; - } - } - /* 3-byte UFT8 */ - if (size > 2u && - (input[0] & 0xF0) =3D=3D 0xE0 && - (input[1] & 0xC0) =3D=3D 0x80 && - (input[2] & 0xC0) =3D=3D 0x80) { - *symbol =3D (((input[0] & 0x0F) << 12) | - ((input[1] & 0x3F) << 6) | - (input[2] & 0x3F)); - if (*symbol > 0x7FF) { - return 3; - } - } - /* 4-byte UFT8 */ - if (size > 3u && - (input[0] & 0xF8) =3D=3D 0xF0 && - (input[1] & 0xC0) =3D=3D 0x80 && - (input[2] & 0xC0) =3D=3D 0x80 && - (input[3] & 0xC0) =3D=3D 0x80) { - *symbol =3D (((input[0] & 0x07) << 18) | - ((input[1] & 0x3F) << 12) | - ((input[2] & 0x3F) << 6) | - (input[3] & 0x3F)); - if (*symbol > 0xFFFF && *symbol <=3D 0x10FFFF) { - return 4; - } - } - /* Not UTF8, emit a special symbol above the UTF8-code space */ - *symbol =3D 0x110000 | input[0]; - return 1; -} - -/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/ -BROTLI_BOOL BrotliIsMostlyUTF8( - const uint8_t* data, const size_t pos, const size_t mask, - const size_t length, const double min_fraction) { - size_t size_utf8 =3D 0; - size_t i =3D 0; - while (i < length) { - int symbol; - size_t bytes_read =3D - BrotliParseAsUTF8(&symbol, &data[(pos + i) & mask], length - i); - i +=3D bytes_read; - if (symbol < 0x110000) size_utf8 +=3D bytes_read; - } - return TO_BROTLI_BOOL(size_utf8 > min_fraction * (double)length); -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif diff --git a/BaseTools/Source/C/BrotliCompress/tools/brotli.c b/BaseTools/= Source/C/BrotliCompress/tools/brotli.c deleted file mode 100644 index b0246e1ecf86..000000000000 --- a/BaseTools/Source/C/BrotliCompress/tools/brotli.c +++ /dev/null @@ -1,1143 +0,0 @@ -/* Copyright 2014 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Command line interface for Brotli library. */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "../common/constants.h" -#include "../common/version.h" -#include -#include - -#if !defined(_WIN32) -#include -#include -#define MAKE_BINARY(FILENO) (FILENO) -#else -#include -#include -#include - -#define MAKE_BINARY(FILENO) (_setmode((FILENO), _O_BINARY), (FILENO)) - -#if !defined(__MINGW32__) -#define STDIN_FILENO _fileno(stdin) -#define STDOUT_FILENO _fileno(stdout) -#define S_IRUSR S_IREAD -#define S_IWUSR S_IWRITE -#endif - -#define fdopen _fdopen -#define isatty _isatty -#define unlink _unlink -#define utimbuf _utimbuf -#define utime _utime - -#define fopen ms_fopen -#define open ms_open - -#define chmod(F, P) (0) -#define chown(F, O, G) (0) - -#if defined(_MSC_VER) && (_MSC_VER >=3D 1400) -#define fseek _fseeki64 -#define ftell _ftelli64 -#endif - -static FILE* ms_fopen(const char* filename, const char* mode) { - FILE* result =3D 0; - fopen_s(&result, filename, mode); - return result; -} - -static int ms_open(const char* filename, int oflag, int pmode) { - int result =3D -1; - _sopen_s(&result, filename, oflag | O_BINARY, _SH_DENYNO, pmode); - return result; -} -#endif /* WIN32 */ - -typedef enum { - COMMAND_COMPRESS, - COMMAND_DECOMPRESS, - COMMAND_HELP, - COMMAND_INVALID, - COMMAND_TEST_INTEGRITY, - COMMAND_NOOP, - COMMAND_VERSION -} Command; - -#define DEFAULT_LGWIN 24 -#define DEFAULT_SUFFIX ".br" -#define MAX_OPTIONS 20 -#define DECODE_HEADER_SIZE 0x10 -#define GAP_MEM_BLOCK 0x1000 - -typedef struct { - /* Parameters */ - int gmem; - int quality; - int lgwin; - BROTLI_BOOL force_overwrite; - BROTLI_BOOL junk_source; - BROTLI_BOOL copy_stat; - BROTLI_BOOL verbose; - BROTLI_BOOL write_to_stdout; - BROTLI_BOOL test_integrity; - BROTLI_BOOL decompress; - BROTLI_BOOL large_window; - const char* output_path; - const char* suffix; - int not_input_indices[MAX_OPTIONS]; - size_t longest_path_len; - size_t input_count; - - /* Inner state */ - int argc; - char** argv; - char* modified_path; /* Storage for path with appended / cut suffix */ - int iterator; - int ignore; - BROTLI_BOOL iterator_error; - uint8_t* buffer; - uint8_t* input; - uint8_t* output; - const char* current_input_path; - const char* current_output_path; - int64_t input_file_length; /* -1, if impossible to calculate */ - FILE* fin; - FILE* fout; - - /* I/O buffers */ - size_t available_in; - const uint8_t* next_in; - size_t available_out; - uint8_t* next_out; -} Context; - -/* Parse up to 5 decimal digits. */ -static BROTLI_BOOL ParseInt(const char* s, int low, int high, int* result= ) { - int value =3D 0; - int i; - for (i =3D 0; i < 5; ++i) { - char c =3D s[i]; - if (c =3D=3D 0) break; - if (s[i] < '0' || s[i] > '9') return BROTLI_FALSE; - value =3D (10 * value) + (c - '0'); - } - if (i =3D=3D 0) return BROTLI_FALSE; - if (i > 1 && s[0] =3D=3D '0') return BROTLI_FALSE; - if (s[i] !=3D 0) return BROTLI_FALSE; - if (value < low || value > high) return BROTLI_FALSE; - *result =3D value; - return BROTLI_TRUE; -} - -/* Returns "base file name" or its tail, if it contains '/' or '\'. */ -static const char* FileName(const char* path) { - const char* separator_position =3D strrchr(path, '/'); - if (separator_position) path =3D separator_position + 1; - separator_position =3D strrchr(path, '\\'); - if (separator_position) path =3D separator_position + 1; - return path; -} - -/* Detect if the program name is a special alias that infers a command ty= pe. */ -static Command ParseAlias(const char* name) { - /* TODO: cast name to lower case? */ - const char* unbrotli =3D "unbrotli"; - size_t unbrotli_len =3D strlen(unbrotli); - name =3D FileName(name); - /* Partial comparison. On Windows there could be ".exe" suffix. */ - if (strncmp(name, unbrotli, unbrotli_len) =3D=3D 0) { - char terminator =3D name[unbrotli_len]; - if (terminator =3D=3D 0 || terminator =3D=3D '.') return COMMAND_DECO= MPRESS; - } - return COMMAND_COMPRESS; -} - -static Command ParseParams(Context* params) { - int argc =3D params->argc; - char** argv =3D params->argv; - int i; - int next_option_index =3D 0; - size_t input_count =3D 0; - size_t longest_path_len =3D 1; - BROTLI_BOOL command_set =3D BROTLI_FALSE; - BROTLI_BOOL gmem_set =3D BROTLI_FALSE; - BROTLI_BOOL quality_set =3D BROTLI_FALSE; - BROTLI_BOOL output_set =3D BROTLI_FALSE; - BROTLI_BOOL keep_set =3D BROTLI_FALSE; - BROTLI_BOOL lgwin_set =3D BROTLI_FALSE; - BROTLI_BOOL suffix_set =3D BROTLI_FALSE; - BROTLI_BOOL after_dash_dash =3D BROTLI_FALSE; - Command command =3D ParseAlias(argv[0]); - - for (i =3D 1; i < argc; ++i) { - const char* arg =3D argv[i]; - /* C99 5.1.2.2.1: "members argv[0] through argv[argc-1] inclusive sha= ll - contain pointers to strings"; NULL and 0-length are not forbidden.= */ - size_t arg_len =3D arg ? strlen(arg) : 0; - - if (arg_len =3D=3D 0) { - params->not_input_indices[next_option_index++] =3D i; - continue; - } - - /* Too many options. The expected longest option list is: - "-q 0 -w 10 -o f -D d -S b -d -f -k -n -v --", i.e. 16 items in to= tal. - This check is an additional guard that is never triggered, but pro= vides - a guard for future changes. */ - if (next_option_index > (MAX_OPTIONS - 2)) { - fprintf(stderr, "too many options passed\n"); - return COMMAND_INVALID; - } - - /* Input file entry. */ - if (after_dash_dash || arg[0] !=3D '-' || arg_len =3D=3D 1) { - input_count++; - if (longest_path_len < arg_len) longest_path_len =3D arg_len; - continue; - } - - /* Not a file entry. */ - params->not_input_indices[next_option_index++] =3D i; - - /* '--' entry stop parsing arguments. */ - if (arg_len =3D=3D 2 && arg[1] =3D=3D '-') { - after_dash_dash =3D BROTLI_TRUE; - continue; - } - - /* Simple / coalesced options. */ - if (arg[1] !=3D '-') { - size_t j; - for (j =3D 1; j < arg_len; ++j) { - char c =3D arg[j]; - if (c >=3D '0' && c <=3D '9') { - if (quality_set) { - fprintf(stderr, "quality already set\n"); - return COMMAND_INVALID; - } - quality_set =3D BROTLI_TRUE; - params->quality =3D c - '0'; - continue; - } else if (c =3D=3D 'c') { - if (output_set) { - fprintf(stderr, "write to standard output already set\n"); - return COMMAND_INVALID; - } - output_set =3D BROTLI_TRUE; - params->write_to_stdout =3D BROTLI_TRUE; - continue; - } else if (c =3D=3D 'd') { - if (command_set) { - fprintf(stderr, "command already set when parsing -d\n"); - return COMMAND_INVALID; - } - command_set =3D BROTLI_TRUE; - command =3D COMMAND_DECOMPRESS; - continue; - } else if (c =3D=3D 'f') { - if (params->force_overwrite) { - fprintf(stderr, "force output overwrite already set\n"); - return COMMAND_INVALID; - } - params->force_overwrite =3D BROTLI_TRUE; - continue; - } else if (c =3D=3D 'h') { - /* Don't parse further. */ - return COMMAND_HELP; - } else if (c =3D=3D 'j' || c =3D=3D 'k') { - if (keep_set) { - fprintf(stderr, "argument --rm / -j or --keep / -n already se= t\n"); - return COMMAND_INVALID; - } - keep_set =3D BROTLI_TRUE; - params->junk_source =3D TO_BROTLI_BOOL(c =3D=3D 'j'); - continue; - } else if (c =3D=3D 'n') { - if (!params->copy_stat) { - fprintf(stderr, "argument --no-copy-stat / -n already set\n")= ; - return COMMAND_INVALID; - } - params->copy_stat =3D BROTLI_FALSE; - continue; - } else if (c =3D=3D 't') { - if (command_set) { - fprintf(stderr, "command already set when parsing -t\n"); - return COMMAND_INVALID; - } - command_set =3D BROTLI_TRUE; - command =3D COMMAND_TEST_INTEGRITY; - continue; - } else if (c =3D=3D 'v') { - if (params->verbose) { - fprintf(stderr, "argument --verbose / -v already set\n"); - return COMMAND_INVALID; - } - params->verbose =3D BROTLI_TRUE; - continue; - } else if (c =3D=3D 'V') { - /* Don't parse further. */ - return COMMAND_VERSION; - } else if (c =3D=3D 'Z') { - if (quality_set) { - fprintf(stderr, "quality already set\n"); - return COMMAND_INVALID; - } - quality_set =3D BROTLI_TRUE; - params->quality =3D 11; - continue; - } - /* o/q/w/D/S with parameter is expected */ - if (c !=3D 'o' && c !=3D 'q' && c !=3D 'w' && c !=3D 'D' && c != =3D 'S') { - fprintf(stderr, "invalid argument -%c\n", c); - return COMMAND_INVALID; - } - if (j + 1 !=3D arg_len) { - fprintf(stderr, "expected parameter for argument -%c\n", c); - return COMMAND_INVALID; - } - i++; - if (i =3D=3D argc || !argv[i] || argv[i][0] =3D=3D 0) { - fprintf(stderr, "expected parameter for argument -%c\n", c); - return COMMAND_INVALID; - } - params->not_input_indices[next_option_index++] =3D i; - if (c =3D=3D 'o') { - if (output_set) { - fprintf(stderr, "write to standard output already set (-o)\n"= ); - return COMMAND_INVALID; - } - params->output_path =3D argv[i]; - } else if (c =3D=3D 'g') { - gmem_set =3D ParseInt(argv[i], 1, 0x10, ¶ms->gmem); - if (!gmem_set) { - fprintf(stderr, "error parsing gmem value [%s]\n", argv[i]); - return COMMAND_INVALID; - } - } else if (c =3D=3D 'q') { - if (quality_set) { - fprintf(stderr, "quality already set\n"); - return COMMAND_INVALID; - } - quality_set =3D ParseInt(argv[i], BROTLI_MIN_QUALITY, - BROTLI_MAX_QUALITY, ¶ms->quality); - if (!quality_set) { - fprintf(stderr, "error parsing quality value [%s]\n", argv[i]= ); - return COMMAND_INVALID; - } - } else if (c =3D=3D 'w') { - if (lgwin_set) { - fprintf(stderr, "lgwin parameter already set\n"); - return COMMAND_INVALID; - } - lgwin_set =3D ParseInt(argv[i], 0, - BROTLI_MAX_WINDOW_BITS, ¶ms->lgwin); - if (!lgwin_set) { - fprintf(stderr, "error parsing lgwin value [%s]\n", argv[i]); - return COMMAND_INVALID; - } - if (params->lgwin !=3D 0 && params->lgwin < BROTLI_MIN_WINDOW_B= ITS) { - fprintf(stderr, - "lgwin parameter (%d) smaller than the minimum (%d)\n= ", - params->lgwin, BROTLI_MIN_WINDOW_BITS); - return COMMAND_INVALID; - } - } else if (c =3D=3D 'S') { - if (suffix_set) { - fprintf(stderr, "suffix already set\n"); - return COMMAND_INVALID; - } - suffix_set =3D BROTLI_TRUE; - params->suffix =3D argv[i]; - } - } - } else { /* Double-dash. */ - arg =3D &arg[2]; - if (strcmp("best", arg) =3D=3D 0) { - if (quality_set) { - fprintf(stderr, "quality already set\n"); - return COMMAND_INVALID; - } - quality_set =3D BROTLI_TRUE; - params->quality =3D 11; - } else if (strcmp("decompress", arg) =3D=3D 0) { - if (command_set) { - fprintf(stderr, "command already set when parsing --decompress\= n"); - return COMMAND_INVALID; - } - command_set =3D BROTLI_TRUE; - command =3D COMMAND_DECOMPRESS; - } else if (strcmp("force", arg) =3D=3D 0) { - if (params->force_overwrite) { - fprintf(stderr, "force output overwrite already set\n"); - return COMMAND_INVALID; - } - params->force_overwrite =3D BROTLI_TRUE; - } else if (strcmp("help", arg) =3D=3D 0) { - /* Don't parse further. */ - return COMMAND_HELP; - } else if (strcmp("keep", arg) =3D=3D 0) { - if (keep_set) { - fprintf(stderr, "argument --rm / -j or --keep / -n already set\= n"); - return COMMAND_INVALID; - } - keep_set =3D BROTLI_TRUE; - params->junk_source =3D BROTLI_FALSE; - } else if (strcmp("no-copy-stat", arg) =3D=3D 0) { - if (!params->copy_stat) { - fprintf(stderr, "argument --no-copy-stat / -n already set\n"); - return COMMAND_INVALID; - } - params->copy_stat =3D BROTLI_FALSE; - } else if (strcmp("rm", arg) =3D=3D 0) { - if (keep_set) { - fprintf(stderr, "argument --rm / -j or --keep / -n already set\= n"); - return COMMAND_INVALID; - } - keep_set =3D BROTLI_TRUE; - params->junk_source =3D BROTLI_TRUE; - } else if (strcmp("stdout", arg) =3D=3D 0) { - if (output_set) { - fprintf(stderr, "write to standard output already set\n"); - return COMMAND_INVALID; - } - output_set =3D BROTLI_TRUE; - params->write_to_stdout =3D BROTLI_TRUE; - } else if (strcmp("test", arg) =3D=3D 0) { - if (command_set) { - fprintf(stderr, "command already set when parsing --test\n"); - return COMMAND_INVALID; - } - command_set =3D BROTLI_TRUE; - command =3D COMMAND_TEST_INTEGRITY; - } else if (strcmp("verbose", arg) =3D=3D 0) { - if (params->verbose) { - fprintf(stderr, "argument --verbose / -v already set\n"); - return COMMAND_INVALID; - } - params->verbose =3D BROTLI_TRUE; - } else if (strcmp("version", arg) =3D=3D 0) { - /* Don't parse further. */ - return COMMAND_VERSION; - } else { - /* key=3Dvalue */ - const char* value =3D strrchr(arg, '=3D'); - size_t key_len; - if (!value || value[1] =3D=3D 0) { - fprintf(stderr, "must pass the parameter as --%s=3Dvalue\n", ar= g); - return COMMAND_INVALID; - } - key_len =3D (size_t)(value - arg); - value++; - if (strncmp("lgwin", arg, key_len) =3D=3D 0) { - if (lgwin_set) { - fprintf(stderr, "lgwin parameter already set\n"); - return COMMAND_INVALID; - } - lgwin_set =3D ParseInt(value, 0, - BROTLI_MAX_WINDOW_BITS, ¶ms->lgwin); - if (!lgwin_set) { - fprintf(stderr, "error parsing lgwin value [%s]\n", value); - return COMMAND_INVALID; - } - if (params->lgwin !=3D 0 && params->lgwin < BROTLI_MIN_WINDOW_B= ITS) { - fprintf(stderr, - "lgwin parameter (%d) smaller than the minimum (%d)\n= ", - params->lgwin, BROTLI_MIN_WINDOW_BITS); - return COMMAND_INVALID; - } - } else if (strncmp("large_window", arg, key_len) =3D=3D 0) { - /* This option is intentionally not mentioned in help. */ - if (lgwin_set) { - fprintf(stderr, "lgwin parameter already set\n"); - return COMMAND_INVALID; - } - lgwin_set =3D ParseInt(value, 0, - BROTLI_LARGE_MAX_WINDOW_BITS, ¶ms->lgw= in); - if (!lgwin_set) { - fprintf(stderr, "error parsing lgwin value [%s]\n", value); - return COMMAND_INVALID; - } - if (params->lgwin !=3D 0 && params->lgwin < BROTLI_MIN_WINDOW_B= ITS) { - fprintf(stderr, - "lgwin parameter (%d) smaller than the minimum (%d)\n= ", - params->lgwin, BROTLI_MIN_WINDOW_BITS); - return COMMAND_INVALID; - } - } else if (strncmp("output", arg, key_len) =3D=3D 0) { - if (output_set) { - fprintf(stderr, - "write to standard output already set (--output)\n"); - return COMMAND_INVALID; - } - params->output_path =3D value; - } else if (strncmp("gap", arg, key_len) =3D=3D 0) { - gmem_set =3D ParseInt(value, 1, 0x10, ¶ms->gmem); - if (!gmem_set) { - fprintf(stderr, "error parsing gmem value [%s]\n", value); - return COMMAND_INVALID; - } - } else if (strncmp("quality", arg, key_len) =3D=3D 0) { - if (quality_set) { - fprintf(stderr, "quality already set\n"); - return COMMAND_INVALID; - } - quality_set =3D ParseInt(value, BROTLI_MIN_QUALITY, - BROTLI_MAX_QUALITY, ¶ms->quality); - if (!quality_set) { - fprintf(stderr, "error parsing quality value [%s]\n", value); - return COMMAND_INVALID; - } - } else if (strncmp("suffix", arg, key_len) =3D=3D 0) { - if (suffix_set) { - fprintf(stderr, "suffix already set\n"); - return COMMAND_INVALID; - } - suffix_set =3D BROTLI_TRUE; - params->suffix =3D value; - } else { - fprintf(stderr, "invalid parameter: [%s]\n", arg); - return COMMAND_INVALID; - } - } - } - } - - params->input_count =3D input_count; - params->longest_path_len =3D longest_path_len; - params->decompress =3D (command =3D=3D COMMAND_DECOMPRESS); - params->test_integrity =3D (command =3D=3D COMMAND_TEST_INTEGRITY); - - if (input_count > 1 && output_set) return COMMAND_INVALID; - if (params->test_integrity) { - if (params->output_path) return COMMAND_INVALID; - if (params->write_to_stdout) return COMMAND_INVALID; - } - if (strchr(params->suffix, '/') || strchr(params->suffix, '\\')) { - return COMMAND_INVALID; - } - - return command; -} - -static void PrintVersion(void) { - int major =3D BROTLI_VERSION >> 24; - int minor =3D (BROTLI_VERSION >> 12) & 0xFFF; - int patch =3D BROTLI_VERSION & 0xFFF; - fprintf(stdout, "brotli %d.%d.%d\n", major, minor, patch); -} - -static void PrintHelp(const char* name, BROTLI_BOOL error) { - FILE* media =3D error ? stderr : stdout; - /* String is cut to pieces with length less than 509, to conform C90 sp= ec. */ - fprintf(media, -"Usage: %s [OPTION]... [FILE]...\n", - name); - fprintf(media, -"Options:\n" -" -# compression level (0-9)\n" -" -c, --stdout write on standard output\n" -" -d, --decompress decompress\n" -" -f, --force force output file overwrite\n" -" -h, --help display this help and exit\n"); - fprintf(media, -" -j, --rm remove source file(s)\n" -" -k, --keep keep source file(s) (default)\n" -" -n, --no-copy-stat do not copy source file(s) attributes\n" -" -o FILE, --output=3DFILE output file (only if 1 input file)\n"); - fprintf(media, -" -g NUM, --gap=3DNUM scratch memory gap level (1-16)\n"); - fprintf(media, -" -q NUM, --quality=3DNUM compression level (%d-%d)\n", - BROTLI_MIN_QUALITY, BROTLI_MAX_QUALITY); - fprintf(media, -" -t, --test test compressed file integrity\n" -" -v, --verbose verbose mode\n"); - fprintf(media, -" -w NUM, --lgwin=3DNUM set LZ77 window size (0, %d-%d)\n", - BROTLI_MIN_WINDOW_BITS, BROTLI_MAX_WINDOW_BITS); - fprintf(media, -" window size =3D 2**NUM - 16\n" -" 0 lets compressor choose the optimal value= \n"); - fprintf(media, -" -S SUF, --suffix=3DSUF output file suffix (default:'%s')\n", - DEFAULT_SUFFIX); - fprintf(media, -" -V, --version display version and exit\n" -" -Z, --best use best compression level (11) (default)\= n" -"Simple options could be coalesced, i.e. '-9kf' is equivalent to '-9 -k -= f'.\n" -"With no FILE, or when FILE is -, read standard input.\n" -"All arguments after '--' are treated as files.\n"); -} - -static const char* PrintablePath(const char* path) { - return path ? path : "con"; -} - -static BROTLI_BOOL OpenInputFile(const char* input_path, FILE** f) { - *f =3D NULL; - if (!input_path) { - *f =3D fdopen(MAKE_BINARY(STDIN_FILENO), "rb"); - return BROTLI_TRUE; - } - *f =3D fopen(input_path, "rb"); - if (!*f) { - fprintf(stderr, "failed to open input file [%s]: %s\n", - PrintablePath(input_path), strerror(errno)); - return BROTLI_FALSE; - } - return BROTLI_TRUE; -} - -static BROTLI_BOOL OpenOutputFile(const char* output_path, FILE** f, - BROTLI_BOOL force) { - int fd; - *f =3D NULL; - if (!output_path) { - *f =3D fdopen(MAKE_BINARY(STDOUT_FILENO), "wb"); - return BROTLI_TRUE; - } - fd =3D open(output_path, O_CREAT | (force ? 0 : O_EXCL) | O_WRONLY | O_= TRUNC, - S_IRUSR | S_IWUSR); - if (fd < 0) { - fd =3D open(output_path, (force ? 0 : O_EXCL) | O_WRONLY | O_TRUNC, - S_IRUSR | S_IWUSR); - if (fd < 0) { - fprintf(stderr, "failed to open output file [%s]: %s\n", - PrintablePath(output_path), strerror(errno)); - return BROTLI_FALSE; - } - } - - *f =3D fdopen(fd, "wb"); - if (!*f) { - fprintf(stderr, "failed to open output file [%s]: %s\n", - PrintablePath(output_path), strerror(errno)); - return BROTLI_FALSE; - } - return BROTLI_TRUE; -} - -static int64_t FileSize(const char* path) { - FILE* f =3D fopen(path, "rb"); - int64_t retval; - if (f =3D=3D NULL) { - return -1; - } - if (fseek(f, 0L, SEEK_END) !=3D 0) { - fclose(f); - return -1; - } - retval =3D ftell(f); - if (fclose(f) !=3D 0) { - return -1; - } - return retval; -} - -/* Copy file times and permissions. - TODO: this is a "best effort" implementation; honest cross-platform - fully featured implementation is way too hacky; add more hacks by requ= est. */ -static void CopyStat(const char* input_path, const char* output_path) { - struct stat statbuf; - struct utimbuf times; - int res; - if (input_path =3D=3D 0 || output_path =3D=3D 0) { - return; - } - if (stat(input_path, &statbuf) !=3D 0) { - return; - } - times.actime =3D statbuf.st_atime; - times.modtime =3D statbuf.st_mtime; - utime(output_path, ×); - res =3D chmod(output_path, statbuf.st_mode & (S_IRWXU | S_IRWXG | S_IRW= XO)); - if (res !=3D 0) { - fprintf(stderr, "setting access bits failed for [%s]: %s\n", - PrintablePath(output_path), strerror(errno)); - } - res =3D chown(output_path, (uid_t)-1, statbuf.st_gid); - if (res !=3D 0) { - fprintf(stderr, "setting group failed for [%s]: %s\n", - PrintablePath(output_path), strerror(errno)); - } - res =3D chown(output_path, statbuf.st_uid, (gid_t)-1); - if (res !=3D 0) { - fprintf(stderr, "setting user failed for [%s]: %s\n", - PrintablePath(output_path), strerror(errno)); - } -} - -int64_t input_file_length =3D 0; - -static BROTLI_BOOL NextFile(Context* context) { - const char* arg; - size_t arg_len; - - /* Iterator points to last used arg; increment to search for the next o= ne. */ - context->iterator++; - - context->input_file_length =3D -1; - - /* No input path; read from console. */ - if (context->input_count =3D=3D 0) { - if (context->iterator > 1) return BROTLI_FALSE; - context->current_input_path =3D NULL; - /* Either write to the specified path, or to console. */ - context->current_output_path =3D context->output_path; - return BROTLI_TRUE; - } - - /* Skip option arguments. */ - while (context->iterator =3D=3D context->not_input_indices[context->ign= ore]) { - context->iterator++; - context->ignore++; - } - - /* All args are scanned already. */ - if (context->iterator >=3D context->argc) return BROTLI_FALSE; - - /* Iterator now points to the input file name. */ - arg =3D context->argv[context->iterator]; - arg_len =3D strlen(arg); - /* Read from console. */ - if (arg_len =3D=3D 1 && arg[0] =3D=3D '-') { - context->current_input_path =3D NULL; - context->current_output_path =3D context->output_path; - return BROTLI_TRUE; - } - - if (context->current_input_path =3D=3D NULL) { - context->current_input_path =3D arg; - } - context->input_file_length =3D FileSize(context->current_input_path); - context->current_output_path =3D context->output_path; - if (!context->decompress) { - input_file_length +=3D context->input_file_length; - } - - if (context->output_path) return BROTLI_TRUE; - if (context->write_to_stdout) return BROTLI_TRUE; - - strcpy(context->modified_path, arg); - context->current_output_path =3D context->modified_path; - /* If output is not specified, input path suffix should match. */ - if (context->decompress) { - size_t suffix_len =3D strlen(context->suffix); - char* name =3D (char*)FileName(context->modified_path); - char* name_suffix; - size_t name_len =3D strlen(name); - if (name_len < suffix_len + 1) { - fprintf(stderr, "empty output file name for [%s] input file\n", - PrintablePath(arg)); - context->iterator_error =3D BROTLI_TRUE; - return BROTLI_FALSE; - } - name_suffix =3D name + name_len - suffix_len; - if (strcmp(context->suffix, name_suffix) !=3D 0) { - fprintf(stderr, "input file [%s] suffix mismatch\n", - PrintablePath(arg)); - context->iterator_error =3D BROTLI_TRUE; - return BROTLI_FALSE; - } - name_suffix[0] =3D 0; - return BROTLI_TRUE; - } else { - strcpy(context->modified_path + arg_len, context->suffix); - return BROTLI_TRUE; - } -} - -static BROTLI_BOOL OpenFiles(Context* context) { - BROTLI_BOOL is_ok =3D OpenInputFile(context->current_input_path, &conte= xt->fin); - if (context->decompress) { - // - // skip the decoder data header - // - fseek(context->fin, DECODE_HEADER_SIZE, SEEK_SET); - } - if (!context->test_integrity && is_ok && context->fout =3D=3D NULL) { - is_ok =3D OpenOutputFile( - context->current_output_path, &context->fout, context->force_over= write); - } - if (!context->decompress) { - // - // append the decoder data header - // - fseek(context->fout, DECODE_HEADER_SIZE, SEEK_SET); - } - return is_ok; -} - -static BROTLI_BOOL CloseFiles(Context* context, BROTLI_BOOL success) { - BROTLI_BOOL is_ok =3D BROTLI_TRUE; - if (!context->test_integrity && context->fout) { - if (!success && context->current_output_path) { - unlink(context->current_output_path); - } - if (fclose(context->fout) !=3D 0) { - if (success) { - fprintf(stderr, "fclose failed [%s]: %s\n", - PrintablePath(context->current_output_path), strerror(err= no)); - } - is_ok =3D BROTLI_FALSE; - } - - /* TOCTOU violation, but otherwise it is impossible to set file times= . */ - if (success && is_ok && context->copy_stat) { - CopyStat(context->current_input_path, context->current_output_path)= ; - } - } - - if (context->fin) { - if (fclose(context->fin) !=3D 0) { - if (is_ok) { - fprintf(stderr, "fclose failed [%s]: %s\n", - PrintablePath(context->current_input_path), strerror(errn= o)); - } - is_ok =3D BROTLI_FALSE; - } - } - if (success && context->junk_source && context->current_input_path) { - unlink(context->current_input_path); - } - - context->fin =3D NULL; - context->fout =3D NULL; - - return is_ok; -} - -static const size_t kFileBufferSize =3D 1 << 16; - -static void InitializeBuffers(Context* context) { - context->available_in =3D 0; - context->next_in =3D NULL; - context->available_out =3D kFileBufferSize; - context->next_out =3D context->output; -} - -static BROTLI_BOOL HasMoreInput(Context* context) { - return feof(context->fin) ? BROTLI_FALSE : BROTLI_TRUE; -} - -static BROTLI_BOOL ProvideInput(Context* context) { - context->available_in =3D - fread(context->input, 1, kFileBufferSize, context->fin); - context->next_in =3D context->input; - if (ferror(context->fin)) { - fprintf(stderr, "failed to read input [%s]: %s\n", - PrintablePath(context->current_input_path), strerror(errno)); - return BROTLI_FALSE; - } - return BROTLI_TRUE; -} - -/* Internal: should be used only in Provide-/Flush-Output. */ -static BROTLI_BOOL WriteOutput(Context* context) { - size_t out_size =3D (size_t)(context->next_out - context->output); - if (out_size =3D=3D 0) return BROTLI_TRUE; - if (context->test_integrity) return BROTLI_TRUE; - - fwrite(context->output, 1, out_size, context->fout); - if (ferror(context->fout)) { - fprintf(stderr, "failed to write output [%s]: %s\n", - PrintablePath(context->current_output_path), strerror(errno))= ; - return BROTLI_FALSE; - } - return BROTLI_TRUE; -} - -static BROTLI_BOOL ProvideOutput(Context* context) { - if (!WriteOutput(context)) return BROTLI_FALSE; - context->available_out =3D kFileBufferSize; - context->next_out =3D context->output; - return BROTLI_TRUE; -} - -static BROTLI_BOOL FlushOutput(Context* context) { - if (!WriteOutput(context)) return BROTLI_FALSE; - context->available_out =3D 0; - return BROTLI_TRUE; -} - -static BROTLI_BOOL DecompressFile(Context* context, BrotliDecoderState* s= ) { - BrotliDecoderResult result =3D BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT; - InitializeBuffers(context); - for (;;) { - if (result =3D=3D BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) { - if (!HasMoreInput(context)) { - fprintf(stderr, "corrupt input [%s]\n", - PrintablePath(context->current_input_path)); - return BROTLI_FALSE; - } - if (!ProvideInput(context)) return BROTLI_FALSE; - } else if (result =3D=3D BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) { - if (!ProvideOutput(context)) return BROTLI_FALSE; - } else if (result =3D=3D BROTLI_DECODER_RESULT_SUCCESS) { - if (!FlushOutput(context)) return BROTLI_FALSE; - if (context->available_in !=3D 0 || HasMoreInput(context)) { - fprintf(stderr, "corrupt input [%s]\n", - PrintablePath(context->current_input_path)); - return BROTLI_FALSE; - } - return BROTLI_TRUE; - } else { - fprintf(stderr, "corrupt input [%s]\n", - PrintablePath(context->current_input_path)); - return BROTLI_FALSE; - } - - result =3D BrotliDecoderDecompressStream(s, &context->available_in, - &context->next_in, &context->available_out, &context->next_out, 0= ); - } -} - -/* Default brotli_alloc_func */ -void* BrotliAllocFunc(void* opaque, size_t size) { - *(size_t *)opaque =3D *(size_t *) opaque + size;=20 - return malloc(size); -} - -/* Default brotli_free_func */ -void BrotliFreeFunc(void* opaque, void* address) { - free(address); -} - -size_t scratch_buffer_size =3D 0; - -static BROTLI_BOOL DecompressFiles(Context* context) { - while (NextFile(context)) { - BROTLI_BOOL is_ok =3D BROTLI_TRUE; - BrotliDecoderState* s =3D BrotliDecoderCreateInstance(BrotliAllocFunc= , BrotliFreeFunc, &scratch_buffer_size); - if (!s) { - fprintf(stderr, "out of memory\n"); - return BROTLI_FALSE; - } - /* This allows decoding "large-window" streams. Though it creates - fragmentation (new builds decode streams that old builds don't), - it is better from used experience perspective. */ - BrotliDecoderSetParameter(s, BROTLI_DECODER_PARAM_LARGE_WINDOW, 1u); - is_ok =3D OpenFiles(context); - if (is_ok && !context->current_input_path && - !context->force_overwrite && isatty(STDIN_FILENO)) { - fprintf(stderr, "Use -h help. Use -f to force input from a terminal= .\n"); - is_ok =3D BROTLI_FALSE; - } - if (is_ok) is_ok =3D DecompressFile(context, s); - BrotliDecoderDestroyInstance(s); - if (!CloseFiles(context, is_ok)) is_ok =3D BROTLI_FALSE; - if (!is_ok) return BROTLI_FALSE; - } - return BROTLI_TRUE; -} - -static BROTLI_BOOL CompressFile(Context* context, BrotliEncoderState* s) = { - BROTLI_BOOL is_eof =3D BROTLI_FALSE; - InitializeBuffers(context); - for (;;) { - if (context->available_in =3D=3D 0 && !is_eof) { - if (!ProvideInput(context)) return BROTLI_FALSE; - is_eof =3D !HasMoreInput(context); - } - - if (!BrotliEncoderCompressStream(s, - is_eof ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS, - &context->available_in, &context->next_in, - &context->available_out, &context->next_out, NULL)) { - /* Should detect OOM? */ - fprintf(stderr, "failed to compress data [%s]\n", - PrintablePath(context->current_input_path)); - return BROTLI_FALSE; - } - - if (context->available_out =3D=3D 0) { - if (!ProvideOutput(context)) return BROTLI_FALSE; - } - - if (BrotliEncoderIsFinished(s)) { - return FlushOutput(context); - } - } -} - -static BROTLI_BOOL CompressFiles(Context* context) { - while (NextFile(context)) { - BROTLI_BOOL is_ok =3D BROTLI_TRUE; - BrotliEncoderState* s =3D BrotliEncoderCreateInstance(NULL, NULL, NUL= L); - if (!s) { - fprintf(stderr, "out of memory\n"); - return BROTLI_FALSE; - } - BrotliEncoderSetParameter(s, - BROTLI_PARAM_QUALITY, (uint32_t)context->quality); - if (context->lgwin > 0) { - /* Specified by user. */ - /* Do not enable "large-window" extension, if not required. */ - if (context->lgwin > BROTLI_MAX_WINDOW_BITS) { - BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, 1u); - } - BrotliEncoderSetParameter(s, - BROTLI_PARAM_LGWIN, (uint32_t)context->lgwin); - } else { - /* 0, or not specified by user; could be chosen by compressor. */ - uint32_t lgwin =3D DEFAULT_LGWIN; - /* Use file size to limit lgwin. */ - if (context->input_file_length >=3D 0) { - int32_t size =3D 1 << BROTLI_MIN_WINDOW_BITS; - lgwin =3D BROTLI_MIN_WINDOW_BITS; - while (size < context->input_file_length) { - size <<=3D 1; - lgwin++; - if (lgwin =3D=3D BROTLI_MAX_WINDOW_BITS) break; - } - } - BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, lgwin); - } - if (context->input_file_length > 0) { - uint32_t size_hint =3D context->input_file_length < (1 << 30) ? - (uint32_t)context->input_file_length : (1u << 30); - BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, size_hint); - } - is_ok =3D OpenFiles(context); - if (is_ok && !context->current_output_path && - !context->force_overwrite && isatty(STDOUT_FILENO)) { - fprintf(stderr, "Use -h help. Use -f to force output to a terminal.= \n"); - is_ok =3D BROTLI_FALSE; - } - if (is_ok) is_ok =3D CompressFile(context, s); - BrotliEncoderDestroyInstance(s); - if (!CloseFiles(context, is_ok)) is_ok =3D BROTLI_FALSE; - if (!is_ok) return BROTLI_FALSE; - } - return BROTLI_TRUE; -} - -int main(int argc, char** argv) { - Command command; - Context context; - Context context_dec; - BROTLI_BOOL is_ok =3D BROTLI_TRUE; - int i; - - context.quality =3D 11; - context.lgwin =3D -1; - context.gmem =3D 1; - context.force_overwrite =3D BROTLI_FALSE; - context.junk_source =3D BROTLI_FALSE; - context.copy_stat =3D BROTLI_TRUE; - context.test_integrity =3D BROTLI_FALSE; - context.verbose =3D BROTLI_FALSE; - context.write_to_stdout =3D BROTLI_FALSE; - context.decompress =3D BROTLI_FALSE; - context.large_window =3D BROTLI_FALSE; - context.output_path =3D NULL; - context.suffix =3D DEFAULT_SUFFIX; - for (i =3D 0; i < MAX_OPTIONS; ++i) context.not_input_indices[i] =3D 0; - context.longest_path_len =3D 1; - context.input_count =3D 0; - - context.argc =3D argc; - context.argv =3D argv; - context.modified_path =3D NULL; - context.iterator =3D 0; - context.ignore =3D 0; - context.iterator_error =3D BROTLI_FALSE; - context.buffer =3D NULL; - context.current_input_path =3D NULL; - context.current_output_path =3D NULL; - context.fin =3D NULL; - context.fout =3D NULL; - - command =3D ParseParams(&context); - - if (command =3D=3D COMMAND_COMPRESS || command =3D=3D COMMAND_DECOMPRES= S || - command =3D=3D COMMAND_TEST_INTEGRITY) { - if (is_ok) { - size_t modified_path_len =3D - context.longest_path_len + strlen(context.suffix) + 1; - context.modified_path =3D (char*)malloc(modified_path_len); - context.buffer =3D (uint8_t*)malloc(kFileBufferSize * 2); - if (!context.modified_path || !context.buffer) { - fprintf(stderr, "out of memory\n"); - is_ok =3D BROTLI_FALSE; - } else { - context.input =3D context.buffer; - context.output =3D context.buffer + kFileBufferSize; - } - } - } - - if (!is_ok) command =3D COMMAND_NOOP; - - switch (command) { - case COMMAND_NOOP: - break; - - case COMMAND_VERSION: - PrintVersion(); - break; - - case COMMAND_COMPRESS: - memcpy (&context_dec, &context, sizeof (context)); - is_ok =3D CompressFiles(&context); - if (!is_ok) { - break; - } - context_dec.decompress =3D BROTLI_TRUE; - context_dec.input_count =3D 1; - context_dec.current_input_path =3D context_dec.output_path; - context_dec.fout =3D tmpfile (); - is_ok =3D DecompressFiles(&context_dec); - if (!is_ok) { - break; - } - // - // fill decoder header - // - context_dec.fout =3D fopen(context_dec.output_path, "rb+"); /* ope= n output_path file and add in head info */ - fwrite(&input_file_length, 1, sizeof(int64_t), context_dec.fout); - scratch_buffer_size +=3D context.gmem * GAP_MEM_BLOCK; /* there is= a memory gap between IA32 and X64 environment*/ - scratch_buffer_size +=3D kFileBufferSize * 2; - fwrite(&scratch_buffer_size, 1, sizeof(int64_t), context_dec.fout); - if (fclose(context_dec.fout) !=3D 0) { - fprintf(stderr, "failed to update ouptut file: %s\n", context_dec= .output_path); - is_ok =3D 0; - } - break; - - case COMMAND_DECOMPRESS: - case COMMAND_TEST_INTEGRITY: - is_ok =3D DecompressFiles(&context); - break; - - case COMMAND_HELP: - case COMMAND_INVALID: - default: - is_ok =3D (command =3D=3D COMMAND_HELP); - PrintHelp(FileName(argv[0]), is_ok); - break; - } - - if (context.iterator_error) is_ok =3D BROTLI_FALSE; - - free(context.modified_path); - free(context.buffer); - - if (!is_ok) exit(1); - return 0; -} diff --git a/.gitmodules b/.gitmodules index 8032dceecacc..1714b6c0a65e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "MdeModulePkg/Library/BrotliCustomDecompressLib/brotli"] =09path =3D MdeModulePkg/Library/BrotliCustomDecompressLib/brotli =09url =3D https://github.com/google/brotli +[submodule "BaseTools/Source/C/BrotliCompress/brotli"] + path =3D BaseTools/Source/C/BrotliCompress/brotli + url =3D https://github.com/google/brotli diff --git a/BaseTools/Source/C/BrotliCompress/GNUmakefile b/BaseTools/Sou= rce/C/BrotliCompress/GNUmakefile index fdf713e8b236..9544837263ca 100644 --- a/BaseTools/Source/C/BrotliCompress/GNUmakefile +++ b/BaseTools/Source/C/BrotliCompress/GNUmakefile @@ -1,7 +1,7 @@ ## @file # GNU/Linux makefile for 'Brotli' module build. # -# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.
+# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # MAKEROOT ?=3D .. @@ -9,33 +9,33 @@ MAKEROOT ?=3D .. APPNAME =3D Brotli =20 OBJECTS =3D \ - tools/brotli.o \ - common/dictionary.o \ - common/transform.o \ - dec/bit_reader.o \ - dec/decode.o \ - dec/huffman.o \ - dec/state.o \ - enc/backward_references.o \ - enc/backward_references_hq.o \ - enc/bit_cost.o \ - enc/block_splitter.o \ - enc/brotli_bit_stream.o \ - enc/cluster.o \ - enc/compress_fragment.o \ - enc/compress_fragment_two_pass.o \ - enc/dictionary_hash.o \ - enc/encode.o \ - enc/encoder_dict.o \ - enc/entropy_encode.o \ - enc/histogram.o \ - enc/literal_cost.o \ - enc/memory.o \ - enc/metablock.o \ - enc/static_dict.o \ - enc/utf8_util.o + brotli/c/tools/brotli.o \ + brotli/c/common/dictionary.o \ + brotli/c/common/transform.o \ + brotli/c/dec/bit_reader.o \ + brotli/c/dec/decode.o \ + brotli/c/dec/huffman.o \ + brotli/c/dec/state.o \ + brotli/c/enc/backward_references.o \ + brotli/c/enc/backward_references_hq.o \ + brotli/c/enc/bit_cost.o \ + brotli/c/enc/block_splitter.o \ + brotli/c/enc/brotli_bit_stream.o \ + brotli/c/enc/cluster.o \ + brotli/c/enc/compress_fragment.o \ + brotli/c/enc/compress_fragment_two_pass.o \ + brotli/c/enc/dictionary_hash.o \ + brotli/c/enc/encode.o \ + brotli/c/enc/encoder_dict.o \ + brotli/c/enc/entropy_encode.o \ + brotli/c/enc/histogram.o \ + brotli/c/enc/literal_cost.o \ + brotli/c/enc/memory.o \ + brotli/c/enc/metablock.o \ + brotli/c/enc/static_dict.o \ + brotli/c/enc/utf8_util.o =20 include $(MAKEROOT)/Makefiles/app.makefile =20 -TOOL_INCLUDE =3D -I ./include +TOOL_INCLUDE =3D -I ./brotli/c/include LIBS +=3D -lm diff --git a/BaseTools/Source/C/BrotliCompress/LICENSE b/BaseTools/Source/= C/BrotliCompress/LICENSE deleted file mode 100644 index 49550fc2d06e..000000000000 --- a/BaseTools/Source/C/BrotliCompress/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. - -Permission is hereby granted, free of charge, to any person obtaining a c= opy -of this software and associated documentation files (the "Software"), to = deal -in the Software without restriction, including without limitation the rig= hts -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included i= n -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS O= R -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL = THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING F= ROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/BaseTools/Source/C/BrotliCompress/Makefile b/BaseTools/Source= /C/BrotliCompress/Makefile index 4c03b0e6df17..b805ff1e5870 100644 --- a/BaseTools/Source/C/BrotliCompress/Makefile +++ b/BaseTools/Source/C/BrotliCompress/Makefile @@ -1,46 +1,46 @@ ## @file # Windows makefile for 'Brotli' module build. # -# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.
+# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # !INCLUDE ..\Makefiles\ms.common =20 -INC =3D -I .\include $(INC) +INC =3D -I .\brotli\c\include $(INC) CFLAGS =3D $(CFLAGS) /W2 =20 APPNAME =3D Brotli =20 #LIBS =3D $(LIB_PATH)\Common.lib =20 -COMMON_OBJ =3D common\dictionary.obj common\transform.obj +COMMON_OBJ =3D brotli\c\common\dictionary.obj brotli\c\common\transform.o= bj DEC_OBJ =3D \ - dec\bit_reader.obj \ - dec\decode.obj \ - dec\huffman.obj \ - dec\state.obj + brotli\c\dec\bit_reader.obj \ + brotli\c\dec\decode.obj \ + brotli\c\dec\huffman.obj \ + brotli\c\dec\state.obj ENC_OBJ =3D \ - enc\backward_references.obj \ - enc\backward_references_hq.obj \ - enc\bit_cost.obj \ - enc\block_splitter.obj \ - enc\brotli_bit_stream.obj \ - enc\cluster.obj \ - enc\compress_fragment.obj \ - enc\compress_fragment_two_pass.obj \ - enc\dictionary_hash.obj \ - enc\encode.obj \ - enc\encoder_dict.obj \ - enc\entropy_encode.obj \ - enc\histogram.obj \ - enc\literal_cost.obj \ - enc\memory.obj \ - enc\metablock.obj \ - enc\static_dict.obj \ - enc\utf8_util.obj + brotli\c\enc\backward_references.obj \ + brotli\c\enc\backward_references_hq.obj \ + brotli\c\enc\bit_cost.obj \ + brotli\c\enc\block_splitter.obj \ + brotli\c\enc\brotli_bit_stream.obj \ + brotli\c\enc\cluster.obj \ + brotli\c\enc\compress_fragment.obj \ + brotli\c\enc\compress_fragment_two_pass.obj \ + brotli\c\enc\dictionary_hash.obj \ + brotli\c\enc\encode.obj \ + brotli\c\enc\encoder_dict.obj \ + brotli\c\enc\entropy_encode.obj \ + brotli\c\enc\histogram.obj \ + brotli\c\enc\literal_cost.obj \ + brotli\c\enc\memory.obj \ + brotli\c\enc\metablock.obj \ + brotli\c\enc\static_dict.obj \ + brotli\c\enc\utf8_util.obj =20 OBJECTS =3D \ - tools\brotli.obj \ + brotli\c\tools\brotli.obj \ $(COMMON_OBJ) \ $(DEC_OBJ) \ $(ENC_OBJ) diff --git a/BaseTools/Source/C/BrotliCompress/README.md b/BaseTools/Sourc= e/C/BrotliCompress/README.md deleted file mode 100644 index 01848adc170a..000000000000 --- a/BaseTools/Source/C/BrotliCompress/README.md +++ /dev/null @@ -1,26 +0,0 @@ -### Introduction - -Brotli is a generic-purpose lossless compression algorithm that compresse= s data -using a combination of a modern variant of the LZ77 algorithm, Huffman co= ding -and 2nd order context modeling, with a compression ratio comparable to th= e best -currently available general-purpose compression methods. It is similar in= speed -with deflate but offers more dense compression. - -The specification of the Brotli Compressed Data Format is defined in [RFC= 7932](https://www.ietf.org/rfc/rfc7932.txt). - -Brotli is open-sourced under the MIT License, see the LICENSE file. - -Brotli mailing list: -https://groups.google.com/forum/#!forum/brotli - -[![Build Status](https://travis-ci.org/google/brotli.svg?branch=3Dmaster)= ](https://travis-ci.org/google/brotli) - -### Benchmarks -* [Squash Compression Benchmark](https://quixdb.github.io/squash-benchmar= k/) / [Unstable Squash Compression Benchmark](https://quixdb.github.io/squa= sh-benchmark/unstable/) -* [Large Text Compression Benchmark](http://mattmahoney.net/dc/text.html) -* [Lzturbo Benchmark](https://sites.google.com/site/powturbo/home/benchma= rk) - -### Related projects -Independent [decoder](https://github.com/madler/brotli) implementation by= Mark Adler, based entirely on format specification. - -JavaScript port of brotli [decoder](https://github.com/devongovett/brotli= .js). Could be used directly via `npm install brotli` diff --git a/BaseTools/Source/C/BrotliCompress/ReadMe.txt b/BaseTools/Sour= ce/C/BrotliCompress/ReadMe.txt deleted file mode 100644 index 399ec38d4081..000000000000 --- a/BaseTools/Source/C/BrotliCompress/ReadMe.txt +++ /dev/null @@ -1,2 +0,0 @@ -It is based on the Brotli v1.0.6. -Brotli was released on the website https://github.com/google/brotli. diff --git a/BaseTools/Source/C/BrotliCompress/brotli b/BaseTools/Source/C= /BrotliCompress/brotli new file mode 160000 index 000000000000..666c3280cc11 --- /dev/null +++ b/BaseTools/Source/C/BrotliCompress/brotli @@ -0,0 +1 @@ +Subproject commit 666c3280cc11dc433c303d79a83d4ffbdd12cc8d diff --git a/BaseTools/Source/C/BrotliCompress/common/constants.h b/BaseTo= ols/Source/C/BrotliCompress/common/constants.h deleted file mode 100644 index 1a29f035e899..000000000000 --- a/BaseTools/Source/C/BrotliCompress/common/constants.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright 2016 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -#ifndef BROTLI_COMMON_CONSTANTS_H_ -#define BROTLI_COMMON_CONSTANTS_H_ - -/* Specification: 7.3. Encoding of the context map */ -#define BROTLI_CONTEXT_MAP_MAX_RLE 16 - -/* Specification: 2. Compressed representation overview */ -#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256 - -/* Specification: 3.3. Alphabet sizes: insert-and-copy length */ -#define BROTLI_NUM_LITERAL_SYMBOLS 256 -#define BROTLI_NUM_COMMAND_SYMBOLS 704 -#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26 -#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES = + \ - BROTLI_CONTEXT_MAP_MAX_RLE) -#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES += 2) - -/* Specification: 3.5. Complex prefix codes */ -#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16 -#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17 -#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1) -/* "code length of 8 is repeated" */ -#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8 - -/* "Large Window Brotli" */ -#define BROTLI_LARGE_MAX_DISTANCE_BITS 62U -#define BROTLI_LARGE_MIN_WBITS 10 -#define BROTLI_LARGE_MAX_WBITS 30 - -/* Specification: 4. Encoding of distances */ -#define BROTLI_NUM_DISTANCE_SHORT_CODES 16 -#define BROTLI_MAX_NPOSTFIX 3 -#define BROTLI_MAX_NDIRECT 120 -#define BROTLI_MAX_DISTANCE_BITS 24U -#define BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX, NDIRECT, MAXNBITS) ( \ - BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) + \ - ((MAXNBITS) << ((NPOSTFIX) + 1))) -/* BROTLI_NUM_DISTANCE_SYMBOLS =3D=3D 1128 */ -#define BROTLI_NUM_DISTANCE_SYMBOLS \ - BROTLI_DISTANCE_ALPHABET_SIZE( \ - BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANC= E_BITS) -#define BROTLI_MAX_DISTANCE 0x3FFFFFC -#define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC - -/* 7.1. Context modes and context ID lookup for literals */ -/* "context IDs for literals are in the range of 0..63" */ -#define BROTLI_LITERAL_CONTEXT_BITS 6 - -/* 7.2. Context ID for distances */ -#define BROTLI_DISTANCE_CONTEXT_BITS 2 - -/* 9.1. Format of the Stream Header */ -/* Number of slack bytes for window size. Don't confuse - with BROTLI_NUM_DISTANCE_SHORT_CODES. */ -#define BROTLI_WINDOW_GAP 16 -#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_= GAP) - -#endif /* BROTLI_COMMON_CONSTANTS_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/common/context.h b/BaseTool= s/Source/C/BrotliCompress/common/context.h deleted file mode 100644 index 7ffc640eafa4..000000000000 --- a/BaseTools/Source/C/BrotliCompress/common/context.h +++ /dev/null @@ -1,261 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Lookup table to map the previous two bytes to a context id. - - There are four different context modeling modes defined here: - CONTEXT_LSB6: context id is the least significant 6 bits of the last = byte, - CONTEXT_MSB6: context id is the most significant 6 bits of the last b= yte, - CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text, - CONTEXT_SIGNED: second-order context model tuned for signed integers. - - If |p1| and |p2| are the previous two bytes, and |mode| is current cont= ext - mode, we calculate the context as: - - context =3D ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256]. - - For CONTEXT_UTF8 mode, if the previous two bytes are ASCII characters - (i.e. < 128), this will be equivalent to - - context =3D 4 * context1(p1) + context2(p2), - - where context1 is based on the previous byte in the following way: - - 0 : non-ASCII control - 1 : \t, \n, \r - 2 : space - 3 : other punctuation - 4 : " ' - 5 : % - 6 : ( < [ { - 7 : ) > ] } - 8 : , ; : - 9 : . - 10 : =3D - 11 : number - 12 : upper-case vowel - 13 : upper-case consonant - 14 : lower-case vowel - 15 : lower-case consonant - - and context2 is based on the second last byte: - - 0 : control, space - 1 : punctuation - 2 : upper-case letter, number - 3 : lower-case letter - - If the last byte is ASCII, and the second last byte is not (in a valid = UTF8 - stream it will be a continuation byte, value between 128 and 191), the - context is the same as if the second last byte was an ASCII control or = space. - - If the last byte is a UTF8 lead byte (value >=3D 192), then the next by= te will - be a continuation byte and the context id is 2 or 3 depending on the LS= B of - the last byte and to a lesser extent on the second last byte if it is A= SCII. - - If the last byte is a UTF8 continuation byte, the second last byte can = be: - - continuation byte: the next byte is probably ASCII or lead byte (as= suming - 4-byte UTF8 characters are rare) and the context id is 0 or 1. - - lead byte (192 - 207): next byte is ASCII or lead byte, context is = 0 or 1 - - lead byte (208 - 255): next byte is continuation byte, context is 2= or 3 - - The possible value combinations of the previous two bytes, the range of - context ids and the type of the next byte is summarized in the table be= low: - - |--------\-------------------------------------------------------------= ----| - | \ Last byte = | - | Second \-----------------------------------------------------------= ----| - | last byte \ ASCII | cont. byte | lead byte = | - | \ (0-127) | (128-191) | (192-) = | - |=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D|=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= = =3D=3D=3D=3D=3D=3D=3D=3D=3D|=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D|=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D| - | ASCII | next: ASCII/lead | not valid | next: cont. = | - | (0-127) | context: 4 - 63 | | context: 2 -= 3 | - |-------------|-------------------|---------------------|--------------= ----| - | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. = | - | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 -= 3 | - |-------------|-------------------|---------------------|--------------= ----| - | lead byte | not valid | next: ASCII/lead | not valid = | - | (192-207) | | context: 0 - 1 | = | - |-------------|-------------------|---------------------|--------------= ----| - | lead byte | not valid | next: cont. | not valid = | - | (208-) | | context: 2 - 3 | = | - |-------------|-------------------|---------------------|--------------= ----| -*/ - -#ifndef BROTLI_COMMON_CONTEXT_H_ -#define BROTLI_COMMON_CONTEXT_H_ - -#include - -typedef enum ContextType { - CONTEXT_LSB6 =3D 0, - CONTEXT_MSB6 =3D 1, - CONTEXT_UTF8 =3D 2, - CONTEXT_SIGNED =3D 3 -} ContextType; - -/* Common context lookup table for all context modes. */ -static const uint8_t kContextLookup[2048] =3D { - /* CONTEXT_LSB6, last byte. */ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - - /* CONTEXT_LSB6, second last byte, */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - /* CONTEXT_MSB6, last byte. */ - 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, - 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, - 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, - 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, - 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, - 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, - 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, - 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, - 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, - 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, - 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, - 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, - 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, - 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, - 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, - 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, - - /* CONTEXT_MSB6, second last byte, */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - /* CONTEXT_UTF8, last byte. */ - /* ASCII range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, - 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, - 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, - 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, - 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, - /* UTF8 continuation byte range. */ - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - /* UTF8 lead byte range. */ - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - - /* CONTEXT_UTF8 second last byte. */ - /* ASCII range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, - /* UTF8 continuation byte range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* UTF8 lead byte range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - - /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bit= s. */ - 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, - - /* CONTEXT_SIGNED, second last byte. */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, -}; - -typedef const uint8_t* ContextLut; - -/* typeof(MODE) =3D=3D ContextType; returns ContextLut */ -#define BROTLI_CONTEXT_LUT(MODE) (&kContextLookup[(MODE) << 9]) - -/* typeof(LUT) =3D=3D ContextLut */ -#define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2]) - -#endif /* BROTLI_COMMON_CONTEXT_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/common/dictionary.h b/BaseT= ools/Source/C/BrotliCompress/common/dictionary.h deleted file mode 100644 index a68a1c54493e..000000000000 --- a/BaseTools/Source/C/BrotliCompress/common/dictionary.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Collection of static dictionary words. */ - -#ifndef BROTLI_COMMON_DICTIONARY_H_ -#define BROTLI_COMMON_DICTIONARY_H_ - -#include -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -typedef struct BrotliDictionary { - /** - * Number of bits to encode index of dictionary word in a bucket. - * - * Specification: Appendix A. Static Dictionary Data - * - * Words in a dictionary are bucketed by length. - * @c 0 means that there are no words of a given length. - * Dictionary consists of words with length of [4..24] bytes. - * Values at [0..3] and [25..31] indices should not be addressed. - */ - uint8_t size_bits_by_length[32]; - - /* assert(offset[i + 1] =3D=3D offset[i] + (bits[i] ? (i << bits[i]) : = 0)) */ - uint32_t offsets_by_length[32]; - - /* assert(data_size =3D=3D offsets_by_length[31]) */ - size_t data_size; - - /* Data array is not bound, and should obey to size_bits_by_length valu= es. - Specified size matches default (RFC 7932) dictionary. Its size is - defined by data_size */ - const uint8_t* data; -} BrotliDictionary; - -BROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void); - -/** - * Sets dictionary data. - * - * When dictionary data is already set / present, this method is no-op. - * - * Dictionary data MUST be provided before BrotliGetDictionary is invoked= . - * This method is used ONLY in multi-client environment (e.g. C + Java), - * to reduce storage by sharing single dictionary between implementations= . - */ -BROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data); - -#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4 -#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24 - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_COMMON_DICTIONARY_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/common/platform.h b/BaseToo= ls/Source/C/BrotliCompress/common/platform.h deleted file mode 100644 index b83ed6ca258a..000000000000 --- a/BaseTools/Source/C/BrotliCompress/common/platform.h +++ /dev/null @@ -1,558 +0,0 @@ -/* Copyright 2016 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Macros for compiler / platform specific features and build options. - - Build options are: - * BROTLI_BUILD_32_BIT disables 64-bit optimizations - * BROTLI_BUILD_64_BIT forces to use 64-bit optimizations - * BROTLI_BUILD_BIG_ENDIAN forces to use big-endian optimizations - * BROTLI_BUILD_ENDIAN_NEUTRAL disables endian-aware optimizations - * BROTLI_BUILD_LITTLE_ENDIAN forces to use little-endian optimization= s - * BROTLI_BUILD_PORTABLE disables dangerous optimizations, like unalig= ned - read and overlapping memcpy; this reduces decompression speed by 5% - * BROTLI_BUILD_NO_RBIT disables "rbit" optimization for ARM CPUs - * BROTLI_DEBUG dumps file name and line number when decoder detects s= tream - or memory error - * BROTLI_ENABLE_LOG enables asserts and dumps various state informati= on -*/ - -#ifndef BROTLI_COMMON_PLATFORM_H_ -#define BROTLI_COMMON_PLATFORM_H_ - -#include /* memcpy */ -#include /* malloc, free */ - -#include -#include - -#if defined(OS_LINUX) || defined(OS_CYGWIN) -#include -#elif defined(OS_FREEBSD) -#include -#elif defined(OS_MACOSX) -#include -/* Let's try and follow the Linux convention */ -#define BROTLI_X_BYTE_ORDER BYTE_ORDER -#define BROTLI_X_LITTLE_ENDIAN LITTLE_ENDIAN -#define BROTLI_X_BIG_ENDIAN BIG_ENDIAN -#endif - -#if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG) -#include -#include -#endif - -/* The following macros were borrowed from https://github.com/nemequ/hedl= ey - * with permission of original author - Evan Nemerson = */ - -/* >>> >>> >>> hedley macros */ - -/* Define "BROTLI_PREDICT_TRUE" and "BROTLI_PREDICT_FALSE" macros for cap= able - compilers. - -To apply compiler hint, enclose the branching condition into macros, like= this: - - if (BROTLI_PREDICT_TRUE(zero =3D=3D 0)) { - // main execution path - } else { - // compiler should place this code outside of main execution path - } - -OR: - - if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) { - // compiler should place this code outside of main execution path - } - -*/ -#if BROTLI_GNUC_HAS_BUILTIN(__builtin_expect, 3, 0, 0) || \ - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \ - BROTLI_SUNPRO_VERSION_CHECK(5, 12, 0) || \ - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \ - BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \ - BROTLI_TI_VERSION_CHECK(7, 3, 0) || \ - BROTLI_TINYC_VERSION_CHECK(0, 9, 27) -#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) -#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0)) -#else -#define BROTLI_PREDICT_FALSE(x) (x) -#define BROTLI_PREDICT_TRUE(x) (x) -#endif - -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >=3D 199901L) && \ - !defined(__cplusplus) -#define BROTLI_RESTRICT restrict -#elif BROTLI_GNUC_VERSION_CHECK(3, 1, 0) || \ - BROTLI_MSVC_VERSION_CHECK(14, 0, 0) || \ - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \ - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \ - BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \ - BROTLI_PGI_VERSION_CHECK(17, 10, 0) || \ - BROTLI_TI_VERSION_CHECK(8, 0, 0) || \ - BROTLI_IAR_VERSION_CHECK(8, 0, 0) || \ - (BROTLI_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus)) -#define BROTLI_RESTRICT __restrict -#elif BROTLI_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus) -#define BROTLI_RESTRICT _Restrict -#else -#define BROTLI_RESTRICT -#endif - -#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >=3D 199901L)) || \ - (defined(__cplusplus) && (__cplusplus >=3D 199711L)) -#define BROTLI_MAYBE_INLINE inline -#elif defined(__GNUC_STDC_INLINE__) || defined(__GNUC_GNU_INLINE__) || \ - BROTLI_ARM_VERSION_CHECK(6, 2, 0) -#define BROTLI_MAYBE_INLINE __inline__ -#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) || \ - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || BROTLI_TI_VERSION_CHECK(8, 0, 0) -#define BROTLI_MAYBE_INLINE __inline -#else -#define BROTLI_MAYBE_INLINE -#endif - -#if BROTLI_GNUC_HAS_ATTRIBUTE(always_inline, 4, 0, 0) || = \ - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || = \ - BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || = \ - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || = \ - BROTLI_IBM_VERSION_CHECK(10, 1, 0) || = \ - BROTLI_TI_VERSION_CHECK(8, 0, 0) || = \ - (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPO= RT__)) -#define BROTLI_INLINE BROTLI_MAYBE_INLINE __attribute__((__always_inline_= _)) -#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) -#define BROTLI_INLINE BROTLI_MAYBE_INLINE __forceinline -#elif BROTLI_TI_VERSION_CHECK(7, 0, 0) && defined(__cplusplus) -#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("FUNC_ALWAYS_INLINE;") -#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0) -#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("inline=3Dforced") -#else -#define BROTLI_INLINE BROTLI_MAYBE_INLINE -#endif - -#if BROTLI_GNUC_HAS_ATTRIBUTE(noinline, 4, 0, 0) || = \ - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || = \ - BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || = \ - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || = \ - BROTLI_IBM_VERSION_CHECK(10, 1, 0) || = \ - BROTLI_TI_VERSION_CHECK(8, 0, 0) || = \ - (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPO= RT__)) -#define BROTLI_NOINLINE __attribute__((__noinline__)) -#elif BROTLI_MSVC_VERSION_CHECK(13, 10, 0) -#define BROTLI_NOINLINE __declspec(noinline) -#elif BROTLI_PGI_VERSION_CHECK(10, 2, 0) -#define BROTLI_NOINLINE _Pragma("noinline") -#elif BROTLI_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus) -#define BROTLI_NOINLINE _Pragma("FUNC_CANNOT_INLINE;") -#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0) -#define BROTLI_NOINLINE _Pragma("inline=3Dnever") -#else -#define BROTLI_NOINLINE -#endif - -/* BROTLI_INTERNAL could be defined to override visibility, e.g. for test= s. */ -#if !defined(BROTLI_INTERNAL) -#if defined(_WIN32) || defined(__CYGWIN__) -#define BROTLI_INTERNAL -#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \ - BROTLI_TI_VERSION_CHECK(8, 0, 0) || \ - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \ - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \ - BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \ - BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \ - (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \ - defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__)) -#define BROTLI_INTERNAL __attribute__ ((visibility ("hidden"))) -#else -#define BROTLI_INTERNAL -#endif -#endif - -/* <<< <<< <<< end of hedley macros. */ - -#if BROTLI_GNUC_HAS_ATTRIBUTE(unused, 2, 7, 0) || \ - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) -#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE __attribute__ ((unuse= d)) -#else -#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE -#endif - -#if (defined(__ARM_ARCH) && (__ARM_ARCH =3D=3D 7)) || \ - (defined(M_ARM) && (M_ARM =3D=3D 7)) -#define BROTLI_TARGET_ARMV7 -#endif /* ARMv7 */ - -#if (defined(__ARM_ARCH) && (__ARM_ARCH =3D=3D 8)) || \ - defined(__aarch64__) || defined(__ARM64_ARCH_8__) -#define BROTLI_TARGET_ARMV8_ANY - -#if defined(__ARM_32BIT_STATE) -#define BROTLI_TARGET_ARMV8_32 -#elif defined(__ARM_64BIT_STATE) -#define BROTLI_TARGET_ARMV8_64 -#endif - -#endif /* ARMv8 */ - -#if defined(__i386) || defined(_M_IX86) -#define BROTLI_TARGET_X86 -#endif - -#if defined(__x86_64__) || defined(_M_X64) -#define BROTLI_TARGET_X64 -#endif - -#if defined(__PPC64__) -#define BROTLI_TARGET_POWERPC64 -#endif - -#if defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen =3D=3D 64 -#define BROTLI_TARGET_RISCV64 -#endif - -#if defined(BROTLI_BUILD_64_BIT) -#define BROTLI_64_BITS 1 -#elif defined(BROTLI_BUILD_32_BIT) -#define BROTLI_64_BITS 0 -#elif defined(BROTLI_TARGET_X64) || defined(BROTLI_TARGET_ARMV8_64) || \ - defined(BROTLI_TARGET_POWERPC64) || defined(BROTLI_TARGET_RISCV64) -#define BROTLI_64_BITS 1 -#else -#define BROTLI_64_BITS 0 -#endif - -#if (BROTLI_64_BITS) -#define brotli_reg_t uint64_t -#else -#define brotli_reg_t uint32_t -#endif - -#if defined(BROTLI_BUILD_BIG_ENDIAN) -#define BROTLI_BIG_ENDIAN 1 -#elif defined(BROTLI_BUILD_LITTLE_ENDIAN) -#define BROTLI_LITTLE_ENDIAN 1 -#elif defined(BROTLI_BUILD_ENDIAN_NEUTRAL) -/* Just break elif chain. */ -#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ =3D=3D __ORDER_LITTLE_EN= DIAN__) -#define BROTLI_LITTLE_ENDIAN 1 -#elif defined(_WIN32) || defined(BROTLI_TARGET_X64) -/* Win32 & x64 can currently always be assumed to be little endian */ -#define BROTLI_LITTLE_ENDIAN 1 -#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ =3D=3D __ORDER_BIG_ENDIA= N__) -#define BROTLI_BIG_ENDIAN 1 -#elif defined(BROTLI_X_BYTE_ORDER) -#if BROTLI_X_BYTE_ORDER =3D=3D BROTLI_X_LITTLE_ENDIAN -#define BROTLI_LITTLE_ENDIAN 1 -#elif BROTLI_X_BYTE_ORDER =3D=3D BROTLI_X_BIG_ENDIAN -#define BROTLI_BIG_ENDIAN 1 -#endif -#endif /* BROTLI_X_BYTE_ORDER */ - -#if !defined(BROTLI_LITTLE_ENDIAN) -#define BROTLI_LITTLE_ENDIAN 0 -#endif - -#if !defined(BROTLI_BIG_ENDIAN) -#define BROTLI_BIG_ENDIAN 0 -#endif - -#if defined(BROTLI_X_BYTE_ORDER) -#undef BROTLI_X_BYTE_ORDER -#undef BROTLI_X_LITTLE_ENDIAN -#undef BROTLI_X_BIG_ENDIAN -#endif - -#if defined(BROTLI_BUILD_PORTABLE) -#define BROTLI_ALIGNED_READ (!!1) -#elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) || \ - defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY) || \ - defined(BROTLI_TARGET_RISCV64) -/* Allow unaligned read only for white-listed CPUs. */ -#define BROTLI_ALIGNED_READ (!!0) -#else -#define BROTLI_ALIGNED_READ (!!1) -#endif - -#if BROTLI_ALIGNED_READ -/* Portable unaligned memory access: read / write values via memcpy. */ -static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) { - uint16_t t; - memcpy(&t, p, sizeof t); - return t; -} -static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) { - uint32_t t; - memcpy(&t, p, sizeof t); - return t; -} -static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) { - uint64_t t; - memcpy(&t, p, sizeof t); - return t; -} -static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) { - memcpy(p, &v, sizeof v); -} -#else /* BROTLI_ALIGNED_READ */ -/* Unaligned memory access is allowed: just cast pointer to requested typ= e. */ -#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER) || \ - defined(MEMORY_SANITIZER) -/* Consider we have an unaligned load/store of 4 bytes from address 0x...= 05. - AddressSanitizer will treat it as a 3-byte access to the range 05:07 a= nd - will miss a bug if 08 is the first unaddressable byte. - ThreadSanitizer will also treat this as a 3-byte access to 05:07 and w= ill - miss a race between this access and some other accesses to 08. - MemorySanitizer will correctly propagate the shadow on unaligned store= s - and correctly report bugs on unaligned loads, but it may not properly - update and report the origin of the uninitialized memory. - For all three tools, replacing an unaligned access with a tool-specifi= c - callback solves the problem. */ -#if defined(__cplusplus) -extern "C" { -#endif /* __cplusplus */ - uint16_t __sanitizer_unaligned_load16(const void* p); - uint32_t __sanitizer_unaligned_load32(const void* p); - uint64_t __sanitizer_unaligned_load64(const void* p); - void __sanitizer_unaligned_store64(void* p, uint64_t v); -#if defined(__cplusplus) -} /* extern "C" */ -#endif /* __cplusplus */ -#define BrotliUnalignedRead16 __sanitizer_unaligned_load16 -#define BrotliUnalignedRead32 __sanitizer_unaligned_load32 -#define BrotliUnalignedRead64 __sanitizer_unaligned_load64 -#define BrotliUnalignedWrite64 __sanitizer_unaligned_store64 -#else -static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) { - return *(const uint16_t*)p; -} -static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) { - return *(const uint32_t*)p; -} -#if (BROTLI_64_BITS) -static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) { - return *(const uint64_t*)p; -} -static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) { - *(uint64_t*)p =3D v; -} -#else /* BROTLI_64_BITS */ -/* Avoid emitting LDRD / STRD, which require properly aligned address. */ -/* If __attribute__(aligned) is available, use that. Otherwise, memcpy. *= / - -#if BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) -typedef __attribute__((aligned(1))) uint64_t brotli_unaligned_uint64_t; - -static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) { - return (uint64_t) ((brotli_unaligned_uint64_t*) p)[0]; -} -static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) { - brotli_unaligned_uint64_t* dwords =3D (brotli_unaligned_uint64_t*) p; - dwords[0] =3D (brotli_unaligned_uint64_t) v; -} -#else /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */ -static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) { - uint64_t v; - memcpy(&v, p, sizeof(uint64_t)); - return v; -} - -static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) { - memcpy(p, &v, sizeof(uint64_t)); -} -#endif /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */ -#endif /* BROTLI_64_BITS */ -#endif /* ASAN / TSAN / MSAN */ -#endif /* BROTLI_ALIGNED_READ */ - -#if BROTLI_LITTLE_ENDIAN -/* Straight endianness. Just read / write values. */ -#define BROTLI_UNALIGNED_LOAD16LE BrotliUnalignedRead16 -#define BROTLI_UNALIGNED_LOAD32LE BrotliUnalignedRead32 -#define BROTLI_UNALIGNED_LOAD64LE BrotliUnalignedRead64 -#define BROTLI_UNALIGNED_STORE64LE BrotliUnalignedWrite64 -#elif BROTLI_BIG_ENDIAN /* BROTLI_LITTLE_ENDIAN */ -/* Explain compiler to byte-swap values. */ -#define BROTLI_BSWAP16_(V) ((uint16_t)( \ - (((V) & 0xFFU) << 8) | \ - (((V) >> 8) & 0xFFU))) -static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) { - uint16_t value =3D BrotliUnalignedRead16(p); - return BROTLI_BSWAP16_(value); -} -#define BROTLI_BSWAP32_(V) ( \ - (((V) & 0xFFU) << 24) | (((V) & 0xFF00U) << 8) | \ - (((V) >> 8) & 0xFF00U) | (((V) >> 24) & 0xFFU)) -static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) { - uint32_t value =3D BrotliUnalignedRead32(p); - return BROTLI_BSWAP32_(value); -} -#define BROTLI_BSWAP64_(V) ( \ - (((V) & 0xFFU) << 56) | (((V) & 0xFF00U) << 40) | \ - (((V) & 0xFF0000U) << 24) | (((V) & 0xFF000000U) << 8) | \ - (((V) >> 8) & 0xFF000000U) | (((V) >> 24) & 0xFF0000U) | \ - (((V) >> 40) & 0xFF00U) | (((V) >> 56) & 0xFFU)) -static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) { - uint64_t value =3D BrotliUnalignedRead64(p); - return BROTLI_BSWAP64_(value); -} -static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v)= { - uint64_t value =3D BROTLI_BSWAP64_(v); - BrotliUnalignedWrite64(p, value); -} -#else /* BROTLI_LITTLE_ENDIAN */ -/* Read / store values byte-wise; hopefully compiler will understand. */ -static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) { - const uint8_t* in =3D (const uint8_t*)p; - return (uint16_t)(in[0] | (in[1] << 8)); -} -static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) { - const uint8_t* in =3D (const uint8_t*)p; - uint32_t value =3D (uint32_t)(in[0]); - value |=3D (uint32_t)(in[1]) << 8; - value |=3D (uint32_t)(in[2]) << 16; - value |=3D (uint32_t)(in[3]) << 24; - return value; -} -static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) { - const uint8_t* in =3D (const uint8_t*)p; - uint64_t value =3D (uint64_t)(in[0]); - value |=3D (uint64_t)(in[1]) << 8; - value |=3D (uint64_t)(in[2]) << 16; - value |=3D (uint64_t)(in[3]) << 24; - value |=3D (uint64_t)(in[4]) << 32; - value |=3D (uint64_t)(in[5]) << 40; - value |=3D (uint64_t)(in[6]) << 48; - value |=3D (uint64_t)(in[7]) << 56; - return value; -} -static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v)= { - uint8_t* out =3D (uint8_t*)p; - out[0] =3D (uint8_t)v; - out[1] =3D (uint8_t)(v >> 8); - out[2] =3D (uint8_t)(v >> 16); - out[3] =3D (uint8_t)(v >> 24); - out[4] =3D (uint8_t)(v >> 32); - out[5] =3D (uint8_t)(v >> 40); - out[6] =3D (uint8_t)(v >> 48); - out[7] =3D (uint8_t)(v >> 56); -} -#endif /* BROTLI_LITTLE_ENDIAN */ - -/* BROTLI_IS_CONSTANT macros returns true for compile-time constants. */ -#if BROTLI_GNUC_HAS_BUILTIN(__builtin_constant_p, 3, 0, 1) || \ - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) -#define BROTLI_IS_CONSTANT(x) (!!__builtin_constant_p(x)) -#else -#define BROTLI_IS_CONSTANT(x) (!!0) -#endif - -#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY) -#define BROTLI_HAS_UBFX (!!1) -#else -#define BROTLI_HAS_UBFX (!!0) -#endif - -#if defined(BROTLI_ENABLE_LOG) -#define BROTLI_DCHECK(x) assert(x) -#define BROTLI_LOG(x) printf x -#else -#define BROTLI_DCHECK(x) -#define BROTLI_LOG(x) -#endif - -#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG) -static BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn= ) { - fprintf(stderr, "%s:%d (%s)\n", f, l, fn); - fflush(stderr); -} -#define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__) -#else -#define BROTLI_DUMP() (void)(0) -#endif - -/* TODO: add appropriate icc/sunpro/arm/ibm/ti checks. */ -#if (BROTLI_GNUC_VERSION_CHECK(3, 0, 0) || defined(__llvm__)) && \ - !defined(BROTLI_BUILD_NO_RBIT) -#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY) -/* TODO: detect ARMv6T2 and enable this code for it. */ -static BROTLI_INLINE brotli_reg_t BrotliRBit(brotli_reg_t input) { - brotli_reg_t output; - __asm__("rbit %0, %1\n" : "=3Dr"(output) : "r"(input)); - return output; -} -#define BROTLI_RBIT(x) BrotliRBit(x) -#endif /* armv7 / armv8 */ -#endif /* gcc || clang */ -#if !defined(BROTLI_RBIT) -static BROTLI_INLINE void BrotliRBit(void) { /* Should break build if use= d. */ } -#endif /* BROTLI_RBIT */ - -#define BROTLI_REPEAT(N, X) { \ - if ((N & 1) !=3D 0) {X;} \ - if ((N & 2) !=3D 0) {X; X;} \ - if ((N & 4) !=3D 0) {X; X; X; X;} \ -} - -#define BROTLI_UNUSED(X) (void)(X) - -#define BROTLI_MIN_MAX(T) = \ - static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a := b; } \ - static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a := b; } -BROTLI_MIN_MAX(double) BROTLI_MIN_MAX(float) BROTLI_MIN_MAX(int) -BROTLI_MIN_MAX(size_t) BROTLI_MIN_MAX(uint32_t) BROTLI_MIN_MAX(uint8_t) -#undef BROTLI_MIN_MAX -#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B))) -#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B))) - -#define BROTLI_SWAP(T, A, I, J) { \ - T __brotli_swap_tmp =3D (A)[(I)]; \ - (A)[(I)] =3D (A)[(J)]; \ - (A)[(J)] =3D __brotli_swap_tmp; \ -} - -/* Default brotli_alloc_func */ -static void* BrotliDefaultAllocFunc(void* opaque, size_t size) { - BROTLI_UNUSED(opaque); - return malloc(size); -} - -/* Default brotli_free_func */ -static void BrotliDefaultFreeFunc(void* opaque, void* address) { - BROTLI_UNUSED(opaque); - free(address); -} - -BROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) { - BROTLI_UNUSED(&BrotliSuppressUnusedFunctions); - BROTLI_UNUSED(&BrotliUnalignedRead16); - BROTLI_UNUSED(&BrotliUnalignedRead32); - BROTLI_UNUSED(&BrotliUnalignedRead64); - BROTLI_UNUSED(&BrotliUnalignedWrite64); - BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD16LE); - BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD32LE); - BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD64LE); - BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE64LE); - BROTLI_UNUSED(&BrotliRBit); - BROTLI_UNUSED(&brotli_min_double); - BROTLI_UNUSED(&brotli_max_double); - BROTLI_UNUSED(&brotli_min_float); - BROTLI_UNUSED(&brotli_max_float); - BROTLI_UNUSED(&brotli_min_int); - BROTLI_UNUSED(&brotli_max_int); - BROTLI_UNUSED(&brotli_min_size_t); - BROTLI_UNUSED(&brotli_max_size_t); - BROTLI_UNUSED(&brotli_min_uint32_t); - BROTLI_UNUSED(&brotli_max_uint32_t); - BROTLI_UNUSED(&brotli_min_uint8_t); - BROTLI_UNUSED(&brotli_max_uint8_t); - BROTLI_UNUSED(&BrotliDefaultAllocFunc); - BROTLI_UNUSED(&BrotliDefaultFreeFunc); -#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG) - BROTLI_UNUSED(&BrotliDump); -#endif -} - -#endif /* BROTLI_COMMON_PLATFORM_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/common/transform.h b/BaseTo= ols/Source/C/BrotliCompress/common/transform.h deleted file mode 100644 index 8b42cd1807b0..000000000000 --- a/BaseTools/Source/C/BrotliCompress/common/transform.h +++ /dev/null @@ -1,80 +0,0 @@ -/* transforms is a part of ABI, but not API. - - It means that there are some functions that are supposed to be in "com= mon" - library, but header itself is not placed into include/brotli. This way= , - aforementioned functions will be available only to brotli internals. - */ - -#ifndef BROTLI_COMMON_TRANSFORM_H_ -#define BROTLI_COMMON_TRANSFORM_H_ - -#include -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -enum BrotliWordTransformType { - BROTLI_TRANSFORM_IDENTITY =3D 0, - BROTLI_TRANSFORM_OMIT_LAST_1 =3D 1, - BROTLI_TRANSFORM_OMIT_LAST_2 =3D 2, - BROTLI_TRANSFORM_OMIT_LAST_3 =3D 3, - BROTLI_TRANSFORM_OMIT_LAST_4 =3D 4, - BROTLI_TRANSFORM_OMIT_LAST_5 =3D 5, - BROTLI_TRANSFORM_OMIT_LAST_6 =3D 6, - BROTLI_TRANSFORM_OMIT_LAST_7 =3D 7, - BROTLI_TRANSFORM_OMIT_LAST_8 =3D 8, - BROTLI_TRANSFORM_OMIT_LAST_9 =3D 9, - BROTLI_TRANSFORM_UPPERCASE_FIRST =3D 10, - BROTLI_TRANSFORM_UPPERCASE_ALL =3D 11, - BROTLI_TRANSFORM_OMIT_FIRST_1 =3D 12, - BROTLI_TRANSFORM_OMIT_FIRST_2 =3D 13, - BROTLI_TRANSFORM_OMIT_FIRST_3 =3D 14, - BROTLI_TRANSFORM_OMIT_FIRST_4 =3D 15, - BROTLI_TRANSFORM_OMIT_FIRST_5 =3D 16, - BROTLI_TRANSFORM_OMIT_FIRST_6 =3D 17, - BROTLI_TRANSFORM_OMIT_FIRST_7 =3D 18, - BROTLI_TRANSFORM_OMIT_FIRST_8 =3D 19, - BROTLI_TRANSFORM_OMIT_FIRST_9 =3D 20, - BROTLI_NUM_TRANSFORM_TYPES /* Counts transforms, not a transform itsel= f. */ -}; - -#define BROTLI_TRANSFORMS_MAX_CUT_OFF BROTLI_TRANSFORM_OMIT_LAST_9 - -typedef struct BrotliTransforms { - uint16_t prefix_suffix_size; - /* Last character must be null, so prefix_suffix_size must be at least = 1. */ - const uint8_t* prefix_suffix; - const uint16_t* prefix_suffix_map; - uint32_t num_transforms; - /* Each entry is a [prefix_id, transform, suffix_id] triplet. */ - const uint8_t* transforms; - /* Indices of transforms like ["", BROTLI_TRANSFORM_OMIT_LAST_#, ""]. - 0-th element corresponds to ["", BROTLI_TRANSFORM_IDENTITY, ""]. - -1, if cut-off transform does not exist. */ - int16_t cutOffTransforms[BROTLI_TRANSFORMS_MAX_CUT_OFF + 1]; -} BrotliTransforms; - -/* T is BrotliTransforms*; result is uint8_t. */ -#define BROTLI_TRANSFORM_PREFIX_ID(T, I) ((T)->transforms[((I) * 3) + 0]) -#define BROTLI_TRANSFORM_TYPE(T, I) ((T)->transforms[((I) * 3) + 1]) -#define BROTLI_TRANSFORM_SUFFIX_ID(T, I) ((T)->transforms[((I) * 3) + 2]) - -/* T is BrotliTransforms*; result is const uint8_t*. */ -#define BROTLI_TRANSFORM_PREFIX(T, I) (&(T)->prefix_suffix[ \ - (T)->prefix_suffix_map[BROTLI_TRANSFORM_PREFIX_ID(T, I)]]) -#define BROTLI_TRANSFORM_SUFFIX(T, I) (&(T)->prefix_suffix[ \ - (T)->prefix_suffix_map[BROTLI_TRANSFORM_SUFFIX_ID(T, I)]]) - -BROTLI_COMMON_API const BrotliTransforms* BrotliGetTransforms(void); - -BROTLI_COMMON_API int BrotliTransformDictionaryWord( - uint8_t* dst, const uint8_t* word, int len, - const BrotliTransforms* transforms, int transform_idx); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_COMMON_TRANSFORM_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/common/version.h b/BaseTool= s/Source/C/BrotliCompress/common/version.h deleted file mode 100644 index 8e94f4ffeacd..000000000000 --- a/BaseTools/Source/C/BrotliCompress/common/version.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2016 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Version definition. */ - -#ifndef BROTLI_COMMON_VERSION_H_ -#define BROTLI_COMMON_VERSION_H_ - -/* This macro should only be used when library is compiled together with = client. - If library is dynamically linked, use BrotliDecoderVersion and - BrotliEncoderVersion methods. */ - -/* Semantic version, calculated as (MAJOR << 24) | (MINOR << 12) | PATCH = */ -#define BROTLI_VERSION 0x1000006 - -/* This macro is used by build system to produce Libtool-friendly soname.= See - https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioni= ng.html - */ - -/* ABI version, calculated as (CURRENT << 24) | (REVISION << 12) | AGE */ -#define BROTLI_ABI_VERSION 0x1006000 - -#endif /* BROTLI_COMMON_VERSION_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h b/BaseTool= s/Source/C/BrotliCompress/dec/bit_reader.h deleted file mode 100644 index b13e33fea208..000000000000 --- a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h +++ /dev/null @@ -1,309 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Bit reading helpers */ - -#ifndef BROTLI_DEC_BIT_READER_H_ -#define BROTLI_DEC_BIT_READER_H_ - -#include /* memcpy */ - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(brotli_reg_t) >> 1) - -static const uint32_t kBitMask[33] =3D { 0x00000000, - 0x00000001, 0x00000003, 0x00000007, 0x0000000F, - 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF, - 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF, - 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF, - 0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF, - 0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF, - 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF, - 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF -}; - -static BROTLI_INLINE uint32_t BitMask(uint32_t n) { - if (BROTLI_IS_CONSTANT(n) || BROTLI_HAS_UBFX) { - /* Masking with this expression turns to a single - "Unsigned Bit Field Extract" UBFX instruction on ARM. */ - return ~((0xFFFFFFFFu) << n); - } else { - return kBitMask[n]; - } -} - -typedef struct { - brotli_reg_t val_; /* pre-fetched bits */ - uint32_t bit_pos_; /* current bit-reading position in val_ */ - const uint8_t* next_in; /* the byte we're reading from */ - size_t avail_in; -} BrotliBitReader; - -typedef struct { - brotli_reg_t val_; - uint32_t bit_pos_; - const uint8_t* next_in; - size_t avail_in; -} BrotliBitReaderState; - -/* Initializes the BrotliBitReader fields. */ -BROTLI_INTERNAL void BrotliInitBitReader(BrotliBitReader* const br); - -/* Ensures that accumulator is not empty. - May consume up to sizeof(brotli_reg_t) - 1 bytes of input. - Returns BROTLI_FALSE if data is required but there is no input availab= le. - For BROTLI_ALIGNED_READ this function also prepares bit reader for ali= gned - reading. */ -BROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const = br); - -static BROTLI_INLINE void BrotliBitReaderSaveState( - BrotliBitReader* const from, BrotliBitReaderState* to) { - to->val_ =3D from->val_; - to->bit_pos_ =3D from->bit_pos_; - to->next_in =3D from->next_in; - to->avail_in =3D from->avail_in; -} - -static BROTLI_INLINE void BrotliBitReaderRestoreState( - BrotliBitReader* const to, BrotliBitReaderState* from) { - to->val_ =3D from->val_; - to->bit_pos_ =3D from->bit_pos_; - to->next_in =3D from->next_in; - to->avail_in =3D from->avail_in; -} - -static BROTLI_INLINE uint32_t BrotliGetAvailableBits( - const BrotliBitReader* br) { - return (BROTLI_64_BITS ? 64 : 32) - br->bit_pos_; -} - -/* Returns amount of unread bytes the bit reader still has buffered from = the - BrotliInput, including whole bytes in br->val_. */ -static BROTLI_INLINE size_t BrotliGetRemainingBytes(BrotliBitReader* br) = { - return br->avail_in + (BrotliGetAvailableBits(br) >> 3); -} - -/* Checks if there is at least |num| bytes left in the input ring-buffer - (excluding the bits remaining in br->val_). */ -static BROTLI_INLINE BROTLI_BOOL BrotliCheckInputAmount( - BrotliBitReader* const br, size_t num) { - return TO_BROTLI_BOOL(br->avail_in >=3D num); -} - -/* Guarantees that there are at least |n_bits| + 1 bits in accumulator. - Precondition: accumulator contains at least 1 bit. - |n_bits| should be in the range [1..24] for regular build. For portabl= e - non-64-bit little-endian build only 16 bits are safe to request. */ -static BROTLI_INLINE void BrotliFillBitWindow( - BrotliBitReader* const br, uint32_t n_bits) { -#if (BROTLI_64_BITS) - if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <=3D = 8)) { - if (br->bit_pos_ >=3D 56) { - br->val_ >>=3D 56; - br->bit_pos_ ^=3D 56; /* here same as -=3D 56 because of the if co= ndition */ - br->val_ |=3D BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 8; - br->avail_in -=3D 7; - br->next_in +=3D 7; - } - } else if ( - !BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <=3D = 16)) { - if (br->bit_pos_ >=3D 48) { - br->val_ >>=3D 48; - br->bit_pos_ ^=3D 48; /* here same as -=3D 48 because of the if co= ndition */ - br->val_ |=3D BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 16; - br->avail_in -=3D 6; - br->next_in +=3D 6; - } - } else { - if (br->bit_pos_ >=3D 32) { - br->val_ >>=3D 32; - br->bit_pos_ ^=3D 32; /* here same as -=3D 32 because of the if co= ndition */ - br->val_ |=3D ((uint64_t)BROTLI_UNALIGNED_LOAD32LE(br->next_in)) <<= 32; - br->avail_in -=3D BROTLI_SHORT_FILL_BIT_WINDOW_READ; - br->next_in +=3D BROTLI_SHORT_FILL_BIT_WINDOW_READ; - } - } -#else - if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <=3D = 8)) { - if (br->bit_pos_ >=3D 24) { - br->val_ >>=3D 24; - br->bit_pos_ ^=3D 24; /* here same as -=3D 24 because of the if co= ndition */ - br->val_ |=3D BROTLI_UNALIGNED_LOAD32LE(br->next_in) << 8; - br->avail_in -=3D 3; - br->next_in +=3D 3; - } - } else { - if (br->bit_pos_ >=3D 16) { - br->val_ >>=3D 16; - br->bit_pos_ ^=3D 16; /* here same as -=3D 16 because of the if co= ndition */ - br->val_ |=3D ((uint32_t)BROTLI_UNALIGNED_LOAD16LE(br->next_in)) <<= 16; - br->avail_in -=3D BROTLI_SHORT_FILL_BIT_WINDOW_READ; - br->next_in +=3D BROTLI_SHORT_FILL_BIT_WINDOW_READ; - } - } -#endif -} - -/* Mostly like BrotliFillBitWindow, but guarantees only 16 bits and reads= no - more than BROTLI_SHORT_FILL_BIT_WINDOW_READ bytes of input. */ -static BROTLI_INLINE void BrotliFillBitWindow16(BrotliBitReader* const br= ) { - BrotliFillBitWindow(br, 17); -} - -/* Tries to pull one byte of input to accumulator. - Returns BROTLI_FALSE if there is no input available. */ -static BROTLI_INLINE BROTLI_BOOL BrotliPullByte(BrotliBitReader* const br= ) { - if (br->avail_in =3D=3D 0) { - return BROTLI_FALSE; - } - br->val_ >>=3D 8; -#if (BROTLI_64_BITS) - br->val_ |=3D ((uint64_t)*br->next_in) << 56; -#else - br->val_ |=3D ((uint32_t)*br->next_in) << 24; -#endif - br->bit_pos_ -=3D 8; - --br->avail_in; - ++br->next_in; - return BROTLI_TRUE; -} - -/* Returns currently available bits. - The number of valid bits could be calculated by BrotliGetAvailableBits= . */ -static BROTLI_INLINE brotli_reg_t BrotliGetBitsUnmasked( - BrotliBitReader* const br) { - return br->val_ >> br->bit_pos_; -} - -/* Like BrotliGetBits, but does not mask the result. - The result contains at least 16 valid bits. */ -static BROTLI_INLINE uint32_t BrotliGet16BitsUnmasked( - BrotliBitReader* const br) { - BrotliFillBitWindow(br, 16); - return (uint32_t)BrotliGetBitsUnmasked(br); -} - -/* Returns the specified number of bits from |br| without advancing bit - position. */ -static BROTLI_INLINE uint32_t BrotliGetBits( - BrotliBitReader* const br, uint32_t n_bits) { - BrotliFillBitWindow(br, n_bits); - return (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits); -} - -/* Tries to peek the specified amount of bits. Returns BROTLI_FALSE, if t= here - is not enough input. */ -static BROTLI_INLINE BROTLI_BOOL BrotliSafeGetBits( - BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { - while (BrotliGetAvailableBits(br) < n_bits) { - if (!BrotliPullByte(br)) { - return BROTLI_FALSE; - } - } - *val =3D (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits); - return BROTLI_TRUE; -} - -/* Advances the bit pos by |n_bits|. */ -static BROTLI_INLINE void BrotliDropBits( - BrotliBitReader* const br, uint32_t n_bits) { - br->bit_pos_ +=3D n_bits; -} - -static BROTLI_INLINE void BrotliBitReaderUnload(BrotliBitReader* br) { - uint32_t unused_bytes =3D BrotliGetAvailableBits(br) >> 3; - uint32_t unused_bits =3D unused_bytes << 3; - br->avail_in +=3D unused_bytes; - br->next_in -=3D unused_bytes; - if (unused_bits =3D=3D sizeof(br->val_) << 3) { - br->val_ =3D 0; - } else { - br->val_ <<=3D unused_bits; - } - br->bit_pos_ +=3D unused_bits; -} - -/* Reads the specified number of bits from |br| and advances the bit pos. - Precondition: accumulator MUST contain at least |n_bits|. */ -static BROTLI_INLINE void BrotliTakeBits( - BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { - *val =3D (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits); - BROTLI_LOG(("[BrotliReadBits] %d %d %d val: %6x\n", - (int)br->avail_in, (int)br->bit_pos_, (int)n_bits, (int)*val)); - BrotliDropBits(br, n_bits); -} - -/* Reads the specified number of bits from |br| and advances the bit pos. - Assumes that there is enough input to perform BrotliFillBitWindow. */ -static BROTLI_INLINE uint32_t BrotliReadBits( - BrotliBitReader* const br, uint32_t n_bits) { - if (BROTLI_64_BITS || (n_bits <=3D 16)) { - uint32_t val; - BrotliFillBitWindow(br, n_bits); - BrotliTakeBits(br, n_bits, &val); - return val; - } else { - uint32_t low_val; - uint32_t high_val; - BrotliFillBitWindow(br, 16); - BrotliTakeBits(br, 16, &low_val); - BrotliFillBitWindow(br, 8); - BrotliTakeBits(br, n_bits - 16, &high_val); - return low_val | (high_val << 16); - } -} - -/* Tries to read the specified amount of bits. Returns BROTLI_FALSE, if t= here - is not enough input. |n_bits| MUST be positive. */ -static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits( - BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { - while (BrotliGetAvailableBits(br) < n_bits) { - if (!BrotliPullByte(br)) { - return BROTLI_FALSE; - } - } - BrotliTakeBits(br, n_bits, val); - return BROTLI_TRUE; -} - -/* Advances the bit reader position to the next byte boundary and verifie= s - that any skipped bits are set to zero. */ -static BROTLI_INLINE BROTLI_BOOL BrotliJumpToByteBoundary(BrotliBitReader= * br) { - uint32_t pad_bits_count =3D BrotliGetAvailableBits(br) & 0x7; - uint32_t pad_bits =3D 0; - if (pad_bits_count !=3D 0) { - BrotliTakeBits(br, pad_bits_count, &pad_bits); - } - return TO_BROTLI_BOOL(pad_bits =3D=3D 0); -} - -/* Copies remaining input bytes stored in the bit reader to the output. V= alue - |num| may not be larger than BrotliGetRemainingBytes. The bit reader m= ust be - warmed up again after this. */ -static BROTLI_INLINE void BrotliCopyBytes(uint8_t* dest, - BrotliBitReader* br, size_t num= ) { - while (BrotliGetAvailableBits(br) >=3D 8 && num > 0) { - *dest =3D (uint8_t)BrotliGetBitsUnmasked(br); - BrotliDropBits(br, 8); - ++dest; - --num; - } - memcpy(dest, br->next_in, num); - br->avail_in -=3D num; - br->next_in +=3D num; -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_DEC_BIT_READER_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/dec/huffman.h b/BaseTools/S= ource/C/BrotliCompress/dec/huffman.h deleted file mode 100644 index 5fc8c0224edc..000000000000 --- a/BaseTools/Source/C/BrotliCompress/dec/huffman.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Utilities for building Huffman decoding tables. */ - -#ifndef BROTLI_DEC_HUFFMAN_H_ -#define BROTLI_DEC_HUFFMAN_H_ - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define BROTLI_HUFFMAN_MAX_CODE_LENGTH 15 - -/* Maximum possible Huffman table size for an alphabet size of (index * 3= 2), - max code length 15 and root table bits 8. */ -static const uint16_t kMaxHuffmanTableSize[] =3D { - 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 8= 22, - 854, 886, 920, 952, 984, 1016, 1048, 1080, 1112, 1144, 1176, 1208, 1240= , 1272, - 1304, 1336, 1368, 1400, 1432, 1464, 1496, 1528}; -/* BROTLI_NUM_BLOCK_LEN_SYMBOLS =3D=3D 26 */ -#define BROTLI_HUFFMAN_MAX_SIZE_26 396 -/* BROTLI_MAX_BLOCK_TYPE_SYMBOLS =3D=3D 258 */ -#define BROTLI_HUFFMAN_MAX_SIZE_258 632 -/* BROTLI_MAX_CONTEXT_MAP_SYMBOLS =3D=3D 272 */ -#define BROTLI_HUFFMAN_MAX_SIZE_272 646 - -#define BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH 5 - -typedef struct { - uint8_t bits; /* number of bits used for this symbol */ - uint16_t value; /* symbol value or table offset */ -} HuffmanCode; - -/* Builds Huffman lookup table assuming code lengths are in symbol order.= */ -BROTLI_INTERNAL void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* root= _table, - const uint8_t* const code_lengths, uint16_t* count); - -/* Builds Huffman lookup table assuming code lengths are in symbol order. - Returns size of resulting table. */ -BROTLI_INTERNAL uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table, - int root_bits, const uint16_t* const symbol_lists, uint16_t* count_ar= g); - -/* Builds a simple Huffman table. The |num_symbols| parameter is to be - interpreted as follows: 0 means 1 symbol, 1 means 2 symbols, - 2 means 3 symbols, 3 means 4 symbols with lengths [2, 2, 2, 2], - 4 means 4 symbols with lengths [1, 2, 3, 3]. */ -BROTLI_INTERNAL uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table= , - int root_bits, uint16_t* symbols, uint32_t num_symbols); - -/* Contains a collection of Huffman trees with the same alphabet size. */ -/* max_symbol is needed due to simple codes since log2(alphabet_size) cou= ld be - greater than log2(max_symbol). */ -typedef struct { - HuffmanCode** htrees; - HuffmanCode* codes; - uint16_t alphabet_size; - uint16_t max_symbol; - uint16_t num_htrees; -} HuffmanTreeGroup; - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_DEC_HUFFMAN_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/dec/prefix.h b/BaseTools/So= urce/C/BrotliCompress/dec/prefix.h deleted file mode 100644 index 39cb45920831..000000000000 --- a/BaseTools/Source/C/BrotliCompress/dec/prefix.h +++ /dev/null @@ -1,750 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Lookup tables to map prefix codes to value ranges. This is used during - decoding of the block lengths, literal insertion lengths and copy leng= ths. */ - -#ifndef BROTLI_DEC_PREFIX_H_ -#define BROTLI_DEC_PREFIX_H_ - -#include "../common/constants.h" -#include - -/* Represents the range of values belonging to a prefix code: - [offset, offset + 2^nbits) */ -struct PrefixCodeRange { - uint16_t offset; - uint8_t nbits; -}; - -static const struct PrefixCodeRange - kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] =3D { - { 1, 2}, { 5, 2}, { 9, 2}, { 13, 2}, - { 17, 3}, { 25, 3}, { 33, 3}, { 41, 3}, - { 49, 4}, { 65, 4}, { 81, 4}, { 97, 4}, - { 113, 5}, { 145, 5}, { 177, 5}, { 209, 5}, - { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8}, - { 753, 9}, { 1265, 10}, {2289, 11}, {4337, 12}, - {8433, 13}, {16625, 24} -}; - -typedef struct CmdLutElement { - uint8_t insert_len_extra_bits; - uint8_t copy_len_extra_bits; - int8_t distance_code; - uint8_t context; - uint16_t insert_len_offset; - uint16_t copy_len_offset; -} CmdLutElement; - -static const CmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS] =3D { - { 0x00, 0x00, 0, 0x00, 0x0000, 0x0002 }, - { 0x00, 0x00, 0, 0x01, 0x0000, 0x0003 }, - { 0x00, 0x00, 0, 0x02, 0x0000, 0x0004 }, - { 0x00, 0x00, 0, 0x03, 0x0000, 0x0005 }, - { 0x00, 0x00, 0, 0x03, 0x0000, 0x0006 }, - { 0x00, 0x00, 0, 0x03, 0x0000, 0x0007 }, - { 0x00, 0x00, 0, 0x03, 0x0000, 0x0008 }, - { 0x00, 0x00, 0, 0x03, 0x0000, 0x0009 }, - { 0x00, 0x00, 0, 0x00, 0x0001, 0x0002 }, - { 0x00, 0x00, 0, 0x01, 0x0001, 0x0003 }, - { 0x00, 0x00, 0, 0x02, 0x0001, 0x0004 }, - { 0x00, 0x00, 0, 0x03, 0x0001, 0x0005 }, - { 0x00, 0x00, 0, 0x03, 0x0001, 0x0006 }, - { 0x00, 0x00, 0, 0x03, 0x0001, 0x0007 }, - { 0x00, 0x00, 0, 0x03, 0x0001, 0x0008 }, - { 0x00, 0x00, 0, 0x03, 0x0001, 0x0009 }, - { 0x00, 0x00, 0, 0x00, 0x0002, 0x0002 }, - { 0x00, 0x00, 0, 0x01, 0x0002, 0x0003 }, - { 0x00, 0x00, 0, 0x02, 0x0002, 0x0004 }, - { 0x00, 0x00, 0, 0x03, 0x0002, 0x0005 }, - { 0x00, 0x00, 0, 0x03, 0x0002, 0x0006 }, - { 0x00, 0x00, 0, 0x03, 0x0002, 0x0007 }, - { 0x00, 0x00, 0, 0x03, 0x0002, 0x0008 }, - { 0x00, 0x00, 0, 0x03, 0x0002, 0x0009 }, - { 0x00, 0x00, 0, 0x00, 0x0003, 0x0002 }, - { 0x00, 0x00, 0, 0x01, 0x0003, 0x0003 }, - { 0x00, 0x00, 0, 0x02, 0x0003, 0x0004 }, - { 0x00, 0x00, 0, 0x03, 0x0003, 0x0005 }, - { 0x00, 0x00, 0, 0x03, 0x0003, 0x0006 }, - { 0x00, 0x00, 0, 0x03, 0x0003, 0x0007 }, - { 0x00, 0x00, 0, 0x03, 0x0003, 0x0008 }, - { 0x00, 0x00, 0, 0x03, 0x0003, 0x0009 }, - { 0x00, 0x00, 0, 0x00, 0x0004, 0x0002 }, - { 0x00, 0x00, 0, 0x01, 0x0004, 0x0003 }, - { 0x00, 0x00, 0, 0x02, 0x0004, 0x0004 }, - { 0x00, 0x00, 0, 0x03, 0x0004, 0x0005 }, - { 0x00, 0x00, 0, 0x03, 0x0004, 0x0006 }, - { 0x00, 0x00, 0, 0x03, 0x0004, 0x0007 }, - { 0x00, 0x00, 0, 0x03, 0x0004, 0x0008 }, - { 0x00, 0x00, 0, 0x03, 0x0004, 0x0009 }, - { 0x00, 0x00, 0, 0x00, 0x0005, 0x0002 }, - { 0x00, 0x00, 0, 0x01, 0x0005, 0x0003 }, - { 0x00, 0x00, 0, 0x02, 0x0005, 0x0004 }, - { 0x00, 0x00, 0, 0x03, 0x0005, 0x0005 }, - { 0x00, 0x00, 0, 0x03, 0x0005, 0x0006 }, - { 0x00, 0x00, 0, 0x03, 0x0005, 0x0007 }, - { 0x00, 0x00, 0, 0x03, 0x0005, 0x0008 }, - { 0x00, 0x00, 0, 0x03, 0x0005, 0x0009 }, - { 0x01, 0x00, 0, 0x00, 0x0006, 0x0002 }, - { 0x01, 0x00, 0, 0x01, 0x0006, 0x0003 }, - { 0x01, 0x00, 0, 0x02, 0x0006, 0x0004 }, - { 0x01, 0x00, 0, 0x03, 0x0006, 0x0005 }, - { 0x01, 0x00, 0, 0x03, 0x0006, 0x0006 }, - { 0x01, 0x00, 0, 0x03, 0x0006, 0x0007 }, - { 0x01, 0x00, 0, 0x03, 0x0006, 0x0008 }, - { 0x01, 0x00, 0, 0x03, 0x0006, 0x0009 }, - { 0x01, 0x00, 0, 0x00, 0x0008, 0x0002 }, - { 0x01, 0x00, 0, 0x01, 0x0008, 0x0003 }, - { 0x01, 0x00, 0, 0x02, 0x0008, 0x0004 }, - { 0x01, 0x00, 0, 0x03, 0x0008, 0x0005 }, - { 0x01, 0x00, 0, 0x03, 0x0008, 0x0006 }, - { 0x01, 0x00, 0, 0x03, 0x0008, 0x0007 }, - { 0x01, 0x00, 0, 0x03, 0x0008, 0x0008 }, - { 0x01, 0x00, 0, 0x03, 0x0008, 0x0009 }, - { 0x00, 0x01, 0, 0x03, 0x0000, 0x000a }, - { 0x00, 0x01, 0, 0x03, 0x0000, 0x000c }, - { 0x00, 0x02, 0, 0x03, 0x0000, 0x000e }, - { 0x00, 0x02, 0, 0x03, 0x0000, 0x0012 }, - { 0x00, 0x03, 0, 0x03, 0x0000, 0x0016 }, - { 0x00, 0x03, 0, 0x03, 0x0000, 0x001e }, - { 0x00, 0x04, 0, 0x03, 0x0000, 0x0026 }, - { 0x00, 0x04, 0, 0x03, 0x0000, 0x0036 }, - { 0x00, 0x01, 0, 0x03, 0x0001, 0x000a }, - { 0x00, 0x01, 0, 0x03, 0x0001, 0x000c }, - { 0x00, 0x02, 0, 0x03, 0x0001, 0x000e }, - { 0x00, 0x02, 0, 0x03, 0x0001, 0x0012 }, - { 0x00, 0x03, 0, 0x03, 0x0001, 0x0016 }, - { 0x00, 0x03, 0, 0x03, 0x0001, 0x001e }, - { 0x00, 0x04, 0, 0x03, 0x0001, 0x0026 }, - { 0x00, 0x04, 0, 0x03, 0x0001, 0x0036 }, - { 0x00, 0x01, 0, 0x03, 0x0002, 0x000a }, - { 0x00, 0x01, 0, 0x03, 0x0002, 0x000c }, - { 0x00, 0x02, 0, 0x03, 0x0002, 0x000e }, - { 0x00, 0x02, 0, 0x03, 0x0002, 0x0012 }, - { 0x00, 0x03, 0, 0x03, 0x0002, 0x0016 }, - { 0x00, 0x03, 0, 0x03, 0x0002, 0x001e }, - { 0x00, 0x04, 0, 0x03, 0x0002, 0x0026 }, - { 0x00, 0x04, 0, 0x03, 0x0002, 0x0036 }, - { 0x00, 0x01, 0, 0x03, 0x0003, 0x000a }, - { 0x00, 0x01, 0, 0x03, 0x0003, 0x000c }, - { 0x00, 0x02, 0, 0x03, 0x0003, 0x000e }, - { 0x00, 0x02, 0, 0x03, 0x0003, 0x0012 }, - { 0x00, 0x03, 0, 0x03, 0x0003, 0x0016 }, - { 0x00, 0x03, 0, 0x03, 0x0003, 0x001e }, - { 0x00, 0x04, 0, 0x03, 0x0003, 0x0026 }, - { 0x00, 0x04, 0, 0x03, 0x0003, 0x0036 }, - { 0x00, 0x01, 0, 0x03, 0x0004, 0x000a }, - { 0x00, 0x01, 0, 0x03, 0x0004, 0x000c }, - { 0x00, 0x02, 0, 0x03, 0x0004, 0x000e }, - { 0x00, 0x02, 0, 0x03, 0x0004, 0x0012 }, - { 0x00, 0x03, 0, 0x03, 0x0004, 0x0016 }, - { 0x00, 0x03, 0, 0x03, 0x0004, 0x001e }, - { 0x00, 0x04, 0, 0x03, 0x0004, 0x0026 }, - { 0x00, 0x04, 0, 0x03, 0x0004, 0x0036 }, - { 0x00, 0x01, 0, 0x03, 0x0005, 0x000a }, - { 0x00, 0x01, 0, 0x03, 0x0005, 0x000c }, - { 0x00, 0x02, 0, 0x03, 0x0005, 0x000e }, - { 0x00, 0x02, 0, 0x03, 0x0005, 0x0012 }, - { 0x00, 0x03, 0, 0x03, 0x0005, 0x0016 }, - { 0x00, 0x03, 0, 0x03, 0x0005, 0x001e }, - { 0x00, 0x04, 0, 0x03, 0x0005, 0x0026 }, - { 0x00, 0x04, 0, 0x03, 0x0005, 0x0036 }, - { 0x01, 0x01, 0, 0x03, 0x0006, 0x000a }, - { 0x01, 0x01, 0, 0x03, 0x0006, 0x000c }, - { 0x01, 0x02, 0, 0x03, 0x0006, 0x000e }, - { 0x01, 0x02, 0, 0x03, 0x0006, 0x0012 }, - { 0x01, 0x03, 0, 0x03, 0x0006, 0x0016 }, - { 0x01, 0x03, 0, 0x03, 0x0006, 0x001e }, - { 0x01, 0x04, 0, 0x03, 0x0006, 0x0026 }, - { 0x01, 0x04, 0, 0x03, 0x0006, 0x0036 }, - { 0x01, 0x01, 0, 0x03, 0x0008, 0x000a }, - { 0x01, 0x01, 0, 0x03, 0x0008, 0x000c }, - { 0x01, 0x02, 0, 0x03, 0x0008, 0x000e }, - { 0x01, 0x02, 0, 0x03, 0x0008, 0x0012 }, - { 0x01, 0x03, 0, 0x03, 0x0008, 0x0016 }, - { 0x01, 0x03, 0, 0x03, 0x0008, 0x001e }, - { 0x01, 0x04, 0, 0x03, 0x0008, 0x0026 }, - { 0x01, 0x04, 0, 0x03, 0x0008, 0x0036 }, - { 0x00, 0x00, -1, 0x00, 0x0000, 0x0002 }, - { 0x00, 0x00, -1, 0x01, 0x0000, 0x0003 }, - { 0x00, 0x00, -1, 0x02, 0x0000, 0x0004 }, - { 0x00, 0x00, -1, 0x03, 0x0000, 0x0005 }, - { 0x00, 0x00, -1, 0x03, 0x0000, 0x0006 }, - { 0x00, 0x00, -1, 0x03, 0x0000, 0x0007 }, - { 0x00, 0x00, -1, 0x03, 0x0000, 0x0008 }, - { 0x00, 0x00, -1, 0x03, 0x0000, 0x0009 }, - { 0x00, 0x00, -1, 0x00, 0x0001, 0x0002 }, - { 0x00, 0x00, -1, 0x01, 0x0001, 0x0003 }, - { 0x00, 0x00, -1, 0x02, 0x0001, 0x0004 }, - { 0x00, 0x00, -1, 0x03, 0x0001, 0x0005 }, - { 0x00, 0x00, -1, 0x03, 0x0001, 0x0006 }, - { 0x00, 0x00, -1, 0x03, 0x0001, 0x0007 }, - { 0x00, 0x00, -1, 0x03, 0x0001, 0x0008 }, - { 0x00, 0x00, -1, 0x03, 0x0001, 0x0009 }, - { 0x00, 0x00, -1, 0x00, 0x0002, 0x0002 }, - { 0x00, 0x00, -1, 0x01, 0x0002, 0x0003 }, - { 0x00, 0x00, -1, 0x02, 0x0002, 0x0004 }, - { 0x00, 0x00, -1, 0x03, 0x0002, 0x0005 }, - { 0x00, 0x00, -1, 0x03, 0x0002, 0x0006 }, - { 0x00, 0x00, -1, 0x03, 0x0002, 0x0007 }, - { 0x00, 0x00, -1, 0x03, 0x0002, 0x0008 }, - { 0x00, 0x00, -1, 0x03, 0x0002, 0x0009 }, - { 0x00, 0x00, -1, 0x00, 0x0003, 0x0002 }, - { 0x00, 0x00, -1, 0x01, 0x0003, 0x0003 }, - { 0x00, 0x00, -1, 0x02, 0x0003, 0x0004 }, - { 0x00, 0x00, -1, 0x03, 0x0003, 0x0005 }, - { 0x00, 0x00, -1, 0x03, 0x0003, 0x0006 }, - { 0x00, 0x00, -1, 0x03, 0x0003, 0x0007 }, - { 0x00, 0x00, -1, 0x03, 0x0003, 0x0008 }, - { 0x00, 0x00, -1, 0x03, 0x0003, 0x0009 }, - { 0x00, 0x00, -1, 0x00, 0x0004, 0x0002 }, - { 0x00, 0x00, -1, 0x01, 0x0004, 0x0003 }, - { 0x00, 0x00, -1, 0x02, 0x0004, 0x0004 }, - { 0x00, 0x00, -1, 0x03, 0x0004, 0x0005 }, - { 0x00, 0x00, -1, 0x03, 0x0004, 0x0006 }, - { 0x00, 0x00, -1, 0x03, 0x0004, 0x0007 }, - { 0x00, 0x00, -1, 0x03, 0x0004, 0x0008 }, - { 0x00, 0x00, -1, 0x03, 0x0004, 0x0009 }, - { 0x00, 0x00, -1, 0x00, 0x0005, 0x0002 }, - { 0x00, 0x00, -1, 0x01, 0x0005, 0x0003 }, - { 0x00, 0x00, -1, 0x02, 0x0005, 0x0004 }, - { 0x00, 0x00, -1, 0x03, 0x0005, 0x0005 }, - { 0x00, 0x00, -1, 0x03, 0x0005, 0x0006 }, - { 0x00, 0x00, -1, 0x03, 0x0005, 0x0007 }, - { 0x00, 0x00, -1, 0x03, 0x0005, 0x0008 }, - { 0x00, 0x00, -1, 0x03, 0x0005, 0x0009 }, - { 0x01, 0x00, -1, 0x00, 0x0006, 0x0002 }, - { 0x01, 0x00, -1, 0x01, 0x0006, 0x0003 }, - { 0x01, 0x00, -1, 0x02, 0x0006, 0x0004 }, - { 0x01, 0x00, -1, 0x03, 0x0006, 0x0005 }, - { 0x01, 0x00, -1, 0x03, 0x0006, 0x0006 }, - { 0x01, 0x00, -1, 0x03, 0x0006, 0x0007 }, - { 0x01, 0x00, -1, 0x03, 0x0006, 0x0008 }, - { 0x01, 0x00, -1, 0x03, 0x0006, 0x0009 }, - { 0x01, 0x00, -1, 0x00, 0x0008, 0x0002 }, - { 0x01, 0x00, -1, 0x01, 0x0008, 0x0003 }, - { 0x01, 0x00, -1, 0x02, 0x0008, 0x0004 }, - { 0x01, 0x00, -1, 0x03, 0x0008, 0x0005 }, - { 0x01, 0x00, -1, 0x03, 0x0008, 0x0006 }, - { 0x01, 0x00, -1, 0x03, 0x0008, 0x0007 }, - { 0x01, 0x00, -1, 0x03, 0x0008, 0x0008 }, - { 0x01, 0x00, -1, 0x03, 0x0008, 0x0009 }, - { 0x00, 0x01, -1, 0x03, 0x0000, 0x000a }, - { 0x00, 0x01, -1, 0x03, 0x0000, 0x000c }, - { 0x00, 0x02, -1, 0x03, 0x0000, 0x000e }, - { 0x00, 0x02, -1, 0x03, 0x0000, 0x0012 }, - { 0x00, 0x03, -1, 0x03, 0x0000, 0x0016 }, - { 0x00, 0x03, -1, 0x03, 0x0000, 0x001e }, - { 0x00, 0x04, -1, 0x03, 0x0000, 0x0026 }, - { 0x00, 0x04, -1, 0x03, 0x0000, 0x0036 }, - { 0x00, 0x01, -1, 0x03, 0x0001, 0x000a }, - { 0x00, 0x01, -1, 0x03, 0x0001, 0x000c }, - { 0x00, 0x02, -1, 0x03, 0x0001, 0x000e }, - { 0x00, 0x02, -1, 0x03, 0x0001, 0x0012 }, - { 0x00, 0x03, -1, 0x03, 0x0001, 0x0016 }, - { 0x00, 0x03, -1, 0x03, 0x0001, 0x001e }, - { 0x00, 0x04, -1, 0x03, 0x0001, 0x0026 }, - { 0x00, 0x04, -1, 0x03, 0x0001, 0x0036 }, - { 0x00, 0x01, -1, 0x03, 0x0002, 0x000a }, - { 0x00, 0x01, -1, 0x03, 0x0002, 0x000c }, - { 0x00, 0x02, -1, 0x03, 0x0002, 0x000e }, - { 0x00, 0x02, -1, 0x03, 0x0002, 0x0012 }, - { 0x00, 0x03, -1, 0x03, 0x0002, 0x0016 }, - { 0x00, 0x03, -1, 0x03, 0x0002, 0x001e }, - { 0x00, 0x04, -1, 0x03, 0x0002, 0x0026 }, - { 0x00, 0x04, -1, 0x03, 0x0002, 0x0036 }, - { 0x00, 0x01, -1, 0x03, 0x0003, 0x000a }, - { 0x00, 0x01, -1, 0x03, 0x0003, 0x000c }, - { 0x00, 0x02, -1, 0x03, 0x0003, 0x000e }, - { 0x00, 0x02, -1, 0x03, 0x0003, 0x0012 }, - { 0x00, 0x03, -1, 0x03, 0x0003, 0x0016 }, - { 0x00, 0x03, -1, 0x03, 0x0003, 0x001e }, - { 0x00, 0x04, -1, 0x03, 0x0003, 0x0026 }, - { 0x00, 0x04, -1, 0x03, 0x0003, 0x0036 }, - { 0x00, 0x01, -1, 0x03, 0x0004, 0x000a }, - { 0x00, 0x01, -1, 0x03, 0x0004, 0x000c }, - { 0x00, 0x02, -1, 0x03, 0x0004, 0x000e }, - { 0x00, 0x02, -1, 0x03, 0x0004, 0x0012 }, - { 0x00, 0x03, -1, 0x03, 0x0004, 0x0016 }, - { 0x00, 0x03, -1, 0x03, 0x0004, 0x001e }, - { 0x00, 0x04, -1, 0x03, 0x0004, 0x0026 }, - { 0x00, 0x04, -1, 0x03, 0x0004, 0x0036 }, - { 0x00, 0x01, -1, 0x03, 0x0005, 0x000a }, - { 0x00, 0x01, -1, 0x03, 0x0005, 0x000c }, - { 0x00, 0x02, -1, 0x03, 0x0005, 0x000e }, - { 0x00, 0x02, -1, 0x03, 0x0005, 0x0012 }, - { 0x00, 0x03, -1, 0x03, 0x0005, 0x0016 }, - { 0x00, 0x03, -1, 0x03, 0x0005, 0x001e }, - { 0x00, 0x04, -1, 0x03, 0x0005, 0x0026 }, - { 0x00, 0x04, -1, 0x03, 0x0005, 0x0036 }, - { 0x01, 0x01, -1, 0x03, 0x0006, 0x000a }, - { 0x01, 0x01, -1, 0x03, 0x0006, 0x000c }, - { 0x01, 0x02, -1, 0x03, 0x0006, 0x000e }, - { 0x01, 0x02, -1, 0x03, 0x0006, 0x0012 }, - { 0x01, 0x03, -1, 0x03, 0x0006, 0x0016 }, - { 0x01, 0x03, -1, 0x03, 0x0006, 0x001e }, - { 0x01, 0x04, -1, 0x03, 0x0006, 0x0026 }, - { 0x01, 0x04, -1, 0x03, 0x0006, 0x0036 }, - { 0x01, 0x01, -1, 0x03, 0x0008, 0x000a }, - { 0x01, 0x01, -1, 0x03, 0x0008, 0x000c }, - { 0x01, 0x02, -1, 0x03, 0x0008, 0x000e }, - { 0x01, 0x02, -1, 0x03, 0x0008, 0x0012 }, - { 0x01, 0x03, -1, 0x03, 0x0008, 0x0016 }, - { 0x01, 0x03, -1, 0x03, 0x0008, 0x001e }, - { 0x01, 0x04, -1, 0x03, 0x0008, 0x0026 }, - { 0x01, 0x04, -1, 0x03, 0x0008, 0x0036 }, - { 0x02, 0x00, -1, 0x00, 0x000a, 0x0002 }, - { 0x02, 0x00, -1, 0x01, 0x000a, 0x0003 }, - { 0x02, 0x00, -1, 0x02, 0x000a, 0x0004 }, - { 0x02, 0x00, -1, 0x03, 0x000a, 0x0005 }, - { 0x02, 0x00, -1, 0x03, 0x000a, 0x0006 }, - { 0x02, 0x00, -1, 0x03, 0x000a, 0x0007 }, - { 0x02, 0x00, -1, 0x03, 0x000a, 0x0008 }, - { 0x02, 0x00, -1, 0x03, 0x000a, 0x0009 }, - { 0x02, 0x00, -1, 0x00, 0x000e, 0x0002 }, - { 0x02, 0x00, -1, 0x01, 0x000e, 0x0003 }, - { 0x02, 0x00, -1, 0x02, 0x000e, 0x0004 }, - { 0x02, 0x00, -1, 0x03, 0x000e, 0x0005 }, - { 0x02, 0x00, -1, 0x03, 0x000e, 0x0006 }, - { 0x02, 0x00, -1, 0x03, 0x000e, 0x0007 }, - { 0x02, 0x00, -1, 0x03, 0x000e, 0x0008 }, - { 0x02, 0x00, -1, 0x03, 0x000e, 0x0009 }, - { 0x03, 0x00, -1, 0x00, 0x0012, 0x0002 }, - { 0x03, 0x00, -1, 0x01, 0x0012, 0x0003 }, - { 0x03, 0x00, -1, 0x02, 0x0012, 0x0004 }, - { 0x03, 0x00, -1, 0x03, 0x0012, 0x0005 }, - { 0x03, 0x00, -1, 0x03, 0x0012, 0x0006 }, - { 0x03, 0x00, -1, 0x03, 0x0012, 0x0007 }, - { 0x03, 0x00, -1, 0x03, 0x0012, 0x0008 }, - { 0x03, 0x00, -1, 0x03, 0x0012, 0x0009 }, - { 0x03, 0x00, -1, 0x00, 0x001a, 0x0002 }, - { 0x03, 0x00, -1, 0x01, 0x001a, 0x0003 }, - { 0x03, 0x00, -1, 0x02, 0x001a, 0x0004 }, - { 0x03, 0x00, -1, 0x03, 0x001a, 0x0005 }, - { 0x03, 0x00, -1, 0x03, 0x001a, 0x0006 }, - { 0x03, 0x00, -1, 0x03, 0x001a, 0x0007 }, - { 0x03, 0x00, -1, 0x03, 0x001a, 0x0008 }, - { 0x03, 0x00, -1, 0x03, 0x001a, 0x0009 }, - { 0x04, 0x00, -1, 0x00, 0x0022, 0x0002 }, - { 0x04, 0x00, -1, 0x01, 0x0022, 0x0003 }, - { 0x04, 0x00, -1, 0x02, 0x0022, 0x0004 }, - { 0x04, 0x00, -1, 0x03, 0x0022, 0x0005 }, - { 0x04, 0x00, -1, 0x03, 0x0022, 0x0006 }, - { 0x04, 0x00, -1, 0x03, 0x0022, 0x0007 }, - { 0x04, 0x00, -1, 0x03, 0x0022, 0x0008 }, - { 0x04, 0x00, -1, 0x03, 0x0022, 0x0009 }, - { 0x04, 0x00, -1, 0x00, 0x0032, 0x0002 }, - { 0x04, 0x00, -1, 0x01, 0x0032, 0x0003 }, - { 0x04, 0x00, -1, 0x02, 0x0032, 0x0004 }, - { 0x04, 0x00, -1, 0x03, 0x0032, 0x0005 }, - { 0x04, 0x00, -1, 0x03, 0x0032, 0x0006 }, - { 0x04, 0x00, -1, 0x03, 0x0032, 0x0007 }, - { 0x04, 0x00, -1, 0x03, 0x0032, 0x0008 }, - { 0x04, 0x00, -1, 0x03, 0x0032, 0x0009 }, - { 0x05, 0x00, -1, 0x00, 0x0042, 0x0002 }, - { 0x05, 0x00, -1, 0x01, 0x0042, 0x0003 }, - { 0x05, 0x00, -1, 0x02, 0x0042, 0x0004 }, - { 0x05, 0x00, -1, 0x03, 0x0042, 0x0005 }, - { 0x05, 0x00, -1, 0x03, 0x0042, 0x0006 }, - { 0x05, 0x00, -1, 0x03, 0x0042, 0x0007 }, - { 0x05, 0x00, -1, 0x03, 0x0042, 0x0008 }, - { 0x05, 0x00, -1, 0x03, 0x0042, 0x0009 }, - { 0x05, 0x00, -1, 0x00, 0x0062, 0x0002 }, - { 0x05, 0x00, -1, 0x01, 0x0062, 0x0003 }, - { 0x05, 0x00, -1, 0x02, 0x0062, 0x0004 }, - { 0x05, 0x00, -1, 0x03, 0x0062, 0x0005 }, - { 0x05, 0x00, -1, 0x03, 0x0062, 0x0006 }, - { 0x05, 0x00, -1, 0x03, 0x0062, 0x0007 }, - { 0x05, 0x00, -1, 0x03, 0x0062, 0x0008 }, - { 0x05, 0x00, -1, 0x03, 0x0062, 0x0009 }, - { 0x02, 0x01, -1, 0x03, 0x000a, 0x000a }, - { 0x02, 0x01, -1, 0x03, 0x000a, 0x000c }, - { 0x02, 0x02, -1, 0x03, 0x000a, 0x000e }, - { 0x02, 0x02, -1, 0x03, 0x000a, 0x0012 }, - { 0x02, 0x03, -1, 0x03, 0x000a, 0x0016 }, - { 0x02, 0x03, -1, 0x03, 0x000a, 0x001e }, - { 0x02, 0x04, -1, 0x03, 0x000a, 0x0026 }, - { 0x02, 0x04, -1, 0x03, 0x000a, 0x0036 }, - { 0x02, 0x01, -1, 0x03, 0x000e, 0x000a }, - { 0x02, 0x01, -1, 0x03, 0x000e, 0x000c }, - { 0x02, 0x02, -1, 0x03, 0x000e, 0x000e }, - { 0x02, 0x02, -1, 0x03, 0x000e, 0x0012 }, - { 0x02, 0x03, -1, 0x03, 0x000e, 0x0016 }, - { 0x02, 0x03, -1, 0x03, 0x000e, 0x001e }, - { 0x02, 0x04, -1, 0x03, 0x000e, 0x0026 }, - { 0x02, 0x04, -1, 0x03, 0x000e, 0x0036 }, - { 0x03, 0x01, -1, 0x03, 0x0012, 0x000a }, - { 0x03, 0x01, -1, 0x03, 0x0012, 0x000c }, - { 0x03, 0x02, -1, 0x03, 0x0012, 0x000e }, - { 0x03, 0x02, -1, 0x03, 0x0012, 0x0012 }, - { 0x03, 0x03, -1, 0x03, 0x0012, 0x0016 }, - { 0x03, 0x03, -1, 0x03, 0x0012, 0x001e }, - { 0x03, 0x04, -1, 0x03, 0x0012, 0x0026 }, - { 0x03, 0x04, -1, 0x03, 0x0012, 0x0036 }, - { 0x03, 0x01, -1, 0x03, 0x001a, 0x000a }, - { 0x03, 0x01, -1, 0x03, 0x001a, 0x000c }, - { 0x03, 0x02, -1, 0x03, 0x001a, 0x000e }, - { 0x03, 0x02, -1, 0x03, 0x001a, 0x0012 }, - { 0x03, 0x03, -1, 0x03, 0x001a, 0x0016 }, - { 0x03, 0x03, -1, 0x03, 0x001a, 0x001e }, - { 0x03, 0x04, -1, 0x03, 0x001a, 0x0026 }, - { 0x03, 0x04, -1, 0x03, 0x001a, 0x0036 }, - { 0x04, 0x01, -1, 0x03, 0x0022, 0x000a }, - { 0x04, 0x01, -1, 0x03, 0x0022, 0x000c }, - { 0x04, 0x02, -1, 0x03, 0x0022, 0x000e }, - { 0x04, 0x02, -1, 0x03, 0x0022, 0x0012 }, - { 0x04, 0x03, -1, 0x03, 0x0022, 0x0016 }, - { 0x04, 0x03, -1, 0x03, 0x0022, 0x001e }, - { 0x04, 0x04, -1, 0x03, 0x0022, 0x0026 }, - { 0x04, 0x04, -1, 0x03, 0x0022, 0x0036 }, - { 0x04, 0x01, -1, 0x03, 0x0032, 0x000a }, - { 0x04, 0x01, -1, 0x03, 0x0032, 0x000c }, - { 0x04, 0x02, -1, 0x03, 0x0032, 0x000e }, - { 0x04, 0x02, -1, 0x03, 0x0032, 0x0012 }, - { 0x04, 0x03, -1, 0x03, 0x0032, 0x0016 }, - { 0x04, 0x03, -1, 0x03, 0x0032, 0x001e }, - { 0x04, 0x04, -1, 0x03, 0x0032, 0x0026 }, - { 0x04, 0x04, -1, 0x03, 0x0032, 0x0036 }, - { 0x05, 0x01, -1, 0x03, 0x0042, 0x000a }, - { 0x05, 0x01, -1, 0x03, 0x0042, 0x000c }, - { 0x05, 0x02, -1, 0x03, 0x0042, 0x000e }, - { 0x05, 0x02, -1, 0x03, 0x0042, 0x0012 }, - { 0x05, 0x03, -1, 0x03, 0x0042, 0x0016 }, - { 0x05, 0x03, -1, 0x03, 0x0042, 0x001e }, - { 0x05, 0x04, -1, 0x03, 0x0042, 0x0026 }, - { 0x05, 0x04, -1, 0x03, 0x0042, 0x0036 }, - { 0x05, 0x01, -1, 0x03, 0x0062, 0x000a }, - { 0x05, 0x01, -1, 0x03, 0x0062, 0x000c }, - { 0x05, 0x02, -1, 0x03, 0x0062, 0x000e }, - { 0x05, 0x02, -1, 0x03, 0x0062, 0x0012 }, - { 0x05, 0x03, -1, 0x03, 0x0062, 0x0016 }, - { 0x05, 0x03, -1, 0x03, 0x0062, 0x001e }, - { 0x05, 0x04, -1, 0x03, 0x0062, 0x0026 }, - { 0x05, 0x04, -1, 0x03, 0x0062, 0x0036 }, - { 0x00, 0x05, -1, 0x03, 0x0000, 0x0046 }, - { 0x00, 0x05, -1, 0x03, 0x0000, 0x0066 }, - { 0x00, 0x06, -1, 0x03, 0x0000, 0x0086 }, - { 0x00, 0x07, -1, 0x03, 0x0000, 0x00c6 }, - { 0x00, 0x08, -1, 0x03, 0x0000, 0x0146 }, - { 0x00, 0x09, -1, 0x03, 0x0000, 0x0246 }, - { 0x00, 0x0a, -1, 0x03, 0x0000, 0x0446 }, - { 0x00, 0x18, -1, 0x03, 0x0000, 0x0846 }, - { 0x00, 0x05, -1, 0x03, 0x0001, 0x0046 }, - { 0x00, 0x05, -1, 0x03, 0x0001, 0x0066 }, - { 0x00, 0x06, -1, 0x03, 0x0001, 0x0086 }, - { 0x00, 0x07, -1, 0x03, 0x0001, 0x00c6 }, - { 0x00, 0x08, -1, 0x03, 0x0001, 0x0146 }, - { 0x00, 0x09, -1, 0x03, 0x0001, 0x0246 }, - { 0x00, 0x0a, -1, 0x03, 0x0001, 0x0446 }, - { 0x00, 0x18, -1, 0x03, 0x0001, 0x0846 }, - { 0x00, 0x05, -1, 0x03, 0x0002, 0x0046 }, - { 0x00, 0x05, -1, 0x03, 0x0002, 0x0066 }, - { 0x00, 0x06, -1, 0x03, 0x0002, 0x0086 }, - { 0x00, 0x07, -1, 0x03, 0x0002, 0x00c6 }, - { 0x00, 0x08, -1, 0x03, 0x0002, 0x0146 }, - { 0x00, 0x09, -1, 0x03, 0x0002, 0x0246 }, - { 0x00, 0x0a, -1, 0x03, 0x0002, 0x0446 }, - { 0x00, 0x18, -1, 0x03, 0x0002, 0x0846 }, - { 0x00, 0x05, -1, 0x03, 0x0003, 0x0046 }, - { 0x00, 0x05, -1, 0x03, 0x0003, 0x0066 }, - { 0x00, 0x06, -1, 0x03, 0x0003, 0x0086 }, - { 0x00, 0x07, -1, 0x03, 0x0003, 0x00c6 }, - { 0x00, 0x08, -1, 0x03, 0x0003, 0x0146 }, - { 0x00, 0x09, -1, 0x03, 0x0003, 0x0246 }, - { 0x00, 0x0a, -1, 0x03, 0x0003, 0x0446 }, - { 0x00, 0x18, -1, 0x03, 0x0003, 0x0846 }, - { 0x00, 0x05, -1, 0x03, 0x0004, 0x0046 }, - { 0x00, 0x05, -1, 0x03, 0x0004, 0x0066 }, - { 0x00, 0x06, -1, 0x03, 0x0004, 0x0086 }, - { 0x00, 0x07, -1, 0x03, 0x0004, 0x00c6 }, - { 0x00, 0x08, -1, 0x03, 0x0004, 0x0146 }, - { 0x00, 0x09, -1, 0x03, 0x0004, 0x0246 }, - { 0x00, 0x0a, -1, 0x03, 0x0004, 0x0446 }, - { 0x00, 0x18, -1, 0x03, 0x0004, 0x0846 }, - { 0x00, 0x05, -1, 0x03, 0x0005, 0x0046 }, - { 0x00, 0x05, -1, 0x03, 0x0005, 0x0066 }, - { 0x00, 0x06, -1, 0x03, 0x0005, 0x0086 }, - { 0x00, 0x07, -1, 0x03, 0x0005, 0x00c6 }, - { 0x00, 0x08, -1, 0x03, 0x0005, 0x0146 }, - { 0x00, 0x09, -1, 0x03, 0x0005, 0x0246 }, - { 0x00, 0x0a, -1, 0x03, 0x0005, 0x0446 }, - { 0x00, 0x18, -1, 0x03, 0x0005, 0x0846 }, - { 0x01, 0x05, -1, 0x03, 0x0006, 0x0046 }, - { 0x01, 0x05, -1, 0x03, 0x0006, 0x0066 }, - { 0x01, 0x06, -1, 0x03, 0x0006, 0x0086 }, - { 0x01, 0x07, -1, 0x03, 0x0006, 0x00c6 }, - { 0x01, 0x08, -1, 0x03, 0x0006, 0x0146 }, - { 0x01, 0x09, -1, 0x03, 0x0006, 0x0246 }, - { 0x01, 0x0a, -1, 0x03, 0x0006, 0x0446 }, - { 0x01, 0x18, -1, 0x03, 0x0006, 0x0846 }, - { 0x01, 0x05, -1, 0x03, 0x0008, 0x0046 }, - { 0x01, 0x05, -1, 0x03, 0x0008, 0x0066 }, - { 0x01, 0x06, -1, 0x03, 0x0008, 0x0086 }, - { 0x01, 0x07, -1, 0x03, 0x0008, 0x00c6 }, - { 0x01, 0x08, -1, 0x03, 0x0008, 0x0146 }, - { 0x01, 0x09, -1, 0x03, 0x0008, 0x0246 }, - { 0x01, 0x0a, -1, 0x03, 0x0008, 0x0446 }, - { 0x01, 0x18, -1, 0x03, 0x0008, 0x0846 }, - { 0x06, 0x00, -1, 0x00, 0x0082, 0x0002 }, - { 0x06, 0x00, -1, 0x01, 0x0082, 0x0003 }, - { 0x06, 0x00, -1, 0x02, 0x0082, 0x0004 }, - { 0x06, 0x00, -1, 0x03, 0x0082, 0x0005 }, - { 0x06, 0x00, -1, 0x03, 0x0082, 0x0006 }, - { 0x06, 0x00, -1, 0x03, 0x0082, 0x0007 }, - { 0x06, 0x00, -1, 0x03, 0x0082, 0x0008 }, - { 0x06, 0x00, -1, 0x03, 0x0082, 0x0009 }, - { 0x07, 0x00, -1, 0x00, 0x00c2, 0x0002 }, - { 0x07, 0x00, -1, 0x01, 0x00c2, 0x0003 }, - { 0x07, 0x00, -1, 0x02, 0x00c2, 0x0004 }, - { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0005 }, - { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0006 }, - { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0007 }, - { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0008 }, - { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0009 }, - { 0x08, 0x00, -1, 0x00, 0x0142, 0x0002 }, - { 0x08, 0x00, -1, 0x01, 0x0142, 0x0003 }, - { 0x08, 0x00, -1, 0x02, 0x0142, 0x0004 }, - { 0x08, 0x00, -1, 0x03, 0x0142, 0x0005 }, - { 0x08, 0x00, -1, 0x03, 0x0142, 0x0006 }, - { 0x08, 0x00, -1, 0x03, 0x0142, 0x0007 }, - { 0x08, 0x00, -1, 0x03, 0x0142, 0x0008 }, - { 0x08, 0x00, -1, 0x03, 0x0142, 0x0009 }, - { 0x09, 0x00, -1, 0x00, 0x0242, 0x0002 }, - { 0x09, 0x00, -1, 0x01, 0x0242, 0x0003 }, - { 0x09, 0x00, -1, 0x02, 0x0242, 0x0004 }, - { 0x09, 0x00, -1, 0x03, 0x0242, 0x0005 }, - { 0x09, 0x00, -1, 0x03, 0x0242, 0x0006 }, - { 0x09, 0x00, -1, 0x03, 0x0242, 0x0007 }, - { 0x09, 0x00, -1, 0x03, 0x0242, 0x0008 }, - { 0x09, 0x00, -1, 0x03, 0x0242, 0x0009 }, - { 0x0a, 0x00, -1, 0x00, 0x0442, 0x0002 }, - { 0x0a, 0x00, -1, 0x01, 0x0442, 0x0003 }, - { 0x0a, 0x00, -1, 0x02, 0x0442, 0x0004 }, - { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0005 }, - { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0006 }, - { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0007 }, - { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0008 }, - { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0009 }, - { 0x0c, 0x00, -1, 0x00, 0x0842, 0x0002 }, - { 0x0c, 0x00, -1, 0x01, 0x0842, 0x0003 }, - { 0x0c, 0x00, -1, 0x02, 0x0842, 0x0004 }, - { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0005 }, - { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0006 }, - { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0007 }, - { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0008 }, - { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0009 }, - { 0x0e, 0x00, -1, 0x00, 0x1842, 0x0002 }, - { 0x0e, 0x00, -1, 0x01, 0x1842, 0x0003 }, - { 0x0e, 0x00, -1, 0x02, 0x1842, 0x0004 }, - { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0005 }, - { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0006 }, - { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0007 }, - { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0008 }, - { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0009 }, - { 0x18, 0x00, -1, 0x00, 0x5842, 0x0002 }, - { 0x18, 0x00, -1, 0x01, 0x5842, 0x0003 }, - { 0x18, 0x00, -1, 0x02, 0x5842, 0x0004 }, - { 0x18, 0x00, -1, 0x03, 0x5842, 0x0005 }, - { 0x18, 0x00, -1, 0x03, 0x5842, 0x0006 }, - { 0x18, 0x00, -1, 0x03, 0x5842, 0x0007 }, - { 0x18, 0x00, -1, 0x03, 0x5842, 0x0008 }, - { 0x18, 0x00, -1, 0x03, 0x5842, 0x0009 }, - { 0x02, 0x05, -1, 0x03, 0x000a, 0x0046 }, - { 0x02, 0x05, -1, 0x03, 0x000a, 0x0066 }, - { 0x02, 0x06, -1, 0x03, 0x000a, 0x0086 }, - { 0x02, 0x07, -1, 0x03, 0x000a, 0x00c6 }, - { 0x02, 0x08, -1, 0x03, 0x000a, 0x0146 }, - { 0x02, 0x09, -1, 0x03, 0x000a, 0x0246 }, - { 0x02, 0x0a, -1, 0x03, 0x000a, 0x0446 }, - { 0x02, 0x18, -1, 0x03, 0x000a, 0x0846 }, - { 0x02, 0x05, -1, 0x03, 0x000e, 0x0046 }, - { 0x02, 0x05, -1, 0x03, 0x000e, 0x0066 }, - { 0x02, 0x06, -1, 0x03, 0x000e, 0x0086 }, - { 0x02, 0x07, -1, 0x03, 0x000e, 0x00c6 }, - { 0x02, 0x08, -1, 0x03, 0x000e, 0x0146 }, - { 0x02, 0x09, -1, 0x03, 0x000e, 0x0246 }, - { 0x02, 0x0a, -1, 0x03, 0x000e, 0x0446 }, - { 0x02, 0x18, -1, 0x03, 0x000e, 0x0846 }, - { 0x03, 0x05, -1, 0x03, 0x0012, 0x0046 }, - { 0x03, 0x05, -1, 0x03, 0x0012, 0x0066 }, - { 0x03, 0x06, -1, 0x03, 0x0012, 0x0086 }, - { 0x03, 0x07, -1, 0x03, 0x0012, 0x00c6 }, - { 0x03, 0x08, -1, 0x03, 0x0012, 0x0146 }, - { 0x03, 0x09, -1, 0x03, 0x0012, 0x0246 }, - { 0x03, 0x0a, -1, 0x03, 0x0012, 0x0446 }, - { 0x03, 0x18, -1, 0x03, 0x0012, 0x0846 }, - { 0x03, 0x05, -1, 0x03, 0x001a, 0x0046 }, - { 0x03, 0x05, -1, 0x03, 0x001a, 0x0066 }, - { 0x03, 0x06, -1, 0x03, 0x001a, 0x0086 }, - { 0x03, 0x07, -1, 0x03, 0x001a, 0x00c6 }, - { 0x03, 0x08, -1, 0x03, 0x001a, 0x0146 }, - { 0x03, 0x09, -1, 0x03, 0x001a, 0x0246 }, - { 0x03, 0x0a, -1, 0x03, 0x001a, 0x0446 }, - { 0x03, 0x18, -1, 0x03, 0x001a, 0x0846 }, - { 0x04, 0x05, -1, 0x03, 0x0022, 0x0046 }, - { 0x04, 0x05, -1, 0x03, 0x0022, 0x0066 }, - { 0x04, 0x06, -1, 0x03, 0x0022, 0x0086 }, - { 0x04, 0x07, -1, 0x03, 0x0022, 0x00c6 }, - { 0x04, 0x08, -1, 0x03, 0x0022, 0x0146 }, - { 0x04, 0x09, -1, 0x03, 0x0022, 0x0246 }, - { 0x04, 0x0a, -1, 0x03, 0x0022, 0x0446 }, - { 0x04, 0x18, -1, 0x03, 0x0022, 0x0846 }, - { 0x04, 0x05, -1, 0x03, 0x0032, 0x0046 }, - { 0x04, 0x05, -1, 0x03, 0x0032, 0x0066 }, - { 0x04, 0x06, -1, 0x03, 0x0032, 0x0086 }, - { 0x04, 0x07, -1, 0x03, 0x0032, 0x00c6 }, - { 0x04, 0x08, -1, 0x03, 0x0032, 0x0146 }, - { 0x04, 0x09, -1, 0x03, 0x0032, 0x0246 }, - { 0x04, 0x0a, -1, 0x03, 0x0032, 0x0446 }, - { 0x04, 0x18, -1, 0x03, 0x0032, 0x0846 }, - { 0x05, 0x05, -1, 0x03, 0x0042, 0x0046 }, - { 0x05, 0x05, -1, 0x03, 0x0042, 0x0066 }, - { 0x05, 0x06, -1, 0x03, 0x0042, 0x0086 }, - { 0x05, 0x07, -1, 0x03, 0x0042, 0x00c6 }, - { 0x05, 0x08, -1, 0x03, 0x0042, 0x0146 }, - { 0x05, 0x09, -1, 0x03, 0x0042, 0x0246 }, - { 0x05, 0x0a, -1, 0x03, 0x0042, 0x0446 }, - { 0x05, 0x18, -1, 0x03, 0x0042, 0x0846 }, - { 0x05, 0x05, -1, 0x03, 0x0062, 0x0046 }, - { 0x05, 0x05, -1, 0x03, 0x0062, 0x0066 }, - { 0x05, 0x06, -1, 0x03, 0x0062, 0x0086 }, - { 0x05, 0x07, -1, 0x03, 0x0062, 0x00c6 }, - { 0x05, 0x08, -1, 0x03, 0x0062, 0x0146 }, - { 0x05, 0x09, -1, 0x03, 0x0062, 0x0246 }, - { 0x05, 0x0a, -1, 0x03, 0x0062, 0x0446 }, - { 0x05, 0x18, -1, 0x03, 0x0062, 0x0846 }, - { 0x06, 0x01, -1, 0x03, 0x0082, 0x000a }, - { 0x06, 0x01, -1, 0x03, 0x0082, 0x000c }, - { 0x06, 0x02, -1, 0x03, 0x0082, 0x000e }, - { 0x06, 0x02, -1, 0x03, 0x0082, 0x0012 }, - { 0x06, 0x03, -1, 0x03, 0x0082, 0x0016 }, - { 0x06, 0x03, -1, 0x03, 0x0082, 0x001e }, - { 0x06, 0x04, -1, 0x03, 0x0082, 0x0026 }, - { 0x06, 0x04, -1, 0x03, 0x0082, 0x0036 }, - { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000a }, - { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000c }, - { 0x07, 0x02, -1, 0x03, 0x00c2, 0x000e }, - { 0x07, 0x02, -1, 0x03, 0x00c2, 0x0012 }, - { 0x07, 0x03, -1, 0x03, 0x00c2, 0x0016 }, - { 0x07, 0x03, -1, 0x03, 0x00c2, 0x001e }, - { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0026 }, - { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0036 }, - { 0x08, 0x01, -1, 0x03, 0x0142, 0x000a }, - { 0x08, 0x01, -1, 0x03, 0x0142, 0x000c }, - { 0x08, 0x02, -1, 0x03, 0x0142, 0x000e }, - { 0x08, 0x02, -1, 0x03, 0x0142, 0x0012 }, - { 0x08, 0x03, -1, 0x03, 0x0142, 0x0016 }, - { 0x08, 0x03, -1, 0x03, 0x0142, 0x001e }, - { 0x08, 0x04, -1, 0x03, 0x0142, 0x0026 }, - { 0x08, 0x04, -1, 0x03, 0x0142, 0x0036 }, - { 0x09, 0x01, -1, 0x03, 0x0242, 0x000a }, - { 0x09, 0x01, -1, 0x03, 0x0242, 0x000c }, - { 0x09, 0x02, -1, 0x03, 0x0242, 0x000e }, - { 0x09, 0x02, -1, 0x03, 0x0242, 0x0012 }, - { 0x09, 0x03, -1, 0x03, 0x0242, 0x0016 }, - { 0x09, 0x03, -1, 0x03, 0x0242, 0x001e }, - { 0x09, 0x04, -1, 0x03, 0x0242, 0x0026 }, - { 0x09, 0x04, -1, 0x03, 0x0242, 0x0036 }, - { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000a }, - { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000c }, - { 0x0a, 0x02, -1, 0x03, 0x0442, 0x000e }, - { 0x0a, 0x02, -1, 0x03, 0x0442, 0x0012 }, - { 0x0a, 0x03, -1, 0x03, 0x0442, 0x0016 }, - { 0x0a, 0x03, -1, 0x03, 0x0442, 0x001e }, - { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0026 }, - { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0036 }, - { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000a }, - { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000c }, - { 0x0c, 0x02, -1, 0x03, 0x0842, 0x000e }, - { 0x0c, 0x02, -1, 0x03, 0x0842, 0x0012 }, - { 0x0c, 0x03, -1, 0x03, 0x0842, 0x0016 }, - { 0x0c, 0x03, -1, 0x03, 0x0842, 0x001e }, - { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0026 }, - { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0036 }, - { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000a }, - { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000c }, - { 0x0e, 0x02, -1, 0x03, 0x1842, 0x000e }, - { 0x0e, 0x02, -1, 0x03, 0x1842, 0x0012 }, - { 0x0e, 0x03, -1, 0x03, 0x1842, 0x0016 }, - { 0x0e, 0x03, -1, 0x03, 0x1842, 0x001e }, - { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0026 }, - { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0036 }, - { 0x18, 0x01, -1, 0x03, 0x5842, 0x000a }, - { 0x18, 0x01, -1, 0x03, 0x5842, 0x000c }, - { 0x18, 0x02, -1, 0x03, 0x5842, 0x000e }, - { 0x18, 0x02, -1, 0x03, 0x5842, 0x0012 }, - { 0x18, 0x03, -1, 0x03, 0x5842, 0x0016 }, - { 0x18, 0x03, -1, 0x03, 0x5842, 0x001e }, - { 0x18, 0x04, -1, 0x03, 0x5842, 0x0026 }, - { 0x18, 0x04, -1, 0x03, 0x5842, 0x0036 }, - { 0x06, 0x05, -1, 0x03, 0x0082, 0x0046 }, - { 0x06, 0x05, -1, 0x03, 0x0082, 0x0066 }, - { 0x06, 0x06, -1, 0x03, 0x0082, 0x0086 }, - { 0x06, 0x07, -1, 0x03, 0x0082, 0x00c6 }, - { 0x06, 0x08, -1, 0x03, 0x0082, 0x0146 }, - { 0x06, 0x09, -1, 0x03, 0x0082, 0x0246 }, - { 0x06, 0x0a, -1, 0x03, 0x0082, 0x0446 }, - { 0x06, 0x18, -1, 0x03, 0x0082, 0x0846 }, - { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0046 }, - { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0066 }, - { 0x07, 0x06, -1, 0x03, 0x00c2, 0x0086 }, - { 0x07, 0x07, -1, 0x03, 0x00c2, 0x00c6 }, - { 0x07, 0x08, -1, 0x03, 0x00c2, 0x0146 }, - { 0x07, 0x09, -1, 0x03, 0x00c2, 0x0246 }, - { 0x07, 0x0a, -1, 0x03, 0x00c2, 0x0446 }, - { 0x07, 0x18, -1, 0x03, 0x00c2, 0x0846 }, - { 0x08, 0x05, -1, 0x03, 0x0142, 0x0046 }, - { 0x08, 0x05, -1, 0x03, 0x0142, 0x0066 }, - { 0x08, 0x06, -1, 0x03, 0x0142, 0x0086 }, - { 0x08, 0x07, -1, 0x03, 0x0142, 0x00c6 }, - { 0x08, 0x08, -1, 0x03, 0x0142, 0x0146 }, - { 0x08, 0x09, -1, 0x03, 0x0142, 0x0246 }, - { 0x08, 0x0a, -1, 0x03, 0x0142, 0x0446 }, - { 0x08, 0x18, -1, 0x03, 0x0142, 0x0846 }, - { 0x09, 0x05, -1, 0x03, 0x0242, 0x0046 }, - { 0x09, 0x05, -1, 0x03, 0x0242, 0x0066 }, - { 0x09, 0x06, -1, 0x03, 0x0242, 0x0086 }, - { 0x09, 0x07, -1, 0x03, 0x0242, 0x00c6 }, - { 0x09, 0x08, -1, 0x03, 0x0242, 0x0146 }, - { 0x09, 0x09, -1, 0x03, 0x0242, 0x0246 }, - { 0x09, 0x0a, -1, 0x03, 0x0242, 0x0446 }, - { 0x09, 0x18, -1, 0x03, 0x0242, 0x0846 }, - { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0046 }, - { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0066 }, - { 0x0a, 0x06, -1, 0x03, 0x0442, 0x0086 }, - { 0x0a, 0x07, -1, 0x03, 0x0442, 0x00c6 }, - { 0x0a, 0x08, -1, 0x03, 0x0442, 0x0146 }, - { 0x0a, 0x09, -1, 0x03, 0x0442, 0x0246 }, - { 0x0a, 0x0a, -1, 0x03, 0x0442, 0x0446 }, - { 0x0a, 0x18, -1, 0x03, 0x0442, 0x0846 }, - { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0046 }, - { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0066 }, - { 0x0c, 0x06, -1, 0x03, 0x0842, 0x0086 }, - { 0x0c, 0x07, -1, 0x03, 0x0842, 0x00c6 }, - { 0x0c, 0x08, -1, 0x03, 0x0842, 0x0146 }, - { 0x0c, 0x09, -1, 0x03, 0x0842, 0x0246 }, - { 0x0c, 0x0a, -1, 0x03, 0x0842, 0x0446 }, - { 0x0c, 0x18, -1, 0x03, 0x0842, 0x0846 }, - { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0046 }, - { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0066 }, - { 0x0e, 0x06, -1, 0x03, 0x1842, 0x0086 }, - { 0x0e, 0x07, -1, 0x03, 0x1842, 0x00c6 }, - { 0x0e, 0x08, -1, 0x03, 0x1842, 0x0146 }, - { 0x0e, 0x09, -1, 0x03, 0x1842, 0x0246 }, - { 0x0e, 0x0a, -1, 0x03, 0x1842, 0x0446 }, - { 0x0e, 0x18, -1, 0x03, 0x1842, 0x0846 }, - { 0x18, 0x05, -1, 0x03, 0x5842, 0x0046 }, - { 0x18, 0x05, -1, 0x03, 0x5842, 0x0066 }, - { 0x18, 0x06, -1, 0x03, 0x5842, 0x0086 }, - { 0x18, 0x07, -1, 0x03, 0x5842, 0x00c6 }, - { 0x18, 0x08, -1, 0x03, 0x5842, 0x0146 }, - { 0x18, 0x09, -1, 0x03, 0x5842, 0x0246 }, - { 0x18, 0x0a, -1, 0x03, 0x5842, 0x0446 }, - { 0x18, 0x18, -1, 0x03, 0x5842, 0x0846 }, -}; - -#endif /* BROTLI_DEC_PREFIX_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/dec/state.h b/BaseTools/Sou= rce/C/BrotliCompress/dec/state.h deleted file mode 100644 index 814f95eee05a..000000000000 --- a/BaseTools/Source/C/BrotliCompress/dec/state.h +++ /dev/null @@ -1,258 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Brotli state for partial streaming decoding. */ - -#ifndef BROTLI_DEC_STATE_H_ -#define BROTLI_DEC_STATE_H_ - -#include "../common/constants.h" -#include "../common/dictionary.h" -#include "../common/platform.h" -#include "../common/transform.h" -#include -#include "./bit_reader.h" -#include "./huffman.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -typedef enum { - BROTLI_STATE_UNINITED, - BROTLI_STATE_LARGE_WINDOW_BITS, - BROTLI_STATE_INITIALIZE, - BROTLI_STATE_METABLOCK_BEGIN, - BROTLI_STATE_METABLOCK_HEADER, - BROTLI_STATE_METABLOCK_HEADER_2, - BROTLI_STATE_CONTEXT_MODES, - BROTLI_STATE_COMMAND_BEGIN, - BROTLI_STATE_COMMAND_INNER, - BROTLI_STATE_COMMAND_POST_DECODE_LITERALS, - BROTLI_STATE_COMMAND_POST_WRAP_COPY, - BROTLI_STATE_UNCOMPRESSED, - BROTLI_STATE_METADATA, - BROTLI_STATE_COMMAND_INNER_WRITE, - BROTLI_STATE_METABLOCK_DONE, - BROTLI_STATE_COMMAND_POST_WRITE_1, - BROTLI_STATE_COMMAND_POST_WRITE_2, - BROTLI_STATE_HUFFMAN_CODE_0, - BROTLI_STATE_HUFFMAN_CODE_1, - BROTLI_STATE_HUFFMAN_CODE_2, - BROTLI_STATE_HUFFMAN_CODE_3, - BROTLI_STATE_CONTEXT_MAP_1, - BROTLI_STATE_CONTEXT_MAP_2, - BROTLI_STATE_TREE_GROUP, - BROTLI_STATE_DONE -} BrotliRunningState; - -typedef enum { - BROTLI_STATE_METABLOCK_HEADER_NONE, - BROTLI_STATE_METABLOCK_HEADER_EMPTY, - BROTLI_STATE_METABLOCK_HEADER_NIBBLES, - BROTLI_STATE_METABLOCK_HEADER_SIZE, - BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED, - BROTLI_STATE_METABLOCK_HEADER_RESERVED, - BROTLI_STATE_METABLOCK_HEADER_BYTES, - BROTLI_STATE_METABLOCK_HEADER_METADATA -} BrotliRunningMetablockHeaderState; - -typedef enum { - BROTLI_STATE_UNCOMPRESSED_NONE, - BROTLI_STATE_UNCOMPRESSED_WRITE -} BrotliRunningUncompressedState; - -typedef enum { - BROTLI_STATE_TREE_GROUP_NONE, - BROTLI_STATE_TREE_GROUP_LOOP -} BrotliRunningTreeGroupState; - -typedef enum { - BROTLI_STATE_CONTEXT_MAP_NONE, - BROTLI_STATE_CONTEXT_MAP_READ_PREFIX, - BROTLI_STATE_CONTEXT_MAP_HUFFMAN, - BROTLI_STATE_CONTEXT_MAP_DECODE, - BROTLI_STATE_CONTEXT_MAP_TRANSFORM -} BrotliRunningContextMapState; - -typedef enum { - BROTLI_STATE_HUFFMAN_NONE, - BROTLI_STATE_HUFFMAN_SIMPLE_SIZE, - BROTLI_STATE_HUFFMAN_SIMPLE_READ, - BROTLI_STATE_HUFFMAN_SIMPLE_BUILD, - BROTLI_STATE_HUFFMAN_COMPLEX, - BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS -} BrotliRunningHuffmanState; - -typedef enum { - BROTLI_STATE_DECODE_UINT8_NONE, - BROTLI_STATE_DECODE_UINT8_SHORT, - BROTLI_STATE_DECODE_UINT8_LONG -} BrotliRunningDecodeUint8State; - -typedef enum { - BROTLI_STATE_READ_BLOCK_LENGTH_NONE, - BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX -} BrotliRunningReadBlockLengthState; - -struct BrotliDecoderStateStruct { - BrotliRunningState state; - - /* This counter is reused for several disjoint loops. */ - int loop_counter; - - BrotliBitReader br; - - brotli_alloc_func alloc_func; - brotli_free_func free_func; - void* memory_manager_opaque; - - /* Temporary storage for remaining input. */ - union { - uint64_t u64; - uint8_t u8[8]; - } buffer; - uint32_t buffer_length; - - int pos; - int max_backward_distance; - int max_distance; - int ringbuffer_size; - int ringbuffer_mask; - int dist_rb_idx; - int dist_rb[4]; - int error_code; - uint32_t sub_loop_counter; - uint8_t* ringbuffer; - uint8_t* ringbuffer_end; - HuffmanCode* htree_command; - const uint8_t* context_lookup; - uint8_t* context_map_slice; - uint8_t* dist_context_map_slice; - - /* This ring buffer holds a few past copy distances that will be used b= y - some special distance codes. */ - HuffmanTreeGroup literal_hgroup; - HuffmanTreeGroup insert_copy_hgroup; - HuffmanTreeGroup distance_hgroup; - HuffmanCode* block_type_trees; - HuffmanCode* block_len_trees; - /* This is true if the literal context map histogram type always matche= s the - block type. It is then not needed to keep the context (faster decodi= ng). */ - int trivial_literal_context; - /* Distance context is actual after command is decoded and before dista= nce is - computed. After distance computation it is used as a temporary varia= ble. */ - int distance_context; - int meta_block_remaining_len; - uint32_t block_length_index; - uint32_t block_length[3]; - uint32_t num_block_types[3]; - uint32_t block_type_rb[6]; - uint32_t distance_postfix_bits; - uint32_t num_direct_distance_codes; - int distance_postfix_mask; - uint32_t num_dist_htrees; - uint8_t* dist_context_map; - HuffmanCode* literal_htree; - uint8_t dist_htree_index; - uint32_t repeat_code_len; - uint32_t prev_code_len; - - int copy_length; - int distance_code; - - /* For partial write operations. */ - size_t rb_roundtrips; /* how many times we went around the ring-buffer= */ - size_t partial_pos_out; /* how much output to the user in total */ - - /* For ReadHuffmanCode. */ - uint32_t symbol; - uint32_t repeat; - uint32_t space; - - HuffmanCode table[32]; - /* List of heads of symbol chains. */ - uint16_t* symbol_lists; - /* Storage from symbol_lists. */ - uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 + - BROTLI_NUM_COMMAND_SYMBOLS]; - /* Tails of symbol chains. */ - int next_symbol[32]; - uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES]; - /* Population counts for the code lengths. */ - uint16_t code_length_histo[16]; - - /* For HuffmanTreeGroupDecode. */ - int htree_index; - HuffmanCode* next; - - /* For DecodeContextMap. */ - uint32_t context_index; - uint32_t max_run_length_prefix; - uint32_t code; - HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272]; - - /* For InverseMoveToFrontTransform. */ - uint32_t mtf_upper_bound; - uint32_t mtf[64 + 1]; - - /* Less used attributes are at the end of this struct. */ - - /* States inside function calls. */ - BrotliRunningMetablockHeaderState substate_metablock_header; - BrotliRunningTreeGroupState substate_tree_group; - BrotliRunningContextMapState substate_context_map; - BrotliRunningUncompressedState substate_uncompressed; - BrotliRunningHuffmanState substate_huffman; - BrotliRunningDecodeUint8State substate_decode_uint8; - BrotliRunningReadBlockLengthState substate_read_block_length; - - unsigned int is_last_metablock : 1; - unsigned int is_uncompressed : 1; - unsigned int is_metadata : 1; - unsigned int should_wrap_ringbuffer : 1; - unsigned int canny_ringbuffer_allocation : 1; - unsigned int large_window : 1; - unsigned int size_nibbles : 8; - uint32_t window_bits; - - int new_ringbuffer_size; - - uint32_t num_literal_htrees; - uint8_t* context_map; - uint8_t* context_modes; - - const BrotliDictionary* dictionary; - const BrotliTransforms* transforms; - - uint32_t trivial_literal_contexts[8]; /* 256 bits */ -}; - -typedef struct BrotliDecoderStateStruct BrotliDecoderStateInternal; -#define BrotliDecoderState BrotliDecoderStateInternal - -BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s, - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaqu= e); -BROTLI_INTERNAL void BrotliDecoderStateCleanup(BrotliDecoderState* s); -BROTLI_INTERNAL void BrotliDecoderStateMetablockBegin(BrotliDecoderState*= s); -BROTLI_INTERNAL void BrotliDecoderStateCleanupAfterMetablock( - BrotliDecoderState* s); -BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit( - BrotliDecoderState* s, HuffmanTreeGroup* group, uint32_t alphabet_siz= e, - uint32_t max_symbol, uint32_t ntrees); - -#define BROTLI_DECODER_ALLOC(S, L) S->alloc_func(S->memory_manager_opaque= , L) - -#define BROTLI_DECODER_FREE(S, X) { \ - S->free_func(S->memory_manager_opaque, X); \ - X =3D NULL; \ -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_DEC_STATE_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-stud= y-2015-09-22.pdf b/BaseTools/Source/C/BrotliCompress/docs/brotli-comparison= -study-2015-09-22.pdf deleted file mode 100644 index 040f179e2bce8f5f7a2f407b2d61ab86824bbe8e..00000000000000000000000000= 00000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215208 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 =3DZ z3PXPE@%>P>sj1GtMtmn|?12bkQ$fa)e13QS4iBs+s?0`8JwVmmg({2MerXy%@fWU9 zf-+2JzPgI5sc>8DFVB|xAb&i(ppD|&9^|JuST@KSs zy-eFoQ~w&ibv(=3DOr*bPgsU)c+jS-~5xv|5!M)~C2=3D89$lwK%E``B&zX^dT@xoGPyp ztLXazTj!UoFoEB+N$hu{NlleK-O6N7=3D)_ay2?sVoX&$r?IJc187g?~=3DlUc=3DF)$T6g z#WP5E9Y;Hm+&T|*S;eUf@W_OS1|vj!flGCh}8_gDs2TqU%bAk5K+FEW#T^&JldO6YSn} z2AW|B@)9@h=3DtpMK93$9j(wmqO)j7i11Fc8p4b+JU;Ev@zX~U(vL(@iavzn*!@MPIq zvVgs+sY*?wPN@gsQsOj-l=3DrQwteCJMuq{*!$@_V`i1BhI33j$Ztz5MPL+<`^av{*y(bluooB7VOM=3D>M7Y{n$9d=3DlT`k|_*Y~N0kEwpM~^73j< z(=3D^^TD3>ZN$VbPUB?@8gSgJMJ@1V8_2h`Vjjd=3DdR}M zwfJSV?vW#-gz^eVDad0Siu@d4VU0woYiSarqg;>dLF4EhBsjl_@|uL;2|7NqX};!` zx8S_tczmtrt|ZiJzPC_I_9aMqoI94Y~PC1a0vZ@a$p=3DyNV|dw02eEF zE*;lqOCxJ)&!oI!TdM1fQM+OKBe1#8LDql%$Vm>hKTxKv#yl{&jN6vJ|o~Bos--g&}u?)bt9F3TR`?;?BI<-$&GyeZ`_KW#mpf?hBF! z)ObROq&F=3D*B$(cOQTc&Bu}MxzTNqcM-DvL5^5dlSMnk&*izG&cz><#l7jpboMu$;N zK6x(}o8vL1J&I2EY55bK7kCMst4ibtyb1nJdK3#Enuf)LgkZXqayR&;QvNU4iQ1EB zxL$N~<4~?C1gJ0!IS{Pv(|#ZDO%}U8fT~Sctf~@IK}amBA#p|gBr&f)L|XnR66V(! zMG`H1=3Dl!0Nf*~R4Gi*4$`RyX3FH zSi5v|8~3&>)yaY=3DdRmnTnBjrH@P61*6XNu@1_QyP&~f+x=3DJf&F)b8wM&o}(4HZF57 zTRZ#Qw`hK(;3s*md!-#0_wO+(;5;MOLLTGNY7$7e^H;nNHuem>EaSzJfwBFq;QTPm zF`VN52RvCs)cGfyz5y(-VK~tAE(Nhs>4Wguhw`HMz5*4MS;F1z!ZFMBN8g-q6l<6h zkIMbB1J@t>L8?lBcM{s*d%h2okpbrjah9Zlrt3Pa&Y9^ zHPQr9Q0GwpF}Qc%yFy5qH?h}@j01Hc7l%jXIT5+_ujlQ8eEkfqu>A5Cls3 ztVLV};_#}ZFyUwqiAAHDXjJNc3tl>%nE!^pzSQt_mrsF%C>zNJKK&fMk>juPn%$HK zSV}QSHEg;Oj*hG$e=3D0h!Ej^E3uiR)FsH}sd_Vx|k#~oe-AFHRMBRUgAy~5!yen|gK zs^-{fmJ9ZSx{ttes}v@3;XqfTSLnWLdYSArK}VE9CyQ6fL&uV;-*1>Ie4;dx*&I2f z*7v{oX3M@uj_ZHuy-omh<|VB*6o|&PIG%4VzruGe)PZ7_$>!0&%Qt(DfdOjIwnCi&PdOAr#4l#Ba-MyMXv!EImzT+Q zsmnBXxqY50qKxKBO!Igh9n z_y|%ZvGu#9_nmGN|AG$dcNDs}nakjN+B?fz(sR%W_6yLc(VnZal*P7C+Ny5t2vL2n zKK*EF1E|_Ab%aoy4nJ*Z#Q8W8ONU_}iH?&M5bgXrXlZ|trG#WNW;n4#45~GpsIF)f z=3D=3D0e#^?hLO3qXC}=3DG0H;9>HW)*6y56L}^Q?6qFaBmv_?SLi#_7j^=3D=3DWDm#V6>(E= S2 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 jY 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 Fp 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 -#include "./command.h" -#include "./hash.h" -#include "./quality.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* "commands" points to the next output command to write to, "*num_comman= ds" is - initially the total amount of commands output by previous - CreateBackwardReferences calls, and must be incremented by the amount = written - by this call. */ -BROTLI_INTERNAL void BrotliCreateBackwardReferences( - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, - Command* commands, size_t* num_commands, size_t* num_literals); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_BACKWARD_REFERENCES_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.= h b/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h deleted file mode 100644 index 60b3b346b778..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Function to find backward reference copies. */ - -#ifndef BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ -#define BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ - -#include "../common/constants.h" -#include "../common/dictionary.h" -#include "../common/platform.h" -#include -#include "./command.h" -#include "./hash.h" -#include "./memory.h" -#include "./quality.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -BROTLI_INTERNAL void BrotliCreateZopfliBackwardReferences(MemoryManager* = m, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, - Command* commands, size_t* num_commands, size_t* num_literals); - -BROTLI_INTERNAL void BrotliCreateHqZopfliBackwardReferences(MemoryManager= * m, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, - Command* commands, size_t* num_commands, size_t* num_literals); - -typedef struct ZopfliNode { - /* Best length to get up to this byte (not including this byte itself) - highest 7 bit is used to reconstruct the length code. */ - uint32_t length; - /* Distance associated with the length. */ - uint32_t distance; - /* Number of literal inserts before this copy; highest 5 bits contain - distance short code + 1 (or zero if no short code). */ - uint32_t dcode_insert_length; - - /* This union holds information used by dynamic-programming. During for= ward - pass |cost| it used to store the goal function. When node is process= ed its - |cost| is invalidated in favor of |shortcut|. On path back-tracing p= ass - |next| is assigned the offset to next node on the path. */ - union { - /* Smallest cost to get to this byte from the beginning, as found so = far. */ - float cost; - /* Offset to the next node on the path. Equals to command_length() of= the - next node on the path. For last node equals to BROTLI_UINT32_MAX *= / - uint32_t next; - /* Node position that provides next distance for distance cache. */ - uint32_t shortcut; - } u; -} ZopfliNode; - -BROTLI_INTERNAL void BrotliInitZopfliNodes(ZopfliNode* array, size_t leng= th); - -/* Computes the shortest path of commands from position to at most - position + num_bytes. - - On return, path->size() is the number of commands found and path[i] is= the - length of the i-th command (copy length plus insert length). - Note that the sum of the lengths of all commands can be less than num_= bytes. - - On return, the nodes[0..num_bytes] array will have the following - "ZopfliNode array invariant": - For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then - (1) nodes[i].copy_length() >=3D 2 - (2) nodes[i].command_length() <=3D i and - (3) nodes[i - nodes[i].command_length()].cost < kInfinity */ -BROTLI_INTERNAL size_t BrotliZopfliComputeShortestPath(MemoryManager* m, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - const size_t max_backward_limit, const int* dist_cache, HasherHandle = hasher, - ZopfliNode* nodes); - -BROTLI_INTERNAL void BrotliZopfliCreateCommands( - const size_t num_bytes, const size_t block_start, - const size_t max_backward_limit, const ZopfliNode* nodes, - int* dist_cache, size_t* last_insert_len, const BrotliEncoderParams* = params, - Command* commands, size_t* num_literals); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc= .h b/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h deleted file mode 100644 index 39c6f823f8bd..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h +++ /dev/null @@ -1,153 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: EXPORT_FN, FN */ - -static BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)( - size_t num_bytes, size_t position, - const uint8_t* ringbuffer, size_t ringbuffer_mask, - const BrotliEncoderParams* params, HasherHandle hasher, int* dist_cac= he, - size_t* last_insert_len, Command* commands, size_t* num_commands, - size_t* num_literals) { - /* Set maximum distance, see section 9.1. of the spec. */ - const size_t max_backward_limit =3D BROTLI_MAX_BACKWARD_LIMIT(params->l= gwin); - - const Command* const orig_commands =3D commands; - size_t insert_length =3D *last_insert_len; - const size_t pos_end =3D position + num_bytes; - const size_t store_end =3D num_bytes >=3D FN(StoreLookahead)() ? - position + num_bytes - FN(StoreLookahead)() + 1 : position; - - /* For speed up heuristics for random data. */ - const size_t random_heuristics_window_size =3D - LiteralSpreeLengthForSparseSearch(params); - size_t apply_random_heuristics =3D position + random_heuristics_window_= size; - const size_t gap =3D 0; - - /* Minimum score to accept a backward reference. */ - const score_t kMinScore =3D BROTLI_SCORE_BASE + 100; - - FN(PrepareDistanceCache)(hasher, dist_cache); - - while (position + FN(HashTypeLength)() < pos_end) { - size_t max_length =3D pos_end - position; - size_t max_distance =3D BROTLI_MIN(size_t, position, max_backward_lim= it); - HasherSearchResult sr; - sr.len =3D 0; - sr.len_code_delta =3D 0; - sr.distance =3D 0; - sr.score =3D kMinScore; - FN(FindLongestMatch)(hasher, ¶ms->dictionary, - ringbuffer, ringbuffer_mask, dist_cache, positio= n, - max_length, max_distance, gap, - params->dist.max_distance, &sr); - if (sr.score > kMinScore) { - /* Found a match. Let's look for something even better ahead. */ - int delayed_backward_references_in_row =3D 0; - --max_length; - for (;; --max_length) { - const score_t cost_diff_lazy =3D 175; - HasherSearchResult sr2; - sr2.len =3D params->quality < MIN_QUALITY_FOR_EXTENSIVE_REFERENCE= _SEARCH ? - BROTLI_MIN(size_t, sr.len - 1, max_length) : 0; - sr2.len_code_delta =3D 0; - sr2.distance =3D 0; - sr2.score =3D kMinScore; - max_distance =3D BROTLI_MIN(size_t, position + 1, max_backward_li= mit); - FN(FindLongestMatch)(hasher, ¶ms->dictionary, - ringbuffer, ringbuffer_mask, dist_cache, position + 1, max_le= ngth, - max_distance, gap, params->dist.max_distance, &sr2); - if (sr2.score >=3D sr.score + cost_diff_lazy) { - /* Ok, let's just write one byte for now and start a match from= the - next byte. */ - ++position; - ++insert_length; - sr =3D sr2; - if (++delayed_backward_references_in_row < 4 && - position + FN(HashTypeLength)() < pos_end) { - continue; - } - } - break; - } - apply_random_heuristics =3D - position + 2 * sr.len + random_heuristics_window_size; - max_distance =3D BROTLI_MIN(size_t, position, max_backward_limit); - { - /* The first 16 codes are special short-codes, - and the minimum offset is 1. */ - size_t distance_code =3D - ComputeDistanceCode(sr.distance, max_distance + gap, dist_cac= he); - if ((sr.distance <=3D (max_distance + gap)) && distance_code > 0)= { - dist_cache[3] =3D dist_cache[2]; - dist_cache[2] =3D dist_cache[1]; - dist_cache[1] =3D dist_cache[0]; - dist_cache[0] =3D (int)sr.distance; - FN(PrepareDistanceCache)(hasher, dist_cache); - } - InitCommand(commands++, ¶ms->dist, insert_length, - sr.len, sr.len_code_delta, distance_code); - } - *num_literals +=3D insert_length; - insert_length =3D 0; - /* Put the hash keys into the table, if there are enough bytes left= . - Depending on the hasher implementation, it can push all position= s - in the given range or only a subset of them. - Avoid hash poisoning with RLE data. */ - { - size_t range_start =3D position + 2; - size_t range_end =3D BROTLI_MIN(size_t, position + sr.len, store_= end); - if (sr.distance < (sr.len >> 2)) { - range_start =3D BROTLI_MIN(size_t, range_end, BROTLI_MAX(size_t= , - range_start, position + sr.len - (sr.distance << 2))); - } - FN(StoreRange)(hasher, ringbuffer, ringbuffer_mask, range_start, - range_end); - } - position +=3D sr.len; - } else { - ++insert_length; - ++position; - /* If we have not seen matches for a long time, we can skip some - match lookups. Unsuccessful match lookups are very very expensiv= e - and this kind of a heuristic speeds up compression quite - a lot. */ - if (position > apply_random_heuristics) { - /* Going through uncompressible data, jump. */ - if (position > - apply_random_heuristics + 4 * random_heuristics_window_size) = { - /* It is quite a long time since we saw a copy, so we assume - that this data is not compressible, and store hashes less - often. Hashes of non compressible data are less likely to - turn out to be useful in the future, too, so we store less o= f - them to not to flood out the hash table of good compressible - data. */ - const size_t kMargin =3D - BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 4); - size_t pos_jump =3D - BROTLI_MIN(size_t, position + 16, pos_end - kMargin); - for (; position < pos_jump; position +=3D 4) { - FN(Store)(hasher, ringbuffer, ringbuffer_mask, position); - insert_length +=3D 4; - } - } else { - const size_t kMargin =3D - BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 2); - size_t pos_jump =3D - BROTLI_MIN(size_t, position + 8, pos_end - kMargin); - for (; position < pos_jump; position +=3D 2) { - FN(Store)(hasher, ringbuffer, ringbuffer_mask, position); - insert_length +=3D 2; - } - } - } - } - } - insert_length +=3D pos_end - position; - *last_insert_len =3D insert_length; - *num_commands +=3D (size_t)(commands - orig_commands); -} diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h b/BaseTools/= Source/C/BrotliCompress/enc/bit_cost.h deleted file mode 100644 index e7ab2eafe459..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Functions to estimate the bit cost of Huffman trees. */ - -#ifndef BROTLI_ENC_BIT_COST_H_ -#define BROTLI_ENC_BIT_COST_H_ - -#include "../common/platform.h" -#include -#include "./fast_log.h" -#include "./histogram.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static BROTLI_INLINE double ShannonEntropy( - const uint32_t* population, size_t size, size_t* total) { - size_t sum =3D 0; - double retval =3D 0; - const uint32_t* population_end =3D population + size; - size_t p; - if (size & 1) { - goto odd_number_of_elements_left; - } - while (population < population_end) { - p =3D *population++; - sum +=3D p; - retval -=3D (double)p * FastLog2(p); - odd_number_of_elements_left: - p =3D *population++; - sum +=3D p; - retval -=3D (double)p * FastLog2(p); - } - if (sum) retval +=3D (double)sum * FastLog2(sum); - *total =3D sum; - return retval; -} - -static BROTLI_INLINE double BitsEntropy( - const uint32_t* population, size_t size) { - size_t sum; - double retval =3D ShannonEntropy(population, size, &sum); - if (retval < sum) { - /* At least one bit per literal is needed. */ - retval =3D (double)sum; - } - return retval; -} - -BROTLI_INTERNAL double BrotliPopulationCostLiteral(const HistogramLiteral= *); -BROTLI_INTERNAL double BrotliPopulationCostCommand(const HistogramCommand= *); -BROTLI_INTERNAL double BrotliPopulationCostDistance(const HistogramDistan= ce*); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_BIT_COST_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h b/BaseTo= ols/Source/C/BrotliCompress/enc/bit_cost_inc.h deleted file mode 100644 index c96bddac0962..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h +++ /dev/null @@ -1,127 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN */ - -#define HistogramType FN(Histogram) - -double FN(BrotliPopulationCost)(const HistogramType* histogram) { - static const double kOneSymbolHistogramCost =3D 12; - static const double kTwoSymbolHistogramCost =3D 20; - static const double kThreeSymbolHistogramCost =3D 28; - static const double kFourSymbolHistogramCost =3D 37; - const size_t data_size =3D FN(HistogramDataSize)(); - int count =3D 0; - size_t s[5]; - double bits =3D 0.0; - size_t i; - if (histogram->total_count_ =3D=3D 0) { - return kOneSymbolHistogramCost; - } - for (i =3D 0; i < data_size; ++i) { - if (histogram->data_[i] > 0) { - s[count] =3D i; - ++count; - if (count > 4) break; - } - } - if (count =3D=3D 1) { - return kOneSymbolHistogramCost; - } - if (count =3D=3D 2) { - return (kTwoSymbolHistogramCost + (double)histogram->total_count_); - } - if (count =3D=3D 3) { - const uint32_t histo0 =3D histogram->data_[s[0]]; - const uint32_t histo1 =3D histogram->data_[s[1]]; - const uint32_t histo2 =3D histogram->data_[s[2]]; - const uint32_t histomax =3D - BROTLI_MAX(uint32_t, histo0, BROTLI_MAX(uint32_t, histo1, histo2)= ); - return (kThreeSymbolHistogramCost + - 2 * (histo0 + histo1 + histo2) - histomax); - } - if (count =3D=3D 4) { - uint32_t histo[4]; - uint32_t h23; - uint32_t histomax; - for (i =3D 0; i < 4; ++i) { - histo[i] =3D histogram->data_[s[i]]; - } - /* Sort */ - for (i =3D 0; i < 4; ++i) { - size_t j; - for (j =3D i + 1; j < 4; ++j) { - if (histo[j] > histo[i]) { - BROTLI_SWAP(uint32_t, histo, j, i); - } - } - } - h23 =3D histo[2] + histo[3]; - histomax =3D BROTLI_MAX(uint32_t, h23, histo[0]); - return (kFourSymbolHistogramCost + - 3 * h23 + 2 * (histo[0] + histo[1]) - histomax); - } - - { - /* In this loop we compute the entropy of the histogram and simultane= ously - build a simplified histogram of the code length codes where we use= the - zero repeat code 17, but we don't use the non-zero repeat code 16.= */ - size_t max_depth =3D 1; - uint32_t depth_histo[BROTLI_CODE_LENGTH_CODES] =3D { 0 }; - const double log2total =3D FastLog2(histogram->total_count_); - for (i =3D 0; i < data_size;) { - if (histogram->data_[i] > 0) { - /* Compute -log2(P(symbol)) =3D -log2(count(symbol)/total_count) = = =3D - =3D log2(total_count) - log2(count(sy= mbol)) */ - double log2p =3D log2total - FastLog2(histogram->data_[i]); - /* Approximate the bit depth by round(-log2(P(symbol))) */ - size_t depth =3D (size_t)(log2p + 0.5); - bits +=3D histogram->data_[i] * log2p; - if (depth > 15) { - depth =3D 15; - } - if (depth > max_depth) { - max_depth =3D depth; - } - ++depth_histo[depth]; - ++i; - } else { - /* Compute the run length of zeros and add the appropriate number= of 0 - and 17 code length codes to the code length code histogram. */ - uint32_t reps =3D 1; - size_t k; - for (k =3D i + 1; k < data_size && histogram->data_[k] =3D=3D 0; = ++k) { - ++reps; - } - i +=3D reps; - if (i =3D=3D data_size) { - /* Don't add any cost for the last zero run, since these are en= coded - only implicitly. */ - break; - } - if (reps < 3) { - depth_histo[0] +=3D reps; - } else { - reps -=3D 2; - while (reps > 0) { - ++depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH]; - /* Add the 3 extra bits for the 17 code length code. */ - bits +=3D 3; - reps >>=3D 3; - } - } - } - } - /* Add the estimated encoding cost of the code length code histogram.= */ - bits +=3D (double)(18 + 2 * max_depth); - /* Add the entropy of the code length code histogram. */ - bits +=3D BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES); - } - return bits; -} - -#undef HistogramType diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h b/B= aseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h deleted file mode 100644 index ce7fd20cb3f4..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h +++ /dev/null @@ -1,34 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2014 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN */ - -#define HistogramType FN(Histogram) - -/* Creates entropy codes for all block types and stores them to the bit - stream. */ -static void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder*= self, - const HistogramType* histograms, const size_t histograms_size, - const size_t alphabet_size, HuffmanTree* tree, - size_t* storage_ix, uint8_t* storage) { - const size_t table_size =3D histograms_size * self->histogram_length_; - self->depths_ =3D BROTLI_ALLOC(m, uint8_t, table_size); - self->bits_ =3D BROTLI_ALLOC(m, uint16_t, table_size); - if (BROTLI_IS_OOM(m)) return; - - { - size_t i; - for (i =3D 0; i < histograms_size; ++i) { - size_t ix =3D i * self->histogram_length_; - BuildAndStoreHuffmanTree(&histograms[i].data_[0], self->histogram_l= ength_, - alphabet_size, tree, &self->depths_[ix], &self->bits_[ix], - storage_ix, storage); - } - } -} - -#undef HistogramType diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h b/Base= Tools/Source/C/BrotliCompress/enc/block_splitter.h deleted file mode 100644 index aa6ebedc2cb8..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Block split point selection utilities. */ - -#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_ -#define BROTLI_ENC_BLOCK_SPLITTER_H_ - -#include "../common/platform.h" -#include -#include "./command.h" -#include "./memory.h" -#include "./quality.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -typedef struct BlockSplit { - size_t num_types; /* Amount of distinct types */ - size_t num_blocks; /* Amount of values in types and length */ - uint8_t* types; - uint32_t* lengths; - - size_t types_alloc_size; - size_t lengths_alloc_size; -} BlockSplit; - -BROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self); -BROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m, - BlockSplit* self); - -BROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m, - const Command* cmds, - const size_t num_commands, - const uint8_t* data, - const size_t offset, - const size_t mask, - const BrotliEncoderParams* params, - BlockSplit* literal_split, - BlockSplit* insert_and_copy_split, - BlockSplit* dist_split); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_BLOCK_SPLITTER_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h b/= BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h deleted file mode 100644 index 63c7ccf12975..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h +++ /dev/null @@ -1,431 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN, DataType */ - -#define HistogramType FN(Histogram) - -static void FN(InitialEntropyCodes)(const DataType* data, size_t length, - size_t stride, - size_t num_histograms, - HistogramType* histograms) { - uint32_t seed =3D 7; - size_t block_length =3D length / num_histograms; - size_t i; - FN(ClearHistograms)(histograms, num_histograms); - for (i =3D 0; i < num_histograms; ++i) { - size_t pos =3D length * i / num_histograms; - if (i !=3D 0) { - pos +=3D MyRand(&seed) % block_length; - } - if (pos + stride >=3D length) { - pos =3D length - stride - 1; - } - FN(HistogramAddVector)(&histograms[i], data + pos, stride); - } -} - -static void FN(RandomSample)(uint32_t* seed, - const DataType* data, - size_t length, - size_t stride, - HistogramType* sample) { - size_t pos =3D 0; - if (stride >=3D length) { - stride =3D length; - } else { - pos =3D MyRand(seed) % (length - stride + 1); - } - FN(HistogramAddVector)(sample, data + pos, stride); -} - -static void FN(RefineEntropyCodes)(const DataType* data, size_t length, - size_t stride, - size_t num_histograms, - HistogramType* histograms) { - size_t iters =3D - kIterMulForRefining * length / stride + kMinItersForRefining; - uint32_t seed =3D 7; - size_t iter; - iters =3D ((iters + num_histograms - 1) / num_histograms) * num_histogr= ams; - for (iter =3D 0; iter < iters; ++iter) { - HistogramType sample; - FN(HistogramClear)(&sample); - FN(RandomSample)(&seed, data, length, stride, &sample); - FN(HistogramAddHistogram)(&histograms[iter % num_histograms], &sample= ); - } -} - -/* Assigns a block id from the range [0, num_histograms) to each data ele= ment - in data[0..length) and fills in block_id[0..length) with the assigned = values. - Returns the number of blocks, i.e. one plus the number of block switch= es. */ -static size_t FN(FindBlocks)(const DataType* data, const size_t length, - const double block_switch_bitcost, - const size_t num_histograms, - const HistogramType* histograms, - double* insert_cost, - double* cost, - uint8_t* switch_signal, - uint8_t* block_id) { - const size_t data_size =3D FN(HistogramDataSize)(); - const size_t bitmaplen =3D (num_histograms + 7) >> 3; - size_t num_blocks =3D 1; - size_t i; - size_t j; - BROTLI_DCHECK(num_histograms <=3D 256); - if (num_histograms <=3D 1) { - for (i =3D 0; i < length; ++i) { - block_id[i] =3D 0; - } - return 1; - } - memset(insert_cost, 0, sizeof(insert_cost[0]) * data_size * num_histogr= ams); - for (i =3D 0; i < num_histograms; ++i) { - insert_cost[i] =3D FastLog2((uint32_t)histograms[i].total_count_); - } - for (i =3D data_size; i !=3D 0;) { - --i; - for (j =3D 0; j < num_histograms; ++j) { - insert_cost[i * num_histograms + j] =3D - insert_cost[j] - BitCost(histograms[j].data_[i]); - } - } - memset(cost, 0, sizeof(cost[0]) * num_histograms); - memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmaplen)= ; - /* After each iteration of this loop, cost[k] will contain the differen= ce - between the minimum cost of arriving at the current byte position us= ing - entropy code k, and the minimum cost of arriving at the current byte - position. This difference is capped at the block switch cost, and if= it - reaches block switch cost, it means that when we trace back from the= last - position, we need to switch here. */ - for (i =3D 0; i < length; ++i) { - const size_t byte_ix =3D i; - size_t ix =3D byte_ix * bitmaplen; - size_t insert_cost_ix =3D data[byte_ix] * num_histograms; - double min_cost =3D 1e99; - double block_switch_cost =3D block_switch_bitcost; - size_t k; - for (k =3D 0; k < num_histograms; ++k) { - /* We are coding the symbol in data[byte_ix] with entropy code k. *= / - cost[k] +=3D insert_cost[insert_cost_ix + k]; - if (cost[k] < min_cost) { - min_cost =3D cost[k]; - block_id[byte_ix] =3D (uint8_t)k; - } - } - /* More blocks for the beginning. */ - if (byte_ix < 2000) { - block_switch_cost *=3D 0.77 + 0.07 * (double)byte_ix / 2000; - } - for (k =3D 0; k < num_histograms; ++k) { - cost[k] -=3D min_cost; - if (cost[k] >=3D block_switch_cost) { - const uint8_t mask =3D (uint8_t)(1u << (k & 7)); - cost[k] =3D block_switch_cost; - BROTLI_DCHECK((k >> 3) < bitmaplen); - switch_signal[ix + (k >> 3)] |=3D mask; - } - } - } - { /* Trace back from the last position and switch at the marked places= . */ - size_t byte_ix =3D length - 1; - size_t ix =3D byte_ix * bitmaplen; - uint8_t cur_id =3D block_id[byte_ix]; - while (byte_ix > 0) { - const uint8_t mask =3D (uint8_t)(1u << (cur_id & 7)); - BROTLI_DCHECK(((size_t)cur_id >> 3) < bitmaplen); - --byte_ix; - ix -=3D bitmaplen; - if (switch_signal[ix + (cur_id >> 3)] & mask) { - if (cur_id !=3D block_id[byte_ix]) { - cur_id =3D block_id[byte_ix]; - ++num_blocks; - } - } - block_id[byte_ix] =3D cur_id; - } - } - return num_blocks; -} - -static size_t FN(RemapBlockIds)(uint8_t* block_ids, const size_t length, - uint16_t* new_id, const size_t num_histog= rams) { - static const uint16_t kInvalidId =3D 256; - uint16_t next_id =3D 0; - size_t i; - for (i =3D 0; i < num_histograms; ++i) { - new_id[i] =3D kInvalidId; - } - for (i =3D 0; i < length; ++i) { - BROTLI_DCHECK(block_ids[i] < num_histograms); - if (new_id[block_ids[i]] =3D=3D kInvalidId) { - new_id[block_ids[i]] =3D next_id++; - } - } - for (i =3D 0; i < length; ++i) { - block_ids[i] =3D (uint8_t)new_id[block_ids[i]]; - BROTLI_DCHECK(block_ids[i] < num_histograms); - } - BROTLI_DCHECK(next_id <=3D num_histograms); - return next_id; -} - -static void FN(BuildBlockHistograms)(const DataType* data, const size_t l= ength, - const uint8_t* block_ids, - const size_t num_histograms, - HistogramType* histograms) { - size_t i; - FN(ClearHistograms)(histograms, num_histograms); - for (i =3D 0; i < length; ++i) { - FN(HistogramAdd)(&histograms[block_ids[i]], data[i]); - } -} - -static void FN(ClusterBlocks)(MemoryManager* m, - const DataType* data, const size_t length, - const size_t num_blocks, - uint8_t* block_ids, - BlockSplit* split) { - uint32_t* histogram_symbols =3D BROTLI_ALLOC(m, uint32_t, num_blocks); - uint32_t* block_lengths =3D BROTLI_ALLOC(m, uint32_t, num_blocks); - const size_t expected_num_clusters =3D CLUSTERS_PER_BATCH * - (num_blocks + HISTOGRAMS_PER_BATCH - 1) / HISTOGRAMS_PER_BATCH; - size_t all_histograms_size =3D 0; - size_t all_histograms_capacity =3D expected_num_clusters; - HistogramType* all_histograms =3D - BROTLI_ALLOC(m, HistogramType, all_histograms_capacity); - size_t cluster_size_size =3D 0; - size_t cluster_size_capacity =3D expected_num_clusters; - uint32_t* cluster_size =3D BROTLI_ALLOC(m, uint32_t, cluster_size_capac= ity); - size_t num_clusters =3D 0; - HistogramType* histograms =3D BROTLI_ALLOC(m, HistogramType, - BROTLI_MIN(size_t, num_blocks, HISTOGRAMS_PER_BATCH)); - size_t max_num_pairs =3D - HISTOGRAMS_PER_BATCH * HISTOGRAMS_PER_BATCH / 2; - size_t pairs_capacity =3D max_num_pairs + 1; - HistogramPair* pairs =3D BROTLI_ALLOC(m, HistogramPair, pairs_capacity)= ; - size_t pos =3D 0; - uint32_t* clusters; - size_t num_final_clusters; - static const uint32_t kInvalidIndex =3D BROTLI_UINT32_MAX; - uint32_t* new_index; - size_t i; - uint32_t sizes[HISTOGRAMS_PER_BATCH] =3D { 0 }; - uint32_t new_clusters[HISTOGRAMS_PER_BATCH] =3D { 0 }; - uint32_t symbols[HISTOGRAMS_PER_BATCH] =3D { 0 }; - uint32_t remap[HISTOGRAMS_PER_BATCH] =3D { 0 }; - - if (BROTLI_IS_OOM(m)) return; - - memset(block_lengths, 0, num_blocks * sizeof(uint32_t)); - - { - size_t block_idx =3D 0; - for (i =3D 0; i < length; ++i) { - BROTLI_DCHECK(block_idx < num_blocks); - ++block_lengths[block_idx]; - if (i + 1 =3D=3D length || block_ids[i] !=3D block_ids[i + 1]) { - ++block_idx; - } - } - BROTLI_DCHECK(block_idx =3D=3D num_blocks); - } - - for (i =3D 0; i < num_blocks; i +=3D HISTOGRAMS_PER_BATCH) { - const size_t num_to_combine =3D - BROTLI_MIN(size_t, num_blocks - i, HISTOGRAMS_PER_BATCH); - size_t num_new_clusters; - size_t j; - for (j =3D 0; j < num_to_combine; ++j) { - size_t k; - FN(HistogramClear)(&histograms[j]); - for (k =3D 0; k < block_lengths[i + j]; ++k) { - FN(HistogramAdd)(&histograms[j], data[pos++]); - } - histograms[j].bit_cost_ =3D FN(BrotliPopulationCost)(&histograms[j]= ); - new_clusters[j] =3D (uint32_t)j; - symbols[j] =3D (uint32_t)j; - sizes[j] =3D 1; - } - num_new_clusters =3D FN(BrotliHistogramCombine)( - histograms, sizes, symbols, new_clusters, pairs, num_to_combine, - num_to_combine, HISTOGRAMS_PER_BATCH, max_num_pairs); - BROTLI_ENSURE_CAPACITY(m, HistogramType, all_histograms, - all_histograms_capacity, all_histograms_size + num_new_clusters); - BROTLI_ENSURE_CAPACITY(m, uint32_t, cluster_size, - cluster_size_capacity, cluster_size_size + num_new_clusters); - if (BROTLI_IS_OOM(m)) return; - for (j =3D 0; j < num_new_clusters; ++j) { - all_histograms[all_histograms_size++] =3D histograms[new_clusters[j= ]]; - cluster_size[cluster_size_size++] =3D sizes[new_clusters[j]]; - remap[new_clusters[j]] =3D (uint32_t)j; - } - for (j =3D 0; j < num_to_combine; ++j) { - histogram_symbols[i + j] =3D (uint32_t)num_clusters + remap[symbols= [j]]; - } - num_clusters +=3D num_new_clusters; - BROTLI_DCHECK(num_clusters =3D=3D cluster_size_size); - BROTLI_DCHECK(num_clusters =3D=3D all_histograms_size); - } - BROTLI_FREE(m, histograms); - - max_num_pairs =3D - BROTLI_MIN(size_t, 64 * num_clusters, (num_clusters / 2) * num_clus= ters); - if (pairs_capacity < max_num_pairs + 1) { - BROTLI_FREE(m, pairs); - pairs =3D BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1); - if (BROTLI_IS_OOM(m)) return; - } - - clusters =3D BROTLI_ALLOC(m, uint32_t, num_clusters); - if (BROTLI_IS_OOM(m)) return; - for (i =3D 0; i < num_clusters; ++i) { - clusters[i] =3D (uint32_t)i; - } - num_final_clusters =3D FN(BrotliHistogramCombine)( - all_histograms, cluster_size, histogram_symbols, clusters, pairs, - num_clusters, num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES, - max_num_pairs); - BROTLI_FREE(m, pairs); - BROTLI_FREE(m, cluster_size); - - new_index =3D BROTLI_ALLOC(m, uint32_t, num_clusters); - if (BROTLI_IS_OOM(m)) return; - for (i =3D 0; i < num_clusters; ++i) new_index[i] =3D kInvalidIndex; - pos =3D 0; - { - uint32_t next_index =3D 0; - for (i =3D 0; i < num_blocks; ++i) { - HistogramType histo; - size_t j; - uint32_t best_out; - double best_bits; - FN(HistogramClear)(&histo); - for (j =3D 0; j < block_lengths[i]; ++j) { - FN(HistogramAdd)(&histo, data[pos++]); - } - best_out =3D (i =3D=3D 0) ? histogram_symbols[0] : histogram_symbol= s[i - 1]; - best_bits =3D - FN(BrotliHistogramBitCostDistance)(&histo, &all_histograms[best= _out]); - for (j =3D 0; j < num_final_clusters; ++j) { - const double cur_bits =3D FN(BrotliHistogramBitCostDistance)( - &histo, &all_histograms[clusters[j]]); - if (cur_bits < best_bits) { - best_bits =3D cur_bits; - best_out =3D clusters[j]; - } - } - histogram_symbols[i] =3D best_out; - if (new_index[best_out] =3D=3D kInvalidIndex) { - new_index[best_out] =3D next_index++; - } - } - } - BROTLI_FREE(m, clusters); - BROTLI_FREE(m, all_histograms); - BROTLI_ENSURE_CAPACITY( - m, uint8_t, split->types, split->types_alloc_size, num_blocks); - BROTLI_ENSURE_CAPACITY( - m, uint32_t, split->lengths, split->lengths_alloc_size, num_blocks)= ; - if (BROTLI_IS_OOM(m)) return; - { - uint32_t cur_length =3D 0; - size_t block_idx =3D 0; - uint8_t max_type =3D 0; - for (i =3D 0; i < num_blocks; ++i) { - cur_length +=3D block_lengths[i]; - if (i + 1 =3D=3D num_blocks || - histogram_symbols[i] !=3D histogram_symbols[i + 1]) { - const uint8_t id =3D (uint8_t)new_index[histogram_symbols[i]]; - split->types[block_idx] =3D id; - split->lengths[block_idx] =3D cur_length; - max_type =3D BROTLI_MAX(uint8_t, max_type, id); - cur_length =3D 0; - ++block_idx; - } - } - split->num_blocks =3D block_idx; - split->num_types =3D (size_t)max_type + 1; - } - BROTLI_FREE(m, new_index); - BROTLI_FREE(m, block_lengths); - BROTLI_FREE(m, histogram_symbols); -} - -static void FN(SplitByteVector)(MemoryManager* m, - const DataType* data, const size_t length= , - const size_t literals_per_histogram, - const size_t max_histograms, - const size_t sampling_stride_length, - const double block_switch_cost, - const BrotliEncoderParams* params, - BlockSplit* split) { - const size_t data_size =3D FN(HistogramDataSize)(); - size_t num_histograms =3D length / literals_per_histogram + 1; - HistogramType* histograms; - if (num_histograms > max_histograms) { - num_histograms =3D max_histograms; - } - if (length =3D=3D 0) { - split->num_types =3D 1; - return; - } else if (length < kMinLengthForBlockSplitting) { - BROTLI_ENSURE_CAPACITY(m, uint8_t, - split->types, split->types_alloc_size, split->num_blocks + 1); - BROTLI_ENSURE_CAPACITY(m, uint32_t, - split->lengths, split->lengths_alloc_size, split->num_blocks + 1)= ; - if (BROTLI_IS_OOM(m)) return; - split->num_types =3D 1; - split->types[split->num_blocks] =3D 0; - split->lengths[split->num_blocks] =3D (uint32_t)length; - split->num_blocks++; - return; - } - histograms =3D BROTLI_ALLOC(m, HistogramType, num_histograms); - if (BROTLI_IS_OOM(m)) return; - /* Find good entropy codes. */ - FN(InitialEntropyCodes)(data, length, - sampling_stride_length, - num_histograms, histograms); - FN(RefineEntropyCodes)(data, length, - sampling_stride_length, - num_histograms, histograms); - { - /* Find a good path through literals with the good entropy codes. */ - uint8_t* block_ids =3D BROTLI_ALLOC(m, uint8_t, length); - size_t num_blocks =3D 0; - const size_t bitmaplen =3D (num_histograms + 7) >> 3; - double* insert_cost =3D BROTLI_ALLOC(m, double, data_size * num_histo= grams); - double* cost =3D BROTLI_ALLOC(m, double, num_histograms); - uint8_t* switch_signal =3D BROTLI_ALLOC(m, uint8_t, length * bitmaple= n); - uint16_t* new_id =3D BROTLI_ALLOC(m, uint16_t, num_histograms); - const size_t iters =3D params->quality < HQ_ZOPFLIFICATION_QUALITY ? = 3 : 10; - size_t i; - if (BROTLI_IS_OOM(m)) return; - for (i =3D 0; i < iters; ++i) { - num_blocks =3D FN(FindBlocks)(data, length, - block_switch_cost, - num_histograms, histograms, - insert_cost, cost, switch_signal, - block_ids); - num_histograms =3D FN(RemapBlockIds)(block_ids, length, - new_id, num_histograms); - FN(BuildBlockHistograms)(data, length, block_ids, - num_histograms, histograms); - } - BROTLI_FREE(m, insert_cost); - BROTLI_FREE(m, cost); - BROTLI_FREE(m, switch_signal); - BROTLI_FREE(m, new_id); - BROTLI_FREE(m, histograms); - FN(ClusterBlocks)(m, data, length, num_blocks, block_ids, split); - if (BROTLI_IS_OOM(m)) return; - BROTLI_FREE(m, block_ids); - } -} - -#undef HistogramType diff --git a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h b/B= aseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h deleted file mode 100644 index 18556dc11044..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright 2014 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Functions to convert brotli-related data structures into the - brotli bit stream. The functions here operate under - assumption that there is enough space in the storage, i.e., there are - no out-of-range checks anywhere. - - These functions do bit addressing into a byte array. The byte array - is called "storage" and the index to the bit is called storage_ix - in function arguments. */ - -#ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_ -#define BROTLI_ENC_BROTLI_BIT_STREAM_H_ - -#include "../common/context.h" -#include "../common/platform.h" -#include -#include "./command.h" -#include "./entropy_encode.h" -#include "./memory.h" -#include "./metablock.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* All Store functions here will use a storage_ix, which is always the bi= t - position for the current storage. */ - -BROTLI_INTERNAL void BrotliStoreHuffmanTree(const uint8_t* depths, size_t= num, - HuffmanTree* tree, size_t* storage_ix, uint8_t* storage); - -BROTLI_INTERNAL void BrotliBuildAndStoreHuffmanTreeFast( - MemoryManager* m, const uint32_t* histogram, const size_t histogram_t= otal, - const size_t max_bits, uint8_t* depth, uint16_t* bits, size_t* storag= e_ix, - uint8_t* storage); - -/* REQUIRES: length > 0 */ -/* REQUIRES: length <=3D (1 << 24) */ -BROTLI_INTERNAL void BrotliStoreMetaBlock(MemoryManager* m, - const uint8_t* input, size_t start_pos, size_t length, size_t mask, - uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last, - const BrotliEncoderParams* params, ContextType literal_context_mode, - const Command* commands, size_t n_commands, const MetaBlockSplit* mb, - size_t* storage_ix, uint8_t* storage); - -/* Stores the meta-block without doing any block splitting, just collects - one histogram per block category and uses that for entropy coding. - REQUIRES: length > 0 - REQUIRES: length <=3D (1 << 24) */ -BROTLI_INTERNAL void BrotliStoreMetaBlockTrivial(MemoryManager* m, - const uint8_t* input, size_t start_pos, size_t length, size_t mask, - BROTLI_BOOL is_last, const BrotliEncoderParams* params, - const Command* commands, size_t n_commands, - size_t* storage_ix, uint8_t* storage); - -/* Same as above, but uses static prefix codes for histograms with a only= a few - symbols, and uses static code length prefix codes for all other histog= rams. - REQUIRES: length > 0 - REQUIRES: length <=3D (1 << 24) */ -BROTLI_INTERNAL void BrotliStoreMetaBlockFast(MemoryManager* m, - const uint8_t* input, size_t start_pos, size_t length, size_t mask, - BROTLI_BOOL is_last, const BrotliEncoderParams* params, - const Command* commands, size_t n_commands, - size_t* storage_ix, uint8_t* storage); - -/* This is for storing uncompressed blocks (simple raw storage of - bytes-as-bytes). - REQUIRES: length > 0 - REQUIRES: length <=3D (1 << 24) */ -BROTLI_INTERNAL void BrotliStoreUncompressedMetaBlock( - BROTLI_BOOL is_final_block, const uint8_t* BROTLI_RESTRICT input, - size_t position, size_t mask, size_t len, - size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage)= ; - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_BROTLI_BIT_STREAM_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster.h b/BaseTools/S= ource/C/BrotliCompress/enc/cluster.h deleted file mode 100644 index b7ebec8c7841..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/cluster.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Functions for clustering similar histograms together. */ - -#ifndef BROTLI_ENC_CLUSTER_H_ -#define BROTLI_ENC_CLUSTER_H_ - -#include "../common/platform.h" -#include -#include "./histogram.h" -#include "./memory.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -typedef struct HistogramPair { - uint32_t idx1; - uint32_t idx2; - double cost_combo; - double cost_diff; -} HistogramPair; - -#define CODE(X) /* Declaration */; - -#define FN(X) X ## Literal -#include "./cluster_inc.h" /* NOLINT(build/include) */ -#undef FN - -#define FN(X) X ## Command -#include "./cluster_inc.h" /* NOLINT(build/include) */ -#undef FN - -#define FN(X) X ## Distance -#include "./cluster_inc.h" /* NOLINT(build/include) */ -#undef FN - -#undef CODE - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_CLUSTER_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h b/BaseToo= ls/Source/C/BrotliCompress/enc/cluster_inc.h deleted file mode 100644 index b47e0dff0049..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h +++ /dev/null @@ -1,317 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN, CODE */ - -#define HistogramType FN(Histogram) - -/* Computes the bit cost reduction by combining out[idx1] and out[idx2] a= nd if - it is below a threshold, stores the pair (idx1, idx2) in the *pairs qu= eue. */ -BROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)( - const HistogramType* out, const uint32_t* cluster_size, uint32_t idx1= , - uint32_t idx2, size_t max_num_pairs, HistogramPair* pairs, - size_t* num_pairs) CODE({ - BROTLI_BOOL is_good_pair =3D BROTLI_FALSE; - HistogramPair p; - p.idx1 =3D p.idx2 =3D 0; - p.cost_diff =3D p.cost_combo =3D 0; - if (idx1 =3D=3D idx2) { - return; - } - if (idx2 < idx1) { - uint32_t t =3D idx2; - idx2 =3D idx1; - idx1 =3D t; - } - p.idx1 =3D idx1; - p.idx2 =3D idx2; - p.cost_diff =3D 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[= idx2]); - p.cost_diff -=3D out[idx1].bit_cost_; - p.cost_diff -=3D out[idx2].bit_cost_; - - if (out[idx1].total_count_ =3D=3D 0) { - p.cost_combo =3D out[idx2].bit_cost_; - is_good_pair =3D BROTLI_TRUE; - } else if (out[idx2].total_count_ =3D=3D 0) { - p.cost_combo =3D out[idx1].bit_cost_; - is_good_pair =3D BROTLI_TRUE; - } else { - double threshold =3D *num_pairs =3D=3D 0 ? 1e99 : - BROTLI_MAX(double, 0.0, pairs[0].cost_diff); - HistogramType combo =3D out[idx1]; - double cost_combo; - FN(HistogramAddHistogram)(&combo, &out[idx2]); - cost_combo =3D FN(BrotliPopulationCost)(&combo); - if (cost_combo < threshold - p.cost_diff) { - p.cost_combo =3D cost_combo; - is_good_pair =3D BROTLI_TRUE; - } - } - if (is_good_pair) { - p.cost_diff +=3D p.cost_combo; - if (*num_pairs > 0 && HistogramPairIsLess(&pairs[0], &p)) { - /* Replace the top of the queue if needed. */ - if (*num_pairs < max_num_pairs) { - pairs[*num_pairs] =3D pairs[0]; - ++(*num_pairs); - } - pairs[0] =3D p; - } else if (*num_pairs < max_num_pairs) { - pairs[*num_pairs] =3D p; - ++(*num_pairs); - } - } -}) - -BROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out, - uint32_t* cluster_size, - uint32_t* symbols, - uint32_t* clusters, - HistogramPair* pairs, - size_t num_clusters, - size_t symbols_size, - size_t max_clusters, - size_t max_num_pairs) C= ODE({ - double cost_diff_threshold =3D 0.0; - size_t min_cluster_size =3D 1; - size_t num_pairs =3D 0; - - { - /* We maintain a vector of histogram pairs, with the property that th= e pair - with the maximum bit cost reduction is the first. */ - size_t idx1; - for (idx1 =3D 0; idx1 < num_clusters; ++idx1) { - size_t idx2; - for (idx2 =3D idx1 + 1; idx2 < num_clusters; ++idx2) { - FN(BrotliCompareAndPushToQueue)(out, cluster_size, clusters[idx1]= , - clusters[idx2], max_num_pairs, &pairs[0], &num_pairs); - } - } - } - - while (num_clusters > min_cluster_size) { - uint32_t best_idx1; - uint32_t best_idx2; - size_t i; - if (pairs[0].cost_diff >=3D cost_diff_threshold) { - cost_diff_threshold =3D 1e99; - min_cluster_size =3D max_clusters; - continue; - } - /* Take the best pair from the top of heap. */ - best_idx1 =3D pairs[0].idx1; - best_idx2 =3D pairs[0].idx2; - FN(HistogramAddHistogram)(&out[best_idx1], &out[best_idx2]); - out[best_idx1].bit_cost_ =3D pairs[0].cost_combo; - cluster_size[best_idx1] +=3D cluster_size[best_idx2]; - for (i =3D 0; i < symbols_size; ++i) { - if (symbols[i] =3D=3D best_idx2) { - symbols[i] =3D best_idx1; - } - } - for (i =3D 0; i < num_clusters; ++i) { - if (clusters[i] =3D=3D best_idx2) { - memmove(&clusters[i], &clusters[i + 1], - (num_clusters - i - 1) * sizeof(clusters[0])); - break; - } - } - --num_clusters; - { - /* Remove pairs intersecting the just combined best pair. */ - size_t copy_to_idx =3D 0; - for (i =3D 0; i < num_pairs; ++i) { - HistogramPair* p =3D &pairs[i]; - if (p->idx1 =3D=3D best_idx1 || p->idx2 =3D=3D best_idx1 || - p->idx1 =3D=3D best_idx2 || p->idx2 =3D=3D best_idx2) { - /* Remove invalid pair from the queue. */ - continue; - } - if (HistogramPairIsLess(&pairs[0], p)) { - /* Replace the top of the queue if needed. */ - HistogramPair front =3D pairs[0]; - pairs[0] =3D *p; - pairs[copy_to_idx] =3D front; - } else { - pairs[copy_to_idx] =3D *p; - } - ++copy_to_idx; - } - num_pairs =3D copy_to_idx; - } - - /* Push new pairs formed with the combined histogram to the heap. */ - for (i =3D 0; i < num_clusters; ++i) { - FN(BrotliCompareAndPushToQueue)(out, cluster_size, best_idx1, clust= ers[i], - max_num_pairs, &pairs[0], &num_pair= s); - } - } - return num_clusters; -}) - -/* What is the bit cost of moving histogram from cur_symbol to candidate.= */ -BROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)( - const HistogramType* histogram, const HistogramType* candidate) CODE(= { - if (histogram->total_count_ =3D=3D 0) { - return 0.0; - } else { - HistogramType tmp =3D *histogram; - FN(HistogramAddHistogram)(&tmp, candidate); - return FN(BrotliPopulationCost)(&tmp) - candidate->bit_cost_; - } -}) - -/* Find the best 'out' histogram for each of the 'in' histograms. - When called, clusters[0..num_clusters) contains the unique values from - symbols[0..in_size), but this property is not preserved in this functi= on. - Note: we assume that out[]->bit_cost_ is already up-to-date. */ -BROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in, - size_t in_size, const uint32_t* clusters, size_t num_clusters, - HistogramType* out, uint32_t* symbols) CODE({ - size_t i; - for (i =3D 0; i < in_size; ++i) { - uint32_t best_out =3D i =3D=3D 0 ? symbols[0] : symbols[i - 1]; - double best_bits =3D - FN(BrotliHistogramBitCostDistance)(&in[i], &out[best_out]); - size_t j; - for (j =3D 0; j < num_clusters; ++j) { - const double cur_bits =3D - FN(BrotliHistogramBitCostDistance)(&in[i], &out[clusters[j]]); - if (cur_bits < best_bits) { - best_bits =3D cur_bits; - best_out =3D clusters[j]; - } - } - symbols[i] =3D best_out; - } - - /* Recompute each out based on raw and symbols. */ - for (i =3D 0; i < num_clusters; ++i) { - FN(HistogramClear)(&out[clusters[i]]); - } - for (i =3D 0; i < in_size; ++i) { - FN(HistogramAddHistogram)(&out[symbols[i]], &in[i]); - } -}) - -/* Reorders elements of the out[0..length) array and changes values in - symbols[0..length) array in the following way: - * when called, symbols[] contains indexes into out[], and has N uniq= ue - values (possibly N < length) - * on return, symbols'[i] =3D f(symbols[i]) and - out'[symbols'[i]] =3D out[symbols[i]], for each 0 <=3D = i < length, - where f is a bijection between the range of symbols[] and [0..N), = and - the first occurrences of values in symbols'[i] come in consecutive - increasing order. - Returns N, the number of unique values in symbols[]. */ -BROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m, - HistogramType* out, uint32_t* symbols, size_t length) CODE({ - static const uint32_t kInvalidIndex =3D BROTLI_UINT32_MAX; - uint32_t* new_index =3D BROTLI_ALLOC(m, uint32_t, length); - uint32_t next_index; - HistogramType* tmp; - size_t i; - if (BROTLI_IS_OOM(m)) return 0; - for (i =3D 0; i < length; ++i) { - new_index[i] =3D kInvalidIndex; - } - next_index =3D 0; - for (i =3D 0; i < length; ++i) { - if (new_index[symbols[i]] =3D=3D kInvalidIndex) { - new_index[symbols[i]] =3D next_index; - ++next_index; - } - } - /* TODO: by using idea of "cycle-sort" we can avoid allocation of - tmp and reduce the number of copying by the factor of 2. */ - tmp =3D BROTLI_ALLOC(m, HistogramType, next_index); - if (BROTLI_IS_OOM(m)) return 0; - next_index =3D 0; - for (i =3D 0; i < length; ++i) { - if (new_index[symbols[i]] =3D=3D next_index) { - tmp[next_index] =3D out[symbols[i]]; - ++next_index; - } - symbols[i] =3D new_index[symbols[i]]; - } - BROTLI_FREE(m, new_index); - for (i =3D 0; i < next_index; ++i) { - out[i] =3D tmp[i]; - } - BROTLI_FREE(m, tmp); - return next_index; -}) - -BROTLI_INTERNAL void FN(BrotliClusterHistograms)( - MemoryManager* m, const HistogramType* in, const size_t in_size, - size_t max_histograms, HistogramType* out, size_t* out_size, - uint32_t* histogram_symbols) CODE({ - uint32_t* cluster_size =3D BROTLI_ALLOC(m, uint32_t, in_size); - uint32_t* clusters =3D BROTLI_ALLOC(m, uint32_t, in_size); - size_t num_clusters =3D 0; - const size_t max_input_histograms =3D 64; - size_t pairs_capacity =3D max_input_histograms * max_input_histograms /= 2; - /* For the first pass of clustering, we allow all pairs. */ - HistogramPair* pairs =3D BROTLI_ALLOC(m, HistogramPair, pairs_capacity = + 1); - size_t i; - - if (BROTLI_IS_OOM(m)) return; - - for (i =3D 0; i < in_size; ++i) { - cluster_size[i] =3D 1; - } - - for (i =3D 0; i < in_size; ++i) { - out[i] =3D in[i]; - out[i].bit_cost_ =3D FN(BrotliPopulationCost)(&in[i]); - histogram_symbols[i] =3D (uint32_t)i; - } - - for (i =3D 0; i < in_size; i +=3D max_input_histograms) { - size_t num_to_combine =3D - BROTLI_MIN(size_t, in_size - i, max_input_histograms); - size_t num_new_clusters; - size_t j; - for (j =3D 0; j < num_to_combine; ++j) { - clusters[num_clusters + j] =3D (uint32_t)(i + j); - } - num_new_clusters =3D - FN(BrotliHistogramCombine)(out, cluster_size, - &histogram_symbols[i], - &clusters[num_clusters], pairs, - num_to_combine, num_to_combine, - max_histograms, pairs_capacity); - num_clusters +=3D num_new_clusters; - } - - { - /* For the second pass, we limit the total number of histogram pairs. - After this limit is reached, we only keep searching for the best p= air. */ - size_t max_num_pairs =3D BROTLI_MIN(size_t, - 64 * num_clusters, (num_clusters / 2) * num_clusters); - BROTLI_ENSURE_CAPACITY( - m, HistogramPair, pairs, pairs_capacity, max_num_pairs + 1); - if (BROTLI_IS_OOM(m)) return; - - /* Collapse similar histograms. */ - num_clusters =3D FN(BrotliHistogramCombine)(out, cluster_size, - histogram_symbols, clusters= , - pairs, num_clusters, in_siz= e, - max_histograms, max_num_pai= rs); - } - BROTLI_FREE(m, pairs); - BROTLI_FREE(m, cluster_size); - /* Find the optimal map from original histograms to the final ones. */ - FN(BrotliHistogramRemap)(in, in_size, clusters, num_clusters, - out, histogram_symbols); - BROTLI_FREE(m, clusters); - /* Convert the context map to a canonical form. */ - *out_size =3D FN(BrotliHistogramReindex)(m, out, histogram_symbols, in_= size); - if (BROTLI_IS_OOM(m)) return; -}) - -#undef HistogramType diff --git a/BaseTools/Source/C/BrotliCompress/enc/command.h b/BaseTools/S= ource/C/BrotliCompress/enc/command.h deleted file mode 100644 index b8a66a44dc0b..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/command.h +++ /dev/null @@ -1,190 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* This class models a sequence of literals and a backward reference copy= . */ - -#ifndef BROTLI_ENC_COMMAND_H_ -#define BROTLI_ENC_COMMAND_H_ - -#include "../common/constants.h" -#include "../common/platform.h" -#include -#include "./fast_log.h" -#include "./params.h" -#include "./prefix.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static uint32_t kInsBase[] =3D { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26= , 34, 50, - 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 }; -static uint32_t kInsExtra[] =3D { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3= , 4, 4, - 5, 5, 6, 7, 8, 9, 10, 12, 14, 24 }; -static uint32_t kCopyBase[] =3D { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18= , 22, 30, - 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 }; -static uint32_t kCopyExtra[] =3D { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2= , 3, 3, - 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 }; - -static BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) { - if (insertlen < 6) { - return (uint16_t)insertlen; - } else if (insertlen < 130) { - uint32_t nbits =3D Log2FloorNonZero(insertlen - 2) - 1u; - return (uint16_t)((nbits << 1) + ((insertlen - 2) >> nbits) + 2); - } else if (insertlen < 2114) { - return (uint16_t)(Log2FloorNonZero(insertlen - 66) + 10); - } else if (insertlen < 6210) { - return 21u; - } else if (insertlen < 22594) { - return 22u; - } else { - return 23u; - } -} - -static BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) { - if (copylen < 10) { - return (uint16_t)(copylen - 2); - } else if (copylen < 134) { - uint32_t nbits =3D Log2FloorNonZero(copylen - 6) - 1u; - return (uint16_t)((nbits << 1) + ((copylen - 6) >> nbits) + 4); - } else if (copylen < 2118) { - return (uint16_t)(Log2FloorNonZero(copylen - 70) + 12); - } else { - return 23u; - } -} - -static BROTLI_INLINE uint16_t CombineLengthCodes( - uint16_t inscode, uint16_t copycode, BROTLI_BOOL use_last_distance) { - uint16_t bits64 =3D - (uint16_t)((copycode & 0x7u) | ((inscode & 0x7u) << 3u)); - if (use_last_distance && inscode < 8u && copycode < 16u) { - return (copycode < 8u) ? bits64 : (bits64 | 64u); - } else { - /* Specification: 5 Encoding of ... (last table) */ - /* offset =3D 2 * index, where index is in range [0..8] */ - uint32_t offset =3D 2u * ((copycode >> 3u) + 3u * (inscode >> 3u)); - /* All values in specification are K * 64, - where K =3D [2, 3, 6, 4, 5, 8, 7, 9, 10], - i + 1 =3D [1, 2, 3, 4, 5, 6, 7, 8, 9], - K - i - 1 =3D [1, 1, 3, 0, 0, 2, 0, 1, 2] =3D D. - All values in D require only 2 bits to encode. - Magic constant is shifted 6 bits left, to avoid final multiplicati= on. */ - offset =3D (offset << 5u) + 0x40u + ((0x520D40u >> offset) & 0xC0u); - return (uint16_t)(offset | bits64); - } -} - -static BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen, - BROTLI_BOOL use_last_distance, - uint16_t* code) { - uint16_t inscode =3D GetInsertLengthCode(insertlen); - uint16_t copycode =3D GetCopyLengthCode(copylen); - *code =3D CombineLengthCodes(inscode, copycode, use_last_distance); -} - -static BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) { - return kInsBase[inscode]; -} - -static BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) { - return kInsExtra[inscode]; -} - -static BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) { - return kCopyBase[copycode]; -} - -static BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) { - return kCopyExtra[copycode]; -} - -typedef struct Command { - uint32_t insert_len_; - /* Stores copy_len in low 25 bits and copy_code - copy_len in high 7 bi= t. */ - uint32_t copy_len_; - /* Stores distance extra bits. */ - uint32_t dist_extra_; - uint16_t cmd_prefix_; - /* Stores distance code in low 10 bits - and number of extra bits in high 6 bits. */ - uint16_t dist_prefix_; -} Command; - -/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset = 1. */ -static BROTLI_INLINE void InitCommand(Command* self, - const BrotliDistanceParams* dist, size_t insertlen, - size_t copylen, int copylen_code_delta, size_t distance_code) { - /* Don't rely on signed int representation, use honest casts. */ - uint32_t delta =3D (uint8_t)((int8_t)copylen_code_delta); - self->insert_len_ =3D (uint32_t)insertlen; - self->copy_len_ =3D (uint32_t)(copylen | (delta << 25)); - /* The distance prefix and extra bits are stored in this Command as if - npostfix and ndirect were 0, they are only recomputed later after th= e - clustering if needed. */ - PrefixEncodeCopyDistance( - distance_code, dist->num_direct_distance_codes, - dist->distance_postfix_bits, &self->dist_prefix_, &self->dist_extra= _); - GetLengthCode( - insertlen, (size_t)((int)copylen + copylen_code_delta), - TO_BROTLI_BOOL((self->dist_prefix_ & 0x3FF) =3D=3D 0), &self->cmd_p= refix_); -} - -static BROTLI_INLINE void InitInsertCommand(Command* self, size_t insertl= en) { - self->insert_len_ =3D (uint32_t)insertlen; - self->copy_len_ =3D 4 << 25; - self->dist_extra_ =3D 0; - self->dist_prefix_ =3D BROTLI_NUM_DISTANCE_SHORT_CODES; - GetLengthCode(insertlen, 4, BROTLI_FALSE, &self->cmd_prefix_); -} - -static BROTLI_INLINE uint32_t CommandRestoreDistanceCode( - const Command* self, const BrotliDistanceParams* dist) { - if ((self->dist_prefix_ & 0x3FFu) < - BROTLI_NUM_DISTANCE_SHORT_CODES + dist->num_direct_distance_codes) = { - return self->dist_prefix_ & 0x3FFu; - } else { - uint32_t dcode =3D self->dist_prefix_ & 0x3FFu; - uint32_t nbits =3D self->dist_prefix_ >> 10; - uint32_t extra =3D self->dist_extra_; - uint32_t postfix_mask =3D (1U << dist->distance_postfix_bits) - 1U; - uint32_t hcode =3D (dcode - dist->num_direct_distance_codes - - BROTLI_NUM_DISTANCE_SHORT_CODES) >> - dist->distance_postfix_bits; - uint32_t lcode =3D (dcode - dist->num_direct_distance_codes - - BROTLI_NUM_DISTANCE_SHORT_CODES) & postfix_mask; - uint32_t offset =3D ((2U + (hcode & 1U)) << nbits) - 4U; - return ((offset + extra) << dist->distance_postfix_bits) + lcode + - dist->num_direct_distance_codes + BROTLI_NUM_DISTANCE_SHORT_CODES= ; - } -} - -static BROTLI_INLINE uint32_t CommandDistanceContext(const Command* self)= { - uint32_t r =3D self->cmd_prefix_ >> 6; - uint32_t c =3D self->cmd_prefix_ & 7; - if ((r =3D=3D 0 || r =3D=3D 2 || r =3D=3D 4 || r =3D=3D 7) && (c <=3D 2= )) { - return c; - } - return 3; -} - -static BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) { - return self->copy_len_ & 0x1FFFFFF; -} - -static BROTLI_INLINE uint32_t CommandCopyLenCode(const Command* self) { - uint32_t modifier =3D self->copy_len_ >> 25; - int32_t delta =3D (int8_t)((uint8_t)(modifier | ((modifier & 0x40) << 1= ))); - return (uint32_t)((int32_t)(self->copy_len_ & 0x1FFFFFF) + delta); -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_COMMAND_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h b/B= aseTools/Source/C/BrotliCompress/enc/compress_fragment.h deleted file mode 100644 index d4c34299ea2c..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Function for fast encoding of an input fragment, independently from th= e input - history. This function uses one-pass processing: when we find a backwa= rd - match, we immediately emit the corresponding command and literal codes= to - the bit stream. */ - -#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_ -#define BROTLI_ENC_COMPRESS_FRAGMENT_H_ - -#include "../common/platform.h" -#include -#include "./memory.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* Compresses "input" string to the "*storage" buffer as one or more comp= lete - meta-blocks, and updates the "*storage_ix" bit position. - - If "is_last" is 1, emits an additional empty last meta-block. - - "cmd_depth" and "cmd_bits" contain the command and distance prefix cod= es - (see comment in encode.h) used for the encoding of this input fragment= . - If "is_last" is 0, they are updated to reflect the statistics - of this input fragment, to be used for the encoding of the next fragme= nt. - - "*cmd_code_numbits" is the number of bits of the compressed representa= tion - of the command and distance prefix codes, and "cmd_code" is an array o= f - at least "(*cmd_code_numbits + 7) >> 3" size that contains the compres= sed - command and distance prefix codes. If "is_last" is 0, these are also - updated to represent the updated "cmd_depth" and "cmd_bits". - - REQUIRES: "input_size" is greater than zero, or "is_last" is 1. - REQUIRES: "input_size" is less or equal to maximal metablock size (1 <= < 24). - REQUIRES: All elements in "table[0..table_size-1]" are initialized to = zero. - REQUIRES: "table_size" is an odd (9, 11, 13, 15) power of two - OUTPUT: maximal copy distance <=3D |input_size| - OUTPUT: maximal copy distance <=3D BROTLI_MAX_BACKWARD_LIMIT(18) */ -BROTLI_INTERNAL void BrotliCompressFragmentFast(MemoryManager* m, - const uint8_t* input, - size_t input_size, - BROTLI_BOOL is_last, - int* table, size_t table_= size, - uint8_t cmd_depth[128], - uint16_t cmd_bits[128], - size_t* cmd_code_numbits, - uint8_t* cmd_code, - size_t* storage_ix, - uint8_t* storage); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_p= ass.h b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h deleted file mode 100644 index c97e22cfcaba..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Function for fast encoding of an input fragment, independently from th= e input - history. This function uses two-pass processing: in the first pass we = save - the found backward matches and literal bytes into a buffer, and in the - second pass we emit them into the bit stream using prefix codes built = based - on the actual command and literal byte histograms. */ - -#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ -#define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ - -#include "../common/platform.h" -#include -#include "./memory.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static const size_t kCompressFragmentTwoPassBlockSize =3D 1 << 17; - -/* Compresses "input" string to the "*storage" buffer as one or more comp= lete - meta-blocks, and updates the "*storage_ix" bit position. - - If "is_last" is 1, emits an additional empty last meta-block. - - REQUIRES: "input_size" is greater than zero, or "is_last" is 1. - REQUIRES: "input_size" is less or equal to maximal metablock size (1 <= < 24). - REQUIRES: "command_buf" and "literal_buf" point to at least - kCompressFragmentTwoPassBlockSize long arrays. - REQUIRES: All elements in "table[0..table_size-1]" are initialized to = zero. - REQUIRES: "table_size" is a power of two - OUTPUT: maximal copy distance <=3D |input_size| - OUTPUT: maximal copy distance <=3D BROTLI_MAX_BACKWARD_LIMIT(18) */ -BROTLI_INTERNAL void BrotliCompressFragmentTwoPass(MemoryManager* m, - const uint8_t* input, - size_t input_size, - BROTLI_BOOL is_last, - uint32_t* command_buf, - uint8_t* literal_buf, - int* table, - size_t table_size, - size_t* storage_ix, - uint8_t* storage); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h b/Bas= eTools/Source/C/BrotliCompress/enc/dictionary_hash.h deleted file mode 100644 index ab31827c0bb0..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Hash table on the 4-byte prefixes of static dictionary words. */ - -#ifndef BROTLI_ENC_DICTIONARY_HASH_H_ -#define BROTLI_ENC_DICTIONARY_HASH_H_ - -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -extern const uint16_t kStaticDictionaryHash[32768]; - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_DICTIONARY_HASH_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h b/BaseTo= ols/Source/C/BrotliCompress/enc/encoder_dict.h deleted file mode 100644 index 7c41ea055ac0..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright 2017 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -#ifndef BROTLI_ENC_ENCODER_DICT_H_ -#define BROTLI_ENC_ENCODER_DICT_H_ - -#include "../common/dictionary.h" -#include "../common/platform.h" -#include -#include "./static_dict_lut.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* Dictionary data (words and transforms) for 1 possible context */ -typedef struct BrotliEncoderDictionary { - const BrotliDictionary* words; - - /* cut off for fast encoder */ - uint32_t cutoffTransformsCount; - uint64_t cutoffTransforms; - - /* from dictionary_hash.h, for fast encoder */ - const uint16_t* hash_table; - - /* from static_dict_lut.h, for slow encoder */ - const uint16_t* buckets; - const DictWord* dict_words; -} BrotliEncoderDictionary; - -BROTLI_INTERNAL void BrotliInitEncoderDictionary(BrotliEncoderDictionary*= dict); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_ENCODER_DICT_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h b/Base= Tools/Source/C/BrotliCompress/enc/entropy_encode.h deleted file mode 100644 index 173d98336347..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h +++ /dev/null @@ -1,122 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Entropy encoding (Huffman) utilities. */ - -#ifndef BROTLI_ENC_ENTROPY_ENCODE_H_ -#define BROTLI_ENC_ENTROPY_ENCODE_H_ - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* A node of a Huffman tree. */ -typedef struct HuffmanTree { - uint32_t total_count_; - int16_t index_left_; - int16_t index_right_or_value_; -} HuffmanTree; - -static BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t cou= nt, - int16_t left, int16_t right) { - self->total_count_ =3D count; - self->index_left_ =3D left; - self->index_right_or_value_ =3D right; -} - -/* Returns 1 is assignment of depths succeeded, otherwise 0. */ -BROTLI_INTERNAL BROTLI_BOOL BrotliSetDepth( - int p, HuffmanTree* pool, uint8_t* depth, int max_depth); - -/* This function will create a Huffman tree. - - The (data,length) contains the population counts. - The tree_limit is the maximum bit depth of the Huffman codes. - - The depth contains the tree, i.e., how many bits are used for - the symbol. - - The actual Huffman tree is constructed in the tree[] array, which has = to - be at least 2 * length + 1 long. - - See http://en.wikipedia.org/wiki/Huffman_coding */ -BROTLI_INTERNAL void BrotliCreateHuffmanTree(const uint32_t* data, - const size_t length, - const int tree_limit, - HuffmanTree* tree, - uint8_t* depth); - -/* Change the population counts in a way that the consequent - Huffman tree compression, especially its RLE-part will be more - likely to compress this data more efficiently. - - length contains the size of the histogram. - counts contains the population counts. - good_for_rle is a buffer of at least length size */ -BROTLI_INTERNAL void BrotliOptimizeHuffmanCountsForRle( - size_t length, uint32_t* counts, uint8_t* good_for_rle); - -/* Write a Huffman tree from bit depths into the bit-stream representatio= n - of a Huffman tree. The generated Huffman tree is to be compressed once - more using a Huffman tree */ -BROTLI_INTERNAL void BrotliWriteHuffmanTree(const uint8_t* depth, - size_t num, - size_t* tree_size, - uint8_t* tree, - uint8_t* extra_bits_data); - -/* Get the actual bit values for a tree of bit depths. */ -BROTLI_INTERNAL void BrotliConvertBitDepthsToSymbols(const uint8_t* depth= , - size_t len, - uint16_t* bits); - -/* Input size optimized Shell sort. */ -typedef BROTLI_BOOL (*HuffmanTreeComparator)( - const HuffmanTree*, const HuffmanTree*); -static BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items, - const size_t n, HuffmanTreeComparator comparator) { - static const size_t gaps[] =3D {132, 57, 23, 10, 4, 1}; - if (n < 13) { - /* Insertion sort. */ - size_t i; - for (i =3D 1; i < n; ++i) { - HuffmanTree tmp =3D items[i]; - size_t k =3D i; - size_t j =3D i - 1; - while (comparator(&tmp, &items[j])) { - items[k] =3D items[j]; - k =3D j; - if (!j--) break; - } - items[k] =3D tmp; - } - return; - } else { - /* Shell sort. */ - int g =3D n < 57 ? 2 : 0; - for (; g < 6; ++g) { - size_t gap =3D gaps[g]; - size_t i; - for (i =3D gap; i < n; ++i) { - size_t j =3D i; - HuffmanTree tmp =3D items[i]; - for (; j >=3D gap && comparator(&tmp, &items[j - gap]); j -=3D ga= p) { - items[j] =3D items[j - gap]; - } - items[j] =3D tmp; - } - } - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_ENTROPY_ENCODE_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h= b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h deleted file mode 100644 index 3910af97ef8e..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h +++ /dev/null @@ -1,539 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Static entropy codes used for faster meta-block encoding. */ - -#ifndef BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ -#define BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ - -#include "../common/constants.h" -#include "../common/platform.h" -#include -#include "./write_bits.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static const uint8_t kCodeLengthDepth[18] =3D { - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4, -}; - -static const uint8_t kStaticCommandCodeDepth[BROTLI_NUM_COMMAND_SYMBOLS] = = =3D { - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, -}; - -static const uint8_t kStaticDistanceCodeDepth[64] =3D { - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, -}; - -static const uint32_t kCodeLengthBits[18] =3D { - 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7, -}; - -static BROTLI_INLINE void StoreStaticCodeLengthCode( - size_t* storage_ix, uint8_t* storage) { - BrotliWriteBits( - 40, BROTLI_MAKE_UINT64_T(0x0000FFu, 0x55555554u), storage_ix, stora= ge); -} - -static const uint64_t kZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] =3D { - 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000017, 0x00000027, - 0x00000037, 0x00000047, 0x00000057, 0x00000067, 0x00000077, 0x00000770, - 0x00000b87, 0x00001387, 0x00001b87, 0x00002387, 0x00002b87, 0x00003387, - 0x00003b87, 0x00000397, 0x00000b97, 0x00001397, 0x00001b97, 0x00002397, - 0x00002b97, 0x00003397, 0x00003b97, 0x000003a7, 0x00000ba7, 0x000013a7, - 0x00001ba7, 0x000023a7, 0x00002ba7, 0x000033a7, 0x00003ba7, 0x000003b7, - 0x00000bb7, 0x000013b7, 0x00001bb7, 0x000023b7, 0x00002bb7, 0x000033b7, - 0x00003bb7, 0x000003c7, 0x00000bc7, 0x000013c7, 0x00001bc7, 0x000023c7, - 0x00002bc7, 0x000033c7, 0x00003bc7, 0x000003d7, 0x00000bd7, 0x000013d7, - 0x00001bd7, 0x000023d7, 0x00002bd7, 0x000033d7, 0x00003bd7, 0x000003e7, - 0x00000be7, 0x000013e7, 0x00001be7, 0x000023e7, 0x00002be7, 0x000033e7, - 0x00003be7, 0x000003f7, 0x00000bf7, 0x000013f7, 0x00001bf7, 0x000023f7, - 0x00002bf7, 0x000033f7, 0x00003bf7, 0x0001c387, 0x0005c387, 0x0009c387, - 0x000dc387, 0x0011c387, 0x0015c387, 0x0019c387, 0x001dc387, 0x0001cb87, - 0x0005cb87, 0x0009cb87, 0x000dcb87, 0x0011cb87, 0x0015cb87, 0x0019cb87, - 0x001dcb87, 0x0001d387, 0x0005d387, 0x0009d387, 0x000dd387, 0x0011d387, - 0x0015d387, 0x0019d387, 0x001dd387, 0x0001db87, 0x0005db87, 0x0009db87, - 0x000ddb87, 0x0011db87, 0x0015db87, 0x0019db87, 0x001ddb87, 0x0001e387, - 0x0005e387, 0x0009e387, 0x000de387, 0x0011e387, 0x0015e387, 0x0019e387, - 0x001de387, 0x0001eb87, 0x0005eb87, 0x0009eb87, 0x000deb87, 0x0011eb87, - 0x0015eb87, 0x0019eb87, 0x001deb87, 0x0001f387, 0x0005f387, 0x0009f387, - 0x000df387, 0x0011f387, 0x0015f387, 0x0019f387, 0x001df387, 0x0001fb87, - 0x0005fb87, 0x0009fb87, 0x000dfb87, 0x0011fb87, 0x0015fb87, 0x0019fb87, - 0x001dfb87, 0x0001c397, 0x0005c397, 0x0009c397, 0x000dc397, 0x0011c397, - 0x0015c397, 0x0019c397, 0x001dc397, 0x0001cb97, 0x0005cb97, 0x0009cb97, - 0x000dcb97, 0x0011cb97, 0x0015cb97, 0x0019cb97, 0x001dcb97, 0x0001d397, - 0x0005d397, 0x0009d397, 0x000dd397, 0x0011d397, 0x0015d397, 0x0019d397, - 0x001dd397, 0x0001db97, 0x0005db97, 0x0009db97, 0x000ddb97, 0x0011db97, - 0x0015db97, 0x0019db97, 0x001ddb97, 0x0001e397, 0x0005e397, 0x0009e397, - 0x000de397, 0x0011e397, 0x0015e397, 0x0019e397, 0x001de397, 0x0001eb97, - 0x0005eb97, 0x0009eb97, 0x000deb97, 0x0011eb97, 0x0015eb97, 0x0019eb97, - 0x001deb97, 0x0001f397, 0x0005f397, 0x0009f397, 0x000df397, 0x0011f397, - 0x0015f397, 0x0019f397, 0x001df397, 0x0001fb97, 0x0005fb97, 0x0009fb97, - 0x000dfb97, 0x0011fb97, 0x0015fb97, 0x0019fb97, 0x001dfb97, 0x0001c3a7, - 0x0005c3a7, 0x0009c3a7, 0x000dc3a7, 0x0011c3a7, 0x0015c3a7, 0x0019c3a7, - 0x001dc3a7, 0x0001cba7, 0x0005cba7, 0x0009cba7, 0x000dcba7, 0x0011cba7, - 0x0015cba7, 0x0019cba7, 0x001dcba7, 0x0001d3a7, 0x0005d3a7, 0x0009d3a7, - 0x000dd3a7, 0x0011d3a7, 0x0015d3a7, 0x0019d3a7, 0x001dd3a7, 0x0001dba7, - 0x0005dba7, 0x0009dba7, 0x000ddba7, 0x0011dba7, 0x0015dba7, 0x0019dba7, - 0x001ddba7, 0x0001e3a7, 0x0005e3a7, 0x0009e3a7, 0x000de3a7, 0x0011e3a7, - 0x0015e3a7, 0x0019e3a7, 0x001de3a7, 0x0001eba7, 0x0005eba7, 0x0009eba7, - 0x000deba7, 0x0011eba7, 0x0015eba7, 0x0019eba7, 0x001deba7, 0x0001f3a7, - 0x0005f3a7, 0x0009f3a7, 0x000df3a7, 0x0011f3a7, 0x0015f3a7, 0x0019f3a7, - 0x001df3a7, 0x0001fba7, 0x0005fba7, 0x0009fba7, 0x000dfba7, 0x0011fba7, - 0x0015fba7, 0x0019fba7, 0x001dfba7, 0x0001c3b7, 0x0005c3b7, 0x0009c3b7, - 0x000dc3b7, 0x0011c3b7, 0x0015c3b7, 0x0019c3b7, 0x001dc3b7, 0x0001cbb7, - 0x0005cbb7, 0x0009cbb7, 0x000dcbb7, 0x0011cbb7, 0x0015cbb7, 0x0019cbb7, - 0x001dcbb7, 0x0001d3b7, 0x0005d3b7, 0x0009d3b7, 0x000dd3b7, 0x0011d3b7, - 0x0015d3b7, 0x0019d3b7, 0x001dd3b7, 0x0001dbb7, 0x0005dbb7, 0x0009dbb7, - 0x000ddbb7, 0x0011dbb7, 0x0015dbb7, 0x0019dbb7, 0x001ddbb7, 0x0001e3b7, - 0x0005e3b7, 0x0009e3b7, 0x000de3b7, 0x0011e3b7, 0x0015e3b7, 0x0019e3b7, - 0x001de3b7, 0x0001ebb7, 0x0005ebb7, 0x0009ebb7, 0x000debb7, 0x0011ebb7, - 0x0015ebb7, 0x0019ebb7, 0x001debb7, 0x0001f3b7, 0x0005f3b7, 0x0009f3b7, - 0x000df3b7, 0x0011f3b7, 0x0015f3b7, 0x0019f3b7, 0x001df3b7, 0x0001fbb7, - 0x0005fbb7, 0x0009fbb7, 0x000dfbb7, 0x0011fbb7, 0x0015fbb7, 0x0019fbb7, - 0x001dfbb7, 0x0001c3c7, 0x0005c3c7, 0x0009c3c7, 0x000dc3c7, 0x0011c3c7, - 0x0015c3c7, 0x0019c3c7, 0x001dc3c7, 0x0001cbc7, 0x0005cbc7, 0x0009cbc7, - 0x000dcbc7, 0x0011cbc7, 0x0015cbc7, 0x0019cbc7, 0x001dcbc7, 0x0001d3c7, - 0x0005d3c7, 0x0009d3c7, 0x000dd3c7, 0x0011d3c7, 0x0015d3c7, 0x0019d3c7, - 0x001dd3c7, 0x0001dbc7, 0x0005dbc7, 0x0009dbc7, 0x000ddbc7, 0x0011dbc7, - 0x0015dbc7, 0x0019dbc7, 0x001ddbc7, 0x0001e3c7, 0x0005e3c7, 0x0009e3c7, - 0x000de3c7, 0x0011e3c7, 0x0015e3c7, 0x0019e3c7, 0x001de3c7, 0x0001ebc7, - 0x0005ebc7, 0x0009ebc7, 0x000debc7, 0x0011ebc7, 0x0015ebc7, 0x0019ebc7, - 0x001debc7, 0x0001f3c7, 0x0005f3c7, 0x0009f3c7, 0x000df3c7, 0x0011f3c7, - 0x0015f3c7, 0x0019f3c7, 0x001df3c7, 0x0001fbc7, 0x0005fbc7, 0x0009fbc7, - 0x000dfbc7, 0x0011fbc7, 0x0015fbc7, 0x0019fbc7, 0x001dfbc7, 0x0001c3d7, - 0x0005c3d7, 0x0009c3d7, 0x000dc3d7, 0x0011c3d7, 0x0015c3d7, 0x0019c3d7, - 0x001dc3d7, 0x0001cbd7, 0x0005cbd7, 0x0009cbd7, 0x000dcbd7, 0x0011cbd7, - 0x0015cbd7, 0x0019cbd7, 0x001dcbd7, 0x0001d3d7, 0x0005d3d7, 0x0009d3d7, - 0x000dd3d7, 0x0011d3d7, 0x0015d3d7, 0x0019d3d7, 0x001dd3d7, 0x0001dbd7, - 0x0005dbd7, 0x0009dbd7, 0x000ddbd7, 0x0011dbd7, 0x0015dbd7, 0x0019dbd7, - 0x001ddbd7, 0x0001e3d7, 0x0005e3d7, 0x0009e3d7, 0x000de3d7, 0x0011e3d7, - 0x0015e3d7, 0x0019e3d7, 0x001de3d7, 0x0001ebd7, 0x0005ebd7, 0x0009ebd7, - 0x000debd7, 0x0011ebd7, 0x0015ebd7, 0x0019ebd7, 0x001debd7, 0x0001f3d7, - 0x0005f3d7, 0x0009f3d7, 0x000df3d7, 0x0011f3d7, 0x0015f3d7, 0x0019f3d7, - 0x001df3d7, 0x0001fbd7, 0x0005fbd7, 0x0009fbd7, 0x000dfbd7, 0x0011fbd7, - 0x0015fbd7, 0x0019fbd7, 0x001dfbd7, 0x0001c3e7, 0x0005c3e7, 0x0009c3e7, - 0x000dc3e7, 0x0011c3e7, 0x0015c3e7, 0x0019c3e7, 0x001dc3e7, 0x0001cbe7, - 0x0005cbe7, 0x0009cbe7, 0x000dcbe7, 0x0011cbe7, 0x0015cbe7, 0x0019cbe7, - 0x001dcbe7, 0x0001d3e7, 0x0005d3e7, 0x0009d3e7, 0x000dd3e7, 0x0011d3e7, - 0x0015d3e7, 0x0019d3e7, 0x001dd3e7, 0x0001dbe7, 0x0005dbe7, 0x0009dbe7, - 0x000ddbe7, 0x0011dbe7, 0x0015dbe7, 0x0019dbe7, 0x001ddbe7, 0x0001e3e7, - 0x0005e3e7, 0x0009e3e7, 0x000de3e7, 0x0011e3e7, 0x0015e3e7, 0x0019e3e7, - 0x001de3e7, 0x0001ebe7, 0x0005ebe7, 0x0009ebe7, 0x000debe7, 0x0011ebe7, - 0x0015ebe7, 0x0019ebe7, 0x001debe7, 0x0001f3e7, 0x0005f3e7, 0x0009f3e7, - 0x000df3e7, 0x0011f3e7, 0x0015f3e7, 0x0019f3e7, 0x001df3e7, 0x0001fbe7, - 0x0005fbe7, 0x0009fbe7, 0x000dfbe7, 0x0011fbe7, 0x0015fbe7, 0x0019fbe7, - 0x001dfbe7, 0x0001c3f7, 0x0005c3f7, 0x0009c3f7, 0x000dc3f7, 0x0011c3f7, - 0x0015c3f7, 0x0019c3f7, 0x001dc3f7, 0x0001cbf7, 0x0005cbf7, 0x0009cbf7, - 0x000dcbf7, 0x0011cbf7, 0x0015cbf7, 0x0019cbf7, 0x001dcbf7, 0x0001d3f7, - 0x0005d3f7, 0x0009d3f7, 0x000dd3f7, 0x0011d3f7, 0x0015d3f7, 0x0019d3f7, - 0x001dd3f7, 0x0001dbf7, 0x0005dbf7, 0x0009dbf7, 0x000ddbf7, 0x0011dbf7, - 0x0015dbf7, 0x0019dbf7, 0x001ddbf7, 0x0001e3f7, 0x0005e3f7, 0x0009e3f7, - 0x000de3f7, 0x0011e3f7, 0x0015e3f7, 0x0019e3f7, 0x001de3f7, 0x0001ebf7, - 0x0005ebf7, 0x0009ebf7, 0x000debf7, 0x0011ebf7, 0x0015ebf7, 0x0019ebf7, - 0x001debf7, 0x0001f3f7, 0x0005f3f7, 0x0009f3f7, 0x000df3f7, 0x0011f3f7, - 0x0015f3f7, 0x0019f3f7, 0x001df3f7, 0x0001fbf7, 0x0005fbf7, 0x0009fbf7, - 0x000dfbf7, 0x0011fbf7, 0x0015fbf7, 0x0019fbf7, 0x001dfbf7, 0x00e1c387, - 0x02e1c387, 0x04e1c387, 0x06e1c387, 0x08e1c387, 0x0ae1c387, 0x0ce1c387, - 0x0ee1c387, 0x00e5c387, 0x02e5c387, 0x04e5c387, 0x06e5c387, 0x08e5c387, - 0x0ae5c387, 0x0ce5c387, 0x0ee5c387, 0x00e9c387, 0x02e9c387, 0x04e9c387, - 0x06e9c387, 0x08e9c387, 0x0ae9c387, 0x0ce9c387, 0x0ee9c387, 0x00edc387, - 0x02edc387, 0x04edc387, 0x06edc387, 0x08edc387, 0x0aedc387, 0x0cedc387, - 0x0eedc387, 0x00f1c387, 0x02f1c387, 0x04f1c387, 0x06f1c387, 0x08f1c387, - 0x0af1c387, 0x0cf1c387, 0x0ef1c387, 0x00f5c387, 0x02f5c387, 0x04f5c387, - 0x06f5c387, 0x08f5c387, 0x0af5c387, 0x0cf5c387, 0x0ef5c387, 0x00f9c387, - 0x02f9c387, 0x04f9c387, 0x06f9c387, 0x08f9c387, 0x0af9c387, 0x0cf9c387, - 0x0ef9c387, 0x00fdc387, 0x02fdc387, 0x04fdc387, 0x06fdc387, 0x08fdc387, - 0x0afdc387, 0x0cfdc387, 0x0efdc387, 0x00e1cb87, 0x02e1cb87, 0x04e1cb87, - 0x06e1cb87, 0x08e1cb87, 0x0ae1cb87, 0x0ce1cb87, 0x0ee1cb87, 0x00e5cb87, - 0x02e5cb87, 0x04e5cb87, 0x06e5cb87, 0x08e5cb87, 0x0ae5cb87, 0x0ce5cb87, - 0x0ee5cb87, 0x00e9cb87, 0x02e9cb87, 0x04e9cb87, 0x06e9cb87, 0x08e9cb87, - 0x0ae9cb87, 0x0ce9cb87, 0x0ee9cb87, 0x00edcb87, 0x02edcb87, 0x04edcb87, - 0x06edcb87, 0x08edcb87, 0x0aedcb87, 0x0cedcb87, 0x0eedcb87, 0x00f1cb87, - 0x02f1cb87, 0x04f1cb87, 0x06f1cb87, 0x08f1cb87, 0x0af1cb87, 0x0cf1cb87, - 0x0ef1cb87, 0x00f5cb87, 0x02f5cb87, 0x04f5cb87, 0x06f5cb87, 0x08f5cb87, - 0x0af5cb87, 0x0cf5cb87, 0x0ef5cb87, 0x00f9cb87, 0x02f9cb87, 0x04f9cb87, - 0x06f9cb87, 0x08f9cb87, -}; - -static const uint32_t kZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] =3D { - 0, 4, 8, 7, 7, 7, 7, 7, 7, 7, 7, 11, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -}; - -static const uint64_t kNonZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] =3D { - 0x0000000b, 0x0000001b, 0x0000002b, 0x0000003b, 0x000002cb, 0x000006cb, - 0x00000acb, 0x00000ecb, 0x000002db, 0x000006db, 0x00000adb, 0x00000edb, - 0x000002eb, 0x000006eb, 0x00000aeb, 0x00000eeb, 0x000002fb, 0x000006fb, - 0x00000afb, 0x00000efb, 0x0000b2cb, 0x0001b2cb, 0x0002b2cb, 0x0003b2cb, - 0x0000b6cb, 0x0001b6cb, 0x0002b6cb, 0x0003b6cb, 0x0000bacb, 0x0001bacb, - 0x0002bacb, 0x0003bacb, 0x0000becb, 0x0001becb, 0x0002becb, 0x0003becb, - 0x0000b2db, 0x0001b2db, 0x0002b2db, 0x0003b2db, 0x0000b6db, 0x0001b6db, - 0x0002b6db, 0x0003b6db, 0x0000badb, 0x0001badb, 0x0002badb, 0x0003badb, - 0x0000bedb, 0x0001bedb, 0x0002bedb, 0x0003bedb, 0x0000b2eb, 0x0001b2eb, - 0x0002b2eb, 0x0003b2eb, 0x0000b6eb, 0x0001b6eb, 0x0002b6eb, 0x0003b6eb, - 0x0000baeb, 0x0001baeb, 0x0002baeb, 0x0003baeb, 0x0000beeb, 0x0001beeb, - 0x0002beeb, 0x0003beeb, 0x0000b2fb, 0x0001b2fb, 0x0002b2fb, 0x0003b2fb, - 0x0000b6fb, 0x0001b6fb, 0x0002b6fb, 0x0003b6fb, 0x0000bafb, 0x0001bafb, - 0x0002bafb, 0x0003bafb, 0x0000befb, 0x0001befb, 0x0002befb, 0x0003befb, - 0x002cb2cb, 0x006cb2cb, 0x00acb2cb, 0x00ecb2cb, 0x002db2cb, 0x006db2cb, - 0x00adb2cb, 0x00edb2cb, 0x002eb2cb, 0x006eb2cb, 0x00aeb2cb, 0x00eeb2cb, - 0x002fb2cb, 0x006fb2cb, 0x00afb2cb, 0x00efb2cb, 0x002cb6cb, 0x006cb6cb, - 0x00acb6cb, 0x00ecb6cb, 0x002db6cb, 0x006db6cb, 0x00adb6cb, 0x00edb6cb, - 0x002eb6cb, 0x006eb6cb, 0x00aeb6cb, 0x00eeb6cb, 0x002fb6cb, 0x006fb6cb, - 0x00afb6cb, 0x00efb6cb, 0x002cbacb, 0x006cbacb, 0x00acbacb, 0x00ecbacb, - 0x002dbacb, 0x006dbacb, 0x00adbacb, 0x00edbacb, 0x002ebacb, 0x006ebacb, - 0x00aebacb, 0x00eebacb, 0x002fbacb, 0x006fbacb, 0x00afbacb, 0x00efbacb, - 0x002cbecb, 0x006cbecb, 0x00acbecb, 0x00ecbecb, 0x002dbecb, 0x006dbecb, - 0x00adbecb, 0x00edbecb, 0x002ebecb, 0x006ebecb, 0x00aebecb, 0x00eebecb, - 0x002fbecb, 0x006fbecb, 0x00afbecb, 0x00efbecb, 0x002cb2db, 0x006cb2db, - 0x00acb2db, 0x00ecb2db, 0x002db2db, 0x006db2db, 0x00adb2db, 0x00edb2db, - 0x002eb2db, 0x006eb2db, 0x00aeb2db, 0x00eeb2db, 0x002fb2db, 0x006fb2db, - 0x00afb2db, 0x00efb2db, 0x002cb6db, 0x006cb6db, 0x00acb6db, 0x00ecb6db, - 0x002db6db, 0x006db6db, 0x00adb6db, 0x00edb6db, 0x002eb6db, 0x006eb6db, - 0x00aeb6db, 0x00eeb6db, 0x002fb6db, 0x006fb6db, 0x00afb6db, 0x00efb6db, - 0x002cbadb, 0x006cbadb, 0x00acbadb, 0x00ecbadb, 0x002dbadb, 0x006dbadb, - 0x00adbadb, 0x00edbadb, 0x002ebadb, 0x006ebadb, 0x00aebadb, 0x00eebadb, - 0x002fbadb, 0x006fbadb, 0x00afbadb, 0x00efbadb, 0x002cbedb, 0x006cbedb, - 0x00acbedb, 0x00ecbedb, 0x002dbedb, 0x006dbedb, 0x00adbedb, 0x00edbedb, - 0x002ebedb, 0x006ebedb, 0x00aebedb, 0x00eebedb, 0x002fbedb, 0x006fbedb, - 0x00afbedb, 0x00efbedb, 0x002cb2eb, 0x006cb2eb, 0x00acb2eb, 0x00ecb2eb, - 0x002db2eb, 0x006db2eb, 0x00adb2eb, 0x00edb2eb, 0x002eb2eb, 0x006eb2eb, - 0x00aeb2eb, 0x00eeb2eb, 0x002fb2eb, 0x006fb2eb, 0x00afb2eb, 0x00efb2eb, - 0x002cb6eb, 0x006cb6eb, 0x00acb6eb, 0x00ecb6eb, 0x002db6eb, 0x006db6eb, - 0x00adb6eb, 0x00edb6eb, 0x002eb6eb, 0x006eb6eb, 0x00aeb6eb, 0x00eeb6eb, - 0x002fb6eb, 0x006fb6eb, 0x00afb6eb, 0x00efb6eb, 0x002cbaeb, 0x006cbaeb, - 0x00acbaeb, 0x00ecbaeb, 0x002dbaeb, 0x006dbaeb, 0x00adbaeb, 0x00edbaeb, - 0x002ebaeb, 0x006ebaeb, 0x00aebaeb, 0x00eebaeb, 0x002fbaeb, 0x006fbaeb, - 0x00afbaeb, 0x00efbaeb, 0x002cbeeb, 0x006cbeeb, 0x00acbeeb, 0x00ecbeeb, - 0x002dbeeb, 0x006dbeeb, 0x00adbeeb, 0x00edbeeb, 0x002ebeeb, 0x006ebeeb, - 0x00aebeeb, 0x00eebeeb, 0x002fbeeb, 0x006fbeeb, 0x00afbeeb, 0x00efbeeb, - 0x002cb2fb, 0x006cb2fb, 0x00acb2fb, 0x00ecb2fb, 0x002db2fb, 0x006db2fb, - 0x00adb2fb, 0x00edb2fb, 0x002eb2fb, 0x006eb2fb, 0x00aeb2fb, 0x00eeb2fb, - 0x002fb2fb, 0x006fb2fb, 0x00afb2fb, 0x00efb2fb, 0x002cb6fb, 0x006cb6fb, - 0x00acb6fb, 0x00ecb6fb, 0x002db6fb, 0x006db6fb, 0x00adb6fb, 0x00edb6fb, - 0x002eb6fb, 0x006eb6fb, 0x00aeb6fb, 0x00eeb6fb, 0x002fb6fb, 0x006fb6fb, - 0x00afb6fb, 0x00efb6fb, 0x002cbafb, 0x006cbafb, 0x00acbafb, 0x00ecbafb, - 0x002dbafb, 0x006dbafb, 0x00adbafb, 0x00edbafb, 0x002ebafb, 0x006ebafb, - 0x00aebafb, 0x00eebafb, 0x002fbafb, 0x006fbafb, 0x00afbafb, 0x00efbafb, - 0x002cbefb, 0x006cbefb, 0x00acbefb, 0x00ecbefb, 0x002dbefb, 0x006dbefb, - 0x00adbefb, 0x00edbefb, 0x002ebefb, 0x006ebefb, 0x00aebefb, 0x00eebefb, - 0x002fbefb, 0x006fbefb, 0x00afbefb, 0x00efbefb, 0x0b2cb2cb, 0x1b2cb2cb, - 0x2b2cb2cb, 0x3b2cb2cb, 0x0b6cb2cb, 0x1b6cb2cb, 0x2b6cb2cb, 0x3b6cb2cb, - 0x0bacb2cb, 0x1bacb2cb, 0x2bacb2cb, 0x3bacb2cb, 0x0becb2cb, 0x1becb2cb, - 0x2becb2cb, 0x3becb2cb, 0x0b2db2cb, 0x1b2db2cb, 0x2b2db2cb, 0x3b2db2cb, - 0x0b6db2cb, 0x1b6db2cb, 0x2b6db2cb, 0x3b6db2cb, 0x0badb2cb, 0x1badb2cb, - 0x2badb2cb, 0x3badb2cb, 0x0bedb2cb, 0x1bedb2cb, 0x2bedb2cb, 0x3bedb2cb, - 0x0b2eb2cb, 0x1b2eb2cb, 0x2b2eb2cb, 0x3b2eb2cb, 0x0b6eb2cb, 0x1b6eb2cb, - 0x2b6eb2cb, 0x3b6eb2cb, 0x0baeb2cb, 0x1baeb2cb, 0x2baeb2cb, 0x3baeb2cb, - 0x0beeb2cb, 0x1beeb2cb, 0x2beeb2cb, 0x3beeb2cb, 0x0b2fb2cb, 0x1b2fb2cb, - 0x2b2fb2cb, 0x3b2fb2cb, 0x0b6fb2cb, 0x1b6fb2cb, 0x2b6fb2cb, 0x3b6fb2cb, - 0x0bafb2cb, 0x1bafb2cb, 0x2bafb2cb, 0x3bafb2cb, 0x0befb2cb, 0x1befb2cb, - 0x2befb2cb, 0x3befb2cb, 0x0b2cb6cb, 0x1b2cb6cb, 0x2b2cb6cb, 0x3b2cb6cb, - 0x0b6cb6cb, 0x1b6cb6cb, 0x2b6cb6cb, 0x3b6cb6cb, 0x0bacb6cb, 0x1bacb6cb, - 0x2bacb6cb, 0x3bacb6cb, 0x0becb6cb, 0x1becb6cb, 0x2becb6cb, 0x3becb6cb, - 0x0b2db6cb, 0x1b2db6cb, 0x2b2db6cb, 0x3b2db6cb, 0x0b6db6cb, 0x1b6db6cb, - 0x2b6db6cb, 0x3b6db6cb, 0x0badb6cb, 0x1badb6cb, 0x2badb6cb, 0x3badb6cb, - 0x0bedb6cb, 0x1bedb6cb, 0x2bedb6cb, 0x3bedb6cb, 0x0b2eb6cb, 0x1b2eb6cb, - 0x2b2eb6cb, 0x3b2eb6cb, 0x0b6eb6cb, 0x1b6eb6cb, 0x2b6eb6cb, 0x3b6eb6cb, - 0x0baeb6cb, 0x1baeb6cb, 0x2baeb6cb, 0x3baeb6cb, 0x0beeb6cb, 0x1beeb6cb, - 0x2beeb6cb, 0x3beeb6cb, 0x0b2fb6cb, 0x1b2fb6cb, 0x2b2fb6cb, 0x3b2fb6cb, - 0x0b6fb6cb, 0x1b6fb6cb, 0x2b6fb6cb, 0x3b6fb6cb, 0x0bafb6cb, 0x1bafb6cb, - 0x2bafb6cb, 0x3bafb6cb, 0x0befb6cb, 0x1befb6cb, 0x2befb6cb, 0x3befb6cb, - 0x0b2cbacb, 0x1b2cbacb, 0x2b2cbacb, 0x3b2cbacb, 0x0b6cbacb, 0x1b6cbacb, - 0x2b6cbacb, 0x3b6cbacb, 0x0bacbacb, 0x1bacbacb, 0x2bacbacb, 0x3bacbacb, - 0x0becbacb, 0x1becbacb, 0x2becbacb, 0x3becbacb, 0x0b2dbacb, 0x1b2dbacb, - 0x2b2dbacb, 0x3b2dbacb, 0x0b6dbacb, 0x1b6dbacb, 0x2b6dbacb, 0x3b6dbacb, - 0x0badbacb, 0x1badbacb, 0x2badbacb, 0x3badbacb, 0x0bedbacb, 0x1bedbacb, - 0x2bedbacb, 0x3bedbacb, 0x0b2ebacb, 0x1b2ebacb, 0x2b2ebacb, 0x3b2ebacb, - 0x0b6ebacb, 0x1b6ebacb, 0x2b6ebacb, 0x3b6ebacb, 0x0baebacb, 0x1baebacb, - 0x2baebacb, 0x3baebacb, 0x0beebacb, 0x1beebacb, 0x2beebacb, 0x3beebacb, - 0x0b2fbacb, 0x1b2fbacb, 0x2b2fbacb, 0x3b2fbacb, 0x0b6fbacb, 0x1b6fbacb, - 0x2b6fbacb, 0x3b6fbacb, 0x0bafbacb, 0x1bafbacb, 0x2bafbacb, 0x3bafbacb, - 0x0befbacb, 0x1befbacb, 0x2befbacb, 0x3befbacb, 0x0b2cbecb, 0x1b2cbecb, - 0x2b2cbecb, 0x3b2cbecb, 0x0b6cbecb, 0x1b6cbecb, 0x2b6cbecb, 0x3b6cbecb, - 0x0bacbecb, 0x1bacbecb, 0x2bacbecb, 0x3bacbecb, 0x0becbecb, 0x1becbecb, - 0x2becbecb, 0x3becbecb, 0x0b2dbecb, 0x1b2dbecb, 0x2b2dbecb, 0x3b2dbecb, - 0x0b6dbecb, 0x1b6dbecb, 0x2b6dbecb, 0x3b6dbecb, 0x0badbecb, 0x1badbecb, - 0x2badbecb, 0x3badbecb, 0x0bedbecb, 0x1bedbecb, 0x2bedbecb, 0x3bedbecb, - 0x0b2ebecb, 0x1b2ebecb, 0x2b2ebecb, 0x3b2ebecb, 0x0b6ebecb, 0x1b6ebecb, - 0x2b6ebecb, 0x3b6ebecb, 0x0baebecb, 0x1baebecb, 0x2baebecb, 0x3baebecb, - 0x0beebecb, 0x1beebecb, 0x2beebecb, 0x3beebecb, 0x0b2fbecb, 0x1b2fbecb, - 0x2b2fbecb, 0x3b2fbecb, 0x0b6fbecb, 0x1b6fbecb, 0x2b6fbecb, 0x3b6fbecb, - 0x0bafbecb, 0x1bafbecb, 0x2bafbecb, 0x3bafbecb, 0x0befbecb, 0x1befbecb, - 0x2befbecb, 0x3befbecb, 0x0b2cb2db, 0x1b2cb2db, 0x2b2cb2db, 0x3b2cb2db, - 0x0b6cb2db, 0x1b6cb2db, 0x2b6cb2db, 0x3b6cb2db, 0x0bacb2db, 0x1bacb2db, - 0x2bacb2db, 0x3bacb2db, 0x0becb2db, 0x1becb2db, 0x2becb2db, 0x3becb2db, - 0x0b2db2db, 0x1b2db2db, 0x2b2db2db, 0x3b2db2db, 0x0b6db2db, 0x1b6db2db, - 0x2b6db2db, 0x3b6db2db, 0x0badb2db, 0x1badb2db, 0x2badb2db, 0x3badb2db, - 0x0bedb2db, 0x1bedb2db, 0x2bedb2db, 0x3bedb2db, 0x0b2eb2db, 0x1b2eb2db, - 0x2b2eb2db, 0x3b2eb2db, 0x0b6eb2db, 0x1b6eb2db, 0x2b6eb2db, 0x3b6eb2db, - 0x0baeb2db, 0x1baeb2db, 0x2baeb2db, 0x3baeb2db, 0x0beeb2db, 0x1beeb2db, - 0x2beeb2db, 0x3beeb2db, 0x0b2fb2db, 0x1b2fb2db, 0x2b2fb2db, 0x3b2fb2db, - 0x0b6fb2db, 0x1b6fb2db, 0x2b6fb2db, 0x3b6fb2db, 0x0bafb2db, 0x1bafb2db, - 0x2bafb2db, 0x3bafb2db, 0x0befb2db, 0x1befb2db, 0x2befb2db, 0x3befb2db, - 0x0b2cb6db, 0x1b2cb6db, 0x2b2cb6db, 0x3b2cb6db, 0x0b6cb6db, 0x1b6cb6db, - 0x2b6cb6db, 0x3b6cb6db, 0x0bacb6db, 0x1bacb6db, 0x2bacb6db, 0x3bacb6db, - 0x0becb6db, 0x1becb6db, 0x2becb6db, 0x3becb6db, 0x0b2db6db, 0x1b2db6db, - 0x2b2db6db, 0x3b2db6db, 0x0b6db6db, 0x1b6db6db, 0x2b6db6db, 0x3b6db6db, - 0x0badb6db, 0x1badb6db, 0x2badb6db, 0x3badb6db, 0x0bedb6db, 0x1bedb6db, - 0x2bedb6db, 0x3bedb6db, 0x0b2eb6db, 0x1b2eb6db, 0x2b2eb6db, 0x3b2eb6db, - 0x0b6eb6db, 0x1b6eb6db, 0x2b6eb6db, 0x3b6eb6db, 0x0baeb6db, 0x1baeb6db, - 0x2baeb6db, 0x3baeb6db, -}; - -static const uint32_t kNonZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] =3D { - 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, -}; - -static const uint16_t kStaticCommandCodeBits[BROTLI_NUM_COMMAND_SYMBOLS] = = =3D { - 0, 256, 128, 384, 64, 320, 192, 448, - 32, 288, 160, 416, 96, 352, 224, 480, - 16, 272, 144, 400, 80, 336, 208, 464, - 48, 304, 176, 432, 112, 368, 240, 496, - 8, 264, 136, 392, 72, 328, 200, 456, - 40, 296, 168, 424, 104, 360, 232, 488, - 24, 280, 152, 408, 88, 344, 216, 472, - 56, 312, 184, 440, 120, 376, 248, 504, - 4, 260, 132, 388, 68, 324, 196, 452, - 36, 292, 164, 420, 100, 356, 228, 484, - 20, 276, 148, 404, 84, 340, 212, 468, - 52, 308, 180, 436, 116, 372, 244, 500, - 12, 268, 140, 396, 76, 332, 204, 460, - 44, 300, 172, 428, 108, 364, 236, 492, - 28, 284, 156, 412, 92, 348, 220, 476, - 60, 316, 188, 444, 124, 380, 252, 508, - 2, 258, 130, 386, 66, 322, 194, 450, - 34, 290, 162, 418, 98, 354, 226, 482, - 18, 274, 146, 402, 82, 338, 210, 466, - 50, 306, 178, 434, 114, 370, 242, 498, - 10, 266, 138, 394, 74, 330, 202, 458, - 42, 298, 170, 426, 106, 362, 234, 490, - 26, 282, 154, 410, 90, 346, 218, 474, - 58, 314, 186, 442, 122, 378, 250, 506, - 6, 262, 134, 390, 70, 326, 198, 454, - 38, 294, 166, 422, 102, 358, 230, 486, - 22, 278, 150, 406, 86, 342, 214, 470, - 54, 310, 182, 438, 118, 374, 246, 502, - 14, 270, 142, 398, 78, 334, 206, 462, - 46, 302, 174, 430, 110, 366, 238, 494, - 30, 286, 158, 414, 94, 350, 222, 478, - 62, 318, 190, 446, 126, 382, 254, 510, - 1, 257, 129, 385, 65, 321, 193, 449, - 33, 289, 161, 417, 97, 353, 225, 481, - 17, 273, 145, 401, 81, 337, 209, 465, - 49, 305, 177, 433, 113, 369, 241, 497, - 9, 265, 137, 393, 73, 329, 201, 457, - 41, 297, 169, 425, 105, 361, 233, 489, - 25, 281, 153, 409, 89, 345, 217, 473, - 57, 313, 185, 441, 121, 377, 249, 505, - 5, 261, 133, 389, 69, 325, 197, 453, - 37, 293, 165, 421, 101, 357, 229, 485, - 21, 277, 149, 405, 85, 341, 213, 469, - 53, 309, 181, 437, 117, 373, 245, 501, - 13, 269, 141, 397, 77, 333, 205, 461, - 45, 301, 173, 429, 109, 365, 237, 493, - 29, 285, 157, 413, 93, 349, 221, 477, - 61, 317, 189, 445, 125, 381, 253, 509, - 3, 259, 131, 387, 67, 323, 195, 451, - 35, 291, 163, 419, 99, 355, 227, 483, - 19, 275, 147, 403, 83, 339, 211, 467, - 51, 307, 179, 435, 115, 371, 243, 499, - 11, 267, 139, 395, 75, 331, 203, 459, - 43, 299, 171, 427, 107, 363, 235, 491, - 27, 283, 155, 411, 91, 347, 219, 475, - 59, 315, 187, 443, 123, 379, 251, 507, - 7, 1031, 519, 1543, 263, 1287, 775, 1799, - 135, 1159, 647, 1671, 391, 1415, 903, 1927, - 71, 1095, 583, 1607, 327, 1351, 839, 1863, - 199, 1223, 711, 1735, 455, 1479, 967, 1991, - 39, 1063, 551, 1575, 295, 1319, 807, 1831, - 167, 1191, 679, 1703, 423, 1447, 935, 1959, - 103, 1127, 615, 1639, 359, 1383, 871, 1895, - 231, 1255, 743, 1767, 487, 1511, 999, 2023, - 23, 1047, 535, 1559, 279, 1303, 791, 1815, - 151, 1175, 663, 1687, 407, 1431, 919, 1943, - 87, 1111, 599, 1623, 343, 1367, 855, 1879, - 215, 1239, 727, 1751, 471, 1495, 983, 2007, - 55, 1079, 567, 1591, 311, 1335, 823, 1847, - 183, 1207, 695, 1719, 439, 1463, 951, 1975, - 119, 1143, 631, 1655, 375, 1399, 887, 1911, - 247, 1271, 759, 1783, 503, 1527, 1015, 2039, - 15, 1039, 527, 1551, 271, 1295, 783, 1807, - 143, 1167, 655, 1679, 399, 1423, 911, 1935, - 79, 1103, 591, 1615, 335, 1359, 847, 1871, - 207, 1231, 719, 1743, 463, 1487, 975, 1999, - 47, 1071, 559, 1583, 303, 1327, 815, 1839, - 175, 1199, 687, 1711, 431, 1455, 943, 1967, - 111, 1135, 623, 1647, 367, 1391, 879, 1903, - 239, 1263, 751, 1775, 495, 1519, 1007, 2031, - 31, 1055, 543, 1567, 287, 1311, 799, 1823, - 159, 1183, 671, 1695, 415, 1439, 927, 1951, - 95, 1119, 607, 1631, 351, 1375, 863, 1887, - 223, 1247, 735, 1759, 479, 1503, 991, 2015, - 63, 1087, 575, 1599, 319, 1343, 831, 1855, - 191, 1215, 703, 1727, 447, 1471, 959, 1983, - 127, 1151, 639, 1663, 383, 1407, 895, 1919, - 255, 1279, 767, 1791, 511, 1535, 1023, 2047, -}; - -static BROTLI_INLINE void StoreStaticCommandHuffmanTree( - size_t* storage_ix, uint8_t* storage) { - BrotliWriteBits( - 56, BROTLI_MAKE_UINT64_T(0x926244U, 0x16307003U), storage_ix, stora= ge); - BrotliWriteBits(3, 0x00000000U, storage_ix, storage); -} - -static const uint16_t kStaticDistanceCodeBits[64] =3D { - 0, 32, 16, 48, 8, 40, 24, 56, 4, 36, 20, 52, 12, 44, 28, 60, - 2, 34, 18, 50, 10, 42, 26, 58, 6, 38, 22, 54, 14, 46, 30, 62, - 1, 33, 17, 49, 9, 41, 25, 57, 5, 37, 21, 53, 13, 45, 29, 61, - 3, 35, 19, 51, 11, 43, 27, 59, 7, 39, 23, 55, 15, 47, 31, 63, -}; - -static BROTLI_INLINE void StoreStaticDistanceHuffmanTree( - size_t* storage_ix, uint8_t* storage) { - BrotliWriteBits(28, 0x0369DC03u, storage_ix, storage); -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/fast_log.h b/BaseTools/= Source/C/BrotliCompress/enc/fast_log.h deleted file mode 100644 index dabc45ee96b8..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/fast_log.h +++ /dev/null @@ -1,147 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Utilities for fast computation of logarithms. */ - -#ifndef BROTLI_ENC_FAST_LOG_H_ -#define BROTLI_ENC_FAST_LOG_H_ - -#include - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) { - /* TODO: generalize and move to platform.h */ -#if BROTLI_GNUC_HAS_BUILTIN(__builtin_clz, 3, 4, 0) || \ - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) - return 31u ^ (uint32_t)__builtin_clz((uint32_t)n); -#else - uint32_t result =3D 0; - while (n >>=3D 1) result++; - return result; -#endif -} - -/* A lookup table for small values of log2(int) to be used in entropy - computation. - - ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)= ]]) */ -static const float kLog2Table[] =3D { - 0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f, - 1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f, - 2.5849625007211561f, 2.8073549220576042f, 3.0000000000000000f, - 3.1699250014423126f, 3.3219280948873626f, 3.4594316186372978f, - 3.5849625007211565f, 3.7004397181410922f, 3.8073549220576037f, - 3.9068905956085187f, 4.0000000000000000f, 4.0874628412503400f, - 4.1699250014423122f, 4.2479275134435852f, 4.3219280948873626f, - 4.3923174227787607f, 4.4594316186372973f, 4.5235619560570131f, - 4.5849625007211570f, 4.6438561897747244f, 4.7004397181410926f, - 4.7548875021634691f, 4.8073549220576037f, 4.8579809951275728f, - 4.9068905956085187f, 4.9541963103868758f, 5.0000000000000000f, - 5.0443941193584534f, 5.0874628412503400f, 5.1292830169449664f, - 5.1699250014423122f, 5.2094533656289501f, 5.2479275134435852f, - 5.2854022188622487f, 5.3219280948873626f, 5.3575520046180838f, - 5.3923174227787607f, 5.4262647547020979f, 5.4594316186372973f, - 5.4918530963296748f, 5.5235619560570131f, 5.5545888516776376f, - 5.5849625007211570f, 5.6147098441152083f, 5.6438561897747244f, - 5.6724253419714961f, 5.7004397181410926f, 5.7279204545631996f, - 5.7548875021634691f, 5.7813597135246599f, 5.8073549220576046f, - 5.8328900141647422f, 5.8579809951275719f, 5.8826430493618416f, - 5.9068905956085187f, 5.9307373375628867f, 5.9541963103868758f, - 5.9772799234999168f, 6.0000000000000000f, 6.0223678130284544f, - 6.0443941193584534f, 6.0660891904577721f, 6.0874628412503400f, - 6.1085244567781700f, 6.1292830169449672f, 6.1497471195046822f, - 6.1699250014423122f, 6.1898245588800176f, 6.2094533656289510f, - 6.2288186904958804f, 6.2479275134435861f, 6.2667865406949019f, - 6.2854022188622487f, 6.3037807481771031f, 6.3219280948873617f, - 6.3398500028846252f, 6.3575520046180847f, 6.3750394313469254f, - 6.3923174227787598f, 6.4093909361377026f, 6.4262647547020979f, - 6.4429434958487288f, 6.4594316186372982f, 6.4757334309663976f, - 6.4918530963296748f, 6.5077946401986964f, 6.5235619560570131f, - 6.5391588111080319f, 6.5545888516776376f, 6.5698556083309478f, - 6.5849625007211561f, 6.5999128421871278f, 6.6147098441152092f, - 6.6293566200796095f, 6.6438561897747253f, 6.6582114827517955f, - 6.6724253419714952f, 6.6865005271832185f, 6.7004397181410917f, - 6.7142455176661224f, 6.7279204545631988f, 6.7414669864011465f, - 6.7548875021634691f, 6.7681843247769260f, 6.7813597135246599f, - 6.7944158663501062f, 6.8073549220576037f, 6.8201789624151887f, - 6.8328900141647422f, 6.8454900509443757f, 6.8579809951275719f, - 6.8703647195834048f, 6.8826430493618416f, 6.8948177633079437f, - 6.9068905956085187f, 6.9188632372745955f, 6.9307373375628867f, - 6.9425145053392399f, 6.9541963103868758f, 6.9657842846620879f, - 6.9772799234999168f, 6.9886846867721664f, 7.0000000000000000f, - 7.0112272554232540f, 7.0223678130284544f, 7.0334230015374501f, - 7.0443941193584534f, 7.0552824355011898f, 7.0660891904577721f, - 7.0768155970508317f, 7.0874628412503400f, 7.0980320829605272f, - 7.1085244567781700f, 7.1189410727235076f, 7.1292830169449664f, - 7.1395513523987937f, 7.1497471195046822f, 7.1598713367783891f, - 7.1699250014423130f, 7.1799090900149345f, 7.1898245588800176f, - 7.1996723448363644f, 7.2094533656289492f, 7.2191685204621621f, - 7.2288186904958804f, 7.2384047393250794f, 7.2479275134435861f, - 7.2573878426926521f, 7.2667865406949019f, 7.2761244052742384f, - 7.2854022188622487f, 7.2946207488916270f, 7.3037807481771031f, - 7.3128829552843557f, 7.3219280948873617f, 7.3309168781146177f, - 7.3398500028846243f, 7.3487281542310781f, 7.3575520046180847f, - 7.3663222142458151f, 7.3750394313469254f, 7.3837042924740528f, - 7.3923174227787607f, 7.4008794362821844f, 7.4093909361377026f, - 7.4178525148858991f, 7.4262647547020979f, 7.4346282276367255f, - 7.4429434958487288f, 7.4512111118323299f, 7.4594316186372973f, - 7.4676055500829976f, 7.4757334309663976f, 7.4838157772642564f, - 7.4918530963296748f, 7.4998458870832057f, 7.5077946401986964f, - 7.5156998382840436f, 7.5235619560570131f, 7.5313814605163119f, - 7.5391588111080319f, 7.5468944598876373f, 7.5545888516776376f, - 7.5622424242210728f, 7.5698556083309478f, 7.5774288280357487f, - 7.5849625007211561f, 7.5924570372680806f, 7.5999128421871278f, - 7.6073303137496113f, 7.6147098441152075f, 7.6220518194563764f, - 7.6293566200796095f, 7.6366246205436488f, 7.6438561897747244f, - 7.6510516911789290f, 7.6582114827517955f, 7.6653359171851765f, - 7.6724253419714952f, 7.6794800995054464f, 7.6865005271832185f, - 7.6934869574993252f, 7.7004397181410926f, 7.7073591320808825f, - 7.7142455176661224f, 7.7210991887071856f, 7.7279204545631996f, - 7.7347096202258392f, 7.7414669864011465f, 7.7481928495894596f, - 7.7548875021634691f, 7.7615512324444795f, 7.7681843247769260f, - 7.7747870596011737f, 7.7813597135246608f, 7.7879025593914317f, - 7.7944158663501062f, 7.8008998999203047f, 7.8073549220576037f, - 7.8137811912170374f, 7.8201789624151887f, 7.8265484872909159f, - 7.8328900141647422f, 7.8392037880969445f, 7.8454900509443757f, - 7.8517490414160571f, 7.8579809951275719f, 7.8641861446542798f, - 7.8703647195834048f, 7.8765169465650002f, 7.8826430493618425f, - 7.8887432488982601f, 7.8948177633079446f, 7.9008668079807496f, - 7.9068905956085187f, 7.9128893362299619f, 7.9188632372745955f, - 7.9248125036057813f, 7.9307373375628867f, 7.9366379390025719f, - 7.9425145053392399f, 7.9483672315846778f, 7.9541963103868758f, - 7.9600019320680806f, 7.9657842846620870f, 7.9715435539507720f, - 7.9772799234999168f, 7.9829935746943104f, 7.9886846867721664f, - 7.9943534368588578f -}; - -#define LOG_2_INV 1.4426950408889634 - -/* Faster logarithm for small integers, with the property of log2(0) =3D= =3D 0. */ -static BROTLI_INLINE double FastLog2(size_t v) { - if (v < sizeof(kLog2Table) / sizeof(kLog2Table[0])) { - return kLog2Table[v]; - } -#if (defined(_MSC_VER) && _MSC_VER <=3D 1700) || \ - (defined(__ANDROID_API__) && __ANDROID_API__ < 18) - /* Visual Studio 2012 and Android API levels < 18 do not have the log2(= ) - * function defined, so we use log() and a multiplication instead. */ - return log((double)v) * LOG_2_INV; -#else - return log2((double)v); -#endif -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_FAST_LOG_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h b/B= aseTools/Source/C/BrotliCompress/enc/find_match_length.h deleted file mode 100644 index 6e1f44474baa..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Function to find maximal matching prefixes of strings. */ - -#ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_ -#define BROTLI_ENC_FIND_MATCH_LENGTH_H_ - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* Separate implementation for little-endian 64-bit targets, for speed. *= / -#if defined(__GNUC__) && defined(_LP64) && defined(BROTLI_LITTLE_ENDIAN) - -static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1, - const uint8_t* s2, - size_t limit) { - size_t matched =3D 0; - size_t limit2 =3D (limit >> 3) + 1; /* + 1 is for pre-decrement in whi= le */ - while (BROTLI_PREDICT_TRUE(--limit2)) { - if (BROTLI_PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64LE(s2) =3D=3D - BROTLI_UNALIGNED_LOAD64LE(s1 + matched))) { - s2 +=3D 8; - matched +=3D 8; - } else { - uint64_t x =3D BROTLI_UNALIGNED_LOAD64LE(s2) ^ - BROTLI_UNALIGNED_LOAD64LE(s1 + matched); - size_t matching_bits =3D (size_t)__builtin_ctzll(x); - matched +=3D matching_bits >> 3; - return matched; - } - } - limit =3D (limit & 7) + 1; /* + 1 is for pre-decrement in while */ - while (--limit) { - if (BROTLI_PREDICT_TRUE(s1[matched] =3D=3D *s2)) { - ++s2; - ++matched; - } else { - return matched; - } - } - return matched; -} -#else -static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1, - const uint8_t* s2, - size_t limit) { - size_t matched =3D 0; - const uint8_t* s2_limit =3D s2 + limit; - const uint8_t* s2_ptr =3D s2; - /* Find out how long the match is. We loop over the data 32 bits at a - time until we find a 32-bit block that doesn't match; then we find - the first non-matching bit and use that to calculate the total - length of the match. */ - while (s2_ptr <=3D s2_limit - 4 && - BrotliUnalignedRead32(s2_ptr) =3D=3D - BrotliUnalignedRead32(s1 + matched)) { - s2_ptr +=3D 4; - matched +=3D 4; - } - while ((s2_ptr < s2_limit) && (s1[matched] =3D=3D *s2_ptr)) { - ++s2_ptr; - ++matched; - } - return matched; -} -#endif - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_FIND_MATCH_LENGTH_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash.h b/BaseTools/Sour= ce/C/BrotliCompress/enc/hash.h deleted file mode 100644 index 9225d127ac58..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/hash.h +++ /dev/null @@ -1,497 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* A (forgetful) hash table to the data seen by the compressor, to - help create backward references to previous data. */ - -#ifndef BROTLI_ENC_HASH_H_ -#define BROTLI_ENC_HASH_H_ - -#include /* memcmp, memset */ - -#include "../common/constants.h" -#include "../common/dictionary.h" -#include "../common/platform.h" -#include -#include "./encoder_dict.h" -#include "./fast_log.h" -#include "./find_match_length.h" -#include "./memory.h" -#include "./quality.h" -#include "./static_dict.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* Pointer to hasher data. - * - * Excluding initialization and destruction, hasher can be passed as - * HasherHandle by value. - * - * Typically hasher data consists of 3 sections: - * * HasherCommon structure - * * private structured hasher data, depending on hasher type - * * private dynamic hasher data, depending on hasher type and parameters - * - * Using "define" instead of "typedef", because on MSVC __restrict does n= ot work - * on typedef pointer types. */ -#define HasherHandle uint8_t* - -typedef struct { - BrotliHasherParams params; - - /* False if hasher needs to be "prepared" before use. */ - BROTLI_BOOL is_prepared_; - - size_t dict_num_lookups; - size_t dict_num_matches; -} HasherCommon; - -static BROTLI_INLINE HasherCommon* GetHasherCommon(HasherHandle handle) { - return (HasherCommon*)handle; -} - -#define score_t size_t - -static const uint32_t kCutoffTransformsCount =3D 10; -/* 0, 12, 27, 23, 42, 63, 56, 48, 59, 64 */ -/* 0+0, 4+8, 8+19, 12+11, 16+26, 20+43, 24+32, 28+20, 32+27, 36+28 */ -static const uint64_t kCutoffTransforms =3D - BROTLI_MAKE_UINT64_T(0x071B520A, 0xDA2D3200); - -typedef struct HasherSearchResult { - size_t len; - size_t distance; - score_t score; - int len_code_delta; /* =3D=3D len_code - len */ -} HasherSearchResult; - -/* kHashMul32 multiplier has these properties: - * The multiplier must be odd. Otherwise we may lose the highest bit. - * No long streaks of ones or zeros. - * There is no effort to ensure that it is a prime, the oddity is enoug= h - for this use. - * The number has been tuned heuristically against compression benchmar= ks. */ -static const uint32_t kHashMul32 =3D 0x1E35A7BD; -static const uint64_t kHashMul64 =3D BROTLI_MAKE_UINT64_T(0x1E35A7BD, 0x1= E35A7BD); -static const uint64_t kHashMul64Long =3D - BROTLI_MAKE_UINT64_T(0x1FE35A7Bu, 0xD3579BD3u); - -static BROTLI_INLINE uint32_t Hash14(const uint8_t* data) { - uint32_t h =3D BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32; - /* The higher bits contain more mixture from the multiplication, - so we take our results from there. */ - return h >> (32 - 14); -} - -static BROTLI_INLINE void PrepareDistanceCache( - int* BROTLI_RESTRICT distance_cache, const int num_distances) { - if (num_distances > 4) { - int last_distance =3D distance_cache[0]; - distance_cache[4] =3D last_distance - 1; - distance_cache[5] =3D last_distance + 1; - distance_cache[6] =3D last_distance - 2; - distance_cache[7] =3D last_distance + 2; - distance_cache[8] =3D last_distance - 3; - distance_cache[9] =3D last_distance + 3; - if (num_distances > 10) { - int next_last_distance =3D distance_cache[1]; - distance_cache[10] =3D next_last_distance - 1; - distance_cache[11] =3D next_last_distance + 1; - distance_cache[12] =3D next_last_distance - 2; - distance_cache[13] =3D next_last_distance + 2; - distance_cache[14] =3D next_last_distance - 3; - distance_cache[15] =3D next_last_distance + 3; - } - } -} - -#define BROTLI_LITERAL_BYTE_SCORE 135 -#define BROTLI_DISTANCE_BIT_PENALTY 30 -/* Score must be positive after applying maximal penalty. */ -#define BROTLI_SCORE_BASE (BROTLI_DISTANCE_BIT_PENALTY * 8 * sizeof(size_= t)) - -/* Usually, we always choose the longest backward reference. This functio= n - allows for the exception of that rule. - - If we choose a backward reference that is further away, it will - usually be coded with more bits. We approximate this by assuming - log2(distance). If the distance can be expressed in terms of the - last four distances, we use some heuristic constants to estimate - the bits cost. For the first up to four literals we use the bit - cost of the literals from the literal cost model, after that we - use the average bit cost of the cost model. - - This function is used to sometimes discard a longer backward reference - when it is not much longer and the bit cost for encoding it is more - than the saved literals. - - backward_reference_offset MUST be positive. */ -static BROTLI_INLINE score_t BackwardReferenceScore( - size_t copy_length, size_t backward_reference_offset) { - return BROTLI_SCORE_BASE + BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_le= ngth - - BROTLI_DISTANCE_BIT_PENALTY * Log2FloorNonZero(backward_reference_o= ffset); -} - -static BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance( - size_t copy_length) { - return BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length + - BROTLI_SCORE_BASE + 15; -} - -static BROTLI_INLINE score_t BackwardReferencePenaltyUsingLastDistance( - size_t distance_short_code) { - return (score_t)39 + ((0x1CA10 >> (distance_short_code & 0xE)) & 0xE); -} - -static BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem( - const BrotliEncoderDictionary* dictionary, size_t item, const uint8_t= * data, - size_t max_length, size_t max_backward, size_t max_distance, - HasherSearchResult* out) { - size_t len; - size_t word_idx; - size_t offset; - size_t matchlen; - size_t backward; - score_t score; - len =3D item & 0x1F; - word_idx =3D item >> 5; - offset =3D dictionary->words->offsets_by_length[len] + len * word_idx; - if (len > max_length) { - return BROTLI_FALSE; - } - - matchlen =3D - FindMatchLengthWithLimit(data, &dictionary->words->data[offset], le= n); - if (matchlen + dictionary->cutoffTransformsCount <=3D len || matchlen = =3D=3D 0) { - return BROTLI_FALSE; - } - { - size_t cut =3D len - matchlen; - size_t transform_id =3D (cut << 2) + - (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F); - backward =3D max_backward + 1 + word_idx + - (transform_id << dictionary->words->size_bits_by_length[len]); - } - if (backward > max_distance) { - return BROTLI_FALSE; - } - score =3D BackwardReferenceScore(matchlen, backward); - if (score < out->score) { - return BROTLI_FALSE; - } - out->len =3D matchlen; - out->len_code_delta =3D (int)len - (int)matchlen; - out->distance =3D backward; - out->score =3D score; - return BROTLI_TRUE; -} - -static BROTLI_INLINE void SearchInStaticDictionary( - const BrotliEncoderDictionary* dictionary, - HasherHandle handle, const uint8_t* data, size_t max_length, - size_t max_backward, size_t max_distance, - HasherSearchResult* out, BROTLI_BOOL shallow) { - size_t key; - size_t i; - HasherCommon* self =3D GetHasherCommon(handle); - if (self->dict_num_matches < (self->dict_num_lookups >> 7)) { - return; - } - key =3D Hash14(data) << 1; - for (i =3D 0; i < (shallow ? 1u : 2u); ++i, ++key) { - size_t item =3D dictionary->hash_table[key]; - self->dict_num_lookups++; - if (item !=3D 0) { - BROTLI_BOOL item_matches =3D TestStaticDictionaryItem( - dictionary, item, data, max_length, max_backward, max_distance,= out); - if (item_matches) { - self->dict_num_matches++; - } - } - } -} - -typedef struct BackwardMatch { - uint32_t distance; - uint32_t length_and_code; -} BackwardMatch; - -static BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self, - size_t dist, size_t len) { - self->distance =3D (uint32_t)dist; - self->length_and_code =3D (uint32_t)(len << 5); -} - -static BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch* self= , - size_t dist, size_t len, size_t len_code) { - self->distance =3D (uint32_t)dist; - self->length_and_code =3D - (uint32_t)((len << 5) | (len =3D=3D len_code ? 0 : len_code)); -} - -static BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch* self= ) { - return self->length_and_code >> 5; -} - -static BROTLI_INLINE size_t BackwardMatchLengthCode(const BackwardMatch* = self) { - size_t code =3D self->length_and_code & 31; - return code ? code : BackwardMatchLength(self); -} - -#define EXPAND_CAT(a, b) CAT(a, b) -#define CAT(a, b) a ## b -#define FN(X) EXPAND_CAT(X, HASHER()) - -#define HASHER() H10 -#define BUCKET_BITS 17 -#define MAX_TREE_SEARCH_DEPTH 64 -#define MAX_TREE_COMP_LENGTH 128 -#include "./hash_to_binary_tree_inc.h" /* NOLINT(build/include) */ -#undef MAX_TREE_SEARCH_DEPTH -#undef MAX_TREE_COMP_LENGTH -#undef BUCKET_BITS -#undef HASHER -/* MAX_NUM_MATCHES =3D=3D 64 + MAX_TREE_SEARCH_DEPTH */ -#define MAX_NUM_MATCHES_H10 128 - -/* For BUCKET_SWEEP =3D=3D 1, enabling the dictionary lookup makes compre= ssion - a little faster (0.5% - 1%) and it compresses 0.15% better on small te= xt - and HTML inputs. */ - -#define HASHER() H2 -#define BUCKET_BITS 16 -#define BUCKET_SWEEP 1 -#define HASH_LEN 5 -#define USE_DICTIONARY 1 -#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) *= / -#undef BUCKET_SWEEP -#undef USE_DICTIONARY -#undef HASHER - -#define HASHER() H3 -#define BUCKET_SWEEP 2 -#define USE_DICTIONARY 0 -#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) *= / -#undef USE_DICTIONARY -#undef BUCKET_SWEEP -#undef BUCKET_BITS -#undef HASHER - -#define HASHER() H4 -#define BUCKET_BITS 17 -#define BUCKET_SWEEP 4 -#define USE_DICTIONARY 1 -#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) *= / -#undef USE_DICTIONARY -#undef HASH_LEN -#undef BUCKET_SWEEP -#undef BUCKET_BITS -#undef HASHER - -#define HASHER() H5 -#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */ -#undef HASHER - -#define HASHER() H6 -#include "./hash_longest_match64_inc.h" /* NOLINT(build/include) */ -#undef HASHER - -#define BUCKET_BITS 15 - -#define NUM_LAST_DISTANCES_TO_CHECK 4 -#define NUM_BANKS 1 -#define BANK_BITS 16 -#define HASHER() H40 -#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */ -#undef HASHER -#undef NUM_LAST_DISTANCES_TO_CHECK - -#define NUM_LAST_DISTANCES_TO_CHECK 10 -#define HASHER() H41 -#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */ -#undef HASHER -#undef NUM_LAST_DISTANCES_TO_CHECK -#undef NUM_BANKS -#undef BANK_BITS - -#define NUM_LAST_DISTANCES_TO_CHECK 16 -#define NUM_BANKS 512 -#define BANK_BITS 9 -#define HASHER() H42 -#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */ -#undef HASHER -#undef NUM_LAST_DISTANCES_TO_CHECK -#undef NUM_BANKS -#undef BANK_BITS - -#undef BUCKET_BITS - -#define HASHER() H54 -#define BUCKET_BITS 20 -#define BUCKET_SWEEP 4 -#define HASH_LEN 7 -#define USE_DICTIONARY 0 -#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) *= / -#undef USE_DICTIONARY -#undef HASH_LEN -#undef BUCKET_SWEEP -#undef BUCKET_BITS -#undef HASHER - -/* fast large window hashers */ - -#define HASHER() HROLLING_FAST -#define CHUNKLEN 32 -#define JUMP 4 -#define NUMBUCKETS 16777216 -#define MASK ((NUMBUCKETS * 64) - 1) -#include "./hash_rolling_inc.h" /* NOLINT(build/include) */ -#undef JUMP -#undef HASHER - - -#define HASHER() HROLLING -#define JUMP 1 -#include "./hash_rolling_inc.h" /* NOLINT(build/include) */ -#undef MASK -#undef NUMBUCKETS -#undef JUMP -#undef CHUNKLEN -#undef HASHER - -#define HASHER() H35 -#define HASHER_A H3 -#define HASHER_B HROLLING_FAST -#include "./hash_composite_inc.h" /* NOLINT(build/include) */ -#undef HASHER_A -#undef HASHER_B -#undef HASHER - -#define HASHER() H55 -#define HASHER_A H54 -#define HASHER_B HROLLING_FAST -#include "./hash_composite_inc.h" /* NOLINT(build/include) */ -#undef HASHER_A -#undef HASHER_B -#undef HASHER - -#define HASHER() H65 -#define HASHER_A H6 -#define HASHER_B HROLLING -#include "./hash_composite_inc.h" /* NOLINT(build/include) */ -#undef HASHER_A -#undef HASHER_B -#undef HASHER - -#undef FN -#undef CAT -#undef EXPAND_CAT - -#define FOR_GENERIC_HASHERS(H) H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42)= H(54)\ - H(35) H(55) H(65) -#define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10) - -static BROTLI_INLINE void DestroyHasher( - MemoryManager* m, HasherHandle* handle) { - if (*handle =3D=3D NULL) return; - BROTLI_FREE(m, *handle); -} - -static BROTLI_INLINE void HasherReset(HasherHandle handle) { - if (handle =3D=3D NULL) return; - GetHasherCommon(handle)->is_prepared_ =3D BROTLI_FALSE; -} - -static BROTLI_INLINE size_t HasherSize(const BrotliEncoderParams* params, - BROTLI_BOOL one_shot, const size_t input_size) { - size_t result =3D sizeof(HasherCommon); - switch (params->hasher.type) { -#define SIZE_(N) = \ - case N: = \ - result +=3D HashMemAllocInBytesH ## N(params, one_shot, input_size)= ; \ - break; - FOR_ALL_HASHERS(SIZE_) -#undef SIZE_ - default: - break; - } - return result; -} - -static BROTLI_INLINE void HasherSetup(MemoryManager* m, HasherHandle* han= dle, - BrotliEncoderParams* params, const uint8_t* data, size_t position, - size_t input_size, BROTLI_BOOL is_last) { - HasherHandle self =3D NULL; - HasherCommon* common =3D NULL; - BROTLI_BOOL one_shot =3D (position =3D=3D 0 && is_last); - if (*handle =3D=3D NULL) { - size_t alloc_size; - ChooseHasher(params, ¶ms->hasher); - alloc_size =3D HasherSize(params, one_shot, input_size); - self =3D BROTLI_ALLOC(m, uint8_t, alloc_size); - if (BROTLI_IS_OOM(m)) return; - *handle =3D self; - common =3D GetHasherCommon(self); - common->params =3D params->hasher; - switch (common->params.type) { -#define INITIALIZE_(N) \ - case N: \ - InitializeH ## N(*handle, params); \ - break; - FOR_ALL_HASHERS(INITIALIZE_); -#undef INITIALIZE_ - default: - break; - } - HasherReset(*handle); - } - - self =3D *handle; - common =3D GetHasherCommon(self); - if (!common->is_prepared_) { - switch (common->params.type) { -#define PREPARE_(N) \ - case N: \ - PrepareH ## N(self, one_shot, input_size, data); \ - break; - FOR_ALL_HASHERS(PREPARE_) -#undef PREPARE_ - default: break; - } - if (position =3D=3D 0) { - common->dict_num_lookups =3D 0; - common->dict_num_matches =3D 0; - } - common->is_prepared_ =3D BROTLI_TRUE; - } -} - -static BROTLI_INLINE void InitOrStitchToPreviousBlock( - MemoryManager* m, HasherHandle* handle, const uint8_t* data, size_t m= ask, - BrotliEncoderParams* params, size_t position, size_t input_size, - BROTLI_BOOL is_last) { - HasherHandle self; - HasherSetup(m, handle, params, data, position, input_size, is_last); - if (BROTLI_IS_OOM(m)) return; - self =3D *handle; - switch (GetHasherCommon(self)->params.type) { -#define INIT_(N) = \ - case N: = \ - StitchToPreviousBlockH ## N(self, input_size, position, data, mask)= ; \ - break; - FOR_ALL_HASHERS(INIT_) -#undef INIT_ - default: break; - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_HASH_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h b/= BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h deleted file mode 100644 index ec3e39c73fa2..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h +++ /dev/null @@ -1,133 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2018 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN, HASHER_A, HASHER_B */ - -/* Composite hasher: This hasher allows to combine two other hashers, HAS= HER_A - and HASHER_B. */ - -#define HashComposite HASHER() - -#define FN_A(X) EXPAND_CAT(X, HASHER_A) -#define FN_B(X) EXPAND_CAT(X, HASHER_B) - -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { - size_t a =3D FN_A(HashTypeLength)(); - size_t b =3D FN_B(HashTypeLength)(); - return a > b ? a : b; -} - -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { - size_t a =3D FN_A(StoreLookahead)(); - size_t b =3D FN_B(StoreLookahead)(); - return a > b ? a : b; -} - -typedef struct HashComposite { - HasherHandle ha; - HasherHandle hb; - const BrotliEncoderParams* params; -} HashComposite; - -static BROTLI_INLINE HashComposite* FN(Self)(HasherHandle handle) { - return (HashComposite*)&(GetHasherCommon(handle)[1]); -} - -static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - HashComposite* self =3D FN(Self)(handle); - self->ha =3D 0; - self->hb =3D 0; - self->params =3D params; - /* TODO: Initialize of the hashers is defered to Prepare (and params - remembered here) because we don't get the one_shot and input_size pa= rams - here that are needed to know the memory size of them. Instead provid= e - those params to all hashers FN(Initialize) */ -} - -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashComposite* self =3D FN(Self)(handle); - if (!self->ha) { - HasherCommon* common_a; - HasherCommon* common_b; - - self->ha =3D handle + sizeof(HasherCommon) + sizeof(HashComposite); - common_a =3D (HasherCommon*)self->ha; - common_a->params =3D self->params->hasher; - common_a->is_prepared_ =3D BROTLI_FALSE; - common_a->dict_num_lookups =3D 0; - common_a->dict_num_matches =3D 0; - FN_A(Initialize)(self->ha, self->params); - - self->hb =3D self->ha + sizeof(HasherCommon) + FN_A(HashMemAllocInByt= es)( - self->params, one_shot, input_size); - common_b =3D (HasherCommon*)self->hb; - common_b->params =3D self->params->hasher; - common_b->is_prepared_ =3D BROTLI_FALSE; - common_b->dict_num_lookups =3D 0; - common_b->dict_num_matches =3D 0; - FN_B(Initialize)(self->hb, self->params); - } - FN_A(Prepare)(self->ha, one_shot, input_size, data); - FN_B(Prepare)(self->hb, one_shot, input_size, data); -} - -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( - const BrotliEncoderParams* params, BROTLI_BOOL one_shot, - size_t input_size) { - return sizeof(HashComposite) + 2 * sizeof(HasherCommon) + - FN_A(HashMemAllocInBytes)(params, one_shot, input_size) + - FN_B(HashMemAllocInBytes)(params, one_shot, input_size); -} - -static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle, - const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t = ix) { - HashComposite* self =3D FN(Self)(handle); - FN_A(Store)(self->ha, data, mask, ix); - FN_B(Store)(self->hb, data, mask, ix); -} - -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { - HashComposite* self =3D FN(Self)(handle); - FN_A(StoreRange)(self->ha, data, mask, ix_start, ix_end); - FN_B(StoreRange)(self->hb, data, mask, ix_start, ix_end); -} - -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ring_buffer_mask) { - HashComposite* self =3D FN(Self)(handle); - FN_A(StitchToPreviousBlock)(self->ha, num_bytes, position, ringbuffer, - ring_buffer_mask); - FN_B(StitchToPreviousBlock)(self->hb, num_bytes, position, ringbuffer, - ring_buffer_mask); -} - -static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - HashComposite* self =3D FN(Self)(handle); - FN_A(PrepareDistanceCache)(self->ha, distance_cache); - FN_B(PrepareDistanceCache)(self->hb, distance_cache); -} - -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, - const BrotliEncoderDictionary* dictionary, - const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, - const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, - const size_t max_length, const size_t max_backward, const size_t gap, - const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) { - HashComposite* self =3D FN(Self)(handle); - FN_A(FindLongestMatch)(self->ha, dictionary, data, ring_buffer_mask, - distance_cache, cur_ix, max_length, max_backward, gap, max_distance= , out); - FN_B(FindLongestMatch)(self->hb, dictionary, data, ring_buffer_mask, - distance_cache, cur_ix, max_length, max_backward, gap, max_distance= , out); -} - -#undef HashComposite diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_in= c.h b/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h deleted file mode 100644 index 9caf429db1d9..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h +++ /dev/null @@ -1,254 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2016 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN, BUCKET_BITS, NUM_BANKS, BANK_BITS, - NUM_LAST_DISTANCES_TO_CHECK */ - -/* A (forgetful) hash table to the data seen by the compressor, to - help create backward references to previous data. - - Hashes are stored in chains which are bucketed to groups. Group of cha= ins - share a storage "bank". When more than "bank size" chain nodes are add= ed, - oldest nodes are replaced; this way several chains may share a tail. *= / - -#define HashForgetfulChain HASHER() - -#define BANK_SIZE (1 << BANK_BITS) - -/* Number of hash buckets. */ -#define BUCKET_SIZE (1 << BUCKET_BITS) - -#define CAPPED_CHAINS 0 - -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; } -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; } - -/* HashBytes is the function that chooses the bucket to place the address= in.*/ -static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* data) { - const uint32_t h =3D BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32; - /* The higher bits contain more mixture from the multiplication, - so we take our results from there. */ - return h >> (32 - BUCKET_BITS); -} - -typedef struct FN(Slot) { - uint16_t delta; - uint16_t next; -} FN(Slot); - -typedef struct FN(Bank) { - FN(Slot) slots[BANK_SIZE]; -} FN(Bank); - -typedef struct HashForgetfulChain { - uint32_t addr[BUCKET_SIZE]; - uint16_t head[BUCKET_SIZE]; - /* Truncated hash used for quick rejection of "distance cache" candidat= es. */ - uint8_t tiny_hash[65536]; - FN(Bank) banks[NUM_BANKS]; - uint16_t free_slot_idx[NUM_BANKS]; - size_t max_hops; -} HashForgetfulChain; - -static BROTLI_INLINE HashForgetfulChain* FN(Self)(HasherHandle handle) { - return (HashForgetfulChain*)&(GetHasherCommon(handle)[1]); -} - -static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - FN(Self)(handle)->max_hops =3D - (params->quality > 6 ? 7u : 8u) << (params->quality - 4); -} - -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashForgetfulChain* self =3D FN(Self)(handle); - /* Partial preparation is 100 times slower (per socket). */ - size_t partial_prepare_threshold =3D BUCKET_SIZE >> 6; - if (one_shot && input_size <=3D partial_prepare_threshold) { - size_t i; - for (i =3D 0; i < input_size; ++i) { - size_t bucket =3D FN(HashBytes)(&data[i]); - /* See InitEmpty comment. */ - self->addr[bucket] =3D 0xCCCCCCCC; - self->head[bucket] =3D 0xCCCC; - } - } else { - /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, posi= tion - processed by hasher never reaches 3GB + 64M; this makes all new ch= ains - to be terminated after the first node. */ - memset(self->addr, 0xCC, sizeof(self->addr)); - memset(self->head, 0, sizeof(self->head)); - } - memset(self->tiny_hash, 0, sizeof(self->tiny_hash)); - memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx)); -} - -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( - const BrotliEncoderParams* params, BROTLI_BOOL one_shot, - size_t input_size) { - BROTLI_UNUSED(params); - BROTLI_UNUSED(one_shot); - BROTLI_UNUSED(input_size); - return sizeof(HashForgetfulChain); -} - -/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and pr= epend - node to corresponding chain; also update tiny_hash for current positio= n. */ -static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle, - const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t = ix) { - HashForgetfulChain* self =3D FN(Self)(handle); - const size_t key =3D FN(HashBytes)(&data[ix & mask]); - const size_t bank =3D key & (NUM_BANKS - 1); - const size_t idx =3D self->free_slot_idx[bank]++ & (BANK_SIZE - 1); - size_t delta =3D ix - self->addr[key]; - self->tiny_hash[(uint16_t)ix] =3D (uint8_t)key; - if (delta > 0xFFFF) delta =3D CAPPED_CHAINS ? 0 : 0xFFFF; - self->banks[bank].slots[idx].delta =3D (uint16_t)delta; - self->banks[bank].slots[idx].next =3D self->head[key]; - self->addr[key] =3D (uint32_t)ix; - self->head[key] =3D (uint16_t)idx; -} - -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { - size_t i; - for (i =3D ix_start; i < ix_end; ++i) { - FN(Store)(handle, data, mask, i); - } -} - -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ring_buffer_mask) { - if (num_bytes >=3D FN(HashTypeLength)() - 1 && position >=3D 3) { - /* Prepare the hashes for three last bytes of the last write. - These could not be calculated before, since they require knowledge - of both the previous and the current block. */ - FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 3); - FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 2); - FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 1); - } -} - -static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - BROTLI_UNUSED(handle); - PrepareDistanceCache(distance_cache, NUM_LAST_DISTANCES_TO_CHECK); -} - -/* Find a longest backward match of &data[cur_ix] up to the length of - max_length and stores the position cur_ix in the hash table. - - REQUIRES: FN(PrepareDistanceCache) must be invoked for current distanc= e cache - values; if this method is invoked repeatedly with the same d= istance - cache values, it is enough to invoke FN(PrepareDistanceCache= ) once. - - Does not look for matches longer than max_length. - Does not look for matches further away than max_backward. - Writes the best match into |out|. - |out|->score is updated only if a better match is found. */ -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, - const BrotliEncoderDictionary* dictionary, - const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, - const int* BROTLI_RESTRICT distance_cache, - const size_t cur_ix, const size_t max_length, const size_t max_backwa= rd, - const size_t gap, const size_t max_distance, - HasherSearchResult* BROTLI_RESTRICT out) { - HashForgetfulChain* self =3D FN(Self)(handle); - const size_t cur_ix_masked =3D cur_ix & ring_buffer_mask; - /* Don't accept a short copy from far away. */ - score_t min_score =3D out->score; - score_t best_score =3D out->score; - size_t best_len =3D out->len; - size_t i; - const size_t key =3D FN(HashBytes)(&data[cur_ix_masked]); - const uint8_t tiny_hash =3D (uint8_t)(key); - out->len =3D 0; - out->len_code_delta =3D 0; - /* Try last distance first. */ - for (i =3D 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) { - const size_t backward =3D (size_t)distance_cache[i]; - size_t prev_ix =3D (cur_ix - backward); - /* For distance code 0 we want to consider 2-byte matches. */ - if (i > 0 && self->tiny_hash[(uint16_t)prev_ix] !=3D tiny_hash) conti= nue; - if (prev_ix >=3D cur_ix || backward > max_backward) { - continue; - } - prev_ix &=3D ring_buffer_mask; - { - const size_t len =3D FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >=3D 2) { - score_t score =3D BackwardReferenceScoreUsingLastDistance(len); - if (best_score < score) { - if (i !=3D 0) score -=3D BackwardReferencePenaltyUsingLastDista= nce(i); - if (best_score < score) { - best_score =3D score; - best_len =3D len; - out->len =3D best_len; - out->distance =3D backward; - out->score =3D best_score; - } - } - } - } - } - { - const size_t bank =3D key & (NUM_BANKS - 1); - size_t backward =3D 0; - size_t hops =3D self->max_hops; - size_t delta =3D cur_ix - self->addr[key]; - size_t slot =3D self->head[key]; - while (hops--) { - size_t prev_ix; - size_t last =3D slot; - backward +=3D delta; - if (backward > max_backward || (CAPPED_CHAINS && !delta)) break; - prev_ix =3D (cur_ix - backward) & ring_buffer_mask; - slot =3D self->banks[bank].slots[last].next; - delta =3D self->banks[bank].slots[last].delta; - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] !=3D data[prev_ix + best_len]) { - continue; - } - { - const size_t len =3D FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >=3D 4) { - /* Comparing for >=3D 3 does not change the semantics, but just= saves - for a few unnecessary binary logarithms in backward referenc= e - score, since we are not interested in such short matches. */ - score_t score =3D BackwardReferenceScore(len, backward); - if (best_score < score) { - best_score =3D score; - best_len =3D len; - out->len =3D best_len; - out->distance =3D backward; - out->score =3D best_score; - } - } - } - } - FN(Store)(handle, data, ring_buffer_mask, cur_ix); - } - if (out->score =3D=3D min_score) { - SearchInStaticDictionary(dictionary, - handle, &data[cur_ix_masked], max_length, max_backward + gap, - max_distance, out, BROTLI_FALSE); - } -} - -#undef BANK_SIZE -#undef BUCKET_SIZE -#undef CAPPED_CHAINS - -#undef HashForgetfulChain diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_in= c.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h deleted file mode 100644 index 3a01f0d3f1a0..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h +++ /dev/null @@ -1,266 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN */ - -/* A (forgetful) hash table to the data seen by the compressor, to - help create backward references to previous data. - - This is a hash map of fixed size (bucket_size_) to a ring buffer of - fixed size (block_size_). The ring buffer contains the last block_size= _ - index positions of the given hash key in the compressed data. */ - -#define HashLongestMatch HASHER() - -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; } -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; } - -/* HashBytes is the function that chooses the bucket to place the address= in. */ -static BROTLI_INLINE uint32_t FN(HashBytes)(const uint8_t* data, - const uint64_t mask, - const int shift) { - const uint64_t h =3D (BROTLI_UNALIGNED_LOAD64LE(data) & mask) * kHashMu= l64Long; - /* The higher bits contain more mixture from the multiplication, - so we take our results from there. */ - return (uint32_t)(h >> shift); -} - -typedef struct HashLongestMatch { - /* Number of hash buckets. */ - size_t bucket_size_; - /* Only block_size_ newest backward references are kept, - and the older are forgotten. */ - size_t block_size_; - /* Left-shift for computing hash bucket index from hash value. */ - int hash_shift_; - /* Mask for selecting the next 4-8 bytes of input */ - uint64_t hash_mask_; - /* Mask for accessing entries in a block (in a ring-buffer manner). */ - uint32_t block_mask_; - - /* --- Dynamic size members --- */ - - /* Number of entries in a particular bucket. */ - /* uint16_t num[bucket_size]; */ - - /* Buckets containing block_size_ of backward references. */ - /* uint32_t* buckets[bucket_size * block_size]; */ -} HashLongestMatch; - -static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) { - return (HashLongestMatch*)&(GetHasherCommon(handle)[1]); -} - -static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) { - return (uint16_t*)(&self[1]); -} - -static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) { - return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]); -} - -static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - HasherCommon* common =3D GetHasherCommon(handle); - HashLongestMatch* self =3D FN(Self)(handle); - BROTLI_UNUSED(params); - self->hash_shift_ =3D 64 - common->params.bucket_bits; - self->hash_mask_ =3D (~((uint64_t)0U)) >> (64 - 8 * common->params.hash= _len); - self->bucket_size_ =3D (size_t)1 << common->params.bucket_bits; - self->block_size_ =3D (size_t)1 << common->params.block_bits; - self->block_mask_ =3D (uint32_t)(self->block_size_ - 1); -} - -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashLongestMatch* self =3D FN(Self)(handle); - uint16_t* num =3D FN(Num)(self); - /* Partial preparation is 100 times slower (per socket). */ - size_t partial_prepare_threshold =3D self->bucket_size_ >> 6; - if (one_shot && input_size <=3D partial_prepare_threshold) { - size_t i; - for (i =3D 0; i < input_size; ++i) { - const uint32_t key =3D FN(HashBytes)(&data[i], self->hash_mask_, - self->hash_shift_); - num[key] =3D 0; - } - } else { - memset(num, 0, self->bucket_size_ * sizeof(num[0])); - } -} - -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( - const BrotliEncoderParams* params, BROTLI_BOOL one_shot, - size_t input_size) { - size_t bucket_size =3D (size_t)1 << params->hasher.bucket_bits; - size_t block_size =3D (size_t)1 << params->hasher.block_bits; - BROTLI_UNUSED(one_shot); - BROTLI_UNUSED(input_size); - return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size); -} - -/* Look at 4 bytes at &data[ix & mask]. - Compute a hash from these, and store the value of ix at that position.= */ -static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* d= ata, - const size_t mask, const size_t ix) { - HashLongestMatch* self =3D FN(Self)(handle); - uint16_t* num =3D FN(Num)(self); - const uint32_t key =3D FN(HashBytes)(&data[ix & mask], self->hash_mask_= , - self->hash_shift_); - const size_t minor_ix =3D num[key] & self->block_mask_; - const size_t offset =3D - minor_ix + (key << GetHasherCommon(handle)->params.block_bits); - FN(Buckets)(self)[offset] =3D (uint32_t)ix; - ++num[key]; -} - -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { - size_t i; - for (i =3D ix_start; i < ix_end; ++i) { - FN(Store)(handle, data, mask, i); - } -} - -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask) { - if (num_bytes >=3D FN(HashTypeLength)() - 1 && position >=3D 3) { - /* Prepare the hashes for three last bytes of the last write. - These could not be calculated before, since they require knowledge - of both the previous and the current block. */ - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1); - } -} - -static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - PrepareDistanceCache(distance_cache, - GetHasherCommon(handle)->params.num_last_distances_to_check); -} - -/* Find a longest backward match of &data[cur_ix] up to the length of - max_length and stores the position cur_ix in the hash table. - - REQUIRES: FN(PrepareDistanceCache) must be invoked for current distanc= e cache - values; if this method is invoked repeatedly with the same d= istance - cache values, it is enough to invoke FN(PrepareDistanceCache= ) once. - - Does not look for matches longer than max_length. - Does not look for matches further away than max_backward. - Writes the best match into |out|. - |out|->score is updated only if a better match is found. */ -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, - const BrotliEncoderDictionary* dictionary, - const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, - const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, - const size_t max_length, const size_t max_backward, const size_t gap, - const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) { - HasherCommon* common =3D GetHasherCommon(handle); - HashLongestMatch* self =3D FN(Self)(handle); - uint16_t* num =3D FN(Num)(self); - uint32_t* buckets =3D FN(Buckets)(self); - const size_t cur_ix_masked =3D cur_ix & ring_buffer_mask; - /* Don't accept a short copy from far away. */ - score_t min_score =3D out->score; - score_t best_score =3D out->score; - size_t best_len =3D out->len; - size_t i; - out->len =3D 0; - out->len_code_delta =3D 0; - /* Try last distance first. */ - for (i =3D 0; i < (size_t)common->params.num_last_distances_to_check; += +i) { - const size_t backward =3D (size_t)distance_cache[i]; - size_t prev_ix =3D (size_t)(cur_ix - backward); - if (prev_ix >=3D cur_ix) { - continue; - } - if (BROTLI_PREDICT_FALSE(backward > max_backward)) { - continue; - } - prev_ix &=3D ring_buffer_mask; - - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] !=3D data[prev_ix + best_len]) { - continue; - } - { - const size_t len =3D FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >=3D 3 || (len =3D=3D 2 && i < 2)) { - /* Comparing for >=3D 2 does not change the semantics, but just s= aves for - a few unnecessary binary logarithms in backward reference scor= e, - since we are not interested in such short matches. */ - score_t score =3D BackwardReferenceScoreUsingLastDistance(len); - if (best_score < score) { - if (i !=3D 0) score -=3D BackwardReferencePenaltyUsingLastDista= nce(i); - if (best_score < score) { - best_score =3D score; - best_len =3D len; - out->len =3D best_len; - out->distance =3D backward; - out->score =3D best_score; - } - } - } - } - } - { - const uint32_t key =3D FN(HashBytes)( - &data[cur_ix_masked], self->hash_mask_, self->hash_shift_); - uint32_t* BROTLI_RESTRICT bucket =3D - &buckets[key << common->params.block_bits]; - const size_t down =3D - (num[key] > self->block_size_) ? - (num[key] - self->block_size_) : 0u; - for (i =3D num[key]; i > down;) { - size_t prev_ix =3D bucket[--i & self->block_mask_]; - const size_t backward =3D cur_ix - prev_ix; - if (BROTLI_PREDICT_FALSE(backward > max_backward)) { - break; - } - prev_ix &=3D ring_buffer_mask; - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] !=3D data[prev_ix + best_len]) { - continue; - } - { - const size_t len =3D FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >=3D 4) { - /* Comparing for >=3D 3 does not change the semantics, but just= saves - for a few unnecessary binary logarithms in backward referenc= e - score, since we are not interested in such short matches. */ - score_t score =3D BackwardReferenceScore(len, backward); - if (best_score < score) { - best_score =3D score; - best_len =3D len; - out->len =3D best_len; - out->distance =3D backward; - out->score =3D best_score; - } - } - } - } - bucket[num[key] & self->block_mask_] =3D (uint32_t)cur_ix; - ++num[key]; - } - if (min_score =3D=3D out->score) { - SearchInStaticDictionary(dictionary, - handle, &data[cur_ix_masked], max_length, max_backward + gap, - max_distance, out, BROTLI_FALSE); - } -} - -#undef HashLongestMatch diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.= h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h deleted file mode 100644 index 108a7faaccb1..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h +++ /dev/null @@ -1,258 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN */ - -/* A (forgetful) hash table to the data seen by the compressor, to - help create backward references to previous data. - - This is a hash map of fixed size (bucket_size_) to a ring buffer of - fixed size (block_size_). The ring buffer contains the last block_size= _ - index positions of the given hash key in the compressed data. */ - -#define HashLongestMatch HASHER() - -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; } -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; } - -/* HashBytes is the function that chooses the bucket to place the address= in. */ -static uint32_t FN(HashBytes)(const uint8_t* data, const int shift) { - uint32_t h =3D BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32; - /* The higher bits contain more mixture from the multiplication, - so we take our results from there. */ - return (uint32_t)(h >> shift); -} - -typedef struct HashLongestMatch { - /* Number of hash buckets. */ - size_t bucket_size_; - /* Only block_size_ newest backward references are kept, - and the older are forgotten. */ - size_t block_size_; - /* Left-shift for computing hash bucket index from hash value. */ - int hash_shift_; - /* Mask for accessing entries in a block (in a ring-buffer manner). */ - uint32_t block_mask_; - - /* --- Dynamic size members --- */ - - /* Number of entries in a particular bucket. */ - /* uint16_t num[bucket_size]; */ - - /* Buckets containing block_size_ of backward references. */ - /* uint32_t* buckets[bucket_size * block_size]; */ -} HashLongestMatch; - -static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) { - return (HashLongestMatch*)&(GetHasherCommon(handle)[1]); -} - -static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) { - return (uint16_t*)(&self[1]); -} - -static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) { - return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]); -} - -static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - HasherCommon* common =3D GetHasherCommon(handle); - HashLongestMatch* self =3D FN(Self)(handle); - BROTLI_UNUSED(params); - self->hash_shift_ =3D 32 - common->params.bucket_bits; - self->bucket_size_ =3D (size_t)1 << common->params.bucket_bits; - self->block_size_ =3D (size_t)1 << common->params.block_bits; - self->block_mask_ =3D (uint32_t)(self->block_size_ - 1); -} - -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashLongestMatch* self =3D FN(Self)(handle); - uint16_t* num =3D FN(Num)(self); - /* Partial preparation is 100 times slower (per socket). */ - size_t partial_prepare_threshold =3D self->bucket_size_ >> 6; - if (one_shot && input_size <=3D partial_prepare_threshold) { - size_t i; - for (i =3D 0; i < input_size; ++i) { - const uint32_t key =3D FN(HashBytes)(&data[i], self->hash_shift_); - num[key] =3D 0; - } - } else { - memset(num, 0, self->bucket_size_ * sizeof(num[0])); - } -} - -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( - const BrotliEncoderParams* params, BROTLI_BOOL one_shot, - size_t input_size) { - size_t bucket_size =3D (size_t)1 << params->hasher.bucket_bits; - size_t block_size =3D (size_t)1 << params->hasher.block_bits; - BROTLI_UNUSED(one_shot); - BROTLI_UNUSED(input_size); - return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size); -} - -/* Look at 4 bytes at &data[ix & mask]. - Compute a hash from these, and store the value of ix at that position.= */ -static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* d= ata, - const size_t mask, const size_t ix) { - HashLongestMatch* self =3D FN(Self)(handle); - uint16_t* num =3D FN(Num)(self); - const uint32_t key =3D FN(HashBytes)(&data[ix & mask], self->hash_shift= _); - const size_t minor_ix =3D num[key] & self->block_mask_; - const size_t offset =3D - minor_ix + (key << GetHasherCommon(handle)->params.block_bits); - FN(Buckets)(self)[offset] =3D (uint32_t)ix; - ++num[key]; -} - -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { - size_t i; - for (i =3D ix_start; i < ix_end; ++i) { - FN(Store)(handle, data, mask, i); - } -} - -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask) { - if (num_bytes >=3D FN(HashTypeLength)() - 1 && position >=3D 3) { - /* Prepare the hashes for three last bytes of the last write. - These could not be calculated before, since they require knowledge - of both the previous and the current block. */ - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1); - } -} - -static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - PrepareDistanceCache(distance_cache, - GetHasherCommon(handle)->params.num_last_distances_to_check); -} - -/* Find a longest backward match of &data[cur_ix] up to the length of - max_length and stores the position cur_ix in the hash table. - - REQUIRES: FN(PrepareDistanceCache) must be invoked for current distanc= e cache - values; if this method is invoked repeatedly with the same d= istance - cache values, it is enough to invoke FN(PrepareDistanceCache= ) once. - - Does not look for matches longer than max_length. - Does not look for matches further away than max_backward. - Writes the best match into |out|. - |out|->score is updated only if a better match is found. */ -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, - const BrotliEncoderDictionary* dictionary, - const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, - const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, - const size_t max_length, const size_t max_backward, const size_t gap, - const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) { - HasherCommon* common =3D GetHasherCommon(handle); - HashLongestMatch* self =3D FN(Self)(handle); - uint16_t* num =3D FN(Num)(self); - uint32_t* buckets =3D FN(Buckets)(self); - const size_t cur_ix_masked =3D cur_ix & ring_buffer_mask; - /* Don't accept a short copy from far away. */ - score_t min_score =3D out->score; - score_t best_score =3D out->score; - size_t best_len =3D out->len; - size_t i; - out->len =3D 0; - out->len_code_delta =3D 0; - /* Try last distance first. */ - for (i =3D 0; i < (size_t)common->params.num_last_distances_to_check; += +i) { - const size_t backward =3D (size_t)distance_cache[i]; - size_t prev_ix =3D (size_t)(cur_ix - backward); - if (prev_ix >=3D cur_ix) { - continue; - } - if (BROTLI_PREDICT_FALSE(backward > max_backward)) { - continue; - } - prev_ix &=3D ring_buffer_mask; - - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] !=3D data[prev_ix + best_len]) { - continue; - } - { - const size_t len =3D FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >=3D 3 || (len =3D=3D 2 && i < 2)) { - /* Comparing for >=3D 2 does not change the semantics, but just s= aves for - a few unnecessary binary logarithms in backward reference scor= e, - since we are not interested in such short matches. */ - score_t score =3D BackwardReferenceScoreUsingLastDistance(len); - if (best_score < score) { - if (i !=3D 0) score -=3D BackwardReferencePenaltyUsingLastDista= nce(i); - if (best_score < score) { - best_score =3D score; - best_len =3D len; - out->len =3D best_len; - out->distance =3D backward; - out->score =3D best_score; - } - } - } - } - } - { - const uint32_t key =3D - FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_); - uint32_t* BROTLI_RESTRICT bucket =3D - &buckets[key << common->params.block_bits]; - const size_t down =3D - (num[key] > self->block_size_) ? (num[key] - self->block_size_) := 0u; - for (i =3D num[key]; i > down;) { - size_t prev_ix =3D bucket[--i & self->block_mask_]; - const size_t backward =3D cur_ix - prev_ix; - if (BROTLI_PREDICT_FALSE(backward > max_backward)) { - break; - } - prev_ix &=3D ring_buffer_mask; - if (cur_ix_masked + best_len > ring_buffer_mask || - prev_ix + best_len > ring_buffer_mask || - data[cur_ix_masked + best_len] !=3D data[prev_ix + best_len]) { - continue; - } - { - const size_t len =3D FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >=3D 4) { - /* Comparing for >=3D 3 does not change the semantics, but just= saves - for a few unnecessary binary logarithms in backward referenc= e - score, since we are not interested in such short matches. */ - score_t score =3D BackwardReferenceScore(len, backward); - if (best_score < score) { - best_score =3D score; - best_len =3D len; - out->len =3D best_len; - out->distance =3D backward; - out->score =3D best_score; - } - } - } - } - bucket[num[key] & self->block_mask_] =3D (uint32_t)cur_ix; - ++num[key]; - } - if (min_score =3D=3D out->score) { - SearchInStaticDictionary(dictionary, - handle, &data[cur_ix_masked], max_length, max_backward + gap, - max_distance, out, BROTLI_FALSE); - } -} - -#undef HashLongestMatch diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quic= kly_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickl= y_inc.h deleted file mode 100644 index 49338f97db48..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc= .h +++ /dev/null @@ -1,235 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP, HASH_LEN, - USE_DICTIONARY - */ - -#define HashLongestMatchQuickly HASHER() - -#define BUCKET_SIZE (1 << BUCKET_BITS) - -#define HASH_MAP_SIZE (4 << BUCKET_BITS) - -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; } -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; } - -/* HashBytes is the function that chooses the bucket to place - the address in. The HashLongestMatch and HashLongestMatchQuickly - classes have separate, different implementations of hashing. */ -static uint32_t FN(HashBytes)(const uint8_t* data) { - const uint64_t h =3D ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8 * HAS= H_LEN)) * - kHashMul64); - /* The higher bits contain more mixture from the multiplication, - so we take our results from there. */ - return (uint32_t)(h >> (64 - BUCKET_BITS)); -} - -/* A (forgetful) hash table to the data seen by the compressor, to - help create backward references to previous data. - - This is a hash map of fixed size (BUCKET_SIZE). Starting from the - given index, BUCKET_SWEEP buckets are used to store values of a key. *= / -typedef struct HashLongestMatchQuickly { - uint32_t buckets_[BUCKET_SIZE + BUCKET_SWEEP]; -} HashLongestMatchQuickly; - -static BROTLI_INLINE HashLongestMatchQuickly* FN(Self)(HasherHandle handl= e) { - return (HashLongestMatchQuickly*)&(GetHasherCommon(handle)[1]); -} - -static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - BROTLI_UNUSED(handle); - BROTLI_UNUSED(params); -} - -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashLongestMatchQuickly* self =3D FN(Self)(handle); - /* Partial preparation is 100 times slower (per socket). */ - size_t partial_prepare_threshold =3D HASH_MAP_SIZE >> 7; - if (one_shot && input_size <=3D partial_prepare_threshold) { - size_t i; - for (i =3D 0; i < input_size; ++i) { - const uint32_t key =3D FN(HashBytes)(&data[i]); - memset(&self->buckets_[key], 0, BUCKET_SWEEP * sizeof(self->buckets= _[0])); - } - } else { - /* It is not strictly necessary to fill this buffer here, but - not filling will make the results of the compression stochastic - (but correct). This is because random data would cause the - system to find accidentally good backward references here and ther= e. */ - memset(&self->buckets_[0], 0, sizeof(self->buckets_)); - } -} - -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( - const BrotliEncoderParams* params, BROTLI_BOOL one_shot, - size_t input_size) { - BROTLI_UNUSED(params); - BROTLI_UNUSED(one_shot); - BROTLI_UNUSED(input_size); - return sizeof(HashLongestMatchQuickly); -} - -/* Look at 5 bytes at &data[ix & mask]. - Compute a hash from these, and store the value somewhere within - [ix .. ix+3]. */ -static BROTLI_INLINE void FN(Store)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix) { - const uint32_t key =3D FN(HashBytes)(&data[ix & mask]); - /* Wiggle the value with the bucket sweep range. */ - const uint32_t off =3D (ix >> 3) % BUCKET_SWEEP; - FN(Self)(handle)->buckets_[key + off] =3D (uint32_t)ix; -} - -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { - size_t i; - for (i =3D ix_start; i < ix_end; ++i) { - FN(Store)(handle, data, mask, i); - } -} - -static BROTLI_INLINE void FN(StitchToPreviousBlock)( - HasherHandle handle, size_t num_bytes, size_t position, - const uint8_t* ringbuffer, size_t ringbuffer_mask) { - if (num_bytes >=3D FN(HashTypeLength)() - 1 && position >=3D 3) { - /* Prepare the hashes for three last bytes of the last write. - These could not be calculated before, since they require knowledge - of both the previous and the current block. */ - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1); - } -} - -static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - BROTLI_UNUSED(handle); - BROTLI_UNUSED(distance_cache); -} - -/* Find a longest backward match of &data[cur_ix & ring_buffer_mask] - up to the length of max_length and stores the position cur_ix in the - hash table. - - Does not look for matches longer than max_length. - Does not look for matches further away than max_backward. - Writes the best match into |out|. - |out|->score is updated only if a better match is found. */ -static BROTLI_INLINE void FN(FindLongestMatch)( - HasherHandle handle, const BrotliEncoderDictionary* dictionary, - const uint8_t* BROTLI_RESTRICT data, - const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_ca= che, - const size_t cur_ix, const size_t max_length, const size_t max_backwa= rd, - const size_t gap, const size_t max_distance, - HasherSearchResult* BROTLI_RESTRICT out) { - HashLongestMatchQuickly* self =3D FN(Self)(handle); - const size_t best_len_in =3D out->len; - const size_t cur_ix_masked =3D cur_ix & ring_buffer_mask; - const uint32_t key =3D FN(HashBytes)(&data[cur_ix_masked]); - int compare_char =3D data[cur_ix_masked + best_len_in]; - score_t min_score =3D out->score; - score_t best_score =3D out->score; - size_t best_len =3D best_len_in; - size_t cached_backward =3D (size_t)distance_cache[0]; - size_t prev_ix =3D cur_ix - cached_backward; - out->len_code_delta =3D 0; - if (prev_ix < cur_ix) { - prev_ix &=3D (uint32_t)ring_buffer_mask; - if (compare_char =3D=3D data[prev_ix + best_len]) { - size_t len =3D FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >=3D 4) { - const score_t score =3D BackwardReferenceScoreUsingLastDistance(l= en); - if (best_score < score) { - best_score =3D score; - best_len =3D len; - out->len =3D len; - out->distance =3D cached_backward; - out->score =3D best_score; - compare_char =3D data[cur_ix_masked + best_len]; - if (BUCKET_SWEEP =3D=3D 1) { - self->buckets_[key] =3D (uint32_t)cur_ix; - return; - } - } - } - } - } - if (BUCKET_SWEEP =3D=3D 1) { - size_t backward; - size_t len; - /* Only one to look for, don't bother to prepare for a loop. */ - prev_ix =3D self->buckets_[key]; - self->buckets_[key] =3D (uint32_t)cur_ix; - backward =3D cur_ix - prev_ix; - prev_ix &=3D (uint32_t)ring_buffer_mask; - if (compare_char !=3D data[prev_ix + best_len_in]) { - return; - } - if (BROTLI_PREDICT_FALSE(backward =3D=3D 0 || backward > max_backward= )) { - return; - } - len =3D FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >=3D 4) { - const score_t score =3D BackwardReferenceScore(len, backward); - if (best_score < score) { - out->len =3D len; - out->distance =3D backward; - out->score =3D score; - return; - } - } - } else { - uint32_t* bucket =3D self->buckets_ + key; - int i; - prev_ix =3D *bucket++; - for (i =3D 0; i < BUCKET_SWEEP; ++i, prev_ix =3D *bucket++) { - const size_t backward =3D cur_ix - prev_ix; - size_t len; - prev_ix &=3D (uint32_t)ring_buffer_mask; - if (compare_char !=3D data[prev_ix + best_len]) { - continue; - } - if (BROTLI_PREDICT_FALSE(backward =3D=3D 0 || backward > max_backwa= rd)) { - continue; - } - len =3D FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); - if (len >=3D 4) { - const score_t score =3D BackwardReferenceScore(len, backward); - if (best_score < score) { - best_score =3D score; - best_len =3D len; - out->len =3D best_len; - out->distance =3D backward; - out->score =3D score; - compare_char =3D data[cur_ix_masked + best_len]; - } - } - } - } - if (USE_DICTIONARY && min_score =3D=3D out->score) { - SearchInStaticDictionary(dictionary, - handle, &data[cur_ix_masked], max_length, max_backward + gap, - max_distance, out, BROTLI_TRUE); - } - self->buckets_[key + ((cur_ix >> 3) % BUCKET_SWEEP)] =3D (uint32_t)cur_= ix; -} - -#undef HASH_MAP_SIZE -#undef BUCKET_SIZE - -#undef HashLongestMatchQuickly diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h b/Ba= seTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h deleted file mode 100644 index b8e3b21b5e33..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h +++ /dev/null @@ -1,215 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2018 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN, JUMP, NUMBUCKETS, MASK, CHUNKLEN */ -/* NUMBUCKETS / (MASK + 1) =3D probability of storing and using hash code= . */ -/* JUMP =3D skip bytes for speedup */ - -/* Rolling hash for long distance long string matches. Stores one positio= n - per bucket, bucket key is computed over a long region. */ - -#define HashRolling HASHER() - -static const uint32_t FN(kRollingHashMul32) =3D 69069; -static const uint32_t FN(kInvalidPos) =3D 0xffffffff; - -/* This hasher uses a longer forward length, but returning a higher value= here - will hurt compression by the main hasher when combined with a composit= e - hasher. The hasher tests for forward itself instead. */ -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; } -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; } - -/* Computes a code from a single byte. A lookup table of 256 values could= be - used, but simply adding 1 works about as good. */ -static uint32_t FN(HashByte)(uint8_t byte) { - return (uint32_t)byte + 1u; -} - -static uint32_t FN(HashRollingFunctionInitial)(uint32_t state, uint8_t ad= d, - uint32_t factor) { - return (uint32_t)(factor * state + FN(HashByte)(add)); -} - -static uint32_t FN(HashRollingFunction)(uint32_t state, uint8_t add, - uint8_t rem, uint32_t factor, - uint32_t factor_remove) { - return (uint32_t)(factor * state + - FN(HashByte)(add) - factor_remove * FN(HashByte)(rem)); -} - -typedef struct HashRolling { - uint32_t state; - uint32_t* table; - size_t next_ix; - - uint32_t chunk_len; - uint32_t factor; - uint32_t factor_remove; -} HashRolling; - -static BROTLI_INLINE HashRolling* FN(Self)(HasherHandle handle) { - return (HashRolling*)&(GetHasherCommon(handle)[1]); -} - -static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - HashRolling* self =3D FN(Self)(handle); - size_t i; - self->state =3D 0; - self->next_ix =3D 0; - - self->factor =3D FN(kRollingHashMul32); - - /* Compute the factor of the oldest byte to remove: factor**steps modul= o - 0xffffffff (the multiplications rely on 32-bit overflow) */ - self->factor_remove =3D 1; - for (i =3D 0; i < CHUNKLEN; i +=3D JUMP) { - self->factor_remove *=3D self->factor; - } - - self->table =3D (uint32_t*)((HasherHandle)self + sizeof(HashRolling)); - for (i =3D 0; i < NUMBUCKETS; i++) { - self->table[i] =3D FN(kInvalidPos); - } - - BROTLI_UNUSED(params); -} - -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashRolling* self =3D FN(Self)(handle); - size_t i; - /* Too small size, cannot use this hasher. */ - if (input_size < CHUNKLEN) return; - self->state =3D 0; - for (i =3D 0; i < CHUNKLEN; i +=3D JUMP) { - self->state =3D FN(HashRollingFunctionInitial)( - self->state, data[i], self->factor); - } - BROTLI_UNUSED(one_shot); -} - -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( - const BrotliEncoderParams* params, BROTLI_BOOL one_shot, - size_t input_size) { - return sizeof(HashRolling) + NUMBUCKETS * sizeof(uint32_t); - BROTLI_UNUSED(params); - BROTLI_UNUSED(one_shot); - BROTLI_UNUSED(input_size); -} - -static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle, - const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t = ix) { - BROTLI_UNUSED(handle); - BROTLI_UNUSED(data); - BROTLI_UNUSED(mask); - BROTLI_UNUSED(ix); -} - -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { - BROTLI_UNUSED(handle); - BROTLI_UNUSED(data); - BROTLI_UNUSED(mask); - BROTLI_UNUSED(ix_start); - BROTLI_UNUSED(ix_end); -} - -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ring_buffer_mask) { - /* In this case we must re-initialize the hasher from scratch from the - current position. */ - HashRolling* self =3D FN(Self)(handle); - size_t position_masked; - size_t available =3D num_bytes; - if ((position & (JUMP - 1)) !=3D 0) { - size_t diff =3D JUMP - (position & (JUMP - 1)); - available =3D (diff > available) ? 0 : (available - diff); - position +=3D diff; - } - position_masked =3D position & ring_buffer_mask; - /* wrapping around ringbuffer not handled. */ - if (available > ring_buffer_mask - position_masked) { - available =3D ring_buffer_mask - position_masked; - } - - FN(Prepare)(handle, BROTLI_FALSE, available, - ringbuffer + (position & ring_buffer_mask)); - self->next_ix =3D position; - BROTLI_UNUSED(num_bytes); -} - -static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - BROTLI_UNUSED(handle); - BROTLI_UNUSED(distance_cache); -} - -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, - const BrotliEncoderDictionary* dictionary, - const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, - const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, - const size_t max_length, const size_t max_backward, const size_t gap, - const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) { - HashRolling* self =3D FN(Self)(handle); - const size_t cur_ix_masked =3D cur_ix & ring_buffer_mask; - size_t pos =3D self->next_ix; - - if ((cur_ix & (JUMP - 1)) !=3D 0) return; - - /* Not enough lookahead */ - if (max_length < CHUNKLEN) return; - - for (pos =3D self->next_ix; pos <=3D cur_ix; pos +=3D JUMP) { - uint32_t code =3D self->state & MASK; - - uint8_t rem =3D data[pos & ring_buffer_mask]; - uint8_t add =3D data[(pos + CHUNKLEN) & ring_buffer_mask]; - size_t found_ix =3D FN(kInvalidPos); - - self->state =3D FN(HashRollingFunction)( - self->state, add, rem, self->factor, self->factor_remove); - - if (code < NUMBUCKETS) { - found_ix =3D self->table[code]; - self->table[code] =3D (uint32_t)pos; - if (pos =3D=3D cur_ix && found_ix !=3D FN(kInvalidPos)) { - /* The cast to 32-bit makes backward distances up to 4GB work eve= n - if cur_ix is above 4GB, despite using 32-bit values in the tab= le. */ - size_t backward =3D (uint32_t)(cur_ix - found_ix); - if (backward <=3D max_backward) { - const size_t found_ix_masked =3D found_ix & ring_buffer_mask; - const size_t len =3D FindMatchLengthWithLimit(&data[found_ix_ma= sked], - &data[cur_ix_masked= ], - max_length); - if (len >=3D 4 && len > out->len) { - score_t score =3D BackwardReferenceScore(len, backward); - if (score > out->score) { - out->len =3D len; - out->distance =3D backward; - out->score =3D score; - out->len_code_delta =3D 0; - } - } - } - } - } - } - - self->next_ix =3D cur_ix + JUMP; - - /* NOTE: this hasher does not search in the dictionary. It is used as - backup-hasher, the main hasher already searches in it. */ - BROTLI_UNUSED(dictionary); - BROTLI_UNUSED(distance_cache); - BROTLI_UNUSED(gap); - BROTLI_UNUSED(max_distance); -} - -#undef HashRolling diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc= .h b/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h deleted file mode 100644 index 09c2642030b0..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h +++ /dev/null @@ -1,327 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2016 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN, BUCKET_BITS, MAX_TREE_COMP_LENGTH, - MAX_TREE_SEARCH_DEPTH */ - -/* A (forgetful) hash table where each hash bucket contains a binary tree= of - sequences whose first 4 bytes share the same hash code. - Each sequence is MAX_TREE_COMP_LENGTH long and is identified by its st= arting - position in the input data. The binary tree is sorted by the lexicogra= phic - order of the sequences, and it is also a max-heap with respect to the - starting positions. */ - -#define HashToBinaryTree HASHER() - -#define BUCKET_SIZE (1 << BUCKET_BITS) - -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; } -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { - return MAX_TREE_COMP_LENGTH; -} - -static uint32_t FN(HashBytes)(const uint8_t* data) { - uint32_t h =3D BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32; - /* The higher bits contain more mixture from the multiplication, - so we take our results from there. */ - return h >> (32 - BUCKET_BITS); -} - -typedef struct HashToBinaryTree { - /* The window size minus 1 */ - size_t window_mask_; - - /* Hash table that maps the 4-byte hashes of the sequence to the last - position where this hash was found, which is the root of the binary - tree of sequences that share this hash bucket. */ - uint32_t buckets_[BUCKET_SIZE]; - - /* A position used to mark a non-existent sequence, i.e. a tree is empt= y if - its root is at invalid_pos_ and a node is a leaf if both its childre= n - are at invalid_pos_. */ - uint32_t invalid_pos_; - - /* --- Dynamic size members --- */ - - /* The union of the binary trees of each hash bucket. The root of the t= ree - corresponding to a hash is a sequence starting at buckets_[hash] and - the left and right children of a sequence starting at pos are - forest_[2 * pos] and forest_[2 * pos + 1]. */ - /* uint32_t forest[2 * num_nodes] */ -} HashToBinaryTree; - -static BROTLI_INLINE HashToBinaryTree* FN(Self)(HasherHandle handle) { - return (HashToBinaryTree*)&(GetHasherCommon(handle)[1]); -} - -static BROTLI_INLINE uint32_t* FN(Forest)(HashToBinaryTree* self) { - return (uint32_t*)(&self[1]); -} - -static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - HashToBinaryTree* self =3D FN(Self)(handle); - self->window_mask_ =3D (1u << params->lgwin) - 1u; - self->invalid_pos_ =3D (uint32_t)(0 - self->window_mask_); -} - -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashToBinaryTree* self =3D FN(Self)(handle); - uint32_t invalid_pos =3D self->invalid_pos_; - uint32_t i; - BROTLI_UNUSED(data); - BROTLI_UNUSED(one_shot); - BROTLI_UNUSED(input_size); - for (i =3D 0; i < BUCKET_SIZE; i++) { - self->buckets_[i] =3D invalid_pos; - } -} - -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( - const BrotliEncoderParams* params, BROTLI_BOOL one_shot, - size_t input_size) { - size_t num_nodes =3D (size_t)1 << params->lgwin; - if (one_shot && input_size < num_nodes) { - num_nodes =3D input_size; - } - return sizeof(HashToBinaryTree) + 2 * sizeof(uint32_t) * num_nodes; -} - -static BROTLI_INLINE size_t FN(LeftChildIndex)(HashToBinaryTree* self, - const size_t pos) { - return 2 * (pos & self->window_mask_); -} - -static BROTLI_INLINE size_t FN(RightChildIndex)(HashToBinaryTree* self, - const size_t pos) { - return 2 * (pos & self->window_mask_) + 1; -} - -/* Stores the hash of the next 4 bytes and in a single tree-traversal, th= e - hash bucket's binary tree is searched for matches and is re-rooted at = the - current position. - - If less than MAX_TREE_COMP_LENGTH data is available, the hash bucket o= f the - current position is searched for matches, but the state of the hash ta= ble - is not changed, since we can not know the final sorting order of the - current (incomplete) sequence. - - This function must be called with increasing cur_ix positions. */ -static BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)( - HashToBinaryTree* self, const uint8_t* const BROTLI_RESTRICT data, - const size_t cur_ix, const size_t ring_buffer_mask, const size_t max_= length, - const size_t max_backward, size_t* const BROTLI_RESTRICT best_len, - BackwardMatch* BROTLI_RESTRICT matches) { - const size_t cur_ix_masked =3D cur_ix & ring_buffer_mask; - const size_t max_comp_len =3D - BROTLI_MIN(size_t, max_length, MAX_TREE_COMP_LENGTH); - const BROTLI_BOOL should_reroot_tree =3D - TO_BROTLI_BOOL(max_length >=3D MAX_TREE_COMP_LENGTH); - const uint32_t key =3D FN(HashBytes)(&data[cur_ix_masked]); - uint32_t* forest =3D FN(Forest)(self); - size_t prev_ix =3D self->buckets_[key]; - /* The forest index of the rightmost node of the left subtree of the ne= w - root, updated as we traverse and re-root the tree of the hash bucket= . */ - size_t node_left =3D FN(LeftChildIndex)(self, cur_ix); - /* The forest index of the leftmost node of the right subtree of the ne= w - root, updated as we traverse and re-root the tree of the hash bucket= . */ - size_t node_right =3D FN(RightChildIndex)(self, cur_ix); - /* The match length of the rightmost node of the left subtree of the ne= w - root, updated as we traverse and re-root the tree of the hash bucket= . */ - size_t best_len_left =3D 0; - /* The match length of the leftmost node of the right subtree of the ne= w - root, updated as we traverse and re-root the tree of the hash bucket= . */ - size_t best_len_right =3D 0; - size_t depth_remaining; - if (should_reroot_tree) { - self->buckets_[key] =3D (uint32_t)cur_ix; - } - for (depth_remaining =3D MAX_TREE_SEARCH_DEPTH; ; --depth_remaining) { - const size_t backward =3D cur_ix - prev_ix; - const size_t prev_ix_masked =3D prev_ix & ring_buffer_mask; - if (backward =3D=3D 0 || backward > max_backward || depth_remaining = =3D=3D 0) { - if (should_reroot_tree) { - forest[node_left] =3D self->invalid_pos_; - forest[node_right] =3D self->invalid_pos_; - } - break; - } - { - const size_t cur_len =3D BROTLI_MIN(size_t, best_len_left, best_len= _right); - size_t len; - BROTLI_DCHECK(cur_len <=3D MAX_TREE_COMP_LENGTH); - len =3D cur_len + - FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len], - &data[prev_ix_masked + cur_len], - max_length - cur_len); - BROTLI_DCHECK( - 0 =3D=3D memcmp(&data[cur_ix_masked], &data[prev_ix_masked], le= n)); - if (matches && len > *best_len) { - *best_len =3D len; - InitBackwardMatch(matches++, backward, len); - } - if (len >=3D max_comp_len) { - if (should_reroot_tree) { - forest[node_left] =3D forest[FN(LeftChildIndex)(self, prev_ix)]= ; - forest[node_right] =3D forest[FN(RightChildIndex)(self, prev_ix= )]; - } - break; - } - if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) { - best_len_left =3D len; - if (should_reroot_tree) { - forest[node_left] =3D (uint32_t)prev_ix; - } - node_left =3D FN(RightChildIndex)(self, prev_ix); - prev_ix =3D forest[node_left]; - } else { - best_len_right =3D len; - if (should_reroot_tree) { - forest[node_right] =3D (uint32_t)prev_ix; - } - node_right =3D FN(LeftChildIndex)(self, prev_ix); - prev_ix =3D forest[node_right]; - } - } - } - return matches; -} - -/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to t= he - length of max_length and stores the position cur_ix in the hash table. - - Sets *num_matches to the number of matches found, and stores the found - matches in matches[0] to matches[*num_matches - 1]. The matches will b= e - sorted by strictly increasing length and (non-strictly) increasing - distance. */ -static BROTLI_INLINE size_t FN(FindAllMatches)(HasherHandle handle, - const BrotliEncoderDictionary* dictionary, const uint8_t* data, - const size_t ring_buffer_mask, const size_t cur_ix, - const size_t max_length, const size_t max_backward, const size_t gap, - const BrotliEncoderParams* params, BackwardMatch* matches) { - BackwardMatch* const orig_matches =3D matches; - const size_t cur_ix_masked =3D cur_ix & ring_buffer_mask; - size_t best_len =3D 1; - const size_t short_match_max_backward =3D - params->quality !=3D HQ_ZOPFLIFICATION_QUALITY ? 16 : 64; - size_t stop =3D cur_ix - short_match_max_backward; - uint32_t dict_matches[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1]; - size_t i; - if (cur_ix < short_match_max_backward) { stop =3D 0; } - for (i =3D cur_ix - 1; i > stop && best_len <=3D 2; --i) { - size_t prev_ix =3D i; - const size_t backward =3D cur_ix - prev_ix; - if (BROTLI_PREDICT_FALSE(backward > max_backward)) { - break; - } - prev_ix &=3D ring_buffer_mask; - if (data[cur_ix_masked] !=3D data[prev_ix] || - data[cur_ix_masked + 1] !=3D data[prev_ix + 1]) { - continue; - } - { - const size_t len =3D - FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked], - max_length); - if (len > best_len) { - best_len =3D len; - InitBackwardMatch(matches++, backward, len); - } - } - } - if (best_len < max_length) { - matches =3D FN(StoreAndFindMatches)(FN(Self)(handle), data, cur_ix, - ring_buffer_mask, max_length, max_backward, &best_len, matches); - } - for (i =3D 0; i <=3D BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) { - dict_matches[i] =3D kInvalidMatch; - } - { - size_t minlen =3D BROTLI_MAX(size_t, 4, best_len + 1); - if (BrotliFindAllStaticDictionaryMatches(dictionary, - &data[cur_ix_masked], minlen, max_length, &dict_matches[0])) { - size_t maxlen =3D BROTLI_MIN( - size_t, BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN, max_length); - size_t l; - for (l =3D minlen; l <=3D maxlen; ++l) { - uint32_t dict_id =3D dict_matches[l]; - if (dict_id < kInvalidMatch) { - size_t distance =3D max_backward + gap + (dict_id >> 5) + 1; - if (distance <=3D params->dist.max_distance) { - InitDictionaryBackwardMatch(matches++, distance, l, dict_id &= 31); - } - } - } - } - } - return (size_t)(matches - orig_matches); -} - -/* Stores the hash of the next 4 bytes and re-roots the binary tree at th= e - current sequence, without returning any matches. - REQUIRES: ix + MAX_TREE_COMP_LENGTH <=3D end-of-current-block */ -static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* d= ata, - const size_t mask, const size_t ix) { - HashToBinaryTree* self =3D FN(Self)(handle); - /* Maximum distance is window size - 16, see section 9.1. of the spec. = */ - const size_t max_backward =3D self->window_mask_ - BROTLI_WINDOW_GAP + = 1; - FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH, - max_backward, NULL, NULL); -} - -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { - size_t i =3D ix_start; - size_t j =3D ix_start; - if (ix_start + 63 <=3D ix_end) { - i =3D ix_end - 63; - } - if (ix_start + 512 <=3D i) { - for (; j < i; j +=3D 8) { - FN(Store)(handle, data, mask, j); - } - } - for (; i < ix_end; ++i) { - FN(Store)(handle, data, mask, i); - } -} - -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask) { - HashToBinaryTree* self =3D FN(Self)(handle); - if (num_bytes >=3D FN(HashTypeLength)() - 1 && - position >=3D MAX_TREE_COMP_LENGTH) { - /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher. - These could not be calculated before, since they require knowledge - of both the previous and the current block. */ - const size_t i_start =3D position - MAX_TREE_COMP_LENGTH + 1; - const size_t i_end =3D BROTLI_MIN(size_t, position, i_start + num_byt= es); - size_t i; - for (i =3D i_start; i < i_end; ++i) { - /* Maximum distance is window size - 16, see section 9.1. of the sp= ec. - Furthermore, we have to make sure that we don't look further bac= k - from the start of the next block than the window size, otherwise= we - could access already overwritten areas of the ring-buffer. */ - const size_t max_backward =3D - self->window_mask_ - BROTLI_MAX(size_t, - BROTLI_WINDOW_GAP - 1, - position - i); - /* We know that i + MAX_TREE_COMP_LENGTH <=3D position + num_bytes,= i.e. the - end of the current block and that we have at least - MAX_TREE_COMP_LENGTH tail in the ring-buffer. */ - FN(StoreAndFindMatches)(self, ringbuffer, i, ringbuffer_mask, - MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL); - } - } -} - -#undef BUCKET_SIZE - -#undef HashToBinaryTree diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram.h b/BaseTools= /Source/C/BrotliCompress/enc/histogram.h deleted file mode 100644 index c08a4cac2bfa..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/histogram.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Models the histograms of literals, commands and distance codes. */ - -#ifndef BROTLI_ENC_HISTOGRAM_H_ -#define BROTLI_ENC_HISTOGRAM_H_ - -#include /* memset */ - -#include "../common/constants.h" -#include "../common/context.h" -#include "../common/platform.h" -#include -#include "./block_splitter.h" -#include "./command.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* The distance symbols effectively used by "Large Window Brotli" (32-bit= ). */ -#define BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS 544 - -#define FN(X) X ## Literal -#define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS -#define DataType uint8_t -#include "./histogram_inc.h" /* NOLINT(build/include) */ -#undef DataType -#undef DATA_SIZE -#undef FN - -#define FN(X) X ## Command -#define DataType uint16_t -#define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS -#include "./histogram_inc.h" /* NOLINT(build/include) */ -#undef DATA_SIZE -#undef FN - -#define FN(X) X ## Distance -#define DATA_SIZE BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS -#include "./histogram_inc.h" /* NOLINT(build/include) */ -#undef DataType -#undef DATA_SIZE -#undef FN - -BROTLI_INTERNAL void BrotliBuildHistogramsWithContext( - const Command* cmds, const size_t num_commands, - const BlockSplit* literal_split, const BlockSplit* insert_and_copy_sp= lit, - const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos, - size_t mask, uint8_t prev_byte, uint8_t prev_byte2, - const ContextType* context_modes, HistogramLiteral* literal_histogram= s, - HistogramCommand* insert_and_copy_histograms, - HistogramDistance* copy_dist_histograms); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_HISTOGRAM_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h b/BaseT= ools/Source/C/BrotliCompress/enc/histogram_inc.h deleted file mode 100644 index a9d2e7018d60..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h +++ /dev/null @@ -1,51 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: Histogram, DATA_SIZE, DataType */ - -/* A simple container for histograms of data in blocks. */ - -typedef struct FN(Histogram) { - uint32_t data_[DATA_SIZE]; - size_t total_count_; - double bit_cost_; -} FN(Histogram); - -static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) { - memset(self->data_, 0, sizeof(self->data_)); - self->total_count_ =3D 0; - self->bit_cost_ =3D HUGE_VAL; -} - -static BROTLI_INLINE void FN(ClearHistograms)( - FN(Histogram)* array, size_t length) { - size_t i; - for (i =3D 0; i < length; ++i) FN(HistogramClear)(array + i); -} - -static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t va= l) { - ++self->data_[val]; - ++self->total_count_; -} - -static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self, - const DataType* p, size_t n) { - self->total_count_ +=3D n; - n +=3D 1; - while (--n) ++self->data_[*p++]; -} - -static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self, - const FN(Histogram)* v) { - size_t i; - self->total_count_ +=3D v->total_count_; - for (i =3D 0; i < DATA_SIZE; ++i) { - self->data_[i] +=3D v->data_[i]; - } -} - -static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZ= E; } diff --git a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h b/BaseTo= ols/Source/C/BrotliCompress/enc/literal_cost.h deleted file mode 100644 index 4891a26d5012..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Literal cost model to allow backward reference replacement to be effic= ient. -*/ - -#ifndef BROTLI_ENC_LITERAL_COST_H_ -#define BROTLI_ENC_LITERAL_COST_H_ - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* Estimates how many bits the literals in the interval [pos, pos + len) = in the - ring-buffer (data, mask) will take entropy coded and writes these esti= mates - to the cost[0..len) array. */ -BROTLI_INTERNAL void BrotliEstimateBitCostsForLiterals( - size_t pos, size_t len, size_t mask, const uint8_t* data, float* cost= ); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_LITERAL_COST_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/memory.h b/BaseTools/So= urce/C/BrotliCompress/enc/memory.h deleted file mode 100644 index 2bd4d0c872a6..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/memory.h +++ /dev/null @@ -1,102 +0,0 @@ -/* Copyright 2016 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Macros for memory management. */ - -#ifndef BROTLI_ENC_MEMORY_H_ -#define BROTLI_ENC_MEMORY_H_ - -#include /* memcpy */ - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \ - !defined(BROTLI_ENCODER_EXIT_ON_OOM) -#define BROTLI_ENCODER_EXIT_ON_OOM -#endif - -typedef struct MemoryManager { - brotli_alloc_func alloc_func; - brotli_free_func free_func; - void* opaque; -#if !defined(BROTLI_ENCODER_EXIT_ON_OOM) - BROTLI_BOOL is_oom; - size_t perm_allocated; - size_t new_allocated; - size_t new_freed; - void* pointers[256]; -#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ -} MemoryManager; - -BROTLI_INTERNAL void BrotliInitMemoryManager( - MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free= _func, - void* opaque); - -BROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n); -#define BROTLI_ALLOC(M, T, N) \ - ((N) > 0 ? ((T*)BrotliAllocate((M), (N) * sizeof(T))) : NULL) - -BROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p); -#define BROTLI_FREE(M, P) { \ - BrotliFree((M), (P)); \ - P =3D NULL; \ -} - -#if defined(BROTLI_ENCODER_EXIT_ON_OOM) -#define BROTLI_IS_OOM(M) (!!0) -#else /* BROTLI_ENCODER_EXIT_ON_OOM */ -#define BROTLI_IS_OOM(M) (!!(M)->is_oom) -#endif /* BROTLI_ENCODER_EXIT_ON_OOM */ - -BROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m); - -/* -Dynamically grows array capacity to at least the requested size -M: MemoryManager -T: data type -A: array -C: capacity -R: requested size -*/ -#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) { \ - if (C < (R)) { \ - size_t _new_size =3D (C =3D=3D 0) ? (R) : C; \ - T* new_array; \ - while (_new_size < (R)) _new_size *=3D 2; \ - new_array =3D BROTLI_ALLOC((M), T, _new_size); \ - if (!BROTLI_IS_OOM(M) && C !=3D 0) \ - memcpy(new_array, A, C * sizeof(T)); \ - BROTLI_FREE((M), A); \ - A =3D new_array; \ - C =3D _new_size; \ - } \ -} - -/* -Appends value and dynamically grows array capacity when needed -M: MemoryManager -T: data type -A: array -C: array capacity -S: array size -V: value to append -*/ -#define BROTLI_ENSURE_CAPACITY_APPEND(M, T, A, C, S, V) { \ - (S)++; \ - BROTLI_ENSURE_CAPACITY(M, T, A, C, S); \ - A[(S) - 1] =3D (V); \ -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_MEMORY_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock.h b/BaseTools= /Source/C/BrotliCompress/enc/metablock.h deleted file mode 100644 index e35c98554f7a..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/metablock.h +++ /dev/null @@ -1,105 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Algorithms for distributing the literals and commands of a metablock b= etween - block types and contexts. */ - -#ifndef BROTLI_ENC_METABLOCK_H_ -#define BROTLI_ENC_METABLOCK_H_ - -#include "../common/context.h" -#include "../common/platform.h" -#include -#include "./block_splitter.h" -#include "./command.h" -#include "./histogram.h" -#include "./memory.h" -#include "./quality.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -typedef struct MetaBlockSplit { - BlockSplit literal_split; - BlockSplit command_split; - BlockSplit distance_split; - uint32_t* literal_context_map; - size_t literal_context_map_size; - uint32_t* distance_context_map; - size_t distance_context_map_size; - HistogramLiteral* literal_histograms; - size_t literal_histograms_size; - HistogramCommand* command_histograms; - size_t command_histograms_size; - HistogramDistance* distance_histograms; - size_t distance_histograms_size; -} MetaBlockSplit; - -static BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) { - BrotliInitBlockSplit(&mb->literal_split); - BrotliInitBlockSplit(&mb->command_split); - BrotliInitBlockSplit(&mb->distance_split); - mb->literal_context_map =3D 0; - mb->literal_context_map_size =3D 0; - mb->distance_context_map =3D 0; - mb->distance_context_map_size =3D 0; - mb->literal_histograms =3D 0; - mb->literal_histograms_size =3D 0; - mb->command_histograms =3D 0; - mb->command_histograms_size =3D 0; - mb->distance_histograms =3D 0; - mb->distance_histograms_size =3D 0; -} - -static BROTLI_INLINE void DestroyMetaBlockSplit( - MemoryManager* m, MetaBlockSplit* mb) { - BrotliDestroyBlockSplit(m, &mb->literal_split); - BrotliDestroyBlockSplit(m, &mb->command_split); - BrotliDestroyBlockSplit(m, &mb->distance_split); - BROTLI_FREE(m, mb->literal_context_map); - BROTLI_FREE(m, mb->distance_context_map); - BROTLI_FREE(m, mb->literal_histograms); - BROTLI_FREE(m, mb->command_histograms); - BROTLI_FREE(m, mb->distance_histograms); -} - -/* Uses the slow shortest-path block splitter and does context clustering= . - The distance parameters are dynamically selected based on the commands - which get recomputed under the new distance parameters. The new distan= ce - parameters are stored into *params. */ -BROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager* m, - const uint8_t* ringbuffer, - const size_t pos, - const size_t mask, - BrotliEncoderParams* params, - uint8_t prev_byte, - uint8_t prev_byte2, - Command* cmds, - size_t num_commands, - ContextType literal_context_mod= e, - MetaBlockSplit* mb); - -/* Uses a fast greedy block splitter that tries to merge current block wi= th the - last or the second last block and uses a static context clustering whi= ch - is the same for all block types. */ -BROTLI_INTERNAL void BrotliBuildMetaBlockGreedy( - MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask, - uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut= , - size_t num_contexts, const uint32_t* static_context_map, - const Command* commands, size_t n_commands, MetaBlockSplit* mb); - -BROTLI_INTERNAL void BrotliOptimizeHistograms(uint32_t num_distance_codes= , - MetaBlockSplit* mb); - -BROTLI_INTERNAL void BrotliInitDistanceParams(BrotliEncoderParams* params= , - uint32_t npostfix, uint32_t ndirect); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_METABLOCK_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h b/BaseT= ools/Source/C/BrotliCompress/enc/metablock_inc.h deleted file mode 100644 index c6b1c50b32ce..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h +++ /dev/null @@ -1,183 +0,0 @@ -/* NOLINT(build/header_guard) */ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* template parameters: FN */ - -#define HistogramType FN(Histogram) - -/* Greedy block splitter for one block category (literal, command or dist= ance). -*/ -typedef struct FN(BlockSplitter) { - /* Alphabet size of particular block category. */ - size_t alphabet_size_; - /* We collect at least this many symbols for each block. */ - size_t min_block_size_; - /* We merge histograms A and B if - entropy(A+B) < entropy(A) + entropy(B) + split_threshold_, - where A is the current histogram and B is the histogram of the last = or the - second last block type. */ - double split_threshold_; - - size_t num_blocks_; - BlockSplit* split_; /* not owned */ - HistogramType* histograms_; /* not owned */ - size_t* histograms_size_; /* not owned */ - - /* The number of symbols that we want to collect before deciding on whe= ther - or not to merge the block with a previous one or emit a new block. *= / - size_t target_block_size_; - /* The number of symbols in the current histogram. */ - size_t block_size_; - /* Offset of the current histogram. */ - size_t curr_histogram_ix_; - /* Offset of the histograms of the previous two block types. */ - size_t last_histogram_ix_[2]; - /* Entropy of the previous two block types. */ - double last_entropy_[2]; - /* The number of times we merged the current block with the last one. *= / - size_t merge_last_count_; -} FN(BlockSplitter); - -static void FN(InitBlockSplitter)( - MemoryManager* m, FN(BlockSplitter)* self, size_t alphabet_size, - size_t min_block_size, double split_threshold, size_t num_symbols, - BlockSplit* split, HistogramType** histograms, size_t* histograms_siz= e) { - size_t max_num_blocks =3D num_symbols / min_block_size + 1; - /* We have to allocate one more histogram than the maximum number of bl= ock - types for the current histogram when the meta-block is too big. */ - size_t max_num_types =3D - BROTLI_MIN(size_t, max_num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES= + 1); - self->alphabet_size_ =3D alphabet_size; - self->min_block_size_ =3D min_block_size; - self->split_threshold_ =3D split_threshold; - self->num_blocks_ =3D 0; - self->split_ =3D split; - self->histograms_size_ =3D histograms_size; - self->target_block_size_ =3D min_block_size; - self->block_size_ =3D 0; - self->curr_histogram_ix_ =3D 0; - self->merge_last_count_ =3D 0; - BROTLI_ENSURE_CAPACITY(m, uint8_t, - split->types, split->types_alloc_size, max_num_blocks); - BROTLI_ENSURE_CAPACITY(m, uint32_t, - split->lengths, split->lengths_alloc_size, max_num_blocks); - if (BROTLI_IS_OOM(m)) return; - self->split_->num_blocks =3D max_num_blocks; - BROTLI_DCHECK(*histograms =3D=3D 0); - *histograms_size =3D max_num_types; - *histograms =3D BROTLI_ALLOC(m, HistogramType, *histograms_size); - self->histograms_ =3D *histograms; - if (BROTLI_IS_OOM(m)) return; - /* Clear only current histogram. */ - FN(HistogramClear)(&self->histograms_[0]); - self->last_histogram_ix_[0] =3D self->last_histogram_ix_[1] =3D 0; -} - -/* Does either of three things: - (1) emits the current block with a new block type; - (2) emits the current block with the type of the second last block; - (3) merges the current block with the last block. */ -static void FN(BlockSplitterFinishBlock)( - FN(BlockSplitter)* self, BROTLI_BOOL is_final) { - BlockSplit* split =3D self->split_; - double* last_entropy =3D self->last_entropy_; - HistogramType* histograms =3D self->histograms_; - self->block_size_ =3D - BROTLI_MAX(size_t, self->block_size_, self->min_block_size_); - if (self->num_blocks_ =3D=3D 0) { - /* Create first block. */ - split->lengths[0] =3D (uint32_t)self->block_size_; - split->types[0] =3D 0; - last_entropy[0] =3D - BitsEntropy(histograms[0].data_, self->alphabet_size_); - last_entropy[1] =3D last_entropy[0]; - ++self->num_blocks_; - ++split->num_types; - ++self->curr_histogram_ix_; - if (self->curr_histogram_ix_ < *self->histograms_size_) - FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); - self->block_size_ =3D 0; - } else if (self->block_size_ > 0) { - double entropy =3D BitsEntropy(histograms[self->curr_histogram_ix_].d= ata_, - self->alphabet_size_); - HistogramType combined_histo[2]; - double combined_entropy[2]; - double diff[2]; - size_t j; - for (j =3D 0; j < 2; ++j) { - size_t last_histogram_ix =3D self->last_histogram_ix_[j]; - combined_histo[j] =3D histograms[self->curr_histogram_ix_]; - FN(HistogramAddHistogram)(&combined_histo[j], - &histograms[last_histogram_ix]); - combined_entropy[j] =3D BitsEntropy( - &combined_histo[j].data_[0], self->alphabet_size_); - diff[j] =3D combined_entropy[j] - entropy - last_entropy[j]; - } - - if (split->num_types < BROTLI_MAX_NUMBER_OF_BLOCK_TYPES && - diff[0] > self->split_threshold_ && - diff[1] > self->split_threshold_) { - /* Create new block. */ - split->lengths[self->num_blocks_] =3D (uint32_t)self->block_size_; - split->types[self->num_blocks_] =3D (uint8_t)split->num_types; - self->last_histogram_ix_[1] =3D self->last_histogram_ix_[0]; - self->last_histogram_ix_[0] =3D (uint8_t)split->num_types; - last_entropy[1] =3D last_entropy[0]; - last_entropy[0] =3D entropy; - ++self->num_blocks_; - ++split->num_types; - ++self->curr_histogram_ix_; - if (self->curr_histogram_ix_ < *self->histograms_size_) - FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); - self->block_size_ =3D 0; - self->merge_last_count_ =3D 0; - self->target_block_size_ =3D self->min_block_size_; - } else if (diff[1] < diff[0] - 20.0) { - /* Combine this block with second last block. */ - split->lengths[self->num_blocks_] =3D (uint32_t)self->block_size_; - split->types[self->num_blocks_] =3D split->types[self->num_blocks_ = - 2]; - BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1); - histograms[self->last_histogram_ix_[0]] =3D combined_histo[1]; - last_entropy[1] =3D last_entropy[0]; - last_entropy[0] =3D combined_entropy[1]; - ++self->num_blocks_; - self->block_size_ =3D 0; - FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); - self->merge_last_count_ =3D 0; - self->target_block_size_ =3D self->min_block_size_; - } else { - /* Combine this block with last block. */ - split->lengths[self->num_blocks_ - 1] +=3D (uint32_t)self->block_si= ze_; - histograms[self->last_histogram_ix_[0]] =3D combined_histo[0]; - last_entropy[0] =3D combined_entropy[0]; - if (split->num_types =3D=3D 1) { - last_entropy[1] =3D last_entropy[0]; - } - self->block_size_ =3D 0; - FN(HistogramClear)(&histograms[self->curr_histogram_ix_]); - if (++self->merge_last_count_ > 1) { - self->target_block_size_ +=3D self->min_block_size_; - } - } - } - if (is_final) { - *self->histograms_size_ =3D split->num_types; - split->num_blocks =3D self->num_blocks_; - } -} - -/* Adds the next symbol to the current histogram. When the current histog= ram - reaches the target size, decides on merging the block. */ -static void FN(BlockSplitterAddSymbol)(FN(BlockSplitter)* self, size_t sy= mbol) { - FN(HistogramAdd)(&self->histograms_[self->curr_histogram_ix_], symbol); - ++self->block_size_; - if (self->block_size_ =3D=3D self->target_block_size_) { - FN(BlockSplitterFinishBlock)(self, /* is_final =3D */ BROTLI_FALSE); - } -} - -#undef HistogramType diff --git a/BaseTools/Source/C/BrotliCompress/enc/params.h b/BaseTools/So= urce/C/BrotliCompress/enc/params.h deleted file mode 100644 index 96fed343ccbd..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/params.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright 2017 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Parameters for the Brotli encoder with chosen quality levels. */ - -#ifndef BROTLI_ENC_PARAMS_H_ -#define BROTLI_ENC_PARAMS_H_ - -#include -#include "./encoder_dict.h" - -typedef struct BrotliHasherParams { - int type; - int bucket_bits; - int block_bits; - int hash_len; - int num_last_distances_to_check; -} BrotliHasherParams; - -typedef struct BrotliDistanceParams { - uint32_t distance_postfix_bits; - uint32_t num_direct_distance_codes; - uint32_t alphabet_size; - size_t max_distance; -} BrotliDistanceParams; - -/* Encoding parameters */ -typedef struct BrotliEncoderParams { - BrotliEncoderMode mode; - int quality; - int lgwin; - int lgblock; - size_t size_hint; - BROTLI_BOOL disable_literal_context_modeling; - BROTLI_BOOL large_window; - BrotliHasherParams hasher; - BrotliDistanceParams dist; - BrotliEncoderDictionary dictionary; -} BrotliEncoderParams; - -#endif /* BROTLI_ENC_PARAMS_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/prefix.h b/BaseTools/So= urce/C/BrotliCompress/enc/prefix.h deleted file mode 100644 index e52edd1faa78..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/prefix.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Functions for encoding of integers into prefix codes the amount of ext= ra - bits, and the actual values of the extra bits. */ - -#ifndef BROTLI_ENC_PREFIX_H_ -#define BROTLI_ENC_PREFIX_H_ - -#include "../common/constants.h" -#include "../common/platform.h" -#include -#include "./fast_log.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* Here distance_code is an intermediate code, i.e. one of the special co= des or - the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES - 1. = */ -static BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code, - size_t num_direct_code= s, - size_t postfix_bits, - uint16_t* code, - uint32_t* extra_bits) = { - if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes)= { - *code =3D (uint16_t)distance_code; - *extra_bits =3D 0; - return; - } else { - size_t dist =3D ((size_t)1 << (postfix_bits + 2u)) + - (distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES - num_direct_cod= es); - size_t bucket =3D Log2FloorNonZero(dist) - 1; - size_t postfix_mask =3D (1u << postfix_bits) - 1; - size_t postfix =3D dist & postfix_mask; - size_t prefix =3D (dist >> bucket) & 1; - size_t offset =3D (2 + prefix) << bucket; - size_t nbits =3D bucket - postfix_bits; - *code =3D (uint16_t)((nbits << 10) | - (BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes + - ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix)); - *extra_bits =3D (uint32_t)((dist - offset) >> postfix_bits); - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_PREFIX_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/quality.h b/BaseTools/S= ource/C/BrotliCompress/enc/quality.h deleted file mode 100644 index 072bf8f156e4..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/quality.h +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright 2016 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Constants and formulas that affect speed-ratio trade-offs and thus def= ine - quality levels. */ - -#ifndef BROTLI_ENC_QUALITY_H_ -#define BROTLI_ENC_QUALITY_H_ - -#include "../common/platform.h" -#include -#include "./params.h" - -#define FAST_ONE_PASS_COMPRESSION_QUALITY 0 -#define FAST_TWO_PASS_COMPRESSION_QUALITY 1 -#define ZOPFLIFICATION_QUALITY 10 -#define HQ_ZOPFLIFICATION_QUALITY 11 - -#define MAX_QUALITY_FOR_STATIC_ENTROPY_CODES 2 -#define MIN_QUALITY_FOR_BLOCK_SPLIT 4 -#define MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS 4 -#define MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS 4 -#define MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH 5 -#define MIN_QUALITY_FOR_CONTEXT_MODELING 5 -#define MIN_QUALITY_FOR_HQ_CONTEXT_MODELING 7 -#define MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING 10 - -/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block splitt= ing, - so we buffer at most this much literals and commands. */ -#define MAX_NUM_DELAYED_SYMBOLS 0x2FFF - -/* Returns hash-table size for quality levels 0 and 1. */ -static BROTLI_INLINE size_t MaxHashTableSize(int quality) { - return quality =3D=3D FAST_ONE_PASS_COMPRESSION_QUALITY ? 1 << 15 : 1 <= < 17; -} - -/* The maximum length for which the zopflification uses distinct distance= s. */ -#define MAX_ZOPFLI_LEN_QUALITY_10 150 -#define MAX_ZOPFLI_LEN_QUALITY_11 325 - -/* Do not thoroughly search when a long copy is found. */ -#define BROTLI_LONG_COPY_QUICK_STEP 16384 - -static BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams* param= s) { - return params->quality <=3D 10 ? - MAX_ZOPFLI_LEN_QUALITY_10 : - MAX_ZOPFLI_LEN_QUALITY_11; -} - -/* Number of best candidates to evaluate to expand Zopfli chain. */ -static BROTLI_INLINE size_t MaxZopfliCandidates( - const BrotliEncoderParams* params) { - return params->quality <=3D 10 ? 1 : 5; -} - -static BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) { - params->quality =3D BROTLI_MIN(int, BROTLI_MAX_QUALITY, - BROTLI_MAX(int, BROTLI_MIN_QUALITY, params->quality)); - if (params->quality <=3D MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) { - params->large_window =3D BROTLI_FALSE; - } - if (params->lgwin < BROTLI_MIN_WINDOW_BITS) { - params->lgwin =3D BROTLI_MIN_WINDOW_BITS; - } else { - int max_lgwin =3D params->large_window ? BROTLI_LARGE_MAX_WINDOW_BITS= : - BROTLI_MAX_WINDOW_BITS; - if (params->lgwin > max_lgwin) params->lgwin =3D max_lgwin; - } -} - -/* Returns optimized lg_block value. */ -static BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams* params= ) { - int lgblock =3D params->lgblock; - if (params->quality =3D=3D FAST_ONE_PASS_COMPRESSION_QUALITY || - params->quality =3D=3D FAST_TWO_PASS_COMPRESSION_QUALITY) { - lgblock =3D params->lgwin; - } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) { - lgblock =3D 14; - } else if (lgblock =3D=3D 0) { - lgblock =3D 16; - if (params->quality >=3D 9 && params->lgwin > lgblock) { - lgblock =3D BROTLI_MIN(int, 18, params->lgwin); - } - } else { - lgblock =3D BROTLI_MIN(int, BROTLI_MAX_INPUT_BLOCK_BITS, - BROTLI_MAX(int, BROTLI_MIN_INPUT_BLOCK_BITS, lgblock)); - } - return lgblock; -} - -/* Returns log2 of the size of main ring buffer area. - Allocate at least lgwin + 1 bits for the ring buffer so that the newly - added block fits there completely and we still get lgwin bits and at l= east - read_block_size_bits + 1 bits because the copy tail length needs to be - smaller than ring-buffer size. */ -static BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams* params)= { - return 1 + BROTLI_MAX(int, params->lgwin, params->lgblock); -} - -static BROTLI_INLINE size_t MaxMetablockSize( - const BrotliEncoderParams* params) { - int bits =3D - BROTLI_MIN(int, ComputeRbBits(params), BROTLI_MAX_INPUT_BLOCK_BITS)= ; - return (size_t)1 << bits; -} - -/* When searching for backward references and have not seen matches for a= long - time, we can skip some match lookups. Unsuccessful match lookups are v= ery - expensive and this kind of a heuristic speeds up compression quite a l= ot. - At first 8 byte strides are taken and every second byte is put to hash= er. - After 4x more literals stride by 16 bytes, every put 4-th byte to hash= er. - Applied only to qualities 2 to 9. */ -static BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch( - const BrotliEncoderParams* params) { - return params->quality < 9 ? 64 : 512; -} - -static BROTLI_INLINE void ChooseHasher(const BrotliEncoderParams* params, - BrotliHasherParams* hparams) { - if (params->quality > 9) { - hparams->type =3D 10; - } else if (params->quality =3D=3D 4 && params->size_hint >=3D (1 << 20)= ) { - hparams->type =3D 54; - } else if (params->quality < 5) { - hparams->type =3D params->quality; - } else if (params->lgwin <=3D 16) { - hparams->type =3D params->quality < 7 ? 40 : params->quality < 9 ? 41= : 42; - } else if (params->size_hint >=3D (1 << 20) && params->lgwin >=3D 19) { - hparams->type =3D 6; - hparams->block_bits =3D params->quality - 1; - hparams->bucket_bits =3D 15; - hparams->hash_len =3D 5; - hparams->num_last_distances_to_check =3D - params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16; - } else { - hparams->type =3D 5; - hparams->block_bits =3D params->quality - 1; - hparams->bucket_bits =3D params->quality < 7 ? 14 : 15; - hparams->num_last_distances_to_check =3D - params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16; - } - - if (params->lgwin > 24) { - /* Different hashers for large window brotli: not for qualities <=3D = 2, - these are too fast for large window. Not for qualities >=3D 10: th= eir - hasher already works well with large window. So the changes are: - H3 --> H35: for quality 3. - H54 --> H55: for quality 4 with size hint > 1MB - H6 --> H65: for qualities 5, 6, 7, 8, 9. */ - if (hparams->type =3D=3D 3) { - hparams->type =3D 35; - } - if (hparams->type =3D=3D 54) { - hparams->type =3D 55; - } - if (hparams->type =3D=3D 6) { - hparams->type =3D 65; - } - } -} - -#endif /* BROTLI_ENC_QUALITY_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h b/BaseTool= s/Source/C/BrotliCompress/enc/ringbuffer.h deleted file mode 100644 index fe63270b3f9a..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h +++ /dev/null @@ -1,164 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Sliding window over the input data. */ - -#ifndef BROTLI_ENC_RINGBUFFER_H_ -#define BROTLI_ENC_RINGBUFFER_H_ - -#include /* memcpy */ - -#include "../common/platform.h" -#include -#include "./memory.h" -#include "./quality.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/* A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes= of - data in a circular manner: writing a byte writes it to: - `position() % (1 << window_bits)'. - For convenience, the RingBuffer array contains another copy of the - first `1 << tail_bits' bytes: - buffer_[i] =3D=3D buffer_[i + (1 << window_bits)], if i < (1 << tail= _bits), - and another copy of the last two bytes: - buffer_[-1] =3D=3D buffer_[(1 << window_bits) - 1] and - buffer_[-2] =3D=3D buffer_[(1 << window_bits) - 2]. */ -typedef struct RingBuffer { - /* Size of the ring-buffer is (1 << window_bits) + tail_size_. */ - const uint32_t size_; - const uint32_t mask_; - const uint32_t tail_size_; - const uint32_t total_size_; - - uint32_t cur_size_; - /* Position to write in the ring buffer. */ - uint32_t pos_; - /* The actual ring buffer containing the copy of the last two bytes, th= e data, - and the copy of the beginning as a tail. */ - uint8_t* data_; - /* The start of the ring-buffer. */ - uint8_t* buffer_; -} RingBuffer; - -static BROTLI_INLINE void RingBufferInit(RingBuffer* rb) { - rb->cur_size_ =3D 0; - rb->pos_ =3D 0; - rb->data_ =3D 0; - rb->buffer_ =3D 0; -} - -static BROTLI_INLINE void RingBufferSetup( - const BrotliEncoderParams* params, RingBuffer* rb) { - int window_bits =3D ComputeRbBits(params); - int tail_bits =3D params->lgblock; - *(uint32_t*)&rb->size_ =3D 1u << window_bits; - *(uint32_t*)&rb->mask_ =3D (1u << window_bits) - 1; - *(uint32_t*)&rb->tail_size_ =3D 1u << tail_bits; - *(uint32_t*)&rb->total_size_ =3D rb->size_ + rb->tail_size_; -} - -static BROTLI_INLINE void RingBufferFree(MemoryManager* m, RingBuffer* rb= ) { - BROTLI_FREE(m, rb->data_); -} - -/* Allocates or re-allocates data_ to the given length + plus some slack - region before and after. Fills the slack regions with zeros. */ -static BROTLI_INLINE void RingBufferInitBuffer( - MemoryManager* m, const uint32_t buflen, RingBuffer* rb) { - static const size_t kSlackForEightByteHashingEverywhere =3D 7; - uint8_t* new_data =3D BROTLI_ALLOC( - m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere); - size_t i; - if (BROTLI_IS_OOM(m)) return; - if (rb->data_) { - memcpy(new_data, rb->data_, - 2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere); - BROTLI_FREE(m, rb->data_); - } - rb->data_ =3D new_data; - rb->cur_size_ =3D buflen; - rb->buffer_ =3D rb->data_ + 2; - rb->buffer_[-2] =3D rb->buffer_[-1] =3D 0; - for (i =3D 0; i < kSlackForEightByteHashingEverywhere; ++i) { - rb->buffer_[rb->cur_size_ + i] =3D 0; - } -} - -static BROTLI_INLINE void RingBufferWriteTail( - const uint8_t* bytes, size_t n, RingBuffer* rb) { - const size_t masked_pos =3D rb->pos_ & rb->mask_; - if (BROTLI_PREDICT_FALSE(masked_pos < rb->tail_size_)) { - /* Just fill the tail buffer with the beginning data. */ - const size_t p =3D rb->size_ + masked_pos; - memcpy(&rb->buffer_[p], bytes, - BROTLI_MIN(size_t, n, rb->tail_size_ - masked_pos)); - } -} - -/* Push bytes into the ring buffer. */ -static BROTLI_INLINE void RingBufferWrite( - MemoryManager* m, const uint8_t* bytes, size_t n, RingBuffer* rb) { - if (rb->pos_ =3D=3D 0 && n < rb->tail_size_) { - /* Special case for the first write: to process the first block, we d= on't - need to allocate the whole ring-buffer and we don't need the tail - either. However, we do this memory usage optimization only if the - first write is less than the tail size, which is also the input bl= ock - size, otherwise it is likely that other blocks will follow and we - will need to reallocate to the full size anyway. */ - rb->pos_ =3D (uint32_t)n; - RingBufferInitBuffer(m, rb->pos_, rb); - if (BROTLI_IS_OOM(m)) return; - memcpy(rb->buffer_, bytes, n); - return; - } - if (rb->cur_size_ < rb->total_size_) { - /* Lazily allocate the full buffer. */ - RingBufferInitBuffer(m, rb->total_size_, rb); - if (BROTLI_IS_OOM(m)) return; - /* Initialize the last two bytes to zero, so that we don't have to wo= rry - later when we copy the last two bytes to the first two positions. = */ - rb->buffer_[rb->size_ - 2] =3D 0; - rb->buffer_[rb->size_ - 1] =3D 0; - } - { - const size_t masked_pos =3D rb->pos_ & rb->mask_; - /* The length of the writes is limited so that we do not need to worr= y - about a write */ - RingBufferWriteTail(bytes, n, rb); - if (BROTLI_PREDICT_TRUE(masked_pos + n <=3D rb->size_)) { - /* A single write fits. */ - memcpy(&rb->buffer_[masked_pos], bytes, n); - } else { - /* Split into two writes. - Copy into the end of the buffer, including the tail buffer. */ - memcpy(&rb->buffer_[masked_pos], bytes, - BROTLI_MIN(size_t, n, rb->total_size_ - masked_pos)); - /* Copy into the beginning of the buffer */ - memcpy(&rb->buffer_[0], bytes + (rb->size_ - masked_pos), - n - (rb->size_ - masked_pos)); - } - } - { - BROTLI_BOOL not_first_lap =3D (rb->pos_ & (1u << 31)) !=3D 0; - uint32_t rb_pos_mask =3D (1u << 31) - 1; - rb->buffer_[-2] =3D rb->buffer_[rb->size_ - 2]; - rb->buffer_[-1] =3D rb->buffer_[rb->size_ - 1]; - rb->pos_ =3D (rb->pos_ & rb_pos_mask) + (uint32_t)(n & rb_pos_mask); - if (not_first_lap) { - /* Wrap, but preserve not-a-first-lap feature. */ - rb->pos_ |=3D 1u << 31; - } - } -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_RINGBUFFER_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict.h b/BaseToo= ls/Source/C/BrotliCompress/enc/static_dict.h deleted file mode 100644 index aafc68ff9e02..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/static_dict.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Class to model the static dictionary. */ - -#ifndef BROTLI_ENC_STATIC_DICT_H_ -#define BROTLI_ENC_STATIC_DICT_H_ - -#include "../common/dictionary.h" -#include "../common/platform.h" -#include -#include "./encoder_dict.h" - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -#define BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN 37 -static const uint32_t kInvalidMatch =3D 0xFFFFFFF; - -/* Matches data against static dictionary words, and for each length l, - for which a match is found, updates matches[l] to be the minimum possi= ble - (distance << 5) + len_code. - Returns 1 if matches have been found, otherwise 0. - Prerequisites: - matches array is at least BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1= long - all elements are initialized to kInvalidMatch */ -BROTLI_INTERNAL BROTLI_BOOL BrotliFindAllStaticDictionaryMatches( - const BrotliEncoderDictionary* dictionary, - const uint8_t* data, size_t min_length, size_t max_length, - uint32_t* matches); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_STATIC_DICT_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h b/Bas= eTools/Source/C/BrotliCompress/enc/static_dict_lut.h deleted file mode 100644 index 88f8b342eabd..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h +++ /dev/null @@ -1,5864 +0,0 @@ -/* Copyright 2015 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Lookup table for static dictionary and transforms. */ - -#ifndef BROTLI_ENC_STATIC_DICT_LUT_H_ -#define BROTLI_ENC_STATIC_DICT_LUT_H_ - -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -typedef struct DictWord { - /* Highest bit is used to indicate end of bucket. */ - uint8_t len; - uint8_t transform; - uint16_t idx; -} DictWord; - -static const int kDictNumBits =3D 15; -static const uint32_t kDictHashMul32 =3D 0x1E35A7BD; - -static const uint16_t kStaticDictionaryBuckets[32768] =3D { -1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0,23,0,0,2= 5,0,29, -0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0,0,0,0,0,96,0,97,0,98,0= ,0,0,0, -0,0,0,99,101,106,108,0,0,0,0,0,110,0,111,112,0,113,118,124,0,0,0,0,0,125,= 128,0,0 -,0,0,129,0,0,131,0,0,0,0,0,0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,= 0,0,0,0 -,0,142,143,144,0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,= 0,0,0,0 -,0,0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188,18= 9,0,0, -192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0,224,0,0,0,225,0= ,0,0,0, -0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,2= 46,0,0, -249,251,253,0,0,0,0,0,258,0,0,261,263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0= ,0,0,0, -271,0,0,0,0,0,0,272,0,273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0= ,295,0, -0,296,297,0,0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0= ,328, -329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349,351,0= ,0,355, -0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,373,0= ,375,0, -0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0,0,400,0,0,408,0,0,0,0,420,0,0= ,0,0,0, -0,421,0,0,422,423,0,0,429,435,436,442,0,0,443,0,444,445,453,456,0,457,0,0= ,0,0,0, -458,0,0,0,459,0,0,0,460,0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470= ,0,0,0, -474,0,476,0,0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,5= 01,0,0, -0,505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529,530= ,0,0,0, -534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0,0,0,0,0,561,0,5= 64,0,0, -0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0,0,0,625,0,0,626,627,0,0,6= 28,0,0, -0,0,630,0,631,0,0,0,0,0,0,0,0,0,641,0,0,0,0,643,656,668,0,0,0,673,0,0,0,6= 74,0,0, -0,0,0,0,0,0,682,0,687,0,690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707= ,710,0, -711,0,0,0,0,726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,7= 67,0,0, -0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785,788,0,0= ,0,0, -790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834,0,0,835,0,0,0,8= 41,0, -844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0,877,890,0,0,0,0,0,0,0,0= ,893, -894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,0,0,900,904,906,0,0,0,907,0,9= 08,909, -0,910,0,0,0,0,911,0,0,0,0,0,916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0= ,0,944, -0,953,954,0,0,0,0,0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0= ,0,0, -984,0,0,985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,9= 96,0,0, -0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0,0,0,0,0= ,1011,0 -,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0,0,0,1024,0,0,0,0= ,0,0, -1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0,1034,0,0,0,1037,1040,0,0= ,0,1042 -,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058,0,0,1060,0,0,0,0,0,0,0,1061,0,0= ,1062,0 -,0,0,0,1063,0,0,0,0,1064,0,0,0,0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070= ,1072,0 -,0,0,0,0,0,1073,0,1075,0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,109= 4,0, -1095,0,1107,0,0,0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,= 0,1132, -0,0,0,0,0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1= 153,0,0 -,0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0,1171= ,1172,0 -,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0,1195,0,0,1221,0,= 0,1224, -0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0,0,0,0,0,1231,0,0,0,1233,0= ,0,1243 -,1244,1246,1248,0,0,0,0,1254,1255,1258,1259,0,0,0,1260,0,0,1261,0,0,0,126= 2,1264, -0,0,1265,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,= 0,0, -1291,1292,1293,0,0,1294,1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1= 311, -1312,0,1314,0,1316,1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0= ,0,0,0, -1341,1342,0,1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,= 0,1366, -0,0,0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0,1410,0,0,0,141= 2,1413, -1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0,0,0,0,0,0,1456,0,0,0,0= ,1459, -1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0,1481,0,0,1486,0,0,1495,0,0,0,149= 6,0,0, -1498,1499,1501,1520,1521,0,0,0,1526,0,0,0,0,1528,1529,0,1533,1536,0,0,0,1= 537, -1538,1549,0,1550,1558,1559,1572,0,1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1= 579,0, -1599,0,1603,0,1604,0,1605,0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,= 1618,0, -1619,0,0,1622,0,0,0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0= ,0,0, -1650,0,0,1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664= ,0,0, -1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682= ,0,0, -1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0,1737,0,0,= 0,0, -1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745,0,0,0,1749,0,0,0= ,1751,0 -,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0,1785,1787,0,0,0,0,1788,1789= ,0,0,0, -0,1790,1791,1793,0,1798,1799,0,0,0,0,1801,0,1803,1805,0,0,0,1806,1811,0,1= 812, -1814,0,1821,0,0,0,0,0,1822,1833,0,0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1= 859,0,0 -,0,0,1861,0,0,0,0,0,0,0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,= 0,1931, -0,0,0,0,1932,0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957= ,0,1958 -,0,0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0,= 0,0,0,0 -,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988,0,0,0,0,1= 990, -2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016,2017,0,0,0,0,20= 21,0,0, -2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2043,0,0= ,0,0,0, -2045,0,0,0,0,0,0,0,2046,2047,0,2048,2049,0,2059,0,0,2063,0,2064,2065,0,0,= 2066,0, -0,0,0,0,0,2069,0,0,0,0,2070,0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,= 0,2085, -0,2086,2088,2089,2105,0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,= 0,2123, -0,0,2125,2127,2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0= ,2144, -2145,0,0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2= 161, -2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0,= 0,2237, -0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0,2252,0,0,2= 253,0,0 -,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0,0,0,0,2269,2270,0,0= ,0,0,0, -0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0,2278,0,0,0,0,2279,0,2280,0,2283,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,= 2292,0, -0,0,2293,2295,2296,0,0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,23= 07,0,0, -0,0,0,0,0,0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0= ,2324,0 -,2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382= ,2386,0 -,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0,2399,2402= ,2404, -2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2416,2417,2419,= 0,2420, -0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,2427,2428,0,2429,0,0,24= 30,2434 -,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0,0,2446,2457,0,2459,0,0,2462,0,2464= ,0,2477 -,0,2478,2486,0,0,0,2491,0,0,2493,0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524= ,0,0,0, -0,0,0,2528,2529,2530,0,0,2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2= 539, -2540,0,0,0,2545,2546,0,0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,25= 57,0, -2560,0,0,0,0,0,0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,= 2579,0, -0,0,0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,= 0,0,0,0 -,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0,2615= ,0,0,0, -2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0,2623,0,2625,0,0= ,2628, -2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0,2643,0,2644,0,2649,0,= 0,0,0,0 -,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0,0,0,2659,0,0,0,0,2664,2685,0,2= 687,0, -2688,0,0,2689,0,0,2694,0,2695,0,0,2698,0,2701,2706,0,0,0,2707,0,2709,2710= ,2711,0 -,0,0,2720,2730,2735,0,0,0,0,2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2= 749,0,0 -,0,0,0,2750,0,0,2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,= 0,0,0,0 -,2764,2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,277= 2,0,0,0 -,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0,0,0,0,0= ,0,0, -2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0,2803,0,0,0,0,280= 6,0, -2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823,0,0,0,0,0,0,0,2824,0= ,0,2828 -,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,2841, -0,0,0,2842,0,0,0,0,0,2843,2844,0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,= 0,0, -2857,0,0,0,0,2858,0,2859,0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,287= 7,2878, -2884,2889,2890,0,0,2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2= 916,0, -2934,0,0,0,0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2= 949,0,0 -,2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,296= 6,2967, -0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0,2989,0,= 0,2990, -0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0,3002,0,0,0,3003,0= ,0,3012 -,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0,0,0,3034,3035,0,0,3036,0,= 3039,0, -3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0,0,0,0,3057,0,3058,0,0,0,0,0,0,0,0= ,3063,0 -,0,3073,3074,3078,3079,0,3080,3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3= 099,0,0 -,0,3100,0,3101,3102,0,3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,31= 36,0,0, -0,0,0,0,0,3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,= 0,3161, -0,0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,318= 4,0,0, -3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0,0,3216,32= 17,0,0, -0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225,3226,0,3228,3233,= 0,3239, -3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0,3260,0,0,3261,0,0,0,326= 7,0,0,0 -,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0,3284,0,0,0,3285,3286,0,0,0,0,0,0,= 0,3287, -3292,0,0,0,0,3294,3296,0,0,3299,3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,= 0,0,0,0 -,3308,0,0,0,0,0,0,0,0,0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,= 0,0,0,0 -,0,3319,0,0,0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,= 3328, -3329,3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,= 0,0,0,0 -,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0,3368,33= 69,0, -3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0,0,0,0,0,0,0,= 3402,0, -3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0,0,3450,0,0,0,0,0,0,0= ,3451,0 -,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0,0,0,0,0,0,0,0,0,3460,0,0,346= 9,3470, -0,0,3475,0,0,0,3480,3487,3489,0,3490,0,0,3491,3499,0,3500,0,0,3501,0,0,0,= 3502,0, -3514,0,0,0,3516,3517,0,0,0,3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,= 0,0, -3531,0,0,0,0,3536,0,0,0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3= 550,0, -3553,0,0,0,0,0,0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,= 0,0,0, -3599,0,0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,= 0,0,0, -3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0,0= ,0,0,0, -3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656,3657,0,0,0,0= ,0,3658 -,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0,3694,3696,0,0,0,0,0,0,= 0,0,0,0 -,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3700,0,0,3701,0,0,0,3708,3709,0,0= ,0,3711 -,3712,0,0,0,0,0,3723,0,3724,3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,37= 35,3737 -,0,0,0,3743,0,3745,0,0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,= 0,0,0,0 -,3769,0,0,3771,0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,378= 8,3789, -0,0,0,0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0= ,3821,0 -,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0,3859,0,= 3860, -3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886,0,3887,0,0,0,= 0,3892, -3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0,0,0,0,3943,0,0,0,394= 4,0,0,0 -,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0,0,0,0,0,3958,0,3959,3965,0,0,0= ,0,3966 -,0,0,0,3967,0,0,0,3968,3974,0,0,0,0,0,3975,3977,3978,0,0,0,0,3980,0,3985,= 0,0,0,0 -,0,0,0,0,3986,4011,0,0,4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,402= 3,0,0,0 -,4027,4028,0,0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,40= 59,0, -4060,4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,= 0,0, -4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104,0,0= ,0,4105 -,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128,4132,4133,0= ,4134,0 -,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148,0,0,4311,0,0,0,431= 4,4329, -0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0,0,4337,0,0,0,4342,4345,43= 46,4350 -,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0,4369,0,0,0,4373,0,4374,0,0,0,0,= 4377,0, -0,0,0,4378,0,0,0,4380,0,0,0,4381,4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0= ,0,4386 -,0,0,0,4391,4398,0,0,0,0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418= ,0,4427 -,4428,4430,0,4431,0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,445= 6,0,0,0 -,0,0,0,0,4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0= ,0,4470 -,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484,0,0= ,0,0,0, -0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0,4524,0,4525= ,0,4527 -,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0,0,0,0,4535,0,0,0,45= 36,0,0, -0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0,4550,4551,0,4553,0,0,0,0,45= 62,0,0, -4571,0,0,0,4574,0,0,0,4575,0,4576,0,4577,0,0,0,4581,0,0,0,0,0,4582,0,0,45= 86,0,0, -0,4588,0,0,4597,0,4598,0,0,0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4= 621,0, -4624,0,0,0,0,0,4625,0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0= ,0,0,0, -4673,4676,0,0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,= 4706,0, -0,4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721,= 4729, -4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0,4745,47= 46,4747 -,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 0,4751, -4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799,4806,4807,0,0,0,0,4809,4810,= 0,0,0,0 -,0,0,4811,0,0,0,0,0,4812,0,4813,0,0,4815,0,4821,4822,0,0,0,0,4823,0,0,0,0= ,0,0,0, -0,0,0,4824,0,0,0,0,4826,0,0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855= ,4858,0 -,0,0,0,0,4859,0,4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,= 0,0,0,0 -,4883,0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0= ,4915,0 -,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0,0,0,= 0,0, -4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0,0,5019,5= 020, -5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0,0,0,5029,5030,= 5031,0, -5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0,0,0,0,5038,0,0,5039,0,= 0,0, -5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057,0,0,0,5060,0,0,0,0,0,5063,= 0,5064, -5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0= ,0,0,0, -0,5077,0,0,5078,5080,0,0,5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,= 5101, -5105,5107,0,5108,0,5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5= 122,0,0 -,5130,0,0,0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5= 159, -5161,0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0= ,5172,0 -,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0,0,0,0,= 5203,0, -5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0,0,0,0,0,0,0,521= 8,5219, -0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0,0,0,5258,0,5260,5270,0,= 5277,0, -0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0,5284,0,5285,0,0,0,0,0,5287,5288,0= ,0,0,0, -0,0,0,0,0,0,5289,5291,0,0,5294,0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,= 5308,0, -5309,0,0,5310,0,0,0,0,5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,= 0,0,0,0 -,0,5325,0,0,0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,= 5340,0, -0,5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0,= 0,0,0, -5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367,0,5373,= 0,0,0, -5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0,0,5387,0,0,0,0,0= ,0,5388 -,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0,5397,5402,0,0,0,0,0,5403,0,= 0,0, -5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406,0,0,0,0,5410,0,0,5411,0,5415,0,0,0= ,0,5416 -,5434,0,0,0,0,0,0,0,0,0,0,0,5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,= 5444, -5447,0,0,5448,5449,5451,0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,= 0,0,0,0 -,0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0,0,0= ,5489,0 -,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0,0,5516,5517,= 0,5518, -0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543,0,5544,0,0,5545,0,5= 547,0, -5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0,5571,5573,0,5574,0,5575,0,0,= 0,0, -5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600,5609,0,0,0,0,5610,0,0,5612,0,5624,0,= 5625,0, -0,0,5629,0,5641,0,5642,5643,0,0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,= 5678,0, -5679,0,0,0,0,5685,5686,0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,= 5707,0, -0,0,0,0,0,5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,575= 1,0,0,0 -,0,0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0,= 5763, -5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0,0,0,= 0,5784, -0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5799,0,= 0,5801, -0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0,0,0,0,0,5830,5831,0,0,5832,0= ,0,5833 -,0,5835,5844,5845,0,5846,0,0,0,0,0,5850,0,0,0,0,0,5852,0,5855,5857,0,0,58= 59,0, -5861,0,0,5863,0,5865,0,0,0,5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,588= 9,5891, -0,5894,0,0,0,0,0,0,5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,59= 22,5924 -,0,5927,5928,0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0= ,0,5953 -,0,0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,599= 1,0, -5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008,0= ,0,6009 -,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025,0,0,0,0,0= ,0,0,0, -0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0,6041,6045,0,0,6046,0,= 0,6053, -0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0,0,6064,0,6066,6071,6072,0,0,0= ,0,0,0, -6075,6076,0,0,6077,0,0,0,0,0,0,0,0,0,6078,6079,0,0,0,0,0,0,0,0,6080,0,608= 3,0,0,0 -,0,0,6084,0,0,6088,0,6089,0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6= 126,0,0 -,0,6129,0,0,0,0,6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,= 6146, -6151,6153,0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,= 6206,0, -6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235,624= 0,0, -6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0,0,0,62= 85,0,0, -0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0,0,6334,0,0,0,0,0,= 0,0, -6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369,0,0,0,6370,6371,6372,= 0,6373, -0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0,0,0,6386,0,6389,6397,6400,641= 1,0, -6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0,0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,= 6420,0, -6421,6423,6425,0,6429,6430,0,6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,= 6441,0, -0,6444,0,0,0,0,6446,0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461= ,0,0,0, -0,0,0,6462,0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0= ,0,6481 -,0,0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0,= 6498,0, -0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0,6514,0,0,0= ,0,0, -6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0,6524,6528,0,6530,0= ,0,6532 -,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590,0,6591,0,0,0,0,0,6592,0,0= ,0,0, -6593,6594,0,0,0,0,0,6599,6600,0,0,6601,6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,= 0,0, -6608,0,0,0,0,0,0,0,0,6610,6611,0,6615,0,6616,6618,6620,0,6637,0,0,0,0,663= 9,0,0,0 -,0,6641,0,6642,0,0,0,6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677= ,0,0,0, -0,0,0,0,0,0,6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6= 704, -6705,6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0= ,0,0, -6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0,6= 752, -6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764,6765,0,0,0= ,6770,0 -,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0, -6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0,0,6803,0,0,0,6804,0,0,0,6812,= 0,0, -6823,0,6824,6839,0,0,0,0,6852,0,0,6854,0,6856,6857,0,0,0,0,0,0,0,0,0,6867= ,0,6868 -,6870,6872,0,0,0,6873,6874,0,0,0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0= ,0,6879 -,0,6880,0,0,0,0,0,0,0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,= 6899,0, -0,0,0,6901,0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,69= 16,6919 -,0,0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935= ,0,6936 -,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948,6949,0,0,= 0,0,0,0 -,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0,0,0,6969,0,0,6970= ,6979,0 -,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0,6988,6990,6992,0,0,0,0,0,0,= 0,6995, -0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0,0,0,0,0,0,0,0,7021,0,0,7022,7023,7028= ,0,7030 -,7033,0,0,0,0,0,0,7038,0,0,0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0= ,0,0,0, -0,0,0,0,0,0,7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7= 067, -7069,0,7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,= 0,7090, -0,7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0,7110,0= ,7114,0 -,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124,0,7125,0,0,7126= ,0,0,0, -0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134,0,0,7139,0,7148,7150,0,= 0,0,0, -7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0,0,0,0,0,0,0,0,0,0,7163,7165,71= 69,0, -7171,0,0,0,0,0,0,0,0,0,7172,0,7173,7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,= 0,7201, -7204,0,0,0,0,0,7206,7207,0,0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,= 7232, -7233,7235,7237,0,0,0,0,7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0= ,7289,0 -,0,7290,7291,0,0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,= 0,0,0,0 -,0,0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0,73= 37,0, -7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358,7366,0= ,7367, -7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0,0,0,0,7378,0,7= 379, -7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399,7400,0,7401,0,0,0,0,= 0,0,0, -7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0,0,0,0,0,7421,7427,7429,0,0,0,7= 435,0,0 -,7436,0,0,0,7437,0,0,0,0,0,0,7438,7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,= 7456,0, -0,0,0,0,7457,0,0,7461,0,0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,746= 6,7472, -0,7476,0,0,7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0= ,0,0, -7513,7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,75= 31,0, -7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0,755= 0,0,0, -7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0,7574,7576,0,75= 78,7581 -,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0,0,7595,0,0,7600,7602,= 7610,0, -0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0,7620,0,7621,7622,0,7623,0,0,= 0,0, -7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0,0,0,0,7639,0,7640,7642,0,0,7643,= 0,0,0,0 -,7644,0,0,0,0,0,0,0,7645,0,0,0,0,0,7661,7662,7663,7665,0,7666,0,7667,0,76= 84,7688 -,7690,0,7691,0,0,0,0,0,0,7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,= 7722,0, -7724,0,0,0,0,0,0,7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741= ,7745,0 -,7748,0,0,0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7= 760,0,0 -,0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0,777= 8,7783, -0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799,0,7810,0,0,= 7813,0, -7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840,0,7842,0,7843,0,= 0,0,0, -7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858,7862,0,7865,0,0,7866,0,0= ,7913,0 -,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,= 7921, -7922,0,7924,0,0,7925,0,0,7927,0,7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,794= 0,0,0,0 -,0,0,7941,0,0,0,0,7945,0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0= ,0,0, -7968,0,0,0,0,7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,800= 7,8008, -0,0,0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029,= 0,0, -8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0,8043,8052= ,8059, -8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0,8080,8081,0,8089= ,0,0,0, -0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0,8111,0,0,0,0,0,8112,8115,0,8= 117,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120,8121,8122,8128,8129,8130,8131,0,0,8139,= 0,0, -8144,0,0,0,0,8145,8146,8153,0,0,0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,= 8165,0, -0,0,0,8166,8167,0,0,8179,0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,= 0,0, -8204,0,0,0,0,8210,0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0= ,0,0,0, -0,0,8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233,= 0,0, -8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0,8264,8= 265,0,0 -,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0,8279,8283,0,0,82= 85,8286 -,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0,0,0,8304,8307,0,0,0,0= ,0,0,0, -8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332,8338,0,0,8340,0,0,0,0,0,8350= ,0,0, -8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,83= 77,0,0, -0,0,8380,0,0,0,8383,0,8384,0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,= 8397,0, -8398,0,8399,0,0,0,0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423= ,0,0,0, -0,8424,0,0,8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,= 0,0,0,0 -,8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0,8= 481, -8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0,8528,0,= 0,0,0,0 -,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0,8545,0,8557,0,0,856= 9,8570, -0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0,0,0,0,0,0,0,8606,0,8607,0= ,0,0,0, -0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0,0,0,8611,0,0,8613,8617,8621,0,0,8622= ,0,8623 -,0,8624,8625,0,0,0,0,0,0,0,0,0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655= ,0,0,0, -0,0,0,0,0,0,0,8656,0,0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,= 8669,0, -0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0,0,0,= 0,0,0,0 -,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737,8739,0,0,0,0= ,8742, -8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0,0,0,0,8762,8763,876= 4,0, -8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0,8781,0,0,8783,0,0,0,0,= 0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0,0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0= ,0,8788 -,8790,0,0,0,8803,0,8813,8814,0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,882= 2,8828, -8829,0,8831,0,0,0,0,8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,= 0,0, -8838,8839,0,0,0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0= ,0,0,0, -8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0,887= 5,0, -8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0,0,8911,89= 12,8913 -,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0,8929,0,0,0,0,0,0,0,= 0,0,0, -8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0,8949,0,8950,0,8954,8957,0,0,89= 70,0,0, -0,0,8971,0,8996,0,0,0,0,8997,9000,0,0,0,0,9001,9002,0,9004,9009,9024,0,0,= 0,0,0,0 -,0,0,0,0,0,0,9027,9082,0,0,9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093= ,0,9095 -,0,0,9096,9097,9101,9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0= ,9121, -9122,0,0,0,9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,= 0,9136, -0,9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0,9177,0,0,0= ,0,0,0, -0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191,0,0,0,9193,0,0,0,0,= 9197, -9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0,0,0,0,9221,9222,9223,0,92= 24,9225 -,0,0,9227,0,9228,9229,0,0,9230,0,9232,0,9233,0,0,0,0,0,9234,9235,0,0,9237= ,0,0,0, -0,0,0,0,0,9238,9240,0,0,9241,0,0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,= 0,9248, -0,0,0,9249,0,0,0,0,0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0= ,0,0, -9257,0,0,9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,= 0,0,0,0 -,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0,9280= ,0,0, -9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313,9321,9322,0= ,9326, -9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0,0,0,0,0,0,0,0,948= 5,0,0, -9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493,0,9495,9496,0,0,0,0,0,0,0,= 0,9500, -0,9502,0,0,0,0,0,9504,9507,0,9509,0,9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,= 0,0,0,0 -,0,9516,9517,0,0,0,0,9532,0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,= 0,9542, -0,0,0,0,0,0,0,0,9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,= 0,9558, -0,9561,0,9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0= ,9600,0 -,9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645,= 9646,0, -0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0,0,9656,0,96= 57,0,0, -0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0,0,0,0,0,0,0,0,0,0,9= 671,0, -9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686,9698,0,0,9700,9701,9702,0,9= 703, -9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0,0,9728,0,9742,0,9744,0,0,0,9750= ,0,9754 -,9755,0,0,0,0,0,9756,0,9757,9768,0,9769,0,0,0,9770,9771,0,9773,0,9774,0,9= 775,0,0 -,0,9776,9777,9784,0,0,0,9786,0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,= 0,9811, -0,0,0,0,0,0,0,0,0,0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9= 836,0,0 -,0,9840,0,0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9= 856, -9863,9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,988= 6,0,0,0 -,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0,9910,0= ,0,0,0, -9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0,0,0,0,9930,0,0,0= ,9931,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0,9940,9962,9966,0,9969,9970,0= ,0,9974 -,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0,0,9987,0,0,0,0,0,0,0,9988,9993,0,0= ,9994,0 -,0,0,9997,0,10004,0,0,0,0,0,10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0= ,10032, -0,0,10034,0,10036,0,0,0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043= ,0,0,0, -0,0,10045,10054,0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0= ,0,0, -10060,0,0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0= ,10084, -0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0,10103= ,0, -10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0,0,10127,1= 0128,0, -0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0,10156,0,10158,1= 0159, -10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177,0,0,0,0,10178,0,0= ,0,0, -10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207,0,0,0,0,10209,0,0,0,0= ,0,0,0, -10213,0,0,0,0,0,0,10217,0,10229,0,10230,10231,0,0,10232,0,0,10237,10238,1= 0244,0, -0,0,0,0,10250,0,10252,0,0,0,0,0,0,10255,0,0,10257,0,0,0,0,0,0,10258,0,102= 59,0,0, -0,0,0,0,0,0,10260,0,0,0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0= ,0,0,0, -10297,0,0,0,0,0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0= ,10308, -0,0,0,0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326= ,0, -10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338,0= ,0,0,0, -0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0,10368,0,10369= ,0,0,0, -10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0,10386,10388,10390,0,0= ,0,0,0, -0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0,10403,0,0,0,0,0,0,0,0,10404= ,0, -10405,10410,0,0,10411,0,10412,0,0,0,0,0,0,0,10421,10422,10423,0,0,0,0,0,0= ,0,0,0, -10425,0,0,10427,0,0,10430,0,0,0,0,0,10432,0,10433,10434,0,0,0,0,10436,104= 37,0, -10438,0,10439,0,10444,10446,0,0,0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0= ,10451, -0,10453,0,0,0,10454,10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0= ,0, -10482,10483,0,10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,105= 21, -10524,0,0,10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0= ,0,0,0, -0,0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0,1= 0562, -10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0,10578,0= ,0,0,0, -0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0,0,0,0,10598,0,0= ,10601, -0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0,10626,0,10627,0,0,0,0,0,1= 0629, -10630,10631,0,0,0,10646,0,0,0,10647,0,10650,0,10651,0,0,0,10652,10653,106= 55,0, -10658,0,0,10659,0,10667,0,0,0,0,10669,0,0,0,0,0,0,0,0,0,10670,0,0,0,10671= ,0,0,0, -0,10672,10673,0,10674,0,0,0,10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,1= 0697,0, -0,0,0,10698,0,0,0,10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,107= 15, -10718,10720,0,0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727= ,10730, -10743,0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,107= 52, -10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0,0= ,0,0, -10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0,10789,0,0,0= ,10791, -0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0,0,10810,0,0,0,10812= ,0,0, -10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816,10817,0,0,0,0,10819,0,10820,0= ,0,0,0, -10821,10822,10823,0,10826,10849,0,0,0,0,10850,0,0,10852,0,10853,0,0,10856= ,0,0, -10857,10858,10859,10860,0,0,0,0,0,0,10863,0,10866,10867,10872,10890,0,0,1= 0891, -10892,0,0,0,0,0,10893,0,0,0,10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0= ,0,0,0, -0,0,0,0,0,0,0,0,10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0= ,0,0, -10917,0,10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0= ,10932, -0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0,0,109= 58,0, -10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0,0,0,10968,0= ,0,0, -10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984,10987,0,0,10988,0= ,10989, -0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0,0,10996,10997,0,0,0,10998= ,0, -10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013,11016,11017,0,0,11019,11020= ,11021, -0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0,11023,11029,0,0,0,0,11031,0,0,0,11034,0= ,0,0,0, -11055,0,0,0,0,0,11056,11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,1= 1069,0, -11085,0,0,0,0,0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0= ,0, -11097,11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0= ,11131, -0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11148= ,0, -11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160,0,0,0= ,0,0,0, -0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0,11176,0,0,0,0,0= ,11182, -11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0,0,11194,0,0,0,0,0,0,0,1= 1200, -11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0,11205,0,0,0,11206,0,11207,0,0,1= 1209,0, -11211,0,11214,0,0,11231,0,0,0,11293,11295,0,0,11296,11297,11302,0,0,0,113= 07,0,0, -0,0,11309,11310,0,11311,0,0,0,11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,1= 1339,0, -0,0,0,0,11340,0,11341,11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0= ,0,0, -11355,0,0,0,0,0,0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377= ,0,0, -11378,11383,0,11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0= ,0, -11417,0,0,0,11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0= ,0,0,0, -0,11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463= ,0, -11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481= ,0,0, -11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0,11510,115= 11, -11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521,0,0,0,0,0,0,0= ,0,0,0, -0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547,0,11548,0,0,0,0,0,115= 52, -11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0,11561,0,0,11563,11564,0,11565= ,0,0,0, -0,11567,0,0,0,11569,0,11574,0,11575,0,0,0,11577,0,11578,0,0,0,11580,11581= ,0,0,0, -11582,11584,0,0,0,0,0,0,0,11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,115= 96,0, -11597,0,0,0,0,11598,11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,11603, -11604,0,11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0= ,0, -11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0,116= 46,0, -11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656,0,0,116= 77, -11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0,0,0,11716,0= ,11719, -0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745,11748,11750,0,0,0,0= ,0, -11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0,11759,0,0,0,0,0,0,11760,0,0= ,0, -11761,0,0,0,0,0,0,11766,11767,0,11772,11773,0,11774,0,0,11775,0,11777,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0= ,11785, -0,0,0,11786,0,0,0,0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835= ,11836, -0,0,11837,0,0,0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,1= 1872, -11874,0,0,0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0= ,0,0, -11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,1= 1918,0, -0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941,1= 1943, -11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0,11956,0= ,0,0,0, -0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978,0,0,0,11979,11980= ,11986, -11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999,12004,12005,12006,0,0,0= ,0,0, -12011,0,0,12012,12014,0,0,12015,0,0,12019,12028,0,0,12029,0,0,12032,12033= ,0,0,0, -0,12034,0,12041,12043,0,0,12044,0,0,0,0,0,0,0,12046,0,0,0,0,0,0,0,12054,1= 2055,0, -12056,0,0,0,12060,12064,0,0,0,0,0,12065,12067,12068,0,0,0,0,0,0,0,0,12074= ,0,0,0, -12075,12076,0,0,0,12079,0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,120= 92,0,0, -0,0,12097,0,0,0,0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,121= 04, -12111,0,0,12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0= ,0,0,0, -0,0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0= ,12144, -0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0,12175,0,0= ,0,0, -12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0,12186,0,0,0,0,0,121= 87, -12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0,0,0,0,12203,0,12209,0= ,0,0,0, -12210,12211,12212,12213,0,12217,12218,0,0,0,0,0,0,0,0,0,12222,0,0,0,0,0,0= ,0, -12223,0,0,12229,0,0,0,0,12233,0,0,0,0,12234,0,0,12236,12242,0,0,0,12243,0= ,0,0, -12244,12253,0,12254,12256,0,12257,0,0,12275,0,0,0,0,0,12277,0,0,0,0,0,122= 78,0, -12289,0,0,12290,0,12292,12293,0,0,12294,0,12295,0,0,12296,0,12297,0,12298= ,0,0,0, -0,12301,0,0,0,0,0,0,0,0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0= ,0,0,0, -0,0,12342,12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0= ,0,0, -12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12351,0= ,12355, -12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0,0,0,0,0,0,1= 2379,0, -12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0,0,12398,12403,0,0,1= 2404,0, -0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0,0,0,12412,0,0,0,0,12420,0,124= 21,0,0, -0,0,0,12423,0,12425,12429,0,0,0,12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434= ,0,0,0, -0,0,12435,12436,0,0,0,0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,124= 45,0,0, -0,12450,12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0= ,0,0, -12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0= ,12520, -0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528,0,0,0,12529= ,0,0,0, -0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0,0,0,0,0,12540,0,12548= ,0,0,0, -0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0,0,0,0,0,0,0,12555,0,0,12562,0= ,12565, -0,12566,0,0,0,0,0,0,0,0,0,0,0,0,12569,0,0,0,12571,12574,0,0,0,0,0,0,0,125= 77,0,0, -0,0,0,0,0,12578,12579,12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0= ,0,0, -12627,12646,0,12648,0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671= ,0, -12673,12677,0,0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,1= 2697,0, -12701,0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742= ,12743, -0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0,127= 73,0, -12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0,12825,0,1= 2836,0, -0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845,0,12846,0,0,0,0,1= 2847,0, -0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0,12856,0,12858,0,0,12859,0,1= 2862,0, -12863,0,0,12866,0,12869,12872,12873,0,0,0,0,0,0,0,0,0,12875,0,12877,0,0,1= 2878,0, -0,0,0,0,0,0,0,0,12884,12885,12888,0,12889,0,0,0,0,12893,0,0,0,12895,12896= ,12898, -0,0,0,0,0,0,0,12902,0,12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0= ,0,0, -12931,0,12932,12933,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0= ,12944, -0,0,0,0,0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,1= 2952,0, -12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0,0= ,0,0,0, -0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985,0,12986,1= 2996, -12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0,13017,0,0,0,1= 3020,0, -13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0,13024,13027,0,0,0,0,0,130= 28,0,0, -13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0,0,0,0,13040,0,0,13041,0,0,0,13043= ,13044, -13046,0,0,0,0,13047,0,0,0,0,0,0,0,13049,13054,0,13056,0,0,13060,13061,0,0= ,0,0,0, -13067,0,0,13068,0,13071,0,0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081= ,0, -13082,0,0,0,13085,0,0,0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,130= 99,0, -13100,0,0,0,13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0= ,13134, -0,0,0,0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0= ,0,0, -13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0,0,131= 90,0,0, -13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0,13219,13232,0,0= ,0, -13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0,13262,0,13272,0= ,0,0,0, -13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303,0,0,13305,0,13310,0,0= ,0, -13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0,0,0,13330,0,0,13331,0,133= 35,0,0, -13342,0,0,0,0,0,13343,0,13354,0,13362,0,13366,13367,13369,0,0,13371,13372= ,0, -13373,13374,0,13376,0,13380,13381,13386,0,13387,13388,0,13389,13391,13395= ,0,0,0, -0,0,13401,13409,0,13410,0,0,0,0,13420,0,0,0,0,0,13422,0,0,0,0,13423,0,0,0= ,0, -13425,0,0,0,0,0,13427,0,0,0,13428,0,0,13430,13438,0,13439,0,13445,0,13448= ,13449, -0,0,0,0,0,0,13451,0,13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465= ,13466, -13470,0,13471,13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,1= 3487,0, -13490,0,13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497= ,0, -13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0,1= 3540,0, -13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549,13555,0,0,0= ,13556, -13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0,0,0,0,0,0,13566,0,0= ,0,0,0, -0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0,0,13578,0,0,0,0,0,0,0,0,0,0,135= 81,0, -13586,0,13595,0,13600,0,0,0,0,0,0,0,0,13601,13603,0,13604,13605,13606,136= 07,0,0, -13617,13618,0,0,0,0,0,0,0,13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0= ,13634, -0,0,0,13638,0,0,0,0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,1= 3660,0, -0,13662,0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0= ,0,0,0, -13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0= ,0,0, -13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716,13717,0,0= ,13719, -13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,13734,0,13736,0,0,1= 3737, -13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0,0,13762,13763,0,13764= ,13765, -0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0,13769,0,0,13772,0,13775,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,13776,13778,13787,0,0,0,13797,0,13798,0,13801,0,1= 3804, -13806,0,0,0,0,13816,13817,0,0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,138= 38,0,0, -13839,0,13840,0,0,0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0= ,0,0,0, -13858,0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0= ,0,0,0, -0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889,138= 90,0,0, -13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0,13910,0= ,0,0, -13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920,0,0,0,13921,0= ,0, -13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0,13933,0,13934,0,0,139= 35,0, -13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0,13957,0,13967,13969,0,0,0,0,0= ,0,0,0, -0,0,0,0,13970,13990,0,13991,13994,0,13995,0,0,0,0,13996,0,0,13999,0,0,0,1= 4018,0, -14019,0,14021,0,0,0,0,0,0,14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0= ,14048, -14049,0,0,0,0,0,0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0= ,14067, -0,0,0,0,0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,140= 86, -14087,14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,1= 4102,0, -0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0,0,0= ,0,0,0, -14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122,14127,0,141= 28, -14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0,14149,0,14151= ,0,0,0, -14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156,14157,0,0,14159,0,14161,0= ,0,0,0, -14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0,0,0,0,14174,0,0,14176,0,0,14178,0= ,0, -14179,14181,0,0,14182,14185,14187,0,14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0= ,0, -14198,0,0,0,0,0,0,14199,14200,0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0= ,14231, -0,0,0,0,0,0,0,0,0,14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,142= 47,0, -14250,0,0,14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,142= 67, -14269,0,0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0= ,0,0, -14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0,1= 4307,0, -14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0,0,0,0,143= 18,0,0, -0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -14330,14331,0,0,0,0,14332,0,0,0,14333,0,0,14337,14340,0,14341,0,0,14342,0= ,14345, -14346,0,0,14347,0,14362,0,0,0,0,0,14364,14365,14371,0,14373,0,0,14374,0,1= 4379,0, -14400,0,0,0,0,0,14401,0,0,14405,0,14406,0,14408,14409,0,0,0,14417,0,0,144= 24,0,0, -0,0,0,0,0,0,0,14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,1= 4443,0, -0,0,0,0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,144= 67,0,0, -0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485,144= 86,0,0, -0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0,14501,0= ,0,0,0, -0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0,0,0,0,0,14515,1= 4526, -14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0,14552,0,0,0,14553= ,0, -14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0,0,14568,0,0,14569,0,0= ,0, -14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0,0,14582,0,0,0,0,0,0,0,0= ,0,0,0, -0,14583,0,0,0,0,0,14587,0,14588,0,0,14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,14601,0,0,14604,14605,14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,1= 4628,0, -0,0,0,14631,0,14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,1= 4642,0, -0,0,0,14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,1= 4665,0, -0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0,0,0= ,0, -14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705,14711,0= ,0,0,0, -0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721,14726,0,0,0,147= 28, -14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0,0,14740,14742,0,0,0= ,14744, -14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761,14762,14765,14771,0,14772= ,0, -14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0,14779,0,0,14782,0,0,14785= ,14786, -14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798,0,14803,14804,14806,0,0,0,14809,0= ,0,0,0, -0,0,14810,0,0,0,0,14811,0,14812,0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,1= 4818,0, -0,0,0,0,0,14819,0,14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0= ,0,0,0, -0,0,14830,0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873= ,0, -14876,0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,1= 4907,0, -14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0,0= ,14936, -0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0,0,14964,1= 4973,0, -0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0,0,0,0,0,15021,0= ,15022, -0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0,0,0,15035,0,0,0,0,0,150= 43, -15044,0,0,0,15045,15046,15048,15050,0,15065,0,0,0,0,15066,0,0,15075,15082= ,15084, -0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0,0,0,15089,0,0,0,0,15094,0,15096,0= ,15097, -0,15100,0,0,15102,0,0,0,0,0,0,0,0,15105,0,0,15106,0,15109,15113,0,0,0,151= 15,0, -15118,0,0,0,0,0,0,15119,0,0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,151= 31,0,0, -15134,0,15135,0,0,0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,151= 54, -15162,0,15169,15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,1= 5179,0, -0,0,0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0= ,0,0,0, -0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213,0,15214,0= ,0,0,0, -0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0,15250,15251,0,0,0= ,0,0,0, -0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0,0,15277,15279,0,0,0,15280= ,15281, -15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0,15291,0,0,0,0,0,0,0,15296,15297,0= ,0, -15304,0,0,0,0,15306,0,0,0,0,0,0,15307,15308,0,15309,0,0,15311,0,0,15312,1= 5313,0, -0,0,0,0,0,0,0,0,0,0,0,15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,153= 34,0, -15335,0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,1= 5348, -15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0,0,0= ,0,0,0, -15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0,0,0,0,0,0,0= ,0, -15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0,0,0,15402,0,15405= ,15410, -0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0,15428,0,15435,0,0,15438,0= ,0,0,0, -15439,0,0,0,15440,0,0,0,15441,15449,15451,0,0,0,0,0,0,0,15452,0,0,15455,0= ,0,0, -15456,0,0,15458,0,15460,15461,0,0,0,0,0,15462,15464,0,15465,0,0,15466,0,0= ,15467, -0,0,0,0,0,15468,0,0,0,0,15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0= ,0, -15488,0,15492,15498,0,0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0= ,0, -15524,0,15525,15526,0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0= ,15554, -0,15555,0,15557,15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,15586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0,1= 5593, -15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0,0,15601= ,0,0,0, -0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0,15613,0,0,15615,156= 17, -15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0,0,15650,0,0,15651,0,0= ,0, -15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0,0,0,0,0,15669,0,0,15674,0= ,0, -15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0,0,15677,0,0,0,0,15678,0,0,0,0,0,1= 5679,0, -0,15681,0,15686,0,0,0,0,15687,0,15688,0,0,15690,0,0,0,15697,0,15699,15700= ,0,0,0, -0,0,0,0,0,0,15701,0,15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,1= 5716,0, -15717,0,15718,15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,157= 45, -15746,0,0,15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,1= 5759,0, -0,0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785,157= 90, -15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818,0,0,0,1= 5819,0, -0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829,15831,0,15832,0,0,1= 5833,0, -15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0,15844,0,0,0,0,15845,15851,1= 5856,0, -0,0,0,0,0,0,15858,15860,0,15861,0,0,0,15864,0,0,0,0,15865,0,0,0,0,0,0,158= 66,0, -15872,0,0,15876,0,0,0,0,15877,15878,15883,15885,0,0,15888,0,0,0,0,0,15889= ,15890, -0,0,0,0,0,0,0,0,15892,0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,1= 5897,0, -15898,15901,15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,1= 5950,0, -0,0,0,0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,1= 5981, -15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0= ,16000, -0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009,16011,0,16013,0= ,0,0,0, -0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026,0,16030,0,16032,0,160= 33,0,0, -0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0,0,0,0,16041,0,0,0,0,0,16043,1= 6044,0, -0,16047,0,0,0,16048,0,0,16049,16050,16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0= ,16056, -0,0,0,0,0,0,0,16058,16060,16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0= ,16069, -16078,0,0,0,16079,0,0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,1= 6089, -16093,0,16097,0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,162= 60, -16261,0,0,16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,1= 6274,0, -0,0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0= ,0,0,0, -0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0,16293,16295= ,16297, -0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0,0,16307,16308,16312= ,0,0,0, -0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0,0,0,0,16326,16333,16336,0,0= ,0,0, -16337,16340,0,0,0,0,0,16345,0,0,16346,0,0,0,0,0,0,0,0,0,16347,0,0,16348,0= ,0,0,0, -16349,0,0,0,16350,0,16357,0,0,0,0,16359,16360,0,0,0,0,16362,16363,16364,1= 6365,0, -0,16366,0,0,0,0,16367,16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,163= 78, -16379,0,16380,0,0,0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404= ,16406, -16407,0,0,0,16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424= ,0,0,0, -16428,16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0,16466= ,0,0,0, -0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485,0,0,0,0,0,0,1= 6489,0, -0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0,0,0,0,0,16506,0,0,0,165= 08, -16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516,0,16517,0,16519,0,16529,0,0= ,16531, -0,0,0,0,0,0,16534,0,0,16541,16542,0,0,0,0,0,0,0,0,0,16543,16547,16548,0,0= ,0, -16551,0,16552,0,0,0,16553,0,0,16558,0,0,16562,16565,0,0,0,16570,0,0,0,165= 73, -16585,0,0,0,16586,16587,16595,0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,16601,0,0,0,0,16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0= ,0,0, -16640,0,0,16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0= ,16653, -16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0,0= ,0,0, -16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696,0,0,0= ,16705, -0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0,0,0,16715,0,0= ,0,0, -16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0,0,0,0,0,0,0,16728,0= ,16729, -0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0,0,16734,16738,0,0,0,0,0,0,0,0= ,16743, -0,0,16745,0,0,0,0,0,16749,0,16752,0,0,0,0,16756,0,0,16758,0,16759,0,0,0,0= ,0, -16760,0,0,0,0,0,0,0,16762,0,16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0= ,0,0,0, -16781,0,0,16782,0,16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,1= 6809,0, -0,16814,16816,16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0= ,16841, -16851,16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0= ,0,0,0, -0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0,168= 89, -16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0,0,0,0,0= ,16913, -0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0,16940,16941,0,0,0= ,16942, -16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0,16965,0,16969,0,0,16975= ,0,0, -16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0,0,0,0,16990,0,0,16991,0,0,0= ,16993, -0,16994,16996,17000,0,0,0,0,0,17002,17004,0,17006,0,0,17007,0,0,0,0,17008= ,17013, -17014,0,0,0,0,0,0,0,0,0,17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,1= 7039,0, -17045,0,0,17046,17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0= ,17055, -0,0,0,0,0,17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0= ,0,0,0, -0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0,0,0,17092,0,0,0,0= ,0,0,0, -0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0,17105,0,17107,0,0,0,0,17114= ,0,0,0, -0,0,17115,17125,17127,0,0,17128,0,0,0,17129,17130,0,17131,0,0,0,0,0,17132= ,17135, -17145,0,0,0,0,0,0,0,0,17146,0,17147,0,17148,0,0,0,0,0,0,17149,17150,0,171= 51, -17153,0,17155,0,0,0,0,17163,17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0= ,0,0,0, -0,17186,0,0,17188,0,0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,171= 95, -17196,17203,17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0= ,17221, -0,0,17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,172= 48,0,0, -17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273,0= ,17295, -0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0,0,17318,0,0,0,0,0,0= ,0, -17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350,17351,0,0,17353,0,0,173= 54,0,0, -0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356,17357,0,0,17359,0,0,0,17371,0,17372= ,0,0,0, -17393,0,0,0,0,17394,0,0,0,0,0,17395,0,0,17399,0,0,0,17401,17417,0,17418,0= ,17419, -0,0,0,0,0,17422,17423,0,0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,1= 7437,0, -0,17441,0,0,17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0= ,0, -17468,0,0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0= ,17485, -0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0= ,0, -17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515,0= ,0,0, -17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528,0,0,0,175= 34,0,0, -0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,17556, -0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0,0,0,0,17564,0,0,17565,17566= ,0, -17567,0,0,0,0,0,0,17569,17570,0,17575,0,0,0,0,0,0,0,0,0,0,0,17581,0,0,0,1= 7582, -17583,0,17586,0,0,17587,0,0,0,0,0,0,0,17588,0,0,0,0,17596,17597,0,0,17598= ,17600, -0,0,0,0,0,0,17601,0,0,0,17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0= ,0, -17631,17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640= ,0,0,0, -0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0,0,0,0,0= ,0, -17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0,17669,17671= ,17673, -0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0,17720,17722,17726,0,0= ,17728, -0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0,17735,0,0,0,0,17737,0,0,0,0,1= 7739,0, -0,0,17741,17742,0,0,0,0,17743,17744,17745,0,0,0,17749,0,17750,17751,17752= ,17754, -17761,17762,0,17763,0,17766,0,17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0= ,0, -17777,0,0,17778,17779,0,17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0= ,0, -17821,0,0,0,17822,0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0= ,17845, -0,0,0,17846,0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,1= 7861,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0,1= 7879,0, -0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0,0,0,1= 7954,0, -0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976,17978,0,0,17983,0= ,0,0,0, -18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0,0,0,0,18010,0,0,0,0,0,0,180= 12,0,0, -18014,0,0,0,18015,0,0,0,18016,0,18017,0,0,0,18030,0,0,0,0,0,0,0,18031,0,0= ,18036, -18037,18038,0,0,18049,18056,0,18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0= ,0,0,0, -18064,0,0,0,0,0,0,0,0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0= ,0,0,0, -0,0,0,0,18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113= ,0,0, -18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124,0= ,0,0,0, -18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0,0,0,0,181= 51, -18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172,18183,0,18184= ,0,0,0, -0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0,18189,0,0,18190,0,0,18191= ,18192, -0,0,18194,18195,18196,0,0,0,18197,0,18203,0,18204,0,0,0,0,18205,0,0,0,182= 07, -18208,0,0,18214,0,0,0,18215,18216,0,0,0,18220,0,0,18222,0,0,0,0,0,18223,0= ,18225, -18231,0,18234,0,18235,0,0,0,0,18240,0,0,18241,18242,0,0,0,0,0,18243,18251= ,0, -18253,0,18254,0,0,0,18266,0,0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0= ,0,0,0, -0,0,0,0,0,0,18282,0,18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,182= 90,0,0, -0,0,18308,0,0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315= ,0,0, -18316,18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0= ,0, -18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0,0= ,18357, -0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437,18444,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0,0,0,18453,0,0,0,0,0,1= 8455,0, -0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0,0,0,0,0,18466,0,0,18467,0,0,0= ,0, -18473,0,0,0,18476,0,18477,0,0,0,18478,18479,18480,0,0,0,18485,0,0,0,18486= ,0,0,0, -0,0,0,18488,18490,0,0,0,0,0,0,18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0= ,18505, -0,18521,0,18522,18523,0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,185= 33,0, -18534,0,0,0,0,0,0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543= ,0, -18546,0,0,0,0,18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0= ,0,0,0, -18586,0,0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0= ,0,0, -18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0= ,0,0,0, -18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0,0,0,186= 28,0,0, -0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635,18637,0,0,0,0,0,0= ,18641, -18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0,18657,0,0,18666,18674,0= ,0,0,0, -18677,18684,18685,0,0,18686,0,0,18690,0,0,0,0,0,0,0,18695,18696,0,0,0,0,0= ,0,0,0, -0,0,18697,0,0,18700,0,0,0,0,0,0,18702,0,18708,0,0,18709,0,18710,0,0,18711= ,0, -18714,0,0,18718,0,0,0,0,0,0,18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0= ,0,0, -18731,0,0,0,0,0,18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,1= 8753,0, -0,18754,18763,0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779= ,18781, -0,0,18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,188= 01, -18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0,18827= ,18829, -0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0,18841,0,18842,0= ,0,0,0, -18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0, -18848,0,0,0,18853,18860,0,0,18862,18866,0,0,18867,18869,0,0,18874,18881,1= 8891,0, -0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0,0,0,18895,0,18896,0,0,0,18900,0,0,0,1= 8901,0, -18902,18915,18916,0,0,0,0,0,0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929= ,0,0,0, -0,18930,0,0,0,0,0,0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,1= 8958,0, -0,0,0,18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,1= 8967,0, -0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0,0= ,18981, -0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006,0,0,0,0,0= ,0, -19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039,0,19041,190= 50,0,0, -0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0,19093,19094,0,0,0= ,0, -19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0,19103,0,0,0,0,0,0,0= ,19111, -0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121,19122,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,19123,19124,0,0,0,0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0= ,0,0,0, -19129,19130,19131,19132,0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,1= 9182, -19185,0,0,19187,0,0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0= ,0,0,0, -0,0,0,19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205= ,19210, -0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233,192= 39,0,0, -0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0,19261,0,1= 9266,0, -0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0,19283,0,0,19284,0,0= ,19285, -19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291,0,19292,0,0,0,0,19297,0,192= 98,0,0, -0,0,19302,19303,0,0,0,0,19304,19305,0,0,0,0,19314,0,0,19315,0,0,19321,0,0= ,0,0,0, -0,0,19322,0,19333,0,19334,19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346= ,0,0, -19353,0,19354,19362,0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0= ,0,0,0, -0,19389,19390,0,0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,194= 13, -19422,0,19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0= ,0,0, -19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0= ,0,0, -19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0,19506,1= 9507,0, -0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547,19551,0,0,0,0,0,0,195= 52, -19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556,0,0,0,0,0,0,0,0,0,0,0,0,195= 60, -19561,0,0,19562,0,0,0,0,0,0,19565,19567,0,19568,0,0,0,19569,19570,0,19578= ,0,0,0, -0,19580,0,0,0,0,19581,19584,0,0,0,0,0,0,0,19585,19586,0,0,0,19587,19588,0= ,19589, -0,0,0,0,0,0,19592,19593,19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,1= 9610,0, -19613,19614,0,0,0,0,0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621= ,19631, -0,0,19632,19634,19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,196= 84,0,0, -0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0,19695,19697= ,0,0,0, -0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0,0,19704,19708,0,197= 10,0, -19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0,19720,0,19722,0,0,19725,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,19730,0,0,0,0,0,19731,0,19734,19735,19739,0,0,19740,0,197= 41,0,0, -0,19746,0,0,19747,0,19771,0,0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0= ,0,0,0, -0,19779,0,0,19780,19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0= ,0, -19799,0,0,0,19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0= ,0,0,0, -0,19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830,198= 31,0,0, -0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0,0,0,0,19845,0= ,0,0,0, -19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0,19854,0,0,0,0,0,0,0,0,0= ,19864, -0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0,19870,0,0,19871,0,0,19872,19873,1= 9875,0, -19880,19882,19884,0,0,19885,19886,19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,198= 92, -19893,0,0,19894,0,0,0,19895,0,19896,19902,0,0,19903,0,0,19905,0,0,0,19906= ,0, -19908,0,19909,19911,0,0,0,19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,1= 9942,0, -19943,0,19945,0,0,0,19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,199= 75,0, -19976,0,19990,0,0,19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,2= 0005,0, -20011,20012,0,0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024= ,0,0,0, -0,0,20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049= ,0,0, -20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062,0= ,20064, -0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0,0,0,0,0,0= ,0,0,0, -20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0,20080,0,20081,0,0,0= ,0,0,0, -20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0,0,0,0,20112,0,0,0,20113,20114= ,0,0,0, -20115,20123,20124,0,0,0,20131,20133,20134,0,0,0,0,20136,0,0,20137,20138,2= 0150,0, -20152,0,0,0,20153,0,0,20154,0,0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,2= 0166,0, -20168,0,20170,0,20175,0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,2= 0230,0, -20231,0,0,0,0,20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0= ,0, -20250,0,0,0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266= ,0,0,0, -20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0= ,0, -20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0,203= 07,0,0, -20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0,20315,20316,0= ,20322, -0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0,0,0,0,0,0,0,20362,0,0= ,20365, -0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378,20379,0,20380,0,0,20381,0,20382= ,0, -20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20390,20392,20393,0,0,20395,0,0= ,0,0,0, -20396,0,0,0,0,0,0,0,0,20398,20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0= ,20431, -0,0,20432,0,20433,20434,20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,204= 46,0,0, -0,0,20448,0,20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,204= 57,0, -20458,0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,204= 77,0,0, -20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0,0,0,2= 0499, -20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0,20540,0,0,0= ,20543, -0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0,20566,0,0,0,0,0,20589,0= ,0,0,0, -20590,0,0,20593,20594,0,0,0,0,20595,0,20597,20598,0,0,0,20618,20620,0,0,0= ,0, -20621,0,0,0,0,20627,0,0,0,0,0,20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0= ,0, -20707,0,0,20709,0,0,0,20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,207= 28, -20729,0,20733,0,20734,0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0= ,20749, -0,0,0,0,0,0,0,0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,2= 0766,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0,2= 0785,0, -0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811,0,208= 12,0,0, -0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0,20826,0,0,0,0= ,0,0,0, -20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840,20842,0,20843,0,20844= ,0, -20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0,20871,0,0,0,0,0,0,0,20873= ,0,0,0, -0,0,20876,0,0,0,0,0,20880,0,0,20882,0,0,0,0,20883,20884,0,0,20890,0,0,0,0= ,0,0,0, -0,0,20891,0,0,0,0,0,20905,0,20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0= ,20917, -0,20919,20920,20922,0,20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,2= 0941,0, -0,0,20943,0,0,0,20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,2= 0967,0, -0,0,0,0,20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995= ,0, -20998,0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,210= 17, -21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0,0,0,0,0,21039= ,0, -21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065,0,0,21066,210= 67,0,0, -0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078,0,0,0,0,21079,0,0,2= 1080, -21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0,21091,0,21093,0,21094,0,0,0,0= ,0,0,0, -0,21095,0,0,0,0,0,21096,0,21098,0,0,0,0,0,0,0,21099,0,0,21100,21101,21102= ,0,0,0, -0,0,21103,0,21104,0,0,0,0,0,21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0= ,21115, -21122,21123,0,0,0,0,0,21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,2= 1137, -21142,0,21143,0,0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,211= 60,0,0, -0,0,0,0,21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,211= 74,0, -21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0,2= 1193,0, -0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223,21225,0,212= 26,0,0, -0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0,0,0,0,0,0,0,0,0,0,2= 1237,0, -0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257,0,0,0,0,0,0,0,21259,0,0,0,212= 63,0, -21272,0,21274,0,21282,0,0,0,0,0,0,0,0,21283,0,0,0,0,0,0,0,0,21294,0,0,212= 97,0,0, -0,0,21298,0,0,0,21299,0,21300,21302,0,21316,0,21318,21322,21323,0,21324,0= ,21326, -0,0,0,21327,21328,0,0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,2= 1362,0, -0,0,21363,0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377= ,0, -21378,0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0= ,21384, -0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397,21398,0,0,0= ,0,0,0, -0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404,0,21405,21406,0,0,0= ,21407, -0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409,0,21421,0,21422,0,0,0,21425,2= 1428,0, -0,0,0,21429,0,0,0,0,0,21433,0,0,0,0,0,0,0,0,0,0,21434,0,21443,0,21444,214= 49,0, -21452,0,21453,21454,0,0,0,21457,0,0,21458,0,0,0,21460,21461,0,0,21464,0,0= ,0, -21473,21478,0,0,21479,0,0,21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,214= 86,0,0, -21488,0,0,0,0,0,0,21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,2= 1530,0, -0,21531,0,0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,2= 1577,0, -0,0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618,2= 1619, -21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0,0,0,21639= ,21646, -21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672,21673,0,21674= ,21683, -0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0,21704,0,0,21709,0,0= ,0, -21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0,21730,0,0,0,21731,21733= ,0,0,0, -0,21737,21741,21742,0,21747,0,0,0,21749,0,0,0,0,0,0,0,0,0,0,0,0,0,21750,0= ,0,0,0, -0,21752,0,0,0,0,21753,0,0,0,0,0,0,21755,21756,0,21757,0,0,0,0,0,0,21760,0= ,0, -21763,0,0,0,0,0,0,0,0,0,21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773= ,0, -21774,0,0,21775,0,0,0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,217= 88, -21791,0,0,0,21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,218= 11,0, -21817,21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,218= 33, -21848,21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,218= 75,0, -21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897= ,0, -21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914= ,21915, -0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0,0,0,0,2= 1944,0, -0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0,21950,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0,21954,21957,0,0,0,0,21958,0,21959,0= ,0,0,0, -0,0,21962,21963,0,0,0,0,0,0,0,0,21964,21965,0,0,21969,21970,0,0,0,21974,0= ,0, -21980,21981,0,21982,0,0,0,0,0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,2= 2001,0, -22002,0,0,0,0,0,0,22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,220= 16,0,0, -0,22017,22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,2= 2039,0, -0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0= ,0, -22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0,0,0,2= 2076,0, -0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0,22108,0,22109,0,2= 2110,0, -0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0,22125,0,0,0,22128,22129,0,0= ,0,0,0, -0,22141,0,0,0,22142,0,0,22144,22146,0,22148,22149,22151,22154,0,0,0,22162= ,0,0,0, -0,22164,22177,0,0,0,0,22179,0,22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0= ,22190, -0,22194,22201,0,0,22208,0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232= ,0, -22234,0,0,22235,22236,0,22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,2= 2247,0, -0,0,22259,22268,0,22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277= ,0,0,0, -0,0,22278,22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0= ,0,0,0, -0,22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0= ,22317, -0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0,22350,0= ,0,0,0, -0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359,22360,0,0,0,0,0,0,0= ,0, -22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0,22375,0,22377,0,0,0,0,0,223= 78,0,0, -0,0,22381,0,0,0,0,22382,0,22383,0,0,0,0,0,0,0,0,0,22391,0,0,22392,22395,2= 2396, -22402,0,0,0,0,0,0,0,0,0,0,0,0,0,22405,0,0,22406,0,0,22408,0,0,22409,22410= ,0,0,0, -0,0,0,22424,0,0,0,0,22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443= ,0,0,0, -0,22444,0,0,0,0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0= ,0, -22472,22473,0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514= ,0,0, -22515,0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,225= 36,0, -22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566,0= ,0,0,0, -22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586,0,0,225= 87,0,0, -22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0,22604,0,0,22609= ,0,0, -22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0,0,0,0,22639,0,0,22640= ,0,0,0, -0,0,0,0,22644,0,22645,22647,0,0,0,0,22652,22653,0,0,0,22654,0,22655,0,0,0= ,22656, -0,0,0,0,0,0,0,0,0,0,22673,22675,22676,0,0,22678,22679,0,22691,0,0,0,0,0,0= ,0, -22693,0,0,22696,0,22699,22707,22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0= ,22723, -0,0,0,22724,22725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0= ,22729, -0,0,22731,0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0= ,0,0,0, -0,0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0= ,0,0, -22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0,227= 82, -22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0,22803,228= 04,0,0, -0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825,22826,0,22831,2= 2833,0, -0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0,0,0,22840,0,22847,0,0,0= ,0,0, -22856,22857,0,22858,22859,0,0,22862,0,0,22864,0,0,0,0,22865,0,0,0,0,0,0,0= ,0,0,0, -0,22866,0,22867,22868,0,0,0,0,22869,0,22871,0,22872,0,22873,22881,22882,2= 2884, -22885,0,0,0,0,0,0,0,22886,22887,0,22894,0,22895,0,0,0,22900,0,22901,0,0,0= ,0, -22904,0,0,0,0,22905,22907,0,0,0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,2= 2929, -22930,0,0,0,22941,22942,0,0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,229= 47,0,0, -22954,0,22956,0,0,22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965= ,0, -22968,0,0,0,22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,229= 87,0,0, -22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0,23023= ,23024, -23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0,23038,0,0,0,2= 3048,0, -23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067,23068,0,0,0,23069,230= 73,0,0, -0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141,0,23149,0,0,23150,0,0,0,231= 52,0,0, -0,0,0,0,0,0,23154,0,0,0,0,23157,23159,23160,0,0,0,0,0,0,0,0,0,0,0,0,23180= ,0,0,0, -0,23181,0,0,23188,0,23189,0,0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0= ,0,0,0, -0,0,0,0,0,23202,0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0= ,23230, -23234,23238,0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0= ,0,0,0, -0,23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0,2= 3303, -23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0,23337= ,0,0,0, -0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0,23355,0,23356,2= 3358,0, -0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0,23378,23379,0,23382,2= 3383,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0,0,23388,23390,0,0,23393,23398,0= ,0,0, -23399,0,0,0,23400,0,0,0,0,23401,0,0,0,23415,0,0,0,0,0,0,0,0,23416,0,23422= ,0, -23443,23444,0,0,0,0,23448,0,23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0= ,0,0,0, -23465,0,0,0,23470,23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497= ,0, -23499,0,0,23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,2= 3519, -23521,23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,2= 3557,0, -0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0,23568= ,23569, -23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0,23579,0,0,23581= ,0,0,0, -0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0,23602,23606,0,0,23607,0,236= 08,0,0, -0,23614,23616,0,0,0,0,0,23618,0,0,23619,0,0,0,0,23621,23626,0,23627,0,0,0= ,0,0,0, -0,23629,0,23630,0,0,0,0,23634,0,23636,0,0,0,0,0,0,23638,0,0,0,0,23640,236= 67,0, -23669,0,0,0,23681,0,0,0,0,0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685= ,23689, -0,23693,23694,23700,0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0= ,0, -23715,0,0,0,0,23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,237= 46,0, -23748,0,0,0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,2= 3765,0, -0,0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0,237= 99,0,0, -0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821,0,23827,0= ,0,0, -23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834,23835,0,0,0,0,238= 37, -23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0,23879,23881,0,0,23882,2= 3883, -23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902,0,0,0,0,0,23903,23905,0,239= 06,0, -23907,23918,23919,23920,0,23922,0,23924,0,23927,0,23934,0,23937,23941,0,2= 3942, -23946,0,0,0,0,0,23955,23956,23958,0,0,0,0,0,0,23959,0,23962,23965,0,23966= ,0,0,0, -0,23967,23968,0,0,23973,0,0,23974,0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,23977,0,0,0,0,0,0,0,0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990= ,23991, -0,0,0,0,0,0,23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,239= 99,0,0, -24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0,24010= ,0,0, -24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030,0,0,0,0= ,0, -24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067,0,24068= ,24070, -0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104,24106,0,241= 07,0,0, -0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0,0,0,0,0,24124,0,2= 4125,0, -24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137,24142,0,0,0,24146,0,0,241= 47, -24149,24154,0,24163,0,0,0,24165,24166,24167,0,0,0,0,0,0,0,0,0,0,24169,241= 70, -24175,0,0,0,24178,0,0,24179,0,0,24181,0,24184,24197,0,24201,24204,0,0,0,0= ,0,0, -24206,24212,24220,0,0,0,24224,0,0,0,0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,24235,0,24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249= ,0, -24251,0,0,0,0,0,0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0= ,0, -24274,0,0,24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,2= 4323,0, -0,0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,2= 4372, -24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0= ,0, -24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0,244= 16,0,0, -0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0,0,0,24440= ,24442, -24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0,24458,24459,2= 4460,0, -24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24471,0,244= 73, -24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0,0,0,0,0,0,0,0,24481,0,0,0,0= ,0,0,0, -0,0,0,24482,24485,0,0,0,0,24486,0,0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0= ,24498, -0,0,0,24499,24506,0,0,0,24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0= ,24518, -0,24520,0,24521,24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2= 4528,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0,2= 4549, -24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0,0,245= 61,0,0, -0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0,24569,0,0,0,24574,0= ,24575, -0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0,0,0,0,24585,0,0,0,0,0,24586= ,0,0, -24587,0,24588,0,0,0,0,0,0,0,0,0,0,24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0= ,24594, -0,0,0,0,0,0,0,24596,24597,0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,2= 4610,0, -0,24611,0,0,0,0,24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0= ,24640, -0,0,0,24655,24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,246= 65,0,0, -0,0,24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,2= 4679,0, -0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0,0,0= ,24690, -24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0,0,0,0,24710,0= ,24712, -0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719,0,0,0,0,24720,0,0,2= 4725,0, -0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753,0,0,0,24758,0,0,0,0,0,24762= ,0, -24763,0,0,0,0,0,0,0,24764,0,0,0,0,0,24765,24767,24768,0,24772,0,0,0,0,247= 73,0,0, -0,0,24777,0,0,0,0,0,24785,0,24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0= ,24799, -24800,0,0,0,24803,0,24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,248= 28,0, -24835,0,0,0,0,0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0= ,24847, -0,0,24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0= ,0,0,0, -24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0,0,0,2= 4899,0, -0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930,24931,0,0,0,24932= ,0,0, -24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0,24951,0,0,24953,0,0,0,249= 54,0, -24959,0,0,0,24961,0,0,24962,0,24964,24968,24970,24972,0,0,0,0,0,24976,0,0= ,0, -24977,0,24982,0,0,24983,0,0,24984,0,0,0,24993,0,0,0,24994,0,0,25001,0,0,0= ,25003, -0,0,25018,0,0,25023,0,0,0,25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,250= 39,0,0, -0,0,0,25040,0,0,0,0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,250= 51,0, -25052,25053,0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,2= 5065, -25069,25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0= ,0, -25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121= ,0,0,0, -0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0,25151,0,251= 61,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0,0,0,25174,0,25175,0,252= 07,0,0, -0,25209,0,0,0,0,25213,0,25219,0,25223,0,25225,0,0,0,25227,0,0,0,25228,0,0= ,0, -25229,0,0,0,0,0,0,0,25231,25233,0,0,0,0,25237,25239,0,0,0,25243,0,0,0,252= 52,0, -25257,25258,0,0,0,0,25260,25265,0,25268,0,0,25273,25324,0,25325,0,25326,0= ,0,0,0, -0,0,0,0,25327,0,0,0,0,0,25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,2= 5337, -25338,0,0,25343,0,25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0= ,0, -25384,0,0,0,0,0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,2= 5402,0, -0,0,25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419= ,0,0,0, -25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0,0,0,0,25436= ,0,0,0, -25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0,0,25449,0,0,0,25450= ,0,0,0, -0,25452,0,25453,25454,25455,0,0,0,25456,0,25457,0,0,0,25459,0,25461,0,254= 68,0,0, -0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0,0,0,0,25474,0,0,0,0,0,0,0,0,25475,0= ,0,0,0, -25477,0,0,0,0,25483,0,0,0,0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497= ,0,0, -25498,0,25504,0,25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,255= 19,0, -25520,0,0,0,0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,2= 5550,0, -0,25551,0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,2= 5571,0, -0,0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0,0,2= 5588,0, -0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0,25596,0,25597= ,25615, -0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0,25631,0,0,0,25635,25636= ,0,0, -25649,0,0,0,0,25654,0,0,0,25661,25663,0,0,25671,0,0,25678,25698,0,25699,2= 5702, -25703,0,0,0,0,0,0,0,0,25704,0,0,0,0,0,25706,0,0,25710,0,25711,0,25712,0,2= 5715, -25716,25717,0,0,25718,25728,25732,0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0= ,25739, -0,0,0,25740,0,25741,25745,0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0= ,0,0, -25781,0,25782,25784,25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808= ,25809, -0,0,25811,25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833= ,0,0,0, -25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0,25852= ,0, -25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0,25875,0= ,25876, -25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0,0,0,25908,259= 09,0,0, -0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0,0,0,25914,0,0,25916,0,0= ,0,0,0, -25917,25927,0,0,0,0,25928,0,0,25930,0,0,0,25933,0,0,25938,25942,0,0,0,0,0= ,0,0, -25945,0,25950,0,25956,0,0,25961,25962,0,0,25963,0,25964,25965,25966,0,0,0= ,0,0, -25967,0,0,0,0,25968,0,0,0,25969,25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0= ,25978, -0,25981,0,0,0,25982,0,0,0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0= ,0,0, -26002,0,0,0,26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,260= 17, -26018,26020,0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0= ,0,0,0, -26046,0,0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,2= 6059,0, -0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0,26071,0= ,0,0, -26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0,26094,0,0,0,0,0= ,0,0,0, -26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107,26122,0,26124,0,0,26125,0= ,0,0,0, -0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0,26164,26166,0,0,0,26167,0,26170,2= 6171,0, -0,26172,0,0,26174,0,0,0,0,0,0,0,0,0,0,0,0,0,26175,0,0,0,26176,26177,0,263= 21, -26322,0,26323,0,0,26324,0,0,0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0= ,0, -26350,0,0,0,26379,0,0,26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0= ,0,0,0, -26412,0,0,26420,0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0= ,0,0, -26435,0,26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,2= 6449,0, -26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0,2= 6463,0, -0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0,0,0,0,0,0,0= ,26475, -0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0,26488,26493,26494,0,0,2= 6495,0, -26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0,26509,0,0,26510,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,26512,0,26513,26515,0,0,0,26518,0,0,0,26519,0,26524,26526,0,0,0,265= 27,0, -26532,0,26533,26537,26558,0,0,0,26559,0,0,0,26571,0,0,26573,0,26588,0,265= 93,0,0, -0,0,0,0,26603,0,26604,0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609= ,26611, -26614,0,0,0,26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,266= 32, -26643,0,0,0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0= ,0,0, -26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0= ,26747, -26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0,267= 74,0,0, -0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0,0,0,0,0,0,2= 6788,0, -0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0,26797,26798,0,0,0,268= 00,0,0, -26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0,26808,0,0,26809,0,0,0,0,0,0,0,2= 6812,0, -26825,0,0,0,0,0,0,0,26826,0,0,26827,26829,26834,0,0,0,0,26835,0,0,26849,0= ,26851, -0,0,0,0,0,0,0,0,0,26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876= ,0, -26878,26882,26883,0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900= ,0,0,0, -0,0,0,0,26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0= ,0,0, -26928,0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,269= 37,0,0, -26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0,0,0= ,0,0,0, -26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0,26980,0,0,0,0= ,0,0, -26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0,27007,27010,27012,270= 13,0,0, -0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0,0,27025,0,0,0,27026,0,0,0,0= ,27029, -27030,27031,27034,0,0,27036,27037,0,0,0,27038,27042,0,0,0,27044,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,27045,0,0,0,0,0,0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0= ,0,0, -27051,27052,0,27055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,270= 59,0, -27061,0,27064,0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0= ,0, -27076,0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086= ,0,0,0, -0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0,27103= ,0,0,0, -0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0,0,0,0,27118,0= ,0, -27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0,27148,27149,0,0,0= ,0, -27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0,0,27175,0,27189,0,0,2= 7191,0, -27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0,0,27202,0,0,0,0,27203,0,0,272= 04,0,0, -27206,0,27207,0,0,0,0,27209,0,0,0,27213,0,0,27216,27219,27220,27222,27223= ,0, -27224,0,27225,27226,0,0,27233,0,0,0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,27239,0,27242,27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276= ,27278, -0,0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312,2= 7313,0, -0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340,0,0,0,2= 7348,0, -0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359,27361,0,0,0,27365,0= ,27367, -0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0,27397,27404,0,0,0,0,0,27408,0= ,0,0,0, -27453,0,0,0,27456,0,0,0,27458,0,0,0,0,0,0,0,27459,0,0,0,27460,0,0,27461,0= ,27465, -27467,0,0,27469,0,27470,0,27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0= ,0, -27485,0,0,0,0,0,27493,0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0= ,0,0, -27533,27545,0,0,0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551= ,0,0,0, -0,0,0,0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585= ,0,0,0, -0,0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0,2= 7608,0, -0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0,0,27632,276= 34,0, -27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0,0,0,0,0,27651,276= 60,0, -27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0,27669,0,27671,0,0,0,276= 73, -27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719,27720,0,0,27728,0,27729= ,0,0,0, -0,0,0,0,0,0,27731,0,0,27732,0,27733,0,27738,0,0,0,27742,0,0,0,27743,27744= ,0,0,0, -0,0,0,27745,27746,0,0,0,27747,27748,27751,27752,0,0,0,27768,27770,0,0,0,2= 7774, -27775,0,27776,27777,0,0,27781,0,27784,0,27786,0,0,27791,0,27792,27793,278= 04,0, -27812,27813,0,0,0,0,0,0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,278= 62,0,0, -0,27864,0,0,0,27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0= ,0,0,0, -27897,27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0= ,27931, -27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0,279= 60, -27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976,27977= ,0, -27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059,0,0,280= 61,0,0, -0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069,28070,28072,0,28073,0= ,0, -28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0,28085,0,0,0,0,28086,0,0,0= ,0,0,0, -28088,0,0,0,0,0,0,0,0,28090,0,28097,28114,28115,0,0,0,0,0,0,0,28116,0,0,0= ,0,0, -28118,0,28129,0,28131,0,0,28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,281= 52,0,0, -0,0,28155,28157,28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0= ,0,0,0, -0,0,28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191= ,0, -28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,282= 22,0, -28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0,282= 41,0,0, -28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252,0,0,0,0,0= ,0, -28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0,0,28260,0,0,2= 8261,0, -0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269,0,28270,28272,28274= ,0, -28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0,28294,0,28297,0,0,0= ,0, -28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0,0,0,0,0,0,0,0,0,0,0,28302= ,28303, -0,0,0,0,28304,0,0,28305,0,28312,0,28313,28314,0,0,0,0,0,0,28315,0,0,0,283= 20, -28321,0,0,28328,0,0,0,28329,28338,0,28339,0,0,28344,0,0,0,0,0,0,0,0,28347= ,0,0,0, -0,0,0,0,0,28348,0,0,0,0,0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0= ,0, -28421,0,0,0,0,28423,0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,284= 34,0, -28458,0,0,0,0,0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471= ,0,0,0, -0,28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0,2= 8492,0, -0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0,28508,0,0,0= ,28510, -0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0,28529,0,0,28532= ,0,0, -28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0,0,0,0,0,0,0,0,0,285= 60, -28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0,28566,28568,0,0,0,0,0,0,28569= ,0,0,0, -28570,0,28572,28573,0,0,0,0,28575,0,0,0,0,28576,28581,28588,0,0,28589,0,0= ,0, -28590,28595,0,28598,0,0,28601,0,0,28605,0,0,0,0,28614,28615,28619,0,0,0,0= ,0,0, -28620,0,28626,0,0,28628,0,28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,286= 38,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662= ,0, -28670,28671,0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691= ,0,0,0, -28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0= ,28711, -28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0,28741,0,0= ,28742, -0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750,28752,28754,28756,0,2= 8757,0, -0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0,28764,0,0,0,0,0,0,28766,0,28767= ,28768, -0,0,0,0,28769,28770,0,0,0,0,0,0,0,0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0= ,0,0,0, -0,28772,0,28773,0,28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0= ,0, -28797,0,0,0,0,0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,288= 07,0,0, -0,0,0,0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0= ,0,0, -28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868= ,28869, -0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898,28899= ,0,0,0, -28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0,0,28910,0,289= 14,0,0, -0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0,0,0,0,0,0,28924,0,0,0= ,0, -28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0,28942,0,0,0,0,0,0,28956,0= ,0,0, -28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0,28968,0,28971,0,28975,28976,0,28982= ,28983, -0,0,28984,28989,28996,28997,28998,0,0,0,0,0,0,28999,0,0,0,0,0,29000,0,290= 01,0,0, -0,29009,0,0,29011,0,0,29021,0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,2= 9036,0, -0,0,29037,0,0,0,0,29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,290= 54, -29056,29062,0,29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,290= 84,0,0, -0,0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0,291= 05,0,0, -0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0,0,0,0,0,0,0= ,0, -29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0,0,0,29228,0,0,2= 9229,0, -0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0,29245,0,29248,0,29250,292= 56, -29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29285,0,0,29286,29291,29292,0= ,0,0,0, -29294,0,29295,0,0,0,0,0,29296,29297,29298,29300,0,29302,0,0,29304,29307,0= ,29312, -0,0,0,29322,0,0,29323,0,0,29324,29326,29328,0,29335,0,0,0,0,0,0,0,29338,2= 9339,0, -0,0,0,0,29341,29343,0,0,0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,293= 57,0,0, -0,0,29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0,2= 9381,0, -0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391,29397,0,29398= ,29412, -29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0,29423,0,0,0,29435,0,0= ,0, -29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446,29450,29452,0,0,0,0,0,29456= ,0,0,0, -0,0,29461,0,0,0,29464,0,0,0,0,0,0,0,0,29468,0,29473,0,0,0,29486,0,0,0,294= 90,0,0, -0,29491,29492,0,0,29497,0,0,0,29498,0,29499,0,29502,29505,0,29509,0,0,0,2= 9510,0, -0,0,29512,0,0,0,29516,0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521= ,29529, -0,0,0,0,0,0,0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,2= 9547,0, -0,29548,0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,295= 64,0,0, -29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0,29593= ,29594, -0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0,29625,0,0,0,2= 9632,0, -0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0,29638,0,29641,29643,0,0,0= ,0,0,0, -29644,0,29645,0,29649,0,0,0,29650,0,29653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,296= 56, -29659,0,0,29660,0,0,0,29661,0,0,0,0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0= ,0, -29675,0,29677,29679,0,0,29684,0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,2= 9689, -29690,29700,0,29701,0,0,0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,297= 27,0, -29733,29734,0,29750,29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0= ,0,0,0, -0,0,0,0,0,0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822= ,0,0,0, -29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0,298= 35,0,0, -29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0,0,0,29844,29845= ,0,0,0, -0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0,0,0,0,29907,29921,0,299= 22,0,0, -29923,29926,29944,29946,0,0,0,0,0,0,0,29947,29948,0,0,0,29951,0,0,0,0,0,2= 9953,0, -0,29956,0,29957,0,0,29962,0,0,0,0,29971,0,0,0,29972,0,0,0,0,0,29978,0,299= 79, -29992,30007,30008,30010,0,0,0,30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0= ,0,0, -30017,0,0,0,0,0,30023,30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0= ,30039, -0,30040,0,0,0,0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,3= 0075,0, -0,0,0,0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,300= 90,0,0, -30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0,0,0,0= ,30131, -30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136,0,0,30137,30138= ,0,0,0, -30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0,30168,0,30172,30173,0,0= ,0,0,0, -0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0,30194,30196,0,0,30199,0,0,30202,0= ,0,0,0, -30203,0,0,0,0,0,0,0,0,0,0,30213,0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0= ,30219, -0,30220,0,30222,30227,0,0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,302= 40, -30243,30245,0,30250,30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0= ,0, -30282,0,30284,0,30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,303= 04, -30306,0,0,0,0,0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326= ,0,0,0, -0,0,30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,3= 0359, -30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397= ,0,0,0, -30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409,0,304= 10,0,0, -0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432,0,0,0,0,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0,30437,30438,0,30441,304= 42,0,0, -0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458,0,30464,0,0,0,0,0,0,30467,0= ,30469, -0,0,0,0,0,30477,0,0,30484,0,0,0,0,0,30485,0,0,0,0,0,30486,30487,30497,304= 98,0,0, -0,0,0,0,0,0,0,0,30505,0,30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0= ,0,0,0, -0,0,30523,0,30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,305= 55, -30556,30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,305= 71,0, -30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636= ,30640, -30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0,0,3= 0679,0, -0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0,30701,0,30702,3= 0703,0, -0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0,0,0,0,0,0,0,30731,0,0= ,30733, -0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0,30740,0,0,0,30743,0,30746,0,30747= ,30748, -0,0,30751,30752,30753,0,0,0,30754,0,0,30760,0,0,0,0,0,0,0,30763,0,30764,0= ,0, -30766,0,30769,30770,30771,30774,30777,0,0,30779,30780,30781,0,0,0,0,30790= ,0,0,0, -30792,0,0,0,0,30810,0,0,0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,3= 0827,0, -0,0,0,0,0,30828,0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0= ,0,0, -30846,30847,0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0= ,30866, -0,0,30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,308= 94,0, -30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0,0,3= 0915, -30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947,0,0,30955= ,30956, -0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976,0,0,30977,0,3= 0978, -30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001,0,0,31003,31005,0= ,0, -31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020,31023,31024,31025,0= ,0,0,0, -0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0,0,0,31032,0,0,0,0,0,0,0,0,0= ,0,0, -31036,31037,31038,0,0,0,31041,31043,31045,0,31047,0,0,0,31048,0,31049,0,0= ,0, -31053,31054,31055,0,0,31063,0,0,0,0,0,31066,0,31068,31071,0,0,0,31072,310= 73,0,0, -0,0,31075,0,0,31076,0,0,0,31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0= ,31142, -0,31144,0,0,31145,31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,3= 1152,0, -0,0,0,0,0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0= ,31186, -0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0,0,3= 1205,0, -0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0,31233,31236,3= 1253,0, -31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0,31258,31259,0,0,31260= ,0, -31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0,31267,0,0,0,0,0,31281,0,3= 1282,0, -31284,0,0,31285,31287,31288,0,0,31290,0,0,0,31292,31295,0,31299,0,31300,0= ,0,0,0, -0,31302,0,0,0,0,31303,0,0,0,0,0,0,31304,0,0,0,0,0,31305,31308,31309,31315= ,0, -31317,0,0,0,0,0,31323,0,31324,0,0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,3= 1333,0, -0,0,0,0,31336,0,0,31337,0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0= ,0,0,0, -0,0,0,31342,0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,313= 50, -31351,0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363= ,0, -31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401,0= ,31405, -31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0,0,0,0,0= ,31422, -31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0,0,0,0,0,0,0,314= 34,0,0, -0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31442,0,3= 1444,0, -31448,0,0,31451,0,0,0,0,31452,0,31461,31465,0,0,31466,0,0,31467,0,0,31468= ,0,0,0, -31469,31473,0,31476,0,0,0,0,31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0= ,0,0,0, -31501,31504,31505,0,0,0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,315= 13,0,0, -0,0,0,0,0,0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,3= 1553, -31559,0,0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0= ,31571, -0,0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,3= 1596,0, -0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0,3= 1611,0, -31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0,0,0,31621,0= ,0,0,0, -0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642,0,0,31643,0,0,0,0,0= ,0,0,0, -0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0,0,0,31657,0,0,31676,0,0,0,0,0= ,0,0, -31689,31691,31692,0,31694,0,0,0,31696,0,31702,0,31703,0}; - -static const DictWord kStaticDictionaryWords[31705] =3D { -{0,0,0},{8,0,1002},{136,0,1015},{4,0,683},{4,10,325},{138,10,125},{7,11,5= 72},{9, -11,592},{11,11,680},{11,11,842},{11,11,924},{12,11,356},{12,11,550},{13,1= 1,317}, -{13,11,370},{13,11,469},{13,11,471},{14,11,397},{18,11,69},{146,11,145},{= 134,0, -1265},{136,11,534},{134,0,1431},{11,0,138},{140,0,40},{4,0,155},{7,0,1689= },{4,10 -,718},{135,10,1216},{4,0,245},{5,0,151},{5,0,741},{6,0,1147},{7,0,498},{7= ,0,870} -,{7,0,1542},{12,0,213},{14,0,36},{14,0,391},{17,0,111},{18,0,6},{18,0,46}= ,{18,0, -151},{19,0,36},{20,0,32},{20,0,56},{20,0,69},{20,0,102},{21,0,4},{22,0,8}= ,{22,0, -10},{22,0,14},{150,0,31},{4,0,624},{135,0,1752},{5,10,124},{5,10,144},{6,= 10,548} -,{7,10,15},{7,10,153},{137,10,629},{6,0,503},{9,0,586},{13,0,468},{14,0,6= 6},{16, -0,58},{7,10,1531},{8,10,416},{9,10,275},{10,10,100},{11,10,658},{11,10,97= 9},{12, -10,86},{14,10,207},{15,10,20},{143,10,25},{5,0,603},{7,0,1212},{9,0,565},= {14,0, -301},{5,10,915},{6,10,1783},{7,10,211},{7,10,1353},{9,10,83},{10,10,376},= {10,10, -431},{11,10,543},{12,10,664},{13,10,280},{13,10,428},{14,10,128},{17,10,5= 2},{145 -,10,81},{4,0,492},{133,0,451},{135,0,835},{141,0,70},{132,0,539},{7,11,74= 8},{139 -,11,700},{7,11,1517},{11,11,597},{14,11,76},{14,11,335},{148,11,33},{6,0,= 113},{ -135,0,436},{4,10,338},{133,10,400},{136,0,718},{133,11,127},{133,11,418},= {6,0, -1505},{7,0,520},{6,11,198},{11,10,892},{140,11,83},{4,10,221},{5,10,659},= {5,10, -989},{7,10,697},{7,10,1211},{138,10,284},{135,0,1070},{5,11,276},{6,11,55= },{135, -11,1369},{134,0,1515},{6,11,1752},{136,11,726},{138,10,507},{15,0,78},{4,= 10,188} -,{135,10,805},{5,10,884},{139,10,991},{133,11,764},{134,10,1653},{6,11,30= 9},{7, -11,331},{138,11,550},{135,11,1861},{132,11,348},{135,11,986},{135,11,1573= },{12,0 -,610},{13,0,431},{144,0,59},{9,11,799},{140,10,166},{134,0,1530},{132,0,7= 50},{ -132,0,307},{133,0,964},{6,11,194},{7,11,133},{10,11,493},{10,11,570},{139= ,11,664 -},{5,11,24},{5,11,569},{6,11,3},{6,11,119},{6,11,143},{6,11,440},{7,11,29= 5},{7, -11,599},{7,11,1686},{7,11,1854},{8,11,424},{9,11,43},{9,11,584},{9,11,760= },{10, -11,148},{10,11,328},{11,11,159},{11,11,253},{11,11,506},{12,11,487},{12,1= 1,531}, -{144,11,33},{136,10,760},{5,11,14},{5,11,892},{6,11,283},{7,11,234},{136,= 11,537} -,{135,11,1251},{4,11,126},{8,11,635},{147,11,34},{4,11,316},{135,11,1561}= ,{6,0, -999},{6,0,1310},{137,11,861},{4,11,64},{5,11,352},{5,11,720},{6,11,368},{= 139,11, -359},{4,0,75},{5,0,180},{6,0,500},{7,0,58},{7,0,710},{10,0,645},{136,10,7= 70},{ -133,0,649},{6,0,276},{7,0,282},{7,0,879},{7,0,924},{8,0,459},{9,0,599},{9= ,0,754} -,{11,0,574},{12,0,128},{12,0,494},{13,0,52},{13,0,301},{15,0,30},{143,0,1= 32},{ -132,0,200},{4,10,89},{5,10,489},{6,10,315},{7,10,553},{7,10,1745},{138,10= ,243},{ -135,11,1050},{7,0,1621},{6,10,1658},{9,10,3},{10,10,154},{11,10,641},{13,= 10,85}, -{13,10,201},{141,10,346},{6,11,175},{137,11,289},{5,11,432},{133,11,913},= {6,0, -225},{137,0,211},{7,0,718},{8,0,687},{139,0,374},{4,10,166},{133,10,505},= {9,0, -110},{134,10,1670},{8,0,58},{9,0,724},{11,0,809},{13,0,113},{145,0,72},{6= ,0,345} -,{7,0,1247},{144,11,82},{5,11,931},{134,11,1698},{8,0,767},{8,0,803},{9,0= ,301},{ -137,0,903},{139,0,203},{134,0,1154},{7,0,1949},{136,0,674},{134,0,259},{1= 35,0, -1275},{5,11,774},{6,11,1637},{6,11,1686},{134,11,1751},{134,0,1231},{7,10= ,445},{ -8,10,307},{8,10,704},{10,10,41},{10,10,439},{11,10,237},{11,10,622},{140,= 10,201} -,{136,0,254},{6,11,260},{135,11,1484},{139,0,277},{135,10,1977},{4,10,189= },{5,10 -,713},{6,11,573},{136,10,57},{138,10,371},{132,10,552},{134,11,344},{133,= 0,248}, -{9,0,800},{10,0,693},{11,0,482},{11,0,734},{11,0,789},{134,11,240},{4,0,1= 16},{5, -0,95},{5,0,445},{7,0,1688},{8,0,29},{9,0,272},{11,0,509},{11,0,915},{4,11= ,292},{ -4,11,736},{5,11,871},{6,11,171},{6,11,1689},{7,11,1324},{7,11,1944},{9,11= ,415},{ -9,11,580},{14,11,230},{146,11,68},{7,0,490},{13,0,100},{143,0,75},{135,0,= 1641},{ -133,0,543},{7,11,209},{8,11,661},{10,11,42},{11,11,58},{12,11,58},{12,11,= 118},{ -141,11,32},{5,0,181},{8,0,41},{6,11,63},{135,11,920},{133,0,657},{133,11,= 793},{ -138,0,709},{7,0,25},{8,0,202},{138,0,536},{5,11,665},{135,10,1788},{145,1= 0,49},{ -9,0,423},{140,0,89},{5,11,67},{6,11,62},{6,11,374},{135,11,1391},{8,0,113= },{9,0, -877},{10,0,554},{11,0,83},{12,0,136},{19,0,109},{9,11,790},{140,11,47},{1= 38,10, -661},{4,0,963},{10,0,927},{14,0,442},{135,10,1945},{133,0,976},{132,0,206= },{4,11 -,391},{135,11,1169},{134,0,2002},{6,0,696},{134,0,1008},{134,0,1170},{132= ,11,271 -},{7,0,13},{8,0,226},{10,0,537},{11,0,570},{11,0,605},{11,0,799},{11,0,80= 4},{12, -0,85},{12,0,516},{12,0,623},{13,0,112},{13,0,361},{14,0,77},{14,0,78},{17= ,0,28}, -{19,0,110},{140,11,314},{132,0,769},{134,0,1544},{4,0,551},{137,0,678},{5= ,10,84} -,{134,10,163},{9,0,57},{9,0,459},{10,0,425},{11,0,119},{12,0,184},{12,0,3= 71},{13 -,0,358},{145,0,51},{5,0,188},{5,0,814},{8,0,10},{9,0,421},{9,0,729},{10,0= ,609},{ -11,0,689},{4,11,253},{5,10,410},{5,11,544},{7,11,300},{137,11,340},{134,0= ,624},{ -138,11,321},{135,0,1941},{18,0,130},{5,10,322},{8,10,186},{9,10,262},{10,= 10,187} -,{142,10,208},{5,11,53},{5,11,541},{6,11,94},{6,11,499},{7,11,230},{139,1= 1,321}, -{133,10,227},{4,0,378},{4,11,920},{5,11,25},{5,11,790},{6,11,457},{135,11= ,853},{ -137,0,269},{132,0,528},{134,0,1146},{7,10,1395},{8,10,486},{9,10,236},{9,= 10,878} -,{10,10,218},{11,10,95},{19,10,17},{147,10,31},{7,10,2043},{8,10,672},{14= 1,10, -448},{134,0,1105},{134,0,1616},{134,11,1765},{140,11,163},{5,10,412},{133= ,11,822 -},{132,11,634},{6,0,656},{134,11,1730},{134,0,1940},{5,0,104},{6,0,173},{= 135,0, -1631},{136,10,562},{6,11,36},{7,11,658},{8,11,454},{147,11,86},{5,0,457},= {134,10 -,1771},{7,0,810},{8,0,138},{8,0,342},{9,0,84},{10,0,193},{11,0,883},{140,= 0,359}, -{9,0,620},{135,10,1190},{137,10,132},{7,11,975},{137,11,789},{6,0,95},{6,= 0,1934} -,{136,0,967},{141,11,335},{6,0,406},{10,0,409},{10,0,447},{11,0,44},{140,= 0,100}, -{4,10,317},{135,10,1279},{132,0,477},{134,0,1268},{6,0,1941},{8,0,944},{5= ,10,63} -,{133,10,509},{132,0,629},{132,11,104},{4,0,246},{133,0,375},{6,0,1636},{= 132,10, -288},{135,11,1614},{9,0,49},{10,0,774},{8,10,89},{8,10,620},{11,10,628},{= 12,10, -322},{143,10,124},{4,0,282},{7,0,1034},{11,0,398},{11,0,634},{12,0,1},{12= ,0,79}, -{12,0,544},{14,0,237},{17,0,10},{146,0,20},{132,0,824},{7,11,45},{9,11,54= 2},{9, -11,566},{138,11,728},{5,0,118},{5,0,499},{6,0,476},{6,0,665},{6,0,1176},{= 6,0, -1196},{7,0,600},{7,0,888},{135,0,1096},{7,0,296},{7,0,596},{8,0,560},{8,0= ,586},{ -9,0,612},{11,0,304},{12,0,46},{13,0,89},{14,0,112},{145,0,122},{5,0,894},= {6,0, -1772},{9,0,1009},{138,10,120},{5,11,533},{7,11,755},{138,11,780},{151,10,= 1},{6,0 -,1474},{7,11,87},{142,11,288},{139,0,366},{137,10,461},{7,11,988},{7,11,1= 939},{9 -,11,64},{9,11,502},{12,11,7},{12,11,34},{13,11,12},{13,11,234},{147,11,77= },{7,0, -1599},{7,0,1723},{8,0,79},{8,0,106},{8,0,190},{8,0,302},{8,0,383},{8,0,71= 3},{9,0 -,119},{9,0,233},{9,0,419},{9,0,471},{10,0,181},{10,0,406},{11,0,57},{11,0= ,85},{ -11,0,120},{11,0,177},{11,0,296},{11,0,382},{11,0,454},{11,0,758},{11,0,99= 9},{12, -0,27},{12,0,98},{12,0,131},{12,0,245},{12,0,312},{12,0,446},{12,0,454},{1= 3,0,25} -,{13,0,98},{13,0,426},{13,0,508},{14,0,70},{14,0,163},{14,0,272},{14,0,27= 7},{14, -0,370},{15,0,95},{15,0,138},{15,0,167},{17,0,38},{148,0,96},{135,10,1346}= ,{10,0, -200},{19,0,2},{151,0,22},{135,11,141},{134,10,85},{134,0,1759},{138,0,372= },{145, -0,16},{8,0,943},{132,11,619},{139,11,88},{5,11,246},{8,11,189},{9,11,355}= ,{9,11, -512},{10,11,124},{10,11,453},{11,11,143},{11,11,416},{11,11,859},{141,11,= 341},{5 -,0,258},{134,0,719},{6,0,1798},{6,0,1839},{8,0,900},{10,0,874},{10,0,886}= ,{12,0, -698},{12,0,732},{12,0,770},{16,0,106},{18,0,163},{18,0,170},{18,0,171},{1= 52,0,20 -},{9,0,707},{11,0,326},{11,0,339},{12,0,423},{12,0,502},{20,0,62},{9,11,7= 07},{11 -,11,326},{11,11,339},{12,11,423},{12,11,502},{148,11,62},{5,0,30},{7,0,49= 5},{8,0 -,134},{9,0,788},{140,0,438},{133,11,678},{5,10,279},{6,10,235},{7,10,468}= ,{8,10, -446},{9,10,637},{10,10,717},{11,10,738},{140,10,514},{5,11,35},{6,11,287}= ,{7,11, -862},{7,11,1886},{138,11,179},{7,0,1948},{7,0,2004},{132,11,517},{5,10,17= },{6,10 -,371},{137,10,528},{4,0,115},{5,0,669},{6,0,407},{8,0,311},{11,0,10},{141= ,0,5},{ -137,0,381},{5,0,50},{6,0,439},{7,0,780},{135,0,1040},{136,11,667},{11,11,= 403},{ -146,11,83},{5,0,1},{6,0,81},{138,0,520},{134,0,738},{5,0,482},{8,0,98},{9= ,0,172} -,{10,0,360},{10,0,700},{10,0,822},{11,0,302},{11,0,778},{12,0,50},{12,0,1= 27},{12 -,0,396},{13,0,62},{13,0,328},{14,0,122},{147,0,72},{9,11,157},{10,11,131}= ,{140, -11,72},{135,11,714},{135,11,539},{5,0,2},{6,0,512},{7,0,797},{7,0,1494},{= 8,0,253 -},{8,0,589},{9,0,77},{10,0,1},{10,0,129},{10,0,225},{11,0,118},{11,0,226}= ,{11,0, -251},{11,0,430},{11,0,701},{11,0,974},{11,0,982},{12,0,64},{12,0,260},{12= ,0,488} -,{140,0,690},{5,11,394},{7,11,367},{7,11,487},{7,11,857},{7,11,1713},{8,1= 1,246}, -{9,11,537},{10,11,165},{12,11,219},{140,11,561},{136,0,557},{5,10,779},{5= ,10,807 -},{6,10,1655},{134,10,1676},{4,10,196},{5,10,558},{133,10,949},{11,11,827= },{12, -11,56},{14,11,34},{143,11,148},{137,0,347},{133,0,572},{134,0,832},{4,0,1= 2},{7,0 -,504},{7,0,522},{7,0,809},{8,0,797},{141,0,88},{4,10,752},{133,11,449},{7= ,11,86} -,{8,11,103},{145,11,69},{7,11,2028},{138,11,641},{5,0,528},{6,11,1},{142,= 11,2},{ -134,0,861},{10,0,294},{4,10,227},{5,10,159},{5,10,409},{7,10,80},{10,10,4= 79},{12 -,10,418},{14,10,50},{14,10,249},{142,10,295},{7,10,1470},{8,10,66},{8,10,= 137},{8 -,10,761},{9,10,638},{11,10,80},{11,10,212},{11,10,368},{11,10,418},{12,10= ,8},{13 -,10,15},{16,10,61},{17,10,59},{19,10,28},{148,10,84},{20,0,109},{135,11,1= 148},{6 -,11,277},{7,11,1274},{7,11,1386},{7,11,1392},{12,11,129},{146,11,87},{6,1= 1,187}, -{7,11,39},{7,11,1203},{8,11,380},{8,11,542},{14,11,117},{149,11,28},{134,= 0,1187} -,{5,0,266},{9,0,290},{9,0,364},{10,0,293},{11,0,606},{142,0,45},{6,11,297= },{7,11 -,793},{139,11,938},{4,0,50},{6,0,594},{9,0,121},{10,0,49},{10,0,412},{139= ,0,834} -,{136,0,748},{7,11,464},{8,11,438},{11,11,105},{11,11,363},{12,11,231},{1= 4,11, -386},{15,11,102},{148,11,75},{132,0,466},{13,0,399},{14,0,337},{6,10,38},= {7,10, -1220},{8,10,185},{8,10,256},{9,10,22},{9,10,331},{10,10,738},{11,10,205},= {11,10, -540},{11,10,746},{13,10,465},{142,10,194},{9,0,378},{141,0,162},{137,0,51= 9},{4, -10,159},{6,10,115},{7,10,252},{7,10,257},{7,10,1928},{8,10,69},{9,10,384}= ,{10,10 -,91},{10,10,615},{12,10,375},{14,10,235},{18,10,117},{147,10,123},{5,11,6= 04},{5, -10,911},{136,10,278},{132,0,667},{8,0,351},{9,0,322},{4,10,151},{135,10,1= 567},{ -134,0,902},{133,10,990},{12,0,180},{5,10,194},{7,10,1662},{137,10,90},{4,= 0,869}, -{134,0,1996},{134,0,813},{133,10,425},{137,11,761},{132,0,260},{133,10,97= 1},{5, -11,20},{6,11,298},{7,11,659},{7,11,1366},{137,11,219},{4,0,39},{5,0,36},{= 7,0, -1843},{8,0,407},{11,0,144},{140,0,523},{4,0,510},{10,0,587},{139,10,752},= {7,0,29 -},{7,0,66},{7,0,1980},{10,0,487},{138,0,809},{13,0,260},{14,0,82},{18,0,6= 3},{137 -,10,662},{5,10,72},{6,10,264},{7,10,21},{7,10,46},{7,10,2013},{8,10,215},= {8,10, -513},{10,10,266},{139,10,22},{134,0,570},{6,0,565},{7,0,1667},{4,11,439},= {10,10, -95},{11,10,603},{12,11,242},{13,10,443},{14,10,160},{143,10,4},{134,0,146= 4},{134 -,10,431},{9,0,372},{15,0,2},{19,0,10},{19,0,18},{5,10,874},{6,10,1677},{1= 43,10,0 -},{132,0,787},{6,0,380},{12,0,399},{21,0,19},{7,10,939},{7,10,1172},{7,10= ,1671}, -{9,10,540},{10,10,696},{11,10,265},{11,10,732},{11,10,928},{11,10,937},{1= 41,10, -438},{137,0,200},{132,11,233},{132,0,516},{134,11,577},{132,0,844},{11,0,= 887},{ -14,0,365},{142,0,375},{132,11,482},{8,0,821},{140,0,44},{7,0,1655},{136,0= ,305},{ -5,10,682},{135,10,1887},{135,11,346},{132,10,696},{4,0,10},{7,0,917},{139= ,0,786} -,{5,11,795},{6,11,1741},{8,11,417},{137,11,782},{4,0,1016},{134,0,2031},{= 5,0,684 -},{4,10,726},{133,10,630},{6,0,1021},{134,0,1480},{8,10,802},{136,10,838}= ,{134,0 -,27},{134,0,395},{135,11,622},{7,11,625},{135,11,1750},{4,11,203},{135,11= ,1936}, -{6,10,118},{7,10,215},{7,10,1521},{140,10,11},{132,0,813},{136,0,511},{7,= 10,615} -,{138,10,251},{135,10,1044},{145,0,56},{133,10,225},{6,0,342},{6,0,496},{= 8,0,275 -},{137,0,206},{4,0,909},{133,0,940},{132,0,891},{7,11,311},{9,11,308},{14= 0,11, -255},{4,10,370},{5,10,756},{135,10,1326},{4,0,687},{134,0,1596},{134,0,13= 42},{6, -10,1662},{7,10,48},{8,10,771},{10,10,116},{13,10,104},{14,10,105},{14,10,= 184},{ -15,10,168},{19,10,92},{148,10,68},{138,10,209},{4,11,400},{5,11,267},{135= ,11,232 -},{151,11,12},{6,0,41},{141,0,160},{141,11,314},{134,0,1718},{136,0,778},= {142,11 -,261},{134,0,1610},{133,0,115},{132,0,294},{14,0,314},{132,10,120},{132,0= ,983},{ -5,0,193},{140,0,178},{138,10,429},{5,10,820},{135,10,931},{6,0,994},{6,0,= 1051},{ -6,0,1439},{7,0,174},{133,11,732},{4,11,100},{7,11,679},{8,11,313},{138,10= ,199},{ -6,10,151},{6,10,1675},{7,10,383},{151,10,10},{6,0,1796},{8,0,848},{8,0,86= 7},{8,0 -,907},{10,0,855},{140,0,703},{140,0,221},{4,0,122},{5,0,796},{5,0,952},{6= ,0,1660 -},{6,0,1671},{8,0,567},{9,0,687},{9,0,742},{10,0,686},{11,0,682},{11,0,90= 9},{140 -,0,281},{5,11,362},{5,11,443},{6,11,318},{7,11,1019},{139,11,623},{5,11,4= 63},{ -136,11,296},{11,0,583},{13,0,262},{6,10,1624},{12,10,422},{142,10,360},{5= ,0,179} -,{7,0,1095},{135,0,1213},{4,10,43},{4,11,454},{5,10,344},{133,10,357},{4,= 0,66},{ -7,0,722},{135,0,904},{134,0,773},{7,0,352},{133,10,888},{5,11,48},{5,11,4= 04},{6, -11,557},{7,11,458},{8,11,597},{10,11,455},{10,11,606},{11,11,49},{11,11,5= 48},{12 -,11,476},{13,11,18},{141,11,450},{134,11,418},{132,10,711},{5,11,442},{13= 5,11, -1984},{141,0,35},{137,0,152},{134,0,1197},{135,11,1093},{137,11,203},{137= ,10,440 -},{10,0,592},{10,0,753},{12,0,317},{12,0,355},{12,0,465},{12,0,469},{12,0= ,560},{ -12,0,578},{141,0,243},{133,0,564},{134,0,797},{5,10,958},{133,10,987},{5,= 11,55}, -{7,11,376},{140,11,161},{133,11,450},{134,0,556},{134,0,819},{11,10,276},= {142,10 -,293},{7,0,544},{138,0,61},{8,0,719},{4,10,65},{5,10,479},{5,10,1004},{7,= 10,1913 -},{8,10,317},{9,10,302},{10,10,612},{141,10,22},{4,0,5},{5,0,498},{8,0,63= 7},{9,0 -,521},{4,11,213},{4,10,261},{7,11,223},{7,10,510},{136,11,80},{5,0,927},{= 7,0,101 -},{4,10,291},{7,11,381},{7,11,806},{7,11,820},{8,11,354},{8,11,437},{8,11= ,787},{ -9,10,515},{9,11,657},{10,11,58},{10,11,339},{10,11,749},{11,11,914},{12,1= 0,152}, -{12,11,162},{12,10,443},{13,11,75},{13,10,392},{14,11,106},{14,11,198},{1= 4,11, -320},{14,10,357},{14,11,413},{146,11,43},{6,0,1153},{7,0,1441},{136,11,74= 7},{4,0 -,893},{5,0,780},{133,0,893},{138,11,654},{133,11,692},{133,0,238},{134,11= ,191},{ -4,10,130},{135,10,843},{6,0,1296},{5,10,42},{5,10,879},{7,10,245},{7,10,3= 24},{7, -10,1532},{11,10,463},{11,10,472},{13,10,363},{144,10,52},{134,0,1729},{6,= 0,1999} -,{136,0,969},{4,10,134},{133,10,372},{4,0,60},{7,0,941},{7,0,1800},{8,0,3= 14},{9, -0,700},{139,0,487},{134,0,1144},{6,11,162},{7,11,1960},{136,11,831},{132,= 11,706} -,{135,0,1147},{138,11,426},{138,11,89},{7,0,1853},{138,0,437},{136,0,419}= ,{135, -10,1634},{133,0,828},{5,0,806},{7,0,176},{7,0,178},{7,0,1240},{7,0,1976},= {132,10 -,644},{135,11,1877},{5,11,420},{135,11,1449},{4,0,51},{5,0,39},{6,0,4},{7= ,0,591} -,{7,0,849},{7,0,951},{7,0,1613},{7,0,1760},{7,0,1988},{9,0,434},{10,0,754= },{11,0 -,25},{139,0,37},{10,11,57},{138,11,277},{135,10,540},{132,11,204},{135,0,= 159},{ -139,11,231},{133,0,902},{7,0,928},{7,11,366},{9,11,287},{12,11,199},{12,1= 1,556}, -{140,11,577},{6,10,623},{136,10,789},{4,10,908},{5,10,359},{5,10,508},{6,= 10,1723 -},{7,10,343},{7,10,1996},{135,10,2026},{134,0,270},{4,10,341},{135,10,480= },{5,11 -,356},{135,11,224},{11,11,588},{11,11,864},{11,11,968},{143,11,160},{132,= 0,556}, -{137,0,801},{132,0,416},{142,0,372},{5,0,152},{5,0,197},{7,0,340},{7,0,86= 7},{10, -0,548},{10,0,581},{11,0,6},{12,0,3},{12,0,19},{14,0,110},{142,0,289},{139= ,0,369} -,{7,11,630},{9,11,567},{11,11,150},{11,11,444},{141,11,119},{134,11,539},= {7,10, -1995},{8,10,299},{11,10,890},{140,10,674},{7,0,34},{7,0,190},{8,0,28},{8,= 0,141}, -{8,0,444},{8,0,811},{9,0,468},{11,0,334},{12,0,24},{12,0,386},{140,0,576}= ,{133,0 -,757},{7,0,1553},{136,0,898},{133,0,721},{136,0,1012},{4,0,789},{5,0,647}= ,{135,0 -,1102},{132,0,898},{10,0,183},{4,10,238},{5,10,503},{6,10,179},{7,10,2003= },{8,10 -,381},{8,10,473},{9,10,149},{10,10,788},{15,10,45},{15,10,86},{20,10,110}= ,{150, -10,57},{9,0,136},{19,0,107},{4,10,121},{5,10,156},{5,10,349},{10,10,605},= {142,10 -,342},{4,11,235},{135,11,255},{4,11,194},{5,11,584},{6,11,384},{7,11,583}= ,{10,11 -,761},{11,11,760},{139,11,851},{6,10,80},{6,10,1694},{7,10,173},{7,10,197= 4},{9, -10,547},{10,10,730},{14,10,18},{150,10,39},{4,10,923},{134,10,1711},{5,0,= 277},{ -141,0,247},{132,0,435},{133,11,562},{134,0,1311},{5,11,191},{137,11,271},= {132,10 -,595},{7,11,1537},{14,11,96},{143,11,73},{5,0,437},{7,0,502},{7,0,519},{7= ,0,1122 -},{7,0,1751},{14,0,211},{6,10,459},{7,10,1753},{7,10,1805},{8,10,658},{9,= 10,1},{ -11,10,959},{141,10,446},{6,0,814},{4,11,470},{5,11,473},{6,11,153},{7,11,= 1503},{ -7,11,1923},{10,11,701},{11,11,132},{11,11,168},{11,11,227},{11,11,320},{1= 1,11, -436},{11,11,525},{11,11,855},{12,11,41},{12,11,286},{13,11,103},{13,11,28= 4},{14, -11,255},{14,11,262},{15,11,117},{143,11,127},{5,0,265},{6,0,212},{135,0,2= 8},{138 -,0,750},{133,11,327},{6,11,552},{7,11,1754},{137,11,604},{134,0,2012},{13= 2,0,702 -},{5,11,80},{6,11,405},{7,11,403},{7,11,1502},{7,11,1626},{8,11,456},{9,1= 1,487}, -{9,11,853},{9,11,889},{10,11,309},{11,11,721},{11,11,994},{12,11,430},{14= 1,11, -165},{5,0,808},{135,0,2045},{5,0,166},{8,0,739},{140,0,511},{134,10,490},= {4,11, -453},{5,11,887},{6,11,535},{8,11,6},{136,11,543},{4,0,119},{5,0,170},{5,0= ,447},{ -7,0,1708},{7,0,1889},{9,0,357},{9,0,719},{12,0,486},{140,0,596},{137,0,50= 0},{7, -10,250},{136,10,507},{132,10,158},{6,0,809},{134,0,1500},{9,0,327},{11,0,= 350},{ -11,0,831},{13,0,352},{4,10,140},{7,10,362},{8,10,209},{9,10,10},{9,10,503= },{9,10 -,614},{10,10,689},{11,10,327},{11,10,725},{12,10,252},{12,10,583},{13,10,= 192},{ -14,10,269},{14,10,356},{148,10,50},{135,11,741},{4,0,450},{7,0,1158},{19,= 10,1},{ -19,10,26},{150,10,9},{6,0,597},{135,0,1318},{134,0,1602},{6,10,228},{7,10= ,1341}, -{9,10,408},{138,10,343},{7,0,1375},{7,0,1466},{138,0,331},{132,0,754},{13= 2,10, -557},{5,11,101},{6,11,88},{6,11,543},{7,11,1677},{9,11,100},{10,11,677},{= 14,11, -169},{14,11,302},{14,11,313},{15,11,48},{143,11,84},{134,0,1368},{4,11,31= 0},{9, -11,795},{10,11,733},{11,11,451},{12,11,249},{14,11,115},{14,11,286},{143,= 11,100} -,{132,10,548},{10,0,557},{7,10,197},{8,10,142},{8,10,325},{9,10,150},{9,1= 0,596}, -{10,10,353},{11,10,74},{11,10,315},{12,10,662},{12,10,681},{14,10,423},{1= 43,10, -141},{133,11,587},{5,0,850},{136,0,799},{10,0,908},{12,0,701},{12,0,757},= {142,0, -466},{4,0,62},{5,0,275},{18,0,19},{6,10,399},{6,10,579},{7,10,692},{7,10,= 846},{7 -,10,1015},{7,10,1799},{8,10,403},{9,10,394},{10,10,133},{12,10,4},{12,10,= 297},{ -12,10,452},{16,10,81},{18,10,25},{21,10,14},{22,10,12},{151,10,18},{12,0,= 459},{7 -,10,1546},{11,10,299},{142,10,407},{132,10,177},{132,11,498},{7,11,217},{= 8,11, -140},{138,11,610},{5,10,411},{135,10,653},{134,0,1802},{7,10,439},{10,10,= 727},{ -11,10,260},{139,10,684},{133,11,905},{11,11,580},{142,11,201},{134,0,1397= },{5,10 -,208},{7,10,753},{135,10,1528},{7,0,238},{7,0,2033},{8,0,120},{8,0,188},{= 8,0,659 -},{9,0,598},{10,0,466},{12,0,342},{12,0,588},{13,0,503},{14,0,246},{143,0= ,92},{ -135,11,1041},{4,11,456},{7,11,105},{7,11,358},{7,11,1637},{8,11,643},{139= ,11,483 -},{6,0,1318},{134,0,1324},{4,0,201},{7,0,1744},{8,0,602},{11,0,247},{11,0= ,826},{ -17,0,65},{133,10,242},{8,0,164},{146,0,62},{133,10,953},{139,10,802},{133= ,0,615} -,{7,11,1566},{8,11,269},{9,11,212},{9,11,718},{14,11,15},{14,11,132},{142= ,11,227 -},{133,10,290},{132,10,380},{5,10,52},{7,10,277},{9,10,368},{139,10,791},= {135,0, -1243},{133,11,539},{11,11,919},{141,11,409},{136,0,968},{133,11,470},{134= ,0,882} -,{132,0,907},{5,0,100},{10,0,329},{12,0,416},{149,0,29},{10,10,138},{139,= 10,476} -,{5,10,725},{5,10,727},{6,11,91},{7,11,435},{135,10,1811},{4,11,16},{5,11= ,316},{ -5,11,842},{6,11,370},{6,11,1778},{8,11,166},{11,11,812},{12,11,206},{12,1= 1,351}, -{14,11,418},{16,11,15},{16,11,34},{18,11,3},{19,11,3},{19,11,7},{20,11,4}= ,{149, -11,21},{132,0,176},{5,0,636},{5,0,998},{7,0,9},{7,0,1508},{8,0,26},{9,0,3= 17},{9, -0,358},{10,0,210},{10,0,292},{10,0,533},{11,0,555},{12,0,526},{12,0,607},= {13,0, -263},{13,0,459},{142,0,271},{6,0,256},{8,0,265},{4,10,38},{7,10,307},{7,1= 0,999}, -{7,10,1481},{7,10,1732},{7,10,1738},{9,10,414},{11,10,316},{12,10,52},{13= ,10,420 -},{147,10,100},{135,10,1296},{4,11,611},{133,11,606},{4,0,643},{142,11,21= },{133, -11,715},{133,10,723},{6,0,610},{135,11,597},{10,0,127},{141,0,27},{6,0,19= 95},{6, -0,2001},{8,0,119},{136,0,973},{4,11,149},{138,11,368},{12,0,522},{4,11,15= 4},{5, -10,109},{6,10,1784},{7,11,1134},{7,10,1895},{8,11,105},{12,10,296},{140,1= 0,302}, -{4,11,31},{6,11,429},{7,11,962},{9,11,458},{139,11,691},{10,0,553},{11,0,= 876},{ -13,0,193},{13,0,423},{14,0,166},{19,0,84},{4,11,312},{5,10,216},{7,10,187= 9},{9, -10,141},{9,10,270},{9,10,679},{10,10,159},{11,10,197},{12,10,538},{12,10,= 559},{ -14,10,144},{14,10,167},{143,10,67},{134,0,1582},{7,0,1578},{135,11,1578},= {137,10 -,81},{132,11,236},{134,10,391},{134,0,795},{7,10,322},{136,10,249},{5,11,= 836},{5 -,11,857},{6,11,1680},{7,11,59},{147,11,53},{135,0,432},{10,11,68},{139,11= ,494},{ -4,11,81},{139,11,867},{7,0,126},{136,0,84},{142,11,280},{5,11,282},{8,11,= 650},{9 -,11,295},{9,11,907},{138,11,443},{136,0,790},{5,10,632},{138,10,526},{6,0= ,64},{ -12,0,377},{13,0,309},{14,0,141},{14,0,429},{14,11,141},{142,11,429},{134,= 0,1529} -,{6,0,321},{7,0,1857},{9,0,530},{19,0,99},{7,10,948},{7,10,1042},{8,10,23= 5},{8, -10,461},{9,10,453},{10,10,354},{145,10,77},{7,0,1104},{11,0,269},{11,0,53= 9},{11, -0,627},{11,0,706},{11,0,975},{12,0,248},{12,0,434},{12,0,600},{12,0,622},= {13,0, -297},{13,0,485},{14,0,69},{14,0,409},{143,0,108},{4,10,362},{7,10,52},{7,= 10,303} -,{10,11,70},{12,11,26},{14,11,17},{14,11,178},{15,11,34},{149,11,12},{11,= 0,977}, -{141,0,507},{9,0,34},{139,0,484},{5,10,196},{6,10,486},{7,10,212},{8,10,3= 09},{ -136,10,346},{6,0,1700},{7,0,26},{7,0,293},{7,0,382},{7,0,1026},{7,0,1087}= ,{7,0, -2027},{8,0,24},{8,0,114},{8,0,252},{8,0,727},{8,0,729},{9,0,30},{9,0,199}= ,{9,0, -231},{9,0,251},{9,0,334},{9,0,361},{9,0,712},{10,0,55},{10,0,60},{10,0,23= 2},{10, -0,332},{10,0,384},{10,0,396},{10,0,504},{10,0,542},{10,0,652},{11,0,20},{= 11,0,48 -},{11,0,207},{11,0,291},{11,0,298},{11,0,342},{11,0,365},{11,0,394},{11,0= ,620},{ -11,0,705},{11,0,1017},{12,0,123},{12,0,340},{12,0,406},{12,0,643},{13,0,6= 1},{13, -0,269},{13,0,311},{13,0,319},{13,0,486},{14,0,234},{15,0,62},{15,0,85},{1= 6,0,71} -,{18,0,119},{20,0,105},{135,10,1912},{4,11,71},{5,11,376},{7,11,119},{138= ,11,665 -},{10,0,918},{10,0,926},{4,10,686},{136,11,55},{138,10,625},{136,10,706},= {132,11 -,479},{4,10,30},{133,10,43},{6,0,379},{7,0,270},{8,0,176},{8,0,183},{9,0,= 432},{9 -,0,661},{12,0,247},{12,0,617},{18,0,125},{7,11,607},{8,11,99},{152,11,4},= {5,0, -792},{133,0,900},{4,11,612},{133,11,561},{4,11,41},{4,10,220},{5,11,74},{= 7,10, -1535},{7,11,1627},{11,11,871},{140,11,619},{135,0,1920},{7,11,94},{11,11,= 329},{ -11,11,965},{12,11,241},{14,11,354},{15,11,22},{148,11,63},{9,11,209},{137= ,11,300 -},{134,0,771},{135,0,1979},{4,0,901},{133,0,776},{142,0,254},{133,11,98},= {9,11, -16},{141,11,386},{133,11,984},{4,11,182},{6,11,205},{135,11,220},{7,10,17= 25},{7, -10,1774},{138,10,393},{5,10,263},{134,10,414},{4,11,42},{9,11,205},{9,11,= 786},{ -138,11,659},{14,0,140},{148,0,41},{8,0,440},{10,0,359},{6,10,178},{6,11,2= 89},{6, -10,1750},{7,11,1670},{9,10,690},{10,10,155},{10,10,373},{11,10,698},{12,1= 1,57},{ -13,10,155},{20,10,93},{151,11,4},{4,0,37},{5,0,334},{7,0,1253},{151,11,25= },{4,0, -508},{4,11,635},{5,10,97},{137,10,393},{139,11,533},{4,0,640},{133,0,513}= ,{134, -10,1639},{132,11,371},{4,11,272},{7,11,836},{7,11,1651},{145,11,89},{5,11= ,825},{ -6,11,444},{6,11,1640},{136,11,308},{4,10,191},{7,10,934},{8,10,647},{145,= 10,97}, -{12,0,246},{15,0,162},{19,0,64},{20,0,8},{20,0,95},{22,0,24},{152,0,17},{= 4,0,533 -},{5,10,165},{9,10,346},{138,10,655},{5,11,737},{139,10,885},{133,10,877}= ,{8,10, -128},{139,10,179},{137,11,307},{140,0,752},{133,0,920},{135,0,1048},{5,0,= 153},{6 -,0,580},{6,10,1663},{7,10,132},{7,10,1154},{7,10,1415},{7,10,1507},{12,10= ,493},{ -15,10,105},{151,10,15},{5,10,459},{7,10,1073},{8,10,241},{136,10,334},{13= 8,0,391 -},{135,0,1952},{133,11,525},{8,11,641},{11,11,388},{140,11,580},{142,0,12= 6},{134 -,0,640},{132,0,483},{7,0,1616},{9,0,69},{6,10,324},{6,10,520},{7,10,338},= {7,10, -1729},{8,10,228},{139,10,750},{5,11,493},{134,11,528},{135,0,734},{4,11,1= 74},{ -135,11,911},{138,0,480},{9,0,495},{146,0,104},{135,10,705},{9,0,472},{4,1= 0,73},{ -6,10,612},{7,10,927},{7,10,1330},{7,10,1822},{8,10,217},{9,10,765},{9,10,= 766},{ -10,10,408},{11,10,51},{11,10,793},{12,10,266},{15,10,158},{20,10,89},{150= ,10,32} -,{7,11,548},{137,11,58},{4,11,32},{5,11,215},{6,11,269},{7,11,1782},{7,11= ,1892}, -{10,11,16},{11,11,822},{11,11,954},{141,11,481},{132,0,874},{9,0,229},{5,= 10,389} -,{136,10,636},{7,11,1749},{136,11,477},{134,0,948},{5,11,308},{135,11,108= 8},{4,0 -,748},{139,0,1009},{136,10,21},{6,0,555},{135,0,485},{5,11,126},{8,11,297= },{9,11 -,366},{9,11,445},{12,11,53},{12,11,374},{141,11,492},{7,11,1551},{139,11,= 361},{ -136,0,193},{136,0,472},{8,0,653},{13,0,93},{147,0,14},{132,0,984},{132,11= ,175},{ -5,0,172},{6,0,1971},{132,11,685},{149,11,8},{133,11,797},{13,0,83},{5,10,= 189},{7 -,10,442},{7,10,443},{8,10,281},{12,10,174},{141,10,261},{134,0,1568},{133= ,11,565 -},{139,0,384},{133,0,260},{7,0,758},{7,0,880},{7,0,1359},{9,0,164},{9,0,1= 67},{10 -,0,156},{10,0,588},{12,0,101},{14,0,48},{15,0,70},{6,10,2},{7,10,1262},{7= ,10, -1737},{8,10,22},{8,10,270},{8,10,612},{9,10,312},{9,10,436},{10,10,311},{= 10,10, -623},{11,10,72},{11,10,330},{11,10,455},{12,10,321},{12,10,504},{12,10,53= 0},{12, -10,543},{13,10,17},{13,10,156},{13,10,334},{17,10,60},{148,10,64},{4,11,2= 52},{7, -11,1068},{10,11,434},{11,11,228},{11,11,426},{13,11,231},{18,11,106},{148= ,11,87} -,{7,10,354},{10,10,410},{139,10,815},{6,0,367},{7,10,670},{7,10,1327},{8,= 10,411} -,{8,10,435},{9,10,653},{9,10,740},{10,10,385},{11,10,222},{11,10,324},{11= ,10,829 -},{140,10,611},{7,0,1174},{6,10,166},{135,10,374},{146,0,121},{132,0,828}= ,{5,11, -231},{138,11,509},{7,11,601},{9,11,277},{9,11,674},{10,11,178},{10,11,257= },{10, -11,418},{11,11,531},{11,11,544},{11,11,585},{12,11,113},{12,11,475},{13,1= 1,99},{ -142,11,428},{134,0,1541},{135,11,1779},{5,0,343},{134,10,398},{135,10,50}= ,{135, -11,1683},{4,0,440},{7,0,57},{8,0,167},{8,0,375},{9,0,82},{9,0,561},{9,0,7= 44},{10 -,0,620},{137,11,744},{134,0,926},{6,10,517},{7,10,1159},{10,10,621},{139,= 10,192} -,{137,0,827},{8,0,194},{136,0,756},{10,10,223},{139,10,645},{7,10,64},{13= 6,10, -245},{4,11,399},{5,11,119},{5,11,494},{7,11,751},{137,11,556},{132,0,808}= ,{135,0 -,22},{7,10,1763},{140,10,310},{5,0,639},{7,0,1249},{11,0,896},{134,11,584= },{134, -0,1614},{135,0,860},{135,11,1121},{5,10,129},{6,10,61},{135,10,947},{4,0,= 102},{7 -,0,815},{7,0,1699},{139,0,964},{13,10,505},{141,10,506},{139,10,1000},{13= 2,11, -679},{132,0,899},{132,0,569},{5,11,694},{137,11,714},{136,0,795},{6,0,204= 5},{139 -,11,7},{6,0,52},{9,0,104},{9,0,559},{12,0,308},{147,0,87},{4,0,301},{132,= 0,604}, -{133,10,637},{136,0,779},{5,11,143},{5,11,769},{6,11,1760},{7,11,682},{7,= 11,1992 -},{136,11,736},{137,10,590},{147,0,32},{137,11,527},{5,10,280},{135,10,12= 26},{ -134,0,494},{6,0,677},{6,0,682},{134,0,1044},{133,10,281},{135,10,1064},{7= ,0,508} -,{133,11,860},{6,11,422},{7,11,0},{7,11,1544},{9,11,577},{11,11,990},{12,= 11,141} -,{12,11,453},{13,11,47},{141,11,266},{134,0,1014},{5,11,515},{137,11,131}= ,{134,0 -,957},{132,11,646},{6,0,310},{7,0,1849},{8,0,72},{8,0,272},{8,0,431},{9,0= ,12},{9 -,0,376},{10,0,563},{10,0,630},{10,0,796},{10,0,810},{11,0,367},{11,0,599}= ,{11,0, -686},{140,0,672},{7,0,570},{4,11,396},{7,10,120},{7,11,728},{8,10,489},{9= ,11,117 -},{9,10,319},{10,10,820},{11,10,1004},{12,10,379},{12,10,679},{13,10,117}= ,{13,11 -,202},{13,10,412},{14,10,25},{15,10,52},{15,10,161},{16,10,47},{20,11,51}= ,{149, -10,2},{6,11,121},{6,11,124},{6,11,357},{7,11,1138},{7,11,1295},{8,11,162}= ,{139, -11,655},{8,0,449},{4,10,937},{5,10,801},{136,11,449},{139,11,958},{6,0,18= 1},{7,0 -,537},{8,0,64},{9,0,127},{10,0,496},{12,0,510},{141,0,384},{138,11,253},{= 4,0,244 -},{135,0,233},{133,11,237},{132,10,365},{6,0,1650},{10,0,702},{139,0,245}= ,{5,10, -7},{139,10,774},{13,0,463},{20,0,49},{13,11,463},{148,11,49},{4,10,734},{= 5,10, -662},{134,10,430},{4,10,746},{135,10,1090},{5,10,360},{136,10,237},{137,0= ,338},{ -143,11,10},{7,11,571},{138,11,366},{134,0,1279},{9,11,513},{10,11,22},{10= ,11,39} -,{12,11,122},{140,11,187},{133,0,896},{146,0,178},{134,0,695},{137,0,808}= ,{134, -11,587},{7,11,107},{7,11,838},{8,11,550},{138,11,401},{7,0,1117},{136,0,5= 39},{4, -10,277},{5,10,608},{6,10,493},{7,10,457},{140,10,384},{133,11,768},{12,0,= 257},{7 -,10,27},{135,10,316},{140,0,1003},{4,0,207},{5,0,586},{5,0,676},{6,0,448}= ,{8,0, -244},{11,0,1},{13,0,3},{16,0,54},{17,0,4},{18,0,13},{133,10,552},{4,10,40= 1},{137 -,10,264},{5,0,516},{7,0,1883},{135,11,1883},{12,0,960},{132,11,894},{5,0,= 4},{5,0 -,810},{6,0,13},{6,0,538},{6,0,1690},{6,0,1726},{7,0,499},{7,0,1819},{8,0,= 148},{8 -,0,696},{8,0,791},{12,0,125},{143,0,9},{135,0,1268},{11,0,30},{14,0,315},= {9,10, -543},{10,10,524},{12,10,524},{16,10,18},{20,10,26},{148,10,65},{6,0,748},= {4,10, -205},{5,10,623},{7,10,104},{136,10,519},{11,0,542},{139,0,852},{140,0,6},= {132,0, -848},{7,0,1385},{11,0,582},{11,0,650},{11,0,901},{11,0,949},{12,0,232},{1= 2,0,236 -},{13,0,413},{13,0,501},{18,0,116},{7,10,579},{9,10,41},{9,10,244},{9,10,= 669},{ -10,10,5},{11,10,861},{11,10,951},{139,10,980},{4,0,945},{6,0,1811},{6,0,1= 845},{6 -,0,1853},{6,0,1858},{8,0,862},{12,0,782},{12,0,788},{18,0,160},{148,0,117= },{132, -10,717},{4,0,925},{5,0,803},{8,0,698},{138,0,828},{134,0,1416},{132,0,610= },{139, -0,992},{6,0,878},{134,0,1477},{135,0,1847},{138,11,531},{137,11,539},{134= ,11,272 -},{133,0,383},{134,0,1404},{132,10,489},{4,11,9},{5,11,128},{7,11,368},{1= 1,11, -480},{148,11,3},{136,0,986},{9,0,660},{138,0,347},{135,10,892},{136,11,68= 2},{7,0 -,572},{9,0,592},{11,0,680},{12,0,356},{140,0,550},{7,0,1411},{138,11,527}= ,{4,11, -2},{7,11,545},{135,11,894},{137,10,473},{11,0,64},{7,11,481},{7,10,819},{= 9,10,26 -},{9,10,392},{9,11,792},{10,10,152},{10,10,226},{12,10,276},{12,10,426},{= 12,10, -589},{13,10,460},{15,10,97},{19,10,48},{148,10,104},{135,10,51},{136,11,4= 45},{ -136,11,646},{135,0,606},{132,10,674},{6,0,1829},{134,0,1830},{132,10,770}= ,{5,10, -79},{7,10,1027},{7,10,1477},{139,10,52},{5,11,530},{142,11,113},{134,10,1= 666},{7 -,0,748},{139,0,700},{134,10,195},{133,10,789},{9,0,87},{10,0,365},{4,10,2= 51},{4, -10,688},{7,10,513},{135,10,1284},{136,11,111},{133,0,127},{6,0,198},{140,= 0,83},{ -133,11,556},{133,10,889},{4,10,160},{5,10,330},{7,10,1434},{136,10,174},{= 5,0,276 -},{6,0,55},{7,0,1369},{138,0,864},{8,11,16},{140,11,568},{6,0,1752},{136,= 0,726}, -{135,0,1066},{133,0,764},{6,11,186},{137,11,426},{11,0,683},{139,11,683},= {6,0, -309},{7,0,331},{138,0,550},{133,10,374},{6,0,1212},{6,0,1852},{7,0,1062},= {8,0, -874},{8,0,882},{138,0,936},{132,11,585},{134,0,1364},{7,0,986},{133,10,73= 1},{6,0 -,723},{6,0,1408},{138,0,381},{135,0,1573},{134,0,1025},{4,10,626},{5,10,6= 42},{6, -10,425},{10,10,202},{139,10,141},{4,11,93},{5,11,252},{6,11,229},{7,11,29= 1},{9, -11,550},{139,11,644},{137,11,749},{137,11,162},{132,11,381},{135,0,1559},= {6,0, -194},{7,0,133},{10,0,493},{10,0,570},{139,0,664},{5,0,24},{5,0,569},{6,0,= 3},{6,0 -,119},{6,0,143},{6,0,440},{7,0,295},{7,0,599},{7,0,1686},{7,0,1854},{8,0,= 424},{9 -,0,43},{9,0,584},{9,0,760},{10,0,148},{10,0,328},{11,0,159},{11,0,253},{1= 1,0,506 -},{12,0,487},{140,0,531},{6,0,661},{134,0,1517},{136,10,835},{151,10,17},= {5,0,14 -},{5,0,892},{6,0,283},{7,0,234},{136,0,537},{139,0,541},{4,0,126},{8,0,63= 5},{147 -,0,34},{4,0,316},{4,0,495},{135,0,1561},{4,11,187},{5,11,184},{5,11,690},= {7,11, -1869},{138,11,756},{139,11,783},{4,0,998},{137,0,861},{136,0,1009},{139,1= 1,292}, -{5,11,21},{6,11,77},{6,11,157},{7,11,974},{7,11,1301},{7,11,1339},{7,11,1= 490},{7 -,11,1873},{137,11,628},{7,11,1283},{9,11,227},{9,11,499},{10,11,341},{11,= 11,325} -,{11,11,408},{14,11,180},{15,11,144},{18,11,47},{147,11,49},{4,0,64},{5,0= ,352},{ -5,0,720},{6,0,368},{139,0,359},{5,10,384},{8,10,455},{140,10,48},{5,10,26= 4},{134 -,10,184},{7,0,1577},{10,0,304},{10,0,549},{12,0,365},{13,0,220},{13,0,240= },{142, -0,33},{134,0,1107},{134,0,929},{135,0,1142},{6,0,175},{137,0,289},{5,0,43= 2},{133 -,0,913},{6,0,279},{7,0,219},{5,10,633},{135,10,1323},{7,0,785},{7,10,359}= ,{8,10, -243},{140,10,175},{139,0,595},{132,10,105},{8,11,398},{9,11,681},{139,11,= 632},{ -140,0,80},{5,0,931},{134,0,1698},{142,11,241},{134,11,20},{134,0,1323},{1= 1,0,526 -},{11,0,939},{141,0,290},{5,0,774},{6,0,780},{6,0,1637},{6,0,1686},{6,0,1= 751},{8 -,0,559},{141,0,109},{141,0,127},{7,0,1167},{11,0,934},{13,0,391},{17,0,76= },{135, -11,709},{135,0,963},{6,0,260},{135,0,1484},{134,0,573},{4,10,758},{139,11= ,941},{ -135,10,1649},{145,11,36},{4,0,292},{137,0,580},{4,0,736},{5,0,871},{6,0,1= 689},{ -135,0,1944},{7,11,945},{11,11,713},{139,11,744},{134,0,1164},{135,11,937}= ,{6,0, -1922},{9,0,982},{15,0,173},{15,0,178},{15,0,200},{18,0,189},{18,0,207},{2= 1,0,47} -,{135,11,1652},{7,0,1695},{139,10,128},{6,0,63},{135,0,920},{133,0,793},{= 143,11, -134},{133,10,918},{5,0,67},{6,0,62},{6,0,374},{135,0,1391},{9,0,790},{12,= 0,47},{ -4,11,579},{5,11,226},{5,11,323},{135,11,960},{10,11,784},{141,11,191},{4,= 0,391}, -{135,0,1169},{137,0,443},{13,11,232},{146,11,35},{132,10,340},{132,0,271}= ,{137, -11,313},{5,11,973},{137,11,659},{134,0,1140},{6,11,135},{135,11,1176},{4,= 0,253}, -{5,0,544},{7,0,300},{137,0,340},{7,0,897},{5,10,985},{7,10,509},{145,10,9= 6},{138 -,11,735},{135,10,1919},{138,0,890},{5,0,818},{134,0,1122},{5,0,53},{5,0,5= 41},{6, -0,94},{6,0,499},{7,0,230},{139,0,321},{4,0,920},{5,0,25},{5,0,790},{6,0,4= 57},{7, -0,853},{8,0,788},{142,11,31},{132,10,247},{135,11,314},{132,0,468},{7,0,2= 43},{6, -10,337},{7,10,494},{8,10,27},{8,10,599},{138,10,153},{4,10,184},{5,10,390= },{7,10 -,618},{7,10,1456},{139,10,710},{134,0,870},{134,0,1238},{134,0,1765},{10,= 0,853}, -{10,0,943},{14,0,437},{14,0,439},{14,0,443},{14,0,446},{14,0,452},{14,0,4= 69},{14 -,0,471},{14,0,473},{16,0,93},{16,0,102},{16,0,110},{148,0,121},{4,0,605},= {7,0, -518},{7,0,1282},{7,0,1918},{10,0,180},{139,0,218},{133,0,822},{4,0,634},{= 11,0, -916},{142,0,419},{6,11,281},{7,11,6},{8,11,282},{8,11,480},{8,11,499},{9,= 11,198} -,{10,11,143},{10,11,169},{10,11,211},{10,11,417},{10,11,574},{11,11,147},= {11,11, -395},{12,11,75},{12,11,407},{12,11,608},{13,11,500},{142,11,251},{134,0,8= 98},{6, -0,36},{7,0,658},{8,0,454},{150,11,48},{133,11,674},{135,11,1776},{4,11,41= 9},{10, -10,227},{11,10,497},{11,10,709},{140,10,415},{6,10,360},{7,10,1664},{136,= 10,478} -,{137,0,806},{12,11,508},{14,11,102},{14,11,226},{144,11,57},{135,11,1123= },{4,11 -,138},{7,11,1012},{7,11,1280},{137,11,76},{5,11,29},{140,11,638},{136,10,= 699},{ -134,0,1326},{132,0,104},{135,11,735},{132,10,739},{134,0,1331},{7,0,260},= {135,11 -,260},{135,11,1063},{7,0,45},{9,0,542},{9,0,566},{10,0,728},{137,10,869},= {4,10, -67},{5,10,422},{7,10,1037},{7,10,1289},{7,10,1555},{9,10,741},{145,10,108= },{139, -0,263},{134,0,1516},{14,0,146},{15,0,42},{16,0,23},{17,0,86},{146,0,17},{= 138,0, -468},{136,0,1005},{4,11,17},{5,11,23},{7,11,995},{11,11,383},{11,11,437},= {12,11, -460},{140,11,532},{7,0,87},{142,0,288},{138,10,96},{135,11,626},{144,10,2= 6},{7,0 -,988},{7,0,1939},{9,0,64},{9,0,502},{12,0,22},{12,0,34},{13,0,12},{13,0,2= 34},{ -147,0,77},{13,0,133},{8,10,203},{11,10,823},{11,10,846},{12,10,482},{13,1= 0,277}, -{13,10,302},{13,10,464},{14,10,205},{142,10,221},{4,10,449},{133,10,718},= {135,0, -141},{6,0,1842},{136,0,872},{8,11,70},{12,11,171},{141,11,272},{4,10,355}= ,{6,10, -311},{9,10,256},{138,10,404},{132,0,619},{137,0,261},{10,11,233},{10,10,7= 58},{ -139,11,76},{5,0,246},{8,0,189},{9,0,355},{9,0,512},{10,0,124},{10,0,453},= {11,0, -143},{11,0,416},{11,0,859},{141,0,341},{134,11,442},{133,10,827},{5,10,64= },{140, -10,581},{4,10,442},{7,10,1047},{7,10,1352},{135,10,1643},{134,11,1709},{5= ,0,678} -,{6,0,305},{7,0,775},{7,0,1065},{133,10,977},{11,11,69},{12,11,105},{12,1= 1,117}, -{13,11,213},{14,11,13},{14,11,62},{14,11,177},{14,11,421},{15,11,19},{146= ,11,141 -},{137,11,309},{5,0,35},{7,0,862},{7,0,1886},{138,0,179},{136,0,285},{132= ,0,517} -,{7,11,976},{9,11,146},{10,11,206},{10,11,596},{13,11,218},{142,11,153},{= 132,10, -254},{6,0,214},{12,0,540},{4,10,275},{7,10,1219},{140,10,376},{8,0,667},{= 11,0, -403},{146,0,83},{12,0,74},{10,11,648},{11,11,671},{143,11,46},{135,0,125}= ,{134, -10,1753},{133,0,761},{6,0,912},{4,11,518},{6,10,369},{6,10,502},{7,10,103= 6},{7, -11,1136},{8,10,348},{9,10,452},{10,10,26},{11,10,224},{11,10,387},{11,10,= 772},{ -12,10,95},{12,10,629},{13,10,195},{13,10,207},{13,10,241},{14,10,260},{14= ,10,270 -},{143,10,140},{10,0,131},{140,0,72},{132,10,269},{5,10,480},{7,10,532},{= 7,10, -1197},{7,10,1358},{8,10,291},{11,10,349},{142,10,396},{8,11,689},{137,11,= 863},{8 -,0,333},{138,0,182},{4,11,18},{7,11,145},{7,11,444},{7,11,1278},{8,11,49}= ,{8,11, -400},{9,11,71},{9,11,250},{10,11,459},{12,11,160},{144,11,24},{14,11,35},= {142,11 -,191},{135,11,1864},{135,0,1338},{148,10,15},{14,0,94},{15,0,65},{16,0,4}= ,{16,0, -77},{16,0,80},{145,0,5},{12,11,82},{143,11,36},{133,11,1010},{133,0,449},= {133,0, -646},{7,0,86},{8,0,103},{135,10,657},{7,0,2028},{138,0,641},{136,10,533},= {134,0, -1},{139,11,970},{5,11,87},{7,11,313},{7,11,1103},{10,11,112},{10,11,582},= {11,11, -389},{11,11,813},{12,11,385},{13,11,286},{14,11,124},{146,11,108},{6,0,86= 9},{132 -,11,267},{6,0,277},{7,0,1274},{7,0,1386},{146,0,87},{6,0,187},{7,0,39},{7= ,0,1203 -},{8,0,380},{14,0,117},{149,0,28},{4,10,211},{4,10,332},{5,10,335},{6,10,= 238},{7 -,10,269},{7,10,811},{7,10,1797},{8,10,836},{9,10,507},{141,10,242},{4,0,7= 85},{5, -0,368},{6,0,297},{7,0,793},{139,0,938},{7,0,464},{8,0,558},{11,0,105},{12= ,0,231} -,{14,0,386},{15,0,102},{148,0,75},{133,10,1009},{8,0,877},{140,0,731},{13= 9,11, -289},{10,11,249},{139,11,209},{132,11,561},{134,0,1608},{132,11,760},{134= ,0,1429 -},{9,11,154},{140,11,485},{5,10,228},{6,10,203},{7,10,156},{8,10,347},{13= 7,10, -265},{7,0,1010},{11,0,733},{11,0,759},{13,0,34},{14,0,427},{146,0,45},{7,= 10,1131 -},{135,10,1468},{136,11,255},{7,0,1656},{9,0,369},{10,0,338},{10,0,490},{= 11,0, -154},{11,0,545},{11,0,775},{13,0,77},{141,0,274},{133,11,621},{134,0,1038= },{4,11 -,368},{135,11,641},{6,0,2010},{8,0,979},{8,0,985},{10,0,951},{138,0,1011}= ,{134,0 -,1005},{19,0,121},{5,10,291},{5,10,318},{7,10,765},{9,10,389},{140,10,548= },{5,0, -20},{6,0,298},{7,0,659},{137,0,219},{7,0,1440},{11,0,854},{11,0,872},{11,= 0,921}, -{12,0,551},{13,0,472},{142,0,367},{5,0,490},{6,0,615},{6,0,620},{135,0,68= 3},{6,0 -,1070},{134,0,1597},{139,0,522},{132,0,439},{136,0,669},{6,0,766},{6,0,11= 43},{6, -0,1245},{10,10,525},{139,10,82},{9,11,92},{147,11,91},{6,0,668},{134,0,12= 18},{6, -11,525},{9,11,876},{140,11,284},{132,0,233},{136,0,547},{132,10,422},{5,1= 0,355}, -{145,10,0},{6,11,300},{135,11,1515},{4,0,482},{137,10,905},{4,0,886},{7,0= ,346},{ -133,11,594},{133,10,865},{5,10,914},{134,10,1625},{135,0,334},{5,0,795},{= 6,0, -1741},{133,10,234},{135,10,1383},{6,11,1641},{136,11,820},{135,0,371},{7,= 11,1313 -},{138,11,660},{135,10,1312},{135,0,622},{7,0,625},{135,0,1750},{135,0,33= 9},{4,0 -,203},{135,0,1936},{15,0,29},{16,0,38},{15,11,29},{144,11,38},{5,0,338},{= 135,0, -1256},{135,10,1493},{10,0,130},{6,10,421},{7,10,61},{7,10,1540},{138,10,5= 01},{6, -11,389},{7,11,149},{9,11,142},{138,11,94},{137,10,341},{11,0,678},{12,0,3= 07},{ -142,10,98},{6,11,8},{7,11,1881},{136,11,91},{135,0,2044},{6,0,770},{6,0,8= 02},{6, -0,812},{7,0,311},{9,0,308},{12,0,255},{6,10,102},{7,10,72},{15,10,142},{1= 47,10, -67},{151,10,30},{135,10,823},{135,0,1266},{135,11,1746},{135,10,1870},{4,= 0,400}, -{5,0,267},{135,0,232},{7,11,24},{11,11,542},{139,11,852},{135,11,1739},{4= ,11,503 -},{135,11,1661},{5,11,130},{7,11,1314},{9,11,610},{10,11,718},{11,11,601}= ,{11,11 -,819},{11,11,946},{140,11,536},{10,11,149},{11,11,280},{142,11,336},{7,0,= 739},{ -11,0,690},{7,11,1946},{8,10,48},{8,10,88},{8,10,582},{8,10,681},{9,10,373= },{9,10 -,864},{11,10,157},{11,10,843},{148,10,27},{134,0,990},{4,10,88},{5,10,137= },{5,10 -,174},{5,10,777},{6,10,1664},{6,10,1725},{7,10,77},{7,10,426},{7,10,1317}= ,{7,10, -1355},{8,10,126},{8,10,563},{9,10,523},{9,10,750},{10,10,310},{10,10,836}= ,{11,10 -,42},{11,10,318},{11,10,731},{12,10,68},{12,10,92},{12,10,507},{12,10,692= },{13, -10,81},{13,10,238},{13,10,374},{14,10,436},{18,10,138},{19,10,78},{19,10,= 111},{ -20,10,55},{20,10,77},{148,10,92},{141,10,418},{7,0,1831},{132,10,938},{6,= 0,776}, -{134,0,915},{138,10,351},{5,11,348},{6,11,522},{6,10,1668},{7,10,1499},{8= ,10,117 -},{9,10,314},{138,10,174},{135,10,707},{132,0,613},{133,10,403},{132,11,3= 92},{5, -11,433},{9,11,633},{139,11,629},{133,0,763},{132,0,878},{132,0,977},{132,= 0,100}, -{6,0,463},{4,10,44},{5,10,311},{7,10,639},{7,10,762},{7,10,1827},{9,10,8}= ,{9,10, -462},{148,10,83},{134,11,234},{4,10,346},{7,10,115},{9,10,180},{9,10,456}= ,{138, -10,363},{5,0,362},{5,0,443},{6,0,318},{7,0,1019},{139,0,623},{5,0,463},{8= ,0,296} -,{7,11,140},{7,11,1950},{8,11,680},{11,11,817},{147,11,88},{7,11,1222},{1= 38,11, -386},{142,0,137},{132,0,454},{7,0,1914},{6,11,5},{7,10,1051},{9,10,545},{= 11,11, -249},{12,11,313},{16,11,66},{145,11,26},{135,0,1527},{145,0,58},{148,11,5= 9},{5,0 -,48},{5,0,404},{6,0,557},{7,0,458},{8,0,597},{10,0,455},{10,0,606},{11,0,= 49},{11 -,0,548},{12,0,476},{13,0,18},{141,0,450},{5,11,963},{134,11,1773},{133,0,= 729},{ -138,11,586},{5,0,442},{135,0,1984},{134,0,449},{144,0,40},{4,0,853},{7,11= ,180},{ -8,11,509},{136,11,792},{6,10,185},{7,10,1899},{9,10,875},{139,10,673},{13= 4,11, -524},{12,0,227},{4,10,327},{5,10,478},{7,10,1332},{136,10,753},{6,0,1491}= ,{5,10, -1020},{133,10,1022},{4,10,103},{133,10,401},{132,11,931},{4,10,499},{135,= 10,1421 -},{5,0,55},{7,0,376},{140,0,161},{133,0,450},{6,0,1174},{134,0,1562},{10,= 0,62},{ -13,0,400},{135,11,1837},{140,0,207},{135,0,869},{4,11,773},{5,11,618},{13= 7,11, -756},{132,10,96},{4,0,213},{7,0,223},{8,0,80},{135,10,968},{4,11,90},{5,1= 1,337}, -{5,11,545},{7,11,754},{9,11,186},{10,11,72},{10,11,782},{11,11,513},{11,1= 1,577}, -{11,11,610},{11,11,889},{11,11,961},{12,11,354},{12,11,362},{12,11,461},{= 12,11, -595},{13,11,79},{143,11,121},{7,0,381},{7,0,806},{7,0,820},{8,0,354},{8,0= ,437},{ -8,0,787},{9,0,657},{10,0,58},{10,0,339},{10,0,749},{11,0,914},{12,0,162},= {13,0, -75},{14,0,106},{14,0,198},{14,0,320},{14,0,413},{146,0,43},{136,0,747},{1= 36,0, -954},{134,0,1073},{135,0,556},{7,11,151},{9,11,329},{139,11,254},{5,0,692= },{134, -0,1395},{6,10,563},{137,10,224},{134,0,191},{132,0,804},{9,11,187},{10,11= ,36},{ -17,11,44},{146,11,64},{7,11,165},{7,11,919},{136,11,517},{4,11,506},{5,11= ,295},{ -7,11,1680},{15,11,14},{144,11,5},{4,0,706},{6,0,162},{7,0,1960},{136,0,83= 1},{135 -,11,1376},{7,11,987},{9,11,688},{10,11,522},{11,11,788},{140,11,566},{150= ,0,35}, -{138,0,426},{135,0,1235},{135,11,1741},{7,11,389},{7,11,700},{7,11,940},{= 8,11, -514},{9,11,116},{9,11,535},{10,11,118},{11,11,107},{11,11,148},{11,11,922= },{12, -11,254},{12,11,421},{142,11,238},{134,0,1234},{132,11,743},{4,10,910},{5,= 10,832} -,{135,11,1335},{141,0,96},{135,11,185},{146,0,149},{4,0,204},{137,0,902},= {4,11, -784},{133,11,745},{136,0,833},{136,0,949},{7,0,366},{9,0,287},{12,0,199},= {12,0, -556},{12,0,577},{5,11,81},{7,11,146},{7,11,1342},{7,11,1446},{8,11,53},{8= ,11,561 -},{8,11,694},{8,11,754},{9,11,97},{9,11,115},{9,11,894},{10,11,462},{10,1= 1,813}, -{11,11,230},{11,11,657},{11,11,699},{11,11,748},{12,11,119},{12,11,200},{= 12,11, -283},{14,11,273},{145,11,15},{5,11,408},{137,11,747},{9,11,498},{140,11,1= 81},{6, -0,2020},{136,0,992},{5,0,356},{135,0,224},{134,0,784},{7,0,630},{9,0,567}= ,{11,0, -150},{11,0,444},{13,0,119},{8,10,528},{137,10,348},{134,0,539},{4,10,20},= {133,10 -,616},{142,0,27},{7,11,30},{8,11,86},{8,11,315},{8,11,700},{9,11,576},{9,= 11,858} -,{11,11,310},{11,11,888},{11,11,904},{12,11,361},{141,11,248},{138,11,839= },{134, -0,755},{134,0,1063},{7,10,1091},{135,10,1765},{134,11,428},{7,11,524},{8,= 11,169} -,{8,11,234},{9,11,480},{138,11,646},{139,0,814},{7,11,1462},{139,11,659},= {4,10, -26},{5,10,429},{6,10,245},{7,10,704},{7,10,1379},{135,10,1474},{7,11,1205= },{138, -11,637},{139,11,803},{132,10,621},{136,0,987},{4,11,266},{8,11,4},{9,11,3= 9},{10, -11,166},{11,11,918},{12,11,635},{20,11,10},{22,11,27},{150,11,43},{4,0,23= 5},{135 -,0,255},{4,0,194},{5,0,584},{6,0,384},{7,0,583},{10,0,761},{11,0,760},{13= 9,0,851 -},{133,10,542},{134,0,1086},{133,10,868},{8,0,1016},{136,0,1018},{7,0,139= 6},{7, -11,1396},{136,10,433},{135,10,1495},{138,10,215},{141,10,124},{7,11,157},= {8,11, -279},{9,11,759},{16,11,31},{16,11,39},{16,11,75},{18,11,24},{20,11,42},{1= 52,11,1 -},{5,0,562},{134,11,604},{134,0,913},{5,0,191},{137,0,271},{4,0,470},{6,0= ,153},{ -7,0,1503},{7,0,1923},{10,0,701},{11,0,132},{11,0,227},{11,0,320},{11,0,43= 6},{11, -0,525},{11,0,855},{11,0,873},{12,0,41},{12,0,286},{13,0,103},{13,0,284},{= 14,0, -255},{14,0,262},{15,0,117},{143,0,127},{7,0,475},{12,0,45},{147,10,112},{= 132,11, -567},{137,11,859},{6,0,713},{6,0,969},{6,0,1290},{134,0,1551},{133,0,327}= ,{6,0, -552},{6,0,1292},{7,0,1754},{137,0,604},{4,0,223},{6,0,359},{11,0,3},{13,0= ,108},{ -14,0,89},{16,0,22},{5,11,762},{7,11,1880},{9,11,680},{139,11,798},{5,0,80= },{6,0, -405},{7,0,403},{7,0,1502},{8,0,456},{9,0,487},{9,0,853},{9,0,889},{10,0,3= 09},{11 -,0,721},{11,0,994},{12,0,430},{141,0,165},{133,11,298},{132,10,647},{134,= 0,2016} -,{18,10,10},{146,11,10},{4,0,453},{5,0,887},{6,0,535},{8,0,6},{8,0,543},{= 136,0, -826},{136,0,975},{10,0,961},{138,0,962},{138,10,220},{6,0,1891},{6,0,1893= },{9,0, -916},{9,0,965},{9,0,972},{12,0,801},{12,0,859},{12,0,883},{15,0,226},{149= ,0,51}, -{132,10,109},{135,11,267},{7,11,92},{7,11,182},{8,11,453},{9,11,204},{11,= 11,950} -,{12,11,94},{12,11,644},{16,11,20},{16,11,70},{16,11,90},{147,11,55},{134= ,10, -1746},{6,11,71},{7,11,845},{7,11,1308},{8,11,160},{137,11,318},{5,0,101},= {6,0,88 -},{7,0,263},{7,0,628},{7,0,1677},{8,0,349},{9,0,100},{10,0,677},{14,0,169= },{14,0 -,302},{14,0,313},{15,0,48},{15,0,84},{7,11,237},{8,11,664},{9,11,42},{9,1= 1,266}, -{9,11,380},{9,11,645},{10,11,177},{138,11,276},{138,11,69},{4,0,310},{7,0= ,708},{ -7,0,996},{9,0,795},{10,0,390},{10,0,733},{11,0,451},{12,0,249},{14,0,115}= ,{14,0, -286},{143,0,100},{5,0,587},{4,10,40},{10,10,67},{11,10,117},{11,10,768},{= 139,10, -935},{6,0,1942},{7,0,512},{136,0,983},{7,10,992},{8,10,301},{9,10,722},{1= 2,10,63 -},{13,10,29},{14,10,161},{143,10,18},{136,11,76},{139,10,923},{134,0,645}= ,{134,0 -,851},{4,0,498},{132,11,293},{7,0,217},{8,0,140},{10,0,610},{14,11,352},{= 17,11, -53},{18,11,146},{18,11,152},{19,11,11},{150,11,54},{134,0,1448},{138,11,8= 41},{ -133,0,905},{4,11,605},{7,11,518},{7,11,1282},{7,11,1918},{10,11,180},{139= ,11,218 -},{139,11,917},{135,10,825},{140,10,328},{4,0,456},{7,0,105},{7,0,358},{7= ,0,1637 -},{8,0,643},{139,0,483},{134,0,792},{6,11,96},{135,11,1426},{137,11,691},= {4,11, -651},{133,11,289},{7,11,688},{8,11,35},{9,11,511},{10,11,767},{147,11,118= },{150, -0,56},{5,0,243},{5,0,535},{6,10,204},{10,10,320},{10,10,583},{13,10,502},= {14,10, -72},{14,10,274},{14,10,312},{14,10,344},{15,10,159},{16,10,62},{16,10,69}= ,{17,10 -,30},{18,10,42},{18,10,53},{18,10,84},{18,10,140},{19,10,68},{19,10,85},{= 20,10,5 -},{20,10,45},{20,10,101},{22,10,7},{150,10,20},{4,10,558},{6,10,390},{7,1= 0,162}, -{7,10,689},{9,10,360},{138,10,653},{146,11,23},{135,0,1748},{5,10,856},{6= ,10, -1672},{6,10,1757},{134,10,1781},{5,0,539},{5,0,754},{6,0,876},{132,11,704= },{135, -11,1078},{5,10,92},{10,10,736},{140,10,102},{17,0,91},{5,10,590},{137,10,= 213},{ -134,0,1565},{6,0,91},{135,0,435},{4,0,939},{140,0,792},{134,0,1399},{4,0,= 16},{5, -0,316},{5,0,842},{6,0,370},{6,0,1778},{8,0,166},{11,0,812},{12,0,206},{12= ,0,351} -,{14,0,418},{16,0,15},{16,0,34},{18,0,3},{19,0,3},{19,0,7},{20,0,4},{21,0= ,21},{4 -,11,720},{133,11,306},{144,0,95},{133,11,431},{132,11,234},{135,0,551},{4= ,0,999} -,{6,0,1966},{134,0,2042},{7,0,619},{10,0,547},{11,0,122},{12,0,601},{15,0= ,7},{ -148,0,20},{5,11,464},{6,11,236},{7,11,276},{7,11,696},{7,11,914},{7,11,11= 08},{7, -11,1448},{9,11,15},{9,11,564},{10,11,14},{12,11,565},{13,11,449},{14,11,5= 3},{15, -11,13},{16,11,64},{145,11,41},{6,0,884},{6,0,1019},{134,0,1150},{6,11,176= 7},{12, -11,194},{145,11,107},{136,10,503},{133,11,840},{7,0,671},{134,10,466},{13= 2,0,888 -},{4,0,149},{138,0,368},{4,0,154},{7,0,1134},{136,0,105},{135,0,983},{9,1= 1,642}, -{11,11,236},{142,11,193},{4,0,31},{6,0,429},{7,0,962},{9,0,458},{139,0,69= 1},{6,0 -,643},{134,0,1102},{132,0,312},{4,11,68},{5,11,634},{6,11,386},{7,11,794}= ,{8,11, -273},{9,11,563},{10,11,105},{10,11,171},{11,11,94},{139,11,354},{133,0,74= 0},{135 -,0,1642},{4,11,95},{7,11,416},{8,11,211},{139,11,830},{132,0,236},{138,10= ,241},{ -7,11,731},{13,11,20},{143,11,11},{5,0,836},{5,0,857},{6,0,1680},{135,0,59= },{10,0 -,68},{11,0,494},{152,11,6},{4,0,81},{139,0,867},{135,0,795},{133,11,689},= {4,0, -1001},{5,0,282},{6,0,1932},{6,0,1977},{6,0,1987},{6,0,1992},{8,0,650},{8,= 0,919}, -{8,0,920},{8,0,923},{8,0,926},{8,0,927},{8,0,931},{8,0,939},{8,0,947},{8,= 0,956}, -{8,0,997},{9,0,907},{10,0,950},{10,0,953},{10,0,954},{10,0,956},{10,0,958= },{10,0 -,959},{10,0,964},{10,0,970},{10,0,972},{10,0,973},{10,0,975},{10,0,976},{= 10,0, -980},{10,0,981},{10,0,984},{10,0,988},{10,0,990},{10,0,995},{10,0,999},{1= 0,0, -1002},{10,0,1003},{10,0,1005},{10,0,1006},{10,0,1008},{10,0,1009},{10,0,1= 012},{ -10,0,1014},{10,0,1015},{10,0,1019},{10,0,1020},{10,0,1022},{12,0,959},{12= ,0,961} -,{12,0,962},{12,0,963},{12,0,964},{12,0,965},{12,0,967},{12,0,968},{12,0,= 969},{ -12,0,970},{12,0,971},{12,0,972},{12,0,973},{12,0,974},{12,0,975},{12,0,97= 6},{12, -0,977},{12,0,979},{12,0,981},{12,0,982},{12,0,983},{12,0,984},{12,0,985},= {12,0, -986},{12,0,987},{12,0,989},{12,0,990},{12,0,992},{12,0,993},{12,0,995},{1= 2,0,998 -},{12,0,999},{12,0,1000},{12,0,1001},{12,0,1002},{12,0,1004},{12,0,1005},= {12,0, -1006},{12,0,1007},{12,0,1008},{12,0,1009},{12,0,1010},{12,0,1011},{12,0,1= 012},{ -12,0,1014},{12,0,1015},{12,0,1016},{12,0,1017},{12,0,1018},{12,0,1019},{1= 2,0, -1022},{12,0,1023},{14,0,475},{14,0,477},{14,0,478},{14,0,479},{14,0,480},= {14,0, -482},{14,0,483},{14,0,484},{14,0,485},{14,0,486},{14,0,487},{14,0,488},{1= 4,0,489 -},{14,0,490},{14,0,491},{14,0,492},{14,0,493},{14,0,494},{14,0,495},{14,0= ,496},{ -14,0,497},{14,0,498},{14,0,499},{14,0,500},{14,0,501},{14,0,502},{14,0,50= 3},{14, -0,504},{14,0,506},{14,0,507},{14,0,508},{14,0,509},{14,0,510},{14,0,511},= {16,0, -113},{16,0,114},{16,0,115},{16,0,117},{16,0,118},{16,0,119},{16,0,121},{1= 6,0,122 -},{16,0,123},{16,0,124},{16,0,125},{16,0,126},{16,0,127},{18,0,242},{18,0= ,243},{ -18,0,244},{18,0,245},{18,0,248},{18,0,249},{18,0,250},{18,0,251},{18,0,25= 2},{18, -0,253},{18,0,254},{18,0,255},{20,0,125},{20,0,126},{148,0,127},{7,11,1717= },{7,11 -,1769},{138,11,546},{7,11,1127},{7,11,1572},{10,11,297},{10,11,422},{11,1= 1,764}, -{11,11,810},{12,11,264},{13,11,102},{13,11,300},{13,11,484},{14,11,147},{= 14,11, -229},{17,11,71},{18,11,118},{147,11,120},{6,0,1148},{134,0,1586},{132,0,7= 75},{ -135,10,954},{133,11,864},{133,11,928},{138,11,189},{135,10,1958},{6,10,54= 9},{8, -10,34},{8,10,283},{9,10,165},{138,10,475},{5,10,652},{5,10,701},{135,10,4= 49},{ -135,11,695},{4,10,655},{7,10,850},{17,10,75},{146,10,137},{140,11,682},{1= 33,11, -523},{8,0,970},{136,10,670},{136,11,555},{7,11,76},{8,11,44},{9,11,884},{= 10,11, -580},{11,11,399},{11,11,894},{15,11,122},{18,11,144},{147,11,61},{6,10,15= 9},{6, -10,364},{7,10,516},{7,10,1439},{137,10,518},{4,0,71},{5,0,376},{7,0,119},= {138,0, -665},{141,10,151},{11,0,827},{14,0,34},{143,0,148},{133,11,518},{4,0,479}= ,{135, -11,1787},{135,11,1852},{135,10,993},{7,0,607},{136,0,99},{134,0,1960},{13= 2,0,793 -},{4,0,41},{5,0,74},{7,0,1627},{11,0,871},{140,0,619},{7,0,94},{11,0,329}= ,{11,0, -965},{12,0,241},{14,0,354},{15,0,22},{148,0,63},{7,10,501},{9,10,111},{10= ,10,141 -},{11,10,332},{13,10,43},{13,10,429},{14,10,130},{14,10,415},{145,10,102}= ,{9,0, -209},{137,0,300},{134,0,1497},{138,11,255},{4,11,934},{5,11,138},{136,11,= 610},{ -133,0,98},{6,0,1316},{10,11,804},{138,11,832},{8,11,96},{9,11,36},{10,11,= 607},{ -11,11,423},{11,11,442},{12,11,309},{14,11,199},{15,11,90},{145,11,110},{1= 32,0, -463},{5,10,149},{136,10,233},{133,10,935},{4,11,652},{8,11,320},{9,11,13}= ,{9,11, -398},{9,11,727},{10,11,75},{10,11,184},{10,11,230},{10,11,564},{10,11,569= },{11, -11,973},{12,11,70},{12,11,189},{13,11,57},{13,11,257},{22,11,6},{150,11,1= 6},{142 -,0,291},{12,10,582},{146,10,131},{136,10,801},{133,0,984},{145,11,116},{4= ,11,692 -},{133,11,321},{4,0,182},{6,0,205},{135,0,220},{4,0,42},{9,0,205},{9,0,78= 6},{138 -,0,659},{6,0,801},{11,11,130},{140,11,609},{132,0,635},{5,11,345},{135,11= ,1016}, -{139,0,533},{132,0,371},{4,0,272},{135,0,836},{6,0,1282},{135,11,1100},{5= ,0,825} -,{134,0,1640},{135,11,1325},{133,11,673},{4,11,287},{133,11,1018},{135,0,= 357},{6 -,0,467},{137,0,879},{7,0,317},{135,0,569},{6,0,924},{134,0,1588},{5,11,34= },{5,10 -,406},{10,11,724},{12,11,444},{13,11,354},{18,11,32},{23,11,24},{23,11,31= },{152, -11,5},{6,0,1795},{6,0,1835},{6,0,1836},{6,0,1856},{8,0,844},{8,0,849},{8,= 0,854}, -{8,0,870},{8,0,887},{10,0,852},{138,0,942},{6,10,69},{135,10,117},{137,0,= 307},{4 -,0,944},{6,0,1799},{6,0,1825},{10,0,848},{10,0,875},{10,0,895},{10,0,899}= ,{10,0, -902},{140,0,773},{11,0,43},{13,0,72},{141,0,142},{135,10,1830},{134,11,38= 2},{4, -10,432},{135,10,824},{132,11,329},{7,0,1820},{139,11,124},{133,10,826},{1= 33,0, -525},{132,11,906},{7,11,1940},{136,11,366},{138,11,10},{4,11,123},{4,11,6= 49},{5, -11,605},{7,11,1509},{136,11,36},{6,0,110},{135,0,1681},{133,0,493},{133,1= 1,767}, -{4,0,174},{135,0,911},{138,11,786},{8,0,417},{137,0,782},{133,10,1000},{7= ,0,733} -,{137,0,583},{4,10,297},{6,10,529},{7,10,152},{7,10,713},{7,10,1845},{8,1= 0,710}, -{8,10,717},{12,10,639},{140,10,685},{4,0,32},{5,0,215},{6,0,269},{7,0,178= 2},{7,0 -,1892},{10,0,16},{11,0,822},{11,0,954},{141,0,481},{4,11,273},{5,11,658},= {133,11 -,995},{136,0,477},{134,11,72},{135,11,1345},{5,0,308},{7,0,1088},{4,10,52= 0},{135 -,10,575},{133,11,589},{5,0,126},{8,0,297},{9,0,366},{140,0,374},{7,0,1551= },{139, -0,361},{5,11,117},{6,11,514},{6,11,541},{7,11,1164},{7,11,1436},{8,11,220= },{8,11 -,648},{10,11,688},{139,11,560},{133,11,686},{4,0,946},{6,0,1807},{8,0,871= },{10,0 -,854},{10,0,870},{10,0,888},{10,0,897},{10,0,920},{12,0,722},{12,0,761},{= 12,0, -763},{12,0,764},{14,0,454},{14,0,465},{16,0,107},{18,0,167},{18,0,168},{1= 46,0, -172},{132,0,175},{135,0,1307},{132,0,685},{135,11,1834},{133,0,797},{6,0,= 745},{6 -,0,858},{134,0,963},{133,0,565},{5,10,397},{6,10,154},{7,11,196},{7,10,67= 6},{8, -10,443},{8,10,609},{9,10,24},{9,10,325},{10,10,35},{10,11,765},{11,11,347= },{11, -10,535},{11,11,552},{11,11,576},{11,10,672},{11,11,790},{11,10,1018},{12,= 11,263} -,{12,10,637},{13,11,246},{13,11,270},{13,11,395},{14,11,74},{14,11,176},{= 14,11, -190},{14,11,398},{14,11,412},{15,11,32},{15,11,63},{16,10,30},{16,11,88},= {147,11 -,105},{13,11,84},{141,11,122},{4,0,252},{7,0,1068},{10,0,434},{11,0,228},= {11,0, -426},{13,0,231},{18,0,106},{148,0,87},{137,0,826},{4,11,589},{139,11,282}= ,{5,11, -381},{135,11,1792},{132,0,791},{5,0,231},{10,0,509},{133,10,981},{7,0,601= },{9,0, -277},{9,0,674},{10,0,178},{10,0,418},{10,0,571},{11,0,531},{12,0,113},{12= ,0,475} -,{13,0,99},{142,0,428},{4,10,56},{7,11,616},{7,10,1791},{8,10,607},{8,10,= 651},{ -10,11,413},{11,10,465},{11,10,835},{12,10,337},{141,10,480},{7,0,1591},{1= 44,0,43 -},{9,10,158},{138,10,411},{135,0,1683},{8,0,289},{11,0,45},{12,0,278},{14= 0,0,537 -},{6,11,120},{7,11,1188},{7,11,1710},{8,11,286},{9,11,667},{11,11,592},{1= 39,11, -730},{136,10,617},{135,0,1120},{135,11,1146},{139,10,563},{4,11,352},{4,1= 0,369}, -{135,11,687},{143,11,38},{4,0,399},{5,0,119},{5,0,494},{7,0,751},{9,0,556= },{14, -11,179},{15,11,151},{150,11,11},{4,11,192},{5,11,49},{6,11,200},{6,11,293= },{6,11 -,1696},{135,11,488},{4,0,398},{133,0,660},{7,0,1030},{134,10,622},{135,11= ,595},{ -141,0,168},{132,11,147},{7,0,973},{10,10,624},{142,10,279},{132,10,363},{= 132,0, -642},{133,11,934},{134,0,1615},{7,11,505},{135,11,523},{7,0,594},{7,0,851= },{7,0, -1858},{9,0,411},{9,0,574},{9,0,666},{9,0,737},{10,0,346},{10,0,712},{11,0= ,246},{ -11,0,432},{11,0,517},{11,0,647},{11,0,679},{11,0,727},{12,0,304},{12,0,30= 5},{12, -0,323},{12,0,483},{12,0,572},{12,0,593},{12,0,602},{13,0,95},{13,0,101},{= 13,0, -171},{13,0,315},{13,0,378},{13,0,425},{13,0,475},{14,0,63},{14,0,380},{14= ,0,384} -,{15,0,133},{18,0,112},{148,0,72},{135,0,1093},{132,0,679},{8,0,913},{10,= 0,903}, -{10,0,915},{12,0,648},{12,0,649},{14,0,455},{16,0,112},{138,11,438},{137,= 0,203}, -{134,10,292},{134,0,1492},{7,0,1374},{8,0,540},{5,10,177},{6,10,616},{7,1= 0,827}, -{9,10,525},{138,10,656},{135,0,1486},{9,0,714},{138,10,31},{136,0,825},{1= 34,0, -1511},{132,11,637},{134,0,952},{4,10,161},{133,10,631},{5,0,143},{5,0,769= },{6,0, -1760},{7,0,682},{7,0,1992},{136,0,736},{132,0,700},{134,0,1540},{132,11,7= 77},{9, -11,867},{138,11,837},{7,0,1557},{135,10,1684},{133,0,860},{6,0,422},{7,0,= 0},{7,0 -,1544},{9,0,605},{11,0,990},{12,0,235},{12,0,453},{13,0,47},{13,0,266},{9= ,10,469 -},{9,10,709},{12,10,512},{14,10,65},{145,10,12},{11,0,807},{10,10,229},{1= 1,10,73 -},{139,10,376},{6,11,170},{7,11,1080},{8,11,395},{8,11,487},{11,11,125},{= 141,11, -147},{5,0,515},{137,0,131},{7,0,1605},{11,0,962},{146,0,139},{132,0,646},= {4,0, -396},{7,0,728},{9,0,117},{13,0,202},{148,0,51},{6,0,121},{6,0,124},{6,0,3= 57},{7, -0,1138},{7,0,1295},{8,0,162},{8,0,508},{11,0,655},{4,11,535},{6,10,558},{= 7,10, -651},{8,11,618},{9,10,0},{10,10,34},{139,10,1008},{135,11,1245},{138,0,35= 7},{150 -,11,23},{133,0,237},{135,0,1784},{7,10,1832},{138,10,374},{132,0,713},{13= 2,11,46 -},{6,0,1536},{10,0,348},{5,11,811},{6,11,1679},{6,11,1714},{135,11,2032},= {11,11, -182},{142,11,195},{6,0,523},{7,0,738},{7,10,771},{7,10,1731},{9,10,405},{= 138,10, -421},{7,11,1458},{9,11,407},{139,11,15},{6,11,34},{7,11,69},{7,11,640},{7= ,11, -1089},{8,11,708},{8,11,721},{9,11,363},{9,11,643},{10,11,628},{148,11,98}= ,{133,0 -,434},{135,0,1877},{7,0,571},{138,0,366},{5,10,881},{133,10,885},{9,0,513= },{10,0 -,25},{10,0,39},{12,0,122},{140,0,187},{132,0,580},{5,10,142},{134,10,546}= ,{132, -11,462},{137,0,873},{5,10,466},{11,10,571},{12,10,198},{13,10,283},{14,10= ,186},{ -15,10,21},{143,10,103},{7,0,171},{4,10,185},{5,10,257},{5,10,839},{5,10,9= 36},{9, -10,399},{10,10,258},{10,10,395},{10,10,734},{11,10,1014},{12,10,23},{13,1= 0,350}, -{14,10,150},{147,10,6},{134,0,625},{7,0,107},{7,0,838},{8,0,550},{138,0,4= 01},{5, -11,73},{6,11,23},{134,11,338},{4,0,943},{6,0,1850},{12,0,713},{142,0,434}= ,{11,0, -588},{11,0,864},{11,0,936},{11,0,968},{12,0,73},{12,0,343},{12,0,394},{13= ,0,275} -,{14,0,257},{15,0,160},{7,10,404},{7,10,1377},{7,10,1430},{7,10,2017},{8,= 10,149} -,{8,10,239},{8,10,512},{8,10,793},{8,10,818},{9,10,474},{9,10,595},{10,10= ,122},{ -10,10,565},{10,10,649},{10,10,783},{11,10,239},{11,10,295},{11,10,447},{1= 1,10, -528},{11,10,639},{11,10,800},{12,10,25},{12,10,157},{12,10,316},{12,10,39= 0},{12, -10,391},{12,10,395},{12,10,478},{12,10,503},{12,10,592},{12,10,680},{13,1= 0,50},{ -13,10,53},{13,10,132},{13,10,198},{13,10,322},{13,10,415},{13,10,511},{14= ,10,71} -,{14,10,395},{15,10,71},{15,10,136},{17,10,123},{18,10,93},{147,10,58},{1= 33,0, -768},{11,0,103},{142,0,0},{136,10,712},{132,0,799},{132,0,894},{7,11,725}= ,{8,11, -498},{139,11,268},{135,11,1798},{135,11,773},{141,11,360},{4,10,377},{152= ,10,13} -,{135,0,1673},{132,11,583},{134,0,1052},{133,11,220},{140,11,69},{132,11,= 544},{4 -,10,180},{135,10,1906},{134,0,272},{4,0,441},{134,0,1421},{4,0,9},{5,0,12= 8},{7,0 -,368},{11,0,480},{148,0,3},{5,11,176},{6,11,437},{6,11,564},{11,11,181},{= 141,11, -183},{132,10,491},{7,0,1182},{141,11,67},{6,0,1346},{4,10,171},{138,10,23= 4},{4, -10,586},{7,10,1186},{138,10,631},{136,0,682},{134,0,1004},{15,0,24},{143,= 11,24}, -{134,0,968},{4,0,2},{6,0,742},{6,0,793},{7,0,545},{7,0,894},{9,10,931},{1= 0,10, -334},{148,10,71},{136,11,600},{133,10,765},{9,0,769},{140,0,185},{4,11,79= 0},{5, -11,273},{134,11,394},{7,0,474},{137,0,578},{4,11,135},{6,11,127},{7,11,11= 85},{7, -11,1511},{8,11,613},{11,11,5},{12,11,133},{12,11,495},{12,11,586},{14,11,= 385},{ -15,11,118},{17,11,20},{146,11,98},{133,10,424},{5,0,530},{142,0,113},{6,1= 1,230}, -{7,11,961},{7,11,1085},{136,11,462},{7,11,1954},{137,11,636},{136,10,714}= ,{149, -11,6},{135,10,685},{9,10,420},{10,10,269},{10,10,285},{10,10,576},{11,10,= 397},{ -13,10,175},{145,10,90},{132,10,429},{5,0,556},{5,11,162},{136,11,68},{132= ,11,654 -},{4,11,156},{7,11,998},{7,11,1045},{7,11,1860},{9,11,48},{9,11,692},{11,= 11,419} -,{139,11,602},{6,0,1317},{8,0,16},{9,0,825},{12,0,568},{7,11,1276},{8,11,= 474},{ -137,11,652},{18,0,97},{7,10,18},{7,10,699},{7,10,1966},{8,10,752},{9,10,2= 73},{9, -10,412},{9,10,703},{10,10,71},{10,10,427},{138,10,508},{10,0,703},{7,11,1= 454},{ -138,11,703},{4,10,53},{5,10,186},{135,10,752},{134,0,892},{134,0,1571},{8= ,10,575 -},{10,10,289},{139,10,319},{6,0,186},{137,0,426},{134,0,1101},{132,10,675= },{132, -0,585},{6,0,1870},{137,0,937},{152,11,10},{9,11,197},{10,11,300},{12,11,4= 73},{13 -,11,90},{141,11,405},{4,0,93},{5,0,252},{6,0,229},{7,0,291},{9,0,550},{13= 9,0,644 -},{137,0,749},{9,0,162},{6,10,209},{8,10,468},{9,10,210},{11,10,36},{12,1= 0,28},{ -12,10,630},{13,10,21},{13,10,349},{14,10,7},{145,10,13},{132,0,381},{132,= 11,606} -,{4,10,342},{135,10,1179},{7,11,1587},{7,11,1707},{10,11,528},{139,11,504= },{12, -11,39},{13,11,265},{141,11,439},{4,10,928},{133,10,910},{7,10,1838},{7,11= ,1978}, -{136,11,676},{6,0,762},{6,0,796},{134,0,956},{4,10,318},{4,10,496},{7,10,= 856},{ -139,10,654},{137,11,242},{4,11,361},{133,11,315},{132,11,461},{132,11,472= },{132, -0,857},{5,0,21},{6,0,77},{6,0,157},{7,0,974},{7,0,1301},{7,0,1339},{7,0,1= 490},{7 -,0,1873},{9,0,628},{7,10,915},{8,10,247},{147,10,0},{4,10,202},{5,10,382}= ,{6,10, -454},{7,10,936},{7,10,1803},{8,10,758},{9,10,375},{9,10,895},{10,10,743},= {10,10, -792},{11,10,978},{11,10,1012},{142,10,109},{7,11,617},{10,11,498},{11,11,= 501},{ -12,11,16},{140,11,150},{7,10,1150},{7,10,1425},{7,10,1453},{10,11,747},{1= 40,10, -513},{133,11,155},{11,0,919},{141,0,409},{138,10,791},{10,0,633},{139,11,= 729},{7 -,11,163},{8,11,319},{9,11,402},{10,11,24},{10,11,681},{11,11,200},{11,11,= 567},{ -12,11,253},{12,11,410},{142,11,219},{5,11,475},{7,11,1780},{9,11,230},{11= ,11,297 -},{11,11,558},{14,11,322},{147,11,76},{7,0,332},{6,10,445},{137,10,909},{= 135,11, -1956},{136,11,274},{134,10,578},{135,0,1489},{135,11,1848},{5,11,944},{13= 4,11, -1769},{132,11,144},{136,10,766},{4,0,832},{135,10,541},{8,0,398},{9,0,681= },{139, -0,632},{136,0,645},{9,0,791},{10,0,93},{16,0,13},{17,0,23},{18,0,135},{19= ,0,12}, -{20,0,1},{20,0,12},{148,0,14},{6,11,247},{137,11,555},{134,0,20},{132,0,8= 00},{ -135,0,1841},{139,10,983},{137,10,768},{132,10,584},{141,11,51},{6,0,1993}= ,{4,11, -620},{138,11,280},{136,0,769},{11,0,290},{11,0,665},{7,11,1810},{11,11,86= 6},{12, -11,103},{13,11,495},{17,11,67},{147,11,74},{134,0,1426},{139,0,60},{4,10,= 326},{ -135,10,1770},{7,0,1874},{9,0,641},{132,10,226},{6,0,644},{5,10,426},{8,10= ,30},{9 -,10,2},{11,10,549},{147,10,122},{5,11,428},{138,11,442},{135,11,1871},{13= 5,0, -1757},{147,10,117},{135,0,937},{135,0,1652},{6,0,654},{134,0,1476},{133,1= 1,99},{ -135,0,527},{132,10,345},{4,10,385},{4,11,397},{7,10,265},{135,10,587},{4,= 0,579}, -{5,0,226},{5,0,323},{135,0,960},{134,0,1486},{8,11,502},{144,11,9},{4,10,= 347},{5 -,10,423},{5,10,996},{135,10,1329},{7,11,727},{146,11,73},{4,11,485},{7,11= ,353},{ -7,10,1259},{7,11,1523},{9,10,125},{139,10,65},{6,0,325},{5,10,136},{6,11,= 366},{7 -,11,1384},{7,11,1601},{136,10,644},{138,11,160},{6,0,1345},{137,11,282},{= 18,0,91 -},{147,0,70},{136,0,404},{4,11,157},{133,11,471},{133,0,973},{6,0,135},{1= 35,0, -1176},{8,11,116},{11,11,551},{142,11,159},{4,0,549},{4,10,433},{133,10,71= 9},{136 -,0,976},{5,11,160},{7,11,363},{7,11,589},{10,11,170},{141,11,55},{144,0,2= 1},{144 -,0,51},{135,0,314},{135,10,1363},{4,11,108},{7,11,405},{10,11,491},{139,1= 1,498}, -{146,0,4},{4,10,555},{8,10,536},{10,10,288},{139,10,1005},{135,11,1005},{= 6,0,281 -},{7,0,6},{8,0,282},{8,0,480},{8,0,499},{9,0,198},{10,0,143},{10,0,169},{= 10,0, -211},{10,0,417},{10,0,574},{11,0,147},{11,0,395},{12,0,75},{12,0,407},{12= ,0,608} -,{13,0,500},{142,0,251},{6,0,1093},{6,0,1405},{9,10,370},{138,10,90},{4,1= 1,926}, -{133,11,983},{135,0,1776},{134,0,1528},{132,0,419},{132,11,538},{6,11,294= },{7,11 -,1267},{136,11,624},{135,11,1772},{138,11,301},{4,10,257},{135,10,2031},{= 4,0,138 -},{7,0,1012},{7,0,1280},{9,0,76},{135,10,1768},{132,11,757},{5,0,29},{140= ,0,638} -,{7,11,655},{135,11,1844},{7,0,1418},{6,11,257},{135,11,1522},{8,11,469},= {138,11 -,47},{142,11,278},{6,10,83},{6,10,1733},{135,10,1389},{11,11,204},{11,11,= 243},{ -140,11,293},{135,11,1875},{6,0,1710},{135,0,2038},{137,11,299},{4,0,17},{= 5,0,23} -,{7,0,995},{11,0,383},{11,0,437},{12,0,460},{140,0,532},{133,0,862},{137,= 10,696} -,{6,0,592},{138,0,946},{138,11,599},{7,10,1718},{9,10,95},{9,10,274},{10,= 10,279} -,{10,10,317},{10,10,420},{11,10,303},{11,10,808},{12,10,134},{12,10,367},= {13,10, -149},{13,10,347},{14,10,349},{14,10,406},{18,10,22},{18,10,89},{18,10,122= },{147, -10,47},{8,0,70},{12,0,171},{141,0,272},{133,10,26},{132,10,550},{137,0,81= 2},{10, -0,233},{139,0,76},{134,0,988},{134,0,442},{136,10,822},{7,0,896},{4,10,90= 2},{5, -10,809},{134,10,122},{5,11,150},{7,11,106},{8,11,603},{9,11,593},{9,11,63= 4},{10, -11,44},{10,11,173},{11,11,462},{11,11,515},{13,11,216},{13,11,288},{142,1= 1,400}, -{136,0,483},{135,10,262},{6,0,1709},{133,10,620},{4,10,34},{5,10,574},{7,= 10,279} -,{7,10,1624},{136,10,601},{137,10,170},{147,0,119},{12,11,108},{141,11,29= 1},{11, -0,69},{12,0,105},{12,0,117},{13,0,213},{14,0,13},{14,0,62},{14,0,177},{14= ,0,421} -,{15,0,19},{146,0,141},{137,0,309},{11,11,278},{142,11,73},{7,0,608},{7,0= ,976},{ -9,0,146},{10,0,206},{10,0,596},{13,0,218},{142,0,153},{133,10,332},{6,10,= 261},{8 -,10,182},{139,10,943},{4,11,493},{144,11,55},{134,10,1721},{132,0,768},{4= ,10,933 -},{133,10,880},{7,11,555},{7,11,1316},{7,11,1412},{7,11,1839},{9,11,192},= {9,11, -589},{11,11,241},{11,11,676},{11,11,811},{11,11,891},{12,11,140},{12,11,3= 46},{12 -,11,479},{13,11,30},{13,11,49},{13,11,381},{14,11,188},{15,11,150},{16,11= ,76},{ -18,11,30},{148,11,52},{4,0,518},{135,0,1136},{6,11,568},{7,11,112},{7,11,= 1804},{ -8,11,362},{8,11,410},{8,11,830},{9,11,514},{11,11,649},{142,11,157},{135,= 11,673} -,{8,0,689},{137,0,863},{4,0,18},{7,0,145},{7,0,444},{7,0,1278},{8,0,49},{= 8,0,400 -},{9,0,71},{9,0,250},{10,0,459},{12,0,160},{16,0,24},{132,11,625},{140,0,= 1020},{ -4,0,997},{6,0,1946},{6,0,1984},{134,0,1998},{6,11,16},{6,11,158},{7,11,43= },{7,11 -,129},{7,11,181},{8,11,276},{8,11,377},{10,11,523},{11,11,816},{12,11,455= },{13, -11,303},{142,11,135},{133,10,812},{134,0,658},{4,11,1},{7,11,1143},{7,11,= 1463},{ -8,11,61},{9,11,207},{9,11,390},{9,11,467},{139,11,836},{150,11,26},{140,0= ,106},{ -6,0,1827},{10,0,931},{18,0,166},{20,0,114},{4,10,137},{7,10,1178},{7,11,1= 319},{ -135,10,1520},{133,0,1010},{4,11,723},{5,11,895},{7,11,1031},{8,11,199},{8= ,11,340 -},{9,11,153},{9,11,215},{10,11,21},{10,11,59},{10,11,80},{10,11,224},{11,= 11,229} -,{11,11,652},{12,11,192},{13,11,146},{142,11,91},{132,11,295},{6,11,619},= {7,11, -898},{7,11,1092},{8,11,485},{18,11,28},{147,11,116},{137,11,51},{6,10,166= 1},{7, -10,1975},{7,10,2009},{135,10,2011},{5,11,309},{140,11,211},{5,0,87},{7,0,= 313},{7 -,0,1103},{10,0,208},{10,0,582},{11,0,389},{11,0,813},{12,0,385},{13,0,286= },{14,0 -,124},{146,0,108},{5,11,125},{8,11,77},{138,11,15},{132,0,267},{133,0,703= },{137, -11,155},{133,11,439},{11,11,164},{140,11,76},{9,0,496},{5,10,89},{7,10,19= 15},{9, -10,185},{9,10,235},{10,10,64},{10,10,270},{10,10,403},{10,10,469},{10,10,= 529},{ -10,10,590},{11,10,140},{11,10,860},{13,10,1},{13,10,422},{14,10,341},{14,= 10,364} -,{17,10,93},{18,10,113},{19,10,97},{147,10,113},{133,10,695},{135,0,1121}= ,{5,10, -6},{6,10,183},{7,10,680},{7,10,978},{7,10,1013},{7,10,1055},{12,10,230},{= 13,10, -172},{146,10,29},{4,11,8},{7,11,1152},{7,11,1153},{7,11,1715},{9,11,374},= {10,11, -478},{139,11,648},{135,11,1099},{6,10,29},{139,10,63},{4,0,561},{10,0,249= },{139, -0,209},{132,0,760},{7,11,799},{138,11,511},{136,11,87},{9,0,154},{140,0,4= 85},{ -136,0,255},{132,0,323},{140,0,419},{132,10,311},{134,10,1740},{4,0,368},{= 135,0, -641},{7,10,170},{8,10,90},{8,10,177},{8,10,415},{11,10,714},{142,10,281},= {4,11, -69},{5,11,122},{9,11,656},{138,11,464},{5,11,849},{134,11,1633},{8,0,522}= ,{142,0 -,328},{11,10,91},{13,10,129},{15,10,101},{145,10,125},{7,0,562},{8,0,551}= ,{4,10, -494},{6,10,74},{7,10,44},{11,11,499},{12,10,17},{15,10,5},{148,10,11},{4,= 10,276} -,{133,10,296},{9,0,92},{147,0,91},{4,10,7},{5,10,90},{5,10,158},{6,10,542= },{7,10 -,221},{7,10,1574},{9,10,490},{10,10,540},{11,10,443},{139,10,757},{6,0,52= 5},{6,0 -,1976},{8,0,806},{9,0,876},{140,0,284},{5,11,859},{7,10,588},{7,11,1160},= {8,11, -107},{9,10,175},{9,11,291},{9,11,439},{10,10,530},{10,11,663},{11,11,609}= ,{140, -11,197},{7,11,168},{13,11,196},{141,11,237},{139,0,958},{133,0,594},{135,= 10,580} -,{7,10,88},{136,10,627},{6,0,479},{6,0,562},{7,0,1060},{13,0,6},{5,10,872= },{6,10 -,57},{7,10,471},{9,10,447},{137,10,454},{136,11,413},{145,11,19},{4,11,11= 7},{6, -11,372},{7,11,1905},{142,11,323},{4,11,722},{139,11,471},{17,0,61},{5,10,= 31},{ -134,10,614},{8,10,330},{140,10,477},{7,10,1200},{138,10,460},{6,10,424},{= 135,10, -1866},{6,0,1641},{136,0,820},{6,0,1556},{134,0,1618},{9,11,5},{12,11,216}= ,{12,11 -,294},{12,11,298},{12,11,400},{12,11,518},{13,11,229},{143,11,139},{15,11= ,155},{ -144,11,79},{4,0,302},{135,0,1766},{5,10,13},{134,10,142},{6,0,148},{7,0,1= 313},{7 -,10,116},{8,10,322},{8,10,755},{9,10,548},{10,10,714},{11,10,884},{141,10= ,324},{ -137,0,676},{9,11,88},{139,11,270},{5,11,12},{7,11,375},{137,11,438},{134,= 0,1674} -,{7,10,1472},{135,10,1554},{11,0,178},{7,10,1071},{7,10,1541},{7,10,1767}= ,{7,10, -1806},{11,10,162},{11,10,242},{12,10,605},{15,10,26},{144,10,44},{6,0,389= },{7,0, -149},{9,0,142},{138,0,94},{140,11,71},{145,10,115},{6,0,8},{7,0,1881},{8,= 0,91},{ -11,11,966},{12,11,287},{13,11,342},{13,11,402},{15,11,110},{143,11,163},{= 4,11, -258},{136,11,639},{6,11,22},{7,11,903},{138,11,577},{133,11,681},{135,10,= 1111},{ -135,11,1286},{9,0,112},{8,10,1},{138,10,326},{5,10,488},{6,10,527},{7,10,= 489},{7 -,10,1636},{8,10,121},{8,10,144},{8,10,359},{9,10,193},{9,10,241},{9,10,33= 6},{9, -10,882},{11,10,266},{11,10,372},{11,10,944},{12,10,401},{140,10,641},{4,1= 1,664}, -{133,11,804},{6,0,747},{134,0,1015},{135,0,1746},{9,10,31},{10,10,244},{1= 0,10, -699},{12,10,149},{141,10,497},{133,10,377},{135,0,24},{6,0,1352},{5,11,32= },{145, -10,101},{7,0,1530},{10,0,158},{13,0,13},{13,0,137},{13,0,258},{14,0,111},= {14,0, -225},{14,0,253},{14,0,304},{14,0,339},{14,0,417},{146,0,33},{4,0,503},{13= 5,0, -1661},{5,0,130},{6,0,845},{7,0,1314},{9,0,610},{10,0,718},{11,0,601},{11,= 0,819}, -{11,0,946},{140,0,536},{10,0,149},{11,0,280},{142,0,336},{134,0,1401},{13= 5,0, -1946},{8,0,663},{144,0,8},{134,0,1607},{135,10,2023},{4,11,289},{7,11,629= },{7,11 -,1698},{7,11,1711},{140,11,215},{6,11,450},{136,11,109},{10,0,882},{10,0,= 883},{ -10,0,914},{138,0,928},{133,10,843},{136,11,705},{132,10,554},{133,10,536}= ,{5,0, -417},{9,10,79},{11,10,625},{145,10,7},{7,11,1238},{142,11,37},{4,0,392},{= 135,0, -1597},{5,0,433},{9,0,633},{11,0,629},{132,10,424},{7,10,336},{136,10,785}= ,{134, -11,355},{6,0,234},{7,0,769},{9,0,18},{138,0,358},{4,10,896},{134,10,1777}= ,{138, -11,323},{7,0,140},{7,0,1950},{8,0,680},{11,0,817},{147,0,88},{7,0,1222},{= 138,0, -386},{139,11,908},{11,0,249},{12,0,313},{16,0,66},{145,0,26},{134,0,5},{7= ,10,750 -},{9,10,223},{11,10,27},{11,10,466},{12,10,624},{14,10,265},{146,10,61},{= 134,11, -26},{134,0,1216},{5,0,963},{134,0,1773},{4,11,414},{5,11,467},{9,11,654},= {10,11, -451},{12,11,59},{141,11,375},{135,11,17},{4,10,603},{133,10,661},{4,10,11= },{6,10 -,128},{7,10,231},{7,10,1533},{138,10,725},{135,11,955},{7,0,180},{8,0,509= },{136, -0,792},{132,10,476},{132,0,1002},{133,11,538},{135,10,1807},{132,0,931},{= 7,0,943 -},{11,0,614},{140,0,747},{135,0,1837},{9,10,20},{10,10,324},{10,10,807},{= 139,10, -488},{134,0,641},{6,11,280},{10,11,502},{11,11,344},{140,11,38},{5,11,45}= ,{7,11, -1161},{11,11,448},{11,11,880},{13,11,139},{13,11,407},{15,11,16},{17,11,9= 5},{18, -11,66},{18,11,88},{18,11,123},{149,11,7},{9,0,280},{138,0,134},{22,0,22},= {23,0,5 -},{151,0,29},{136,11,777},{4,0,90},{5,0,545},{7,0,754},{9,0,186},{10,0,72= },{10,0 -,782},{11,0,577},{11,0,610},{11,0,960},{12,0,354},{12,0,362},{12,0,595},{= 4,11, -410},{135,11,521},{135,11,1778},{5,10,112},{6,10,103},{134,10,150},{138,1= 0,356}, -{132,0,742},{7,0,151},{9,0,329},{139,0,254},{8,0,853},{8,0,881},{8,0,911}= ,{8,0, -912},{10,0,872},{12,0,741},{12,0,742},{152,0,18},{4,11,573},{136,11,655},= {6,0, -921},{134,0,934},{9,0,187},{10,0,36},{11,0,1016},{17,0,44},{146,0,64},{7,= 0,833}, -{136,0,517},{4,0,506},{5,0,295},{135,0,1680},{4,10,708},{8,10,15},{9,10,5= 0},{9, -10,386},{11,10,18},{11,10,529},{140,10,228},{7,0,251},{7,0,1701},{8,0,436= },{4,10 -,563},{7,10,592},{7,10,637},{7,10,770},{8,10,463},{9,10,60},{9,10,335},{9= ,10,904 -},{10,10,73},{11,10,434},{12,10,585},{13,10,331},{18,10,110},{148,10,60},= {132,10 -,502},{136,0,584},{6,10,347},{138,10,161},{7,0,987},{9,0,688},{10,0,522},= {11,0, -788},{12,0,137},{12,0,566},{14,0,9},{14,0,24},{14,0,64},{7,11,899},{142,1= 1,325}, -{4,0,214},{5,0,500},{5,10,102},{6,10,284},{7,10,1079},{7,10,1423},{7,10,1= 702},{8 -,10,470},{9,10,554},{9,10,723},{139,10,333},{7,10,246},{135,10,840},{6,10= ,10},{8 -,10,571},{9,10,739},{143,10,91},{133,10,626},{146,0,195},{134,0,1775},{7,= 0,389}, -{7,0,700},{7,0,940},{8,0,514},{9,0,116},{9,0,535},{10,0,118},{11,0,107},{= 11,0, -148},{11,0,922},{12,0,254},{12,0,421},{142,0,238},{5,10,18},{6,10,526},{1= 3,10,24 -},{13,10,110},{19,10,5},{147,10,44},{132,0,743},{11,0,292},{4,10,309},{5,= 10,462} -,{7,10,970},{135,10,1097},{22,10,30},{150,10,33},{139,11,338},{135,11,159= 8},{7,0 -,1283},{9,0,227},{11,0,325},{11,0,408},{14,0,180},{146,0,47},{4,0,953},{6= ,0,1805 -},{6,0,1814},{6,0,1862},{140,0,774},{6,11,611},{135,11,1733},{135,11,1464= },{5,0, -81},{7,0,146},{7,0,1342},{8,0,53},{8,0,561},{8,0,694},{8,0,754},{9,0,115}= ,{9,0, -179},{9,0,894},{10,0,462},{10,0,813},{11,0,230},{11,0,657},{11,0,699},{11= ,0,748} -,{12,0,119},{12,0,200},{12,0,283},{142,0,273},{5,0,408},{6,0,789},{6,0,87= 7},{6,0 -,1253},{6,0,1413},{137,0,747},{134,10,1704},{135,11,663},{6,0,1910},{6,0,= 1915},{ -6,0,1923},{9,0,913},{9,0,928},{9,0,950},{9,0,954},{9,0,978},{9,0,993},{12= ,0,812} -,{12,0,819},{12,0,831},{12,0,833},{12,0,838},{12,0,909},{12,0,928},{12,0,= 931},{ -12,0,950},{15,0,186},{15,0,187},{15,0,195},{15,0,196},{15,0,209},{15,0,21= 5},{15, -0,236},{15,0,241},{15,0,249},{15,0,253},{18,0,180},{18,0,221},{18,0,224},= {18,0, -227},{18,0,229},{149,0,60},{7,0,1826},{135,0,1938},{11,0,490},{18,0,143},= {5,10, -86},{7,10,743},{9,10,85},{10,10,281},{10,10,432},{12,10,251},{13,10,118},= {142,10 -,378},{5,10,524},{133,10,744},{141,11,442},{10,10,107},{140,10,436},{135,= 11,503} -,{134,0,1162},{132,10,927},{7,0,30},{8,0,86},{8,0,315},{8,0,700},{9,0,576= },{9,0, -858},{10,0,414},{11,0,310},{11,0,888},{11,0,904},{12,0,361},{13,0,248},{1= 3,0,371 -},{14,0,142},{12,10,670},{146,10,94},{134,0,721},{4,11,113},{5,11,163},{5= ,11,735 -},{7,11,1009},{7,10,1149},{9,11,9},{9,10,156},{9,11,771},{12,11,90},{13,1= 1,138}, -{13,11,410},{143,11,128},{138,0,839},{133,10,778},{137,0,617},{133,10,502= },{8,10 -,196},{10,10,283},{139,10,406},{6,0,428},{7,0,524},{8,0,169},{8,0,234},{9= ,0,480} -,{138,0,646},{133,10,855},{134,0,1648},{7,0,1205},{138,0,637},{7,0,1596},= {4,11, -935},{133,11,823},{5,11,269},{7,11,434},{7,11,891},{8,11,339},{9,11,702},= {11,11, -594},{11,11,718},{145,11,100},{7,11,878},{9,11,485},{141,11,264},{4,0,266= },{8,0, -4},{9,0,39},{10,0,166},{11,0,918},{12,0,635},{20,0,10},{22,0,27},{22,0,43= },{22,0 -,52},{134,11,1713},{7,10,1400},{9,10,446},{138,10,45},{135,11,900},{132,0= ,862},{ -134,0,1554},{135,11,1033},{19,0,16},{147,11,16},{135,11,1208},{7,0,157},{= 136,0, -279},{6,0,604},{136,0,391},{13,10,455},{15,10,99},{15,10,129},{144,10,68}= ,{135, -10,172},{7,0,945},{11,0,713},{139,0,744},{4,0,973},{10,0,877},{10,0,937},= {10,0, -938},{140,0,711},{139,0,1022},{132,10,568},{142,11,143},{4,0,567},{9,0,85= 9},{132 -,10,732},{7,0,1846},{136,0,628},{136,10,733},{133,0,762},{4,10,428},{135,= 10,1789 -},{10,0,784},{13,0,191},{7,10,2015},{140,10,665},{133,0,298},{7,0,633},{7= ,0,905} -,{7,0,909},{7,0,1538},{9,0,767},{140,0,636},{138,10,806},{132,0,795},{139= ,0,301} -,{135,0,1970},{5,11,625},{135,11,1617},{135,11,275},{7,11,37},{8,11,425},= {8,11, -693},{9,11,720},{10,11,380},{10,11,638},{11,11,273},{11,11,307},{11,11,47= 3},{12, -11,61},{143,11,43},{135,11,198},{134,0,1236},{7,0,369},{12,0,644},{12,0,6= 45},{ -144,0,90},{19,0,15},{149,0,27},{6,0,71},{7,0,845},{8,0,160},{9,0,318},{6,= 10,1623 -},{134,10,1681},{134,0,1447},{134,0,1255},{138,0,735},{8,0,76},{132,11,16= 8},{6, -10,1748},{8,10,715},{9,10,802},{10,10,46},{10,10,819},{13,10,308},{14,10,= 351},{ -14,10,363},{146,10,67},{135,11,91},{6,0,474},{4,10,63},{133,10,347},{133,= 10,749} -,{138,0,841},{133,10,366},{6,0,836},{132,11,225},{135,0,1622},{135,10,89}= ,{140,0 -,735},{134,0,1601},{138,11,145},{6,0,1390},{137,0,804},{142,0,394},{6,11,= 15},{7, -11,70},{10,11,240},{147,11,93},{6,0,96},{135,0,1426},{4,0,651},{133,0,289= },{7,11 -,956},{7,10,977},{7,11,1157},{7,11,1506},{7,11,1606},{7,11,1615},{7,11,16= 19},{7, -11,1736},{7,11,1775},{8,11,590},{9,11,324},{9,11,736},{9,11,774},{9,11,77= 6},{9, -11,784},{10,11,567},{10,11,708},{11,11,518},{11,11,613},{11,11,695},{11,1= 1,716}, -{11,11,739},{11,11,770},{11,11,771},{11,11,848},{11,11,857},{11,11,931},{= 11,11, -947},{12,11,326},{12,11,387},{12,11,484},{12,11,528},{12,11,552},{12,11,6= 13},{13 -,11,189},{13,11,256},{13,11,340},{13,11,432},{13,11,436},{13,11,440},{13,= 11,454} -,{14,11,174},{14,11,220},{14,11,284},{14,11,390},{145,11,121},{7,0,688},{= 8,0,35} -,{9,0,511},{10,0,767},{147,0,118},{134,0,667},{4,0,513},{5,10,824},{133,1= 0,941}, -{7,10,440},{8,10,230},{139,10,106},{134,0,2034},{135,11,1399},{143,11,66}= ,{135, -11,1529},{4,11,145},{6,11,176},{7,11,395},{9,11,562},{144,11,28},{132,11,= 501},{ -132,0,704},{134,0,1524},{7,0,1078},{134,11,464},{6,11,509},{10,11,82},{20= ,11,91} -,{151,11,13},{4,0,720},{133,0,306},{133,0,431},{7,0,1196},{4,10,914},{5,1= 0,800}, -{133,10,852},{135,11,1189},{10,0,54},{141,10,115},{7,10,564},{142,10,168}= ,{5,0, -464},{6,0,236},{7,0,696},{7,0,914},{7,0,1108},{7,0,1448},{9,0,15},{9,0,56= 4},{10, -0,14},{12,0,565},{13,0,449},{14,0,53},{15,0,13},{16,0,64},{17,0,41},{4,10= ,918},{ -133,10,876},{6,0,1418},{134,10,1764},{4,10,92},{133,10,274},{134,0,907},{= 4,11, -114},{8,10,501},{9,11,492},{13,11,462},{142,11,215},{4,11,77},{5,11,361},= {6,11, -139},{6,11,401},{6,11,404},{7,11,413},{7,11,715},{7,11,1716},{11,11,279},= {12,11, -179},{12,11,258},{13,11,244},{142,11,358},{6,0,1767},{12,0,194},{145,0,10= 7},{134 -,11,1717},{5,10,743},{142,11,329},{4,10,49},{7,10,280},{135,10,1633},{5,0= ,840},{ -7,11,1061},{8,11,82},{11,11,250},{12,11,420},{141,11,184},{135,11,724},{1= 34,0, -900},{136,10,47},{134,0,1436},{144,11,0},{6,0,675},{7,0,1008},{7,0,1560},= {9,0, -642},{11,0,236},{14,0,193},{5,10,272},{5,10,908},{5,10,942},{8,10,197},{9= ,10,47} -,{11,10,538},{139,10,742},{4,0,68},{5,0,628},{5,0,634},{6,0,386},{7,0,794= },{8,0, -273},{9,0,563},{10,0,105},{10,0,171},{11,0,94},{139,0,354},{135,10,1911},= {137,10 -,891},{4,0,95},{6,0,1297},{6,0,1604},{7,0,416},{139,0,830},{6,11,513},{13= 5,11, -1052},{7,0,731},{13,0,20},{143,0,11},{137,11,899},{10,0,850},{140,0,697},= {4,0, -662},{7,11,1417},{12,11,382},{17,11,48},{152,11,12},{133,0,736},{132,0,86= 1},{4, -10,407},{132,10,560},{141,10,490},{6,11,545},{7,11,565},{7,11,1669},{10,1= 1,114}, -{11,11,642},{140,11,618},{6,0,871},{134,0,1000},{5,0,864},{10,0,648},{11,= 0,671}, -{15,0,46},{133,11,5},{133,0,928},{11,0,90},{13,0,7},{4,10,475},{11,10,35}= ,{13,10 -,71},{13,10,177},{142,10,422},{136,0,332},{135,11,192},{134,0,1055},{136,= 11,763} -,{11,0,986},{140,0,682},{7,0,76},{8,0,44},{9,0,884},{10,0,580},{11,0,399}= ,{11,0, -894},{143,0,122},{135,11,1237},{135,10,636},{11,0,300},{6,10,222},{7,10,1= 620},{8 -,10,409},{137,10,693},{4,11,87},{5,11,250},{10,11,601},{13,11,298},{13,11= ,353},{ -141,11,376},{5,0,518},{10,0,340},{11,0,175},{149,0,16},{140,0,771},{6,0,1= 108},{ -137,0,831},{132,0,836},{135,0,1852},{4,0,957},{6,0,1804},{8,0,842},{8,0,8= 43},{8, -0,851},{8,0,855},{140,0,767},{135,11,814},{4,11,57},{7,11,1195},{7,11,143= 8},{7, -11,1548},{7,11,1835},{7,11,1904},{9,11,757},{10,11,604},{139,11,519},{133= ,10,882 -},{138,0,246},{4,0,934},{5,0,202},{8,0,610},{7,11,1897},{12,11,290},{13,1= 1,80},{ -13,11,437},{145,11,74},{8,0,96},{9,0,36},{10,0,607},{10,0,804},{10,0,832}= ,{11,0, -423},{11,0,442},{12,0,309},{14,0,199},{15,0,90},{145,0,110},{132,10,426},= {7,0, -654},{8,0,240},{6,10,58},{7,10,745},{7,10,1969},{8,10,675},{9,10,479},{9,= 10,731} -,{10,10,330},{10,10,593},{10,10,817},{11,10,32},{11,10,133},{11,10,221},{= 145,10, -68},{9,0,13},{9,0,398},{9,0,727},{10,0,75},{10,0,184},{10,0,230},{10,0,56= 4},{10, -0,569},{11,0,973},{12,0,70},{12,0,189},{13,0,57},{141,0,257},{4,11,209},{= 135,11, -902},{7,0,391},{137,10,538},{134,0,403},{6,11,303},{7,11,335},{7,11,1437}= ,{7,11, -1668},{8,11,553},{8,11,652},{8,11,656},{9,11,558},{11,11,743},{149,11,18}= ,{132, -11,559},{11,0,75},{142,0,267},{6,0,815},{141,11,2},{141,0,366},{137,0,631= },{133, -11,1017},{5,0,345},{135,0,1016},{133,11,709},{134,11,1745},{133,10,566},{= 7,0,952 -},{6,10,48},{9,10,139},{10,10,399},{11,10,469},{12,10,634},{141,10,223},{= 133,0, -673},{9,0,850},{7,11,8},{136,11,206},{6,0,662},{149,0,35},{4,0,287},{133,= 0,1018} -,{6,10,114},{7,10,1224},{7,10,1556},{136,10,3},{8,10,576},{137,10,267},{4= ,0,884} -,{5,0,34},{10,0,724},{12,0,444},{13,0,354},{18,0,32},{23,0,24},{23,0,31},= {152,0, -5},{133,10,933},{132,11,776},{138,0,151},{136,0,427},{134,0,382},{132,0,3= 29},{9, -0,846},{10,0,827},{138,11,33},{9,0,279},{10,0,407},{14,0,84},{22,0,18},{1= 35,11, -1297},{136,11,406},{132,0,906},{136,0,366},{134,0,843},{134,0,1443},{135,= 0,1372} -,{138,0,992},{4,0,123},{5,0,605},{7,0,1509},{136,0,36},{132,0,649},{8,11,= 175},{ -10,11,168},{138,11,573},{133,0,767},{134,0,1018},{135,11,1305},{12,10,30}= ,{13,10 -,148},{14,10,87},{14,10,182},{16,10,42},{148,10,70},{134,11,607},{4,0,273= },{5,0, -658},{133,0,995},{6,0,72},{139,11,174},{10,0,483},{12,0,368},{7,10,56},{7= ,10, -1989},{8,10,337},{8,10,738},{9,10,600},{13,10,447},{142,10,92},{5,11,784}= ,{138, -10,666},{135,0,1345},{139,11,882},{134,0,1293},{133,0,589},{134,0,1988},{= 5,0,117 -},{6,0,514},{6,0,541},{7,0,1164},{7,0,1436},{8,0,220},{8,0,648},{10,0,688= },{139, -0,560},{136,0,379},{5,0,686},{7,10,866},{135,10,1163},{132,10,328},{9,11,= 14},{9, -11,441},{10,11,306},{139,11,9},{4,10,101},{135,10,1171},{5,10,833},{136,1= 0,744}, -{5,11,161},{7,11,839},{135,11,887},{7,0,196},{10,0,765},{11,0,347},{11,0,= 552},{ -11,0,790},{12,0,263},{13,0,246},{13,0,270},{13,0,395},{14,0,176},{14,0,19= 0},{14, -0,398},{14,0,412},{15,0,32},{15,0,63},{16,0,88},{147,0,105},{6,10,9},{6,1= 0,397}, -{7,10,53},{7,10,1742},{10,10,632},{11,10,828},{140,10,146},{5,0,381},{135= ,0,1792 -},{134,0,1452},{135,11,429},{8,0,367},{10,0,760},{14,0,79},{20,0,17},{152= ,0,0},{ -7,0,616},{138,0,413},{11,10,417},{12,10,223},{140,10,265},{7,11,1611},{13= ,11,14} -,{15,11,44},{19,11,13},{148,11,76},{135,0,1229},{6,0,120},{7,0,1188},{7,0= ,1710}, -{8,0,286},{9,0,667},{11,0,592},{139,0,730},{135,11,1814},{135,0,1146},{4,= 10,186} -,{5,10,157},{8,10,168},{138,10,6},{4,0,352},{135,0,687},{4,0,192},{5,0,49= },{6,0, -200},{6,0,293},{6,0,1696},{135,0,1151},{133,10,875},{5,10,773},{5,10,991}= ,{6,10, -1635},{134,10,1788},{7,10,111},{136,10,581},{6,0,935},{134,0,1151},{134,0= ,1050}, -{132,0,650},{132,0,147},{11,0,194},{12,0,62},{12,0,88},{11,11,194},{12,11= ,62},{ -140,11,88},{6,0,339},{135,0,923},{134,10,1747},{7,11,643},{136,11,236},{1= 33,0, -934},{7,10,1364},{7,10,1907},{141,10,158},{132,10,659},{4,10,404},{135,10= ,675},{ -7,11,581},{9,11,644},{137,11,699},{13,0,211},{14,0,133},{14,0,204},{15,0,= 64},{15 -,0,69},{15,0,114},{16,0,10},{19,0,23},{19,0,35},{19,0,39},{19,0,51},{19,0= ,71},{ -19,0,75},{152,0,15},{133,10,391},{5,11,54},{135,11,1513},{7,0,222},{8,0,3= 41},{5, -10,540},{134,10,1697},{134,10,78},{132,11,744},{136,0,293},{137,11,701},{= 7,11, -930},{10,11,402},{10,11,476},{13,11,452},{18,11,55},{147,11,104},{132,0,6= 37},{ -133,10,460},{8,11,50},{137,11,624},{132,11,572},{134,0,1159},{4,10,199},{= 139,10, -34},{134,0,847},{134,10,388},{6,11,43},{7,11,38},{8,11,248},{9,11,504},{1= 38,11, -513},{9,0,683},{4,10,511},{6,10,608},{9,10,333},{10,10,602},{11,10,441},{= 11,10, -723},{11,10,976},{140,10,357},{9,0,867},{138,0,837},{6,0,944},{135,11,326= },{135, -0,1809},{5,10,938},{7,11,783},{136,10,707},{133,11,766},{133,11,363},{6,0= ,170},{ -7,0,1080},{8,0,395},{8,0,487},{141,0,147},{6,11,258},{140,11,409},{4,0,53= 5},{8,0 -,618},{5,11,249},{148,11,82},{6,0,1379},{149,11,15},{135,0,1625},{150,0,2= 3},{5, -11,393},{6,11,378},{7,11,1981},{9,11,32},{9,11,591},{10,11,685},{10,11,74= 1},{142 -,11,382},{133,11,788},{7,11,1968},{10,11,19},{139,11,911},{7,11,1401},{13= 5,11, -1476},{4,11,61},{5,11,58},{5,11,171},{5,11,635},{5,11,683},{5,11,700},{6,= 11,291} -,{6,11,566},{7,11,1650},{11,11,523},{12,11,273},{12,11,303},{15,11,39},{1= 43,11, -111},{6,10,469},{7,10,1709},{138,10,515},{4,0,778},{134,11,589},{132,0,46= },{5,0, -811},{6,0,1679},{6,0,1714},{135,0,2032},{7,0,1458},{9,0,407},{11,0,15},{1= 2,0,651 -},{149,0,37},{7,0,938},{132,10,500},{6,0,34},{7,0,69},{7,0,1089},{7,0,128= 1},{8,0 -,708},{8,0,721},{9,0,363},{148,0,98},{10,11,231},{147,11,124},{7,11,726},= {152,11 -,9},{5,10,68},{134,10,383},{136,11,583},{4,11,917},{133,11,1005},{11,10,2= 16},{ -139,10,340},{135,11,1675},{8,0,441},{10,0,314},{143,0,3},{132,11,919},{4,= 10,337} -,{6,10,353},{7,10,1934},{8,10,488},{137,10,429},{7,0,889},{7,10,1795},{8,= 10,259} -,{9,10,135},{9,10,177},{9,10,860},{10,10,825},{11,10,115},{11,10,370},{11= ,10,405 -},{11,10,604},{12,10,10},{12,10,667},{12,10,669},{13,10,76},{14,10,310},{= 15,10, -76},{15,10,147},{148,10,23},{4,10,15},{4,11,255},{5,10,22},{5,11,302},{6,= 11,132} -,{6,10,244},{7,10,40},{7,11,128},{7,10,200},{7,11,283},{7,10,906},{7,10,1= 199},{7 -,11,1299},{9,10,616},{10,11,52},{10,11,514},{10,10,716},{11,10,635},{11,1= 0,801}, -{11,11,925},{12,10,458},{13,11,92},{142,11,309},{132,0,462},{137,11,173},= {135,10 -,1735},{8,0,525},{5,10,598},{7,10,791},{8,10,108},{137,10,123},{5,0,73},{= 6,0,23} -,{134,0,338},{132,0,676},{132,10,683},{7,0,725},{8,0,498},{139,0,268},{12= ,0,21}, -{151,0,7},{135,0,773},{4,10,155},{135,10,1689},{4,0,164},{5,0,730},{5,10,= 151},{5 -,10,741},{6,11,210},{7,10,498},{7,10,870},{7,10,1542},{12,10,213},{14,10,= 36},{14 -,10,391},{17,10,111},{18,10,6},{18,10,46},{18,10,151},{19,10,36},{20,10,3= 2},{20, -10,56},{20,10,69},{20,10,102},{21,10,4},{22,10,8},{22,10,10},{22,10,14},{= 150,10, -31},{4,10,624},{135,10,1752},{4,0,583},{9,0,936},{15,0,214},{18,0,199},{2= 4,0,26} -,{134,11,588},{7,0,1462},{11,0,659},{4,11,284},{134,11,223},{133,0,220},{= 139,0, -803},{132,0,544},{4,10,492},{133,10,451},{16,0,98},{148,0,119},{4,11,218}= ,{7,11, -526},{143,11,137},{135,10,835},{4,11,270},{5,11,192},{6,11,332},{7,11,132= 2},{13, -11,9},{13,10,70},{14,11,104},{142,11,311},{132,10,539},{140,11,661},{5,0,= 176},{6 -,0,437},{6,0,564},{11,0,181},{141,0,183},{135,0,1192},{6,10,113},{135,10,= 436},{ -136,10,718},{135,10,520},{135,0,1878},{140,11,196},{7,11,379},{8,11,481},= {137,11 -,377},{5,11,1003},{6,11,149},{137,11,746},{8,11,262},{9,11,627},{10,11,18= },{11, -11,214},{11,11,404},{11,11,457},{11,11,780},{11,11,849},{11,11,913},{13,1= 1,330}, -{13,11,401},{142,11,200},{149,0,26},{136,11,304},{132,11,142},{135,0,944}= ,{4,0, -790},{5,0,273},{134,0,394},{134,0,855},{4,0,135},{6,0,127},{7,0,1185},{7,= 0,1511} -,{8,0,613},{11,0,5},{12,0,336},{12,0,495},{12,0,586},{12,0,660},{12,0,668= },{14,0 -,385},{15,0,118},{17,0,20},{146,0,98},{6,0,230},{9,0,752},{18,0,109},{12,= 10,610} -,{13,10,431},{144,10,59},{7,0,1954},{135,11,925},{4,11,471},{5,11,51},{6,= 11,602} -,{8,11,484},{10,11,195},{140,11,159},{132,10,307},{136,11,688},{132,11,69= 7},{7, -11,812},{7,11,1261},{7,11,1360},{9,11,632},{140,11,352},{5,0,162},{8,0,68= },{133, -10,964},{4,0,654},{136,11,212},{4,0,156},{7,0,998},{7,0,1045},{7,0,1860},= {9,0,48 -},{9,0,692},{11,0,419},{139,0,602},{133,11,221},{4,11,373},{5,11,283},{6,= 11,480} -,{135,11,609},{142,11,216},{132,0,240},{6,11,192},{9,11,793},{145,11,55},= {4,10, -75},{5,10,180},{6,10,500},{7,10,58},{7,10,710},{138,10,645},{4,11,132},{5= ,11,69} -,{5,10,649},{135,11,1242},{6,10,276},{7,10,282},{7,10,879},{7,10,924},{8,= 10,459} -,{9,10,599},{9,10,754},{11,10,574},{12,10,128},{12,10,494},{13,10,52},{13= ,10,301 -},{15,10,30},{143,10,132},{132,10,200},{4,11,111},{135,11,302},{9,0,197},= {10,0, -300},{12,0,473},{13,0,90},{141,0,405},{132,11,767},{6,11,42},{7,11,1416},= {7,11, -1590},{7,11,2005},{8,11,131},{8,11,466},{9,11,672},{13,11,252},{148,11,10= 3},{8,0 -,958},{8,0,999},{10,0,963},{138,0,1001},{135,10,1621},{135,0,858},{4,0,60= 6},{137 -,11,444},{6,11,44},{136,11,368},{139,11,172},{4,11,570},{133,11,120},{139= ,11,624 -},{7,0,1978},{8,0,676},{6,10,225},{137,10,211},{7,0,972},{11,0,102},{136,= 10,687} -,{6,11,227},{135,11,1589},{8,10,58},{9,10,724},{11,10,809},{13,10,113},{1= 45,10, -72},{4,0,361},{133,0,315},{132,0,461},{6,10,345},{135,10,1247},{132,0,472= },{8,10 -,767},{8,10,803},{9,10,301},{137,10,903},{135,11,1333},{135,11,477},{7,10= ,1949}, -{136,10,674},{6,0,905},{138,0,747},{133,0,155},{134,10,259},{7,0,163},{8,= 0,319}, -{9,0,402},{10,0,24},{10,0,681},{11,0,200},{12,0,253},{12,0,410},{142,0,21= 9},{5,0 -,475},{7,0,1780},{9,0,230},{11,0,297},{11,0,558},{14,0,322},{19,0,76},{6,= 11,1667 -},{7,11,2036},{138,11,600},{136,10,254},{6,0,848},{135,0,1956},{6,11,511}= ,{140, -11,132},{5,11,568},{6,11,138},{135,11,1293},{6,0,631},{137,0,838},{149,0,= 36},{4, -11,565},{8,11,23},{136,11,827},{5,0,944},{134,0,1769},{4,0,144},{6,0,842}= ,{6,0, -1400},{4,11,922},{133,11,1023},{133,10,248},{9,10,800},{10,10,693},{11,10= ,482},{ -11,10,734},{139,10,789},{7,11,1002},{139,11,145},{4,10,116},{5,10,95},{5,= 10,445} -,{7,10,1688},{8,10,29},{9,10,272},{11,10,509},{139,10,915},{14,0,369},{14= 6,0,72} -,{135,10,1641},{132,11,740},{133,10,543},{140,11,116},{6,0,247},{9,0,555}= ,{5,10, -181},{136,10,41},{133,10,657},{136,0,996},{138,10,709},{7,0,189},{8,10,20= 2},{138 -,10,536},{136,11,402},{4,11,716},{141,11,31},{10,0,280},{138,0,797},{9,10= ,423},{ -140,10,89},{8,10,113},{9,10,877},{10,10,554},{11,10,83},{12,10,136},{147,= 10,109} -,{133,10,976},{7,0,746},{132,10,206},{136,0,526},{139,0,345},{136,0,1017}= ,{8,11, -152},{9,11,53},{9,11,268},{9,11,901},{10,11,518},{10,11,829},{11,11,188},= {13,11, -74},{14,11,46},{15,11,17},{15,11,33},{17,11,40},{18,11,36},{19,11,20},{22= ,11,1}, -{152,11,2},{133,11,736},{136,11,532},{5,0,428},{138,0,651},{135,11,681},{= 135,0, -1162},{7,0,327},{13,0,230},{17,0,113},{8,10,226},{10,10,537},{11,10,570},= {11,10, -605},{11,10,799},{11,10,804},{12,10,85},{12,10,516},{12,10,623},{12,11,67= 7},{13, -10,361},{14,10,77},{14,10,78},{147,10,110},{4,0,792},{7,0,1717},{10,0,546= },{132, -10,769},{4,11,684},{136,11,384},{132,10,551},{134,0,1203},{9,10,57},{9,10= ,459},{ -10,10,425},{11,10,119},{12,10,184},{12,10,371},{13,10,358},{145,10,51},{5= ,0,672} -,{5,10,814},{8,10,10},{9,10,421},{9,10,729},{10,10,609},{139,10,689},{138= ,0,189} -,{134,10,624},{7,11,110},{7,11,188},{8,11,290},{8,11,591},{9,11,382},{9,1= 1,649}, -{11,11,71},{11,11,155},{11,11,313},{12,11,5},{13,11,325},{142,11,287},{13= 3,0,99} -,{6,0,1053},{135,0,298},{7,11,360},{7,11,425},{9,11,66},{9,11,278},{138,1= 1,644}, -{4,0,397},{136,0,555},{137,10,269},{132,10,528},{4,11,900},{133,11,861},{= 6,0, -1157},{5,11,254},{7,11,985},{136,11,73},{7,11,1959},{136,11,683},{12,0,39= 8},{20, -0,39},{21,0,11},{150,0,41},{4,0,485},{7,0,353},{135,0,1523},{6,0,366},{7,= 0,1384} -,{135,0,1601},{138,0,787},{137,0,282},{5,10,104},{6,10,173},{135,10,1631}= ,{139, -11,146},{4,0,157},{133,0,471},{134,0,941},{132,11,725},{7,0,1336},{8,10,1= 38},{8, -10,342},{9,10,84},{10,10,193},{11,10,883},{140,10,359},{134,11,196},{136,= 0,116}, -{133,11,831},{134,0,787},{134,10,95},{6,10,406},{10,10,409},{10,10,447},{= 11,10, -44},{140,10,100},{5,0,160},{7,0,363},{7,0,589},{10,0,170},{141,0,55},{134= ,0,1815 -},{132,0,866},{6,0,889},{6,0,1067},{6,0,1183},{4,11,321},{134,11,569},{5,= 11,848} -,{134,11,66},{4,11,36},{6,10,1636},{7,11,1387},{10,11,205},{11,11,755},{1= 41,11, -271},{132,0,689},{9,0,820},{4,10,282},{7,10,1034},{11,10,398},{11,10,634}= ,{12,10 -,1},{12,10,79},{12,10,544},{14,10,237},{17,10,10},{146,10,20},{4,0,108},{= 7,0,804 -},{139,0,498},{132,11,887},{6,0,1119},{135,11,620},{6,11,165},{138,11,388= },{5,0, -244},{5,10,499},{6,10,476},{7,10,600},{7,10,888},{135,10,1096},{140,0,609= },{135, -0,1005},{4,0,412},{133,0,581},{4,11,719},{135,11,155},{7,10,296},{7,10,59= 6},{8, -10,560},{8,10,586},{9,10,612},{11,10,304},{12,10,46},{13,10,89},{14,10,11= 2},{145 -,10,122},{4,0,895},{133,0,772},{142,11,307},{135,0,1898},{4,0,926},{133,0= ,983},{ -4,11,353},{6,11,146},{6,11,1789},{7,11,288},{7,11,990},{7,11,1348},{9,11,= 665},{9 -,11,898},{11,11,893},{142,11,212},{132,0,538},{133,11,532},{6,0,294},{7,0= ,1267}, -{8,0,624},{141,0,496},{7,0,1325},{4,11,45},{135,11,1257},{138,0,301},{9,0= ,298},{ -12,0,291},{13,0,276},{14,0,6},{17,0,18},{21,0,32},{7,10,1599},{7,10,1723}= ,{8,10, -79},{8,10,106},{8,10,190},{8,10,302},{8,10,383},{8,10,713},{9,10,119},{9,= 10,233} -,{9,10,419},{9,10,471},{10,10,181},{10,10,406},{11,10,57},{11,10,85},{11,= 10,120} -,{11,10,177},{11,10,296},{11,10,382},{11,10,454},{11,10,758},{11,10,999},= {12,10, -27},{12,10,131},{12,10,245},{12,10,312},{12,10,446},{12,10,454},{13,10,98= },{13, -10,426},{13,10,508},{14,10,163},{14,10,272},{14,10,277},{14,10,370},{15,1= 0,95},{ -15,10,138},{15,10,167},{17,10,38},{148,10,96},{132,0,757},{134,0,1263},{4= ,0,820} -,{134,10,1759},{133,0,722},{136,11,816},{138,10,372},{145,10,16},{134,0,1= 039},{4 -,0,991},{134,0,2028},{133,10,258},{7,0,1875},{139,0,124},{6,11,559},{6,11= ,1691}, -{135,11,586},{5,0,324},{7,0,881},{8,10,134},{9,10,788},{140,10,438},{7,11= ,1823}, -{139,11,693},{6,0,1348},{134,0,1545},{134,0,911},{132,0,954},{8,0,329},{8= ,0,414} -,{7,10,1948},{135,10,2004},{5,0,517},{6,10,439},{7,10,780},{135,10,1040},= {132,0, -816},{5,10,1},{6,10,81},{138,10,520},{9,0,713},{10,0,222},{5,10,482},{8,1= 0,98},{ -10,10,700},{10,10,822},{11,10,302},{11,10,778},{12,10,50},{12,10,127},{12= ,10,396 -},{13,10,62},{13,10,328},{14,10,122},{147,10,72},{137,0,33},{5,10,2},{7,1= 0,1494} -,{136,10,589},{6,10,512},{7,10,797},{8,10,253},{9,10,77},{10,10,1},{10,11= ,108},{ -10,10,129},{10,10,225},{11,11,116},{11,10,118},{11,10,226},{11,10,251},{1= 1,10, -430},{11,10,701},{11,10,974},{11,10,982},{12,10,64},{12,10,260},{12,10,48= 8},{140 -,10,690},{134,11,456},{133,11,925},{5,0,150},{7,0,106},{7,0,774},{8,0,603= },{9,0, -593},{9,0,634},{10,0,44},{10,0,173},{11,0,462},{11,0,515},{13,0,216},{13,= 0,288}, -{142,0,400},{137,10,347},{5,0,748},{134,0,553},{12,0,108},{141,0,291},{7,= 0,420}, -{4,10,12},{7,10,522},{7,10,809},{8,10,797},{141,10,88},{6,11,193},{7,11,2= 40},{7, -11,1682},{10,11,51},{10,11,640},{11,11,410},{13,11,82},{14,11,247},{14,11= ,331},{ -142,11,377},{133,10,528},{135,0,1777},{4,0,493},{144,0,55},{136,11,633},{= 139,0, -81},{6,0,980},{136,0,321},{148,10,109},{5,10,266},{9,10,290},{9,10,364},{= 10,10, -293},{11,10,606},{142,10,45},{6,0,568},{7,0,112},{7,0,1804},{8,0,362},{8,= 0,410}, -{8,0,830},{9,0,514},{11,0,649},{142,0,157},{4,0,74},{6,0,510},{6,10,594},= {9,10, -121},{10,10,49},{10,10,412},{139,10,834},{134,0,838},{136,10,748},{132,10= ,466},{ -132,0,625},{135,11,1443},{4,11,237},{135,11,514},{9,10,378},{141,10,162},= {6,0,16 -},{6,0,158},{7,0,43},{7,0,129},{7,0,181},{8,0,276},{8,0,377},{10,0,523},{= 11,0, -816},{12,0,455},{13,0,303},{142,0,135},{135,0,281},{4,0,1},{7,0,1143},{7,= 0,1463} -,{8,0,61},{9,0,207},{9,0,390},{9,0,467},{139,0,836},{6,11,392},{7,11,65},= {135,11 -,2019},{132,10,667},{4,0,723},{5,0,895},{7,0,1031},{8,0,199},{8,0,340},{9= ,0,153} -,{9,0,215},{10,0,21},{10,0,59},{10,0,80},{10,0,224},{10,0,838},{11,0,229}= ,{11,0, -652},{12,0,192},{13,0,146},{142,0,91},{132,0,295},{137,0,51},{9,11,222},{= 10,11, -43},{139,11,900},{5,0,309},{140,0,211},{5,0,125},{8,0,77},{138,0,15},{136= ,11,604 -},{138,0,789},{5,0,173},{4,10,39},{7,10,1843},{8,10,407},{11,10,144},{140= ,10,523 -},{138,11,265},{133,0,439},{132,10,510},{7,0,648},{7,0,874},{11,0,164},{1= 2,0,76} -,{18,0,9},{7,10,1980},{10,10,487},{138,10,809},{12,0,111},{14,0,294},{19,= 0,45},{ -13,10,260},{146,10,63},{133,11,549},{134,10,570},{4,0,8},{7,0,1152},{7,0,= 1153},{ -7,0,1715},{9,0,374},{10,0,478},{139,0,648},{135,0,1099},{5,0,575},{6,0,35= 4},{135 -,0,701},{7,11,36},{8,11,201},{136,11,605},{4,10,787},{136,11,156},{6,0,51= 8},{149 -,11,13},{140,11,224},{134,0,702},{132,10,516},{5,11,724},{10,11,305},{11,= 11,151} -,{12,11,33},{12,11,121},{12,11,381},{17,11,3},{17,11,27},{17,11,78},{18,1= 1,18},{ -19,11,54},{149,11,5},{8,0,87},{4,11,523},{5,11,638},{11,10,887},{14,10,36= 5},{142 -,10,375},{138,0,438},{136,10,821},{135,11,1908},{6,11,242},{7,11,227},{7,= 11,1581 -},{8,11,104},{9,11,113},{9,11,220},{9,11,427},{10,11,74},{10,11,239},{11,= 11,579} -,{11,11,1023},{13,11,4},{13,11,204},{13,11,316},{18,11,95},{148,11,86},{4= ,0,69}, -{5,0,122},{5,0,849},{6,0,1633},{9,0,656},{138,0,464},{7,0,1802},{4,10,10}= ,{139, -10,786},{135,11,861},{139,0,499},{7,0,476},{7,0,1592},{138,0,87},{133,10,= 684},{4 -,0,840},{134,10,27},{142,0,283},{6,0,1620},{7,11,1328},{136,11,494},{5,0,= 859},{7 -,0,1160},{8,0,107},{9,0,291},{9,0,439},{10,0,663},{11,0,609},{140,0,197},= {7,11, -1306},{8,11,505},{9,11,482},{10,11,126},{11,11,225},{12,11,347},{12,11,44= 9},{13, -11,19},{142,11,218},{5,11,268},{10,11,764},{12,11,120},{13,11,39},{145,11= ,127},{ -145,10,56},{7,11,1672},{10,11,472},{11,11,189},{143,11,51},{6,10,342},{6,= 10,496} -,{8,10,275},{137,10,206},{133,0,600},{4,0,117},{6,0,372},{7,0,1905},{142,= 0,323}, -{4,10,909},{5,10,940},{135,11,1471},{132,10,891},{4,0,722},{139,0,471},{4= ,11,384 -},{135,11,1022},{132,10,687},{9,0,5},{12,0,216},{12,0,294},{12,0,298},{12= ,0,400} -,{12,0,518},{13,0,229},{143,0,139},{135,11,1703},{7,11,1602},{10,11,698},= {12,11, -212},{141,11,307},{6,10,41},{141,10,160},{135,11,1077},{9,11,159},{11,11,= 28},{ -140,11,603},{4,0,514},{7,0,1304},{138,0,477},{134,0,1774},{9,0,88},{139,0= ,270},{ -5,0,12},{7,0,375},{9,0,438},{134,10,1718},{132,11,515},{136,10,778},{8,11= ,632},{ -8,11,697},{137,11,854},{6,0,362},{6,0,997},{146,0,51},{7,0,816},{7,0,1241= },{9,0, -283},{9,0,520},{10,0,213},{10,0,307},{10,0,463},{10,0,671},{10,0,746},{11= ,0,401} -,{11,0,794},{12,0,517},{18,0,107},{147,0,115},{133,10,115},{150,11,28},{4= ,11,136 -},{133,11,551},{142,10,314},{132,0,258},{6,0,22},{7,0,903},{7,0,1963},{8,= 0,639}, -{138,0,577},{5,0,681},{8,0,782},{13,0,130},{17,0,84},{5,10,193},{140,10,1= 78},{9, -11,17},{138,11,291},{7,11,1287},{9,11,44},{10,11,552},{10,11,642},{11,11,= 839},{ -12,11,274},{12,11,275},{12,11,372},{13,11,91},{142,11,125},{135,10,174},{= 4,0,664 -},{5,0,804},{139,0,1013},{134,0,942},{6,0,1349},{6,0,1353},{6,0,1450},{7,= 11,1518 -},{139,11,694},{11,0,356},{4,10,122},{5,10,796},{5,10,952},{6,10,1660},{6= ,10, -1671},{8,10,567},{9,10,687},{9,10,742},{10,10,686},{11,10,682},{140,10,28= 1},{5,0 -,32},{6,11,147},{7,11,886},{9,11,753},{138,11,268},{5,10,179},{7,10,1095}= ,{135, -10,1213},{4,10,66},{7,10,722},{135,10,904},{135,10,352},{9,11,245},{138,1= 1,137}, -{4,0,289},{7,0,629},{7,0,1698},{7,0,1711},{12,0,215},{133,11,414},{6,0,19= 75},{ -135,11,1762},{6,0,450},{136,0,109},{141,10,35},{134,11,599},{136,0,705},{= 133,0, -664},{134,11,1749},{11,11,402},{12,11,109},{12,11,431},{13,11,179},{13,11= ,206},{ -14,11,175},{14,11,217},{16,11,3},{148,11,53},{135,0,1238},{134,11,1627},{= 132,11, -488},{13,0,318},{10,10,592},{10,10,753},{12,10,317},{12,10,355},{12,10,46= 5},{12, -10,469},{12,10,560},{140,10,578},{133,10,564},{132,11,83},{140,11,676},{6= ,0,1872 -},{6,0,1906},{6,0,1907},{9,0,934},{9,0,956},{9,0,960},{9,0,996},{12,0,794= },{12,0 -,876},{12,0,880},{12,0,918},{15,0,230},{18,0,234},{18,0,238},{21,0,38},{1= 49,0,62 -},{134,10,556},{134,11,278},{137,0,103},{7,10,544},{8,10,719},{138,10,61}= ,{4,10, -5},{5,10,498},{8,10,637},{137,10,521},{7,0,777},{12,0,229},{12,0,239},{15= ,0,12}, -{12,11,229},{12,11,239},{143,11,12},{6,0,26},{7,11,388},{7,11,644},{139,1= 1,781}, -{7,11,229},{8,11,59},{9,11,190},{9,11,257},{10,11,378},{140,11,191},{133,= 10,927} -,{135,10,1441},{4,10,893},{5,10,780},{133,10,893},{4,0,414},{5,0,467},{9,= 0,654}, -{10,0,451},{12,0,59},{141,0,375},{142,0,173},{135,0,17},{7,0,1350},{133,1= 0,238}, -{135,0,955},{4,0,960},{10,0,887},{12,0,753},{18,0,161},{18,0,162},{152,0,= 19},{ -136,11,344},{6,10,1729},{137,11,288},{132,11,660},{4,0,217},{5,0,710},{7,= 0,760}, -{7,0,1926},{9,0,428},{9,0,708},{10,0,254},{10,0,296},{10,0,720},{11,0,109= },{11,0 -,255},{12,0,165},{12,0,315},{13,0,107},{13,0,203},{14,0,54},{14,0,99},{14= ,0,114} -,{14,0,388},{16,0,85},{17,0,9},{17,0,33},{20,0,25},{20,0,28},{20,0,29},{2= 1,0,9}, -{21,0,10},{21,0,34},{22,0,17},{4,10,60},{7,10,1800},{8,10,314},{9,10,700}= ,{139, -10,487},{7,11,1035},{138,11,737},{7,11,690},{9,11,217},{9,11,587},{140,11= ,521},{ -6,0,919},{7,11,706},{7,11,1058},{138,11,538},{7,10,1853},{138,10,437},{13= 6,10, -419},{6,0,280},{10,0,502},{11,0,344},{140,0,38},{5,0,45},{7,0,1161},{11,0= ,448},{ -11,0,880},{13,0,139},{13,0,407},{15,0,16},{17,0,95},{18,0,66},{18,0,88},{= 18,0, -123},{149,0,7},{11,11,92},{11,11,196},{11,11,409},{11,11,450},{11,11,666}= ,{11,11 -,777},{12,11,262},{13,11,385},{13,11,393},{15,11,115},{16,11,45},{145,11,= 82},{ -136,0,777},{134,11,1744},{4,0,410},{7,0,521},{133,10,828},{134,0,673},{7,= 0,1110} -,{7,0,1778},{7,10,176},{135,10,178},{5,10,806},{7,11,268},{7,10,1976},{13= 6,11, -569},{4,11,733},{9,11,194},{10,11,92},{11,11,198},{12,11,84},{12,11,87},{= 13,11, -128},{144,11,74},{5,0,341},{7,0,1129},{11,0,414},{4,10,51},{6,10,4},{7,10= ,591},{ -7,10,849},{7,10,951},{7,10,1613},{7,10,1760},{7,10,1988},{9,10,434},{10,1= 0,754}, -{11,10,25},{139,10,37},{133,10,902},{135,10,928},{135,0,787},{132,0,436},= {134,10 -,270},{7,0,1587},{135,0,1707},{6,0,377},{7,0,1025},{9,0,613},{145,0,104},= {7,11, -982},{7,11,1361},{10,11,32},{143,11,56},{139,0,96},{132,0,451},{132,10,41= 6},{142 -,10,372},{5,10,152},{5,10,197},{7,11,306},{7,10,340},{7,10,867},{10,10,54= 8},{10, -10,581},{11,10,6},{12,10,3},{12,10,19},{14,10,110},{142,10,289},{134,0,68= 0},{134 -,11,609},{7,0,483},{7,10,190},{8,10,28},{8,10,141},{8,10,444},{8,10,811},= {9,10, -468},{11,10,334},{12,10,24},{12,10,386},{140,10,576},{10,0,916},{133,10,7= 57},{5, -10,721},{135,10,1553},{133,11,178},{134,0,937},{132,10,898},{133,0,739},{= 147,0, -82},{135,0,663},{146,0,128},{5,10,277},{141,10,247},{134,0,1087},{132,10,= 435},{6 -,11,381},{7,11,645},{7,11,694},{136,11,546},{7,0,503},{135,0,1885},{6,0,1= 965},{8 -,0,925},{138,0,955},{4,0,113},{5,0,163},{5,0,735},{7,0,1009},{9,0,9},{9,0= ,771},{ -12,0,90},{13,0,138},{13,0,410},{143,0,128},{4,0,324},{138,0,104},{7,0,460= },{5,10 -,265},{134,10,212},{133,11,105},{7,11,261},{7,11,1107},{7,11,1115},{7,11,= 1354},{ -7,11,1588},{7,11,1705},{7,11,1902},{9,11,465},{10,11,248},{10,11,349},{10= ,11,647 -},{11,11,527},{11,11,660},{11,11,669},{12,11,529},{141,11,305},{5,11,438}= ,{9,11, -694},{12,11,627},{141,11,210},{152,11,11},{4,0,935},{133,0,823},{132,10,7= 02},{5, -0,269},{7,0,434},{7,0,891},{8,0,339},{9,0,702},{11,0,594},{11,0,718},{17,= 0,100}, -{5,10,808},{135,10,2045},{7,0,1014},{9,0,485},{141,0,264},{134,0,1713},{7= ,0,1810 -},{11,0,866},{12,0,103},{13,0,495},{140,11,233},{4,0,423},{10,0,949},{138= ,0,1013 -},{135,0,900},{8,11,25},{138,11,826},{5,10,166},{8,10,739},{140,10,511},{= 134,0, -2018},{7,11,1270},{139,11,612},{4,10,119},{5,10,170},{5,10,447},{7,10,170= 8},{7, -10,1889},{9,10,357},{9,10,719},{12,10,486},{140,10,596},{12,0,574},{140,1= 1,574}, -{132,11,308},{6,0,964},{6,0,1206},{134,0,1302},{4,10,450},{135,10,1158},{= 135,11, -150},{136,11,649},{14,0,213},{148,0,38},{9,11,45},{9,11,311},{141,11,42},= {134,11 -,521},{7,10,1375},{7,10,1466},{138,10,331},{132,10,754},{5,11,339},{7,11,= 1442},{ -14,11,3},{15,11,41},{147,11,66},{136,11,378},{134,0,1022},{5,10,850},{136= ,10,799 -},{142,0,143},{135,0,2029},{134,11,1628},{8,0,523},{150,0,34},{5,0,625},{= 135,0, -1617},{7,0,275},{7,10,238},{7,10,2033},{8,10,120},{8,10,188},{8,10,659},{= 9,10, -598},{10,10,466},{12,10,342},{12,10,588},{13,10,503},{14,10,246},{143,10,= 92},{7, -0,37},{8,0,425},{8,0,693},{9,0,720},{10,0,380},{10,0,638},{11,0,273},{11,= 0,473}, -{12,0,61},{143,0,43},{135,11,829},{135,0,1943},{132,0,765},{5,11,486},{13= 5,11, -1349},{7,11,1635},{8,11,17},{10,11,217},{138,11,295},{4,10,201},{7,10,174= 4},{8, -10,602},{11,10,247},{11,10,826},{145,10,65},{138,11,558},{11,0,551},{142,= 0,159}, -{8,10,164},{146,10,62},{139,11,176},{132,0,168},{136,0,1010},{134,0,1994}= ,{135,0 -,91},{138,0,532},{135,10,1243},{135,0,1884},{132,10,907},{5,10,100},{10,1= 0,329}, -{12,10,416},{149,10,29},{134,11,447},{132,10,176},{5,10,636},{5,10,998},{= 7,10,9} -,{7,10,1508},{8,10,26},{9,10,317},{9,10,358},{10,10,210},{10,10,292},{10,= 10,533} -,{11,10,555},{12,10,526},{12,10,607},{13,10,263},{13,10,459},{142,10,271}= ,{4,11, -609},{135,11,756},{6,0,15},{7,0,70},{10,0,240},{147,0,93},{4,11,930},{133= ,11,947 -},{134,0,1227},{134,0,1534},{133,11,939},{133,11,962},{5,11,651},{8,11,17= 0},{9, -11,61},{9,11,63},{10,11,23},{10,11,37},{10,11,834},{11,11,4},{11,11,187},= {11,11, -281},{11,11,503},{11,11,677},{12,11,96},{12,11,130},{12,11,244},{14,11,5}= ,{14,11 -,40},{14,11,162},{14,11,202},{146,11,133},{4,11,406},{5,11,579},{12,11,49= 2},{150 -,11,15},{139,0,392},{6,10,610},{10,10,127},{141,10,27},{7,0,655},{7,0,184= 4},{136 -,10,119},{4,0,145},{6,0,176},{7,0,395},{137,0,562},{132,0,501},{140,11,14= 5},{136 -,0,1019},{134,0,509},{139,0,267},{6,11,17},{7,11,16},{7,11,1001},{7,11,19= 82},{9, -11,886},{10,11,489},{10,11,800},{11,11,782},{12,11,320},{13,11,467},{14,1= 1,145}, -{14,11,387},{143,11,119},{145,11,17},{6,0,1099},{133,11,458},{7,11,1983},= {8,11,0 -},{8,11,171},{9,11,120},{9,11,732},{10,11,473},{11,11,656},{11,11,998},{1= 8,11,0} -,{18,11,2},{147,11,21},{12,11,427},{146,11,38},{10,0,948},{138,0,968},{7,= 10,126} -,{136,10,84},{136,10,790},{4,0,114},{9,0,492},{13,0,462},{142,0,215},{6,1= 0,64},{ -12,10,377},{141,10,309},{4,0,77},{5,0,361},{6,0,139},{6,0,401},{6,0,404},= {7,0, -413},{7,0,715},{7,0,1716},{11,0,279},{12,0,179},{12,0,258},{13,0,244},{14= 2,0,358 -},{134,0,1717},{7,0,772},{7,0,1061},{7,0,1647},{8,0,82},{11,0,250},{11,0,= 607},{ -12,0,311},{12,0,420},{13,0,184},{13,0,367},{7,10,1104},{11,10,269},{11,10= ,539},{ -11,10,627},{11,10,706},{11,10,975},{12,10,248},{12,10,434},{12,10,600},{1= 2,10, -622},{13,10,297},{13,10,485},{14,10,69},{14,10,409},{143,10,108},{135,0,7= 24},{4, -11,512},{4,11,519},{133,11,342},{134,0,1133},{145,11,29},{11,10,977},{141= ,10,507 -},{6,0,841},{6,0,1042},{6,0,1194},{10,0,993},{140,0,1021},{6,11,31},{7,11= ,491},{ -7,11,530},{8,11,592},{9,10,34},{11,11,53},{11,10,484},{11,11,779},{12,11,= 167},{ -12,11,411},{14,11,14},{14,11,136},{15,11,72},{16,11,17},{144,11,72},{4,0,= 1021},{ -6,0,2037},{133,11,907},{7,0,373},{8,0,335},{8,0,596},{9,0,488},{6,10,1700= },{7,10 -,293},{7,10,382},{7,10,1026},{7,10,1087},{7,10,2027},{8,10,252},{8,10,727= },{8,10 -,729},{9,10,30},{9,10,199},{9,10,231},{9,10,251},{9,10,334},{9,10,361},{9= ,10,712 -},{10,10,55},{10,10,60},{10,10,232},{10,10,332},{10,10,384},{10,10,396},{= 10,10, -504},{10,10,542},{10,10,652},{11,10,20},{11,10,48},{11,10,207},{11,10,291= },{11, -10,298},{11,10,342},{11,10,365},{11,10,394},{11,10,620},{11,10,705},{11,1= 0,1017} -,{12,10,123},{12,10,340},{12,10,406},{12,10,643},{13,10,61},{13,10,269},{= 13,10, -311},{13,10,319},{13,10,486},{14,10,234},{15,10,62},{15,10,85},{16,10,71}= ,{18,10 -,119},{148,10,105},{150,0,37},{4,11,208},{5,11,106},{6,11,531},{8,11,408}= ,{9,11, -188},{138,11,572},{132,0,564},{6,0,513},{135,0,1052},{132,0,825},{9,0,899= },{140, -11,441},{134,0,778},{133,11,379},{7,0,1417},{12,0,382},{17,0,48},{152,0,1= 2},{132 -,11,241},{7,0,1116},{6,10,379},{7,10,270},{8,10,176},{8,10,183},{9,10,432= },{9,10 -,661},{12,10,247},{12,10,617},{146,10,125},{5,10,792},{133,10,900},{6,0,5= 45},{7, -0,565},{7,0,1669},{10,0,114},{11,0,642},{140,0,618},{133,0,5},{138,11,7},= {132,11 -,259},{135,0,192},{134,0,701},{136,0,763},{135,10,1979},{4,10,901},{133,1= 0,776}, -{10,0,755},{147,0,29},{133,0,759},{4,11,173},{5,11,312},{5,11,512},{135,1= 1,1285} -,{7,11,1603},{7,11,1691},{9,11,464},{11,11,195},{12,11,279},{12,11,448},{= 14,11, -11},{147,11,102},{7,0,370},{7,0,1007},{7,0,1177},{135,0,1565},{135,0,1237= },{4,0, -87},{5,0,250},{141,0,298},{4,11,452},{5,11,583},{5,11,817},{6,11,433},{7,= 11,593} -,{7,11,720},{7,11,1378},{8,11,161},{9,11,284},{10,11,313},{139,11,886},{4= ,11,547 -},{135,11,1409},{136,11,722},{4,10,37},{5,10,334},{135,10,1253},{132,10,5= 08},{12 -,0,107},{146,0,31},{8,11,420},{139,11,193},{135,0,814},{135,11,409},{140,= 0,991}, -{4,0,57},{7,0,1195},{7,0,1438},{7,0,1548},{7,0,1835},{7,0,1904},{9,0,757}= ,{10,0, -604},{139,0,519},{132,0,540},{138,11,308},{132,10,533},{136,0,608},{144,1= 1,65},{ -4,0,1014},{134,0,2029},{4,0,209},{7,0,902},{5,11,1002},{136,11,745},{134,= 0,2030} -,{6,0,303},{7,0,335},{7,0,1437},{7,0,1668},{8,0,553},{8,0,652},{8,0,656},= {9,0, -558},{11,0,743},{149,0,18},{5,11,575},{6,11,354},{135,11,701},{4,11,239},= {6,11, -477},{7,11,1607},{11,11,68},{139,11,617},{132,0,559},{8,0,527},{18,0,60},= {147,0, -24},{133,10,920},{138,0,511},{133,0,1017},{133,0,675},{138,10,391},{11,0,= 156},{ -135,10,1952},{138,11,369},{132,11,367},{133,0,709},{6,0,698},{134,0,887},= {142,10 -,126},{134,0,1745},{132,10,483},{13,11,299},{142,11,75},{133,0,714},{7,0,= 8},{136 -,0,206},{138,10,480},{4,11,694},{9,10,495},{146,10,104},{7,11,1248},{11,1= 1,621}, -{139,11,702},{140,11,687},{132,0,776},{139,10,1009},{135,0,1272},{134,0,1= 059},{8 -,10,653},{13,10,93},{147,10,14},{135,11,213},{136,0,406},{133,10,172},{13= 2,0,947 -},{8,0,175},{10,0,168},{138,0,573},{132,0,870},{6,0,1567},{151,11,28},{13= 4,11, -472},{5,10,260},{136,11,132},{4,11,751},{11,11,390},{140,11,32},{4,11,409= },{133, -11,78},{12,0,554},{6,11,473},{145,11,105},{133,0,784},{8,0,908},{136,11,3= 06},{ -139,0,882},{6,0,358},{7,0,1393},{8,0,396},{10,0,263},{14,0,154},{16,0,48}= ,{17,0, -8},{7,11,1759},{8,11,396},{10,11,263},{14,11,154},{16,11,48},{145,11,8},{= 13,11, -163},{13,11,180},{18,11,78},{148,11,35},{14,0,32},{18,0,85},{20,0,2},{152= ,0,16}, -{7,0,228},{10,0,770},{8,10,167},{8,10,375},{9,10,82},{9,10,561},{138,10,6= 20},{ -132,0,845},{9,0,14},{9,0,441},{10,0,306},{139,0,9},{11,0,966},{12,0,287},= {13,0, -342},{13,0,402},{15,0,110},{15,0,163},{8,10,194},{136,10,756},{134,0,1578= },{4,0, -967},{6,0,1820},{6,0,1847},{140,0,716},{136,0,594},{7,0,1428},{7,0,1640},= {7,0, -1867},{9,0,169},{9,0,182},{9,0,367},{9,0,478},{9,0,506},{9,0,551},{9,0,55= 7},{9,0 -,648},{9,0,697},{9,0,705},{9,0,725},{9,0,787},{9,0,794},{10,0,198},{10,0,= 214},{ -10,0,267},{10,0,275},{10,0,456},{10,0,551},{10,0,561},{10,0,613},{10,0,62= 7},{10, -0,668},{10,0,675},{10,0,691},{10,0,695},{10,0,707},{10,0,715},{11,0,183},= {11,0, -201},{11,0,244},{11,0,262},{11,0,352},{11,0,439},{11,0,493},{11,0,572},{1= 1,0,591 -},{11,0,608},{11,0,611},{11,0,646},{11,0,674},{11,0,711},{11,0,751},{11,0= ,761},{ -11,0,776},{11,0,785},{11,0,850},{11,0,853},{11,0,862},{11,0,865},{11,0,86= 8},{11, -0,875},{11,0,898},{11,0,902},{11,0,903},{11,0,910},{11,0,932},{11,0,942},= {11,0, -957},{11,0,967},{11,0,972},{12,0,148},{12,0,195},{12,0,220},{12,0,237},{1= 2,0,318 -},{12,0,339},{12,0,393},{12,0,445},{12,0,450},{12,0,474},{12,0,505},{12,0= ,509},{ -12,0,533},{12,0,591},{12,0,594},{12,0,597},{12,0,621},{12,0,633},{12,0,64= 2},{13, -0,59},{13,0,60},{13,0,145},{13,0,239},{13,0,250},{13,0,329},{13,0,344},{1= 3,0,365 -},{13,0,372},{13,0,387},{13,0,403},{13,0,414},{13,0,456},{13,0,470},{13,0= ,478},{ -13,0,483},{13,0,489},{14,0,55},{14,0,57},{14,0,81},{14,0,90},{14,0,148},{= 14,0, -239},{14,0,266},{14,0,321},{14,0,326},{14,0,327},{14,0,330},{14,0,347},{1= 4,0,355 -},{14,0,401},{14,0,404},{14,0,411},{14,0,414},{14,0,416},{14,0,420},{15,0= ,61},{ -15,0,74},{15,0,87},{15,0,88},{15,0,94},{15,0,96},{15,0,116},{15,0,149},{1= 5,0,154 -},{16,0,50},{16,0,63},{16,0,73},{17,0,2},{17,0,66},{17,0,92},{17,0,103},{= 17,0, -112},{17,0,120},{18,0,50},{18,0,54},{18,0,82},{18,0,86},{18,0,90},{18,0,1= 11},{18 -,0,115},{18,0,156},{19,0,40},{19,0,79},{20,0,78},{21,0,22},{135,11,883},{= 5,0,161 -},{135,0,839},{4,0,782},{13,11,293},{142,11,56},{133,11,617},{139,11,50},= {135,10 -,22},{145,0,64},{5,10,639},{7,10,1249},{139,10,896},{138,0,998},{135,11,2= 042},{4 -,11,546},{142,11,233},{6,0,1043},{134,0,1574},{134,0,1496},{4,10,102},{7,= 10,815} -,{7,10,1699},{139,10,964},{12,0,781},{142,0,461},{4,11,313},{133,11,577},= {6,0, -639},{6,0,1114},{137,0,817},{8,11,184},{141,11,433},{7,0,1814},{135,11,93= 5},{10, -0,997},{140,0,958},{4,0,812},{137,11,625},{132,10,899},{136,10,795},{5,11= ,886},{ -6,11,46},{6,11,1790},{7,11,14},{7,11,732},{7,11,1654},{8,11,95},{8,11,327= },{8,11 -,616},{10,11,598},{10,11,769},{11,11,134},{11,11,747},{12,11,378},{142,11= ,97},{ -136,0,139},{6,10,52},{9,10,104},{9,10,559},{12,10,308},{147,10,87},{133,1= 1,1021} -,{132,10,604},{132,10,301},{136,10,779},{7,0,643},{136,0,236},{132,11,153= },{134, -0,1172},{147,10,32},{133,11,798},{6,0,1338},{132,11,587},{6,11,598},{7,11= ,42},{8 -,11,695},{10,11,212},{11,11,158},{14,11,196},{145,11,85},{135,10,508},{5,= 11,957} -,{5,11,1008},{135,11,249},{4,11,129},{135,11,465},{5,0,54},{7,11,470},{7,= 11,1057 -},{7,11,1201},{9,11,755},{11,11,906},{140,11,527},{7,11,908},{146,11,7},{= 5,11, -148},{136,11,450},{144,11,1},{4,0,256},{135,0,1488},{9,0,351},{6,10,310},= {7,10, -1849},{8,10,72},{8,10,272},{8,10,431},{9,10,12},{10,10,563},{10,10,630},{= 10,10, -796},{10,10,810},{11,10,367},{11,10,599},{11,10,686},{140,10,672},{6,0,18= 85},{6, -0,1898},{6,0,1899},{140,0,955},{4,0,714},{133,0,469},{6,0,1270},{134,0,14= 56},{ -132,0,744},{6,0,313},{7,10,537},{8,10,64},{9,10,127},{10,10,496},{12,10,5= 10},{ -141,10,384},{4,11,217},{4,10,244},{5,11,710},{7,10,233},{7,11,1926},{9,11= ,428},{ -9,11,708},{10,11,254},{10,11,296},{10,11,720},{11,11,109},{11,11,255},{12= ,11,165 -},{12,11,315},{13,11,107},{13,11,203},{14,11,54},{14,11,99},{14,11,114},{= 14,11, -388},{16,11,85},{17,11,9},{17,11,33},{20,11,25},{20,11,28},{20,11,29},{21= ,11,9}, -{21,11,10},{21,11,34},{150,11,17},{138,0,402},{7,0,969},{146,0,55},{8,0,5= 0},{137 -,0,624},{134,0,1355},{132,0,572},{134,10,1650},{10,10,702},{139,10,245},{= 10,0, -847},{142,0,445},{6,0,43},{7,0,38},{8,0,248},{138,0,513},{133,0,369},{137= ,10,338 -},{133,0,766},{133,0,363},{133,10,896},{8,11,392},{11,11,54},{13,11,173},= {13,11, -294},{148,11,7},{134,0,678},{7,11,1230},{136,11,531},{6,0,258},{140,0,409= },{5,0, -249},{148,0,82},{7,10,1117},{136,10,539},{5,0,393},{6,0,378},{7,0,1981},{= 9,0,32} -,{9,0,591},{10,0,685},{10,0,741},{142,0,382},{133,0,788},{134,0,1281},{13= 4,0, -1295},{7,0,1968},{141,0,509},{4,0,61},{5,0,58},{5,0,171},{5,0,683},{6,0,2= 91},{6, -0,566},{7,0,1650},{11,0,523},{12,0,273},{12,0,303},{15,0,39},{143,0,111},= {6,0, -706},{134,0,1283},{134,0,589},{135,11,1433},{133,11,435},{7,0,1059},{13,0= ,54},{5 -,10,4},{5,10,810},{6,10,13},{6,10,538},{6,10,1690},{6,10,1726},{7,10,1819= },{8,10 -,148},{8,10,696},{8,10,791},{12,10,125},{143,10,9},{135,10,1268},{5,11,85= },{6,11 -,419},{7,11,134},{7,11,305},{7,11,361},{7,11,1337},{8,11,71},{140,11,519}= ,{137,0 -,824},{140,11,688},{5,11,691},{7,11,345},{7,10,1385},{9,11,94},{11,10,582= },{11, -10,650},{11,10,901},{11,10,949},{12,11,169},{12,10,232},{12,10,236},{13,1= 0,413}, -{13,10,501},{146,10,116},{4,0,917},{133,0,1005},{7,0,1598},{5,11,183},{6,= 11,582} -,{9,11,344},{10,11,679},{140,11,435},{4,10,925},{5,10,803},{8,10,698},{13= 8,10, -828},{132,0,919},{135,11,511},{139,10,992},{4,0,255},{5,0,302},{6,0,132},= {7,0, -128},{7,0,283},{7,0,1299},{10,0,52},{10,0,514},{11,0,925},{13,0,92},{142,= 0,309}, -{134,0,1369},{135,10,1847},{134,0,328},{7,11,1993},{136,11,684},{133,10,3= 83},{ -137,0,173},{134,11,583},{134,0,1411},{19,0,65},{5,11,704},{8,11,357},{10,= 11,745} -,{14,11,426},{17,11,94},{147,11,57},{9,10,660},{138,10,347},{4,11,179},{5= ,11,198 -},{133,11,697},{7,11,347},{7,11,971},{8,11,181},{138,11,711},{141,0,442},= {11,0, -842},{11,0,924},{13,0,317},{13,0,370},{13,0,469},{13,0,471},{14,0,397},{1= 8,0,69} -,{18,0,145},{7,10,572},{9,10,592},{11,10,680},{12,10,356},{140,10,550},{1= 4,11,19 -},{14,11,28},{144,11,29},{136,0,534},{4,11,243},{5,11,203},{7,11,19},{7,1= 1,71},{ -7,11,113},{10,11,405},{11,11,357},{142,11,240},{6,0,210},{10,0,845},{138,= 0,862}, -{7,11,1351},{9,11,581},{10,11,639},{11,11,453},{140,11,584},{7,11,1450},{= 139,11, -99},{10,0,892},{12,0,719},{144,0,105},{4,0,284},{6,0,223},{134,11,492},{5= ,11,134 -},{6,11,408},{6,11,495},{135,11,1593},{136,0,529},{137,0,807},{4,0,218},{= 7,0,526 -},{143,0,137},{6,0,1444},{142,11,4},{132,11,665},{4,0,270},{5,0,192},{6,0= ,332},{ -7,0,1322},{4,11,248},{7,11,137},{137,11,349},{140,0,661},{7,0,1517},{11,0= ,597},{ -14,0,76},{14,0,335},{20,0,33},{7,10,748},{139,10,700},{5,11,371},{135,11,= 563},{ -146,11,57},{133,10,127},{133,0,418},{4,11,374},{7,11,547},{7,11,1700},{7,= 11,1833 -},{139,11,858},{6,10,198},{140,10,83},{7,11,1812},{13,11,259},{13,11,356}= ,{14,11 -,242},{147,11,114},{7,0,379},{8,0,481},{9,0,377},{5,10,276},{6,10,55},{13= 5,10, -1369},{138,11,286},{5,0,1003},{6,0,149},{6,10,1752},{136,10,726},{8,0,262= },{9,0, -627},{10,0,18},{11,0,214},{11,0,404},{11,0,457},{11,0,780},{11,0,913},{13= ,0,401} -,{14,0,200},{6,11,1647},{7,11,1552},{7,11,2010},{9,11,494},{137,11,509},{= 135,0, -742},{136,0,304},{132,0,142},{133,10,764},{6,10,309},{7,10,331},{138,10,5= 50},{ -135,10,1062},{6,11,123},{7,11,214},{7,10,986},{9,11,728},{10,11,157},{11,= 11,346} -,{11,11,662},{143,11,106},{135,10,1573},{7,0,925},{137,0,799},{4,0,471},{= 5,0,51} -,{6,0,602},{8,0,484},{138,0,195},{136,0,688},{132,0,697},{6,0,1169},{6,0,= 1241},{ -6,10,194},{7,10,133},{10,10,493},{10,10,570},{139,10,664},{140,0,751},{7,= 0,929}, -{10,0,452},{11,0,878},{16,0,33},{5,10,24},{5,10,569},{6,10,3},{6,10,119},= {6,10, -143},{6,10,440},{7,10,599},{7,10,1686},{7,10,1854},{8,10,424},{9,10,43},{= 9,10, -584},{9,10,760},{10,10,328},{11,10,159},{11,10,253},{12,10,487},{140,10,5= 31},{4, -11,707},{13,11,106},{18,11,49},{147,11,41},{5,0,221},{5,11,588},{134,11,3= 93},{ -134,0,1437},{6,11,211},{7,11,1690},{11,11,486},{140,11,369},{5,10,14},{5,= 10,892} -,{6,10,283},{7,10,234},{136,10,537},{4,0,988},{136,0,955},{135,0,1251},{4= ,10,126 -},{8,10,635},{147,10,34},{4,10,316},{135,10,1561},{137,10,861},{4,10,64},= {5,10, -352},{5,10,720},{6,10,368},{139,10,359},{134,0,192},{4,0,132},{5,0,69},{1= 35,0, -1242},{7,10,1577},{10,10,304},{10,10,549},{12,10,365},{13,10,220},{13,10,= 240},{ -142,10,33},{4,0,111},{7,0,865},{134,11,219},{5,11,582},{6,11,1646},{7,11,= 99},{7, -11,1962},{7,11,1986},{8,11,515},{8,11,773},{9,11,23},{9,11,491},{12,11,62= 0},{14, -11,52},{145,11,50},{132,0,767},{7,11,568},{148,11,21},{6,0,42},{7,0,1416}= ,{7,0, -2005},{8,0,131},{8,0,466},{9,0,672},{13,0,252},{20,0,103},{133,11,851},{1= 35,0, -1050},{6,10,175},{137,10,289},{5,10,432},{133,10,913},{6,0,44},{136,0,368= },{135, -11,784},{132,0,570},{133,0,120},{139,10,595},{140,0,29},{6,0,227},{135,0,= 1589},{ -4,11,98},{7,11,1365},{9,11,422},{9,11,670},{10,11,775},{11,11,210},{13,11= ,26},{ -13,11,457},{141,11,476},{140,10,80},{5,10,931},{134,10,1698},{133,0,522},= {134,0, -1120},{135,0,1529},{12,0,739},{14,0,448},{142,0,467},{11,10,526},{11,10,9= 39},{ -141,10,290},{5,10,774},{6,10,1637},{6,10,1686},{134,10,1751},{6,0,1667},{= 135,0, -2036},{7,10,1167},{11,10,934},{13,10,391},{145,10,76},{137,11,147},{6,10,= 260},{7 -,10,1484},{11,11,821},{12,11,110},{12,11,153},{18,11,41},{150,11,19},{6,0= ,511},{ -12,0,132},{134,10,573},{5,0,568},{6,0,138},{135,0,1293},{132,0,1020},{8,0= ,258},{ -9,0,208},{137,0,359},{4,0,565},{8,0,23},{136,0,827},{134,0,344},{4,0,922}= ,{5,0, -1023},{13,11,477},{14,11,120},{148,11,61},{134,0,240},{5,11,209},{6,11,30= },{11, -11,56},{139,11,305},{6,0,171},{7,0,1002},{7,0,1324},{9,0,415},{14,0,230},= {18,0, -68},{4,10,292},{4,10,736},{5,10,871},{6,10,1689},{7,10,1944},{137,10,580}= ,{9,11, -635},{139,11,559},{4,11,150},{5,11,303},{134,11,327},{6,10,63},{135,10,92= 0},{133 -,10,793},{8,11,192},{10,11,78},{10,11,555},{11,11,308},{13,11,359},{147,1= 1,95},{ -135,11,786},{135,11,1712},{136,0,402},{6,0,754},{6,11,1638},{7,11,79},{7,= 11,496} -,{9,11,138},{10,11,336},{11,11,12},{12,11,412},{12,11,440},{142,11,305},{= 4,0,716 -},{141,0,31},{133,0,982},{8,0,691},{8,0,731},{5,10,67},{6,10,62},{6,10,37= 4},{135 -,10,1391},{9,10,790},{140,10,47},{139,11,556},{151,11,1},{7,11,204},{7,11= ,415},{ -8,11,42},{10,11,85},{11,11,33},{11,11,564},{12,11,571},{149,11,1},{8,0,88= 8},{7, -11,610},{135,11,1501},{4,10,391},{135,10,1169},{5,0,847},{9,0,840},{138,0= ,803},{ -137,0,823},{134,0,785},{8,0,152},{9,0,53},{9,0,268},{9,0,901},{10,0,518},= {10,0, -829},{11,0,188},{13,0,74},{14,0,46},{15,0,17},{15,0,33},{17,0,40},{18,0,3= 6},{19, -0,20},{22,0,1},{152,0,2},{4,11,3},{5,11,247},{5,11,644},{7,11,744},{7,11,= 1207},{ -7,11,1225},{7,11,1909},{146,11,147},{136,0,532},{135,0,681},{132,10,271},= {140,0, -314},{140,0,677},{4,0,684},{136,0,384},{5,11,285},{9,11,67},{13,11,473},{= 143,11, -82},{4,10,253},{5,10,544},{7,10,300},{137,10,340},{7,0,110},{7,0,447},{8,= 0,290}, -{8,0,591},{9,0,382},{9,0,649},{11,0,71},{11,0,155},{11,0,313},{12,0,5},{1= 3,0,325 -},{142,0,287},{134,0,1818},{136,0,1007},{138,0,321},{7,0,360},{7,0,425},{= 9,0,66} -,{9,0,278},{138,0,644},{133,10,818},{5,0,385},{5,10,541},{6,10,94},{6,10,= 499},{7 -,10,230},{139,10,321},{4,10,920},{5,10,25},{5,10,790},{6,10,457},{7,10,85= 3},{136 -,10,788},{4,0,900},{133,0,861},{5,0,254},{7,0,985},{136,0,73},{7,0,1959},= {136,0, -683},{134,10,1765},{133,10,822},{132,10,634},{4,11,29},{6,11,532},{7,11,1= 628},{7 -,11,1648},{9,11,303},{9,11,350},{10,11,433},{11,11,97},{11,11,557},{11,11= ,745},{ -12,11,289},{12,11,335},{12,11,348},{12,11,606},{13,11,116},{13,11,233},{1= 3,11, -466},{14,11,181},{14,11,209},{14,11,232},{14,11,236},{14,11,300},{16,11,4= 1},{148 -,11,97},{19,0,86},{6,10,36},{7,10,658},{136,10,454},{135,11,1692},{132,0,= 725},{5 -,11,501},{7,11,1704},{9,11,553},{11,11,520},{12,11,557},{141,11,249},{134= ,0,196} -,{133,0,831},{136,0,723},{7,0,1897},{13,0,80},{13,0,437},{145,0,74},{4,0,= 992},{6 -,0,627},{136,0,994},{135,11,1294},{132,10,104},{5,0,848},{6,0,66},{136,0,= 764},{4 -,0,36},{7,0,1387},{10,0,205},{139,0,755},{6,0,1046},{134,0,1485},{134,0,9= 50},{ -132,0,887},{14,0,450},{148,0,111},{7,0,620},{7,0,831},{9,10,542},{9,10,56= 6},{138 -,10,728},{6,0,165},{138,0,388},{139,10,263},{4,0,719},{135,0,155},{138,10= ,468},{ -6,11,453},{144,11,36},{134,11,129},{5,0,533},{7,0,755},{138,0,780},{134,0= ,1465}, -{4,0,353},{6,0,146},{6,0,1789},{7,0,427},{7,0,990},{7,0,1348},{9,0,665},{= 9,0,898 -},{11,0,893},{142,0,212},{7,10,87},{142,10,288},{4,0,45},{135,0,1257},{12= ,0,7},{ -7,10,988},{7,10,1939},{9,10,64},{9,10,502},{12,10,34},{13,10,12},{13,10,2= 34},{ -147,10,77},{4,0,607},{5,11,60},{6,11,504},{7,11,614},{7,11,1155},{140,11,= 0},{135 -,10,141},{8,11,198},{11,11,29},{140,11,534},{140,0,65},{136,0,816},{132,1= 0,619}, -{139,0,88},{5,10,246},{8,10,189},{9,10,355},{9,10,512},{10,10,124},{10,10= ,453},{ -11,10,143},{11,10,416},{11,10,859},{141,10,341},{4,11,379},{135,11,1397},= {4,0, -600},{137,0,621},{133,0,367},{134,0,561},{6,0,559},{134,0,1691},{6,0,585}= ,{134, -11,585},{135,11,1228},{4,11,118},{5,10,678},{6,11,274},{6,11,361},{7,11,7= 5},{141 -,11,441},{135,11,1818},{137,11,841},{5,0,573},{6,0,287},{7,10,862},{7,10,= 1886},{ -138,10,179},{132,10,517},{140,11,693},{5,11,314},{6,11,221},{7,11,419},{1= 0,11, -650},{11,11,396},{12,11,156},{13,11,369},{14,11,333},{145,11,47},{140,10,= 540},{ -136,10,667},{11,10,403},{146,10,83},{6,0,672},{133,10,761},{9,0,157},{10,= 10,131} -,{140,10,72},{7,0,714},{134,11,460},{134,0,456},{133,0,925},{5,11,682},{1= 35,11, -1887},{136,11,510},{136,11,475},{133,11,1016},{9,0,19},{7,11,602},{8,11,1= 79},{10 -,11,781},{140,11,126},{6,11,329},{138,11,111},{6,0,822},{134,0,1473},{144= ,11,86} -,{11,0,113},{139,11,113},{5,11,821},{134,11,1687},{133,10,449},{7,0,463},= {17,0, -69},{136,10,103},{7,10,2028},{138,10,641},{6,0,193},{7,0,240},{7,0,1682},= {10,0, -51},{10,0,640},{11,0,410},{13,0,82},{14,0,247},{14,0,331},{142,0,377},{6,= 0,471}, -{11,0,411},{142,0,2},{5,11,71},{7,11,1407},{9,11,388},{9,11,704},{10,11,2= 61},{10 -,11,619},{11,11,547},{11,11,619},{143,11,157},{136,0,633},{135,0,1148},{6= ,0,554} -,{7,0,1392},{12,0,129},{7,10,1274},{7,10,1386},{7,11,2008},{9,11,337},{10= ,11,517 -},{146,10,87},{7,0,803},{8,0,542},{6,10,187},{7,10,1203},{8,10,380},{14,1= 0,117}, -{149,10,28},{6,10,297},{7,10,793},{139,10,938},{8,0,438},{11,0,363},{7,10= ,464},{ -11,10,105},{12,10,231},{14,10,386},{15,10,102},{148,10,75},{5,11,16},{6,1= 1,86},{ -6,11,603},{7,11,292},{7,11,561},{8,11,257},{8,11,382},{9,11,721},{9,11,77= 8},{11, -11,581},{140,11,466},{6,0,717},{4,11,486},{133,11,491},{132,0,875},{132,1= 1,72},{ -6,11,265},{135,11,847},{4,0,237},{135,0,514},{6,0,392},{7,0,65},{135,0,20= 19},{ -140,11,261},{135,11,922},{137,11,404},{12,0,563},{14,0,101},{18,0,129},{7= ,10, -1010},{11,10,733},{11,10,759},{13,10,34},{146,10,45},{7,10,1656},{9,10,36= 9},{10, -10,338},{10,10,490},{11,10,154},{11,10,545},{11,10,775},{13,10,77},{141,1= 0,274}, -{4,0,444},{10,0,146},{140,0,9},{139,11,163},{7,0,1260},{135,0,1790},{9,0,= 222},{ -10,0,43},{139,0,900},{137,11,234},{138,0,971},{137,0,761},{134,0,699},{13= 6,11, -434},{6,0,1116},{7,0,1366},{5,10,20},{6,11,197},{6,10,298},{7,10,659},{8,= 11,205} -,{137,10,219},{132,11,490},{11,11,820},{150,11,51},{7,10,1440},{11,10,854= },{11, -10,872},{11,10,921},{12,10,551},{13,10,472},{142,10,367},{140,11,13},{132= ,0,829} -,{12,0,242},{132,10,439},{136,10,669},{6,0,593},{6,11,452},{7,11,312},{13= 8,11, -219},{4,11,333},{9,11,176},{12,11,353},{141,11,187},{7,0,36},{8,0,201},{1= 36,0, -605},{140,0,224},{132,10,233},{134,0,1430},{134,0,1806},{4,0,523},{133,0,= 638},{6 -,0,1889},{9,0,958},{9,0,971},{9,0,976},{12,0,796},{12,0,799},{12,0,808},{= 12,0, -835},{12,0,836},{12,0,914},{12,0,946},{15,0,216},{15,0,232},{18,0,183},{1= 8,0,187 -},{18,0,194},{18,0,212},{18,0,232},{149,0,49},{132,10,482},{6,0,827},{134= ,0,1434 -},{135,10,346},{134,0,2043},{6,0,242},{7,0,227},{7,0,1581},{8,0,104},{9,0= ,113},{ -9,0,220},{9,0,427},{10,0,136},{10,0,239},{11,0,579},{11,0,1023},{13,0,4},= {13,0, -204},{13,0,316},{148,0,86},{134,11,1685},{7,0,148},{8,0,284},{141,0,63},{= 142,0, -10},{135,11,584},{134,0,1249},{7,0,861},{135,10,334},{5,10,795},{6,10,174= 1},{137 -,11,70},{132,0,807},{7,11,135},{8,11,7},{8,11,62},{9,11,243},{10,11,658},= {10,11, -697},{11,11,456},{139,11,756},{9,11,395},{138,11,79},{137,11,108},{147,0,= 94},{ -136,0,494},{135,11,631},{135,10,622},{7,0,1510},{135,10,1750},{4,10,203},= {135,10 -,1936},{7,11,406},{7,11,459},{8,11,606},{139,11,726},{7,0,1306},{8,0,505}= ,{9,0, -482},{10,0,126},{11,0,225},{12,0,347},{12,0,449},{13,0,19},{14,0,218},{14= 2,0,435 -},{5,0,268},{10,0,764},{12,0,120},{13,0,39},{145,0,127},{142,11,68},{11,1= 0,678}, -{140,10,307},{12,11,268},{12,11,640},{142,11,119},{135,10,2044},{133,11,6= 12},{4, -11,372},{7,11,482},{8,11,158},{9,11,602},{9,11,615},{10,11,245},{10,11,67= 8},{10, -11,744},{11,11,248},{139,11,806},{7,10,311},{9,10,308},{140,10,255},{4,0,= 384},{ -135,0,1022},{5,11,854},{135,11,1991},{135,10,1266},{4,10,400},{5,10,267},= {135,10 -,232},{135,0,1703},{9,0,159},{11,0,661},{140,0,603},{4,0,964},{14,0,438},= {14,0, -444},{14,0,456},{22,0,60},{22,0,63},{9,11,106},{9,11,163},{9,11,296},{10,= 11,167} -,{10,11,172},{10,11,777},{139,11,16},{136,0,583},{132,0,515},{8,0,632},{8= ,0,697} -,{137,0,854},{5,11,195},{135,11,1685},{6,0,1123},{134,0,1365},{134,11,328= },{7,11 -,1997},{8,11,730},{139,11,1006},{4,0,136},{133,0,551},{134,0,1782},{7,0,1= 287},{9 -,0,44},{10,0,552},{10,0,642},{11,0,839},{12,0,274},{12,0,275},{12,0,372},= {13,0, -91},{142,0,125},{5,11,751},{11,11,797},{140,11,203},{133,0,732},{7,0,679}= ,{8,0, -313},{4,10,100},{135,11,821},{10,0,361},{142,0,316},{134,0,595},{6,0,147}= ,{7,0, -886},{9,0,753},{138,0,268},{5,10,362},{5,10,443},{6,10,318},{7,10,1019},{= 139,10, -623},{5,10,463},{136,10,296},{4,10,454},{5,11,950},{5,11,994},{134,11,351= },{138, -0,137},{5,10,48},{5,10,404},{6,10,557},{7,10,458},{8,10,597},{10,10,455},= {10,10, -606},{11,10,49},{11,10,548},{12,10,476},{13,10,18},{141,10,450},{133,0,41= 4},{135 -,0,1762},{5,11,421},{135,11,47},{5,10,442},{135,10,1984},{134,0,599},{134= ,0,1749 -},{134,0,1627},{4,0,488},{132,11,350},{137,11,751},{132,0,83},{140,0,676}= ,{133, -11,967},{7,0,1639},{5,10,55},{140,10,161},{4,11,473},{7,11,623},{8,11,808= },{9,11 -,871},{9,11,893},{11,11,38},{11,11,431},{12,11,112},{12,11,217},{12,11,24= 3},{12, -11,562},{12,11,683},{13,11,141},{13,11,197},{13,11,227},{13,11,406},{13,1= 1,487}, -{14,11,156},{14,11,203},{14,11,224},{14,11,256},{18,11,58},{150,11,0},{13= 3,10, -450},{7,11,736},{139,11,264},{134,0,278},{4,11,222},{7,11,286},{136,11,62= 9},{135 -,10,869},{140,0,97},{144,0,14},{134,0,1085},{4,10,213},{7,10,223},{136,10= ,80},{7 -,0,388},{7,0,644},{139,0,781},{132,0,849},{7,0,229},{8,0,59},{9,0,190},{1= 0,0,378 -},{140,0,191},{7,10,381},{7,10,806},{7,10,820},{8,10,354},{8,10,437},{8,1= 0,787}, -{9,10,657},{10,10,58},{10,10,339},{10,10,749},{11,10,914},{12,10,162},{13= ,10,75} -,{14,10,106},{14,10,198},{14,10,320},{14,10,413},{146,10,43},{141,11,306}= ,{136, -10,747},{134,0,1115},{16,0,94},{16,0,108},{136,11,146},{6,0,700},{6,0,817= },{134, -0,1002},{133,10,692},{4,11,465},{135,11,1663},{134,10,191},{6,0,1414},{13= 5,11, -913},{132,0,660},{7,0,1035},{138,0,737},{6,10,162},{7,10,1960},{136,10,83= 1},{132 -,10,706},{7,0,690},{9,0,217},{9,0,587},{140,0,521},{138,10,426},{135,10,1= 235},{6 -,11,82},{7,11,138},{7,11,517},{9,11,673},{139,11,238},{138,0,272},{5,11,4= 95},{7, -11,834},{9,11,733},{139,11,378},{134,0,1744},{132,0,1011},{7,11,828},{142= ,11,116 -},{4,0,733},{9,0,194},{10,0,92},{11,0,198},{12,0,84},{13,0,128},{133,11,5= 59},{10 -,0,57},{10,0,277},{6,11,21},{6,11,1737},{7,11,1444},{136,11,224},{4,10,20= 4},{137 -,10,902},{136,10,833},{11,0,348},{12,0,99},{18,0,1},{18,0,11},{19,0,4},{7= ,10,366 -},{9,10,287},{12,10,199},{12,10,556},{140,10,577},{6,0,1981},{136,0,936},= {21,0, -33},{150,0,40},{5,11,519},{138,11,204},{5,10,356},{135,10,224},{134,0,775= },{135, -0,306},{7,10,630},{9,10,567},{11,10,150},{11,10,444},{141,10,119},{5,0,97= 9},{134 -,10,539},{133,0,611},{4,11,402},{135,11,1679},{5,0,178},{7,11,2},{8,11,32= 3},{136 -,11,479},{5,11,59},{135,11,672},{4,0,1010},{6,0,1969},{138,11,237},{133,1= 1,412}, -{146,11,34},{7,11,1740},{146,11,48},{134,0,664},{139,10,814},{4,11,85},{1= 35,11, -549},{133,11,94},{133,11,457},{132,0,390},{134,0,1510},{4,10,235},{135,10= ,255},{ -4,10,194},{5,10,584},{6,11,11},{6,10,384},{7,11,187},{7,10,583},{10,10,76= 1},{11, -10,760},{139,10,851},{4,11,522},{139,11,802},{135,0,493},{10,11,776},{13,= 11,345} -,{142,11,425},{146,0,37},{4,11,52},{135,11,661},{134,0,724},{134,0,829},{= 133,11, -520},{133,10,562},{4,11,281},{5,11,38},{7,11,194},{7,11,668},{7,11,1893},= {137,11 -,397},{5,10,191},{137,10,271},{7,0,1537},{14,0,96},{143,0,73},{5,0,473},{= 11,0, -168},{4,10,470},{6,10,153},{7,10,1503},{7,10,1923},{10,10,701},{11,10,132= },{11, -10,227},{11,10,320},{11,10,436},{11,10,525},{11,10,855},{12,10,41},{12,10= ,286},{ -13,10,103},{13,10,284},{14,10,255},{14,10,262},{15,10,117},{143,10,127},{= 133,0, -105},{5,0,438},{9,0,694},{12,0,627},{141,0,210},{133,10,327},{6,10,552},{= 7,10, -1754},{137,10,604},{134,0,1256},{152,0,11},{5,11,448},{11,11,98},{139,11,= 524},{7 -,0,1626},{5,10,80},{6,10,405},{7,10,403},{7,10,1502},{8,10,456},{9,10,487= },{9,10 -,853},{9,10,889},{10,10,309},{11,10,721},{11,10,994},{12,10,430},{13,10,1= 65},{14 -,11,16},{146,11,44},{132,0,779},{8,0,25},{138,0,826},{4,10,453},{5,10,887= },{6,10 -,535},{8,10,6},{8,10,543},{136,10,826},{137,11,461},{140,11,632},{132,0,3= 08},{ -135,0,741},{132,0,671},{7,0,150},{8,0,649},{136,0,1020},{9,0,99},{6,11,33= 6},{8, -11,552},{9,11,285},{10,11,99},{139,11,568},{134,0,521},{5,0,339},{14,0,3}= ,{15,0, -41},{15,0,166},{147,0,66},{6,11,423},{7,11,665},{7,11,1210},{9,11,218},{1= 41,11, -222},{6,0,543},{5,10,101},{5,11,256},{6,10,88},{7,10,1677},{9,10,100},{10= ,10,677 -},{14,10,169},{14,10,302},{14,10,313},{15,10,48},{143,10,84},{4,10,310},{= 7,10, -708},{7,10,996},{9,10,795},{10,10,390},{10,10,733},{11,10,451},{12,10,249= },{14, -10,115},{14,10,286},{143,10,100},{133,10,587},{13,11,417},{14,11,129},{14= 3,11,15 -},{134,0,1358},{136,11,554},{132,10,498},{7,10,217},{8,10,140},{138,10,61= 0},{135 -,11,989},{135,11,634},{6,0,155},{140,0,234},{135,11,462},{132,11,618},{13= 4,0, -1628},{132,0,766},{4,11,339},{5,10,905},{135,11,259},{135,0,829},{4,11,75= 9},{141 -,11,169},{7,0,1445},{4,10,456},{7,10,358},{7,10,1637},{8,10,643},{139,10,= 483},{5 -,0,486},{135,0,1349},{5,11,688},{135,11,712},{7,0,1635},{8,0,17},{10,0,21= 7},{10, -0,295},{12,0,2},{140,11,2},{138,0,558},{150,10,56},{4,11,278},{5,11,465},= {135,11 -,1367},{136,11,482},{133,10,535},{6,0,1362},{6,0,1461},{10,11,274},{10,11= ,625},{ -139,11,530},{5,0,599},{5,11,336},{6,11,341},{6,11,478},{6,11,1763},{136,1= 1,386}, -{7,10,1748},{137,11,151},{134,0,1376},{133,10,539},{135,11,73},{135,11,19= 71},{ -139,11,283},{9,0,93},{139,0,474},{6,10,91},{135,10,435},{6,0,447},{5,11,3= 96},{ -134,11,501},{4,10,16},{5,10,316},{5,10,842},{6,10,370},{6,10,1778},{8,10,= 166},{ -11,10,812},{12,10,206},{12,10,351},{14,10,418},{16,10,15},{16,10,34},{18,= 10,3},{ -19,10,3},{19,10,7},{20,10,4},{149,10,21},{7,0,577},{7,0,1432},{9,0,475},{= 9,0,505 -},{9,0,526},{9,0,609},{9,0,689},{9,0,726},{9,0,735},{9,0,738},{10,0,556},= {10,0, -674},{10,0,684},{11,0,89},{11,0,202},{11,0,272},{11,0,380},{11,0,415},{11= ,0,505} -,{11,0,537},{11,0,550},{11,0,562},{11,0,640},{11,0,667},{11,0,688},{11,0,= 847},{ -11,0,927},{11,0,930},{11,0,940},{12,0,144},{12,0,325},{12,0,329},{12,0,38= 9},{12, -0,403},{12,0,451},{12,0,515},{12,0,604},{12,0,616},{12,0,626},{13,0,66},{= 13,0, -131},{13,0,167},{13,0,236},{13,0,368},{13,0,411},{13,0,434},{13,0,453},{1= 3,0,461 -},{13,0,474},{14,0,59},{14,0,60},{14,0,139},{14,0,152},{14,0,276},{14,0,3= 53},{14 -,0,402},{15,0,28},{15,0,81},{15,0,123},{15,0,152},{18,0,136},{148,0,88},{= 4,11, -929},{133,11,799},{136,11,46},{142,0,307},{4,0,609},{7,0,756},{9,0,544},{= 11,0, -413},{144,0,25},{10,0,687},{7,10,619},{10,10,547},{11,10,122},{140,10,601= },{4,0, -930},{133,0,947},{133,0,939},{142,0,21},{4,11,892},{133,11,770},{133,0,96= 2},{5,0 -,651},{8,0,170},{9,0,61},{9,0,63},{10,0,23},{10,0,37},{10,0,834},{11,0,4}= ,{11,0, -187},{11,0,281},{11,0,503},{11,0,677},{12,0,96},{12,0,130},{12,0,244},{14= ,0,5},{ -14,0,40},{14,0,162},{14,0,202},{146,0,133},{4,0,406},{5,0,579},{12,0,492}= ,{150,0 -,15},{135,11,158},{135,0,597},{132,0,981},{132,10,888},{4,10,149},{138,10= ,368},{ -132,0,545},{4,10,154},{7,10,1134},{136,10,105},{135,11,2001},{134,0,1558}= ,{4,10, -31},{6,10,429},{7,10,962},{9,10,458},{139,10,691},{132,10,312},{135,10,16= 42},{6, -0,17},{6,0,1304},{7,0,16},{7,0,1001},{9,0,886},{10,0,489},{10,0,800},{11,= 0,782}, -{12,0,320},{13,0,467},{14,0,145},{14,0,387},{143,0,119},{135,0,1982},{17,= 0,17},{ -7,11,1461},{140,11,91},{4,10,236},{132,11,602},{138,0,907},{136,0,110},{7= ,0,272} -,{19,0,53},{5,10,836},{5,10,857},{134,10,1680},{5,0,458},{7,11,1218},{136= ,11,303 -},{7,0,1983},{8,0,0},{8,0,171},{9,0,120},{9,0,732},{10,0,473},{11,0,656},= {11,0, -998},{18,0,0},{18,0,2},{19,0,21},{10,10,68},{139,10,494},{137,11,662},{4,= 11,13}, -{5,11,567},{7,11,1498},{9,11,124},{11,11,521},{140,11,405},{4,10,81},{139= ,10,867 -},{135,11,1006},{7,11,800},{7,11,1783},{138,11,12},{9,0,295},{10,0,443},{= 5,10, -282},{8,10,650},{137,10,907},{132,11,735},{4,11,170},{4,10,775},{135,11,3= 23},{6, -0,1844},{10,0,924},{11,11,844},{12,11,104},{140,11,625},{5,11,304},{7,11,= 1403},{ -140,11,498},{134,0,1232},{4,0,519},{10,0,70},{12,0,26},{14,0,17},{14,0,17= 8},{15, -0,34},{149,0,12},{132,0,993},{4,11,148},{133,11,742},{6,0,31},{7,0,491},{= 7,0,530 -},{8,0,592},{11,0,53},{11,0,779},{12,0,167},{12,0,411},{14,0,14},{14,0,13= 6},{15, -0,72},{16,0,17},{144,0,72},{133,0,907},{134,0,733},{133,11,111},{4,10,71}= ,{5,10, -376},{7,10,119},{138,10,665},{136,0,55},{8,0,430},{136,11,430},{4,0,208},= {5,0, -106},{6,0,531},{8,0,408},{9,0,188},{138,0,572},{12,0,56},{11,10,827},{14,= 10,34}, -{143,10,148},{134,0,1693},{133,11,444},{132,10,479},{140,0,441},{9,0,449}= ,{10,0, -192},{138,0,740},{134,0,928},{4,0,241},{7,10,607},{136,10,99},{8,11,123},= {15,11, -6},{144,11,7},{6,11,285},{8,11,654},{11,11,749},{12,11,190},{12,11,327},{= 13,11, -120},{13,11,121},{13,11,327},{15,11,47},{146,11,40},{4,10,41},{5,10,74},{= 7,10, -1627},{11,10,871},{140,10,619},{7,0,1525},{11,10,329},{11,10,965},{12,10,= 241},{ -14,10,354},{15,10,22},{148,10,63},{132,0,259},{135,11,183},{9,10,209},{13= 7,10, -300},{5,11,937},{135,11,100},{133,10,98},{4,0,173},{5,0,312},{5,0,512},{1= 35,0, -1285},{141,0,185},{7,0,1603},{7,0,1691},{9,0,464},{11,0,195},{12,0,279},{= 12,0, -448},{14,0,11},{147,0,102},{135,0,1113},{133,10,984},{4,0,452},{5,0,583},= {135,0, -720},{4,0,547},{5,0,817},{6,0,433},{7,0,593},{7,0,1378},{8,0,161},{9,0,28= 4},{10, -0,313},{139,0,886},{8,0,722},{4,10,182},{6,10,205},{135,10,220},{150,0,13= },{4,10 -,42},{9,10,205},{9,10,786},{138,10,659},{6,0,289},{7,0,1670},{12,0,57},{1= 51,0,4} -,{132,10,635},{14,0,43},{146,0,21},{139,10,533},{135,0,1694},{8,0,420},{1= 39,0, -193},{135,0,409},{132,10,371},{4,10,272},{135,10,836},{5,10,825},{134,10,= 1640},{ -5,11,251},{5,11,956},{8,11,268},{9,11,214},{146,11,142},{138,0,308},{6,0,= 1863},{ -141,11,37},{137,10,879},{7,10,317},{135,10,569},{132,11,294},{134,0,790},= {5,0, -1002},{136,0,745},{5,11,346},{5,11,711},{136,11,390},{135,0,289},{5,0,504= },{11,0 -,68},{137,10,307},{4,0,239},{6,0,477},{7,0,1607},{139,0,617},{149,0,13},{= 133,0, -609},{133,11,624},{5,11,783},{7,11,1998},{135,11,2047},{133,10,525},{132,= 0,367}, -{132,11,594},{6,0,528},{133,10,493},{4,10,174},{135,10,911},{8,10,417},{1= 37,10, -782},{132,0,694},{7,0,548},{137,0,58},{4,10,32},{5,10,215},{6,10,269},{7,= 10,1782 -},{7,10,1892},{10,10,16},{11,10,822},{11,10,954},{141,10,481},{140,0,687}= ,{7,0, -1749},{136,10,477},{132,11,569},{133,10,308},{135,10,1088},{4,0,661},{138= ,0,1004 -},{5,11,37},{6,11,39},{6,11,451},{7,11,218},{7,11,667},{7,11,1166},{7,11,= 1687},{ -8,11,662},{144,11,2},{9,0,445},{12,0,53},{13,0,492},{5,10,126},{8,10,297}= ,{9,10, -366},{140,10,374},{7,10,1551},{139,10,361},{148,0,74},{134,11,508},{135,0= ,213},{ -132,10,175},{132,10,685},{6,0,760},{6,0,834},{134,0,1248},{7,11,453},{7,1= 1,635}, -{7,11,796},{8,11,331},{9,11,328},{9,11,330},{9,11,865},{10,11,119},{10,11= ,235},{ -11,11,111},{11,11,129},{11,11,240},{12,11,31},{12,11,66},{12,11,222},{12,= 11,269} -,{12,11,599},{12,11,689},{13,11,186},{13,11,364},{142,11,345},{7,0,1672},= {139,0, -189},{133,10,797},{133,10,565},{6,0,1548},{6,11,98},{7,11,585},{135,11,70= 2},{9,0 -,968},{15,0,192},{149,0,56},{4,10,252},{6,11,37},{7,11,299},{7,10,1068},{= 7,11, -1666},{8,11,195},{8,11,316},{9,11,178},{9,11,276},{9,11,339},{9,11,536},{= 10,11, -102},{10,11,362},{10,10,434},{10,11,785},{11,11,55},{11,11,149},{11,10,22= 8},{11, -10,426},{11,11,773},{13,10,231},{13,11,416},{13,11,419},{14,11,38},{14,11= ,41},{ -14,11,210},{18,10,106},{148,10,87},{4,0,751},{11,0,390},{140,0,32},{4,0,4= 09},{ -133,0,78},{11,11,458},{12,11,15},{140,11,432},{7,0,1602},{10,0,257},{10,0= ,698},{ -11,0,544},{11,0,585},{12,0,212},{13,0,307},{5,10,231},{7,10,601},{9,10,27= 7},{9, -10,674},{10,10,178},{10,10,418},{10,10,509},{11,10,531},{12,10,113},{12,1= 0,475}, -{13,10,99},{142,10,428},{6,0,473},{145,0,105},{6,0,1949},{15,0,156},{133,= 11,645} -,{7,10,1591},{144,10,43},{135,0,1779},{135,10,1683},{4,11,290},{135,11,13= 56},{ -134,0,763},{6,11,70},{7,11,1292},{10,11,762},{139,11,288},{142,0,29},{140= ,11,428 -},{7,0,883},{7,11,131},{7,11,422},{8,11,210},{140,11,573},{134,0,488},{4,= 10,399} -,{5,10,119},{5,10,494},{7,10,751},{137,10,556},{133,0,617},{132,11,936},{= 139,0, -50},{7,0,1518},{139,0,694},{137,0,785},{4,0,546},{135,0,2042},{7,11,716},= {13,11, -97},{141,11,251},{132,11,653},{145,0,22},{134,0,1016},{4,0,313},{133,0,57= 7},{136 -,11,657},{8,0,184},{141,0,433},{135,0,935},{6,0,720},{9,0,114},{146,11,80= },{12,0 -,186},{12,0,292},{14,0,100},{18,0,70},{7,10,594},{7,10,851},{7,10,1858},{= 9,10, -411},{9,10,574},{9,10,666},{9,10,737},{10,10,346},{10,10,712},{11,10,246}= ,{11,10 -,432},{11,10,517},{11,10,647},{11,10,679},{11,10,727},{12,10,304},{12,10,= 305},{ -12,10,323},{12,10,483},{12,10,572},{12,10,593},{12,10,602},{13,10,95},{13= ,10,101 -},{13,10,171},{13,10,315},{13,10,378},{13,10,425},{13,10,475},{14,10,63},= {14,10, -380},{14,10,384},{15,10,133},{18,10,112},{148,10,72},{135,10,1093},{135,1= 1,1836} -,{132,10,679},{137,10,203},{11,0,402},{12,0,109},{12,0,431},{13,0,179},{1= 3,0,206 -},{14,0,217},{16,0,3},{148,0,53},{7,11,1368},{8,11,232},{8,11,361},{10,11= ,682},{ -138,11,742},{137,10,714},{5,0,886},{6,0,46},{6,0,1790},{7,0,14},{7,0,732}= ,{7,0, -1654},{8,0,95},{8,0,327},{8,0,616},{9,0,892},{10,0,598},{10,0,769},{11,0,= 134},{ -11,0,747},{12,0,378},{14,0,97},{137,11,534},{4,0,969},{136,10,825},{137,1= 1,27},{ -6,0,727},{142,11,12},{133,0,1021},{134,0,1190},{134,11,1657},{5,10,143},{= 5,10, -769},{6,10,1760},{7,10,682},{7,10,1992},{136,10,736},{132,0,153},{135,11,= 127},{ -133,0,798},{132,0,587},{6,0,598},{7,0,42},{8,0,695},{10,0,212},{11,0,158}= ,{14,0, -196},{145,0,85},{133,10,860},{6,0,1929},{134,0,1933},{5,0,957},{5,0,1008}= ,{9,0, -577},{12,0,141},{6,10,422},{7,10,0},{7,10,1544},{8,11,364},{11,10,990},{1= 2,10, -453},{13,10,47},{141,10,266},{134,0,1319},{4,0,129},{135,0,465},{7,0,470}= ,{7,0, -1057},{7,0,1201},{9,0,755},{11,0,906},{140,0,527},{7,0,908},{146,0,7},{5,= 0,148}, -{136,0,450},{5,10,515},{137,10,131},{7,10,1605},{11,10,962},{146,10,139},= {132,10 -,646},{134,0,1166},{4,10,396},{7,10,728},{9,10,117},{13,10,202},{148,10,5= 1},{6, -10,121},{6,10,124},{6,10,357},{7,10,1138},{7,10,1295},{8,10,162},{139,10,= 655},{ -14,0,374},{142,11,374},{138,0,253},{139,0,1003},{5,11,909},{9,11,849},{13= 8,11, -805},{133,10,237},{7,11,525},{7,11,1579},{8,11,497},{136,11,573},{137,0,4= 6},{132 -,0,879},{134,0,806},{135,0,1868},{6,0,1837},{134,0,1846},{6,0,730},{134,0= ,881},{ -7,0,965},{7,0,1460},{7,0,1604},{7,11,193},{7,11,397},{7,11,1105},{8,11,12= 4},{8, -11,619},{9,11,305},{10,11,264},{11,11,40},{12,11,349},{13,11,134},{13,11,= 295},{ -14,11,155},{15,11,120},{146,11,105},{136,0,506},{143,0,10},{4,11,262},{7,= 11,342} -,{7,10,571},{7,10,1877},{10,10,366},{141,11,23},{133,11,641},{10,0,22},{9= ,10,513 -},{10,10,39},{12,10,122},{140,10,187},{135,11,1431},{150,11,49},{4,11,99}= ,{6,11, -250},{6,11,346},{8,11,127},{138,11,81},{6,0,2014},{8,0,928},{10,0,960},{1= 0,0,979 -},{140,0,996},{134,0,296},{132,11,915},{5,11,75},{9,11,517},{10,11,470},{= 12,11, -155},{141,11,224},{137,10,873},{4,0,854},{140,11,18},{134,0,587},{7,10,10= 7},{7, -10,838},{8,10,550},{138,10,401},{11,0,636},{15,0,145},{17,0,34},{19,0,50}= ,{23,0, -20},{11,10,588},{11,10,864},{11,10,968},{143,10,160},{135,11,216},{7,0,98= 2},{10, -0,32},{143,0,56},{133,10,768},{133,11,954},{6,11,304},{7,11,1114},{8,11,4= 18},{10 -,11,345},{11,11,341},{11,11,675},{141,11,40},{9,11,410},{139,11,425},{136= ,0,941} -,{5,0,435},{132,10,894},{5,0,85},{6,0,419},{7,0,134},{7,0,305},{7,0,361},= {7,0, -1337},{8,0,71},{140,0,519},{140,0,688},{135,0,740},{5,0,691},{7,0,345},{9= ,0,94}, -{140,0,169},{5,0,183},{6,0,582},{10,0,679},{140,0,435},{134,11,14},{6,0,9= 45},{ -135,0,511},{134,11,1708},{5,11,113},{6,11,243},{7,11,1865},{11,11,161},{1= 6,11,37 -},{145,11,99},{132,11,274},{137,0,539},{7,0,1993},{8,0,684},{134,10,272},= {6,0, -659},{134,0,982},{4,10,9},{5,10,128},{7,10,368},{11,10,480},{148,10,3},{1= 34,0, -583},{132,0,803},{133,0,704},{4,0,179},{5,0,198},{133,0,697},{7,0,347},{7= ,0,971} -,{8,0,181},{10,0,711},{135,11,166},{136,10,682},{4,10,2},{7,10,545},{7,10= ,894},{ -136,11,521},{135,0,481},{132,0,243},{5,0,203},{7,0,19},{7,0,71},{7,0,113}= ,{10,0, -405},{11,0,357},{142,0,240},{5,11,725},{5,11,727},{135,11,1811},{6,0,826}= ,{137, -11,304},{7,0,1450},{139,0,99},{133,11,654},{134,0,492},{5,0,134},{6,0,408= },{6,0, -495},{7,0,1593},{6,11,273},{10,11,188},{13,11,377},{146,11,77},{9,10,769}= ,{140, -10,185},{135,11,410},{142,0,4},{4,0,665},{134,11,1785},{4,0,248},{7,0,137= },{137, -0,349},{5,10,530},{142,10,113},{7,0,1270},{139,0,612},{132,11,780},{5,0,3= 71},{ -135,0,563},{135,0,826},{6,0,1535},{23,0,21},{151,0,23},{4,0,374},{7,0,547= },{7,0, -1700},{7,0,1833},{139,0,858},{133,10,556},{7,11,612},{8,11,545},{8,11,568= },{8,11 -,642},{9,11,717},{10,11,541},{10,11,763},{11,11,449},{12,11,489},{13,11,1= 53},{13 -,11,296},{14,11,138},{14,11,392},{15,11,50},{16,11,6},{16,11,12},{148,11,= 9},{9,0 -,311},{141,0,42},{8,10,16},{140,10,568},{6,0,1968},{6,0,2027},{138,0,991}= ,{6,0, -1647},{7,0,1552},{7,0,2010},{9,0,494},{137,0,509},{133,11,948},{6,10,186}= ,{137, -10,426},{134,0,769},{134,0,642},{132,10,585},{6,0,123},{7,0,214},{9,0,728= },{10,0 -,157},{11,0,346},{11,0,662},{143,0,106},{142,11,381},{135,0,1435},{4,11,5= 32},{5, -11,706},{135,11,662},{5,11,837},{134,11,1651},{4,10,93},{5,10,252},{6,10,= 229},{7 -,10,291},{9,10,550},{139,10,644},{148,0,79},{137,10,749},{134,0,1425},{13= 7,10, -162},{4,11,362},{7,11,52},{7,11,303},{140,11,166},{132,10,381},{4,11,330}= ,{7,11, -933},{7,11,2012},{136,11,292},{135,11,767},{4,0,707},{5,0,588},{6,0,393},= {13,0, -106},{18,0,49},{147,0,41},{6,0,211},{7,0,1690},{11,0,486},{140,0,369},{13= 7,11, -883},{4,11,703},{135,11,207},{4,0,187},{5,0,184},{5,0,690},{7,0,1869},{10= ,0,756} -,{139,0,783},{132,11,571},{134,0,1382},{5,0,175},{6,10,77},{6,10,157},{7,= 10,974} -,{7,10,1301},{7,10,1339},{7,10,1490},{7,10,1873},{137,10,628},{134,0,1493= },{5,11 -,873},{133,11,960},{134,0,1007},{12,11,93},{12,11,501},{13,11,362},{14,11= ,151},{ -15,11,40},{15,11,59},{16,11,46},{17,11,25},{18,11,14},{18,11,134},{19,11,= 25},{19 -,11,69},{20,11,16},{20,11,19},{20,11,66},{21,11,23},{21,11,25},{150,11,42= },{11, -10,919},{141,10,409},{134,0,219},{5,0,582},{6,0,1646},{7,0,99},{7,0,1962}= ,{7,0, -1986},{8,0,515},{8,0,773},{9,0,23},{9,0,491},{12,0,620},{142,0,93},{133,0= ,851},{ -5,11,33},{134,11,470},{135,11,1291},{134,0,1278},{135,11,1882},{135,10,14= 89},{ -132,0,1000},{138,0,982},{8,0,762},{8,0,812},{137,0,910},{6,11,47},{7,11,9= 0},{7, -11,664},{7,11,830},{7,11,1380},{7,11,2025},{8,11,448},{136,11,828},{4,0,9= 8},{4,0 -,940},{6,0,1819},{6,0,1834},{6,0,1841},{7,0,1365},{8,0,859},{8,0,897},{8,= 0,918}, -{9,0,422},{9,0,670},{10,0,775},{10,0,894},{10,0,909},{10,0,910},{10,0,935= },{11,0 -,210},{12,0,750},{12,0,755},{13,0,26},{13,0,457},{13,0,476},{16,0,100},{1= 6,0,109 -},{18,0,173},{18,0,175},{8,10,398},{9,10,681},{139,10,632},{9,11,417},{13= 7,11, -493},{136,10,645},{138,0,906},{134,0,1730},{134,10,20},{133,11,1019},{134= ,0,1185 -},{10,0,40},{136,10,769},{9,0,147},{134,11,208},{140,0,650},{5,0,209},{6,= 0,30},{ -11,0,56},{139,0,305},{132,0,553},{138,11,344},{6,11,68},{7,11,398},{7,11,= 448},{7 -,11,1629},{7,11,1813},{8,11,387},{8,11,442},{9,11,710},{10,11,282},{138,1= 1,722}, -{5,0,597},{14,0,20},{142,11,20},{135,0,1614},{135,10,1757},{4,0,150},{5,0= ,303},{ -6,0,327},{135,10,937},{16,0,49},{7,10,1652},{144,11,49},{8,0,192},{10,0,7= 8},{141 -,0,359},{135,0,786},{143,0,134},{6,0,1638},{7,0,79},{7,0,496},{9,0,138},{= 10,0, -336},{11,0,12},{12,0,412},{12,0,440},{142,0,305},{136,11,491},{4,10,579},= {5,10, -226},{5,10,323},{135,10,960},{7,0,204},{7,0,415},{8,0,42},{10,0,85},{139,= 0,564}, -{132,0,614},{4,11,403},{5,11,441},{7,11,450},{11,11,101},{12,11,193},{141= ,11,430 -},{135,11,1927},{135,11,1330},{4,0,3},{5,0,247},{5,0,644},{7,0,744},{7,0,= 1207},{ -7,0,1225},{7,0,1909},{146,0,147},{136,0,942},{4,0,1019},{134,0,2023},{5,1= 1,679}, -{133,10,973},{5,0,285},{9,0,67},{13,0,473},{143,0,82},{7,11,328},{137,11,= 326},{ -151,0,8},{6,10,135},{135,10,1176},{135,11,1128},{134,0,1309},{135,11,1796= },{135, -10,314},{4,11,574},{7,11,350},{7,11,1024},{8,11,338},{9,11,677},{10,11,80= 8},{139 -,11,508},{7,11,818},{17,11,14},{17,11,45},{18,11,75},{148,11,18},{146,10,= 4},{135 -,11,1081},{4,0,29},{6,0,532},{7,0,1628},{7,0,1648},{9,0,350},{10,0,433},{= 11,0,97 -},{11,0,557},{11,0,745},{12,0,289},{12,0,335},{12,0,348},{12,0,606},{13,0= ,116},{ -13,0,233},{13,0,466},{14,0,181},{14,0,209},{14,0,232},{14,0,236},{14,0,30= 0},{16, -0,41},{148,0,97},{7,0,318},{6,10,281},{8,10,282},{8,10,480},{8,10,499},{9= ,10,198 -},{10,10,143},{10,10,169},{10,10,211},{10,10,417},{10,10,574},{11,10,147}= ,{11,10 -,395},{12,10,75},{12,10,407},{12,10,608},{13,10,500},{142,10,251},{135,11= ,1676}, -{135,11,2037},{135,0,1692},{5,0,501},{7,0,1704},{9,0,553},{11,0,520},{12,= 0,557}, -{141,0,249},{6,0,1527},{14,0,324},{15,0,55},{15,0,80},{14,11,324},{15,11,= 55},{ -143,11,80},{135,10,1776},{8,0,988},{137,11,297},{132,10,419},{142,0,223},= {139,11 -,234},{7,0,1123},{12,0,508},{14,0,102},{14,0,226},{144,0,57},{4,10,138},{= 7,10, -1012},{7,10,1280},{137,10,76},{7,0,1764},{5,10,29},{140,10,638},{134,0,20= 15},{ -134,0,1599},{138,11,56},{6,11,306},{7,11,1140},{7,11,1340},{8,11,133},{13= 8,11, -449},{139,11,1011},{6,10,1710},{135,10,2038},{7,11,1763},{140,11,310},{6,= 0,129}, -{4,10,17},{5,10,23},{7,10,995},{11,10,383},{11,10,437},{12,10,460},{140,1= 0,532}, -{5,11,329},{136,11,260},{133,10,862},{132,0,534},{6,0,811},{135,0,626},{1= 32,11, -657},{4,0,25},{5,0,60},{6,0,504},{7,0,614},{7,0,1155},{12,0,0},{152,11,7}= ,{7,0, -1248},{11,0,621},{139,0,702},{137,0,321},{8,10,70},{12,10,171},{141,10,27= 2},{10, -10,233},{139,10,76},{4,0,379},{7,0,1397},{134,10,442},{5,11,66},{7,11,189= 6},{136 -,11,288},{134,11,1643},{134,10,1709},{4,11,21},{5,11,91},{5,11,570},{5,11= ,648},{ -5,11,750},{5,11,781},{6,11,54},{6,11,112},{6,11,402},{6,11,1732},{7,11,31= 5},{7, -11,749},{7,11,1347},{7,11,1900},{9,11,78},{9,11,508},{10,11,611},{11,11,5= 10},{11 -,11,728},{13,11,36},{14,11,39},{16,11,83},{17,11,124},{148,11,30},{4,0,11= 8},{6,0 -,274},{6,0,361},{7,0,75},{141,0,441},{10,11,322},{10,11,719},{139,11,407}= ,{147, -10,119},{12,11,549},{14,11,67},{147,11,60},{11,10,69},{12,10,105},{12,10,= 117},{ -13,10,213},{14,10,13},{14,10,62},{14,10,177},{14,10,421},{15,10,19},{146,= 10,141} -,{9,0,841},{137,10,309},{7,10,608},{7,10,976},{8,11,125},{8,11,369},{8,11= ,524},{ -9,10,146},{10,10,206},{10,11,486},{10,10,596},{11,11,13},{11,11,381},{11,= 11,736} -,{11,11,766},{11,11,845},{13,11,114},{13,10,218},{13,11,292},{14,11,47},{= 142,10, -153},{12,0,693},{135,11,759},{5,0,314},{6,0,221},{7,0,419},{10,0,650},{11= ,0,396} -,{12,0,156},{13,0,369},{14,0,333},{145,0,47},{6,11,1684},{6,11,1731},{7,1= 1,356}, -{7,11,1932},{8,11,54},{8,11,221},{9,11,225},{9,11,356},{10,11,77},{10,11,= 446},{ -10,11,731},{12,11,404},{141,11,491},{132,11,375},{4,10,518},{135,10,1136}= ,{4,0, -913},{4,11,411},{11,11,643},{140,11,115},{4,11,80},{133,11,44},{8,10,689}= ,{137, -10,863},{138,0,880},{4,10,18},{7,10,145},{7,10,444},{7,10,1278},{8,10,49}= ,{8,10, -400},{9,10,71},{9,10,250},{10,10,459},{12,10,160},{144,10,24},{136,0,475}= ,{5,0, -1016},{5,11,299},{135,11,1083},{7,0,602},{8,0,179},{10,0,781},{140,0,126}= ,{6,0, -329},{138,0,111},{135,0,1864},{4,11,219},{7,11,1761},{137,11,86},{6,0,188= 8},{6,0 -,1892},{6,0,1901},{6,0,1904},{9,0,953},{9,0,985},{9,0,991},{9,0,1001},{12= ,0,818} -,{12,0,846},{12,0,847},{12,0,861},{12,0,862},{12,0,873},{12,0,875},{12,0,= 877},{ -12,0,879},{12,0,881},{12,0,884},{12,0,903},{12,0,915},{12,0,926},{12,0,93= 9},{15, -0,182},{15,0,219},{15,0,255},{18,0,191},{18,0,209},{18,0,211},{149,0,41},= {5,11, -328},{135,11,918},{137,0,780},{12,0,82},{143,0,36},{133,10,1010},{5,0,821= },{134, -0,1687},{133,11,514},{132,0,956},{134,0,1180},{10,0,112},{5,10,87},{7,10,= 313},{7 -,10,1103},{10,10,582},{11,10,389},{11,10,813},{12,10,385},{13,10,286},{14= ,10,124 -},{146,10,108},{5,0,71},{7,0,1407},{9,0,704},{10,0,261},{10,0,619},{11,0,= 547},{ -11,0,619},{143,0,157},{4,0,531},{5,0,455},{5,11,301},{6,11,571},{14,11,49= },{146, -11,102},{132,10,267},{6,0,385},{7,0,2008},{9,0,337},{138,0,517},{133,11,7= 26},{ -133,11,364},{4,11,76},{7,11,1550},{9,11,306},{9,11,430},{9,11,663},{10,11= ,683},{ -11,11,427},{11,11,753},{12,11,334},{12,11,442},{14,11,258},{14,11,366},{1= 43,11, -131},{6,0,1865},{6,0,1879},{6,0,1881},{6,0,1894},{6,0,1908},{9,0,915},{9,= 0,926}, -{9,0,940},{9,0,943},{9,0,966},{9,0,980},{9,0,989},{9,0,1005},{9,0,1010},{= 12,0, -813},{12,0,817},{12,0,840},{12,0,843},{12,0,855},{12,0,864},{12,0,871},{1= 2,0,872 -},{12,0,899},{12,0,905},{12,0,924},{15,0,171},{15,0,181},{15,0,224},{15,0= ,235},{ -15,0,251},{146,0,184},{137,11,52},{5,0,16},{6,0,86},{6,0,603},{7,0,292},{= 7,0,561 -},{8,0,257},{8,0,382},{9,0,721},{9,0,778},{11,0,581},{140,0,466},{4,0,486= },{5,0, -491},{135,10,1121},{4,0,72},{6,0,265},{135,0,1300},{135,11,1183},{10,10,2= 49},{ -139,10,209},{132,10,561},{137,11,519},{4,11,656},{4,10,760},{135,11,779},= {9,10, -154},{140,10,485},{135,11,1793},{135,11,144},{136,10,255},{133,0,621},{4,= 10,368} -,{135,10,641},{135,11,1373},{7,11,554},{7,11,605},{141,11,10},{137,0,234}= ,{5,0, -815},{6,0,1688},{134,0,1755},{5,11,838},{5,11,841},{134,11,1649},{7,0,198= 7},{7,0 -,2040},{136,0,743},{133,11,1012},{6,0,197},{136,0,205},{6,0,314},{134,11,= 314},{ -144,11,53},{6,11,251},{7,11,365},{7,11,1357},{7,11,1497},{8,11,154},{141,= 11,281} -,{133,11,340},{6,0,452},{7,0,312},{138,0,219},{138,0,589},{4,0,333},{9,0,= 176},{ -12,0,353},{141,0,187},{9,10,92},{147,10,91},{134,0,1110},{11,0,47},{139,1= 1,495}, -{6,10,525},{8,10,806},{9,10,876},{140,10,284},{8,11,261},{9,11,144},{9,11= ,466},{ -10,11,370},{12,11,470},{13,11,144},{142,11,348},{137,11,897},{8,0,863},{8= ,0,864} -,{8,0,868},{8,0,884},{10,0,866},{10,0,868},{10,0,873},{10,0,911},{10,0,91= 2},{10, -0,944},{12,0,727},{6,11,248},{9,11,546},{10,11,535},{11,11,681},{141,11,1= 35},{6, -0,300},{135,0,1515},{134,0,1237},{139,10,958},{133,10,594},{140,11,250},{= 134,0, -1685},{134,11,567},{7,0,135},{8,0,7},{8,0,62},{9,0,243},{10,0,658},{10,0,= 697},{ -11,0,456},{139,0,756},{9,0,395},{138,0,79},{6,10,1641},{136,10,820},{4,10= ,302},{ -135,10,1766},{134,11,174},{135,10,1313},{135,0,631},{134,10,1674},{134,11= ,395},{ -138,0,835},{7,0,406},{7,0,459},{8,0,606},{139,0,726},{134,11,617},{134,0,= 979},{6 -,10,389},{7,10,149},{9,10,142},{138,10,94},{5,11,878},{133,11,972},{6,10,= 8},{7, -10,1881},{8,10,91},{136,11,511},{133,0,612},{132,11,351},{4,0,372},{7,0,4= 82},{8, -0,158},{9,0,602},{9,0,615},{10,0,245},{10,0,678},{10,0,744},{11,0,248},{1= 39,0, -806},{5,0,854},{135,0,1991},{132,11,286},{135,11,344},{7,11,438},{7,11,62= 7},{7, -11,1516},{8,11,40},{9,11,56},{9,11,294},{10,11,30},{10,11,259},{11,11,969= },{146, -11,148},{135,0,1492},{5,11,259},{7,11,414},{7,11,854},{142,11,107},{135,1= 0,1746} -,{6,0,833},{134,0,998},{135,10,24},{6,0,750},{135,0,1739},{4,10,503},{135= ,10, -1661},{5,10,130},{7,10,1314},{9,10,610},{10,10,718},{11,10,601},{11,10,81= 9},{11, -10,946},{140,10,536},{10,10,149},{11,10,280},{142,10,336},{132,11,738},{1= 35,10, -1946},{5,0,195},{135,0,1685},{7,0,1997},{8,0,730},{139,0,1006},{151,11,17= },{133, -11,866},{14,0,463},{14,0,470},{150,0,61},{5,0,751},{8,0,266},{11,0,578},{= 4,10, -392},{135,10,1597},{5,10,433},{9,10,633},{139,10,629},{135,0,821},{6,0,71= 5},{134 -,0,1325},{133,11,116},{6,0,868},{132,11,457},{134,0,959},{6,10,234},{138,= 11,199} -,{7,0,1053},{7,10,1950},{8,10,680},{11,10,817},{147,10,88},{7,10,1222},{1= 38,10, -386},{5,0,950},{5,0,994},{6,0,351},{134,0,1124},{134,0,1081},{7,0,1595},{= 6,10,5} -,{11,10,249},{12,10,313},{16,10,66},{145,10,26},{148,0,59},{5,11,527},{6,= 11,189} -,{135,11,859},{5,10,963},{6,10,1773},{11,11,104},{11,11,554},{15,11,60},{= 143,11, -125},{135,0,47},{137,0,684},{134,11,116},{134,0,1606},{134,0,777},{7,0,10= 20},{8, -10,509},{136,10,792},{135,0,1094},{132,0,350},{133,11,487},{4,11,86},{5,1= 1,667}, -{5,11,753},{6,11,316},{6,11,455},{135,11,946},{7,0,1812},{13,0,259},{13,0= ,356},{ -14,0,242},{147,0,114},{132,10,931},{133,0,967},{4,0,473},{7,0,623},{8,0,8= 08},{9, -0,871},{9,0,893},{11,0,38},{11,0,431},{12,0,112},{12,0,217},{12,0,243},{1= 2,0,562 -},{12,0,663},{12,0,683},{13,0,141},{13,0,197},{13,0,227},{13,0,406},{13,0= ,487},{ -14,0,156},{14,0,203},{14,0,224},{14,0,256},{18,0,58},{150,0,0},{138,0,286= },{7,10 -,943},{139,10,614},{135,10,1837},{150,11,45},{132,0,798},{4,0,222},{7,0,2= 86},{ -136,0,629},{4,11,79},{7,11,1773},{10,11,450},{11,11,589},{13,11,332},{13,= 11,493} -,{14,11,183},{14,11,334},{14,11,362},{14,11,368},{14,11,376},{14,11,379},= {19,11, -90},{19,11,103},{19,11,127},{148,11,90},{5,0,337},{11,0,513},{11,0,889},{= 11,0, -961},{12,0,461},{13,0,79},{15,0,121},{4,10,90},{5,10,545},{7,10,754},{9,1= 0,186}, -{10,10,72},{10,10,782},{11,10,577},{11,10,610},{12,10,354},{12,10,362},{1= 40,10, -595},{141,0,306},{136,0,146},{7,0,1646},{9,10,329},{11,10,254},{141,11,12= 4},{4,0 -,465},{135,0,1663},{132,0,525},{133,11,663},{10,0,299},{18,0,74},{9,10,18= 7},{11, -10,1016},{145,10,44},{7,0,165},{7,0,919},{4,10,506},{136,10,517},{5,10,29= 5},{135 -,10,1680},{133,11,846},{134,0,1064},{5,11,378},{7,11,1402},{7,11,1414},{8= ,11,465 -},{9,11,286},{10,11,185},{10,11,562},{10,11,635},{11,11,31},{11,11,393},{= 12,11, -456},{13,11,312},{18,11,65},{18,11,96},{147,11,89},{132,0,596},{7,10,987}= ,{9,10, -688},{10,10,522},{11,10,788},{140,10,566},{6,0,82},{7,0,138},{7,0,517},{7= ,0,1741 -},{11,0,238},{4,11,648},{134,10,1775},{7,0,1233},{7,10,700},{7,10,940},{8= ,10,514 -},{9,10,116},{9,10,535},{10,10,118},{11,10,107},{11,10,148},{11,10,922},{= 12,10, -254},{12,10,421},{142,10,238},{4,0,962},{6,0,1824},{8,0,894},{12,0,708},{= 12,0, -725},{14,0,451},{20,0,94},{22,0,59},{150,0,62},{5,11,945},{6,11,1656},{6,= 11,1787 -},{7,11,167},{8,11,824},{9,11,391},{10,11,375},{139,11,185},{5,0,495},{7,= 0,834}, -{9,0,733},{139,0,378},{4,10,743},{135,11,1273},{6,0,1204},{7,11,1645},{8,= 11,352} -,{137,11,249},{139,10,292},{133,0,559},{132,11,152},{9,0,499},{10,0,341},= {15,0, -144},{19,0,49},{7,10,1283},{9,10,227},{11,10,325},{11,10,408},{14,10,180}= ,{146, -10,47},{6,0,21},{6,0,1737},{7,0,1444},{136,0,224},{133,11,1006},{7,0,1446= },{9,0, -97},{17,0,15},{5,10,81},{7,10,146},{7,10,1342},{8,10,53},{8,10,561},{8,10= ,694},{ -8,10,754},{9,10,115},{9,10,894},{10,10,462},{10,10,813},{11,10,230},{11,1= 0,657}, -{11,10,699},{11,10,748},{12,10,119},{12,10,200},{12,10,283},{142,10,273},= {5,10, -408},{137,10,747},{135,11,431},{135,11,832},{6,0,729},{134,0,953},{4,0,72= 7},{8,0 -,565},{5,11,351},{7,11,264},{136,11,565},{134,0,1948},{5,0,519},{5,11,40}= ,{7,11, -598},{7,11,1638},{8,11,78},{9,11,166},{9,11,640},{9,11,685},{9,11,773},{1= 1,11, -215},{13,11,65},{14,11,172},{14,11,317},{145,11,6},{8,11,60},{9,11,343},{= 139,11, -769},{137,11,455},{134,0,1193},{140,0,790},{7,11,1951},{8,11,765},{8,11,7= 72},{ -140,11,671},{7,11,108},{8,11,219},{8,11,388},{9,11,639},{9,11,775},{11,11= ,275},{ -140,11,464},{132,11,468},{7,10,30},{8,10,86},{8,10,315},{8,10,700},{9,10,= 576},{9 -,10,858},{11,10,310},{11,10,888},{11,10,904},{12,10,361},{141,10,248},{5,= 11,15}, -{6,11,56},{7,11,1758},{8,11,500},{9,11,730},{11,11,331},{13,11,150},{142,= 11,282} -,{4,0,402},{7,0,2},{8,0,323},{136,0,479},{138,10,839},{11,0,580},{142,0,2= 01},{5, -0,59},{135,0,672},{137,10,617},{146,0,34},{134,11,1886},{4,0,961},{136,0,= 896},{6 -,0,1285},{5,11,205},{6,11,438},{137,11,711},{134,10,428},{7,10,524},{8,10= ,169},{ -8,10,234},{9,10,480},{138,10,646},{148,0,46},{141,0,479},{133,11,534},{6,= 0,2019} -,{134,10,1648},{4,0,85},{7,0,549},{7,10,1205},{138,10,637},{4,0,663},{5,0= ,94},{7 -,11,235},{7,11,1475},{15,11,68},{146,11,120},{6,11,443},{9,11,237},{9,11,= 571},{9 -,11,695},{10,11,139},{11,11,715},{12,11,417},{141,11,421},{132,0,783},{4,= 0,682}, -{8,0,65},{9,10,39},{10,10,166},{11,10,918},{12,10,635},{20,10,10},{22,10,= 27},{22 -,10,43},{150,10,52},{6,0,11},{135,0,187},{132,0,522},{4,0,52},{135,0,661}= ,{4,0, -383},{133,0,520},{135,11,546},{11,0,343},{142,0,127},{4,11,578},{7,10,157= },{7,11 -,624},{7,11,916},{8,10,279},{10,11,256},{11,11,87},{139,11,703},{134,10,6= 04},{4, -0,281},{5,0,38},{7,0,194},{7,0,668},{7,0,1893},{137,0,397},{7,10,945},{11= ,10,713 -},{139,10,744},{139,10,1022},{9,0,635},{139,0,559},{5,11,923},{7,11,490},= {12,11, -553},{13,11,100},{14,11,118},{143,11,75},{132,0,975},{132,10,567},{137,10= ,859},{ -7,10,1846},{7,11,1846},{8,10,628},{136,11,628},{148,0,116},{138,11,750},{= 14,0,51 -},{14,11,51},{15,11,7},{148,11,20},{132,0,858},{134,0,1075},{4,11,924},{1= 33,10, -762},{136,0,535},{133,0,448},{10,10,784},{141,10,191},{133,10,298},{7,0,6= 10},{ -135,0,1501},{7,10,633},{7,10,905},{7,10,909},{7,10,1538},{9,10,767},{140,= 10,636} -,{4,11,265},{7,11,807},{135,11,950},{5,11,93},{12,11,267},{144,11,26},{13= 6,0,191 -},{139,10,301},{135,10,1970},{135,0,267},{4,0,319},{5,0,699},{138,0,673},= {6,0, -336},{7,0,92},{7,0,182},{8,0,453},{8,0,552},{9,0,204},{9,0,285},{10,0,99}= ,{11,0, -568},{11,0,950},{12,0,94},{16,0,20},{16,0,70},{19,0,55},{12,10,644},{144,= 10,90}, -{6,0,551},{7,0,1308},{7,10,845},{7,11,994},{8,10,160},{137,10,318},{19,11= ,1},{19 -,11,26},{150,11,9},{7,0,1406},{9,0,218},{141,0,222},{5,0,256},{138,0,69},= {5,11, -233},{5,11,320},{6,11,140},{7,11,330},{136,11,295},{6,0,1980},{136,0,952}= ,{4,0, -833},{137,11,678},{133,11,978},{4,11,905},{6,11,1701},{137,11,843},{138,1= 0,735}, -{136,10,76},{17,0,39},{148,0,36},{18,0,81},{146,11,81},{14,0,352},{17,0,5= 3},{18, -0,146},{18,0,152},{19,0,11},{150,0,54},{135,0,634},{138,10,841},{132,0,61= 8},{4,0 -,339},{7,0,259},{17,0,73},{4,11,275},{140,11,376},{132,11,509},{7,11,273}= ,{139, -11,377},{4,0,759},{13,0,169},{137,10,804},{6,10,96},{135,10,1426},{4,10,6= 51},{ -133,10,289},{7,0,1075},{8,10,35},{9,10,511},{10,10,767},{147,10,118},{6,0= ,649},{ -6,0,670},{136,0,482},{5,0,336},{6,0,341},{6,0,478},{6,0,1763},{136,0,386}= ,{5,11, -802},{7,11,2021},{8,11,805},{14,11,94},{15,11,65},{16,11,4},{16,11,77},{1= 6,11,80 -},{145,11,5},{6,0,1035},{5,11,167},{5,11,899},{6,11,410},{137,11,777},{13= 4,11, -1705},{5,0,924},{133,0,969},{132,10,704},{135,0,73},{135,11,10},{135,10,1= 078},{5 -,11,11},{6,11,117},{6,11,485},{7,11,1133},{9,11,582},{9,11,594},{11,11,21= },{11, -11,818},{12,11,535},{141,11,86},{135,0,1971},{4,11,264},{7,11,1067},{8,11= ,204},{ -8,11,385},{139,11,953},{6,0,1458},{135,0,1344},{5,0,396},{134,0,501},{4,1= 0,720}, -{133,10,306},{4,0,929},{5,0,799},{8,0,46},{8,0,740},{133,10,431},{7,11,64= 6},{7, -11,1730},{11,11,446},{141,11,178},{7,0,276},{5,10,464},{6,10,236},{7,10,6= 96},{7, -10,914},{7,10,1108},{7,10,1448},{9,10,15},{9,10,564},{10,10,14},{12,10,56= 5},{13, -10,449},{14,10,53},{15,10,13},{16,10,64},{145,10,41},{4,0,892},{133,0,770= },{6,10 -,1767},{12,10,194},{145,10,107},{135,0,158},{5,10,840},{138,11,608},{134,= 0,1432} -,{138,11,250},{8,11,794},{9,11,400},{10,11,298},{142,11,228},{151,0,25},{= 7,11, -1131},{135,11,1468},{135,0,2001},{9,10,642},{11,10,236},{142,10,193},{4,1= 0,68},{ -5,10,634},{6,10,386},{7,10,794},{8,10,273},{9,10,563},{10,10,105},{10,10,= 171},{ -11,10,94},{139,10,354},{136,11,724},{132,0,478},{11,11,512},{13,11,205},{= 19,11, -30},{22,11,36},{151,11,19},{7,0,1461},{140,0,91},{6,11,190},{7,11,768},{1= 35,11, -1170},{4,0,602},{8,0,211},{4,10,95},{7,10,416},{139,10,830},{7,10,731},{1= 3,10,20 -},{143,10,11},{6,0,1068},{135,0,1872},{4,0,13},{5,0,567},{7,0,1498},{9,0,= 124},{ -11,0,521},{12,0,405},{135,11,1023},{135,0,1006},{132,0,735},{138,0,812},{= 4,0,170 -},{135,0,323},{6,11,137},{9,11,75},{9,11,253},{10,11,194},{138,11,444},{5= ,0,304} -,{7,0,1403},{5,10,864},{10,10,648},{11,10,671},{143,10,46},{135,11,1180},= {133,10 -,928},{4,0,148},{133,0,742},{11,10,986},{140,10,682},{133,0,523},{135,11,= 1743},{ -7,0,730},{18,0,144},{19,0,61},{8,10,44},{9,10,884},{10,10,580},{11,10,399= },{11, -10,894},{143,10,122},{5,11,760},{7,11,542},{8,11,135},{136,11,496},{136,0= ,981},{ -133,0,111},{10,0,132},{11,0,191},{11,0,358},{139,0,460},{7,11,319},{7,11,= 355},{7 -,11,763},{10,11,389},{145,11,43},{134,0,890},{134,0,1420},{136,11,557},{1= 33,10, -518},{133,0,444},{135,0,1787},{135,10,1852},{8,0,123},{15,0,6},{144,0,7},= {6,0, -2041},{10,11,38},{139,11,784},{136,0,932},{5,0,937},{135,0,100},{6,0,995}= ,{4,11, -58},{5,11,286},{6,11,319},{7,11,402},{7,11,1254},{7,11,1903},{8,11,356},{= 140,11, -408},{4,11,389},{9,11,181},{9,11,255},{10,11,8},{10,11,29},{10,11,816},{1= 1,11, -311},{11,11,561},{12,11,67},{141,11,181},{138,0,255},{5,0,138},{4,10,934}= ,{136, -10,610},{4,0,965},{10,0,863},{138,0,898},{10,10,804},{138,10,832},{12,0,6= 31},{8, -10,96},{9,10,36},{10,10,607},{11,10,423},{11,10,442},{12,10,309},{14,10,1= 99},{15 -,10,90},{145,10,110},{134,0,1394},{4,0,652},{8,0,320},{22,0,6},{22,0,16},= {9,10, -13},{9,10,398},{9,10,727},{10,10,75},{10,10,184},{10,10,230},{10,10,564},= {10,10, -569},{11,10,973},{12,10,70},{12,10,189},{13,10,57},{141,10,257},{6,0,897}= ,{134,0 -,1333},{4,0,692},{133,0,321},{133,11,373},{135,0,922},{5,0,619},{133,0,69= 8},{137 -,10,631},{5,10,345},{135,10,1016},{9,0,957},{9,0,1018},{12,0,828},{12,0,8= 44},{12 -,0,897},{12,0,901},{12,0,943},{15,0,180},{18,0,197},{18,0,200},{18,0,213}= ,{18,0, -214},{146,0,226},{5,0,917},{134,0,1659},{135,0,1100},{134,0,1173},{134,0,= 1930},{ -5,0,251},{5,0,956},{8,0,268},{9,0,214},{146,0,142},{133,10,673},{137,10,8= 50},{4, -10,287},{133,10,1018},{132,11,672},{5,0,346},{5,0,711},{8,0,390},{11,11,7= 52},{ -139,11,885},{5,10,34},{10,10,724},{12,10,444},{13,10,354},{18,10,32},{23,= 10,24}, -{23,10,31},{152,10,5},{4,11,710},{134,11,606},{134,0,744},{134,10,382},{1= 33,11, -145},{4,10,329},{7,11,884},{140,11,124},{4,11,467},{5,11,405},{134,11,544= },{9,10 -,846},{138,10,827},{133,0,624},{9,11,372},{15,11,2},{19,11,10},{147,11,18= },{4,11 -,387},{135,11,1288},{5,0,783},{7,0,1998},{135,0,2047},{132,10,906},{136,1= 0,366}, -{135,11,550},{4,10,123},{4,10,649},{5,10,605},{7,10,1509},{136,10,36},{13= 4,0, -1125},{132,0,594},{133,10,767},{135,11,1227},{136,11,467},{4,11,576},{135= ,11, -1263},{4,0,268},{7,0,1534},{135,11,1534},{4,10,273},{5,10,658},{5,11,919}= ,{5,10, -995},{134,11,1673},{133,0,563},{134,10,72},{135,10,1345},{4,11,82},{5,11,= 333},{5 -,11,904},{6,11,207},{7,11,325},{7,11,1726},{8,11,101},{10,11,778},{139,11= ,220},{ -5,0,37},{6,0,39},{6,0,451},{7,0,218},{7,0,667},{7,0,1166},{7,0,1687},{8,0= ,662},{ -16,0,2},{133,10,589},{134,0,1332},{133,11,903},{134,0,508},{5,10,117},{6,= 10,514} -,{6,10,541},{7,10,1164},{7,10,1436},{8,10,220},{8,10,648},{10,10,688},{11= ,10,560 -},{140,11,147},{6,11,555},{135,11,485},{133,10,686},{7,0,453},{7,0,635},{= 7,0,796 -},{8,0,331},{9,0,330},{9,0,865},{10,0,119},{10,0,235},{11,0,111},{11,0,12= 9},{11, -0,240},{12,0,31},{12,0,66},{12,0,222},{12,0,269},{12,0,599},{12,0,684},{1= 2,0,689 -},{12,0,691},{142,0,345},{135,0,1834},{4,11,705},{7,11,615},{138,11,251},= {136,11 -,345},{137,0,527},{6,0,98},{7,0,702},{135,0,991},{11,0,576},{14,0,74},{7,= 10,196} -,{10,10,765},{11,10,347},{11,10,552},{11,10,790},{12,10,263},{13,10,246},= {13,10, -270},{13,10,395},{14,10,176},{14,10,190},{14,10,398},{14,10,412},{15,10,3= 2},{15, -10,63},{16,10,88},{147,10,105},{134,11,90},{13,0,84},{141,0,122},{6,0,37}= ,{7,0, -299},{7,0,1666},{8,0,195},{8,0,316},{9,0,178},{9,0,276},{9,0,339},{9,0,53= 6},{10, -0,102},{10,0,362},{10,0,785},{11,0,55},{11,0,149},{11,0,773},{13,0,416},{= 13,0, -419},{14,0,38},{14,0,41},{142,0,210},{5,10,381},{135,10,1792},{7,11,813},= {12,11, -497},{141,11,56},{7,10,616},{138,10,413},{133,0,645},{6,11,125},{135,11,1= 277},{ -132,0,290},{6,0,70},{7,0,1292},{10,0,762},{139,0,288},{6,10,120},{7,10,11= 88},{7, -10,1710},{8,10,286},{9,10,667},{11,10,592},{139,10,730},{135,11,1784},{7,= 0,1315} -,{135,11,1315},{134,0,1955},{135,10,1146},{7,0,131},{7,0,422},{8,0,210},{= 140,0, -573},{4,10,352},{135,10,687},{139,0,797},{143,0,38},{14,0,179},{15,0,151}= ,{150,0 -,11},{7,0,488},{4,10,192},{5,10,49},{6,10,200},{6,10,293},{134,10,1696},{= 132,0, -936},{135,11,703},{6,11,160},{7,11,1106},{9,11,770},{10,11,618},{11,11,11= 2},{140 -,11,413},{5,0,453},{134,0,441},{135,0,595},{132,10,650},{132,10,147},{6,0= ,991},{ -6,0,1182},{12,11,271},{145,11,109},{133,10,934},{140,11,221},{132,0,653},= {7,0, -505},{135,0,523},{134,0,903},{135,11,479},{7,11,304},{9,11,646},{9,11,862= },{10, -11,262},{11,11,696},{12,11,208},{15,11,79},{147,11,108},{146,0,80},{135,1= 1,981}, -{142,0,432},{132,0,314},{137,11,152},{7,0,1368},{8,0,232},{8,0,361},{10,0= ,682},{ -138,0,742},{135,11,1586},{9,0,534},{4,11,434},{11,11,663},{12,11,210},{13= ,11,166 -},{13,11,310},{14,11,373},{147,11,43},{7,11,1091},{135,11,1765},{6,11,550= },{135, -11,652},{137,0,27},{142,0,12},{4,10,637},{5,11,553},{7,11,766},{138,11,82= 4},{7, -11,737},{8,11,298},{136,11,452},{7,0,736},{139,0,264},{134,0,1657},{133,1= 1,292}, -{138,11,135},{6,0,844},{134,0,1117},{135,0,127},{9,10,867},{138,10,837},{= 6,0, -1184},{134,0,1208},{134,0,1294},{136,0,364},{6,0,1415},{7,0,1334},{11,0,1= 25},{6, -10,170},{7,11,393},{8,10,395},{8,10,487},{10,11,603},{11,11,206},{141,10,= 147},{ -137,11,748},{4,11,912},{137,11,232},{4,10,535},{136,10,618},{137,0,792},{= 7,11, -1973},{136,11,716},{135,11,98},{5,0,909},{9,0,849},{138,0,805},{4,0,630},= {132,0, -699},{5,11,733},{14,11,103},{150,10,23},{12,11,158},{18,11,8},{19,11,62},= {20,11, -6},{22,11,4},{23,11,2},{151,11,9},{132,0,968},{132,10,778},{132,10,46},{5= ,10,811 -},{6,10,1679},{6,10,1714},{135,10,2032},{6,0,1446},{7,10,1458},{9,10,407}= ,{139, -10,15},{7,0,206},{7,0,397},{7,0,621},{7,0,640},{8,0,124},{8,0,619},{9,0,3= 05},{9, -0,643},{10,0,264},{10,0,628},{11,0,40},{12,0,349},{13,0,134},{13,0,295},{= 14,0, -155},{15,0,120},{18,0,105},{6,10,34},{7,10,1089},{8,10,708},{8,10,721},{9= ,10,363 -},{148,10,98},{4,0,262},{5,0,641},{135,0,342},{137,11,72},{4,0,99},{6,0,2= 50},{6, -0,346},{8,0,127},{138,0,81},{132,0,915},{5,0,75},{9,0,517},{10,0,470},{12= ,0,155} -,{141,0,224},{132,10,462},{11,11,600},{11,11,670},{141,11,245},{142,0,83}= ,{5,10, -73},{6,10,23},{134,10,338},{6,0,1031},{139,11,923},{7,11,164},{7,11,1571}= ,{9,11, -107},{140,11,225},{134,0,1470},{133,0,954},{6,0,304},{8,0,418},{10,0,345}= ,{11,0, -341},{139,0,675},{9,0,410},{139,0,425},{4,11,27},{5,11,484},{5,11,510},{6= ,11,434 -},{7,11,1000},{7,11,1098},{8,11,2},{136,11,200},{134,0,734},{140,11,257},= {7,10, -725},{8,10,498},{139,10,268},{134,0,1822},{135,0,1798},{135,10,773},{132,= 11,460} -,{4,11,932},{133,11,891},{134,0,14},{132,10,583},{7,10,1462},{8,11,625},{= 139,10, -659},{5,0,113},{6,0,243},{6,0,1708},{7,0,1865},{11,0,161},{16,0,37},{17,0= ,99},{ -133,10,220},{134,11,76},{5,11,461},{135,11,1925},{140,0,69},{8,11,92},{13= 7,11, -221},{139,10,803},{132,10,544},{4,0,274},{134,0,922},{132,0,541},{5,0,627= },{6,10 -,437},{6,10,564},{11,10,181},{141,10,183},{135,10,1192},{7,0,166},{132,11= ,763},{ -133,11,253},{134,0,849},{9,11,73},{10,11,110},{14,11,185},{145,11,119},{5= ,11,212 -},{12,11,35},{141,11,382},{133,0,717},{137,0,304},{136,0,600},{133,0,654}= ,{6,0, -273},{10,0,188},{13,0,377},{146,0,77},{4,10,790},{5,10,273},{134,10,394},= {132,0, -543},{135,0,410},{11,0,98},{11,0,524},{141,0,87},{132,0,941},{135,11,1175= },{4,0, -250},{7,0,1612},{11,0,186},{12,0,133},{6,10,127},{7,10,1511},{8,10,613},{= 12,10, -495},{12,10,586},{12,10,660},{12,10,668},{14,10,385},{15,10,118},{17,10,2= 0},{146 -,10,98},{6,0,1785},{133,11,816},{134,0,1339},{7,0,961},{7,0,1085},{7,0,17= 27},{8, -0,462},{6,10,230},{135,11,1727},{9,0,636},{135,10,1954},{132,0,780},{5,11= ,869},{ -5,11,968},{6,11,1626},{8,11,734},{136,11,784},{4,11,542},{6,11,1716},{6,1= 1,1727} -,{7,11,1082},{7,11,1545},{8,11,56},{8,11,118},{8,11,412},{8,11,564},{9,11= ,888},{ -9,11,908},{10,11,50},{10,11,423},{11,11,685},{11,11,697},{11,11,933},{12,= 11,299} -,{13,11,126},{13,11,136},{13,11,170},{141,11,190},{134,11,226},{4,11,232}= ,{9,11, -202},{10,11,474},{140,11,433},{137,11,500},{5,0,529},{136,10,68},{132,10,= 654},{4 -,10,156},{7,10,998},{7,10,1045},{7,10,1860},{9,10,48},{9,10,692},{11,10,4= 19},{ -139,10,602},{7,0,1276},{8,0,474},{9,0,652},{6,11,108},{7,11,1003},{7,11,1= 181},{ -136,11,343},{7,11,1264},{7,11,1678},{11,11,945},{12,11,341},{12,11,471},{= 140,11, -569},{134,11,1712},{5,0,948},{12,0,468},{19,0,96},{148,0,24},{4,11,133},{= 7,11, -711},{7,11,1298},{7,11,1585},{135,11,1929},{6,0,753},{140,0,657},{139,0,9= 41},{6, -11,99},{7,11,1808},{145,11,57},{6,11,574},{7,11,428},{7,11,1250},{10,11,6= 69},{11 -,11,485},{11,11,840},{12,11,300},{142,11,250},{4,0,532},{5,0,706},{135,0,= 662},{5 -,0,837},{6,0,1651},{139,0,985},{7,0,1861},{9,10,197},{10,10,300},{12,10,4= 73},{13 -,10,90},{141,10,405},{137,11,252},{6,11,323},{135,11,1564},{4,0,330},{4,0= ,863},{ -7,0,933},{7,0,2012},{8,0,292},{7,11,461},{8,11,775},{138,11,435},{132,10,= 606},{4 -,11,655},{7,11,850},{17,11,75},{146,11,137},{135,0,767},{7,10,1978},{136,= 10,676} -,{132,0,641},{135,11,1559},{134,0,1233},{137,0,242},{17,0,114},{4,10,361}= ,{133, -10,315},{137,0,883},{132,10,461},{138,0,274},{134,0,2008},{134,0,1794},{4= ,0,703} -,{135,0,207},{12,0,285},{132,10,472},{132,0,571},{5,0,873},{5,0,960},{8,0= ,823},{ -9,0,881},{136,11,577},{7,0,617},{10,0,498},{11,0,501},{12,0,16},{140,0,15= 0},{138 -,10,747},{132,0,431},{133,10,155},{11,0,283},{11,0,567},{7,10,163},{8,10,= 319},{9 -,10,402},{10,10,24},{10,10,681},{11,10,200},{12,10,253},{12,10,410},{142,= 10,219} -,{4,11,413},{5,11,677},{8,11,432},{140,11,280},{9,0,401},{5,10,475},{7,10= ,1780}, -{11,10,297},{11,10,558},{14,10,322},{147,10,76},{6,0,781},{9,0,134},{10,0= ,2},{10 -,0,27},{10,0,333},{11,0,722},{143,0,1},{5,0,33},{6,0,470},{139,0,424},{13= 5,0, -2006},{12,0,783},{135,10,1956},{136,0,274},{135,0,1882},{132,0,794},{135,= 0,1848} -,{5,10,944},{134,10,1769},{6,0,47},{7,0,90},{7,0,664},{7,0,830},{7,0,1380= },{7,0, -2025},{8,0,448},{136,0,828},{132,10,144},{134,0,1199},{4,11,395},{139,11,= 762},{ -135,11,1504},{9,0,417},{137,0,493},{9,11,174},{10,11,164},{11,11,440},{11= ,11,841 -},{143,11,98},{134,11,426},{139,11,1002},{134,0,295},{134,0,816},{6,10,24= 7},{137 -,10,555},{133,0,1019},{4,0,620},{5,11,476},{10,10,280},{138,10,797},{139,= 0,464}, -{5,11,76},{6,11,458},{6,11,497},{7,11,764},{7,11,868},{9,11,658},{10,11,5= 94},{11 -,11,173},{11,11,566},{12,11,20},{12,11,338},{141,11,200},{134,0,208},{4,1= 1,526}, -{7,11,1029},{135,11,1054},{132,11,636},{6,11,233},{7,11,660},{7,11,1124},= {17,11, -31},{19,11,22},{151,11,14},{10,0,442},{133,10,428},{10,0,930},{140,0,778}= ,{6,0, -68},{7,0,448},{7,0,1629},{7,0,1769},{7,0,1813},{8,0,442},{8,0,516},{9,0,7= 10},{10 -,0,282},{10,0,722},{7,10,1717},{138,10,546},{134,0,1128},{11,0,844},{12,0= ,104},{ -140,0,625},{4,11,432},{135,11,824},{138,10,189},{133,0,787},{133,10,99},{= 4,11, -279},{7,11,301},{137,11,362},{8,0,491},{4,10,397},{136,10,555},{4,11,178}= ,{133, -11,399},{134,0,711},{144,0,9},{4,0,403},{5,0,441},{7,0,450},{10,0,840},{1= 1,0,101 -},{12,0,193},{141,0,430},{135,11,1246},{12,10,398},{20,10,39},{21,10,11},= {150,10 -,41},{4,10,485},{7,10,353},{135,10,1523},{6,10,366},{7,10,1384},{7,10,160= 1},{135 -,11,1912},{7,0,396},{10,0,160},{135,11,396},{137,10,282},{134,11,1692},{4= ,10,157 -},{5,10,471},{6,11,202},{10,11,448},{11,11,208},{12,11,360},{17,11,117},{= 17,11, -118},{18,11,27},{148,11,67},{133,0,679},{137,0,326},{136,10,116},{7,11,87= 2},{10, -11,516},{139,11,167},{132,11,224},{5,11,546},{7,11,35},{8,11,11},{8,11,12= },{9,11 -,315},{9,11,533},{10,11,802},{11,11,166},{12,11,525},{142,11,243},{7,0,11= 28},{ -135,11,1920},{5,11,241},{8,11,242},{9,11,451},{10,11,667},{11,11,598},{14= 0,11, -429},{6,0,737},{5,10,160},{7,10,363},{7,10,589},{10,10,170},{141,10,55},{= 135,0, -1796},{142,11,254},{4,0,574},{7,0,350},{7,0,1024},{8,0,338},{9,0,677},{13= 8,0,808 -},{134,0,1096},{137,11,516},{7,0,405},{10,0,491},{4,10,108},{4,11,366},{1= 39,10, -498},{11,11,337},{142,11,303},{134,11,1736},{7,0,1081},{140,11,364},{7,10= ,1005}, -{140,10,609},{7,0,1676},{4,10,895},{133,10,772},{135,0,2037},{6,0,1207},{= 11,11, -916},{142,11,419},{14,11,140},{148,11,41},{6,11,331},{136,11,623},{9,0,94= 4},{9,0 -,969},{9,0,1022},{12,0,913},{12,0,936},{15,0,177},{15,0,193},{4,10,926},{= 133,10, -983},{5,0,354},{135,11,506},{8,0,598},{9,0,664},{138,0,441},{4,11,640},{1= 33,11, -513},{137,0,297},{132,10,538},{6,10,294},{7,10,1267},{136,10,624},{7,0,17= 72},{7, -11,1888},{8,11,289},{11,11,45},{12,11,278},{140,11,537},{135,10,1325},{13= 8,0,751 -},{141,0,37},{134,0,1828},{132,10,757},{132,11,394},{6,0,257},{135,0,1522= },{4,0, -582},{9,0,191},{135,11,1931},{7,11,574},{7,11,1719},{137,11,145},{132,11,= 658},{ -10,0,790},{132,11,369},{9,11,781},{10,11,144},{11,11,385},{13,11,161},{13= ,11,228 -},{13,11,268},{148,11,107},{8,0,469},{10,0,47},{136,11,374},{6,0,306},{7,= 0,1140} -,{7,0,1340},{8,0,133},{138,0,449},{139,0,1011},{7,10,1875},{139,10,124},{= 4,11, -344},{6,11,498},{139,11,323},{137,0,299},{132,0,837},{133,11,906},{5,0,32= 9},{8,0 -,260},{138,0,10},{134,0,1320},{4,0,657},{146,0,158},{135,0,1191},{152,0,7= },{6,0, -1939},{8,0,974},{138,0,996},{135,0,1665},{11,11,126},{139,11,287},{143,0,= 8},{14, -11,149},{14,11,399},{143,11,57},{5,0,66},{7,0,1896},{136,0,288},{7,0,175}= ,{10,0, -494},{5,10,150},{8,10,603},{9,10,593},{9,10,634},{10,10,173},{11,10,462},= {11,10, -515},{13,10,216},{13,10,288},{142,10,400},{134,0,1643},{136,11,21},{4,0,2= 1},{5,0 -,91},{5,0,648},{5,0,750},{5,0,781},{6,0,54},{6,0,112},{6,0,402},{6,0,1732= },{7,0, -315},{7,0,749},{7,0,1427},{7,0,1900},{9,0,78},{9,0,508},{10,0,611},{10,0,= 811},{ -11,0,510},{11,0,728},{13,0,36},{14,0,39},{16,0,83},{17,0,124},{148,0,30},= {4,0, -668},{136,0,570},{10,0,322},{10,0,719},{139,0,407},{135,11,1381},{136,11,= 193},{ -12,10,108},{141,10,291},{132,11,616},{136,11,692},{8,0,125},{8,0,369},{8,= 0,524}, -{10,0,486},{11,0,13},{11,0,381},{11,0,736},{11,0,766},{11,0,845},{13,0,11= 4},{13, -0,292},{142,0,47},{134,0,1247},{6,0,1684},{6,0,1731},{7,0,356},{8,0,54},{= 8,0,221 -},{9,0,225},{9,0,356},{10,0,77},{10,0,446},{10,0,731},{12,0,404},{141,0,4= 91},{ -135,10,1777},{4,11,305},{4,10,493},{144,10,55},{4,0,951},{6,0,1809},{6,0,= 1849},{ -8,0,846},{8,0,866},{8,0,899},{10,0,896},{12,0,694},{142,0,468},{5,11,214}= ,{7,11, -603},{8,11,611},{9,11,686},{10,11,88},{11,11,459},{11,11,496},{12,11,463}= ,{12,11 -,590},{13,11,0},{142,11,214},{132,0,411},{4,0,80},{133,0,44},{140,11,74},= {143,0, -31},{7,0,669},{6,10,568},{7,10,1804},{8,10,362},{8,10,410},{8,10,830},{9,= 10,514} -,{11,10,649},{142,10,157},{7,0,673},{134,11,1703},{132,10,625},{134,0,130= 3},{5,0 -,299},{135,0,1083},{138,0,704},{6,0,275},{7,0,408},{6,10,158},{7,10,129},= {7,10, -181},{8,10,276},{8,10,377},{10,10,523},{11,10,816},{12,10,455},{13,10,303= },{142, -10,135},{4,0,219},{7,0,367},{7,0,1713},{7,0,1761},{9,0,86},{9,0,537},{10,= 0,165}, -{12,0,219},{140,0,561},{8,0,216},{4,10,1},{4,11,737},{6,11,317},{7,10,114= 3},{7, -10,1463},{9,10,207},{9,10,390},{9,10,467},{10,11,98},{11,11,294},{11,10,8= 36},{12 -,11,60},{12,11,437},{13,11,64},{13,11,380},{142,11,430},{6,11,1758},{8,11= ,520},{ -9,11,345},{9,11,403},{142,11,350},{5,11,47},{10,11,242},{138,11,579},{5,1= 1,139}, -{7,11,1168},{138,11,539},{135,0,1319},{4,10,295},{4,10,723},{5,10,895},{7= ,10, -1031},{8,10,199},{8,10,340},{9,10,153},{9,10,215},{10,10,21},{10,10,59},{= 10,10, -80},{10,10,224},{10,10,838},{11,10,229},{11,10,652},{12,10,192},{13,10,14= 6},{142 -,10,91},{140,0,428},{137,10,51},{133,0,514},{5,10,309},{140,10,211},{6,0,= 1010},{ -5,10,125},{8,10,77},{138,10,15},{4,0,55},{5,0,301},{6,0,571},{142,0,49},{= 146,0, -102},{136,11,370},{4,11,107},{7,11,613},{8,11,358},{8,11,439},{8,11,504},= {9,11, -501},{10,11,383},{139,11,477},{132,11,229},{133,0,364},{133,10,439},{4,11= ,903},{ -135,11,1816},{11,0,379},{140,10,76},{4,0,76},{4,0,971},{7,0,1550},{9,0,30= 6},{9,0 -,430},{9,0,663},{10,0,683},{10,0,921},{11,0,427},{11,0,753},{12,0,334},{1= 2,0,442 -},{14,0,258},{14,0,366},{143,0,131},{137,0,52},{4,11,47},{6,11,373},{7,11= ,452},{ -7,11,543},{7,11,1714},{7,11,1856},{9,11,6},{11,11,257},{139,11,391},{4,10= ,8},{7, -10,1152},{7,10,1153},{7,10,1715},{9,10,374},{10,10,478},{139,10,648},{4,1= 1,785}, -{133,11,368},{135,10,1099},{135,11,860},{5,11,980},{134,11,1754},{134,0,1= 258},{6 -,0,1058},{6,0,1359},{7,11,536},{7,11,1331},{136,11,143},{4,0,656},{135,0,= 779},{ -136,10,87},{5,11,19},{6,11,533},{146,11,126},{7,0,144},{138,10,438},{5,11= ,395},{ -5,11,951},{134,11,1776},{135,0,1373},{7,0,554},{7,0,605},{141,0,10},{4,10= ,69},{5 -,10,122},{9,10,656},{138,10,464},{5,10,849},{134,10,1633},{5,0,838},{5,0,= 841},{ -134,0,1649},{133,0,1012},{139,10,499},{7,10,476},{7,10,1592},{138,10,87},= {6,0, -251},{7,0,365},{7,0,1357},{7,0,1497},{8,0,154},{141,0,281},{132,11,441},{= 132,11, -695},{7,11,497},{9,11,387},{147,11,81},{133,0,340},{14,10,283},{142,11,28= 3},{134 -,0,810},{135,11,1894},{139,0,495},{5,11,284},{6,11,49},{6,11,350},{7,11,1= },{7,11 -,377},{7,11,1693},{8,11,18},{8,11,678},{9,11,161},{9,11,585},{9,11,671},{= 9,11, -839},{11,11,912},{141,11,427},{5,10,859},{7,10,1160},{8,10,107},{9,10,291= },{9,10 -,439},{10,10,663},{11,10,609},{140,10,197},{8,0,261},{9,0,144},{9,0,466},= {10,0, -370},{12,0,470},{13,0,144},{142,0,348},{137,0,897},{6,0,248},{9,0,546},{1= 0,0,535 -},{11,0,681},{141,0,135},{4,0,358},{135,0,1496},{134,0,567},{136,0,445},{= 4,10, -117},{6,10,372},{7,10,1905},{142,10,323},{4,10,722},{139,10,471},{6,0,697= },{134, -0,996},{7,11,2007},{9,11,101},{9,11,450},{10,11,66},{10,11,842},{11,11,53= 6},{140 -,11,587},{132,0,577},{134,0,1336},{9,10,5},{12,10,216},{12,10,294},{12,10= ,298},{ -12,10,400},{12,10,518},{13,10,229},{143,10,139},{6,0,174},{138,0,917},{13= 4,10, -1774},{5,10,12},{7,10,375},{9,10,88},{9,10,438},{11,11,62},{139,10,270},{= 134,11, -1766},{6,11,0},{7,11,84},{7,10,816},{7,10,1241},{9,10,283},{9,10,520},{10= ,10,213 -},{10,10,307},{10,10,463},{10,10,671},{10,10,746},{11,10,401},{11,10,794}= ,{11,11 -,895},{12,10,517},{17,11,11},{18,10,107},{147,10,115},{5,0,878},{133,0,97= 2},{6, -11,1665},{7,11,256},{7,11,1388},{138,11,499},{4,10,258},{136,10,639},{4,1= 1,22},{ -5,11,10},{6,10,22},{7,11,848},{7,10,903},{7,10,1963},{8,11,97},{138,10,57= 7},{5, -10,681},{136,10,782},{133,11,481},{132,0,351},{4,10,664},{5,10,804},{139,= 10,1013 -},{6,11,134},{7,11,437},{7,11,959},{9,11,37},{14,11,285},{14,11,371},{144= ,11,60} -,{7,11,486},{8,11,155},{11,11,93},{140,11,164},{132,0,286},{7,0,438},{7,0= ,627},{ -7,0,1516},{8,0,40},{9,0,56},{9,0,294},{10,0,30},{11,0,969},{11,0,995},{14= 6,0,148 -},{5,11,591},{135,11,337},{134,0,1950},{133,10,32},{138,11,500},{5,11,380= },{5,11 -,650},{136,11,310},{4,11,364},{7,11,1156},{7,11,1187},{137,11,409},{4,0,7= 38},{ -134,11,482},{4,11,781},{6,11,487},{7,11,926},{8,11,263},{139,11,500},{135= ,11,418 -},{6,0,2047},{10,0,969},{4,10,289},{7,10,629},{7,10,1698},{7,10,1711},{14= 0,10, -215},{6,10,450},{136,10,109},{134,0,818},{136,10,705},{133,0,866},{4,11,9= 4},{135 -,11,1265},{132,11,417},{134,0,1467},{135,10,1238},{4,0,972},{6,0,1851},{1= 34,0, -1857},{134,0,355},{133,0,116},{132,0,457},{135,11,1411},{4,11,408},{4,11,= 741},{ -135,11,500},{134,10,26},{142,11,137},{5,0,527},{6,0,189},{7,0,859},{136,0= ,267},{ -11,0,104},{11,0,554},{15,0,60},{143,0,125},{134,0,1613},{4,10,414},{5,10,= 467},{9 -,10,654},{10,10,451},{12,10,59},{141,10,375},{135,10,17},{134,0,116},{135= ,11,541 -},{135,10,955},{6,11,73},{135,11,177},{133,11,576},{134,0,886},{133,0,487= },{4,0, -86},{5,0,667},{5,0,753},{6,0,316},{6,0,455},{135,0,946},{142,11,231},{150= ,0,45}, -{134,0,863},{134,0,1953},{6,10,280},{10,10,502},{11,10,344},{140,10,38},{= 4,0,79} -,{7,0,1773},{10,0,450},{11,0,589},{13,0,332},{13,0,493},{14,0,183},{14,0,= 334},{ -14,0,362},{14,0,368},{14,0,376},{14,0,379},{19,0,90},{19,0,103},{19,0,127= },{148, -0,90},{5,10,45},{7,10,1161},{11,10,448},{11,10,880},{13,10,139},{13,10,40= 7},{15, -10,16},{17,10,95},{18,10,66},{18,10,88},{18,10,123},{149,10,7},{136,10,77= 7},{4, -10,410},{135,10,521},{135,10,1778},{135,11,538},{142,0,381},{133,11,413},= {134,0, -1142},{6,0,1189},{136,11,495},{5,0,663},{6,0,1962},{134,0,2003},{7,11,54}= ,{8,11, -312},{10,11,191},{10,11,614},{140,11,567},{132,10,436},{133,0,846},{10,0,= 528},{ -11,0,504},{7,10,1587},{135,10,1707},{5,0,378},{8,0,465},{9,0,286},{10,0,1= 85},{10 -,0,562},{10,0,635},{11,0,31},{11,0,393},{13,0,312},{18,0,65},{18,0,96},{1= 47,0,89 -},{7,0,899},{14,0,325},{6,11,468},{7,11,567},{7,11,1478},{8,11,530},{142,= 11,290} -,{7,0,1880},{9,0,680},{139,0,798},{134,0,1770},{132,0,648},{150,11,35},{5= ,0,945} -,{6,0,1656},{6,0,1787},{7,0,167},{8,0,824},{9,0,391},{10,0,375},{139,0,18= 5},{6, -11,484},{135,11,822},{134,0,2046},{7,0,1645},{8,0,352},{137,0,249},{132,0= ,152},{ -6,0,611},{135,0,1733},{6,11,1724},{135,11,2022},{133,0,1006},{141,11,96},= {5,0, -420},{135,0,1449},{146,11,149},{135,0,832},{135,10,663},{133,0,351},{5,0,= 40},{7, -0,598},{7,0,1638},{8,0,78},{9,0,166},{9,0,640},{9,0,685},{9,0,773},{11,0,= 215},{ -13,0,65},{14,0,172},{14,0,317},{145,0,6},{8,0,60},{9,0,343},{139,0,769},{= 134,0, -1354},{132,0,724},{137,0,745},{132,11,474},{7,0,1951},{8,0,765},{8,0,772}= ,{140,0 -,671},{7,0,108},{8,0,219},{8,0,388},{9,0,775},{11,0,275},{140,0,464},{137= ,0,639} -,{135,10,503},{133,11,366},{5,0,15},{6,0,56},{7,0,1758},{8,0,500},{9,0,73= 0},{11, -0,331},{13,0,150},{14,0,282},{5,11,305},{9,11,560},{141,11,208},{4,10,113= },{5,10 -,163},{5,10,735},{7,10,1009},{9,10,9},{9,10,771},{12,10,90},{13,10,138},{= 13,10, -410},{143,10,128},{4,10,324},{138,10,104},{135,11,466},{142,11,27},{134,0= ,1886}, -{5,0,205},{6,0,438},{9,0,711},{4,11,480},{6,11,167},{6,11,302},{6,11,1642= },{7,11 -,130},{7,11,656},{7,11,837},{7,11,1547},{7,11,1657},{8,11,429},{9,11,228}= ,{10,11 -,643},{13,11,289},{13,11,343},{147,11,101},{134,0,865},{6,0,2025},{136,0,= 965},{7 -,11,278},{10,11,739},{11,11,708},{141,11,348},{133,0,534},{135,11,1922},{= 137,0, -691},{4,10,935},{133,10,823},{6,0,443},{9,0,237},{9,0,571},{9,0,695},{10,= 0,139}, -{11,0,715},{12,0,417},{141,0,421},{5,10,269},{7,10,434},{7,10,891},{8,10,= 339},{9 -,10,702},{11,10,594},{11,10,718},{145,10,100},{6,0,1555},{7,0,878},{9,10,= 485},{ -141,10,264},{134,10,1713},{7,10,1810},{11,10,866},{12,10,103},{141,10,495= },{135, -10,900},{6,0,1410},{9,11,316},{139,11,256},{4,0,995},{135,0,1033},{132,0,= 578},{ -10,0,881},{12,0,740},{12,0,743},{140,0,759},{132,0,822},{133,0,923},{142,= 10,143} -,{135,11,1696},{6,11,363},{7,11,1955},{136,11,725},{132,0,924},{133,0,665= },{135, -10,2029},{135,0,1901},{4,0,265},{6,0,1092},{6,0,1417},{7,0,807},{135,0,95= 0},{5,0 -,93},{12,0,267},{141,0,498},{135,0,1451},{5,11,813},{135,11,2046},{5,10,6= 25},{ -135,10,1617},{135,0,747},{6,0,788},{137,0,828},{7,0,184},{11,0,307},{11,0= ,400},{ -15,0,130},{5,11,712},{7,11,1855},{8,10,425},{8,10,693},{9,10,720},{10,10,= 380},{ -10,10,638},{11,11,17},{11,10,473},{12,10,61},{13,11,321},{144,11,67},{135= ,0,198} -,{6,11,320},{7,11,781},{7,11,1921},{9,11,55},{10,11,186},{10,11,273},{10,= 11,664} -,{10,11,801},{11,11,996},{11,11,997},{13,11,157},{142,11,170},{136,11,271= },{135, -0,994},{7,11,103},{7,11,863},{11,11,184},{14,11,299},{145,11,62},{11,10,5= 51},{ -142,10,159},{5,0,233},{5,0,320},{6,0,140},{8,0,295},{8,0,615},{136,11,615= },{133, -0,978},{4,0,905},{6,0,1701},{137,0,843},{132,10,168},{4,0,974},{8,0,850},= {12,0, -709},{12,0,768},{140,0,786},{135,10,91},{152,0,6},{138,10,532},{135,10,18= 84},{ -132,0,509},{6,0,1307},{135,0,273},{5,11,77},{7,11,1455},{10,11,843},{19,1= 1,73},{ -150,11,5},{132,11,458},{135,11,1420},{6,11,109},{138,11,382},{6,0,201},{6= ,11,330 -},{7,10,70},{7,11,1084},{10,10,240},{11,11,142},{147,10,93},{7,0,1041},{1= 40,11, -328},{133,11,354},{134,0,1040},{133,0,693},{134,0,774},{139,0,234},{132,0= ,336},{ -7,0,1399},{139,10,392},{20,0,22},{148,11,22},{5,0,802},{7,0,2021},{136,0,= 805},{5 -,0,167},{5,0,899},{6,0,410},{137,0,777},{137,0,789},{134,0,1705},{7,10,65= 5},{135 -,10,1844},{4,10,145},{6,10,176},{7,10,395},{137,10,562},{132,10,501},{135= ,0,10}, -{5,0,11},{6,0,117},{6,0,485},{7,0,1133},{9,0,582},{9,0,594},{10,0,82},{11= ,0,21}, -{11,0,818},{12,0,535},{13,0,86},{20,0,91},{23,0,13},{134,10,509},{4,0,264= },{7,0, -1067},{8,0,204},{8,0,385},{139,0,953},{139,11,737},{138,0,56},{134,0,1917= },{133, -0,470},{10,11,657},{14,11,297},{142,11,361},{135,11,412},{7,0,1198},{7,11= ,1198}, -{8,11,556},{14,11,123},{14,11,192},{143,11,27},{7,11,1985},{14,11,146},{1= 5,11,42 -},{16,11,23},{17,11,86},{146,11,17},{11,0,1015},{136,11,122},{4,10,114},{= 9,10, -492},{13,10,462},{142,10,215},{4,10,77},{5,10,361},{6,10,139},{6,10,401},= {6,10, -404},{7,10,413},{7,10,715},{7,10,1716},{11,10,279},{12,10,179},{12,10,258= },{13, -10,244},{142,10,358},{134,10,1717},{7,10,1061},{8,10,82},{11,10,250},{12,= 10,420} -,{141,10,184},{133,0,715},{135,10,724},{9,0,919},{9,0,922},{9,0,927},{9,0= ,933},{ -9,0,962},{9,0,1000},{9,0,1002},{9,0,1021},{12,0,890},{12,0,907},{12,0,930= },{15,0 -,207},{15,0,228},{15,0,238},{149,0,61},{8,0,794},{9,0,400},{10,0,298},{14= 2,0,228 -},{5,11,430},{5,11,932},{6,11,131},{7,11,417},{9,11,522},{11,11,314},{141= ,11,390 -},{132,0,867},{8,0,724},{132,11,507},{137,11,261},{4,11,343},{133,11,511}= ,{6,0, -190},{7,0,768},{135,0,1170},{6,10,513},{135,10,1052},{7,11,455},{138,11,5= 91},{ -134,0,1066},{137,10,899},{14,0,67},{147,0,60},{4,0,948},{18,0,174},{146,0= ,176},{ -135,0,1023},{7,10,1417},{12,10,382},{17,10,48},{152,10,12},{134,11,575},{= 132,0, -764},{6,10,545},{7,10,565},{7,10,1669},{10,10,114},{11,10,642},{140,10,61= 8},{6,0 -,137},{9,0,75},{9,0,253},{10,0,194},{138,0,444},{4,0,756},{133,10,5},{8,0= ,1008}, -{135,10,192},{132,0,842},{11,0,643},{12,0,115},{136,10,763},{139,0,67},{1= 33,10, -759},{4,0,821},{5,0,760},{7,0,542},{8,0,135},{8,0,496},{135,11,580},{7,10= ,370},{ -7,10,1007},{7,10,1177},{135,10,1565},{135,10,1237},{140,0,736},{7,0,319},= {7,0, -355},{7,0,763},{10,0,389},{145,0,43},{8,11,333},{138,11,182},{4,10,87},{5= ,10,250 -},{141,10,298},{138,0,786},{134,0,2044},{8,11,330},{140,11,477},{135,11,1= 338},{ -132,11,125},{134,0,1030},{134,0,1083},{132,11,721},{135,10,814},{7,11,776= },{8,11 -,145},{147,11,56},{134,0,1226},{4,10,57},{7,10,1195},{7,10,1438},{7,10,15= 48},{7, -10,1835},{7,10,1904},{9,10,757},{10,10,604},{139,10,519},{7,11,792},{8,11= ,147},{ -10,11,821},{139,11,1021},{137,11,797},{4,0,58},{5,0,286},{6,0,319},{7,0,4= 02},{7, -0,1254},{7,0,1903},{8,0,356},{140,0,408},{4,0,389},{4,0,815},{9,0,181},{9= ,0,255} -,{10,0,8},{10,0,29},{10,0,816},{11,0,311},{11,0,561},{12,0,67},{141,0,181= },{7,11 -,1472},{135,11,1554},{7,11,1071},{7,11,1541},{7,11,1767},{7,11,1806},{7,1= 1,1999} -,{9,11,248},{10,11,400},{11,11,162},{11,11,178},{11,11,242},{12,11,605},{= 15,11, -26},{144,11,44},{5,11,168},{5,11,930},{8,11,74},{9,11,623},{12,11,500},{1= 2,11, -579},{13,11,41},{143,11,93},{6,11,220},{7,11,1101},{141,11,105},{5,0,474}= ,{7,0, -507},{4,10,209},{7,11,507},{135,10,902},{132,0,427},{6,0,413},{7,10,335},= {7,10, -1437},{7,10,1668},{8,10,553},{8,10,652},{8,10,656},{9,10,558},{11,10,743}= ,{149, -10,18},{132,0,730},{6,11,19},{7,11,1413},{139,11,428},{133,0,373},{132,10= ,559},{ -7,11,96},{8,11,401},{137,11,896},{7,0,799},{7,0,1972},{5,10,1017},{138,10= ,511},{ -135,0,1793},{7,11,1961},{7,11,1965},{8,11,702},{136,11,750},{8,11,150},{8= ,11,737 -},{140,11,366},{132,0,322},{133,10,709},{8,11,800},{9,11,148},{9,11,872},= {9,11, -890},{11,11,309},{11,11,1001},{13,11,267},{141,11,323},{134,10,1745},{7,0= ,290},{ -136,10,206},{7,0,1651},{145,0,89},{139,0,2},{132,0,672},{6,0,1860},{8,0,9= 05},{10 -,0,844},{10,0,846},{10,0,858},{12,0,699},{12,0,746},{140,0,772},{135,11,4= 24},{ -133,11,547},{133,0,737},{5,11,490},{6,11,615},{6,11,620},{135,11,683},{6,= 0,746}, -{134,0,1612},{132,10,776},{9,11,385},{149,11,17},{133,0,145},{135,10,1272= },{7,0, -884},{140,0,124},{4,0,387},{135,0,1288},{5,11,133},{136,10,406},{136,11,1= 87},{6, -0,679},{8,11,8},{138,11,0},{135,0,550},{135,11,798},{136,11,685},{7,11,10= 86},{ -145,11,46},{8,10,175},{10,10,168},{138,10,573},{135,0,1305},{4,0,576},{13= 5,0, -1263},{6,0,686},{134,0,1563},{134,0,607},{5,0,919},{134,0,1673},{148,0,37= },{8,11 -,774},{10,11,670},{140,11,51},{133,10,784},{139,10,882},{4,0,82},{5,0,333= },{5,0, -904},{6,0,207},{7,0,325},{7,0,1726},{8,0,101},{10,0,778},{139,0,220},{135= ,11,371 -},{132,0,958},{133,0,903},{4,11,127},{5,11,350},{6,11,356},{8,11,426},{9,= 11,572} -,{10,11,247},{139,11,312},{140,0,147},{6,11,59},{7,11,885},{9,11,603},{14= 1,11, -397},{10,0,367},{9,10,14},{9,10,441},{139,10,9},{11,10,966},{12,10,287},{= 13,10, -342},{13,10,402},{15,10,110},{143,10,163},{134,0,690},{132,0,705},{9,0,65= 1},{11, -0,971},{13,0,273},{7,10,1428},{7,10,1640},{7,10,1867},{9,10,169},{9,10,18= 2},{9, -10,367},{9,10,478},{9,10,506},{9,10,551},{9,10,557},{9,10,648},{9,10,697}= ,{9,10, -705},{9,10,725},{9,10,787},{9,10,794},{10,10,198},{10,10,214},{10,10,267}= ,{10,10 -,275},{10,10,456},{10,10,551},{10,10,561},{10,10,613},{10,10,627},{10,10,= 668},{ -10,10,675},{10,10,691},{10,10,695},{10,10,707},{10,10,715},{11,10,183},{1= 1,10, -201},{11,10,262},{11,10,352},{11,10,439},{11,10,493},{11,10,572},{11,10,5= 91},{11 -,10,608},{11,10,611},{11,10,646},{11,10,674},{11,10,711},{11,10,751},{11,= 10,761} -,{11,10,776},{11,10,785},{11,10,850},{11,10,853},{11,10,862},{11,10,865},= {11,10, -868},{11,10,875},{11,10,898},{11,10,902},{11,10,903},{11,10,910},{11,10,9= 32},{11 -,10,942},{11,10,957},{11,10,967},{11,10,972},{12,10,148},{12,10,195},{12,= 10,220} -,{12,10,237},{12,10,318},{12,10,339},{12,10,393},{12,10,445},{12,10,450},= {12,10, -474},{12,10,505},{12,10,509},{12,10,533},{12,10,591},{12,10,594},{12,10,5= 97},{12 -,10,621},{12,10,633},{12,10,642},{13,10,59},{13,10,60},{13,10,145},{13,10= ,239},{ -13,10,250},{13,10,329},{13,10,344},{13,10,365},{13,10,372},{13,10,387},{1= 3,10, -403},{13,10,414},{13,10,456},{13,10,470},{13,10,478},{13,10,483},{13,10,4= 89},{14 -,10,55},{14,10,57},{14,10,81},{14,10,90},{14,10,148},{14,10,239},{14,10,2= 66},{14 -,10,321},{14,10,326},{14,10,327},{14,10,330},{14,10,347},{14,10,355},{14,= 10,401} -,{14,10,404},{14,10,411},{14,10,414},{14,10,416},{14,10,420},{15,10,61},{= 15,10, -74},{15,10,87},{15,10,88},{15,10,94},{15,10,96},{15,10,116},{15,10,149},{= 15,10, -154},{16,10,50},{16,10,63},{16,10,73},{17,10,2},{17,10,66},{17,10,92},{17= ,10,103 -},{17,10,112},{17,10,120},{18,10,50},{18,10,54},{18,10,82},{18,10,86},{18= ,10,90} -,{18,10,111},{18,10,115},{18,10,156},{19,10,40},{19,10,79},{20,10,78},{14= 9,10,22 -},{7,0,887},{5,10,161},{135,10,839},{142,11,98},{134,0,90},{138,11,356},{= 135,11, -441},{6,11,111},{7,11,4},{8,11,163},{8,11,776},{138,11,566},{134,0,908},{= 134,0, -1261},{7,0,813},{12,0,497},{141,0,56},{134,0,1235},{135,0,429},{135,11,19= 94},{ -138,0,904},{6,0,125},{7,0,1277},{137,0,772},{151,0,12},{4,0,841},{5,0,386= },{133, -11,386},{5,11,297},{135,11,1038},{6,0,860},{6,0,1069},{135,11,309},{136,0= ,946},{ -135,10,1814},{141,11,418},{136,11,363},{10,0,768},{139,0,787},{22,11,30},= {150,11 -,33},{6,0,160},{7,0,1106},{9,0,770},{11,0,112},{140,0,413},{11,11,216},{1= 39,11, -340},{136,10,139},{135,11,1390},{135,11,808},{132,11,280},{12,0,271},{17,= 0,109}, -{7,10,643},{136,10,236},{140,11,54},{4,11,421},{133,11,548},{11,0,719},{1= 2,0,36} -,{141,0,337},{7,0,581},{9,0,644},{137,0,699},{11,11,511},{13,11,394},{14,= 11,298} -,{14,11,318},{146,11,103},{7,0,304},{9,0,646},{9,0,862},{11,0,696},{12,0,= 208},{ -15,0,79},{147,0,108},{4,0,631},{7,0,1126},{135,0,1536},{135,11,1527},{8,0= ,880},{ -10,0,869},{138,0,913},{7,0,1513},{5,10,54},{6,11,254},{9,11,109},{138,11,= 103},{ -135,0,981},{133,11,729},{132,10,744},{132,0,434},{134,0,550},{7,0,930},{1= 0,0,476 -},{13,0,452},{19,0,104},{6,11,1630},{10,10,402},{146,10,55},{5,0,553},{13= 8,0,824 -},{136,0,452},{8,0,151},{137,10,624},{132,10,572},{132,0,772},{133,11,671= },{133, -0,292},{138,0,135},{132,11,889},{140,11,207},{9,0,504},{6,10,43},{7,10,38= },{8,10 -,248},{138,10,513},{6,0,1089},{135,11,1910},{4,11,627},{133,11,775},{135,= 0,783}, -{133,10,766},{133,10,363},{7,0,387},{135,11,387},{7,0,393},{10,0,603},{11= ,0,206} -,{7,11,202},{11,11,362},{11,11,948},{140,11,388},{6,11,507},{7,11,451},{8= ,11,389 -},{12,11,490},{13,11,16},{13,11,215},{13,11,351},{18,11,132},{147,11,125}= ,{4,0, -912},{9,0,232},{135,11,841},{6,10,258},{140,10,409},{5,10,249},{148,10,82= },{136, -11,566},{6,0,977},{135,11,1214},{7,0,1973},{136,0,716},{135,0,98},{133,0,= 733},{5 -,11,912},{134,11,1695},{5,10,393},{6,10,378},{7,10,1981},{9,10,32},{9,10,= 591},{ -10,10,685},{10,10,741},{142,10,382},{133,10,788},{10,0,19},{11,0,911},{7,= 10,1968 -},{141,10,509},{5,0,668},{5,11,236},{6,11,572},{8,11,492},{11,11,618},{14= 4,11,56 -},{135,11,1789},{4,0,360},{5,0,635},{5,0,700},{5,10,58},{5,10,171},{5,10,= 683},{6 -,10,291},{6,10,566},{7,10,1650},{11,10,523},{12,10,273},{12,10,303},{15,1= 0,39},{ -143,10,111},{133,0,901},{134,10,589},{5,11,190},{136,11,318},{140,0,656},= {7,0, -726},{152,0,9},{4,10,917},{133,10,1005},{135,10,1598},{134,11,491},{4,10,= 919},{ -133,11,434},{137,0,72},{6,0,1269},{6,0,1566},{134,0,1621},{9,0,463},{10,0= ,595},{ -4,10,255},{5,10,302},{6,10,132},{7,10,128},{7,10,283},{7,10,1299},{10,10,= 52},{10 -,10,514},{11,10,925},{13,10,92},{142,10,309},{135,0,1454},{134,0,1287},{1= 1,0,600 -},{13,0,245},{137,10,173},{136,0,989},{7,0,164},{7,0,1571},{9,0,107},{140= ,0,225} -,{6,0,1061},{141,10,442},{4,0,27},{5,0,484},{5,0,510},{6,0,434},{7,0,1000= },{7,0, -1098},{136,0,2},{7,11,85},{7,11,247},{8,11,585},{10,11,163},{138,11,316},= {11,11, -103},{142,11,0},{134,0,1127},{4,0,460},{134,0,852},{134,10,210},{4,0,932}= ,{133,0 -,891},{6,0,588},{147,11,83},{8,0,625},{4,10,284},{134,10,223},{134,0,76},= {8,0,92 -},{137,0,221},{4,11,124},{10,11,457},{11,11,121},{11,11,169},{11,11,422},= {11,11, -870},{12,11,214},{13,11,389},{14,11,187},{143,11,77},{9,11,618},{138,11,4= 82},{4, -10,218},{7,10,526},{143,10,137},{13,0,9},{14,0,104},{14,0,311},{4,10,270}= ,{5,10, -192},{6,10,332},{135,10,1322},{140,10,661},{135,11,1193},{6,11,107},{7,11= ,638},{ -7,11,1632},{137,11,396},{132,0,763},{4,0,622},{5,11,370},{134,11,1756},{1= 33,0, -253},{135,0,546},{9,0,73},{10,0,110},{14,0,185},{17,0,119},{133,11,204},{= 7,0,624 -},{7,0,916},{10,0,256},{139,0,87},{7,10,379},{8,10,481},{137,10,377},{5,0= ,212},{ -12,0,35},{13,0,382},{5,11,970},{134,11,1706},{9,0,746},{5,10,1003},{134,1= 0,149}, -{10,0,150},{11,0,849},{13,0,330},{8,10,262},{9,10,627},{11,10,214},{11,10= ,404},{ -11,10,457},{11,10,780},{11,10,913},{13,10,401},{142,10,200},{134,0,1466},= {135,11 -,3},{6,0,1299},{4,11,35},{5,11,121},{5,11,483},{5,11,685},{6,11,489},{7,1= 1,1204} -,{136,11,394},{135,10,742},{4,10,142},{136,10,304},{4,11,921},{133,11,100= 7},{134 -,0,1518},{6,0,1229},{135,0,1175},{133,0,816},{12,0,159},{4,10,471},{4,11,= 712},{5 -,10,51},{6,10,602},{7,10,925},{8,10,484},{138,10,195},{134,11,1629},{5,0,= 869},{5 -,0,968},{6,0,1626},{8,0,734},{136,0,784},{4,0,542},{6,0,1716},{6,0,1727},= {7,0, -1082},{7,0,1545},{8,0,56},{8,0,118},{8,0,412},{8,0,564},{9,0,888},{9,0,90= 8},{10, -0,50},{10,0,423},{11,0,685},{11,0,697},{11,0,933},{12,0,299},{13,0,126},{= 13,0, -136},{13,0,170},{13,0,190},{136,10,688},{132,10,697},{4,0,232},{9,0,202},= {10,0, -474},{140,0,433},{136,0,212},{6,0,108},{7,0,1003},{7,0,1181},{8,0,111},{1= 36,0, -343},{5,10,221},{135,11,1255},{133,11,485},{134,0,1712},{142,0,216},{5,0,= 643},{6 -,0,516},{4,11,285},{5,11,317},{6,11,301},{7,11,7},{8,11,153},{10,11,766},= {11,11, -468},{12,11,467},{141,11,143},{4,0,133},{7,0,711},{7,0,1298},{135,0,1585}= ,{134,0 -,650},{135,11,512},{6,0,99},{7,0,1808},{145,0,57},{6,0,246},{6,0,574},{7,= 0,428}, -{9,0,793},{10,0,669},{11,0,485},{11,0,840},{12,0,300},{14,0,250},{145,0,5= 5},{4, -10,132},{5,10,69},{135,10,1242},{136,0,1023},{7,0,302},{132,10,111},{135,= 0,1871} -,{132,0,728},{9,0,252},{132,10,767},{6,0,461},{7,0,1590},{7,10,1416},{7,1= 0,2005} -,{8,10,131},{8,10,466},{9,10,672},{13,10,252},{148,10,103},{6,0,323},{135= ,0,1564 -},{7,0,461},{136,0,775},{6,10,44},{136,10,368},{139,0,172},{132,0,464},{4= ,10,570 -},{133,10,120},{137,11,269},{6,10,227},{135,10,1589},{6,11,1719},{6,11,17= 35},{7, -11,2016},{7,11,2020},{8,11,837},{137,11,852},{7,0,727},{146,0,73},{132,0,= 1023},{ -135,11,852},{135,10,1529},{136,0,577},{138,11,568},{134,0,1037},{8,11,67}= ,{138, -11,419},{4,0,413},{5,0,677},{8,0,432},{140,0,280},{10,0,600},{6,10,1667},= {7,11, -967},{7,10,2036},{141,11,11},{6,10,511},{140,10,132},{6,0,799},{5,10,568}= ,{6,10, -138},{135,10,1293},{8,0,159},{4,10,565},{136,10,827},{7,0,646},{7,0,1730}= ,{11,0, -446},{141,0,178},{4,10,922},{133,10,1023},{135,11,11},{132,0,395},{11,0,1= 45},{ -135,10,1002},{9,0,174},{10,0,164},{11,0,440},{11,0,514},{11,0,841},{15,0,= 98},{ -149,0,20},{134,0,426},{10,0,608},{139,0,1002},{7,11,320},{8,11,51},{12,11= ,481},{ -12,11,570},{148,11,106},{9,0,977},{9,0,983},{132,11,445},{138,0,250},{139= ,0,100} -,{6,0,1982},{136,10,402},{133,11,239},{4,10,716},{141,10,31},{5,0,476},{7= ,11,83} -,{7,11,1990},{8,11,130},{139,11,720},{8,10,691},{136,10,731},{5,11,123},{= 6,11, -530},{7,11,348},{135,11,1419},{5,0,76},{6,0,458},{6,0,497},{7,0,868},{9,0= ,658},{ -10,0,594},{11,0,173},{11,0,566},{12,0,20},{12,0,338},{141,0,200},{9,11,13= 9},{10, -11,399},{11,11,469},{12,11,634},{141,11,223},{9,10,840},{138,10,803},{133= ,10,847 -},{11,11,223},{140,11,168},{132,11,210},{8,0,447},{9,10,53},{9,10,268},{9= ,10,901 -},{10,10,518},{10,10,829},{11,10,188},{13,10,74},{14,10,46},{15,10,17},{1= 5,10,33 -},{17,10,40},{18,10,36},{19,10,20},{22,10,1},{152,10,2},{4,0,526},{7,0,10= 29},{ -135,0,1054},{19,11,59},{150,11,2},{4,0,636},{6,0,1875},{6,0,1920},{9,0,99= 9},{12, -0,807},{12,0,825},{15,0,179},{15,0,190},{18,0,182},{136,10,532},{6,0,1699= },{7,0, -660},{7,0,1124},{17,0,31},{19,0,22},{151,0,14},{135,10,681},{132,11,430},= {140,10 -,677},{4,10,684},{136,10,384},{132,11,756},{133,11,213},{7,0,188},{7,10,1= 10},{8, -10,290},{8,10,591},{9,10,382},{9,10,649},{11,10,71},{11,10,155},{11,10,31= 3},{12, -10,5},{13,10,325},{142,10,287},{7,10,360},{7,10,425},{9,10,66},{9,10,278}= ,{138, -10,644},{142,11,164},{4,0,279},{7,0,301},{137,0,362},{134,11,586},{135,0,= 1743},{ -4,0,178},{133,0,399},{4,10,900},{133,10,861},{5,10,254},{7,10,985},{136,1= 0,73},{ -133,11,108},{7,10,1959},{136,10,683},{133,11,219},{4,11,193},{5,11,916},{= 7,11, -364},{10,11,398},{10,11,726},{11,11,317},{11,11,626},{12,11,142},{12,11,2= 88},{12 -,11,678},{13,11,313},{15,11,113},{18,11,114},{21,11,30},{150,11,53},{6,11= ,241},{ -7,11,907},{8,11,832},{9,11,342},{10,11,729},{11,11,284},{11,11,445},{11,1= 1,651}, -{11,11,863},{13,11,398},{146,11,99},{132,0,872},{134,0,831},{134,0,1692},= {6,0, -202},{6,0,1006},{9,0,832},{10,0,636},{11,0,208},{12,0,360},{17,0,118},{18= ,0,27}, -{20,0,67},{137,11,734},{132,10,725},{7,11,993},{138,11,666},{134,0,1954},= {134,10 -,196},{7,0,872},{10,0,516},{139,0,167},{133,10,831},{4,11,562},{9,11,254}= ,{139, -11,879},{137,0,313},{4,0,224},{132,11,786},{11,0,24},{12,0,170},{136,10,7= 23},{5, -0,546},{7,0,35},{8,0,11},{8,0,12},{9,0,315},{9,0,533},{10,0,802},{11,0,16= 6},{12, -0,525},{142,0,243},{7,0,1937},{13,10,80},{13,10,437},{145,10,74},{5,0,241= },{8,0, -242},{9,0,451},{10,0,667},{11,0,598},{140,0,429},{150,0,46},{6,0,1273},{1= 37,0, -830},{5,10,848},{6,10,66},{136,10,764},{6,0,825},{134,0,993},{4,0,1006},{= 10,0, -327},{13,0,271},{4,10,36},{7,10,1387},{139,10,755},{134,0,1023},{135,0,15= 80},{4, -0,366},{137,0,516},{132,10,887},{6,0,1736},{135,0,1891},{6,11,216},{7,11,= 901},{7 -,11,1343},{136,11,493},{6,10,165},{138,10,388},{7,11,341},{139,11,219},{4= ,10,719 -},{135,10,155},{134,0,1935},{132,0,826},{6,0,331},{6,0,1605},{8,0,623},{1= 1,0,139 -},{139,0,171},{135,11,1734},{10,11,115},{11,11,420},{12,11,154},{13,11,40= 4},{14, -11,346},{15,11,54},{143,11,112},{7,0,288},{4,10,353},{6,10,146},{6,10,178= 9},{7, -10,990},{7,10,1348},{9,10,665},{9,10,898},{11,10,893},{142,10,212},{6,0,9= 16},{ -134,0,1592},{7,0,1888},{4,10,45},{135,10,1257},{5,11,1011},{136,11,701},{= 139,11, -596},{4,11,54},{5,11,666},{7,11,1039},{7,11,1130},{9,11,195},{138,11,302}= ,{134,0 -,1471},{134,0,1570},{132,0,394},{140,10,65},{136,10,816},{135,0,1931},{7,= 0,574}, -{135,0,1719},{134,11,467},{132,0,658},{9,0,781},{10,0,144},{11,0,385},{13= ,0,161} -,{13,0,228},{13,0,268},{20,0,107},{134,11,1669},{136,0,374},{135,0,735},{= 4,0,344 -},{6,0,498},{139,0,323},{7,0,586},{7,0,1063},{6,10,559},{134,10,1691},{13= 7,0,155 -},{133,0,906},{7,11,122},{9,11,259},{10,11,84},{11,11,470},{12,11,541},{1= 41,11, -379},{134,0,1139},{10,0,108},{139,0,116},{134,10,456},{133,10,925},{5,11,= 82},{5, -11,131},{7,11,1755},{8,11,31},{9,11,168},{9,11,764},{139,11,869},{134,11,= 605},{5 -,11,278},{137,11,68},{4,11,163},{5,11,201},{5,11,307},{5,11,310},{6,11,33= 5},{7, -11,284},{136,11,165},{135,11,1660},{6,11,33},{135,11,1244},{4,0,616},{136= ,11,483 -},{8,0,857},{8,0,902},{8,0,910},{10,0,879},{12,0,726},{4,11,199},{139,11,= 34},{ -136,0,692},{6,10,193},{7,10,240},{7,10,1682},{10,10,51},{10,10,640},{11,1= 0,410}, -{13,10,82},{14,10,247},{14,10,331},{142,10,377},{6,0,823},{134,0,983},{13= 9,10, -411},{132,0,305},{136,10,633},{138,11,203},{134,0,681},{6,11,326},{7,11,6= 77},{ -137,11,425},{5,0,214},{7,0,603},{8,0,611},{9,0,686},{10,0,88},{11,0,459},= {11,0, -496},{12,0,463},{12,0,590},{141,0,0},{136,0,1004},{142,0,23},{134,0,1703}= ,{147, -11,8},{145,11,56},{135,0,1443},{4,10,237},{135,10,514},{6,0,714},{145,0,1= 9},{5, -11,358},{7,11,473},{7,11,1184},{10,11,662},{13,11,212},{13,11,304},{13,11= ,333},{ -145,11,98},{4,0,737},{10,0,98},{11,0,294},{12,0,60},{12,0,437},{13,0,64},= {13,0, -380},{142,0,430},{6,10,392},{7,10,65},{135,10,2019},{6,0,1758},{8,0,520},= {9,0, -345},{9,0,403},{142,0,350},{5,0,47},{10,0,242},{138,0,579},{5,0,139},{7,0= ,1168}, -{138,0,539},{134,0,1459},{13,0,388},{141,11,388},{134,0,253},{7,10,1260},= {135,10 -,1790},{10,0,252},{9,10,222},{139,10,900},{140,0,745},{133,11,946},{4,0,1= 07},{7, -0,613},{8,0,439},{8,0,504},{9,0,501},{10,0,383},{139,0,477},{135,11,1485}= ,{132,0 -,871},{7,11,411},{7,11,590},{8,11,631},{9,11,323},{10,11,355},{11,11,491}= ,{12,11 -,143},{12,11,402},{13,11,73},{14,11,408},{15,11,107},{146,11,71},{132,0,2= 29},{ -132,0,903},{140,0,71},{133,0,549},{4,0,47},{6,0,373},{7,0,452},{7,0,543},= {7,0, -1828},{7,0,1856},{9,0,6},{11,0,257},{139,0,391},{7,11,1467},{8,11,328},{1= 0,11, -544},{11,11,955},{13,11,320},{145,11,83},{5,0,980},{134,0,1754},{136,0,86= 5},{5,0 -,705},{137,0,606},{7,0,161},{8,10,201},{136,10,605},{143,11,35},{5,11,835= },{6,11 -,483},{140,10,224},{7,0,536},{7,0,1331},{136,0,143},{134,0,1388},{5,0,724= },{10,0 -,305},{11,0,151},{12,0,33},{12,0,121},{12,0,381},{17,0,3},{17,0,27},{17,0= ,78},{ -18,0,18},{19,0,54},{149,0,5},{4,10,523},{133,10,638},{5,0,19},{134,0,533}= ,{5,0, -395},{5,0,951},{134,0,1776},{135,0,1908},{132,0,846},{10,0,74},{11,0,663}= ,{12,0, -210},{13,0,166},{13,0,310},{14,0,373},{18,0,95},{19,0,43},{6,10,242},{7,1= 0,227}, -{7,10,1581},{8,10,104},{9,10,113},{9,10,220},{9,10,427},{10,10,239},{11,1= 0,579}, -{11,10,1023},{13,10,4},{13,10,204},{13,10,316},{148,10,86},{9,11,716},{11= ,11,108 -},{13,11,123},{14,11,252},{19,11,38},{21,11,3},{151,11,11},{8,0,372},{9,0= ,122},{ -138,0,175},{132,11,677},{7,11,1374},{136,11,540},{135,10,861},{132,0,695}= ,{7,0, -497},{9,0,387},{147,0,81},{136,0,937},{134,0,718},{7,0,1328},{136,10,494}= ,{132, -11,331},{6,0,1581},{133,11,747},{5,0,284},{6,0,49},{6,0,350},{7,0,1},{7,0= ,377},{ -7,0,1693},{8,0,18},{8,0,678},{9,0,161},{9,0,585},{9,0,671},{9,0,839},{11,= 0,912}, -{141,0,427},{7,10,1306},{8,10,505},{9,10,482},{10,10,126},{11,10,225},{12= ,10,347 -},{12,10,449},{13,10,19},{14,10,218},{142,10,435},{10,10,764},{12,10,120}= ,{13,10 -,39},{145,10,127},{4,0,597},{133,10,268},{134,0,1094},{4,0,1008},{134,0,1= 973},{ -132,0,811},{139,0,908},{135,0,1471},{133,11,326},{4,10,384},{135,10,1022}= ,{7,0, -1935},{8,0,324},{12,0,42},{4,11,691},{7,11,1935},{8,11,324},{9,11,35},{10= ,11,680 -},{11,11,364},{12,11,42},{13,11,357},{146,11,16},{135,0,2014},{7,0,2007},= {9,0, -101},{9,0,450},{10,0,66},{10,0,842},{11,0,536},{12,0,587},{6,11,32},{7,11= ,385},{ -7,11,757},{7,11,1916},{8,11,37},{8,11,94},{8,11,711},{9,11,541},{10,11,16= 2},{10, -11,795},{11,11,989},{11,11,1010},{12,11,14},{142,11,308},{139,0,586},{135= ,10, -1703},{7,0,1077},{11,0,28},{9,10,159},{140,10,603},{6,0,1221},{136,10,583= },{6,11 -,152},{6,11,349},{6,11,1682},{7,11,1252},{8,11,112},{9,11,435},{9,11,668}= ,{10,11 -,290},{10,11,319},{10,11,815},{11,11,180},{11,11,837},{12,11,240},{13,11,= 152},{ -13,11,219},{142,11,158},{139,0,62},{132,10,515},{8,10,632},{8,10,697},{13= 7,10, -854},{134,0,1766},{132,11,581},{6,11,126},{7,11,573},{8,11,397},{142,11,4= 4},{150 -,0,28},{11,0,670},{22,0,25},{4,10,136},{133,10,551},{6,0,1665},{7,0,256},= {7,0, -1388},{138,0,499},{4,0,22},{5,0,10},{7,0,1576},{136,0,97},{134,10,1782},{= 5,0,481 -},{7,10,1287},{9,10,44},{10,10,552},{10,10,642},{11,10,839},{12,10,274},{= 12,10, -275},{12,10,372},{13,10,91},{142,10,125},{133,11,926},{7,11,1232},{137,11= ,531},{ -6,0,134},{7,0,437},{7,0,1824},{9,0,37},{14,0,285},{142,0,371},{7,0,486},{= 8,0,155 -},{11,0,93},{140,0,164},{6,0,1391},{134,0,1442},{133,11,670},{133,0,591},= {6,10, -147},{7,10,886},{7,11,1957},{9,10,753},{138,10,268},{5,0,380},{5,0,650},{= 7,0, -1173},{136,0,310},{4,0,364},{7,0,1156},{7,0,1187},{137,0,409},{135,11,162= 1},{134 -,0,482},{133,11,506},{4,0,781},{6,0,487},{7,0,926},{8,0,263},{139,0,500},= {138,10 -,137},{135,11,242},{139,11,96},{133,10,414},{135,10,1762},{134,0,804},{5,= 11,834} -,{7,11,1202},{8,11,14},{9,11,481},{137,11,880},{134,10,599},{4,0,94},{135= ,0,1265 -},{4,0,415},{132,0,417},{5,0,348},{6,0,522},{6,10,1749},{7,11,1526},{138,= 11,465} -,{134,10,1627},{132,0,1012},{132,10,488},{4,11,357},{6,11,172},{7,11,143}= ,{137, -11,413},{4,10,83},{4,11,590},{146,11,76},{140,10,676},{7,11,287},{8,11,35= 5},{9, -11,293},{137,11,743},{134,10,278},{6,0,1803},{18,0,165},{24,0,21},{5,11,1= 69},{7, -11,333},{136,11,45},{12,10,97},{140,11,97},{4,0,408},{4,0,741},{135,0,500= },{132, -11,198},{7,10,388},{7,10,644},{139,10,781},{4,11,24},{5,11,140},{5,11,185= },{7,11 -,1500},{11,11,565},{139,11,838},{6,0,1321},{9,0,257},{7,10,229},{8,10,59}= ,{9,10, -190},{10,10,378},{140,10,191},{4,11,334},{133,11,593},{135,11,1885},{134,= 0,1138} -,{4,0,249},{6,0,73},{135,0,177},{133,0,576},{142,0,231},{137,0,288},{132,= 10,660} -,{7,10,1035},{138,10,737},{135,0,1487},{6,0,989},{9,0,433},{7,10,690},{9,= 10,587} -,{140,10,521},{7,0,1264},{7,0,1678},{11,0,945},{12,0,341},{12,0,471},{140= ,0,569} -,{132,11,709},{133,11,897},{5,11,224},{13,11,174},{146,11,52},{135,11,184= 0},{134 -,10,1744},{12,0,87},{16,0,74},{4,10,733},{9,10,194},{10,10,92},{11,10,198= },{12, -10,84},{141,10,128},{140,0,779},{135,0,538},{4,11,608},{133,11,497},{133,= 0,413}, -{7,11,1375},{7,11,1466},{138,11,331},{136,0,495},{6,11,540},{136,11,136},= {7,0,54 -},{8,0,312},{10,0,191},{10,0,614},{140,0,567},{6,0,468},{7,0,567},{7,0,14= 78},{8, -0,530},{14,0,290},{133,11,999},{4,11,299},{7,10,306},{135,11,1004},{142,1= 1,296}, -{134,0,1484},{133,10,979},{6,0,609},{9,0,815},{12,11,137},{14,11,9},{14,1= 1,24},{ -142,11,64},{133,11,456},{6,0,484},{135,0,822},{133,10,178},{136,11,180},{= 132,11, -755},{137,0,900},{135,0,1335},{6,0,1724},{135,0,2022},{135,11,1139},{5,0,= 640},{ -132,10,390},{6,0,1831},{138,11,633},{135,11,566},{4,11,890},{5,11,805},{5= ,11,819 -},{5,11,961},{6,11,396},{6,11,1631},{6,11,1678},{7,11,1967},{7,11,2041},{= 9,11, -630},{11,11,8},{11,11,1019},{12,11,176},{13,11,225},{14,11,292},{149,11,2= 4},{132 -,0,474},{134,0,1103},{135,0,1504},{134,0,1576},{6,0,961},{6,0,1034},{140,= 0,655}, -{11,11,514},{149,11,20},{5,0,305},{135,11,1815},{7,11,1505},{10,11,190},{= 10,11, -634},{11,11,792},{12,11,358},{140,11,447},{5,11,0},{6,11,536},{7,11,604},= {13,11, -445},{145,11,126},{7,0,1236},{133,10,105},{4,0,480},{6,0,217},{6,0,302},{= 6,0, -1642},{7,0,130},{7,0,837},{7,0,1321},{7,0,1547},{7,0,1657},{8,0,429},{9,0= ,228},{ -13,0,289},{13,0,343},{19,0,101},{6,11,232},{6,11,412},{7,11,1074},{8,11,9= },{8,11 -,157},{8,11,786},{9,11,196},{9,11,352},{9,11,457},{10,11,337},{11,11,232}= ,{11,11 -,877},{12,11,480},{140,11,546},{5,10,438},{7,11,958},{9,10,694},{12,10,62= 7},{13, -11,38},{141,10,210},{4,11,382},{136,11,579},{7,0,278},{10,0,739},{11,0,70= 8},{141 -,0,348},{4,11,212},{135,11,1206},{135,11,1898},{6,0,708},{6,0,1344},{152,= 10,11}, -{137,11,768},{134,0,1840},{140,0,233},{8,10,25},{138,10,826},{6,0,2017},{= 133,11, -655},{6,0,1488},{139,11,290},{132,10,308},{134,0,1590},{134,0,1800},{134,= 0,1259} -,{16,0,28},{6,11,231},{7,11,95},{136,11,423},{133,11,300},{135,10,150},{1= 36,10, -649},{7,11,1874},{137,11,641},{6,11,237},{7,11,611},{8,11,100},{9,11,416}= ,{11,11 -,335},{12,11,173},{146,11,101},{137,0,45},{134,10,521},{17,0,36},{14,11,2= 6},{146 -,11,150},{7,0,1442},{14,0,22},{5,10,339},{15,10,41},{15,10,166},{147,10,6= 6},{8,0 -,378},{6,11,581},{135,11,1119},{134,0,1507},{147,11,117},{139,0,39},{134,= 0,1054} -,{6,0,363},{7,0,1955},{136,0,725},{134,0,2036},{133,11,199},{6,0,1871},{9= ,0,935} -,{9,0,961},{9,0,1004},{9,0,1016},{12,0,805},{12,0,852},{12,0,853},{12,0,8= 69},{12 -,0,882},{12,0,896},{12,0,906},{12,0,917},{12,0,940},{15,0,170},{15,0,176}= ,{15,0, -188},{15,0,201},{15,0,205},{15,0,212},{15,0,234},{15,0,244},{18,0,181},{1= 8,0,193 -},{18,0,196},{18,0,201},{18,0,202},{18,0,210},{18,0,217},{18,0,235},{18,0= ,236},{ -18,0,237},{21,0,54},{21,0,55},{21,0,58},{21,0,59},{152,0,22},{134,10,1628= },{137, -0,805},{5,0,813},{135,0,2046},{142,11,42},{5,0,712},{6,0,1240},{11,0,17},= {13,0, -321},{144,0,67},{132,0,617},{135,10,829},{6,0,320},{7,0,781},{7,0,1921},{= 9,0,55} -,{10,0,186},{10,0,273},{10,0,664},{10,0,801},{11,0,996},{11,0,997},{13,0,= 157},{ -142,0,170},{136,0,271},{5,10,486},{135,10,1349},{18,11,91},{147,11,70},{1= 0,0,445 -},{7,10,1635},{8,10,17},{138,10,295},{136,11,404},{7,0,103},{7,0,863},{11= ,0,184} -,{145,0,62},{138,10,558},{137,0,659},{6,11,312},{6,11,1715},{10,11,584},{= 11,11, -546},{11,11,692},{12,11,259},{12,11,295},{13,11,46},{141,11,154},{134,0,6= 76},{ -132,11,588},{4,11,231},{5,11,61},{6,11,104},{7,11,729},{7,11,964},{7,11,1= 658},{ -140,11,414},{6,11,263},{138,11,757},{11,0,337},{142,0,303},{135,11,1363},= {132,11 -,320},{140,0,506},{134,10,447},{5,0,77},{7,0,1455},{10,0,843},{147,0,73},= {7,10, -577},{7,10,1432},{9,10,475},{9,10,505},{9,10,526},{9,10,609},{9,10,689},{= 9,10, -726},{9,10,735},{9,10,738},{10,10,556},{10,10,674},{10,10,684},{11,10,89}= ,{11,10 -,202},{11,10,272},{11,10,380},{11,10,415},{11,10,505},{11,10,537},{11,10,= 550},{ -11,10,562},{11,10,640},{11,10,667},{11,10,688},{11,10,847},{11,10,927},{1= 1,10, -930},{11,10,940},{12,10,144},{12,10,325},{12,10,329},{12,10,389},{12,10,4= 03},{12 -,10,451},{12,10,515},{12,10,604},{12,10,616},{12,10,626},{13,10,66},{13,1= 0,131}, -{13,10,167},{13,10,236},{13,10,368},{13,10,411},{13,10,434},{13,10,453},{= 13,10, -461},{13,10,474},{14,10,59},{14,10,60},{14,10,139},{14,10,152},{14,10,276= },{14, -10,353},{14,10,402},{15,10,28},{15,10,81},{15,10,123},{15,10,152},{18,10,= 136},{ -148,10,88},{132,0,458},{135,0,1420},{6,0,109},{10,0,382},{4,11,405},{4,10= ,609},{ -7,10,756},{7,11,817},{9,10,544},{11,10,413},{14,11,58},{14,10,307},{16,10= ,25},{ -17,11,37},{146,11,124},{6,0,330},{7,0,1084},{11,0,142},{133,11,974},{4,10= ,930},{ -133,10,947},{5,10,939},{142,11,394},{16,0,91},{145,0,87},{5,11,235},{5,10= ,962},{ -7,11,1239},{11,11,131},{140,11,370},{11,0,492},{5,10,651},{8,10,170},{9,1= 0,61},{ -9,10,63},{10,10,23},{10,10,37},{10,10,834},{11,10,4},{11,10,281},{11,10,5= 03},{11 -,10,677},{12,10,96},{12,10,130},{12,10,244},{14,10,5},{14,10,40},{14,10,1= 62},{14 -,10,202},{146,10,133},{4,10,406},{5,10,579},{12,10,492},{150,10,15},{9,11= ,137},{ -138,11,221},{134,0,1239},{11,0,211},{140,0,145},{7,11,390},{138,11,140},{= 135,11, -1418},{135,11,1144},{134,0,1049},{7,0,321},{6,10,17},{7,10,1001},{7,10,19= 82},{9, -10,886},{10,10,489},{10,10,800},{11,10,782},{12,10,320},{13,10,467},{14,1= 0,145}, -{14,10,387},{143,10,119},{145,10,17},{5,11,407},{11,11,489},{19,11,37},{2= 0,11,73 -},{150,11,38},{133,10,458},{135,0,1985},{7,10,1983},{8,10,0},{8,10,171},{= 9,10, -120},{9,10,732},{10,10,473},{11,10,656},{11,10,998},{18,10,0},{18,10,2},{= 147,10, -21},{5,11,325},{7,11,1483},{8,11,5},{8,11,227},{9,11,105},{10,11,585},{14= 0,11, -614},{136,0,122},{132,0,234},{135,11,1196},{6,0,976},{6,0,1098},{134,0,14= 41},{7, -0,253},{136,0,549},{6,11,621},{13,11,504},{144,11,19},{132,10,519},{5,0,4= 30},{5, -0,932},{6,0,131},{7,0,417},{9,0,522},{11,0,314},{141,0,390},{14,0,149},{1= 4,0,399 -},{143,0,57},{5,10,907},{6,10,31},{6,11,218},{7,10,491},{7,10,530},{8,10,= 592},{ -11,10,53},{11,10,779},{12,10,167},{12,10,411},{14,10,14},{14,10,136},{15,= 10,72}, -{16,10,17},{144,10,72},{140,11,330},{7,11,454},{7,11,782},{136,11,768},{1= 32,0, -507},{10,11,676},{140,11,462},{6,0,630},{9,0,811},{4,10,208},{5,10,106},{= 6,10, -531},{8,10,408},{9,10,188},{138,10,572},{4,0,343},{5,0,511},{134,10,1693}= ,{134, -11,164},{132,0,448},{7,0,455},{138,0,591},{135,0,1381},{12,10,441},{150,1= 1,50},{ -9,10,449},{10,10,192},{138,10,740},{6,0,575},{132,10,241},{134,0,1175},{1= 34,0, -653},{134,0,1761},{134,0,1198},{132,10,259},{6,11,343},{7,11,195},{9,11,2= 26},{10 -,11,197},{10,11,575},{11,11,502},{139,11,899},{7,0,1127},{7,0,1572},{10,0= ,297},{ -10,0,422},{11,0,764},{11,0,810},{12,0,264},{13,0,102},{13,0,300},{13,0,48= 4},{14, -0,147},{14,0,229},{17,0,71},{18,0,118},{147,0,120},{135,11,666},{132,0,67= 8},{4, -10,173},{5,10,312},{5,10,512},{135,10,1285},{7,10,1603},{7,10,1691},{9,10= ,464},{ -11,10,195},{12,10,279},{12,10,448},{14,10,11},{147,10,102},{16,0,99},{146= ,0,164} -,{7,11,1125},{9,11,143},{11,11,61},{14,11,405},{150,11,21},{137,11,260},{= 4,10, -452},{5,10,583},{5,10,817},{6,10,433},{7,10,593},{7,10,720},{7,10,1378},{= 8,10, -161},{9,10,284},{10,10,313},{139,10,886},{132,10,547},{136,10,722},{14,0,= 35},{ -142,0,191},{141,0,45},{138,0,121},{132,0,125},{134,0,1622},{133,11,959},{= 8,10, -420},{139,10,193},{132,0,721},{135,10,409},{136,0,145},{7,0,792},{8,0,147= },{10,0 -,821},{11,0,970},{11,0,1021},{136,11,173},{134,11,266},{132,0,715},{7,0,1= 999},{ -138,10,308},{133,0,531},{5,0,168},{5,0,930},{8,0,74},{9,0,623},{12,0,500}= ,{140,0 -,579},{144,0,65},{138,11,246},{6,0,220},{7,0,1101},{13,0,105},{142,11,314= },{5,10 -,1002},{136,10,745},{134,0,960},{20,0,0},{148,11,0},{4,0,1005},{4,10,239}= ,{6,10, -477},{7,10,1607},{11,10,68},{139,10,617},{6,0,19},{7,0,1413},{139,0,428},= {149,10 -,13},{7,0,96},{8,0,401},{8,0,703},{9,0,896},{136,11,300},{134,0,1595},{14= 5,0,116 -},{136,0,1021},{7,0,1961},{7,0,1965},{7,0,2030},{8,0,150},{8,0,702},{8,0,= 737},{8 -,0,750},{140,0,366},{11,11,75},{142,11,267},{132,10,367},{8,0,800},{9,0,1= 48},{9, -0,872},{9,0,890},{11,0,309},{11,0,1001},{13,0,267},{13,0,323},{5,11,427},= {5,11, -734},{7,11,478},{136,11,52},{7,11,239},{11,11,217},{142,11,165},{132,11,3= 23},{ -140,11,419},{13,0,299},{142,0,75},{6,11,87},{6,11,1734},{7,11,20},{7,11,1= 056},{8 -,11,732},{9,11,406},{9,11,911},{138,11,694},{134,0,1383},{132,10,694},{13= 3,11, -613},{137,0,779},{4,0,598},{140,10,687},{6,0,970},{135,0,424},{133,0,547}= ,{7,11, -32},{7,11,984},{8,11,85},{8,11,709},{9,11,579},{9,11,847},{9,11,856},{10,= 11,799} -,{11,11,258},{11,11,1007},{12,11,331},{12,11,615},{13,11,188},{13,11,435}= ,{14,11 -,8},{15,11,165},{16,11,27},{148,11,40},{6,0,1222},{134,0,1385},{132,0,876= },{138, -11,151},{135,10,213},{4,11,167},{135,11,82},{133,0,133},{6,11,24},{7,11,7= 4},{7, -11,678},{137,11,258},{5,11,62},{6,11,534},{7,11,684},{7,11,1043},{7,11,10= 72},{8, -11,280},{8,11,541},{8,11,686},{10,11,519},{11,11,252},{140,11,282},{136,0= ,187},{ -8,0,8},{10,0,0},{10,0,818},{139,0,988},{132,11,359},{11,0,429},{15,0,51},= {135,10 -,1672},{136,0,685},{5,11,211},{7,11,88},{136,11,627},{134,0,472},{136,0,1= 32},{6, -11,145},{141,11,336},{4,10,751},{11,10,390},{140,10,32},{6,0,938},{6,0,10= 60},{4, -11,263},{4,10,409},{133,10,78},{137,0,874},{8,0,774},{10,0,670},{12,0,51}= ,{4,11, -916},{6,10,473},{7,10,1602},{10,10,698},{12,10,212},{13,10,307},{145,10,1= 05},{ -146,0,92},{143,10,156},{132,0,830},{137,0,701},{4,11,599},{6,11,1634},{7,= 11,5},{ -7,11,55},{7,11,67},{7,11,97},{7,11,691},{7,11,979},{7,11,1697},{8,11,207}= ,{8,11, -214},{8,11,231},{8,11,294},{8,11,336},{8,11,428},{8,11,451},{8,11,460},{8= ,11,471 -},{8,11,622},{8,11,626},{8,11,679},{8,11,759},{8,11,829},{9,11,11},{9,11,= 246},{9 -,11,484},{9,11,573},{9,11,706},{9,11,762},{9,11,798},{9,11,855},{9,11,870= },{9,11 -,912},{10,11,303},{10,11,335},{10,11,424},{10,11,461},{10,11,543},{10,11,= 759},{ -10,11,814},{11,11,59},{11,11,199},{11,11,235},{11,11,475},{11,11,590},{11= ,11,929 -},{11,11,963},{12,11,114},{12,11,182},{12,11,226},{12,11,332},{12,11,439}= ,{12,11 -,575},{12,11,598},{13,11,8},{13,11,125},{13,11,194},{13,11,287},{14,11,19= 7},{14, -11,383},{15,11,53},{17,11,63},{19,11,46},{19,11,98},{19,11,106},{148,11,8= 5},{4,0 -,127},{5,0,350},{6,0,356},{8,0,426},{9,0,572},{10,0,247},{139,0,312},{134= ,0,1215 -},{6,0,59},{9,0,603},{13,0,397},{7,11,1853},{138,11,437},{134,0,1762},{14= 7,11, -126},{135,10,883},{13,0,293},{142,0,56},{133,10,617},{139,10,50},{5,11,18= 7},{7, -10,1518},{139,10,694},{135,0,441},{6,0,111},{7,0,4},{8,0,163},{8,0,776},{= 138,0, -566},{132,0,806},{4,11,215},{9,11,38},{10,11,3},{11,11,23},{11,11,127},{1= 39,11, -796},{14,0,233},{4,10,546},{135,10,2042},{135,0,1994},{134,0,1739},{135,1= 1,1530} -,{136,0,393},{5,0,297},{7,0,1038},{14,0,359},{19,0,52},{148,0,47},{135,0,= 309},{4 -,10,313},{133,10,577},{8,10,184},{141,10,433},{135,10,935},{12,10,186},{1= 2,10, -292},{14,10,100},{146,10,70},{136,0,363},{14,0,175},{11,10,402},{12,10,10= 9},{12, -10,431},{13,10,179},{13,10,206},{14,10,217},{16,10,3},{148,10,53},{5,10,8= 86},{6, -10,46},{6,10,1790},{7,10,14},{7,10,732},{7,10,1654},{8,10,95},{8,10,327},= {8,10, -616},{9,10,892},{10,10,598},{10,10,769},{11,10,134},{11,10,747},{12,10,37= 8},{142 -,10,97},{136,0,666},{135,0,1675},{6,0,655},{134,0,1600},{135,0,808},{133,= 10,1021 -},{4,11,28},{5,11,440},{7,11,248},{11,11,833},{140,11,344},{134,11,1654},= {132,0, -280},{140,0,54},{4,0,421},{133,0,548},{132,10,153},{6,11,339},{135,11,923= },{133, -11,853},{133,10,798},{132,10,587},{6,11,249},{7,11,1234},{139,11,573},{6,= 10,598} -,{7,10,42},{8,10,695},{10,10,212},{11,10,158},{14,10,196},{145,10,85},{7,= 0,249}, -{5,10,957},{133,10,1008},{4,10,129},{135,10,465},{6,0,254},{7,0,842},{7,0= ,1659}, -{9,0,109},{10,0,103},{7,10,908},{7,10,1201},{9,10,755},{11,10,906},{12,10= ,527},{ -146,10,7},{5,0,262},{136,10,450},{144,0,1},{10,11,201},{142,11,319},{7,11= ,49},{7 -,11,392},{8,11,20},{8,11,172},{8,11,690},{9,11,383},{9,11,845},{10,11,48}= ,{11,11 -,293},{11,11,832},{11,11,920},{141,11,221},{5,11,858},{133,11,992},{134,0= ,805},{ -139,10,1003},{6,0,1630},{134,11,307},{7,11,1512},{135,11,1794},{6,11,268}= ,{137, -11,62},{135,10,1868},{133,0,671},{4,0,989},{8,0,972},{136,0,998},{132,11,= 423},{ -132,0,889},{135,0,1382},{135,0,1910},{7,10,965},{7,10,1460},{135,10,1604}= ,{4,0, -627},{5,0,775},{138,11,106},{134,11,348},{7,0,202},{11,0,362},{11,0,948},= {140,0, -388},{138,11,771},{6,11,613},{136,11,223},{6,0,560},{7,0,451},{8,0,389},{= 12,0, -490},{13,0,16},{13,0,215},{13,0,351},{18,0,132},{147,0,125},{135,0,841},{= 136,0, -566},{136,0,938},{132,11,670},{5,0,912},{6,0,1695},{140,11,55},{9,11,40},= {139,11 -,136},{7,0,1361},{7,10,982},{10,10,32},{143,10,56},{11,11,259},{140,11,27= 0},{5,0 -,236},{6,0,572},{8,0,492},{11,0,618},{144,0,56},{8,11,572},{9,11,310},{9,= 11,682} -,{137,11,698},{134,0,1854},{5,0,190},{136,0,318},{133,10,435},{135,0,1376= },{4,11 -,296},{6,11,352},{7,11,401},{7,11,1410},{7,11,1594},{7,11,1674},{8,11,63}= ,{8,11, -660},{137,11,74},{7,0,349},{5,10,85},{6,10,419},{7,10,305},{7,10,361},{7,= 10,1337 -},{8,10,71},{140,10,519},{4,11,139},{4,11,388},{140,11,188},{6,0,1972},{6= ,0,2013 -},{8,0,951},{10,0,947},{10,0,974},{10,0,1018},{142,0,476},{140,10,688},{1= 35,10, -740},{5,10,691},{7,10,345},{9,10,94},{140,10,169},{9,0,344},{5,10,183},{6= ,10,582 -},{10,10,679},{140,10,435},{135,10,511},{132,0,850},{8,11,441},{10,11,314= },{143, -11,3},{7,10,1993},{136,10,684},{4,11,747},{6,11,290},{6,10,583},{7,11,649= },{7,11 -,1479},{135,11,1583},{133,11,232},{133,10,704},{134,0,910},{4,10,179},{5,= 10,198} -,{133,10,697},{7,10,347},{7,10,971},{8,10,181},{138,10,711},{136,11,525},= {14,0, -19},{14,0,28},{144,0,29},{7,0,85},{7,0,247},{8,0,585},{138,0,163},{4,0,48= 7},{7, -11,472},{7,11,1801},{10,11,748},{141,11,458},{4,10,243},{5,10,203},{7,10,= 19},{7, -10,71},{7,10,113},{10,10,405},{11,10,357},{142,10,240},{7,10,1450},{139,1= 0,99},{ -132,11,425},{138,0,145},{147,0,83},{6,10,492},{137,11,247},{4,0,1013},{13= 4,0, -2033},{5,10,134},{6,10,408},{6,10,495},{135,10,1593},{135,0,1922},{134,11= ,1768}, -{4,0,124},{10,0,457},{11,0,121},{11,0,169},{11,0,870},{11,0,874},{12,0,21= 4},{14, -0,187},{143,0,77},{5,0,557},{135,0,1457},{139,0,66},{5,11,943},{6,11,1779= },{142, -10,4},{4,10,248},{4,10,665},{7,10,137},{137,10,349},{7,0,1193},{5,11,245}= ,{6,11, -576},{7,11,582},{136,11,225},{144,0,82},{7,10,1270},{139,10,612},{5,0,454= },{10,0 -,352},{138,11,352},{18,0,57},{5,10,371},{135,10,563},{135,0,1333},{6,0,10= 7},{7,0 -,638},{7,0,1632},{9,0,396},{134,11,610},{5,0,370},{134,0,1756},{4,10,374}= ,{7,10, -547},{7,10,1700},{7,10,1833},{139,10,858},{133,0,204},{6,0,1305},{9,10,31= 1},{141 -,10,42},{5,0,970},{134,0,1706},{6,10,1647},{7,10,1552},{7,10,2010},{9,10,= 494},{ -137,10,509},{13,11,455},{15,11,99},{15,11,129},{144,11,68},{135,0,3},{4,0= ,35},{5 -,0,121},{5,0,483},{5,0,685},{6,0,489},{6,0,782},{6,0,1032},{7,0,1204},{13= 6,0,394 -},{4,0,921},{133,0,1007},{8,11,360},{138,11,63},{135,0,1696},{134,0,1519}= ,{132, -11,443},{135,11,944},{6,10,123},{7,10,214},{9,10,728},{10,10,157},{11,10,= 346},{ -11,10,662},{143,10,106},{137,0,981},{135,10,1435},{134,0,1072},{132,0,712= },{134, -0,1629},{134,0,728},{4,11,298},{137,11,483},{6,0,1177},{6,0,1271},{5,11,1= 64},{7, -11,121},{142,11,189},{7,0,1608},{4,10,707},{5,10,588},{6,10,393},{13,10,1= 06},{18 -,10,49},{147,10,41},{23,0,16},{151,11,16},{6,10,211},{7,10,1690},{11,10,4= 86},{ -140,10,369},{133,0,485},{19,11,15},{149,11,27},{4,11,172},{9,11,611},{10,= 11,436} -,{12,11,673},{141,11,255},{5,11,844},{10,11,484},{11,11,754},{12,11,457},= {14,11, -171},{14,11,389},{146,11,153},{4,0,285},{5,0,27},{5,0,317},{6,0,301},{7,0= ,7},{8, -0,153},{10,0,766},{11,0,468},{12,0,467},{141,0,143},{134,0,1462},{9,11,26= 3},{10, -11,147},{138,11,492},{133,11,537},{6,0,1945},{6,0,1986},{6,0,1991},{134,0= ,2038}, -{134,10,219},{137,11,842},{14,0,52},{17,0,50},{5,10,582},{6,10,1646},{7,1= 0,99},{ -7,10,1962},{7,10,1986},{8,10,515},{8,10,773},{9,10,23},{9,10,491},{12,10,= 620},{ -142,10,93},{138,11,97},{20,0,21},{20,0,44},{133,10,851},{136,0,819},{139,= 0,917}, -{5,11,230},{5,11,392},{6,11,420},{8,10,762},{8,10,812},{9,11,568},{9,10,9= 10},{ -140,11,612},{135,0,784},{15,0,135},{143,11,135},{10,0,454},{140,0,324},{4= ,11,0}, -{5,11,41},{7,11,1459},{7,11,1469},{7,11,1618},{7,11,1859},{9,11,549},{139= ,11,905 -},{4,10,98},{7,10,1365},{9,10,422},{9,10,670},{10,10,775},{11,10,210},{13= ,10,26} -,{13,10,457},{141,10,476},{6,0,1719},{6,0,1735},{7,0,2016},{7,0,2020},{8,= 0,837}, -{137,0,852},{133,11,696},{135,0,852},{132,0,952},{134,10,1730},{132,11,77= 1},{138 -,0,568},{137,0,448},{139,0,146},{8,0,67},{138,0,419},{133,11,921},{137,10= ,147},{ -134,0,1826},{10,0,657},{14,0,297},{142,0,361},{6,0,666},{6,0,767},{134,0,= 1542},{ -139,0,729},{6,11,180},{7,11,1137},{8,11,751},{139,11,805},{4,11,183},{7,1= 1,271}, -{11,11,824},{11,11,952},{13,11,278},{13,11,339},{13,11,482},{14,11,424},{= 148,11, -99},{4,0,669},{5,11,477},{5,11,596},{6,11,505},{7,11,1221},{11,11,907},{1= 2,11, -209},{141,11,214},{135,11,1215},{5,0,402},{6,10,30},{11,10,56},{139,10,30= 5},{7, -11,564},{142,11,168},{139,0,152},{7,0,912},{135,10,1614},{4,10,150},{5,10= ,303},{ -134,10,327},{7,0,320},{8,0,51},{9,0,868},{10,0,833},{12,0,481},{12,0,570}= ,{148,0 -,106},{132,0,445},{7,11,274},{11,11,263},{11,11,479},{11,11,507},{140,11,= 277},{ -10,0,555},{11,0,308},{19,0,95},{6,11,1645},{8,10,192},{10,10,78},{141,10,= 359},{ -135,10,786},{6,11,92},{6,11,188},{7,11,1269},{7,11,1524},{7,11,1876},{10,= 11,228} -,{139,11,1020},{4,11,459},{133,11,966},{11,0,386},{6,10,1638},{7,10,79},{= 7,10, -496},{9,10,138},{10,10,336},{12,10,412},{12,10,440},{142,10,305},{133,0,2= 39},{7, -0,83},{7,0,1990},{8,0,130},{139,0,720},{138,11,709},{4,0,143},{5,0,550},{= 133,0, -752},{5,0,123},{6,0,530},{7,0,348},{135,0,1419},{135,0,2024},{6,11,18},{7= ,11,179 -},{7,11,721},{7,11,932},{8,11,548},{8,11,757},{9,11,54},{9,11,65},{9,11,5= 32},{9, -11,844},{10,11,113},{10,11,117},{10,11,236},{10,11,315},{10,11,430},{10,1= 1,798}, -{11,11,153},{11,11,351},{11,11,375},{12,11,78},{12,11,151},{12,11,392},{1= 4,11, -248},{143,11,23},{7,10,204},{7,10,415},{8,10,42},{10,10,85},{139,10,564},= {134,0, -958},{133,11,965},{132,0,210},{135,11,1429},{138,11,480},{134,11,182},{13= 9,11, -345},{10,11,65},{10,11,488},{138,11,497},{4,10,3},{5,10,247},{5,10,644},{= 7,10, -744},{7,10,1207},{7,10,1225},{7,10,1909},{146,10,147},{132,0,430},{5,10,2= 85},{9, -10,67},{13,10,473},{143,10,82},{144,11,16},{7,11,1162},{9,11,588},{10,11,= 260},{ -151,10,8},{133,0,213},{138,0,7},{135,0,801},{134,11,1786},{135,11,308},{6= ,0,936} -,{134,0,1289},{133,0,108},{132,0,885},{133,0,219},{139,0,587},{4,0,193},{= 5,0,916 -},{6,0,1041},{7,0,364},{10,0,398},{10,0,726},{11,0,317},{11,0,626},{12,0,= 142},{ -12,0,288},{12,0,678},{13,0,313},{15,0,113},{146,0,114},{135,0,1165},{6,0,= 241},{9 -,0,342},{10,0,729},{11,0,284},{11,0,445},{11,0,651},{11,0,863},{13,0,398}= ,{146,0 -,99},{7,0,907},{136,0,832},{9,0,303},{4,10,29},{6,10,532},{7,10,1628},{7,= 10,1648 -},{9,10,350},{10,10,433},{11,10,97},{11,10,557},{11,10,745},{12,10,289},{= 12,10, -335},{12,10,348},{12,10,606},{13,10,116},{13,10,233},{13,10,466},{14,10,1= 81},{14 -,10,209},{14,10,232},{14,10,236},{14,10,300},{16,10,41},{148,10,97},{7,11= ,423},{ -7,10,1692},{136,11,588},{6,0,931},{134,0,1454},{5,10,501},{7,10,1704},{9,= 10,553} -,{11,10,520},{12,10,557},{141,10,249},{136,11,287},{4,0,562},{9,0,254},{1= 39,0, -879},{132,0,786},{14,11,32},{18,11,85},{20,11,2},{152,11,16},{135,0,1294}= ,{7,11, -723},{135,11,1135},{6,0,216},{7,0,901},{7,0,1343},{8,0,493},{134,11,403},= {7,11, -719},{8,11,809},{136,11,834},{5,11,210},{6,11,213},{7,11,60},{10,11,364},= {139,11 -,135},{7,0,341},{11,0,219},{5,11,607},{8,11,326},{136,11,490},{4,11,701},= {5,11, -472},{5,11,639},{7,11,1249},{9,11,758},{139,11,896},{135,11,380},{135,11,= 1947},{ -139,0,130},{135,0,1734},{10,0,115},{11,0,420},{12,0,154},{13,0,404},{14,0= ,346},{ -143,0,54},{134,10,129},{4,11,386},{7,11,41},{8,11,405},{9,11,497},{11,11,= 110},{ -11,11,360},{15,11,37},{144,11,84},{141,11,282},{5,11,46},{7,11,1452},{7,1= 1,1480} -,{8,11,634},{140,11,472},{4,11,524},{136,11,810},{10,11,238},{141,11,33},= {133,0, -604},{5,0,1011},{136,0,701},{8,0,856},{8,0,858},{8,0,879},{12,0,702},{142= ,0,447} -,{4,0,54},{5,0,666},{7,0,1039},{7,0,1130},{9,0,195},{138,0,302},{4,10,25}= ,{5,10, -60},{6,10,504},{7,10,614},{7,10,1155},{140,10,0},{7,10,1248},{11,10,621},= {139,10 -,702},{133,11,997},{137,10,321},{134,0,1669},{134,0,1791},{4,10,379},{135= ,10, -1397},{138,11,372},{5,11,782},{5,11,829},{134,11,1738},{135,0,1228},{4,10= ,118},{ -6,10,274},{6,10,361},{7,10,75},{141,10,441},{132,0,623},{9,11,279},{10,11= ,407},{ -14,11,84},{150,11,18},{137,10,841},{135,0,798},{140,10,693},{5,10,314},{6= ,10,221 -},{7,10,419},{10,10,650},{11,10,396},{12,10,156},{13,10,369},{14,10,333},= {145,10 -,47},{135,11,1372},{7,0,122},{9,0,259},{10,0,84},{11,0,470},{12,0,541},{1= 41,0, -379},{134,0,837},{8,0,1013},{4,11,78},{5,11,96},{5,11,182},{7,11,1724},{7= ,11, -1825},{10,11,394},{10,11,471},{11,11,532},{14,11,340},{145,11,88},{134,0,= 577},{ -135,11,1964},{132,10,913},{134,0,460},{8,0,891},{10,0,901},{10,0,919},{10= ,0,932} -,{12,0,715},{12,0,728},{12,0,777},{14,0,457},{144,0,103},{5,0,82},{5,0,13= 1},{7,0 -,1755},{8,0,31},{9,0,168},{9,0,764},{139,0,869},{136,10,475},{6,0,605},{5= ,10, -1016},{9,11,601},{9,11,619},{10,11,505},{10,11,732},{11,11,355},{140,11,1= 39},{7, -10,602},{8,10,179},{10,10,781},{140,10,126},{134,0,1246},{6,10,329},{138,= 10,111} -,{6,11,215},{7,11,1028},{7,11,1473},{7,11,1721},{9,11,424},{138,11,779},{= 5,0,278 -},{137,0,68},{6,0,932},{6,0,1084},{144,0,86},{4,0,163},{5,0,201},{5,0,307= },{5,0, -310},{6,0,335},{7,0,284},{7,0,1660},{136,0,165},{136,0,781},{134,0,707},{= 6,0,33} -,{135,0,1244},{5,10,821},{6,11,67},{6,10,1687},{7,11,258},{7,11,1630},{9,= 11,354} -,{9,11,675},{10,11,830},{14,11,80},{145,11,80},{6,11,141},{7,11,225},{9,1= 1,59},{ -9,11,607},{10,11,312},{11,11,687},{12,11,555},{13,11,373},{13,11,494},{14= 8,11,58 -},{134,0,1113},{9,0,388},{5,10,71},{7,10,1407},{9,10,704},{10,10,261},{10= ,10,619 -},{11,10,547},{11,10,619},{143,10,157},{7,0,1953},{136,0,720},{138,0,203}= ,{7,10, -2008},{9,10,337},{138,10,517},{6,0,326},{7,0,677},{137,0,425},{139,11,81}= ,{7,0, -1316},{7,0,1412},{7,0,1839},{9,0,589},{11,0,241},{11,0,676},{11,0,811},{1= 1,0,891 -},{12,0,140},{12,0,346},{12,0,479},{13,0,140},{13,0,381},{14,0,188},{18,0= ,30},{ -148,0,108},{5,0,416},{6,10,86},{6,10,603},{7,10,292},{7,10,561},{8,10,257= },{8,10 -,382},{9,10,721},{9,10,778},{11,10,581},{140,10,466},{4,10,486},{133,10,4= 91},{ -134,0,1300},{132,10,72},{7,0,847},{6,10,265},{7,11,430},{139,11,46},{5,11= ,602},{ -6,11,106},{7,11,1786},{7,11,1821},{7,11,2018},{9,11,418},{137,11,763},{5,= 0,358}, -{7,0,535},{7,0,1184},{10,0,662},{13,0,212},{13,0,304},{13,0,333},{145,0,9= 8},{5, -11,65},{6,11,416},{7,11,1720},{7,11,1924},{8,11,677},{10,11,109},{11,11,1= 4},{11, -11,70},{11,11,569},{11,11,735},{15,11,153},{148,11,80},{6,0,1823},{8,0,83= 9},{8,0 -,852},{8,0,903},{10,0,940},{12,0,707},{140,0,775},{135,11,1229},{6,0,1522= },{140, -0,654},{136,11,595},{139,0,163},{141,0,314},{132,0,978},{4,0,601},{6,0,20= 35},{ -137,10,234},{5,10,815},{6,10,1688},{134,10,1755},{133,0,946},{136,0,434},= {6,10, -197},{136,10,205},{7,0,411},{7,0,590},{8,0,631},{9,0,323},{10,0,355},{11,= 0,491}, -{12,0,143},{12,0,402},{13,0,73},{14,0,408},{15,0,107},{146,0,71},{7,0,146= 7},{8,0 -,328},{10,0,544},{11,0,955},{12,0,13},{13,0,320},{145,0,83},{142,0,410},{= 11,0, -511},{13,0,394},{14,0,298},{14,0,318},{146,0,103},{6,10,452},{7,10,312},{= 138,10, -219},{138,10,589},{4,10,333},{9,10,176},{12,10,353},{141,10,187},{135,11,= 329},{ -132,11,469},{5,0,835},{134,0,483},{134,11,1743},{5,11,929},{6,11,340},{8,= 11,376} -,{136,11,807},{134,10,1685},{132,0,677},{5,11,218},{7,11,1610},{138,11,83= },{5,11 -,571},{135,11,1842},{132,11,455},{137,0,70},{135,0,1405},{7,10,135},{8,10= ,7},{8, -10,62},{9,10,243},{10,10,658},{10,10,697},{11,10,456},{139,10,756},{9,10,= 395},{ -138,10,79},{137,0,108},{6,11,161},{7,11,372},{137,11,597},{132,11,349},{1= 32,0, -777},{132,0,331},{135,10,631},{133,0,747},{6,11,432},{6,11,608},{139,11,3= 22},{ -138,10,835},{5,11,468},{7,11,1809},{10,11,325},{11,11,856},{12,11,345},{1= 43,11, -104},{133,11,223},{7,10,406},{7,10,459},{8,10,606},{139,10,726},{132,11,5= 66},{ -142,0,68},{4,11,59},{135,11,1394},{6,11,436},{139,11,481},{4,11,48},{5,11= ,271},{ -135,11,953},{139,11,170},{5,11,610},{136,11,457},{133,11,755},{135,11,121= 7},{133 -,10,612},{132,11,197},{132,0,505},{4,10,372},{7,10,482},{8,10,158},{9,10,= 602},{9 -,10,615},{10,10,245},{10,10,678},{10,10,744},{11,10,248},{139,10,806},{13= 3,0,326 -},{5,10,854},{135,10,1991},{4,0,691},{146,0,16},{6,0,628},{9,0,35},{10,0,= 680},{ -10,0,793},{11,0,364},{13,0,357},{143,0,164},{138,0,654},{6,0,32},{7,0,385= },{7,0, -757},{7,0,1916},{8,0,37},{8,0,94},{8,0,711},{9,0,541},{10,0,162},{10,0,79= 5},{11, -0,989},{11,0,1010},{12,0,14},{142,0,308},{133,11,217},{6,0,152},{6,0,349}= ,{6,0, -1682},{7,0,1252},{8,0,112},{9,0,435},{9,0,668},{10,0,290},{10,0,319},{10,= 0,815}, -{11,0,180},{11,0,837},{12,0,240},{13,0,152},{13,0,219},{142,0,158},{4,0,5= 81},{ -134,0,726},{5,10,195},{135,10,1685},{6,0,126},{7,0,573},{8,0,397},{142,0,= 44},{ -138,0,89},{7,10,1997},{8,10,730},{139,10,1006},{134,0,1531},{134,0,1167},= {5,0, -926},{12,0,203},{133,10,751},{4,11,165},{7,11,1398},{135,11,1829},{7,0,12= 32},{ -137,0,531},{135,10,821},{134,0,943},{133,0,670},{4,0,880},{139,0,231},{13= 4,0, -1617},{135,0,1957},{5,11,9},{7,11,297},{7,11,966},{140,11,306},{6,0,975},= {134,0, -985},{5,10,950},{5,10,994},{134,10,351},{12,11,21},{151,11,7},{5,11,146},= {6,11, -411},{138,11,721},{7,0,242},{135,0,1942},{6,11,177},{135,11,467},{5,0,421= },{7,10 -,47},{137,10,684},{5,0,834},{7,0,1202},{8,0,14},{9,0,481},{137,0,880},{13= 8,0,465 -},{6,0,688},{9,0,834},{132,10,350},{132,0,855},{4,0,357},{6,0,172},{7,0,1= 43},{ -137,0,413},{133,11,200},{132,0,590},{7,10,1812},{13,10,259},{13,10,356},{= 14,10, -242},{147,10,114},{133,10,967},{11,0,114},{4,10,473},{7,10,623},{8,10,808= },{9,10 -,871},{9,10,893},{11,10,431},{12,10,112},{12,10,217},{12,10,243},{12,10,5= 62},{12 -,10,663},{12,10,683},{13,10,141},{13,10,197},{13,10,227},{13,10,406},{13,= 10,487} -,{14,10,156},{14,10,203},{14,10,224},{14,10,256},{18,10,58},{150,10,0},{1= 38,10, -286},{4,10,222},{7,10,286},{136,10,629},{5,0,169},{7,0,333},{136,0,45},{1= 34,11, -481},{132,0,198},{4,0,24},{5,0,140},{5,0,185},{7,0,1500},{11,0,565},{11,0= ,838},{ -4,11,84},{7,11,1482},{10,11,76},{138,11,142},{133,0,585},{141,10,306},{13= 3,11, -1015},{4,11,315},{5,11,507},{135,11,1370},{136,10,146},{6,0,691},{134,0,1= 503},{4 -,0,334},{133,0,593},{4,10,465},{135,10,1663},{142,11,173},{135,0,913},{12= ,0,116} -,{134,11,1722},{134,0,1360},{132,0,802},{8,11,222},{8,11,476},{9,11,238},= {11,11, -516},{11,11,575},{15,11,109},{146,11,100},{6,0,308},{9,0,673},{7,10,138},= {7,10, -517},{139,10,238},{132,0,709},{6,0,1876},{6,0,1895},{9,0,994},{9,0,1006},= {12,0, -829},{12,0,888},{12,0,891},{146,0,185},{148,10,94},{4,0,228},{133,0,897},= {7,0, -1840},{5,10,495},{7,10,834},{9,10,733},{139,10,378},{133,10,559},{6,10,21= },{6,10 -,1737},{7,10,1444},{136,10,224},{4,0,608},{133,0,497},{6,11,40},{135,11,1= 781},{ -134,0,1573},{135,0,2039},{6,0,540},{136,0,136},{4,0,897},{5,0,786},{133,1= 0,519}, -{6,0,1878},{6,0,1884},{9,0,938},{9,0,948},{9,0,955},{9,0,973},{9,0,1012},= {12,0, -895},{12,0,927},{143,0,254},{134,0,1469},{133,0,999},{4,0,299},{135,0,100= 4},{4,0 -,745},{133,0,578},{136,11,574},{133,0,456},{134,0,1457},{7,0,1679},{132,1= 0,402}, -{7,0,693},{8,0,180},{12,0,163},{8,10,323},{136,10,479},{11,10,580},{142,1= 0,201}, -{5,10,59},{135,10,672},{132,11,354},{146,10,34},{4,0,755},{135,11,1558},{= 7,0, -1740},{146,0,48},{4,10,85},{135,10,549},{139,0,338},{133,10,94},{134,0,10= 91},{ -135,11,469},{12,0,695},{12,0,704},{20,0,113},{5,11,830},{14,11,338},{148,= 11,81}, -{135,0,1464},{6,10,11},{135,10,187},{135,0,975},{13,0,335},{132,10,522},{= 134,0, -1979},{5,11,496},{135,11,203},{4,10,52},{135,10,661},{7,0,1566},{8,0,269}= ,{9,0, -212},{9,0,718},{14,0,15},{14,0,132},{142,0,227},{4,0,890},{5,0,805},{5,0,= 819},{5 -,0,961},{6,0,396},{6,0,1631},{6,0,1678},{7,0,1967},{7,0,2041},{9,0,630},{= 11,0,8} -,{11,0,1019},{12,0,176},{13,0,225},{14,0,292},{21,0,24},{4,10,383},{133,1= 0,520}, -{134,11,547},{135,11,1748},{5,11,88},{137,11,239},{146,11,128},{7,11,650}= ,{135, -11,1310},{4,10,281},{5,10,38},{7,10,194},{7,10,668},{7,10,1893},{137,10,3= 97},{ -135,0,1815},{9,10,635},{139,10,559},{7,0,1505},{10,0,190},{10,0,634},{11,= 0,792}, -{12,0,358},{140,0,447},{5,0,0},{6,0,536},{7,0,604},{13,0,445},{145,0,126}= ,{7,11, -1076},{9,11,80},{11,11,78},{11,11,421},{11,11,534},{140,11,545},{8,0,966}= ,{10,0, -1023},{14,11,369},{146,11,72},{135,11,1641},{6,0,232},{6,0,412},{7,0,1074= },{8,0, -9},{8,0,157},{8,0,786},{9,0,196},{9,0,352},{9,0,457},{10,0,337},{11,0,232= },{11,0 -,877},{12,0,480},{140,0,546},{135,0,958},{4,0,382},{136,0,579},{4,0,212},= {135,0, -1206},{4,11,497},{5,11,657},{135,11,1584},{132,0,681},{8,0,971},{138,0,96= 5},{5, -10,448},{136,10,535},{14,0,16},{146,0,44},{11,0,584},{11,0,616},{14,0,275= },{11, -11,584},{11,11,616},{142,11,275},{136,11,13},{7,10,610},{135,10,1501},{7,= 11,642} -,{8,11,250},{11,11,123},{11,11,137},{13,11,48},{142,11,95},{133,0,655},{1= 7,0,67} -,{147,0,74},{134,0,751},{134,0,1967},{6,0,231},{136,0,423},{5,0,300},{138= ,0,1016 -},{4,10,319},{5,10,699},{138,10,673},{6,0,237},{7,0,611},{8,0,100},{9,0,4= 16},{11 -,0,335},{12,0,173},{18,0,101},{6,10,336},{8,10,552},{9,10,285},{10,10,99}= ,{139, -10,568},{134,0,1370},{7,10,1406},{9,10,218},{141,10,222},{133,10,256},{13= 5,0, -1208},{14,11,213},{148,11,38},{6,0,1219},{135,11,1642},{13,0,417},{14,0,1= 29},{ -143,0,15},{10,11,545},{140,11,301},{17,10,39},{148,10,36},{133,0,199},{4,= 11,904} -,{133,11,794},{12,0,427},{146,0,38},{134,0,949},{8,0,665},{135,10,634},{1= 32,10, -618},{135,10,259},{132,10,339},{133,11,761},{141,10,169},{132,10,759},{5,= 0,688}, -{7,0,539},{135,0,712},{7,11,386},{138,11,713},{134,0,1186},{6,11,7},{6,11= ,35},{7 -,11,147},{7,11,1069},{7,11,1568},{7,11,1575},{7,11,1917},{8,11,43},{8,11,= 208},{9 -,11,128},{9,11,866},{10,11,20},{11,11,981},{147,11,33},{7,11,893},{8,10,4= 82},{ -141,11,424},{6,0,312},{6,0,1715},{10,0,584},{11,0,546},{11,0,692},{12,0,2= 59},{12 -,0,295},{13,0,46},{141,0,154},{5,10,336},{6,10,341},{6,10,478},{6,10,1763= },{136, -10,386},{137,0,151},{132,0,588},{152,0,4},{6,11,322},{9,11,552},{11,11,27= 4},{13, -11,209},{13,11,499},{14,11,85},{15,11,126},{145,11,70},{135,10,73},{4,0,2= 31},{5, -0,61},{6,0,104},{7,0,729},{7,0,964},{7,0,1658},{140,0,414},{6,0,263},{138= ,0,757} -,{135,10,1971},{4,0,612},{133,0,561},{132,0,320},{135,10,1344},{8,11,83},= {8,11, -817},{9,11,28},{9,11,29},{9,11,885},{10,11,387},{11,11,633},{11,11,740},{= 13,11, -235},{13,11,254},{15,11,143},{143,11,146},{5,10,396},{134,10,501},{140,11= ,49},{ -132,0,225},{4,10,929},{5,10,799},{8,10,46},{136,10,740},{4,0,405},{7,0,81= 7},{14, -0,58},{17,0,37},{146,0,124},{133,0,974},{4,11,412},{133,11,581},{4,10,892= },{133, -10,770},{4,0,996},{134,0,2026},{4,0,527},{5,0,235},{7,0,1239},{11,0,131},= {140,0, -370},{9,0,16},{13,0,386},{135,11,421},{7,0,956},{7,0,1157},{7,0,1506},{7,= 0,1606} -,{7,0,1615},{7,0,1619},{7,0,1736},{7,0,1775},{8,0,590},{9,0,324},{9,0,736= },{9,0, -774},{9,0,776},{9,0,784},{10,0,567},{10,0,708},{11,0,518},{11,0,613},{11,= 0,695}, -{11,0,716},{11,0,739},{11,0,770},{11,0,771},{11,0,848},{11,0,857},{11,0,9= 31},{11 -,0,947},{12,0,326},{12,0,387},{12,0,484},{12,0,528},{12,0,552},{12,0,613}= ,{13,0, -189},{13,0,256},{13,0,340},{13,0,432},{13,0,436},{13,0,440},{13,0,454},{1= 4,0,174 -},{14,0,220},{14,0,284},{14,0,390},{145,0,121},{135,10,158},{9,0,137},{13= 8,0,221 -},{4,11,110},{10,11,415},{10,11,597},{142,11,206},{141,11,496},{135,11,20= 5},{151 -,10,25},{135,11,778},{7,11,1656},{7,10,2001},{9,11,369},{10,11,338},{10,1= 1,490}, -{11,11,154},{11,11,545},{11,11,775},{13,11,77},{141,11,274},{4,11,444},{1= 0,11, -146},{140,11,9},{7,0,390},{138,0,140},{135,0,1144},{134,0,464},{7,10,1461= },{140, -10,91},{132,10,602},{4,11,283},{135,11,1194},{5,0,407},{11,0,204},{11,0,2= 43},{11 -,0,489},{12,0,293},{19,0,37},{20,0,73},{150,0,38},{7,0,1218},{136,0,303},= {5,0, -325},{8,0,5},{8,0,227},{9,0,105},{10,0,585},{12,0,614},{4,10,13},{5,10,56= 7},{7, -10,1498},{9,10,124},{11,10,521},{140,10,405},{135,10,1006},{7,0,800},{10,= 0,12},{ -134,11,1720},{135,0,1783},{132,10,735},{138,10,812},{4,10,170},{135,10,32= 3},{6,0 -,621},{13,0,504},{144,0,89},{5,10,304},{135,10,1403},{137,11,216},{6,0,92= 0},{6,0 -,1104},{9,11,183},{139,11,286},{4,0,376},{133,10,742},{134,0,218},{8,0,64= 1},{11, -0,388},{140,0,580},{7,0,454},{7,0,782},{8,0,768},{140,0,686},{137,11,33},= {133,10 -,111},{144,0,0},{10,0,676},{140,0,462},{6,0,164},{136,11,735},{133,10,444= },{150, -0,50},{7,11,1862},{12,11,491},{12,11,520},{13,11,383},{14,11,244},{146,11= ,12},{5 -,11,132},{9,11,486},{9,11,715},{10,11,458},{11,11,373},{11,11,668},{11,11= ,795},{ -11,11,897},{12,11,272},{12,11,424},{12,11,539},{12,11,558},{14,11,245},{1= 4,11, -263},{14,11,264},{14,11,393},{142,11,403},{8,10,123},{15,10,6},{144,10,7}= ,{6,0, -285},{8,0,654},{11,0,749},{12,0,190},{12,0,327},{13,0,120},{13,0,121},{13= ,0,327} -,{15,0,47},{146,0,40},{5,11,8},{6,11,89},{6,11,400},{7,11,1569},{7,11,162= 3},{7, -11,1850},{8,11,218},{8,11,422},{9,11,570},{138,11,626},{6,11,387},{7,11,8= 82},{ -141,11,111},{6,0,343},{7,0,195},{9,0,226},{10,0,197},{10,0,575},{11,0,502= },{11,0 -,899},{6,11,224},{7,11,877},{137,11,647},{5,10,937},{135,10,100},{135,11,= 790},{ -150,0,29},{147,0,8},{134,0,1812},{149,0,8},{135,11,394},{7,0,1125},{9,0,1= 43},{11 -,0,61},{14,0,405},{150,0,21},{10,11,755},{147,11,29},{9,11,378},{141,11,1= 62},{ -135,10,922},{5,10,619},{133,10,698},{134,0,1327},{6,0,1598},{137,0,575},{= 9,11, -569},{12,11,12},{12,11,81},{12,11,319},{13,11,69},{14,11,259},{16,11,87},= {17,11, -1},{17,11,21},{17,11,24},{18,11,15},{18,11,56},{18,11,59},{18,11,127},{18= ,11,154 -},{19,11,19},{148,11,31},{6,0,895},{135,11,1231},{5,0,959},{7,11,124},{13= 6,11,38 -},{5,11,261},{7,11,78},{7,11,199},{8,11,815},{9,11,126},{138,11,342},{5,1= 0,917}, -{134,10,1659},{7,0,1759},{5,11,595},{135,11,1863},{136,0,173},{134,0,266}= ,{142,0 -,261},{132,11,628},{5,10,251},{5,10,956},{8,10,268},{9,10,214},{146,10,14= 2},{7, -11,266},{136,11,804},{135,11,208},{6,11,79},{7,11,1021},{135,11,1519},{11= ,11,704 -},{141,11,396},{5,10,346},{5,10,711},{136,10,390},{136,11,741},{134,11,37= 6},{134 -,0,1427},{6,0,1033},{6,0,1217},{136,0,300},{133,10,624},{6,11,100},{7,11,= 244},{7 -,11,632},{7,11,1609},{8,11,178},{8,11,638},{141,11,58},{6,0,584},{5,10,78= 3},{7, -10,1998},{135,10,2047},{5,0,427},{5,0,734},{7,0,478},{136,0,52},{7,0,239}= ,{11,0, -217},{142,0,165},{134,0,1129},{6,0,168},{6,0,1734},{7,0,20},{7,0,1056},{8= ,0,732} -,{9,0,406},{9,0,911},{138,0,694},{132,10,594},{133,11,791},{7,11,686},{8,= 11,33}, -{8,11,238},{10,11,616},{11,11,467},{11,11,881},{13,11,217},{13,11,253},{1= 42,11, -268},{137,11,476},{134,0,418},{133,0,613},{132,0,632},{132,11,447},{7,0,3= 2},{7,0 -,984},{8,0,85},{8,0,709},{9,0,579},{9,0,847},{9,0,856},{10,0,799},{11,0,2= 58},{11 -,0,1007},{12,0,331},{12,0,615},{13,0,188},{13,0,435},{14,0,8},{15,0,165},= {16,0, -27},{20,0,40},{144,11,35},{4,11,128},{5,11,415},{6,11,462},{7,11,294},{7,= 11,578} -,{10,11,710},{139,11,86},{5,0,694},{136,0,909},{7,0,1109},{11,0,7},{5,10,= 37},{6, -10,39},{6,10,451},{7,10,218},{7,10,1166},{7,10,1687},{8,10,662},{144,10,2= },{136, -11,587},{6,11,427},{7,11,1018},{138,11,692},{4,11,195},{6,10,508},{135,11= ,802},{ -4,0,167},{135,0,82},{5,0,62},{6,0,24},{6,0,534},{7,0,74},{7,0,678},{7,0,6= 84},{7, -0,1043},{7,0,1072},{8,0,280},{8,0,541},{8,0,686},{9,0,258},{10,0,519},{11= ,0,252} -,{140,0,282},{138,0,33},{4,0,359},{133,11,738},{7,0,980},{9,0,328},{13,0,= 186},{ -13,0,364},{7,10,635},{7,10,796},{8,10,331},{9,10,330},{9,10,865},{10,10,1= 19},{10 -,10,235},{11,10,111},{11,10,129},{11,10,240},{12,10,31},{12,10,66},{12,10= ,222},{ -12,10,269},{12,10,599},{12,10,684},{12,10,689},{12,10,691},{142,10,345},{= 137,10, -527},{6,0,596},{7,0,585},{135,10,702},{134,11,1683},{133,0,211},{6,0,145}= ,{141,0 -,336},{134,0,1130},{7,0,873},{6,10,37},{7,10,1666},{8,10,195},{8,10,316},= {9,10, -178},{9,10,276},{9,10,339},{9,10,536},{10,10,102},{10,10,362},{10,10,785}= ,{11,10 -,55},{11,10,149},{11,10,773},{13,10,416},{13,10,419},{14,10,38},{14,10,41= },{142, -10,210},{8,0,840},{136,0,841},{132,0,263},{5,11,3},{8,11,578},{9,11,118},= {10,11, -705},{12,11,383},{141,11,279},{132,0,916},{133,11,229},{133,10,645},{15,0= ,155},{ -16,0,79},{8,11,102},{10,11,578},{10,11,672},{12,11,496},{13,11,408},{14,1= 1,121}, -{145,11,106},{4,0,599},{5,0,592},{6,0,1634},{7,0,5},{7,0,55},{7,0,67},{7,= 0,97},{ -7,0,691},{7,0,979},{7,0,1600},{7,0,1697},{8,0,207},{8,0,214},{8,0,231},{8= ,0,294} -,{8,0,336},{8,0,428},{8,0,471},{8,0,622},{8,0,626},{8,0,679},{8,0,759},{8= ,0,829} -,{9,0,11},{9,0,246},{9,0,484},{9,0,573},{9,0,706},{9,0,762},{9,0,798},{9,= 0,855}, -{9,0,870},{9,0,912},{10,0,303},{10,0,335},{10,0,424},{10,0,461},{10,0,543= },{10,0 -,759},{10,0,814},{11,0,59},{11,0,199},{11,0,235},{11,0,590},{11,0,631},{1= 1,0,929 -},{11,0,963},{11,0,987},{12,0,114},{12,0,182},{12,0,226},{12,0,332},{12,0= ,439},{ -12,0,575},{12,0,598},{12,0,675},{13,0,8},{13,0,125},{13,0,194},{13,0,287}= ,{14,0, -197},{14,0,383},{15,0,53},{17,0,63},{19,0,46},{19,0,98},{19,0,106},{148,0= ,85},{7 -,0,1356},{132,10,290},{6,10,70},{7,10,1292},{10,10,762},{139,10,288},{150= ,11,55} -,{4,0,593},{8,11,115},{8,11,350},{9,11,489},{10,11,128},{11,11,306},{12,1= 1,373}, -{14,11,30},{17,11,79},{147,11,80},{135,11,1235},{134,0,1392},{4,11,230},{= 133,11, -702},{147,0,126},{7,10,131},{7,10,422},{8,10,210},{140,10,573},{134,0,117= 9},{139 -,11,435},{139,10,797},{134,11,1728},{4,0,162},{18,11,26},{19,11,42},{20,1= 1,43},{ -21,11,0},{23,11,27},{152,11,14},{132,10,936},{6,0,765},{5,10,453},{134,10= ,441},{ -133,0,187},{135,0,1286},{6,0,635},{6,0,904},{6,0,1210},{134,0,1489},{4,0,= 215},{8 -,0,890},{9,0,38},{10,0,923},{11,0,23},{11,0,127},{139,0,796},{6,0,1165},{= 134,0, -1306},{7,0,716},{13,0,97},{141,0,251},{132,10,653},{136,0,657},{146,10,80= },{5,11 -,622},{7,11,1032},{11,11,26},{11,11,213},{11,11,707},{12,11,380},{13,11,2= 26},{ -141,11,355},{6,0,299},{5,11,70},{6,11,334},{9,11,171},{11,11,637},{12,11,= 202},{ -14,11,222},{145,11,42},{142,0,134},{4,11,23},{5,11,313},{5,11,1014},{6,11= ,50},{6 -,11,51},{7,11,142},{7,11,384},{9,11,783},{139,11,741},{4,11,141},{7,11,55= 9},{8, -11,640},{9,11,460},{12,11,183},{141,11,488},{136,11,614},{7,10,1368},{8,1= 0,232}, -{8,10,361},{10,10,682},{138,10,742},{137,10,534},{6,0,1082},{140,0,658},{= 137,10, -27},{135,0,2002},{142,10,12},{4,0,28},{5,0,440},{7,0,248},{11,0,833},{140= ,0,344} -,{7,10,736},{139,10,264},{134,10,1657},{134,0,1654},{138,0,531},{5,11,222= },{9,11 -,140},{138,11,534},{6,0,634},{6,0,798},{134,0,840},{138,11,503},{135,10,1= 27},{ -133,0,853},{5,11,154},{7,11,1491},{10,11,379},{138,11,485},{6,0,249},{7,0= ,1234}, -{139,0,573},{133,11,716},{7,11,1570},{140,11,542},{136,10,364},{138,0,527= },{4,11 -,91},{5,11,388},{5,11,845},{6,11,206},{6,11,252},{6,11,365},{7,11,136},{7= ,11,531 -},{8,11,264},{136,11,621},{134,0,1419},{135,11,1441},{7,0,49},{7,0,392},{= 8,0,20} -,{8,0,172},{8,0,690},{9,0,383},{9,0,845},{10,0,48},{11,0,293},{11,0,832},= {11,0, -920},{11,0,984},{141,0,221},{5,0,858},{133,0,992},{5,0,728},{137,10,792},= {5,10, -909},{9,10,849},{138,10,805},{7,0,525},{7,0,1579},{8,0,497},{136,0,573},{= 6,0,268 -},{137,0,62},{135,11,576},{134,0,1201},{5,11,771},{5,11,863},{5,11,898},{= 6,11, -1632},{6,11,1644},{134,11,1780},{133,11,331},{7,0,193},{7,0,1105},{10,0,4= 95},{7, -10,397},{8,10,124},{8,10,619},{9,10,305},{11,10,40},{12,10,349},{13,10,13= 4},{13, -10,295},{14,10,155},{15,10,120},{146,10,105},{138,0,106},{6,0,859},{5,11,= 107},{7 -,11,201},{136,11,518},{6,11,446},{135,11,1817},{13,0,23},{4,10,262},{135,= 10,342} -,{133,10,641},{137,11,851},{6,0,925},{137,0,813},{132,11,504},{6,0,613},{= 136,0, -223},{4,10,99},{6,10,250},{6,10,346},{8,10,127},{138,10,81},{136,0,953},{= 132,10, -915},{139,11,892},{5,10,75},{9,10,517},{10,10,470},{12,10,155},{141,10,22= 4},{4,0 -,666},{7,0,1017},{7,11,996},{138,11,390},{5,11,883},{133,11,975},{14,10,8= 3},{142 -,11,83},{4,0,670},{5,11,922},{134,11,1707},{135,0,216},{9,0,40},{11,0,136= },{135, -11,787},{5,10,954},{5,11,993},{7,11,515},{137,11,91},{139,0,259},{7,0,111= 4},{9,0 -,310},{9,0,682},{10,0,440},{13,0,40},{6,10,304},{8,10,418},{11,10,341},{1= 39,10, -675},{14,0,296},{9,10,410},{139,10,425},{10,11,377},{12,11,363},{13,11,68= },{13, -11,94},{14,11,108},{142,11,306},{7,0,1401},{135,0,1476},{4,0,296},{6,0,47= 5},{7,0 -,401},{7,0,1410},{7,0,1594},{7,0,1674},{8,0,63},{8,0,660},{137,0,74},{4,0= ,139},{ -4,0,388},{140,0,188},{132,0,797},{132,11,766},{5,11,103},{7,11,921},{8,11= ,580},{ -8,11,593},{8,11,630},{138,11,28},{4,11,911},{5,11,867},{133,11,1013},{134= ,10,14} -,{134,0,1572},{134,10,1708},{21,0,39},{5,10,113},{6,10,243},{7,10,1865},{= 11,10, -161},{16,10,37},{145,10,99},{7,11,1563},{141,11,182},{5,11,135},{6,11,519= },{7,11 -,1722},{10,11,271},{11,11,261},{145,11,54},{132,10,274},{134,0,1594},{4,1= 1,300}, -{5,11,436},{135,11,484},{4,0,747},{6,0,290},{7,0,649},{7,0,1479},{135,0,1= 583},{ -133,11,535},{147,11,82},{133,0,232},{137,0,887},{135,10,166},{136,0,521},= {4,0,14 -},{7,0,472},{7,0,1801},{10,0,748},{141,0,458},{134,0,741},{134,0,992},{16= ,0,111} -,{137,10,304},{4,0,425},{5,11,387},{7,11,557},{12,11,547},{142,11,86},{13= 5,11, -1747},{5,10,654},{135,11,1489},{7,0,789},{4,11,6},{5,11,708},{136,11,75},= {6,10, -273},{10,10,188},{13,10,377},{146,10,77},{6,0,1593},{4,11,303},{7,11,619}= ,{10,11 -,547},{10,11,687},{11,11,122},{140,11,601},{134,0,1768},{135,10,410},{138= ,11,772 -},{11,0,233},{139,10,524},{5,0,943},{134,0,1779},{134,10,1785},{136,11,52= 9},{132 -,0,955},{5,0,245},{6,0,576},{7,0,582},{136,0,225},{132,10,780},{142,0,241= },{134, -0,1943},{4,11,106},{7,11,310},{7,11,1785},{10,11,690},{139,11,717},{134,0= ,1284}, -{5,11,890},{133,11,988},{6,11,626},{142,11,431},{10,11,706},{145,11,32},{= 137,11, -332},{132,11,698},{135,0,709},{5,10,948},{138,11,17},{136,0,554},{134,0,1= 564},{ -139,10,941},{132,0,443},{134,0,909},{134,11,84},{142,0,280},{4,10,532},{5= ,10,706 -},{135,10,662},{132,0,729},{5,10,837},{6,10,1651},{139,10,985},{135,10,18= 61},{4, -0,348},{152,11,3},{5,11,986},{6,11,130},{7,11,1582},{8,11,458},{10,11,101= },{10, -11,318},{138,11,823},{134,0,758},{4,0,298},{137,0,848},{4,10,330},{7,10,9= 33},{7, -10,2012},{136,10,292},{7,11,1644},{137,11,129},{6,0,1422},{9,0,829},{135,= 10,767} -,{5,0,164},{7,0,121},{142,0,189},{7,0,812},{7,0,1261},{7,0,1360},{9,0,632= },{140, -0,352},{135,11,1788},{139,0,556},{135,11,997},{145,10,114},{4,0,172},{9,0= ,611},{ -10,0,436},{12,0,673},{13,0,255},{137,10,883},{11,0,530},{138,10,274},{133= ,0,844} -,{134,0,984},{13,0,232},{18,0,35},{4,10,703},{135,10,207},{132,10,571},{9= ,0,263} -,{10,0,147},{138,0,492},{7,11,1756},{137,11,98},{5,10,873},{5,10,960},{8,= 10,823} -,{137,10,881},{133,0,537},{132,0,859},{7,11,1046},{139,11,160},{137,0,842= },{139, -10,283},{5,10,33},{6,10,470},{139,10,424},{6,11,45},{7,11,433},{8,11,129}= ,{9,11, -21},{10,11,392},{11,11,79},{12,11,499},{13,11,199},{141,11,451},{135,0,12= 91},{ -135,10,1882},{7,11,558},{136,11,353},{134,0,1482},{5,0,230},{5,0,392},{6,= 0,420}, -{9,0,568},{140,0,612},{6,0,262},{7,10,90},{7,10,664},{7,10,830},{7,10,138= 0},{7, -10,2025},{8,11,81},{8,10,448},{8,10,828},{9,11,189},{9,11,201},{11,11,478= },{11, -11,712},{141,11,338},{142,0,31},{5,11,353},{151,11,26},{132,0,753},{4,0,0= },{5,0, -41},{7,0,1459},{7,0,1469},{7,0,1859},{9,0,549},{139,0,905},{9,10,417},{13= 7,10, -493},{135,11,1113},{133,0,696},{141,11,448},{134,10,295},{132,0,834},{4,0= ,771},{ -5,10,1019},{6,11,25},{7,11,855},{7,11,1258},{144,11,32},{134,0,1076},{133= ,0,921} -,{133,0,674},{4,11,4},{7,11,1118},{7,11,1320},{7,11,1706},{8,11,277},{9,1= 1,622}, -{10,11,9},{11,11,724},{12,11,350},{12,11,397},{13,11,28},{13,11,159},{15,= 11,89}, -{18,11,5},{19,11,9},{20,11,34},{150,11,47},{134,10,208},{6,0,444},{136,0,= 308},{6 -,0,180},{7,0,1137},{8,0,751},{139,0,805},{4,0,183},{7,0,271},{11,0,824},{= 11,0, -952},{13,0,278},{13,0,339},{13,0,482},{14,0,424},{148,0,99},{7,11,317},{1= 35,11, -569},{4,0,19},{5,0,477},{5,0,596},{6,0,505},{7,0,1221},{11,0,907},{12,0,2= 09},{ -141,0,214},{135,0,1215},{6,0,271},{7,0,398},{8,0,387},{10,0,344},{7,10,44= 8},{7, -10,1629},{7,10,1813},{8,10,442},{9,10,710},{10,10,282},{138,10,722},{11,1= 0,844}, -{12,10,104},{140,10,625},{134,11,255},{133,10,787},{134,0,1645},{11,11,95= 6},{151 -,11,3},{6,0,92},{6,0,188},{7,0,209},{7,0,1269},{7,0,1524},{7,0,1876},{8,0= ,661},{ -10,0,42},{10,0,228},{11,0,58},{11,0,1020},{12,0,58},{12,0,118},{141,0,32}= ,{4,0, -459},{133,0,966},{4,11,536},{7,11,1141},{10,11,723},{139,11,371},{140,0,3= 30},{ -134,0,1557},{7,11,285},{135,11,876},{136,10,491},{135,11,560},{6,0,18},{7= ,0,179} -,{7,0,932},{8,0,548},{8,0,757},{9,0,54},{9,0,65},{9,0,532},{9,0,844},{10,= 0,113}, -{10,0,117},{10,0,315},{10,0,560},{10,0,622},{10,0,798},{11,0,153},{11,0,3= 51},{11 -,0,375},{12,0,78},{12,0,151},{12,0,392},{12,0,666},{14,0,248},{143,0,23},= {6,0, -1742},{132,11,690},{4,10,403},{5,10,441},{7,10,450},{10,10,840},{11,10,10= 1},{12, -10,193},{141,10,430},{133,0,965},{134,0,182},{10,0,65},{10,0,488},{138,0,= 497},{ -135,11,1346},{6,0,973},{6,0,1158},{10,11,200},{19,11,2},{151,11,22},{4,11= ,190},{ -133,11,554},{133,10,679},{7,0,328},{137,10,326},{133,11,1001},{9,0,588},{= 138,0, -260},{133,11,446},{135,10,1128},{135,10,1796},{147,11,119},{134,0,1786},{= 6,0, -1328},{6,0,1985},{8,0,962},{138,0,1017},{135,0,308},{11,0,508},{4,10,574}= ,{7,10, -350},{7,10,1024},{8,10,338},{9,10,677},{138,10,808},{138,11,752},{135,10,= 1081},{ -137,11,96},{7,10,1676},{135,10,2037},{136,0,588},{132,11,304},{133,0,614}= ,{140,0 -,793},{136,0,287},{137,10,297},{141,10,37},{6,11,53},{6,11,199},{7,11,140= 8},{8, -11,32},{8,11,93},{9,11,437},{10,11,397},{10,11,629},{11,11,593},{11,11,76= 3},{13, -11,326},{145,11,35},{134,11,105},{9,11,320},{10,11,506},{138,11,794},{5,1= 1,114}, -{5,11,255},{141,11,285},{140,0,290},{7,11,2035},{8,11,19},{9,11,89},{138,= 11,831} -,{134,0,1136},{7,0,719},{8,0,796},{8,0,809},{8,0,834},{6,10,306},{7,10,11= 40},{7, -10,1340},{8,10,133},{138,10,449},{139,10,1011},{5,0,210},{6,0,213},{7,0,6= 0},{10, -0,364},{139,0,135},{5,0,607},{8,0,326},{136,0,490},{138,11,176},{132,0,70= 1},{5,0 -,472},{7,0,380},{137,0,758},{135,0,1947},{6,0,1079},{138,0,278},{138,11,3= 91},{5, -10,329},{8,10,260},{139,11,156},{4,0,386},{7,0,41},{8,0,405},{8,0,728},{9= ,0,497} -,{11,0,110},{11,0,360},{15,0,37},{144,0,84},{5,0,46},{7,0,1452},{7,0,1480= },{8,0, -634},{140,0,472},{136,0,961},{4,0,524},{136,0,810},{10,0,238},{141,0,33},= {132,10 -,657},{152,10,7},{133,0,532},{5,0,997},{135,10,1665},{7,11,594},{7,11,851= },{7,11 -,1858},{9,11,411},{9,11,574},{9,11,666},{9,11,737},{10,11,346},{10,11,712= },{11, -11,246},{11,11,432},{11,11,517},{11,11,647},{11,11,679},{11,11,727},{12,1= 1,304}, -{12,11,305},{12,11,323},{12,11,483},{12,11,572},{12,11,593},{12,11,602},{= 13,11, -95},{13,11,101},{13,11,171},{13,11,315},{13,11,378},{13,11,425},{13,11,47= 5},{14, -11,63},{14,11,380},{14,11,384},{15,11,133},{18,11,112},{148,11,72},{5,11,= 955},{ -136,11,814},{134,0,1301},{5,10,66},{7,10,1896},{136,10,288},{133,11,56},{= 134,10, -1643},{6,0,1298},{148,11,100},{5,0,782},{5,0,829},{6,0,671},{6,0,1156},{6= ,0,1738 -},{137,11,621},{4,0,306},{5,0,570},{7,0,1347},{5,10,91},{5,10,648},{5,10,= 750},{5 -,10,781},{6,10,54},{6,10,112},{6,10,402},{6,10,1732},{7,10,315},{7,10,749= },{7,10 -,1900},{9,10,78},{9,10,508},{10,10,611},{10,10,811},{11,10,510},{11,10,72= 8},{13, -10,36},{14,10,39},{16,10,83},{17,10,124},{148,10,30},{8,10,570},{9,11,477= },{141, -11,78},{4,11,639},{10,11,4},{10,10,322},{10,10,719},{11,10,407},{11,11,63= 8},{12, -11,177},{148,11,57},{7,0,1823},{139,0,693},{7,0,759},{5,11,758},{8,10,125= },{8,10 -,369},{8,10,524},{10,10,486},{11,10,13},{11,10,381},{11,10,736},{11,10,76= 6},{11, -10,845},{13,10,114},{13,10,292},{142,10,47},{7,0,1932},{6,10,1684},{6,10,= 1731},{ -7,10,356},{8,10,54},{8,10,221},{9,10,225},{9,10,356},{10,10,77},{10,10,44= 6},{10, -10,731},{12,10,404},{141,10,491},{135,11,552},{135,11,1112},{4,0,78},{5,0= ,96},{5 -,0,182},{6,0,1257},{7,0,1724},{7,0,1825},{10,0,394},{10,0,471},{11,0,532}= ,{14,0, -340},{145,0,88},{139,11,328},{135,0,1964},{132,10,411},{4,10,80},{5,10,44= },{137, -11,133},{5,11,110},{6,11,169},{6,11,1702},{7,11,400},{8,11,538},{9,11,184= },{9,11 -,524},{140,11,218},{4,0,521},{5,10,299},{7,10,1083},{140,11,554},{6,11,13= 3},{9, -11,353},{12,11,628},{146,11,79},{6,0,215},{7,0,584},{7,0,1028},{7,0,1473}= ,{7,0, -1721},{9,0,424},{138,0,779},{7,0,857},{7,0,1209},{7,10,1713},{9,10,537},{= 10,10, -165},{12,10,219},{140,10,561},{4,10,219},{6,11,93},{7,11,1422},{7,10,1761= },{7,11 -,1851},{8,11,673},{9,10,86},{9,11,529},{140,11,43},{137,11,371},{136,0,67= 1},{5,0 -,328},{135,0,918},{132,0,529},{9,11,25},{10,11,467},{138,11,559},{4,11,33= 5},{135 -,11,942},{134,0,716},{134,0,1509},{6,0,67},{7,0,258},{7,0,1630},{9,0,354}= ,{9,0, -675},{10,0,830},{14,0,80},{17,0,80},{140,10,428},{134,0,1112},{6,0,141},{= 7,0,225 -},{9,0,59},{9,0,607},{10,0,312},{11,0,687},{12,0,555},{13,0,373},{13,0,49= 4},{148 -,0,58},{133,10,514},{8,11,39},{10,11,773},{11,11,84},{12,11,205},{142,11,= 1},{8,0 -,783},{5,11,601},{133,11,870},{136,11,594},{4,10,55},{5,10,301},{6,10,571= },{14, -10,49},{146,10,102},{132,11,181},{134,11,1652},{133,10,364},{4,11,97},{5,= 11,147} -,{6,11,286},{7,11,1362},{141,11,176},{4,10,76},{7,10,1550},{9,10,306},{9,= 10,430} -,{9,10,663},{10,10,683},{11,10,427},{11,10,753},{12,10,334},{12,10,442},{= 14,10, -258},{14,10,366},{143,10,131},{137,10,52},{6,0,955},{134,0,1498},{6,11,37= 5},{7, -11,169},{7,11,254},{136,11,780},{7,0,430},{11,0,46},{14,0,343},{142,11,34= 3},{135 -,0,1183},{5,0,602},{7,0,2018},{9,0,418},{9,0,803},{135,11,1447},{8,0,677}= ,{135, -11,1044},{139,11,285},{4,10,656},{135,10,779},{135,10,144},{5,11,629},{13= 5,11, -1549},{135,10,1373},{138,11,209},{7,10,554},{7,10,605},{141,10,10},{5,10,= 838},{5 -,10,841},{134,10,1649},{133,10,1012},{6,0,1357},{134,0,1380},{144,0,53},{= 6,0,590 -},{7,10,365},{7,10,1357},{7,10,1497},{8,10,154},{141,10,281},{133,10,340}= ,{132, -11,420},{135,0,329},{147,11,32},{4,0,469},{10,11,429},{139,10,495},{8,10,= 261},{9 -,10,144},{9,10,466},{10,10,370},{12,10,470},{13,10,144},{142,10,348},{142= ,0,460} -,{4,11,325},{9,10,897},{138,11,125},{6,0,1743},{6,10,248},{9,10,546},{10,= 10,535} -,{11,10,681},{141,10,135},{4,0,990},{5,0,929},{6,0,340},{8,0,376},{8,0,80= 7},{8,0 -,963},{8,0,980},{138,0,1007},{134,0,1603},{140,0,250},{4,11,714},{133,11,= 469},{ -134,10,567},{136,10,445},{5,0,218},{7,0,1610},{8,0,646},{10,0,83},{11,11,= 138},{ -140,11,40},{7,0,1512},{135,0,1794},{135,11,1216},{11,0,0},{16,0,78},{132,= 11,718} -,{133,0,571},{132,0,455},{134,0,1012},{5,11,124},{5,11,144},{6,11,548},{7= ,11,15} -,{7,11,153},{137,11,629},{142,11,10},{6,11,75},{7,11,1531},{8,11,416},{9,= 11,240} -,{9,11,275},{10,11,100},{11,11,658},{11,11,979},{12,11,86},{13,11,468},{1= 4,11,66 -},{14,11,207},{15,11,20},{15,11,25},{144,11,58},{132,10,577},{5,11,141},{= 5,11, -915},{6,11,1783},{7,11,211},{7,11,698},{7,11,1353},{9,11,83},{9,11,281},{= 10,11, -376},{10,11,431},{11,11,543},{12,11,664},{13,11,280},{13,11,428},{14,11,6= 1},{14, -11,128},{17,11,52},{145,11,81},{6,0,161},{7,0,372},{137,0,597},{132,0,349= },{10, -11,702},{139,11,245},{134,0,524},{134,10,174},{6,0,432},{9,0,751},{139,0,= 322},{ -147,11,94},{4,11,338},{133,11,400},{5,0,468},{10,0,325},{11,0,856},{12,0,= 345},{ -143,0,104},{133,0,223},{132,0,566},{4,11,221},{5,11,659},{5,11,989},{7,11= ,697},{ -7,11,1211},{138,11,284},{135,11,1070},{4,0,59},{135,0,1394},{6,0,436},{11= ,0,481} -,{5,10,878},{133,10,972},{4,0,48},{5,0,271},{135,0,953},{5,0,610},{136,0,= 457},{4 -,0,773},{5,0,618},{137,0,756},{133,0,755},{135,0,1217},{138,11,507},{132,= 10,351} -,{132,0,197},{143,11,78},{4,11,188},{7,11,805},{11,11,276},{142,11,293},{= 5,11, -884},{139,11,991},{132,10,286},{10,0,259},{10,0,428},{7,10,438},{7,10,627= },{7,10 -,1516},{8,10,40},{9,10,56},{9,10,294},{11,10,969},{11,10,995},{146,10,148= },{4,0, -356},{5,0,217},{5,0,492},{5,0,656},{8,0,544},{136,11,544},{5,0,259},{6,0,= 1230},{ -7,0,414},{7,0,854},{142,0,107},{132,0,1007},{15,0,14},{144,0,5},{6,0,1580= },{132, -10,738},{132,11,596},{132,0,673},{133,10,866},{6,0,1843},{135,11,1847},{4= ,0,165} -,{7,0,1398},{135,0,1829},{135,11,1634},{147,11,65},{6,0,885},{6,0,1009},{= 137,0, -809},{133,10,116},{132,10,457},{136,11,770},{9,0,498},{12,0,181},{10,11,3= 61},{ -142,11,316},{134,11,595},{5,0,9},{7,0,297},{7,0,966},{140,0,306},{4,11,89= },{5,11 -,489},{6,11,315},{7,11,553},{7,11,1745},{138,11,243},{134,0,1487},{132,0,= 437},{5 -,0,146},{6,0,411},{138,0,721},{5,10,527},{6,10,189},{135,10,859},{11,10,1= 04},{11 -,10,554},{15,10,60},{143,10,125},{6,11,1658},{9,11,3},{10,11,154},{11,11,= 641},{ -13,11,85},{13,11,201},{141,11,346},{6,0,177},{135,0,467},{134,0,1377},{13= 4,10, -116},{136,11,645},{4,11,166},{5,11,505},{6,11,1670},{137,11,110},{133,10,= 487},{4 -,10,86},{5,10,667},{5,10,753},{6,10,316},{6,10,455},{135,10,946},{133,0,2= 00},{ -132,0,959},{6,0,1928},{134,0,1957},{139,11,203},{150,10,45},{4,10,79},{7,= 10,1773 -},{10,10,450},{11,10,589},{13,10,332},{13,10,493},{14,10,183},{14,10,334}= ,{14,10 -,362},{14,10,368},{14,10,376},{14,10,379},{19,10,90},{19,10,103},{19,10,1= 27},{ -148,10,90},{6,0,1435},{135,11,1275},{134,0,481},{7,11,445},{8,11,307},{8,= 11,704} -,{10,11,41},{10,11,439},{11,11,237},{11,11,622},{140,11,201},{135,11,869}= ,{4,0, -84},{7,0,1482},{10,0,76},{138,0,142},{11,11,277},{144,11,14},{135,11,1977= },{4,11 -,189},{5,11,713},{136,11,57},{133,0,1015},{138,11,371},{4,0,315},{5,0,507= },{135, -0,1370},{4,11,552},{142,10,381},{9,0,759},{16,0,31},{16,0,39},{16,0,75},{= 18,0,24 -},{20,0,42},{152,0,1},{134,0,712},{134,0,1722},{133,10,663},{133,10,846},= {8,0, -222},{8,0,476},{9,0,238},{11,0,516},{11,0,575},{15,0,109},{146,0,100},{7,= 0,1402} -,{7,0,1414},{12,0,456},{5,10,378},{8,10,465},{9,10,286},{10,10,185},{10,1= 0,562}, -{10,10,635},{11,10,31},{11,10,393},{13,10,312},{18,10,65},{18,10,96},{147= ,10,89} -,{4,0,986},{6,0,1958},{6,0,2032},{8,0,934},{138,0,985},{7,10,1880},{9,10,= 680},{ -139,10,798},{134,10,1770},{145,11,49},{132,11,614},{132,10,648},{5,10,945= },{6,10 -,1656},{6,10,1787},{7,10,167},{8,10,824},{9,10,391},{10,10,375},{139,10,1= 85},{ -138,11,661},{7,0,1273},{135,11,1945},{7,0,706},{7,0,1058},{138,0,538},{7,= 10,1645 -},{8,10,352},{137,10,249},{132,10,152},{11,0,92},{11,0,196},{11,0,409},{1= 1,0,450 -},{11,0,666},{11,0,777},{12,0,262},{13,0,385},{13,0,393},{15,0,115},{16,0= ,45},{ -145,0,82},{133,10,1006},{6,0,40},{135,0,1781},{9,11,614},{139,11,327},{5,= 10,420} -,{135,10,1449},{135,0,431},{10,0,97},{135,10,832},{6,0,423},{7,0,665},{13= 5,0, -1210},{7,0,237},{8,0,664},{9,0,42},{9,0,266},{9,0,380},{9,0,645},{10,0,17= 7},{138 -,0,276},{7,0,264},{133,10,351},{8,0,213},{5,10,40},{7,10,598},{7,10,1638}= ,{9,10, -166},{9,10,640},{9,10,685},{9,10,773},{11,10,215},{13,10,65},{14,10,172},= {14,10, -317},{145,10,6},{5,11,84},{134,11,163},{8,10,60},{9,10,343},{139,10,769},= {137,0, -455},{133,11,410},{8,0,906},{12,0,700},{12,0,706},{140,0,729},{21,11,33},= {150,11 -,40},{7,10,1951},{8,10,765},{8,10,772},{140,10,671},{7,10,108},{8,10,219}= ,{8,10, -388},{9,10,639},{9,10,775},{11,10,275},{140,10,464},{5,11,322},{7,11,1941= },{8,11 -,186},{9,11,262},{10,11,187},{14,11,208},{146,11,130},{139,0,624},{8,0,57= 4},{5, -11,227},{140,11,29},{7,11,1546},{11,11,299},{142,11,407},{5,10,15},{6,10,= 56},{7, -10,1758},{8,10,500},{9,10,730},{11,10,331},{13,10,150},{142,10,282},{7,11= ,1395}, -{8,11,486},{9,11,236},{9,11,878},{10,11,218},{11,11,95},{19,11,17},{147,1= 1,31},{ -135,11,2043},{4,0,354},{146,11,4},{140,11,80},{135,0,1558},{134,10,1886},= {5,10, -205},{6,10,438},{137,10,711},{133,11,522},{133,10,534},{7,0,235},{7,0,147= 5},{15, -0,68},{146,0,120},{137,10,691},{4,0,942},{6,0,1813},{8,0,917},{10,0,884},= {12,0, -696},{12,0,717},{12,0,723},{12,0,738},{12,0,749},{12,0,780},{16,0,97},{14= 6,0,169 -},{6,10,443},{8,11,562},{9,10,237},{9,10,571},{9,10,695},{10,10,139},{11,= 10,715} -,{12,10,417},{141,10,421},{135,0,957},{133,0,830},{134,11,1771},{146,0,23= },{5,0, -496},{6,0,694},{7,0,203},{7,11,1190},{137,11,620},{137,11,132},{6,0,547},= {134,0, -1549},{8,11,258},{9,11,208},{137,11,359},{4,0,864},{5,0,88},{137,0,239},{= 135,11, -493},{4,11,317},{135,11,1279},{132,11,477},{4,10,578},{5,11,63},{133,11,5= 09},{7, -0,650},{135,0,1310},{7,0,1076},{9,0,80},{11,0,78},{11,0,421},{11,0,534},{= 140,0, -545},{132,11,288},{12,0,553},{14,0,118},{133,10,923},{7,0,274},{11,0,479}= ,{139,0 -,507},{8,11,89},{8,11,620},{9,11,49},{10,11,774},{11,11,628},{12,11,322},= {143,11 -,124},{4,0,497},{135,0,1584},{7,0,261},{7,0,1115},{7,0,1354},{7,0,1404},{= 7,0, -1588},{7,0,1705},{7,0,1902},{9,0,465},{10,0,248},{10,0,349},{10,0,647},{1= 1,0,527 -},{11,0,660},{11,0,669},{12,0,529},{13,0,305},{132,10,924},{133,10,665},{= 136,0, -13},{6,0,791},{138,11,120},{7,0,642},{8,0,250},{11,0,123},{11,0,137},{13,= 0,48},{ -142,0,95},{4,10,265},{7,10,807},{135,10,950},{5,10,93},{140,10,267},{135,= 0,1429} -,{4,0,949},{10,0,885},{10,0,891},{10,0,900},{10,0,939},{12,0,760},{142,0,= 449},{ -139,11,366},{132,0,818},{134,11,85},{135,10,994},{7,0,330},{5,10,233},{5,= 10,320} -,{6,10,140},{136,10,295},{4,0,1004},{8,0,982},{136,0,993},{133,10,978},{4= ,10,905 -},{6,10,1701},{137,10,843},{10,0,545},{140,0,301},{6,0,947},{134,0,1062},= {134,0, -1188},{4,0,904},{5,0,794},{152,10,6},{134,0,1372},{135,11,608},{5,11,279}= ,{6,11, -235},{7,11,468},{8,11,446},{9,11,637},{10,11,717},{11,11,738},{140,11,514= },{132, -10,509},{5,11,17},{6,11,371},{137,11,528},{132,0,693},{4,11,115},{5,11,66= 9},{6, -11,407},{8,11,311},{11,11,10},{141,11,5},{11,0,377},{7,10,273},{137,11,38= 1},{135 -,0,695},{7,0,386},{138,0,713},{135,10,1041},{134,0,1291},{6,0,7},{6,0,35}= ,{7,0, -147},{7,0,1069},{7,0,1568},{7,0,1575},{7,0,1917},{8,0,43},{8,0,208},{9,0,= 128},{9 -,0,866},{10,0,20},{11,0,981},{147,0,33},{7,0,893},{141,0,424},{139,10,234= },{150, -11,56},{5,11,779},{5,11,807},{6,11,1655},{134,11,1676},{5,10,802},{7,10,2= 021},{ -136,10,805},{4,11,196},{5,10,167},{5,11,558},{5,10,899},{5,11,949},{6,10,= 410},{ -137,10,777},{137,10,789},{134,10,1705},{8,0,904},{140,0,787},{6,0,322},{9= ,0,552} -,{11,0,274},{13,0,209},{13,0,499},{14,0,85},{15,0,126},{145,0,70},{135,10= ,10},{5 -,10,11},{6,10,117},{6,10,485},{7,10,1133},{9,10,582},{9,10,594},{11,10,21= },{11, -10,818},{12,10,535},{141,10,86},{4,10,264},{7,10,1067},{8,10,204},{8,10,3= 85},{ -139,10,953},{132,11,752},{138,10,56},{133,10,470},{6,0,1808},{8,0,83},{8,= 0,742}, -{8,0,817},{9,0,28},{9,0,29},{9,0,885},{10,0,387},{11,0,633},{11,0,740},{1= 3,0,235 -},{13,0,254},{15,0,143},{143,0,146},{140,0,49},{134,0,1832},{4,11,227},{5= ,11,159 -},{5,11,409},{7,11,80},{10,11,294},{10,11,479},{12,11,418},{14,11,50},{14= ,11,249 -},{142,11,295},{7,11,1470},{8,11,66},{8,11,137},{8,11,761},{9,11,638},{11= ,11,80} -,{11,11,212},{11,11,368},{11,11,418},{12,11,8},{13,11,15},{16,11,61},{17,= 11,59}, -{19,11,28},{148,11,84},{139,10,1015},{138,11,468},{135,0,421},{6,0,415},{= 7,0, -1049},{137,0,442},{6,11,38},{7,11,1220},{8,11,185},{8,11,256},{9,11,22},{= 9,11, -331},{10,11,738},{11,11,205},{11,11,540},{11,11,746},{13,11,399},{13,11,4= 65},{14 -,11,88},{142,11,194},{139,0,289},{133,10,715},{4,0,110},{10,0,415},{10,0,= 597},{ -142,0,206},{4,11,159},{6,11,115},{7,11,252},{7,11,257},{7,11,1928},{8,11,= 69},{9, -11,384},{10,11,91},{10,11,615},{12,11,375},{14,11,235},{18,11,117},{147,1= 1,123}, -{5,11,911},{136,11,278},{7,0,205},{7,0,2000},{8,10,794},{9,10,400},{10,10= ,298},{ -142,10,228},{135,11,1774},{4,11,151},{7,11,1567},{8,11,351},{137,11,322},= {136,10 -,724},{133,11,990},{7,0,1539},{11,0,512},{13,0,205},{19,0,30},{22,0,36},{= 23,0,19 -},{135,11,1539},{5,11,194},{7,11,1662},{9,11,90},{140,11,180},{6,10,190},= {7,10, -768},{135,10,1170},{134,0,1340},{4,0,283},{135,0,1194},{133,11,425},{133,= 11,971} -,{12,0,549},{14,10,67},{147,10,60},{135,10,1023},{134,0,1720},{138,11,587= },{5,11 -,72},{6,11,264},{7,11,21},{7,11,46},{7,11,2013},{8,11,215},{8,11,513},{10= ,11,266 -},{139,11,22},{5,0,319},{135,0,534},{6,10,137},{9,10,75},{9,10,253},{10,1= 0,194}, -{138,10,444},{7,0,1180},{20,0,112},{6,11,239},{7,11,118},{10,11,95},{11,1= 1,603}, -{13,11,443},{14,11,160},{143,11,4},{134,11,431},{5,11,874},{6,11,1677},{1= 1,10, -643},{12,10,115},{143,11,0},{134,0,967},{6,11,65},{7,11,939},{7,11,1172},= {7,11, -1671},{9,11,540},{10,11,696},{11,11,265},{11,11,732},{11,11,928},{11,11,9= 37},{12 -,11,399},{13,11,438},{149,11,19},{137,11,200},{135,0,1940},{5,10,760},{7,= 10,542} -,{8,10,135},{136,10,496},{140,11,44},{7,11,1655},{136,11,305},{7,10,319},= {7,10, -355},{7,10,763},{10,10,389},{145,10,43},{136,0,735},{138,10,786},{137,11,= 19},{ -132,11,696},{5,0,132},{9,0,486},{9,0,715},{10,0,458},{11,0,373},{11,0,668= },{11,0 -,795},{11,0,897},{12,0,272},{12,0,424},{12,0,539},{12,0,558},{14,0,245},{= 14,0, -263},{14,0,264},{14,0,393},{142,0,403},{10,0,38},{139,0,784},{132,0,838},= {4,11, -302},{135,11,1766},{133,0,379},{5,0,8},{6,0,89},{6,0,400},{7,0,1569},{7,0= ,1623}, -{7,0,1850},{8,0,218},{8,0,422},{9,0,570},{10,0,626},{4,11,726},{133,11,63= 0},{4,0 -,1017},{138,0,660},{6,0,387},{7,0,882},{141,0,111},{6,0,224},{7,0,877},{1= 37,0, -647},{4,10,58},{5,10,286},{6,10,319},{7,10,402},{7,10,1254},{7,10,1903},{= 8,10, -356},{140,10,408},{135,0,790},{9,0,510},{10,0,53},{4,10,389},{9,10,181},{= 10,10, -29},{10,10,816},{11,10,311},{11,10,561},{12,10,67},{141,10,181},{142,0,45= 8},{6, -11,118},{7,11,215},{7,11,1521},{140,11,11},{134,0,954},{135,0,394},{134,0= ,1367}, -{5,11,225},{133,10,373},{132,0,882},{7,0,1409},{135,10,1972},{135,10,1793= },{4,11 -,370},{5,11,756},{135,11,1326},{150,11,13},{7,11,354},{10,11,410},{139,11= ,815},{ -6,11,1662},{7,11,48},{8,11,771},{10,11,116},{13,11,104},{14,11,105},{14,1= 1,184}, -{15,11,168},{19,11,92},{148,11,68},{7,0,124},{136,0,38},{5,0,261},{7,0,78= },{7,0, -199},{8,0,815},{9,0,126},{10,0,342},{140,0,647},{4,0,628},{140,0,724},{7,= 0,266}, -{8,0,804},{7,10,1651},{145,10,89},{135,0,208},{134,0,1178},{6,0,79},{135,= 0,1519} -,{132,10,672},{133,10,737},{136,0,741},{132,11,120},{4,0,710},{6,0,376},{= 134,0, -606},{134,0,1347},{134,0,1494},{6,0,850},{6,0,1553},{137,0,821},{5,10,145= },{134, -11,593},{7,0,1311},{140,0,135},{4,0,467},{5,0,405},{134,0,544},{5,11,820}= ,{135, -11,931},{6,0,100},{7,0,244},{7,0,632},{7,0,1609},{8,0,178},{8,0,638},{141= ,0,58}, -{4,10,387},{135,10,1288},{6,11,151},{6,11,1675},{7,11,383},{151,11,10},{1= 32,0, -481},{135,10,550},{134,0,1378},{6,11,1624},{11,11,11},{12,11,422},{13,11,= 262},{ -142,11,360},{133,0,791},{4,11,43},{5,11,344},{133,11,357},{7,0,1227},{140= ,0,978} -,{7,0,686},{8,0,33},{8,0,238},{10,0,616},{11,0,467},{11,0,881},{13,0,217}= ,{13,0, -253},{142,0,268},{137,0,857},{8,0,467},{8,0,1006},{7,11,148},{8,11,284},{= 141,11, -63},{4,10,576},{135,10,1263},{133,11,888},{5,10,919},{134,10,1673},{20,10= ,37},{ -148,11,37},{132,0,447},{132,11,711},{4,0,128},{5,0,415},{6,0,462},{7,0,29= 4},{7,0 -,578},{10,0,710},{139,0,86},{4,10,82},{5,10,333},{5,10,904},{6,10,207},{7= ,10,325 -},{7,10,1726},{8,10,101},{10,10,778},{139,10,220},{136,0,587},{137,11,440= },{133, -10,903},{6,0,427},{7,0,1018},{138,0,692},{4,0,195},{135,0,802},{140,10,14= 7},{134 -,0,1546},{134,0,684},{132,10,705},{136,0,345},{11,11,678},{140,11,307},{1= 33,0, -365},{134,0,1683},{4,11,65},{5,11,479},{5,11,1004},{7,11,1913},{8,11,317}= ,{9,11, -302},{10,11,612},{141,11,22},{138,0,472},{4,11,261},{135,11,510},{134,10,= 90},{ -142,0,433},{151,0,28},{4,11,291},{7,11,101},{9,11,515},{12,11,152},{12,11= ,443},{ -13,11,392},{142,11,357},{140,0,997},{5,0,3},{8,0,578},{9,0,118},{10,0,705= },{141, -0,279},{135,11,1266},{7,10,813},{12,10,497},{141,10,56},{133,0,229},{6,10= ,125},{ -135,10,1277},{8,0,102},{10,0,578},{10,0,672},{12,0,496},{13,0,408},{14,0,= 121},{ -17,0,106},{151,10,12},{6,0,866},{134,0,1080},{136,0,1022},{4,11,130},{135= ,11,843 -},{5,11,42},{5,11,879},{7,11,245},{7,11,324},{7,11,1532},{11,11,463},{11,= 11,472} -,{13,11,363},{144,11,52},{150,0,55},{8,0,115},{8,0,350},{9,0,489},{10,0,1= 28},{11 -,0,306},{12,0,373},{14,0,30},{17,0,79},{19,0,80},{4,11,134},{133,11,372},= {134,0, -657},{134,0,933},{135,11,1147},{4,0,230},{133,0,702},{134,0,1728},{4,0,48= 4},{18, -0,26},{19,0,42},{20,0,43},{21,0,0},{23,0,27},{152,0,14},{7,0,185},{135,0,= 703},{6 -,0,417},{10,0,618},{7,10,1106},{9,10,770},{11,10,112},{140,10,413},{134,0= ,803},{ -132,11,644},{134,0,1262},{7,11,540},{12,10,271},{145,10,109},{135,11,123}= ,{132,0 -,633},{134,11,623},{4,11,908},{5,11,359},{5,11,508},{6,11,1723},{7,11,343= },{7,11 -,1996},{135,11,2026},{135,0,479},{10,0,262},{7,10,304},{9,10,646},{9,10,8= 62},{11 -,10,696},{12,10,208},{15,10,79},{147,10,108},{4,11,341},{135,11,480},{134= ,0,830} -,{5,0,70},{5,0,622},{6,0,334},{7,0,1032},{9,0,171},{11,0,26},{11,0,213},{= 11,0, -637},{11,0,707},{12,0,202},{12,0,380},{13,0,226},{13,0,355},{14,0,222},{1= 45,0,42 -},{135,10,981},{143,0,217},{137,11,114},{4,0,23},{4,0,141},{5,0,313},{5,0= ,1014}, -{6,0,50},{6,0,51},{7,0,142},{7,0,384},{7,0,559},{8,0,640},{9,0,460},{9,0,= 783},{ -11,0,741},{12,0,183},{141,0,488},{141,0,360},{7,0,1586},{7,11,1995},{8,11= ,299},{ -11,11,890},{140,11,674},{132,10,434},{7,0,652},{134,10,550},{7,0,766},{5,= 10,553} -,{138,10,824},{7,0,737},{8,0,298},{136,10,452},{4,11,238},{5,11,503},{6,1= 1,179}, -{7,11,2003},{8,11,381},{8,11,473},{9,11,149},{10,11,183},{15,11,45},{143,= 11,86}, -{133,10,292},{5,0,222},{9,0,655},{138,0,534},{138,10,135},{4,11,121},{5,1= 1,156}, -{5,11,349},{9,11,136},{10,11,605},{14,11,342},{147,11,107},{137,0,906},{6= ,0,1013 -},{134,0,1250},{6,0,1956},{6,0,2009},{8,0,991},{144,0,120},{135,11,1192},= {138,0, -503},{5,0,154},{7,0,1491},{10,0,379},{138,0,485},{6,0,1867},{6,0,1914},{6= ,0,1925 -},{9,0,917},{9,0,925},{9,0,932},{9,0,951},{9,0,1007},{9,0,1013},{12,0,806= },{12,0 -,810},{12,0,814},{12,0,816},{12,0,824},{12,0,832},{12,0,837},{12,0,863},{= 12,0, -868},{12,0,870},{12,0,889},{12,0,892},{12,0,900},{12,0,902},{12,0,908},{1= 2,0,933 -},{12,0,942},{12,0,949},{12,0,954},{15,0,175},{15,0,203},{15,0,213},{15,0= ,218},{ -15,0,225},{15,0,231},{15,0,239},{15,0,248},{15,0,252},{18,0,190},{18,0,20= 4},{18, -0,215},{18,0,216},{18,0,222},{18,0,225},{18,0,230},{18,0,239},{18,0,241},= {21,0, -42},{21,0,43},{21,0,44},{21,0,45},{21,0,46},{21,0,53},{24,0,27},{152,0,31= },{133, -0,716},{135,0,844},{4,0,91},{5,0,388},{5,0,845},{6,0,206},{6,0,252},{6,0,= 365},{7 -,0,136},{7,0,531},{136,0,621},{7,10,393},{10,10,603},{139,10,206},{6,11,8= 0},{6, -11,1694},{7,11,173},{7,11,1974},{9,11,547},{10,11,730},{14,11,18},{150,11= ,39},{ -137,0,748},{4,11,923},{134,11,1711},{4,10,912},{137,10,232},{7,10,98},{7,= 10,1973 -},{136,10,716},{14,0,103},{133,10,733},{132,11,595},{12,0,158},{18,0,8},{= 19,0,62 -},{20,0,6},{22,0,4},{23,0,2},{23,0,9},{5,11,240},{6,11,459},{7,11,12},{7,= 11,114} -,{7,11,502},{7,11,1751},{7,11,1753},{7,11,1805},{8,11,658},{9,11,1},{11,1= 1,959}, -{13,11,446},{142,11,211},{135,0,576},{5,0,771},{5,0,863},{5,0,898},{6,0,6= 48},{6, -0,1632},{6,0,1644},{134,0,1780},{133,0,331},{7,11,633},{7,11,905},{7,11,9= 09},{7, -11,1538},{9,11,767},{140,11,636},{140,0,632},{5,0,107},{7,0,201},{136,0,5= 18},{6, -0,446},{7,0,1817},{134,11,490},{9,0,851},{141,0,510},{7,11,250},{8,11,506= },{136, -11,507},{4,0,504},{137,10,72},{132,11,158},{4,11,140},{7,11,362},{8,11,20= 9},{9, -11,10},{9,11,160},{9,11,503},{10,11,689},{11,11,350},{11,11,553},{11,11,7= 25},{12 -,11,252},{12,11,583},{13,11,192},{13,11,352},{14,11,269},{14,11,356},{148= ,11,50} -,{6,11,597},{135,11,1318},{135,10,1454},{5,0,883},{5,0,975},{8,0,392},{14= 8,0,7}, -{6,11,228},{7,11,1341},{9,11,408},{138,11,343},{11,11,348},{11,10,600},{1= 2,11,99 -},{13,10,245},{18,11,1},{18,11,11},{147,11,4},{134,11,296},{5,0,922},{134= ,0,1707 -},{132,11,557},{4,11,548},{7,10,164},{7,10,1571},{9,10,107},{140,10,225},= {7,11, -197},{8,11,142},{8,11,325},{9,11,150},{9,11,596},{10,11,350},{10,11,353},= {11,11, -74},{11,11,315},{14,11,423},{143,11,141},{5,0,993},{7,0,515},{137,0,91},{= 4,0,131 -},{8,0,200},{5,10,484},{5,10,510},{6,10,434},{7,10,1000},{7,10,1098},{136= ,10,2}, -{152,0,10},{4,11,62},{5,11,83},{6,11,399},{6,11,579},{7,11,692},{7,11,846= },{7,11 -,1015},{7,11,1799},{8,11,403},{9,11,394},{10,11,133},{12,11,4},{12,11,297= },{12, -11,452},{16,11,81},{18,11,19},{18,11,25},{21,11,14},{22,11,12},{151,11,18= },{140, -11,459},{132,11,177},{7,0,1433},{9,0,365},{137,11,365},{132,10,460},{5,0,= 103},{6 -,0,2004},{7,0,921},{8,0,580},{8,0,593},{8,0,630},{10,0,28},{5,11,411},{13= 5,11, -653},{4,10,932},{133,10,891},{4,0,911},{5,0,867},{5,0,1013},{7,0,2034},{8= ,0,798} -,{136,0,813},{7,11,439},{10,11,727},{11,11,260},{139,11,684},{136,10,625}= ,{5,11, -208},{7,11,753},{135,11,1528},{5,0,461},{7,0,1925},{12,0,39},{13,0,265},{= 13,0, -439},{134,10,76},{6,0,853},{8,10,92},{137,10,221},{5,0,135},{6,0,519},{7,= 0,1722} -,{10,0,271},{11,0,261},{145,0,54},{139,11,814},{14,0,338},{148,0,81},{4,0= ,300},{ -133,0,436},{5,0,419},{5,0,687},{7,0,864},{9,0,470},{135,11,864},{9,0,836}= ,{133, -11,242},{134,0,1937},{4,10,763},{133,11,953},{132,10,622},{132,0,393},{13= 3,10, -253},{8,0,357},{10,0,745},{14,0,426},{17,0,94},{19,0,57},{135,10,546},{5,= 11,615} -,{146,11,37},{9,10,73},{10,10,110},{14,10,185},{145,10,119},{11,0,703},{7= ,10,624 -},{7,10,916},{10,10,256},{139,10,87},{133,11,290},{5,10,212},{12,10,35},{= 141,10, -382},{132,11,380},{5,11,52},{7,11,277},{9,11,368},{139,11,791},{133,0,387= },{10, -11,138},{139,11,476},{4,0,6},{5,0,708},{136,0,75},{7,0,1351},{9,0,581},{1= 0,0,639 -},{11,0,453},{140,0,584},{132,0,303},{138,0,772},{135,10,1175},{4,0,749},= {5,10, -816},{6,11,256},{7,11,307},{7,11,999},{7,11,1481},{7,11,1732},{7,11,1738}= ,{8,11, -265},{9,11,414},{11,11,316},{12,11,52},{13,11,420},{147,11,100},{135,11,1= 296},{6 -,0,1065},{5,10,869},{5,10,968},{6,10,1626},{8,10,734},{136,10,784},{4,10,= 542},{6 -,10,1716},{6,10,1727},{7,10,1082},{7,10,1545},{8,10,56},{8,10,118},{8,10,= 412},{8 -,10,564},{9,10,888},{9,10,908},{10,10,50},{10,10,423},{11,10,685},{11,10,= 697},{ -11,10,933},{12,10,299},{13,10,126},{13,10,136},{13,10,170},{141,10,190},{= 134,0, -226},{4,0,106},{7,0,310},{11,0,717},{133,11,723},{5,0,890},{5,0,988},{4,1= 0,232}, -{9,10,202},{10,10,474},{140,10,433},{6,0,626},{142,0,431},{10,0,706},{150= ,0,44}, -{13,0,51},{6,10,108},{7,10,1003},{7,10,1181},{8,10,111},{136,10,343},{132= ,0,698} -,{5,11,109},{6,11,1784},{7,11,1895},{12,11,296},{140,11,302},{134,0,828},= {134,10 -,1712},{138,0,17},{7,0,1929},{4,10,133},{5,11,216},{7,10,711},{7,10,1298}= ,{7,10, -1585},{7,11,1879},{9,11,141},{9,11,270},{9,11,679},{10,11,159},{10,11,553= },{11, -11,197},{11,11,438},{12,11,538},{12,11,559},{13,11,193},{13,11,423},{14,1= 1,144}, -{14,11,166},{14,11,167},{15,11,67},{147,11,84},{141,11,127},{7,11,1872},{= 137,11, -81},{6,10,99},{7,10,1808},{145,10,57},{134,11,391},{5,0,689},{6,0,84},{7,= 0,1250} -,{6,10,574},{7,10,428},{10,10,669},{11,10,485},{11,10,840},{12,10,300},{1= 42,10, -250},{7,11,322},{136,11,249},{7,11,432},{135,11,1649},{135,10,1871},{137,= 10,252} -,{6,11,155},{140,11,234},{7,0,871},{19,0,27},{147,11,27},{140,0,498},{5,0= ,986},{ -6,0,130},{138,0,823},{6,0,1793},{7,0,1582},{8,0,458},{10,0,101},{10,0,318= },{10,0 -,945},{12,0,734},{16,0,104},{18,0,177},{6,10,323},{135,10,1564},{5,11,632= },{138, -11,526},{10,0,435},{7,10,461},{136,10,775},{6,11,144},{7,11,948},{7,11,10= 42},{7, -11,1857},{8,11,235},{8,11,461},{9,11,453},{9,11,530},{10,11,354},{17,11,7= 7},{19, -11,99},{148,11,79},{138,0,966},{7,0,1644},{137,0,129},{135,0,997},{136,0,= 502},{5 -,11,196},{6,11,486},{7,11,212},{8,11,309},{136,11,346},{7,10,727},{146,10= ,73},{ -132,0,823},{132,11,686},{135,0,1927},{4,0,762},{7,0,1756},{137,0,98},{136= ,10,577 -},{24,0,8},{4,11,30},{5,11,43},{152,11,8},{7,0,1046},{139,0,160},{7,0,492= },{4,10 -,413},{5,10,677},{7,11,492},{8,10,432},{140,10,280},{6,0,45},{7,0,433},{8= ,0,129} -,{9,0,21},{10,0,392},{11,0,79},{12,0,499},{13,0,199},{141,0,451},{7,0,558= },{136, -0,353},{4,11,220},{7,11,1535},{9,11,93},{139,11,474},{7,10,646},{7,10,173= 0},{11, -10,446},{141,10,178},{133,0,785},{134,0,1145},{8,0,81},{9,0,189},{9,0,201= },{11,0 -,478},{11,0,712},{141,0,338},{5,0,353},{151,0,26},{11,0,762},{132,10,395}= ,{134,0 -,2024},{4,0,611},{133,0,606},{9,10,174},{10,10,164},{11,10,440},{11,10,84= 1},{143 -,10,98},{134,10,426},{10,10,608},{139,10,1002},{138,10,250},{6,0,25},{7,0= ,855},{ -7,0,1258},{144,0,32},{7,11,1725},{138,11,393},{5,11,263},{134,11,414},{6,= 0,2011} -,{133,10,476},{4,0,4},{7,0,1118},{7,0,1320},{7,0,1706},{8,0,277},{9,0,622= },{10,0 -,9},{11,0,724},{12,0,350},{12,0,397},{13,0,28},{13,0,159},{15,0,89},{18,0= ,5},{19 -,0,9},{20,0,34},{22,0,47},{6,11,178},{6,11,1750},{8,11,251},{9,11,690},{1= 0,11, -155},{10,11,196},{10,11,373},{11,11,698},{13,11,155},{148,11,93},{5,11,97= },{137, -11,393},{7,0,764},{11,0,461},{12,0,172},{5,10,76},{6,10,458},{6,10,497},{= 7,10, -868},{9,10,658},{10,10,594},{11,10,566},{12,10,338},{141,10,200},{134,0,1= 449},{ -138,11,40},{134,11,1639},{134,0,1445},{6,0,1168},{4,10,526},{7,10,1029},{= 135,10, -1054},{4,11,191},{7,11,934},{8,11,647},{145,11,97},{132,10,636},{6,0,233}= ,{7,10, -660},{7,10,1124},{17,10,31},{19,10,22},{151,10,14},{6,10,1699},{136,11,11= 0},{12, -11,246},{15,11,162},{19,11,64},{20,11,8},{20,11,95},{22,11,24},{152,11,17= },{5,11 -,165},{9,11,346},{138,11,655},{5,11,319},{135,11,534},{134,0,255},{9,0,21= 6},{8, -11,128},{139,11,179},{9,0,183},{139,0,286},{11,0,956},{151,0,3},{4,0,536}= ,{7,0, -1141},{10,0,723},{139,0,371},{4,10,279},{7,10,301},{137,10,362},{7,0,285}= ,{5,11, -57},{6,11,101},{6,11,1663},{7,11,132},{7,11,1048},{7,11,1154},{7,11,1415}= ,{7,11, -1507},{12,11,493},{15,11,105},{151,11,15},{5,11,459},{7,11,1073},{7,10,17= 43},{8, -11,241},{136,11,334},{4,10,178},{133,10,399},{135,0,560},{132,0,690},{135= ,0,1246 -},{18,0,157},{147,0,63},{10,0,599},{11,0,33},{12,0,571},{149,0,1},{6,11,3= 24},{6, -11,520},{7,11,338},{7,11,1616},{7,11,1729},{8,11,228},{9,11,69},{139,11,7= 50},{7, -0,1862},{12,0,491},{12,0,520},{13,0,383},{142,0,244},{135,11,734},{134,10= ,1692}, -{10,0,448},{11,0,630},{17,0,117},{6,10,202},{7,11,705},{12,10,360},{17,10= ,118},{ -18,10,27},{148,10,67},{4,11,73},{6,11,612},{7,11,927},{7,11,1822},{8,11,2= 17},{9, -11,472},{9,11,765},{9,11,766},{10,11,408},{11,11,51},{11,11,793},{12,11,2= 66},{15 -,11,158},{20,11,89},{150,11,32},{4,0,190},{133,0,554},{133,0,1001},{5,11,= 389},{8 -,11,636},{137,11,229},{5,0,446},{7,10,872},{10,10,516},{139,10,167},{137,= 10,313} -,{132,10,224},{134,0,1313},{5,10,546},{7,10,35},{8,10,11},{8,10,12},{9,10= ,315},{ -9,10,533},{10,10,802},{11,10,166},{12,10,525},{142,10,243},{6,0,636},{137= ,0,837} -,{5,10,241},{8,10,242},{9,10,451},{10,10,667},{11,10,598},{140,10,429},{2= 2,10,46 -},{150,11,46},{136,11,472},{11,0,278},{142,0,73},{141,11,185},{132,0,868}= ,{134,0 -,972},{4,10,366},{137,10,516},{138,0,1010},{5,11,189},{6,10,1736},{7,11,4= 42},{7, -11,443},{8,11,281},{12,11,174},{13,11,83},{141,11,261},{139,11,384},{6,11= ,2},{7, -11,191},{7,11,446},{7,11,758},{7,11,1262},{7,11,1737},{8,11,22},{8,11,270= },{8,11 -,612},{9,11,4},{9,11,167},{9,11,312},{9,11,436},{10,11,156},{10,11,216},{= 10,11, -311},{10,11,623},{11,11,72},{11,11,330},{11,11,455},{12,11,101},{12,11,32= 1},{12, -11,504},{12,11,530},{12,11,543},{13,11,17},{13,11,156},{13,11,334},{14,11= ,48},{ -15,11,70},{17,11,60},{148,11,64},{6,10,331},{136,10,623},{135,0,1231},{13= 2,0,304 -},{6,11,60},{7,11,670},{7,11,1327},{8,11,411},{8,11,435},{9,11,653},{9,11= ,740},{ -10,11,385},{11,11,222},{11,11,324},{11,11,829},{140,11,611},{7,0,506},{6,= 11,166} -,{7,11,374},{135,11,1174},{14,11,43},{146,11,21},{135,11,1694},{135,10,18= 88},{5, -11,206},{134,11,398},{135,11,50},{150,0,26},{6,0,53},{6,0,199},{7,0,1408}= ,{8,0, -32},{8,0,93},{10,0,397},{10,0,629},{11,0,593},{11,0,763},{13,0,326},{145,= 0,35},{ -134,0,105},{132,10,394},{4,0,843},{138,0,794},{11,0,704},{141,0,396},{5,0= ,114},{ -5,0,255},{141,0,285},{6,0,619},{7,0,898},{7,0,1092},{8,0,485},{18,0,28},{= 19,0, -116},{135,10,1931},{9,0,145},{7,10,574},{135,10,1719},{7,0,2035},{8,0,19}= ,{9,0, -89},{138,0,831},{132,10,658},{6,11,517},{7,11,1159},{10,11,621},{139,11,1= 92},{7, -0,1933},{7,11,1933},{9,10,781},{10,10,144},{11,10,385},{13,10,161},{13,10= ,228},{ -13,10,268},{148,10,107},{136,10,374},{10,11,223},{139,11,645},{135,0,1728= },{7,11 -,64},{7,11,289},{136,11,245},{4,10,344},{6,10,498},{139,10,323},{136,0,74= 6},{135 -,10,1063},{137,10,155},{4,0,987},{6,0,1964},{6,0,1974},{6,0,1990},{136,0,= 995},{ -133,11,609},{133,10,906},{134,0,1550},{134,0,874},{5,11,129},{6,11,61},{1= 35,11, -947},{4,0,1018},{6,0,1938},{6,0,2021},{134,0,2039},{132,0,814},{11,0,126}= ,{139,0 -,287},{134,0,1264},{5,0,955},{136,0,814},{141,11,506},{132,11,314},{6,0,9= 81},{ -139,11,1000},{5,0,56},{8,0,892},{8,0,915},{140,0,776},{148,0,100},{10,0,4= },{10,0 -,13},{11,0,638},{148,0,57},{148,11,74},{5,0,738},{132,10,616},{133,11,637= },{136, -10,692},{133,0,758},{132,10,305},{137,11,590},{5,11,280},{135,11,1226},{1= 34,11, -494},{135,0,1112},{133,11,281},{13,0,44},{14,0,214},{5,10,214},{7,10,603}= ,{8,10, -611},{9,10,686},{10,10,88},{11,10,459},{11,10,496},{12,10,463},{140,10,59= 0},{139 -,0,328},{135,11,1064},{137,0,133},{7,0,168},{13,0,196},{141,0,237},{134,1= 0,1703} -,{134,0,1152},{135,0,1245},{5,0,110},{6,0,169},{6,0,1702},{7,0,400},{8,0,= 538},{9 -,0,184},{9,0,524},{140,0,218},{6,0,1816},{10,0,871},{12,0,769},{140,0,785= },{132, -11,630},{7,11,33},{7,11,120},{8,11,489},{9,11,319},{10,11,820},{11,11,100= 4},{12, -11,379},{13,11,117},{13,11,412},{14,11,25},{15,11,52},{15,11,161},{16,11,= 47},{ -149,11,2},{6,0,133},{8,0,413},{9,0,353},{139,0,993},{145,10,19},{4,11,937= },{133, -11,801},{134,0,978},{6,0,93},{6,0,1508},{7,0,1422},{7,0,1851},{8,0,673},{= 9,0,529 -},{140,0,43},{6,0,317},{10,0,512},{4,10,737},{11,10,294},{12,10,60},{12,1= 0,437}, -{13,10,64},{13,10,380},{142,10,430},{9,0,371},{7,11,1591},{144,11,43},{6,= 10,1758 -},{8,10,520},{9,10,345},{9,10,403},{142,10,350},{5,0,526},{10,10,242},{13= 8,10, -579},{9,0,25},{10,0,467},{138,0,559},{5,10,139},{7,10,1168},{138,10,539},= {4,0, -335},{135,0,942},{140,0,754},{132,11,365},{11,0,182},{142,0,195},{142,11,= 29},{5, -11,7},{139,11,774},{4,11,746},{135,11,1090},{8,0,39},{10,0,773},{11,0,84}= ,{12,0, -205},{142,0,1},{5,0,601},{5,0,870},{5,11,360},{136,11,237},{132,0,181},{1= 36,0, -370},{134,0,1652},{8,0,358},{4,10,107},{7,10,613},{8,10,439},{8,10,504},{= 9,10, -501},{10,10,383},{139,10,477},{132,10,229},{137,11,785},{4,0,97},{5,0,147= },{6,0, -286},{7,0,1362},{141,0,176},{6,0,537},{7,0,788},{7,0,1816},{132,10,903},{= 140,10, -71},{6,0,743},{134,0,1223},{6,0,375},{7,0,169},{7,0,254},{8,0,780},{135,1= 1,1493} -,{7,0,1714},{4,10,47},{6,10,373},{7,10,452},{7,10,543},{7,10,1856},{9,10,= 6},{11, -10,257},{139,10,391},{6,0,896},{136,0,1003},{135,0,1447},{137,11,341},{5,= 10,980} -,{134,10,1754},{145,11,22},{4,11,277},{5,11,608},{6,11,493},{7,11,457},{1= 40,11, -384},{7,10,536},{7,10,1331},{136,10,143},{140,0,744},{7,11,27},{135,11,31= 6},{18, -0,126},{5,10,19},{134,10,533},{4,0,788},{11,0,41},{5,11,552},{5,11,586},{= 5,11, -676},{6,11,448},{8,11,244},{11,11,1},{11,11,41},{13,11,3},{16,11,54},{17,= 11,4},{ -146,11,13},{4,0,985},{6,0,1801},{4,11,401},{137,11,264},{5,10,395},{5,10,= 951},{ -134,10,1776},{5,0,629},{135,0,1549},{11,10,663},{12,10,210},{13,10,166},{= 13,10, -310},{14,10,373},{147,10,43},{9,11,543},{10,11,524},{11,11,30},{12,11,524= },{14, -11,315},{16,11,18},{20,11,26},{148,11,65},{4,11,205},{5,11,623},{7,11,104= },{136, -11,519},{5,0,293},{134,0,601},{7,11,579},{9,11,41},{9,11,244},{9,11,669},= {10,11, -5},{11,11,861},{11,11,951},{139,11,980},{132,11,717},{132,10,695},{7,10,4= 97},{9, -10,387},{147,10,81},{132,0,420},{142,0,37},{6,0,1134},{6,0,1900},{12,0,83= 0},{12, -0,878},{12,0,894},{15,0,221},{143,0,245},{132,11,489},{7,0,1570},{140,0,5= 42},{8, -0,933},{136,0,957},{6,0,1371},{7,0,31},{8,0,373},{5,10,284},{6,10,49},{6,= 10,350} -,{7,10,377},{7,10,1693},{8,10,678},{9,10,161},{9,10,585},{9,10,671},{9,10= ,839},{ -11,10,912},{141,10,427},{135,11,892},{4,0,325},{138,0,125},{139,11,47},{1= 32,10, -597},{138,0,323},{6,0,1547},{7,11,1605},{9,11,473},{11,11,962},{146,11,13= 9},{139 -,10,908},{7,11,819},{9,11,26},{9,11,392},{10,11,152},{10,11,226},{11,11,1= 9},{12, -11,276},{12,11,426},{12,11,589},{13,11,460},{15,11,97},{19,11,48},{148,11= ,104},{ -135,11,51},{4,0,718},{135,0,1216},{6,0,1896},{6,0,1905},{6,0,1912},{9,0,9= 47},{9, -0,974},{12,0,809},{12,0,850},{12,0,858},{12,0,874},{12,0,887},{12,0,904},= {12,0, -929},{12,0,948},{12,0,952},{15,0,198},{15,0,206},{15,0,220},{15,0,227},{1= 5,0,247 -},{18,0,188},{21,0,48},{21,0,50},{24,0,25},{24,0,29},{7,11,761},{7,11,105= 1},{137 -,11,545},{5,0,124},{5,0,144},{6,0,548},{7,0,15},{7,0,153},{137,0,629},{13= 5,11, -606},{135,10,2014},{7,10,2007},{9,11,46},{9,10,101},{9,10,450},{10,10,66}= ,{10,10 -,842},{11,10,536},{140,10,587},{6,0,75},{7,0,1531},{8,0,416},{9,0,240},{9= ,0,275} -,{10,0,100},{11,0,658},{11,0,979},{12,0,86},{14,0,207},{15,0,20},{143,0,2= 5},{5,0 -,141},{5,0,915},{6,0,1783},{7,0,211},{7,0,698},{7,0,1353},{9,0,83},{9,0,2= 81},{10 -,0,376},{10,0,431},{11,0,543},{12,0,664},{13,0,280},{13,0,428},{14,0,61},= {14,0, -128},{17,0,52},{145,0,81},{132,11,674},{135,0,533},{149,0,6},{132,11,770}= ,{133,0 -,538},{5,11,79},{7,11,1027},{7,11,1477},{139,11,52},{139,10,62},{4,0,338}= ,{133,0 -,400},{5,11,789},{134,11,195},{4,11,251},{4,11,688},{7,11,513},{7,11,1284= },{9,11 -,87},{138,11,365},{134,10,1766},{6,0,0},{7,0,84},{11,0,895},{145,0,11},{1= 39,0, -892},{4,0,221},{5,0,659},{7,0,697},{7,0,1211},{138,0,284},{133,0,989},{13= 3,11, -889},{4,11,160},{5,11,330},{7,11,1434},{136,11,174},{6,10,1665},{7,10,256= },{7,10 -,1388},{10,10,499},{139,10,670},{7,0,848},{4,10,22},{5,10,10},{136,10,97}= ,{138,0 -,507},{133,10,481},{4,0,188},{135,0,805},{5,0,884},{6,0,732},{139,0,991},= {135,11 -,968},{11,11,636},{15,11,145},{17,11,34},{19,11,50},{151,11,20},{7,0,959}= ,{16,0, -60},{6,10,134},{7,10,437},{9,10,37},{14,10,285},{142,10,371},{7,10,486},{= 8,10, -155},{11,10,93},{140,10,164},{134,0,1653},{7,0,337},{133,10,591},{6,0,198= 9},{8,0 -,922},{8,0,978},{133,11,374},{132,0,638},{138,0,500},{133,11,731},{5,10,3= 80},{5, -10,650},{136,10,310},{138,11,381},{4,10,364},{7,10,1156},{7,10,1187},{137= ,10,409 -},{137,11,224},{140,0,166},{134,10,482},{4,11,626},{5,11,642},{6,11,425},= {10,11, -202},{139,11,141},{4,10,781},{6,10,487},{7,10,926},{8,10,263},{139,10,500= },{135, -0,418},{4,10,94},{135,10,1265},{136,0,760},{132,10,417},{136,11,835},{5,1= 0,348}, -{134,10,522},{6,0,1277},{134,0,1538},{139,11,541},{135,11,1597},{5,11,384= },{8,11 -,455},{140,11,48},{136,0,770},{5,11,264},{134,11,184},{4,0,89},{5,0,489},= {6,0, -315},{7,0,553},{7,0,1745},{138,0,243},{4,10,408},{4,10,741},{135,10,500},= {134,0, -1396},{133,0,560},{6,0,1658},{9,0,3},{10,0,154},{11,0,641},{13,0,85},{13,= 0,201}, -{141,0,346},{135,11,1595},{5,11,633},{6,11,28},{7,11,219},{135,11,1323},{= 9,11, -769},{140,11,185},{135,11,785},{7,11,359},{8,11,243},{140,11,175},{138,0,= 586},{7 -,0,1271},{134,10,73},{132,11,105},{4,0,166},{5,0,505},{134,0,1670},{133,1= 0,576}, -{4,11,324},{138,11,104},{142,10,231},{6,0,637},{7,10,1264},{7,10,1678},{1= 1,10, -945},{12,10,341},{12,10,471},{12,10,569},{23,11,21},{151,11,23},{8,11,559= },{141, -11,109},{134,0,1947},{7,0,445},{8,0,307},{8,0,704},{10,0,41},{10,0,439},{= 11,0, -237},{11,0,622},{140,0,201},{135,11,963},{135,0,1977},{4,0,189},{5,0,713}= ,{136,0 -,57},{138,0,371},{135,10,538},{132,0,552},{6,0,883},{133,10,413},{6,0,923= },{132, -11,758},{138,11,215},{136,10,495},{7,10,54},{8,10,312},{10,10,191},{10,10= ,614},{ -140,10,567},{7,11,351},{139,11,128},{7,0,875},{6,10,468},{7,10,1478},{8,1= 0,530}, -{142,10,290},{135,0,1788},{17,0,49},{133,11,918},{12,11,398},{20,11,39},{= 21,11, -11},{150,11,41},{10,0,661},{6,10,484},{135,10,822},{135,0,1945},{134,0,79= 4},{137 -,10,900},{135,10,1335},{6,10,1724},{135,10,2022},{132,11,340},{134,0,1135= },{4,0, -784},{133,0,745},{5,0,84},{134,0,163},{133,0,410},{4,0,976},{5,11,985},{7= ,11,509 -},{7,11,529},{145,11,96},{132,10,474},{134,0,703},{135,11,1919},{5,0,322}= ,{8,0, -186},{9,0,262},{10,0,187},{142,0,208},{135,10,1504},{133,0,227},{9,0,560}= ,{13,0, -208},{133,10,305},{132,11,247},{7,0,1395},{8,0,486},{9,0,236},{9,0,878},{= 10,0, -218},{11,0,95},{19,0,17},{147,0,31},{7,0,2043},{8,0,672},{141,0,448},{4,1= 1,184}, -{5,11,390},{6,11,337},{7,11,23},{7,11,494},{7,11,618},{7,11,1456},{8,11,2= 7},{8, -11,599},{10,11,153},{139,11,710},{135,0,466},{135,10,1236},{6,0,167},{7,0= ,186},{ -7,0,656},{10,0,643},{4,10,480},{6,10,302},{6,10,1642},{7,10,837},{7,10,15= 47},{7, -10,1657},{8,10,429},{9,10,228},{13,10,289},{13,10,343},{147,10,101},{134,= 0,1428} -,{134,0,1440},{5,0,412},{7,10,278},{10,10,739},{11,10,708},{141,10,348},{= 134,0, -1118},{136,0,562},{148,11,46},{9,0,316},{139,0,256},{134,0,1771},{135,0,1= 190},{ -137,0,132},{10,11,227},{11,11,497},{11,11,709},{140,11,415},{143,0,66},{6= ,11,360 -},{7,11,1664},{136,11,478},{144,10,28},{4,0,317},{135,0,1279},{5,0,63},{1= 33,0, -509},{136,11,699},{145,10,36},{134,0,1475},{11,11,343},{142,11,127},{132,= 11,739} -,{132,0,288},{135,11,1757},{8,0,89},{8,0,620},{9,0,608},{11,0,628},{12,0,= 322},{ -143,0,124},{134,0,1225},{7,0,1189},{4,11,67},{5,11,422},{6,10,363},{7,11,= 1037},{ -7,11,1289},{7,11,1555},{7,10,1955},{8,10,725},{9,11,741},{145,11,108},{13= 4,0, -1468},{6,0,689},{134,0,1451},{138,0,120},{151,0,1},{137,10,805},{142,0,32= 9},{5, -10,813},{135,10,2046},{135,0,226},{138,11,96},{7,0,1855},{5,10,712},{11,1= 0,17},{ -13,10,321},{144,10,67},{9,0,461},{6,10,320},{7,10,781},{7,10,1921},{9,10,= 55},{10 -,10,186},{10,10,273},{10,10,664},{10,10,801},{11,10,996},{11,10,997},{13,= 10,157} -,{142,10,170},{8,11,203},{8,10,271},{11,11,823},{11,11,846},{12,11,482},{= 13,11, -133},{13,11,277},{13,11,302},{13,11,464},{14,11,205},{142,11,221},{135,0,= 1346},{ -4,11,449},{133,11,718},{134,0,85},{14,0,299},{7,10,103},{7,10,863},{11,10= ,184},{ -145,10,62},{4,11,355},{6,11,311},{9,11,256},{138,11,404},{137,10,659},{13= 8,11, -758},{133,11,827},{5,11,64},{140,11,581},{134,0,1171},{4,11,442},{7,11,10= 47},{7, -11,1352},{135,11,1643},{132,0,980},{5,11,977},{6,11,288},{7,11,528},{135,= 11,1065 -},{5,0,279},{6,0,235},{7,0,468},{8,0,446},{9,0,637},{10,0,717},{11,0,738}= ,{140,0 -,514},{132,0,293},{11,10,337},{142,10,303},{136,11,285},{5,0,17},{6,0,371= },{9,0, -528},{12,0,364},{132,11,254},{5,10,77},{7,10,1455},{10,10,843},{147,10,73= },{150, -0,5},{132,10,458},{6,11,12},{7,11,1219},{145,11,73},{135,10,1420},{6,10,1= 09},{ -138,10,382},{135,11,125},{6,10,330},{7,10,1084},{139,10,142},{6,11,369},{= 6,11, -502},{7,11,1036},{8,11,348},{9,11,452},{10,11,26},{11,11,224},{11,11,387}= ,{11,11 -,772},{12,11,95},{12,11,629},{13,11,195},{13,11,207},{13,11,241},{14,11,2= 60},{14 -,11,270},{143,11,140},{132,11,269},{5,11,480},{7,11,532},{7,11,1197},{7,1= 1,1358} -,{8,11,291},{11,11,349},{142,11,396},{150,0,48},{10,0,601},{13,0,353},{14= 1,0,376 -},{5,0,779},{5,0,807},{6,0,1655},{134,0,1676},{142,11,223},{4,0,196},{5,0= ,558},{ -133,0,949},{148,11,15},{135,11,1764},{134,0,1322},{132,0,752},{139,0,737}= ,{135, -11,657},{136,11,533},{135,0,412},{4,0,227},{5,0,159},{5,0,409},{7,0,80},{= 8,0,556 -},{10,0,479},{12,0,418},{14,0,50},{14,0,123},{14,0,192},{14,0,249},{14,0,= 295},{ -143,0,27},{7,0,1470},{8,0,66},{8,0,137},{8,0,761},{9,0,638},{11,0,80},{11= ,0,212} -,{11,0,368},{11,0,418},{12,0,8},{13,0,15},{16,0,61},{17,0,59},{19,0,28},{= 148,0, -84},{135,10,1985},{4,11,211},{4,11,332},{5,11,335},{6,11,238},{7,11,269},= {7,11, -811},{7,11,1797},{8,10,122},{8,11,836},{9,11,507},{141,11,242},{6,0,683},= {134,0, -1252},{4,0,873},{132,10,234},{134,0,835},{6,0,38},{7,0,1220},{8,0,185},{8= ,0,256} -,{9,0,22},{9,0,331},{10,0,738},{11,0,205},{11,0,540},{11,0,746},{13,0,465= },{14,0 -,88},{142,0,194},{138,0,986},{5,11,1009},{12,11,582},{146,11,131},{4,0,15= 9},{6,0 -,115},{7,0,252},{7,0,257},{7,0,1928},{8,0,69},{9,0,384},{10,0,91},{10,0,6= 15},{12 -,0,375},{14,0,235},{18,0,117},{147,0,123},{133,0,911},{136,0,278},{5,10,4= 30},{5, -10,932},{6,10,131},{7,10,417},{9,10,522},{11,10,314},{141,10,390},{14,10,= 149},{ -14,10,399},{143,10,57},{4,0,151},{7,0,1567},{136,0,749},{5,11,228},{6,11,= 203},{7 -,11,156},{8,11,347},{137,11,265},{132,10,507},{10,0,989},{140,0,956},{133= ,0,990} -,{5,0,194},{6,0,927},{7,0,1662},{9,0,90},{140,0,564},{4,10,343},{133,10,5= 11},{ -133,0,425},{7,10,455},{138,10,591},{4,0,774},{7,11,476},{7,11,1592},{138,= 11,87}, -{5,0,971},{135,10,1381},{5,11,318},{147,11,121},{5,11,291},{7,11,765},{9,= 11,389} -,{140,11,548},{134,10,575},{4,0,827},{12,0,646},{12,0,705},{12,0,712},{14= 0,0,714 -},{139,0,752},{137,0,662},{5,0,72},{6,0,264},{7,0,21},{7,0,46},{7,0,2013}= ,{8,0, -215},{8,0,513},{10,0,266},{139,0,22},{139,11,522},{6,0,239},{7,0,118},{10= ,0,95}, -{11,0,603},{13,0,443},{14,0,160},{143,0,4},{6,0,431},{134,0,669},{7,10,11= 27},{7, -10,1572},{10,10,297},{10,10,422},{11,10,764},{11,10,810},{12,10,264},{13,= 10,102} -,{13,10,300},{13,10,484},{14,10,147},{14,10,229},{17,10,71},{18,10,118},{= 147,10, -120},{5,0,874},{6,0,1677},{15,0,0},{10,11,525},{139,11,82},{6,0,65},{7,0,= 939},{7 -,0,1172},{7,0,1671},{9,0,540},{10,0,696},{11,0,265},{11,0,732},{11,0,928}= ,{11,0, -937},{141,0,438},{134,0,1350},{136,11,547},{132,11,422},{5,11,355},{145,1= 1,0},{ -137,11,905},{5,0,682},{135,0,1887},{132,0,809},{4,0,696},{133,11,865},{6,= 0,1074} -,{6,0,1472},{14,10,35},{142,10,191},{5,11,914},{134,11,1625},{133,11,234}= ,{135, -11,1383},{137,11,780},{132,10,125},{4,0,726},{133,0,630},{8,0,802},{136,0= ,838},{ -132,10,721},{6,0,1337},{7,0,776},{19,0,56},{136,10,145},{132,0,970},{7,10= ,792},{ -8,10,147},{10,10,821},{139,10,1021},{139,10,970},{8,0,940},{137,0,797},{1= 35,11, -1312},{9,0,248},{10,0,400},{7,11,816},{7,11,1241},{7,10,1999},{9,11,283},= {9,11, -520},{10,11,213},{10,11,307},{10,11,463},{10,11,671},{10,11,746},{11,11,4= 01},{11 -,11,794},{12,11,517},{18,11,107},{147,11,115},{6,0,1951},{134,0,2040},{13= 5,11, -339},{13,0,41},{15,0,93},{5,10,168},{5,10,930},{8,10,74},{9,10,623},{12,1= 0,500}, -{140,10,579},{6,0,118},{7,0,215},{7,0,1521},{140,0,11},{6,10,220},{7,10,1= 101},{ -141,10,105},{6,11,421},{7,11,61},{7,11,1540},{10,11,11},{138,11,501},{7,0= ,615},{ -138,0,251},{140,11,631},{135,0,1044},{6,10,19},{7,10,1413},{139,10,428},{= 133,0, -225},{7,10,96},{8,10,401},{8,10,703},{137,10,896},{145,10,116},{6,11,102}= ,{7,11, -72},{15,11,142},{147,11,67},{7,10,1961},{7,10,1965},{8,10,702},{136,10,75= 0},{7, -10,2030},{8,10,150},{8,10,737},{12,10,366},{151,11,30},{4,0,370},{5,0,756= },{7,0, -1326},{135,11,823},{8,10,800},{9,10,148},{9,10,872},{9,10,890},{11,10,309= },{11, -10,1001},{13,10,267},{141,10,323},{6,0,1662},{7,0,48},{8,0,771},{10,0,116= },{13,0 -,104},{14,0,105},{14,0,184},{15,0,168},{19,0,92},{148,0,68},{10,0,209},{1= 35,11, -1870},{7,11,68},{8,11,48},{8,11,88},{8,11,582},{8,11,681},{9,11,373},{9,1= 1,864}, -{11,11,157},{11,11,336},{11,11,843},{148,11,27},{134,0,930},{4,11,88},{5,= 11,137} -,{5,11,174},{5,11,777},{6,11,1664},{6,11,1725},{7,11,77},{7,11,426},{7,11= ,1317}, -{7,11,1355},{8,11,126},{8,11,563},{9,11,523},{9,11,750},{10,11,310},{10,1= 1,836}, -{11,11,42},{11,11,318},{11,11,731},{12,11,68},{12,11,92},{12,11,507},{12,= 11,692} -,{13,11,81},{13,11,238},{13,11,374},{18,11,138},{19,11,78},{19,11,111},{2= 0,11,55 -},{20,11,77},{148,11,92},{4,11,938},{135,11,1831},{5,10,547},{7,10,424},{= 8,11, -617},{138,11,351},{6,0,1286},{6,11,1668},{7,11,1499},{8,11,117},{9,11,314= },{138, -11,174},{6,0,759},{6,0,894},{7,11,707},{139,11,563},{4,0,120},{135,0,1894= },{9,0, -385},{149,0,17},{138,0,429},{133,11,403},{5,0,820},{135,0,931},{10,0,199}= ,{133, -10,133},{6,0,151},{6,0,1675},{7,0,383},{151,0,10},{6,0,761},{136,10,187},= {8,0, -365},{10,10,0},{10,10,818},{139,10,988},{4,11,44},{5,11,311},{6,11,156},{= 7,11, -639},{7,11,762},{7,11,1827},{9,11,8},{9,11,462},{148,11,83},{4,11,346},{7= ,11,115 -},{9,11,180},{9,11,456},{138,11,363},{136,10,685},{7,0,1086},{145,0,46},{= 6,0, -1624},{11,0,11},{12,0,422},{13,0,444},{142,0,360},{6,0,1020},{6,0,1260},{= 134,0, -1589},{4,0,43},{5,0,344},{5,0,357},{14,0,472},{150,0,58},{6,0,1864},{6,0,= 1866},{ -6,0,1868},{6,0,1869},{6,0,1874},{6,0,1877},{6,0,1903},{6,0,1911},{9,0,920= },{9,0, -921},{9,0,924},{9,0,946},{9,0,959},{9,0,963},{9,0,970},{9,0,997},{9,0,100= 8},{9,0 -,1017},{12,0,795},{12,0,797},{12,0,798},{12,0,800},{12,0,803},{12,0,811},= {12,0, -820},{12,0,821},{12,0,839},{12,0,841},{12,0,848},{12,0,911},{12,0,921},{1= 2,0,922 -},{12,0,925},{12,0,937},{12,0,944},{12,0,945},{12,0,953},{15,0,184},{15,0= ,191},{ -15,0,199},{15,0,237},{15,0,240},{15,0,243},{15,0,246},{18,0,203},{21,0,40= },{21,0 -,52},{21,0,57},{24,0,23},{24,0,28},{152,0,30},{134,0,725},{145,11,58},{13= 3,0,888 -},{137,10,874},{4,0,711},{8,10,774},{10,10,670},{140,10,51},{144,11,40},{= 6,11, -185},{7,11,1899},{139,11,673},{137,10,701},{137,0,440},{4,11,327},{5,11,4= 78},{7, -11,1332},{8,11,753},{140,11,227},{4,10,127},{5,10,350},{6,10,356},{8,10,4= 26},{9, -10,572},{10,10,247},{139,10,312},{5,11,1020},{133,11,1022},{4,11,103},{13= 3,11, -401},{6,0,1913},{6,0,1926},{6,0,1959},{9,0,914},{9,0,939},{9,0,952},{9,0,= 979},{9 -,0,990},{9,0,998},{9,0,1003},{9,0,1023},{12,0,827},{12,0,834},{12,0,845},= {12,0, -912},{12,0,935},{12,0,951},{15,0,172},{15,0,174},{18,0,198},{149,0,63},{5= ,0,958} -,{5,0,987},{4,11,499},{135,11,1421},{7,0,885},{6,10,59},{6,10,1762},{9,10= ,603},{ -141,10,397},{10,11,62},{141,11,164},{4,0,847},{135,0,326},{11,0,276},{142= ,0,293} -,{4,0,65},{5,0,479},{5,0,1004},{7,0,1913},{8,0,317},{9,0,302},{10,0,612},= {13,0, -22},{132,11,96},{4,0,261},{135,0,510},{135,0,1514},{6,10,111},{7,10,4},{8= ,10,163 -},{8,10,776},{138,10,566},{4,0,291},{9,0,515},{12,0,152},{12,0,443},{13,0= ,392},{ -142,0,357},{7,11,399},{135,11,1492},{4,0,589},{139,0,282},{6,11,563},{135= ,10, -1994},{5,10,297},{135,10,1038},{4,0,130},{7,0,843},{135,0,1562},{5,0,42},= {5,0, -879},{7,0,245},{7,0,324},{7,0,1532},{11,0,463},{11,0,472},{13,0,363},{144= ,0,52}, -{4,0,134},{133,0,372},{133,0,680},{136,10,363},{6,0,1997},{8,0,935},{136,= 0,977}, -{4,0,810},{135,0,1634},{135,10,1675},{7,0,1390},{4,11,910},{133,11,832},{= 7,10, -808},{8,11,266},{139,11,578},{132,0,644},{4,0,982},{138,0,867},{132,10,28= 0},{135 -,0,540},{140,10,54},{135,0,123},{134,0,1978},{4,10,421},{133,10,548},{6,0= ,623},{ -136,0,789},{4,0,908},{5,0,359},{5,0,508},{6,0,1723},{7,0,343},{7,0,1996},= {135,0, -2026},{134,0,1220},{4,0,341},{135,0,480},{6,10,254},{9,10,109},{138,10,10= 3},{134 -,0,888},{8,11,528},{137,11,348},{7,0,1995},{8,0,299},{11,0,890},{12,0,674= },{4,11 -,20},{133,11,616},{135,11,1094},{134,10,1630},{4,0,238},{5,0,503},{6,0,17= 9},{7,0 -,2003},{8,0,381},{8,0,473},{9,0,149},{10,0,788},{15,0,45},{15,0,86},{20,0= ,110},{ -150,0,57},{133,10,671},{4,11,26},{5,11,429},{6,11,245},{7,11,704},{7,11,1= 379},{ -135,11,1474},{4,0,121},{5,0,156},{5,0,349},{9,0,431},{10,0,605},{142,0,34= 2},{7, -11,943},{139,11,614},{132,10,889},{132,11,621},{7,10,1382},{7,11,1382},{1= 35,10, -1910},{132,10,627},{133,10,775},{133,11,542},{133,11,868},{136,11,433},{6= ,0,1373 -},{7,0,1011},{11,10,362},{11,10,948},{140,10,388},{6,0,80},{7,0,173},{9,0= ,547},{ -10,0,730},{14,0,18},{22,0,39},{135,11,1495},{6,0,1694},{135,0,1974},{140,= 0,196}, -{4,0,923},{6,0,507},{6,0,1711},{7,10,451},{8,10,389},{12,10,490},{13,10,1= 6},{13, -10,215},{13,10,351},{18,10,132},{147,10,125},{6,0,646},{134,0,1047},{135,= 10,841} -,{136,10,566},{6,0,1611},{135,0,1214},{139,0,926},{132,11,525},{132,0,595= },{5,0, -240},{6,0,459},{7,0,12},{7,0,114},{7,0,949},{7,0,1753},{7,0,1805},{8,0,65= 8},{9,0 -,1},{11,0,959},{141,0,446},{5,10,912},{134,10,1695},{132,0,446},{7,11,62}= ,{12,11 -,45},{147,11,112},{5,10,236},{6,10,572},{8,10,492},{11,10,618},{144,10,56= },{5,10 -,190},{136,10,318},{135,10,1376},{4,11,223},{6,11,359},{11,11,3},{13,11,1= 08},{14 -,11,89},{144,11,22},{132,11,647},{134,0,490},{134,0,491},{134,0,1584},{13= 5,11, -685},{138,11,220},{7,0,250},{136,0,507},{132,0,158},{4,0,140},{7,0,362},{= 8,0,209 -},{9,0,10},{9,0,160},{9,0,503},{9,0,614},{10,0,689},{11,0,327},{11,0,553}= ,{11,0, -725},{11,0,767},{12,0,252},{12,0,583},{13,0,192},{14,0,269},{14,0,356},{1= 48,0,50 -},{19,0,1},{19,0,26},{150,0,9},{132,11,109},{6,0,228},{7,0,1341},{9,0,408= },{138, -0,343},{4,0,373},{5,0,283},{6,0,480},{7,0,609},{10,0,860},{138,0,878},{6,= 0,779}, -{134,0,1209},{4,0,557},{7,11,263},{7,11,628},{136,11,349},{132,0,548},{7,= 0,197}, -{8,0,142},{8,0,325},{9,0,150},{9,0,596},{10,0,350},{10,0,353},{11,0,74},{= 11,0, -315},{12,0,662},{12,0,681},{14,0,423},{143,0,141},{4,11,40},{10,11,67},{1= 1,11, -117},{11,11,768},{139,11,935},{7,11,992},{8,11,301},{9,11,722},{12,11,63}= ,{13,11 -,29},{14,11,161},{143,11,18},{6,0,1490},{138,11,532},{5,0,580},{7,0,378},= {7,0, -674},{7,0,1424},{15,0,83},{16,0,11},{15,11,83},{144,11,11},{6,0,1057},{6,= 0,1335} -,{10,0,316},{7,10,85},{7,10,247},{8,10,585},{138,10,163},{4,0,169},{5,0,8= 3},{6,0 -,399},{6,0,579},{6,0,1513},{7,0,692},{7,0,846},{7,0,1015},{7,0,1799},{8,0= ,403},{ -9,0,394},{10,0,133},{12,0,4},{12,0,297},{12,0,452},{16,0,81},{18,0,25},{2= 1,0,14} -,{22,0,12},{151,0,18},{134,0,1106},{7,0,1546},{11,0,299},{142,0,407},{134= ,0,1192 -},{132,0,177},{5,0,411},{135,0,653},{7,0,439},{10,0,727},{11,0,260},{139,= 0,684}, -{138,10,145},{147,10,83},{5,0,208},{7,0,753},{135,0,1528},{137,11,617},{1= 35,10, -1922},{135,11,825},{11,0,422},{13,0,389},{4,10,124},{10,10,457},{11,10,12= 1},{11, -10,169},{11,10,870},{12,10,214},{14,10,187},{143,10,77},{11,0,615},{15,0,= 58},{11 -,11,615},{143,11,58},{9,0,618},{138,0,482},{6,0,1952},{6,0,1970},{142,0,5= 05},{7, -10,1193},{135,11,1838},{133,0,242},{135,10,1333},{6,10,107},{7,10,638},{7= ,10, -1632},{137,10,396},{133,0,953},{5,10,370},{134,10,1756},{5,11,28},{6,11,2= 04},{10 -,11,320},{10,11,583},{13,11,502},{14,11,72},{14,11,274},{14,11,312},{14,1= 1,344}, -{15,11,159},{16,11,62},{16,11,69},{17,11,30},{18,11,42},{18,11,53},{18,11= ,84},{ -18,11,140},{19,11,68},{19,11,85},{20,11,5},{20,11,45},{20,11,101},{22,11,= 7},{150 -,11,20},{4,11,558},{6,11,390},{7,11,162},{7,11,689},{9,11,360},{138,11,65= 3},{11, -0,802},{141,0,67},{133,10,204},{133,0,290},{5,10,970},{134,10,1706},{132,= 0,380}, -{5,0,52},{7,0,277},{9,0,368},{139,0,791},{5,11,856},{6,11,1672},{6,11,175= 7},{6, -11,1781},{7,11,1150},{7,11,1425},{7,11,1453},{140,11,513},{5,11,92},{7,10= ,3},{10 -,11,736},{140,11,102},{4,0,112},{5,0,653},{5,10,483},{5,10,685},{6,10,489= },{7,10 -,1204},{136,10,394},{132,10,921},{6,0,1028},{133,10,1007},{5,11,590},{9,1= 1,213}, -{145,11,91},{135,10,1696},{10,0,138},{139,0,476},{5,0,725},{5,0,727},{135= ,0,1811 -},{4,0,979},{6,0,1821},{6,0,1838},{8,0,876},{8,0,883},{8,0,889},{8,0,893}= ,{8,0, -895},{10,0,934},{12,0,720},{14,0,459},{148,0,123},{135,11,551},{4,0,38},{= 6,0,435 -},{7,0,307},{7,0,999},{7,0,1481},{7,0,1732},{7,0,1738},{8,0,371},{9,0,414= },{11,0 -,316},{12,0,52},{13,0,420},{147,0,100},{135,0,1296},{132,10,712},{134,10,= 1629},{ -133,0,723},{134,0,651},{136,11,191},{9,11,791},{10,11,93},{11,11,301},{16= ,11,13} -,{17,11,23},{18,11,135},{19,11,12},{20,11,1},{20,11,12},{148,11,14},{136,= 11,503} -,{6,11,466},{135,11,671},{6,0,1200},{134,0,1330},{135,0,1255},{134,0,986}= ,{5,0, -109},{6,0,1784},{7,0,1895},{12,0,296},{140,0,302},{135,11,983},{133,10,48= 5},{134 -,0,660},{134,0,800},{5,0,216},{5,0,294},{6,0,591},{7,0,1879},{9,0,141},{9= ,0,270} -,{9,0,679},{10,0,159},{11,0,197},{11,0,438},{12,0,538},{12,0,559},{14,0,1= 44},{14 -,0,167},{15,0,67},{4,10,285},{5,10,317},{6,10,301},{7,10,7},{8,10,153},{1= 0,10, -766},{11,10,468},{12,10,467},{141,10,143},{136,0,945},{134,0,1090},{137,0= ,81},{ -12,11,468},{19,11,96},{148,11,24},{134,0,391},{138,11,241},{7,0,322},{136= ,0,249} -,{134,0,1412},{135,11,795},{5,0,632},{138,0,526},{136,10,819},{6,0,144},{= 7,0,948 -},{7,0,1042},{8,0,235},{8,0,461},{9,0,453},{9,0,796},{10,0,354},{17,0,77}= ,{135, -11,954},{139,10,917},{6,0,940},{134,0,1228},{4,0,362},{7,0,52},{135,0,303= },{6,11 -,549},{8,11,34},{8,11,283},{9,11,165},{138,11,475},{7,11,370},{7,11,1007}= ,{7,11, -1177},{135,11,1565},{5,11,652},{5,11,701},{135,11,449},{5,0,196},{6,0,486= },{7,0, -212},{8,0,309},{136,0,346},{6,10,1719},{6,10,1735},{7,10,2016},{7,10,2020= },{8,10 -,837},{137,10,852},{6,11,159},{6,11,364},{7,11,516},{7,11,1439},{137,11,5= 18},{ -135,0,1912},{135,0,1290},{132,0,686},{141,11,151},{138,0,625},{136,0,706}= ,{138, -10,568},{139,0,412},{4,0,30},{133,0,43},{8,10,67},{138,10,419},{7,0,967},= {141,0, -11},{12,0,758},{14,0,441},{142,0,462},{10,10,657},{14,10,297},{142,10,361= },{139, -10,729},{4,0,220},{135,0,1535},{7,11,501},{9,11,111},{10,11,141},{11,11,3= 32},{13 -,11,43},{13,11,429},{14,11,130},{14,11,415},{145,11,102},{4,0,950},{6,0,1= 859},{7 -,0,11},{8,0,873},{12,0,710},{12,0,718},{12,0,748},{12,0,765},{148,0,124},= {5,11, -149},{5,11,935},{136,11,233},{142,11,291},{134,0,1579},{7,0,890},{8,10,51= },{9,10 -,868},{10,10,833},{12,10,481},{12,10,570},{148,10,106},{141,0,2},{132,10,= 445},{ -136,11,801},{135,0,1774},{7,0,1725},{138,0,393},{5,0,263},{134,0,414},{13= 2,11, -322},{133,10,239},{7,0,456},{7,10,1990},{8,10,130},{139,10,720},{137,0,81= 8},{5, -10,123},{6,10,530},{7,10,348},{135,10,1419},{135,10,2024},{6,0,178},{6,0,= 1750},{ -8,0,251},{9,0,690},{10,0,155},{10,0,196},{10,0,373},{11,0,698},{13,0,155}= ,{148,0 -,93},{5,0,97},{137,0,393},{134,0,674},{11,0,223},{140,0,168},{132,10,210}= ,{139, -11,464},{6,0,1639},{146,0,159},{139,11,2},{7,0,934},{8,0,647},{17,0,97},{= 19,0,59 -},{150,0,2},{132,0,191},{5,0,165},{9,0,346},{10,0,655},{11,0,885},{4,10,4= 30},{ -135,11,357},{133,0,877},{5,10,213},{133,11,406},{8,0,128},{139,0,179},{6,= 11,69}, -{135,11,117},{135,0,1297},{11,11,43},{13,11,72},{141,11,142},{135,11,1830= },{142, -0,164},{5,0,57},{6,0,101},{6,0,586},{6,0,1663},{7,0,132},{7,0,1154},{7,0,= 1415},{ -7,0,1507},{12,0,493},{15,0,105},{151,0,15},{5,0,459},{7,0,1073},{8,0,241}= ,{136,0 -,334},{133,11,826},{133,10,108},{5,10,219},{10,11,132},{11,11,191},{11,11= ,358},{ -139,11,460},{6,0,324},{6,0,520},{7,0,338},{7,0,1729},{8,0,228},{139,0,750= },{21,0 -,30},{22,0,53},{4,10,193},{5,10,916},{7,10,364},{10,10,398},{10,10,726},{= 11,10, -317},{11,10,626},{12,10,142},{12,10,288},{12,10,678},{13,10,313},{15,10,1= 13},{ -146,10,114},{6,11,110},{135,11,1681},{135,0,910},{6,10,241},{7,10,907},{8= ,10,832 -},{9,10,342},{10,10,729},{11,10,284},{11,10,445},{11,10,651},{11,10,863},= {13,10, -398},{146,10,99},{7,0,705},{9,0,734},{5,11,1000},{7,11,733},{137,11,583},= {4,0,73 -},{6,0,612},{7,0,927},{7,0,1822},{8,0,217},{9,0,765},{9,0,766},{10,0,408}= ,{11,0, -51},{11,0,793},{12,0,266},{15,0,158},{20,0,89},{150,0,32},{7,0,1330},{4,1= 1,297}, -{6,11,529},{7,11,152},{7,11,713},{7,11,1845},{8,11,710},{8,11,717},{140,1= 1,639}, -{5,0,389},{136,0,636},{134,0,1409},{4,10,562},{9,10,254},{139,10,879},{13= 4,0,893 -},{132,10,786},{4,11,520},{135,11,575},{136,0,21},{140,0,721},{136,0,959}= ,{7,11, -1428},{7,11,1640},{9,11,169},{9,11,182},{9,11,367},{9,11,478},{9,11,506},= {9,11, -551},{9,11,648},{9,11,651},{9,11,697},{9,11,705},{9,11,725},{9,11,787},{9= ,11,794 -},{10,11,198},{10,11,214},{10,11,267},{10,11,275},{10,11,456},{10,11,551}= ,{10,11 -,561},{10,11,613},{10,11,627},{10,11,668},{10,11,675},{10,11,691},{10,11,= 695},{ -10,11,707},{10,11,715},{11,11,183},{11,11,201},{11,11,244},{11,11,262},{1= 1,11, -352},{11,11,439},{11,11,493},{11,11,572},{11,11,591},{11,11,608},{11,11,6= 11},{11 -,11,646},{11,11,674},{11,11,711},{11,11,751},{11,11,761},{11,11,776},{11,= 11,785} -,{11,11,850},{11,11,853},{11,11,862},{11,11,865},{11,11,868},{11,11,898},= {11,11, -902},{11,11,903},{11,11,910},{11,11,932},{11,11,942},{11,11,957},{11,11,9= 67},{11 -,11,972},{12,11,148},{12,11,195},{12,11,220},{12,11,237},{12,11,318},{12,= 11,339} -,{12,11,393},{12,11,445},{12,11,450},{12,11,474},{12,11,509},{12,11,533},= {12,11, -591},{12,11,594},{12,11,597},{12,11,621},{12,11,633},{12,11,642},{13,11,5= 9},{13, -11,60},{13,11,145},{13,11,239},{13,11,250},{13,11,273},{13,11,329},{13,11= ,344},{ -13,11,365},{13,11,372},{13,11,387},{13,11,403},{13,11,414},{13,11,456},{1= 3,11, -478},{13,11,483},{13,11,489},{14,11,55},{14,11,57},{14,11,81},{14,11,90},= {14,11, -148},{14,11,239},{14,11,266},{14,11,321},{14,11,326},{14,11,327},{14,11,3= 30},{14 -,11,347},{14,11,355},{14,11,401},{14,11,411},{14,11,414},{14,11,416},{14,= 11,420} -,{15,11,61},{15,11,74},{15,11,87},{15,11,88},{15,11,94},{15,11,96},{15,11= ,116},{ -15,11,149},{15,11,154},{16,11,50},{16,11,63},{16,11,73},{17,11,2},{17,11,= 66},{17 -,11,92},{17,11,103},{17,11,112},{18,11,50},{18,11,54},{18,11,82},{18,11,8= 6},{18, -11,90},{18,11,111},{18,11,115},{18,11,156},{19,11,40},{19,11,79},{20,11,7= 8},{149 -,11,22},{137,11,170},{134,0,1433},{135,11,1307},{139,11,411},{5,0,189},{7= ,0,442} -,{7,0,443},{8,0,281},{12,0,174},{141,0,261},{6,10,216},{7,10,901},{7,10,1= 343},{ -136,10,493},{5,11,397},{6,11,154},{7,10,341},{7,11,676},{8,11,443},{8,11,= 609},{9 -,11,24},{9,11,325},{10,11,35},{11,10,219},{11,11,535},{11,11,672},{11,11,= 1018},{ -12,11,637},{144,11,30},{6,0,2},{7,0,191},{7,0,446},{7,0,1262},{7,0,1737},= {8,0,22 -},{8,0,270},{8,0,612},{9,0,4},{9,0,312},{9,0,436},{9,0,626},{10,0,216},{1= 0,0,311 -},{10,0,521},{10,0,623},{11,0,72},{11,0,330},{11,0,455},{12,0,321},{12,0,= 504},{ -12,0,530},{12,0,543},{13,0,17},{13,0,156},{13,0,334},{14,0,131},{17,0,60}= ,{148,0 -,64},{7,0,354},{10,0,410},{139,0,815},{139,10,130},{7,10,1734},{137,11,63= 1},{12, -0,425},{15,0,112},{10,10,115},{11,10,420},{13,10,404},{14,10,346},{143,10= ,54},{6 -,0,60},{6,0,166},{7,0,374},{7,0,670},{7,0,1327},{8,0,411},{8,0,435},{9,0,= 653},{9 -,0,740},{10,0,385},{11,0,222},{11,0,324},{11,0,829},{140,0,611},{7,0,1611= },{13,0 -,14},{15,0,44},{19,0,13},{148,0,76},{133,11,981},{4,11,56},{7,11,1791},{8= ,11,607 -},{8,11,651},{11,11,465},{11,11,835},{12,11,337},{141,11,480},{6,0,1478},= {5,10, -1011},{136,10,701},{139,0,596},{5,0,206},{134,0,398},{4,10,54},{5,10,666}= ,{7,10, -1039},{7,10,1130},{9,10,195},{138,10,302},{7,0,50},{9,11,158},{138,11,411= },{135, -11,1120},{6,0,517},{7,0,1159},{10,0,621},{11,0,192},{134,10,1669},{4,0,59= 2},{6,0 -,600},{135,0,1653},{10,0,223},{139,0,645},{136,11,139},{7,0,64},{136,0,24= 5},{142 -,0,278},{6,11,622},{135,11,1030},{136,0,604},{134,0,1502},{138,0,265},{14= 1,11, -168},{7,0,1763},{140,0,310},{7,10,798},{139,11,719},{7,11,160},{10,11,624= },{142, -11,279},{132,11,363},{7,10,122},{9,10,259},{10,10,84},{11,10,470},{12,10,= 541},{ -141,10,379},{5,0,129},{6,0,61},{135,0,947},{134,0,1356},{135,11,1191},{13= ,0,505} -,{141,0,506},{11,0,1000},{5,10,82},{5,10,131},{7,10,1755},{8,10,31},{9,10= ,168},{ -9,10,764},{139,10,869},{134,0,966},{134,10,605},{134,11,292},{5,11,177},{= 6,11, -616},{7,11,827},{9,11,525},{138,11,656},{135,11,1486},{138,11,31},{5,10,2= 78},{ -137,10,68},{4,10,163},{5,10,201},{5,10,307},{5,10,310},{6,10,335},{7,10,2= 84},{ -136,10,165},{6,0,839},{135,10,1660},{136,10,781},{6,10,33},{135,10,1244},= {133,0, -637},{4,11,161},{133,11,631},{137,0,590},{7,10,1953},{136,10,720},{5,0,28= 0},{7,0 -,1226},{138,10,203},{134,0,1386},{5,0,281},{6,0,1026},{6,10,326},{7,10,67= 7},{137 -,10,425},{7,11,1557},{135,11,1684},{135,0,1064},{9,11,469},{9,11,709},{12= ,11,512 -},{14,11,65},{145,11,12},{134,0,917},{10,11,229},{11,11,73},{11,11,376},{= 139,11, -433},{7,0,555},{9,0,192},{13,0,30},{13,0,49},{15,0,150},{16,0,76},{20,0,5= 2},{7, -10,1316},{7,10,1412},{7,10,1839},{9,10,589},{11,10,241},{11,10,676},{11,1= 0,811}, -{11,10,891},{12,10,140},{12,10,346},{12,10,479},{13,10,381},{14,10,188},{= 146,10, -30},{149,0,15},{6,0,1882},{6,0,1883},{6,0,1897},{9,0,945},{9,0,1014},{9,0= ,1020}, -{12,0,823},{12,0,842},{12,0,866},{12,0,934},{15,0,242},{146,0,208},{6,0,9= 65},{ -134,0,1499},{7,0,33},{7,0,120},{8,0,489},{9,0,319},{10,0,820},{11,0,1004}= ,{12,0, -379},{12,0,679},{13,0,117},{13,0,412},{14,0,25},{15,0,52},{15,0,161},{16,= 0,47},{ -149,0,2},{6,11,558},{7,11,651},{8,11,421},{9,11,0},{138,11,34},{4,0,937},= {5,0, -801},{7,0,473},{5,10,358},{7,10,1184},{10,10,662},{13,10,212},{13,10,304}= ,{13,10 -,333},{145,10,98},{132,0,877},{6,0,693},{134,0,824},{132,0,365},{7,11,183= 2},{138 -,11,374},{5,0,7},{139,0,774},{4,0,734},{5,0,662},{134,0,430},{4,0,746},{1= 35,0, -1090},{5,0,360},{8,0,237},{10,0,231},{147,0,124},{138,11,348},{6,11,6},{7= ,11,81} -,{7,11,771},{7,11,1731},{9,11,405},{138,11,421},{6,0,740},{137,0,822},{13= 3,10, -946},{7,0,1485},{136,0,929},{7,10,411},{8,10,631},{9,10,323},{10,10,355},= {11,10, -491},{12,10,143},{12,10,402},{13,10,73},{14,10,408},{15,10,107},{146,10,7= 1},{135 -,10,590},{5,11,881},{133,11,885},{150,11,25},{4,0,852},{5,11,142},{134,11= ,546},{ -7,10,1467},{8,10,328},{10,10,544},{11,10,955},{13,10,320},{145,10,83},{9,= 0,17},{ -10,0,291},{11,10,511},{13,10,394},{14,10,298},{14,10,318},{146,10,103},{5= ,11,466 -},{11,11,571},{12,11,198},{13,11,283},{14,11,186},{15,11,21},{143,11,103}= ,{134,0 -,1001},{4,11,185},{5,11,257},{5,11,839},{5,11,936},{7,11,171},{9,11,399},= {10,11, -258},{10,11,395},{10,11,734},{11,11,1014},{12,11,23},{13,11,350},{14,11,1= 50},{ -147,11,6},{143,0,35},{132,0,831},{5,10,835},{134,10,483},{4,0,277},{5,0,6= 08},{6, -0,493},{7,0,457},{12,0,384},{7,11,404},{7,11,1377},{7,11,1430},{7,11,2017= },{8,11 -,149},{8,11,239},{8,11,512},{8,11,793},{8,11,818},{9,11,474},{9,11,595},{= 10,11, -122},{10,11,565},{10,11,649},{10,11,783},{11,11,239},{11,11,295},{11,11,4= 47},{11 -,11,528},{11,11,639},{11,11,800},{11,11,936},{12,11,25},{12,11,73},{12,11= ,77},{ -12,11,157},{12,11,316},{12,11,390},{12,11,391},{12,11,394},{12,11,395},{1= 2,11, -478},{12,11,503},{12,11,592},{12,11,680},{13,11,50},{13,11,53},{13,11,132= },{13, -11,198},{13,11,275},{13,11,322},{13,11,415},{14,11,71},{14,11,257},{14,11= ,395},{ -15,11,71},{15,11,136},{17,11,123},{18,11,93},{147,11,58},{134,0,1351},{7,= 0,27},{ -135,0,316},{136,11,712},{136,0,984},{133,0,552},{137,0,264},{132,0,401},{= 6,0,710 -},{6,0,1111},{134,0,1343},{134,0,1211},{9,0,543},{10,0,524},{11,0,108},{1= 1,0,653 -},{12,0,524},{13,0,123},{14,0,252},{16,0,18},{19,0,38},{20,0,26},{20,0,65= },{21,0 -,3},{151,0,11},{4,0,205},{5,0,623},{7,0,104},{8,0,519},{137,0,716},{132,1= 0,677}, -{4,11,377},{152,11,13},{135,11,1673},{7,0,579},{9,0,41},{9,0,244},{9,0,66= 9},{10, -0,5},{11,0,861},{11,0,951},{139,0,980},{132,0,717},{136,0,1011},{132,0,80= 5},{4, -11,180},{135,11,1906},{132,10,777},{132,10,331},{132,0,489},{6,0,1024},{4= ,11,491 -},{133,10,747},{135,11,1182},{4,11,171},{138,11,234},{4,11,586},{7,11,118= 6},{138 -,11,631},{135,0,892},{135,11,336},{9,11,931},{10,11,334},{148,11,71},{137= ,0,473} -,{6,0,864},{12,0,659},{139,11,926},{7,0,819},{9,0,26},{9,0,392},{10,0,152= },{10,0 -,226},{11,0,19},{12,0,276},{12,0,426},{12,0,589},{13,0,460},{15,0,97},{19= ,0,48}, -{148,0,104},{135,0,51},{133,10,326},{4,10,691},{146,10,16},{9,0,130},{11,= 0,765}, -{10,10,680},{10,10,793},{141,10,357},{133,11,765},{8,0,229},{6,10,32},{7,= 10,385} -,{7,10,757},{7,10,1916},{8,10,94},{8,10,711},{9,10,541},{10,10,162},{10,1= 0,795}, -{11,10,989},{11,10,1010},{12,10,14},{142,10,308},{7,11,474},{137,11,578},= {132,0, -674},{132,0,770},{5,0,79},{7,0,1027},{7,0,1477},{139,0,52},{133,11,424},{= 134,0, -1666},{6,0,409},{6,10,349},{6,10,1682},{7,10,1252},{8,10,112},{8,11,714},= {9,10, -435},{9,10,668},{10,10,290},{10,10,319},{10,10,815},{11,10,180},{11,10,83= 7},{12, -10,240},{13,10,152},{13,10,219},{142,10,158},{5,0,789},{134,0,195},{4,0,2= 51},{4, -0,688},{7,0,513},{135,0,1284},{132,10,581},{9,11,420},{10,11,269},{10,11,= 285},{ -10,11,576},{11,11,397},{13,11,175},{145,11,90},{6,10,126},{7,10,573},{8,1= 0,397}, -{142,10,44},{132,11,429},{133,0,889},{4,0,160},{5,0,330},{7,0,1434},{136,= 0,174}, -{7,11,18},{7,11,699},{7,11,1966},{8,11,752},{9,11,273},{9,11,412},{9,11,7= 03},{10 -,11,71},{10,11,427},{10,11,508},{146,11,97},{6,0,872},{134,0,899},{133,10= ,926},{ -134,0,1126},{134,0,918},{4,11,53},{5,11,186},{135,11,752},{7,0,268},{136,= 0,569}, -{134,0,1224},{6,0,1361},{7,10,1232},{137,10,531},{8,11,575},{10,11,289},{= 139,11, -319},{133,10,670},{132,11,675},{133,0,374},{135,10,1957},{133,0,731},{11,= 0,190}, -{15,0,49},{11,11,190},{143,11,49},{4,0,626},{5,0,506},{5,0,642},{6,0,425}= ,{10,0, -202},{139,0,141},{137,0,444},{7,10,242},{135,10,1942},{6,11,209},{8,11,46= 8},{9, -11,210},{11,11,36},{12,11,28},{12,11,630},{13,11,21},{13,11,349},{14,11,7= },{145, -11,13},{4,11,342},{135,11,1179},{5,10,834},{7,10,1202},{8,10,14},{9,10,48= 1},{137 -,10,880},{4,11,928},{133,11,910},{4,11,318},{4,11,496},{7,11,856},{139,11= ,654},{ -136,0,835},{7,0,1526},{138,10,465},{151,0,17},{135,0,477},{4,10,357},{6,1= 0,172}, -{7,10,143},{137,10,413},{6,0,1374},{138,0,994},{18,0,76},{132,10,590},{7,= 0,287}, -{8,0,355},{9,0,293},{137,0,743},{134,0,1389},{7,11,915},{8,11,247},{147,1= 1,0},{4 -,11,202},{5,11,382},{6,11,454},{7,11,936},{7,11,1803},{8,11,758},{9,11,37= 5},{9, -11,895},{10,11,743},{10,11,792},{11,11,978},{11,11,1012},{142,11,109},{5,= 0,384}, -{8,0,455},{140,0,48},{132,11,390},{5,10,169},{7,10,333},{136,10,45},{5,0,= 264},{ -134,0,184},{138,11,791},{133,11,717},{132,10,198},{6,11,445},{7,11,332},{= 137,11, -909},{136,0,1001},{4,10,24},{5,10,140},{5,10,185},{7,10,1500},{11,10,565}= ,{139, -10,838},{134,11,578},{5,0,633},{6,0,28},{135,0,1323},{132,0,851},{136,11,= 267},{7 -,0,359},{8,0,243},{140,0,175},{4,10,334},{133,10,593},{141,11,87},{136,11= ,766},{ -10,0,287},{12,0,138},{10,11,287},{140,11,138},{4,0,105},{132,0,740},{140,= 10,116} -,{134,0,857},{135,11,1841},{6,0,1402},{137,0,819},{132,11,584},{132,10,70= 9},{133 -,10,897},{5,0,224},{13,0,174},{146,0,52},{135,10,1840},{4,10,608},{133,10= ,497},{ -139,11,60},{4,0,758},{135,0,1649},{4,11,226},{4,11,326},{135,11,1770},{5,= 11,426} -,{8,11,30},{9,11,2},{11,11,549},{147,11,122},{135,10,2039},{6,10,540},{13= 6,10, -136},{4,0,573},{8,0,655},{4,10,897},{133,10,786},{7,0,351},{139,0,128},{1= 33,10, -999},{4,10,299},{135,10,1004},{133,0,918},{132,11,345},{4,11,385},{7,11,2= 65},{ -135,11,587},{133,10,456},{136,10,180},{6,0,687},{134,0,1537},{4,11,347},{= 5,11, -423},{5,11,996},{135,11,1329},{132,10,755},{7,11,1259},{9,11,125},{11,11,= 65},{ -140,11,285},{5,11,136},{6,11,136},{136,11,644},{134,0,1525},{4,0,1009},{1= 35,0, -1139},{139,10,338},{132,0,340},{135,10,1464},{8,0,847},{10,0,861},{10,0,8= 76},{10 -,0,889},{10,0,922},{10,0,929},{10,0,933},{12,0,784},{140,0,791},{139,0,17= 6},{9, -11,134},{10,11,2},{10,11,27},{10,11,333},{11,11,722},{143,11,1},{4,11,433= },{133, -11,719},{5,0,985},{7,0,509},{7,0,529},{145,0,96},{132,0,615},{4,10,890},{= 5,10, -805},{5,10,819},{5,10,961},{6,10,396},{6,10,1631},{6,10,1678},{7,10,1967}= ,{7,10, -2041},{9,10,630},{11,10,8},{11,10,1019},{12,10,176},{13,10,225},{14,10,29= 2},{149 -,10,24},{135,0,1919},{134,0,1131},{144,11,21},{144,11,51},{135,10,1815},{= 4,0,247 -},{7,10,1505},{10,10,190},{10,10,634},{11,10,792},{12,10,358},{140,10,447= },{5,10 -,0},{6,10,536},{7,10,604},{13,10,445},{145,10,126},{4,0,184},{5,0,390},{6= ,0,337} -,{7,0,23},{7,0,494},{7,0,618},{7,0,1456},{8,0,27},{8,0,599},{10,0,153},{1= 39,0, -710},{6,10,232},{6,10,412},{7,10,1074},{8,10,9},{8,10,157},{8,10,786},{9,= 10,196} -,{9,10,352},{9,10,457},{10,10,337},{11,10,232},{11,10,877},{12,10,480},{1= 40,10, -546},{13,0,38},{135,10,958},{4,10,382},{136,10,579},{4,10,212},{135,10,12= 06},{4, -11,555},{8,11,536},{138,11,288},{11,11,139},{139,11,171},{9,11,370},{138,= 11,90}, -{132,0,1015},{134,0,1088},{5,10,655},{135,11,977},{134,0,1585},{17,10,67}= ,{147, -10,74},{10,0,227},{11,0,497},{11,0,709},{140,0,415},{6,0,360},{7,0,1664},= {136,0, -478},{7,0,95},{6,10,231},{136,10,423},{140,11,65},{4,11,257},{135,11,2031= },{135, -11,1768},{133,10,300},{139,11,211},{136,0,699},{6,10,237},{7,10,611},{8,1= 0,100}, -{9,10,416},{11,10,335},{12,10,173},{146,10,101},{14,0,26},{146,0,150},{6,= 0,581}, -{135,0,1119},{135,10,1208},{132,0,739},{6,11,83},{6,11,1733},{135,11,1389= },{137, -0,869},{4,0,67},{5,0,422},{7,0,1037},{7,0,1289},{7,0,1555},{9,0,741},{145= ,0,108} -,{133,10,199},{12,10,427},{146,10,38},{136,0,464},{142,0,42},{10,0,96},{8= ,11,501 -},{137,11,696},{134,11,592},{4,0,512},{4,0,966},{5,0,342},{6,0,1855},{8,0= ,869},{ -8,0,875},{8,0,901},{144,0,26},{8,0,203},{11,0,823},{11,0,846},{12,0,482},= {13,0, -277},{13,0,302},{13,0,464},{14,0,205},{142,0,221},{4,0,449},{133,0,718},{= 7,11, -1718},{9,11,95},{9,11,274},{10,11,279},{10,11,317},{10,11,420},{11,11,303= },{11, -11,808},{12,11,134},{12,11,367},{13,11,149},{13,11,347},{14,11,349},{14,1= 1,406}, -{18,11,22},{18,11,89},{18,11,122},{147,11,47},{133,11,26},{4,0,355},{6,0,= 311},{9 -,0,256},{138,0,404},{132,11,550},{10,0,758},{6,10,312},{6,10,1715},{10,10= ,584},{ -11,10,546},{11,10,692},{12,10,259},{12,10,295},{13,10,46},{141,10,154},{1= 36,11, -822},{5,0,827},{4,11,902},{5,11,809},{6,11,122},{135,11,896},{5,0,64},{14= 0,0,581 -},{4,0,442},{6,0,739},{7,0,1047},{7,0,1352},{7,0,1643},{7,11,1911},{9,11,= 449},{ -10,11,192},{138,11,740},{135,11,262},{132,10,588},{133,11,620},{5,0,977},= {6,0, -288},{7,0,528},{4,11,34},{5,11,574},{7,11,279},{7,11,1624},{136,11,601},{= 6,0, -1375},{4,10,231},{5,10,61},{6,10,104},{7,10,729},{7,10,964},{7,10,1658},{= 140,10, -414},{6,10,263},{138,10,757},{132,10,320},{4,0,254},{7,0,1309},{5,11,332}= ,{135, -11,1309},{6,11,261},{8,11,182},{139,11,943},{132,10,225},{6,0,12},{135,0,= 1219},{ -4,0,275},{12,0,376},{6,11,1721},{141,11,490},{4,11,933},{133,11,880},{6,0= ,951},{ -6,0,1109},{6,0,1181},{7,0,154},{4,10,405},{7,10,817},{14,10,58},{17,10,37= },{146, -10,124},{6,0,1520},{133,10,974},{134,0,1753},{6,0,369},{6,0,502},{7,0,103= 6},{8,0 -,348},{9,0,452},{10,0,26},{11,0,224},{11,0,387},{11,0,772},{12,0,95},{12,= 0,629}, -{13,0,195},{13,0,207},{13,0,241},{14,0,260},{14,0,270},{143,0,140},{132,0= ,269},{ -5,0,480},{7,0,532},{7,0,1197},{7,0,1358},{8,0,291},{11,0,349},{142,0,396}= ,{5,10, -235},{7,10,1239},{11,10,131},{140,10,370},{7,10,956},{7,10,1157},{7,10,15= 06},{7, -10,1606},{7,10,1615},{7,10,1619},{7,10,1736},{7,10,1775},{8,10,590},{9,10= ,324},{ -9,10,736},{9,10,774},{9,10,776},{9,10,784},{10,10,567},{10,10,708},{11,10= ,518},{ -11,10,613},{11,10,695},{11,10,716},{11,10,739},{11,10,770},{11,10,771},{1= 1,10, -848},{11,10,857},{11,10,931},{11,10,947},{12,10,326},{12,10,387},{12,10,4= 84},{12 -,10,528},{12,10,552},{12,10,613},{13,10,189},{13,10,256},{13,10,340},{13,= 10,432} -,{13,10,436},{13,10,440},{13,10,454},{14,10,174},{14,10,220},{14,10,284},= {14,10, -390},{145,10,121},{8,11,598},{9,11,664},{138,11,441},{9,10,137},{138,10,2= 21},{ -133,11,812},{148,0,15},{134,0,1341},{6,0,1017},{4,11,137},{7,11,1178},{13= 5,11, -1520},{7,10,390},{138,10,140},{7,11,1260},{135,11,1790},{137,11,191},{135= ,10, -1144},{6,0,1810},{7,0,657},{8,0,886},{10,0,857},{14,0,440},{144,0,96},{8,= 0,533}, -{6,11,1661},{7,11,1975},{7,11,2009},{135,11,2011},{6,0,1453},{134,10,464}= ,{132, -11,715},{5,10,407},{11,10,204},{11,10,243},{11,10,489},{12,10,293},{19,10= ,37},{ -20,10,73},{150,10,38},{133,11,703},{4,0,211},{7,0,1483},{5,10,325},{8,10,= 5},{8, -10,227},{9,10,105},{10,10,585},{140,10,614},{4,0,332},{5,0,335},{6,0,238}= ,{7,0, -269},{7,0,811},{7,0,1797},{8,0,836},{9,0,507},{141,0,242},{5,11,89},{7,11= ,1915}, -{9,11,185},{9,11,235},{9,11,496},{10,11,64},{10,11,270},{10,11,403},{10,1= 1,469}, -{10,11,529},{10,11,590},{11,11,140},{11,11,860},{13,11,1},{13,11,422},{14= ,11,341 -},{14,11,364},{17,11,93},{18,11,113},{19,11,97},{147,11,113},{133,11,695}= ,{16,0, -19},{5,11,6},{6,11,183},{6,10,621},{7,11,680},{7,11,978},{7,11,1013},{7,1= 1,1055} -,{12,11,230},{13,11,172},{13,10,504},{146,11,29},{136,0,156},{133,0,1009}= ,{6,11, -29},{139,11,63},{134,0,820},{134,10,218},{7,10,454},{7,10,782},{8,10,768}= ,{140, -10,686},{5,0,228},{6,0,203},{7,0,156},{8,0,347},{9,0,265},{18,0,39},{20,0= ,54},{ -21,0,31},{22,0,3},{23,0,0},{15,11,8},{18,11,39},{20,11,54},{21,11,31},{22= ,11,3}, -{151,11,0},{7,0,1131},{135,0,1468},{144,10,0},{134,0,1276},{10,10,676},{1= 40,10, -462},{132,11,311},{134,11,1740},{7,11,170},{8,11,90},{8,11,177},{8,11,415= },{11, -11,714},{142,11,281},{134,10,164},{6,0,1792},{138,0,849},{150,10,50},{5,0= ,291},{ -5,0,318},{7,0,765},{9,0,389},{12,0,548},{8,11,522},{142,11,328},{11,11,91= },{13, -11,129},{15,11,101},{145,11,125},{4,11,494},{6,11,74},{7,11,44},{7,11,407= },{8,11 -,551},{12,11,17},{15,11,5},{148,11,11},{4,11,276},{133,11,296},{6,10,343}= ,{7,10, -195},{7,11,1777},{9,10,226},{10,10,197},{10,10,575},{11,10,502},{139,10,8= 99},{10 -,0,525},{139,0,82},{14,0,453},{4,11,7},{5,11,90},{5,11,158},{6,11,542},{7= ,11,221 -},{7,11,1574},{9,11,490},{10,11,540},{11,11,443},{139,11,757},{135,0,666}= ,{22,10 -,29},{150,11,29},{4,0,422},{147,10,8},{5,0,355},{145,0,0},{6,0,1873},{9,0= ,918},{ -7,11,588},{9,11,175},{138,11,530},{143,11,31},{11,0,165},{7,10,1125},{9,1= 0,143}, -{14,10,405},{150,10,21},{9,0,260},{137,0,905},{5,11,872},{6,11,57},{6,11,= 479},{6 -,11,562},{7,11,471},{7,11,1060},{9,11,447},{9,11,454},{141,11,6},{138,11,= 704},{ -133,0,865},{5,0,914},{134,0,1625},{133,0,234},{7,0,1383},{5,11,31},{6,11,= 614},{ -145,11,61},{7,11,1200},{138,11,460},{6,11,424},{135,11,1866},{136,0,306},= {5,10, -959},{12,11,30},{13,11,148},{14,11,87},{14,11,182},{16,11,42},{18,11,92},= {148,11 -,70},{6,0,1919},{6,0,1921},{9,0,923},{9,0,930},{9,0,941},{9,0,949},{9,0,9= 87},{9, -0,988},{9,0,992},{12,0,802},{12,0,815},{12,0,856},{12,0,885},{12,0,893},{= 12,0, -898},{12,0,919},{12,0,920},{12,0,941},{12,0,947},{15,0,183},{15,0,185},{1= 5,0,189 -},{15,0,197},{15,0,202},{15,0,233},{18,0,218},{18,0,219},{18,0,233},{143,= 11,156} -,{135,10,1759},{136,10,173},{13,0,163},{13,0,180},{18,0,78},{20,0,35},{5,= 11,13}, -{134,11,142},{134,10,266},{6,11,97},{7,11,116},{8,11,322},{8,11,755},{9,1= 1,548}, -{10,11,714},{11,11,884},{141,11,324},{135,0,1312},{9,0,814},{137,11,676},= {133,0, -707},{135,0,1493},{6,0,421},{7,0,61},{7,0,1540},{10,0,11},{138,0,501},{12= ,0,733} -,{12,0,766},{7,11,866},{135,11,1163},{137,0,341},{142,0,98},{145,11,115},= {135,11 -,1111},{136,10,300},{136,0,1014},{8,11,1},{9,11,112},{138,11,326},{132,11= ,730},{ -5,11,488},{6,11,527},{7,11,489},{7,11,1636},{8,11,121},{8,11,144},{8,11,3= 59},{9, -11,193},{9,11,241},{9,11,336},{9,11,882},{11,11,266},{11,11,372},{11,11,9= 44},{12 -,11,401},{140,11,641},{6,0,971},{134,0,1121},{6,0,102},{7,0,72},{15,0,142= },{147, -0,67},{151,0,30},{135,0,823},{134,0,1045},{5,10,427},{5,10,734},{7,10,478= },{136, -10,52},{7,0,1930},{11,10,217},{142,10,165},{6,0,1512},{135,0,1870},{9,11,= 31},{10 -,11,244},{10,11,699},{12,11,149},{141,11,497},{133,11,377},{145,11,101},{= 10,11, -158},{13,11,13},{13,11,137},{13,11,258},{14,11,111},{14,11,225},{14,11,25= 3},{14, -11,304},{14,11,339},{14,11,417},{146,11,33},{6,0,87},{6,10,1734},{7,10,20= },{7,10 -,1056},{8,10,732},{9,10,406},{9,10,911},{138,10,694},{134,0,1243},{137,0,= 245},{7 -,0,68},{8,0,48},{8,0,88},{8,0,582},{8,0,681},{9,0,373},{9,0,864},{11,0,15= 7},{11, -0,336},{11,0,843},{148,0,27},{8,11,663},{144,11,8},{133,10,613},{4,0,88},= {5,0, -137},{5,0,174},{5,0,777},{6,0,1664},{6,0,1725},{7,0,77},{7,0,426},{7,0,13= 17},{7, -0,1355},{8,0,126},{8,0,563},{9,0,523},{9,0,750},{10,0,310},{10,0,836},{11= ,0,42}, -{11,0,318},{11,0,731},{12,0,68},{12,0,92},{12,0,507},{12,0,692},{13,0,81}= ,{13,0, -238},{13,0,374},{14,0,436},{18,0,138},{19,0,78},{19,0,111},{20,0,55},{20,= 0,77},{ -148,0,92},{141,0,418},{4,0,938},{137,0,625},{138,0,351},{5,11,843},{7,10,= 32},{7, -10,984},{8,10,85},{8,10,709},{9,10,579},{9,10,847},{9,10,856},{10,10,799}= ,{11,10 -,258},{11,10,1007},{12,10,331},{12,10,615},{13,10,188},{13,10,435},{14,10= ,8},{15 -,10,165},{16,10,27},{148,10,40},{6,0,1668},{7,0,1499},{8,0,117},{9,0,314}= ,{138,0 -,174},{135,0,707},{132,11,554},{133,11,536},{5,0,403},{5,11,207},{9,11,79= },{11, -11,625},{145,11,7},{132,11,424},{136,11,785},{4,10,167},{135,10,82},{9,0,= 7},{23, -0,6},{9,11,7},{151,11,6},{6,0,282},{5,10,62},{6,10,534},{7,10,74},{7,10,6= 78},{7, -10,684},{7,10,1043},{7,10,1072},{8,10,280},{8,10,541},{8,10,686},{9,10,25= 8},{10, -10,519},{11,10,252},{140,10,282},{138,10,33},{132,10,359},{4,0,44},{5,0,3= 11},{6, -0,156},{7,0,639},{7,0,762},{7,0,1827},{9,0,8},{9,0,462},{148,0,83},{7,11,= 769},{9 -,11,18},{138,11,358},{4,0,346},{7,0,115},{9,0,180},{9,0,456},{10,0,363},{= 4,11, -896},{134,11,1777},{133,10,211},{7,0,761},{7,0,1051},{137,0,545},{6,10,14= 5},{141 -,10,336},{7,11,750},{9,11,223},{11,11,27},{11,11,466},{12,11,624},{14,11,= 265},{ -146,11,61},{6,0,752},{6,0,768},{6,0,1195},{6,0,1254},{6,0,1619},{137,0,83= 5},{6,0 -,1936},{8,0,930},{136,0,960},{132,10,263},{132,11,249},{12,0,653},{132,10= ,916},{ -4,11,603},{133,11,661},{8,0,344},{4,11,11},{6,11,128},{7,11,231},{7,11,15= 33},{ -138,11,725},{134,0,1483},{134,0,875},{6,0,185},{7,0,1899},{9,0,875},{139,= 0,673}, -{15,10,155},{144,10,79},{7,0,93},{7,0,210},{7,0,1223},{8,0,451},{8,0,460}= ,{11,0, -353},{11,0,475},{4,10,599},{6,10,1634},{7,10,67},{7,10,691},{7,10,979},{7= ,10, -1697},{8,10,207},{8,10,214},{8,10,231},{8,10,294},{8,10,336},{8,10,428},{= 8,10, -471},{8,10,622},{8,10,626},{8,10,679},{8,10,759},{8,10,829},{9,10,11},{9,= 10,246} -,{9,10,484},{9,10,573},{9,10,706},{9,10,762},{9,10,798},{9,10,855},{9,10,= 870},{9 -,10,912},{10,10,303},{10,10,335},{10,10,424},{10,10,461},{10,10,543},{10,= 10,759} -,{10,10,814},{11,10,59},{11,10,235},{11,10,590},{11,10,929},{11,10,963},{= 11,10, -987},{12,10,114},{12,10,182},{12,10,226},{12,10,332},{12,10,439},{12,10,5= 75},{12 -,10,598},{12,10,675},{13,10,8},{13,10,125},{13,10,194},{13,10,287},{14,10= ,197},{ -14,10,383},{15,10,53},{17,10,63},{19,10,46},{19,10,98},{19,10,106},{148,1= 0,85},{ -132,11,476},{4,0,327},{5,0,478},{7,0,1332},{136,0,753},{5,0,1020},{133,0,= 1022},{ -135,11,1807},{4,0,103},{133,0,401},{4,0,499},{135,0,1421},{10,0,207},{13,= 0,164}, -{147,10,126},{9,11,20},{10,11,324},{139,11,488},{132,0,96},{9,11,280},{13= 8,11, -134},{135,0,968},{133,10,187},{135,10,1286},{5,11,112},{6,11,103},{134,11= ,150},{ -8,0,914},{10,0,3},{4,10,215},{9,10,38},{11,10,23},{11,10,127},{139,10,796= },{135, -0,399},{6,0,563},{137,0,224},{6,0,704},{134,0,1214},{4,11,708},{8,11,15},= {9,11, -50},{9,11,386},{11,11,18},{11,11,529},{140,11,228},{4,11,563},{7,11,109},= {7,11, -592},{7,11,637},{7,11,770},{7,11,1701},{8,11,436},{8,11,463},{9,11,60},{9= ,11,335 -},{9,11,904},{10,11,73},{11,11,434},{12,11,585},{13,11,331},{18,11,110},{= 148,11, -60},{134,0,1559},{132,11,502},{6,11,347},{138,11,161},{4,11,33},{5,11,102= },{5,11 -,500},{6,11,284},{7,11,1079},{7,11,1423},{7,11,1702},{8,11,470},{9,11,554= },{9,11 -,723},{139,11,333},{7,11,246},{135,11,840},{6,11,10},{8,11,571},{9,11,739= },{143, -11,91},{8,0,861},{10,0,905},{12,0,730},{12,0,789},{133,11,626},{134,0,946= },{5,0, -746},{12,0,333},{14,0,332},{12,11,333},{142,11,332},{5,11,18},{6,11,526},= {13,11, -24},{13,11,110},{19,11,5},{147,11,44},{4,0,910},{5,0,832},{135,10,2002},{= 10,11, -768},{139,11,787},{4,11,309},{5,11,462},{7,11,970},{135,11,1097},{4,10,28= },{5,10 -,440},{7,10,248},{11,10,833},{140,10,344},{134,10,1654},{6,0,632},{6,0,65= 2},{6,0 -,1272},{6,0,1384},{134,0,1560},{134,11,1704},{6,0,1393},{133,10,853},{6,1= 0,249}, -{7,10,1234},{139,10,573},{5,11,86},{7,11,743},{9,11,85},{10,11,281},{10,1= 1,432}, -{11,11,490},{12,11,251},{13,11,118},{14,11,378},{146,11,143},{5,11,524},{= 133,11, -744},{134,0,1514},{10,0,201},{142,0,319},{7,0,717},{10,0,510},{7,10,392},= {8,10, -20},{8,10,172},{8,10,690},{9,10,383},{9,10,845},{11,10,293},{11,10,832},{= 11,10, -920},{11,10,984},{141,10,221},{134,0,1381},{5,10,858},{133,10,992},{8,0,5= 28},{ -137,0,348},{10,11,107},{140,11,436},{4,0,20},{133,0,616},{134,0,1251},{13= 2,11, -927},{10,11,123},{12,11,670},{13,11,371},{14,11,142},{146,11,94},{134,0,1= 163},{7 -,11,1149},{137,11,156},{134,0,307},{133,11,778},{7,0,1091},{135,0,1765},{= 5,11, -502},{6,10,268},{137,10,62},{8,11,196},{10,11,283},{139,11,406},{4,0,26},= {5,0, -429},{6,0,245},{7,0,704},{7,0,1379},{135,0,1474},{133,11,855},{132,0,881}= ,{4,0, -621},{135,11,1596},{7,11,1400},{9,11,446},{138,11,45},{6,0,736},{138,10,1= 06},{ -133,0,542},{134,0,348},{133,0,868},{136,0,433},{135,0,1495},{138,0,771},{= 6,10, -613},{136,10,223},{138,0,215},{141,0,124},{136,11,391},{135,11,172},{132,= 10,670} -,{140,0,55},{9,10,40},{139,10,136},{7,0,62},{147,0,112},{132,0,856},{132,= 11,568} -,{12,0,270},{139,10,259},{8,0,572},{137,0,698},{4,11,732},{9,10,310},{137= ,10,682 -},{142,10,296},{134,0,939},{136,11,733},{135,11,1435},{7,10,1401},{135,10= ,1476}, -{6,0,352},{4,10,296},{7,10,401},{7,10,1410},{7,10,1594},{7,10,1674},{8,10= ,63},{8 -,10,660},{137,10,74},{4,11,428},{133,11,668},{4,10,139},{4,10,388},{140,1= 0,188}, -{7,11,2015},{140,11,665},{132,0,647},{146,0,10},{138,0,220},{142,0,464},{= 132,0, -109},{134,0,1746},{6,0,515},{4,10,747},{6,11,1623},{6,11,1681},{7,10,649}= ,{7,10, -1479},{135,10,1583},{133,10,232},{135,0,566},{137,10,887},{4,0,40},{10,0,= 67},{11 -,0,117},{11,0,768},{139,0,935},{132,0,801},{7,0,992},{8,0,301},{9,0,722},= {12,0, -63},{13,0,29},{14,0,161},{143,0,18},{139,0,923},{6,11,1748},{8,11,715},{9= ,11,802 -},{10,11,46},{10,11,819},{13,11,308},{14,11,351},{14,11,363},{146,11,67},= {137,11 -,745},{7,0,1145},{4,10,14},{7,10,1801},{10,10,748},{141,10,458},{4,11,63}= ,{5,11, -347},{134,11,474},{135,0,568},{4,10,425},{7,11,577},{7,11,1432},{9,11,475= },{9,11 -,505},{9,11,526},{9,11,609},{9,11,689},{9,11,726},{9,11,735},{9,11,738},{= 10,11, -556},{10,11,674},{10,11,684},{11,11,89},{11,11,202},{11,11,272},{11,11,38= 0},{11, -11,415},{11,11,505},{11,11,537},{11,11,550},{11,11,562},{11,11,640},{11,1= 1,667}, -{11,11,688},{11,11,847},{11,11,927},{11,11,930},{11,11,940},{12,11,144},{= 12,11, -325},{12,11,329},{12,11,389},{12,11,403},{12,11,451},{12,11,515},{12,11,6= 04},{12 -,11,616},{12,11,626},{13,11,66},{13,11,131},{13,11,167},{13,11,236},{13,1= 1,368}, -{13,11,411},{13,11,434},{13,11,453},{13,11,461},{13,11,474},{14,11,59},{1= 4,11,60 -},{14,11,139},{14,11,152},{14,11,276},{14,11,353},{14,11,402},{15,11,28},= {15,11, -81},{15,11,123},{15,11,152},{18,11,136},{148,11,88},{137,0,247},{135,11,1= 622},{9 -,11,544},{11,11,413},{144,11,25},{4,0,645},{7,0,825},{6,10,1768},{135,11,= 89},{ -140,0,328},{5,10,943},{134,10,1779},{134,0,1363},{5,10,245},{6,10,576},{7= ,10,582 -},{136,10,225},{134,0,1280},{5,11,824},{133,11,941},{7,11,440},{8,11,230}= ,{139, -11,106},{5,0,28},{6,0,204},{10,0,320},{10,0,583},{13,0,502},{14,0,72},{14= ,0,274} -,{14,0,312},{14,0,344},{15,0,159},{16,0,62},{16,0,69},{17,0,30},{18,0,42}= ,{18,0, -53},{18,0,84},{18,0,140},{19,0,68},{19,0,85},{20,0,5},{20,0,45},{20,0,101= },{22,0 -,7},{150,0,20},{4,0,558},{6,0,390},{7,0,162},{7,0,689},{9,0,360},{138,0,6= 53},{ -134,0,764},{6,0,862},{137,0,833},{5,0,856},{6,0,1672},{6,0,1757},{134,0,1= 781},{5 -,0,92},{10,0,736},{140,0,102},{6,0,1927},{6,0,1944},{8,0,924},{8,0,948},{= 10,0, -967},{138,0,978},{134,0,1479},{5,0,590},{8,0,360},{9,0,213},{138,0,63},{1= 34,0, -1521},{6,0,709},{134,0,891},{132,10,443},{13,0,477},{14,0,120},{148,0,61}= ,{4,11, -914},{5,11,800},{133,11,852},{10,11,54},{141,11,115},{4,11,918},{133,11,8= 76},{ -139,11,152},{4,11,92},{133,11,274},{135,11,1901},{9,11,800},{10,11,693},{= 11,11, -482},{11,11,734},{139,11,789},{9,0,483},{132,10,298},{6,0,1213},{141,11,4= 98},{ -135,11,1451},{133,11,743},{4,0,1022},{10,0,1000},{12,0,957},{12,0,980},{1= 2,0, -1013},{14,0,481},{144,0,116},{8,0,503},{17,0,29},{4,11,49},{7,11,280},{13= 5,11, -1633},{135,0,1712},{134,0,466},{136,11,47},{5,10,164},{7,10,121},{142,10,= 189},{7 -,10,812},{7,10,1261},{7,10,1360},{9,10,632},{140,10,352},{139,10,556},{13= 2,0,731 -},{5,11,272},{5,11,908},{5,11,942},{7,11,1008},{7,11,1560},{8,11,197},{9,= 11,47}, -{11,11,538},{139,11,742},{4,10,172},{9,10,611},{10,10,436},{12,10,673},{1= 41,10, -255},{133,10,844},{10,0,484},{11,0,754},{12,0,457},{14,0,171},{14,0,389},= {146,0, -153},{9,10,263},{10,10,147},{138,10,492},{137,11,891},{138,0,241},{133,10= ,537},{ -6,0,2005},{136,0,964},{137,10,842},{151,11,8},{4,11,407},{132,11,560},{13= 5,11, -1884},{6,0,1100},{134,0,1242},{135,0,954},{5,10,230},{5,10,392},{6,10,420= },{9,10 -,568},{140,10,612},{4,11,475},{11,11,35},{11,11,90},{13,11,7},{13,11,71},= {13,11, -177},{142,11,422},{136,11,332},{135,0,1958},{6,0,549},{8,0,34},{8,0,283},= {9,0, -165},{138,0,475},{10,0,952},{12,0,966},{140,0,994},{5,0,652},{5,0,701},{1= 35,0, -449},{4,0,655},{7,0,850},{17,0,75},{146,0,137},{4,0,146},{7,0,1618},{8,0,= 670},{5 -,10,41},{7,10,1459},{7,10,1469},{7,10,1859},{9,10,549},{139,10,905},{133,= 10,696} -,{6,0,159},{6,0,364},{7,0,516},{137,0,518},{135,0,1439},{6,11,222},{7,11,= 636},{7 -,11,1620},{8,11,409},{9,11,693},{139,11,77},{13,0,151},{141,11,45},{6,0,1= 027},{4 -,11,336},{132,10,771},{139,11,392},{10,11,121},{11,11,175},{149,11,16},{8= ,0,950} -,{138,0,983},{133,10,921},{135,0,993},{6,10,180},{7,10,1137},{8,10,751},{= 139,10, -805},{7,0,501},{9,0,111},{10,0,141},{11,0,332},{13,0,43},{13,0,429},{14,0= ,130},{ -14,0,415},{145,0,102},{4,10,183},{5,11,882},{7,10,271},{11,10,824},{11,10= ,952},{ -13,10,278},{13,10,339},{13,10,482},{14,10,424},{148,10,99},{4,10,19},{5,1= 0,477}, -{5,10,596},{6,10,505},{7,10,1221},{11,10,907},{12,10,209},{141,10,214},{1= 35,10, -1215},{133,0,452},{132,11,426},{5,0,149},{136,0,233},{133,0,935},{6,11,58= },{7,11 -,654},{7,11,745},{7,11,1969},{8,11,240},{8,11,675},{9,11,479},{9,11,731},= {10,11, -330},{10,11,593},{10,11,817},{11,11,32},{11,11,133},{11,11,221},{145,11,6= 8},{12, -0,582},{18,0,131},{7,11,102},{137,11,538},{136,0,801},{134,10,1645},{132,= 0,70},{ -6,10,92},{6,10,188},{7,10,1269},{7,10,1524},{7,10,1876},{10,10,228},{139,= 10,1020 -},{4,10,459},{133,10,966},{138,0,369},{16,0,36},{140,10,330},{141,11,366}= ,{7,0, -721},{10,0,236},{12,0,204},{6,10,18},{7,10,932},{8,10,757},{9,10,54},{9,1= 0,65},{ -9,10,844},{10,10,113},{10,10,315},{10,10,798},{11,10,153},{12,10,151},{12= ,10,392 -},{12,10,666},{142,10,248},{7,0,241},{10,0,430},{8,10,548},{9,10,532},{10= ,10,117 -},{11,10,351},{11,10,375},{143,10,23},{134,10,1742},{133,10,965},{133,11,= 566},{6 -,11,48},{135,11,63},{134,10,182},{10,10,65},{10,10,488},{138,10,497},{6,1= 1,114}, -{7,11,1224},{7,11,1556},{136,11,3},{134,0,1817},{8,11,576},{137,11,267},{= 6,0, -1078},{144,0,16},{9,10,588},{138,10,260},{138,0,1021},{5,0,406},{134,0,20= 22},{ -133,11,933},{6,0,69},{135,0,117},{7,0,1830},{136,11,427},{4,0,432},{135,0= ,824},{ -134,10,1786},{133,0,826},{139,11,67},{133,11,759},{135,10,308},{137,0,816= },{133, -0,1000},{4,0,297},{6,0,529},{7,0,152},{7,0,713},{7,0,1845},{8,0,710},{8,0= ,717},{ -12,0,639},{140,0,685},{7,0,423},{136,10,588},{136,10,287},{136,0,510},{13= 4,0, -1048},{6,0,618},{7,11,56},{7,11,1989},{8,11,337},{8,11,738},{9,11,600},{1= 0,11, -483},{12,11,37},{13,11,447},{142,11,92},{4,0,520},{135,0,575},{8,0,990},{= 138,0, -977},{135,11,774},{9,11,347},{11,11,24},{140,11,170},{136,11,379},{140,10= ,290},{ -132,11,328},{4,0,321},{134,0,569},{4,11,101},{135,11,1171},{7,0,723},{7,0= ,1135}, -{5,11,833},{136,11,744},{7,10,719},{8,10,809},{136,10,834},{8,0,921},{136= ,10,796 -},{5,10,210},{6,10,213},{7,10,60},{10,10,364},{139,10,135},{5,0,397},{6,0= ,154},{ -7,0,676},{8,0,443},{8,0,609},{9,0,24},{9,0,325},{10,0,35},{11,0,535},{11,= 0,672}, -{11,0,1018},{12,0,637},{16,0,30},{5,10,607},{8,10,326},{136,10,490},{4,10= ,701},{ -5,10,472},{6,11,9},{6,11,397},{7,11,53},{7,11,1742},{9,10,758},{10,11,632= },{11, -11,828},{140,11,146},{135,10,380},{135,10,1947},{148,11,109},{10,10,278},= {138,11 -,278},{134,0,856},{7,0,139},{4,10,386},{8,10,405},{8,10,728},{9,10,497},{= 11,10, -110},{11,10,360},{15,10,37},{144,10,84},{141,0,282},{133,0,981},{5,0,288}= ,{7,10, -1452},{7,10,1480},{8,10,634},{140,10,472},{7,0,1890},{8,11,367},{10,11,76= 0},{14, -11,79},{20,11,17},{152,11,0},{4,10,524},{136,10,810},{4,0,56},{7,0,1791},= {8,0, -607},{8,0,651},{11,0,465},{11,0,835},{12,0,337},{141,0,480},{10,10,238},{= 141,10, -33},{11,11,417},{12,11,223},{140,11,265},{9,0,158},{10,0,411},{140,0,261}= ,{133, -10,532},{133,10,997},{12,11,186},{12,11,292},{14,11,100},{146,11,70},{6,0= ,1403}, -{136,0,617},{134,0,1205},{139,0,563},{4,0,242},{134,0,333},{4,11,186},{5,= 11,157} -,{8,11,168},{138,11,6},{132,0,369},{133,11,875},{5,10,782},{5,10,829},{13= 4,10, -1738},{134,0,622},{135,11,1272},{6,0,1407},{7,11,111},{136,11,581},{7,10,= 1823},{ -139,10,693},{7,0,160},{10,0,624},{142,0,279},{132,0,363},{10,11,589},{12,= 11,111} -,{13,11,260},{14,11,82},{18,11,63},{147,11,45},{7,11,1364},{7,11,1907},{1= 41,11, -158},{4,11,404},{4,11,659},{135,11,675},{13,11,211},{14,11,133},{14,11,20= 4},{15, -11,64},{15,11,69},{15,11,114},{16,11,10},{19,11,23},{19,11,35},{19,11,39}= ,{19,11 -,51},{19,11,71},{19,11,75},{152,11,15},{4,10,78},{5,10,96},{5,10,182},{7,= 10,1724 -},{7,10,1825},{10,10,394},{10,10,471},{11,10,532},{14,10,340},{145,10,88}= ,{135, -10,1964},{133,11,391},{11,11,887},{14,11,365},{142,11,375},{5,11,540},{6,= 11,1697 -},{7,11,222},{136,11,341},{134,11,78},{9,0,601},{9,0,619},{10,0,505},{10,= 0,732}, -{11,0,355},{140,0,139},{134,0,292},{139,0,174},{5,0,177},{6,0,616},{7,0,8= 27},{9, -0,525},{138,0,656},{10,0,31},{6,10,215},{7,10,1028},{7,10,1473},{7,10,172= 1},{9, -10,424},{138,10,779},{135,10,584},{136,11,293},{134,0,685},{135,11,1868},= {133,11 -,460},{7,0,647},{6,10,67},{7,10,1630},{9,10,354},{9,10,675},{10,10,830},{= 14,10, -80},{145,10,80},{4,0,161},{133,0,631},{6,10,141},{7,10,225},{9,10,59},{9,= 10,607} -,{10,10,312},{11,10,687},{12,10,555},{13,10,373},{13,10,494},{148,10,58},= {7,11, -965},{7,11,1460},{135,11,1604},{136,10,783},{134,11,388},{6,0,722},{6,0,1= 267},{4 -,11,511},{9,11,333},{9,11,379},{10,11,602},{11,11,441},{11,11,723},{11,11= ,976},{ -140,11,357},{134,0,1797},{135,0,1684},{9,0,469},{9,0,709},{12,0,512},{14,= 0,65},{ -17,0,12},{5,11,938},{136,11,707},{7,0,1230},{136,0,531},{10,0,229},{11,0,= 73},{11 -,0,376},{139,0,433},{12,0,268},{12,0,640},{142,0,119},{7,10,430},{139,10,= 46},{6, -0,558},{7,0,651},{8,0,421},{9,0,0},{10,0,34},{139,0,1008},{6,0,106},{7,0,= 1786},{ -7,0,1821},{9,0,102},{9,0,763},{5,10,602},{7,10,2018},{137,10,418},{5,0,65= },{6,0, -416},{7,0,1720},{7,0,1924},{10,0,109},{11,0,14},{11,0,70},{11,0,569},{11,= 0,735}, -{15,0,153},{20,0,80},{136,10,677},{135,11,1625},{137,11,772},{136,0,595},= {6,11, -469},{7,11,1709},{138,11,515},{7,0,1832},{138,0,374},{9,0,106},{9,0,163},= {9,0, -296},{10,0,167},{10,0,172},{10,0,777},{139,0,16},{6,0,6},{7,0,81},{7,0,77= 1},{7,0 -,1731},{9,0,405},{138,0,421},{4,11,500},{135,11,938},{5,11,68},{134,11,38= 3},{5,0 -,881},{133,0,885},{6,0,854},{6,0,1132},{6,0,1495},{6,0,1526},{6,0,1533},{= 134,0, -1577},{4,11,337},{6,11,353},{7,11,1934},{8,11,488},{137,11,429},{7,11,236= },{7,11 -,1795},{8,11,259},{9,11,135},{9,11,177},{10,11,825},{11,11,115},{11,11,37= 0},{11, -11,405},{11,11,604},{12,11,10},{12,11,667},{12,11,669},{13,11,76},{14,11,= 310},{ -15,11,76},{15,11,147},{148,11,23},{5,0,142},{134,0,546},{4,11,15},{5,11,2= 2},{6, -11,244},{7,11,40},{7,11,200},{7,11,906},{7,11,1199},{9,11,616},{10,11,716= },{11, -11,635},{11,11,801},{140,11,458},{5,0,466},{11,0,571},{12,0,198},{13,0,28= 3},{14, -0,186},{15,0,21},{15,0,103},{135,10,329},{4,0,185},{5,0,257},{5,0,839},{5= ,0,936} -,{9,0,399},{10,0,258},{10,0,395},{10,0,734},{11,0,1014},{12,0,23},{13,0,3= 50},{14 -,0,150},{19,0,6},{135,11,1735},{12,11,36},{141,11,337},{5,11,598},{7,11,7= 91},{8, -11,108},{137,11,123},{132,10,469},{7,0,404},{7,0,1377},{7,0,1430},{7,0,20= 17},{8, -0,149},{8,0,239},{8,0,512},{8,0,793},{8,0,818},{9,0,474},{9,0,595},{10,0,= 122},{ -10,0,565},{10,0,649},{10,0,783},{11,0,239},{11,0,295},{11,0,447},{11,0,52= 8},{11, -0,639},{11,0,800},{12,0,25},{12,0,77},{12,0,157},{12,0,256},{12,0,316},{1= 2,0,390 -},{12,0,391},{12,0,395},{12,0,478},{12,0,503},{12,0,592},{12,0,680},{13,0= ,50},{ -13,0,53},{13,0,132},{13,0,198},{13,0,322},{13,0,415},{13,0,511},{14,0,71}= ,{14,0, -395},{15,0,71},{15,0,136},{17,0,123},{18,0,93},{147,0,58},{136,0,712},{13= 4,10, -1743},{5,10,929},{6,10,340},{8,10,376},{136,10,807},{6,0,1848},{8,0,860},= {10,0, -856},{10,0,859},{10,0,925},{10,0,941},{140,0,762},{6,0,629},{6,0,906},{9,= 0,810}, -{140,0,652},{5,10,218},{7,10,1610},{138,10,83},{7,10,1512},{135,10,1794},= {4,0, -377},{24,0,13},{4,11,155},{7,11,1689},{11,10,0},{144,10,78},{4,11,164},{5= ,11,151 -},{5,11,730},{5,11,741},{7,11,498},{7,11,870},{7,11,1542},{12,11,213},{14= ,11,36} -,{14,11,391},{17,11,111},{18,11,6},{18,11,46},{18,11,151},{19,11,36},{20,= 11,32}, -{20,11,56},{20,11,69},{20,11,102},{21,11,4},{22,11,8},{22,11,10},{22,11,1= 4},{150 -,11,31},{7,0,1842},{133,10,571},{4,10,455},{4,11,624},{135,11,1752},{134,= 0,1501} -,{4,11,492},{5,11,451},{6,10,161},{7,10,372},{137,10,597},{132,10,349},{4= ,0,180} -,{135,0,1906},{135,11,835},{141,11,70},{132,0,491},{137,10,751},{6,10,432= },{139, -10,322},{4,0,171},{138,0,234},{6,11,113},{135,11,436},{4,0,586},{7,0,1186= },{138, -0,631},{5,10,468},{10,10,325},{11,10,856},{12,10,345},{143,10,104},{5,10,= 223},{ -10,11,592},{10,11,753},{12,11,317},{12,11,355},{12,11,465},{12,11,469},{1= 2,11, -560},{12,11,578},{141,11,243},{132,10,566},{135,11,520},{4,10,59},{135,10= ,1394}, -{6,10,436},{139,10,481},{9,0,931},{10,0,334},{20,0,71},{4,10,48},{5,10,27= 1},{7, -10,953},{135,11,1878},{11,0,170},{5,10,610},{136,10,457},{133,10,755},{6,= 0,1587} -,{135,10,1217},{4,10,197},{149,11,26},{133,11,585},{137,11,521},{133,0,76= 5},{133 -,10,217},{139,11,586},{133,0,424},{9,11,752},{12,11,610},{13,11,431},{16,= 11,59}, -{146,11,109},{136,0,714},{7,0,685},{132,11,307},{9,0,420},{10,0,269},{10,= 0,285}, -{10,0,576},{11,0,397},{13,0,175},{145,0,90},{132,0,429},{133,11,964},{9,1= 1,463}, -{138,11,595},{7,0,18},{7,0,699},{7,0,1966},{8,0,752},{9,0,273},{9,0,412},= {9,0, -703},{10,0,71},{10,0,427},{138,0,508},{4,10,165},{7,10,1398},{135,10,1829= },{4,0, -53},{5,0,186},{7,0,752},{7,0,828},{142,0,116},{8,0,575},{10,0,289},{139,0= ,319},{ -132,0,675},{134,0,1424},{4,11,75},{5,11,180},{6,11,500},{7,11,58},{7,11,7= 10},{ -138,11,645},{133,11,649},{6,11,276},{7,11,282},{7,11,879},{7,11,924},{8,1= 1,459}, -{9,11,599},{9,11,754},{11,11,574},{12,11,128},{12,11,494},{13,11,52},{13,= 11,301} -,{15,11,30},{143,11,132},{6,0,647},{134,0,1095},{5,10,9},{7,10,297},{7,10= ,966},{ -140,10,306},{132,11,200},{134,0,1334},{5,10,146},{6,10,411},{138,10,721},= {6,0, -209},{6,0,1141},{6,0,1288},{8,0,468},{9,0,210},{11,0,36},{12,0,28},{12,0,= 630},{ -13,0,21},{13,0,349},{14,0,7},{145,0,13},{6,10,177},{135,10,467},{4,0,342}= ,{135,0 -,1179},{10,11,454},{140,11,324},{4,0,928},{133,0,910},{7,0,1838},{6,11,22= 5},{137 -,11,211},{16,0,101},{20,0,115},{20,0,118},{148,0,122},{4,0,496},{135,0,85= 6},{4,0 -,318},{11,0,654},{7,11,718},{139,11,102},{8,11,58},{9,11,724},{11,11,809}= ,{13,11 -,113},{145,11,72},{5,10,200},{6,11,345},{135,11,1247},{8,11,767},{8,11,80= 3},{9, -11,301},{137,11,903},{7,0,915},{8,0,247},{19,0,0},{7,11,1949},{136,11,674= },{4,0, -202},{5,0,382},{6,0,454},{7,0,936},{7,0,1803},{8,0,758},{9,0,375},{9,0,89= 5},{10, -0,743},{10,0,792},{11,0,978},{11,0,1012},{142,0,109},{7,0,1150},{7,0,1425= },{7,0, -1453},{140,0,513},{134,11,259},{138,0,791},{11,0,821},{12,0,110},{12,0,15= 3},{18, -0,41},{150,0,19},{134,10,481},{132,0,796},{6,0,445},{9,0,909},{136,11,254= },{10,0 -,776},{13,0,345},{142,0,425},{4,10,84},{7,10,1482},{10,10,76},{138,10,142= },{135, -11,742},{6,0,578},{133,10,1015},{6,0,1387},{4,10,315},{5,10,507},{135,10,= 1370},{ -4,0,438},{133,0,555},{136,0,766},{133,11,248},{134,10,1722},{4,11,116},{5= ,11,95} -,{5,11,445},{7,11,1688},{8,11,29},{9,11,272},{11,11,509},{139,11,915},{13= 5,0,541 -},{133,11,543},{8,10,222},{8,10,476},{9,10,238},{11,10,516},{11,10,575},{= 15,10, -109},{146,10,100},{6,0,880},{134,0,1191},{5,11,181},{136,11,41},{134,0,15= 06},{ -132,11,681},{7,11,25},{8,11,202},{138,11,536},{139,0,983},{137,0,768},{13= 2,0,584 -},{9,11,423},{140,11,89},{8,11,113},{9,11,877},{10,11,554},{11,11,83},{12= ,11,136 -},{147,11,109},{7,10,706},{7,10,1058},{138,10,538},{133,11,976},{4,11,206= },{135, -11,746},{136,11,526},{140,0,737},{11,10,92},{11,10,196},{11,10,409},{11,1= 0,450}, -{11,10,666},{11,10,777},{12,10,262},{13,10,385},{13,10,393},{15,10,115},{= 16,10, -45},{145,10,82},{4,0,226},{4,0,326},{7,0,1770},{4,11,319},{5,11,699},{138= ,11,673 -},{6,10,40},{135,10,1781},{5,0,426},{8,0,30},{9,0,2},{11,0,549},{147,0,12= 2},{6,0 -,1161},{134,0,1329},{138,10,97},{6,10,423},{7,10,665},{135,10,1210},{7,11= ,13},{8 -,11,226},{10,11,537},{11,11,570},{11,11,605},{11,11,799},{11,11,804},{12,= 11,85}, -{12,11,516},{12,11,623},{13,11,112},{13,11,361},{14,11,77},{14,11,78},{17= ,11,28} -,{147,11,110},{132,11,769},{132,11,551},{132,11,728},{147,0,117},{9,11,57= },{9,11 -,459},{10,11,425},{11,11,119},{12,11,184},{12,11,371},{13,11,358},{145,11= ,51},{5 -,11,188},{5,11,814},{8,11,10},{9,11,421},{9,11,729},{10,11,609},{139,11,6= 89},{ -134,11,624},{135,11,298},{135,0,462},{4,0,345},{139,10,624},{136,10,574},= {4,0, -385},{7,0,265},{135,0,587},{6,0,808},{132,11,528},{133,0,398},{132,10,354= },{4,0, -347},{5,0,423},{5,0,996},{135,0,1329},{135,10,1558},{7,0,1259},{9,0,125},= {139,0, -65},{5,0,136},{6,0,136},{136,0,644},{5,11,104},{6,11,173},{135,11,1631},{= 135,0, -469},{133,10,830},{4,0,278},{5,0,465},{135,0,1367},{7,11,810},{8,11,138},= {8,11, -342},{9,11,84},{10,11,193},{11,11,883},{140,11,359},{5,10,496},{135,10,20= 3},{4,0 -,433},{133,0,719},{6,11,95},{134,10,547},{5,10,88},{137,10,239},{6,11,406= },{10, -11,409},{10,11,447},{11,11,44},{140,11,100},{134,0,1423},{7,10,650},{135,= 10,1310 -},{134,0,749},{135,11,1243},{135,0,1363},{6,0,381},{7,0,645},{7,0,694},{8= ,0,546} -,{7,10,1076},{9,10,80},{11,10,78},{11,10,421},{11,10,534},{140,10,545},{1= 34,11, -1636},{135,11,1344},{12,0,277},{7,10,274},{11,10,479},{139,10,507},{6,0,7= 05},{6, -0,783},{6,0,1275},{6,0,1481},{4,11,282},{7,11,1034},{11,11,398},{11,11,63= 4},{12, -11,1},{12,11,79},{12,11,544},{14,11,237},{17,11,10},{146,11,20},{134,0,45= 3},{4,0 -,555},{8,0,536},{10,0,288},{11,0,1005},{4,10,497},{135,10,1584},{5,11,118= },{5,11 -,499},{6,11,476},{7,11,600},{7,11,888},{135,11,1096},{138,0,987},{7,0,110= 7},{7, -10,261},{7,10,1115},{7,10,1354},{7,10,1588},{7,10,1705},{7,10,1902},{9,10= ,465},{ -10,10,248},{10,10,349},{10,10,647},{11,10,527},{11,10,660},{11,10,669},{1= 2,10, -529},{141,10,305},{7,11,296},{7,11,596},{8,11,560},{8,11,586},{9,11,612},= {11,11, -100},{11,11,304},{12,11,46},{13,11,89},{14,11,112},{145,11,122},{9,0,370}= ,{138,0 -,90},{136,10,13},{132,0,860},{7,10,642},{8,10,250},{11,10,123},{11,10,137= },{13, -10,48},{142,10,95},{135,10,1429},{137,11,321},{132,0,257},{135,0,2031},{7= ,0,1768 -},{7,11,1599},{7,11,1723},{8,11,79},{8,11,106},{8,11,190},{8,11,302},{8,1= 1,383}, -{9,11,119},{9,11,233},{9,11,298},{9,11,419},{9,11,471},{10,11,181},{10,11= ,406},{ -11,11,57},{11,11,85},{11,11,120},{11,11,177},{11,11,296},{11,11,382},{11,= 11,454} -,{11,11,758},{11,11,999},{12,11,27},{12,11,98},{12,11,131},{12,11,245},{1= 2,11, -312},{12,11,446},{12,11,454},{13,11,25},{13,11,98},{13,11,426},{13,11,508= },{14, -11,6},{14,11,163},{14,11,272},{14,11,277},{14,11,370},{15,11,95},{15,11,1= 38},{15 -,11,167},{17,11,18},{17,11,38},{20,11,96},{149,11,32},{5,11,722},{134,11,= 1759},{ -145,11,16},{6,0,1071},{134,0,1561},{10,10,545},{140,10,301},{6,0,83},{6,0= ,1733}, -{135,0,1389},{4,0,835},{135,0,1818},{133,11,258},{4,10,904},{133,10,794},= {134,0, -2006},{5,11,30},{7,11,495},{8,11,134},{9,11,788},{140,11,438},{135,11,200= 4},{137 -,0,696},{5,11,50},{6,11,439},{7,11,780},{135,11,1040},{7,11,772},{7,11,11= 04},{7, -11,1647},{11,11,269},{11,11,539},{11,11,607},{11,11,627},{11,11,706},{11,= 11,975} -,{12,11,248},{12,11,311},{12,11,434},{12,11,600},{12,11,622},{13,11,297},= {13,11, -367},{13,11,485},{14,11,69},{14,11,409},{143,11,108},{5,11,1},{6,11,81},{= 138,11, -520},{7,0,1718},{9,0,95},{9,0,274},{10,0,279},{10,0,317},{10,0,420},{11,0= ,303},{ -11,0,808},{12,0,134},{12,0,367},{13,0,149},{13,0,347},{14,0,349},{14,0,40= 6},{18, -0,22},{18,0,89},{18,0,122},{147,0,47},{5,11,482},{8,11,98},{9,11,172},{10= ,11,222 -},{10,11,700},{10,11,822},{11,11,302},{11,11,778},{12,11,50},{12,11,127},= {12,11, -396},{13,11,62},{13,11,328},{14,11,122},{147,11,72},{7,10,386},{138,10,71= 3},{6, -10,7},{6,10,35},{7,10,147},{7,10,1069},{7,10,1568},{7,10,1575},{7,10,1917= },{8,10 -,43},{8,10,208},{9,10,128},{9,10,866},{10,10,20},{11,10,981},{147,10,33},= {133,0, -26},{132,0,550},{5,11,2},{7,11,1494},{136,11,589},{6,11,512},{7,11,797},{= 8,11, -253},{9,11,77},{10,11,1},{10,11,129},{10,11,225},{11,11,118},{11,11,226},= {11,11, -251},{11,11,430},{11,11,701},{11,11,974},{11,11,982},{12,11,64},{12,11,26= 0},{12, -11,488},{140,11,690},{7,10,893},{141,10,424},{134,0,901},{136,0,822},{4,0= ,902},{ -5,0,809},{134,0,122},{6,0,807},{134,0,1366},{7,0,262},{5,11,748},{134,11,= 553},{ -133,0,620},{4,0,34},{5,0,574},{7,0,279},{7,0,1624},{136,0,601},{9,0,170},= {6,10, -322},{9,10,552},{11,10,274},{13,10,209},{13,10,499},{14,10,85},{15,10,126= },{145, -10,70},{132,0,537},{4,11,12},{7,11,420},{7,11,522},{7,11,809},{8,11,797},= {141,11 -,88},{133,0,332},{8,10,83},{8,10,742},{8,10,817},{9,10,28},{9,10,29},{9,1= 0,885}, -{10,10,387},{11,10,633},{11,10,740},{13,10,235},{13,10,254},{15,10,143},{= 143,10, -146},{6,0,1909},{9,0,964},{12,0,822},{12,0,854},{12,0,865},{12,0,910},{12= ,0,938} -,{15,0,169},{15,0,208},{15,0,211},{18,0,205},{18,0,206},{18,0,220},{18,0,= 223},{ -152,0,24},{140,10,49},{5,11,528},{135,11,1580},{6,0,261},{8,0,182},{139,0= ,943},{ -134,0,1721},{4,0,933},{133,0,880},{136,11,321},{5,11,266},{9,11,290},{9,1= 1,364}, -{10,11,293},{11,11,606},{142,11,45},{6,0,1609},{4,11,50},{6,11,510},{6,11= ,594},{ -9,11,121},{10,11,49},{10,11,412},{139,11,834},{7,0,895},{136,11,748},{132= ,11,466 -},{4,10,110},{10,10,415},{10,10,597},{142,10,206},{133,0,812},{135,11,281= },{6,0, -1890},{6,0,1902},{6,0,1916},{9,0,929},{9,0,942},{9,0,975},{9,0,984},{9,0,= 986},{9 -,0,1011},{9,0,1019},{12,0,804},{12,0,851},{12,0,867},{12,0,916},{12,0,923= },{15,0 -,194},{15,0,204},{15,0,210},{15,0,222},{15,0,223},{15,0,229},{15,0,250},{= 18,0, -179},{18,0,186},{18,0,192},{7,10,205},{135,10,2000},{132,11,667},{135,0,7= 78},{4, -0,137},{7,0,1178},{135,0,1520},{134,0,1314},{4,11,242},{134,11,333},{6,0,= 1661},{ -7,0,1975},{7,0,2009},{135,0,2011},{134,0,1591},{4,10,283},{135,10,1194},{= 11,0, -820},{150,0,51},{4,11,39},{5,11,36},{7,11,1843},{8,11,407},{11,11,144},{1= 40,11, -523},{134,10,1720},{4,11,510},{7,11,29},{7,11,66},{7,11,1980},{10,11,487}= ,{10,11 -,809},{146,11,9},{5,0,89},{7,0,1915},{9,0,185},{9,0,235},{10,0,64},{10,0,= 270},{ -10,0,403},{10,0,469},{10,0,529},{10,0,590},{11,0,140},{11,0,860},{13,0,1}= ,{13,0, -422},{14,0,341},{14,0,364},{17,0,93},{18,0,113},{19,0,97},{147,0,113},{13= 3,0,695 -},{6,0,987},{134,0,1160},{5,0,6},{6,0,183},{7,0,680},{7,0,978},{7,0,1013}= ,{7,0, -1055},{12,0,230},{13,0,172},{146,0,29},{134,11,570},{132,11,787},{134,11,= 518},{6 -,0,29},{139,0,63},{132,11,516},{136,11,821},{132,0,311},{134,0,1740},{7,0= ,170},{ -8,0,90},{8,0,177},{8,0,415},{11,0,714},{14,0,281},{136,10,735},{134,0,196= 1},{135 -,11,1405},{4,11,10},{7,11,917},{139,11,786},{5,10,132},{9,10,486},{9,10,7= 15},{10 -,10,458},{11,10,373},{11,10,668},{11,10,795},{11,10,897},{12,10,272},{12,= 10,424} -,{12,10,539},{12,10,558},{14,10,245},{14,10,263},{14,10,264},{14,10,393},= {142,10 -,403},{11,0,91},{13,0,129},{15,0,101},{145,0,125},{135,0,1132},{4,0,494},= {6,0,74 -},{7,0,44},{7,0,407},{12,0,17},{15,0,5},{148,0,11},{133,10,379},{5,0,270}= ,{5,11, -684},{6,10,89},{6,10,400},{7,10,1569},{7,10,1623},{7,10,1850},{8,10,218},= {8,10, -422},{9,10,570},{138,10,626},{4,0,276},{133,0,296},{6,0,1523},{134,11,27}= ,{6,10, -387},{7,10,882},{141,10,111},{6,10,224},{7,10,877},{137,10,647},{135,10,7= 90},{4, -0,7},{5,0,90},{5,0,158},{6,0,542},{7,0,221},{7,0,1574},{9,0,490},{10,0,54= 0},{11, -0,443},{139,0,757},{7,0,588},{9,0,175},{138,0,530},{135,10,394},{142,11,2= 3},{134 -,0,786},{135,0,580},{7,0,88},{136,0,627},{5,0,872},{6,0,57},{7,0,471},{9,= 0,447}, -{137,0,454},{6,11,342},{6,11,496},{8,11,275},{137,11,206},{4,11,909},{133= ,11,940 -},{6,0,735},{132,11,891},{8,0,845},{8,0,916},{135,10,1409},{5,0,31},{134,= 0,614}, -{11,0,458},{12,0,15},{140,0,432},{8,0,330},{140,0,477},{4,0,530},{5,0,521= },{7,0, -1200},{10,0,460},{132,11,687},{6,0,424},{135,0,1866},{9,0,569},{12,0,12},= {12,0, -81},{12,0,319},{13,0,69},{14,0,259},{16,0,87},{17,0,1},{17,0,21},{17,0,24= },{18,0 -,15},{18,0,56},{18,0,59},{18,0,127},{18,0,154},{19,0,19},{148,0,31},{7,0,= 1302},{ -136,10,38},{134,11,253},{5,10,261},{7,10,78},{7,10,199},{8,10,815},{9,10,= 126},{ -138,10,342},{5,0,595},{135,0,1863},{6,11,41},{141,11,160},{5,0,13},{134,0= ,142},{ -6,0,97},{7,0,116},{8,0,322},{8,0,755},{9,0,548},{10,0,714},{11,0,884},{13= ,0,324} -,{7,11,1304},{138,11,477},{132,10,628},{134,11,1718},{7,10,266},{136,10,8= 04},{ -135,10,208},{7,0,1021},{6,10,79},{135,10,1519},{7,0,1472},{135,0,1554},{6= ,11,362 -},{146,11,51},{7,0,1071},{7,0,1541},{7,0,1767},{7,0,1806},{11,0,162},{11,= 0,242}, -{11,0,452},{12,0,605},{15,0,26},{144,0,44},{136,10,741},{133,11,115},{145= ,0,115} -,{134,10,376},{6,0,1406},{134,0,1543},{5,11,193},{12,11,178},{13,11,130},= {145,11 -,84},{135,0,1111},{8,0,1},{9,0,650},{10,0,326},{5,11,705},{137,11,606},{5= ,0,488} -,{6,0,527},{7,0,489},{7,0,1636},{8,0,121},{8,0,144},{8,0,359},{9,0,193},{= 9,0,241 -},{9,0,336},{9,0,882},{11,0,266},{11,0,372},{11,0,944},{12,0,401},{140,0,= 641},{ -135,11,174},{6,0,267},{7,10,244},{7,10,632},{7,10,1609},{8,10,178},{8,10,= 638},{ -141,10,58},{134,0,1983},{134,0,1155},{134,0,1575},{134,0,1438},{9,0,31},{= 10,0, -244},{10,0,699},{12,0,149},{141,0,497},{133,0,377},{4,11,122},{5,11,796},= {5,11, -952},{6,11,1660},{6,11,1671},{8,11,567},{9,11,687},{9,11,742},{10,11,686}= ,{11,11 -,356},{11,11,682},{140,11,281},{145,0,101},{11,11,0},{144,11,78},{5,11,17= 9},{5, -10,791},{7,11,1095},{135,11,1213},{8,11,372},{9,11,122},{138,11,175},{7,1= 0,686}, -{8,10,33},{8,10,238},{10,10,616},{11,10,467},{11,10,881},{13,10,217},{13,= 10,253} -,{142,10,268},{9,0,476},{4,11,66},{7,11,722},{135,11,904},{7,11,352},{137= ,11,684 -},{135,0,2023},{135,0,1836},{132,10,447},{5,0,843},{144,0,35},{137,11,779= },{141, -11,35},{4,10,128},{5,10,415},{6,10,462},{7,10,294},{7,10,578},{10,10,710}= ,{139, -10,86},{132,0,554},{133,0,536},{136,10,587},{5,0,207},{9,0,79},{11,0,625}= ,{145,0 -,7},{7,0,1371},{6,10,427},{138,10,692},{4,0,424},{4,10,195},{135,10,802},= {8,0, -785},{133,11,564},{135,0,336},{4,0,896},{6,0,1777},{134,11,556},{137,11,1= 03},{ -134,10,1683},{7,11,544},{8,11,719},{138,11,61},{138,10,472},{4,11,5},{5,1= 1,498}, -{136,11,637},{7,0,750},{9,0,223},{11,0,27},{11,0,466},{12,0,624},{14,0,26= 5},{146 -,0,61},{12,0,238},{18,0,155},{12,11,238},{146,11,155},{151,10,28},{133,11= ,927},{ -12,0,383},{5,10,3},{8,10,578},{9,10,118},{10,10,705},{141,10,279},{4,11,8= 93},{5, -11,780},{133,11,893},{4,0,603},{133,0,661},{4,0,11},{6,0,128},{7,0,231},{= 7,0, -1533},{10,0,725},{5,10,229},{5,11,238},{135,11,1350},{8,10,102},{10,10,57= 8},{10, -10,672},{12,10,496},{13,10,408},{14,10,121},{145,10,106},{132,0,476},{134= ,0,1552 -},{134,11,1729},{8,10,115},{8,10,350},{9,10,489},{10,10,128},{11,10,306},= {12,10, -373},{14,10,30},{17,10,79},{19,10,80},{150,10,55},{135,0,1807},{4,0,680},= {4,11, -60},{7,11,760},{7,11,1800},{8,11,314},{9,11,700},{139,11,487},{4,10,230},= {5,10, -702},{148,11,94},{132,11,228},{139,0,435},{9,0,20},{10,0,324},{10,0,807},= {139,0, -488},{6,10,1728},{136,11,419},{4,10,484},{18,10,26},{19,10,42},{20,10,43}= ,{21,10 -,0},{23,10,27},{152,10,14},{135,0,1431},{133,11,828},{5,0,112},{6,0,103},= {6,0, -150},{7,0,1303},{9,0,292},{10,0,481},{20,0,13},{7,11,176},{7,11,178},{7,1= 1,1110} -,{10,11,481},{148,11,13},{138,0,356},{4,11,51},{5,11,39},{6,11,4},{7,11,5= 91},{7, -11,849},{7,11,951},{7,11,1129},{7,11,1613},{7,11,1760},{7,11,1988},{9,11,= 434},{ -10,11,754},{11,11,25},{11,11,37},{139,11,414},{6,0,1963},{134,0,2000},{13= 2,10, -633},{6,0,1244},{133,11,902},{135,11,928},{140,0,18},{138,0,204},{135,11,= 1173},{ -134,0,867},{4,0,708},{8,0,15},{9,0,50},{9,0,386},{11,0,18},{11,0,529},{14= 0,0,228 -},{134,11,270},{4,0,563},{7,0,109},{7,0,592},{7,0,637},{7,0,770},{8,0,463= },{9,0, -60},{9,0,335},{9,0,904},{10,0,73},{11,0,434},{12,0,585},{13,0,331},{18,0,= 110},{ -148,0,60},{132,0,502},{14,11,359},{19,11,52},{148,11,47},{6,11,377},{7,11= ,1025}, -{9,11,613},{145,11,104},{6,0,347},{10,0,161},{5,10,70},{5,10,622},{6,10,3= 34},{7, -10,1032},{9,10,171},{11,10,26},{11,10,213},{11,10,637},{11,10,707},{12,10= ,202},{ -12,10,380},{13,10,226},{13,10,355},{14,10,222},{145,10,42},{132,11,416},{= 4,0,33} -,{5,0,102},{6,0,284},{7,0,1079},{7,0,1423},{7,0,1702},{8,0,470},{9,0,554}= ,{9,0, -723},{11,0,333},{142,11,372},{5,11,152},{5,11,197},{7,11,340},{7,11,867},= {10,11, -548},{10,11,581},{11,11,6},{12,11,3},{12,11,19},{14,11,110},{142,11,289},= {7,0, -246},{135,0,840},{6,0,10},{8,0,571},{9,0,739},{143,0,91},{6,0,465},{7,0,1= 465},{4 -,10,23},{4,10,141},{5,10,313},{5,10,1014},{6,10,50},{7,10,142},{7,10,559}= ,{8,10, -640},{9,10,460},{9,10,783},{11,10,741},{12,10,183},{141,10,488},{133,0,62= 6},{136 -,0,614},{138,0,237},{7,11,34},{7,11,190},{8,11,28},{8,11,141},{8,11,444},= {8,11, -811},{9,11,468},{11,11,334},{12,11,24},{12,11,386},{140,11,576},{133,11,7= 57},{5, -0,18},{6,0,526},{13,0,24},{13,0,110},{19,0,5},{147,0,44},{6,0,506},{134,1= 1,506}, -{135,11,1553},{4,0,309},{5,0,462},{7,0,970},{7,0,1097},{22,0,30},{22,0,33= },{7,11 -,1385},{11,11,582},{11,11,650},{11,11,901},{11,11,949},{12,11,232},{12,11= ,236},{ -13,11,413},{13,11,501},{146,11,116},{9,0,140},{5,10,222},{138,10,534},{6,= 0,1056} -,{137,10,906},{134,0,1704},{138,10,503},{134,0,1036},{5,10,154},{7,10,149= 1},{10, -10,379},{138,10,485},{4,11,383},{133,10,716},{134,0,1315},{5,0,86},{7,0,7= 43},{9, -0,85},{10,0,281},{10,0,432},{11,0,825},{12,0,251},{13,0,118},{142,0,378},= {8,0, -264},{4,10,91},{5,10,388},{5,10,845},{6,10,206},{6,10,252},{6,10,365},{7,= 10,136} -,{7,10,531},{136,10,621},{5,0,524},{133,0,744},{5,11,277},{141,11,247},{1= 32,11, -435},{10,0,107},{140,0,436},{132,0,927},{10,0,123},{12,0,670},{146,0,94},= {7,0, -1149},{9,0,156},{138,0,957},{5,11,265},{6,11,212},{135,11,28},{133,0,778}= ,{133,0 -,502},{8,0,196},{10,0,283},{139,0,406},{135,10,576},{136,11,535},{134,0,1= 312},{5 -,10,771},{5,10,863},{5,10,898},{6,10,1632},{6,10,1644},{134,10,1780},{5,0= ,855},{ -5,10,331},{135,11,1487},{132,11,702},{5,11,808},{135,11,2045},{7,0,1400},= {9,0, -446},{138,0,45},{140,10,632},{132,0,1003},{5,11,166},{8,11,739},{140,11,5= 11},{5, -10,107},{7,10,201},{136,10,518},{6,10,446},{135,10,1817},{134,0,1532},{13= 4,0, -1097},{4,11,119},{5,11,170},{5,11,447},{7,11,1708},{7,11,1889},{9,11,357}= ,{9,11, -719},{12,11,486},{140,11,596},{9,10,851},{141,10,510},{7,0,612},{8,0,545}= ,{8,0, -568},{8,0,642},{9,0,717},{10,0,541},{10,0,763},{11,0,449},{12,0,489},{13,= 0,153}, -{13,0,296},{14,0,138},{14,0,392},{15,0,50},{16,0,6},{16,0,12},{20,0,9},{1= 32,10, -504},{4,11,450},{135,11,1158},{11,0,54},{13,0,173},{13,0,294},{5,10,883},= {5,10, -975},{8,10,392},{148,10,7},{13,0,455},{15,0,99},{15,0,129},{144,0,68},{13= 5,0,172 -},{132,11,754},{5,10,922},{134,10,1707},{134,0,1029},{17,11,39},{148,11,3= 6},{4,0 -,568},{5,10,993},{7,10,515},{137,10,91},{132,0,732},{10,0,617},{138,11,61= 7},{134 -,0,974},{7,0,989},{10,0,377},{12,0,363},{13,0,68},{13,0,94},{14,0,108},{1= 42,0, -306},{136,0,733},{132,0,428},{7,0,1789},{135,11,1062},{7,0,2015},{140,0,6= 65},{ -135,10,1433},{5,0,287},{7,10,921},{8,10,580},{8,10,593},{8,10,630},{138,1= 0,28},{ -138,0,806},{4,10,911},{5,10,867},{5,10,1013},{7,10,2034},{8,10,798},{136,= 10,813} -,{134,0,1539},{8,11,523},{150,11,34},{135,11,740},{7,11,238},{7,11,2033},= {8,11, -120},{8,11,188},{8,11,659},{9,11,598},{10,11,466},{12,11,342},{12,11,588}= ,{13,11 -,503},{14,11,246},{143,11,92},{7,0,1563},{141,0,182},{5,10,135},{6,10,519= },{7,10 -,1722},{10,10,271},{11,10,261},{145,10,54},{14,10,338},{148,10,81},{7,0,4= 84},{4, -10,300},{133,10,436},{145,11,114},{6,0,1623},{134,0,1681},{133,11,640},{4= ,11,201 -},{7,11,1744},{8,11,602},{11,11,247},{11,11,826},{145,11,65},{8,11,164},{= 146,11, -62},{6,0,1833},{6,0,1861},{136,0,878},{134,0,1569},{8,10,357},{10,10,745}= ,{14,10 -,426},{17,10,94},{147,10,57},{12,0,93},{12,0,501},{13,0,362},{14,0,151},{= 15,0,40 -},{15,0,59},{16,0,46},{17,0,25},{18,0,14},{18,0,134},{19,0,25},{19,0,69},= {20,0, -16},{20,0,19},{20,0,66},{21,0,23},{21,0,25},{150,0,42},{6,0,1748},{8,0,71= 5},{9,0 -,802},{10,0,46},{10,0,819},{13,0,308},{14,0,351},{14,0,363},{146,0,67},{1= 32,0, -994},{4,0,63},{133,0,347},{132,0,591},{133,0,749},{7,11,1577},{10,11,304}= ,{10,11 -,549},{11,11,424},{12,11,365},{13,11,220},{13,11,240},{142,11,33},{133,0,= 366},{7 -,0,557},{12,0,547},{14,0,86},{133,10,387},{135,0,1747},{132,11,907},{5,11= ,100},{ -10,11,329},{12,11,416},{149,11,29},{4,10,6},{5,10,708},{136,10,75},{7,10,= 1351},{ -9,10,581},{10,10,639},{11,10,453},{140,10,584},{7,0,89},{132,10,303},{138= ,10,772 -},{132,11,176},{5,11,636},{5,11,998},{8,11,26},{137,11,358},{7,11,9},{7,1= 1,1508} -,{9,11,317},{10,11,210},{10,11,292},{10,11,533},{11,11,555},{12,11,526},{= 12,11, -607},{13,11,263},{13,11,459},{142,11,271},{134,0,1463},{6,0,772},{6,0,113= 7},{139 -,11,595},{7,0,977},{139,11,66},{138,0,893},{20,0,48},{148,11,48},{5,0,824= },{133, -0,941},{134,11,295},{7,0,1543},{7,0,1785},{10,0,690},{4,10,106},{139,10,7= 17},{7, -0,440},{8,0,230},{139,0,106},{5,10,890},{133,10,988},{6,10,626},{142,10,4= 31},{10 -,11,127},{141,11,27},{17,0,32},{10,10,706},{150,10,44},{132,0,216},{137,0= ,332},{ -4,10,698},{136,11,119},{139,11,267},{138,10,17},{11,11,526},{11,11,939},{= 141,11, -290},{7,11,1167},{11,11,934},{13,11,391},{145,11,76},{139,11,39},{134,10,= 84},{4, -0,914},{5,0,800},{133,0,852},{10,0,416},{141,0,115},{7,0,564},{142,0,168}= ,{4,0, -918},{133,0,876},{134,0,1764},{152,0,3},{4,0,92},{5,0,274},{7,11,126},{13= 6,11,84 -},{140,10,498},{136,11,790},{8,0,501},{5,10,986},{6,10,130},{7,10,1582},{= 8,10, -458},{10,10,101},{10,10,318},{138,10,823},{6,11,64},{12,11,377},{141,11,3= 09},{5, -0,743},{138,0,851},{4,0,49},{7,0,280},{135,0,1633},{134,0,879},{136,0,47}= ,{7,10, -1644},{137,10,129},{132,0,865},{134,0,1202},{9,11,34},{139,11,484},{135,1= 0,997}, -{5,0,272},{5,0,908},{5,0,942},{8,0,197},{9,0,47},{11,0,538},{139,0,742},{= 6,11, -1700},{7,11,26},{7,11,293},{7,11,382},{7,11,1026},{7,11,1087},{7,11,2027}= ,{8,11, -24},{8,11,114},{8,11,252},{8,11,727},{8,11,729},{9,11,30},{9,11,199},{9,1= 1,231}, -{9,11,251},{9,11,334},{9,11,361},{9,11,488},{9,11,712},{10,11,55},{10,11,= 60},{10 -,11,232},{10,11,332},{10,11,384},{10,11,396},{10,11,504},{10,11,542},{10,= 11,652} -,{11,11,20},{11,11,48},{11,11,207},{11,11,291},{11,11,298},{11,11,342},{1= 1,11, -365},{11,11,394},{11,11,620},{11,11,705},{11,11,1017},{12,11,123},{12,11,= 340},{ -12,11,406},{12,11,643},{13,11,61},{13,11,269},{13,11,311},{13,11,319},{13= ,11,486 -},{14,11,234},{15,11,62},{15,11,85},{16,11,71},{18,11,119},{148,11,105},{= 6,0, -1455},{150,11,37},{135,10,1927},{135,0,1911},{137,0,891},{7,10,1756},{137= ,10,98} -,{7,10,1046},{139,10,160},{132,0,761},{6,11,379},{7,11,270},{7,11,1116},{= 8,11, -176},{8,11,183},{9,11,432},{9,11,661},{12,11,247},{12,11,617},{146,11,125= },{6,10 -,45},{7,10,433},{8,10,129},{9,10,21},{10,10,392},{11,10,79},{12,10,499},{= 13,10, -199},{141,10,451},{4,0,407},{5,11,792},{133,11,900},{132,0,560},{135,0,18= 3},{13, -0,490},{7,10,558},{136,10,353},{4,0,475},{6,0,731},{11,0,35},{13,0,71},{1= 3,0,177 -},{14,0,422},{133,10,785},{8,10,81},{9,10,189},{9,10,201},{11,10,478},{11= ,10,712 -},{141,10,338},{4,0,418},{4,0,819},{133,10,353},{151,10,26},{4,11,901},{1= 33,11, -776},{132,0,575},{7,0,818},{16,0,92},{17,0,14},{17,0,45},{18,0,75},{148,0= ,18},{6 -,0,222},{7,0,636},{7,0,1620},{8,0,409},{9,0,693},{139,0,77},{6,10,25},{7,= 10,855} -,{7,10,1258},{144,10,32},{6,0,1880},{6,0,1887},{6,0,1918},{6,0,1924},{9,0= ,967},{ -9,0,995},{9,0,1015},{12,0,826},{12,0,849},{12,0,857},{12,0,860},{12,0,886= },{12,0 -,932},{18,0,228},{18,0,231},{146,0,240},{134,0,633},{134,0,1308},{4,11,37= },{5,11 -,334},{135,11,1253},{10,0,86},{4,10,4},{7,10,1118},{7,10,1320},{7,10,1706= },{8,10 -,277},{9,10,622},{11,10,724},{12,10,350},{12,10,397},{13,10,28},{13,10,15= 9},{15, -10,89},{18,10,5},{19,10,9},{20,10,34},{150,10,47},{132,11,508},{137,11,44= 8},{12, -11,107},{146,11,31},{132,0,817},{134,0,663},{133,0,882},{134,0,914},{132,= 11,540} -,{132,11,533},{136,11,608},{8,0,885},{138,0,865},{132,0,426},{6,0,58},{7,= 0,745}, -{7,0,1969},{8,0,399},{8,0,675},{9,0,479},{9,0,731},{10,0,330},{10,0,593},= {10,0, -817},{11,0,32},{11,0,133},{11,0,221},{145,0,68},{134,10,255},{7,0,102},{1= 37,0, -538},{137,10,216},{7,11,253},{136,11,549},{135,11,912},{9,10,183},{139,10= ,286},{ -11,10,956},{151,10,3},{8,11,527},{18,11,60},{147,11,24},{4,10,536},{7,10,= 1141},{ -10,10,723},{139,10,371},{133,11,920},{7,0,876},{135,10,285},{135,10,560},= {132,10 -,690},{142,11,126},{11,10,33},{12,10,571},{149,10,1},{133,0,566},{9,0,139= },{10,0 -,399},{11,0,469},{12,0,634},{13,0,223},{132,11,483},{6,0,48},{135,0,63},{= 18,0,12 -},{7,10,1862},{12,10,491},{12,10,520},{13,10,383},{142,10,244},{135,11,16= 65},{ -132,11,448},{9,11,495},{146,11,104},{6,0,114},{7,0,1224},{7,0,1556},{136,= 0,3},{4 -,10,190},{133,10,554},{8,0,576},{9,0,267},{133,10,1001},{133,10,446},{133= ,0,933} -,{139,11,1009},{8,11,653},{13,11,93},{147,11,14},{6,0,692},{6,0,821},{134= ,0,1077 -},{5,11,172},{135,11,801},{138,0,752},{4,0,375},{134,0,638},{134,0,1011},= {140,11 -,540},{9,0,96},{133,11,260},{139,11,587},{135,10,1231},{12,0,30},{13,0,14= 8},{14, -0,87},{14,0,182},{16,0,42},{20,0,70},{132,10,304},{6,0,1398},{7,0,56},{7,= 0,1989} -,{8,0,337},{8,0,738},{9,0,600},{12,0,37},{13,0,447},{142,0,92},{138,0,666= },{5,0, -394},{7,0,487},{136,0,246},{9,0,437},{6,10,53},{6,10,199},{7,10,1408},{8,= 10,32}, -{8,10,93},{10,10,397},{10,10,629},{11,10,593},{11,10,763},{13,10,326},{14= 5,10,35 -},{134,10,105},{9,0,320},{10,0,506},{138,10,794},{7,11,57},{8,11,167},{8,= 11,375} -,{9,11,82},{9,11,561},{10,11,620},{10,11,770},{11,10,704},{141,10,396},{6= ,0,1003 -},{5,10,114},{5,10,255},{141,10,285},{7,0,866},{135,0,1163},{133,11,531},= {132,0, -328},{7,10,2035},{8,10,19},{9,10,89},{138,10,831},{8,11,194},{136,11,756}= ,{136,0 -,1000},{5,11,453},{134,11,441},{4,0,101},{5,0,833},{7,0,1171},{136,0,744}= ,{133,0 -,726},{136,10,746},{138,0,176},{6,0,9},{6,0,397},{7,0,53},{7,0,1742},{10,= 0,632}, -{11,0,828},{140,0,146},{135,11,22},{145,11,64},{132,0,839},{11,0,417},{12= ,0,223} -,{140,0,265},{4,11,102},{7,11,815},{7,11,1699},{139,11,964},{5,10,955},{1= 36,10, -814},{6,0,1931},{6,0,2007},{18,0,246},{146,0,247},{8,0,198},{11,0,29},{14= 0,0,534 -},{135,0,1771},{6,0,846},{7,11,1010},{11,11,733},{11,11,759},{12,11,563},= {13,11, -34},{14,11,101},{18,11,45},{146,11,129},{4,0,186},{5,0,157},{8,0,168},{13= 8,0,6}, -{132,11,899},{133,10,56},{148,10,100},{133,0,875},{5,0,773},{5,0,991},{6,= 0,1635} -,{134,0,1788},{6,0,1274},{9,0,477},{141,0,78},{4,0,639},{7,0,111},{8,0,58= 1},{12, -0,177},{6,11,52},{9,11,104},{9,11,559},{10,10,4},{10,10,13},{11,10,638},{= 12,11, -308},{19,11,87},{148,10,57},{132,11,604},{4,11,301},{133,10,738},{133,10,= 758},{ -134,0,1747},{7,11,1440},{11,11,854},{11,11,872},{11,11,921},{12,11,551},{= 13,11, -472},{142,11,367},{7,0,1364},{7,0,1907},{141,0,158},{134,0,873},{4,0,404}= ,{4,0, -659},{7,0,552},{135,0,675},{135,10,1112},{139,10,328},{7,11,508},{137,10,= 133},{ -133,0,391},{5,10,110},{6,10,169},{6,10,1702},{7,10,400},{8,10,538},{9,10,= 184},{9 -,10,524},{140,10,218},{6,11,310},{7,11,1849},{8,11,72},{8,11,272},{8,11,4= 31},{9, -11,12},{9,11,351},{10,11,563},{10,11,630},{10,11,810},{11,11,367},{11,11,= 599},{ -11,11,686},{140,11,672},{5,0,540},{6,0,1697},{136,0,668},{132,0,883},{134= ,0,78}, -{12,0,628},{18,0,79},{6,10,133},{9,10,353},{139,10,993},{6,11,181},{7,11,= 537},{8 -,11,64},{9,11,127},{10,11,496},{12,11,510},{141,11,384},{6,10,93},{7,10,1= 422},{7 -,10,1851},{8,10,673},{9,10,529},{140,10,43},{137,10,371},{134,0,1460},{13= 4,0,962 -},{4,11,244},{135,11,233},{9,10,25},{10,10,467},{138,10,559},{4,10,335},{= 135,10, -942},{133,0,460},{135,11,334},{134,11,1650},{4,0,199},{139,0,34},{5,10,60= 1},{8, -10,39},{10,10,773},{11,10,84},{12,10,205},{142,10,1},{133,10,870},{134,0,= 388},{ -14,0,474},{148,0,120},{133,11,369},{139,0,271},{4,0,511},{9,0,333},{9,0,3= 79},{10 -,0,602},{11,0,441},{11,0,723},{11,0,976},{12,0,357},{132,10,181},{134,0,6= 08},{ -134,10,1652},{22,0,49},{137,11,338},{140,0,988},{134,0,617},{5,0,938},{13= 6,0,707 -},{132,10,97},{5,10,147},{6,10,286},{7,10,1362},{141,10,176},{6,0,756},{1= 34,0, -1149},{133,11,896},{6,10,375},{7,10,169},{7,10,254},{136,10,780},{134,0,1= 583},{ -135,10,1447},{139,0,285},{7,11,1117},{8,11,393},{136,11,539},{135,0,344},= {6,0, -469},{7,0,1709},{138,0,515},{5,10,629},{135,10,1549},{5,11,4},{5,11,810},= {6,11, -13},{6,11,538},{6,11,1690},{6,11,1726},{7,11,499},{7,11,1819},{8,11,148},= {8,11, -696},{8,11,791},{12,11,125},{13,11,54},{143,11,9},{135,11,1268},{137,0,40= 4},{132 -,0,500},{5,0,68},{134,0,383},{11,0,216},{139,0,340},{4,11,925},{5,11,803}= ,{8,11, -698},{138,11,828},{4,0,337},{6,0,353},{7,0,1934},{8,0,488},{137,0,429},{7= ,0,236} -,{7,0,1795},{8,0,259},{9,0,135},{9,0,177},{9,0,860},{10,0,825},{11,0,115}= ,{11,0, -370},{11,0,405},{11,0,604},{12,0,10},{12,0,667},{12,0,669},{13,0,76},{14,= 0,310}, -{15,0,76},{15,0,147},{148,0,23},{4,0,15},{4,0,490},{5,0,22},{6,0,244},{7,= 0,40},{ -7,0,200},{7,0,906},{7,0,1199},{9,0,616},{10,0,716},{11,0,635},{11,0,801},= {140,0, -458},{12,0,756},{132,10,420},{134,0,1504},{6,0,757},{133,11,383},{6,0,126= 6},{135 -,0,1735},{5,0,598},{7,0,791},{8,0,108},{9,0,123},{7,10,1570},{140,10,542}= ,{142, -11,410},{9,11,660},{138,11,347} -}; - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_STATIC_DICT_LUT_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h b/BaseTools= /Source/C/BrotliCompress/enc/utf8_util.h deleted file mode 100644 index 8d1cf5555974..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Heuristics for deciding about the UTF8-ness of strings. */ - -#ifndef BROTLI_ENC_UTF8_UTIL_H_ -#define BROTLI_ENC_UTF8_UTIL_H_ - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -static const double kMinUTF8Ratio =3D 0.75; - -/* Returns 1 if at least min_fraction of the bytes between pos and - pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwis= e - returns 0. */ -BROTLI_INTERNAL BROTLI_BOOL BrotliIsMostlyUTF8( - const uint8_t* data, const size_t pos, const size_t mask, - const size_t length, const double min_fraction); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_UTF8_UTIL_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/enc/write_bits.h b/BaseTool= s/Source/C/BrotliCompress/enc/write_bits.h deleted file mode 100644 index 1269b2895077..000000000000 --- a/BaseTools/Source/C/BrotliCompress/enc/write_bits.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright 2010 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Write bits into a byte array. */ - -#ifndef BROTLI_ENC_WRITE_BITS_H_ -#define BROTLI_ENC_WRITE_BITS_H_ - -#include "../common/platform.h" -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/*#define BIT_WRITER_DEBUG */ - -/* This function writes bits into bytes in increasing addresses, and with= in - a byte least-significant-bit first. - - The function can write up to 56 bits in one go with WriteBits - Example: let's assume that 3 bits (Rs below) have been written already= : - - BYTE-0 BYTE+1 BYTE+2 - - 0000 0RRR 0000 0000 0000 0000 - - Now, we could write 5 or less bits in MSB by just sifting by 3 - and OR'ing to BYTE-0. - - For n bits, we take the last 5 bits, OR that with high bits in BYTE-0, - and locate the rest in BYTE+1, BYTE+2, etc. */ -static BROTLI_INLINE void BrotliWriteBits(size_t n_bits, - uint64_t bits, - size_t* BROTLI_RESTRICT pos, - uint8_t* BROTLI_RESTRICT array)= { -#if defined(BROTLI_LITTLE_ENDIAN) - /* This branch of the code can write up to 56 bits at a time, - 7 bits are lost by being perhaps already in *p and at least - 1 bit is needed to initialize the bit-stream ahead (i.e. if 7 - bits are in *p and we write 57 bits, then the next write will - access a byte that was never initialized). */ - uint8_t* p =3D &array[*pos >> 3]; - uint64_t v =3D (uint64_t)(*p); /* Zero-extend 8 to 64 bits. */ - BROTLI_LOG(("WriteBits %2d 0x%08x%08x %10d\n", (int)n_bits, - (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF), - (int)*pos)); - BROTLI_DCHECK((bits >> n_bits) =3D=3D 0); - BROTLI_DCHECK(n_bits <=3D 56); - v |=3D bits << (*pos & 7); - BROTLI_UNALIGNED_STORE64LE(p, v); /* Set some bits. */ - *pos +=3D n_bits; -#else - /* implicit & 0xFF is assumed for uint8_t arithmetics */ - uint8_t* array_pos =3D &array[*pos >> 3]; - const size_t bits_reserved_in_first_byte =3D (*pos & 7); - size_t bits_left_to_write; - bits <<=3D bits_reserved_in_first_byte; - *array_pos++ |=3D (uint8_t)bits; - for (bits_left_to_write =3D n_bits + bits_reserved_in_first_byte; - bits_left_to_write >=3D 9; - bits_left_to_write -=3D 8) { - bits >>=3D 8; - *array_pos++ =3D (uint8_t)bits; - } - *array_pos =3D 0; - *pos +=3D n_bits; -#endif -} - -static BROTLI_INLINE void BrotliWriteBitsPrepareStorage( - size_t pos, uint8_t* array) { - BROTLI_LOG(("WriteBitsPrepareStorage %10d\n", (int)pos)); - BROTLI_DCHECK((pos & 7) =3D=3D 0); - array[pos >> 3] =3D 0; -} - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_WRITE_BITS_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h b/B= aseTools/Source/C/BrotliCompress/include/brotli/decode.h deleted file mode 100644 index 2cd17250d9d8..000000000000 --- a/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h +++ /dev/null @@ -1,344 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/** - * @file - * API for Brotli decompression. - */ - -#ifndef BROTLI_DEC_DECODE_H_ -#define BROTLI_DEC_DECODE_H_ - -#include -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/** - * Opaque structure that holds decoder state. - * - * Allocated and initialized with ::BrotliDecoderCreateInstance. - * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance. - */ -typedef struct BrotliDecoderStateStruct BrotliDecoderState; - -/** - * Result type for ::BrotliDecoderDecompress and - * ::BrotliDecoderDecompressStream functions. - */ -typedef enum { - /** Decoding error, e.g. corrupted input or memory allocation problem. = */ - BROTLI_DECODER_RESULT_ERROR =3D 0, - /** Decoding successfully completed. */ - BROTLI_DECODER_RESULT_SUCCESS =3D 1, - /** Partially done; should be called again with more input. */ - BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT =3D 2, - /** Partially done; should be called again with more output. */ - BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT =3D 3 -} BrotliDecoderResult; - -/** - * Template that evaluates items of ::BrotliDecoderErrorCode. - * - * Example: @code {.cpp} - * // Log Brotli error code. - * switch (brotliDecoderErrorCode) { - * #define CASE_(PREFIX, NAME, CODE) \ - * case BROTLI_DECODER ## PREFIX ## NAME: \ - * LOG(INFO) << "error code:" << #NAME; \ - * break; - * #define NEWLINE_ - * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_) - * #undef CASE_ - * #undef NEWLINE_ - * default: LOG(FATAL) << "unknown brotli error code"; - * } - * @endcode - */ -#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR) = \ - BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR = \ - /* Same as BrotliDecoderResult values */ = \ - BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR = \ - BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR = \ - BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR = \ - = \ - /* Errors caused by invalid input */ = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATO= R \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR = \ - = \ - /* -17..-18 codes are reserved */ = \ - = \ - BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR = \ - = \ - /* Memory allocation problems */ = \ - BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR = \ - /* Literal, insert and distance trees together */ = \ - BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR = \ - /* -23..-24 codes are reserved for distinct tree groups */ = \ - BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR = \ - BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR = \ - /* -28..-29 codes are reserved for dynamic ring-buffer allocation */ = \ - BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR = \ - = \ - /* "Impossible" states */ = \ - BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31) - -/** - * Error code for detailed logging / production debugging. - * - * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE. - */ -typedef enum { -#define BROTLI_COMMA_ , -#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \ - BROTLI_DECODER ## PREFIX ## NAME =3D CODE - BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_CO= MMA_) -} BrotliDecoderErrorCode; -#undef BROTLI_ERROR_CODE_ENUM_ITEM_ -#undef BROTLI_COMMA_ - -/** - * The value of the last error code, negative integer. - * - * All other error code values are in the range from ::BROTLI_LAST_ERROR_= CODE - * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3= in - * ::BrotliDecoderErrorCode enumeration. - */ -#define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE - -/** Options to be used with ::BrotliDecoderSetParameter. */ -typedef enum BrotliDecoderParameter { - /** - * Disable "canny" ring buffer allocation strategy. - * - * Ring buffer is allocated according to window size, despite the real = size of - * the content. - */ - BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION =3D 0, - /** - * Flag that determines if "Large Window Brotli" is used. - */ - BROTLI_DECODER_PARAM_LARGE_WINDOW =3D 1 -} BrotliDecoderParameter; - -/** - * Sets the specified parameter to the given decoder instance. - * - * @param state decoder instance - * @param param parameter to set - * @param value new parameter value - * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is inva= lid - * @returns ::BROTLI_TRUE if value is accepted - */ -BROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter( - BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t val= ue); - -/** - * Creates an instance of ::BrotliDecoderState and initializes it. - * - * The instance can be used once for decoding and should then be destroye= d with - * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding - * session. - * - * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. = In the - * case they are both zero, default memory allocators are used. @p opaque= is - * passed to @p alloc_func and @p free_func when they are called. @p free= _func - * has to return without doing anything when asked to free a NULL pointer= . - * - * @param alloc_func custom memory allocation function - * @param free_func custom memory free function - * @param opaque custom memory manager handle - * @returns @c 0 if instance can not be allocated or initialized - * @returns pointer to initialized ::BrotliDecoderState otherwise - */ -BROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance( - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaqu= e); - -/** - * Deinitializes and frees ::BrotliDecoderState instance. - * - * @param state decoder instance to be cleaned up and deallocated - */ -BROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* stat= e); - -/** - * Performs one-shot memory-to-memory decompression. - * - * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and= sets - * @p *decoded_size to the decompressed length. - * - * @param encoded_size size of @p encoded_buffer - * @param encoded_buffer compressed data buffer with at least @p encoded_= size - * addressable bytes - * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \n - * @b out: length of decompressed data written to - * @p decoded_buffer - * @param decoded_buffer decompressed data destination buffer - * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory - * allocation failed, or @p decoded_buffer is not large enough; - * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise - */ -BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress( - size_t encoded_size, - const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)], - size_t* decoded_size, - uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]); - -/** - * Decompresses the input stream to the output stream. - * - * The values @p *available_in and @p *available_out must specify the num= ber of - * bytes addressable at @p *next_in and @p *next_out respectively. - * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL. - * - * After each call, @p *available_in will be decremented by the amount of= input - * bytes consumed, and the @p *next_in pointer will be incremented by tha= t - * amount. Similarly, @p *available_out will be decremented by the amount= of - * output bytes written, and the @p *next_out pointer will be incremented= by - * that amount. - * - * @p total_out, if it is not a null-pointer, will be set to the number - * of bytes decompressed since the last @p state initialization. - * - * @note Input is never overconsumed, so @p next_in and @p available_in c= ould be - * passed to the next consumer after decoding is complete. - * - * @param state decoder instance - * @param[in, out] available_in @b in: amount of available input; \n - * @b out: amount of unused input - * @param[in, out] next_in pointer to the next compressed byte - * @param[in, out] available_out @b in: length of output buffer; \n - * @b out: remaining size of output buffer - * @param[in, out] next_out output buffer cursor; - * can be @c NULL if @p available_out is @c 0 - * @param[out] total_out number of bytes decompressed so far; can be @c N= ULL - * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory - * allocation failed, arguments were invalid, etc.; - * use ::BrotliDecoderGetErrorCode to get detailed error code - * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked = until - * more input data is provided - * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked= until - * more output space is provided - * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more - * input might be consumed and no more output will be produced - */ -BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream( - BrotliDecoderState* state, size_t* available_in, const uint8_t** next_i= n, - size_t* available_out, uint8_t** next_out, size_t* total_out); - -/** - * Checks if decoder has more output. - * - * @param state decoder instance - * @returns ::BROTLI_TRUE, if decoder has some unconsumed output - * @returns ::BROTLI_FALSE otherwise - */ -BROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput( - const BrotliDecoderState* state); - -/** - * Acquires pointer to internal output buffer. - * - * This method is used to make language bindings easier and more efficien= t: - * -# push data to ::BrotliDecoderDecompressStream, - * until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported - * -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-s= pecific - * entity - * - * Also this could be useful if there is an output stream that is able to - * consume all the provided data (e.g. when data is saved to file system)= . - * - * @attention After every call to ::BrotliDecoderTakeOutput @p *size byte= s of - * output are considered consumed for all consecutive calls to= the - * instance methods; returned pointer becomes invalidated as w= ell. - * - * @note Decoder output is not guaranteed to be contiguous. This means th= at - * after the size-unrestricted call to ::BrotliDecoderTakeOutput, - * immediate next call to ::BrotliDecoderTakeOutput may return more= data. - * - * @param state decoder instance - * @param[in, out] size @b in: number of bytes caller is ready to take, @= c 0 if - * any amount could be handled; \n - * @b out: amount of data pointed by returned pointer and - * considered consumed; \n - * out value is never greater than in value, unless it is= @c 0 - * @returns pointer to output data - */ -BROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput( - BrotliDecoderState* state, size_t* size); - -/** - * Checks if instance has already consumed input. - * - * Instance that returns ::BROTLI_FALSE is considered "fresh" and could b= e - * reused. - * - * @param state decoder instance - * @returns ::BROTLI_TRUE if decoder has already used some input bytes - * @returns ::BROTLI_FALSE otherwise - */ -BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* = state); - -/** - * Checks if decoder instance reached the final state. - * - * @param state decoder instance - * @returns ::BROTLI_TRUE if decoder is in a state where it reached the e= nd of - * the input and produced all of the output - * @returns ::BROTLI_FALSE otherwise - */ -BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished( - const BrotliDecoderState* state); - -/** - * Acquires a detailed error code. - * - * Should be used only after ::BrotliDecoderDecompressStream returns - * ::BROTLI_DECODER_RESULT_ERROR. - * - * See also ::BrotliDecoderErrorString - * - * @param state decoder instance - * @returns last saved error code - */ -BROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode( - const BrotliDecoderState* state); - -/** - * Converts error code to a c-string. - */ -BROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCod= e c); - -/** - * Gets a decoder library version. - * - * Look at BROTLI_VERSION for more information. - */ -BROTLI_DEC_API uint32_t BrotliDecoderVersion(void); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_DEC_DECODE_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h b/B= aseTools/Source/C/BrotliCompress/include/brotli/encode.h deleted file mode 100644 index b26fa4278c10..000000000000 --- a/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h +++ /dev/null @@ -1,427 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/** - * @file - * API for Brotli compression. - */ - -#ifndef BROTLI_ENC_ENCODE_H_ -#define BROTLI_ENC_ENCODE_H_ - -#include -#include - -#if defined(__cplusplus) || defined(c_plusplus) -extern "C" { -#endif - -/** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */ -#define BROTLI_MIN_WINDOW_BITS 10 -/** - * Maximal value for ::BROTLI_PARAM_LGWIN parameter. - * - * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant. - */ -#define BROTLI_MAX_WINDOW_BITS 24 -/** - * Maximal value for ::BROTLI_PARAM_LGWIN parameter - * in "Large Window Brotli" (32-bit). - */ -#define BROTLI_LARGE_MAX_WINDOW_BITS 30 -/** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */ -#define BROTLI_MIN_INPUT_BLOCK_BITS 16 -/** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */ -#define BROTLI_MAX_INPUT_BLOCK_BITS 24 -/** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */ -#define BROTLI_MIN_QUALITY 0 -/** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */ -#define BROTLI_MAX_QUALITY 11 - -/** Options for ::BROTLI_PARAM_MODE parameter. */ -typedef enum BrotliEncoderMode { - /** - * Default compression mode. - * - * In this mode compressor does not know anything in advance about the - * properties of the input. - */ - BROTLI_MODE_GENERIC =3D 0, - /** Compression mode for UTF-8 formatted text input. */ - BROTLI_MODE_TEXT =3D 1, - /** Compression mode used in WOFF 2.0. */ - BROTLI_MODE_FONT =3D 2 -} BrotliEncoderMode; - -/** Default value for ::BROTLI_PARAM_QUALITY parameter. */ -#define BROTLI_DEFAULT_QUALITY 11 -/** Default value for ::BROTLI_PARAM_LGWIN parameter. */ -#define BROTLI_DEFAULT_WINDOW 22 -/** Default value for ::BROTLI_PARAM_MODE parameter. */ -#define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC - -/** Operations that can be performed by streaming encoder. */ -typedef enum BrotliEncoderOperation { - /** - * Process input. - * - * Encoder may postpone producing output, until it has processed enough= input. - */ - BROTLI_OPERATION_PROCESS =3D 0, - /** - * Produce output for all processed input. - * - * Actual flush is performed when input stream is depleted and there is= enough - * space in output stream. This means that client should repeat - * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c = 0, and - * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is ac= quired - * via ::BrotliEncoderTakeOutput, then operation should be repeated aft= er - * output buffer is drained. - * - * @warning Until flush is complete, client @b SHOULD @b NOT swap, - * reduce or extend input stream. - * - * When flush is complete, output data will be sufficient for decoder t= o - * reproduce all the given input. - */ - BROTLI_OPERATION_FLUSH =3D 1, - /** - * Finalize the stream. - * - * Actual finalization is performed when input stream is depleted and t= here is - * enough space in output stream. This means that client should repeat - * ::BROTLI_OPERATION_FINISH operation until @p available_in becomes @c= 0, and - * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is ac= quired - * via ::BrotliEncoderTakeOutput, then operation should be repeated aft= er - * output buffer is drained. - * - * @warning Until finalization is complete, client @b SHOULD @b NOT swa= p, - * reduce or extend input stream. - * - * Helper function ::BrotliEncoderIsFinished checks if stream is finali= zed and - * output fully dumped. - * - * Adding more input data to finalized stream is impossible. - */ - BROTLI_OPERATION_FINISH =3D 2, - /** - * Emit metadata block to stream. - * - * Metadata is opaque to Brotli: neither encoder, nor decoder processes= this - * data or relies on it. It may be used to pass some extra information = from - * encoder client to decoder client without interfering with main data = stream. - * - * @note Encoder may emit empty metadata blocks internally, to pad enco= ded - * stream to byte boundary. - * - * @warning Until emitting metadata is complete client @b SHOULD @b NOT= swap, - * reduce or extend input stream. - * - * @warning The whole content of input buffer is considered to be the c= ontent - * of metadata block. Do @b NOT @e append metadata to input st= ream, - * before it is depleted with other operations. - * - * Stream is soft-flushed before metadata block is emitted. Metadata bl= ock - * @b MUST be no longer than than 16MiB. - */ - BROTLI_OPERATION_EMIT_METADATA =3D 3 -} BrotliEncoderOperation; - -/** Options to be used with ::BrotliEncoderSetParameter. */ -typedef enum BrotliEncoderParameter { - /** - * Tune encoder for specific input. - * - * ::BrotliEncoderMode enumerates all available values. - */ - BROTLI_PARAM_MODE =3D 0, - /** - * The main compression speed-density lever. - * - * The higher the quality, the slower the compression. Range is - * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY. - */ - BROTLI_PARAM_QUALITY =3D 1, - /** - * Recommended sliding LZ77 window size. - * - * Encoder may reduce this value, e.g. if input is much smaller than - * window size. - * - * Window size is `(1 << value) - 16`. - * - * Range is from ::BROTLI_MIN_WINDOW_BITS to ::BROTLI_MAX_WINDOW_BITS. - */ - BROTLI_PARAM_LGWIN =3D 2, - /** - * Recommended input block size. - * - * Encoder may reduce this value, e.g. if input is much smaller than in= put - * block size. - * - * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to - * ::BROTLI_MAX_INPUT_BLOCK_BITS. - * - * @note Bigger input block size allows better compression, but consume= s more - * memory. \n The rough formula of memory used for temporary inpu= t - * storage is `3 << lgBlock`. - */ - BROTLI_PARAM_LGBLOCK =3D 3, - /** - * Flag that affects usage of "literal context modeling" format feature= . - * - * This flag is a "decoding-speed vs compression ratio" trade-off. - */ - BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING =3D 4, - /** - * Estimated total input size for all ::BrotliEncoderCompressStream cal= ls. - * - * The default value is 0, which means that the total input size is unk= nown. - */ - BROTLI_PARAM_SIZE_HINT =3D 5, - /** - * Flag that determines if "Large Window Brotli" is used. - */ - BROTLI_PARAM_LARGE_WINDOW =3D 6, - /** - * Recommended number of postfix bits (NPOSTFIX). - * - * Encoder may change this value. - * - * Range is from 0 to ::BROTLI_MAX_NPOSTFIX. - */ - BROTLI_PARAM_NPOSTFIX =3D 7, - /** - * Recommended number of direct distance codes (NDIRECT). - * - * Encoder may change this value. - * - * Range is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX). - */ - BROTLI_PARAM_NDIRECT =3D 8 -} BrotliEncoderParameter; - -/** - * Opaque structure that holds encoder state. - * - * Allocated and initialized with ::BrotliEncoderCreateInstance. - * Cleaned up and deallocated with ::BrotliEncoderDestroyInstance. - */ -typedef struct BrotliEncoderStateStruct BrotliEncoderState; - -/** - * Sets the specified parameter to the given encoder instance. - * - * @param state encoder instance - * @param param parameter to set - * @param value new parameter value - * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is inva= lid - * @returns ::BROTLI_FALSE if value of parameter can not be changed at cu= rrent - * encoder state (e.g. when encoding is started, window size mig= ht be - * already encoded and therefore it is impossible to change it) - * @returns ::BROTLI_TRUE if value is accepted - * @warning invalid values might be accepted in case they would not break - * encoding process. - */ -BROTLI_ENC_API BROTLI_BOOL BrotliEncoderSetParameter( - BrotliEncoderState* state, BrotliEncoderParameter param, uint32_t val= ue); - -/** - * Creates an instance of ::BrotliEncoderState and initializes it. - * - * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. = In the - * case they are both zero, default memory allocators are used. @p opaque= is - * passed to @p alloc_func and @p free_func when they are called. @p free= _func - * has to return without doing anything when asked to free a NULL pointer= . - * - * @param alloc_func custom memory allocation function - * @param free_func custom memory free function - * @param opaque custom memory manager handle - * @returns @c 0 if instance can not be allocated or initialized - * @returns pointer to initialized ::BrotliEncoderState otherwise - */ -BROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance( - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaqu= e); - -/** - * Deinitializes and frees ::BrotliEncoderState instance. - * - * @param state decoder instance to be cleaned up and deallocated - */ -BROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState* stat= e); - -/** - * Calculates the output size bound for the given @p input_size. - * - * @warning Result is only valid if quality is at least @c 2 and, in - * case ::BrotliEncoderCompressStream was used, no flushes - * (::BROTLI_OPERATION_FLUSH) were performed. - * - * @param input_size size of projected input - * @returns @c 0 if result does not fit @c size_t - */ -BROTLI_ENC_API size_t BrotliEncoderMaxCompressedSize(size_t input_size); - -/** - * Performs one-shot memory-to-memory compression. - * - * Compresses the data in @p input_buffer into @p encoded_buffer, and set= s - * @p *encoded_size to the compressed length. - * - * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns non-z= ero - * value, then output is guaranteed to be no longer than that. - * - * @param quality quality parameter value, e.g. ::BROTLI_DEFAULT_QUALITY - * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW - * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE - * @param input_size size of @p input_buffer - * @param input_buffer input data buffer with at least @p input_size - * addressable bytes - * @param[in, out] encoded_size @b in: size of @p encoded_buffer; \n - * @b out: length of compressed data written to - * @p encoded_buffer, or @c 0 if compression fails - * @param encoded_buffer compressed data destination buffer - * @returns ::BROTLI_FALSE in case of compression error - * @returns ::BROTLI_FALSE if output buffer is too small - * @returns ::BROTLI_TRUE otherwise - */ -BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompress( - int quality, int lgwin, BrotliEncoderMode mode, size_t input_size, - const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)], - size_t* encoded_size, - uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]); - -/** - * Compresses input stream to output stream. - * - * The values @p *available_in and @p *available_out must specify the num= ber of - * bytes addressable at @p *next_in and @p *next_out respectively. - * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL. - * - * After each call, @p *available_in will be decremented by the amount of= input - * bytes consumed, and the @p *next_in pointer will be incremented by tha= t - * amount. Similarly, @p *available_out will be decremented by the amount= of - * output bytes written, and the @p *next_out pointer will be incremented= by - * that amount. - * - * @p total_out, if it is not a null-pointer, will be set to the number - * of bytes compressed since the last @p state initialization. - * - * - * - * Internally workflow consists of 3 tasks: - * -# (optionally) copy input data to internal buffer - * -# actually compress data and (optionally) store it to internal buffe= r - * -# (optionally) copy compressed bytes from internal buffer to output = stream - * - * Whenever all 3 tasks can't move forward anymore, or error occurs, this - * method returns the control flow to caller. - * - * @p op is used to perform flush, finish the stream, or inject metadata = block. - * See ::BrotliEncoderOperation for more information. - * - * Flushing the stream means forcing encoding of all input passed to enco= der and - * completing the current output block, so it could be fully decoded by s= tream - * decoder. To perform flush set @p op to ::BROTLI_OPERATION_FLUSH. - * Under some circumstances (e.g. lack of output stream capacity) this op= eration - * would require several calls to ::BrotliEncoderCompressStream. The meth= od must - * be called again until both input stream is depleted and encoder has no= more - * output (see ::BrotliEncoderHasMoreOutput) after the method is called. - * - * Finishing the stream means encoding of all input passed to encoder and - * adding specific "final" marks, so stream decoder could determine that = stream - * is complete. To perform finish set @p op to ::BROTLI_OPERATION_FINISH. - * Under some circumstances (e.g. lack of output stream capacity) this op= eration - * would require several calls to ::BrotliEncoderCompressStream. The meth= od must - * be called again until both input stream is depleted and encoder has no= more - * output (see ::BrotliEncoderHasMoreOutput) after the method is called. - * - * @warning When flushing and finishing, @p op should not change until op= eration - * is complete; input stream should not be swapped, reduced or - * extended as well. - * - * @param state encoder instance - * @param op requested operation - * @param[in, out] available_in @b in: amount of available input; \n - * @b out: amount of unused input - * @param[in, out] next_in pointer to the next input byte - * @param[in, out] available_out @b in: length of output buffer; \n - * @b out: remaining size of output buffer - * @param[in, out] next_out compressed output buffer cursor; - * can be @c NULL if @p available_out is @c 0 - * @param[out] total_out number of bytes produced so far; can be @c NULL - * @returns ::BROTLI_FALSE if there was an error - * @returns ::BROTLI_TRUE otherwise - */ -BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompressStream( - BrotliEncoderState* state, BrotliEncoderOperation op, size_t* availab= le_in, - const uint8_t** next_in, size_t* available_out, uint8_t** next_out, - size_t* total_out); - -/** - * Checks if encoder instance reached the final state. - * - * @param state encoder instance - * @returns ::BROTLI_TRUE if encoder is in a state where it reached the e= nd of - * the input and produced all of the output - * @returns ::BROTLI_FALSE otherwise - */ -BROTLI_ENC_API BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* st= ate); - -/** - * Checks if encoder has more output. - * - * @param state encoder instance - * @returns ::BROTLI_TRUE, if encoder has some unconsumed output - * @returns ::BROTLI_FALSE otherwise - */ -BROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput( - BrotliEncoderState* state); - -/** - * Acquires pointer to internal output buffer. - * - * This method is used to make language bindings easier and more efficien= t: - * -# push data to ::BrotliEncoderCompressStream, - * until ::BrotliEncoderHasMoreOutput returns BROTL_TRUE - * -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-s= pecific - * entity - * - * Also this could be useful if there is an output stream that is able to - * consume all the provided data (e.g. when data is saved to file system)= . - * - * @attention After every call to ::BrotliEncoderTakeOutput @p *size byte= s of - * output are considered consumed for all consecutive calls to= the - * instance methods; returned pointer becomes invalidated as w= ell. - * - * @note Encoder output is not guaranteed to be contiguous. This means th= at - * after the size-unrestricted call to ::BrotliEncoderTakeOutput, - * immediate next call to ::BrotliEncoderTakeOutput may return more= data. - * - * @param state encoder instance - * @param[in, out] size @b in: number of bytes caller is ready to take, @= c 0 if - * any amount could be handled; \n - * @b out: amount of data pointed by returned pointer and - * considered consumed; \n - * out value is never greater than in value, unless it is= @c 0 - * @returns pointer to output data - */ -BROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput( - BrotliEncoderState* state, size_t* size); - - -/** - * Gets an encoder library version. - * - * Look at BROTLI_VERSION for more information. - */ -BROTLI_ENC_API uint32_t BrotliEncoderVersion(void); - -#if defined(__cplusplus) || defined(c_plusplus) -} /* extern "C" */ -#endif - -#endif /* BROTLI_ENC_ENCODE_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/port.h b/Bas= eTools/Source/C/BrotliCompress/include/brotli/port.h deleted file mode 100644 index 6e439987b547..000000000000 --- a/BaseTools/Source/C/BrotliCompress/include/brotli/port.h +++ /dev/null @@ -1,274 +0,0 @@ -/* Copyright 2016 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/* Macros for compiler / platform specific API declarations. */ - -#ifndef BROTLI_COMMON_PORT_H_ -#define BROTLI_COMMON_PORT_H_ - -/* The following macros were borrowed from https://github.com/nemequ/hedl= ey - * with permission of original author - Evan Nemerson = */ - -/* >>> >>> >>> hedley macros */ - -#define BROTLI_MAKE_VERSION(major, minor, revision) \ - (((major) * 1000000) + ((minor) * 1000) + (revision)) - -#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) -#define BROTLI_GNUC_VERSION \ - BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) -#elif defined(__GNUC__) -#define BROTLI_GNUC_VERSION BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__,= 0) -#endif - -#if defined(BROTLI_GNUC_VERSION) -#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) \ - (BROTLI_GNUC_VERSION >=3D BROTLI_MAKE_VERSION(major, minor, patch)) -#else -#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) (0) -#endif - -#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >=3D 140000000) -#define BROTLI_MSVC_VERSION \ - BROTLI_MAKE_VERSION((_MSC_FULL_VER / 10000000), \ - (_MSC_FULL_VER % 10000000) / 100000, \ - (_MSC_FULL_VER % 100000) / 100) -#elif defined(_MSC_FULL_VER) -#define BROTLI_MSVC_VERSION \ - BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000), \ - (_MSC_FULL_VER % 1000000) / 10000, \ - (_MSC_FULL_VER % 10000) / 10) -#elif defined(_MSC_VER) -#define BROTLI_MSVC_VERSION \ - BROTLI_MAKE_VERSION(_MSC_VER / 100, _MSC_VER % 100, 0) -#endif - -#if !defined(_MSC_VER) -#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) (0) -#elif defined(_MSC_VER) && (_MSC_VER >=3D 1400) -#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \ - (_MSC_FULL_VER >=3D ((major * 10000000) + (minor * 100000) + (patch))) -#elif defined(_MSC_VER) && (_MSC_VER >=3D 1200) -#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \ - (_MSC_FULL_VER >=3D ((major * 1000000) + (minor * 10000) + (patch))) -#else -#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \ - (_MSC_VER >=3D ((major * 100) + (minor))) -#endif - -#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) -#define BROTLI_INTEL_VERSION \ - BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, \ - __INTEL_COMPILER % 100, \ - __INTEL_COMPILER_UPDATE) -#elif defined(__INTEL_COMPILER) -#define BROTLI_INTEL_VERSION \ - BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) -#endif - -#if defined(BROTLI_INTEL_VERSION) -#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) \ - (BROTLI_INTEL_VERSION >=3D BROTLI_MAKE_VERSION(major, minor, patch)) -#else -#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) (0) -#endif - -#if defined(__PGI) && \ - defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHL= EVEL__) -#define BROTLI_PGI_VERSION \ - BROTLI_MAKE_VERSION(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) -#endif - -#if defined(BROTLI_PGI_VERSION) -#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) \ - (BROTLI_PGI_VERSION >=3D BROTLI_MAKE_VERSION(major, minor, patch)) -#else -#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) (0) -#endif - -#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) -#define BROTLI_SUNPRO_VERSION \ - BROTLI_MAKE_VERSION( \ - (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \ - (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), \ - (__SUNPRO_C & 0xf) * 10) -#elif defined(__SUNPRO_C) -#define BROTLI_SUNPRO_VERSION \ - BROTLI_MAKE_VERSION((__SUNPRO_C >> 8) & 0xf, \ - (__SUNPRO_C >> 4) & 0xf, \ - (__SUNPRO_C) & 0xf) -#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) -#define BROTLI_SUNPRO_VERSION \ - BROTLI_MAKE_VERSION( \ - (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \ - (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), \ - (__SUNPRO_CC & 0xf) * 10) -#elif defined(__SUNPRO_CC) -#define BROTLI_SUNPRO_VERSION \ - BROTLI_MAKE_VERSION((__SUNPRO_CC >> 8) & 0xf, \ - (__SUNPRO_CC >> 4) & 0xf, \ - (__SUNPRO_CC) & 0xf) -#endif - -#if defined(BROTLI_SUNPRO_VERSION) -#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) \ - (BROTLI_SUNPRO_VERSION >=3D BROTLI_MAKE_VERSION(major, minor, patch)) -#else -#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) (0) -#endif - -#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) -#define BROTLI_ARM_VERSION \ - BROTLI_MAKE_VERSION((__ARMCOMPILER_VERSION / 1000000), \ - (__ARMCOMPILER_VERSION % 1000000) / 10000, \ - (__ARMCOMPILER_VERSION % 10000) / 100) -#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) -#define BROTLI_ARM_VERSION \ - BROTLI_MAKE_VERSION((__ARMCC_VERSION / 1000000), \ - (__ARMCC_VERSION % 1000000) / 10000, \ - (__ARMCC_VERSION % 10000) / 100) -#endif - -#if defined(BROTLI_ARM_VERSION) -#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) \ - (BROTLI_ARM_VERSION >=3D BROTLI_MAKE_VERSION(major, minor, patch)) -#else -#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) (0) -#endif - -#if defined(__ibmxl__) -#define BROTLI_IBM_VERSION \ - BROTLI_MAKE_VERSION(__ibmxl_version__, \ - __ibmxl_release__, \ - __ibmxl_modification__) -#elif defined(__xlC__) && defined(__xlC_ver__) -#define BROTLI_IBM_VERSION \ - BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & = 0xff) -#elif defined(__xlC__) -#define BROTLI_IBM_VERSION BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0x= ff, 0) -#endif - -#if defined(BROTLI_IBM_VERSION) -#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) \ - (BROTLI_IBM_VERSION >=3D BROTLI_MAKE_VERSION(major, minor, patch)) -#else -#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) (0) -#endif - -#if defined(__TI_COMPILER_VERSION__) -#define BROTLI_TI_VERSION \ - BROTLI_MAKE_VERSION((__TI_COMPILER_VERSION__ / 1000000), \ - (__TI_COMPILER_VERSION__ % 1000000) / 1000, \ - (__TI_COMPILER_VERSION__ % 1000)) -#endif - -#if defined(BROTLI_TI_VERSION) -#define BROTLI_TI_VERSION_CHECK(major, minor, patch) \ - (BROTLI_TI_VERSION >=3D BROTLI_MAKE_VERSION(major, minor, patch)) -#else -#define BROTLI_TI_VERSION_CHECK(major, minor, patch) (0) -#endif - -#if defined(__IAR_SYSTEMS_ICC__) -#if __VER__ > 1000 -#define BROTLI_IAR_VERSION \ - BROTLI_MAKE_VERSION((__VER__ / 1000000), \ - (__VER__ / 1000) % 1000, \ - (__VER__ % 1000)) -#else -#define BROTLI_IAR_VERSION BROTLI_MAKE_VERSION(VER / 100, __VER__ % 100, = 0) -#endif -#endif - -#if defined(BROTLI_IAR_VERSION) -#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) \ - (BROTLI_IAR_VERSION >=3D BROTLI_MAKE_VERSION(major, minor, patch)) -#else -#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) (0) -#endif - -#if defined(__TINYC__) -#define BROTLI_TINYC_VERSION \ - BROTLI_MAKE_VERSION(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__= % 100) -#endif - -#if defined(BROTLI_TINYC_VERSION) -#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) \ - (BROTLI_TINYC_VERSION >=3D BROTLI_MAKE_VERSION(major, minor, patch)) -#else -#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) (0) -#endif - -#if defined(__has_attribute) -#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \ - __has_attribute(attribute) -#else -#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \ - BROTLI_GNUC_VERSION_CHECK(major, minor, patch) -#endif - -#if defined(__has_builtin) -#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \ - __has_builtin(builtin) -#else -#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \ - BROTLI_GNUC_VERSION_CHECK(major, minor, patch) -#endif - -#if defined(_WIN32) || defined(__CYGWIN__) -#define BROTLI_PUBLIC -#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \ - BROTLI_TI_VERSION_CHECK(8, 0, 0) || \ - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \ - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \ - BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \ - BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \ - (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \ - defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__)) -#define BROTLI_PUBLIC __attribute__ ((visibility ("default"))) -#else -#define BROTLI_PUBLIC -#endif - -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >=3D 199901L) && \ - !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \ - !defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__) -#define BROTLI_ARRAY_PARAM(name) (name) -#else -#define BROTLI_ARRAY_PARAM(name) -#endif - -/* <<< <<< <<< end of hedley macros. */ - -#if defined(BROTLI_SHARED_COMPILATION) -#if defined(_WIN32) -#if defined(BROTLICOMMON_SHARED_COMPILATION) -#define BROTLI_COMMON_API __declspec(dllexport) -#else -#define BROTLI_COMMON_API __declspec(dllimport) -#endif /* BROTLICOMMON_SHARED_COMPILATION */ -#if defined(BROTLIDEC_SHARED_COMPILATION) -#define BROTLI_DEC_API __declspec(dllexport) -#else -#define BROTLI_DEC_API __declspec(dllimport) -#endif /* BROTLIDEC_SHARED_COMPILATION */ -#if defined(BROTLIENC_SHARED_COMPILATION) -#define BROTLI_ENC_API __declspec(dllexport) -#else -#define BROTLI_ENC_API __declspec(dllimport) -#endif /* BROTLIENC_SHARED_COMPILATION */ -#else /* _WIN32 */ -#define BROTLI_COMMON_API BROTLI_PUBLIC -#define BROTLI_DEC_API BROTLI_PUBLIC -#define BROTLI_ENC_API BROTLI_PUBLIC -#endif /* _WIN32 */ -#else /* BROTLI_SHARED_COMPILATION */ -#define BROTLI_COMMON_API -#define BROTLI_DEC_API -#define BROTLI_ENC_API -#endif - -#endif /* BROTLI_COMMON_PORT_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/types.h b/Ba= seTools/Source/C/BrotliCompress/include/brotli/types.h deleted file mode 100644 index 513e701af96d..000000000000 --- a/BaseTools/Source/C/BrotliCompress/include/brotli/types.h +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright 2013 Google Inc. All Rights Reserved. - - Distributed under MIT license. - See file LICENSE for detail or copy at https://opensource.org/licenses= /MIT -*/ - -/** - * @file - * Common types used in decoder and encoder API. - */ - -#ifndef BROTLI_COMMON_TYPES_H_ -#define BROTLI_COMMON_TYPES_H_ - -#include /* for size_t */ - -#if defined(_MSC_VER) && (_MSC_VER < 1600) -typedef __int8 int8_t; -typedef unsigned __int8 uint8_t; -typedef __int16 int16_t; -typedef unsigned __int16 uint16_t; -typedef __int32 int32_t; -typedef unsigned __int32 uint32_t; -typedef unsigned __int64 uint64_t; -typedef __int64 int64_t; -#else -#include -#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */ - -/** - * A portable @c bool replacement. - * - * ::BROTLI_BOOL is a "documentation" type: actually it is @c int, but in= API it - * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE= . - * - * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE o= r - * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros. - * - * ::BROTLI_BOOL values returned by Brotli should not be tested for equal= ity - * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather shou= ld be - * evaluated, for example: @code{.cpp} - * if (SomeBrotliFunction(encoder, BROTLI_TRUE) && - * !OtherBrotliFunction(decoder, BROTLI_FALSE)) { - * bool x =3D !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 = = =3D=3D 4)); - * DoSomething(x); - * } - * @endcode - */ -#define BROTLI_BOOL int -/** Portable @c true replacement. */ -#define BROTLI_TRUE 1 -/** Portable @c false replacement. */ -#define BROTLI_FALSE 0 -/** @c bool to ::BROTLI_BOOL conversion macros. */ -#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE) - -#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low= ) - -#define BROTLI_UINT32_MAX (~((uint32_t)0)) -#define BROTLI_SIZE_MAX (~((size_t)0)) - -/** - * Allocating function pointer type. - * - * @param opaque custom memory manager handle provided by client - * @param size requested memory region size; can not be @c 0 - * @returns @c 0 in the case of failure - * @returns a valid pointer to a memory region of at least @p size bytes - * long otherwise - */ -typedef void* (*brotli_alloc_func)(void* opaque, size_t size); - -/** - * Deallocating function pointer type. - * - * This function @b SHOULD do nothing if @p address is @c 0. - * - * @param opaque custom memory manager handle provided by client - * @param address memory region pointer returned by ::brotli_alloc_func, = or @c 0 - */ -typedef void (*brotli_free_func)(void* opaque, void* address); - -#endif /* BROTLI_COMMON_TYPES_H_ */ diff --git a/BaseTools/Source/C/BrotliCompress/tools/brotli.md b/BaseTools= /Source/C/BrotliCompress/tools/brotli.md deleted file mode 100644 index c029869bced7..000000000000 --- a/BaseTools/Source/C/BrotliCompress/tools/brotli.md +++ /dev/null @@ -1,107 +0,0 @@ -brotli(1) -- brotli, unbrotli - compress or decompress files -=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D - -SYNOPSIS --------- - -`brotli` [*OPTION|FILE*]... - -`unbrotli` is equivalent to `brotli --decompress` - -DESCRIPTION ------------ -`brotli` is a generic-purpose lossless compression algorithm that compres= ses -data using a combination of a modern variant of the **LZ77** algorithm, H= uffman -coding and 2-nd order context modeling, with a compression ratio comparab= le to -the best currently available general-purpose compression methods. It is s= imilar -in speed with deflate but offers more dense compression. - -`brotli` command line syntax similar to `gzip (1)` and `zstd (1)`. -Unlike `gzip (1)`, source files are preserved by default. It is possible = to -remove them after processing by using the `--rm` _option_. - -Arguments that look like "`--name`" or "`--name=3Dvalue`" are _options_. = Every -_option_ has a short form "`-x`" or "`-x value`". Multiple short form _op= tions_ -could be coalesced: - -* "`--decompress --stdout --suffix=3D.b`" works the same as -* "`-d -s -S .b`" and -* "`-dsS .b`" - -`brotli` has 3 operation modes: - -* default mode is compression; -* `--decompress` option activates decompression mode; -* `--test` option switches to integrity test mode; this option is equival= ent to - "`--decompress --stdout`" except that the decompressed data is discarde= d - instead of being written to standard output. - -Every non-option argument is a _file_ entry. If no _files_ are given or _= file_ -is "`-`", `brotli` reads from standard input. All arguments after "`--`" = are -_file_ entries. - -Unless `--stdout` or `--output` is specified, _files_ are written to a ne= w file -whose name is derived from the source _file_ name: - -* when compressing, a suffix is appended to the source filename to - get the target filename -* when decompressing, a suffix is removed from the source filename to - get the target filename - -Default suffix is `.br`, but it could be specified with `--suffix` option= . - -Conflicting or duplicate _options_ are not allowed. - -OPTIONS -------- - -* `-#`: - compression level (0-9); bigger values cause denser, but slower compr= ession -* `-c`, `--stdout`: - write on standard output -* `-d`, `--decompress`: - decompress mode -* `-f`, `--force`: - force output file overwrite -* `-h`, `--help`: - display this help and exit -* `-j`, `--rm`: - remove source file(s); `gzip (1)`-like behaviour -* `-k`, `--keep`: - keep source file(s); `zstd (1)`-like behaviour -* `-n`, `--no-copy-stat`: - do not copy source file(s) attributes -* `-o FILE`, `--output=3DFILE` - output file; valid only if there is a single input entry -* `-q NUM`, `--quality=3DNUM`: - compression level (0-11); bigger values cause denser, but slower comp= ression -* `-t`, `--test`: - test file integrity mode -* `-v`, `--verbose`: - increase output verbosity -* `-w NUM`, `--lgwin=3DNUM`: - set LZ77 window size (0, 10-24) (default: 22); window size is - `(2**NUM - 16)`; 0 lets compressor decide over the optimal value; big= ger - windows size improve density; decoder might require up to window size - memory to operate -* `-S SUF`, `--suffix=3DSUF`: - output file suffix (default: `.br`) -* `-V`, `--version`: - display version and exit -* `-Z`, `--best`: - use best compression level (default); same as "`-q 11`" - -SEE ALSO --------- - -`brotli` file format is defined in -[RFC 7932](https://www.ietf.org/rfc/rfc7932.txt). - -`brotli` is open-sourced under the -[MIT License](https://opensource.org/licenses/MIT). - -Mailing list: https://groups.google.com/forum/#!forum/brotli - -BUGS ----- -Report bugs at: https://github.com/google/brotli/issues diff --git a/Readme.md b/Readme.md index 4a4775db85fd..31a56b4913d5 100644 --- a/Readme.md +++ b/Readme.md @@ -57,7 +57,7 @@ for the UEFI and PI specifications from www.uefi.org. The majority of the content in the EDK II open source project uses a [BSD-2-Clause Plus Patent License](License.txt). The EDK II open source = project contains the following components that are covered by additional licenses= : -* [BaseTools/Source/C/BrotliCompress](BaseTools/Source/C/BrotliCompress/L= ICENSE) +* [BaseTools/Source/C/BrotliCompress/brotli](https://github.com/google/br= otli/blob/master/LICENSE) * [MdeModulePkg/Library/BrotliCustomDecompressLib/brotli](https://github.= com/google/brotli/blob/master/LICENSE) * [BaseTools/Source/C/LzmaCompress](BaseTools/Source/C/LzmaCompress/LZMA-= SDK-README.txt) * [MdeModulePkg/Library/LzmaCustomDecompressLib](MdeModulePkg/Library/Lzm= aCustomDecompressLib/LZMA-SDK-README.txt) @@ -200,6 +200,7 @@ as possible as we can. Currently EDK II contains the f= ollowing submodules - CryptoPkg/Library/OpensslLib/openssl - ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 - MdeModulePkg/Library/BrotliCustomDecompressLib/brotli +- BaseTools/Source/C/BrotliCompress/brotli =20 ArmSoftFloatLib is actually required by OpensslLib. It's inevitable in openssl-1.1.1 (since stable201905) for floating point parameter --=20 2.18.0.windows.1