diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index e71f59090..6314c3e22 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -127,7 +127,7 @@ jobs: rm -rf /build /opt/python/cp38-cp38/bin/pip install pytest sed "s/pytest/\/opt\/python\/cp38-cp38\/bin\/python -m pytest/g" -i Makefile - make CXX_COMPILER=/gcc7/bin/g++-7.5.0 CC_COMPILER=/gcc7/bin/gcc-7.5.0 CCACHE=ON Python3_EXECUTABLE=/opt/python/cp38-cp38/bin/python BUILD_DIR=/build test doc + make CXX_COMPILER=/gcc7/bin/g++-7.5.0 CC_COMPILER=/gcc7/bin/gcc-7.5.0 CCACHE=ON Python3_EXECUTABLE=/opt/python/cp38-cp38/bin/python BUILD_DIR=/build all test echo "Debug: ccache statistics (after the build):" ccache -s chmod -R ugo+rwx /tmp/KeySetCache @@ -174,7 +174,7 @@ jobs: set -e cd /compiler export PYTHONPATH="" - make CCACHE=ON BUILD_DIR=/build concretecompiler python-bindings doc + make CCACHE=ON BUILD_DIR=/build all echo "Debug: ccache statistics (after the build):" ccache -s @@ -280,7 +280,7 @@ jobs: echo "Debug: ccache statistics (prior to the build):" ccache -s export CONCRETE_PROJECT=${{ github.workspace }}/concrete - make python-bindings build-tests test-check + make all test-check echo "Debug: ccache statistics (after the build):" ccache -s diff --git a/.gitmodules b/.gitmodules index 027b2e0b5..51112590d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "compiler/concrete-optimizer"] path = compiler/concrete-optimizer url = git@github.com:zama-ai/concrete-optimizer.git +[submodule "google-benchmark"] + path = google-benchmark + url = https://github.com/google/benchmark diff --git a/.linelint.yml b/.linelint.yml index 836863bd9..39bbac5ba 100644 --- a/.linelint.yml +++ b/.linelint.yml @@ -6,6 +6,7 @@ ignore: - .git/ - llvm-project/ - compiler/concrete-optimizer + - google-benchmark rules: # checks if file ends in a newline character diff --git a/compiler/CMakeLists.txt b/compiler/CMakeLists.txt index 493f45e4f..46cd15469 100644 --- a/compiler/CMakeLists.txt +++ b/compiler/CMakeLists.txt @@ -95,6 +95,12 @@ endif() option(CONCRETELANG_UNIT_TESTS "Enables the build of unittests" ON) +#------------------------------------------------------------------------------- +# Benchmarks +#------------------------------------------------------------------------------- + +option(CONCRETELANG_BENCHMARK "Enables the build of benchmarks" ON) + #------------------------------------------------------------------------------- # Handling sub dirs #------------------------------------------------------------------------------- diff --git a/compiler/Makefile b/compiler/Makefile index 626d8d3b9..dea0cb5f9 100644 --- a/compiler/Makefile +++ b/compiler/Makefile @@ -66,6 +66,8 @@ $(BUILD_DIR)/configured.stamp: -DCONCRETE_OPTIMIZER_DIR=${CONCRETE_OPTIMIZER_DIR} touch $@ +all: concretecompiler python-bindings build-tests doc + build-initialized: concrete-optimizer-lib $(BUILD_DIR)/configured.stamp CONCRETE_OPTIMIZER_SRC = $(shell find $(CONCRETE_OPTIMIZER_DIR)/* -not -path '$(CONCRETE_OPTIMIZER_DIR)/target*') @@ -94,6 +96,9 @@ clientlib: build-initialized serverlib: build-initialized cmake --build $(BUILD_DIR) --target ConcretelangServerLib +build-benchmarks: build-initialized + cmake --build $(BUILD_DIR) --target end_to_end_benchmark + test-check: concretecompiler file-check not $(BUILD_DIR)/bin/llvm-lit -v tests/ diff --git a/compiler/tests/CMakeLists.txt b/compiler/tests/CMakeLists.txt index 214fe2fd9..ebfb4b6d9 100644 --- a/compiler/tests/CMakeLists.txt +++ b/compiler/tests/CMakeLists.txt @@ -1,5 +1,13 @@ -if (CONCRETELANG_UNIT_TESTS) +if(CONCRETELANG_UNIT_TESTS OR CONCRETELANG_BENCHMARK) + add_subdirectory(fixture) +endif() + +if(CONCRETELANG_UNIT_TESTS) add_subdirectory(unittest) add_subdirectory(Support) add_subdirectory(TestLib) endif() + +if(CONCRETELANG_BENCHMARK) + add_subdirectory(benchmarks) +endif() diff --git a/compiler/tests/benchmarks/CMakeLists.txt b/compiler/tests/benchmarks/CMakeLists.txt new file mode 100644 index 000000000..90209fa60 --- /dev/null +++ b/compiler/tests/benchmarks/CMakeLists.txt @@ -0,0 +1,5 @@ + +add_executable(end_to_end_benchmark end_to_end_benchmark.cpp) +target_link_libraries(end_to_end_benchmark benchmark::benchmark ConcretelangSupport EndToEndFixture) +set_source_files_properties(end_to_end_benchmark.cpp PROPERTIES COMPILE_FLAGS "-fno-rtti") + diff --git a/compiler/tests/benchmarks/end_to_end_benchmark.cpp b/compiler/tests/benchmarks/end_to_end_benchmark.cpp new file mode 100644 index 000000000..2c9297c94 --- /dev/null +++ b/compiler/tests/benchmarks/end_to_end_benchmark.cpp @@ -0,0 +1,155 @@ +#include "../fixture/EndToEndFixture.h" +#define BENCHMARK_HAS_CXX11 +#include "llvm/Support/Path.h" +#include + +#include "../tests_tools/keySetCache.h" + +/// Benchmark time of the compilation +template +static void BM_Compile(benchmark::State &state, EndToEndDesc description, + LambdaSupport support, + mlir::concretelang::CompilationOptions options) { + for (auto _ : state) { + if (support.compile(description.program, options)) { + }; + } +} + +/// Benchmark time of the key generation +template +static void BM_KeyGen(benchmark::State &state, EndToEndDesc description, + LambdaSupport support, + mlir::concretelang::CompilationOptions options) { + auto compilationResult = support.compile(description.program, options); + assert(compilationResult); + + auto clientParameters = support.loadClientParameters(**compilationResult); + assert(clientParameters); + + for (auto _ : state) { + assert(support.keySet(*clientParameters, llvm::None)); + } +} + +/// Benchmark time of the encryption +template +static void BM_ExportArguments(benchmark::State &state, + EndToEndDesc description, LambdaSupport support, + mlir::concretelang::CompilationOptions options) { + auto compilationResult = support.compile(description.program, options); + assert(compilationResult); + + auto clientParameters = support.loadClientParameters(**compilationResult); + assert(clientParameters); + + auto keySet = support.keySet(*clientParameters, getTestKeySetCache()); + assert(keySet); + + assert(description.tests.size() > 0); + auto test = description.tests[0]; + std::vector inputArguments; + inputArguments.reserve(test.inputs.size()); + for (auto input : test.inputs) { + auto arg = valueDescriptionToLambdaArgument(input); + assert(arg); + inputArguments.push_back(arg.get()); + } + + for (auto _ : state) { + assert( + support.exportArguments(*clientParameters, **keySet, inputArguments)); + } +} + +/// Benchmark time of the program evaluation +template +static void BM_Evaluate(benchmark::State &state, EndToEndDesc description, + LambdaSupport support, + mlir::concretelang::CompilationOptions options) { + auto compilationResult = support.compile(description.program, options); + assert(compilationResult); + + auto clientParameters = support.loadClientParameters(**compilationResult); + assert(clientParameters); + + auto keySet = support.keySet(*clientParameters, getTestKeySetCache()); + assert(keySet); + + assert(description.tests.size() > 0); + auto test = description.tests[0]; + std::vector inputArguments; + inputArguments.reserve(test.inputs.size()); + for (auto input : test.inputs) { + auto arg = valueDescriptionToLambdaArgument(input); + assert(arg); + inputArguments.push_back(arg.get()); + } + + auto publicArguments = + support.exportArguments(*clientParameters, **keySet, inputArguments); + assert(publicArguments); + + auto serverLambda = support.loadServerLambda(**compilationResult); + assert(serverLambda); + auto evaluationKeys = (*keySet)->evaluationKeys(); + + for (auto _ : state) { + assert( + support.serverCall(*serverLambda, **publicArguments, evaluationKeys)); + } +} + +static int registerEndToEndTestFromFile(std::string prefix, std::string path) { + auto registe = [&](std::string optionsName, + mlir::concretelang::CompilationOptions options) { + llvm::for_each(loadEndToEndDesc(path), [&](EndToEndDesc &description) { + options.clientParametersFuncName = "main"; + mlir::concretelang::JITSupport support; + auto benchName = [&](std::string name) { + std::ostringstream s; + s << prefix << "/" << name << "/" << optionsName << "/" + << description.description; + return s.str(); + }; + benchmark::RegisterBenchmark( + benchName("Compile").c_str(), [=](::benchmark::State &st) { + BM_Compile(st, description, support, options); + }); + benchmark::RegisterBenchmark( + benchName("KeyGen").c_str(), [=](::benchmark::State &st) { + BM_KeyGen(st, description, support, options); + }); + benchmark::RegisterBenchmark( + benchName("ExportArguments").c_str(), [=](::benchmark::State &st) { + BM_ExportArguments(st, description, support, options); + }); + benchmark::RegisterBenchmark( + benchName("Evaluate").c_str(), [=](::benchmark::State &st) { + BM_Evaluate(st, description, support, options); + }); + return; + }); + }; + mlir::concretelang::CompilationOptions defaul; + registe("default", defaul); + mlir::concretelang::CompilationOptions loop; + loop.loopParallelize = true; + registe("loop", loop); + // mlir::concretelang::CompilationOptions dataflow; + // dataflow.dataflowParallelize = true; + // registe("dataflow", dataflow); + + return 1; +} + +auto _ = { + registerEndToEndTestFromFile("FHE", "tests/fixture/end_to_end_fhe.yaml"), + registerEndToEndTestFromFile( + "EncryptedTensor", "tests/fixture/end_to_end_encrypted_tensor.yaml"), + registerEndToEndTestFromFile("FHELinalg", + "tests/fixture/end_to_end_fhelinalg.yaml"), + registerEndToEndTestFromFile("FHELinalg", + "tests/fixture/end_to_end_programs.yaml")}; + +BENCHMARK_MAIN(); diff --git a/compiler/tests/fixture/CMakeLists.txt b/compiler/tests/fixture/CMakeLists.txt new file mode 100644 index 000000000..bc11add99 --- /dev/null +++ b/compiler/tests/fixture/CMakeLists.txt @@ -0,0 +1,4 @@ +add_library(EndToEndFixture EndToEndFixture.cpp) + +target_link_libraries(EndToEndFixture PRIVATE ConcretelangSupport) +set_source_files_properties(EndToEndFixture.cpp PROPERTIES COMPILE_FLAGS "-fno-rtti") diff --git a/compiler/tests/unittest/EndToEndFixture.cpp b/compiler/tests/fixture/EndToEndFixture.cpp similarity index 98% rename from compiler/tests/unittest/EndToEndFixture.cpp rename to compiler/tests/fixture/EndToEndFixture.cpp index f542b12c1..52650c349 100644 --- a/compiler/tests/unittest/EndToEndFixture.cpp +++ b/compiler/tests/fixture/EndToEndFixture.cpp @@ -145,10 +145,6 @@ llvm::Error checkResult(ValueDescription &desc, assert(false); } -std::string printEndToEndDesc(const testing::TestParamInfo desc) { - return desc.param.description; -} - template <> struct llvm::yaml::MappingTraits { static void mapping(IO &io, ValueDescription &desc) { auto keys = io.keys(); diff --git a/compiler/tests/unittest/EndToEndFixture.h b/compiler/tests/fixture/EndToEndFixture.h similarity index 91% rename from compiler/tests/unittest/EndToEndFixture.h rename to compiler/tests/fixture/EndToEndFixture.h index 74b162925..1305b87ba 100644 --- a/compiler/tests/unittest/EndToEndFixture.h +++ b/compiler/tests/fixture/EndToEndFixture.h @@ -5,7 +5,7 @@ #include #include -#include "end_to_end_jit_test.h" +#include "concretelang/Support/JITSupport.h" typedef uint8_t ValueWidth; struct TensorDescription { @@ -55,8 +55,7 @@ llvm::Error checkResult(ScalarDesc &desc, llvm::Error checkResult(ValueDescription &desc, mlir::concretelang::LambdaArgument &res); +/// Unserialize from the given path a list of a end to end description file. std::vector loadEndToEndDesc(std::string path); -std::string printEndToEndDesc(const testing::TestParamInfo desc); - #endif diff --git a/compiler/tests/unittest/end_to_end_encrypted_tensor.yaml b/compiler/tests/fixture/end_to_end_encrypted_tensor.yaml similarity index 100% rename from compiler/tests/unittest/end_to_end_encrypted_tensor.yaml rename to compiler/tests/fixture/end_to_end_encrypted_tensor.yaml diff --git a/compiler/tests/unittest/end_to_end_fhe.yaml b/compiler/tests/fixture/end_to_end_fhe.yaml similarity index 100% rename from compiler/tests/unittest/end_to_end_fhe.yaml rename to compiler/tests/fixture/end_to_end_fhe.yaml diff --git a/compiler/tests/unittest/end_to_end_fhelinalg.yaml b/compiler/tests/fixture/end_to_end_fhelinalg.yaml similarity index 100% rename from compiler/tests/unittest/end_to_end_fhelinalg.yaml rename to compiler/tests/fixture/end_to_end_fhelinalg.yaml diff --git a/compiler/tests/fixture/end_to_end_programs.yaml b/compiler/tests/fixture/end_to_end_programs.yaml new file mode 100644 index 000000000..54e5f7967 --- /dev/null +++ b/compiler/tests/fixture/end_to_end_programs.yaml @@ -0,0 +1,45 @@ +description: mnist_28_mlir_7b +program: | + // reported by concrete-ml on https://github.com/zama-ai/concrete-numpy-internal/issues/1553 + func @main(%arg0: tensor<1x784x!FHE.eint<7>>) -> tensor<1x10x!FHE.eint<7>> { + %cst = arith.constant dense<"0x000000000000000002000000000000000000000000000001020000010000000000000000000000020000000100010200000000000001000000000002000002000000000001000000000000010000000002020000000000000200000000000000000000000000000000000000000000000000000001000000000000020001000000010000000000000000000000010000000002000000000000010000000000000000000000020000000000020000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000020000020100000000000000000000010000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000200020000000202000000000000000000000000000000000200000000000000010000020000000200000200000100000000000001000000000000000000000001000000000000000000000000000002000000000100000000000000000000000200000000000000000000000000000000000000000000000000000000020000000000000000000200000200000200000000000000020002000101020000000000000000000000000000000000000001000200000002000000000000000001000000010000000200000000000000000000000000000001000000000000000000000002000000000000000000000000000100000000000000000000000002000000000000000000000000000000000200000200000002000000000000000000000000000000000002000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000100010000000000020000010000020000020200000000020000000000020000000000000000000000000200000000000000010000000002000000000000000000000200000000010100000000000000000000000000000002000000000000000200000000000000000000000000000000000000000000000000000000020000000001000000000000000000000000000000000000000000000000000000000000000002000200000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000000000000000001000000000000000000020000000000000001020000000000000200000000020000000000000000000000000000000200020000010000000000000000000000000002000000000000000000000000000000000000000000000000000000020000020000000000000000000000000000000000000000000000000000000000000002000000000000000200000002000000000000010000000000000000000000000000000000000000000100010000000000000000000000000000020000000001000000000000000000000000000200000001020000010200000000000000020000020000000200020202020000000000000000000000000000000000000000000001020000000000020200000200000000000000000200000000000100000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000002010000000002000000000100000000020000000000000000000200000000000002000000000000000002010000000000000000000000000000000100000000000000000000000000000002000000000000000100020000000000000000000000000001000000000000000000000000000000000000000000000000000000000001000000000000000000000000000002000200000002000200020000000200000100000000000000000000000100000000000102000201000200020200000000000000020000000000000000000000020200000000000000000000000000000000000002000200020002000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001000000000000020000000000020100000000000000000000000000010000000000000000000000000000000102010000000000000000000000020000000002020000000000000000000100000000000000000000000100000000000000000002000002000000000100010201000100000200000000000000000000000200000000000201000000000200000002000000000000000000000000000000000100000001000100000000000000000000000000000000000000000000000000000000000100000000000000000001000000000000000002000000000000000200000000000000020000000000000000000001000000000000000000000000000000000000000000000000020000000000020000000000000100000000000000000000000000010001000000000000000000010000000100010000000000000000000100020000000000000001000000000000010000010000000000000100000000000000000000000000000000000000000000000000020000000000000000000000000000020000000000000000000002000000020000000000000000000000000000000002"> : tensor<192x10xi8> + %cst_0 = arith.constant dense<"0x000000000000000000000000000000020000020000000000000000000000000001000000000000000002000000000002000100000000000200020000000000020200000000000000000000020000020000000000000000000002000200000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000001000000000200010000000000010000020000000000000000000000000000000000000200000000000002000000000000000000000000000000000000000002020000000000020000000200000000000000000000000000000000000000000000000000000000000000000000000000010000000002000000000000000000000000000000000200000000000000000000020000000000000000010200000000000000020002000002000000000000000001000001000000000101000000020000000000000000000000000000000200000000010002000000000200020000020002010000000000000000000000000000000000000002000000020000000000000000000000000000000000000002000000000000000000000000000002020000000002000000000000000000000000000000000200000002000000000000010000000000010000000000000000000000000000000000000200000000000001020000000002000000010002000000000001000000000200000000000000000001000200010000000002000000000000000000000000000200020000000000000000020200000002000002000000000000000002000000020000000000000000000000000000000200000000000000000002000000000000000002000000000200000000000000000000020000000000000000020000020202000200000000000000000000000000000000000100000200020000000000000000000000000000000000000000010000010000000000000000000200020000000002000202000000000000000200000000000000000000020000000200020200000000000000000000000000000000000000000002000000000000020002000000000000000000000200000000000000000000000000000000000000000200000002000000000000000000000000000000000000020000000200000000000002020000000000000000000000000000000000000000000000000000000002000000000000000100000000020000010000000000000000000000000000000000000000000000000001000002000000000000000000000200000000020000000000000000000000000000000000000000000002000000000100000000000000000000000002020000000000000000000000000202000000000000000000000000000000000000020000000002000002000000000000000000000001000000000000000200000000020000000000000200000000000000000000000000010000000202000000000000000000000000000002000200000000000000000000000000000000000000020000000000000201000000000100000000000000000000000000000000000000000000000200000000000000000000000000000000020001000000000200020200000000000000020000000000000000020000000000000000000000000002020000000000010000020000000001000002000000020000000000000000000000020000000100000000000000020000010100000000000000000000010000000000000000000000000000000000000000000001000200000000000002000002000000000000000000000000000000000000000000000000000000020000000000000001000000000000000002000000000000000000000000000000020000000000000002000000000000000000000000000000000000000000010000000000000200000000000000000002000000000000020000000000000000000000020000000000000000000000000002020000000000000200000200020000000000000000000200000000000000000000000000000000000200000200000000000000000200000000000000000000000001000000000000000200000000000000000000020000020000000000000000000000000100000000000200000002000000000000000000000000000000020000000002000002000100000200000000000000020000000200000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000002000000000000000000000000000000000000000000000000000002000000000200000001000000020000000200000000000000000000000000000000000000020000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000002020000000000000000000000000002010001000000020202000000000000020000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000002000000000000010000000200000000000201000000000002000000000000000000000100000000000000000000000000000200020202000200000200000002020002000000000002000000000000000002000000000000000000000000000000000000000000000000000000000000000000000002020000020000000000020000000000000000020000000000000000000200000000000000000000000000000000020000000000000000000002000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002000000020000000000000000000000000000000000000001000000000000000200000200000000000002020000000000000000000000000000000002000100000000000200000000000000020000000001000000000000000000000000000000000100000000000002000002000000000000000000000000000000000002000000000000020200000002000000010000000000000000000000000000000200000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000200020000000000000000000000000000000000000000000000000000000000000000020100010000000000000000000000020000010000000000020200000000000000000000000000020000000000000000000000000000000000000000000200000000020000000200000000000000000000000000000200000000000200000000000000000000000100020000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000200000002020000000000000200000000000000000200000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000200010100000200000000000000000000000000000200000000000002000000000000000002000002020000000000000000000000000000010000000000000000020000000000000200000100000000000001000000000000000000000000000000000000000000000000020000000000000000000000000000000002000002000000000000020200010200000000000000000000000200000000000200000002000000000000000000020000000000000000000000000000000000000000000200000000000001000000000000000000000002000000000000000000000200020000000000000000000000000000000000020000000000000001000000000000020200010000000000000000000000000200000000000000000002000000000000000000000002000100000000000000000000000000000200000000000000000200000000020000000000000000000200000000000200000000000000000002000001000000010000000000000000000000000000000000000200020000000000000000020000020200000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000100000002000000000000000000000000000000000000000200000000000000000000000002000000000200000000000000000000000000000002000202000200000002000000000002000000000000000200000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000200000000000000000200010000000002000000000002000000010000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020002000000000000000000000000020000000000000000000000000000000000000000000200000000000000000000020000000000000002000000000000000000000000000000000100000000000000000000000100000000000000000200000000000200000000000000000000000000000000000000000001000000000000000100000000000000000000000000000000000000020002000000000000020000020000000000000000000000000000000000020000000000000000000000000002000000000000020000000001000000000002000000020000000000000000000002000000000000000000000000000000010000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000000000201000002000000000000000000000000000200000200000000010000000000000200000000000000000000000000000000000000000000000000000000000000020002000200000000000002000000000000000000000000000000000000000202000000000000000000000000000000000000020000000000000000020000000000000000000000000002010000000000000001000000020000000000000200000000000000000000000002020100000000020000000000000000020000000000000000020200000000000000000002000000000000000000000000000002000000020000000000000000000000000200000002000000000000000000000000020000000000000000000000000000000000020200000000000000000000000000000000000000000000020200000002000000000000000000000000000000000001000200010000000000000000000000000000000200000200020000000000000000000000000000000000000000000000000002000000000000000000000000020000000200000002000000000000000200000000000000000000000000000000000000000000000000020000000002000000000002000200000000000000000101000002000000020000000000000000020000000000000000000000000200000002000000000000000000000000000200000000000000020200000000000000000000000000020000000200000000020000000000000002000000000001000000000000000000020000000000000000000000000000000000000200000000000000000000000200000000000000000000000000000000000002000002020000000002000000000001000000000000000000020200000000000000020002020000000000000000010002000000000000000000020000000000000002020000020000010200000000000000000000020000000000020201000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000200020000000000000000000000000000000000000001000000020000020100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000200000002000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000020000000000000000000000000000000000000000000000000002000000020000000000000200000000000000000000000000000200000001000000000000000000000000000000000000020000020100020000000002000000000002000000000000000000000000000000020000000200000000000000000000000000000000000000000200020000000000000200000000000000000000020000000000000001000000000000000000000002000200000001000000020000000000000000020000000000000000000000020000000100000000000000000000000000000000000000000200000000000000000200000200000000000000000000000000000200000000020001000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000001000000000000000000000000020000000000000000000000000200000002000000000200000000000000020001000000000200000000000000000000000200000000000000000000000000000000000000000000000000000000020000020000000200010200000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000200000001000002000000000000000000000000000000000000010000000000000000000002010000000000000000000000000000000000000000000002000002000000000200000000000100000000010000000000000001000002000200000200000000020000000200000200000002000000000202000000000000000000000000000000010000000000000000000000000000000000020000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000200000000000000000000000000000000000200000000000000000000000000010000000000000000000000000000000000000000000000000202000202000000000000000000000000000000000000000000000000000000000001000000000002000000000000000000000000000002000000000002000000000000000000020002000000000000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000000000000000000200020000000000000000000000000200000000020000000000000000010102000000020200000000000002020002000200000000000000000002020002010000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000002000000000000000000000000000000000000000000000000000000000202000000000000000100000000000000000000000000000000000000000000000000000000000200000000020000000000000200000000000000000200000000000000000100000000000000000000000000000000000000000000000200000000000000000000010000000000020000000000000000000000000000020000000000000000000000000000000000010000000001000000000000000002000000000000000000000000000000000100000000000100000002000000000000000200000000000000000002000000000000000000000101000000000000000000000000000000000002000000000200000000000002000002000000000200000000020000000000000002000002000000000000000000000000010002000000000000000000000001000001000000000000000000000000000000000000000000000001000000000200000000000000000000000000000002000002000000000000000000000000000000000000000000000200020000000000000000000202000000010000000000000000000000000200000002000002000000000000000000000000000000020000000200020000000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000020000000000000000020202000000000000020200000000000000000000000002000000000000000000000000020100000000000000000000000000000000020000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000200000000000000000000000100000200000000000002000100000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000200000000020200000000000001000200000000000000000000000000000000000000000002000000000000010000000000000000000000000000000200000000000000000000000202000000000000000000000002000000020000000000000000000000000000000200000200000000000000020000000000000000000200000000000000000002020200000000000100000000000000000000020002000000000000000000000000000002000000000002020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000001000002000000000000000000000000020002000100000000020000020000000100000000000000000202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200020000000100000000000200000000000000000000000000000000000000000000000000000000000000000200000001000000000000000000000000000000000100000000000000000200000000000000000000000000000200000000000000000200000000000000000000000000000000000002000000000000020002000000000000000000000000000000000000020000000000000000000000000000010000000002000200000000000000000000020000000000020000020002020002000000000200000000000000000002020000000000000000000000000000000000000200000001000000000200000000000000000000000001000000000000000000000000000002000000000200000000000000000000020000000000020000000000000000000000000000000000020000000100000002020002000000000000000000000000000000000100000000000000000000010000000000000000000200000000000000000000000202000000000200020002000002000000000000000000000200000000000002000000000000000000000001000000000000000000000200000000000000000000000000000000000000000000000000000000000002000000000000020000000000000000020000000000000000000000000002000002000002000000000100000002000000000100000000000002000001000000000200000000000000000000000000000000000000000000000002000000000000000000000202000000000002000000000000000000000000000000000002000002000000000002000200020000000000000000010000000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000020000000000000000000102020000000200000002000000000202000000000000000100000000000000000000000000000002000002000000000200000000000200000002000001000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000200000001000000000002000000000000000000000000000000000000000000000000000000000000010000000000000002000200000000000200000002000000000200000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000020200010001000000020000000000000000000000000200020002000000000000020000000000000000000000020000000002000000000000000200000000000002000000000200000000000000000000000000000000020001000000000000000000000000000000000002010002000000000000010200000000000000000001000002000000000000000000000000000202000202000200000000000000000000000000000000000000000000020000020000000000000000000000000000000000000000020001000000020000000000000000000000000000000000000000020202000000000100000002000000000002000000000001000000000000000000000001000000000000000000000000000000000000020000000000000000000000000000000200000000000000020000000000000000000000000000000000000000000201000000000000000000010000000002000002000200000000000000020000000000000000000000000002000000000000000000000100000202000000000000020000000000000000000000000200000000000000000000000000000200000000000000010200000000020000000000000200000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000200000000020000000000000000000000000000000000000100000000020200000000000000000000000000000200010002000000000001000000000000000000000000000000000000000000000000000200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000200000000000001000000000000000000000000000001000000000000000000020200020000000000000000000000000002000002000000020000000000000000000000000000000001000000000000000100000000000000020000000000000000020002000000000000000000000000000000000200000002000000000002000000000000000000000000000000000000000000000000000000000000000200020200000000000000000000000000000000020000000000000000000000000000000100000002000002000000020000000200000000000000020000000002020000000002000000000002000000000002000000000000000000000000000000000000000200000202000000000000000000000000000002000000000000000000020000000000000000000200000000000000000000000000000000000000000000000000000000000000000200010200000000000000020000000000000000000001000000020000000000000002010000000000020000000000000002000200000000000002000000000000020200000000000001000000000000000002000000000201000002000000000000000000000000000200000000010000020000000000000000000000000000000000020000000000000000000000000000000000020000010000000000000000020000000000000000000000020000000000000001000000000000000000000000000000020200000202000101000000000000000000000002000000000000000000000200000000000000000200000000000000020000000000000000000000000000020000000000000002000000000000000000000200000200010000020000000000000000010002020000000000010000000000000000000002000202000000000000000000000000000001000000000000000000000001000000000000000002000000000000000000000000000000020000000001000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000002000200000000000000000002000000000002000000000000000000000002000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000002000000000001000000000002000200000000000000000100000000000000020000000200000000000000000000000000000000000000010000000000020100000000000000000000000000020000000002000000000000000000000200000000000200000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000020000020000000000000000000000000201000001000000000000000002000000000000020200000000000000000000000000000000000000000000000000020000000000000001000000000000020000000000000000020000000000000000000000000000000200000000000202000000020000000000000000020000020000000000000000000000000001000000000002000000010000000000000000000001000000000000000000020002000000000000000000000000000000000000000000000000000000020002000000000000000000020000020000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000002000000000000020000000001000000000100000000000000000002000000000000000000000000000000020000000000000200000000000000000000000000000000000000000000000000000000020000000002000000000000000000000000000000000000020000020000000200000100000000010000000000000000000000000200000000000000000000000000000000000002000000000000000000000000000200000200000000020000020000000000000000000000000002000000000000000200000000000000020000000200020000000000000002000000000000000000020200000001000000000000000200000000020000000000020000000000000000000000000000000000000000000002000000020000000000000200000000000000000000000000020000020201000200020200000000000002000000000000000200000200000000000200000000000000000000000100000000000000000000000000000000000000000000000002010000000000000000000001000000020200000200000000000000000200000200020000000000000000000000000000000000000000020000000200020000000000000000010000000000000200000200000201000000000000000000000000000200000000000000000000000000000000000002000000000000000000000000000000000002000000000000020000000002000000000000000000000000000000000000000002020000000200000000000000010100000000000000000000000000000000000000020000000000000001000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000010000000000000200000200000000000200000000020000000000000000000000000000000000020000020000000000000000000000000000000000000000000000000200000000000000000000000200000201000000000000000000000202000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000100010000000000000000000200000000000000020000000100000002000000000000000000000000000000000000000000000002000000000002000000000000000000000000000000000000000000000200000000000000000202000000000000000000020200020200000000000000000200000000000000000002000000000002000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000010000000002000000000000000000000000000000000000010000000000000000000000000000010000000000010000000000020100000000000000000000000000000002000000010000000200000000000000000000000000000000000001000101000000000001000000000200000000000000000001000000000000000000000000000000000000000000000000000000000000000000000100000000000200000000000100000000000000000001000000020000000000000000000000000000000000000000000000020000000000000200000000000000000000020200000000000000000000000000020000000000000000000000000002000002020000000000000000000200000002000000000000000002000002000202000000000200000000020000000000000002000000000000000000000000020000000002000000000000000000000000000000000000000000000000000000000000000000000000000200010000000002000000000000000200000000000000000002000000000000000000000000000202000000000000000000000000000000020000000000000000000000000000000000000002000000000100000000000000000002000001000000000000000000000000000000000000000000000200000000000001000000000000020000000000000000000000000001000000000002000000000200020000020200010000000000000001000000000001000002000000000000000000000000000100000002000000000000000000000100000000000000000200000000000000000100000000000000000000000000000000000000000000000000000000020000000200000000000000000000000200000000000000000200000000000000000000000000000000000000000000000000000000000002020000000000000200000000000000000000000000020000000000000000000000000000000000000000000001020000000000000000000000000100000000000000000200020000000000000000020001000200000000010000000000000000000000000002000000020000000000000000000200000000000000000000000000000000000002000000000000000000020000000000000000000000020002000002000000020200000000000000020000000000000000000000000000000000000000020200000000000200000000020000020000000000000000000000000000000000010000000001000000000000020001000000000000000100000000000000000000000000000002000000020000000000000000000000000000020000000000000000000000000000000000020000000000000000000002000000000000000001000000000000020002000100000000000000000000000000000000000000000000000000000200000202000000020000000000020000000000000000000000020000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000002000002000000000000000000000000000002000000000100000000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000001000201000200000000000000000100000000000000010000000000020000000001000200000201000000010000000000000000000002020000000000000000020000000002000002000000000000000200020000000200000200000200000000000002000002000000000001000000000000000000000000000200000000000000000200000200000001000000000000000000000000000201000000000000020000000000000000000000000000000000000000000000000000020000010000000000000000000000000200000000010000000000000000020000000000000002000000000000000000000000000000000000000000000000020200000000010000000000000000010000000000000002000000000000000000000000000000020000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000002010000000000000000000000000000000000000000000002000000000000000000000200000000000000000000000002020200000000000000000000010000000000000000000000000000000000000200000000000000000002000000000000000000000000000000000000000000000002020000000000000000000001000002000002000200000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000200000000000000000000000200000000000000000000000000000000000000000000000002000000000000000001010000000000000000000200000000000200000000020000020000000200000200000000000000000000000000000000000000000002020000000000000000020000000000000000000000000000000000020000020000000000000000000000000000000002000000000000000000000000020000000002000000010101020002000000000000000000000002000000000000000000000000000000020002000000000001000000000002000000000000000000020000000000000000000000000000000000000000000000000000000200000200020000000000000102010000000000000000000000000000000000000000000000000202000000000000000000000000000200000000020000000000000001000200000000020000000000000000000000000200000000000200000000000000000000000100000000000000000000000002000200000000000002000200000000000000000101000000020000000000000000000000000000000000000000000000000000000000000000020000000000000000000001000001000200020002000000000000000000000000000002000000000000010002000000000000000000000000000002000000000000000000000000000002000200000000000000020000020000000000000000000000000200000000000000000000000000000002020000000200000201020000000002000000000000000200020200000000000000000000000002000000000000000000000100020000000000000002020000020001000000000000020000020000000000000000000000000000000000000000000000020000000000000000000000000000000200000002000000000000000000000000000000000001000000000000000000000000000000000000000000000000000200000000020000000000000000000000000000000000000000000000000002000000000100000000000000000000000000000000000002000000020000000100000000000000000000010000000000000100000000000000000000000000000200000000000202000000000000000000000000020000000000000000000002020000000000000000020000000000000000020000000000000000020000000000000002000000000200000000000002000000000000000000000200000000000102000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000000200000000000200000000000000000200000000000000000000020000000000000000000000000000000000000000020200020000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000020000000000000202000100000000000000000000000000000000000002000000000000000200000000000000020000000002000002000000000000000200000002000000000000000000000100000000000200000002000000000100000000020200000000000000000000000000000000000000000000000100000000000002000000010100000000000001020000000000000000000000000000000000000000000000000001020002020000020000000000010000000000000000000000000000000200000000000000020000000000000000000200000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000200000200000000000000020000000000000002000000000200000000000001000000000000000200000000000000000200000000000000000000000000000200000000000000000000000000000000020000000000020000000000020002000000000000000000000000000000000000000000000002000000000000000200000200000002000000000000000200000000000000000000000000000000000000020000000000000000010000000000000000000000000000000002000000000202000000000000000000000000000000000000000002000000000002000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002010000000000000000000000000000000000000000000000000202010000000002000000000000000000000001000000000000000000000002000002000100000000000200020100000000000002020000000002000000000000000000020000000200000001000002020000000002000000000100000202000000000000020200020000020000000000000002000000000002000000000000000000000001000000000000020000010000000002000002000000000000020002000000000000000100020000000000020000000200000000000200000000000000010200020000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000200000000000000000000000202000000000002000000000000000000000000000000000000000000000000000100000000000000000002000000000000000000020200000000000000000000000000020200020200000000000000000000000000000000000000000000000000000000000000020000000000000200020000000000000000020000000000000000000000000200000000000000010000000000000000000000000001000000000000000000020001000000000000000000000000000000000000000000000000000000000000020200000000000000000000000000000000000100000200000000000000000000000000000000000000020202000000000000000000000000000000000000000000000002020000000000020000000000000000000200000000000000000000000200000000000000000000000000000000020000000000010202000000000000000000000000000000010000000002000000000000000000000000020000000002020000000000000000000000000000000000000000000000000100000000000000000002000000000000000000000000000000000000000000000000010200020000000000000000010000000202000100000000000000000000000200000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000202020000000000000000000000000000020000020000020200000000020000000000000000000000000000000000000000020200000000000000000001000000000000000102000000000000000200000000000000000000000000000000000000000000000000000000010000000200000000000000000000000000000100000000000000000000020000000000020002000000000002000000000002000002000000000000000000000000000200000000000000000000000000000002000000000000000000000000000000000000000000000000000000000200020000000002000000000000000000000000000000000000000000000000000002020000000100000000020000000000000000000000000000020000000000000000000000000002000000000001000000000000000002000000000000000001000000000000000000000002000000000000000000000000000000000000000200020000000000000000010202000000020000000000000200000000000000000000000000000002010000000000000000020000000000000000020000000000000200000000000000000002020000000200000000020000020000000000020000000000000000000000000000010000000000000000000000020000010000000200000000000000000202010000010000000000000000000000000001000000020000000000000000010000000100000000020000000000000000000000000000000000000000000000020000000002000000000000000000000000000000010000000000000000000000000000000000000000000000000000000002000000000000000000020000000000000002000000000000000000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000000000000002000000000100000000000000000100000000000000000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000000000000020200000000000000000000010000000000000000000000020000000202000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000100000000020000000000000000000000000002000000000001000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000010000000000000000000000000000000002000000000000000001020000000000000000020000000202000002000000000000000000000000020000000000000000000200000000020201000000000200000000000000000000000000000000000000000000000000000202000000000000000000000200000000000000000000000000000200000000000000000001000001000002000000000000000000000002000000000201000000000000000000000100000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200020002000000000000000000000000000000000200020000000000000000020000000000000000010000020000000000000000000000000102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000002000000000001000001000200000002000000000000020000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000200000200000000000200000000020000020000000000000000000000020000000000000200000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000010000000000000000000000000000000000000000000000000001000000000000000000000000000000000100010200000000000000000000000002000000000200000000020200000000000000000000000000000000000000000000020002000000000000000002000000000000000000000000000000000000000000000000000002000001000000000000000000000200000000000002000000000200000000000000020000000000000000000000000000000000000000000000000202000002000000000002000000000000000000000002000000000000000000000000000000000000000000000000000002020000000002000000000000000000000000000002000000000000010000000000000000000000000000000000000000000002000200000200000000000000000000000000000000020000000000000000000000020000000000000200000000000000000000000200000000000000020000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000020000000002000000000000000000000000000000020200000002000001000000000000000000000002000000000000000000000000000000020000020000000002000000000000000000000000000000020200000000000002000000020000000100000000000002000000000000000100000000000000020002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000002000200000000000002000100000002000000000001000001000000020000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000020000000000000000000000000000000000000000000000000000000200000200000200000000020000000000020000000000000000010002000002000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000200000000000002000000020002000000000000000000000000020000000000000000000000000002000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000200000000000000000000000000020002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000020000000000020000000000000000000000000000000000000000020000000002000000000000000000000002000200000000000000000000000002020000000000000200000000000000000000000000000000000000000000020100000000000200000000000000000000020000000000000000000000000100000000000000000000010000000000000000000002000000000000000002000000000000020001000000000200000000000000000000020000000000000002020000000102000000000000000000000000000000000002000000000000000002000000020000000000000000000000000000000000000000000000000000000002000000000000000000000000000200000000000200000000000200020000000000000000000102000000000200000000000000000000000000000000000000020002000000000000000000000002000000000000000000000000000000000000000000000000000000000202000000000000000100020001000000000000000002000000000000000200000202000000000000020000000000020000000000000000000000000000000000000200000000000000000000000000000000000000000002020000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100000000000002000002020000000000000000000200000100020000000000000000000000000000000000000000000000000000000000000000000100020002020000000002000000000200000000000200000000000000000000000200000000000000000000000000020202000000020000000000000000000000020000000000000000000000000000000000020000020000000000000000000200000000000000000000000000000100010000000000010200000000000002000000000000000200000000000000000000000001000000000000000000000200000000000000000200000001000000000000000000000000000000000000000000000000000200000000000000000200000000000200000000000000000000000000000000000000000000000000000000000000000200020000020000000000000002000002000000000000000200000000000002000000000000000000000002020000000000020000000000000000000002000100010000000000000100000002000100000000000000000000020000000000000000000000000000000000000000000000020000000000000000020000000000000200020000000000000000000000000000000000000000000000000000020001000000000000000000000000000002000000000000020000000000000000000100000200000000000002000000000000000000000000000002020000000100000002000002000000000002000000000002000000000000000200000000000000000000000000020000000000000002000000000200000000000000000000000000000000000001020000000000000000000000000000000000000002000000000000000200000000000200000000000000000002000000000000000000010000000000000000000000000200000000000000000000000000000000000000000002000000000200000000000000000200000000020200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000001000000000000000000010000000002000000000000020000000000000000000002000002000200000000000200000000000000000000000000000000000100000000000002000000000000000200000000010000000000000000000000000200000000000000000001000000020000000000000200000000000000000000000000000000000000000000000000000000000100000000000001000000000000000000000000000000000000000000000000000000000102000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200000200000000000002020100000000000200000000000000000000000000000000000002000002000000000000000000000000000000000001000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000200000000010000000002000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000001000000000000000000000000000000000000000002000000000002000200000000000000000000010000000000000200000000020000000000000000000000000000000002000002000100000200000000000002000000000000020000000000000000000000000000000000000000000200000000000000000000000000020000000000000000000200000000000000000000000200000000000000000002000100000000010200000000000000000000000000000000000000000000000000000000000000010000000200010001000000000002000000000000020000000000000000000000000000000000000000020000000000000000000000000000000002020000000000000000010000020002000000000000000002000000000200000000020000000000000000000000000000000200000000000000000000000000000000000000020000000000000000000000000002000000010000000000000201000001000000000000000000000000000000000000000000000000000000000000000000000000010200000200000000000000000000000200000000020000000000000000000000000000000202000000000000000000000200000000000000000000000000000000000200000000000000000000000100000200000200000000000000000000000100020000000200000000000001000000010000000000000000000002000000000000000000000001000200000000000000000000000000020201000000000002000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000010000000000020200000000000000000002000000000002000000000000000000000200000000000000000000000000000000000000000000020000000000000000010200000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000020000000001000000000000000000000000000000000000000002000000000000000000000000020000000001000000000000020000000000000000000000000002020000000000000000000000000000000000000000000000000002000000020200020000000000000200000100000000020000020000000002000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000200000000000000000000000000000000000000000000000000020000000002000000000002000000000200000000020000000002000000000000000000000200000200000000000000000001000000020000010000000000000000000000000000020000020000000000000200000100020000000000000000020202000002000000000200020000000000000000000000000000000000000000000000000002020000000000020000000000000000000000000000000000000000000002000000000000000000000000000000000000020000000100000000000002000000000200000000000000000002000000020200000000000001000000000000020000000000000000000000000000000000020002000000000000000000000002000100000000020000000000000000000000000000020000000000020000020000000000000000000000000200000000020000000000000000000001010000000100000000000000000000000000000000000000000000020000000000000000000000000200000000000000000000020000000000020000000000000000000000000000000000000200000000000000000000000000010000000000000000000000000000020200000000000000000002000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000020000000000000200000000000002000000000002000100000201000000000000000000000000000000000000000000000002020000000000000100000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000002000000000000000000000000000200000000020000000002000000000000000000020000000000000000000000000000000000000000020000000002020200000001000000000200000000000000000000000000000000000001000002000000000000020200000000000000000002000000000000000002000000000000000000000000020000020000000000020000000000000000000100000000000000000000000002000000000000020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000020002000000000002000000000000000000000000020000000000000001000000000200000000000000000000000000000002000000000000000001000000000002000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000100000200000000000000000000000002000000000000000000000000000000000000000000000000020000000000000000000200000000000002020000000001000200000001000000000200000000000002000200020000000000000200000000000000000000000000000200000000000000000000000202000000000200000000000000020000000000000000010000000000000000000100000000000000000000000000000000000002000000000200000000000000000002000000000001020000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000002020000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000002000000000100000000020000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002000000000000000000000000000000000000020000000000000002000202000000000000000000010000000000000000000100000000000200000200000000000000000000000002000000000000020000000002000000000000000000000000000000000000000000000000000000000000000200000100000001000000000000000200020200000001000000000000000000000000000000000001000000020000000000000000000000000100000000000000000000000200000000000000000002000000000000000000020200020000000000000002000000000000000000000000000000000000000000000000000000000002000000000000000000010000000000000001000200000000000000020200000002000000000000000000000000000000000000000000000000000000020200000002000000020002000102000000000000000000000000000000000200000000000002000002000000000000000200000000000000000000000000000000000000000200020000000000000000000000020000000001000200000200000000000000000002000000000000000000000000000000000000020000010000000000000000000000000000000000000000000000000000000000000002000000000000020000000000000200000200000000000000000000000000000000000000000000020000000000000001000000000000000002000000000000000000000000000000000001000000000000020000000000000000000000000000000000000000000000000200000000000000000000010000000000000000000000000000000000000000000000000200000000020000020000000000000000000000000000000201000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000002000100000000000000000002000000000200000000000000000000000000000000000200000002000000000000000000000000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000010000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000002000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000020200000202000000000000000000000000000000000000000002000000000000000000000000000100000000000000000002000000000000000000000200010000000000000002000000000000000000000200000000000000020000000000000000000000010000000000000000000000000002010000000000000000020000000000020000000000000000000000000000010000000000000000000000000000000000000200000000000002000000000000000200000000020000000000000000000200000000000000000000000100000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000200000000000000020000020200000000000000000000020200000000000000000000020000000100000000020000000000000000000002000000000000000000020000000200000000000000000200000000010000000000000000000002000000000000000000000000000000020000000000000002020000020002000000020000000000000200000000000000000000000100000200000000000000000000000002000000000000000000000000000200020200020000000100000000000200000000000000000000000002000000000000000000000000000000020200000000000100010000000001000000000002020000020000020000000000000000000000000000000002000000000201010000000000000000000200000002000000000000000000000000000000000000000000000000000002000000000002000000000000000002000200000002000000020000000000020002000000020002000000000002000002000000000000000000000200000200010000020000000000000000000000000000020000020000000000000000020000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000000000000000000000000000000000200000000000000020000020000000000020000000200000000000000000000000000000000000000020000000200000000020000000200000000000000000002000202000000000000020000000000000200000000000100000000000000010000000200000000000000000000000000000000010000000000000000000200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000102000000000000000000000000000000000000000000000000000002000002000100000000000002020000000000000000000000020000000000000000000000000000000000000000000000000002020000000000000000000000010000000000000002000000000001000000000000000000000000000000000200000000000200000000000000000000000000000000000000000000020000000000000000000002000000000000000000000000000000000000020000000000020002000000000000000000000000000202000000000000000000000000000000000000010000000001000002020200000000000200000000000200000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000002000000000000000000010000000000010000000002000000000002000000000002000000000001000001000100020000020000000000000000000000000000000000000002000000000000000002020000000000000200000000000000000000000000000200000000000000000000000000000000000000000000000000020000000000000000000000000000000000000202000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000020000000000000000000000000000000000010000000000000000000000000000000000020000000000020200020002000000000000000000020000000000000200000000000000020000000000000000000002000000000000000000000000000000000200000000000000020000000000000000000000000000000000020000000200000000000000020000000000000000000000000000000000000200000000000000000000000000000000000000010000000000000000000001000200000000000000000000020000020000000000000100000200000002000000020002000000000000000000020000000000000000000002000000020000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000001000200000000000000000000020000000000000000000000010000000202000000000000020002000002020000000000000000000000000000000000000200000000000200000000000000000000000000020000000000000000000200000000000000000002000000000000000000000000000002000000000000000000000000000000000200000000000000000000000100020000000000000000000000000000000000000002000000020000000000000000000000020000000000000000000000000000000000000102010000000000020000000200000000000000000000000000000000020000000000000000000002000000000000000000000000000000000000000001000000000000000200000000000000000100000000000000000000010000000000000000000000000000000000020000020000000002000000000000000000000002000000000000000000000000020000000000000000000000000000000200000000020002000000000000000000020000000002000000000000000001000000000000000000000000020000000000000000000000000002000000000200000000000100000200000000000200000000000000000002000000000000000000000000000000000000000000000000020000000000000000000000000102010000000000000000000000000100000200000000000000000000000001000001000000020200000000000000000000000000000000000000000002000200000000000000000000000000000000000002000200000000000000000000000000000000000200000000000000020000000000020000000000000000000000000000000000000000000000000000000200000000000200000000000002000000000000010200000000000000000002020002000200000000000001000000000100000000000000000002000000000000000000000000000000000000020000000000000002000000000000000000000000000000000000000000000000000000020000000000000002000000000200000000000000000000010000020000000000000000000000000000020000000000000200000000000000000200000000000000000000000000000000020000000000000002000000000000010200000000000001000000000200020000000000000000000000000000000000000000000000000000020000000000010000000000020002000000020000000000000002000200000000000000000000000000000000000000020000000000020000000000000200000000000000000000000202000000000000000000000001000202000200000000000000000200000002000200000000000000000000020000000202000200000000000000020000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102000000000200000201020202000000000000000001000000020200000000000000000000000200000000000000020200020000000000000000000002000000000001000000000000020200000000000200000200000000000000000001000000020000010000000200010000020200000000000000000000000000000000000000000000000001000000000100020000000000000000000000000000000000000000000000000000000002000002000000000000000000000002020002000000000000000000000002000000000200000000000000000000000000020200000000000002000000000002000000000000000000000000000000000200000000000000000000000000000000000000000000020000000000000000000001000000020000000000000000000000000200000000000000000000000000000000000000000002000000000102000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000202000000000000000000020200020000000000000000000000000001000000000200000000000200000000000200000000000000000000010000000000020000000202000000000000000000000000000000010000020000020000000000020000000000000000000000000000000000020000000000000000000000000002000202000000000000000000000000000000000000000000000200000002000000000000000200000000000000000001000000000001000000000000000200000000000000000000000000000200000000000200000000020000000200000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000020000000000000000000000000000000100000200000100000002000200000000000000000000020000000200000002020000000002000000000000000000000000000000000000000200000000010200000000000000000000000000000102000000000000020000000000000000000000000000000200000000000000000000000000000000000002000000000000000000000000000000000000000000000100000000000000000000020000020002000000010002000000000000000000020000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000020000000000000000000001000000000000000200020000000200000000000000000000000000000000000000000002000000000000000000000200000002000000000000000000000000000000000000000000000001000000000000020000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000020000000000000000010200000000000000000000000002000002000000000002000000000000000000000000000000000000000000020000000000000002000000000000000000000202000100020200000000000000000000000200000000000100000000000000000000000000000000000002000000000000000200000000000000000000000000000200010000000000020000000000020001000002020000020000000000000100000000000000000000000000000000000000020000000000000000000000000000020000000001010000000000000000000000000000000000000000000000000000000000000002010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000001020000000000000200000000020002000000000000000000000200000000000000000000000000000000000000000000000002000000000000010000000200000000000000000000000000000000020000000000000000000000000000000001000001000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000001000000000000000000000000000000000200000000000000000000000000000000000000010000020202000002000000000000000000000000000000000000000000000001020000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000002000000000000020000000000000000000200000000010200000002020000000000000000000000000200000000000000000002000200000000000000000000000202000002000000000000000000000000000000000000020000000200000000000000000200000000000002000000000200000000000000000200000000000000000000000000000202000002000000000000000000000200000000020200000200000000000000000002010000000000000002000200000000020000000202000002000000000000000200000000000200000000000000000000000000000000000000000000010000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000002000000000001000002000000000000020000000000000000020202000000000200020000000200000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000200000000000000000000000000000000020200000000000000000000000000000000000000000000020000010002000000000200000000000000000202020000000202000000000000000000000001000000000000000000000001000000000000000000000000000200000000000000000000000000000200000000010000020000000000000000000000000002000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000002000000020000000000000200000000000000000000000000000000000000000000000100020000000200000000000000000000000000000002000000000000000000000000000000000000000000000000000000000202000000000200000000000000000001000000000002000000000000020001000000000000000000020000000000000002000000000001010000000000000000020002020000000000020100000000000000000000000000000000020002000000010000000000000000000000000000000000000000000000000002000100020000000100020000000000000000010000000000000000000000020000000000000001000000000000020000020000000000000000000000000000000200000000000000000000000000000000000100000000000000000000000102000000020000000200020000000000000000000000000002020000000000000100000000020000000002000000000000000000000000000000000100000000000000000200000000000000000002020000000000000000000000000000000000000000000000020000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000010000000000020001000000000002020000010000000000000200000000000000000000000000000000000000000001000000000000000002000000000000000000000000000000000000000001000200000202000000000000000100000002000002000000020000000000000000010000020000000000000002000000000000000000000000000000000000000200000000000000000002000000020000000002000000000200000000000000000000000000000000000000000000000002010200000000000002000000000000000000000000000000000000020000000000000000000000000000000000000002000000000002000000000001000000000000000000000000000000020000000000000000000000000000000100020000000000020000000000000000000000000000000000000000000200000000000000000000010200020000000000020000000000000000000000000000000000000200000002000000020000000000000200000000000000000000000000000000000000000000000000020000000000000000000000000000000000000200020000000000000000000000000000000000000002000000000100020000000000000000000000000000000200000000000000010000020000000000000000000000000000000000000000000000000000000002000100000000000000000000000001000200000000000000020000000000020000000000000000000002000000000000020000000200000000000000000000000000000000020000000000000002000000000000000000000002000000000002000000000000000000000000020002000001000000000100000000000000000000010000000000020002000000000000000000020000000000000000000000000000000000000000000100000000000200000000000000020000000000020000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000020002000000000000000000000000000002000000000000020201000000000002000000020000010000000000000000000200000000000000020000000000000002000100000000000000000200000100020000000000000000020002000202000200000000000000000000000000000001000000000000000000000200000002000000000000000001000200000000000200000000000000000000000000000002000002000200000000000002000000000000000000000002000000000100000000000000000000000000020002000000000000000000000001000000000000000202020000000002000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000202000000000000000002000000000000000000000000000200000000020000000000020000020000000000000000000000020002000000000000010000000000000000000000020000000000000000000000010200000000000000020000000000000000000000000000000000000002000000000001000002020002000000000000000000000001020200000000020000000100010000000000000000000000000000000000000000000000000000000100000000000002000000000000000002000000020000000002000000000000000000020000000000000000020200000000000000000000000000010000000000000000000001000000000000000000000000000000000000020000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000002000000000000000000000000020000020002000002020002000000000200010000000000000000000000000002000000020000000000000000000000000000000200000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000020100000000000000000000020001020200000000000000000000000000000002000000000000000000000000000000000000000000000000000000000002020000000000000002000002000000000000020000000000000100000001020002000000000000000000000000020000000002000000000000000001000000000000000000000002020000000000000000000200000100000002000000000000000000000200000000000000000000000000000000020001000000000001000000000000020000000000000000000000000100000000000002000000000000000000000000000000000002000200000000000000000000000002000000000100000002000000000000020102000002000002000000020000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000200000000000200000000000100000000010002000000000002000000000000000000000000000001000000000200000000000000000000000000000000000000000000000000000000000000000000000001000000000000000200000000000000000000000100000000000000000000000000000002000000000000020001000000000000000000000000000000000200000000000002000000000000000000000000000000000000000000020000010000000000000000000000000000000000000000000000000002000000000002020000000000020000000000000002000000000000000000000200000000000000000002000000000000000200020000000000000000000000000000020000000000000000000000000002000000000000000000000000000000000202000000000000000000000002000000000000020000020000020000000000000000000000020000000000000000000000000200000001000000000200020000000000000100000000000000000000000000000200000000000000000000000000000000000200000200000000000000000002000002000000000000000000000000020200000000000002000000000000000000000000000000000002000000000000000000000000000000000000000000000000000002000000000000000001000000000000000002000000000000000000000000000002000000000000000200000000020000000002000200000202000000000200000000000000000000000000000000020100000000000000000000000000000000000000000000000100000000000000000000020001000000000200000000000000000000000000000000000000000200020000000000000000000000000000000200000000020000000000000000020200000000000000000000000200000002000000000002020000000000000000000200000000000000000000000000000000000000000002000000000000020000000002000000000000000000000000000000000000000000000000000200000000000002000200000000000000010000000200000000010000000200020000000002000000000000000200010000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000000000020001000100000000000000000000000202000000020000000200010200000200000000000000000000000000000000000000000200000000000000000000000000000000000100000000000000000000020001000000000200000101000000000000000000000001000000000100000000000000000000000200000000000000000000000000000200000100000000000000000000000000000000000000020000000202000000000000000200000000000000000000000000000000000200000000000000000000000002000001000000000000020000000002000000000000000000000000020000000000000000020000000000000000000000000000000000000000000000000000000002000000000000000000000002000200000000000000000000000000000000000000000000000000000001000200000000010002000000000000000000000000000000020000000100000000000000000000000000000000000000000000000000020000000000000202000000000000000200000000020000000000000000020200000002000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000002000000000000000000000000020100010000000000000000000000000000000000000002000000000000000000020000000000000000000000000002000000020200000000000000010000000000000000020000000000000000020100000000000000020000000002000000000000000000000000000000000000000000020200020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000200000000000000000000020000000200000000000000000000000000000000020000000000000000000002000000020000000000020002000000000000020000000000000000000000000000000000000200000200000001000000000000000001000000000000000000000100000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000002000002000000000100000002000001000100000000000000000000000000000000000000020202000000000000000000000002000200000200000002000000000200020000000000000000000000000000020000000000000000000000000002000000000002000000000000000000000200000000000000000000000000000000000000020000000000000000000000000000020000000000000000000200020000000000000000000002000000000000000000000000000200000000000000000000000100000000020000000000000002000000000000000000000002000000020000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000002000000000000010000000000000000000000000000000000000000000000000000000000000000020000000000000002000100000200000202000000000000000000000000020000000000000000000000000000000000000200000200000100020000000000000000000000000000000200000002000001000000000000000000000000000000000000000000000002010002000000000000000000000000000000000202000000000000000000020000000000000000000000000000010000000000000000000000000000000000020000000000020200000000000000000000000202000200000000000000000000000000000000000000000000000001000000000200000000000000000000000000000000000000020000020200000000020000000000000000000000000000000000000000000000000000000000000000000002000000000000000100000200010000000000000000010000000200000000000000000200000000000200000000000200000002000000000000000000000002000000000000020000020000000000000000000000000000020200000000000000000100020000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100000000000000000000000200000000000000000000000000000000000200000000000000000000000200000000000000000000000000000000000002000000000000000000000000000000020000000000000200000000000000000000000002000000000002000000020000000000000000000200000000000002000002000000000001020000000200000000000000000002000000000200000000000002000000000000000200020000000000000000000000000000000000000002000000000000000200000000000000000202000000000000000200000000000001000200000000000002000000000000000002000000000000000000020000000000000002000000000200000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000002000000020000000000000100000000000000000000000000000000000000000000000000000000000200000000000000000200000002000000000000000100000000000000020000000002000002000000000000020000000000000001000000000000000000000000000002020000000000000000000000000000000000000000000200000200000000000000000000000000000000020000000000000000000000000000000000000100000000000000000000000000000002000000000100000200000000000000000000020000000000000002000001000000000200000000000001000000020200000002000000000002000000000001000000020000020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000000100000000000000000000000000020002000000000000000000000000000000000000000000000000000002000200000002020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000020000000000000000000000000000000002000000000000000000020000000000000000010002000000000000000000000000000000000100000000000000000002000000000000010002020000000200000000000002000000000000000000000000000200000200000200000000000000000000000000000000000000000000000000000000000000000000000002000200000001000000000000000000000002000000000000000000000200000000000000000000000000020002000200000000000000000000000000000000000000000000000000020000000000000000000200000000000000000000000000000000000200000000000000000000000000000000000000000000000200000000000000020000000002000000020000000000000000000000000000000000000200000002000000000000000100000001000000000000000000000000020000000000000000010000000000000200000000020000000200020002000000000002000000000000000000000102020000000000020000000002000000000000000000000000000000000000000000000000000000000002000000020000000002000000000000000000020000000000000000000000000200020200020000000000000002000000020000000000000000000000000000000000020000020200000000000000000000000000000000000000020000000000000000020100000000000000000000000000020000000000020000000000000000000002000000020000000000000000000000000000000100000000000200000000000000010000020000010000000000000000000000000000000000000000000000000001000000020000000000000000000000020002020000010200000000000002000001000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000000000002000000000200000000000000000000000000000001000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000002000000000000000000000000000000000000000000000200000000000000000000000000000000000200000000020000000000000000020000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000020000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000201000000000000010000020000000000000000000000000000000000020000000200000000020100000002000000000000000000000000000000000000000000000000000000000000020200000000000000000000000000000002000200000000000000000000000000000000000000000000000000000000020002000000000000000000000000020000000000000002000000000000000200020000000000000000000000000000000000000000010000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000002000000000000000200000200000000000000000001000000020000000000000000000000000000000000000000000000020000000002000000000000000000000000000000020000000000000000000000000000000000000000000000000000020000020002000000000000000000020000000000000000000000000000000000000000000000000200000000000000000000000100020200000000000000000000000000000000020000000200000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000002010000000100000000000200000000000000000000020000000000000001000000000200000200000200000000000002000000000000000002000000000000000000000000000002000002000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000002020000000000020000000002020000000201000000000000000000000000000000000002000002020000000002000000000000000000000000000000000000000200000000000000000100000000000000000000000001000000000000000000000000020000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000200000000000200000002000000000000000000000000020000000000000002000000000000000000000000020000000002000000000000000000000000000000000002000000000000000000000002000000000000000000000000000000000002000000000000000000000000000000000000000200020000000200000201000000000000000000020000000000000000000000020200000000020000000000000002000001020000020000010000000000000000020000000000000000000000000000000002000000000000000000000000000200000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000000000002000200000000000000000000000000000000000001000000020200000002020000000000000000020200000001000000000000000002010200000000000000000000000000000000000000000000020002000200000000000000000000000000000000000200000000000000000000000200000000000200000000000000000000000000000000000000000001000002000201000000000200000002000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200000200000000000000000000000100000000000000000000000002000000000000000000000000000000000000000200000000000000000000000200000002000000000000000000000000000000000000000000000000000000000000020000000002000200000200020000000000000000000000000001000002000000000000000000000000000000000000020002000000000000000000000000000000000000000000000002000000000001000000000000000000020000000200020000000000000000000000000200000000000000000000000000000002000000000000000000010000000000000000000000000000000001020200000200000000000000020000000000000000000001000000000000000002000000000000000000000000000000000001000000000002000100000000000000000000000000000002000000000002020200000000000000000000000000020000000200000000000000000000000000000002000000000000000000000000000000010000000200010200000000000002000000000002000001000000000000000000000000000200020000000000000000000000000000000000020000000000000000000000020000000000000000000002000000000000000000000000000200000000000000000002000001000200000000000000000100000000000000000000000000000100020000000000000000000000020000000000020000000000000000000000020000020000000000000000000000000000000200000000000000010002000000000000000002000000000000000000020202020000000100000000000002020000000000000000000000000000000000000000000000000000000002000000010000000000000200000001000000000000000000000000000000000000000100000000010000000000000000000000000000000000000000000001000000020000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000101020200000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001010000000000000000000000000200000000010002000000000000000000020002000000000000000200000002000000000000000000000000000000000000010000000001000000000200020000000000000001000000000000000000000000000000000000000200020200000000000200000000000002000000000200000000000002000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000102000000020000000002000000020000000000000000010000000200000000000000000001000200020000020001000000000002000000000000000000000000020000020000000000000000000000020000000000000000000000000000000000020200000000000000000000000000000001000000000000000000000100000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000002000000020000000000000000000000000000000000000200020000000000000200000000010000000000000000000000000000000000000000000000000000000000020000000200000000020000000000000002000000000000000000000000000002000000000000000000000000000000000200000000000002020000000000000000000000000002000000000000000000000001000000000002000200000000000000000002000000000000000000020000000000000000000200000000000000000000000200000000000000000000000000000201000000000200000000020000000200000000000000000000000002000102000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000020000020000000102000000000000000000000002000000000000000000000002000002000000010000000000000000010200000001000100000000000000000000000001020200000000000000000000000000000000000002000000020000000201000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000100000200000000020000000200000000000000000000000000010000000000020000000000000000000000000000000000000000000000000000000000000000000000020000000100020000000000000000000000000001000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000002"> : tensor<192x192xi8> + %cst_1 = arith.constant dense<"0x000000000000010000000002000200000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000020000000000000000020000000000000000000000000000000000000000000000000000000000000000000001000000020000000100000000000000000100000000000000000000000000000000000000000000000000000000000000020000000201010000000000000001000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000100000000000100000000000002000000000000000000000000000000010000000000000000020000000000000000000000020002020000000000000000000000000200000100000000000000020000000000000100000000000002000000000001000002000000000000000200010000000000000000020000000000000000000000000000000000000200020000000000000000000000000000000000000200000002000002010001000000000000000000000100000000000000000000000000000000000000000000000001000000020000000000000000000000000000000000000000000000000000000200000000000000010000000000000000000000000000000000000000000000000000000200000000020002000000000000000000020002000100000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000010000000000000100010000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000001000000020000000200000000000002000000000000000000000000000000000000000200020001000000000002000200000000000000000000000000000000000000020001000002000100000200000000000000000000000000000000020000000000020000000100000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000010000000000000000000200000000010000000000000000000000000000000000000000000000000000010000010000000000000002000000000002000000000000000000000000000000000000000001000000000000010200000200000001000000000000000000000000000000000000000000000000000000000000000000000000000200020000000000000001000001000000000200000000000000000000000002020000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000020000000000020000000000000000000200000000000000000000000200000000010000000100000000010000020000010000000000000000000000000000000001000000000002000000000000000000000000000000000000000000000000000000000000010200000200000000000100000000000000000000000100000000000100000000000201000200010000000002000000000000000000000000000000000000020000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000002000000000000000000000000000200000000000000020000000000000000000000000100000000000001000000000000000000000000000000000001000000000000000000000000000000000000010002000000000000000100000002000000000000000000000000000000000000000200000000000000000001000000000000000000000001000200000000000000000200000100000000000000000200000000000000000000000000000000010000000000000002000000000000000002000000000000000001000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000002000000000000000100000000000200000000000100000000020100000000000000000000000000000001000100000000000000000000000000000000000000000200000000000000000001000000000000000000000200000000000000010000000000000000000100000000020200000000000000000000000000000000000000000000000000000000000000000000000000010000000002000001000001020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000200000100000000000000000000000000000000000000000000000000000000000002010000020000010002000000020000000000000000000002000000000000000000000000000000000000000000000000000000000002000200000000000000000000000002000000000002000000000000000000000000000002000200000200000000000000000000000002000000000000020000000000000000000000000200000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000000000000000000000000000002000000000000000000000200000002000000000000000100000000010000000000000000000000000002010000020000000001000000000000000000000000020000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000200000000000000000001000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010101000000000002000000000000000000000100000000000000020000000100000000000000000000000100000000000000000000000000000000000000000000000002010000000000000000020000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000201000000000000000001000000000000000002000201000002000000000200000100000000000000000000020000000000010000000100010000000000020100000100000000000000000100000000000200000000000002000000000000000000000000000000000000000000000000000000000000000000000000020000000000000001000000000002000000000000000001000000000000000000020000000001000000000000000000000000000001000000000000000000000000000000000000000000000100020000000000000000000100000000000000010000000002010100020000020002000000000000000000020000000000000002000200000000000000020200000000000000000002000001000002000000000000000100010000000000000000000000010000000000000200020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000002000000000000000000000000010000000000000000000000000000000000020000000000000000000002000100000000010000000000000000000000000000000000000000000000000000000100000000020000000000000000020000000000000200000000000000000000000000000000000000000000000000010000000002000000000000000000000000000000000000000001000000000000000101000000000100010000000100000000000000000000000000000000000000000000000000000200000000000100000000000002020000000001000000000000000001000000000000000000000200000000000000000200000000000000000000000000000000000000010002000000000001000000020000000000000000000000000000000000000000000000000000000000000001010000000002000000000000000000000000000002000000000000000000000000000000000000000100000000010000000000000000000200000000000200020000000000000000000000000002000000000000000000000000000100020000000000000000000000000000000000000000000000000001000000000000020000000000000000000000000000000002020000000100000000000000000001000000000000000001000001020000000000000100000000000000020000000000020000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000020000000000000000000000010000000000000000000000000000000000000000000000000000020000000200010000000000000000000001000000000002000200000000000000000000000000000000000000000000000000000000000000000000000100020000020001000000000000000000000100000000000002000000000000000000020200000000000200000000000000000000000000000200000000000100000000000000000000000000000000000002000000000000000000000002000200010100000000000000000000000200000000000000000200000000000100000000000100000000000100020000000000000000000000020000000000000000000002000000000000000202000000000001000002000000000000000000000002000000000000000002000000000200000000000000020000000000000200000000020100000000000000000000000000000100000000000000000000000000000000000001000100000001000100000000000000000000020002000000000000000100000000000000000000000000000000020000000100000000000000020000000000000000000000000001000000000001010000010000000000000000000000000000000000000000000000000001010000020000000002000001000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000020000020000000000000200000000000200000000000000000000000000000000000000000000020000000000000200000000000000000000000000000000000200000000000000000000000000000000020000000000000000000002000002000000000001000000000000000000000000000000000000000000010000000000020000010001020000000000000000000000000000000201010100000000000000000002000000000000000000000000000000000000000000000000000000000200000200000200000200010000000000000000000000000100000000000000000001000000000200000001000002000000000000000000000000000000000000000000000000000000010000000000000000000000000200000000000001000000000000000001020000020000000100020100000000000001000200000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002000100020000000000000000010000000000000000000100000000000000020000000000000000000000000000020000000000000202000000000000000000000000000000000000000000000001000000020002000000000001000000000002000000000000000000000000010000000001000000000000000000000000010000000200000000000000010000000000000002000002000000000100000000000000000000000001000000020200000000000002000000000000000200000100000000000002000000000000000000000000020001000200000000000000000000000200000000020001000000000000000000000200000000000000000000000000000000000200000000000000000000000000000000000000000000000200000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000100020100000000000000000100000002000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000002000000000000000000020000000000000000000000000000000000000002000000000002000100000000000000000001000000000001000000020100000000000000000000010000010000010000000000000000000000000000000000010000020000000000000000000000000200000000020000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000002000000000000020001000101000002000000000000000000000000000002000100000000000000000000000000000000000000000000000001000000000000000000010000000000000202000000000000000000000000000000020000000000000000000000000000000000000002000000020002000000000000000000000200010000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000100000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000200010000020002000000000000000000000000000000000200000000000000000002000001000000000000000000000000000000000000000001000200000000000000000000000000000000000000000001000001000000020000000000000000000000000000000200000000000000000000010000000000000000000000000100000001000000000000000000000000000000020000000000000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000020000000002000000000000000100000000000100000000000001000000000000000000000000000002000000000000000000000000000000000200000200000000000000000100000000000000000002000000000000000200000000000102000000000000000002000000000002000000000000000000010000000000010000000000000000000000000000000000000000000000000000000001000100000000010000000000000200000000000100010000000000000000000000000200000000000200000000000000000000000000000200000100000000000200000000000002000202000000000000020000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000002000000000000000002000000000000000000000000000000000201020000000000000000000100000000000000000000000000020201000000010000000000000000000000000000000000000000000000000000000000000000000000000000000202000000000000000000000000000000000000000000000000000200000000000000000000000000000000000001000000000000000000000000000002000001000000000000000000000000020000000000000000000002000001000002000000000000000000000000000000000000000000000000020000000000010200000000000000000100010000000001000000000000000000000000000001000000000000000000020000000000000000000000000000000000000000000002000000000000000000000000000000000000010001000000000000000000010000000200000000000000000002000000000000000000000000000100000200000000000000000000000000000100000200000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200010000000002000200000000020000000000000000000000000001000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000010000000000000000000000000200000000000002000000000100000000000000000000020000000000010000000000000000000002000000000000000000000000000000000000000000000000000000000002000000000200000000000000000000010000000000000000000000000000000002000001000000000000000001000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100020000000000000000000000000002010000000000000000000000000000000000010000000000000001000000000000000000000200000000000000000000000000010000000000000000000000000000000000000000000000000200010000000000000200000200000200020002000000000000000000000000000000000000000201000000020000000000000000000002000000000000000000000000010200000000020001000000000000000000000000000000000000000000000000000000000000000200000200000001000200000000010200000000000000000000000000000001020000010000020000000000000000000200000000000002000000010000000001000000000001000001000000000000000000000000000100000200000000000000000000020000000000000000000100000000000000000000000001000000020002000002000100000000000000000200000000000000000000000200000000020000020000000000000000000002000000000000020000000000000000000000000000000100020000000000000001000000000000000000000200000000000000000100000000000000000000000000000000000000000000020000000001000000000000000000000000000000010000020000000200000000000000000000000000000000000000000000020000000000000001000001000000000000000000000000000000000000000002000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000010000000000000000000100000000000100000001000000000000020000000000000002000000000200000000000000000000000000000000000000000001000200000000000200000000000000020200000000000000000000000000000000000000000000000000000000020100000000010000010000020000000000000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000020000020001000000000000000000000000000000000001000000000000000000000000000000010000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000020100000002000000020000000000010000000000000002000000000000000001000000000002000000000000000000000000020000000000000000000002010002000000000000000000000000000000000000000000000102000000000100000000010000000000000200000000020000000000010000000000000100000000000100000000000001000000000001000000000000000000020000000200010000010000000000000002000000000000000000000000000000000001000000000100000200000100000100000000010000000002010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000020000000000000000000002000000000002000000000000010000000000010000000100000000000000000002000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000001000000000000000200000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000002000000010002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000200010002000000000100000000000001000001000001000000000000000000000000000000000000000100000100000000000000000000000000000000020000000100000000000000000000000100000000000000000000000000010000000000000000000201000000000000010000000000000000000000000000000000000200000000000001000000010000000000000000000000000000000000020000000000000000000000000001000000010000020000000000000000000000020000000000010001000000000000000000000100000000000000000000000000000000000000000000000002000000000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000002000000020000000000000000000002000000000000000002000000000100000000000200000200000200000000000000000000000000010001010000000000000000000000000100000000000000020000000000000002000100000000010200010000000100000000000002000000000000000002000000000000000000000000000001000000000000000001000000000100010000000000000000010000020000000101000000000000010000000200020000000100000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000100000000000000000100000000000002000000000000010000000000000000000000000200000000020000000000000000020000000000000000000002000000000000000000020000010100000000000000000000000000000000000000000000000000000000000000000000000100000100000000000000000000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000100000000000000000002000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001000000000000000000000000000202000000000000000000000000000001020200000000000000000100000000000000000100000000000000000000000000000000010000020000000000000000000000000000000000000102020000000000000000010000000000000000020000020000000000000002000001000000000000000000000002000000000000010000000000000001000000000000000000000000000000020000000000000002000000000000010000000000000101000200000000000000000100000200000000000000000200000000000001000200000100020001000002000000000000000000020000010000000000000000000000000000000000000000000001000000000000000100000000000000000000000000000000000100000000000000000200000000000002000000000000000000000000000000000000010000000000020000000100000000020000000000000000000000000100000000000000010000000000000200020000000002000000000000000000000000000000000000000001000001000000000002000000000000000000000000000000000001000000000000000000000002000000000001000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000001000002010000000000000000000000000000000000010000000000000000000000000000000200000002000000010000020000000000000000000000000000000000010000000000000001000000000001000000000000000000000100000000000000000000000000000200000000000000000200000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200020000000000000000000000000000000000000002000002000000000000000100000000000000000000000000000000000000000001000000000000000000000200010000000000020000000000000202000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000020000000001000000000200000000000000000000000000000000000002000100000000020000000000020000000000000000000000000000000000000200000000000002000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000010001000000000000000000000000000000000101000000000000000000000000000100000000000000000000000000000000000000000100000102000002000000000202000000000000000100000000000000000000010000000000000002000000000000000100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000100000000000000000000000100000200000000000000000000000002000001000000000000000001000000000100000000000000000000000000000001000000000000000200000000000000000000000000000200000100000000000000000000000000000000010000000200000001000001000000000000000000010000020000000000010000000000000000000000000000000100000000000000000000000000000002020000000000000001000000000000000102000000000000000000000000000000000000000000010000000000000000000000000000000000000001000000000002000000000000010000000000000000000000000001020100000000000000000000020000000000000002000000000100000000000000000000000000000000000000000000000000000100000000010101000000000001000200000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000200000000000100000000010000000002000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000020000000000020000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000020002000000000000000000000000000000000000000002000200000100000001000000000000010000000000000000000200000000000000000000000001000000000000000002000000000100000000000000000000010000000100000000000000020000000000000000000000000000000000000000000000000000000000010000000000000000010000000000010002000000000000000000000000000000020200000001010000000000010000000000020200000000000000020000000000000100000000000002000000020000010000000000000000000000000200000002000000000000000000020002020000000000000000000000000002000200000000000000000000000002000101000000000001000000000002000000000000000000000000000000000000000000000000000000020000000000000000010000000000000000000000000000000000010000000001000000000000020000010000000000000000000000000000000000000100000202000000000102000001000002000000010000000000000000000100000000000000010000000000000100000000000000000000010000000000010100000000000000020200000000000000000002000002000000000000000000000002000000000000000002000000000000020000000000000200000000000000000000000002000000000000000002000001000000000000000000000000000000000000000001020000000000000200000000000000000000000000000200020002000000000100000201000000000000000000000000000100020000000000000000000000010000000000000000000000000000020000010000000000000000000000000000000000000000000000000002000000010000000001000000020000000100010000000200000000000000000001000100000000000000000001000000000000020000010000000000010000000000000000020000000200000000000000020000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000002020000000000000000000200000000000000000000000000000000000000000000020000000000000000020000000200000102010000000000000000000000000000020000000000000100000000000000000000000100000000000000000000000000000000010000000000000000020000000000020000000002000000000000000001000000000000000000000200000000000000000000010000000000000000000000000000000000000000000000000000000002020000000000000000000202000200000000000000000002000002000100000001000000010000000000000000000000000100000000000000000000000000000000000000000002000002000000000000000000000002000000000001000000000000000000000001000000000000000000000000000000000000010100000000000000000000000000000000000200000000000001000000000000000001000000000000020002000000000000000000000000000000000000000000000000000000000000000100000000000200000000000000000000020000000002000000000000000000000000000000000200010000000002000001000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000020000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000020200000001000001000200000000000000000000010200000201000000000000000000000000010000010000000000000000000000000100000000000000000002000001000000000000010000000000000100000000000000000000000000020000000000000000000000000000000002020000000000000000000000000000000000000000000000000200000200000000000000000200000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000000020000000000020000000000000000000000000000020002020000000000000000000000000000000000000000000000000000000002000000000000000000000000010000000000000000020000000002000000000000000000000000000000000000000100000200000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000020000000000000201000000000000000002000100000000000000000000000200000000000001000000000000020000000000000200000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000002000000000001000000000000000001000000000002000000010000000200000000000002000000000100000000000000000000000100000000000000010000000000000000000000000100000000000000000000010000000000000202000002000000000200000002000000000000000000000000000000010000000000000000000000000000000100020000000000000000000000020000000001000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000001000000000002000000000001000100000000000002000000000000000000000200000002000000000001000000000000000100010000000000000000000000000000000000000000010000000000000000000200000000010000000000000000000000000002000100000000000001000000000000000000000000000000000000000000000000000000000002000000000000000000010001000000000000000000000000000001000000000000000000000000020000000000000000020000000000000000000202010000000001000000000000000000000002000000000000020000000001000000000000000000000000020000000000000000000000000000000000020000000000010100000000020000000000000000000000000000000000000000000000000000000000000001000000000000010200000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000020000000000000000000000000000000000000002000000000000000100000000000000000000000000000000000000000000010000000200000000000000000000020000000000000000000000000000000000000000010000000200010200000000000000020000000000000000000000000000000200000000000000000000000000000000000001020000000000000000000200000000000000020000000001000000000000000000020000000000000000000001000200000100000000000000000101000000000000000000000000000001000000000000000000000000020000000000000000000000000000000200000000000000000000010000000000000000000000000000000002000000000200000000000000000000020000000100000002000100000000000000020000000000000002000000000200000000000000000000000002000000000100000000000000000000000000000000000000000200000200000000000000000000000002000000000000020000000000010000000000000000000000000101000000000000000000000000000100000000000002000001000000000000020200000000000000000000000200000000000002000000000100000000000000000000000001000000000001000001000002020000000000000000000000000100020000020000000000000000000000000000000000000000000000000001000000000200000102000002000000000000000000000000000000000201000000000000020000000200000101000200010000000201000000000000000000000200000000000000000000000000000000000000000000020101000000000000000000000200000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000020000000000000000000000000000000100000000000000020002000000000000000201000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000001000000000000000000000200020200000000000000000002000000000200000000010000000000000000000000000000000100000000000000000000000002000000010200000000000000000000000201000000000100000100000000000000000000000000000100000001000000000002000100000000000000000000000000000000010000000000000000000000020000000002000000000000000100000000000000000000000000000000000000000000000000000000020000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010000000102000000020000000000000000000000000000000000000001000000000000000000000000000000000000000100000000000000000000000000000000000001000001000002000200000000000000000000000100000000000000000000000000000000000202010000000000000000010000000000000000000200000000010200000000000000020000000000000002000000000002000000000000000000000001000200000200000000000000000002000100000200000002000000000100000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000020002000000000000000000000000000000000000010000000000000100000000020000000000000000000000010000010000000000000000000200000000000000000000000000000000000000020100000000000000000000000000000000000002010000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000002000000000200000000000000000100000000000000000000000000020000000000000200000000000000010000000000000000000000010000000000000000000000000000000000010002000000000000000000000000000000000202000000000000000000000000000000000000000202000000000000000000000000000000000002000000000200000000000000000100000001000000000000020001000000000000000000000000000000000100000000000000000000010002000000000001000000000000000000000200000000020000000000000000000000000200000000000000000000000000000000000000000000000100000000010000000100000000000000000000000002000000000000000000000001000000000000000000000200000000000000000200000000000000010000000000020002000000000000000000000000000000000000000000000202000000000000000000000000000000000000000100000000000000020100000000000000000200000000000000020000000202000000010000000000000100000000000002010200000000000000000000000000000000000001000000000000000000000100000000000000010101000000000000000000000000000002000000000000000000000000000000000201000000000000000000020002000201000000000000000000000000010000000000020000000000000100000000000000000000000201000000000000010000000000000001000000010000000100000000000000000000000002000000000000010100000000000000000000000000000000000000000000000000000000000200000000000000000000020000000000000000000001000000020000000000000000000000000000000000000200000000000000000000000200000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000020000000200000000000000000001000000000000000001000100000000000000000000000000010001000000000000000000000000000000000000000000000000020000000000000000000000000100000000000000000000000000000000000100000000000000000002000001000200000100000000000000000000000000000000000102000000000000000101000000020002000000000200000000020000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000010100000000010000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000020000000000000000020000000000000002000000000000020000000202000000000000000000000000000000000000000000010000000000000001000000000000000000000000000000000001000000010200000200000000000000000000000000000000000001000000000000000002000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010000000200000000000000000000000000000002000000020000000000000100000000020000000000000002010200000000000000000000000000000000000000000000010100000100000000000000020000000000000002000000000000020000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000100000000000000000000000000000000000000000001000000000100010000000000000100000000000000010000010000000000000000000000000000000000000000000000020100000000020000000000000000000000000000000000000000000000000000000100000001000100000200000000000000000000000000010000000000000000000000000000000000000000000000000002000000000000000000000100010000000000000000020001000000010000000000000000000000000000000000000000000200000000000000020000000000000000000000000000000000000000000100020000020000000000000000000000000000000000000000020200020000000002000000000000000000000000000000000000010000000000000000000000020000000000000000020000000000000000000000000001000000000000000000000000000200000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000200000000020000000001000000000000020200000000000000000000000000000000000000010000000000000000000000010000000000000000000002000000000000000000000000000000000000000000000000000000020000020000000000000000000200000000020000000100000201000000000100000000000000000000000000000000000000000000000000010000000000000000000200000000000000000002000000000000000200000000000000020000010000000000000002000000000000010000000000000000000000000000000200020000000000000000020000000200010001000000000000000200000200000000000000000000000000000000000000020100000000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000000100020000000200000000020002000000000002000202000000000000000000000000000001000000000000020000000000000001020000000200020000000002000100000000000000020000000100000000000000000000000100000000000000000000010000000001000100000001000000020000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000100000000000000010000000000000000000001000200000000000002020000000000000000020000000000000000000000000000000000000002000000000001010000000000000000000000000000000000000202010000000100020000000001000000000000000000000000000000000000000100000100000000000200000200000202000000000000000000000000000100000000000000000000000002000000000000000000000200020000010000010000000000000000000000000200000000000000000002000001020000000000020002000000010000000000000000000000000000000000000000000000000002010000000000000000000000000002000000000000000000000002000000000200000200000000000200020000000000000000000000000002000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010002000000000000000000000000000000000001000000000000000000000001000000000000000001000002000001010000000200000100000000000100000000020000000000000100010000000000000000000000000000000000020001020000000102000000000000000001000000000001000000000000000000000000000000010000020000000000000000000000020100000000000000000000000000000000000000000001010002000000000000000001000000000001000000000000010000020000000200000000000000000002000002000000000000000000000000000000000000000000000001000001000000000100000000010000000000000002000200000000000000010000000200020000000000000000000000000000000202000000000000000000000000000000000000000000000000000000000000000000000002010000000000000001000000000000000000000000000000000000000200000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000001000000000002000000000000000000000000000000010000000000000000000000000200000000000000000200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000010000000000000000000000000002000000000000000000020200000000000000000200000000000000000000000000010000000000000000000000000000020000000000000000010000000000000000000000000000020002010000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000020000010000000000000000000000000000000000000000000100000001000000000000000000000002000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000010200000001000000000000000000000000000000000000000100010001000000000002000000000000000100000000000000000000000000000100020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000002010001000000000002000000000001000200000000000000000000000001000000000000000200000100000000000000020002000000000002000000000000000000000000000000000000000000000000000000000000000000000100000000010000000000000000000000000000000000000000000000000000020000000100000100000000000001000000000000000000000000000000000001020000000000000000000000000000000000000100000100000000000000000000000001020000000000000000000000000000020000000000000100000000000000010000000000000000000000020000000000000200000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000100000000000000000000010000000000000000000200000000000001000000000200000001000000000000000002000002000000000001000000000000000000000000000000000000000001000100000000020000000100000000000000000000000001000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000100000100000000000200000000000000000000010000000000000000000000000000000100000000010000000000000000020000000000000000000000000000000000020000000000000002000000000000000000010000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000001000000020000000000000000000002010000020000000101000000000000000000000000010000000000010000000000000000000000020000000000010000000002000100000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020001000201000000000002000100000000000000000000000000020000000000000000000000010000000000010000000000000000000000000001000000000000000000010200000100000100000000000100000000000000000000000000000000000000000000000201000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000001000100010000000000000000000000000000000000000000000001000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000020000000000000000000000000000000000000100000000000000000000000002000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000010000000002000000000000000000000002000000000000000000000000000000000000000000000002010000000000000000000000000000000000000002000000020100000100000000000000000000000000000000000000000000000000010000000000000000000200000000000000000000000000000000000000020000000000000000000200000000000000000000000000000001000000000000000000010000000000000202000000000000000000000000000000000000020000000001000000020000010100000000000000000000000000020000000000000000000000000002000000000000000000000200000100000000000000000002000000000000000000000000000000000100000100020000000000000000000000000000000000020001020000000000020000000000000200000001000000000000000100010000000000000000020000010002000100000000000000000000000000000000000000000001000000000000000100000000000000000000000000020000000000000001000000000000000000000000000000000000000000000200000000010002020000020000000000010000000000000001020000000000000202000000000000000000000000000001000000000000010100000200010000000000000200010000000000000000000000000000000200000000020000000000000000000000000001000000000000000200000000000200000100000202000102000000000000010200000000000100010000000000000001020000000200000000000000000000000000000000000000020000000002000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000010002000000000100020001000000000000000000000102000000000000000000000000020100010000000000000000020001000000000001000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000200000000000002000000000000000000000000000000000000000100000000000000010001000000000000010000000000000002000000000000000000000000000000000000000200000000000102000000000000000000000000000000000000000001000002000000000000000000000200000000000000000000020000000000000000010000000000020200000000000000000000000000000000020000000000000000000000000200000000000000000000000000000000000200000000000000000000020000000100000000000001000000000000000000000000000000000000000200000002000000000000010000000000000001000000000000020000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000001000100000000000000000000020000000000000000000000000000000002000000010000000000000000000000000000000000000000000000000000020001000000000000000000000000000000000200000000000000000000000002000000000000000100000200000100000000000000000000000000000000000000010000010000000000000000000000000000000100000000000000000200000000010000000000020000000200000001000000000000000000000002000000000000000000000000000000000200000000000000000001000000000000000200000000000000000000000000000000000000000000000000000000000000020000000200000000000000010000000000010001000000000000000000020000000000000200000000000000000000000000000000000000000200000000010000000000010000000000000000000000000001000000000000000000000000000000020000000000000000000000000000000000010000020000000000000000000000000100020000000000000000000000000001000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000200000000000000000202000002000000000000000000000000000000000200000000000100000000000000000100000200000000000000000000020000000000000000000000000001000000000000000000000000000002000000000200000200000100000000000000010000010000010000000002000201000000000000000000000000000200000000020000000000000200010000020000000101000100000000000000020001000002010002010000000000000000000101000001000000020000000100000200000000000100000000000000020000000002000000000000000002000000000000000000000000000001000000000000000000000000000200000001000100000000000001020000000000000000000001000000000000000200000000000000000000020000000000000000000200000000000002000000000000000000000000000200000001000002000000000000000000000000010001000000000000000000000000000000000000000000000001000000000100000000010000000000000000020000000002000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000020200000000000002000000000000000000000000020000020000020000000000000000000000000000000000000000000100000000000000000200000000000100000000000000000200000100000000000000000000000000000000000000000001000000000100000000000000000001000000000000000200000000000000010000000000000000000000000000000100000200000000020200000000000000000202000000000000000000000000000000010200000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000200000000000200000000000000000002000000010000000000000000020001000000000000000000000000000000010000000000000000000100000000000100000002000000000000000000000000000000000000000000020000000000000000000000000000000000000000000001000000000000000000000000000000020000000100000000000000000000000000000000000000000000000200000000000000000000000200000000000000000000000000000000000000020000000100000000000000000002000000000000000000000200000000000000000000000000000000000100000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000002000000000100000000000000000000000000000000000000000002000000000201000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000002000000000000000000000000000200000000000100000000000000000000000000020000000000000000000000000000000000020000000000000002000000000000000100000200000000000000000000000000000000000001000000000000000000000100000000000000020000000000000000000000000002000000000101000000000100000000010000000000000000000000020000000000000000000000000100000000020000000200000200000000000100000002000000000000000000000000020000000000000000000000000000000000000000000000000000010000000200000000000100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000020000000100000000000001000000000000000000000100000000000001000000000000000200020000000000000000000100000100010001000000000002000002000000000000000000000000010000000000000000000201000000000000000000000000000100000000000000000000000100000100000000010000000000000000000000000000000000000200000000000002000102000000000002010000000000000000000000000002000200000000000000000000000202000000000000000000000000000000000000000202000000000000020001000000000000000000000000000001000000020000010000000000000000000002000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002000000010000000000000000000000000000000000000100000000000000000000000000000000000000000000020001000000010000000000000000000002000000000000000000000002020000000000000000000000000000000001000202000000000000000000000000000000000000000000000001000000000000000000000100000000000000000001000000000000000000000000000000020000000000000000000000000000010000000000010000000100010000000000000000000000000000000000000000020000010200000000000100000000000000000000000000000000000002000000000000000000000102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000020000000000000200000000000100000000000100000000000000000000000001020000000000000001000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000020000000000000000000001000000000100000000000000000000020000000000000000000200000100000000000002000000000000000000000100000000000000000000000000000200000000020000000000000002000000000000000000000001000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002000200000000000000000000000200000000000000000200000100000100000000020000000000010002000000000000000002000000000000000000000000000000000000000100000000000000000000000102000000000000000000000000000000010000000000000202000000000000020000000000000000000000000000020002000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000200000000000002000000000000000000000000000000000000010000000102000000000000000002000000000200000000000000020200000000000100000000000000020000000000000200000000000000000000000000000001000200000000000000000200010000000000000200000000000000000000000000000000000200000000000002000000000001000000020000000000020000000000000100000000000000000200000000000200000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001000200000000000000020000000000000000000001000000000000000000000001000000000000010000000000000002000000000000010000000000000000000000000000000000000000000202000000000002000000000200000000000002020000000000000000000000000000000000000000020000000000000000000000000100020000000000000000000201000000000000010000000000000000020002000000010000000102000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010000000000000000000000000000000000000000020000000000000200000000000000000000000000000000000001000000000000000000000000000000000000000002000000000002000000000200000100000000000000000200000000000000000000000000000200000000000200000000000000020000000000000002000200000000020000000000000100000001000000000000000000000000000000000000000000000100000002000000010000000000000000000000000000000000000000000000000000000000000001000000010000000000000000000000000000000100000000000000000100000100000000000000000000000000000100000000000200010000000100000000000000000000000000000000000000020001000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000000000000002000001000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000020002000100000000000200000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000201000000000000000200000200000000000000000100000000000000000000000000000000000000000000000000000202000000010000000000000000000000000200000000000000000002000000000000000000000000000000020000020000020001000001000000000200000000000002000000020000000000000002000000000200000000000101000000000000000000000000000001000200000000000000020000000000000000000100000000000000000200000000000000000000000100020002000000020000000000000000000000000000000001010000000000000000000000010000000000000000010000000000000000000000000000000000000000000000000000010000020000000100000001000000000000000002000000000000000100010100000000020100000000010100000000000000000000000200000000000000000000000000000000000000010001020000000000000001000000000000000000000100000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000010000000000020000000000000100000000000000000000000000000000000000020000020000000001000000000000020000000000000000000000000000000000000000000000000000000000020001000000000200000000000000010200000000000002000000000001020000000200000000000000000000000000000100000000000000000001000000020200000000000100000002010000000000020000000000000100000000000100000000020000000000000000000000020000020202000000000000000000000200000000000000000000000001000000000000000000000000000000000000000000020000000001000000020200000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000020000000000000101000000000000000001000000000200000000010000000000000000000000000002000000000000000000000000000000000000000000020000000000000000000000000002000000000000000000000000000000010000000002000002000000000000000000000000000000000000000000000000000000000000010200010000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000100000000000200000200000000000000000000000000000000000000000000000001000000000001000000000000000000020000000000000000020000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000200000000000100000000000000000000000000000000000102000000000000000000000000000000000000000001000100000000000000000002000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000100000002000001000100000000000000000000000000000001000000000000000000000100000000000100000000000002000000000000000000000000020200000000000000000000000000000000000000000000000000000000000000000200000000000002000000010000000000010000000000000000000000000000000000000000000100000000000000000002000000000000000000000001000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000102000000010000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000200010000000000020000000000000000000000020000020000000002000000000000000000000000000000000000000002000000000000000000000000010000000002000001000000000000000000000000000000000100000200000000000000000002000000000002000000000000000000010000000000000200000000000000000000000000000000000000000000000000000000000100010000020000000202000000000000000000000000000002000000000000020200010000000001000000000002020002000000000000000000000000000000000000020000000002000000000100010000020000000000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000200000000020000000000000000000000000000000000000000000000000000000000000000000000020000020000000000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000000000000000000000001000000000000000000000000000001000000010000000002000000000000000000000000000002000000020000000002000000000000000001000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000002010000000000000000020000000000000200000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000020000000002020000000102000100000000000000000002010000000000000201000000000000000000000000000000000200000000010000000000000000000000000000000002000000000000000000000002000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000100000000000000000001000000000000000000000000000000000000010002000100000001000000000000000000000000000200000000000000000100000000000000000000000000000000000000000001000000000000000000000000020000000000000000020001000000000200000000020000000000000000000000000000000100000000000000000001000000000000000000000002000000000000000000000000000000000000000000000001000200000000000000000000000000000001000001000000000200000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000200000000010000000000000100000000000000000000000000000000000000000000000100010000000000000000000000000000000200000000000000000000000000000000000100000000000000000000000000000200000002020000000002000000000000000001000000000000000000000000000200000100000200000002000000000002000000000000000000000000000002000000000000000000000000000000000000000000000000000002000000000100010000000000000101000000000000010200010000000000000000000000000000010000000000000000000000000000000200000000000000000001000000000200000000000000000000000000000000000000020200000000000100000000000000000000000001020002000001000000000000010000000100000002000200000000000000000000000100000000000000000100010000020100000000000000000000000000000000000000010000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000000000200000002000001000000000000000100000000000000000002000000000000000000000002000000000000000200000000000000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000002000000000200000000000000020001000000000002000000000000000000000200020200010000000000000200000000000000000000000000010000000000000000010000000200000000000000010002000000000000000100000000000000000000000000000000000000010000000000000100000000000000000200000000000000000000000000000000000000000000020000000100000000000000000000000100000000000000020000000000000000000101000000000000020000010202000200000000000000020000000200020000000000000102000000000000000000000000000001000000000000020000000000000000000200000000000002000002000000000200000200000000000000000000000001020000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000001000000000000000200000000000000000000000000000002000000000000000000000200010000000001000000000000000000010000000000000000000000010000000000000000000001020001000200000000000001000000000000000200000000000000000000000000000200000000000000000000000000000002000001000000020201000001010100000000000000000000020000000000000000000002000000000000020002020000000000000000000002000000000000000000020000000000010100000000000000000000000000000001020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000100000000000000000000000000000000000000000100000002000001000000000001000000000000000002000001000000010000000000000000000000000000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000000010000000000000002000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000100000000000000000200000000020000000200000200000000000000020000000000000000000000000100000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000020000000001000200000000000002000100000000000000000000000000000000020200000000000000000000020000000000010000000000010100000100000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000100000000000000000000020000000000000000000000000000000000000200000000000000000000000100000000000000000000000000000000000000000000020000000000000000000000000202000000000002000000000000000000000000000001000000000000020000000000000000000000000000000000000000000000020000000000000000000000000000000000010000020000000000000200000002000000000000000100000000000000000000000000010000000200000000000001000000000000000000000002000001000000000000000000020000000000010201000000000000000000000100000000000000020000000000000000000000000000000000000001000000000000000000000000000000000000010000000200000200020000000000000100000000000000000000000000000200000000000001000000000001000100000000000001000000000000000002000000000000000000000000000000000000000000000001000000000000000000000000000000000001010000000000000100000000000000000000000000000000000000000000000000000000010100000002000000000100000000000000000000000000000200000002000000000000000000000200000000000000000000000000000000000000000000000002000200000000000000000000000000000000000000010000000200000000000000000000000000000000000000000002000000000000000000000000000000000000020000000000000200000000000000000000020000000000000000000200020000000000000000000000000000000000000000000000000000000000000000020000000000000200000000000000000000020000000100000000000000000000000000000100000000000002000002000001000000010002000000010000020000000100000000000000000000000000000100000000000100010000000200000000000000000001000000000001000000020000000200010000000000000001000000000000000000000001000001000000000000000000000000010000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000020000020000000000020000000200000000000000000001000000000100000000000000000000000000000000000000000000000001000000000000000000000000000000000000000002000000010000000000000000000000000000000002000002000101000000000000000100000000000000020000000100000000010000020000000000000000000000000000000000000000000200020000010002000100000000000100000000000000000000000000000000000002020002000000000000010000020200010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000201000000000000000000000000000002000002000002000000000000000000000000000000000000000200000000000002000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000100000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200000000000002000000000000000200010100000000020000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000020000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000001000000000000000000000000020000000000000000000000000000000000000000010100000001000000000001000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000000100000000000000000002000000020000000000000000000000000000000000000000000000000100000000000000000000000000000000020000000000000000000000020002000000000000000001000000000000000100000000000001020000000000000001000000000000000000000000000000000002010001000000000001000000000000000000000002000002000200000000020000000000000002000000000000000000000000000000000000000000000000020100000000000000000002000000000000010000000000000000000200000000000000000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020100000000000000010000000001000000000100000000000000000000000000000000000001000000000000020000000000000002000001000000000000000000000000000000010202000000000000010000000000000000020000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000202000100000000020000000000000000000000000000010000000002020000000100000002000000000002000000000000000000010000010200000000000000000000020001000000000000000000000002000000020002000000020000000000000000000000000000000000000000000000000002020000020000000000000000000201000000020002000000000000000000000000000100010000000000000000000000000000000000000000020000000000000000000000000000000000020000000000000000000200000000020000000000000000000000000000010000000000000000000000010001000000020000000000000100000000000002000000000200000000000000010000000000010000000000010000000000000200000000000002000000000000020000020002000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000000000000000000100000000000000000000000000000000000002000000000000000000010001000000000000000000000000000000000000000000000000000001000000000000000000000000000001000200000000000001000000000200000000000000000000000200000200020002010000000001000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000000020100000000000100000000000000000200000000000000000000000002000000000000000000000000010000000000000000000000000000000000000002010200000002000000000200000000000100020000000000000000000000000001000000000000000000000000000000000000000001000000000000000001000000000000000000000200000000000000000000020000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000002000000000000000000000000000000000000010000000201000000020000000000000000000000000001000000000000000000000000000002000000000000000000000000000000000000010000000000000001000001000000000000000001000000000000000000000000000000000000010000000000000000000000000002000000000000000001000000000000000002000000010000000000000000000202000100000001000000000000000000000000000000000000000002000000000000000000000000000000000001000000000000000000000000000000000201000000000000000000000002000000020000000000000000000000000000000000000000000000000001020001000002000000010000000000020000000000000000000002010000000000000000000000000000000000000000000200000000000000000100020100000000000000000000000000000000000200000000000100000000000000000000000002000000000002000000000000000000000000000200000000000000000002020000000000000000000000000002000000020000020000000000000000000000000000000000000200000000000000000002000000000002000000000000000000000000000000000200000000000000010200000000000001000000000000010000000000000000000000000002000000000000020000000000000000000000010000000102000002000000000001000000000000000000000002000000000000000000000000000100000002010000000100000000000000000000000000000000000000000000000001000000000100000000000002000200000000000001000000000000000000000000000001000000000000000000000000010000000000000000000000000001000000020000020000000001000002000000000000000000000000000001000000000000000000000000000000000001000000000000000000000200000000000000000101000001000000000100000000020000000000000000000000000000000100000000000002020000000000000000000100000000000000000000000000000000000100000000000000010000000001000000000000000000000000000000000200000000000000000000000000020000000000000000000000000000000000000000000001000000000100000000000000010000000000000000000000000000020001000000000002000000000000010100000000000000020000000000000000010000000002000000000000000000000000000000000000000200000000000000000000020000000200000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000020000000000000200000000000000000001010200000000010000000000000000000000000000000000000000000000000000000001000000000000000000000100000000000000000000000000000200000000000000000000000000000000000100000000000000000000000100000000000100000000010100000100000000020000000000000001000000010000000100000001010002000000000000000000000000000000000000000000000000000100000001000000000000000000000000000000000000000000010002000000000000000000000000000000000000000000000000000000000100000000000000000000000200000002000001000000000000000000000000000000000000000200000001010001000000000000010200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000010100000000000000020000000000020000020100000202000000000001000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000010100000000000002000000000001000000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000000010000000000000000020000000000000000000100000000000000000000010000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000002000000010000000001000200000000000002000002000200000001000000000000000000020000000002000200000000000000000200000001000000000000000001000000010000010002000000000000000000000001000000000000020000000002000100010001000000000000000000000000000100000000000100000000000000000000000200000000000000000001000000000000000000000001000000000000000000000000000001000000000001000000000000000000000001010000000100000000000000000000000001000000000000000000000000000100000100000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000200000200000000000000000000000002000000000000000002000000000000000000000000000000000000000001000000000000000000000000000000000000000001000000020000000100000000000200000000000000000000000000000000000000000001000000000000010100000000000000000000000000020000000200000000000000020000000001000000000000000002000000020000000000000000000000000000000000000002010000000000000000000000000002000000000000000001000000000000000000010000000000000100000000000100000000000002000002000100000002000000000002000000000000000001000002000100000000000001000000020000000000000000000000000000000000010000000200000000000002000000000000000000000000000000000000000000000000010000000000000200000000000000000000000000000200000000000100000000020000000002000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000010000000000000000000000000200000000000000010002000000000000000000000001000000020000000000000000000100000000000000000002000000000000000000000000000000000000000000000200000000010000000000010002000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000002000000010000000000000000000100000000000200000000000000000000000000020000000000000000000000000000000000010000000001000000010000000000000000000000000200000000000001000000010000000000000000000002000000000000000000010200020000000000010000000000000000000000000000000000000000000000000002000000000000000002000000000000000000000000000002000000000000000000000000000000000000000000000000000002000000020002020001000000000000000100000000020000000000000000000000000000000000000000000000000000000000000000000000000000010002000000000000000000000000000000000000000000000000000101000000000000000100000000000200000000000000000000000000000200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000002000002000000000200000001000001000000000000000000010000000000000000000000000002000000000000000000000000000000000002000000020000000000000200000000000100000000010000000000000000000000000001000000000000000000000000020000000200000000000000000001000001020000000000000000000000000001000002000000000000000000000200020000000000000000000000000000000000000000000000020100000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200020000000002000000000000000200000000020000000000000002000000000000000000000000000000000000000200000000000000000000000001000000000000000000000000000000000000000000000000000002000000010002000000000200000100000200000001000002000000000100000000000000000000000000000000000000000100000000020000020000000000000000000000000000000000000200000000000000000000000000020000000100000000000000000000010000000002000000000000000002000000000000000000000000000000000000000000000001000000000000000000000000000001000000000000000200000000000000000000020000000001000000000200000000000000000000000200000002000000000000000000000000000002000000000000000000000000000002000000000000000200000000020100000100000100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000200000000000000000000000100000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000001000001010200000100000000000100000000000000000000000000000000000000000001000000000200000000000000000000000000000000010000000000000000000000000000000000010000000000000000020000000000000000000000000001000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000100010000000002000000000000000000020000000000000000000000000000000000000000000000000100000000020000000000000000000000000000000000000200000000020000000000000200000000000000010000000000000000000000000000000000000000000000000000000000000000000000010001000002000000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000010000000000000001020000000000020000000001000100000000010000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200010000000000000000010000000000000000000200000000000000000000000000000000000100010000000100010000000000000102000000000000000000020000000000000000000000000000000000000000000000000000000000000100000200000200000002000202020000000000000000000000000001000000000000000000000000000002000200000000010000000000000000000000000000020000010000000000000000000000000200000000000000000000000000020000000000000000000002000000000000000000000000000100000000000000000000000000000000000000000001020000000100000000020000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010002000000010000000000000000000000000002000000000200000000010000000001000000000000000000020000000000000000000000000000000000000000000200000000020000000000000000000000000200000000000000000000000000000000020001000000000000010200000000000200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000010000000200000000000000000001000000000000000000000000000001000100000200000000000000000000000000000000000000000000000002000000000000000000000000000000000000000001000000000200000000010000000000000100000000000000010000000000000100000000000000000000000200000000000100000000000000010000000000000000020200000000010000010000010000000000000001000200000000000000020000000000000000000001000000000000000000000000010001000000000000000002000000000000000000000000000000000000000200000000000000000002000000000001000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000010100000200000000000000000000000001000000000000000000000000000000000200000000000000000000020000000000020002000000000000010000000000000000000100000000000000000000000000000000000000000000000000000000000002000000000001000000000000000001000000000000000000000000000200020000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000020200000001000000000000000000000000000000000002000000000000000000000000000000000000020000000000000002000000020000000200000000000000020000000000000000000000000000000200000002000000000000000000000200000000000000020002000000000000000000000000000000020000000000000000000000000200000000000001000000000000000002000001000000000200000000000000000000000000000000000100000000000000000001000000000000000000000001000000000000000000010000000000000200000000000000000000000000000000000000000000000002000200000000000002000000000000000000010000000000000000000000000001000000000000000200000000000000000000000100000001000000000000000000000000000000000001000000000000000202000000010000000000020001000201000000000000000001000000000000010000000000000000020001000200000000000000000000000000000000000001000000000000000000000001000000000000000000000101000000000000000000000000000100000000000000000002000000000000000000000000000000000000000200000000000000000000000000010000000000000000000002000200000000020000000000000002000000000000000002000000000000000000000000000002000000000000000000000000000000020000000000010200000000000000000000000000000002000000020000000000020000000000000200000000000000000000000000010000020000000000000000000000010001000000000000000000000000000000020200000000000000000000000000000000010000000000000000000200000001000000000000020000000000000002000000000000000000020000000000000000000000000000000000000200000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000010000000000000000000000000200020000020000000000000200010000000000000000000000000000000000000000000000000001000000000200000000010200000000000000000000020002000000000002000200000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000002000000000000000100000000000002000000000000000100000000000101000000000000010000020000000000000000000000000000000100000000000000000200000000010000000001000000000000000000020001000000000000000000000001000000000000000000000000000000000002000000000000020000000000000000020000000200000000000000000000000000000000000000000001000000000000000000000000000000000100000000000001020000000000020200000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000100000000000000000000000000000000000100000000000000000000000000000000010000000001000000000000000001000000020000000000000000000000010000000200000000000001000100000000000200000000000000000000000002000000000000000000000000000001000000000000000000000100000000000000000101000002000000000000000000010000000000000000000000000200000000020000000000000000000000000000000000000000010000000000000000000000000200000000000000000000010000000000000000010000000000000000"> : tensor<192x192xi8> + %cst_2 = arith.constant dense<"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000001000000000000010000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010200000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000001020000000000000001000000000001000000000000000000000000000000000000000000000000000000000001000000000100000000000000000000000000010000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000000000002000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000100000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000100000000010000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000020000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000001000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000002000200000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000000000000101000000000000000000000000000000000000000000000000000000000000000000000100000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000010100000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000100000000000000000000000000000000000001000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000001000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002000200000000000000020000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000200000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000100000002000000000000000000000000000002000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000200000002000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000020000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000010000000001000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000002000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000020000000000000000000000000002000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000020000000000000000020000000000000000000200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000100000000020000000000000000000000000000020000000000000000010000000000000000000000000002000000000000000100000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000010000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000002000000000000000000000100000000000000000000020000000000020000000000000000000000020000000000000000000000000000000000000000000000000200000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000100000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000020000000000000000000001000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000200000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000000020000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001000000000002000000000200000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000001000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000020002010000000000000000000000000000000000020000000000000000000000000000000000020000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000010000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000200000000000000000000000000000000000000000100000000000000000000000000000002000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000010000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000001000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020200000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000010000000000000000000000020000000002000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000200000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000100000000000000000000000000000000000000000000000000000000000000000001000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000200000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000020000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000100000000000000000000000000000000000002000000000000000000000000000000000200000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000002000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000020000000000000000000000000000000000000000000000010000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000200000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000020000000001000000000000000200000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000020000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000200000000000000000000000000000002000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000002000000000002000000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002000000020000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000002000000000000000000000000000001020000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000020000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000002000000000000000100020000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000100000000000000000000000000000000000000000000000000000100000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000010000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000010000000000000000000000000200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000001000000000000000000000000000000000000000002000000000000000000000000000000000000000000000002000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000100000000000000000000000000000000000000000002000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000002000000000000000000000000010000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000002000000000000000000000000010000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000200000000000002000000000000000000000000000000020000000000000000000000000000000000000200000000000000000000000000000000000000020000020000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000002000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000020000000000000000000000020000000000000000000101000001000000000000000000000000000000010000000000000000000000000000000000000000000001000000000001000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001010000000100000000000000000000000000000000000000000000000001000000000000000000000000000200000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000200000000000001000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000000000000000100000000000000000000010200000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000100000000000000000000000000000000000000020000000000010000010000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000100000200000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000010000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000000000000000000200000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000020000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000001000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000020000000000000000000000000000000000000000000000000000000000000000000000000100000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000100000000000000000000000200000200000002020000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000020000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000001000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000200000000000000000000000000000000000000000002000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000200000000000000000000000000000000000000000200000000000200000000000000000200000000020000000200000000000200000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000000200000000000002000000000000020000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000201000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000002000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000200000000000000000000000000000000000000000000020000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000020000000000000002000000000001000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000002010000000000000000000000010000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000200000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000010000000001000000000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000010000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000100000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000002000000000000000000000000000000000000000200000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000020000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000200010000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000000000000000000002000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000100000002000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000001000002000000000000000000000000000000000000000200010000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000001020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000010000000200000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001000000000000000000000000000100010000020000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000002000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000020000000000000000000100010000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000001000000000000000000000000000000020000000000000000000000000000000001000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000001000000000000000100000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010001000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000010000000000010000010000000000000000000000000000000000000000000000000000000000000000000001000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000020002000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000002000000000002000000000000000000000000000000000000000000000002000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000200000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002000000000000000000020002000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000002000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000020000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000010000000000000000000000000000000000000000000000000000000000000000000001020000000000000000000000000000000000010000000100000100000000000000000000000000000000000000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000000000000000020000000000020000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000100000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000010000000002000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000200020000000000020000000000000000000000000000000000020000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000002000000000000000002000002000000000000000000000100000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000010200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000001000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000001000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000020000000000000000000000000000000000000000000200000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000100010200000000000000000000010000000000000000000000000000000000000000000000000000000202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000200000000010000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000200000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000010000000000000000000000000000000000000002000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000001000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000020000000000000000000000000000000000000100000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000002000000000002000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000002000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000002000000020000000002000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001010000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000002010000000000000000000000010000000000000000000000000000000000000000000000000002000000000000000000020000000000000200000000000000000000000000000000000000000000000001000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000002000000000000010000000000000000000000020000000000000000000000000000000000000000000200000000000000000001000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000001000000000000000000000000000002000000000000000000000000000200000000000000000000000000000000000000000000000100000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000200000000000000000000000000020000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000020000000002000000000000000000000002000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000102000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000001000000000000000000000000000001000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000002000000000000000000000000000000000000000000000000000000010000000000000000020000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000020000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000200000000000000000000000000000000000000020000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000002000000000000000000000000000000000000020000000000000000000000000000000000000000000000020000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000200000000000000000000000000000000000000000200000000010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000010000000000000000000000000100000100000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000002000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000002000000000000000000000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000200000000000000000000000100000002000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000200000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000001000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200020000000000000000000000000000000000000000000000020000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000002020000000200000000000000000202000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000010000010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000100000000000000000000000000000000000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000002000000000000000000000000000100000000000000000000000000000000000000000000000000000200000200000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000001000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000002000000000000000000000000000000000000000000020000000000000000020000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000000000000000000000000000020000000000000000000000000002000000000000020200000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000200000000000001000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002000000020002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000200000000000000000000020000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000200000000000000000000000000000000000000000000020000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000200000000000000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000200000000000000000000000000000000000001000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000200000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000200000000000000010000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000002000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010200000002010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000002000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000200000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000020000000000000000000000000000000000000000000000000100000000000000000000000000000000000200000000020000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000001000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000200000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020002000100000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000001000000000000000000000000000100000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000200000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000020002000000020000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000200000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000200000000000000000100000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000001000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000001000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000010000000000000000000000000001000000000000000000020000000000000000000000000000000000000000000000000000000000000000000200000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000200020000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000001000002000000000200000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000020000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000001000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000002000100000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020200000000000200000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000002000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000020000000000000000000000000000020200000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000002000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000020000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000001000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000020000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000001000002000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000002000000000200000000000002000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000000000000000000000000000000000000000000000000002000000000000000000000000000001000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000200000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000002000000000002000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000200000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000200000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000001000000000000000000000000010000000000000000000000000000000000000000000100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000100000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000010200000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000002000000000000000002000000000000000000000000000000000000000000010000000000000000000000000002000000000000000000000000000000000000000200020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000020000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000100000000000000000000000000000000000000000000000000000000000000000001000000000200000000020000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000010000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000200000000020000000000000000000100000000000000000000020000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000100000000000000000000000000000000000000000000000001000000000002000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000200000000020000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000200000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000100000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000020000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000200000000000000000000000000000000000000000000000000000000000000000000020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000020000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000001000000000000000202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000002000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000001000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000001000000000000010000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000002000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000020000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000020000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200020000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000002000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000000000000200000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000200000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000200020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000002000000020000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000200000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000002000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000001000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000010000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000010000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002010000020000000000000000000000000000000000000000010000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000200000000000000000000000000020000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000020000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000200000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000200000000000000000100000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000020000000000000000000002000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000020000000200000000000200000000000000020000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000002000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000020000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000020000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000200000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000010000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000001000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010000000000000000000000000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000200000000000200000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000200000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000002000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000010000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000002000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000002000000020100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000200000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000002000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000200000000000000000000000000020000000000000001000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000002000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000002000200000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000000000000000002000000020000000000000000000000000000000000000000000000000000000000000200000000000000000200000200000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000002000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000002020000000000000000000000000000000000000000000000000000000002000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000200000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000020000000000000000000200000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000020000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010002000000000002000000000000000000000000000002000000000000000000000000000000000000020000000200000000000002000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000100000000010000010000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000002000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000200010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000100000000010000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000002000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000020000000000010000000000000000000000000000000000000000000000000000000002000000000000000000000000000000020000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000200000001000100000000000000000200000000000100000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000002000000000000000000000100000000000000000000000000000000000000000000000000010000000000000000000000000000000002000000000000000100000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000100000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000200000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000010000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000020000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000002000000000000000000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000200000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000020000000001000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000001000100000000000000000000000000000000000000000000000200000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000100000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000200000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000002000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000002000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000002000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000201000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000020000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000010000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000020000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000200000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000002000002000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000002000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000020100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000100000000000000010100000000000000000000000000000100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000010000000000000000000000000000000002000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000010001000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020200000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000020000000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000000000200000000000001000000000000000000000000000000020000000000000000000000000000000000000000000000000002000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000020000000002000000000000000000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000010000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000020000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000002000200000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000002000000000000000000000000000000000000000000000002000000000002000000000000000000000000000000000000000001000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000010000010000000000000000000000000000000000010000000000000000000000000000000000000002000200000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200010000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000200000000000000000000000000000200000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000002000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000010000020000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000200000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000100000000000100010000000000000000000000000000000000000000000002000000000000000000000000000000020000000000000000000000000000000000000000000000000101000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000020000000001000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000002000000000002000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000020000000000000000000000000000000000000000000000010000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000100000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000002000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000102000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000100010000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000101000000000000000100000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000100000000000000000001000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"> : tensor<784x192xi8> + %c-4_i8 = arith.constant -4 : i8 + %c64_i8 = arith.constant 64 : i8 + %c64_i8_3 = arith.constant 64 : i8 + %c64_i8_4 = arith.constant 64 : i8 + %c64_i8_5 = arith.constant 64 : i8 + %hack_0_c-4_i8 = tensor.from_elements %c-4_i8 : tensor<1xi8> + %0 = "FHELinalg.add_eint_int"(%arg0, %hack_0_c-4_i8) : (tensor<1x784x!FHE.eint<7>>, tensor<1xi8>) -> tensor<1x784x!FHE.eint<7>> + %hack_1_c64_i8_5 = tensor.from_elements %c64_i8_5 : tensor<1xi8> + %1 = "FHELinalg.add_eint_int"(%0, %hack_1_c64_i8_5) : (tensor<1x784x!FHE.eint<7>>, tensor<1xi8>) -> tensor<1x784x!FHE.eint<7>> + %cst_6 = arith.constant dense<"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000"> : tensor<128xi64> + %2 = "FHELinalg.apply_lookup_table"(%1, %cst_6) : (tensor<1x784x!FHE.eint<7>>, tensor<128xi64>) -> tensor<1x784x!FHE.eint<7>> + %3 = "FHELinalg.matmul_eint_int"(%2, %cst_2) : (tensor<1x784x!FHE.eint<7>>, tensor<784x192xi8>) -> tensor<1x192x!FHE.eint<7>> + %cst_7 = arith.constant dense<"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000"> : tensor<128xi64> + %4 = "FHELinalg.apply_lookup_table"(%3, %cst_7) : (tensor<1x192x!FHE.eint<7>>, tensor<128xi64>) -> tensor<1x192x!FHE.eint<7>> + %5 = "FHELinalg.matmul_eint_int"(%4, %cst_1) : (tensor<1x192x!FHE.eint<7>>, tensor<192x192xi8>) -> tensor<1x192x!FHE.eint<7>> + %hack_6_c64_i8_4 = tensor.from_elements %c64_i8_4 : tensor<1xi8> + %6 = "FHELinalg.add_eint_int"(%5, %hack_6_c64_i8_4) : (tensor<1x192x!FHE.eint<7>>, tensor<1xi8>) -> tensor<1x192x!FHE.eint<7>> + %cst_8 = arith.constant dense<"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000"> : tensor<128xi64> + %7 = "FHELinalg.apply_lookup_table"(%6, %cst_8) : (tensor<1x192x!FHE.eint<7>>, tensor<128xi64>) -> tensor<1x192x!FHE.eint<7>> + %8 = "FHELinalg.matmul_eint_int"(%7, %cst_0) : (tensor<1x192x!FHE.eint<7>>, tensor<192x192xi8>) -> tensor<1x192x!FHE.eint<7>> + %hack_9_c64_i8_3 = tensor.from_elements %c64_i8_3 : tensor<1xi8> + %9 = "FHELinalg.add_eint_int"(%8, %hack_9_c64_i8_3) : (tensor<1x192x!FHE.eint<7>>, tensor<1xi8>) -> tensor<1x192x!FHE.eint<7>> + %cst_9 = arith.constant dense<"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000000100000000000000"> : tensor<128xi64> + %10 = "FHELinalg.apply_lookup_table"(%9, %cst_9) : (tensor<1x192x!FHE.eint<7>>, tensor<128xi64>) -> tensor<1x192x!FHE.eint<7>> + %11 = "FHELinalg.matmul_eint_int"(%10, %cst) : (tensor<1x192x!FHE.eint<7>>, tensor<192x10xi8>) -> tensor<1x10x!FHE.eint<7>> + %hack_12_c64_i8 = tensor.from_elements %c64_i8 : tensor<1xi8> + %12 = "FHELinalg.add_eint_int"(%11, %hack_12_c64_i8) : (tensor<1x10x!FHE.eint<7>>, tensor<1xi8>) -> tensor<1x10x!FHE.eint<7>> + %cst_10 = arith.constant dense<"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000100000000000000020000000000000002000000000000000200000000000000030000000000000003000000000000000400000000000000040000000000000004000000000000000500000000000000050000000000000006000000000000000600000000000000070000000000000007000000000000000700000000000000080000000000000008000000000000000900000000000000090000000000000009000000000000000A000000000000000A000000000000000B000000000000000B000000000000000C000000000000000C000000000000000C000000000000000D000000000000000D000000000000000E000000000000000E000000000000000E000000000000000F000000000000000F000000000000001000000000000000100000000000000011000000000000001100000000000000110000000000000012000000000000001200000000000000130000000000000013000000000000001400000000000000140000000000000014000000000000001500000000000000150000000000000016000000000000001600000000000000160000000000000017000000000000001700000000000000180000000000000018000000000000001900000000000000190000000000000019000000000000001A000000000000001A000000000000001B000000000000001B000000000000001B000000000000001C000000000000001C000000000000001D000000000000001D000000000000001E000000000000001E000000000000001E000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F000000000000001F00000000000000"> : tensor<128xi64> + %13 = "FHELinalg.apply_lookup_table"(%12, %cst_10) : (tensor<1x10x!FHE.eint<7>>, tensor<128xi64>) -> tensor<1x10x!FHE.eint<7>> + return %13 : tensor<1x10x!FHE.eint<7>> + } +tests: + - inputs: + - tensor: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + shape: [1,784] + width: 8 + # No output for now just used for benchmark diff --git a/compiler/tests/tests_tools/keySetCache.h b/compiler/tests/tests_tools/keySetCache.h new file mode 100644 index 000000000..ee0398d7c --- /dev/null +++ b/compiler/tests/tests_tools/keySetCache.h @@ -0,0 +1,28 @@ +#ifndef TEST_TOOLS_KEYSETCACHE_H +#define TEST_TOOLS_KEYSETCACHE_H + +#include "llvm/Support/Path.h" + +#include "concretelang/ClientLib/KeySetCache.h" + +static inline llvm::Optional +getTestKeySetCache() { + + llvm::SmallString<0> cachePath; + llvm::sys::path::system_temp_directory(true, cachePath); + llvm::sys::path::append(cachePath, "KeySetCache"); + + auto cachePathStr = std::string(cachePath); + + std::cout << "Using KeySetCache dir: " << cachePathStr << "\n"; + + return llvm::Optional( + concretelang::clientlib::KeySetCache(cachePathStr)); +} + +static inline std::shared_ptr +getTestKeySetCachePtr() { + return std::make_shared( + getTestKeySetCache().getValue()); +} +#endif diff --git a/compiler/tests/unittest/CMakeLists.txt b/compiler/tests/unittest/CMakeLists.txt index 46e2f504c..6922a00d0 100644 --- a/compiler/tests/unittest/CMakeLists.txt +++ b/compiler/tests/unittest/CMakeLists.txt @@ -1,17 +1,18 @@ add_custom_target(ConcreteCompilerUnitTests) function(add_concretecompiler_unittest test_name) - add_unittest(ConcreteCompilerUnitTests ${test_name} ${ARGN} EndToEndFixture.cpp) - target_link_libraries(${test_name} PRIVATE ConcretelangSupport ${RPATH_FLAGS}) + add_unittest(ConcreteCompilerUnitTests ${test_name} ${ARGN}) + target_link_libraries(${test_name} PRIVATE ConcretelangSupport EndToEndFixture ${RPATH_FLAGS}) set_source_files_properties(${ARGN} PROPERTIES COMPILE_FLAGS "-fno-rtti") endfunction() include_directories(${PROJECT_SOURCE_DIR}/include) -if (NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") +if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") link_libraries( + # usefull for old gcc versions - -Wl,--allow-multiple-definition # static concrete-optimizer and concrete shares some code + -Wl,--allow-multiple-definition #  static concrete-optimizer and concrete shares some code ) endif() diff --git a/compiler/tests/unittest/end_to_end_jit_fhe.cc b/compiler/tests/unittest/end_to_end_jit_fhe.cc index d7c6070c3..c095888e8 100644 --- a/compiler/tests/unittest/end_to_end_jit_fhe.cc +++ b/compiler/tests/unittest/end_to_end_jit_fhe.cc @@ -3,9 +3,11 @@ #include #include -#include "EndToEndFixture.h" +#include "../fixture/EndToEndFixture.h" +#include "../tests_tools/keySetCache.h" #include "concretelang/Support/JITSupport.h" #include "concretelang/Support/LibrarySupport.h" +#include "end_to_end_jit_test.h" template void compile_and_run(EndToEndDesc desc, LambdaSupport support) { @@ -62,6 +64,10 @@ void compile_and_run(EndToEndDesc desc, LambdaSupport support) { } } +std::string printEndToEndDesc(const testing::TestParamInfo desc) { + return desc.param.description; +} + // Macro to define and end to end TestSuite that run test thanks the // LambdaSupport according a EndToEndDesc #define INSTANTIATE_END_TO_END_COMPILE_AND_RUN(TestSuite, lambdaSupport) \ @@ -84,13 +90,13 @@ void compile_and_run(EndToEndDesc desc, LambdaSupport support) { class suite : public testing::TestWithParam {}; \ INSTANTIATE_END_TO_END_COMPILE_AND_RUN(suite, lambdasupport) \ INSTANTIATE_END_TO_END_TEST_SUITE_FROM_FILE( \ - FHE, suite, lambdasupport, "tests/unittest/end_to_end_fhe.yaml") \ + FHE, suite, lambdasupport, "tests/fixture/end_to_end_fhe.yaml") \ INSTANTIATE_END_TO_END_TEST_SUITE_FROM_FILE( \ EncryptedTensor, suite, lambdasupport, \ - "tests/unittest/end_to_end_encrypted_tensor.yaml") \ + "tests/fixture/end_to_end_encrypted_tensor.yaml") \ INSTANTIATE_END_TO_END_TEST_SUITE_FROM_FILE( \ FHELinalg, suite, lambdasupport, \ - "tests/unittest/end_to_end_fhelinalg.yaml") + "tests/fixture/end_to_end_fhelinalg.yaml") /// Instantiate the test suite for Jit INSTANTIATE_END_TO_END_TEST_SUITE_FROM_ALL_TEST_FILES( diff --git a/compiler/tests/unittest/end_to_end_jit_test.h b/compiler/tests/unittest/end_to_end_jit_test.h index 318a7fb5e..20e4f719c 100644 --- a/compiler/tests/unittest/end_to_end_jit_test.h +++ b/compiler/tests/unittest/end_to_end_jit_test.h @@ -3,10 +3,10 @@ #include -#include "concretelang/ClientLib/KeySetCache.h" +#include "../tests_tools/keySetCache.h" + #include "concretelang/Support/CompilerEngine.h" #include "concretelang/Support/JITSupport.h" -#include "llvm/Support/Path.h" #include "globals.h" @@ -106,27 +106,6 @@ static bool assert_expected_value(llvm::Expected &&val, const V &exp) { }; \ ASSERT_EQ(val.value(), exp); -static inline llvm::Optional -getTestKeySetCache() { - - llvm::SmallString<0> cachePath; - llvm::sys::path::system_temp_directory(true, cachePath); - llvm::sys::path::append(cachePath, "KeySetCache"); - - auto cachePathStr = std::string(cachePath); - - std::cout << "Using KeySetCache dir: " << cachePathStr << "\n"; - - return llvm::Optional( - concretelang::clientlib::KeySetCache(cachePathStr)); -} - -static inline std::shared_ptr -getTestKeySetCachePtr() { - return std::make_shared( - getTestKeySetCache().getValue()); -} - // Jit-compiles the function specified by `func` from `src` and // returns the corresponding lambda. Any compilation errors are caught // and reult in abnormal termination.