diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index 4c308f82..47a391b0 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -290,7 +290,7 @@ jobs: with: artifact-name: ${{ needs.build-and-test-linux.outputs.examples-artifact-name }} # Update next line if you need new version of proof producer - proof-producer-ref: b1e380040b4714b6ad5fe9223555d854c49cf065 + proof-producer-ref: 0924fe046e08c8ae10e9df226cfd0a39b069d355 refs: ${{ needs.handle-syncwith.outputs.prs-refs }} targets: ${{ needs.build-and-test-linux.outputs.prover-targets }} diff --git a/bin/assigner/CMakeLists.txt b/bin/assigner/CMakeLists.txt index dd20aaf7..d72733b1 100644 --- a/bin/assigner/CMakeLists.txt +++ b/bin/assigner/CMakeLists.txt @@ -40,6 +40,21 @@ if (CPACK_PACKAGE_VERSION) add_compile_definitions(${UPPER_CURRENT_PROJECT_NAME}_VERSION=${CPACK_PACKAGE_VERSION}) endif() +set(WITNESS_COLUMNS 15 CACHE INT "Number of witness columns") +set(PUBLIC_INPUT_COLUMNS 1 CACHE INT "Number of public input columns") +set(COMPONENT_CONSTANT_COLUMNS 5 CACHE INT "Number of component constant columns") +set(LOOKUP_CONSTANT_COLUMNS 30 CACHE INT "Number of lookup constant columns") +set(COMPONENT_SELECTOR_COLUMNS 30 CACHE INT "Number of lookup selector columns") +set(LOOKUP_SELECTOR_COLUMNS 6 CACHE INT "Number of lookup selector columns") + +add_definitions(-DASSIGNER_WITNESS_COLUMNS=${WITNESS_COLUMNS}) +add_definitions(-DASSIGNER_PUBLIC_INPUT_COLUMNS=${PUBLIC_INPUT_COLUMNS}) +add_definitions(-DASSIGNER_COMPONENT_CONSTANT_COLUMNS=${COMPONENT_CONSTANT_COLUMNS}) +add_definitions(-DASSIGNER_LOOKUP_CONSTANT_COLUMNS=${LOOKUP_CONSTANT_COLUMNS}) +add_definitions(-DASSIGNER_COMPONENT_SELECTOR_COLUMNS=${COMPONENT_SELECTOR_COLUMNS}) +add_definitions(-DASSIGNER_LOOKUP_SELECTOR_COLUMNS=${LOOKUP_SELECTOR_COLUMNS}) +#HASH, LAMBDA, GRINDING_BITS is not used in the current version of the assigner + # get header files; only needed by CMake generators, # expr.g., for creating proper Xcode projects set(${CURRENT_PROJECT_NAME}_HEADERS) diff --git a/bin/assigner/src/main.cpp b/bin/assigner/src/main.cpp index 3657350d..cc1f5926 100644 --- a/bin/assigner/src/main.cpp +++ b/bin/assigner/src/main.cpp @@ -46,6 +46,9 @@ #include +#include +#include + #include #include #include @@ -392,6 +395,15 @@ bool read_json( return true; } +struct ParametersPolicy { + constexpr static const std::size_t WitnessColumns = ASSIGNER_WITNESS_COLUMNS; + constexpr static const std::size_t PublicInputColumns = ASSIGNER_PUBLIC_INPUT_COLUMNS; + constexpr static const std::size_t ComponentConstantColumns = ASSIGNER_COMPONENT_CONSTANT_COLUMNS; + constexpr static const std::size_t LookupConstantColumns = ASSIGNER_LOOKUP_CONSTANT_COLUMNS; + constexpr static const std::size_t ComponentSelectorColumns = ASSIGNER_COMPONENT_SELECTOR_COLUMNS; + constexpr static const std::size_t LookupSelectorColumns = ASSIGNER_LOOKUP_SELECTOR_COLUMNS; +}; + template int curve_dependent_main(std::string bytecode_file_name, std::string public_input_file_name, @@ -403,18 +415,19 @@ int curve_dependent_main(std::string bytecode_file_name, boost::log::trivial::severity_level log_level, const std::string &policy, std::uint32_t max_num_provers, + std::uint32_t max_lookup_rows, std::uint32_t target_prover, nil::blueprint::print_format circuit_output_print_format) { - constexpr std::size_t ComponentConstantColumns = 5; - constexpr std::size_t LookupConstantColumns = 30; - constexpr std::size_t ComponentSelectorColumns = 30; - constexpr std::size_t LookupSelectorConstantColumns = 6; + constexpr std::size_t ComponentConstantColumns = ParametersPolicy::ComponentConstantColumns; + constexpr std::size_t LookupConstantColumns = ParametersPolicy::LookupConstantColumns; + constexpr std::size_t ComponentSelectorColumns = ParametersPolicy::ComponentSelectorColumns; + constexpr std::size_t LookupSelectorColumns = ParametersPolicy::LookupSelectorColumns; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; + constexpr std::size_t WitnessColumns = ParametersPolicy::WitnessColumns; + constexpr std::size_t PublicInputColumns = ParametersPolicy::PublicInputColumns; constexpr std::size_t ConstantColumns = ComponentConstantColumns + LookupConstantColumns; - constexpr std::size_t SelectorColumns = ComponentSelectorColumns + LookupSelectorConstantColumns; + constexpr std::size_t SelectorColumns = ComponentSelectorColumns + LookupSelectorColumns; using ArithmetizationParams = zk::snark::plonk_arithmetization_params; @@ -462,7 +475,6 @@ int curve_dependent_main(std::string bytecode_file_name, // pack lookup tables if (parser_instance.circuits[0].get_reserved_tables().size() > 0) { std::vector lookup_columns_indices; - const std::uint32_t max_usable_rows = 500000; lookup_columns_indices.resize(LookupConstantColumns); // fill ComponentConstantColumns, ComponentConstantColumns + 1, ... std::iota(lookup_columns_indices.begin(), lookup_columns_indices.end(), ComponentConstantColumns); @@ -475,7 +487,7 @@ int curve_dependent_main(std::string bytecode_file_name, lookup_columns_indices, ComponentSelectorColumns, 0, - max_usable_rows + max_lookup_rows ); } @@ -597,6 +609,7 @@ int main(int argc, char *argv[]) { ("print-circuit-output-format,f", boost::program_options::value(), "print output of the circuit (dec, hex)") ("policy", boost::program_options::value(), "Policy for creating circuits. Possible values: default") ("max-num-provers", boost::program_options::value(), "Maximum number of provers. Possible values >= 1") + ("max-lookup-rows", boost::program_options::value(), "Maximum number of provers. Possible values >= 1") ("target-prover", boost::program_options::value(), "Assignment table and circuit will be generated only for defined prover. Possible values [0, max-num-provers)"); // clang-format on @@ -750,6 +763,16 @@ int main(int argc, char *argv[]) { } } + std::uint32_t max_lookup_rows = 500000; + if (vm.count("max-lookup-rows")) { + max_lookup_rows = vm["max-lookup-rows"].as(); + if (max_lookup_rows < 1) { + std::cerr << "Invalid command line argument - max-num-provers. " << max_num_provers << " is wrong value." << std::endl; + std::cout << options_desc << std::endl; + return 1; + } + } + std::uint32_t target_prover = std::numeric_limits::max(); if (vm.count("target-prover")) { target_prover = vm["target-prover"].as(); @@ -795,6 +818,7 @@ int main(int argc, char *argv[]) { log_options[log_level], policy, max_num_provers, + max_lookup_rows, target_prover, circuit_output_print_format); break; @@ -819,6 +843,7 @@ int main(int argc, char *argv[]) { log_options[log_level], policy, max_num_provers, + max_lookup_rows, target_prover, circuit_output_print_format); break; @@ -826,4 +851,4 @@ int main(int argc, char *argv[]) { }; return 0; -} \ No newline at end of file +} diff --git a/bin/recursive_gen/CMakeLists.txt b/bin/recursive_gen/CMakeLists.txt new file mode 100644 index 00000000..fc89ef68 --- /dev/null +++ b/bin/recursive_gen/CMakeLists.txt @@ -0,0 +1,126 @@ +#---------------------------------------------------------------------------# +# Copyright (c) 2018-2022 Mikhail Komarov +# Copyright (c) 2020-2022 Nikita Kaskov +# +# Distributed under the Boost Software License, Version 1.0 +# See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt +#---------------------------------------------------------------------------# + +cmake_minimum_required(VERSION 3.5) + +cm_find_package(CM) +include(CMDeploy) +include(CMSetupVersion) + +cm_project(recursive_gen WORKSPACE_NAME ${CMAKE_WORKSPACE_NAME} LANGUAGES ASM C CXX) + +if(NOT CMAKE_CROSSCOMPILING) + find_package(Boost COMPONENTS REQUIRED filesystem log log_setup program_options thread system) +elseif(CMAKE_CROSSCOMPILING) + if(NOT TARGET boost) + include(ExternalProject) + set(Boost_LIBRARIES boost_random) + externalproject_add(boost + PREFIX ${CMAKE_BINARY_DIR}/libs/boost + GIT_REPOSITORY git@github.com:boostorg/boost.git + GIT_TAG boost-1.77.0 + BUILD_IN_SOURCE TRUE + CMAKE_ARGS -DCMAKE_CROSSCOMPILING_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + BUILD_COMMAND cmake --build . --target ${Boost_LIBRARIES} + INSTALL_COMMAND "") + else() + set(Boost_LIBRARIES boost_random) + endif() +endif() + +string(TOUPPER ${CURRENT_PROJECT_NAME} UPPER_CURRENT_PROJECT_NAME) + +if (CPACK_PACKAGE_VERSION) + add_compile_definitions(${UPPER_CURRENT_PROJECT_NAME}_VERSION=${CPACK_PACKAGE_VERSION}) +endif() + + +set(WITNESS_COLUMNS 15 CACHE INT "Number of witness columns") +set(PUBLIC_INPUT_COLUMNS 1 CACHE INT "Number of public input columns") +set(COMPONENT_CONSTANT_COLUMNS 5 CACHE INT "Number of component constant columns") +set(LOOKUP_CONSTANT_COLUMNS 30 CACHE INT "Number of lookup constant columns") +set(COMPONENT_SELECTOR_COLUMNS 30 CACHE INT "Number of lookup selector columns") +set(LOOKUP_SELECTOR_COLUMNS 6 CACHE INT "Number of lookup selector columns") +set(SECURITY_PARAMETER_LAMBDA 9 CACHE INT "Number of FRI queries") +set(SECURITY_PARAMETER_GRINDING_BITS 0 CACHE INT "Number of FRI grinding bits") + +add_definitions(-DRECURSIVE_WITNESS_COLUMNS=${WITNESS_COLUMNS}) +add_definitions(-DRECURSIVE_PUBLIC_INPUT_COLUMNS=${PUBLIC_INPUT_COLUMNS}) +add_definitions(-DRECURSIVE_COMPONENT_CONSTANT_COLUMNS=${COMPONENT_CONSTANT_COLUMNS}) +add_definitions(-DRECURSIVE_LOOKUP_CONSTANT_COLUMNS=${LOOKUP_CONSTANT_COLUMNS}) +add_definitions(-DRECURSIVE_COMPONENT_SELECTOR_COLUMNS=${COMPONENT_SELECTOR_COLUMNS}) +add_definitions(-DRECURSIVE_LOOKUP_SELECTOR_COLUMNS=${LOOKUP_SELECTOR_COLUMNS}) +add_definitions(-DRECURSIVE_LAMBDA=${SECURITY_PARAMETER_LAMBDA}) +add_definitions(-DRECURSIVE_GRINDING_BITS=${SECURITY_PARAMETER_GRINDING_BITS}) + +#Hash is hard-coded poseidon + +# get header files; only needed by CMake generators, +# expr.g., for creating proper Xcode projects +set(${CURRENT_PROJECT_NAME}_HEADERS) + +# list cpp files excluding platform-dependent files +list(APPEND ${CURRENT_PROJECT_NAME}_SOURCES + src/main.cpp) + +add_executable(${CURRENT_PROJECT_NAME} + ${${CURRENT_PROJECT_NAME}_HEADERS} + ${${CURRENT_PROJECT_NAME}_SOURCES}) + +set_target_properties(${CURRENT_PROJECT_NAME} PROPERTIES + LINKER_LANGUAGE CXX + EXPORT_NAME ${CURRENT_PROJECT_NAME} + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED TRUE) + +target_link_libraries(${CURRENT_PROJECT_NAME} + crypto3::algebra + crypto3::block + crypto3::blueprint + crypto3::codec + crypto3::math + crypto3::multiprecision + crypto3::pkpad + crypto3::pubkey + crypto3::random + crypto3::zk + + crypto3::assigner + crypto3::transpiler + + marshalling::core + marshalling::crypto3_algebra + marshalling::crypto3_multiprecision + marshalling::crypto3_zk + + ${Boost_LIBRARIES}) + +target_include_directories(${CURRENT_PROJECT_NAME} PUBLIC + $ + $ + ${CMAKE_CURRENT_SOURCE_DIR}/../../libs/circifier/llvm/include + ${CMAKE_CURRENT_SOURCE_DIR}/../../libs/circifier/utils/bazel/llvm-project-overlay/llvm/include + ${CMAKE_BINARY_DIR}/libs/circifier/llvm/include + + $<$:${Boost_INCLUDE_DIRS}>) + +if(APPLE OR NOT ${CMAKE_TARGET_ARCHITECTURE} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR}) + set_target_properties(${CURRENT_PROJECT_NAME} PROPERTIES + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${APPLE_CODE_SIGN_IDENTITY}" + XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM}") +elseif(CMAKE_CROSSCOMPILING AND CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + set_target_properties(${CURRENT_PROJECT_NAME} PROPERTIES + COMPILE_FLAGS "-s USE_BOOST_HEADERS=1 -s EXPORTED_FUNCTIONS=_proof_gen,_main -s EXPORTED_RUNTIME_METHODS=ccall,cwrap" + LINK_FLAGS "-s USE_BOOST_HEADERS=1 -s EXPORTED_FUNCTIONS=_proof_gen,_main -s EXPORTED_RUNTIME_METHODS=ccall,cwrap" + LINK_DIRECTORIES "${CMAKE_BINARY_DIR}/libs/boost/src/boost/stage/lib") + endif() + + add_dependencies(${CURRENT_PROJECT_NAME} boost) +endif() diff --git a/bin/recursive_gen/src/main.cpp b/bin/recursive_gen/src/main.cpp new file mode 100644 index 00000000..8bbc26e3 --- /dev/null +++ b/bin/recursive_gen/src/main.cpp @@ -0,0 +1,507 @@ +#include +#include +#include +#include + +#ifndef BOOST_FILESYSTEM_NO_DEPRECATED +#define BOOST_FILESYSTEM_NO_DEPRECATED +#endif +#ifndef BOOST_SYSTEM_NO_DEPRECATED +#define BOOST_SYSTEM_NO_DEPRECATED +#endif + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + + +template +struct ParametersPolicy { + constexpr static const std::size_t WitnessColumns = RECURSIVE_WITNESS_COLUMNS; + constexpr static const std::size_t PublicInputColumns = RECURSIVE_PUBLIC_INPUT_COLUMNS; + constexpr static const std::size_t ComponentConstantColumns = RECURSIVE_COMPONENT_CONSTANT_COLUMNS; + constexpr static const std::size_t LookupConstantColumns = RECURSIVE_LOOKUP_CONSTANT_COLUMNS; + constexpr static const std::size_t ComponentSelectorColumns = RECURSIVE_COMPONENT_SELECTOR_COLUMNS; + constexpr static const std::size_t LookupSelectorColumns = RECURSIVE_LOOKUP_SELECTOR_COLUMNS; + constexpr static const std::size_t lambda = RECURSIVE_LAMBDA; + constexpr static const std::size_t GrindingBits = RECURSIVE_GRINDING_BITS; + constexpr static const bool UseGrinding = (GrindingBits != 0); + +private: + using poseidon_policy = nil::crypto3::hashes::detail::mina_poseidon_policy; + using default_hash = nil::crypto3::hashes::poseidon; +public: + using hash =default_hash; +}; + +template +void print_sol_files(ConstraintSystemType &constraint_system, ColumnsRotationsType &columns_rotations, + std::string out_folder_path = ".", bool optimize_gates = false) { + ProfilingType::process_split( + nil::blueprint::main_sol_file_template, + nil::blueprint::gate_sol_file_template, + constraint_system, + columns_rotations, + out_folder_path, + optimize_gates + ); +} + +inline std::vector generate_random_step_list(const std::size_t r, const int max_step) { + using dist_type = std::uniform_int_distribution; + static std::random_device random_engine; + + std::vector step_list; + std::size_t steps_sum = 0; + while (steps_sum != r) { + if (r - steps_sum <= max_step) { + while (r - steps_sum != 1) { + step_list.emplace_back(r - steps_sum - 1); + steps_sum += step_list.back(); + } + step_list.emplace_back(1); + steps_sum += step_list.back(); + } else { + step_list.emplace_back(dist_type(1, max_step)(random_engine)); + steps_sum += step_list.back(); + } + } + return step_list; +} + +template +typename FRIScheme::params_type create_fri_params(std::size_t degree_log, const int max_step = 1, const int expand_factor = 2) { + std::size_t r = degree_log - 1; + + return typename FRIScheme::params_type( + (1 << degree_log) - 1, // max_degree + math::calculate_domain_set(degree_log + expand_factor, r), + generate_random_step_list(r, max_step), + expand_factor + ); +} + +template +void print_hex_byteblob(std::ostream &os, TIter iter_begin, TIter iter_end, bool endl) { + os << "0x" << std::hex; + for (TIter it = iter_begin; it != iter_end; it++) { + os << std::setfill('0') << std::setw(2) << std::right << int(*it); + } + os << std::dec; + if (endl) { + os << std::endl; + } +} +/* +template +void proof_print(Proof &proof, const std::string &output_file) { + using namespace nil::crypto3::marshalling; + + using TTypeBase = nil::marshalling::field_type; + using proof_marshalling_type = nil::crypto3::zk::snark::placeholder_proof; + auto filled_placeholder_proof = types::fill_placeholder_proof(proof); + + std::vector cv; + cv.resize(filled_placeholder_proof.length(), 0x00); + auto write_iter = cv.begin(); + nil::marshalling::status_type status = filled_placeholder_proof.write(write_iter, cv.size()); + std::ofstream out; + out.open(output_file); + print_hex_byteblob(out, cv.cbegin(), cv.cend(), false); +} +*/ +template +int curve_dependent_main( + boost::program_options::options_description options_desc, + boost::program_options::variables_map vm +); + +int main(int argc, char *argv[]) { + + boost::program_options::options_description options_desc("zkLLVM recursive verifier generator"); + + // clang-format off + options_desc.add_options()("help,h", "Display help message") + ("mode,m", boost::program_options::value(), "Recursive verifier mode (gen-input, gen-verifier).\ + gen-input generates test proof and recursive verifier input.\ + gen-verifier generates main.cpp file for recursive verifier for given circuit.\ + ") + ("public-input,i", boost::program_options::value(), "Public input file") + ("assignment-table,t", boost::program_options::value(), "Assignment table input file") + ("circuit,c", boost::program_options::value(), "Circuit input file") + ("output-folder-path,o", boost::program_options::value(), "Output folder absolute path.\ + It'll be better to create an empty folder for output") + ("skip-verification", "Used with gen-test-proof, if set - skips verifiyng the generated proof") + ("multi-prover", "Pass this flag if input circuit is a part of larger circuit, divided for faster paralel proving") + ("public-input-rows,p", boost::program_options::value(), "Used public input column rows") + ("shared-rows,s", boost::program_options::value(), "Used shared rows") + ("elliptic-curve-type,e", boost::program_options::value(), "Native elliptic curve type (pallas, vesta, ed25519, bls12381)"); + + // clang-format on + boost::program_options::variables_map vm; + boost::program_options::store(boost::program_options::command_line_parser(argc, argv).options(options_desc).run(), vm); + boost::program_options::notify(vm); + + std::string elliptic_curve; + + if (vm.count("elliptic-curve-type")) { + elliptic_curve = vm["elliptic-curve-type"].as(); + } else { + std::cerr << "Invalid command line argument - elliptic curve type is not specified" << std::endl; + std::cout << options_desc << std::endl; + return 1; + } + + std::map curve_options{ + {"pallas", 0}, + {"vesta", 1}, + {"ed25519", 2}, + {"bls12381", 3}, + }; + + if (curve_options.find(elliptic_curve) == curve_options.end()) { + std::cerr << "Invalid command line argument -e (Native elliptic curve type): " << elliptic_curve << std::endl; + std::cout << options_desc << std::endl; + return 1; + } + + switch (curve_options[elliptic_curve]) { + case 0: { + using curve_type = nil::crypto3::algebra::curves::pallas; + using BlueprintFieldType = typename curve_type::base_field_type; + return (vm.count("multi-prover") > 0) ? + curve_dependent_main(options_desc, vm) : + curve_dependent_main(options_desc, vm); + break; + } + case 1: { + UNREACHABLE("vesta curve based circuits are not supported yet"); + break; + } + case 2: { + UNREACHABLE("ed25519 curve based circuits are not supported yet"); + break; + } + case 3: { + UNREACHABLE("bls12381 curve based circuits are not supported yet"); + break; + } + }; +} + +template +int curve_dependent_main( + boost::program_options::options_description options_desc, + boost::program_options::variables_map vm +) { + if (vm.count("help")) { + std::cout << options_desc << std::endl; + return 0; + } + + if (vm.count("version")) { +#ifdef RECURSIVE_VERSION +#define xstr(s) str(s) +#define str(s) #s + std::cout << xstr(RECURSIVE_VERSION) << std::endl; +#else + std::cout << "undefined" << std::endl; +#endif + return 0; + } + + std::string mode; + std::string assignment_table_file_name; + std::string circuit_file_name; + std::string output_folder_path; + std::string public_input; + + if (vm.count("mode")) { + mode = vm["mode"].as(); + } else { + std::cerr << "Invalid mode specified" << std::endl; + std::cout << options_desc << std::endl; + return 1; + } + + if ((mode != "gen-input" && mode != "gen-verifier")) { + std::cerr << "Invalid mode specified" << std::endl; + std::cout << options_desc << std::endl; + return 1; + } + + if (vm.count("assignment-table")) { + assignment_table_file_name = vm["assignment-table"].as(); + } else { + std::cerr << "Invalid command line argument - assignment table file name is not specified" << std::endl; + std::cout << options_desc << std::endl; + return 1; + } + + if (vm.count("circuit")) { + circuit_file_name = vm["circuit"].as(); + } else { + std::cerr << "Invalid command line argument - circuit file name is not specified" << std::endl; + std::cout << options_desc << std::endl; + return 1; + } + + if (vm.count("output-folder-path")) { + output_folder_path = vm["output-folder-path"].as(); + boost::filesystem::path dir(output_folder_path); + if(boost::filesystem::create_directory(output_folder_path)) + { + std::cerr<< "Directory Created: "<(); } + + std::uint32_t shared_rows = 50; + if (vm.count("shared-rows")) { + if( !vm.count("shared-rows") ) + std::cout << "shared-rows parameter will be ignored because it is single-prover example" << std::endl; + shared_rows = vm["shared-rows"].as(); + } + + using parameters_policy = ParametersPolicy; + constexpr std::size_t WitnessColumns = parameters_policy::WitnessColumns; + constexpr std::size_t PublicInputColumns = is_multi_prover? parameters_policy::PublicInputColumns + 1: parameters_policy::PublicInputColumns; + constexpr std::size_t ConstantColumns = parameters_policy::ComponentConstantColumns + parameters_policy::LookupConstantColumns; + constexpr std::size_t SelectorColumns = parameters_policy::ComponentSelectorColumns + parameters_policy::LookupSelectorColumns; + + std::cout << "WitnessColumns = " << WitnessColumns << std::endl; + std::cout << "PublicInputColumns = " << PublicInputColumns << std::endl; + std::cout << "ConstantColumns = " << ConstantColumns << ": LookupConstantColumns = " << parameters_policy::LookupConstantColumns << std::endl; + std::cout << "SelectorColumns = " << SelectorColumns << ": LookupSelectorColumns = " << parameters_policy::LookupSelectorColumns << std::endl; + + std::array public_input_sizes; + for(std::size_t i = 0; i < PublicInputColumns; i++){ + public_input_sizes[i] = public_input_rows; + } + if( is_multi_prover ) + public_input_sizes[PublicInputColumns - 1] = shared_rows; + + using ArithmetizationParams = + nil::crypto3::zk::snark::plonk_arithmetization_params; + // Circuit-specific parameter + using ConstraintSystemType = + nil::crypto3::zk::snark::plonk_constraint_system; + using TableDescriptionType = + nil::crypto3::zk::snark::plonk_table_description; + using Endianness = nil::marshalling::option::big_endian; + using TTypeBase = nil::marshalling::field_type; + using value_marshalling_type = + nil::crypto3::marshalling::types::plonk_constraint_system; + + using ColumnType = nil::crypto3::zk::snark::plonk_column; + using AssignmentTableType = + nil::crypto3::zk::snark::plonk_table; + using table_value_marshalling_type = + nil::crypto3::marshalling::types::plonk_assignment_table; + + using ColumnsRotationsType = std::array, ArithmetizationParams::total_columns>; + using ProfilingType = nil::blueprint::minimized_profiling_plonk_circuit; + + if( vm.count("public-input") ){ + public_input = vm["public-input"].as(); + if( !boost::filesystem::exists(public_input) ){ + std::cerr << "Invalid command line argument - public input file does not exist" << std::endl; + return 1; + } + boost::filesystem::copy(public_input, output_folder_path+"/public_input.json", boost::filesystem::copy_options::overwrite_existing); + } + + ConstraintSystemType constraint_system; + { + std::ifstream ifile; + ifile.open(circuit_file_name, std::ios_base::binary | std::ios_base::in); + if (!ifile.is_open()) { + std::cout << "Cannot find input file " << circuit_file_name << std::endl; + return 1; + } + std::vector v; + ifile.seekg(0, std::ios_base::end); + const auto fsize = ifile.tellg(); + v.resize(fsize); + ifile.seekg(0, std::ios_base::beg); + ifile.read(reinterpret_cast(v.data()), fsize); + if (!ifile) { + std::cout << "Cannot parse input file " << circuit_file_name << std::endl; + return 1; + } + ifile.close(); + + value_marshalling_type marshalled_data; + auto read_iter = v.begin(); + auto status = marshalled_data.read(read_iter, v.size()); + constraint_system = nil::crypto3::marshalling::types::make_plonk_constraint_system( + marshalled_data + ); + } + + TableDescriptionType table_description; + AssignmentTableType assignment_table; + { + std::ifstream iassignment; + iassignment.open(assignment_table_file_name, std::ios_base::binary | std::ios_base::in); + if (!iassignment) { + std::cout << "Cannot open " << assignment_table_file_name << std::endl; + return 1; + } + std::vector v; + iassignment.seekg(0, std::ios_base::end); + const auto fsize = iassignment.tellg(); + v.resize(fsize); + iassignment.seekg(0, std::ios_base::beg); + iassignment.read(reinterpret_cast(v.data()), fsize); + if (!iassignment) { + std::cout << "Cannot parse input file " << assignment_table_file_name << std::endl; + return 1; + } + iassignment.close(); + table_value_marshalling_type marshalled_table_data; + auto read_iter = v.begin(); + auto status = marshalled_table_data.read(read_iter, v.size()); + std::tie(table_description.usable_rows_amount, assignment_table) = + nil::crypto3::marshalling::types::make_assignment_table( + marshalled_table_data + ); + table_description.rows_amount = assignment_table.rows_amount(); + } + auto columns_rotations = ProfilingType::columns_rotations(constraint_system, table_description); + + const std::size_t Lambda = parameters_policy::lambda; + using Hash = typename parameters_policy::hash; + using circuit_params = nil::crypto3::zk::snark::placeholder_circuit_params< + BlueprintFieldType, ArithmetizationParams + >; + + std::size_t table_rows_log = std::ceil(std::log2(table_description.rows_amount)); + using lpc_params_type = nil::crypto3::zk::commitments::list_polynomial_commitment_params< + Hash, + Hash, + Lambda, + 2 + >; + using lpc_type = nil::crypto3::zk::commitments::list_polynomial_commitment; + using lpc_scheme_type = typename nil::crypto3::zk::commitments::lpc_commitment_scheme; + using placeholder_params = nil::crypto3::zk::snark::placeholder_params; + using policy_type = nil::crypto3::zk::snark::detail::placeholder_policy; + + auto fri_params = create_fri_params(table_rows_log); + std::size_t permutation_size = + table_description.witness_columns + table_description.public_input_columns + 2; + lpc_scheme_type lpc_scheme(fri_params); + + + if ((mode != "gen-input" && mode != "gen-verifier")) { + return 0; + } + + std::cout << "Preprocessing public data..." << std::endl; + typename nil::crypto3::zk::snark::placeholder_public_preprocessor< + BlueprintFieldType, placeholder_params>::preprocessed_data_type public_preprocessed_data = + nil::crypto3::zk::snark::placeholder_public_preprocessor::process( + constraint_system, assignment_table.public_table(), table_description, lpc_scheme, permutation_size); + if( mode == "gen-verifier"){ + std::string cpp_path = output_folder_path + "/placeholder_verifier.cpp"; + std::ofstream output_file; + output_file.open(cpp_path); + output_file << nil::blueprint::recursive_verifier_generator< + placeholder_params, + nil::crypto3::zk::snark::placeholder_proof, + typename nil::crypto3::zk::snark::placeholder_public_preprocessor::preprocessed_data_type::common_data_type + >::generate_recursive_verifier( + constraint_system, public_preprocessed_data.common_data, lpc_scheme, permutation_size, public_input_sizes + ); + output_file.close(); + return 0; + } + + if (mode == "gen-input") { + std::cout << "Preprocessing private data..." << std::endl; + typename nil::crypto3::zk::snark::placeholder_private_preprocessor< + BlueprintFieldType, placeholder_params>::preprocessed_data_type private_preprocessed_data = + nil::crypto3::zk::snark::placeholder_private_preprocessor::process( + constraint_system, assignment_table.private_table(), table_description + ); + + std::cout << "Generating proof..." << std::endl; + using ProofType = nil::crypto3::zk::snark::placeholder_proof; + ProofType proof = nil::crypto3::zk::snark::placeholder_prover::process( + public_preprocessed_data, private_preprocessed_data, table_description, constraint_system, lpc_scheme); + std::cout << "Proof generated" << std::endl; + + if( !vm.count("skip-verification") ) { + std::cout << "Verifying proof..." << std::endl; + bool verification_result = + nil::crypto3::zk::snark::placeholder_verifier::process( + public_preprocessed_data, proof, constraint_system, lpc_scheme + ); + + ASSERT_MSG(verification_result, "Proof is not verified" ); + std::cout << "Proof is verified" << std::endl; + } + + std::string inp_path = output_folder_path + "/placeholder_verifier.inp"; + std::ofstream output_file; + output_file.open(inp_path); + output_file << nil::blueprint::recursive_verifier_generator< + placeholder_params, + nil::crypto3::zk::snark::placeholder_proof, + typename nil::crypto3::zk::snark::placeholder_public_preprocessor::preprocessed_data_type::common_data_type + >::generate_input( + public_preprocessed_data.common_data.vk, assignment_table.public_inputs(), proof, public_input_sizes + ); + output_file.close(); + } + return 0; +} \ No newline at end of file diff --git a/bin/transpiler/CMakeLists.txt b/bin/transpiler/CMakeLists.txt index 4845490a..1c99d57b 100644 --- a/bin/transpiler/CMakeLists.txt +++ b/bin/transpiler/CMakeLists.txt @@ -40,6 +40,26 @@ if (CPACK_PACKAGE_VERSION) add_compile_definitions(${UPPER_CURRENT_PROJECT_NAME}_VERSION=${CPACK_PACKAGE_VERSION}) endif() +set(WITNESS_COLUMNS 15 CACHE INT "Number of witness columns") +set(PUBLIC_INPUT_COLUMNS 1 CACHE INT "Number of public input columns") +set(COMPONENT_CONSTANT_COLUMNS 5 CACHE INT "Number of component constant columns") +set(LOOKUP_CONSTANT_COLUMNS 30 CACHE INT "Number of lookup constant columns") +set(COMPONENT_SELECTOR_COLUMNS 30 CACHE INT "Number of lookup selector columns") +set(LOOKUP_SELECTOR_COLUMNS 6 CACHE INT "Number of lookup selector columns") +set(SECURITY_PARAMETER_LAMBDA 9 CACHE INT "Number of FRI queries") +set(SECURITY_PARAMETER_GRINDING_BITS 0 CACHE INT "Number of FRI grinding bits") + +add_definitions(-DTRANSPILER_WITNESS_COLUMNS=${WITNESS_COLUMNS}) +add_definitions(-DTRANSPILER_PUBLIC_INPUT_COLUMNS=${PUBLIC_INPUT_COLUMNS}) +add_definitions(-DTRANSPILER_COMPONENT_CONSTANT_COLUMNS=${COMPONENT_CONSTANT_COLUMNS}) +add_definitions(-DTRANSPILER_LOOKUP_CONSTANT_COLUMNS=${LOOKUP_CONSTANT_COLUMNS}) +add_definitions(-DTRANSPILER_COMPONENT_SELECTOR_COLUMNS=${COMPONENT_SELECTOR_COLUMNS}) +add_definitions(-DTRANSPILER_LOOKUP_SELECTOR_COLUMNS=${LOOKUP_SELECTOR_COLUMNS}) +add_definitions(-DTRANSPILER_LAMBDA=${SECURITY_PARAMETER_LAMBDA}) +add_definitions(-DTRANSPILER_GRINDING_BITS=${SECURITY_PARAMETER_GRINDING_BITS}) + +#HASH is hardcoded as keccak + # get header files; only needed by CMake generators, # expr.g., for creating proper Xcode projects set(${CURRENT_PROJECT_NAME}_HEADERS) diff --git a/bin/transpiler/src/main.cpp b/bin/transpiler/src/main.cpp index fd40c75a..4487955c 100644 --- a/bin/transpiler/src/main.cpp +++ b/bin/transpiler/src/main.cpp @@ -122,6 +122,22 @@ void proof_print(Proof &proof, const CommitmentParamsType& commitment_params, co print_hex_byteblob(out, cv.cbegin(), cv.cend(), false); } +struct ParametersPolicy { + constexpr static const std::size_t WitnessColumns = TRANSPILER_WITNESS_COLUMNS; + constexpr static const std::size_t PublicInputColumns = TRANSPILER_PUBLIC_INPUT_COLUMNS; + constexpr static const std::size_t ComponentConstantColumns = TRANSPILER_COMPONENT_CONSTANT_COLUMNS; + constexpr static const std::size_t LookupConstantColumns = TRANSPILER_LOOKUP_CONSTANT_COLUMNS; + constexpr static const std::size_t ComponentSelectorColumns = TRANSPILER_COMPONENT_SELECTOR_COLUMNS; + constexpr static const std::size_t LookupSelectorColumns = TRANSPILER_LOOKUP_SELECTOR_COLUMNS; + constexpr static const std::size_t lambda = TRANSPILER_LAMBDA; + constexpr static const std::size_t GrindingBits = TRANSPILER_GRINDING_BITS; + constexpr static const bool UseGrinding = GrindingBits != 0; +private: + using default_hash = nil::crypto3::hashes::keccak_1600<256>; +public: + using hash =default_hash; +}; + template int curve_dependent_main( boost::program_options::options_description options_desc, @@ -285,10 +301,10 @@ int curve_dependent_main( return 1; } - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = is_multi_prover ? 2 : 1; - constexpr std::size_t ConstantColumns = 35; - constexpr std::size_t SelectorColumns = 36; + constexpr std::size_t WitnessColumns = ParametersPolicy::WitnessColumns; + constexpr std::size_t PublicInputColumns = is_multi_prover ? ParametersPolicy::PublicInputColumns + 1 : ParametersPolicy::PublicInputColumns; + constexpr std::size_t ConstantColumns = ParametersPolicy::ComponentConstantColumns + ParametersPolicy::LookupConstantColumns;; + constexpr std::size_t SelectorColumns = ParametersPolicy::ComponentSelectorColumns + ParametersPolicy::LookupSelectorColumns; using ArithmetizationParams = nil::crypto3::zk::snark::plonk_arithmetization_params; using circuit_params = nil::crypto3::zk::snark::placeholder_circuit_params< BlueprintFieldType, ArithmetizationParams >; std::size_t table_rows_log = std::ceil(std::log2(table_description.rows_amount)); + using lpc_params_type = nil::crypto3::zk::commitments::list_polynomial_commitment_params< Hash, Hash, Lambda, - 2 + 2, + ParametersPolicy::UseGrinding, + nil::crypto3::zk::commitments::proof_of_work >; using lpc_type = nil::crypto3::zk::commitments::list_polynomial_commitment; using lpc_scheme_type = typename nil::crypto3::zk::commitments::lpc_commitment_scheme; @@ -400,7 +419,7 @@ int curve_dependent_main( auto fri_params = create_fri_params(table_rows_log); std::size_t permutation_size = - table_description.witness_columns + table_description.public_input_columns + table_description.constant_columns; + table_description.witness_columns + table_description.public_input_columns + ParametersPolicy::ComponentConstantColumns; lpc_scheme_type lpc_scheme(fri_params); @@ -496,8 +515,8 @@ int curve_dependent_main( std::cout << "Generating proof..." << std::endl; using ProofType = nil::crypto3::zk::snark::placeholder_proof; ProofType proof = nil::crypto3::zk::snark::placeholder_prover::process( - public_preprocessed_data, private_preprocessed_data, table_description, constraint_system, assignment_table, - lpc_scheme); + public_preprocessed_data, private_preprocessed_data, table_description, constraint_system, lpc_scheme + ); std::cout << "Proof generated" << std::endl; if( !vm.count("skip-verification") ) { diff --git a/build.sh b/build.sh new file mode 100755 index 00000000..0d428ca9 --- /dev/null +++ b/build.sh @@ -0,0 +1,5 @@ +set -e +cmake -G "Ninja" -B ${ZKLLVM_BUILD:-build} -DCMAKE_BUILD_TYPE=Release -DCIRCUIT_ASSEMBLY_OUTPUT=TRUE -DBUILD_TESTS=True -DGENERATE_EVM_VERIFIER=TRUE . +ninja -C ${ZKLLVM_BUILD:-build} assigner recursive_gen -j12 +cmake -G "Ninja" -B ${ZKLLVM_BUILD:-build_recursive} -DCMAKE_BUILD_TYPE=Release -DCIRCUIT_ASSEMBLY_OUTPUT=TRUE -DBUILD_TESTS=True -DGENERATE_EVM_VERIFIER=TRUE -DCOMPONENT_SELECTOR_COLUMNS=60 -DLOOKUP_CONSTANT_COLUMNS=0 -DLOOKUP_SELECTOR_COLUMNS=0 . +ninja -C ${ZKLLVM_BUILD:-build_recursive} assigner -j12 \ No newline at end of file diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt index 00e70ddb..bb38ae1e 100644 --- a/examples/cpp/CMakeLists.txt +++ b/examples/cpp/CMakeLists.txt @@ -91,6 +91,7 @@ function(add_example_with_proving example_target) endfunction() +add_example_without_proving(placeholder_verifier_cpp_example SOURCES placeholder_verifier.cpp INPUT placeholder_verifier.inp CURVE_TYPE pallas) add_example_with_proving(arithmetics_cpp_example SOURCES arithmetics.cpp INPUT arithmetics.inp CURVE_TYPE pallas) add_example_with_proving(integer_arithmetics_cpp_example SOURCES integer_arithmetics.cpp INPUT integer_arithmetics.inp CURVE_TYPE pallas) diff --git a/examples/cpp/placeholder_verifier.cpp b/examples/cpp/placeholder_verifier.cpp new file mode 100644 index 00000000..e6bc4caf --- /dev/null +++ b/examples/cpp/placeholder_verifier.cpp @@ -0,0 +1,475 @@ + +#include +#include +#include + +using namespace nil::crypto3; +using namespace nil::crypto3::algebra::curves; + +const size_t witness_amount = 15; +const size_t public_input_amount = 1; +const size_t constant_amount = 2; +const size_t selector_amount = 30; +const std::array public_input_sizes = {50}; +const std::size_t full_public_input_size = 50; + +namespace placeholder_verifier{ + +const bool use_lookups = false; +const size_t batches_num = 4; +const size_t commitments_num = 3; +const size_t points_num = 180; +const size_t poly_num = 107; +const size_t initial_proof_points_num = 1926; +const size_t round_proof_points_num = 72; +const size_t fri_roots_num = 4; +const size_t initial_merkle_proofs_num = 36; +const size_t initial_merkle_proofs_position_num = 54; +const size_t initial_merkle_proofs_hash_num = 216; +const size_t round_merkle_proofs_position_num = 162; +const size_t round_merkle_proofs_hash_num = 162; +const size_t final_polynomial_size = 2; +const size_t lambda = 9; +const size_t rows_amount = 32; +const size_t rows_log = 5; +const size_t total_columns = 48; +const size_t sorted_columns = 0; +const size_t permutation_size = 18; +const std::array zero_indices = {64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62}; +const size_t table_values_num = 80; +const size_t gates_amount = 4; +constexpr std::array gates_selector_indices = {0, 1, 2, 3}; +const size_t constraints_amount = 5; +const size_t quotient_polys_start = 160; +const size_t quotient_polys_amount = 20; +const size_t lookup_sorted_polys_start = 180; +const size_t D0_size = 128; +const size_t D0_log = 7; +const pallas::base_field_type::value_type D0_omega = pallas::base_field_type::value_type(0x1043c1060e0b904d84046899e774702473f9eb889953e9ca842ac3dcb8fba3be_cppui255); +const pallas::base_field_type::value_type omega = pallas::base_field_type::value_type(0x7fc67f0d2530e47f91f36ded523f7e7013069392919e4978abc6e0f780c038c_cppui255); +const size_t fri_rounds = 4; +const std::array gates_sizes = {1, 1, 1, 2}; +const size_t unique_points = 4; +const std::array point_ids = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +const size_t singles_amount = 3; +const std::array batches_amount_list = {70, 16, 1, 20}; + + + +struct placeholder_proof_type{ + std::array commitments; + pallas::base_field_type::value_type challenge; + std::array z; + std::array fri_roots; + std::array initial_proof_values; + std::array round_proof_values; + std::array initial_proof_positions; + std::array initial_proof_hashes; + std::array round_merkle_proof_positions; + std::array round_proof_hashes; + std::array final_polynomial; +}; + +struct placeholder_challenges_type{ + pallas::base_field_type::value_type fri_etha; + pallas::base_field_type::value_type perm_beta; + pallas::base_field_type::value_type perm_gamma; + pallas::base_field_type::value_type lookup_theta; + pallas::base_field_type::value_type lookup_gamma; + pallas::base_field_type::value_type lookup_beta; + std::array lookup_alphas; + pallas::base_field_type::value_type gate_theta; + std::array alphas; + std::array fri_alphas; + std::array fri_x_indices; + pallas::base_field_type::value_type lpc_theta; + pallas::base_field_type::value_type xi; +}; + +typedef __attribute__((ext_vector_type(2))) typename pallas::base_field_type::value_type permutation_argument_thetas_type; +typedef __attribute__((ext_vector_type(3))) typename pallas::base_field_type::value_type permutation_argument_output_type; + +struct placeholder_permutation_argument_input_type{ + std::array xi_values; + std::array id_perm; + std::array sigma_perm; + permutation_argument_thetas_type thetas; +}; + +struct transcript_state_type{ + std::array state; + std::size_t cur; +}; + +void transcript(transcript_state_type &tr_state, pallas::base_field_type::value_type value) { + if(tr_state.cur == 3){ + tr_state.state[0] = __builtin_assigner_poseidon_pallas_base({tr_state.state[0],tr_state.state[1],tr_state.state[2]})[2]; + tr_state.state[1] = pallas::base_field_type::value_type(0); + tr_state.state[2] = pallas::base_field_type::value_type(0); + tr_state.cur = 1; + } + tr_state.state[tr_state.cur] = value; + tr_state.cur++; +} + +pallas::base_field_type::value_type transcript_challenge(transcript_state_type &tr_state) { + tr_state.state[0] = __builtin_assigner_poseidon_pallas_base({tr_state.state[0], tr_state.state[1], tr_state.state[2]})[2]; + tr_state.state[1] = pallas::base_field_type::value_type(0); + tr_state.state[2] = pallas::base_field_type::value_type(0); + tr_state.cur = 1; + return tr_state.state[0]; +} + +pallas::base_field_type::value_type pow2_p(pallas::base_field_type::value_type x, size_t plog){ + if(plog == 0) return pallas::base_field_type::value_type(1); + pallas::base_field_type::value_type result = x; + for(std::size_t i = 0; i < plog; i++){ + result = result * result; + } + return result; +} + +pallas::base_field_type::value_type pow2(pallas::base_field_type::value_type x){ + return x*x; +} + +pallas::base_field_type::value_type pow3(pallas::base_field_type::value_type x){ + return x*x*x; +} + +pallas::base_field_type::value_type pow4(pallas::base_field_type::value_type x){ + pallas::base_field_type::value_type result = x * x; + result = result * result; + return result; +} + +pallas::base_field_type::value_type pow5(pallas::base_field_type::value_type x){ + pallas::base_field_type::value_type result = x * x; + result = result * result; + return result * x; +} + +pallas::base_field_type::value_type pow6(pallas::base_field_type::value_type x){ + pallas::base_field_type::value_type result = x * x * x; + result = result * result; + return result; +} + +pallas::base_field_type::value_type pow7(pallas::base_field_type::value_type x){ + pallas::base_field_type::value_type result = x * x * x; + result = result * result; + return result * x; +} + +pallas::base_field_type::value_type pow8(pallas::base_field_type::value_type x){ + pallas::base_field_type::value_type result = x * x; + result = result * result; + return result * result; +} + +pallas::base_field_type::value_type pow9(pallas::base_field_type::value_type x){ + pallas::base_field_type::value_type result = x; + result = result * result; + result = result * result; + result = result * result; + result = result * x; + return result; +} + +pallas::base_field_type::value_type pow(pallas::base_field_type::value_type x, size_t p){ + pallas::base_field_type::value_type result = 1; + std::size_t mask = 1; + while(mask < p){mask = mask * 2;} // 8 + while(mask > 1){ + result = result * result; + mask = mask / 2; + if( p >= mask ){ + result = result * x; + p = p - mask; + } + } + return result; +} + +std::array fill_singles( + pallas::base_field_type::value_type xi, + pallas::base_field_type::value_type etha +){ + std::array singles; + singles[0] = etha; + singles[1] = xi; + singles[2] = xi*omega; +; + return singles; +} + +placeholder_challenges_type generate_challenges( + const std::array &vk, + const placeholder_proof_type &proof +){ + placeholder_challenges_type challenges; + + transcript_state_type tr_state; + tr_state.state[0] = pallas::base_field_type::value_type(0); + tr_state.state[1] = pallas::base_field_type::value_type(0); + tr_state.state[2] = pallas::base_field_type::value_type(0); + tr_state.cur = 1; + + transcript(tr_state, vk[0]); + transcript(tr_state, vk[1]); + + // LPC additional point + challenges.fri_etha = transcript_challenge(tr_state); + + transcript(tr_state, proof.commitments[0]); + + challenges.perm_beta = transcript_challenge(tr_state); + challenges.perm_gamma = transcript_challenge(tr_state); + + // Call lookup argument + if( use_lookups ){ + challenges.lookup_theta = transcript_challenge(tr_state); + transcript(tr_state, proof.commitments[3]); + challenges.lookup_beta = transcript_challenge(tr_state); + challenges.lookup_gamma = transcript_challenge(tr_state); + + for(std::size_t i = 0; i < sorted_columns-1; i++){ + challenges.lookup_alphas[i] = transcript_challenge(tr_state); + } + } + + // Call gate argument + transcript(tr_state, proof.commitments[1]); + challenges.gate_theta = transcript_challenge(tr_state); + + for(std::size_t i = 0; i < 8; i++){ + challenges.alphas[i] = transcript_challenge(tr_state); + } + transcript(tr_state, proof.commitments[2]); + + challenges.xi = transcript_challenge(tr_state); + + transcript(tr_state, vk[1]); + for(std::size_t i = 0; i < proof.commitments.size(); i++){ + transcript(tr_state, proof.commitments[i]); + } + + challenges.lpc_theta = transcript_challenge(tr_state); + + for(std::size_t i = 0; i < fri_roots_num; i++){ + transcript(tr_state, proof.fri_roots[i]); + challenges.fri_alphas[i] = transcript_challenge(tr_state); + } + + for(std::size_t i = 0; i < lambda; i++){ + challenges.fri_x_indices[i] = transcript_challenge(tr_state); + } + + return challenges; +} + +std::pair xi_polys( + pallas::base_field_type::value_type xi +){ + pallas::base_field_type::value_type xi_n = pow2_p(xi, rows_log) - pallas::base_field_type::value_type(1); + pallas::base_field_type::value_type l0 = (xi - pallas::base_field_type::value_type(1))*pallas::base_field_type::value_type(rows_amount); + l0 = xi_n / l0; + return std::make_pair(l0, xi_n); +} + +std::array calculate_constraints(std::array z){ + std::array constraints; + constraints[0] = ((z[142] + z[143]) - z[144]); + constraints[1] = (z[142] * z[143] - z[144]); + constraints[2] = ((z[142] - z[143]) - z[144]); + constraints[3] = (z[143] * z[144] - z[142]); + constraints[4] = (z[143] * z[145] - pallas::base_field_type::value_type(0x1_cppui255)); + + + return constraints; +} + + + +typename pallas::base_field_type::value_type + gate_argument_verifier( + std::array selectors, + std::array constraints, + typename pallas::base_field_type::value_type theta + ) { + + return __builtin_assigner_gate_arg_verifier( + selectors.data(), + (int*)&gates_sizes, + gates_amount, + constraints.data(), + constraints_amount, + theta + ); +} + +std::array getV3( + pallas::base_field_type::value_type xi0,pallas::base_field_type::value_type xi1,pallas::base_field_type::value_type xi2 +){ + std::array result; + result[0] = - xi0 * xi1 * xi2; + result[1] = xi0 * xi1 + xi1 * xi2 + xi0 * xi2; + result[2] = - xi0 - xi1 - xi2; + result[3] = pallas::base_field_type::value_type(1); +// __builtin_assigner_exit_check(result[0] + xi0 * result[1] + xi0 * xi0 * result[2] + xi0*xi0*xi0*result[3] == pallas::base_field_type::value_type(0)); + return result; +} + +std::array getV2( + pallas::base_field_type::value_type xi0,pallas::base_field_type::value_type xi1 +){ + std::array result; + result[0] = xi0 * xi1; + result[1] = - xi0 - xi1; + result[2] = pallas::base_field_type::value_type(1); + result[3] = pallas::base_field_type::value_type(0); +// __builtin_assigner_exit_check(result[0] + xi0 * result[1] + xi0 * xi0 * result[2] + xi0*xi0*xi0*result[3] == pallas::base_field_type::value_type(0)); + return result; +} + +std::array getV1( + pallas::base_field_type::value_type xi0 +){ + std::array result; + result[0] = - xi0; + result[1] = pallas::base_field_type::value_type(1); + result[2] = pallas::base_field_type::value_type(0); + result[3] = pallas::base_field_type::value_type(0); +// __builtin_assigner_exit_check(result[0] + xi0 * result[1] + xi0 * xi0 * result[2] + xi0*xi0*xi0*result[3] == pallas::base_field_type::value_type(0)); + return result; +} + +std::array getU3( + pallas::base_field_type::value_type x0,pallas::base_field_type::value_type x1,pallas::base_field_type::value_type x2, + pallas::base_field_type::value_type z0,pallas::base_field_type::value_type z1,pallas::base_field_type::value_type z2 +){ + std::array result; + pallas::base_field_type::value_type denom = (x0-x1)*(x1-x2)*(x2-x0); + + z0 = z0 * (x2-x1); + z1 = z1 * (x0-x2); + z2 = z2 * (x1-x0); + + result[0] = (z0*x1*x2 + z1*x0*x2 + z2*x0*x1)/denom; + result[1] = (-z0*(x1 + x2) - z1*(x0 + x2) - z2 * (x0 + x1))/denom; + result[2] = (z0 + z1 + z2)/denom; + +// __builtin_assigner_exit_check(result[0] + x0 * result[1] + x0 * x0 * result[2] == z0/(x2-x1)); +// __builtin_assigner_exit_check(result[0] + x1 * result[1] + x1 * x1 * result[2] == z1/(x0-x2)); +// __builtin_assigner_exit_check(result[0] + x2 * result[1] + x2 * x2 * result[2] == z2/(x1-x0)); + + return result; +} + +std::array getU2( + pallas::base_field_type::value_type x0,pallas::base_field_type::value_type x1, + pallas::base_field_type::value_type z0,pallas::base_field_type::value_type z1 +){ + std::array result; + pallas::base_field_type::value_type denom = (x0-x1); + result[0] = (-z0*x1 + z1*x0)/denom; + result[1] = (z0 - z1)/denom; + result[2] = pallas::base_field_type::value_type(0); + +// __builtin_assigner_exit_check(result[0] + x0 * result[1] + x0 * x0 * result[2] == z0); +// __builtin_assigner_exit_check(result[0] + x1 * result[1] + x1 * x1 * result[2] == z1); + + return result; +} + +std::array getU1( + pallas::base_field_type::value_type x0, + pallas::base_field_type::value_type z0 +){ + std::array result; + result[0] = z0; + result[1] = pallas::base_field_type::value_type(0); + result[2] = pallas::base_field_type::value_type(0); + +// __builtin_assigner_exit_check(result[0] + x0 * result[1] + x0 * x0 * result[2] == z0); + + return result; +} + +pallas::base_field_type::value_type eval4(std::array poly, pallas::base_field_type::value_type x){ + pallas::base_field_type::value_type result; + result = poly[3]; + result = result *x + poly[2]; + result = result *x + poly[1]; + result = result *x + poly[0]; +// __builtin_assigner_exit_check(poly[0] + x * poly[1] + x * x * poly[2] + x*x*x*poly[3] == result); + return result; +} + +pallas::base_field_type::value_type eval3(std::array poly, pallas::base_field_type::value_type x){ + pallas::base_field_type::value_type result; + result = poly[2]; + result = result *x + poly[1]; + result = result *x + poly[0]; +// __builtin_assigner_exit_check(poly[0] + x * poly[1] + x * x * poly[2] == result); + return result; +} + +pallas::base_field_type::value_type calculate_leaf_hash( + std::array val, + std::size_t start_index, + std::size_t leaf_size +){ + pallas::base_field_type::value_type hash_state = pallas::base_field_type::value_type(0); + for(std::size_t pos = 0; pos < leaf_size; pos+=2){ + hash_state = __builtin_assigner_poseidon_pallas_base( + {hash_state, val[start_index + pos], val[start_index + pos+1]} + )[2]; + } + return hash_state; +} + +pallas::base_field_type::value_type calculate_reversed_leaf_hash( + std::array &val, + std::size_t start_index, + std::size_t leaf_size +){ + pallas::base_field_type::value_type hash_state = pallas::base_field_type::value_type(0); + for(std::size_t pos = 0; pos < leaf_size; pos+=2){ + hash_state = __builtin_assigner_poseidon_pallas_base( + {hash_state, val[start_index + pos + 1], val[start_index + pos]} + )[2]; + } + return hash_state; +} +struct precomputed_values_type{ + pallas::base_field_type::value_type l0; + pallas::base_field_type::value_type Z_at_xi; + pallas::base_field_type::value_type F_consolidated; + pallas::base_field_type::value_type T_consolidated; +}; + +constexpr std::size_t L0_IND = 0; +constexpr std::size_t Z_AT_XI_IND = 1; +constexpr std::size_t F_CONSOLIDATED_IND = 2; +constexpr std::size_t T_CONSOLIDATED_IND = 3; + +typedef __attribute__((ext_vector_type(2))) + typename pallas::base_field_type::value_type pair_type; + +typedef __attribute__((ext_vector_type(4))) + typename pallas::base_field_type::value_type lookup_output_type; + +typedef __attribute__((ext_vector_type(2))) + typename pallas::base_field_type::value_type pair_type; + + +[[circuit]] bool placeholder_verifier( + std::array public_input, + std::array vk, + placeholder_proof_type proof +) { + return true; +} + +} diff --git a/examples/inputs/placeholder_verifier.inp b/examples/inputs/placeholder_verifier.inp new file mode 100644 index 00000000..a7acbfad --- /dev/null +++ b/examples/inputs/placeholder_verifier.inp @@ -0,0 +1,2862 @@ +[ + {"array":[ + {"field": "5"}, + {"field": "11"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"}, + {"field": "0"} + ]}, + {"array":[ + {"field": "7576215247106867240019461833229357905956206304999349957150123022063020334133"}, + {"field": "8090937590311728785219190979426699959488392039995217483613464913103028929965"} + ]}, + {"struct":[ + {"array":[ + {"field": "27327117943401931305209283916354615646180230603000589752328427069410935482697"}, + {"field": "18750817189248351217501419131195062033702312529292568846964546830533939163106"}, + {"field": "27639587564251664542569837941474590769305970505918767348675656745782474708135"} + ]}, + {"field": "12571636330551125985507121847903393814165276784644780956795282146919958786612"}, + {"array":[ + {"field":"12571636330551125985507121847903393814165276784644780956795282146919958786612"}, + {"field":"23474857595836880393060519094619869818571882960201426757792201766293255827967"}, + {"field":"4962137034097532215750116735173015144100270959340783352067057205899858672386"}, + {"field":"1582198741868206541731610464411441239407188873240890925142301774066408618487"}, + {"field":"24810685170487661078750583675865075720501354796703916760335286029499293361930"}, + {"field":"7910993709341032708658052322057206197035944366204454625711508870332043092435"}, + {"field":"8261336615122109970181933370637470749054548055753340937857723090096596288302"}, + {"field":"10606946237376114687397515358114054021816665349080712412602867587310247831838"}, + {"field":"12358660766281500995016920601015376781909683796825143973333938686133013811173"}, + {"field":"24086708877551524581094830538398293145720270263462001347059661172201271528853"}, + {"field":"3897259212749407263299110500732929982822306020242598434760339901965133795191"}, + {"field":"4641455150441427481903167683303557875149125389543763871479598803606487122917"}, + {"field":"19486296063747036316495552503664649914111530101212992173801699509825668975955"}, + {"field":"23207275752207137409515838416517789375745626947718819357397994018032435614585"}, + {"field":"10587413390748035014799523761807318680468481060240278721144467256078441988764"}, + {"field":"244289523719491624008207073901039025275908810827853923171263032762307551577"}, + {"field":"23989044644411126218104872556864616438979348819259832889767659516042242313483"}, + {"field":"1221447618597458120041035369505195126379544054139269615856315163811537757885"}, + {"field":"4153133984739435666953377775635174341444518168532921585019590522811341046067"}, + {"field":"6107238092987290600205176847525975631897720270696348079281575819057688789425"}, + {"field":"20765669923697178334766888878175871707222590842664607925097952614056705230335"}, + {"field":"1588168155607404145133137985457901196125544871540179680453202330938476316788"}, + {"field":"16984282690498745106156205634363427646023784767498357477625732777233623260664"}, + {"field":"7940840778037020725665689927289505980627724357700898402266011654692381583940"}, + {"field":"27025368833835627818995535667473184303392810873608665956219310357468181042646"}, + {"field":"10756181580856054772435703384275552939775565306562931295375381509111940289363"}, + {"field":"19334754931861943671406693328678013663511828440277086917277844729941034691882"}, + {"field":"24832885594951225006285770669205787735514770050873095760922230781209733816478"}, + {"field":"9829707731322571789355227886874137427469972755560752438525193356655270568399"}, + {"field":"8372338737439929607857868337341030824121624326599235940792446848648798561042"}, + {"field":"20200516347283810090883393182198710173986807295862201476671290018926385211658"}, + {"field":"12913671377870599183396595434533177157245065151054618988007557478894025174873"}, + {"field":"14158514808431903886738727154477619979844867033486325235492419801582023167279"}, + {"field":"6672312270694898205197484668321931859499212791389973508128433865770190613691"}, + {"field":"12896529423501421721908143268044145972498222203548504745552745479210180575721"}, + {"field":"4413539044145442170094677089437682334133007475008306824687492564500985438118"}, + {"field":"21701444180330419573661884627991563668404220986177970860924534916188795410351"}, + {"field":"12545359197737717038057372178771722269131321983630152942415331417289484745630"}, + {"field":"19681824046487396601194075889740507623903908928460486032211184269741421467298"}, + {"field":"3012798112751425152645578987952584913226108407331345106219439171693341526115"}, + {"field":"5093027594429942502045396636043092477522060406575594769285877246834155887124"}, + {"field":"9363381628016041729403149250970176130962467195340043943107097273925151911894"}, + {"field":"8261336615122109970181933370637470749054548055753340937857723090096596288302"}, + {"field":"10606946237376114687397515358114054021816665349080712412602867587310247831838"}, + {"field":"12358660766281500995016920601015376781909683796825143973333938686133013811173"}, + {"field":"24086708877551524581094830538398293145720270263462001347059661172201271528853"}, + {"field":"3897259212749407263299110500732929982822306020242598434760339901965133795191"}, + {"field":"4641455150441427481903167683303557875149125389543763871479598803606487122917"}, + {"field":"19486296063747036316495552503664649914111530101212992173801699509825668975955"}, + {"field":"23207275752207137409515838416517789375745626947718819357397994018032435614585"}, + {"field":"10587413390748035014799523761807318680468481060240278721144467256078441988764"}, + {"field":"244289523719491624008207073901039025275908810827853923171263032762307551577"}, + {"field":"23989044644411126218104872556864616438979348819259832889767659516042242313483"}, + {"field":"1221447618597458120041035369505195126379544054139269615856315163811537757885"}, + {"field":"4153133984739435666953377775635174341444518168532921585019590522811341046067"}, + {"field":"6107238092987290600205176847525975631897720270696348079281575819057688789425"}, + {"field":"20765669923697178334766888878175871707222590842664607925097952614056705230335"}, + {"field":"1588168155607404145133137985457901196125544871540179680453202330938476316788"}, + {"field":"16984282690498745106156205634363427646023784767498357477625732777233623260664"}, + {"field":"7940840778037020725665689927289505980627724357700898402266011654692381583940"}, + {"field":"27025368833835627818995535667473184303392810873608665956219310357468181042646"}, + {"field":"10756181580856054772435703384275552939775565306562931295375381509111940289363"}, + {"field":"19334754931861943671406693328678013663511828440277086917277844729941034691882"}, + {"field":"24832885594951225006285770669205787735514770050873095760922230781209733816478"}, + {"field":"9829707731322571789355227886874137427469972755560752438525193356655270568399"}, + {"field":"8372338737439929607857868337341030824121624326599235940792446848648798561042"}, + {"field":"10151960202463379830434948977353687035156190018356797642906678227329143126881"}, + {"field":"26436579796992823739330524986171034330160473466120937236195313199742188654082"}, + {"field":"14158514808431903886738727154477619979844867033486325235492419801582023167279"}, + {"field":"6672312270694898205197484668321931859499212791389973508128433865770190613691"}, + {"field":"26539566517309121519568411379565286469171651479547471821273625129714496688630"}, + {"field":"26544257345144387376081612376974901092690782114562317558790044385578490378750"}, + {"field":"5955091267954177175157005529696266359201168946580395648424127487486365126889"}, + {"field":"15279315620956658862321479494347333180787527684957818680787551775940889706920"}, + {"field":"21293380760284824553835996913737184032472565196772894659181622080614193939684"}, + {"field":"6476577510564235737538857265337640638515636319851232190567770371806280154558"}, + {"field":"7707934001514185955521079955704805199318185402567610962063058070986062700544"}, + {"field":"23027167912363774310283890774396383695727287573323263068830396404098787725513"}, + {"field":"0"}, + {"field":"0"}, + {"field":"15775299015238729473502802836164737372997609532912966766230727834158948167167"}, + {"field":"6089375057582586585657076007093271814626438592348680258499992366232170364034"}, + {"field":"7041472029234722918907199965698693283852625430354553140791903547270010125221"}, + {"field":"6426178005485589125577435793960995918190456901208209190786075319175450090309"}, + {"field":"28232315570921381337843847899358072964655849249511098167883011674277504190352"}, + {"field":"25661060859334817973352633604531637139941548137027210142360570106206837250490"}, + {"field":"12569288917070210586418623950659400500320542809667487228484224416596145816323"}, + {"field":"7484852010127609458549812416388428491504583308076015377787682670719660173497"}, + {"field":"20245578496205394501541567419164967832108580988863355793613844273048786825367"}, + {"field":"10663007820759273755424048175673262529862301869724217529575956345989556847274"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"19040965597271514667879440429657643852937590605520467607908412018779399664067"}, + {"field":"10354227539563461115577382488331389298676138892358915320804243622727154909773"}, + {"field":"11415790420870548714646990092372149245307304373534902641388434455964434923771"}, + {"field":"27497615007141773130167549780004142108153977233095193228897871349133104162842"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"17972721357709623171758807090965044557366072697850074955558385621916029689838"}, + {"field":"9720238603260960918968852568014116752771986639701804367852551461333864254747"}, + {"field":"3720032846926326396215075058345944677861921372431520647346935976109000312899"}, + {"field":"13058198991930857844430052231059238689349613345853597297317336139571535385363"}, + {"field":"11577691527375385550727948163083282972528560907374488867272377862389635290111"}, + {"field":"15443694340024241971854261568634033479445452306544532178915624071464905994515"}, + {"field":"1903913592086183076512725507654648362043042616517918911846186541425569824732"}, + {"field":"16513482808485129168111893444874316455763148594743176398457391377475520098283"}, + {"field":"18801951404965801525706151341241467850780337948204119562826387952355243947224"}, + {"field":"20440633966312014812907328234256370449254702180692989564781853017248116655966"}, + {"field":"3810946196863470799745187019986714186604240351749068112510338271764421939356"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"} + ]}, + {"array": [ + {"field": "25332101222537666790798942024744459363374261867969641285182854789330281635300"}, + {"field": "23393279894285891325818639213508148046839957379912942835026295272198476017847"}, + {"field": "21703112893476118836099653529057591530658353685259876153822060040427230280703"}, + {"field": "3620913182177236566549686056964777611074287010134530433263854622991717075387"} + ]}, + {"array": [ + {"field":"21458672170686283467215596992577008101911766366152753062371778095676048576657"}, + {"field":"7489350138642765388677149259594968861451290115788807653582898668673919053680"}, + {"field":"20449293925444270768399746206369109619469662384939083163994860185330339992274"}, + {"field":"8498728383884778087493000045802867343893394097002477551959816579019627638063"}, + {"field":"15402402699234207274320492275329617207259142478870733672110270633601797070359"}, + {"field":"13545619610094841581572253976842359756103914003070827043844406130748170559978"}, + {"field":"19115968877512938659816968872304132109569599430470546928641999639309050091121"}, + {"field":"9832053431816110196075777379867844853793457051471013787312677125040917539216"}, + {"field":"8735777459577546731406605605004729657758827706528052495345967903495347564594"}, + {"field":"20212244849751502124486140647167247305604228775413508220608708860854620065743"}, + {"field":"14730864988558684801140281772851671325431082050698701760775162753126770192633"}, + {"field":"14217157320770364054752464479320305637931974431242858955179514011223197437704"}, + {"field":"15758280324135326293915916359914402700429297289610387371966460236933915702491"}, + {"field":"13189741985193722561976829892257574262933759192331173343988216527416051927846"}, + {"field":"20895357002018533757794089295228059575420373484168815427922947655969643251781"}, + {"field":"8052665307310515098098656956943917387942682997772745288031729108380324378556"}, + {"field":"17632718082105522221292207719624366987012697975019394991750707986798313367894"}, + {"field":"11315304227223526634600538532547609976350358506922165724203968777551654262443"}, + {"field":"1319523482540464538782799841605904044974320429272292810889509640941663948459"}, + {"field":"27628498826788584317109946410566072918388736052669267905065167123408303681878"}, + {"field":"6597617412702322693913999208029520224871602146361464054447548204708319742295"}, + {"field":"22350404896626726161978747044142456738491454335580096661507128559641647888042"}, + {"field":"4040064754182564613677249787975624160994954249865759556283064259191631081138"}, + {"field":"24907957555146484242215496464196352802368102232075801159671612505158336549199"}, + {"field":"20200323770912823068386248939878120804974771249328797781415321295958155405690"}, + {"field":"8747698538416225787506497312293856158388285232612762934539355468391812224647"}, + {"field":"14157551926576968774253005942874673134784686800819306759212576186740874137439"}, + {"field":"14790470382752080081639740309297303828578369681122253956742100577609093492898"}, + {"field":"12891715014226746159479537210029411747197321040213412364153527405004435426521"}, + {"field":"16056307295102302696413209042142565216165735441728148351801149359345532203816"}, + {"field":"6562530452475633085612193545803104809260492237183940388858283496322241871931"}, + {"field":"22385491856853415770280552706368872154102564244757620327096393268027725758406"}, + {"field":"3864629953049116572168221476843547082939404703978141228336740717261241729318"}, + {"field":"25083392356279932283724524775328429880423651777963419487617936047088725901019"}, + {"field":"19323149765245582860841107384217735414697023519890706141683703586306208646590"}, + {"field":"9624872544083465995051638867954241548666032962050854574270973178043758983747"}, + {"field":"2876305839492518588027004943047327790745306520230680045005471013921801902122"}, + {"field":"17814153704803890715489202805847031019735634300078871894822320698262158945727"}, + {"field":"18212066747733699402610021710389439310771056878391454451433067234904950919266"}, + {"field":"21283432762352969107371527031766172872201542362176591460582072689284930866080"}, + {"field":"11152132654967432087221201915557935155958084695047931819073131101930112487696"}, + {"field":"28880154894981643290076945463662419955955238843553900660800678594469082177737"}, + {"field":"19115968877512938659816968872304132109569599430470546928641999639309050091121"}, + {"field":"9832053431816110196075777379867844853793457051471013787312677125040917539216"}, + {"field":"8735777459577546731406605605004729657758827706528052495345967903495347564594"}, + {"field":"20212244849751502124486140647167247305604228775413508220608708860854620065743"}, + {"field":"14730864988558684801140281772851671325431082050698701760775162753126770192633"}, + {"field":"14217157320770364054752464479320305637931974431242858955179514011223197437704"}, + {"field":"15758280324135326293915916359914402700429297289610387371966460236933915702491"}, + {"field":"13189741985193722561976829892257574262933759192331173343988216527416051927846"}, + {"field":"20895357002018533757794089295228059575420373484168815427922947655969643251781"}, + {"field":"8052665307310515098098656956943917387942682997772745288031729108380324378556"}, + {"field":"17632718082105522221292207719624366987012697975019394991750707986798313367894"}, + {"field":"11315304227223526634600538532547609976350358506922165724203968777551654262443"}, + {"field":"1319523482540464538782799841605904044974320429272292810889509640941663948459"}, + {"field":"27628498826788584317109946410566072918388736052669267905065167123408303681878"}, + {"field":"6597617412702322693913999208029520224871602146361464054447548204708319742295"}, + {"field":"22350404896626726161978747044142456738491454335580096661507128559641647888042"}, + {"field":"4040064754182564613677249787975624160994954249865759556283064259191631081138"}, + {"field":"24907957555146484242215496464196352802368102232075801159671612505158336549199"}, + {"field":"20200323770912823068386248939878120804974771249328797781415321295958155405690"}, + {"field":"8747698538416225787506497312293856158388285232612762934539355468391812224647"}, + {"field":"14157551926576968774253005942874673134784686800819306759212576186740874137439"}, + {"field":"14790470382752080081639740309297303828578369681122253956742100577609093492898"}, + {"field":"12891715014226746159479537210029411747197321040213412364153527405004435426521"}, + {"field":"16056307295102302696413209042142565216165735441728148351801149359345532203816"}, + {"field":"22462313909863538251094723734413502131963876408869455847893905413545372708605"}, + {"field":"9286141892161761195421113716487572331058347582772577008481679856571089608953"}, + {"field":"3864629953049116572168221476843547082939404703978141228336740717261241729318"}, + {"field":"25083392356279932283724524775328429880423651777963419487617936047088725901019"}, + {"field":"16653841468694159871105887626326552216754406549189822057647939338812549394163"}, + {"field":"19461174769731583977467347795071456413197187922314598170925641660292487792230"}, + {"field":"15922221250323697324672783389740294631052392388426227592503370185265443740349"}, + {"field":"4631251332490646173656565018889930696175436906074225227462755491611311868531"}, + {"field":"21166769675020943594767635678458779776728136686011860467269840325460971635420"}, + {"field":"4826290600683703253147751606440899836690274945930232771806876866257201349879"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1056075666119022570470343559521763022933777761955618442446485603415285795751"}, + {"field":"1347463358795799688500220669105308090799825275247078044088591749355947012025"}, + {"field":"9994537569740565359332298580350074601193397838168011611574208058386645156810"}, + {"field":"19839775823685536216370629645986496231109904478909482967456279708202923288926"}, + {"field":"1357173120356241977333953279387045629332593302874892840363766479646346563822"}, + {"field":"23701670330897770098097322100251000965117883698664248317904995063925909392983"}, + {"field":"28236605519631741588019943734985596617698376400082534161298179410822726049532"}, + {"field":"12479917444803422207675796992336238420845347521026520781264505286989941746611"}, + {"field":"21886663476459364644039889402044229287089165634053219172989299378663252090483"}, + {"field":"6690295678256258690264549116888977737200784241428440906956024758235338253639"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"28914210238820264385858170397244535998825599419503742011065360036334632556870"}, + {"field":"11404257755716453225350062042527048981108933072285522475759434551607441462684"}, + {"field":"23449084750482223843570607526771709685522369322937086017067750250595746421258"}, + {"field":"11098758532364739817074241358754469646136767180231663848169177791740643868145"}, + {"field":"11668279455659614532104660842707402867305653531518755863338143414137244679974"}, + {"field":"13431892748851264183852886171160491279723069999448897199992305103780704654356"}, + {"field":"27771129170517434820583936777150685683984074673960170458793780533402181707028"}, + {"field":"15589060434373900876323797978900818104548325614542187175803342508547540190775"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"27084034195874935151283556075433089838754270381368154306012718752390394744840"}, + {"field":"24167544541145989310901090456193817984246760189807217850309802878979209242624"}, + {"field":"15037454985352894866280640978652622698236742289931721415616366308126772709797"}, + {"field":"11049136813692278502926170468629747334390714147911464037645588078725191130466"}, + {"field":"11101798403718243541543498504358006765638182739852348902426732754302441412895"}, + {"field":"8355814807733862516284163535283206445041489658778014690769653712671229241012"}, + {"field":"6704588228414668039495449033235672717113777449939242881519092417576542544"}, + {"field":"22898144539364002315664663818841251703046759060018691788367326376036612336064"}, + {"field":"24362609472995323396204488259918460280315042806647698555167836713861964836799"}, + {"field":"15031404029354738010467997567231643478813608505832038045880437424630432803180"}, + {"field":"5636635028488814650482155172095208391436197231359005504217739413523087294858"}, + {"field":"25964054926870006298301435168358339115436662292125489047038222461453942944491"}, + {"field":"23138664936588153178237599312814715739945398980031839251843742483240548096309"}, + {"field":"19026965595845226447401857804623521047445515255904204164606093681736528811169"}, + {"field":"10931679369551080011688663019913730445472020382507325623346883916930494953655"}, + {"field":"8589860883553546240921273372560786779954193084934011999015902770752721499224"}, + {"field":"2212411918828922073504374802288191383249607628884041571385787068041154002277"}, + {"field":"25002071651721544233680752572175342292616730368898961808908271148556673846173"}, + {"field":"21925665994389793284061307411638260393227827326391277506279109402428327761708"}, + {"field":"11860907263904526863649938974227890690286081290399375359369539804387347498633"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"7489350138642765388677149259594968861451290115788807653582898668673919053680"}, + {"field":"21458672170686283467215596992577008101911766366152753062371778095676048576657"}, + {"field":"8498728383884778087493000045802867343893394097002477551959816579019627638063"}, + {"field":"20449293925444270768399746206369109619469662384939083163994860185330339992274"}, + {"field":"13545619610094841581572253976842359756103914003070827043844406130748170559978"}, + {"field":"15402402699234207274320492275329617207259142478870733672110270633601797070359"}, + {"field":"9832053431816110196075777379867844853793457051471013787312677125040917539216"}, + {"field":"19115968877512938659816968872304132109569599430470546928641999639309050091121"}, + {"field":"20212244849751502124486140647167247305604228775413508220608708860854620065743"}, + {"field":"8735777459577546731406605605004729657758827706528052495345967903495347564594"}, + {"field":"14217157320770364054752464479320305637931974431242858955179514011223197437704"}, + {"field":"14730864988558684801140281772851671325431082050698701760775162753126770192633"}, + {"field":"13189741985193722561976829892257574262933759192331173343988216527416051927846"}, + {"field":"15758280324135326293915916359914402700429297289610387371966460236933915702491"}, + {"field":"8052665307310515098098656956943917387942682997772745288031729108380324378556"}, + {"field":"20895357002018533757794089295228059575420373484168815427922947655969643251781"}, + {"field":"11315304227223526634600538532547609976350358506922165724203968777551654262443"}, + {"field":"17632718082105522221292207719624366987012697975019394991750707986798313367894"}, + {"field":"27628498826788584317109946410566072918388736052669267905065167123408303681878"}, + {"field":"1319523482540464538782799841605904044974320429272292810889509640941663948459"}, + {"field":"22350404896626726161978747044142456738491454335580096661507128559641647888042"}, + {"field":"6597617412702322693913999208029520224871602146361464054447548204708319742295"}, + {"field":"24907957555146484242215496464196352802368102232075801159671612505158336549199"}, + {"field":"4040064754182564613677249787975624160994954249865759556283064259191631081138"}, + {"field":"8747698538416225787506497312293856158388285232612762934539355468391812224647"}, + {"field":"20200323770912823068386248939878120804974771249328797781415321295958155405690"}, + {"field":"14790470382752080081639740309297303828578369681122253956742100577609093492898"}, + {"field":"14157551926576968774253005942874673134784686800819306759212576186740874137439"}, + {"field":"16056307295102302696413209042142565216165735441728148351801149359345532203816"}, + {"field":"12891715014226746159479537210029411747197321040213412364153527405004435426521"}, + {"field":"22385491856853415770280552706368872154102564244757620327096393268027725758406"}, + {"field":"6562530452475633085612193545803104809260492237183940388858283496322241871931"}, + {"field":"25083392356279932283724524775328429880423651777963419487617936047088725901019"}, + {"field":"3864629953049116572168221476843547082939404703978141228336740717261241729318"}, + {"field":"9624872544083465995051638867954241548666032962050854574270973178043758983747"}, + {"field":"19323149765245582860841107384217735414697023519890706141683703586306208646590"}, + {"field":"17814153704803890715489202805847031019735634300078871894822320698262158945727"}, + {"field":"2876305839492518588027004943047327790745306520230680045005471013921801902122"}, + {"field":"21283432762352969107371527031766172872201542362176591460582072689284930866080"}, + {"field":"18212066747733699402610021710389439310771056878391454451433067234904950919266"}, + {"field":"28880154894981643290076945463662419955955238843553900660800678594469082177737"}, + {"field":"11152132654967432087221201915557935155958084695047931819073131101930112487696"}, + {"field":"9832053431816110196075777379867844853793457051471013787312677125040917539216"}, + {"field":"19115968877512938659816968872304132109569599430470546928641999639309050091121"}, + {"field":"20212244849751502124486140647167247305604228775413508220608708860854620065743"}, + {"field":"8735777459577546731406605605004729657758827706528052495345967903495347564594"}, + {"field":"14217157320770364054752464479320305637931974431242858955179514011223197437704"}, + {"field":"14730864988558684801140281772851671325431082050698701760775162753126770192633"}, + {"field":"13189741985193722561976829892257574262933759192331173343988216527416051927846"}, + {"field":"15758280324135326293915916359914402700429297289610387371966460236933915702491"}, + {"field":"8052665307310515098098656956943917387942682997772745288031729108380324378556"}, + {"field":"20895357002018533757794089295228059575420373484168815427922947655969643251781"}, + {"field":"11315304227223526634600538532547609976350358506922165724203968777551654262443"}, + {"field":"17632718082105522221292207719624366987012697975019394991750707986798313367894"}, + {"field":"27628498826788584317109946410566072918388736052669267905065167123408303681878"}, + {"field":"1319523482540464538782799841605904044974320429272292810889509640941663948459"}, + {"field":"22350404896626726161978747044142456738491454335580096661507128559641647888042"}, + {"field":"6597617412702322693913999208029520224871602146361464054447548204708319742295"}, + {"field":"24907957555146484242215496464196352802368102232075801159671612505158336549199"}, + {"field":"4040064754182564613677249787975624160994954249865759556283064259191631081138"}, + {"field":"8747698538416225787506497312293856158388285232612762934539355468391812224647"}, + {"field":"20200323770912823068386248939878120804974771249328797781415321295958155405690"}, + {"field":"14790470382752080081639740309297303828578369681122253956742100577609093492898"}, + {"field":"14157551926576968774253005942874673134784686800819306759212576186740874137439"}, + {"field":"16056307295102302696413209042142565216165735441728148351801149359345532203816"}, + {"field":"12891715014226746159479537210029411747197321040213412364153527405004435426521"}, + {"field":"9286141892161761195421113716487572331058347582772577008481679856571089608953"}, + {"field":"22462313909863538251094723734413502131963876408869455847893905413545372708605"}, + {"field":"25083392356279932283724524775328429880423651777963419487617936047088725901019"}, + {"field":"3864629953049116572168221476843547082939404703978141228336740717261241729318"}, + {"field":"19461174769731583977467347795071456413197187922314598170925641660292487792230"}, + {"field":"16653841468694159871105887626326552216754406549189822057647939338812549394163"}, + {"field":"4631251332490646173656565018889930696175436906074225227462755491611311868531"}, + {"field":"15922221250323697324672783389740294631052392388426227592503370185265443740349"}, + {"field":"4826290600683703253147751606440899836690274945930232771806876866257201349879"}, + {"field":"21166769675020943594767635678458779776728136686011860467269840325460971635420"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1347463358795799688500220669105308090799825275247078044088591749355947012025"}, + {"field":"1056075666119022570470343559521763022933777761955618442446485603415285795751"}, + {"field":"19839775823685536216370629645986496231109904478909482967456279708202923288926"}, + {"field":"9994537569740565359332298580350074601193397838168011611574208058386645156810"}, + {"field":"23701670330897770098097322100251000965117883698664248317904995063925909392983"}, + {"field":"1357173120356241977333953279387045629332593302874892840363766479646346563822"}, + {"field":"12479917444803422207675796992336238420845347521026520781264505286989941746611"}, + {"field":"28236605519631741588019943734985596617698376400082534161298179410822726049532"}, + {"field":"6690295678256258690264549116888977737200784241428440906956024758235338253639"}, + {"field":"21886663476459364644039889402044229287089165634053219172989299378663252090483"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"11404257755716453225350062042527048981108933072285522475759434551607441462684"}, + {"field":"28914210238820264385858170397244535998825599419503742011065360036334632556870"}, + {"field":"11098758532364739817074241358754469646136767180231663848169177791740643868145"}, + {"field":"23449084750482223843570607526771709685522369322937086017067750250595746421258"}, + {"field":"13431892748851264183852886171160491279723069999448897199992305103780704654356"}, + {"field":"11668279455659614532104660842707402867305653531518755863338143414137244679974"}, + {"field":"15589060434373900876323797978900818104548325614542187175803342508547540190775"}, + {"field":"27771129170517434820583936777150685683984074673960170458793780533402181707028"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"24167544541145989310901090456193817984246760189807217850309802878979209242624"}, + {"field":"27084034195874935151283556075433089838754270381368154306012718752390394744840"}, + {"field":"11049136813692278502926170468629747334390714147911464037645588078725191130466"}, + {"field":"15037454985352894866280640978652622698236742289931721415616366308126772709797"}, + {"field":"8355814807733862516284163535283206445041489658778014690769653712671229241012"}, + {"field":"11101798403718243541543498504358006765638182739852348902426732754302441412895"}, + {"field":"22898144539364002315664663818841251703046759060018691788367326376036612336064"}, + {"field":"6704588228414668039495449033235672717113777449939242881519092417576542544"}, + {"field":"15031404029354738010467997567231643478813608505832038045880437424630432803180"}, + {"field":"24362609472995323396204488259918460280315042806647698555167836713861964836799"}, + {"field":"25964054926870006298301435168358339115436662292125489047038222461453942944491"}, + {"field":"5636635028488814650482155172095208391436197231359005504217739413523087294858"}, + {"field":"19026965595845226447401857804623521047445515255904204164606093681736528811169"}, + {"field":"23138664936588153178237599312814715739945398980031839251843742483240548096309"}, + {"field":"8589860883553546240921273372560786779954193084934011999015902770752721499224"}, + {"field":"10931679369551080011688663019913730445472020382507325623346883916930494953655"}, + {"field":"25002071651721544233680752572175342292616730368898961808908271148556673846173"}, + {"field":"2212411918828922073504374802288191383249607628884041571385787068041154002277"}, + {"field":"11860907263904526863649938974227890690286081290399375359369539804387347498633"}, + {"field":"21925665994389793284061307411638260393227827326391277506279109402428327761708"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"21860791447090579763177329328356961003084701281534507690086666423839578081010"}, + {"field":"7087230862238469092715416923815015960278355200407053025868010340510389549327"}, + {"field":"22459890307465752248208407885268874125334336961847856302569301826147987514039"}, + {"field":"6488132001863296607684338366903102838028719520093704413385374938201980116298"}, + {"field":"25455384609341614673363800669828439736582515363414599364982478837690034679184"}, + {"field":"3492637699987434182528945582343537226780541118526961350972197926659932951153"}, + {"field":"11484833809391877943248018340454290829460350889306753961093687131050302874572"}, + {"field":"17463188499937170912644727911717686133902705592634806754860989633299664755765"}, + {"field":"28476146737630340860347345450099477183938697964592209089513758890901546742523"}, + {"field":"471875571698707995545400802072499779424358517349351626440917873448420887814"}, + {"field":"26588644450835508878165742241809478066241263895194802583750087397107863191267"}, + {"field":"2359377858493539977727004010362498897121792586746758132204589367242104439070"}, + {"field":"17151133016861348967257726200359482477754093548207770054931729928139445434987"}, + {"field":"11796889292467699888635020051812494485608962933733790661022946836210522195350"}, + {"field":"27859620465648647124503138497453458462044354777155728842749296111997291914261"}, + {"field":"1088401843680401731389607754718518501318701704785831873205380652352675716076"}, + {"field":"23506013090927040198944707478579384456769547958012401349927773502586589049957"}, + {"field":"5442009218402008656948038773592592506593508523929159366026903261763378580380"}, + {"field":"1737976217319005571152552384209014430395513862295763885820160455533074728437"}, + {"field":"27210046092010043284740193867962962532967542619645796830134516308816892901900"}, + {"field":"8689881086595027855762761921045072151977569311478819429100802277665373642185"}, + {"field":"20258141222734021000129984331126904811385487170462741286853874486684593988152"}, + {"field":"14501383123646090422921063353053383796524790075452536429549334623976900580588"}, + {"field":"14446639185682958432971682899118593166838266406489024286405342140373067049749"}, + {"field":"14610870999572354402819824260922965055897837413379560715837319591184567642266"}, + {"field":"14337151309756694453072921991249011907465219068562000000117357173165399988071"}, + {"field":"15158310379203674302313628800270871352763074103014682147277244427222902950656"}, + {"field":"13789711930125374553579117451901105610599982378926878568677432337127064679681"}, + {"field":"17895507277360273799782651497010402837089257551190289304476868607414579492606"}, + {"field":"11052515031968775056110094755161574126273798930751271411477808156935388137731"}, + {"field":"2633469458814222431235018728536083295357118310126764374520312744022994572019"}, + {"field":"26314552850514826424657727523635893668005938171814796341434364020326973058318"}, + {"field":"13167347294071112156175093642680416476785591550633821872601563720114972860095"}, + {"field":"15780675015257936699717652609491560486577464931307738843353113044234994770242"}, + {"field":"7940691851697463069089975709058128457201844789285987931098465071874929039801"}, + {"field":"21007330457631585786802770543113848506161211692655572784856211692475038590536"}, + {"field":"19206897642814922429031444699178575759117076791329665224420834003849596070245"}, + {"field":"7087230862238469092715416923815015960278355200407053025868010340510389549327"}, + {"field":"423205802470672493418263391423918717917320842824373159523900265911379112985"}, + {"field":"6488132001863296607684338366903102838028719520093704413385374938201980116298"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967630336"}, + {"field":"3492637699987434182528945582343537226780541118526961350972197926659932951153"}, + {"field":"11484833809391877943248018340454290829460350889306753961093687131050302874572"}, + {"field":"17463188499937170912644727911717686133902705592634806754860989633299664755765"}, + {"field":"28476146737630340860347345450099477183938697964592209089513758890901546742523"}, + {"field":"471875571698707995545400802072499779424358517349351626440917873448420887814"}, + {"field":"26588644450835508878165742241809478066241263895194802583750087397107863191267"}, + {"field":"2359377858493539977727004010362498897121792586746758132204589367242104439070"}, + {"field":"17151133016861348967257726200359482477754093548207770054931729928139445434987"}, + {"field":"11796889292467699888635020051812494485608962933733790661022946836210522195350"}, + {"field":"27859620465648647124503138497453458462044354777155728842749296111997291914261"}, + {"field":"1088401843680401731389607754718518501318701704785831873205380652352675716076"}, + {"field":"23506013090927040198944707478579384456769547958012401349927773502586589049957"}, + {"field":"5442009218402008656948038773592592506593508523929159366026903261763378580380"}, + {"field":"1737976217319005571152552384209014430395513862295763885820160455533074728437"}, + {"field":"27210046092010043284740193867962962532967542619645796830134516308816892901900"}, + {"field":"8689881086595027855762761921045072151977569311478819429100802277665373642185"}, + {"field":"20258141222734021000129984331126904811385487170462741286853874486684593988152"}, + {"field":"14501383123646090422921063353053383796524790075452536429549334623976900580588"}, + {"field":"14446639185682958432971682899118593166838266406489024286405342140373067049749"}, + {"field":"14610870999572354402819824260922965055897837413379560715837319591184567642266"}, + {"field":"14337151309756694453072921991249011907465219068562000000117357173165399988071"}, + {"field":"15158310379203674302313628800270871352763074103014682147277244427222902950656"}, + {"field":"13789711930125374553579117451901105610599982378926878568677432337127064679681"}, + {"field":"17895507277360273799782651497010402837089257551190289304476868607414579492606"}, + {"field":"11052515031968775056110094755161574126273798930751271411477808156935388137731"}, + {"field":"2633469458814222431235018728536083295357118310126764374520312744022994572019"}, + {"field":"26314552850514826424657727523635893668005938171814796341434364020326973058318"}, + {"field":"13167347294071112156175093642680416476785591550633821872601563720114972860095"}, + {"field":"15780675015257936699717652609491560486577464931307738843353113044234994770242"}, + {"field":"7940691851697463069089975709058128457201844789285987931098465071874929039801"}, + {"field":"21007330457631585786802770543113848506161211692655572784856211692475038590536"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"9649340769776349618630915417390658987787685493980520238651558921454037246635"}, + {"field":"0"}, + {"field":"25"}, + {"field":"0"}, + {"field":"9649340769776349618630915417390658987787685493980520238651558921454037246660"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"26918237153429510368073983216865299241555511854134850605377898329014811902137"}, + {"field":"1"}, + {"field":"22622299012118317325192058684477355580841008571296558849426309794129213031040"}, + {"field":"5302136977897558428036177798823052862839481479835331822788861413399461907275"}, + {"field":"712514318049505931631938953534466414630449794538292239099218314624127306275"}, + {"field":"22861915608902711497847003563935821848641475590924122091849902222119935604063"}, + {"field":"5002723721775519014402922542439174849046929997436247186060255274744023658942"}, + {"field":"15778970120321306181463956029407697416492930524312224242215695678390495161709"}, + {"field":"3388597493005794180661266732012464708874329063668066777818818823450591715222"}, + {"field":"25823062067152905215559353485809770276991539817706513629145873119562474220924"}, + {"field":"1547644892435395234214092906157393210441209258558563365358402366555936354071"}, + {"field":"24532533665653983941911682513612332496839924167096397542838951442722240104938"}, + {"field":"21410622929470087403336717911164321029830856382030219827692565059185772556241"}, + {"field":"18447225486840432184567657362824712668141296830168085138022931711753021262607"}, + {"field":"24976024833706791575444586170569077885007851031690765445495493929546841688706"}, + {"field":"3521081334412857314912439830906065747101677683958499997621050020462246470792"}, + {"field":"864612479336415404296193041776154839771559472790795915678518868675401031224"}, + {"field":"28473186285463489515165460675540431499766956315706629115290118213339963419377"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"28168451038091191301733386487144277950341282892615515281749495515998477658283"}, + {"field":"779571271237857554159359765027699013021773589326045434205181248351489972054"}, + {"field":"25050165953139761085095947427033481898254188535311333544928770522592517770067"}, + {"field":"3897856356189287770796798825138495065108867946630227171025906241757449860270"}, + {"field":"9458740528382610001908752126479501637818716748790424860825145555562718328987"}, + {"field":"19489281780946438853983994125692475325544339733151135855129531208787249301350"}, + {"field":"18345680332584001153651014380225531225730527262010563588171051013463624014598"}, + {"field":"10602341976745047702241731871946445737632529219930997127783625750886343615739"}, + {"field":"4884334734932859200576833144611725238563466864228135792991224774268217181979"}, + {"field":"24063687574396189655315913107560251724799589617713424922963451990081750448358"}, + {"field":"24421673674664296002884165723058626192817334321140678964956123871341085909895"}, + {"field":"4526348634664752853008580529113350770545722160800881750998552893008881720442"}, + {"field":"6316279136005284590849843606605223110634445677937151960961912299305559028127"}, + {"field":"22631743173323764265042902645566753852728610804004408754992764465044408602210"}, + {"field":"2633373370697374098356471780854138589809171907744199088854884732177827510298"}, + {"field":"26314648938631674757536274471317838373553884574197361627099792032172140120039"}, + {"field":"13166866853486870491782358904270692949045859538720995444274423660889137551490"}, + {"field":"15781155455842178364110387347901284014317196943220565271680253103460830078847"}, + {"field":"7938289648776254747126302017009510818503184729721855789462764775745752496776"}, + {"field":"21009732660552794108766444235162466144859871752219704926491911988604215133561"}, + {"field":"10743425934552224879738763832875577129152867166667718231359147114378794853543"}, + {"field":"18204596374776823976153982419296399834210189315273842484595529649971172776794"}, + {"field":"24769107363432075542801072912205908682401279351397030440841058807544006637378"}, + {"field":"4178914945896973313091673339966068280961777130544530275113617956805960992959"}, + {"field":"8053447579844182290434379552341635558554170829218909340386586980320162665542"}, + {"field":"20894574729484866565458366699830341404808885652722651375568089784029804964795"}, + {"field":"11319215589891862596279151509536200829407797664152985985978258137250845697373"}, + {"field":"17628806719437186259613594742635776133955258817788574729976418627099121932964"}, + {"field":"27648055640130264125503011295509027183675931838823369213936613921904260856528"}, + {"field":"1299966669198784730389734956662949779687124643118191502018062842445706773809"}, + {"field":"22448188963335125203944071468857228064927433266350603205864362552121433761292"}, + {"field":"6499833345993923651948674783314748898435623215590957510090314212228533869045"}, + {"field":"25396877888688479452042118587770209434547996885928333881457782467557265915449"}, + {"field":"3551144420640569403850627664401767528815059596013226834496894296792701714888"}, + {"field":"11192300206126201836639607930163139319287758501875426543470205280386459055897"}, + {"field":"17755722103202847019253138322008837644075297980066134172484471483963508574440"}, + {"field":"6879946975504223772593097841166161554984566882827464584545135368720319513600"}, + {"field":"14286005552005321700871029849723145058923909778563072102352738064276577881976"}, + {"field":"4523632801936094807477220377502709286225142446355393502355411488096571357944"}, + {"field":"11106236853665516801213187242968010192481840139161636631162745963294759730897"}, + {"field":"7005157713231841207163095113688067649209990902357115435071297088468390869356"}, + {"field":"12968200052744529464628648287792653900513988483496097230543207443492731052647"}, + {"field":"18345680332584001153651014380225531225730527262010563588171051013463624014598"}, + {"field":"10602341976745047702241731871946445737632529219930997127783625750886343615739"}, + {"field":"4884334734932859200576833144611725238563466864228135792991224774268217181979"}, + {"field":"24063687574396189655315913107560251724799589617713424922963451990081750448358"}, + {"field":"24421673674664296002884165723058626192817334321140678964956123871341085909895"}, + {"field":"4526348634664752853008580529113350770545722160800881750998552893008881720442"}, + {"field":"6316279136005284590849843606605223110634445677937151960961912299305559028127"}, + {"field":"22631743173323764265042902645566753852728610804004408754992764465044408602210"}, + {"field":"2633373370697374098356471780854138589809171907744199088854884732177827510298"}, + {"field":"26314648938631674757536274471317838373553884574197361627099792032172140120039"}, + {"field":"13166866853486870491782358904270692949045859538720995444274423660889137551490"}, + {"field":"15781155455842178364110387347901284014317196943220565271680253103460830078847"}, + {"field":"7938289648776254747126302017009510818503184729721855789462764775745752496776"}, + {"field":"21009732660552794108766444235162466144859871752219704926491911988604215133561"}, + {"field":"10743425934552224879738763832875577129152867166667718231359147114378794853543"}, + {"field":"18204596374776823976153982419296399834210189315273842484595529649971172776794"}, + {"field":"24769107363432075542801072912205908682401279351397030440841058807544006637378"}, + {"field":"4178914945896973313091673339966068280961777130544530275113617956805960992959"}, + {"field":"8053447579844182290434379552341635558554170829218909340386586980320162665542"}, + {"field":"20894574729484866565458366699830341404808885652722651375568089784029804964795"}, + {"field":"11319215589891862596279151509536200829407797664152985985978258137250845697373"}, + {"field":"17628806719437186259613594742635776133955258817788574729976418627099121932964"}, + {"field":"27648055640130264125503011295509027183675931838823369213936613921904260856528"}, + {"field":"1299966669198784730389734956662949779687124643118191502018062842445706773809"}, + {"field":"20738404830710799562676069037013800267007682323967590226618472945454336070967"}, + {"field":"20327259852190264428336077147868518399978180750075662462646411806710392576723"}, + {"field":"25396877888688479452042118587770209434547996885928333881457782467557265915449"}, + {"field":"3551144420640569403850627664401767528815059596013226834496894296792701714888"}, + {"field":"7610756273286545976585114891994274784926036749704099238909942487138983918815"}, + {"field":"19114184984870407896883038644742657492829666016287400680136847304414670239378"}, + {"field":"15848108910202859035869873576887454238204850047825257616150988466510085405484"}, + {"field":"22163497544097410718319341211009269111933469712357935704824852369308383058590"}, + {"field":"13051678191994273134753744121224771235177692837874665361392405218552857757452"}, + {"field":"26041973118208254512119247246279194958900509326015210812148587741028427190810"}, + {"field":"0"}, + {"field":"0"}, + {"field":"27940507572338866310047654315389582626324052070343800949636695595273877522964"}, + {"field":"22052856262581028780809788301682488839826472065648874673569186352059442835299"}, + {"field":"24943466334207525911295492567910934235302366283032671531023368636524753073858"}, + {"field":"14374313264349323249798751129267894436358804221431551228679804196463893505566"}, + {"field":"1126544729645860530718913891098869429497241397900129634727008557944614191911"}, + {"field":"11591436723454931573002062268407448233144759178373878942437204243061075014763"}, + {"field":"14855492380301164017834140482436664941227402837172966396570821143976661162444"}, + {"field":"838028859846276066460217102664219182705250971949686255305774862196834821604"}, + {"field":"8639427564100140409610221265653782861234736785462663665095400828236999854100"}, + {"field":"1411772927110703910661971513351371183843344492259501889003483753176570433029"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"13505716598628463883836483673701398905431675841982120810426115213720209747758"}, + {"field":"13395536405869481970545174629670998033702420206648334374515708860601138191400"}, + {"field":"23502787786300881752207941110896359242533366549590958848018867609079759128021"}, + {"field":"28093235071370805140562879104815551316566920135455983250363093785969392287146"}, + {"field":"24093963892011823981336521223797958663905630762547657681635423295735361313715"}, + {"field":"21583388235274924917416622275213838573134877827550329806811957899166854720232"}, + {"field":"11089245363793039686899285628332956131326808291557630849500792392822822519129"}, + {"field":"5059965872739958794425786294253891357867733495700177100826360086254423010561"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1189595496286788812538834009541022638646875665279889647741240836270149798333"}, + {"field":"2463764369173142622338751628147509528428975594428328694454162616384268614469"}, + {"field":"16893062535660381522179905687171220882343269405394339827009379608225516244571"}, + {"field":"4312094684122706425344150027544977236505155599067463851851134703829971860080"}, + {"field":"27445831803664749785324790170150514731812111504390287225986101966671594325244"}, + {"field":"11070102830428769211497129916685161654069752341309280511007127401082277915292"}, + {"field":"15842937626587625776261861286281703251971565570994500833661227286063776564003"}, + {"field":"28700012016561985362725728759706283926210954592813561753446339745667946254197"}, + {"field":"22616701174295883146570457467724631337168811042179353391066534363103521290634"}, + {"field":"2317916217515190888520832422958376644835865758604403454804164340367674395095"}, + {"field":"26775267212782001172213718570563010442373364351594146780735289983575499987058"}, + {"field":"4648154313160351487754481950102794223761798430436211655404335632979216225941"}, + {"field":"2092467187173984476018977889231275744120306892038105058690729275762622933667"}, + {"field":"10672481153221453687221696263420516175129547195394660321437179787964657260810"}, + {"field":"20544946623330577148443704706297187784769874243746476352944683043039020625074"}, + {"field":"8323468074251303250441491405250519951110497679821082922230327595306332550216"}, + {"field":"10495520169427941936612821769074371739196863364514697051602353082910221570567"}, + {"field":"23936059175825853457524671633545143276704842456372828737440869307442163172483"}, + {"field":"4295575023559499618073580382689719952439150078909258404884452971209946929049"}, + {"field":"26964529679064705646278329674006945658119733194236176836147296211406800998388"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"6542831720037568734652403898353769008654288510814939097497897009914155340054"}, + {"field":"22405190589291480121240342353818207954708767971126621618456779754435812290283"}, + {"field":"3766136290858794817369273239596868079908386072133134771534808285220809069933"}, + {"field":"25181886018470254038523473012575108883454670409808425944419868479129158560404"}, + {"field":"18830681454293974086846366197984340399541930360665673857674041426104045349665"}, + {"field":"10117340855035074769046380054187636563821126121275886858280635338245922280672"}, + {"field":"7309340343482723866553592233405771107620482357503687140506176837470323857314"}, + {"field":"21638681965846324989339154018766205855742574124437873575448499926879643773023"}, + {"field":"7598679408084570476875214914856878574739355305576874986576207423001651656233"}, + {"field":"21349342901244478379017531337315098388623701176364685729378469341348315974104"}, + {"field":"9045374731093803528483328322112415910333720045942814216926360350658290650828"}, + {"field":"19902647578235245327409417930059561053029336435998746499028316413691676979509"}, + {"field":"16278851346139968786523895358390102588305543747772510368677124988941485623803"}, + {"field":"12669170963189080069368850893781874375057512734169050347277551775408482006534"}, + {"field":"23498212112041746220833984287606559014801605774979430411476271416007492858341"}, + {"field":"5449810197287302635058761964565417948561450706962130304478405348342474771996"}, + {"field":"1698971322892535680598936429344887220555802947130909193562650022637593770357"}, + {"field":"27249050986436513175293809822827089742807253534810651522392026741712373859980"}, + {"field":"8494856614462678402994682146724436102779014735654545967813250113187968851785"}, + {"field":"20453165694866370452898064105447540860584041746287014748141426651161998778552"}, + {"field":"13526260762984343159080664481450203550532017196331169123111573801589876628588"}, + {"field":"15421761546344705696812081770721773412831039285610391592843102962760091001749"}, + {"field":"9735259196263618083617829902907063825933973017772724183648515479249447882266"}, + {"field":"19212763113065430772274916349264913137429083464168836532306161285100519748071"}, + {"field":"19728273671989041562196403262363342166306808606922060202287900631897271780993"}, + {"field":"9219748637340007293696342989808634797056247875019500513666776132452695849344"}, + {"field":"11797301431958061243303777555300779941444873588785618863575472866436456013954"}, + {"field":"17150720877370987612588968696871197021918182893155941852379203897913511616383"}, + {"field":"1090462541132208504733395272159945780498254980044972885968010803482344809096"}, + {"field":"27857559768196840351159350980012031182864801501896587829986665960867622821241"}, + {"field":"5452312705661042523666976360799728902491274900224864429840054017411724045480"}, + {"field":"23495709603668006332225769891372248060871781581716696286114622746938243584857"}, + {"field":"27261563528305212618334881803998644512456374501124322149200270087058620227400"}, + {"field":"1686458781023836237557864448173332450906681980817238566754406677291347402937"}, + {"field":"20515728404209867668103424011305314708829646577855367882182643377893230615652"}, + {"field":"8432293905119181187789322240866662254533409904086192833772033386456737014685"}, + {"field":"4986378251098776931181646470595599680739263076412725662104803970405455016475"}, + {"field":"22405190589291480121240342353818207954708767971126621618456779754435812290283"}, + {"field":"997275650219755386236329294119119936147852615282545132420960794081091003295"}, + {"field":"25181886018470254038523473012575108883454670409808425944419868479129158560404"}, + {"field":"10822749478574993339004616361064767009394962700238166319963973334390560757760"}, + {"field":"10117340855035074769046380054187636563821126121275886858280635338245922280672"}, + {"field":"7309340343482723866553592233405771107620482357503687140506176837470323857314"}, + {"field":"21638681965846324989339154018766205855742574124437873575448499926879643773023"}, + {"field":"7598679408084570476875214914856878574739355305576874986576207423001651656233"}, + {"field":"21349342901244478379017531337315098388623701176364685729378469341348315974104"}, + {"field":"9045374731093803528483328322112415910333720045942814216926360350658290650828"}, + {"field":"19902647578235245327409417930059561053029336435998746499028316413691676979509"}, + {"field":"16278851346139968786523895358390102588305543747772510368677124988941485623803"}, + {"field":"12669170963189080069368850893781874375057512734169050347277551775408482006534"}, + {"field":"23498212112041746220833984287606559014801605774979430411476271416007492858341"}, + {"field":"5449810197287302635058761964565417948561450706962130304478405348342474771996"}, + {"field":"1698971322892535680598936429344887220555802947130909193562650022637593770357"}, + {"field":"27249050986436513175293809822827089742807253534810651522392026741712373859980"}, + {"field":"8494856614462678402994682146724436102779014735654545967813250113187968851785"}, + {"field":"20453165694866370452898064105447540860584041746287014748141426651161998778552"}, + {"field":"13526260762984343159080664481450203550532017196331169123111573801589876628588"}, + {"field":"15421761546344705696812081770721773412831039285610391592843102962760091001749"}, + {"field":"9735259196263618083617829902907063825933973017772724183648515479249447882266"}, + {"field":"19212763113065430772274916349264913137429083464168836532306161285100519748071"}, + {"field":"19728273671989041562196403262363342166306808606922060202287900631897271780993"}, + {"field":"9219748637340007293696342989808634797056247875019500513666776132452695849344"}, + {"field":"11797301431958061243303777555300779941444873588785618863575472866436456013954"}, + {"field":"17150720877370987612588968696871197021918182893155941852379203897913511616383"}, + {"field":"1090462541132208504733395272159945780498254980044972885968010803482344809096"}, + {"field":"27857559768196840351159350980012031182864801501896587829986665960867622821241"}, + {"field":"5452312705661042523666976360799728902491274900224864429840054017411724045480"}, + {"field":"23495709603668006332225769891372248060871781581716696286114622746938243584857"}, + {"field":"27261563528305212618334881803998644512456374501124322149200270087058620227400"}, + {"field":"1686458781023836237557864448173332450906681980817238566754406677291347402937"}, + {"field":"20515728404209867668103424011305314708829646577855367882182643377893230615652"}, + {"field":"8432293905119181187789322240866662254533409904086192833772033386456737014685"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"176"}, + {"field":"0"}, + {"field":"16"}, + {"field":"0"}, + {"field":"2816"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"15488432499718625504968107647101180602121203523690882187059570427289793219614"}, + {"field":"1"}, + {"field":"26439481184000943270175658187989357323003794914700283978959142934925834913837"}, + {"field":"12425835135309562658265599571308050737806743263001751986178899885978877322433"}, + {"field":"3005143534111894908116906209764349776097605368520565345509517241318216383640"}, + {"field":"15661991211979625968584526216071489182244344670802697899565905114320966051103"}, + {"field":"13849463516044125229249307498742726340731023797896131591611569631966681428690"}, + {"field":"28183740690946611178965408381049189283682734779342706716042034736295545360227"}, + {"field":"3495355427414891723032187088832550268322432485248603046502212896665468617413"}, + {"field":"21101182731147388940200206405763990954455623768083428575749813646269402446692"}, + {"field":"19450841644351213242292742492577334825659596809853876346147490227982872650729"}, + {"field":"9167674225289017069821373411660223222165910587127548096006942972957981728416"}, + {"field":"4244806106490723642603408581385583661289145066180281627045728131226850872085"}, + {"field":"28102880745052618381943924910872128205606171815241586906098962763994604957378"}, + {"field":"3837312946209335011666777716998158980015092674500904315057129349548766711354"}, + {"field":"25909340621573264338715957289676755291781469715512539497850161728522909555800"}, + {"field":"25778886027779196157562481267757222462655882285617375219882430876269493543862"}, + {"field":"4187466185347155742966735074458057939072283810595543902280662973409550729636"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967630336"}, + {"field":"5"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967630332"}, + {"field":"25"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967630312"}, + {"field":"125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967630212"}, + {"field":"625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967629712"}, + {"field":"3125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967627212"}, + {"field":"15625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967614712"}, + {"field":"78125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967552212"}, + {"field":"390625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967239712"}, + {"field":"1953125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349965677212"}, + {"field":"9765625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349957864712"}, + {"field":"48828125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349918802212"}, + {"field":"244140625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349723489712"}, + {"field":"1220703125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764348746927212"}, + {"field":"6103515625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764343864114712"}, + {"field":"30517578125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764319450052212"}, + {"field":"152587890625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764197379739712"}, + {"field":"762939453125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676763587028177212"}, + {"field":"1"}, + {"field":"25455384609341614673363800669828439736582515363414599364982478837690034679184"}, + {"field":"5"}, + {"field":"17144929194037171066808793474326776691633894061395413373550475117072847433791"}, + {"field":"25"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967630312"}, + {"field":"125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967630212"}, + {"field":"625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967629712"}, + {"field":"3125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967627212"}, + {"field":"15625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967614712"}, + {"field":"78125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967552212"}, + {"field":"390625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349967239712"}, + {"field":"1953125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349965677212"}, + {"field":"9765625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349957864712"}, + {"field":"48828125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349918802212"}, + {"field":"244140625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764349723489712"}, + {"field":"1220703125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764348746927212"}, + {"field":"6103515625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764343864114712"}, + {"field":"84641160494134498683652678284783743583464168564874631904780053182275822597"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764319450052212"}, + {"field":"152587890625"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676764197379739712"}, + {"field":"762939453125"}, + {"field":"28948022309329048855892746252171976963363056481941560715954676763587028177212"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"9649340769776349618630915417390658987787685493980520238651558921454037246660"}, + {"field":"0"}, + {"field":"85968058271978839505040"}, + {"field":"0"}, + {"field":"9649340769776349618630915417390658987787685493980520324619617193432876751700"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"5"}, + {"field":"0"}, + {"field":"1"}, + {"field":"12052875175512304438194596975993621880134196732008346604471828745958600209428"}, + {"field":"22924599565217995665658286490864945172481325115236299337696804029159496163152"}, + {"field":"14401973516056645000266959864791350764876016264315582207578487699983061560470"}, + {"field":"25881823668489439337740697132499684437925630828647802500547923791177896562096"}, + {"field":"10550024725888394901162599301565203839656939039767338914595787809528272438770"}, + {"field":"15352296065610059907912707109557044398200012248958899424693182158240056039583"}, + {"field":"8785539543468123694418647461900096762271966841225320973458454876087969562531"}, + {"field":"4078279394038342893349302163115990963524559373810754866523774337236327083347"}, + {"field":"15138664482196710132403579257045362906479547481114686534406644773983885114242"}, + {"field":"14376072002654863982955911393103424745849344432805751747288490276655905029860"}, + {"field":"4871348049843060854375224217600952908278874963474394409296571794562118634798"}, + {"field":"13060442458190017966999445301309066644525225125403359231808400659202738122590"}, + {"field":"13994602307105442489099797483091770813225503390895223225532316600226861779392"}, + {"field":"2240676942048314870572942515235147843294243350765671276839981065420422259676"}, + {"field":"24304681008234952065455655725346656004104041047973171254921985167156268113198"}, + {"field":"7116070150150762097727819025132443088296058883327424385366957654090466671302"}, + {"field":"114525075546072572105840700767735595695877256650210698873800362845389072460"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1930271661137040497428870249389205785798535158202347335544926803385530455235"}, + {"field":"27017750648192008358463876002782771177564521323739213380409749960964437175102"}, + {"field":"9651358305685202487144351246946028928992675791011736677724634016927652276175"}, + {"field":"19296664003643846368748395005225948034370380690929824038230042747422315354162"}, + {"field":"19308769219096963579829009982558167681600322473117122672668493320288293750538"}, + {"field":"9639253090232085276063736269613809281762734008824438043286183444061673879799"}, + {"field":"9699779167497671331466811156274907517912442919760931215478436308391565861679"}, + {"field":"19248243141831377524425935095897069445450613562180629500476240455958401768658"}, + {"field":"19550873528159307801441309529202560626199158116863095361437504777607861678058"}, + {"field":"9397148781169741054451436722969416337163898365078465354517171986742105952279"}, + {"field":"10910300712809392439528308889496872240906621138490794659323493594989405499279"}, + {"field":"18037721596519656416364437362675104722456435343450766056631183169360562131058"}, + {"field":"25603481254717913341748798195312384241170049210512412580662791210597059866058"}, + {"field":"3344541054611135514143948056859592722193007271429148135291885553752907764279"}, + {"field":"12225317036273371285173005967874013352398020124795820039495248995585428808942"}, + {"field":"16722705273055677570719740284297963610965036357145740676459427768764538821395"}, + {"field":"3230540562708758714079537335026112835263987660095978765566891449227208784036"}, + {"field":"25717481746620290141813208917145864128099068821845581950387785315122758846301"}, + {"field":"16152702813543793570397686675130564176319938300479893827834457246136043920180"}, + {"field":"12795319495785255285495059577041412787043118181461666888120219518213923710157"}, + {"field":"22867469449060870140202940871308866954873578538516347707262932701980284340226"}, + {"field":"6080552860268178715689805380863110008489477943425213008691744062369683290111"}, + {"field":"27493280317317204133336465600028403884278723246757056388450633216851518810119"}, + {"field":"1454741992011844722556280652143573079084333235184504327504043547498448820218"}, + {"field":"21674312349269825243111342991454111567941390306019039078434459026857723529247"}, + {"field":"7273709960059223612781403260717865395421666175922521637520217737492244101090"}, + {"field":"21527494818361979647878476200754626949617782084270513244308264841238714755224"}, + {"field":"7420527490967069208014270051417350013745274397671047471646411923111252875113"}, + {"field":"20793407163822751671714142247257203857999740975527884073677293913143670885109"}, + {"field":"8154615145506297184178604004914773105363315506413676642277382851206296745228"}, + {"field":"17122968891126611790892472479770088399909535431814738220522439272668451534534"}, + {"field":"11825053418202437065000273772401888563453521050126822495432237491681516095803"}, + {"field":"27718799836974961242676869894506488072821564195190569670702842834642322411996"}, + {"field":"1229222472354087613215876357665488890541492286750991045251833929707645218341"}, + {"field":"22801909947558610789813364463844532510655595048186605489695507115811741538632"}, + {"field":"6146112361770438066079381788327444452707461433754955226259169648538226091705"}, + {"field":"9740756298122222757777706406643354798642532625654386587709602060533402069881"}, + {"field":"4896226744383371800545745821917297071348065450799453431408197426001814394178"}, + {"field":"620540593934205491863852143631170746340540389104323810864795875169564413444"}, + {"field":"19780605767117072077981389437847480677946269392016610259109942820870879905480"}, + {"field":"6495119137432244315231391553512563251725260902472966393488170054506467214113"}, + {"field":"19152844249004734115623558460237990815391740237668502686139155986762902332082"}, + {"field":"9699779167497671331466811156274907517912442919760931215478436308391565861679"}, + {"field":"19248243141831377524425935095897069445450613562180629500476240455958401768658"}, + {"field":"19550873528159307801441309529202560626199158116863095361437504777607861678058"}, + {"field":"9397148781169741054451436722969416337163898365078465354517171986742105952279"}, + {"field":"10910300712809392439528308889496872240906621138490794659323493594989405499279"}, + {"field":"18037721596519656416364437362675104722456435343450766056631183169360562131058"}, + {"field":"25603481254717913341748798195312384241170049210512412580662791210597059866058"}, + {"field":"3344541054611135514143948056859592722193007271429148135291885553752907764279"}, + {"field":"12225317036273371285173005967874013352398020124795820039495248995585428808942"}, + {"field":"16722705273055677570719740284297963610965036357145740676459427768764538821395"}, + {"field":"3230540562708758714079537335026112835263987660095978765566891449227208784036"}, + {"field":"25717481746620290141813208917145864128099068821845581950387785315122758846301"}, + {"field":"16152702813543793570397686675130564176319938300479893827834457246136043920180"}, + {"field":"12795319495785255285495059577041412787043118181461666888120219518213923710157"}, + {"field":"22867469449060870140202940871308866954873578538516347707262932701980284340226"}, + {"field":"6080552860268178715689805380863110008489477943425213008691744062369683290111"}, + {"field":"27493280317317204133336465600028403884278723246757056388450633216851518810119"}, + {"field":"1454741992011844722556280652143573079084333235184504327504043547498448820218"}, + {"field":"21674312349269825243111342991454111567941390306019039078434459026857723529247"}, + {"field":"7273709960059223612781403260717865395421666175922521637520217737492244101090"}, + {"field":"21527494818361979647878476200754626949617782084270513244308264841238714755224"}, + {"field":"7420527490967069208014270051417350013745274397671047471646411923111252875113"}, + {"field":"20793407163822751671714142247257203857999740975527884073677293913143670885109"}, + {"field":"8154615145506297184178604004914773105363315506413676642277382851206296745228"}, + {"field":"8815967723227533808015967654034345485970304908936610035700187657630467889390"}, + {"field":"20357827328769786755515555347890881023478848978907927617702215368783865883366"}, + {"field":"27718799836974961242676869894506488072821564195190569670702842834642322411996"}, + {"field":"1229222472354087613215876357665488890541492286750991045251833929707645218341"}, + {"field":"20914637192607705468390104411586267562611219118103541652994171102448276023805"}, + {"field":"28522906374139992695294037501310483365523350711553223840242627560103372158467"}, + {"field":"7139748013072250000527434280662280573545052219905737221338978656839149560607"}, + {"field":"14720146084875069761133293704739079238911962603014686652988560360075852380250"}, + {"field":"16283262548997589981439669766846737041891719271092127902724505679946856792065"}, + {"field":"16283262548997589981439669766846737041891719271092127902724505679946856792065"}, + {"field":"0"}, + {"field":"0"}, + {"field":"4299291972376177601729649439995731638973825339031066807758648079568157936942"}, + {"field":"3257340934098547678791013736450952723382906847946418957033946349405002730565"}, + {"field":"14227049939579904894594980971374325132276430572358737133120273263516543739519"}, + {"field":"3590075343261513523755506056635404122192592469446893099855393392652540334566"}, + {"field":"26410157720729240235241209110520121354221637613238273404932669390072084311651"}, + {"field":"22618426394026710378072037086583104283733102560522627343602517718555840035072"}, + {"field":"10210282344764443034391131029244890367470417589264564714844168525615938500328"}, + {"field":"25660458807097164386219461790483764644102564161208910827237761894249310305577"}, + {"field":"6802419683373964214371250814551526315527192826977639884001020371594500144095"}, + {"field":"13361347215864983851157426416065388784834329793769733297852040248578078840021"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"9556403119835941093746586055081997141335804234270746886457842765674288766201"}, + {"field":"1463107579540992589105649901530075564971254121912071348468846424982540872348"}, + {"field":"667695158030543095572714984645815416177043562679978780158276249280875657735"}, + {"field":"16939042517935712116764541781386279905465766542038380400771551128590541763525"}, + {"field":"28523379165257046877217435296534409372102730347743645389075914042653401513194"}, + {"field":"3321234192774487750085647983669556163769831892104967625596501895684192518196"}, + {"field":"25257088538336534748972497012568568522057079206114240577295734032224056382630"}, + {"field":"16700902357308688403139277528763553279153916539932402574286011756937996955172"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1384520659282994178791591136326818105803146455259886488624727130379392973887"}, + {"field":"24838263057083122288561571611957924276747862735224499162004803700341986011284"}, + {"field":"3941923510281101947448309830168618374762227925461554262277183961996333819620"}, + {"field":"5817882705457800786511390218163517106181726498886954101992957338533684980474"}, + {"field":"5586460385610661806376021397072671907637079055870165108223887793651725632892"}, + {"field":"14113489327507547731269333198614673385095988600430185552807641793749184858083"}, + {"field":"21836054280877894228170067901814750478912420380933659916996324555430695147636"}, + {"field":"22696877145502051189928290978053089480669209114270475295250251027692162287814"}, + {"field":"19141778334620308063977085717468872836782434962378968027562073239102680965297"}, + {"field":"12660565236891397418644452676389014019846390466821556786863360533572343802338"}, + {"field":"7630115427921597935229262476823381972649236212363966938108740380777861013376"}, + {"field":"3100817498370969833271099390054860211452922737097484115054011141332348847611"}, + {"field":"3947674991558231016883925039164113814954533043849629942080225197161169061592"}, + {"field":"24177746079382975212997739199838019329305402273976665537833675305358446638277"}, + {"field":"4528594597105511158771196409101703191281143938969814398318942652948164893421"}, + {"field":"10736758541036845376049310011813325294274303194633582274645842902917318583751"}, + {"field":"11630309915493912626630730420234871998460222239886582674138017468333904548204"}, + {"field":"14235850158302748423046443863852556378069476455381344986704321284989987220997"}, + {"field":"10271469228289114739654378003916426211581973162195835079026174998305438225159"}, + {"field":"22533654637332933844673834231482861469095143653231621503210361652288549011642"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"5615662066942394958311935655906356093865237514111774289453394335104140658030"}, + {"field":"23332360242386653897580810596265620869497818967829786426501282429245826972307"}, + {"field":"28078310334711974791559678279531780469326187570558871447266971675520703290150"}, + {"field":"869711974617074064333067972640196494036868911382689268687705088829264340187"}, + {"field":"24599462436243678534227406388970994493178711925028114372516151320203645929402"}, + {"field":"4348559873085370321665339863200982470184344556913446343438525444146321700935"}, + {"field":"7205222943902197247566046936167064612441333697374328998762049543618359125662"}, + {"field":"21742799365426851608326699316004912350921722784567231717192627220731608504675"}, + {"field":"7078092410181937381937488428663346098843612004930084277855570953741827997973"}, + {"field":"21869929899147111473955257823508630864519444477011476438099105810608139632364"}, + {"field":"6442439741580638053794695891144753530855003542708860673323178004359172359528"}, + {"field":"22505582567748410802098050361027223432508052939232700042631498759990795270809"}, + {"field":"3264176398574141413080733203551790690911961231602742650661213257445894167303"}, + {"field":"25683845910754907442812013048620186272451095250338818065293463506904073463034"}, + {"field":"16320881992870707065403666017758953454559806158013713253306066287229470836515"}, + {"field":"12627140316458341790489080234413023508803250323927847462648610477120496793822"}, + {"field":"23708365345695437615232837584450813346072917826185444834620977907447418921901"}, + {"field":"5239656963633611240659908667721163617290138655756115881333698856902548708436"}, + {"field":"2749737491160992652593202913566158876912363203160981309286182479837224088157"}, + {"field":"26198284818168056203299543338605818086450693278780579406668494284512743542180"}, + {"field":"13748687455804963262966014567830794384561816015804906546430912399186120440785"}, + {"field":"15199334853524085592926731684341182578801240466136654169523764365163847189552"}, + {"field":"10847392660366718603044580334810017996082967115141411300245208467230666943251"}, + {"field":"18100629648962330252848165917361958967280089366800149415709468297119300687086"}, + {"field":"25288940992504544159330155421878113017051779093765495785271365571803367085918"}, + {"field":"3659081316824504696562590830293863946311277388176064930683311192546600544419"}, + {"field":"10652615725206525373079792100702657231806669541061236062538120801616964908242"}, + {"field":"18295406584122523482812954151469319731556386940880324653416555962733002722095"}, + {"field":"24315056316703578009506214251341309195670291223364619596735927243734856910873"}, + {"field":"4632965992625470846386532000830667767692765258576941119218749520615110719464"}, + {"field":"5783192346201694623960086248018638124899230189056855119860929161274414033017"}, + {"field":"23164829963127354231932660004153338838463826292884705596093747603075553597320"}, + {"field":"28915961731008473119800431240093190624496150945284275599304645806372070165085"}, + {"field":"32060578320575736092315012078786338866905536657285116650030957977897465252"}, + {"field":"28787719417726170175431171191778045269028528798655135132704521974460480304077"}, + {"field":"160302891602878680461575060393931694334527683286425583250154789889487326260"}, + {"field":"3909901847497466024952940001543283550355478405749896089365464692735057069394"}, + {"field":"8368393899754162494633787691974510263059611841267165276502286322380709236872"}, + {"field":"13094921158195394151762305692989828035874544974792965504744816417709095432964"}, + {"field":"12065630422819453429501916130078286412638926235679201414245050250412140934021"}, + {"field":"7626875379130644912862467039303803287298965380220578445170665183201686381135"}, + {"field":"26910843733705132219523097299370878136622360149544855306433280233760717363036"}, + {"field":"7205222943902197247566046936167064612441333697374328998762049543618359125662"}, + {"field":"21742799365426851608326699316004912350921722784567231717192627220731608504675"}, + {"field":"7078092410181937381937488428663346098843612004930084277855570953741827997973"}, + {"field":"21869929899147111473955257823508630864519444477011476438099105810608139632364"}, + {"field":"6442439741580638053794695891144753530855003542708860673323178004359172359528"}, + {"field":"22505582567748410802098050361027223432508052939232700042631498759990795270809"}, + {"field":"3264176398574141413080733203551790690911961231602742650661213257445894167303"}, + {"field":"25683845910754907442812013048620186272451095250338818065293463506904073463034"}, + {"field":"16320881992870707065403666017758953454559806158013713253306066287229470836515"}, + {"field":"12627140316458341790489080234413023508803250323927847462648610477120496793822"}, + {"field":"23708365345695437615232837584450813346072917826185444834620977907447418921901"}, + {"field":"5239656963633611240659908667721163617290138655756115881333698856902548708436"}, + {"field":"2749737491160992652593202913566158876912363203160981309286182479837224088157"}, + {"field":"26198284818168056203299543338605818086450693278780579406668494284512743542180"}, + {"field":"13748687455804963262966014567830794384561816015804906546430912399186120440785"}, + {"field":"15199334853524085592926731684341182578801240466136654169523764365163847189552"}, + {"field":"10847392660366718603044580334810017996082967115141411300245208467230666943251"}, + {"field":"18100629648962330252848165917361958967280089366800149415709468297119300687086"}, + {"field":"25288940992504544159330155421878113017051779093765495785271365571803367085918"}, + {"field":"3659081316824504696562590830293863946311277388176064930683311192546600544419"}, + {"field":"10652615725206525373079792100702657231806669541061236062538120801616964908242"}, + {"field":"18295406584122523482812954151469319731556386940880324653416555962733002722095"}, + {"field":"24315056316703578009506214251341309195670291223364619596735927243734856910873"}, + {"field":"4632965992625470846386532000830667767692765258576941119218749520615110719464"}, + {"field":"18595316718690957169675096144687060817458989473515733371591940409751363290840"}, + {"field":"7744043490510145846874566316746460225603042190888119461918732958359190940921"}, + {"field":"28915961731008473119800431240093190624496150945284275599304645806372070165085"}, + {"field":"32060578320575736092315012078786338866905536657285116650030957977897465252"}, + {"field":"27733644366146144371405716285809267045066685456404405135815109211897560500505"}, + {"field":"28240739045932578901068443125286296896386491844704364609583671045596995625470"}, + {"field":"8639427564100140409610221265653782861234736785462663665095400828236999854100"}, + {"field":"1411772927110703910661971513351371183843344492259501889003483753176570433029"}, + {"field":"7762142426114146715793380540261586307342900442002653650173303622170427827000"}, + {"field":"24389180461185666591425561599976329450372477435035649575760569318942441162498"}, + {"field":"0"}, + {"field":"0"}, + {"field":"14743075627818019869078695542829579135685340884071417533844450060263868661752"}, + {"field":"4693585322578239201918167659240585190826791218248388513370791421701026489131"}, + {"field":"7192632788448904365490611358885363036464869098982836166100476633760456180677"}, + {"field":"10239645993130582715221338047365509707723460928923176744937121882979715060824"}, + {"field":"10115444258945653554063599776609786805281118821093819910525445023158941686511"}, + {"field":"19822383003680090116954180449225443938166958024275576421855779242303877376945"}, + {"field":"25439903599713354749396779932727118822164486027770710901724495944971062308912"}, + {"field":"14630773319465810812432080024947271422337167610573781487621984658081086432472"}, + {"field":"25444714503707966796201457266362702691052462806302809709935649625378609779179"}, + {"field":"21803413588342036849431491625731534348546677814062926682973546229702519039037"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"6218062241668896181644538840624677317795887549247025440539050407727788236608"}, + {"field":"22784284434984508586576274932282701784597709619812668624616727261184135163951"}, + {"field":"18938065861455199583052749066688847585225199293934984580804232657087023998823"}, + {"field":"6191881277363348206371674433194663945022091364434522377384181817958801006773"}, + {"field":"14846999884572965897298889806070830107939876782496760812749011816094180400439"}, + {"field":"15491204718768811024844859197165760123475526914377238657936332435827366570839"}, + {"field":"28364137675058868512610864754537097917977957536001768881618172241188074655144"}, + {"field":"27757254189164546854815870481098569860893660037295121710457821675242059531787"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"19719646497449123349582772160186178935803044274602952055567195595926448871339"}, + {"field":"24571053559962120315419405073515051362903836416246328719130131008740466055635"}, + {"field":"28394775844320672837613832507764964545628206507025047588527118880632358335784"}, + {"field":"5605630882978734126671118009359602117458189303897329646075298779293782664760"}, + {"field":"294317354689581165747924164757091415573866450561350159940421165501618897986"}, + {"field":"3714316094245806406605783741120812580216375515584265622126400110294345364923"}, + {"field":"2439429165300302248429276597341212985328666247646757214238488394008000640189"}, + {"field":"14071291985842300829456124350862255041932083987533563759872561806940876634103"}, + {"field":"13209160829793848262877924877156845550126428579966683339430068969886207796113"}, + {"field":"17913534566612396432316949986045247798104778809299925494038041146232525501473"}, + {"field":"14298012794852492893159258571781137673226898585018690661614826534348675730868"}, + {"field":"23898095820911184597785330567925295948604293890756845273701249760224887961839"}, + {"field":"9006552081165670539184694633648375291101456356242634202049035825678259242516"}, + {"field":"28519568009126794475225104498396555258400635521515749052498962401229568765783"}, + {"field":"17415305594455825513525538769295319646523435834134786449025966070978875353472"}, + {"field":"9997396102239769940287292590388420921246581197387242184292750877831876979789"}, + {"field":"8553135338203138914691993619573863416872248500996721255168805642355656993371"}, + {"field":"24121984931355826881072697963220439496273314192897925737405817138607767199684"}, + {"field":"4073564782810663924910370094455442130998678621672762953145182855194891254212"}, + {"field":"19937305145851942851343586804612760490634490601432045640175473374460310457587"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"13012042973570295183784144523350804997842206805027206738590716033565629746904"}, + {"field":"15935979335758753672108601728821171965520849676914353977363960730784337883433"}, + {"field":"7164170249193378207135230112410071062484921061252912261044226639128213473846"}, + {"field":"21783852060135670648757516139761905900878135420688648454910450125221754156491"}, + {"field":"6872828936637842179783404309878378349061548824323000589266456431291099738893"}, + {"field":"22075193372691206676109341942293598614301507657618560126688220333058867891444"}, + {"field":"5416122373860162043024275297219914781944687639673442230377605392105531064128"}, + {"field":"23531899935468886812868470954952062181418368842268118485577071372244436566209"}, + {"field":"27080611869300810215121376486099573909723438198367211151888026960527655320640"}, + {"field":"1867410440028238640771369766072403053639618283574349564066649803822312309697"}, + {"field":"19610970109187855652035897421809961695164965064069812895621427745238406081852"}, + {"field":"9337052200141193203856848830362015268198091417871747820333249019111561548485"}, + {"field":"11210783617952131692501248352533877585735655874524382330243108433142127518249"}, + {"field":"17737238691376917163391497899638099377627400607417178385711568331207840112088"}, + {"field":"27105895780431609606613495510497410965315222890680350935260865401360669960908"}, + {"field":"1842126528897439249279250741674565998047833591261209780693811362989297669429"}, + {"field":"19737389664841852609496492543799146973123888525635511812485619949403479283192"}, + {"field":"9210632644487196246396253708372829990239167956306048903469056814946488347145"}, + {"field":"11842881396222116479804223962479803975530273182352876914564069453967493524949"}, + {"field":"17105140913106932376088522289692172987832783299588683801390607310382474105388"}, + {"field":"1318362362452484687235627308055065950925252947881263140910993741137532364071"}, + {"field":"27629659946876564168657118944116911012437803534060297575043683023212435266266"}, + {"field":"6591811812262423436178136540275329754626264739406315704554968705687661820355"}, + {"field":"22356210497066625419714609711896647208736791742535245011399708058662305809982"}, + {"field":"4011036751983068324997936449204671809768267215090017806820166764088341471438"}, + {"field":"24936985557345980530894809802967305153594789266851542909134510000261626158899"}, + {"field":"20055183759915341624989682246023359048841336075450089034100833820441707357190"}, + {"field":"8892838549413707230903064006148617914521720406491471681853842943908260273147"}, + {"field":"13431851871589561557270172473600864354117510931425763022640138809158633894939"}, + {"field":"15516170437739487298622573778571112609245545550515797693314537955191333735398"}, + {"field":"9263214739289710074565369863660367843861441693245693681291340517093234214021"}, + {"field":"19684807570039338781327376388511609119501614788695867034663336247256733416316"}, + {"field":"17368051387119501516934103066129862255944151984286907690502025821116203439768"}, + {"field":"11579970922209547338958643186042114707418904497654653025452650943233764190569"}, + {"field":"28944212316939409872885022826305357352994646957551417020600775576881081938166"}, + {"field":"3809992389638983007723425866619610368409524390143695353901187468885692171"}, + {"field":"20636521888014940724361097112846464075746239138836043701026003259095723382145"}, + {"field":"24942590598900925738324781865131732483893340510621034114205058448012860610549"}, + {"field":"20902037319282889671788968644799797701717999182186442946407990374144103505513"}, + {"field":"17369821955170599957060915971627499034993802166465250898478059627706326363035"}, + {"field":"28080969476885802328102203929679795807836609056653719483973227789115660027889"}, + {"field":"17614590726403674653140841704317097397569303252210099056385909646306941515068"}, + {"field":"5416122373860162043024275297219914781944687639673442230377605392105531064128"}, + {"field":"23531899935468886812868470954952062181418368842268118485577071372244436566209"}, + {"field":"27080611869300810215121376486099573909723438198367211151888026960527655320640"}, + {"field":"1867410440028238640771369766072403053639618283574349564066649803822312309697"}, + {"field":"19610970109187855652035897421809961695164965064069812895621427745238406081852"}, + {"field":"9337052200141193203856848830362015268198091417871747820333249019111561548485"}, + {"field":"11210783617952131692501248352533877585735655874524382330243108433142127518249"}, + {"field":"17737238691376917163391497899638099377627400607417178385711568331207840112088"}, + {"field":"27105895780431609606613495510497410965315222890680350935260865401360669960908"}, + {"field":"1842126528897439249279250741674565998047833591261209780693811362989297669429"}, + {"field":"19737389664841852609496492543799146973123888525635511812485619949403479283192"}, + {"field":"9210632644487196246396253708372829990239167956306048903469056814946488347145"}, + {"field":"11842881396222116479804223962479803975530273182352876914564069453967493524949"}, + {"field":"17105140913106932376088522289692172987832783299588683801390607310382474105388"}, + {"field":"1318362362452484687235627308055065950925252947881263140910993741137532364071"}, + {"field":"27629659946876564168657118944116911012437803534060297575043683023212435266266"}, + {"field":"6591811812262423436178136540275329754626264739406315704554968705687661820355"}, + {"field":"22356210497066625419714609711896647208736791742535245011399708058662305809982"}, + {"field":"4011036751983068324997936449204671809768267215090017806820166764088341471438"}, + {"field":"24936985557345980530894809802967305153594789266851542909134510000261626158899"}, + {"field":"20055183759915341624989682246023359048841336075450089034100833820441707357190"}, + {"field":"8892838549413707230903064006148617914521720406491471681853842943908260273147"}, + {"field":"13431851871589561557270172473600864354117510931425763022640138809158633894939"}, + {"field":"15516170437739487298622573778571112609245545550515797693314537955191333735398"}, + {"field":"8953167514057859665188331775272816071538809460669865034246102640808777901724"}, + {"field":"18843421893490207716677455646538887759955786970737653500962514456714323711448"}, + {"field":"17368051387119501516934103066129862255944151984286907690502025821116203439768"}, + {"field":"11579970922209547338958643186042114707418904497654653025452650943233764190569"}, + {"field":"4771972741295307749792436675318954267499091667541785330984729824064368826695"}, + {"field":"22094216161395009306204495676763805631560041525194063607857528267281020365763"}, + {"field":"25439903599713354749396779932727118822164486027770710901724495944971062308912"}, + {"field":"14630773319465810812432080024947271422337167610573781487621984658081086432472"}, + {"field":"24125027408541336120061988274373132645097261275797720325692103221711965973401"}, + {"field":"13584778455295423987490921988743661613714991253440836827804282396817287342490"}, + {"field":"0"}, + {"field":"0"}, + {"field":"21898806806631271421074774629658276633321422120990433761947666927395309131508"}, + {"field":"4616042519273176156168496586197018496813971279154925176868276963127697758733"}, + {"field":"2822459215107125455281685564365687163723723959599756142751586626450570918658"}, + {"field":"12198185463123076884938595688653495031282170585052637208593903413278202281671"}, + {"field":"18040818708272504372264234993469231244246039633159816449824147983856016103799"}, + {"field":"9783905697877298344836930826369061239100624128100888791266809666660173971858"}, + {"field":"1411772927110703910661971513351371183843344492259501889003483753176570433029"}, + {"field":"8639427564100140409610221265653782861234736785462663665095400828236999854100"}, + {"field":"13473225148902500967602371128566641133835352880779698051049916402642512945594"}, + {"field":"9351617593643679516546114070584247751684579825006788276886977780046675271256"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"1139994722508898615168039509558034541714884539440036907467046972758698577312"}, + {"field":"4165375037657563228663494623074637627195717835733843713736543075431578359189"}, + {"field":"5063998628589334446835637328433831798472627141824780953451728305831508309717"}, + {"field":"5471364350086943749336161475539105915797971464114508291061439884949592747525"}, + {"field":"24054553038348669064209653210826738337540648000778123246551770181109238253809"}, + {"field":"11652056995598804204166981558895706044952100256310092462263268873384081822698"}, + {"field":"11894878294593433113231310605485099176760244307443803247159878321890408034378"}, + {"field":"11207943702050296204721934429154700279735115464814984951466055218124435088655"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"8594872590505823268960278141481441129828642099905398716959359456642636741916"}, + {"field":"14332137296056320708355584036808952079756960602027209135682919304674021496601"}, + {"field":"17513300949113769485552184088745884077912162099962398906684671810378924177275"}, + {"field":"916658480680212246948032662231617588073483452883752967531201439670057581647"}, + {"field":"9385350374256851138632787406496790571828933202262781873584907957454929825383"}, + {"field":"2635491560017752308854234341359783674958938284037048591450909889304781727922"}, + {"field":"7968496214792132061138040217959091278915987911368358645148757562521022389268"}, + {"field":"41812976883442979219006872221723566975926262962786293719594192905388899711"}, + {"field":"13065278501650542507878551134899462041384019049210171104564980131244429662301"}, + {"field":"41902287272521368936426907347749521264190664228378553831662132586413071738"}, + {"field":"25787624746175069991932695626688139376057482533724128404539557783656949011531"}, + {"field":"2197558521048128179163543432973702308375766173107305638302871249595213621309"}, + {"field":"12248057949904110166762585479527534186233536014434342446133273901916347376787"}, + {"field":"6615887762947764700002525228767855891552636401195198590036801179177885666099"}, + {"field":"19822207150218840769121407313947180741580094515064692452090232673985379272587"}, + {"field":"13764515845147600951712598732883780232080231442392856198970846504328549368942"}, + {"field":"16410594635842121951148139952897992272880726907576036102264927344814038226302"}, + {"field":"22896908855226464005615191835699177637423190384684814145844182513793671003863"}, + {"field":"3192525579800835659046141607251662477691439336082675733728835530879358099805"}, + {"field":"19130066295692393173182514572002563725632609641996935235512752199675952832164"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"}, + {"field":"0"} + ]}, + {"array": [ + {"field":"1489673694086369343770502418173733852821627777812646992533484403645626190126"}, + {"field":"26293555330429256326819023707019918803589632238271128799793773668586115929091"}, + {"field":"23973266380127406266111826172684145571879377822844663134451935327316072078231"}, + {"field":"24688691894013477213227684606293274479377142768796912629209376212365166767791"}, + {"field":"15769239600313848983121687949320217554921488388153976837206371507663287390242"}, + {"field":"20562664028480612662460418706171756750603241669238093231146163941676594628944"}, + {"field":"11676279540957400489822506482276231040554995174337370100345606822665279464117"}, + {"field":"105860620691040623588828455474206407944235073980938019273525417718283406495"}, + {"field":"1489673694086369343770502418173733852821627777812646992533484403645626190126"}, + {"field":"26293555330429256326819023707019918803589632238271128799793773668586115929091"}, + {"field":"23973266380127406266111826172684145571879377822844663134451935327316072078231"}, + {"field":"24688691894013477213227684606293274479377142768796912629209376212365166767791"}, + {"field":"15769239600313848983121687949320217554921488388153976837206371507663287390242"}, + {"field":"20562664028480612662460418706171756750603241669238093231146163941676594628944"}, + {"field":"11676279540957400489822506482276231040554995174337370100345606822665279464117"}, + {"field":"105860620691040623588828455474206407944235073980938019273525417718283406495"}, + {"field":"27573993013001885004085734015023672988792492931747137024614879232288404932741"}, + {"field":"16542241424853055486780592040512077440780749254491288210589231327294780231561"}, + {"field":"20063765786948637690955250125730727241570551657946367418032597953183009246733"}, + {"field":"25858451788986549626521286163495969072698205497183564457868070777103011421399"}, + {"field":"18646899829464379677870156728109413374352960872637012234397489115677567097196"}, + {"field":"26191482278775315656114911875574003137812973059920902139121915917064956948825"}, + {"field":"15171988122593077526230757139821744471700422867231238614151602312018729838710"}, + {"field":"25558174348384412443073324050100669940161863863028630221422206692714800662239"}, + {"field":"5853381109824321848055578992060164448985513028377743981436789559134600732122"}, + {"field":"22893826121299889657668789766341270882999314534242978713444131638209045438531"}, + {"field":"349467800637479466383691786908953511038318636505685253338001352310766403527"}, + {"field":"694707149309527263983975952229376208111447566537153705296461629540928956988"}, + {"field":"2161418426683034911494585084992064098852601630345170440793840947149742465174"}, + {"field":"1908584298902548194195062006091140375039744078590768586546166138801386585596"}, + {"field":"25766094637796658977695020521213903449751383333842680827344506674652741830551"}, + {"field":"14964067833180830991609060668708510962110903396417188008229302330080788670398"}, + {"field":"7256177769346803392601853287358302813894113178885660030788588423898035032169"}, + {"field":"19523816345241514295847754895890768297818940542740696351942631149813480236657"}, + {"field":"2279808446149702720572329769769474012917162950778327850785425137976511028761"}, + {"field":"11328310748262553365573942261676300109689796310970508423553270733234585893644"}, + {"field":"26191482278775315656114911875574003137812973059920902139121915917064956948825"}, + {"field":"18646899829464379677870156728109413374352960872637012234397489115677567097196"}, + {"field":"15171988122593077526230757139821744471700422867231238614151602312018729838710"}, + {"field":"25558174348384412443073324050100669940161863863028630221422206692714800662239"}, + {"field":"16907050901405874307446503082410474742972751116033045600144187307241853736983"}, + {"field":"13029635340171584885735175552751885049725504941546224172627834453994188890939"}, + {"field":"21735845591771641765387183315256775540501650342257626955035068580802928527514"}, + {"field":"22732522838057483696421799677782679104348993007019771477307807191330754877770"}, + {"field":"24349167095734842857748245097310672869645493904218298959988651434851766553682"}, + {"field":"21302715234990089237659138424740149506125613518156862197585498984189557069217"}, + {"field":"25558174348384412443073324050100669940161863863028630221422206692714800662239"}, + {"field":"15171988122593077526230757139821744471700422867231238614151602312018729838710"}, + {"field":"19914931231064047967822229367373841914560627319826174477969094954650734528247"}, + {"field":"10311047384191824890422501732436128334155802454978484546460615082665984690407"}, + {"field":"17273121735908847094551463563548570876090058411665049565669282235773366765015"}, + {"field":"11376502204616079760007388782874163828962937638258345324514114284049964088879"}, + {"field":"20562664028480612662460418706171756750603241669238093231146163941676594628944"}, + {"field":"15769239600313848983121687949320217554921488388153976837206371507663287390242"}, + {"field":"11676279540957400489822506482276231040554995174337370100345606822665279464117"}, + {"field":"105860620691040623588828455474206407944235073980938019273525417718283406495"}, + {"field":"22228869609186808000055992103978052818347469168379047022443824099956068337392"}, + {"field":"24109694541506936469983825141060272997590651002426733794565065895405062758064"}, + {"field":"8197913774699915601946432313332876673565176802469092071791230833599466786500"}, + {"field":"5534556006397393264705120261027531938208892977387835856057987334058321502345"}, + {"field":"15528213841104893986695203648839444141529521454238567948693195172621919163834"}, + {"field":"12996003253616052625222108881467636345789061227875447123150999664510864193642"}, + {"field":"14964067833180830991609060668708510962110903396417188008229302330080788670398"}, + {"field":"25766094637796658977695020521213903449751383333842680827344506674652741830551"}, + {"field":"24109694541506936469983825141060272997590651002426733794565065895405062758064"}, + {"field":"22228869609186808000055992103978052818347469168379047022443824099956068337392"}, + {"field":"8197913774699915601946432313332876673565176802469092071791230833599466786500"}, + {"field":"5534556006397393264705120261027531938208892977387835856057987334058321502345"}, + {"field":"15528213841104893986695203648839444141529521454238567948693195172621919163834"}, + {"field":"12996003253616052625222108881467636345789061227875447123150999664510864193642"}, + {"field":"14964067833180830991609060668708510962110903396417188008229302330080788670398"}, + {"field":"25766094637796658977695020521213903449751383333842680827344506674652741830551"} + ]}, + {"array": [ + {"int":1}, + {"int":0}, + {"int":1}, + {"int":0}, + {"int":0}, + {"int":1}, + {"int":1}, + {"int":0}, + {"int":1}, + {"int":0}, + {"int":0}, + {"int":1}, + {"int":1}, + {"int":1}, + {"int":0}, + {"int":0}, + {"int":0}, + {"int":0}, + {"int":0}, + {"int":0}, + {"int":0}, + {"int":1}, + {"int":0}, + {"int":1}, + {"int":1}, + {"int":1}, + {"int":0}, + {"int":1}, + {"int":0}, + {"int":1}, + {"int":1}, + {"int":1}, + {"int":1}, + {"int":1}, + {"int":1}, + {"int":1}, + {"int":1}, + {"int":0}, + {"int":1}, + {"int":1}, + {"int":1}, + {"int":0}, + {"int":0}, + {"int":0}, + {"int":1}, + {"int":1}, + {"int":0}, + {"int":0}, + {"int":0}, + {"int":0}, + {"int":1}, + {"int":1}, + {"int":0}, + {"int":1} + ]}, + {"array": [ + {"field": "12391877613496388711168512689046349199156725242279537645290255953347585743414"}, + {"field": "27188968498233333187443848328347702472994677644910840493671932394787247135910"}, + {"field": "11315202918940301328843900186808908754098499683062760569246394814448441981586"}, + {"field": "12513341777539684433373221199562308277931931798634002207454487713062525432875"}, + {"field": "26440558056275664160797002078747519807333324153057879629262574193304627153278"}, + {"field": "10054997823684070614396024893759780525441176579149038020017314259623485605866"}, + {"field": "16595840436248500659328646708533219125571881941800385587095872125421710376440"}, + {"field": "27464581346491856442914794387564755229504789773191728474106249797400283093347"}, + {"field": "719326308296342141230089684192779494066978939473290001630648047973019562493"}, + {"field": "24510152196546929845337907254282013462291051350887100584374591251754877272223"}, + {"field": "17464358475080509620419484558329512272849079893030153680276256913966946334475"}, + {"field": "22639895075435751780668378162592171407706867191748205852466286108018628270081"}, + {"field": "10680887645839800148229642417654213226196381096598728433788180526342453052988"}, + {"field": "28181087499692026839318583316974060788258713398943220680079275940627524098920"}, + {"field": "19544342002022023268242867079343946685186833390056777665265699432359051272097"}, + {"field": "5384468808637884470615234446234512397861045282868500575963967320525674265817"}, + {"field": "5030403164509148539835279542767894040854438203508614621223670583527219700061"}, + {"field": "4030841902732061108635125152423186041660329741287197473434259573667774624291"}, + {"field": "18822191239086595159299007326950511033623746906039669991010526669859234482894"}, + {"field": "4608970051794345941304400328405736835252881465156817323577715596605616013067"}, + {"field": "10695142967042814615105359087845425753532391067704975895920343983149780609820"}, + {"field": "9132060519452262731011214687450464784094520651357282502085833188504679152804"}, + {"field": "8901803322312951234470479173852334145977773796372665067978304784539477635451"}, + {"field": "1075015405083123166027136499395373727993856010427874357116039188656254636455"}, + {"field": "12391877613496388711168512689046349199156725242279537645290255953347585743414"}, + {"field": "27188968498233333187443848328347702472994677644910840493671932394787247135910"}, + {"field": "11315202918940301328843900186808908754098499683062760569246394814448441981586"}, + {"field": "12513341777539684433373221199562308277931931798634002207454487713062525432875"}, + {"field": "26440558056275664160797002078747519807333324153057879629262574193304627153278"}, + {"field": "10054997823684070614396024893759780525441176579149038020017314259623485605866"}, + {"field": "16595840436248500659328646708533219125571881941800385587095872125421710376440"}, + {"field": "27464581346491856442914794387564755229504789773191728474106249797400283093347"}, + {"field": "719326308296342141230089684192779494066978939473290001630648047973019562493"}, + {"field": "24510152196546929845337907254282013462291051350887100584374591251754877272223"}, + {"field": "17464358475080509620419484558329512272849079893030153680276256913966946334475"}, + {"field": "22639895075435751780668378162592171407706867191748205852466286108018628270081"}, + {"field": "10680887645839800148229642417654213226196381096598728433788180526342453052988"}, + {"field": "28181087499692026839318583316974060788258713398943220680079275940627524098920"}, + {"field": "19544342002022023268242867079343946685186833390056777665265699432359051272097"}, + {"field": "5384468808637884470615234446234512397861045282868500575963967320525674265817"}, + {"field": "5030403164509148539835279542767894040854438203508614621223670583527219700061"}, + {"field": "4030841902732061108635125152423186041660329741287197473434259573667774624291"}, + {"field": "18822191239086595159299007326950511033623746906039669991010526669859234482894"}, + {"field": "4608970051794345941304400328405736835252881465156817323577715596605616013067"}, + {"field": "10695142967042814615105359087845425753532391067704975895920343983149780609820"}, + {"field": "9132060519452262731011214687450464784094520651357282502085833188504679152804"}, + {"field": "8901803322312951234470479173852334145977773796372665067978304784539477635451"}, + {"field": "1075015405083123166027136499395373727993856010427874357116039188656254636455"}, + {"field": "24079547989434667485006294880333828737223675248000292753471630257332917939790"}, + {"field": "10596125147806847101527934693223814645995045161117276475798655968974075389871"}, + {"field": "21118005800373839041143674548977766941023206432349538715185068803681455825496"}, + {"field": "2672752892935304189988795176301376095577382864474620568287692023454871051877"}, + {"field": "16410022907407856624331832050518923669512506365663536499768857252658760772915"}, + {"field": "14820234827249778464216614135432063571623714963454369932080961017660334540869"}, + {"field": "14331707998885533522447174439132412057603862948610328533352601357145694646309"}, + {"field": "15545604478963069011648393988855876152344116916350436756060992664103877778705"}, + {"field": "4004856513392724544507796044083708757530780599232023348130974680385874119909"}, + {"field": "9224389234022340608124155072407031484325278228778477505878569867552924875312"}, + {"field": "24433709601366967020187616509364375424760801973857464790191462599995149286092"}, + {"field": "6926794223876757856996868644148217265267729983667599895201864227895444339755"}, + {"field": "24716850785163986128356429620177532861603023955238908720123884864792024103642"}, + {"field": "24043041195340825973873303311268132092393890437393964175401806426465005910347"}, + {"field": "7180795895001534919206063022970364358588325248165440087273363561766476835568"}, + {"field": "24846673982066539601352982595562996365851569067663503488442666563574113804951"}, + {"field": "188775100287763671920858160850850197193998312968727269130756785296904083195"}, + {"field": "18246723342702637032645325541010238292139019574674732375650007663529199617823"}, + {"field": "24472083370767129219663248860211137792172410414566589021893325695812834734984"}, + {"field": "1311867340928248904491890630561168288838330758167101120046087008009383027579"}, + {"field": "20645634933332773265660103144669409487751736203446959740824672601461482294355"}, + {"field": "9451223030047428053964999523698380496335685091435410074730805751157453275788"}, + {"field": "22941531219520426141803320003951464587766770260897952302484884073003709691977"}, + {"field": "12774258637642947671811069562159726486571542596211636993020005577690694848049"}, + {"field": "7361702777147390836965985823886544044270172605135584620743028933927691522064"}, + {"field": "23891900824056030932050883637273183239108809443434510596690898040953215002860"}, + {"field": "4092062775066909159598946104690689545228506020955690886178787048062114559059"}, + {"field": "27009626269973998181793346317415306866249658203998287124756162215839775262524"}, + {"field": "26440558056275664160797002078747519807333324153057879629262574193304627153278"}, + {"field": "10054997823684070614396024893759780525441176579149038020017314259623485605866"}, + {"field": "16235456060721146956019497920677655220515138746835272901564046503538243716356"}, + {"field": "3266696311188892327905476569262600538333022171849765961849093802632216996976"}, + {"field": "2092320989755020615212690744336945667143334561983676305614571553116128273915"}, + {"field": "21515146505305844126939775686003159323693338836653241315492281067589044812709"}, + {"field": "17464358475080509620419484558329512272849079893030153680276256913966946334475"}, + {"field": "22639895075435751780668378162592171407706867191748205852466286108018628270081"}, + {"field": "12902225366943251484699495979417558210269010832038248661183420966956239399556"}, + {"field": "11953809430828854743253245880816667902408789814882307827720941347184846950803"}, + {"field": "3331994200676308911248852433475671523568928525446885912198048056740927336936"}, + {"field": "12678678729297819239067733503150474817320555290529384478005974891728269390754"}, + {"field": "5030403164509148539835279542767894040854438203508614621223670583527219700061"}, + {"field": "4030841902732061108635125152423186041660329741287197473434259573667774624291"}, + {"field": "25902853811121821799540190907969192380274093762585553950377356230757028812525"}, + {"field": "26263947038429170707945111127563026012854362306418498889765347341359791710774"}, + {"field": "27941769527961613871355748628647351719255246194477249974582315374380736165945"}, + {"field": "198734808887356409386620863310821406966933381343087620151953905721304714076"}, + {"field": "8901803322312951234470479173852334145977773796372665067978304784539477635451"}, + {"field": "1075015405083123166027136499395373727993856010427874357116039188656254636455"}, + {"field": "5499601710344207319527322977500647526824127662884364968289042871821675642090"}, + {"field": "19972066941905947716438912387813118569909075169357833061884293769824729802738"}, + {"field": "4092062775066909159598946104690689545228506020955690886178787048062114559059"}, + {"field": "27009626269973998181793346317415306866249658203998287124756162215839775262524"}, + {"field": "26440558056275664160797002078747519807333324153057879629262574193304627153278"}, + {"field": "10054997823684070614396024893759780525441176579149038020017314259623485605866"}, + {"field": "12937283820272751732781295029348366027580414705971392802891605752003169229159"}, + {"field": "8182449293590992842440987884826477670432114275379656176973820147635359141612"}, + {"field": "2092320989755020615212690744336945667143334561983676305614571553116128273915"}, + {"field": "21515146505305844126939775686003159323693338836653241315492281067589044812709"}, + {"field": "17464358475080509620419484558329512272849079893030153680276256913966946334475"}, + {"field": "22639895075435751780668378162592171407706867191748205852466286108018628270081"}, + {"field": "13386232273066986848274794705570480366431799183735741433592726688586939133342"}, + {"field": "19071659510481746764707198059248771157279229957177626721622809426614175358505"}, + {"field": "3331994200676308911248852433475671523568928525446885912198048056740927336936"}, + {"field": "12678678729297819239067733503150474817320555290529384478005974891728269390754"}, + {"field": "5030403164509148539835279542767894040854438203508614621223670583527219700061"}, + {"field": "4030841902732061108635125152423186041660329741287197473434259573667774624291"}, + {"field": "11766192862689463492194125794723206804540015984489573087658672181901421687009"}, + {"field": "25731903860924440137380580165194984877636121182368996403511339968964534089576"}, + {"field": "27941769527961613871355748628647351719255246194477249974582315374380736165945"}, + {"field": "198734808887356409386620863310821406966933381343087620151953905721304714076"}, + {"field": "8901803322312951234470479173852334145977773796372665067978304784539477635451"}, + {"field": "1075015405083123166027136499395373727993856010427874357116039188656254636455"}, + {"field": "27616462447817537219060587884737109174831542533909509190179777681940829343692"}, + {"field": "22169265275120084367624466097509430414898129791537270601752561548733691422314"}, + {"field": "19334559116497012219127297046725186592798927293312828166877916002089581537739"}, + {"field": "4357335972265669079724144128537541391605729238607269577106685597527794163040"}, + {"field": "9907280041835025527119091353470393127840693791043586513713000547103685746385"}, + {"field": "10054997823684070614396024893759780525441176579149038020017314259623485605866"}, + {"field": "13823375425131903025616963457266237395324842876451558639514385561900108457204"}, + {"field": "10913953989081891084006242244564411871202618906238573117644222574355956875532"}, + {"field": "23551806282209890155630578487321735159672911371614950002662711058290518721038"}, + {"field": "23355661175385385643871225939849638702248707787832254053412270924866444387875"}, + {"field": "6546092647652912771033690231523135692156305367453273182055986577447523574621"}, + {"field": "22639895075435751780668378162592171407706867191748205852466286108018628270081"}, + {"field": "21130837920896063463130577947924474771159953490833546125974080247179600956333"}, + {"field": "12401180312175352223575550672811390356432281255934334861958012436590817830281"}, + {"field": "10359696798191510193560120335777646924518352660538680863846084971070178202679"}, + {"field": "1825896725417198770058531210885003964205111342959979071802909589809528811695"}, + {"field": "26667548686658789742000815702343300788096849243259139303513209295018927879679"}, + {"field": "4030841902732061108635125152423186041660329741287197473434259573667774624291"}, + {"field": "9984790356673910503219755174882167913898200987339329700770555209522092521059"}, + {"field": "24727297741417135463987989315258514500634215245383576092597087558224760942596"}, + {"field": "5633412187198180917057047741500632867570261802326753832945839285080514289802"}, + {"field": "10289763397542743441746852631307925979785606102165145920866607467228061557654"}, + {"field": "20155257782899769452366581810291320207895644393002855928598034244930409884272"}, + {"field": "1075015405083123166027136499395373727993856010427874357116039188656254636455"}, + {"field": "23497170253102816273134784347637728858091997858921996212084283392066258063767"}, + {"field": "828680804970306280349478295533454060815816229487237868775796719177764669466"}, + {"field": "17329734425859800309271590936556411924437442938573896319480263479756091753958"}, + {"field": "7931387981759186196288363946190357589113226634602177803512082155653062422942"}, + {"field": "5835850587317560862646675332663997344533818584408517827530168457067703570906"}, + {"field": "14820234827249778464216614135432063571623714963454369932080961017660334540869"}, + {"field": "23125572407582191678753353561812736150065148826703481765560707762662085020257"}, + {"field": "15534517296195535674624661540054135126129959982320287871271851834073942283383"}, + {"field": "932865768362335450303956253443283033913794460718621346845374297008112444168"}, + {"field": "28598892644008964309480340700077597076435062528836775915135814801450612510224"}, + {"field": "13831660038640702491888293165358421901632654103571102192772063780196356956054"}, + {"field": "6926794223876757856996868644148217265267729983667599895201864227895444339755"}, + {"field": "4470674282909468891846301842703348834487194842162277236815537275801570625624"}, + {"field": "6483823953373749789491784823289136056990058410236108768989641447906874226094"}, + {"field": "9856179182304887304976904037809992282316492395518621281232016844006121282315"}, + {"field": "13499207439130275173036629359500485406023550800078215335515186386472287043210"}, + {"field": "9669692690380960753229757990940037115585322614445709956682982830197848300452"}, + {"field": "18246723342702637032645325541010238292139019574674732375650007663529199617823"}, + {"field": "426153697704989173328489988599132045561560067358137546185116554343322646435"}, + {"field": "16371209047245331942368395323339200641844867959505105196753090502387639393346"}, + {"field": "10386226710297736158131413128593365830291856918907464363422668154408107509515"}, + {"field": "12169931081789589897055717367124877256575929966387382120917584973029020832869"}, + {"field": "21818267246045856065434138258595722838929303036309447015572819407357204836807"}, + {"field": "12774258637642947671811069562159726486571542596211636993020005577690694848049"}, + {"field": "26580958901442438463407415327172767560886340197773568765250452050026612259953"}, + {"field": "8385175168577570085831689310731165400788492984084793874726474883626626504114"}, + {"field": "10194612685163094452715140219720202421686624465873227731475044089217435393336"}, + {"field": "18757392707808822605949465218534730595326404094390579053102116482049164033970"}, + {"field": "16410022907407856624331832050518923669512506365663536499768857252658760772915"}, + {"field": "14820234827249778464216614135432063571623714963454369932080961017660334540869"}, + {"field": "25983571043180388370054783417045884243504137191341227283124440052345485682346"}, + {"field": "24396519917963004818355404409457875230319133175084139831515792140591402256865"}, + {"field": "9870749377985752019762865167071480557542585917726874445632445221962374214973"}, + {"field": "2083449758566491628164313947369228188840375801584644737719452493190899570161"}, + {"field": "24433709601366967020187616509364375424760801973857464790191462599995149286092"}, + {"field": "6926794223876757856996868644148217265267729983667599895201864227895444339755"}, + {"field": "11827175297845576996892540874648505846091125249544755980250758706906704594547"}, + {"field": "14349038192004803567993754350646014664125877705163764738471318429828960647497"}, + {"field": "6628380988279242086531617293282602667236877039815656456684816408944523272628"}, + {"field": "8532269511099183330561272385492541990011250226344254189689239265931623803034"}, + {"field": "188775100287763671920858160850850197193998312968727269130756785296904083195"}, + {"field": "18246723342702637032645325541010238292139019574674732375650007663529199617823"}, + {"field": "24077221761252579281767444117765104387717025704137559726153775319597970270384"}, + {"field": "22814070759329047303373796303594615481544119013263469790210447301459224420114"}, + {"field": "1497156480037194840184567688522819316434631351270389121303349469134289984458"}, + {"field": "19909359073215449146701432960009942619625768897434900536361814548588001630009"}, + {"field": "22941531219520426141803320003951464587766770260897952302484884073003709691977"}, + {"field": "12774258637642947671811069562159726486571542596211636993020005577690694848049"}, + {"field": "11172190137383503753533834609061787282428569293100695291900799970867761988094"}, + {"field": "11318551371360175146100573859165674218174962007290642310872742629107270353817"}, + {"field": "25661051069881420890748955547009270132300890733776515040732491269523552629705"}, + {"field": "27009626269973998181793346317415306866249658203998287124756162215839775262524"}, + {"field": "26440558056275664160797002078747519807333324153057879629262574193304627153278"}, + {"field": "10054997823684070614396024893759780525441176579149038020017314259623485605866"}, + {"field": "21559664588861377646837701961333822512227471987193559529894337966729312170826"}, + {"field": "20532481475687319817922203176745419248916715743910492129062143048077544314790"}, + {"field": "3899704063753769030150478326785028813454373955941383443128514070751780253087"}, + {"field": "21515146505305844126939775686003159323693338836653241315492281067589044812709"}, + {"field": "17464358475080509620419484558329512272849079893030153680276256913966946334475"}, + {"field": "22639895075435751780668378162592171407706867191748205852466286108018628270081"}, + {"field": "22298401612741883361321838303646601209442136633382505209459797878659231641919"}, + {"field": "22637780356733447656887617225573903695738804017517701787169499147704665736088"}, + {"field": "8702275940155619755410945334412431035012943797359955656173133343635283353625"}, + {"field": "12678678729297819239067733503150474817320555290529384478005974891728269390754"}, + {"field": "5030403164509148539835279542767894040854438203508614621223670583527219700061"}, + {"field": "4030841902732061108635125152423186041660329741287197473434259573667774624291"}, + {"field": "8594629422262297785847905476480770957818548684499264577622256004346991112056"}, + {"field": "8577418650180005427618855728845403770042934472824899033876265480096512724110"}, + {"field": "2636594583168780399354967538093288900222882775689896950760105530628457779962"}, + {"field": "198734808887356409386620863310821406966933381343087620151953905721304714076"}, + {"field": "8901803322312951234470479173852334145977773796372665067978304784539477635451"}, + {"field": "1075015405083123166027136499395373727993856010427874357116039188656254636455"} + ]}, + {"array": [ + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 0}, + {"int": 1}, + {"int": 1}, + {"int": 0}, + {"int": 0}, + {"int": 1} + ]}, + {"array": [ + {"field": "22414169737720256218306863944068040546175006091707552157408652555605944480495"}, + {"field": "26154496784602203776711003763747898229239577849433154889122683049478444640169"}, + {"field": "21080758769175165910420769013730985487411299194044234127399830541566367912099"}, + {"field": "1950786523394159675752662174932995552630655229097011682094478199415707799516"}, + {"field": "19780507343849348922437287735861066888132797643024101004781957404615940402599"}, + {"field": "17775104952993643972842685208867783838685817245642323518768802106912271468130"}, + {"field": "19146833388807215952876873220879101002500940867958019215733156594134423280157"}, + {"field": "27272979592267675291253201178548338275801604309798433256311413405504793972212"}, + {"field": "7460087815199803734581044113698178081507538947727482669518046582699435880452"}, + {"field": "4591058897585463835237837843107840209171276598604350037294772957998866943774"}, + {"field": "27233853948319770773031855852899249367427843275454116570454614063593811095594"}, + {"field": "15212235466216308123275035166816910170015293087591588445608081867490661839123"}, + {"field": "10379900223384785983284531209923165436730874068069043027442072816183315329402"}, + {"field": "6834726161830280546097311983421920919136451148467149872117159898498503552090"}, + {"field": "12237257891259289472799174017504679775396398715013684089532705701510888459073"}, + {"field": "1080331779806558874119360978443492373705625689906372837975466279283260622646"}, + {"field": "5972571793825980889012625556757021183504262874732536022598062274227330904083"}, + {"field": "10741957263126607990597245292092894589097013154662017543142704419916876606289"}, + {"field": "22414169737720256218306863944068040546175006091707552157408652555605944480495"}, + {"field": "26154496784602203776711003763747898229239577849433154889122683049478444640169"}, + {"field": "21080758769175165910420769013730985487411299194044234127399830541566367912099"}, + {"field": "1950786523394159675752662174932995552630655229097011682094478199415707799516"}, + {"field": "19780507343849348922437287735861066888132797643024101004781957404615940402599"}, + {"field": "17775104952993643972842685208867783838685817245642323518768802106912271468130"}, + {"field": "19146833388807215952876873220879101002500940867958019215733156594134423280157"}, + {"field": "27272979592267675291253201178548338275801604309798433256311413405504793972212"}, + {"field": "7460087815199803734581044113698178081507538947727482669518046582699435880452"}, + {"field": "4591058897585463835237837843107840209171276598604350037294772957998866943774"}, + {"field": "27233853948319770773031855852899249367427843275454116570454614063593811095594"}, + {"field": "15212235466216308123275035166816910170015293087591588445608081867490661839123"}, + {"field": "10379900223384785983284531209923165436730874068069043027442072816183315329402"}, + {"field": "6834726161830280546097311983421920919136451148467149872117159898498503552090"}, + {"field": "12237257891259289472799174017504679775396398715013684089532705701510888459073"}, + {"field": "1080331779806558874119360978443492373705625689906372837975466279283260622646"}, + {"field": "5972571793825980889012625556757021183504262874732536022598062274227330904083"}, + {"field": "10741957263126607990597245292092894589097013154662017543142704419916876606289"}, + {"field": "5287742264054242475488081134123716606837272275325589041260823771146134475388"}, + {"field": "1654587101200825104169554210908798830251907490251044901147052988846342716948"}, + {"field": "13308956092854158965457004963204880186394705499575344200501275368221099083233"}, + {"field": "27873915085251784134116874296223264770886169315042554434826563223427820734292"}, + {"field": "16087205869575528073474789221864035623919455540686372720610434821056281313936"}, + {"field": "23985498547541297757434402391584914650358030965067958644118351790339129494462"}, + {"field": "25138941239107822844441373020715453999260290795380352668946010465438023934898"}, + {"field": "23838760211981346513188747726019366677234022517955675694330757469984223992658"}, + {"field": "4535163576709685180574413819455258058611175233947169991460420064041790151590"}, + {"field": "4591058897585463835237837843107840209171276598604350037294772957998866943774"}, + {"field": "27233853948319770773031855852899249367427843275454116570454614063593811095594"}, + {"field": "5531151500071752269854390466677648133029484634415400949466905361660621187895"}, + {"field": "22020720674376270921908539248979324250808466004128797672442226422218044987719"}, + {"field": "16401652832627050546790225448956999868259994588109583891138184088061677810655"}, + {"field": "12237257891259289472799174017504679775396398715013684089532705701510888459073"}, + {"field": "20768190156392065448719246016369449531088769872387309414954108113835849074263"}, + {"field": "22872997548856989956830364991584836843056571172904612480135173941290248096874"}, + {"field": "23421980002160967625511968358068687108141505959103546172922417260025183582767"}, + {"field": "11167469310344757947055714946308878075130366099498513150332220717265419120913"}, + {"field": "2684735474052504475388269177471919121587735185529025652635894592336461212879"}, + {"field": "11920464671772059342331012586601727289660293232280508139284634688456363104310"}, + {"field": "14781519075461310658706656556728150834430553939029350110438269526469616215503"}, + {"field": "19780507343849348922437287735861066888132797643024101004781957404615940402599"}, + {"field": "17775104952993643972842685208867783838685817245642323518768802106912271468130"}, + {"field": "24552159573291694960994577271065530685208657646196321165021118125379407134477"}, + {"field": "20247618476847173028042576259480310969241352066958557545253556873271128609579"}, + {"field": "28049576252651721110309974937395761165287325228141702722461543735580024918249"}, + {"field": "9279678276439093631543537994386820939757320511744562600229561933586859744753"}, + {"field": "27233853948319770773031855852899249367427843275454116570454614063593811095594"}, + {"field": "22722563272108251027977588565125459929510211708116077274299812138191630283533"}, + {"field": "21247497649200331023219222922290421215186502696932330383863400826183405955296"}, + {"field": "8993219500250416448034665738170244934182408781349325729542055427911426890694"}, + {"field": "4868500567854117452257182416235144348993872375850521505302181386771982967541"}, + {"field": "18195398572202695040345702888393600996185907592645601273925756764440938187633"}, + {"field": "13532690111228179411533597489750347335027178407592343836790528567943959541288"}, + {"field": "23421980002160967625511968358068687108141505959103546172922417260025183582767"}, + {"field": "11680274178640742506048816633832166657116021542175459804054530924277593836913"}, + {"field": "11916075007576813108673403225093032162665002259913060591071020045355344782525"}, + {"field": "11920464671772059342331012586601727289660293232280508139284634688456363104310"}, + {"field": "14781519075461310658706656556728150834430553939029350110438269526469616215503"}, + {"field": "19780507343849348922437287735861066888132797643024101004781957404615940402599"}, + {"field": "17775104952993643972842685208867783838685817245642323518768802106912271468130"}, + {"field": "22617742584526213248873980248863368154285884247654852352927137670941751067797"}, + {"field": "27928544957631563663701927709703256153172170656886795526510506899056905703830"}, + {"field": "28049576252651721110309974937395761165287325228141702722461543735580024918249"}, + {"field": "9279678276439093631543537994386820939757320511744562600229561933586859744753"}, + {"field": "27233853948319770773031855852899249367427843275454116570454614063593811095594"}, + {"field": "16188622626632106678142393830558488234055930027231202982113573491575219210736"}, + {"field": "11170639471861439100874423531540243313317873626868678387159324254117768327100"}, + {"field": "8993219500250416448034665738170244934182408781349325729542055427911426890694"}, + {"field": "4868500567854117452257182416235144348993872375850521505302181386771982967541"}, + {"field": "20768190156392065448719246016369449531088769872387309414954108113835849074263"}, + {"field": "22872997548856989956830364991584836843056571172904612480135173941290248096874"}, + {"field": "23421980002160967625511968358068687108141505959103546172922417260025183582767"}, + {"field": "4926223867950469311995372219091714864137346961996146273864666330772582999700"}, + {"field": "14424946711393027198462247142432918354072365183448488564543093458678302394461"}, + {"field": "19807550687581715587186977904420531293809393825676039353795771739255308455427"}, + {"field": "9519695938674612312658568214000574173311391089968134683479490906037870944266"}, + {"field": "12953437185346786781452751368448214498246249217987525948490644490746393058167"}, + {"field": "17775104952993643972842685208867783838685817245642323518768802106912271468130"}, + {"field": "21647031935028247734730669705845127376866421725810757197212720576806297838770"}, + {"field": "8092755942766572427078742456180820937263446669333933872446952071047237340614"}, + {"field": "19078878903618476194975747192921075119834449681447074077521920127750720585576"}, + {"field": "6585173087694591402830133710821013956436848574427622604197420554508139193767"}, + {"field": "21856719205188604511020078522587337380949108776570348683099882101426781990085"}, + {"field": "10244235040999997536726610236321302089999850918816043452466992245797818709179"}, + {"field": "15492035331216093283655594703626720887087788010992004489623328501394826718265"}, + {"field": "8460262142159962173313181408438488788067258524251842593193714321579707444806"}, + {"field": "4868500567854117452257182416235144348993872375850521505302181386771982967541"}, + {"field": "26105735009328458977805267585143586663990832661935007809796372638638462601263"}, + {"field": "2793749634683620165163594639671132833045267652526599014694900659256327669344"}, + {"field": "10741957263126607990597245292092894589097013154662017543142704419916876606289"}, + {"field": "18228824202510258924036611509585841260769115065855697729152244778234771346207"}, + {"field": "10919007553518215923598554342834349675023279698576082418917790536043291567564"}, + {"field": "4108606513138719096507904908793937597559308506623714383672980350811668810662"}, + {"field": "7519578551277785091466453186904476198335255728948103747117140952472130680556"}, + {"field": "8986515989599759955794771107072529763885798103468585896305140461214052064986"}, + {"field": "23985498547541297757434402391584914650358030965067958644118351790339129494462"}, + {"field": "2891109081572450308477954743926279432205566341344548290456246366059412877165"}, + {"field": "5312370075724683048326312058128860351444572815948231313805801038274789485409"}, + {"field": "19078878903618476194975747192921075119834449681447074077521920127750720585576"}, + {"field": "6585173087694591402830133710821013956436848574427622604197420554508139193767"}, + {"field": "21856719205188604511020078522587337380949108776570348683099882101426781990085"}, + {"field": "17790313819024698555379321916247083823944585098470106173011634236161193328819"}, + {"field": "3601399025710289631829569467855170195736897855421540087122414438271349418298"}, + {"field": "8460262142159962173313181408438488788067258524251842593193714321579707444806"}, + {"field": "4868500567854117452257182416235144348993872375850521505302181386771982967541"}, + {"field": "1080331779806558874119360978443492373705625689906372837975466279283260622646"}, + {"field": "5972571793825980889012625556757021183504262874732536022598062274227330904083"}, + {"field": "10741957263126607990597245292092894589097013154662017543142704419916876606289"}, + {"field": "3182017719853234112808160689651263234660979698440656685960904521976611920121"}, + {"field": "2435101750687889164547434940509579848234488330363584324346866765190255993960"}, + {"field": "9717629220284365973702737175817929437911989774934486382250462621840727093741"}, + {"field": "21764276777705591492150882969252325913556618049245034848034832917666290977722"}, + {"field": "16087205869575528073474789221864035623919455540686372720610434821056281313936"}, + {"field": "23985498547541297757434402391584914650358030965067958644118351790339129494462"}, + {"field": "3185586104694402731146478586976080740722659561621585081495202237740198062957"}, + {"field": "9365283145127099341131206677869617543042733283724209463069873063066033959451"}, + {"field": "12971087418213158254269239188422675825289600211708026927527560475867532578048"}, + {"field": "9279678276439093631543537994386820939757320511744562600229561933586859744753"}, + {"field": "27233853948319770773031855852899249367427843275454116570454614063593811095594"}, + {"field": "20485961017290287705682370939432123321100710119723994002464208654356624506703"}, + {"field": "3601399025710289631829569467855170195736897855421540087122414438271349418298"}, + {"field": "8460262142159962173313181408438488788067258524251842593193714321579707444806"}, + {"field": "4868500567854117452257182416235144348993872375850521505302181386771982967541"}, + {"field": "850175721615742237418466114562605958340717955835611075095202442017033134760"}, + {"field": "5972571793825980889012625556757021183504262874732536022598062274227330904083"}, + {"field": "10741957263126607990597245292092894589097013154662017543142704419916876606289"}, + {"field": "15534587916046905981870706498282632310748501143210252725967327004624189957259"}, + {"field": "21716839811410889436189452961932064184759675071932822201907793234820723546789"}, + {"field": "2970928546912316651085386542604805926459237061432812817000627380495681709359"}, + {"field": "14781519075461310658706656556728150834430553939029350110438269526469616215503"}, + {"field": "19780507343849348922437287735861066888132797643024101004781957404615940402599"}, + {"field": "17775104952993643972842685208867783838685817245642323518768802106912271468130"}, + {"field": "3185586104694402731146478586976080740722659561621585081495202237740198062957"}, + {"field": "9365283145127099341131206677869617543042733283724209463069873063066033959451"}, + {"field": "12971087418213158254269239188422675825289600211708026927527560475867532578048"}, + {"field": "9279678276439093631543537994386820939757320511744562600229561933586859744753"}, + {"field": "27233853948319770773031855852899249367427843275454116570454614063593811095594"}, + {"field": "20485961017290287705682370939432123321100710119723994002464208654356624506703"}, + {"field": "3601399025710289631829569467855170195736897855421540087122414438271349418298"}, + {"field": "8460262142159962173313181408438488788067258524251842593193714321579707444806"}, + {"field": "4868500567854117452257182416235144348993872375850521505302181386771982967541"}, + {"field": "850175721615742237418466114562605958340717955835611075095202442017033134760"}, + {"field": "5972571793825980889012625556757021183504262874732536022598062274227330904083"}, + {"field": "10741957263126607990597245292092894589097013154662017543142704419916876606289"} + ]}, + {"array": [ + {"field": "5891070080824220556705667468875218724249615124159154059809566120191781435306"}, + {"field": "19667104267560191886367656581225451215912248738869476161612640572523019226933"} + ]} + ]} +] diff --git a/gen_and_check.sh b/gen_and_check.sh new file mode 100755 index 00000000..e9e0860a --- /dev/null +++ b/gen_and_check.sh @@ -0,0 +1,14 @@ +set -e +mkdir -p ./recursive +ninja -C build arithmetics_cpp_example_assign -j10 +./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/arithmetics.inp -t ./build/examples/cpp/assignment_arithmetics_cpp_example.tbl -c ./build/examples/cpp/circuit_arithmetics_cpp_example.crct -o ./recursive -e pallas -p 2 +./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/arithmetics.inp -t ./build/examples/cpp/assignment_arithmetics_cpp_example.tbl -c ./build/examples/cpp/circuit_arithmetics_cpp_example.crct -o ./recursive -e pallas -p 2 +#ninja -C build merkle_tree_poseidon_cpp_example_assign -j10 +#./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/merkle_tree_poseidon.inp -t ./build/examples/cpp/assignment_merkle_tree_poseidon_cpp_example.tbl -c ./build/examples/cpp/circuit_merkle_tree_poseidon_cpp_example.crct -o ./recursive -e pallas +#./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/merkle_tree_poseidon.inp -t ./build/examples/cpp/assignment_merkle_tree_poseidon_cpp_example.tbl -c ./build/examples/cpp/circuit_merkle_tree_poseidon_cpp_example.crct -o ./recursive -e pallas + +cp -rf ./recursive/placeholder_verifier.cpp ./examples/cpp/placeholder_verifier.cpp +cp -rf ./recursive/placeholder_verifier.inp ./examples/inputs/placeholder_verifier.inp + +ninja -C build placeholder_verifier_cpp_example -j4 +./build_recursive/bin/assigner/assigner -i ./examples/inputs/placeholder_verifier.inp -b ./build/examples/cpp/placeholder_verifier_cpp_example.ll -c recursive/circuit.crct -t recursive/assignment.tbl --max-num-provers 100 -e pallas --check diff --git a/libs/crypto3 b/libs/crypto3 index 81e0c05c..51d35b90 160000 --- a/libs/crypto3 +++ b/libs/crypto3 @@ -1 +1 @@ -Subproject commit 81e0c05c4a36592b135f448b15a65f58e8fe8fed +Subproject commit 51d35b900758e9514f69a219e8bb4c80dc77f6d1 diff --git a/libs/transpiler b/libs/transpiler index ee8145bf..491e056e 160000 --- a/libs/transpiler +++ b/libs/transpiler @@ -1 +1 @@ -Subproject commit ee8145bf0441c6e27db64a66045e3da2d82717ca +Subproject commit 491e056e8e747cf2fb4b74b30a0f437fc69a2072 diff --git a/multi_gen_and_check.sh b/multi_gen_and_check.sh new file mode 100755 index 00000000..f138b551 --- /dev/null +++ b/multi_gen_and_check.sh @@ -0,0 +1,29 @@ +set -e +mkdir -p ./recursive +ninja -C build merkle_poseidon_3provers_cpp_example_assign -j10 +./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl0 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct0 -o ./recursive -e pallas -p 1 -s 3 --multi-prover +./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl0 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct0 -o ./recursive -e pallas -p 1 -s 3 --multi-prover + +cp -rf ./recursive/placeholder_verifier.cpp ./examples/cpp/placeholder_verifier.cpp +cp -rf ./recursive/placeholder_verifier.inp ./examples/inputs/placeholder_verifier.inp + +ninja -C build placeholder_verifier_cpp_example -j4 +./build_recursive/bin/assigner/assigner -i ./examples/inputs/placeholder_verifier.inp -b ./build/examples/cpp/placeholder_verifier_cpp_example.ll -c recursive/circuit.crct -t recursive/assignment.tbl --max-num-provers 100 -e pallas --check + +./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl1 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct1 -o ./recursive -e pallas -p 1 -s 3 --multi-prover +./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl1 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct1 -o ./recursive -e pallas -p 1 -s 3 --multi-prover + +cp -rf ./recursive/placeholder_verifier.cpp ./examples/cpp/placeholder_verifier.cpp +cp -rf ./recursive/placeholder_verifier.inp ./examples/inputs/placeholder_verifier.inp + +ninja -C build placeholder_verifier_cpp_example -j4 +./build_recursive/bin/assigner/assigner -i ./examples/inputs/placeholder_verifier.inp -b ./build/examples/cpp/placeholder_verifier_cpp_example.ll -c recursive/circuit.crct -t recursive/assignment.tbl --max-num-provers 100 -e pallas --check + +./build/bin/recursive_gen/recursive_gen -m gen-input -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl2 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct2 -o ./recursive -e pallas -p 1 -s 3 --multi-prover +./build/bin/recursive_gen/recursive_gen -m gen-verifier -i ./examples/inputs/merkle_poseidon_3provers_public.inp -t ./build/examples/cpp/assignment_merkle_poseidon_3provers_cpp_example.tbl2 -c ./build/examples/cpp/circuit_merkle_poseidon_3provers_cpp_example.crct2 -o ./recursive -e pallas -p 1 -s 3 --multi-prover + +cp -rf ./recursive/placeholder_verifier.cpp ./examples/cpp/placeholder_verifier.cpp +cp -rf ./recursive/placeholder_verifier.inp ./examples/inputs/placeholder_verifier.inp + +ninja -C build placeholder_verifier_cpp_example -j4 +./build_recursive/bin/assigner/assigner -i ./examples/inputs/placeholder_verifier.inp -b ./build/examples/cpp/placeholder_verifier_cpp_example.ll -c recursive/circuit.crct -t recursive/assignment.tbl --max-num-provers 100 -e pallas --check