From 86623b4ceaf2354425b950023a895fcd56bafe9a Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Wed, 24 May 2023 10:39:15 +0100 Subject: [PATCH 001/351] Enable more verbose TVM stack dump (#669) * Verbose stack dump * Move vm::VmLog::DumpStack and vm::VmLog::DumpStackVerbose to the next verbosity levels --- crypto/block/transaction.cpp | 8 ++++- crypto/smc-envelope/SmartContract.cpp | 8 ++++- crypto/vm/continuation.cpp | 48 +++++++++++++++++++++++++++ crypto/vm/continuation.h | 12 +++++++ crypto/vm/log.h | 2 +- crypto/vm/stack.cpp | 43 ++++++++++++++++++------ crypto/vm/stack.hpp | 6 ++-- crypto/vm/vm.cpp | 6 +++- 8 files changed, 116 insertions(+), 17 deletions(-) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 0a02d6fd..fe359993 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1081,7 +1081,13 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { if (cfg.vm_log_verbosity > 1) { vm_log.log_mask |= vm::VmLog::ExecLocation; if (cfg.vm_log_verbosity > 2) { - vm_log.log_mask |= vm::VmLog::DumpStack | vm::VmLog::GasRemaining; + vm_log.log_mask |= vm::VmLog::GasRemaining; + if (cfg.vm_log_verbosity > 3) { + vm_log.log_mask |= vm::VmLog::DumpStack; + if (cfg.vm_log_verbosity > 4) { + vm_log.log_mask |= vm::VmLog::DumpStackVerbose; + } + } } } } diff --git a/crypto/smc-envelope/SmartContract.cpp b/crypto/smc-envelope/SmartContract.cpp index 7ba768a4..4103096c 100644 --- a/crypto/smc-envelope/SmartContract.cpp +++ b/crypto/smc-envelope/SmartContract.cpp @@ -185,7 +185,13 @@ SmartContract::Answer run_smartcont(SmartContract::State state, td::Ref 1) { log.log_mask |= vm::VmLog::ExecLocation; if (vm_log_verbosity > 2) { - log.log_mask |= vm::VmLog::DumpStack | vm::VmLog::GasRemaining; + log.log_mask |= vm::VmLog::GasRemaining; + if (vm_log_verbosity > 3) { + log.log_mask |= vm::VmLog::DumpStack; + if (vm_log_verbosity > 4) { + log.log_mask |= vm::VmLog::DumpStackVerbose; + } + } } } diff --git a/crypto/vm/continuation.cpp b/crypto/vm/continuation.cpp index 94d20125..dc3ad5e9 100644 --- a/crypto/vm/continuation.cpp +++ b/crypto/vm/continuation.cpp @@ -22,6 +22,8 @@ #include "vm/log.h" #include "vm/vm.h" #include "vm/vmstate.h" +#include "vm/boc.h" +#include "td/utils/misc.h" namespace vm { @@ -254,6 +256,16 @@ bool Continuation::deserialize_to(Ref cell, Ref& cont, int m return deserialize_to(cs, cont, mode & ~0x1000) && cs.empty_ext(); } +std::ostream& operator<<(std::ostream& os, const Continuation& cont) { + CellBuilder cb; + if (cont.serialize(cb)) { + auto boc = vm::std_boc_serialize(cb.finalize()); + if (boc.is_ok()) { + os << td::buffer_to_hex(boc.move_as_ok().as_slice()); + } + } +} + bool QuitCont::serialize(CellBuilder& cb) const { // vmc_quit$1000 exit_code:int32 = VmCont; return cb.store_long_bool(8, 4) && cb.store_long_bool(exit_code, 32); @@ -269,6 +281,10 @@ Ref QuitCont::deserialize(CellSlice& cs, int mode) { } } +std::string QuitCont::type() const { + return "vmc_quit"; +} + int ExcQuitCont::jump(VmState* st) const & { int n = 0; try { @@ -280,6 +296,10 @@ int ExcQuitCont::jump(VmState* st) const & { return ~n; } +std::string ExcQuitCont::type() const { + return "vmc_quit_exc"; +} + bool ExcQuitCont::serialize(CellBuilder& cb) const { // vmc_quit_exc$1001 = VmCont; return cb.store_long_bool(9, 4); @@ -302,6 +322,10 @@ int PushIntCont::jump_w(VmState* st) & { return st->jump(std::move(next)); } +std::string PushIntCont::type() const { + return "vmc_pushint"; +} + bool PushIntCont::serialize(CellBuilder& cb) const { // vmc_pushint$1111 value:int32 next:^VmCont = VmCont; return cb.store_long_bool(15, 4) && cb.store_long_bool(push_val, 32) && next->serialize_ref(cb); @@ -353,6 +377,10 @@ Ref ArgContExt::deserialize(CellSlice& cs, int mode) { : Ref{}; } +std::string ArgContExt::type() const { + return "vmc_envelope"; +} + int RepeatCont::jump(VmState* st) const & { VM_LOG(st) << "repeat " << count << " more times (slow)\n"; if (count <= 0) { @@ -401,6 +429,10 @@ Ref RepeatCont::deserialize(CellSlice& cs, int mode) { } } +std::string RepeatCont::type() const { + return "vmc_repeat"; +} + int VmState::repeat(Ref body, Ref after, long long count) { if (count <= 0) { body.clear(); @@ -444,6 +476,10 @@ Ref AgainCont::deserialize(CellSlice& cs, int mode) { } } +std::string AgainCont::type() const { + return "vmc_again"; +} + int VmState::again(Ref body) { return jump(Ref{true, std::move(body)}); } @@ -493,6 +529,10 @@ Ref UntilCont::deserialize(CellSlice& cs, int mode) { } } +std::string UntilCont::type() const { + return "vmc_until"; +} + int VmState::until(Ref body, Ref after) { if (!body->has_c0()) { set_c0(Ref{true, body, std::move(after)}); @@ -575,6 +615,10 @@ Ref WhileCont::deserialize(CellSlice& cs, int mode) { } } +std::string WhileCont::type() const { + return chkcond ? "vmc_while_cond" : "vmc_while_body"; +} + int VmState::loop_while(Ref cond, Ref body, Ref after) { if (!cond->has_c0()) { set_c0(Ref{true, cond, std::move(body), std::move(after), true}); @@ -610,4 +654,8 @@ Ref OrdCont::deserialize(CellSlice& cs, int mode) { : Ref{}; } +std::string OrdCont::type() const { + return "vmc_std"; +} + } // namespace vm diff --git a/crypto/vm/continuation.h b/crypto/vm/continuation.h index 37abe869..8208fc16 100644 --- a/crypto/vm/continuation.h +++ b/crypto/vm/continuation.h @@ -191,8 +191,11 @@ class Continuation : public td::CntObject { return (cont = deserialize(cs, mode)).not_null(); } static bool deserialize_to(Ref cell, Ref& cont, int mode = 0); + virtual std::string type() const = 0; }; +std::ostream& operator<<(std::ostream& os, const Continuation& cont); + class QuitCont : public Continuation { int exit_code; @@ -205,6 +208,7 @@ class QuitCont : public Continuation { } bool serialize(CellBuilder& cb) const override; static Ref deserialize(CellSlice& cs, int mode = 0); + std::string type() const override; }; class ExcQuitCont : public Continuation { @@ -214,6 +218,7 @@ class ExcQuitCont : public Continuation { int jump(VmState* st) const & override; bool serialize(CellBuilder& cb) const override; static Ref deserialize(CellSlice& cs, int mode = 0); + std::string type() const override; }; class PushIntCont : public Continuation { @@ -228,6 +233,7 @@ class PushIntCont : public Continuation { int jump_w(VmState* st) & override; bool serialize(CellBuilder& cb) const override; static Ref deserialize(CellSlice& cs, int mode = 0); + std::string type() const override; }; class RepeatCont : public Continuation { @@ -243,6 +249,7 @@ class RepeatCont : public Continuation { int jump_w(VmState* st) & override; bool serialize(CellBuilder& cb) const override; static Ref deserialize(CellSlice& cs, int mode = 0); + std::string type() const override; }; class AgainCont : public Continuation { @@ -256,6 +263,7 @@ class AgainCont : public Continuation { int jump_w(VmState* st) & override; bool serialize(CellBuilder& cb) const override; static Ref deserialize(CellSlice& cs, int mode = 0); + std::string type() const override; }; class UntilCont : public Continuation { @@ -269,6 +277,7 @@ class UntilCont : public Continuation { int jump_w(VmState* st) & override; bool serialize(CellBuilder& cb) const override; static Ref deserialize(CellSlice& cs, int mode = 0); + std::string type() const override; }; class WhileCont : public Continuation { @@ -284,6 +293,7 @@ class WhileCont : public Continuation { int jump_w(VmState* st) & override; bool serialize(CellBuilder& cb) const override; static Ref deserialize(CellSlice& cs, int mode = 0); + std::string type() const override; }; class ArgContExt : public Continuation { @@ -315,6 +325,7 @@ class ArgContExt : public Continuation { } bool serialize(CellBuilder& cb) const override; static Ref deserialize(CellSlice& cs, int mode = 0); + std::string type() const override; }; class OrdCont : public Continuation { @@ -369,6 +380,7 @@ class OrdCont : public Continuation { } bool serialize(CellBuilder& cb) const override; static Ref deserialize(CellSlice& cs, int mode = 0); + std::string type() const override; }; ControlData* force_cdata(Ref& cont); diff --git a/crypto/vm/log.h b/crypto/vm/log.h index b62ada5e..dc0199b5 100644 --- a/crypto/vm/log.h +++ b/crypto/vm/log.h @@ -31,7 +31,7 @@ namespace vm { struct VmLog { td::LogInterface *log_interface{td::log_interface}; td::LogOptions log_options{td::log_options}; - enum { DumpStack = 2, ExecLocation = 4, GasRemaining = 8 }; + enum { DumpStack = 2, ExecLocation = 4, GasRemaining = 8, DumpStackVerbose = 16 }; int log_mask{1}; static VmLog Null() { VmLog res; diff --git a/crypto/vm/stack.cpp b/crypto/vm/stack.cpp index e82b25de..18589812 100644 --- a/crypto/vm/stack.cpp +++ b/crypto/vm/stack.cpp @@ -21,6 +21,8 @@ #include "vm/box.hpp" #include "vm/atom.h" #include "vm/vmstate.h" +#include "vm/boc.h" +#include "td/utils/misc.h" namespace td { template class td::Cnt; @@ -81,7 +83,7 @@ std::string StackEntry::to_lisp_string() const { return std::move(os).str(); } -void StackEntry::dump(std::ostream& os) const { +void StackEntry::dump(std::ostream& os, bool verbose) const { switch (tp) { case t_null: os << "(null)"; @@ -91,14 +93,23 @@ void StackEntry::dump(std::ostream& os) const { break; case t_cell: if (ref.not_null()) { - os << "C{" << static_cast>(ref)->get_hash().to_hex() << "}"; + if (verbose) { + std::string serialized = "???"; + auto boc = vm::std_boc_serialize(as_cell()); + if (boc.is_ok()) { + serialized = td::buffer_to_hex(boc.move_as_ok().as_slice()); + } + os << "C{" << serialized << "}"; + } else { + os << "C{" << *as_cell() << "}"; + } } else { os << "C{null}"; } break; case t_builder: if (ref.not_null()) { - os << "BC{" << static_cast>(ref)->to_hex() << "}"; + os << "BC{" << *as_builder() << "}"; } else { os << "BC{null}"; } @@ -149,12 +160,24 @@ void StackEntry::dump(std::ostream& os) const { os << "Object{" << (const void*)&*ref << "}"; break; } + case t_vmcont: { + if (ref.not_null()) { + if (verbose) { + os << "Cont{" << *as_cont() << "}"; + } else { + os << "Cont{" << as_cont()->type() << "}"; + } + } else { + os << "Cont{null}"; + } + break; + } default: os << "???"; } } -void StackEntry::print_list(std::ostream& os) const { +void StackEntry::print_list(std::ostream& os, bool verbose) const { switch (tp) { case t_null: os << "()"; @@ -163,7 +186,7 @@ void StackEntry::print_list(std::ostream& os) const { const auto& tuple = *static_cast>(ref); if (is_list()) { os << '('; - tuple[0].print_list(os); + tuple[0].print_list(os, verbose); print_list_tail(os, &tuple[1]); break; } @@ -172,7 +195,7 @@ void StackEntry::print_list(std::ostream& os) const { os << "[]"; } else if (n == 1) { os << "["; - tuple[0].print_list(os); + tuple[0].print_list(os, verbose); os << "]"; } else { os << "["; @@ -181,14 +204,14 @@ void StackEntry::print_list(std::ostream& os) const { if (c++) { os << " "; } - entry.print_list(os); + entry.print_list(os, verbose); } os << ']'; } break; } default: - dump(os); + dump(os, verbose); } } @@ -687,12 +710,12 @@ void Stack::dump(std::ostream& os, int mode) const { os << " [ "; if (mode & 2) { for (const auto& x : stack) { - x.print_list(os); + x.print_list(os, mode & 4); os << ' '; } } else { for (const auto& x : stack) { - x.dump(os); + x.dump(os, mode & 4); os << ' '; } } diff --git a/crypto/vm/stack.hpp b/crypto/vm/stack.hpp index bfc9e7ac..69ed107c 100644 --- a/crypto/vm/stack.hpp +++ b/crypto/vm/stack.hpp @@ -292,8 +292,8 @@ class StackEntry { } bool for_each_scalar(const std::function& func) const; void for_each_scalar(const std::function& func) const; - void dump(std::ostream& os) const; - void print_list(std::ostream& os) const; + void dump(std::ostream& os, bool verbose = false) const; + void print_list(std::ostream& os, bool verbose = false) const; std::string to_string() const; std::string to_lisp_string() const; @@ -558,7 +558,7 @@ class Stack : public td::CntObject { } bool for_each_scalar(const std::function& func) const; void for_each_scalar(const std::function& func) const; - // mode: +1 = add eoln, +2 = Lisp-style lists + // mode: +1 = add eoln, +2 = Lisp-style lists, +4 = serialized bocs void dump(std::ostream& os, int mode = 1) const; bool serialize(vm::CellBuilder& cb, int mode = 0) const; bool deserialize(vm::CellSlice& cs, int mode = 0); diff --git a/crypto/vm/vm.cpp b/crypto/vm/vm.cpp index 3baba279..fbea1952 100644 --- a/crypto/vm/vm.cpp +++ b/crypto/vm/vm.cpp @@ -435,7 +435,11 @@ int VmState::step() { CHECK(code.not_null() && stack.not_null()); if (log.log_mask & vm::VmLog::DumpStack) { std::stringstream ss; - stack->dump(ss, 3); + int mode = 3; + if (log.log_mask & vm::VmLog::DumpStackVerbose) { + mode += 4; + } + stack->dump(ss, mode); VM_LOG(this) << "stack:" << ss.str(); } if (stack_trace) { From c527bfecebb35788978b6c3ab1a6e4f6c7c458bd Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Wed, 24 May 2023 10:40:04 +0100 Subject: [PATCH 002/351] Emulator improvements (#687) * ticktock, unixtime, optional config * documentation * fix account.now * emulate tick/tock for emscripten * remove excessive check * limit stack serialization calls --- emulator/emulator-emscripten.cpp | 23 ++++++- emulator/emulator-extern.cpp | 109 +++++++++++++++++++++++++++---- emulator/emulator-extern.h | 33 ++++++++-- emulator/emulator_export_list | 1 + emulator/transaction-emulator.h | 4 ++ emulator/tvm-emulator.hpp | 4 +- 6 files changed, 154 insertions(+), 20 deletions(-) diff --git a/emulator/emulator-emscripten.cpp b/emulator/emulator-emscripten.cpp index 881664bd..66e97f35 100644 --- a/emulator/emulator-emscripten.cpp +++ b/emulator/emulator-emscripten.cpp @@ -12,6 +12,8 @@ struct TransactionEmulationParams { uint64_t lt; td::optional rand_seed_hex; bool ignore_chksig; + bool is_tick_tock; + bool is_tock; bool debug_enabled; }; @@ -41,6 +43,16 @@ td::Result decode_transaction_emulation_params(const TRY_RESULT(debug_enabled, td::get_json_object_bool_field(obj, "debug_enabled", false)); params.debug_enabled = debug_enabled; + TRY_RESULT(is_tick_tock, td::get_json_object_bool_field(obj, "is_tick_tock", true, false)); + params.is_tick_tock = is_tick_tock; + + TRY_RESULT(is_tock, td::get_json_object_bool_field(obj, "is_tock", true, false)); + params.is_tock = is_tock; + + if (is_tock && !is_tick_tock) { + return td::Status::Error("Inconsistent parameters is_tick_tock=false, is_tock=true"); + } + return params; } @@ -137,7 +149,12 @@ const char *emulate(const char *config, const char* libs, int verbosity, const c return strdup(R"({"fail":true,"message":"Can't set params"})"); } - auto tx = transaction_emulator_emulate_transaction(em, account, message); + const char *result; + if (decoded_params.is_tick_tock) { + result = transaction_emulator_emulate_tick_tock_transaction(em, account, decoded_params.is_tock); + } else { + result = transaction_emulator_emulate_transaction(em, account, message); + } transaction_emulator_destroy(em); @@ -145,12 +162,12 @@ const char *emulate(const char *config, const char* libs, int verbosity, const c { td::JsonBuilder jb; auto json_obj = jb.enter_object(); - json_obj("output", td::JsonRaw(td::Slice(tx))); + json_obj("output", td::JsonRaw(td::Slice(result))); json_obj("logs", logger.get_string()); json_obj.leave(); output = strdup(jb.string_builder().as_cslice().c_str()); } - free((void*) tx); + free((void*) result); return output; } diff --git a/emulator/emulator-extern.cpp b/emulator/emulator-extern.cpp index 31a7b649..c5717dcd 100644 --- a/emulator/emulator-extern.cpp +++ b/emulator/emulator-extern.cpp @@ -8,6 +8,7 @@ #include "transaction-emulator.h" #include "tvm-emulator.hpp" #include "crypto/vm/stack.hpp" +#include "crypto/vm/memo.h" td::Result> boc_b64_to_cell(const char *boc) { TRY_RESULT_PREFIX(boc_decoded, td::base64_decode(td::Slice(boc)), "Can't decode base64 boc: "); @@ -42,6 +43,7 @@ const char *error_response(std::string&& error) { auto json_obj = jb.enter_object(); json_obj("success", td::JsonFalse()); json_obj("error", std::move(error)); + json_obj("external_not_accepted", td::JsonFalse()); json_obj.leave(); return strdup(jb.string_builder().as_cslice().c_str()); } @@ -51,6 +53,7 @@ const char *external_not_accepted_response(std::string&& vm_log, int vm_exit_cod auto json_obj = jb.enter_object(); json_obj("success", td::JsonFalse()); json_obj("error", "External message not accepted by smart contract"); + json_obj("external_not_accepted", td::JsonTrue()); json_obj("vm_log", std::move(vm_log)); json_obj("vm_exit_code", vm_exit_code); json_obj("elapsed_time", elapsed_time); @@ -131,13 +134,16 @@ const char *transaction_emulator_emulate_transaction(void *transaction_emulator, } auto account = block::Account(wc, addr.bits()); - ton::UnixTime now = (unsigned)std::time(nullptr); + ton::UnixTime now = emulator->get_unixtime(); + if (!now) { + now = (unsigned)std::time(nullptr); + } bool is_special = wc == ton::masterchainId && emulator->get_config().is_special_smartcontract(addr); if (!account.unpack(vm::load_cell_slice_ref(shard_account_cell.move_as_ok()), td::Ref(), now, is_special)) { ERROR_RESPONSE(PSTRING() << "Can't unpack shard account"); } - auto result = emulator->emulate_transaction(std::move(account), message_cell, 0, 0, block::transaction::Transaction::tr_ord); + auto result = emulator->emulate_transaction(std::move(account), message_cell, now, 0, block::transaction::Transaction::tr_ord); if (result.is_error()) { ERROR_RESPONSE(PSTRING() << "Emulate transaction failed: " << result.move_as_error()); } @@ -176,6 +182,79 @@ const char *transaction_emulator_emulate_transaction(void *transaction_emulator, std::move(actions_boc_b64), emulation_success.elapsed_time); } +const char *transaction_emulator_emulate_tick_tock_transaction(void *transaction_emulator, const char *shard_account_boc, bool is_tock) { + auto emulator = static_cast(transaction_emulator); + + auto shard_account_cell = boc_b64_to_cell(shard_account_boc); + if (shard_account_cell.is_error()) { + ERROR_RESPONSE(PSTRING() << "Can't deserialize shard account boc: " << shard_account_cell.move_as_error()); + } + auto shard_account_slice = vm::load_cell_slice(shard_account_cell.ok_ref()); + block::gen::ShardAccount::Record shard_account; + if (!tlb::unpack(shard_account_slice, shard_account)) { + ERROR_RESPONSE(PSTRING() << "Can't unpack shard account cell"); + } + + td::Ref addr_slice; + auto account_slice = vm::load_cell_slice(shard_account.account); + if (block::gen::t_Account.get_tag(account_slice) == block::gen::Account::account_none) { + ERROR_RESPONSE(PSTRING() << "Can't run tick/tock transaction on account_none"); + } + block::gen::Account::Record_account account_record; + if (!tlb::unpack(account_slice, account_record)) { + ERROR_RESPONSE(PSTRING() << "Can't unpack account cell"); + } + addr_slice = std::move(account_record.addr); + ton::WorkchainId wc; + ton::StdSmcAddress addr; + if (!block::tlb::t_MsgAddressInt.extract_std_address(addr_slice, wc, addr)) { + ERROR_RESPONSE(PSTRING() << "Can't extract account address"); + } + + auto account = block::Account(wc, addr.bits()); + ton::UnixTime now = emulator->get_unixtime(); + if (!now) { + now = (unsigned)std::time(nullptr); + } + bool is_special = wc == ton::masterchainId && emulator->get_config().is_special_smartcontract(addr); + if (!account.unpack(vm::load_cell_slice_ref(shard_account_cell.move_as_ok()), td::Ref(), now, is_special)) { + ERROR_RESPONSE(PSTRING() << "Can't unpack shard account"); + } + + auto trans_type = is_tock ? block::transaction::Transaction::tr_tock : block::transaction::Transaction::tr_tick; + auto result = emulator->emulate_transaction(std::move(account), {}, now, 0, trans_type); + if (result.is_error()) { + ERROR_RESPONSE(PSTRING() << "Emulate transaction failed: " << result.move_as_error()); + } + auto emulation_result = result.move_as_ok(); + + auto emulation_success = dynamic_cast(*emulation_result); + auto trans_boc_b64 = cell_to_boc_b64(std::move(emulation_success.transaction)); + if (trans_boc_b64.is_error()) { + ERROR_RESPONSE(PSTRING() << "Can't serialize Transaction to boc " << trans_boc_b64.move_as_error()); + } + + auto new_shard_account_cell = vm::CellBuilder().store_ref(emulation_success.account.total_state) + .store_bits(emulation_success.account.last_trans_hash_.as_bitslice()) + .store_long(emulation_success.account.last_trans_lt_).finalize(); + auto new_shard_account_boc_b64 = cell_to_boc_b64(std::move(new_shard_account_cell)); + if (new_shard_account_boc_b64.is_error()) { + ERROR_RESPONSE(PSTRING() << "Can't serialize ShardAccount to boc " << new_shard_account_boc_b64.move_as_error()); + } + + td::optional actions_boc_b64; + if (emulation_success.actions.not_null()) { + auto actions_boc_b64_result = cell_to_boc_b64(std::move(emulation_success.actions)); + if (actions_boc_b64_result.is_error()) { + ERROR_RESPONSE(PSTRING() << "Can't serialize actions list cell to boc " << actions_boc_b64_result.move_as_error()); + } + actions_boc_b64 = actions_boc_b64_result.move_as_ok(); + } + + return success_response(trans_boc_b64.move_as_ok(), new_shard_account_boc_b64.move_as_ok(), std::move(emulation_success.vm_log), + std::move(actions_boc_b64), emulation_success.elapsed_time); +} + bool transaction_emulator_set_unixtime(void *transaction_emulator, uint32_t unixtime) { auto emulator = static_cast(transaction_emulator); @@ -309,16 +388,19 @@ bool tvm_emulator_set_c7(void *tvm_emulator, const char *address, uint32_t unixt return false; } - auto config_params_cell = boc_b64_to_cell(config_boc); - if (config_params_cell.is_error()) { - LOG(ERROR) << "Can't deserialize config params boc: " << config_params_cell.move_as_error(); - return false; - } - auto global_config = std::make_shared(config_params_cell.move_as_ok(), td::Bits256::zero(), block::Config::needWorkchainInfo | block::Config::needSpecialSmc); - auto unpack_res = global_config->unpack(); - if (unpack_res.is_error()) { - LOG(ERROR) << "Can't unpack config params"; - return false; + std::shared_ptr global_config; + if (config_boc != nullptr) { + auto config_params_cell = boc_b64_to_cell(config_boc); + if (config_params_cell.is_error()) { + LOG(ERROR) << "Can't deserialize config params boc: " << config_params_cell.move_as_error(); + return false; + } + global_config = std::make_shared(config_params_cell.move_as_ok(), td::Bits256::zero(), block::Config::needWorkchainInfo | block::Config::needSpecialSmc); + auto unpack_res = global_config->unpack(); + if (unpack_res.is_error()) { + LOG(ERROR) << "Can't unpack config params"; + return false; + } } auto rand_seed_hex_slice = td::Slice(rand_seed_hex); @@ -365,6 +447,9 @@ const char *tvm_emulator_run_get_method(void *tvm_emulator, int method_id, const auto emulator = static_cast(tvm_emulator); auto result = emulator->run_get_method(method_id, stack); + vm::FakeVmStateLimits fstate(1000); // limit recursive (de)serialization calls + vm::VmStateInterface::Guard guard(&fstate); + vm::CellBuilder stack_cb; if (!result.stack->serialize(stack_cb)) { ERROR_RESPONSE(PSTRING() << "Couldn't serialize stack"); diff --git a/emulator/emulator-extern.h b/emulator/emulator-extern.h index db59a822..c2b0bf9a 100644 --- a/emulator/emulator-extern.h +++ b/emulator/emulator-extern.h @@ -80,8 +80,9 @@ EMULATOR_EXPORT bool transaction_emulator_set_debug_enabled(void *transaction_em * @return Json object with error: * { * "success": false, - * "error": "Error description" - * // and optional fields "vm_exit_code" and "vm_log" in case external message was not accepted. + * "error": "Error description", + * "external_not_accepted": false, + * // and optional fields "vm_exit_code", "vm_log", "elapsed_time" in case external message was not accepted. * } * Or success: * { @@ -89,11 +90,35 @@ EMULATOR_EXPORT bool transaction_emulator_set_debug_enabled(void *transaction_em * "transaction": "Base64 encoded Transaction boc", * "shard_account": "Base64 encoded new ShardAccount boc", * "vm_log": "execute DUP...", - * "actions": "Base64 encoded compute phase actions boc (OutList n)" + * "actions": "Base64 encoded compute phase actions boc (OutList n)", + * "elapsed_time": 0.02 * } */ EMULATOR_EXPORT const char *transaction_emulator_emulate_transaction(void *transaction_emulator, const char *shard_account_boc, const char *message_boc); +/** + * @brief Emulate tick tock transaction + * @param transaction_emulator Pointer to TransactionEmulator object + * @param shard_account_boc Base64 encoded BoC serialized ShardAccount of special account + * @param is_tock True for tock transactions, false for tick + * @return Json object with error: + * { + * "success": false, + * "error": "Error description", + * "external_not_accepted": false + * } + * Or success: + * { + * "success": true, + * "transaction": "Base64 encoded Transaction boc", + * "shard_account": "Base64 encoded new ShardAccount boc", + * "vm_log": "execute DUP...", + * "actions": "Base64 encoded compute phase actions boc (OutList n)", + * "elapsed_time": 0.02 + * } + */ +EMULATOR_EXPORT const char *transaction_emulator_emulate_tick_tock_transaction(void *transaction_emulator, const char *shard_account_boc, bool is_tock); + /** * @brief Destroy TransactionEmulator object * @param transaction_emulator Pointer to TransactionEmulator object @@ -129,7 +154,7 @@ EMULATOR_EXPORT bool tvm_emulator_set_libraries(void *tvm_emulator, const char * * @param unixtime Unix timestamp * @param balance Smart contract balance * @param rand_seed_hex Random seed as hex string of length 64 - * @param config Base64 encoded BoC serialized Config dictionary (Hashmap 32 ^Cell) + * @param config Base64 encoded BoC serialized Config dictionary (Hashmap 32 ^Cell). Optional. * @return true in case of success, false in case of error */ EMULATOR_EXPORT bool tvm_emulator_set_c7(void *tvm_emulator, const char *address, uint32_t unixtime, uint64_t balance, const char *rand_seed_hex, const char *config); diff --git a/emulator/emulator_export_list b/emulator/emulator_export_list index 64d4ff59..950c57a0 100644 --- a/emulator/emulator_export_list +++ b/emulator/emulator_export_list @@ -7,6 +7,7 @@ _transaction_emulator_set_config _transaction_emulator_set_libs _transaction_emulator_set_debug_enabled _transaction_emulator_emulate_transaction +_transaction_emulator_emulate_tick_tock_transaction _transaction_emulator_destroy _emulator_set_verbosity_level _tvm_emulator_create diff --git a/emulator/transaction-emulator.h b/emulator/transaction-emulator.h index 08343cb8..b26f4e8a 100644 --- a/emulator/transaction-emulator.h +++ b/emulator/transaction-emulator.h @@ -59,6 +59,10 @@ public: return config_; } + ton::UnixTime get_unixtime() { + return unixtime_; + } + td::Result> emulate_transaction( block::Account&& account, td::Ref msg_root, ton::UnixTime utime, ton::LogicalTime lt, int trans_type); diff --git a/emulator/tvm-emulator.hpp b/emulator/tvm-emulator.hpp index 0236f0ca..46e2538d 100644 --- a/emulator/tvm-emulator.hpp +++ b/emulator/tvm-emulator.hpp @@ -28,7 +28,9 @@ public: args_.set_now(unixtime); args_.set_balance(balance); args_.set_rand_seed(rand_seed); - args_.set_config(config); + if (config) { + args_.set_config(config); + } } void set_debug_enabled(bool debug_enabled) { From 8839e3a81427fbacb202a4b5156c5b062063e677 Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Wed, 24 May 2023 10:40:21 +0100 Subject: [PATCH 003/351] [tonlib] Limit stack serialization (#693) --- tonlib/tonlib/TonlibClient.cpp | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index a2dfa9cf..e29d0b08 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -4262,7 +4262,10 @@ bool is_list(vm::StackEntry entry) { entry = entry.as_tuple()->at(1); } }; -auto to_tonlib_api(const vm::StackEntry& entry) -> tonlib_api::object_ptr { +auto to_tonlib_api(const vm::StackEntry& entry, int& limit) -> td::Result> { + if (limit <= 0) { + return td::Status::Error(PSLICE() << "TVM stack size exceeds limit"); + } switch (entry.type()) { case vm::StackEntry::Type::t_int: return tonlib_api::make_object( @@ -4279,7 +4282,8 @@ auto to_tonlib_api(const vm::StackEntry& entry) -> tonlib_api::object_ptrat(0))); + TRY_RESULT(tl_entry, to_tonlib_api(node.as_tuple()->at(0), --limit)); + elements.push_back(std::move(tl_entry)); node = node.as_tuple()->at(1); } return tonlib_api::make_object( @@ -4287,7 +4291,8 @@ auto to_tonlib_api(const vm::StackEntry& entry) -> tonlib_api::object_ptr( tonlib_api::make_object(std::move(elements))); @@ -4299,6 +4304,16 @@ auto to_tonlib_api(const vm::StackEntry& entry) -> tonlib_api::object_ptr& stack) -> td::Result>> { + int stack_limit = 1000; + std::vector> tl_stack; + for (auto& entry: stack->as_span()) { + TRY_RESULT(tl_entry, to_tonlib_api(entry, --stack_limit)); + tl_stack.push_back(std::move(tl_entry)); + } + return tl_stack; +} + td::Result from_tonlib_api(tonlib_api::tvm_StackEntry& entry) { // TODO: error codes // downcast_call @@ -4510,10 +4525,12 @@ void TonlibClient::perform_smc_execution(td::Ref smc, ton::S auto res = smc->run_get_method(args); // smc.runResult gas_used:int53 stack:vector exit_code:int32 = smc.RunResult; - std::vector> res_stack; - for (auto& entry : res.stack->as_span()) { - res_stack.push_back(to_tonlib_api(entry)); + auto R = to_tonlib_api(res.stack); + if (R.is_error()) { + promise.set_error(R.move_as_error()); + return; } + auto res_stack = R.move_as_ok(); if (res.missing_library.not_null()) { td::Bits256 hash = res.missing_library; From d6b11d9d3613963291bcf11dc284776a76be3eb8 Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Wed, 24 May 2023 14:09:29 +0100 Subject: [PATCH 004/351] build fix (#707) --- crypto/vm/continuation.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/crypto/vm/continuation.cpp b/crypto/vm/continuation.cpp index dc3ad5e9..91386980 100644 --- a/crypto/vm/continuation.cpp +++ b/crypto/vm/continuation.cpp @@ -264,6 +264,7 @@ std::ostream& operator<<(std::ostream& os, const Continuation& cont) { os << td::buffer_to_hex(boc.move_as_ok().as_slice()); } } + return os; } bool QuitCont::serialize(CellBuilder& cb) const { From 9f93888cf402f8421fef38406b67886be043ac58 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 24 May 2023 21:14:13 +0300 Subject: [PATCH 005/351] TVM Upgrade (#686) * New TVM instructions * Remove PREVBLOCKS * Separate target ton_crypto into TVM-related and -unrelared code * Add fine for failed "send message"; rework SENDMSG * Fix include * Fix bugs, improve action fines * Disable fines for special accounts * Handle msg_balance_remaining.grams == null in transaction.cpp * Bugfixes in SENDMSG * Fix fee calculation in SENDMSG * Fix CellStorageStat and transaction.cpp after merge * SETBOUNCEONACTIONPHASEFAIL instruction * ADDDIVMOD instructions * RUNVM, RUNVMX instructions * Changes in RUNVM * Tests for adddiv and runvm * HASHEXT instruction * Improve opcode-timing More iterations Don't measure preliminary run Remove logs and other excessive operations Add "error" to output * Increase RUNVM gas price * Optimize HASHEXT, adjust gas price * Add "bounce of action fail" flag to actions * Stack operations with unlimited arguments * Ristretto255 instructions * Adjust gas consumption * Optional fixed number of return values in RUNVM, fix exception handling * Adjust gas consumption * Simplify gas consumption logic * Support of secp256k1 and sodium libraries in builds (#11) * add support of secp256k1 library to the builds (linux, win) * add support of secp256k1 library to the builds (linux, win) * install secp256k1 via brew * install libsodium via brew; change sodium to upper case in FindSodium.cmake * install libsodium via brew; change sodium to upper case in FindSodium.cmake * simplify FindSodium.cmake * bug fixing * bug fixing * bug fixing * add macro SODIUM_STATIC * adjust build command for windows * put back original FindSodium.cmake * put back original FindSodium.cmake * fix sodium unzipped path for windows; add ninja * fix sodium unzipped path for windows; add ninja * fix sodium unzipped path for windows; add ninja * Win32 github build for secp256k1 * x64 architecture github build for secp256k1 * fix sodium linking on linux * enable docker buildx arm64 builds from forked repos * enable docker buildx arm64 builds from forked repos * enable docker buildx arm64 builds from forked repos * adjust mac builds for secp2561k and sodium * fix tonlib jni generation * minor fix * sync fixes across platforms * add libsodium build script for android and precompiled static libraries * build tonlib for android (fails) * FindSodium uppercase * remove system libsodium for android, use precompiled instead; specify SECP256K1_INCLUDE_DIR fir mac 12.6 * uppercase sodium * simplify FindSodium * fix windows build sodium path; use ninja for windows * simplify sodium 2 * adjust windows sodium paths; add paths to android jni * add ninja build windows * add ninja build windows * add ninja build windows 2 * remove win ninja * fix 1 * fix 2 * fix win 3 * fix linux compile 3 * fix jni 1 * fix jni 2 and mac * fix jni 3 * fix jni 4 * fix jni 5 * fix mac 6 * fix mac 7 and jni paths * fix jni 8 * rework sodium for android * rework sodium for android * rework sodium for android 2 * fixed sodium for android 2 * fixed sodium for android 3 * static secp256k1 for android * add precompiled arm secp256k1 * add precompiled arm secp256k1 * build native-lib with secp256k1 x86-64 (non arm) * update precompiled with NDK libsecp256k1.a * update precompiled with NDK libsecp256k1.a * update precompiled with NDK libsecp256k1.a * refactor llvm-strip location * refactor llvm-strip location * add native-lib.so for armv7a, armv8a * add native-lib.so for armv7a, armv8a * test armv7a, armv8a * armv7a - fails linking on sodium, test -> armv8a * works x86-64, armv7a - fails linking on sodium, armv8a - fails linking secp256k1 (incompatible with aarch64linux) * update libpsec256k1, sodium static libs * test x86 android native-lib * test armv7 android native-lib * test armv8 android native-lib * x86_64 and arm64 android native-lib works * x86_64 and arm64 android native-lib works * x86_64 and arm64 android native-lib works * test armv7 android native-lib * test all android native-libs * test all android native-libs * test all android native-libs * test all android native-libs - without SodiumAndroid * test all android native-libs - with FindSodiumAndroid.cmake * win, with Sodium via SODIUM_DIR * win, with Sodium via SODIUM_DIR env * win, with Sodium via SODIUM_DIR env * win, with Sodium via SODIUM_DIR env and SODIUM_USE_STATIC_LIBS * win, with Sodium via SODIUM_DIR, SODIUM_USE_STATIC_LIBS and SODIUM_INCLUDE_DIR * android, with FindSodium * android, with FindSodium with SODIUM_USE_STATIC_LIBS * remove if not apple * target_link_libraries(ton_crypto_core PUBLIC secp256k1) * android SECP256K1_INCLUDE_DIRS * android SECP256K1_INCLUDE_DIR * add libsecp256k1.a/so pre-compiled with ubuntu 22 x86-64 * add libsecp256k1.a/so pre-compiled with ubuntu 22 x86-64 * sodium dirs * sodium dirs * sodium dirs * remove NOT APPLE and SodiumAndroid * add NOT APPLE and remove SodiumAndroid * add NOT APPLE and remove SodiumAndroid * remove build scripts for 18.04, reduce CMakeLists.txt * remove build scripts for 18.04, reduce CMakeLists.txt * Fix cas consumption during library load * Fix fetch_config_params after merge * Add all ADDDIVMOD ops to Asm.fif * Save unpaid storage fee to due_payment * Add "set prev blocks info" to emulator * Adjusted builds (#13) * Update flake.nix Add libsodium * add libsecp256k1-dev and libsodium-dev into wasm build * make back emulator a shared library; put emulator to artifacts; compile wasm artifacts with sodium and secp256k1. * add secp256k1 to nix * compile emulator statically with nix * compile emulator statically with nix * compile emulator lib statically with nix * compile emulator lib statically with nix * add libemulator to artifacts * add shared libemulator library to artifacts * minor release fix * update set-output commands; add recent_changelog.md * releases fixes * releases fixes, multiline * releases fixes, multiline * releases fixes, multiline * put back multiline changelog * put back multiline changelog * ConfigParam 19 (global-id) and GLOBALID instruction * Fix gas consumption in HASHEXT * Add blst library * Add bls instructions * Allow passing long code to opcode-timing * Add bls testcase * More BLS instructions * Fix tests, add bls tests * Add more bls tests * Improve some bls operations * Adjust some BLS gas prices * Adjust BLS gas prices * Enable __BLST_PORTABLE__ flag only if PORTABLE flag is set * Add tests for BLS_PAIRING * GASCONSUMED instruction * Fix compilation against docker with blst library; (#14) * fix compilation against docker with blst library; add precompiled libblst.a to android builds * minor fix * Adjust BLKSWX gas * Fix comparison with NAN * Allow arbitrary integers for scalars in ristretto multiplication, fix test * Adjust nix builds according to PR 694 (#15) * integrate and test PR-694 * integrate and test PR-694, test 2 * Add P256_CHKSIGN (secp256r1) --------- Co-authored-by: SpyCheese Co-authored-by: neodiX42 --- .github/script/amd64-20.04.Dockerfile | 4 +- .github/script/amd64-22.04.Dockerfile | 4 +- .github/script/arm64-20.04.Dockerfile | 4 +- .github/script/arm64-22.04.Dockerfile | 4 +- .github/script/fift-func-wasm-build-ubuntu.sh | 44 +- .github/workflows/create-release.yml | 2 +- .github/workflows/macos-11.7-compile.yml | 7 +- .github/workflows/macos-12.6-compile.yml | 16 +- .github/workflows/ton-aarch64-linux.yml | 3 +- .github/workflows/ton-aarch64-macos.yml | 1 + .github/workflows/ton-ccpcheck.yml | 2 +- .github/workflows/ton-wasm-emscripten.yml | 2 +- .github/workflows/ton-x86-64-linux.yml | 3 +- .github/workflows/ton-x86-64-macos.yml | 1 + .github/workflows/tonlib-android-jni.yml | 17 +- .github/workflows/ubuntu-22.04-compile.yml | 6 +- .github/workflows/ubuntu-compile.yml | 6 +- .github/workflows/win-2019-compile.yml | 24 +- .gitmodules | 3 + CMake/BuildBLST.cmake | 30 + CMake/FindSecp256k1.cmake | 29 + CMake/FindSodium.cmake | 297 +++++ CMakeLists.txt | 2 + common/CMakeLists.txt | 3 +- common/global-version.h | 24 + crypto/CMakeLists.txt | 161 ++- crypto/block/block.tlb | 4 +- crypto/block/mc-config.cpp | 38 + crypto/block/mc-config.h | 1 + crypto/block/transaction.cpp | 227 +++- crypto/block/transaction.h | 32 +- crypto/ellcurve/p256.cpp | 91 ++ crypto/ellcurve/p256.h | 26 + crypto/ellcurve/secp256k1.cpp | 42 + crypto/ellcurve/secp256k1.h | 23 + crypto/fift/lib/Asm.fif | 113 +- crypto/fift/words.cpp | 7 +- crypto/keccak/keccak.cpp | 473 ++++++++ crypto/keccak/keccak.h | 41 + crypto/test/fift.cpp | 41 +- crypto/test/fift/adddiv.fif | 144 +++ crypto/test/fift/bls.fif | 954 ++++++++++++++++ crypto/test/fift/bls_ops.fif | 215 ++++ crypto/test/fift/deep_stack_ops.fif | 27 + crypto/test/fift/hash_ext.fif | 98 ++ crypto/test/fift/rist255.fif | 89 ++ crypto/test/fift/tvm_runvm.fif | 228 ++++ crypto/vm/Hasher.cpp | 148 +++ crypto/vm/Hasher.h | 58 + crypto/vm/arithops.cpp | 206 +++- crypto/vm/bls.cpp | 334 ++++++ crypto/vm/bls.h | 65 ++ crypto/vm/boc.h | 3 + crypto/vm/contops.cpp | 75 +- crypto/vm/opctable.cpp | 20 + crypto/vm/opctable.h | 18 + crypto/vm/stack.cpp | 2 +- crypto/vm/stack.hpp | 2 +- crypto/vm/stackops.cpp | 39 +- crypto/vm/tonops.cpp | 1012 ++++++++++++++++- crypto/vm/tupleops.cpp | 12 +- crypto/vm/vm.cpp | 175 ++- crypto/vm/vm.h | 94 +- doc/GlobalVersions.md | 39 + docker/Dockerfile | 2 +- emulator/CMakeLists.txt | 2 + emulator/emulator-extern.cpp | 27 + emulator/emulator-extern.h | 8 + emulator/emulator_export_list | 1 + emulator/transaction-emulator.cpp | 6 +- emulator/transaction-emulator.h | 10 +- example/android/CMakeLists.txt | 3 - example/android/README.md | 4 + example/android/build-all.sh | 11 + example/android/build.sh | 49 +- .../android/third_party/blst/armv7/libblst.a | Bin 0 -> 287466 bytes .../android/third_party/blst/armv8/libblst.a | Bin 0 -> 254832 bytes .../android/third_party/blst/i686/libblst.a | Bin 0 -> 337346 bytes .../android/third_party/blst/x86-64/libblst.a | Bin 0 -> 251402 bytes .../android/third_party/libsodium/build.sh | 31 + .../include/sodium.h | 69 ++ .../include/sodium/core.h | 28 + .../include/sodium/crypto_aead_aes256gcm.h | 179 +++ .../sodium/crypto_aead_chacha20poly1305.h | 180 +++ .../sodium/crypto_aead_xchacha20poly1305.h | 100 ++ .../include/sodium/crypto_auth.h | 46 + .../include/sodium/crypto_auth_hmacsha256.h | 70 ++ .../include/sodium/crypto_auth_hmacsha512.h | 68 ++ .../sodium/crypto_auth_hmacsha512256.h | 65 ++ .../include/sodium/crypto_box.h | 177 +++ .../crypto_box_curve25519xchacha20poly1305.h | 164 +++ .../crypto_box_curve25519xsalsa20poly1305.h | 112 ++ .../include/sodium/crypto_core_ed25519.h | 100 ++ .../include/sodium/crypto_core_hchacha20.h | 36 + .../include/sodium/crypto_core_hsalsa20.h | 36 + .../include/sodium/crypto_core_ristretto255.h | 100 ++ .../include/sodium/crypto_core_salsa20.h | 36 + .../include/sodium/crypto_core_salsa2012.h | 36 + .../include/sodium/crypto_core_salsa208.h | 40 + .../include/sodium/crypto_generichash.h | 84 ++ .../sodium/crypto_generichash_blake2b.h | 118 ++ .../include/sodium/crypto_hash.h | 40 + .../include/sodium/crypto_hash_sha256.h | 60 + .../include/sodium/crypto_hash_sha512.h | 60 + .../include/sodium/crypto_kdf.h | 53 + .../include/sodium/crypto_kdf_blake2b.h | 44 + .../include/sodium/crypto_kx.h | 66 ++ .../include/sodium/crypto_onetimeauth.h | 65 ++ .../sodium/crypto_onetimeauth_poly1305.h | 72 ++ .../include/sodium/crypto_pwhash.h | 147 +++ .../include/sodium/crypto_pwhash_argon2i.h | 122 ++ .../include/sodium/crypto_pwhash_argon2id.h | 122 ++ .../crypto_pwhash_scryptsalsa208sha256.h | 120 ++ .../include/sodium/crypto_scalarmult.h | 46 + .../sodium/crypto_scalarmult_curve25519.h | 42 + .../sodium/crypto_scalarmult_ed25519.h | 51 + .../sodium/crypto_scalarmult_ristretto255.h | 43 + .../include/sodium/crypto_secretbox.h | 93 ++ .../crypto_secretbox_xchacha20poly1305.h | 70 ++ .../crypto_secretbox_xsalsa20poly1305.h | 69 ++ .../crypto_secretstream_xchacha20poly1305.h | 108 ++ .../include/sodium/crypto_shorthash.h | 41 + .../sodium/crypto_shorthash_siphash24.h | 50 + .../include/sodium/crypto_sign.h | 107 ++ .../include/sodium/crypto_sign_ed25519.h | 124 ++ .../crypto_sign_edwards25519sha512batch.h | 55 + .../include/sodium/crypto_stream.h | 59 + .../include/sodium/crypto_stream_chacha20.h | 106 ++ .../include/sodium/crypto_stream_salsa20.h | 61 + .../include/sodium/crypto_stream_salsa2012.h | 53 + .../include/sodium/crypto_stream_salsa208.h | 56 + .../include/sodium/crypto_stream_xchacha20.h | 61 + .../include/sodium/crypto_stream_xsalsa20.h | 61 + .../include/sodium/crypto_verify_16.h | 23 + .../include/sodium/crypto_verify_32.h | 23 + .../include/sodium/crypto_verify_64.h | 23 + .../include/sodium/export.h | 57 + .../include/sodium/randombytes.h | 72 ++ .../sodium/randombytes_internal_random.h | 22 + .../include/sodium/randombytes_sysrandom.h | 19 + .../include/sodium/runtime.h | 52 + .../include/sodium/utils.h | 179 +++ .../include/sodium/version.h | 33 + .../libsodium-android-armv7-a/lib/libsodium.a | Bin 0 -> 433614 bytes .../lib/libsodium.la | 41 + .../lib/libsodium.so | Bin 0 -> 314464 bytes .../lib/pkgconfig/libsodium.pc | 12 + .../include/sodium.h | 69 ++ .../include/sodium/core.h | 28 + .../include/sodium/crypto_aead_aes256gcm.h | 179 +++ .../sodium/crypto_aead_chacha20poly1305.h | 180 +++ .../sodium/crypto_aead_xchacha20poly1305.h | 100 ++ .../include/sodium/crypto_auth.h | 46 + .../include/sodium/crypto_auth_hmacsha256.h | 70 ++ .../include/sodium/crypto_auth_hmacsha512.h | 68 ++ .../sodium/crypto_auth_hmacsha512256.h | 65 ++ .../include/sodium/crypto_box.h | 177 +++ .../crypto_box_curve25519xchacha20poly1305.h | 164 +++ .../crypto_box_curve25519xsalsa20poly1305.h | 112 ++ .../include/sodium/crypto_core_ed25519.h | 100 ++ .../include/sodium/crypto_core_hchacha20.h | 36 + .../include/sodium/crypto_core_hsalsa20.h | 36 + .../include/sodium/crypto_core_ristretto255.h | 100 ++ .../include/sodium/crypto_core_salsa20.h | 36 + .../include/sodium/crypto_core_salsa2012.h | 36 + .../include/sodium/crypto_core_salsa208.h | 40 + .../include/sodium/crypto_generichash.h | 84 ++ .../sodium/crypto_generichash_blake2b.h | 118 ++ .../include/sodium/crypto_hash.h | 40 + .../include/sodium/crypto_hash_sha256.h | 60 + .../include/sodium/crypto_hash_sha512.h | 60 + .../include/sodium/crypto_kdf.h | 53 + .../include/sodium/crypto_kdf_blake2b.h | 44 + .../include/sodium/crypto_kx.h | 66 ++ .../include/sodium/crypto_onetimeauth.h | 65 ++ .../sodium/crypto_onetimeauth_poly1305.h | 72 ++ .../include/sodium/crypto_pwhash.h | 147 +++ .../include/sodium/crypto_pwhash_argon2i.h | 122 ++ .../include/sodium/crypto_pwhash_argon2id.h | 122 ++ .../crypto_pwhash_scryptsalsa208sha256.h | 120 ++ .../include/sodium/crypto_scalarmult.h | 46 + .../sodium/crypto_scalarmult_curve25519.h | 42 + .../sodium/crypto_scalarmult_ed25519.h | 51 + .../sodium/crypto_scalarmult_ristretto255.h | 43 + .../include/sodium/crypto_secretbox.h | 93 ++ .../crypto_secretbox_xchacha20poly1305.h | 70 ++ .../crypto_secretbox_xsalsa20poly1305.h | 69 ++ .../crypto_secretstream_xchacha20poly1305.h | 108 ++ .../include/sodium/crypto_shorthash.h | 41 + .../sodium/crypto_shorthash_siphash24.h | 50 + .../include/sodium/crypto_sign.h | 107 ++ .../include/sodium/crypto_sign_ed25519.h | 124 ++ .../crypto_sign_edwards25519sha512batch.h | 55 + .../include/sodium/crypto_stream.h | 59 + .../include/sodium/crypto_stream_chacha20.h | 106 ++ .../include/sodium/crypto_stream_salsa20.h | 61 + .../include/sodium/crypto_stream_salsa2012.h | 53 + .../include/sodium/crypto_stream_salsa208.h | 56 + .../include/sodium/crypto_stream_xchacha20.h | 61 + .../include/sodium/crypto_stream_xsalsa20.h | 61 + .../include/sodium/crypto_verify_16.h | 23 + .../include/sodium/crypto_verify_32.h | 23 + .../include/sodium/crypto_verify_64.h | 23 + .../include/sodium/export.h | 57 + .../include/sodium/randombytes.h | 72 ++ .../sodium/randombytes_internal_random.h | 22 + .../include/sodium/randombytes_sysrandom.h | 19 + .../include/sodium/runtime.h | 52 + .../include/sodium/utils.h | 179 +++ .../include/sodium/version.h | 33 + .../libsodium-android-armv8-a/lib/libsodium.a | Bin 0 -> 433990 bytes .../lib/libsodium.la | 41 + .../lib/libsodium.so | Bin 0 -> 283928 bytes .../lib/pkgconfig/libsodium.pc | 12 + .../libsodium-android-i686/include/sodium.h | 69 ++ .../include/sodium/core.h | 28 + .../include/sodium/crypto_aead_aes256gcm.h | 179 +++ .../sodium/crypto_aead_chacha20poly1305.h | 180 +++ .../sodium/crypto_aead_xchacha20poly1305.h | 100 ++ .../include/sodium/crypto_auth.h | 46 + .../include/sodium/crypto_auth_hmacsha256.h | 70 ++ .../include/sodium/crypto_auth_hmacsha512.h | 68 ++ .../sodium/crypto_auth_hmacsha512256.h | 65 ++ .../include/sodium/crypto_box.h | 177 +++ .../crypto_box_curve25519xchacha20poly1305.h | 164 +++ .../crypto_box_curve25519xsalsa20poly1305.h | 112 ++ .../include/sodium/crypto_core_ed25519.h | 100 ++ .../include/sodium/crypto_core_hchacha20.h | 36 + .../include/sodium/crypto_core_hsalsa20.h | 36 + .../include/sodium/crypto_core_ristretto255.h | 100 ++ .../include/sodium/crypto_core_salsa20.h | 36 + .../include/sodium/crypto_core_salsa2012.h | 36 + .../include/sodium/crypto_core_salsa208.h | 40 + .../include/sodium/crypto_generichash.h | 84 ++ .../sodium/crypto_generichash_blake2b.h | 118 ++ .../include/sodium/crypto_hash.h | 40 + .../include/sodium/crypto_hash_sha256.h | 60 + .../include/sodium/crypto_hash_sha512.h | 60 + .../include/sodium/crypto_kdf.h | 53 + .../include/sodium/crypto_kdf_blake2b.h | 44 + .../include/sodium/crypto_kx.h | 66 ++ .../include/sodium/crypto_onetimeauth.h | 65 ++ .../sodium/crypto_onetimeauth_poly1305.h | 72 ++ .../include/sodium/crypto_pwhash.h | 147 +++ .../include/sodium/crypto_pwhash_argon2i.h | 122 ++ .../include/sodium/crypto_pwhash_argon2id.h | 122 ++ .../crypto_pwhash_scryptsalsa208sha256.h | 120 ++ .../include/sodium/crypto_scalarmult.h | 46 + .../sodium/crypto_scalarmult_curve25519.h | 42 + .../sodium/crypto_scalarmult_ed25519.h | 51 + .../sodium/crypto_scalarmult_ristretto255.h | 43 + .../include/sodium/crypto_secretbox.h | 93 ++ .../crypto_secretbox_xchacha20poly1305.h | 70 ++ .../crypto_secretbox_xsalsa20poly1305.h | 69 ++ .../crypto_secretstream_xchacha20poly1305.h | 108 ++ .../include/sodium/crypto_shorthash.h | 41 + .../sodium/crypto_shorthash_siphash24.h | 50 + .../include/sodium/crypto_sign.h | 107 ++ .../include/sodium/crypto_sign_ed25519.h | 124 ++ .../crypto_sign_edwards25519sha512batch.h | 55 + .../include/sodium/crypto_stream.h | 59 + .../include/sodium/crypto_stream_chacha20.h | 106 ++ .../include/sodium/crypto_stream_salsa20.h | 61 + .../include/sodium/crypto_stream_salsa2012.h | 53 + .../include/sodium/crypto_stream_salsa208.h | 56 + .../include/sodium/crypto_stream_xchacha20.h | 61 + .../include/sodium/crypto_stream_xsalsa20.h | 61 + .../include/sodium/crypto_verify_16.h | 23 + .../include/sodium/crypto_verify_32.h | 23 + .../include/sodium/crypto_verify_64.h | 23 + .../include/sodium/export.h | 57 + .../include/sodium/randombytes.h | 72 ++ .../sodium/randombytes_internal_random.h | 22 + .../include/sodium/randombytes_sysrandom.h | 19 + .../include/sodium/runtime.h | 52 + .../include/sodium/utils.h | 179 +++ .../include/sodium/version.h | 33 + .../libsodium-android-i686/lib/libsodium.a | Bin 0 -> 567114 bytes .../libsodium-android-i686/lib/libsodium.la | 41 + .../libsodium-android-i686/lib/libsodium.so | Bin 0 -> 454172 bytes .../lib/pkgconfig/libsodium.pc | 12 + .../include/sodium.h | 69 ++ .../include/sodium/core.h | 28 + .../include/sodium/crypto_aead_aes256gcm.h | 179 +++ .../sodium/crypto_aead_chacha20poly1305.h | 180 +++ .../sodium/crypto_aead_xchacha20poly1305.h | 100 ++ .../include/sodium/crypto_auth.h | 46 + .../include/sodium/crypto_auth_hmacsha256.h | 70 ++ .../include/sodium/crypto_auth_hmacsha512.h | 68 ++ .../sodium/crypto_auth_hmacsha512256.h | 65 ++ .../include/sodium/crypto_box.h | 177 +++ .../crypto_box_curve25519xchacha20poly1305.h | 164 +++ .../crypto_box_curve25519xsalsa20poly1305.h | 112 ++ .../include/sodium/crypto_core_ed25519.h | 100 ++ .../include/sodium/crypto_core_hchacha20.h | 36 + .../include/sodium/crypto_core_hsalsa20.h | 36 + .../include/sodium/crypto_core_ristretto255.h | 100 ++ .../include/sodium/crypto_core_salsa20.h | 36 + .../include/sodium/crypto_core_salsa2012.h | 36 + .../include/sodium/crypto_core_salsa208.h | 40 + .../include/sodium/crypto_generichash.h | 84 ++ .../sodium/crypto_generichash_blake2b.h | 118 ++ .../include/sodium/crypto_hash.h | 40 + .../include/sodium/crypto_hash_sha256.h | 60 + .../include/sodium/crypto_hash_sha512.h | 60 + .../include/sodium/crypto_kdf.h | 53 + .../include/sodium/crypto_kdf_blake2b.h | 44 + .../include/sodium/crypto_kx.h | 66 ++ .../include/sodium/crypto_onetimeauth.h | 65 ++ .../sodium/crypto_onetimeauth_poly1305.h | 72 ++ .../include/sodium/crypto_pwhash.h | 147 +++ .../include/sodium/crypto_pwhash_argon2i.h | 122 ++ .../include/sodium/crypto_pwhash_argon2id.h | 122 ++ .../crypto_pwhash_scryptsalsa208sha256.h | 120 ++ .../include/sodium/crypto_scalarmult.h | 46 + .../sodium/crypto_scalarmult_curve25519.h | 42 + .../sodium/crypto_scalarmult_ed25519.h | 51 + .../sodium/crypto_scalarmult_ristretto255.h | 43 + .../include/sodium/crypto_secretbox.h | 93 ++ .../crypto_secretbox_xchacha20poly1305.h | 70 ++ .../crypto_secretbox_xsalsa20poly1305.h | 69 ++ .../crypto_secretstream_xchacha20poly1305.h | 108 ++ .../include/sodium/crypto_shorthash.h | 41 + .../sodium/crypto_shorthash_siphash24.h | 50 + .../include/sodium/crypto_sign.h | 107 ++ .../include/sodium/crypto_sign_ed25519.h | 124 ++ .../crypto_sign_edwards25519sha512batch.h | 55 + .../include/sodium/crypto_stream.h | 59 + .../include/sodium/crypto_stream_chacha20.h | 106 ++ .../include/sodium/crypto_stream_salsa20.h | 61 + .../include/sodium/crypto_stream_salsa2012.h | 53 + .../include/sodium/crypto_stream_salsa208.h | 56 + .../include/sodium/crypto_stream_xchacha20.h | 61 + .../include/sodium/crypto_stream_xsalsa20.h | 61 + .../include/sodium/crypto_verify_16.h | 23 + .../include/sodium/crypto_verify_32.h | 23 + .../include/sodium/crypto_verify_64.h | 23 + .../include/sodium/export.h | 57 + .../include/sodium/randombytes.h | 72 ++ .../sodium/randombytes_internal_random.h | 22 + .../include/sodium/randombytes_sysrandom.h | 19 + .../include/sodium/runtime.h | 52 + .../include/sodium/utils.h | 179 +++ .../include/sodium/version.h | 33 + .../lib/libsodium.a | Bin 0 -> 579332 bytes .../lib/libsodium.la | 41 + .../lib/libsodium.so | Bin 0 -> 400864 bytes .../lib/pkgconfig/libsodium.pc | 12 + .../secp256k1/armv7/libsecp256k1.a | Bin 0 -> 134986 bytes .../secp256k1/armv7/libsecp256k1.so | Bin 0 -> 136228 bytes .../secp256k1/armv8/libsecp256k1.a | Bin 0 -> 167026 bytes .../secp256k1/armv8/libsecp256k1.so | Bin 0 -> 164768 bytes .../android/third_party/secp256k1/build.sh | 32 + .../third_party/secp256k1/i686/libsecp256k1.a | Bin 0 -> 427778 bytes .../secp256k1/i686/libsecp256k1.so | Bin 0 -> 386152 bytes .../third_party/secp256k1/include/secp256k1.h | 708 ++++++++++++ .../secp256k1/include/secp256k1_ecdh.h | 55 + .../include/secp256k1_preallocated.h | 128 +++ .../secp256k1/include/secp256k1_recovery.h | 110 ++ .../third_party/secp256k1/libsecp256k1.a | Bin 0 -> 698458 bytes .../third_party/secp256k1/libsecp256k1.so | Bin 0 -> 488416 bytes .../secp256k1/x86-64/libsecp256k1.a | Bin 0 -> 763762 bytes .../secp256k1/x86-64/libsecp256k1.so | Bin 0 -> 657040 bytes flake.nix | 9 +- test/regression-tests.ans | 7 + third-party/blst | 1 + tonlib/CMakeLists.txt | 4 +- tonlib/tonlib/TonlibClient.cpp | 15 +- utils/opcode-timing.cpp | 113 +- validator/impl/collator-impl.h | 3 +- validator/impl/collator.cpp | 4 +- validator/impl/liteserver.cpp | 1 + validator/impl/validate-query.cpp | 17 +- validator/impl/validate-query.hpp | 3 +- 374 files changed, 25800 insertions(+), 387 deletions(-) create mode 100644 CMake/BuildBLST.cmake create mode 100644 CMake/FindSecp256k1.cmake create mode 100644 CMake/FindSodium.cmake create mode 100644 common/global-version.h create mode 100644 crypto/ellcurve/p256.cpp create mode 100644 crypto/ellcurve/p256.h create mode 100644 crypto/ellcurve/secp256k1.cpp create mode 100644 crypto/ellcurve/secp256k1.h create mode 100644 crypto/keccak/keccak.cpp create mode 100644 crypto/keccak/keccak.h create mode 100644 crypto/test/fift/adddiv.fif create mode 100644 crypto/test/fift/bls.fif create mode 100644 crypto/test/fift/bls_ops.fif create mode 100644 crypto/test/fift/deep_stack_ops.fif create mode 100644 crypto/test/fift/hash_ext.fif create mode 100644 crypto/test/fift/rist255.fif create mode 100644 crypto/test/fift/tvm_runvm.fif create mode 100644 crypto/vm/Hasher.cpp create mode 100644 crypto/vm/Hasher.h create mode 100644 crypto/vm/bls.cpp create mode 100644 crypto/vm/bls.h create mode 100644 doc/GlobalVersions.md create mode 100644 example/android/third_party/blst/armv7/libblst.a create mode 100644 example/android/third_party/blst/armv8/libblst.a create mode 100644 example/android/third_party/blst/i686/libblst.a create mode 100644 example/android/third_party/blst/x86-64/libblst.a create mode 100644 example/android/third_party/libsodium/build.sh create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/core.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_aes256gcm.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_chacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha512.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha512256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box_curve25519xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box_curve25519xsalsa20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_hchacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_hsalsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_ristretto255.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa2012.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa208.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_generichash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_generichash_blake2b.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash_sha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash_sha512.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kdf.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kdf_blake2b.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kx.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_onetimeauth.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_onetimeauth_poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_argon2i.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_argon2id.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_scryptsalsa208sha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_curve25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_ristretto255.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox_xsalsa20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretstream_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_shorthash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_shorthash_siphash24.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign_edwards25519sha512batch.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_chacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa2012.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa208.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_xchacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_xsalsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_16.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_32.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_64.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/export.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes_internal_random.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes_sysrandom.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/runtime.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/utils.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/version.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.a create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.la create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.so create mode 100644 example/android/third_party/libsodium/libsodium-android-armv7-a/lib/pkgconfig/libsodium.pc create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/core.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_aes256gcm.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_chacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha512.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha512256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box_curve25519xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box_curve25519xsalsa20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_hchacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_hsalsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_ristretto255.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa2012.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa208.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_generichash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_generichash_blake2b.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash_sha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash_sha512.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kdf.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kdf_blake2b.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kx.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_onetimeauth.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_onetimeauth_poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_argon2i.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_argon2id.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_scryptsalsa208sha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_curve25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_ristretto255.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox_xsalsa20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretstream_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_shorthash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_shorthash_siphash24.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign_edwards25519sha512batch.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_chacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa2012.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa208.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_xchacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_xsalsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_16.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_32.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_64.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/export.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes_internal_random.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes_sysrandom.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/runtime.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/utils.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/version.h create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.a create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.la create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.so create mode 100644 example/android/third_party/libsodium/libsodium-android-armv8-a/lib/pkgconfig/libsodium.pc create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/core.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_aead_aes256gcm.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_aead_chacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_aead_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha512.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha512256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box_curve25519xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box_curve25519xsalsa20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_hchacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_hsalsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_ristretto255.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa2012.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa208.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_generichash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_generichash_blake2b.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash_sha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash_sha512.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kdf.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kdf_blake2b.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kx.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_onetimeauth.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_onetimeauth_poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_argon2i.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_argon2id.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_scryptsalsa208sha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_curve25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_ristretto255.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox_xsalsa20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretstream_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_shorthash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_shorthash_siphash24.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign_edwards25519sha512batch.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_chacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa2012.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa208.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_xchacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_xsalsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_16.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_32.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_64.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/export.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes_internal_random.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes_sysrandom.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/runtime.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/utils.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/include/sodium/version.h create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/lib/libsodium.a create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/lib/libsodium.la create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/lib/libsodium.so create mode 100644 example/android/third_party/libsodium/libsodium-android-i686/lib/pkgconfig/libsodium.pc create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/core.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_aes256gcm.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_chacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha512.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha512256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box_curve25519xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box_curve25519xsalsa20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_hchacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_hsalsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_ristretto255.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa2012.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa208.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_generichash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_generichash_blake2b.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash_sha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash_sha512.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kdf.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kdf_blake2b.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kx.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_onetimeauth.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_onetimeauth_poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_argon2i.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_argon2id.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_scryptsalsa208sha256.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_curve25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_ristretto255.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox_xsalsa20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretstream_xchacha20poly1305.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_shorthash.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_shorthash_siphash24.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign_ed25519.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign_edwards25519sha512batch.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_chacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa2012.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa208.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_xchacha20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_xsalsa20.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_16.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_32.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_64.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/export.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes_internal_random.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes_sysrandom.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/runtime.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/utils.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/version.h create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/lib/libsodium.a create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/lib/libsodium.la create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/lib/libsodium.so create mode 100644 example/android/third_party/libsodium/libsodium-android-westmere/lib/pkgconfig/libsodium.pc create mode 100644 example/android/third_party/secp256k1/armv7/libsecp256k1.a create mode 100644 example/android/third_party/secp256k1/armv7/libsecp256k1.so create mode 100644 example/android/third_party/secp256k1/armv8/libsecp256k1.a create mode 100644 example/android/third_party/secp256k1/armv8/libsecp256k1.so create mode 100644 example/android/third_party/secp256k1/build.sh create mode 100644 example/android/third_party/secp256k1/i686/libsecp256k1.a create mode 100644 example/android/third_party/secp256k1/i686/libsecp256k1.so create mode 100644 example/android/third_party/secp256k1/include/secp256k1.h create mode 100644 example/android/third_party/secp256k1/include/secp256k1_ecdh.h create mode 100644 example/android/third_party/secp256k1/include/secp256k1_preallocated.h create mode 100644 example/android/third_party/secp256k1/include/secp256k1_recovery.h create mode 100644 example/android/third_party/secp256k1/libsecp256k1.a create mode 100644 example/android/third_party/secp256k1/libsecp256k1.so create mode 100644 example/android/third_party/secp256k1/x86-64/libsecp256k1.a create mode 100644 example/android/third_party/secp256k1/x86-64/libsecp256k1.so create mode 160000 third-party/blst diff --git a/.github/script/amd64-20.04.Dockerfile b/.github/script/amd64-20.04.Dockerfile index cab9caa5..40d980e5 100644 --- a/.github/script/amd64-20.04.Dockerfile +++ b/.github/script/amd64-20.04.Dockerfile @@ -2,13 +2,13 @@ FROM ubuntu:20.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata -RUN apt install -y build-essential cmake clang openssl libssl-dev zlib1g-dev gperf wget git curl libreadline-dev ccache libmicrohttpd-dev ninja-build pkg-config +RUN apt install -y build-essential cmake clang openssl libssl-dev zlib1g-dev gperf wget git curl libreadline-dev ccache libmicrohttpd-dev ninja-build libsecp256k1-dev libsodium-dev pkg-config WORKDIR / ARG BRANCH ARG REPO -RUN git clone --recurse-submodules https://github.com/$REPO && cd ton && git checkout $BRANCH +RUN git clone --recurse-submodules https://github.com/$REPO ton && cd ton && git checkout $BRANCH && git submodule update WORKDIR /ton RUN mkdir /ton/build diff --git a/.github/script/amd64-22.04.Dockerfile b/.github/script/amd64-22.04.Dockerfile index 1ed30e77..44c9c40b 100644 --- a/.github/script/amd64-22.04.Dockerfile +++ b/.github/script/amd64-22.04.Dockerfile @@ -2,13 +2,13 @@ FROM ubuntu:22.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata -RUN apt install -y build-essential cmake clang openssl libssl-dev zlib1g-dev gperf wget git curl libreadline-dev ccache libmicrohttpd-dev ninja-build pkg-config +RUN apt install -y build-essential cmake clang openssl libssl-dev zlib1g-dev gperf wget git curl libreadline-dev ccache libmicrohttpd-dev ninja-build libsecp256k1-dev libsodium-dev pkg-config WORKDIR / ARG BRANCH ARG REPO -RUN git clone --recurse-submodules https://github.com/$REPO && cd ton && git checkout $BRANCH +RUN git clone --recurse-submodules https://github.com/$REPO ton && cd ton && git checkout $BRANCH && git submodule update WORKDIR /ton RUN mkdir /ton/build diff --git a/.github/script/arm64-20.04.Dockerfile b/.github/script/arm64-20.04.Dockerfile index 9066c0f4..1f57dc40 100644 --- a/.github/script/arm64-20.04.Dockerfile +++ b/.github/script/arm64-20.04.Dockerfile @@ -2,13 +2,13 @@ FROM ubuntu:20.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata -RUN apt install -y build-essential cmake clang openssl libssl-dev zlib1g-dev gperf wget git curl libreadline-dev ccache libmicrohttpd-dev ninja-build pkg-config +RUN apt install -y build-essential cmake clang openssl libssl-dev zlib1g-dev gperf wget git curl libreadline-dev ccache libmicrohttpd-dev ninja-build libsecp256k1-dev libsodium-dev pkg-config WORKDIR / ARG BRANCH ARG REPO -RUN git clone --recurse-submodules https://github.com/$REPO && cd ton && git checkout $BRANCH +RUN git clone --recurse-submodules https://github.com/$REPO ton && cd ton && git checkout $BRANCH && git submodule update WORKDIR /ton RUN mkdir /ton/build diff --git a/.github/script/arm64-22.04.Dockerfile b/.github/script/arm64-22.04.Dockerfile index e2cbfadc..2b595839 100644 --- a/.github/script/arm64-22.04.Dockerfile +++ b/.github/script/arm64-22.04.Dockerfile @@ -2,13 +2,13 @@ FROM ubuntu:22.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata -RUN apt install -y build-essential cmake clang openssl libssl-dev zlib1g-dev gperf wget git curl libreadline-dev ccache libmicrohttpd-dev ninja-build pkg-config +RUN apt install -y build-essential cmake clang openssl libssl-dev zlib1g-dev gperf wget git curl libreadline-dev ccache libmicrohttpd-dev ninja-build libsecp256k1-dev libsodium-dev pkg-config WORKDIR / ARG BRANCH ARG REPO -RUN git clone --recurse-submodules https://github.com/$REPO && cd ton && git checkout $BRANCH +RUN git clone --recurse-submodules https://github.com/$REPO ton && cd ton && git checkout $BRANCH && git submodule update WORKDIR /ton RUN mkdir /ton/build diff --git a/.github/script/fift-func-wasm-build-ubuntu.sh b/.github/script/fift-func-wasm-build-ubuntu.sh index b02fe3ee..95de71f9 100755 --- a/.github/script/fift-func-wasm-build-ubuntu.sh +++ b/.github/script/fift-func-wasm-build-ubuntu.sh @@ -8,7 +8,7 @@ export CXX=$(which clang++) export CCACHE_DISABLE=1 cd ../.. -rm -rf openssl zlib emsdk build +rm -rf openssl zlib emsdk secp256k1 libsodium build echo `pwd` git clone https://github.com/openssl/openssl.git @@ -24,13 +24,23 @@ cd zlib ZLIB_DIR=`pwd` cd .. +git clone https://github.com/bitcoin-core/secp256k1.git +cd secp256k1 +./autogen.sh +SECP256K1_DIR=`pwd` +cd .. + +git clone https://github.com/jedisct1/libsodium --branch stable +cd libsodium +SODIUM_DIR=`pwd` +cd .. + mkdir build cd build cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.so -DZLIB_INCLUDE_DIR=$ZLIB_DIR -DOPENSSL_ROOT_DIR=$OPENSSL_DIR -DOPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include -DOPENSSL_CRYPTO_LIBRARY=$OPENSSL_DIR/libcrypto.so -DOPENSSL_SSL_LIBRARY=$OPENSSL_DIR/libssl.so -DTON_USE_ABSEIL=OFF .. test $? -eq 0 || { echo "Can't configure TON build"; exit 1; } - ninja fift smc-envelope test $? -eq 0 || { echo "Can't compile fift "; exit 1; } @@ -50,13 +60,6 @@ export CC=$(which emcc) export CXX=$(which em++) export CCACHE_DISABLE=1 -cd ../zlib - -emconfigure ./configure --static -emmake make -j16 -test $? -eq 0 || { echo "Can't compile zlib with emmake "; exit 1; } -ZLIB_DIR=`pwd` - cd ../openssl make clean @@ -67,11 +70,30 @@ sed -i 's/-O3/-Os/g' Makefile emmake make depend emmake make -j16 test $? -eq 0 || { echo "Can't compile OpenSSL with emmake "; exit 1; } + +cd ../zlib + +emconfigure ./configure --static +emmake make -j16 +test $? -eq 0 || { echo "Can't compile zlib with emmake "; exit 1; } +ZLIB_DIR=`pwd` + +cd ../secp256k1 + +emconfigure ./configure --enable-module-recovery +emmake make -j16 +test $? -eq 0 || { echo "Can't compile secp256k1 with emmake "; exit 1; } + +cd ../libsodium + +emconfigure ./configure --disable-ssp +emmake make -j16 +test $? -eq 0 || { echo "Can't compile libsodium with emmake "; exit 1; } + cd ../build -emcmake cmake -DUSE_EMSCRIPTEN=ON -DCMAKE_BUILD_TYPE=Release -DZLIB_LIBRARY=$ZLIB_DIR/libz.a -DZLIB_INCLUDE_DIR=$ZLIB_DIR -DOPENSSL_ROOT_DIR=$OPENSSL_DIR -DOPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include -DOPENSSL_CRYPTO_LIBRARY=$OPENSSL_DIR/libcrypto.a -DOPENSSL_SSL_LIBRARY=$OPENSSL_DIR/libssl.a -DCMAKE_TOOLCHAIN_FILE=$EMSDK_DIR/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_CXX_FLAGS="-sUSE_ZLIB=1" .. +emcmake cmake -DUSE_EMSCRIPTEN=ON -DCMAKE_BUILD_TYPE=Release -DZLIB_LIBRARY=$ZLIB_DIR/libz.a -DZLIB_INCLUDE_DIR=$ZLIB_DIR -DOPENSSL_ROOT_DIR=$OPENSSL_DIR -DOPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include -DOPENSSL_CRYPTO_LIBRARY=$OPENSSL_DIR/libcrypto.a -DOPENSSL_SSL_LIBRARY=$OPENSSL_DIR/libssl.a -DCMAKE_TOOLCHAIN_FILE=$EMSDK_DIR/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_CXX_FLAGS="-sUSE_ZLIB=1" -DSECP256K1_INCLUDE_DIR=$SECP256K1_DIR/include -DSECP256K1_LIBRARY=$SECP256K1_DIR/.libs/libsecp256k1.a -DSODIUM_INCLUDE_DIR=$SODIUM_DIR/src/libsodium/include -DSODIUM_LIBRARY_RELEASE=$SODIUM_DIR/src/libsodium/.libs/libsodium.a -DSODIUM_LIBRARY_DEBUG=$SODIUM_DIR/src/libsodium/.libs/libsodium.a -DSODIUM_USE_STATIC_LIBS=ON .. test $? -eq 0 || { echo "Can't configure TON with with emmake "; exit 1; } cp -R ../crypto/smartcont ../crypto/fift/lib crypto emmake make -j16 funcfiftlib func fift tlbc emulator-emscripten - diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index cb665122..85560080 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -359,7 +359,7 @@ jobs: uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: artifacts/ton-x86_64-linux-binaries/libtonlibjson.so.0.5 + file: artifacts/ton-x86_64-linux-binaries/libtonlibjson.so asset_name: tonlibjson-linux-x86_64.so tag: ${{ steps.tag.outputs.TAG }} diff --git a/.github/workflows/macos-11.7-compile.yml b/.github/workflows/macos-11.7-compile.yml index b1c97d3d..910b16fc 100644 --- a/.github/workflows/macos-11.7-compile.yml +++ b/.github/workflows/macos-11.7-compile.yml @@ -23,12 +23,12 @@ jobs: - name: Build all run: | export NONINTERACTIVE=1 - brew install ninja libmicrohttpd pkg-config + brew install ninja secp256k1 libsodium libmicrohttpd pkg-config rootPath=`pwd` mkdir build cd build cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_1_1_1/libcrypto.a -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=11.7 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release .. - ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc + ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator - name: Find & copy binaries run: | @@ -42,7 +42,7 @@ jobs: cp build/crypto/tlbc artifacts/ cp build/validator-engine-console/validator-engine-console artifacts/ cp build/tonlib/tonlib-cli artifacts/ - cp build/tonlib/libtonlibjson.0.5.dylib artifacts/ + cp build/tonlib/libtonlibjson.0.5.dylib artifacts/libtonlibjson.dylib cp build/http/http-proxy artifacts/ cp build/rldp-http-proxy/rldp-http-proxy artifacts/ cp build/dht-server/dht-server artifacts/ @@ -51,6 +51,7 @@ jobs: cp build/utils/generate-random-id artifacts/ cp build/utils/json2tlo artifacts/ cp build/adnl/adnl-proxy artifacts/ + cp build/emulator/*emulator.* artifacts/ chmod +x artifacts/* rsync -r crypto/smartcont artifacts/ rsync -r crypto/fift/lib artifacts/ diff --git a/.github/workflows/macos-12.6-compile.yml b/.github/workflows/macos-12.6-compile.yml index c7e2e99b..368abf02 100644 --- a/.github/workflows/macos-12.6-compile.yml +++ b/.github/workflows/macos-12.6-compile.yml @@ -14,12 +14,23 @@ jobs: submodules: 'recursive' - name: Compile OpenSSL run: | + export NONINTERACTIVE=1 + brew install ninja libsodium automake git clone https://github.com/openssl/openssl openssl_1_1_1 cd openssl_1_1_1 git checkout OpenSSL_1_1_1-stable ./Configure --prefix=/usr/local/macos darwin64-x86_64-cc -static -mmacosx-version-min=12.6 make build_libs -j4 + - name: Compile Secp256k1 + run: | + git clone https://github.com/libbitcoin/secp256k1.git + cd secp256k1 + ./autogen.sh + ./configure --enable-module-recovery + make + make install + - name: Build all run: | export NONINTERACTIVE=1 @@ -28,7 +39,7 @@ jobs: mkdir build cd build cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_1_1_1/libcrypto.a -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=12.6 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release .. - ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc + ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator - name: Find & copy binaries run: | @@ -42,7 +53,7 @@ jobs: cp build/crypto/tlbc artifacts/ cp build/validator-engine-console/validator-engine-console artifacts/ cp build/tonlib/tonlib-cli artifacts/ - cp build/tonlib/libtonlibjson.0.5.dylib artifacts/ + cp build/tonlib/libtonlibjson.0.5.dylib artifacts/libtonlibjson.dylib cp build/http/http-proxy artifacts/ cp build/rldp-http-proxy/rldp-http-proxy artifacts/ cp build/dht-server/dht-server artifacts/ @@ -51,6 +62,7 @@ jobs: cp build/utils/generate-random-id artifacts/ cp build/utils/json2tlo artifacts/ cp build/adnl/adnl-proxy artifacts/ + cp build/emulator/*emulator.* artifacts/ chmod +x artifacts/* rsync -r crypto/smartcont artifacts/ rsync -r crypto/fift/lib artifacts/ diff --git a/.github/workflows/ton-aarch64-linux.yml b/.github/workflows/ton-aarch64-linux.yml index ac0d68a5..3c600bee 100644 --- a/.github/workflows/ton-aarch64-linux.yml +++ b/.github/workflows/ton-aarch64-linux.yml @@ -30,7 +30,8 @@ jobs: mkdir artifacts cp $PWD/result-aarch64-linux/bin/* artifacts/ chmod +x artifacts/* - cp $PWD/result-aarch64-linux/lib/libtonlibjson.so.0.5 artifacts/ + cp $PWD/result-aarch64-linux/lib/libtonlibjson.so.0.5 artifacts/libtonlibjson.so + cp $PWD/result-aarch64-linux/lib/libemulator.so artifacts/ cp -R crypto/smartcont artifacts/ cp -R crypto/fift/lib artifacts/ diff --git a/.github/workflows/ton-aarch64-macos.yml b/.github/workflows/ton-aarch64-macos.yml index 8ef4b2b2..75fcec78 100644 --- a/.github/workflows/ton-aarch64-macos.yml +++ b/.github/workflows/ton-aarch64-macos.yml @@ -28,6 +28,7 @@ jobs: cp $PWD/result-aarch64-darwin/bin/* artifacts/ chmod +x artifacts/* cp $PWD/result-aarch64-darwin/lib/libtonlibjson* artifacts/ + cp $PWD/result-aarch64-darwin/lib/libemulator* artifacts/ cp -R crypto/smartcont artifacts/ cp -R crypto/fift/lib artifacts/ diff --git a/.github/workflows/ton-ccpcheck.yml b/.github/workflows/ton-ccpcheck.yml index c2295638..8e9d6ad2 100644 --- a/.github/workflows/ton-ccpcheck.yml +++ b/.github/workflows/ton-ccpcheck.yml @@ -1,4 +1,4 @@ -name: TON ccpcheck +name: TON Ccpcheck on: [push,workflow_dispatch,workflow_call] diff --git a/.github/workflows/ton-wasm-emscripten.yml b/.github/workflows/ton-wasm-emscripten.yml index 1ce83ccc..40a65818 100644 --- a/.github/workflows/ton-wasm-emscripten.yml +++ b/.github/workflows/ton-wasm-emscripten.yml @@ -15,7 +15,7 @@ jobs: - name: Install libraries run: | sudo apt update - sudo apt install -y build-essential git make cmake ninja-build clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev python3-pip nodejs + sudo apt install -y build-essential git make cmake ninja-build clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev python3-pip nodejs libsecp256k1-dev libsodium-dev - name: Configure & Build run: | diff --git a/.github/workflows/ton-x86-64-linux.yml b/.github/workflows/ton-x86-64-linux.yml index 7043d054..e939f22f 100644 --- a/.github/workflows/ton-x86-64-linux.yml +++ b/.github/workflows/ton-x86-64-linux.yml @@ -29,7 +29,8 @@ jobs: mkdir artifacts cp $PWD/result-x86_64/bin/* artifacts/ chmod +x artifacts/* - cp $PWD/result-x86_64/lib/libtonlibjson.so.0.5 artifacts/ + cp $PWD/result-x86_64/lib/libtonlibjson.so.0.5 artifacts/libtonlibjson.so + cp $PWD/result-x86_64/lib/libemulator.so artifacts/ cp -R crypto/smartcont artifacts/ cp -R crypto/fift/lib artifacts/ diff --git a/.github/workflows/ton-x86-64-macos.yml b/.github/workflows/ton-x86-64-macos.yml index 8175a366..44c2d2aa 100644 --- a/.github/workflows/ton-x86-64-macos.yml +++ b/.github/workflows/ton-x86-64-macos.yml @@ -26,6 +26,7 @@ jobs: cp $PWD/result-x86_64-darwin/bin/* artifacts/ chmod +x artifacts/* cp $PWD/result-x86_64-darwin/lib/libtonlibjson.dylib artifacts/ + cp $PWD/result-x86_64-darwin/lib/libemulator.dylib artifacts/ cp -R crypto/smartcont artifacts/ cp -R crypto/fift/lib artifacts/ diff --git a/.github/workflows/tonlib-android-jni.yml b/.github/workflows/tonlib-android-jni.yml index cdc16841..cdf410b4 100644 --- a/.github/workflows/tonlib-android-jni.yml +++ b/.github/workflows/tonlib-android-jni.yml @@ -29,18 +29,23 @@ jobs: export JAVA_INCLUDE_PATH2=${JAVA_HOME}/include/linux export ANDROID_NDK_ROOT=$(pwd)/android-ndk-r25b + export NDK_PLATFORM="android-21" + export ANDROID_PLATFORM="android-21" export OPENSSL_DIR=$(pwd)/example/android/third_party/crypto rm -rf example/android/src/drinkless/org/ton/TonApi.java cd example/android/ - cmake -GNinja -DTON_ONLY_TONLIB=ON . + + sudo apt install -y libtool autoconf libsodium-dev libsecp256k1-dev + + cmake -GNinja -DTON_ONLY_TONLIB=ON . + ninja prepare_cross_compiling + + sudo apt remove -y libsodium-dev libsecp256k1-dev + rm CMakeCache.txt ./build-all.sh - ../../android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip libs/x86/libnative-lib.so - ../../android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip libs/x86_64/libnative-lib.so - ../../android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip libs/armeabi-v7a/libnative-lib.so - ../../android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip libs/arm64-v8a/libnative-lib.so find . -name "*.debug" -type f -delete - name: Find & copy binaries @@ -52,5 +57,5 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@master with: - name: Tonlib JNI libraries for Android + name: tonlib-android-jni path: artifacts \ No newline at end of file diff --git a/.github/workflows/ubuntu-22.04-compile.yml b/.github/workflows/ubuntu-22.04-compile.yml index 8032e498..397116ff 100644 --- a/.github/workflows/ubuntu-22.04-compile.yml +++ b/.github/workflows/ubuntu-22.04-compile.yml @@ -16,7 +16,7 @@ jobs: - name: Install libraries run: | sudo apt update - sudo apt install -y build-essential git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev ninja-build + sudo apt install -y build-essential git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev ninja-build libsecp256k1-dev libsodium-dev - name: Show CPU flags run: | @@ -40,12 +40,12 @@ jobs: cd build cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_1_1_1/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= -DCMAKE_CXX_FLAGS="-mavx2" .. - ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state + ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state emulator - name: Find & copy binaries run: | mkdir artifacts - cp build/storage/storage-daemon/storage-daemon build/storage/storage-daemon/storage-daemon-cli build/crypto/fift build/crypto/tlbc build/crypto/func build/crypto/create-state build/validator-engine-console/validator-engine-console build/tonlib/tonlib-cli build/tonlib/libtonlibjson.so.0.5 build/http/http-proxy build/rldp-http-proxy/rldp-http-proxy build/dht-server/dht-server build/lite-client/lite-client build/validator-engine/validator-engine build/utils/generate-random-id build/utils/json2tlo build/adnl/adnl-proxy artifacts + cp build/storage/storage-daemon/storage-daemon build/storage/storage-daemon/storage-daemon-cli build/crypto/fift build/crypto/tlbc build/crypto/func build/crypto/create-state build/validator-engine-console/validator-engine-console build/tonlib/tonlib-cli build/tonlib/libtonlibjson.so.0.5 build/http/http-proxy build/rldp-http-proxy/rldp-http-proxy build/dht-server/dht-server build/lite-client/lite-client build/validator-engine/validator-engine build/utils/generate-random-id build/utils/json2tlo build/adnl/adnl-proxy build/emulator/libemulator.* artifacts chmod +x artifacts/* cp -R crypto/smartcont artifacts/ cp -R crypto/fift/lib artifacts/ diff --git a/.github/workflows/ubuntu-compile.yml b/.github/workflows/ubuntu-compile.yml index b303e143..171ba46d 100644 --- a/.github/workflows/ubuntu-compile.yml +++ b/.github/workflows/ubuntu-compile.yml @@ -19,7 +19,7 @@ jobs: - name: Install libraries run: | sudo apt update - sudo apt install -y build-essential git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev ninja-build + sudo apt install -y build-essential git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev ninja-build libsecp256k1-dev libsodium-dev - name: Show CPU flags run: | @@ -44,12 +44,12 @@ jobs: buildPath=`pwd` cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$buildPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$buildPath/openssl_1_1_1/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= -DCMAKE_CXX_FLAGS="-mavx2" .. - ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork + ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator - name: Find & copy binaries run: | mkdir artifacts-${{ matrix.os }} - cp build-${{ matrix.os }}/storage/storage-daemon/storage-daemon build-${{ matrix.os }}/storage/storage-daemon/storage-daemon-cli build-${{ matrix.os }}/crypto/fift build-${{ matrix.os }}/crypto/tlbc build-${{ matrix.os }}/crypto/func build-${{ matrix.os }}/crypto/create-state build-${{ matrix.os }}/validator-engine-console/validator-engine-console build-${{ matrix.os }}/tonlib/tonlib-cli build-${{ matrix.os }}/tonlib/libtonlibjson.so.0.5 build-${{ matrix.os }}/http/http-proxy build-${{ matrix.os }}/rldp-http-proxy/rldp-http-proxy build-${{ matrix.os }}/dht-server/dht-server build-${{ matrix.os }}/lite-client/lite-client build-${{ matrix.os }}/validator-engine/validator-engine build-${{ matrix.os }}/utils/generate-random-id build-${{ matrix.os }}/utils/json2tlo build-${{ matrix.os }}/adnl/adnl-proxy artifacts-${{ matrix.os }} + cp build-${{ matrix.os }}/storage/storage-daemon/storage-daemon build-${{ matrix.os }}/storage/storage-daemon/storage-daemon-cli build-${{ matrix.os }}/crypto/fift build-${{ matrix.os }}/crypto/tlbc build-${{ matrix.os }}/crypto/func build-${{ matrix.os }}/crypto/create-state build-${{ matrix.os }}/validator-engine-console/validator-engine-console build-${{ matrix.os }}/tonlib/tonlib-cli build-${{ matrix.os }}/tonlib/libtonlibjson.so.0.5 build-${{ matrix.os }}/http/http-proxy build-${{ matrix.os }}/rldp-http-proxy/rldp-http-proxy build-${{ matrix.os }}/dht-server/dht-server build-${{ matrix.os }}/lite-client/lite-client build-${{ matrix.os }}/validator-engine/validator-engine build-${{ matrix.os }}/utils/generate-random-id build-${{ matrix.os }}/utils/json2tlo build-${{ matrix.os }}/adnl/adnl-proxy build-${{ matrix.os }}/emulator/libemulator.* artifacts-${{ matrix.os }} chmod +x artifacts-${{ matrix.os }}/* cp -R crypto/smartcont artifacts-${{ matrix.os }} cp -R crypto/fift/lib artifacts-${{ matrix.os }} diff --git a/.github/workflows/win-2019-compile.yml b/.github/workflows/win-2019-compile.yml index b0c99971..190c03e1 100644 --- a/.github/workflows/win-2019-compile.yml +++ b/.github/workflows/win-2019-compile.yml @@ -38,6 +38,17 @@ jobs: cd zlib\contrib\vstudio\vc14 msbuild zlibstat.vcxproj /p:Configuration=ReleaseWithoutAsm /p:platform=x64 -p:PlatformToolset=v142 + - name: Compile secp256k1 Win64 + run: | + git clone https://github.com/libbitcoin/secp256k1.git + cd secp256k1\builds\msvc\vs2017 + msbuild /p:Configuration=StaticRelease -p:PlatformToolset=v142 -p:Platform=x64 + + - name: Install pre-compiled libsodium Win64 + run: | + curl -Lo libsodium-1.0.18-stable-msvc.zip https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable-msvc.zip + unzip libsodium-1.0.18-stable-msvc.zip + - name: Install pre-compiled OpenSSL Win64 run: | curl -Lo openssl-1.1.1o.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/openssl-1.1.1o.zip @@ -48,14 +59,21 @@ jobs: curl -Lo libmicrohttpd-latest-w32-bin.zip https://ftpmirror.gnu.org/libmicrohttpd/libmicrohttpd-latest-w32-bin.zip unzip libmicrohttpd-latest-w32-bin.zip + - name: Install pre-compiled Readline Win64 + run: | + curl -Lo readline-5.0-1-lib.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/readline-5.0-1-lib.zip + unzip readline-5.0-1-lib.zip + - name: Compile run: | set root=%cd% + set SODIUM_DIR=%root%\libsodium echo %root% + echo %SODIUM_DIR% mkdir build cd build - cmake -DPORTABLE=1 -DZLIB_FOUND=1 -DMHD_FOUND=1 -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.75-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.75-w32-bin\x86_64\VS2019\Release-static -DZLIB_INCLUDE_DIR=%root%\zlib -DZLIB_LIBRARY=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=%root%/openssl-1.1/x64/include -DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-1.1/x64/lib/libcrypto.lib -DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj /W0" .. - cmake --build . --target storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork --config Release + cmake -DCMAKE_BUILD_TYPE=Release -DSODIUM_USE_STATIC_LIBS=1 -DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include -DSECP256K1_LIBRARY=%root%\secp256k1\bin\x64\Release\v142\static\secp256k1.lib -DREADLINE_INCLUDE_DIR=%root%\readline-5.0-1-lib\include\readline -DREADLINE_LIBRARY=%root%\readline-5.0-1-lib\lib\readline.lib -DPORTABLE=1 -DZLIB_FOUND=1 -DMHD_FOUND=1 -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.75-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.75-w32-bin\x86_64\VS2019\Release-static -DZLIB_INCLUDE_DIR=%root%\zlib -DZLIB_LIBRARY=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=%root%/openssl-1.1/x64/include -DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-1.1/x64/lib/libcrypto.lib -DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj /W0" .. + cmake --build . --target storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator --config Release - name: Show executables run: | @@ -74,7 +92,7 @@ jobs: mkdir artifacts\smartcont mkdir artifacts\lib - for %%I in (build\storage\storage-daemon\Release\storage-daemon.exe build\storage\storage-daemon\Release\storage-daemon-cli.exe build\blockchain-explorer\blockchain-explorer.exe build\crypto\Release\fift.exe build\crypto\Release\tlbc.exe build\crypto\Release\func.exe build\crypto\Release\create-state.exe build\validator-engine-console\Release\validator-engine-console.exe build\tonlib\Release\tonlib-cli.exe build\tonlib\Release\tonlibjson.dll build\http\Release\http-proxy.exe build\rldp-http-proxy\Release\rldp-http-proxy.exe build\dht-server\Release\dht-server.exe build\lite-client\Release\lite-client.exe build\validator-engine\Release\validator-engine.exe build\utils\Release\generate-random-id.exe build\utils\Release\json2tlo.exe build\adnl\Release\adnl-proxy.exe) do copy %%I artifacts\ + for %%I in (build\storage\storage-daemon\Release\storage-daemon.exe build\storage\storage-daemon\Release\storage-daemon-cli.exe build\blockchain-explorer\blockchain-explorer.exe build\crypto\Release\fift.exe build\crypto\Release\tlbc.exe build\crypto\Release\func.exe build\crypto\Release\create-state.exe build\validator-engine-console\Release\validator-engine-console.exe build\tonlib\Release\tonlib-cli.exe build\tonlib\Release\tonlibjson.dll build\http\Release\http-proxy.exe build\rldp-http-proxy\Release\rldp-http-proxy.exe build\dht-server\Release\dht-server.exe build\lite-client\Release\lite-client.exe build\validator-engine\Release\validator-engine.exe build\utils\Release\generate-random-id.exe build\utils\Release\json2tlo.exe build\adnl\Release\adnl-proxy.exe build\emulator\Release\emulator.dll) do copy %%I artifacts\ xcopy /e /k /h /i crypto\smartcont artifacts\smartcont xcopy /e /k /h /i crypto\fift\lib artifacts\lib diff --git a/.gitmodules b/.gitmodules index e6a47e8b..f201ed73 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "third-party/libraptorq"] path = third-party/libraptorq url = https://github.com/ton-blockchain/libRaptorQ +[submodule "third-party/blst"] + path = third-party/blst + url = https://github.com/supranational/blst.git diff --git a/CMake/BuildBLST.cmake b/CMake/BuildBLST.cmake new file mode 100644 index 00000000..1cf2366c --- /dev/null +++ b/CMake/BuildBLST.cmake @@ -0,0 +1,30 @@ +set(BLST_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third-party/blst) +set(BLST_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/third-party/blst) +set(BLST_INCLUDE_DIR ${BLST_SOURCE_DIR}/bindings) + +if (NOT BLST_LIB) + if (WIN32) + set(BLST_LIB ${BLST_BINARY_DIR}/blst.lib) + set(BLST_BUILD_COMMAND ${BLST_SOURCE_DIR}/build.bat) + else() + set(BLST_LIB ${BLST_BINARY_DIR}/libblst.a) + if (PORTABLE) + set(BLST_BUILD_COMMAND ${BLST_SOURCE_DIR}/build.sh -D__BLST_PORTABLE__) + else() + set(BLST_BUILD_COMMAND ${BLST_SOURCE_DIR}/build.sh) + endif() + endif() + + file(MAKE_DIRECTORY ${BLST_BINARY_DIR}) + add_custom_command( + WORKING_DIRECTORY ${BLST_BINARY_DIR} + COMMAND ${BLST_BUILD_COMMAND} + COMMENT "Build blst" + DEPENDS ${BLST_SOURCE_DIR} + OUTPUT ${BLST_LIB} + ) +else() + message(STATUS "Use BLST: ${BLST_LIB}") +endif() + +add_custom_target(blst DEPENDS ${BLST_LIB}) diff --git a/CMake/FindSecp256k1.cmake b/CMake/FindSecp256k1.cmake new file mode 100644 index 00000000..11603f15 --- /dev/null +++ b/CMake/FindSecp256k1.cmake @@ -0,0 +1,29 @@ +# - Try to find SECP256K1 +# Once done this will define +# +# SECP256K1_FOUND - system has SECP256K1 +# SECP256K1_INCLUDE_DIRS - the SECP256K1 include directory +# SECP256K1_LIBRARY - Link these to use SECP256K1 + +find_path( + SECP256K1_INCLUDE_DIR + NAMES secp256k1_recovery.h + DOC "secp256k1_recovery.h include dir" +) + +find_library( + SECP256K1_LIBRARY + NAMES secp256k1 libsecp256k1 + DOC "secp256k1 library" +) + +if (SECP256K1_LIBRARY) + message(STATUS "Found Secp256k1: ${SECP256K1_LIBRARY}") +endif() + +set(SECP256K1_INCLUDE_DIRS ${SECP256K1_INCLUDE_DIR}) +set(SECP256K1_LIBRARIES ${SECP256K1_LIBRARY}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Secp256k1 DEFAULT_MSG SECP256K1_INCLUDE_DIR SECP256K1_LIBRARY) +mark_as_advanced(SECP256K1_INCLUDE_DIR SECP256K1_LIBRARY) diff --git a/CMake/FindSodium.cmake b/CMake/FindSodium.cmake new file mode 100644 index 00000000..0053ac54 --- /dev/null +++ b/CMake/FindSodium.cmake @@ -0,0 +1,297 @@ +# Written in 2016 by Henrik Steffen Gaßmann +# +# To the extent possible under law, the author(s) have dedicated all +# copyright and related and neighboring rights to this software to the +# public domain worldwide. This software is distributed without any warranty. +# +# You should have received a copy of the CC0 Public Domain Dedication +# along with this software. If not, see +# +# http://creativecommons.org/publicdomain/zero/1.0/ +# +######################################################################## +# Tries to find the local libsodium installation. +# +# On Windows the SODIUM_DIR environment variable is used as a default +# hint which can be overridden by setting the corresponding cmake variable. +# +# Once done the following variables will be defined: +# +# SODIUM_FOUND +# SODIUM_INCLUDE_DIR +# SODIUM_LIBRARY_DEBUG +# SODIUM_LIBRARY_RELEASE +# +# +# Furthermore an imported "sodium" target is created. +# + +if (CMAKE_C_COMPILER_ID STREQUAL "GNU" + OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + set(_GCC_COMPATIBLE 1) +endif() + +# static library option +if (NOT DEFINED SODIUM_USE_STATIC_LIBS) + option(SODIUM_USE_STATIC_LIBS "enable to statically link against sodium" OFF) +endif() +if(NOT (SODIUM_USE_STATIC_LIBS EQUAL SODIUM_USE_STATIC_LIBS_LAST)) + unset(sodium_LIBRARY CACHE) + unset(SODIUM_LIBRARY_DEBUG CACHE) + unset(SODIUM_LIBRARY_RELEASE CACHE) + unset(sodium_DLL_DEBUG CACHE) + unset(sodium_DLL_RELEASE CACHE) + set(SODIUM_USE_STATIC_LIBS_LAST ${SODIUM_USE_STATIC_LIBS} CACHE INTERNAL "internal change tracking variable") +endif() + + +######################################################################## +# UNIX +if (UNIX) + # import pkg-config + find_package(PkgConfig QUIET) + if (PKG_CONFIG_FOUND) + pkg_check_modules(sodium_PKG QUIET libsodium) + endif() + + if(SODIUM_USE_STATIC_LIBS) + foreach(_libname ${sodium_PKG_STATIC_LIBRARIES}) + if (NOT _libname MATCHES "^lib.*\\.a$") # ignore strings already ending with .a + list(INSERT sodium_PKG_STATIC_LIBRARIES 0 "lib${_libname}.a") + endif() + endforeach() + list(REMOVE_DUPLICATES sodium_PKG_STATIC_LIBRARIES) + + # if pkgconfig for libsodium doesn't provide + # static lib info, then override PKG_STATIC here.. + if (NOT sodium_PKG_STATIC_FOUND) + set(sodium_PKG_STATIC_LIBRARIES libsodium.a) + endif() + + set(XPREFIX sodium_PKG_STATIC) + else() + if (NOT sodium_PKG_FOUND) + set(sodium_PKG_LIBRARIES sodium) + endif() + + set(XPREFIX sodium_PKG) + endif() + + find_path(SODIUM_INCLUDE_DIR sodium.h + HINTS ${${XPREFIX}_INCLUDE_DIRS} + ) + find_library(SODIUM_LIBRARY_DEBUG NAMES ${${XPREFIX}_LIBRARIES} + HINTS ${${XPREFIX}_LIBRARY_DIRS} + ) + find_library(SODIUM_LIBRARY_RELEASE NAMES ${${XPREFIX}_LIBRARIES} + HINTS ${${XPREFIX}_LIBRARY_DIRS} + ) + + ######################################################################## + # Windows +elseif (WIN32) + set(SODIUM_DIR "$ENV{SODIUM_DIR}" CACHE FILEPATH "sodium install directory") + mark_as_advanced(SODIUM_DIR) + + find_path(SODIUM_INCLUDE_DIR + NAMES sodium.h + HINTS ${SODIUM_DIR} + PATH_SUFFIXES include + ) + + if (MSVC) + # detect target architecture + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/arch.cpp" [=[ + #if defined _M_IX86 + #error ARCH_VALUE x86_32 + #elif defined _M_X64 + #error ARCH_VALUE x86_64 + #endif + #error ARCH_VALUE unknown + ]=]) + try_compile(_UNUSED_VAR "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/arch.cpp" + OUTPUT_VARIABLE _COMPILATION_LOG + ) + string(REGEX REPLACE ".*ARCH_VALUE ([a-zA-Z0-9_]+).*" "\\1" _TARGET_ARCH "${_COMPILATION_LOG}") + + # construct library path + if (_TARGET_ARCH STREQUAL "x86_32") + string(APPEND _PLATFORM_PATH "Win32") + elseif(_TARGET_ARCH STREQUAL "x86_64") + string(APPEND _PLATFORM_PATH "x64") + else() + message(FATAL_ERROR "the ${_TARGET_ARCH} architecture is not supported by Findsodium.cmake.") + endif() + string(APPEND _PLATFORM_PATH "/$$CONFIG$$") + + if (MSVC_VERSION LESS 1900) + math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 60") + else() + math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50") + endif() + string(APPEND _PLATFORM_PATH "/v${_VS_VERSION}") + + if (SODIUM_USE_STATIC_LIBS) + string(APPEND _PLATFORM_PATH "/static") + else() + string(APPEND _PLATFORM_PATH "/dynamic") + endif() + + string(REPLACE "$$CONFIG$$" "Debug" _DEBUG_PATH_SUFFIX "${_PLATFORM_PATH}") + string(REPLACE "$$CONFIG$$" "Release" _RELEASE_PATH_SUFFIX "${_PLATFORM_PATH}") + + find_library(SODIUM_LIBRARY_DEBUG libsodium.lib + HINTS ${SODIUM_DIR} + PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX} + ) + find_library(SODIUM_LIBRARY_RELEASE libsodium.lib + HINTS ${SODIUM_DIR} + PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX} + ) + if (NOT SODIUM_USE_STATIC_LIBS) + set(CMAKE_FIND_LIBRARY_SUFFIXES_BCK ${CMAKE_FIND_LIBRARY_SUFFIXES}) + set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll") + find_library(sodium_DLL_DEBUG libsodium + HINTS ${SODIUM_DIR} + PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX} + ) + find_library(sodium_DLL_RELEASE libsodium + HINTS ${SODIUM_DIR} + PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX} + ) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_BCK}) + endif() + + elseif(_GCC_COMPATIBLE) + if (SODIUM_USE_STATIC_LIBS) + find_library(SODIUM_LIBRARY_DEBUG libsodium.a + HINTS ${SODIUM_DIR} + PATH_SUFFIXES lib + ) + find_library(SODIUM_LIBRARY_RELEASE libsodium.a + HINTS ${SODIUM_DIR} + PATH_SUFFIXES lib + ) + else() + find_library(SODIUM_LIBRARY_DEBUG libsodium.dll.a + HINTS ${SODIUM_DIR} + PATH_SUFFIXES lib + ) + find_library(SODIUM_LIBRARY_RELEASE libsodium.dll.a + HINTS ${SODIUM_DIR} + PATH_SUFFIXES lib + ) + + file(GLOB _DLL + LIST_DIRECTORIES false + RELATIVE "${SODIUM_DIR}/bin" + "${SODIUM_DIR}/bin/libsodium*.dll" + ) + find_library(sodium_DLL_DEBUG ${_DLL} libsodium + HINTS ${SODIUM_DIR} + PATH_SUFFIXES bin + ) + find_library(sodium_DLL_RELEASE ${_DLL} libsodium + HINTS ${SODIUM_DIR} + PATH_SUFFIXES bin + ) + endif() + else() + message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") + endif() + + + ######################################################################## + # unsupported +else() + message(FATAL_ERROR "this platform is not supported by FindSodium.cmake") +endif() + + +######################################################################## +# common stuff + +# extract sodium version +if (SODIUM_INCLUDE_DIR) + set(_VERSION_HEADER "${_INCLUDE_DIR}/sodium/version.h") + if (EXISTS _VERSION_HEADER) + file(READ "${_VERSION_HEADER}" _VERSION_HEADER_CONTENT) + string(REGEX REPLACE ".*#[ \t]*define[ \t]*SODIUM_VERSION_STRING[ \t]*\"([^\n]*)\".*" "\\1" + sodium_VERSION "${_VERSION_HEADER_CONTENT}") + set(sodium_VERSION "${sodium_VERSION}" PARENT_SCOPE) + endif() +endif() + +# communicate results +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + Sodium # The name must be either uppercase or match the filename case. + REQUIRED_VARS + SODIUM_LIBRARY_RELEASE + SODIUM_LIBRARY_DEBUG + SODIUM_INCLUDE_DIR + VERSION_VAR + sodium_VERSION +) + +if(SODIUM_FOUND) + set(SODIUM_LIBRARIES + optimized ${SODIUM_LIBRARY_RELEASE} debug ${SODIUM_LIBRARY_DEBUG}) +endif() + +# mark file paths as advanced +mark_as_advanced(SODIUM_INCLUDE_DIR) +mark_as_advanced(SODIUM_LIBRARY_DEBUG) +mark_as_advanced(SODIUM_LIBRARY_RELEASE) +if (WIN32) + mark_as_advanced(sodium_DLL_DEBUG) + mark_as_advanced(sodium_DLL_RELEASE) +endif() + +# create imported target +if(SODIUM_USE_STATIC_LIBS) + set(_LIB_TYPE STATIC) +else() + set(_LIB_TYPE SHARED) +endif() + +if(NOT TARGET sodium) + add_library(sodium ${_LIB_TYPE} IMPORTED) +endif() + +set_target_properties(sodium PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${SODIUM_INCLUDE_DIR}" + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + ) + +if (SODIUM_USE_STATIC_LIBS) + set_target_properties(sodium PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC" + IMPORTED_LOCATION "${SODIUM_LIBRARY_RELEASE}" + IMPORTED_LOCATION_DEBUG "${SODIUM_LIBRARY_DEBUG}" + ) +else() + if (UNIX) + set_target_properties(sodium PROPERTIES + IMPORTED_LOCATION "${SODIUM_LIBRARY_RELEASE}" + IMPORTED_LOCATION_DEBUG "${SODIUM_LIBRARY_DEBUG}" + ) + elseif (WIN32) + set_target_properties(sodium PROPERTIES + IMPORTED_IMPLIB "${SODIUM_LIBRARY_RELEASE}" + IMPORTED_IMPLIB_DEBUG "${SODIUM_LIBRARY_DEBUG}" + ) + if (NOT (sodium_DLL_DEBUG MATCHES ".*-NOTFOUND")) + set_target_properties(sodium PROPERTIES + IMPORTED_LOCATION_DEBUG "${sodium_DLL_DEBUG}" + ) + endif() + if (NOT (sodium_DLL_RELEASE MATCHES ".*-NOTFOUND")) + set_target_properties(sodium PROPERTIES + IMPORTED_LOCATION_RELWITHDEBINFO "${sodium_DLL_RELEASE}" + IMPORTED_LOCATION_MINSIZEREL "${sodium_DLL_RELEASE}" + IMPORTED_LOCATION_RELEASE "${sodium_DLL_RELEASE}" + ) + endif() + endif() +endif() \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index aafc79b6..4b6f0dc9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -182,6 +182,8 @@ endif() message("Add ton") set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH}) +include(BuildBLST) + # Configure CCache if available find_program(CCACHE_FOUND ccache) #set(CCACHE_FOUND 0) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 8fd70f7b..96d92371 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -8,7 +8,8 @@ set(COMMON_SOURCE errorlog.h errorlog.cpp -) + + global-version.h) add_library(common STATIC ${COMMON_SOURCE}) diff --git a/common/global-version.h b/common/global-version.h new file mode 100644 index 00000000..01c1795d --- /dev/null +++ b/common/global-version.h @@ -0,0 +1,24 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once + +namespace ton { + +// See doc/GlobalVersions.md +const int SUPPORTED_VERSION = 4; + +} diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 598169f7..cdd5d57b 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -4,7 +4,7 @@ if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) endif() -set(TON_CRYPTO_SOURCE +set(TON_CRYPTO_CORE_SOURCE Ed25519.cpp common/bigint.cpp common/refcnt.cpp @@ -19,26 +19,8 @@ set(TON_CRYPTO_SOURCE openssl/bignum.cpp openssl/residue.cpp openssl/rand.cpp - vm/stack.cpp - vm/atom.cpp - vm/continuation.cpp - vm/dict.cpp - vm/memo.cpp - vm/dispatch.cpp - vm/opctable.cpp - vm/cp0.cpp - vm/stackops.cpp - vm/tupleops.cpp - vm/arithops.cpp - vm/cellops.cpp - vm/contops.cpp - vm/dictops.cpp - vm/debugops.cpp - vm/tonops.cpp vm/boc.cpp vm/large-boc-serializer.cpp - vm/utils.cpp - vm/vm.cpp tl/tlblib.cpp Ed25519.h @@ -66,34 +48,10 @@ set(TON_CRYPTO_SOURCE tl/tlbc-data.h tl/tlblib.hpp - vm/arithops.h - vm/atom.h - vm/boc.h - vm/boc-writers.h - vm/box.hpp - vm/cellops.h - vm/continuation.h - vm/contops.h - vm/cp0.h - vm/debugops.h - vm/dict.h - vm/dictops.h - vm/excno.hpp - vm/fmt.hpp - vm/log.h - vm/memo.h - vm/opctable.h - vm/stack.hpp - vm/stackops.h - vm/tupleops.h - vm/tonops.h - vm/vmstate.h - vm/utils.h - vm/vm.h - - vm/cells.h - vm/cellslice.h + keccak/keccak.h + keccak/keccak.cpp + vm/dict.cpp vm/cells/Cell.cpp vm/cells/CellBuilder.cpp vm/cells/CellHash.cpp @@ -106,6 +64,7 @@ set(TON_CRYPTO_SOURCE vm/cells/MerkleProof.cpp vm/cells/MerkleUpdate.cpp + vm/dict.h vm/cells/Cell.h vm/cells/CellBuilder.h vm/cells/CellHash.h @@ -124,9 +83,64 @@ set(TON_CRYPTO_SOURCE vm/cells/VirtualCell.h vm/cells/VirtualizationParameters.h + vm/cells.h + vm/cellslice.h + vm/db/StaticBagOfCellsDb.h vm/db/StaticBagOfCellsDb.cpp -) + + vm/Hasher.h + vm/Hasher.cpp + + ellcurve/secp256k1.h + ellcurve/secp256k1.cpp + ellcurve/p256.h + ellcurve/p256.cpp) + +set(TON_CRYPTO_SOURCE + vm/stack.cpp + vm/atom.cpp + vm/continuation.cpp + vm/memo.cpp + vm/dispatch.cpp + vm/opctable.cpp + vm/cp0.cpp + vm/stackops.cpp + vm/tupleops.cpp + vm/arithops.cpp + vm/cellops.cpp + vm/contops.cpp + vm/dictops.cpp + vm/debugops.cpp + vm/tonops.cpp + vm/utils.cpp + vm/vm.cpp + vm/bls.cpp + + vm/arithops.h + vm/atom.h + vm/boc.h + vm/boc-writers.h + vm/box.hpp + vm/cellops.h + vm/continuation.h + vm/contops.h + vm/cp0.h + vm/debugops.h + vm/dictops.h + vm/excno.hpp + vm/fmt.hpp + vm/log.h + vm/memo.h + vm/opctable.h + vm/stack.hpp + vm/stackops.h + vm/tupleops.h + vm/tonops.h + vm/vmstate.h + vm/utils.h + vm/vm.h + vm/bls.h) set(TON_DB_SOURCE vm/db/DynamicBagOfCellsDb.cpp @@ -271,17 +285,25 @@ set(BIGINT_TEST_SOURCE set(USE_EMSCRIPTEN ${USE_EMSCRIPTEN} PARENT_SCOPE) +add_library(ton_crypto_core STATIC ${TON_CRYPTO_CORE_SOURCE}) +target_include_directories(ton_crypto_core PUBLIC $ + $) +target_link_libraries(ton_crypto_core PUBLIC ${OPENSSL_CRYPTO_LIBRARY} tdutils tddb_utils) +if (NOT WIN32) + target_link_libraries(ton_crypto_core PUBLIC dl z) +endif() +target_include_directories(ton_crypto_core SYSTEM PUBLIC $) add_library(ton_crypto STATIC ${TON_CRYPTO_SOURCE}) target_include_directories(ton_crypto PUBLIC $ $) -target_link_libraries(ton_crypto PUBLIC ${OPENSSL_CRYPTO_LIBRARY} tdutils tddb_utils) +target_link_libraries(ton_crypto PUBLIC ${OPENSSL_CRYPTO_LIBRARY} tdutils tddb_utils ton_crypto_core ton_block) if (USE_EMSCRIPTEN) target_link_options(ton_crypto PRIVATE -fexceptions) target_compile_options(ton_crypto PRIVATE -fexceptions) endif() if (NOT WIN32) - find_library(DL dl) + find_library(DL dl) if (DL) target_link_libraries(ton_crypto PUBLIC dl z) else() @@ -290,6 +312,39 @@ if (NOT WIN32) endif() target_include_directories(ton_crypto SYSTEM PUBLIC $) +add_dependencies(ton_crypto blst) +target_include_directories(ton_crypto PRIVATE ${BLST_INCLUDE_DIR}) +target_link_libraries(ton_crypto PRIVATE ${BLST_LIB}) + +if (NOT USE_EMSCRIPTEN) + find_package(Secp256k1 REQUIRED) +endif() + +if (MSVC) + find_package(Sodium REQUIRED) + target_compile_definitions(ton_crypto PUBLIC SODIUM_STATIC) + target_include_directories(ton_crypto_core PUBLIC $) + target_link_libraries(ton_crypto PUBLIC ${SECP256K1_LIBRARIES}) +elseif (ANDROID) + target_include_directories(ton_crypto_core PUBLIC $) + target_link_libraries(ton_crypto PUBLIC $) +else() + if (NOT USE_EMSCRIPTEN) + find_package(Sodium REQUIRED) + target_include_directories(ton_crypto_core PUBLIC $) + target_link_libraries(ton_crypto PUBLIC ${SECP256K1_LIBRARIES}) + else() + target_include_directories(ton_crypto_core PUBLIC $) + target_link_libraries(ton_crypto PUBLIC ${SECP256K1_LIBRARY}) + endif() + if (NOT APPLE AND NOT USE_EMSCRIPTEN) + target_link_libraries(ton_crypto_core PUBLIC secp256k1) + endif() +endif() + +target_include_directories(ton_crypto_core PUBLIC $) +target_link_libraries(ton_crypto PUBLIC ${SODIUM_LIBRARY_RELEASE}) + add_library(ton_db STATIC ${TON_DB_SOURCE}) target_include_directories(ton_db PUBLIC $ $) @@ -316,12 +371,12 @@ endif() add_library(src_parser ${PARSER_SOURCE}) target_include_directories(src_parser PUBLIC $) -target_link_libraries(src_parser PUBLIC ton_crypto) +target_link_libraries(src_parser PUBLIC ton_crypto_core) add_library(ton_block ${BLOCK_SOURCE}) target_include_directories(ton_block PUBLIC $ $ $) -target_link_libraries(ton_block PUBLIC ton_crypto tdutils tdactor tl_api) +target_link_libraries(ton_block PUBLIC ton_crypto_core tdutils tdactor tl_api) add_executable(func func/func-main.cpp ${FUNC_LIB_SOURCE}) target_include_directories(func PUBLIC $) @@ -347,12 +402,12 @@ if (USE_EMSCRIPTEN) target_link_options(funcfiftlib PRIVATE -sALLOW_TABLE_GROWTH=1) target_link_options(funcfiftlib PRIVATE --embed-file ${CMAKE_CURRENT_SOURCE_DIR}/fift/lib@/fiftlib) target_link_options(funcfiftlib PRIVATE -fexceptions) - target_compile_options(funcfiftlib PRIVATE -fexceptions) + target_compile_options(funcfiftlib PRIVATE -fexceptions -fno-stack-protector) endif() add_executable(tlbc tl/tlbc.cpp) target_include_directories(tlbc PUBLIC $) -target_link_libraries(tlbc PUBLIC ton_crypto src_parser) +target_link_libraries(tlbc PUBLIC ton_crypto_core src_parser) if (WINGETOPT_FOUND) target_link_libraries_system(tlbc wingetopt) endif() diff --git a/crypto/block/block.tlb b/crypto/block/block.tlb index 6b9473ca..7fa7f750 100644 --- a/crypto/block/block.tlb +++ b/crypto/block/block.tlb @@ -384,7 +384,7 @@ action_reserve_currency#36e6b809 mode:(## 8) currency:CurrencyCollection = OutAction; libref_hash$0 lib_hash:bits256 = LibRef; libref_ref$1 library:^Cell = LibRef; -action_change_library#26fa1dd4 mode:(## 7) { mode <= 2 } +action_change_library#26fa1dd4 mode:(## 7) libref:LibRef = OutAction; out_list_node$_ prev:^Cell action:OutAction = OutListNode; @@ -686,6 +686,8 @@ _#cc utime_since:uint32 bit_price_ps:uint64 cell_price_ps:uint64 mc_bit_price_ps:uint64 mc_cell_price_ps:uint64 = StoragePrices; _ (Hashmap 32 StoragePrices) = ConfigParam 18; +_ global_id:int32 = ConfigParam 19; + gas_prices#dd gas_price:uint64 gas_limit:uint64 gas_credit:uint64 block_gas_limit:uint64 freeze_due_limit:uint64 delete_due_limit:uint64 = GasLimitsPrices; diff --git a/crypto/block/mc-config.cpp b/crypto/block/mc-config.cpp index e94ff0a4..2cf8b1d9 100644 --- a/crypto/block/mc-config.cpp +++ b/crypto/block/mc-config.cpp @@ -2220,4 +2220,42 @@ Ref ConfigInfo::lookup_library(td::ConstBitPtr root_hash) const { return lib; } +td::Result> ConfigInfo::get_prev_blocks_info() const { + // [ wc:Integer shard:Integer seqno:Integer root_hash:Integer file_hash:Integer] = BlockId; + // [ last_mc_blocks:[BlockId...] + // prev_key_block:BlockId ] : PrevBlocksInfo + auto block_id_to_tuple = [](const ton::BlockIdExt& block_id) -> vm::Ref { + td::RefInt256 shard = td::make_refint(block_id.id.shard); + if (shard->sgn() < 0) { + shard &= ((td::make_refint(1) << 64) - 1); + } + return vm::make_tuple_ref( + td::make_refint(block_id.id.workchain), + std::move(shard), + td::make_refint(block_id.id.seqno), + td::bits_to_refint(block_id.root_hash.bits(), 256), + td::bits_to_refint(block_id.file_hash.bits(), 256)); + }; + std::vector last_mc_blocks; + + last_mc_blocks.push_back(block_id_to_tuple(block_id)); + for (ton::BlockSeqno seqno = block_id.id.seqno; seqno > 0 && last_mc_blocks.size() < 16; ) { + --seqno; + ton::BlockIdExt block_id; + if (!get_old_mc_block_id(seqno, block_id)) { + return td::Status::Error("cannot fetch old mc block"); + } + last_mc_blocks.push_back(block_id_to_tuple(block_id)); + } + + ton::BlockIdExt last_key_block; + ton::LogicalTime last_key_block_lt; + if (!get_last_key_block(last_key_block, last_key_block_lt)) { + return td::Status::Error("cannot fetch last key block"); + } + return vm::make_tuple_ref( + td::make_cnt_ref>(std::move(last_mc_blocks)), + block_id_to_tuple(last_key_block)); +} + } // namespace block diff --git a/crypto/block/mc-config.h b/crypto/block/mc-config.h index c56be474..799bf6bf 100644 --- a/crypto/block/mc-config.h +++ b/crypto/block/mc-config.h @@ -738,6 +738,7 @@ class ConfigInfo : public Config, public ShardConfig { ton::CatchainSeqno* cc_seqno_delta = nullptr) const; std::vector compute_validator_set_cc(ton::ShardIdFull shard, ton::UnixTime time, ton::CatchainSeqno* cc_seqno_delta = nullptr) const; + td::Result> get_prev_blocks_info() const; static td::Result> extract_config(std::shared_ptr static_boc, int mode = 0); static td::Result> extract_config(Ref mc_state_root, int mode = 0); diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index fe359993..92a5bfe2 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -478,7 +478,7 @@ void add_partial_storage_payment(td::BigInt256& payment, ton::UnixTime delta, co b.mul_short(prices.bit_price); } b += c; - b.mul_short(delta); + b.mul_short(delta).normalize(); CHECK(b.sgn() >= 0); payment += b; } @@ -506,8 +506,7 @@ td::RefInt256 StoragePrices::compute_storage_fees(ton::UnixTime now, const std:: } upto = valid_until; } - total.unique_write().rshift(16, 1); // divide by 2^16 with ceil rounding to obtain nanograms - return total; + return td::rshift(total, 16, 1); // divide by 2^16 with ceil rounding to obtain nanograms } td::RefInt256 Account::compute_storage_fees(ton::UnixTime now, const std::vector& pricing) const { @@ -731,6 +730,9 @@ bool Transaction::prepare_storage_phase(const StoragePhaseConfig& cfg, bool forc } break; } + if (cfg.enable_due_payment) { + due_payment = total_due; + } } } if (adjust_msg_value && msg_balance_remaining.grams > balance.grams) { @@ -924,7 +926,7 @@ Ref Transaction::prepare_vm_c7(const ComputePhaseConfig& cfg) const { throw CollatorError{"cannot generate valid SmartContractInfo"}; return {}; } - auto tuple = vm::make_tuple_ref( + std::vector tuple = { td::make_refint(0x076ef1ea), // [ magic:0x076ef1ea td::zero_refint(), // actions:Integer td::zero_refint(), // msgs_sent:Integer @@ -933,10 +935,27 @@ Ref Transaction::prepare_vm_c7(const ComputePhaseConfig& cfg) const { td::make_refint(start_lt), // trans_lt:Integer std::move(rand_seed_int), // rand_seed:Integer balance.as_vm_tuple(), // balance_remaining:[Integer (Maybe Cell)] - my_addr, // myself:MsgAddressInt - vm::StackEntry::maybe(cfg.global_config)); // global_config:(Maybe Cell) ] = SmartContractInfo; - LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple).to_string(); - return vm::make_tuple_ref(std::move(tuple)); + my_addr, // myself:MsgAddressInt + vm::StackEntry::maybe(cfg.global_config) // global_config:(Maybe Cell) ] = SmartContractInfo; + }; + if (cfg.global_version >= 4) { + tuple.push_back(new_code); // code:Cell + if (msg_balance_remaining.is_valid()) { + tuple.push_back(msg_balance_remaining.as_vm_tuple()); // in_msg_value:[Integer (Maybe Cell)] + } else { + tuple.push_back(block::CurrencyCollection::zero().as_vm_tuple()); + } + tuple.push_back(storage_phase->fees_collected); // storage_fees:Integer + + // See crypto/block/mc-config.cpp#2115 (get_prev_blocks_info) + // [ wc:Integer shard:Integer seqno:Integer root_hash:Integer file_hash:Integer] = BlockId; + // [ last_mc_blocks:[BlockId...] + // prev_key_block:BlockId ] : PrevBlocksInfo + tuple.push_back(cfg.prev_blocks_info.not_null() ? vm::StackEntry(cfg.prev_blocks_info) : vm::StackEntry()); + } + auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); + LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple_ref).to_string(); + return vm::make_tuple_ref(std::move(tuple_ref)); } int output_actions_count(Ref list) { @@ -1093,6 +1112,7 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { } vm::VmState vm{new_code, std::move(stack), gas, 1, new_data, vm_log, compute_vm_libraries(cfg)}; vm.set_max_data_depth(cfg.max_vm_data_depth); + vm.set_global_version(cfg.global_version); vm.set_c7(prepare_vm_c7(cfg)); // tuple with SmartContractInfo vm.set_chksig_always_succeed(cfg.ignore_chksig); // vm.incr_stack_trace(1); // enable stack dump after each step @@ -1174,6 +1194,7 @@ bool Transaction::prepare_action_phase(const ActionPhaseConfig& cfg) { ap.total_fwd_fees = td::zero_refint(); ap.total_action_fees = td::zero_refint(); ap.reserved_balance.set_zero(); + ap.action_fine = td::zero_refint(); td::Ref old_code = new_code, old_data = new_data, old_library = new_library; auto enforce_state_limits = [&]() { @@ -1240,6 +1261,7 @@ bool Transaction::prepare_action_phase(const ActionPhaseConfig& cfg) { int tag = block::gen::t_OutAction.get_tag(cs); CHECK(tag >= 0); int err_code = 34; + ap.need_bounce_on_fail = false; switch (tag) { case block::gen::OutAction::action_set_code: err_code = try_action_set_code(cs, ap, cfg); @@ -1270,12 +1292,24 @@ bool Transaction::prepare_action_phase(const ActionPhaseConfig& cfg) { ap.no_funds = true; } LOG(DEBUG) << "invalid action " << ap.result_arg << " in action list: error code " << ap.result_code; - // This is reuqired here because changes to libraries are applied even if action phase fails + // This is reuqired here because changes to libraries are applied even if actipn phase fails enforce_state_limits(); + if (cfg.action_fine_enabled) { + ap.action_fine = std::min(ap.action_fine, balance.grams); + ap.total_action_fees = ap.action_fine; + balance.grams -= ap.action_fine; + total_fees += ap.action_fine; + } + if (ap.need_bounce_on_fail) { + ap.bounce = true; + } return true; } } + if (cfg.action_fine_enabled) { + ap.total_action_fees += ap.action_fine; + } end_lt = ap.end_lt; if (ap.new_code.not_null()) { new_code = ap.new_code; @@ -1321,7 +1355,17 @@ int Transaction::try_action_change_library(vm::CellSlice& cs, ActionPhase& ap, c if (!tlb::unpack_exact(cs, rec)) { return -1; } - // mode: +0 = remove library, +1 = add private library, +2 = add public library + // mode: +0 = remove library, +1 = add private library, +2 = add public library, +16 - bounce on fail + if (rec.mode & 16) { + if (!cfg.bounce_on_fail_enabled) { + return -1; + } + ap.need_bounce_on_fail = true; + rec.mode &= ~16; + } + if (rec.mode > 2) { + return -1; + } Ref lib_ref = rec.libref->prefetch_ref(); ton::Bits256 hash; if (lib_ref.not_null()) { @@ -1535,9 +1579,22 @@ bool Transaction::check_rewrite_dest_addr(Ref& dest_addr, const A int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, const ActionPhaseConfig& cfg, int redoing) { block::gen::OutAction::Record_action_send_msg act_rec; - // mode: +128 = attach all remaining balance, +64 = attach all remaining balance of the inbound message, +32 = delete smart contract if balance becomes zero, +1 = pay message fees, +2 = skip if message cannot be sent + // mode: + // +128 = attach all remaining balance + // +64 = attach all remaining balance of the inbound message + // +32 = delete smart contract if balance becomes zero + // +1 = pay message fees + // +2 = skip if message cannot be sent + // +16 = bounce if action fails vm::CellSlice cs{cs0}; - if (!tlb::unpack_exact(cs, act_rec) || (act_rec.mode & ~0xe3) || (act_rec.mode & 0xc0) == 0xc0) { + if (!tlb::unpack_exact(cs, act_rec)) { + return -1; + } + if ((act_rec.mode & 16) && cfg.bounce_on_fail_enabled) { + act_rec.mode &= ~16; + ap.need_bounce_on_fail = true; + } + if ((act_rec.mode & ~0xe3) || (act_rec.mode & 0xc0) == 0xc0) { return -1; } bool skip_invalid = (act_rec.mode & 2); @@ -1564,7 +1621,7 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, && cb.store_long_bool(3, 2) // (just (right ... )) && cb.store_ref_bool(std::move(cell)) // z:^StateInit && cb.finalize_to(cell)); - msg.init = vm::load_cell_slice_ref(std::move(cell)); + msg.init = vm::load_cell_slice_ref(cell); } else { redoing = 2; } @@ -1581,7 +1638,7 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, && cb.store_long_bool(1, 1) // (right ... ) && cb.store_ref_bool(std::move(cell)) // x:^X && cb.finalize_to(cell)); - msg.body = vm::load_cell_slice_ref(std::move(cell)); + msg.body = vm::load_cell_slice_ref(cell); } block::gen::CommonMsgInfoRelaxed::Record_int_msg_info info; @@ -1629,30 +1686,84 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, // fetch message pricing info const MsgPrices& msg_prices = cfg.fetch_msg_prices(to_mc || account.is_masterchain()); + // If action fails, account is required to pay fine_per_cell for every visited cell + // Number of visited cells is limited depending on available funds + unsigned max_cells = cfg.size_limits.max_msg_cells; + td::uint64 fine_per_cell = 0; + if (cfg.action_fine_enabled && !account.is_special) { + fine_per_cell = (msg_prices.cell_price >> 16) / 4; + td::RefInt256 funds = ap.remaining_balance.grams; + if (!ext_msg && !(act_rec.mode & 0x80) && !(act_rec.mode & 1)) { + if (!block::tlb::t_CurrencyCollection.validate_csr(info.value)) { + LOG(DEBUG) << "invalid value:CurrencyCollection in proposed outbound message"; + return skip_invalid ? 0 : 37; + } + block::CurrencyCollection value; + CHECK(value.unpack(info.value)); + CHECK(value.grams.not_null()); + td::RefInt256 new_funds = value.grams; + if (act_rec.mode & 0x40) { + if (msg_balance_remaining.is_valid()) { + new_funds += msg_balance_remaining.grams; + } + if (compute_phase) { + new_funds -= compute_phase->gas_fees; + } + new_funds -= ap.action_fine; + if (new_funds->sgn() < 0) { + LOG(DEBUG) + << "not enough value to transfer with the message: all of the inbound message value has been consumed"; + return skip_invalid ? 0 : 37; + } + } + funds = std::min(funds, new_funds); + } + if (funds->cmp(max_cells * fine_per_cell) < 0) { + max_cells = static_cast((funds / td::make_refint(fine_per_cell))->to_long()); + } + } // compute size of message - vm::CellStorageStat sstat; // for message size + vm::CellStorageStat sstat(max_cells); // for message size // preliminary storage estimation of the resulting message unsigned max_merkle_depth = 0; - auto add_used_storage = [&](const auto& x, unsigned skip_root_count) { + auto add_used_storage = [&](const auto& x, unsigned skip_root_count) -> td::Status { if (x.not_null()) { - auto res = sstat.add_used_storage(x, true, skip_root_count).move_as_ok(); + TRY_RESULT(res, sstat.add_used_storage(x, true, skip_root_count)); max_merkle_depth = std::max(max_merkle_depth, res.max_merkle_depth); } + return td::Status::OK(); }; add_used_storage(msg.init, 3); // message init add_used_storage(msg.body, 3); // message body (the root cell itself is not counted) if (!ext_msg) { add_used_storage(info.value->prefetch_ref(), 0); } - LOG(DEBUG) << "storage paid for a message: " << sstat.cells << " cells, " << sstat.bits << " bits"; - if (sstat.bits > cfg.size_limits.max_msg_bits || sstat.cells > cfg.size_limits.max_msg_cells) { + auto collect_fine = [&] { + if (cfg.action_fine_enabled && !account.is_special) { + td::uint64 fine = fine_per_cell * std::min(max_cells, sstat.cells); + if (ap.remaining_balance.grams->cmp(fine) < 0) { + fine = ap.remaining_balance.grams->to_long(); + } + ap.action_fine += fine; + ap.remaining_balance.grams -= fine; + } + }; + if (sstat.cells > max_cells && max_cells < cfg.size_limits.max_msg_cells) { + LOG(DEBUG) << "not enough funds to process a message (max_cells=" << max_cells << ")"; + collect_fine(); + return skip_invalid ? 0 : 40; + } + if (sstat.bits > cfg.size_limits.max_msg_bits || sstat.cells > max_cells) { LOG(DEBUG) << "message too large, invalid"; + collect_fine(); return skip_invalid ? 0 : 40; } if (max_merkle_depth > max_allowed_merkle_depth) { LOG(DEBUG) << "message has too big merkle depth, invalid"; + collect_fine(); return skip_invalid ? 0 : 40; } + LOG(DEBUG) << "storage paid for a message: " << sstat.cells << " cells, " << sstat.bits << " bits"; // compute forwarding fees auto fees_c = msg_prices.compute_fwd_ihr_fees(sstat.cells, sstat.bits, info.ihr_disabled); @@ -1681,6 +1792,7 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, // ... if (!block::tlb::t_CurrencyCollection.validate_csr(info.value)) { LOG(DEBUG) << "invalid value:CurrencyCollection in proposed outbound message"; + collect_fine(); return skip_invalid ? 0 : 37; } if (info.ihr_disabled) { @@ -1699,11 +1811,15 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, } else if (act_rec.mode & 0x40) { // attach all remaining balance of the inbound message (in addition to the original value) req += msg_balance_remaining; - if (!(act_rec.mode & 1) && compute_phase) { - req -= compute_phase->gas_fees; + if (!(act_rec.mode & 1)) { + req -= ap.action_fine; + if (compute_phase) { + req -= compute_phase->gas_fees; + } if (!req.is_valid()) { LOG(DEBUG) << "not enough value to transfer with the message: all of the inbound message value has been consumed"; + collect_fine(); return skip_invalid ? 0 : 37; } } @@ -1719,6 +1835,7 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, // receiver pays the fees (but cannot) LOG(DEBUG) << "not enough value attached to the message to pay forwarding fees : have " << req.grams << ", need " << fees_total; + collect_fine(); return skip_invalid ? 0 : 37; // not enough grams } else { // decrease message value @@ -1729,6 +1846,7 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, if (ap.remaining_balance.grams < req_grams_brutto) { LOG(DEBUG) << "not enough grams to transfer with the message : remaining balance is " << ap.remaining_balance.to_str() << ", need " << req_grams_brutto << " (including forwarding fees)"; + collect_fine(); return skip_invalid ? 0 : 37; // not enough grams } @@ -1738,6 +1856,7 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, LOG(DEBUG) << "not enough extra currency to send with the message: " << block::CurrencyCollection{0, req.extra}.to_str() << " required, only " << block::CurrencyCollection{0, ap.remaining_balance.extra}.to_str() << " available"; + collect_fine(); return skip_invalid ? 0 : 38; // not enough (extra) funds } if (ap.remaining_balance.extra.not_null() || req.extra.not_null()) { @@ -1760,7 +1879,11 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, vm::CellBuilder cb; if (!tlb::type_pack(cb, block::gen::t_MessageRelaxed_Any, msg)) { LOG(DEBUG) << "outbound message does not fit into a cell after rewriting"; - return redoing < 2 ? -2 : (skip_invalid ? 0 : 39); + if (redoing == 2) { + collect_fine(); + return skip_invalid ? 0 : 39; + } + return -2; } new_msg_bits = cb.size(); @@ -1782,6 +1905,7 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, // external messages also have forwarding fees if (ap.remaining_balance.grams < fwd_fee) { LOG(DEBUG) << "not enough funds to pay for an outbound external message"; + collect_fine(); return skip_invalid ? 0 : 37; // not enough grams } // repack message @@ -1795,7 +1919,11 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, vm::CellBuilder cb; if (!tlb::type_pack(cb, block::gen::t_MessageRelaxed_Any, msg)) { LOG(DEBUG) << "outbound message does not fit into a cell after rewriting"; - return redoing < 2 ? -2 : (skip_invalid ? 0 : 39); + if (redoing == 2) { + collect_fine(); + return (skip_invalid ? 0 : 39); + } + return -2; } new_msg_bits = cb.size(); @@ -1810,12 +1938,14 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, if (!block::tlb::t_Message.validate_ref(new_msg)) { LOG(ERROR) << "generated outbound message is not a valid (Message Any) according to hand-written check"; + collect_fine(); return -1; } if (!block::gen::t_Message_Any.validate_ref(new_msg)) { LOG(ERROR) << "generated outbound message is not a valid (Message Any) according to automated check"; block::gen::t_Message_Any.print_ref(std::cerr, new_msg); vm::load_cell_slice(new_msg).print_rec(std::cerr); + collect_fine(); return -1; } if (verbosity > 2) { @@ -1843,7 +1973,14 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, int Transaction::try_action_reserve_currency(vm::CellSlice& cs, ActionPhase& ap, const ActionPhaseConfig& cfg) { block::gen::OutAction::Record_action_reserve_currency rec; - if (!tlb::unpack_exact(cs, rec) || (rec.mode & ~15)) { + if (!tlb::unpack_exact(cs, rec)) { + return -1; + } + if ((rec.mode & 16) && cfg.bounce_on_fail_enabled) { + rec.mode &= ~16; + ap.need_bounce_on_fail = true; + } + if (rec.mode & ~15) { return -1; } int mode = rec.mode; @@ -1990,6 +2127,9 @@ bool Transaction::prepare_bounce_phase(const ActionPhaseConfig& cfg) { if (compute_phase && compute_phase->gas_fees.not_null()) { msg_balance.grams -= compute_phase->gas_fees; } + if (action_phase && action_phase->action_fine.not_null()) { + msg_balance.grams -= action_phase->action_fine; + } if ((msg_balance.grams < 0) || (msg_balance.grams->signed_fits_bits(64) && msg_balance.grams->to_long() < (long long)bp.fwd_fees)) { // not enough funds @@ -2570,17 +2710,27 @@ bool Account::libraries_changed() const { } } -td::Status FetchConfigParams::fetch_config_params(const block::Config& config, - Ref* old_mparams, - std::vector* storage_prices, - block::StoragePhaseConfig* storage_phase_cfg, - td::BitArray<256>* rand_seed, - block::ComputePhaseConfig* compute_phase_cfg, - block::ActionPhaseConfig* action_phase_cfg, - td::RefInt256* masterchain_create_fee, - td::RefInt256* basechain_create_fee, - ton::WorkchainId wc, - ton::UnixTime now) { +td::Status FetchConfigParams::fetch_config_params( + const block::ConfigInfo& config, Ref* old_mparams, std::vector* storage_prices, + StoragePhaseConfig* storage_phase_cfg, td::BitArray<256>* rand_seed, ComputePhaseConfig* compute_phase_cfg, + ActionPhaseConfig* action_phase_cfg, td::RefInt256* masterchain_create_fee, td::RefInt256* basechain_create_fee, + ton::WorkchainId wc, ton::UnixTime now) { + auto prev_blocks_info = config.get_prev_blocks_info(); + if (prev_blocks_info.is_error()) { + return prev_blocks_info.move_as_error_prefix( + td::Status::Error(-668, "cannot fetch prev blocks info from masterchain configuration: ")); + } + return fetch_config_params(config, prev_blocks_info.move_as_ok(), old_mparams, storage_prices, storage_phase_cfg, + rand_seed, compute_phase_cfg, action_phase_cfg, masterchain_create_fee, + basechain_create_fee, wc, now); +} + +td::Status FetchConfigParams::fetch_config_params( + const block::Config& config, td::Ref prev_blocks_info, Ref* old_mparams, + std::vector* storage_prices, StoragePhaseConfig* storage_phase_cfg, + td::BitArray<256>* rand_seed, ComputePhaseConfig* compute_phase_cfg, ActionPhaseConfig* action_phase_cfg, + td::RefInt256* masterchain_create_fee, td::RefInt256* basechain_create_fee, ton::WorkchainId wc, + ton::UnixTime now) { *old_mparams = config.get_config_param(9); { auto res = config.get_storage_prices(); @@ -2605,9 +2755,14 @@ td::Status FetchConfigParams::fetch_config_params(const block::Config& config, storage_phase_cfg->delete_due_limit)) { return td::Status::Error(-668, "cannot unpack current gas prices and limits from masterchain configuration"); } + storage_phase_cfg->enable_due_payment = config.get_global_version() >= 4; compute_phase_cfg->block_rand_seed = *rand_seed; compute_phase_cfg->max_vm_data_depth = size_limits.max_vm_data_depth; compute_phase_cfg->global_config = config.get_root_cell(); + compute_phase_cfg->global_version = config.get_global_version(); + if (compute_phase_cfg->global_version >= 4) { + compute_phase_cfg->prev_blocks_info = std::move(prev_blocks_info); + } compute_phase_cfg->suspended_addresses = config.get_suspended_addresses(now); } { @@ -2630,6 +2785,8 @@ td::Status FetchConfigParams::fetch_config_params(const block::Config& config, action_phase_cfg->workchains = &config.get_workchain_list(); action_phase_cfg->bounce_msg_body = (config.has_capability(ton::capBounceMsgBody) ? 256 : 0); action_phase_cfg->size_limits = size_limits; + action_phase_cfg->action_fine_enabled = config.get_global_version() >= 4; + action_phase_cfg->bounce_on_fail_enabled = config.get_global_version() >= 4; action_phase_cfg->mc_blackhole_addr = config.get_burning_config().blackhole_addr; } { diff --git a/crypto/block/transaction.h b/crypto/block/transaction.h index bc5adff2..3ae8cdf8 100644 --- a/crypto/block/transaction.h +++ b/crypto/block/transaction.h @@ -80,6 +80,7 @@ struct StoragePhaseConfig { const std::vector* pricing{nullptr}; td::RefInt256 freeze_due_limit; td::RefInt256 delete_due_limit; + bool enable_due_payment{false}; StoragePhaseConfig() = default; StoragePhaseConfig(const std::vector* _pricing, td::RefInt256 freeze_limit = {}, td::RefInt256 delete_limit = {}) @@ -112,8 +113,11 @@ struct ComputePhaseConfig { bool ignore_chksig{false}; bool with_vm_log{false}; td::uint16 max_vm_data_depth = 512; + int global_version = 0; + Ref prev_blocks_info; std::unique_ptr suspended_addresses; int vm_log_verbosity = 0; + ComputePhaseConfig(td::uint64 _gas_price = 0, td::uint64 _gas_limit = 0, td::uint64 _gas_credit = 0) : gas_price(_gas_price), gas_limit(_gas_limit), special_gas_limit(_gas_limit), gas_credit(_gas_credit) { compute_threshold(); @@ -153,6 +157,8 @@ struct ActionPhaseConfig { MsgPrices fwd_mc; // from/to masterchain SizeLimitsConfig size_limits; const WorkchainSet* workchains{nullptr}; + bool action_fine_enabled{false}; + bool bounce_on_fail_enabled{false}; td::optional mc_blackhole_addr; const MsgPrices& fetch_msg_prices(bool is_masterchain) const { return is_masterchain ? fwd_mc : fwd_std; @@ -210,6 +216,9 @@ struct ActionPhase { std::vector> out_msgs; ton::LogicalTime end_lt; unsigned long long tot_msg_bits{0}, tot_msg_cells{0}; + td::RefInt256 action_fine; + bool need_bounce_on_fail = false; + bool bounce = false; }; struct BouncePhase { @@ -402,17 +411,18 @@ struct Transaction { } // namespace transaction struct FetchConfigParams { -static td::Status fetch_config_params(const block::Config& config, - Ref* old_mparams, - std::vector* storage_prices, - StoragePhaseConfig* storage_phase_cfg, - td::BitArray<256>* rand_seed, - ComputePhaseConfig* compute_phase_cfg, - ActionPhaseConfig* action_phase_cfg, - td::RefInt256* masterchain_create_fee, - td::RefInt256* basechain_create_fee, - ton::WorkchainId wc, - ton::UnixTime now); + static td::Status fetch_config_params(const block::ConfigInfo& config, Ref* old_mparams, + std::vector* storage_prices, + StoragePhaseConfig* storage_phase_cfg, td::BitArray<256>* rand_seed, + ComputePhaseConfig* compute_phase_cfg, ActionPhaseConfig* action_phase_cfg, + td::RefInt256* masterchain_create_fee, td::RefInt256* basechain_create_fee, + ton::WorkchainId wc, ton::UnixTime now); + static td::Status fetch_config_params(const block::Config& config, Ref prev_blocks_info, + Ref* old_mparams, std::vector* storage_prices, + StoragePhaseConfig* storage_phase_cfg, td::BitArray<256>* rand_seed, + ComputePhaseConfig* compute_phase_cfg, ActionPhaseConfig* action_phase_cfg, + td::RefInt256* masterchain_create_fee, td::RefInt256* basechain_create_fee, + ton::WorkchainId wc, ton::UnixTime now); }; } // namespace block diff --git a/crypto/ellcurve/p256.cpp b/crypto/ellcurve/p256.cpp new file mode 100644 index 00000000..de539372 --- /dev/null +++ b/crypto/ellcurve/p256.cpp @@ -0,0 +1,91 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ + +#include "p256.h" +#include "td/utils/check.h" +#include "td/utils/misc.h" +#include +#include +#include + +namespace td { + +td::Status p256_check_signature(td::Slice data, td::Slice public_key, td::Slice signature) { + CHECK(public_key.size() == 33); + CHECK(signature.size() == 64); + + EVP_PKEY_CTX* pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, nullptr); + if (pctx == nullptr) { + return td::Status::Error("Can't create EVP_PKEY_CTX"); + } + SCOPE_EXIT { + EVP_PKEY_CTX_free(pctx); + }; + if (EVP_PKEY_paramgen_init(pctx) <= 0) { + return td::Status::Error("EVP_PKEY_paramgen_init failed"); + } + if (EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, NID_X9_62_prime256v1) <= 0) { + return td::Status::Error("EVP_PKEY_CTX_set_ec_paramgen_curve_nid failed"); + } + EVP_PKEY* pkey = nullptr; + if (EVP_PKEY_paramgen(pctx, &pkey) <= 0) { + return td::Status::Error("EVP_PKEY_paramgen failed"); + } + SCOPE_EXIT { + EVP_PKEY_free(pkey); + }; + if (EVP_PKEY_set1_tls_encodedpoint(pkey, public_key.ubegin(), public_key.size()) <= 0) { + return td::Status::Error("Failed to import public key"); + } + EVP_MD_CTX* md_ctx = EVP_MD_CTX_new(); + if (md_ctx == nullptr) { + return td::Status::Error("Can't create EVP_MD_CTX"); + } + SCOPE_EXIT { + EVP_MD_CTX_free(md_ctx); + }; + if (EVP_DigestVerifyInit(md_ctx, nullptr, nullptr, nullptr, pkey) <= 0) { + return td::Status::Error("Can't init DigestVerify"); + } + ECDSA_SIG* sig = ECDSA_SIG_new(); + SCOPE_EXIT { + ECDSA_SIG_free(sig); + }; + unsigned char buf[33]; + buf[0] = 0; + std::copy(signature.ubegin(), signature.ubegin() + 32, buf + 1); + BIGNUM* r = BN_bin2bn(buf, 33, nullptr); + std::copy(signature.ubegin() + 32, signature.ubegin() + 64, buf + 1); + BIGNUM* s = BN_bin2bn(buf, 33, nullptr); + if (ECDSA_SIG_set0(sig, r, s) != 1) { + return td::Status::Error("Invalid signature"); + } + unsigned char* signature_encoded = nullptr; + int signature_len = i2d_ECDSA_SIG(sig, &signature_encoded); + if (signature_len <= 0) { + return td::Status::Error("Invalid signature"); + } + SCOPE_EXIT { + OPENSSL_free(signature_encoded); + }; + if (EVP_DigestVerify(md_ctx, signature_encoded, signature_len, data.ubegin(), data.size()) == 1) { + return td::Status::OK(); + } + return td::Status::Error("Wrong signature"); +} + +} // namespace td diff --git a/crypto/ellcurve/p256.h b/crypto/ellcurve/p256.h new file mode 100644 index 00000000..22d08be4 --- /dev/null +++ b/crypto/ellcurve/p256.h @@ -0,0 +1,26 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once + +#include "td/utils/Slice.h" +#include "td/utils/Status.h" + +namespace td { + +td::Status p256_check_signature(td::Slice data, td::Slice public_key, td::Slice signature); + +} diff --git a/crypto/ellcurve/secp256k1.cpp b/crypto/ellcurve/secp256k1.cpp new file mode 100644 index 00000000..e890117a --- /dev/null +++ b/crypto/ellcurve/secp256k1.cpp @@ -0,0 +1,42 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ + +#include "secp256k1.h" +#include "td/utils/check.h" +#include +#include + +namespace td { + +bool ecrecover(const unsigned char* hash, const unsigned char* signature, unsigned char* public_key) { + static secp256k1_context* ctx = secp256k1_context_create(SECP256K1_CONTEXT_VERIFY); + secp256k1_ecdsa_recoverable_signature ecdsa_signature; + if (signature[64] > 3 || + !secp256k1_ecdsa_recoverable_signature_parse_compact(ctx, &ecdsa_signature, signature, signature[64])) { + return false; + } + secp256k1_pubkey pubkey; + if (!secp256k1_ecdsa_recover(ctx, &pubkey, &ecdsa_signature, hash)) { + return false; + } + size_t len = 65; + secp256k1_ec_pubkey_serialize(ctx, public_key, &len, &pubkey, SECP256K1_EC_UNCOMPRESSED); + CHECK(len == 65); + return true; +} + +} diff --git a/crypto/ellcurve/secp256k1.h b/crypto/ellcurve/secp256k1.h new file mode 100644 index 00000000..80ab6a87 --- /dev/null +++ b/crypto/ellcurve/secp256k1.h @@ -0,0 +1,23 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once + +namespace td { + +bool ecrecover(const unsigned char* hash, const unsigned char* signature, unsigned char* public_key); + +} diff --git a/crypto/fift/lib/Asm.fif b/crypto/fift/lib/Asm.fif index 64b85009..d9cee5d8 100644 --- a/crypto/fift/lib/Asm.fif +++ b/crypto/fift/lib/Asm.fif @@ -32,6 +32,7 @@ false @was-split ! { 1 { or abort"invalid version" + dup dup 0 < swap 999 > or abort"invalid version" } cond } : parse-version-level diff --git a/crypto/fift/words.cpp b/crypto/fift/words.cpp index b5e6dbd6..56dd4de2 100644 --- a/crypto/fift/words.cpp +++ b/crypto/fift/words.cpp @@ -46,6 +46,7 @@ #include "vm/db/TonDb.h" // only for interpret_db_run_vm{,_parallel} #include "block/block.h" +#include "common/global-version.h" #include "td/utils/filesystem.h" #include "td/utils/misc.h" @@ -2658,13 +2659,15 @@ std::vector> get_vm_libraries() { // +128 = pop hard gas limit (enabled by ACCEPT) from stack as well // +256 = enable stack trace // +512 = enable debug instructions +// +1024 = load global_version from stack void interpret_run_vm(IntCtx& ctx, int mode) { if (mode < 0) { - mode = ctx.stack.pop_smallint_range(0x3ff); + mode = ctx.stack.pop_smallint_range(0x7ff); } bool with_data = mode & 4; Ref c7; Ref data, actions; + int global_version = (mode & 1024) ? ctx.stack.pop_smallint_range(ton::SUPPORTED_VERSION) : ton::SUPPORTED_VERSION; long long gas_max = (mode & 128) ? ctx.stack.pop_long_range(vm::GasLimits::infty) : vm::GasLimits::infty; long long gas_limit = (mode & 8) ? ctx.stack.pop_long_range(vm::GasLimits::infty) : vm::GasLimits::infty; if (!(mode & 128)) { @@ -2683,7 +2686,7 @@ void interpret_run_vm(IntCtx& ctx, int mode) { auto log = create_vm_log((mode & 64) && ctx.error_stream ? &ostream_logger : nullptr); vm::GasLimits gas{gas_limit, gas_max}; int res = vm::run_vm_code(cs, ctx.stack, (mode & 3) | ((mode & 0x300) >> 6), &data, log, nullptr, &gas, - get_vm_libraries(), std::move(c7), &actions); + get_vm_libraries(), std::move(c7), &actions, global_version); ctx.stack.push_smallint(res); if (with_data) { ctx.stack.push_cell(std::move(data)); diff --git a/crypto/keccak/keccak.cpp b/crypto/keccak/keccak.cpp new file mode 100644 index 00000000..aac48ddc --- /dev/null +++ b/crypto/keccak/keccak.cpp @@ -0,0 +1,473 @@ +/* + * An implementation of the SHA3 (Keccak) hash function family. + * + * Algorithm specifications: http://keccak.noekeon.org/ + * NIST Announcement: + * http://csrc.nist.gov/groups/ST/hash/sha-3/winner_sha-3.html + * + * Written in 2013 by Fabrizio Tarizzo + * + * =================================================================== + * The contents of this file are dedicated to the public domain. To + * the extent that dedication to the public domain is not available, + * everyone is granted a worldwide, perpetual, royalty-free, + * non-exclusive license to exercise all rights associated with the + * contents of this file for any purpose whatsoever. + * No rights are reserved. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * =================================================================== +*/ + +#include +#include +#include +#include + +#define KECCAK_F1600_STATE 200 +#define MIN(x, y) ((x) < (y) ? (x) : (y)) +#define MAX(x, y) ((x) < (y) ? (x) : (y)) + +/** Standard errors common to all ciphers **/ +#define ERR_NULL 1 +#define ERR_MEMORY 2 +#define ERR_NOT_ENOUGH_DATA 3 +#define ERR_ENCRYPT 4 +#define ERR_DECRYPT 5 +#define ERR_KEY_SIZE 6 +#define ERR_NONCE_SIZE 7 +#define ERR_NR_ROUNDS 8 +#define ERR_DIGEST_SIZE 9 +#define ERR_MAX_DATA 10 +#define ERR_MAX_OFFSET 11 +#define ERR_BLOCK_SIZE 12 +#define ERR_TAG_SIZE 13 +#define ERR_VALUE 14 +#define ERR_EC_POINT 15 +#define ERR_EC_CURVE 16 +#define ERR_MODULUS 17 +#define ERR_UNKNOWN 32 + +typedef struct +{ + uint64_t state[25]; + + /* The buffer is as long as the state, + * but only 'rate' bytes will be used. + */ + uint8_t buf[KECCAK_F1600_STATE]; + + /* When absorbing, this is the number of bytes in buf that + * are coming from the message and outstanding. + * When squeezing, this is the remaining number of bytes + * that can be used as digest. + */ + unsigned valid_bytes; + + /* All values in bytes */ + unsigned capacity; + unsigned rate; + + uint8_t squeezing; + uint8_t rounds; +} keccak_state; + +#undef ROL64 +#define ROL64(x,y) ((((x) << (y)) | (x) >> (64-(y))) & 0xFFFFFFFFFFFFFFFFULL) + +static void keccak_function (uint64_t *state, unsigned rounds); + +int keccak_reset(keccak_state *state) +{ + if (NULL == state) + return ERR_NULL; + + memset(state->state, 0, sizeof(state->state)); + memset(state->buf, 0, sizeof(state->buf)); + state->valid_bytes = 0; + state->squeezing = 0; + + return 0; +} + +static void keccak_absorb_internal (keccak_state *self) +{ + unsigned i,j; + uint64_t d; + + for (i=j=0; j < self->rate; ++i, j += 8) { + d = *(const uint64_t*)(self->buf + j); + self->state[i] ^= d; + } +} + +static void +keccak_squeeze_internal (keccak_state *self) +{ + unsigned i, j; + + for (i=j=0; j < self->rate; ++i, j += 8) { + *(uint64_t*)(self->buf+j) = self->state[i]; + } +} + +int keccak_init (keccak_state **state, + size_t capacity_bytes, + uint8_t rounds) +{ + keccak_state *ks; + + if (NULL == state) { + return ERR_NULL; + } + + *state = ks = (keccak_state*) calloc(1, sizeof(keccak_state)); + if (NULL == ks) + return ERR_MEMORY; + + if (capacity_bytes >= KECCAK_F1600_STATE) + return ERR_DIGEST_SIZE; + + if ((rounds != 12) && (rounds != 24)) + return ERR_NR_ROUNDS; + + ks->capacity = (unsigned)capacity_bytes; + + ks->rate = KECCAK_F1600_STATE - ks->capacity; + + ks->squeezing = 0; + ks->rounds = rounds; + + return 0; +} + +int keccak_destroy(keccak_state *state) +{ + free(state); + return 0; +} + +int keccak_absorb (keccak_state *self, + const uint8_t *in, + size_t length) +{ + if (NULL==self || NULL==in) + return ERR_NULL; + + if (self->squeezing != 0) + return ERR_UNKNOWN; + + while (length > 0) { + unsigned tc; + unsigned left; + + left = self->rate - self->valid_bytes; + tc = (unsigned) MIN(length, left); + memcpy(self->buf + self->valid_bytes, in, tc); + + self->valid_bytes += tc; + in += tc; + length -= tc; + + if (self->valid_bytes == self->rate) { + keccak_absorb_internal (self); + keccak_function(self->state, self->rounds); + self->valid_bytes = 0; + } + } + + return 0; +} + +static void keccak_finish (keccak_state *self, uint8_t padding) +{ + assert(self->squeezing == 0); + assert(self->valid_bytes < self->rate); + + /* Padding */ + memset(self->buf + self->valid_bytes, 0, self->rate - self->valid_bytes); + self->buf[self->valid_bytes] = padding; + self->buf[self->rate-1] |= 0x80; + + /* Final absorb */ + keccak_absorb_internal (self); + keccak_function (self->state, self->rounds); + + /* First squeeze */ + self->squeezing = 1; + keccak_squeeze_internal (self); + self->valid_bytes = self->rate; +} + +int keccak_squeeze (keccak_state *self, uint8_t *out, size_t length, uint8_t padding) +{ + if ((NULL == self) || (NULL == out)) + return ERR_NULL; + + if (self->squeezing == 0) { + keccak_finish (self, padding); + } + + assert(self->squeezing == 1); + assert(self->valid_bytes > 0); + assert(self->valid_bytes <= self->rate); + + while (length > 0) { + unsigned tc; + + tc = (unsigned)MIN(self->valid_bytes, length); + memcpy(out, self->buf + (self->rate - self->valid_bytes), tc); + + self->valid_bytes -= tc; + out += tc; + length -= tc; + + if (self->valid_bytes == 0) { + keccak_function (self->state, self->rounds); + keccak_squeeze_internal (self); + self->valid_bytes = self->rate; + } + } + + return 0; +} + +int keccak_digest(keccak_state *state, uint8_t *digest, size_t len, uint8_t padding) +{ + keccak_state tmp; + + if ((NULL==state) || (NULL==digest)) + return ERR_NULL; + + if (2*len != state->capacity) + return ERR_UNKNOWN; + + tmp = *state; + return keccak_squeeze(&tmp, digest, len, padding); +} + +int keccak_copy(const keccak_state *src, keccak_state *dst) +{ + if (NULL == src || NULL == dst) { + return ERR_NULL; + } + + *dst = *src; + return 0; +} + +/* Keccak core function */ + +#define KECCAK_ROUNDS 24 + +#define ROT_01 36 +#define ROT_02 3 +#define ROT_03 41 +#define ROT_04 18 +#define ROT_05 1 +#define ROT_06 44 +#define ROT_07 10 +#define ROT_08 45 +#define ROT_09 2 +#define ROT_10 62 +#define ROT_11 6 +#define ROT_12 43 +#define ROT_13 15 +#define ROT_14 61 +#define ROT_15 28 +#define ROT_16 55 +#define ROT_17 25 +#define ROT_18 21 +#define ROT_19 56 +#define ROT_20 27 +#define ROT_21 20 +#define ROT_22 39 +#define ROT_23 8 +#define ROT_24 14 + +static const uint64_t roundconstants[KECCAK_ROUNDS] = { + 0x0000000000000001ULL, + 0x0000000000008082ULL, + 0x800000000000808aULL, + 0x8000000080008000ULL, + 0x000000000000808bULL, + 0x0000000080000001ULL, + 0x8000000080008081ULL, + 0x8000000000008009ULL, + 0x000000000000008aULL, + 0x0000000000000088ULL, + 0x0000000080008009ULL, + 0x000000008000000aULL, + 0x000000008000808bULL, + 0x800000000000008bULL, + 0x8000000000008089ULL, + 0x8000000000008003ULL, + 0x8000000000008002ULL, + 0x8000000000000080ULL, + 0x000000000000800aULL, + 0x800000008000000aULL, + 0x8000000080008081ULL, + 0x8000000000008080ULL, + 0x0000000080000001ULL, + 0x8000000080008008ULL +}; + +static void keccak_function (uint64_t *state, unsigned rounds) +{ + unsigned i; + unsigned start_round; + + /* Temporary variables to avoid indexing overhead */ + uint64_t a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12; + uint64_t a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24; + + uint64_t b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12; + uint64_t b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24; + + uint64_t c0, c1, c2, c3, c4, d; + + a0 = state[0]; + a1 = state[1]; + a2 = state[2]; + a3 = state[3]; + a4 = state[4]; + a5 = state[5]; + a6 = state[6]; + a7 = state[7]; + a8 = state[8]; + a9 = state[9]; + a10 = state[10]; + a11 = state[11]; + a12 = state[12]; + a13 = state[13]; + a14 = state[14]; + a15 = state[15]; + a16 = state[16]; + a17 = state[17]; + a18 = state[18]; + a19 = state[19]; + a20 = state[20]; + a21 = state[21]; + a22 = state[22]; + a23 = state[23]; + a24 = state[24]; + + if (rounds == 24) + start_round = 0; + else /* rounds == 12 */ + start_round = 12; + + for (i = start_round; i < KECCAK_ROUNDS; ++i) { + /* + Uses temporary variables and loop unrolling to + avoid array indexing and inner loops overhead + */ + + /* Prepare column parity for Theta step */ + c0 = a0 ^ a5 ^ a10 ^ a15 ^ a20; + c1 = a1 ^ a6 ^ a11 ^ a16 ^ a21; + c2 = a2 ^ a7 ^ a12 ^ a17 ^ a22; + c3 = a3 ^ a8 ^ a13 ^ a18 ^ a23; + c4 = a4 ^ a9 ^ a14 ^ a19 ^ a24; + + /* Theta + Rho + Pi steps */ + d = c4 ^ ROL64(c1, 1); + b0 = d ^ a0; + b16 = ROL64(d ^ a5, ROT_01); + b7 = ROL64(d ^ a10, ROT_02); + b23 = ROL64(d ^ a15, ROT_03); + b14 = ROL64(d ^ a20, ROT_04); + + d = c0 ^ ROL64(c2, 1); + b10 = ROL64(d ^ a1, ROT_05); + b1 = ROL64(d ^ a6, ROT_06); + b17 = ROL64(d ^ a11, ROT_07); + b8 = ROL64(d ^ a16, ROT_08); + b24 = ROL64(d ^ a21, ROT_09); + + d = c1 ^ ROL64(c3, 1); + b20 = ROL64(d ^ a2, ROT_10); + b11 = ROL64(d ^ a7, ROT_11); + b2 = ROL64(d ^ a12, ROT_12); + b18 = ROL64(d ^ a17, ROT_13); + b9 = ROL64(d ^ a22, ROT_14); + + d = c2 ^ ROL64(c4, 1); + b5 = ROL64(d ^ a3, ROT_15); + b21 = ROL64(d ^ a8, ROT_16); + b12 = ROL64(d ^ a13, ROT_17); + b3 = ROL64(d ^ a18, ROT_18); + b19 = ROL64(d ^ a23, ROT_19); + + d = c3 ^ ROL64(c0, 1); + b15 = ROL64(d ^ a4, ROT_20); + b6 = ROL64(d ^ a9, ROT_21); + b22 = ROL64(d ^ a14, ROT_22); + b13 = ROL64(d ^ a19, ROT_23); + b4 = ROL64(d ^ a24, ROT_24); + + /* Chi + Iota steps */ + a0 = b0 ^ (~b1 & b2) ^ roundconstants[i]; + a1 = b1 ^ (~b2 & b3); + a2 = b2 ^ (~b3 & b4); + a3 = b3 ^ (~b4 & b0); + a4 = b4 ^ (~b0 & b1); + + a5 = b5 ^ (~b6 & b7); + a6 = b6 ^ (~b7 & b8); + a7 = b7 ^ (~b8 & b9); + a8 = b8 ^ (~b9 & b5); + a9 = b9 ^ (~b5 & b6); + + a10 = b10 ^ (~b11 & b12); + a11 = b11 ^ (~b12 & b13); + a12 = b12 ^ (~b13 & b14); + a13 = b13 ^ (~b14 & b10); + a14 = b14 ^ (~b10 & b11); + + a15 = b15 ^ (~b16 & b17); + a16 = b16 ^ (~b17 & b18); + a17 = b17 ^ (~b18 & b19); + a18 = b18 ^ (~b19 & b15); + a19 = b19 ^ (~b15 & b16); + + a20 = b20 ^ (~b21 & b22); + a21 = b21 ^ (~b22 & b23); + a22 = b22 ^ (~b23 & b24); + a23 = b23 ^ (~b24 & b20); + a24 = b24 ^ (~b20 & b21); + } + + state[0] = a0; + state[1] = a1; + state[2] = a2; + state[3] = a3; + state[4] = a4; + state[5] = a5; + state[6] = a6; + state[7] = a7; + state[8] = a8; + state[9] = a9; + state[10] = a10; + state[11] = a11; + state[12] = a12; + state[13] = a13; + state[14] = a14; + state[15] = a15; + state[16] = a16; + state[17] = a17; + state[18] = a18; + state[19] = a19; + state[20] = a20; + state[21] = a21; + state[22] = a22; + state[23] = a23; + state[24] = a24; +} diff --git a/crypto/keccak/keccak.h b/crypto/keccak/keccak.h new file mode 100644 index 00000000..28fa66fb --- /dev/null +++ b/crypto/keccak/keccak.h @@ -0,0 +1,41 @@ +/* + * An implementation of the SHA3 (Keccak) hash function family. + * + * Algorithm specifications: http://keccak.noekeon.org/ + * NIST Announcement: + * http://csrc.nist.gov/groups/ST/hash/sha-3/winner_sha-3.html + * + * Written in 2013 by Fabrizio Tarizzo + * + * =================================================================== + * The contents of this file are dedicated to the public domain. To + * the extent that dedication to the public domain is not available, + * everyone is granted a worldwide, perpetual, royalty-free, + * non-exclusive license to exercise all rights associated with the + * contents of this file for any purpose whatsoever. + * No rights are reserved. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * =================================================================== +*/ + +#pragma once +#include +#include + +struct keccak_state; + +int keccak_reset(keccak_state *state); +int keccak_init(keccak_state **state, size_t capacity_bytes, uint8_t rounds); +int keccak_destroy(keccak_state *state); +int keccak_absorb(keccak_state *self, const uint8_t *in, size_t length); +int keccak_squeeze(keccak_state *self, uint8_t *out, size_t length, uint8_t padding); +int keccak_digest(keccak_state *state, uint8_t *digest, size_t len, uint8_t padding); +int keccak_copy(const keccak_state *src, keccak_state *dst); diff --git a/crypto/test/fift.cpp b/crypto/test/fift.cpp index 098c5561..049507fd 100644 --- a/crypto/test/fift.cpp +++ b/crypto/test/fift.cpp @@ -33,9 +33,14 @@ std::string load_test(std::string name) { return td::read_file_str(current_dir() + "fift/" + name).move_as_ok(); } -td::Status run_fift(std::string name, bool preload_fift = true) { - TRY_RESULT(res, fift::mem_run_fift(load_test(name))); - REGRESSION_VERIFY(res.output); +td::Status run_fift(std::string name, bool expect_error = false, bool preload_fift = true) { + auto res = fift::mem_run_fift(load_test(name)); + if (expect_error) { + res.ensure_error(); + return td::Status::OK(); + } + res.ensure(); + REGRESSION_VERIFY(res.ok().output); return td::Status::OK(); } @@ -79,7 +84,7 @@ TEST(Fift, testvmprog) { run_fift("testvmprog.fif"); } TEST(Fift, bug) { - run_fift("bug.fif"); + run_fift("bug.fif", true); } TEST(Fift, contfrac) { run_fift("contfrac.fif"); @@ -130,3 +135,31 @@ TEST(Fift, test_namespaces) { TEST(Fift, test_asm_nested_program) { run_fift("asm-nested-program.fif"); } + +TEST(Fift, test_adddiv) { + run_fift("adddiv.fif"); +} + +TEST(Fift, test_tvm_runvm) { + run_fift("tvm_runvm.fif"); +} + +TEST(Fift, test_hash_ext) { + run_fift("hash_ext.fif"); +} + +TEST(Fift, test_deep_stack_ops) { + run_fift("deep_stack_ops.fif"); +} + +TEST(Fift, test_rist255) { + run_fift("rist255.fif"); +} + +TEST(Fift, test_bls) { + run_fift("bls.fif"); +} + +TEST(Fift, test_bls_ops) { + run_fift("bls_ops.fif"); +} diff --git a/crypto/test/fift/adddiv.fif b/crypto/test/fift/adddiv.fif new file mode 100644 index 00000000..96be6525 --- /dev/null +++ b/crypto/test/fift/adddiv.fif @@ -0,0 +1,144 @@ +{ + =: ans-r =: ans-q =: mode + =: z =: w =: y =: x + ."MULADDDIVMOD " @' x . @' y . @' w . @' z . @' mode . ."= " @' ans-q . @' ans-r . cr + @' x @' y @' w @' z + abort"Incorrect r" + @' ans-q <> abort"Incorrect q" +} : test-muladddivmod + +{ + =: ans-r =: ans-q =: mode + =: y =: w =: x + ."ADDDIVMOD " @' x . @' w . @' y . @' mode . ."= " @' ans-q . @' ans-r . cr + @' x @' w @' y + abort"Incorrect r" + @' ans-q <> abort"Incorrect q" +} : test-adddivmod + +{ + =: ans-r =: ans-q =: mode + =: z =: w =: y =: x + ."SHLADDDIVMOD " @' x . @' y . @' w . @' z . @' mode . ."= " @' ans-q . @' ans-r . cr + @' x @' w @' z @' y + abort"Incorrect r" + @' ans-q <> abort"Incorrect q" +} : test-shladddivmod + +{ + =: ans-r =: ans-q =: mode + =: z =: w =: y =: x + ."MULADDSHRMOD " @' x . @' y . @' w . @' z . @' mode . ."= " @' ans-q . @' ans-r . cr + @' x @' y @' w @' z + abort"Incorrect r" + @' ans-q <> abort"Incorrect q" +} : test-muladdshrmod + +729 -212 552 0 0 517 test-adddivmod +823 -139 -918 1 -1 -234 test-adddivmod +-470 977 47 2 11 -10 test-adddivmod +-5 -171 880 0 -1 704 test-adddivmod +605 699 -379 1 -3 167 test-adddivmod +982 -24 -267 2 -3 157 test-adddivmod +194 826 859 0 1 161 test-adddivmod +-553 33 -715 1 1 195 test-adddivmod +-423 -714 547 2 -2 -43 test-adddivmod +-806 266 637 0 -1 97 test-adddivmod +-487 863 90 1 4 16 test-adddivmod +444 659 232 2 5 -57 test-adddivmod +847 -700 -365 -798 0 743 -351 test-muladddivmod +494 -849 840 741 1 -565 99 test-muladddivmod +400 -324 -34 146 2 -887 -132 test-muladddivmod +-794 -276 -111 -353 0 -621 -180 test-muladddivmod +251 311 869 -582 1 -136 -222 test-muladddivmod +979 131 -24 -94 2 -1364 9 test-muladddivmod +772 67 -467 -873 0 -59 -250 test-muladddivmod +648 881 123 875 1 653 -364 test-muladddivmod +-972 -809 473 720 2 1093 -139 test-muladddivmod +-184 454 689 607 0 -137 312 test-muladddivmod +368 280 -998 253 1 403 83 test-muladddivmod +10 695 776 -318 2 -24 94 test-muladddivmod +-501 5 441 782 0 -20 49 test-shladddivmod +-872 3 878 162 1 -38 58 test-shladddivmod +-546 3 645 981 2 -3 -780 test-shladddivmod +-709 8 -83 -814 0 223 -65 test-shladddivmod +-836 5 792 40 1 -649 0 test-shladddivmod +910 7 -777 -383 2 -302 37 test-shladddivmod +128 4 447 -745 0 -4 -485 test-shladddivmod +121 5 668 888 1 5 100 test-shladddivmod +106 3 973 637 2 3 -90 test-shladddivmod +235 8 203 -411 0 -147 -54 test-shladddivmod +-89 1 221 634 1 0 43 test-shladddivmod +-212 5 178 -505 2 14 464 test-shladddivmod +-406 -624 -613 2 0 63182 3 test-muladdshrmod +-933 254 344 4 1 -14790 2 test-muladdshrmod +-25 -859 -817 10 2 21 -846 test-muladdshrmod +551 -734 795 2 0 -100910 1 test-muladdshrmod +891 -921 725 1 1 -409943 0 test-muladdshrmod +839 432 890 8 2 1420 -182 test-muladdshrmod +399 -199 715 8 0 -308 162 test-muladdshrmod +-436 68 662 3 1 -3623 -2 test-muladdshrmod +739 -560 833 10 2 -403 -335 test-muladdshrmod +207 690 945 6 0 2246 31 test-muladdshrmod +187 -437 -78 7 1 -639 -5 test-muladdshrmod +352 313 434 5 2 3457 -14 test-muladdshrmod +25527586395537789869570741399081402682256851060036756777914400562788085574414 -25113160904436633803354228324572450480033217030010944063278205598870671865288 -2256017777568044393040721989849804550406163786581604155567013427587080747425 0 -1 -1841592286466888326824208915340852348182529756555791440930818463669667038299 test-adddivmod +-32640246231411323106115073889225624429888478001529402430751550293198007894765 -37905632746827282747258884343685092209247121139851002852469398603088743361022 18753000550171967665955942657615296985943924316121913951069685581208211144632 1 -4 4466123222449264810449812397550471304640098123107250521057793428546093322741 test-adddivmod +-95549375212741069607980980863332591640631650412403896229315709698307081396373 106240530356563762252550465652293166037855203388135409179201250774369290711413 63027891874179850739525204890840444316414650119364284762072976150516424705738 2 1 -52336736730357158094955720101879869919191097143632771812187435074454215390698 test-adddivmod +51890526097631236478215460328003213527162540175278758108042092328342498521783 19183851048961131310064308531261717471288729454763519442604661504489273629484 37741726035775552009535280639145255965240492091225040562231509956705484553131 0 1 33332651110816815778744488220119675033210777538817236988415243876126287598136 test-adddivmod +94071222795948162024492074951491627130123473883831806178173544936543536671735 -79181277644495598779765208777007083667700785694819686730856530041854640922750 101162201634522410327363362416275476419529310370084833033537453927088908146625 1 0 14889945151452563244726866174484543462422688189012119447317014894688895748985 test-adddivmod +106849434942283600005926697698751951080751408318517871682753577855332568068854 -24045207490958235002714107597178464324559754040415520751984110097220649552695 74679027778960833059271215597415768445807741415021004423546293120031915119911 2 2 -66553828106596301115329841093258050135423828551939657916323118481951911723663 test-adddivmod +-111083603622141356205460042548478779196244111142279948844255415507465496179136 75885719295648796212066209648237285368659643103523469813991536525258102456646 17487288729375302809394363552184340106515810164188804948959885094558256876961 0 -3 17263981861633348434789257756311526491962962453809935816615776301467376908393 test-adddivmod +33525382765608498977714984645580937896464574678957613892455278004374765395791 -31203451453013366071092485074296252911543265223612191519873428434459391093162 8205361318951100784724737477089194897616580930791932431609075219761273143789 1 0 2321931312595132906622499571284684984921309455345422372581849569915374302629 test-adddivmod +-75999952514508567055051892339604431790575024284443576993806836353012574839934 60096525995012658905135417908615298741753181036991250015243181812480959008245 25156241733999421479698222967097698882671132665627779117308277826680836574301 2 0 -15903426519495908149916474430989133048821843247452326978563654540531615831689 test-adddivmod +-25810038415830521876908334245348683093953748145428320530928049623042163542952 13768870762468614895982523795103333718119339794093637483718383357794846902545 -23455630873759864343226329762160671724884569294252944494055101268304334927469 0 0 -12041167653361906980925810450245349375834408351334683047209666265247316640407 test-adddivmod +65295636229319469142829758722387755590067603179313024098599396192036031682932 -14508864012052681942310481748034005897814022127985455644382059031122725256639 101258243423658080118042170583591218535452530372858366205652259477702813508611 1 1 -50471471206391292917522893609237468843198949321530797751434922316789507082318 test-adddivmod +-9782778804673764937901196234199348720011483228792837975519798751976472498576 97723276666278794523978327321824380269179391405498018632142147588187660001006 -49342195947431856333198825767811410708861002865285674269877261690183407963360 2 -1 38598301914173173252878305319813620840306905311419506386745087146027779539070 test-adddivmod +69314796062889467182180663903322273169679119368960545268948720263471816924632 93795938161576335898249305761803240528541213785951419531969609595386829401314 -110346049538998400484346689828188917177083570083289016450597131164930681126587 81149113889296322255375738811288869158926250513403232273765830197055460701260 0 80117280566567035416625919712742621817262121093084845174084285957987697395276 42036691045037437094861959671408390901385540330966807308270651575596167392101 test-muladddivmod +-21971450167728355573106502799062118429867408154846289128369107182511643511483 45393555019045493054213057422940072801743824102220594624535868754509418047929 60641652588698494073802822494164156953515858330346793601084497228687965671868 65539824510463171124453489789915597533293103308691110446148835625201340366598 1 -15217651854984270515658273738098718647212153016787679186857576358263739302058 -29371413441460037863394670149687230435838766165616129771684695789862414338155 test-muladddivmod +73634008615213489758113683559933051942050608504790565710917645985405082665491 -80155625965090770138821073870266428949137773405175831429923552413761952441361 -38999294453130493506999209141746004309873017414282530140731810289885759492802 -107314816556101242244916895079818037889329087681097150645968648449136338086659 2 54998743344874712983373052080844956119323047070936199528619384334263523872368 13082689556615721830015990667012489975468766353417550442844496303849124272459 test-muladddivmod +68441985454806782074858763992903374541757416422223520705458179994903492447753 -61267036145362164840470993649039311748277914273628051012777836672446118682406 88886725386626308975645991554561163959863903429407091061340939714760192334434 -55192455525382179382269200386360902483303866088141254649003462525396159498006 0 75974833096374772090455746107157391488128832802648627140447901963962285642644 -35281244576421605907379124849976697589234314365299818483123805214351816431420 test-muladddivmod +13991345100229597325861930387540671073560101799369013558248988792137436010794 32261366615236683296917985913895811707233003589900325435836147185374329094359 -35081305217709330815376010427375742966580511272499524644418734096933080609103 34617350357576952655827361801899194862477556493235499468927833026852355915741 1 13039123706936329824826187692520278079826111394035475962656812793878481550617 15501972367754182150585081456806290271752173495030969288120604381172009339746 test-muladddivmod +54599312873997957959553141264956574941720752239162126863069720527738322459321 743784849758283770307843473486531088082399957077059004634332280604041992918 -82452755014987554458459818028526388807440160648566275282022897198718871469325 38291925157759929750140152840087355208836284729075633154257868030142639468974 2 1060540611514863450709563259060420401132951143137987621813620016383521959845 -25576601802989288764264589884413515994814497538433618559906725414501597729677 test-muladddivmod +-33715442018098691670021742265266162391174212035380017502572244718418822715623 104887034421874269674272525533704680767916752281317133765280341780898862714955 40882837978738774675184345709913504579827188391303805465905655071457659357026 56761521466376613401789060160037629513193949115508135629309104361041554577464 0 -62301232175317956930653590924038385722281926697603233811485244969539670459488 12675521639977150682490928392886170001456429479565150104484728889568554893493 test-muladddivmod +-109706830967107194245468623157302140481713559442721649770259230494532080435232 91091244832469326414116901981654442590329304825709696121493056753007506269108 25586919878947735367325917367337541421822321271842417480093738776553133015696 92030412800134708014057990497075561862656985932946512327644864855223778050176 1 -108587275612051383813143325045450855254642049763863834262763340362417287376196 14236417728543624555544633487823994857557292455110879135165049494799852613136 test-muladddivmod +-55349740795363582739414701155082958898639391946026926848599395086577482106561 5153084015148055450516513461735201914781593572521892141092888805185704024388 -65052157988798026904166625513790079385321361518951356077015576483034859919945 -102114306233907646655227677599549837347948442788318424043410967802211179284463 2 2793162633665004752332533372431053166813934025727573730237936408503456830715 70263858264069476764017250048942592796103230166090146586104085945931001951432 test-muladddivmod +-39413219476407785933419341321985162122574957075787517059529471719124009278433 -11397560582871643424486223364245599528148517163558642929375020427946855266926 72776685568498650781344357948907544676236244067805626443550533574512635929751 58457602475162312341105487265860863804074002837155658624106642883511552164475 0 7684450571493046035065075993797738633610800975055222799851151005079197271998 25447845742266018765952184307141986304437190746678223193451015171399298065659 test-muladddivmod +28902743859707224532426872535592986589584185136999529704427764834614586536146 30118285526375438691436500554083725474584606124188443987423181314058619658259 -112947693515558587819874917596387701093051538659457576158697245759111287251112 -20731780512952622217494754630018335482763668682808767673633845662171371751908 1 -41988727958917592867685340883133510770733630298849576855386410060863664014757 6354934151364300917311007564393521634968794138377927567288802927545928772346 test-muladddivmod +25071799008788838242365403068059094326298333378650328613993357620568407227394 -27895932377486960662691379394722126815225783254727720878708826335618109428175 -34783759350459778495483474263506062490621190762057336926096642777973708891199 -46562500545170684944465306233470472124382229989733955650634447552911654749066 2 15020696945874349483297599474537626462120625640258473403957682700588115661859 6123529058588613987393724235023234231421775050193606259696039938834907756545 test-muladddivmod +4637334961015630956409530377119128659169399268652032534941609159910059786532 174 -12797497544848087213503981396389428116533825336325463794725594822879690679136 93018556588730187003792638630891717650672350374200759319903911998812002342061 0 1193763005785115313715849486131901382204829468191839 86009298512437248420661887032254663876544001080814196765583913598468234097773 test-shladddivmod +63737576485202419511398757422488387344373087691300709744039454443359600742212 17 4434935617055335860270673726237887676208015615002198868506400573861444556411 2395017004775767547761160570739886212190100215618999647636254869255450984262 1 3488166 -825476601398469938219841341785340947550825081895127156723070705988041475817 test-shladddivmod +-21264162232365890547240808872203618534857207092355857230053229357857057625546 79 83558436280879393517752968647441646810997015153366115449062116401734553793990 -19667935035506461778339921177556508690003173951785474262950610395510252887673 2 653520430812207296424074 11997579569142787892139960093229284888868038054542931791709721193377458047744 test-shladddivmod +50327589756875372367121062573124726147569135695110368165104387616199145495643 159 -56582804136162261915738821952650758787670281453734279574878610404888378091325 41794171917267054297819695791653745099726306264896745093211576006595621865899 0 879953489426631344181134857312933722690648995542 7479251035838043422275284357505479089411783830647758441772426265279908213201 test-shladddivmod +-6790346796221361248085433832482913268295667476610056123099942839800062619360 99 -30655005682505720678929136056715874580886440550632733046480550204329894400037 107280989788626394506897862107199815360330755655673306259970134464147378777352 1 -40117951973353319220033820651 15419963034230519057842831193590832882628829971176441336761525930488437456435 test-shladddivmod +19046177038646178344769825269053799430308794840550024608332777213474587282651 33 3489319764096497921939317127917520109408688444737580375038679679318170964558 32230702261963164880326384192551720153568540700317784363615498612027586166919 2 5076073543 -31149228513135397726284948367312236333921327766221169520773046236565040396067 test-shladddivmod +-110976730374012300153801377038320854184737548404302035494280064993634691387718 177 62599745911697906087525399889373248851994389233059198427444302208529620264342 2939901734097150061182352721440114362417026502565316012346244994332394908737 0 -7231166201303287776306953132498157445481985675557698778 861631401006029279966827198914714166628754059441816200263218068486981128432 test-shladddivmod +31852390609689123349381354058350609996064615917952716537339963695989162024629 72 -96928192014181974842953135946922776102933173463512906699090906721752057028243 92656901870085089608820151790239083253300815942245860126341275046871599043017 1 1623394035183378246274 -40717467475217300542569194922405492138512784779596821986363220696851482878117 test-shladddivmod +108325270025037161417115474167849009240382377052459846115851642255437288685912 79 -47995506721499545563379889382854078032364619862028413664240909132079634758006 -6166659869789359796343211847537623762770094929722294841335533066616771405539 2 -10618164339787666672859802 2975209691732235673066443530343246725711182217991112340969803628522007294972 test-shladddivmod +-102030576317847732070693755030275793160072651528715762716678938494538431797856 162 92259248995288252713115460931891173987977282785918620735892298001910599707421 93069691103831234597581468228357432179178680731051507965844021657079407259554 0 -6408868561946334361312419431284710070541388837754 30090871674656727061174631170248864679275378922263881716308993939778213471313 test-shladddivmod +109919709354382523017092140618288318375226272062645130510340454988137017880658 32 11403889262848182921779993946145880893942415285082669079885795084154364295755 -35203479084324376157414643218816253627488669490337878341936871887579427112193 1 -13410650571 -9079152369425295070217928786983170793628233088577531145426537161436231255680 test-shladddivmod +32604320264365535336905506430047200856461747148561589244458238442999859570507 87 53600018835628474925583604580250089573381703851509998750334950185805444447855 -13714304553912094478086374486990066534941196173664347737943079140839510240 2 -367884070882655630785891877843 6730574288892465511219887918570728429135366732586091870751580223301793231 test-shladddivmod +-6528863440223970638249234714151581865561638514865295384371332680662061970029 -36913540142944821177073496030226577063991271774591429797367434456256316959902 24604605953723174243828240349210337384146509969508816161702610762299708087414 252 0 33301544418230523796798136129325191903276669555089137976430642606666380785097 1111119448521463468919386205636226935698167866010067725789944817681239062460 test-muladdshrmod +-84914121307006819861534520354024886732959304976576667909765018675779753895095 -33734797430686302202051663614563177864696792935288850099657207932669766616337 -102660654939881416004941779328139233368526378948134839417440263136258000263276 254 1 98955315519894417210680117251614014274294848178227094975298724352068617948436 11185753669896509258573194177216136324346588911755615485008785003988287318715 test-muladdshrmod +-4756805439354914657157062146720760601779363897648559488036119230046473414258 -25205069919224711211607424233708613506619570034044466450241534811277675992336 65841615838405859557610720340525261800430556950418299394523533586361728325556 253 2 8283509830821873572245889567787981786085701113981069889850529960221182899414 -8998763596547876718672658010959335659555767305449508909489610444294401222444 test-muladdshrmod +783982375644419567722751049236700086045042736024464491262223120876229442273 5175287637281731481295785519248883235846260036385254885568602894849814368811 -55298781556612762404255558682268367199188235546843731267393108383385576323488 255 0 70079645738212902632136650950755273036821422652512833810215828489102796342 57092783249763565645949150057908892679575599568561392603234275558727880866859 test-muladdshrmod +4070111884734287416608979312653292787122202104172152519474989991166732734990 34257747897608142079436828950758942168797726684869935923750014522979867949066 -61460807674782162344337010795962912420813084141671620888972984019328919535019 255 1 2408331480685488199417578349126812242697171581435356157803139449785540375610 -22381063802952741956988549732332921247382434293458568395759850191487471696159 test-muladdshrmod +46624156993487206784214341981008205045812193232799951047364876541247557155655 -63729769095463769066210525784474878773448422698647046890735133366216202823024 87326180659880540224448931705993651721770461620305276267209594753354088752298 254 2 -102644205801514086102164756532696646475956724447744150113359070359995022772818 -1428092989561848018204511966860198528552911262896258786227284617693530033510 test-muladdshrmod +39272829609755756484322638781158254787641099751271808569134728682168699365109 -11052442053174551837010800294891429615750956891563661801761360982769602119895 -283548082261175812447439483712866143310217576711284967538745642449188994625 253 0 -29988969117668461072095834210490978680262152778767346814972545689246419413980 2174529687955394421606608137904112203633356592266557030912275482323503849980 test-muladdshrmod +-6634646688578172858373436607694752472569893432402323211016655704885763912303 -50615746987061510852137844454230120888792101396398105566610972957006661885326 39885934214260485879330356646246293765018634098614146427190880259955614376279 255 1 5800354762566883489975672198380697469946049260633808174115670550957411425502 -28109144677804577765510965536534358513109159026887377398047363431999553081879 test-muladdshrmod +36957305118458084509865949238755863689212814576372103672502961803454095738285 -17426859900126562814159340928393951526114707618474312299911007064028697482925 61889497203091392721847485067819343116261217894188379032096092268147391639006 252 2 -88993959131783882197769064733391828196442843554551869076190294411733289296212 -933414186558473122333257942263787394321322401897335201713504555165014099467 test-muladdshrmod +72799360004808200591693183601526367934146450159257557514619233204077568035423 -43259113456489928181943264810324365449524922073847088046666461901052175252848 -20928308093701346202205365707157304905304946151034389446852806842785919722024 255 0 -54394661928130271541114188703398383016925401302362215366329066394036243394378 29938721175889548572374867166785136077053268439086595306734647725317227983176 test-muladdshrmod +92302382053431541957491748846080777012291600699830575887072283670295321137177 69013668157296288202299005784733240169135155398176346313070175201757132886117 89824190356716673951870631561712249743053597592009107233443818823508120467661 255 1 110026963104671419264446752630572096381373731021551359794924308423043643793015 -23908158790588303139174012402649398780932740824917520006353845804429534584150 test-muladdshrmod +19094862392572944474897897922146461521059803020953497046241755599584285859217 -9623105143646767554719516123478862168481718581670270810378662760058752527692 34811921737822512587681133088401450937187249507755006187477956368554274579224 255 2 -3173824217483389220453883003236448477412384215802980550708734379368313500289 -51434014928851488423168753814799098916141626164449965549730115348405330387188 test-muladdshrmod \ No newline at end of file diff --git a/crypto/test/fift/bls.fif b/crypto/test/fift/bls.fif new file mode 100644 index 00000000..ca9a9d37 --- /dev/null +++ b/crypto/test/fift/bls.fif @@ -0,0 +1,954 @@ +// Based on https://github.com/ethereum/bls12-381-tests +"Asm.fif" include +"FiftExt.fif" include + +{ shash swap shash B= } : slices-eq? + +{ + =: expected-result + // ."Args: " .s + [[ <{ BLS_VERIFY }>s ]] 0 runvmx + abort"exitcode != 0" + ."Result: " dup . cr + ."Expected: " @' expected-result dup . cr cr + <> abort"wrong answer" +} : test-verify // pub msg signature exprected-result + +{ + =: expected-result + // ."Args: " .s + [[ <{ BLS_AGGREGATE }>s ]] 0 runvmx + { drop x{} } if + ."Result: " dup csr. + ."Expected: " @' expected-result dup csr. cr + slices-eq? not abort"wrong answer" +} : test-aggregate // sig[1] ... sig[n] n expected-result + +{ + =: expected-result + // ."Args: " .s + [[ <{ BLS_FASTAGGREGATEVERIFY }>s ]] 0 runvmx + abort"exitcode != 0" + ."Result: " dup . cr + ."Expected: " @' expected-result dup . cr cr + <> abort"wrong answer" +} : test-fast-aggregate-verify // pub[1] ... pub[n] n msg signature exprected-result + +{ + =: expected-result + // ."Args: " .s + [[ <{ BLS_AGGREGATEVERIFY }>s ]] 0 runvmx + abort"exitcode != 0" + ."Result: " dup . cr + ."Expected: " @' expected-result dup . cr cr + <> abort"wrong answer" +} : test-aggregate-verify // pub[1] msg[1] ... pub[n] msg[n] n signature exprected-result + +."Test verifycase_one_privkey_47117849458281be" cr +x{97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb} +x{1212121212121212121212121212121212121212121212121212121212121212} +x{a42ae16f1c2a5fa69c04cb5998d2add790764ce8dd45bf25b29b4700829232052b52352dcff1cf255b3a7810ad7269601810f03b2bc8b68cf289cf295b206770605a190b6842583e47c3d1c0f73c54907bfb2a602157d46a4353a20283018763} +-1 +test-verify + +."Test verify_infinity_pubkey_and_infinity_signature" cr +x{c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} +x{1212121212121212121212121212121212121212121212121212121212121212} +x{c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} +0 +test-verify + +."Test verify_tampered_signature_case_195246ee3bd3b6ec" cr +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{abababababababababababababababababababababababababababababababab} +x{ae82747ddeefe4fd64cf9cedb9b04ae3e8a43420cd255e3c7cd06a8d88b7c7f8638543719981c5d16fa3527c468c25f0026704a6951bde891360c7e8d12ddee0559004ccdbe6046b55bae1b257ee97f7cdb955773d7cf29adf3ccbb9ffffffff} +0 +test-verify + +."Test verify_tampered_signature_case_2ea479adf8c40300" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{882730e5d03f6b42c3abc26d3372625034e1d871b65a8a6b900a56dae22da98abbe1b68f85e49fe7652a55ec3d0591c20767677e33e5cbb1207315c41a9ac03be39c2e7668edc043d6cb1d9fd93033caa8a1c5b0e84bedaeb6c64972ffffffff} +0 +test-verify + +."Test verify_tampered_signature_case_2f09d443ab8a3ac2" cr +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b23c46be3a001c63ca711f87a005c200cc550b9429d5f4eb38d74322144f1b63926da3388979e5321012fb1a0526bcd100b5ef5fe72628ce4cd5e904aeaa3279527843fae5ca9ca675f4f51ed8f83bbf7155da9ecc9663100a885d5dffffffff} +0 +test-verify + +."Test verify_tampered_signature_case_3208262581c8fc09" cr +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{af1390c3c47acdb37131a51216da683c509fce0e954328a59f93aebda7e4ff974ba208d9a4a2a2389f892a9d418d618418dd7f7a6bc7aa0da999a9d3a5b815bc085e14fd001f6a1948768a3f4afefc8b8240dda329f984cb345c6363ffffffff} +0 +test-verify + +."Test verify_tampered_signature_case_6b3b17f6962a490c" cr +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{a4efa926610b8bd1c8330c918b7a5e9bf374e53435ef8b7ec186abf62e1b1f65aeaaeb365677ac1d1172a1f5b44b4e6d022c252c58486c0a759fbdc7de15a756acc4d343064035667a594b4c2a6f0b0b421975977f297dba63ee2f63ffffffff} +0 +test-verify + +."Test verify_tampered_signature_case_6eeb7c52dfd9baf0" cr +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{abababababababababababababababababababababababababababababababab} +x{9674e2228034527f4c083206032b020310face156d4a4685e2fcaec2f6f3665aa635d90347b6ce124eb879266b1e801d185de36a0a289b85e9039662634f2eea1e02e670bc7ab849d006a70b2f93b84597558a05b879c8d445f387a5ffffffff} +0 +test-verify + +."Test verify_tampered_signature_case_8761a0b7e920c323" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{abababababababababababababababababababababababababababababababab} +x{91347bccf740d859038fcdcaf233eeceb2a436bcaaee9b2aa3bfb70efe29dfb2677562ccbea1c8e061fb9971b0753c240622fab78489ce96768259fc01360346da5b9f579e5da0d941e4c6ba18a0e64906082375394f337fa1af2b71ffffffff} +0 +test-verify + +."Test verify_tampered_signature_case_d34885d766d5f705" cr +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{948a7cb99f76d616c2c564ce9bf4a519f1bea6b0a624a02276443c245854219fabb8d4ce061d255af5330b078d5380681751aa7053da2c98bae898edc218c75f07e24d8802a17cd1f6833b71e58f5eb5b94208b4d0bb3848cecb075effffffff} +0 +test-verify + +."Test verify_tampered_signature_case_e8a50c445c855360" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380bffffffff} +0 +test-verify + +."Test verify_valid_case_195246ee3bd3b6ec" cr +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{abababababababababababababababababababababababababababababababab} +x{ae82747ddeefe4fd64cf9cedb9b04ae3e8a43420cd255e3c7cd06a8d88b7c7f8638543719981c5d16fa3527c468c25f0026704a6951bde891360c7e8d12ddee0559004ccdbe6046b55bae1b257ee97f7cdb955773d7cf29adf3ccbb9975e4eb9} +-1 +test-verify + +."Test verify_valid_case_2ea479adf8c40300" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{882730e5d03f6b42c3abc26d3372625034e1d871b65a8a6b900a56dae22da98abbe1b68f85e49fe7652a55ec3d0591c20767677e33e5cbb1207315c41a9ac03be39c2e7668edc043d6cb1d9fd93033caa8a1c5b0e84bedaeb6c64972503a43eb} +-1 +test-verify + +."Test verify_valid_case_2f09d443ab8a3ac2" cr +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b23c46be3a001c63ca711f87a005c200cc550b9429d5f4eb38d74322144f1b63926da3388979e5321012fb1a0526bcd100b5ef5fe72628ce4cd5e904aeaa3279527843fae5ca9ca675f4f51ed8f83bbf7155da9ecc9663100a885d5dc6df96d9} +-1 +test-verify + +."Test verify_valid_case_3208262581c8fc09" cr +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{af1390c3c47acdb37131a51216da683c509fce0e954328a59f93aebda7e4ff974ba208d9a4a2a2389f892a9d418d618418dd7f7a6bc7aa0da999a9d3a5b815bc085e14fd001f6a1948768a3f4afefc8b8240dda329f984cb345c6363272ba4fe} +-1 +test-verify + +."Test verify_valid_case_6b3b17f6962a490c" cr +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{a4efa926610b8bd1c8330c918b7a5e9bf374e53435ef8b7ec186abf62e1b1f65aeaaeb365677ac1d1172a1f5b44b4e6d022c252c58486c0a759fbdc7de15a756acc4d343064035667a594b4c2a6f0b0b421975977f297dba63ee2f63ffe47bb6} +-1 +test-verify + +."Test verify_valid_case_6eeb7c52dfd9baf0" cr +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{abababababababababababababababababababababababababababababababab} +x{9674e2228034527f4c083206032b020310face156d4a4685e2fcaec2f6f3665aa635d90347b6ce124eb879266b1e801d185de36a0a289b85e9039662634f2eea1e02e670bc7ab849d006a70b2f93b84597558a05b879c8d445f387a5d5b653df} +-1 +test-verify + +."Test verify_valid_case_8761a0b7e920c323" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{abababababababababababababababababababababababababababababababab} +x{91347bccf740d859038fcdcaf233eeceb2a436bcaaee9b2aa3bfb70efe29dfb2677562ccbea1c8e061fb9971b0753c240622fab78489ce96768259fc01360346da5b9f579e5da0d941e4c6ba18a0e64906082375394f337fa1af2b7127b0d121} +-1 +test-verify + +."Test verify_valid_case_d34885d766d5f705" cr +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{948a7cb99f76d616c2c564ce9bf4a519f1bea6b0a624a02276443c245854219fabb8d4ce061d255af5330b078d5380681751aa7053da2c98bae898edc218c75f07e24d8802a17cd1f6833b71e58f5eb5b94208b4d0bb3848cecb075ea21be115} +-1 +test-verify + +."Test verify_valid_case_e8a50c445c855360" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380b55285a55} +-1 +test-verify + +."Test verify_wrong_pubkey_case_195246ee3bd3b6ec" cr +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{abababababababababababababababababababababababababababababababab} +x{9674e2228034527f4c083206032b020310face156d4a4685e2fcaec2f6f3665aa635d90347b6ce124eb879266b1e801d185de36a0a289b85e9039662634f2eea1e02e670bc7ab849d006a70b2f93b84597558a05b879c8d445f387a5d5b653df} +0 +test-verify + +."Test verify_wrong_pubkey_case_2ea479adf8c40300" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{a4efa926610b8bd1c8330c918b7a5e9bf374e53435ef8b7ec186abf62e1b1f65aeaaeb365677ac1d1172a1f5b44b4e6d022c252c58486c0a759fbdc7de15a756acc4d343064035667a594b4c2a6f0b0b421975977f297dba63ee2f63ffe47bb6} +0 +test-verify + +."Test verify_wrong_pubkey_case_2f09d443ab8a3ac2" cr +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380b55285a55} +0 +test-verify + +."Test verify_wrong_pubkey_case_3208262581c8fc09" cr +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{882730e5d03f6b42c3abc26d3372625034e1d871b65a8a6b900a56dae22da98abbe1b68f85e49fe7652a55ec3d0591c20767677e33e5cbb1207315c41a9ac03be39c2e7668edc043d6cb1d9fd93033caa8a1c5b0e84bedaeb6c64972503a43eb} +0 +test-verify + +."Test verify_wrong_pubkey_case_6b3b17f6962a490c" cr +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{af1390c3c47acdb37131a51216da683c509fce0e954328a59f93aebda7e4ff974ba208d9a4a2a2389f892a9d418d618418dd7f7a6bc7aa0da999a9d3a5b815bc085e14fd001f6a1948768a3f4afefc8b8240dda329f984cb345c6363272ba4fe} +0 +test-verify + +."Test verify_wrong_pubkey_case_6eeb7c52dfd9baf0" cr +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{abababababababababababababababababababababababababababababababab} +x{91347bccf740d859038fcdcaf233eeceb2a436bcaaee9b2aa3bfb70efe29dfb2677562ccbea1c8e061fb9971b0753c240622fab78489ce96768259fc01360346da5b9f579e5da0d941e4c6ba18a0e64906082375394f337fa1af2b7127b0d121} +0 +test-verify + +."Test verify_wrong_pubkey_case_8761a0b7e920c323" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{abababababababababababababababababababababababababababababababab} +x{ae82747ddeefe4fd64cf9cedb9b04ae3e8a43420cd255e3c7cd06a8d88b7c7f8638543719981c5d16fa3527c468c25f0026704a6951bde891360c7e8d12ddee0559004ccdbe6046b55bae1b257ee97f7cdb955773d7cf29adf3ccbb9975e4eb9} +0 +test-verify + +."Test verify_wrong_pubkey_case_d34885d766d5f705" cr +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b23c46be3a001c63ca711f87a005c200cc550b9429d5f4eb38d74322144f1b63926da3388979e5321012fb1a0526bcd100b5ef5fe72628ce4cd5e904aeaa3279527843fae5ca9ca675f4f51ed8f83bbf7155da9ecc9663100a885d5dc6df96d9} +0 +test-verify + +."Test verify_wrong_pubkey_case_e8a50c445c855360" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{948a7cb99f76d616c2c564ce9bf4a519f1bea6b0a624a02276443c245854219fabb8d4ce061d255af5330b078d5380681751aa7053da2c98bae898edc218c75f07e24d8802a17cd1f6833b71e58f5eb5b94208b4d0bb3848cecb075ea21be115} +0 +test-verify + + +."Test aggregate_0x0000000000000000000000000000000000000000000000000000000000000000" cr +x{b6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380b55285a55} +x{b23c46be3a001c63ca711f87a005c200cc550b9429d5f4eb38d74322144f1b63926da3388979e5321012fb1a0526bcd100b5ef5fe72628ce4cd5e904aeaa3279527843fae5ca9ca675f4f51ed8f83bbf7155da9ecc9663100a885d5dc6df96d9} +x{948a7cb99f76d616c2c564ce9bf4a519f1bea6b0a624a02276443c245854219fabb8d4ce061d255af5330b078d5380681751aa7053da2c98bae898edc218c75f07e24d8802a17cd1f6833b71e58f5eb5b94208b4d0bb3848cecb075ea21be115} +3 +x{9683b3e6701f9a4b706709577963110043af78a5b41991b998475a3d3fd62abf35ce03b33908418efc95a058494a8ae504354b9f626231f6b3f3c849dfdeaf5017c4780e2aee1850ceaf4b4d9ce70971a3d2cfcd97b7e5ecf6759f8da5f76d31} +test-aggregate + +."Test aggregate_0x5656565656565656565656565656565656565656565656565656565656565656" cr +x{882730e5d03f6b42c3abc26d3372625034e1d871b65a8a6b900a56dae22da98abbe1b68f85e49fe7652a55ec3d0591c20767677e33e5cbb1207315c41a9ac03be39c2e7668edc043d6cb1d9fd93033caa8a1c5b0e84bedaeb6c64972503a43eb} +x{af1390c3c47acdb37131a51216da683c509fce0e954328a59f93aebda7e4ff974ba208d9a4a2a2389f892a9d418d618418dd7f7a6bc7aa0da999a9d3a5b815bc085e14fd001f6a1948768a3f4afefc8b8240dda329f984cb345c6363272ba4fe} +x{a4efa926610b8bd1c8330c918b7a5e9bf374e53435ef8b7ec186abf62e1b1f65aeaaeb365677ac1d1172a1f5b44b4e6d022c252c58486c0a759fbdc7de15a756acc4d343064035667a594b4c2a6f0b0b421975977f297dba63ee2f63ffe47bb6} +3 +x{ad38fc73846583b08d110d16ab1d026c6ea77ac2071e8ae832f56ac0cbcdeb9f5678ba5ce42bd8dce334cc47b5abcba40a58f7f1f80ab304193eb98836cc14d8183ec14cc77de0f80c4ffd49e168927a968b5cdaa4cf46b9805be84ad7efa77b} +test-aggregate + +."Test aggregate_0xabababababababababababababababababababababababababababababababab" cr +x{91347bccf740d859038fcdcaf233eeceb2a436bcaaee9b2aa3bfb70efe29dfb2677562ccbea1c8e061fb9971b0753c240622fab78489ce96768259fc01360346da5b9f579e5da0d941e4c6ba18a0e64906082375394f337fa1af2b7127b0d121} +x{9674e2228034527f4c083206032b020310face156d4a4685e2fcaec2f6f3665aa635d90347b6ce124eb879266b1e801d185de36a0a289b85e9039662634f2eea1e02e670bc7ab849d006a70b2f93b84597558a05b879c8d445f387a5d5b653df} +x{ae82747ddeefe4fd64cf9cedb9b04ae3e8a43420cd255e3c7cd06a8d88b7c7f8638543719981c5d16fa3527c468c25f0026704a6951bde891360c7e8d12ddee0559004ccdbe6046b55bae1b257ee97f7cdb955773d7cf29adf3ccbb9975e4eb9} +3 +x{9712c3edd73a209c742b8250759db12549b3eaf43b5ca61376d9f30e2747dbcf842d8b2ac0901d2a093713e20284a7670fcf6954e9ab93de991bb9b313e664785a075fc285806fa5224c82bde146561b446ccfc706a64b8579513cfc4ff1d930} +test-aggregate + +."Test aggregate_infinity_signature" cr +x{c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} +1 +x{c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} +test-aggregate + +."Test aggregate_na_signatures" cr +0 +x{} +test-aggregate + +."Test aggregate_single_signature" cr +x{b6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380b55285a55} +1 +x{b6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380b55285a55} +test-aggregate + +."Test fast_aggregate_verify_extra_pubkey_4f079f946446fabf" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +3 +x{5656565656565656565656565656565656565656565656565656565656565656} +x{912c3615f69575407db9392eb21fee18fff797eeb2fbe1816366ca2a08ae574d8824dbfafb4c9eaa1cf61b63c6f9b69911f269b664c42947dd1b53ef1081926c1e82bb2a465f927124b08391a5249036146d6f3f1e17ff5f162f779746d830d1} +0 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_extra_pubkey_5a38e6b4017fe4dd" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +4 +x{abababababababababababababababababababababababababababababababab} +x{9712c3edd73a209c742b8250759db12549b3eaf43b5ca61376d9f30e2747dbcf842d8b2ac0901d2a093713e20284a7670fcf6954e9ab93de991bb9b313e664785a075fc285806fa5224c82bde146561b446ccfc706a64b8579513cfc4ff1d930} +0 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_extra_pubkey_a698ea45b109f303" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +2 +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380b55285a55} +0 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_infinity_pubkey" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} +4 +x{1212121212121212121212121212121212121212121212121212121212121212} +x{afcb4d980f079265caa61aee3e26bf48bebc5dc3e7f2d7346834d76cbc812f636c937b6b44a9323d8bc4b1cdf71d6811035ddc2634017faab2845308f568f2b9a0356140727356eae9eded8b87fd8cb8024b440c57aee06076128bb32921f584} +0 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_na_pubkeys_and_infinity_signature" cr +0 +x{abababababababababababababababababababababababababababababababab} +x{c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} +0 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_na_pubkeys_and_na_signature" cr +0 +x{abababababababababababababababababababababababababababababababab} +x{000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} +0 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_tampered_signature_3d7576f3c0e3570a" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +3 +x{abababababababababababababababababababababababababababababababab} +x{9712c3edd73a209c742b8250759db12549b3eaf43b5ca61376d9f30e2747dbcf842d8b2ac0901d2a093713e20284a7670fcf6954e9ab93de991bb9b313e664785a075fc285806fa5224c82bde146561b446ccfc706a64b8579513cfcffffffff} +0 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_tampered_signature_5e745ad0c6199a6c" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +1 +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380bffffffff} +0 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_tampered_signature_652ce62f09290811" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +2 +x{5656565656565656565656565656565656565656565656565656565656565656} +x{912c3615f69575407db9392eb21fee18fff797eeb2fbe1816366ca2a08ae574d8824dbfafb4c9eaa1cf61b63c6f9b69911f269b664c42947dd1b53ef1081926c1e82bb2a465f927124b08391a5249036146d6f3f1e17ff5f162f7797ffffffff} +0 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_valid_3d7576f3c0e3570a" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +3 +x{abababababababababababababababababababababababababababababababab} +x{9712c3edd73a209c742b8250759db12549b3eaf43b5ca61376d9f30e2747dbcf842d8b2ac0901d2a093713e20284a7670fcf6954e9ab93de991bb9b313e664785a075fc285806fa5224c82bde146561b446ccfc706a64b8579513cfc4ff1d930} +-1 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_valid_5e745ad0c6199a6c" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +1 +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b6ed936746e01f8ecf281f020953fbf1f01debd5657c4a383940b020b26507f6076334f91e2366c96e9ab279fb5158090352ea1c5b0c9274504f4f0e7053af24802e51e4568d164fe986834f41e55c8e850ce1f98458c0cfc9ab380b55285a55} +-1 +test-fast-aggregate-verify + +."Test fast_aggregate_verify_valid_652ce62f09290811" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +2 +x{5656565656565656565656565656565656565656565656565656565656565656} +x{912c3615f69575407db9392eb21fee18fff797eeb2fbe1816366ca2a08ae574d8824dbfafb4c9eaa1cf61b63c6f9b69911f269b664c42947dd1b53ef1081926c1e82bb2a465f927124b08391a5249036146d6f3f1e17ff5f162f779746d830d1} +-1 +test-fast-aggregate-verify + +."Test aggregate_verify_infinity_pubkey" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{abababababababababababababababababababababababababababababababab} +x{c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} +x{1212121212121212121212121212121212121212121212121212121212121212} +4 +x{9104e74b9dfd3ad502f25d6a5ef57db0ed7d9a0e00f3500586d8ce44231212542fcfaf87840539b398bf07626705cf1105d246ca1062c6c2e1a53029a0f790ed5e3cb1f52f8234dc5144c45fc847c0cd37a92d68e7c5ba7c648a8a339f171244} +0 +test-aggregate-verify + +."Test aggregate_verify_na_pubkeys_and_infinity_signature" cr +0 +x{c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} +0 +test-aggregate-verify + +."Test aggregate_verify_na_pubkeys_and_na_signature" cr +0 +x{000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} +0 +test-aggregate-verify + +."Test aggregate_verify_tampered_signature" cr +// Test is modified to make all signatures 96 bytes +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{abababababababababababababababababababababababababababababababab} +3 +x{9104e74bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff} +0 +test-aggregate-verify + +."Test aggregate_verify_valid" cr +x{a491d1b0ecd9bb917989f0e74f0dea0422eac4a873e5e2644f368dffb9a6e20fd6e10c1b77654d067c0618f6e5a7f79a} +x{0000000000000000000000000000000000000000000000000000000000000000} +x{b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81} +x{5656565656565656565656565656565656565656565656565656565656565656} +x{b53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f} +x{abababababababababababababababababababababababababababababababab} +3 +x{9104e74b9dfd3ad502f25d6a5ef57db0ed7d9a0e00f3500586d8ce44231212542fcfaf87840539b398bf07626705cf1105d246ca1062c6c2e1a53029a0f790ed5e3cb1f52f8234dc5144c45fc847c0cd37a92d68e7c5ba7c648a8a339f171244} +-1 +test-aggregate-verify + +."Test fast_aggregate_verify with actual Ethereum signatures" cr +x{abd15ed19f6b6f4a199b6c90637e70222a8aadcb34ffdef3c6cc57a824a7410852d209835c91680875794ba287ce7de3} +x{832451ba329e4fe2e81056ae224feea873ed8d6ffc86840437976a421a352282faca08b93e9e3a8068a9e3979e6056b5} +x{b09e63a9a8b80928532e1fe0d4624be4990bbdf4c11293cd72ac635f56262fea853aef1348c26a8263f83d0c3144bdda} +x{98e38f383949a34bc925a381b3e922fafc200201f743001fff15171bdab7a82a3731c54522c98297840ca687e47057bf} +x{af2d7140be9332b536222680c690a54de4eea2644b3b3a84e45b3e425d4a37f07c98eff13e123da39b22c536be230f94} +x{8277ce097d82f3810e28936bb0f200c47be681db6b22a34bae6b39a0616a1dc5eb542dbc0f68adccbf5e9517a03c0736} +x{9663cda398d72bf5bdd4bbc49651bdefb88f5dfb32e305a7f70a968cbd1e6f4ae7cd50e675393e04ec56f7566bbc153c} +x{a9c0360b88f09c0528a0cca8173061eeef7e8cc84064dd3bd894808e1da3536093f9acf7552e3485d037cf5b10a9c036} +x{8259ce226809ebf580488ad7c8d054732eedd21552d8ab4d8652b62524f3858eb10b055f40f7d1752b200bee9a94b8c0} +x{a605c777fb1ce8b67450e0d243305f5a906074dbeaa514d93cb43eae638794c2ef38c60b478f7aabdae5f4e1461d2d69} +x{9376c20d92aae571465aba7286ada5c50733fd5c417fc8a4cc7cf2af8298f35ec6f43b6d9fe1bf8c950abe3499b4dd62} +x{a4ca29cca82a9bbc250556c459d0ac48c90652b7ecaf77aabc14a64e15a6e686e48efced318ba848303908036fd44f86} +x{aa50e833ee57e0b71b52a5f826cb7f131720fb35c828701d0703eeb417613a8f10be0be445b35ad5b9fa7a6da3c3a836} +x{825f98ebe875b1b6ad876153d3969a0fbb088f3fdffecdfda40bdad451fb336a05296f325ed85bbc271eab8dd9d541d1} +x{9895f1615cec63b3a28be707874dc4273168f91c0c5bf687893680f5e4d88964620b2fc91dc0e663c1d9968c25a95a01} +x{a4255953e52e4bf80a8c2c52cd24fbf869bc43c7fc815239d54d841b86b660a3b2841191f9716fc4aad465432b8415c0} +x{b663d3f303a2dcc660f274c6b051e4c2a16271840315148748ba0585f47e02e99827527d365acae65094c39a09c1b065} +x{86753154725dedbc2f0425723b551f4fccb2f69087354ac0c0c0bbbc23e10d07325b87989623c54e58b7b2241c97efbb} +x{b1de760c0271e5ad1422d8b58ddf954fb104ec7b8a74927ddad612833d189fdf6bb776249cde1b48786ad69e015a7b0d} +x{976cd11d84723509780656ca3b92f12eeaa7413b78d9c74824bbfb0269d7ffb63499be7340ca75ede7cfac28024785a8} +x{b2318f9647bc8ce79734177a85877d63f486ce98ab2a247672c54cc4093dabd013ea2d95157a1c5c5d7cbe00e4c33b11} +x{97ec1840d0795bd66dfb2a3ef954f93ac93e05755c2b3d61b714be2d732d37291e5a95a69a02ab6af4ae1441e45e9323} +x{a3fc6160fb647a1d43d94d639704d6d17528b18361e3acbfce051fe10d7b9608e717f6d73f51b784e69b59789c121f2f} +x{82406906b3a6e0baa89d93fb2e1c1f87537e6920f4c1390a1526fb5f490f65dc35432ac6d265418167d7a68c5cd70c74} +x{999a313756535ae0d6816b99c69db91c3792648d45cad753c8f6cea0d9997f2006c508cdb39c3d286e24a607598a8c8a} +x{87dffdc02f4797901553cc7de4a8ffdae4df2b5728a0418923d1d4c01da14a482b21a13332b7227f49b4396f88e776ac} +x{82c9236f69038abc40acbf1b730b3c1d3962ff9567f823c83eb3e984339e77c4f9373f679d30c4ffd0e2aad1d002f4ba} +x{81b989f4a65fce31ba9c63a80ff53d28e75606f5ec563a6aef5f2d76d13f591ad60b974f97fd08155325148df95cfcc1} +x{8f3470b02f8e0a5af092625b3f3812d44d76b86cd1c7af64f1c350f6931eacc38490f10cb9888f1b6cdf68fac06ef9f7} +x{ad77903be9a9c4611d9c152ba31faf49d936be3ca7ace051ee0d8862a3869d61194d990b5b4c86bdcf5219e0ea2c25f9} +x{b6654b4984b1f41517fb3d1f8471f2b3a389329fe304cf315d0c087b7a29f58c8fe61cacd99620ad337fb73e773836a6} +x{819cc51962fafcbe99160959e9bbe66e43bf06b5cae2300fe7cb9aca5739f31c4e8a4c695e77f6b06a881eb6322f4399} +x{a9aadc9694fc9c214875b66f00472ab3bdb9fec2cf07a46845050506c077a029ee75f88a24ea2a1b9c2c0b50810e6254} +x{ab5c69e503a2a7becebb24f17c921e9ec2f4d18f7b1565b0c2a1468271348aee861ee0e9e091a786fbdad10743a7c449} +x{8a1d4d071d08a340f3a3df825d748da28b9dcbc52482d34ce05e6272ebaf93858c8460831ded3c81d2d19352414c7fec} +x{8fe4c6f6aa8951d3f092132c645f4ccf9a50a1c200fa96f27306968b4baab7b5bb09e1f6b8d7bb91dc82a408576d6894} +x{958fa0b9e4a095c7c270d7c3d9a603533e5d91b6e1624ff6dc235d5e96ba7cf3df71b202d96667b4add69c10af948fa3} +x{aa9fbae1a28af5400c5fcee35a6b968422c3015f018d06793d21bd4fbf492c484b15d8a7558d0081ce174d1b648bb057} +x{819a691281ccb2aef76c9523a9e0329e1abf6fa1917227fcc9c3996662de6d4d3623ba2298845b2f82c893b5f3b7f638} +x{b59bc108d9780d1322e318765f0064e93a475f4ef76519a05c76b52b9a640b3d6add5635ff4477b8124e42ada3b95a85} +x{b040da098f2f81cb66270ad142035080da510bbb7c7835d12432ab0f689665052aa226e818a2f16c60e38e2e9dae1ce7} +x{834a7bc5d9eea4c10508dbbf366e1c0c1d4ae87a0832b7d9cc6b635da6b37b70a0ee57215e7ed2eaadc58587792a7341} +x{97c3281b2f7d1893dab3802b620d72e7061af12ad57847ce00af912dbd8c3ab62f8c548764aee8da5ca57d527e41655c} +x{af4241e7dff52b4912d0b6b06f6d59562c77858538f0838f652d91cf13afbafbbb7f16aaa2c53c6159cb1aa8e4c672fe} +x{92a78d4bc61c4cb7783a57e3f423e83402659de44efc167a943604a89cc7afe3c6db64dbc05cac81503f17bef2f3bfcc} +x{907fdbf2864372dfd420acb19dd045f090c088a858bb58e2de82ac6aef9a5efe423c6fcbd1f1810d6bec89f9eab8cea1} +x{96ccd37a8c0755f54d66d380ba56e5520a8adfcb70271d223aa9b42bd6cbbe3a7d186012b49dff85f0d7df3f366b41e3} +x{89e738b1b69710038089a990a7278b2a54d30075998fb1d4540c6e264e57def74fbed1b35cf0f3f236f12887e4df1949} +x{910a6f5d7a02bc8641e179000faf86f92445d63174999b55d6671d05a2253f1b5890f02d2b679a0b3f500faa89f160d2} +x{a6d921cc92c139a4345b7aab309318c1067e5169f179f82a9bc735c08ff61232a63d88ea59157ea354476a9d2b40db49} +x{b3ed37713ef72ce168beee0aa38f89ed3cf76337a198ccc1b30b58d808aea839af97f5c2fe95ffc61ba875f095058cc6} +x{81104459d2f669aa6bd481fead334fb0dd709e6029e7374d61d9cb1a9589255efde16ca1e6ce1c5dbc510dbef512ad4f} +x{9684fa7e1f44fd4e326104ede6348bbb978e68a944448dc311a634cda46bb52086cac4b435eef009dcdcfe04f3413ed0} +x{b93fe3dbbdf63678e0cb0e4e299015e6a4187d5a6039ac6eb0d96ca4baecfe1a0d3672ed716d2b129fbe7b8373750cf4} +x{ac97c56a24b9dbdf87337a87f27a90b1d936c20e68a39e2f8bbc2ae5a9e1ae9490477cbe03e03f180ff42637246b9541} +x{8032d15ee910491ac3e5d228e00ef8ae41e50c0ca2692fbe7f006f3d8b360e556a1e0ad0c67d18a231f2d71ae83914f5} +x{8ad43c8688a00ea88ddacbf8d2aa99997dd425a35bd7294be0fac420af95bc1723919d2d03862dbee6e3564331d26033} +x{ab2aecb129638db624254e7001a725260d2739fd50b374418a1155569eff3581dcd6f25cb0d0b85ae20aa176c30c99e7} +x{a9a420966d5d57d11a2d881fb462c7ed53dabba8e51b78bb852acc08c4f5c86791828e8cc59631c3fb1351e0960f4347} +x{b974b7427651578b63669ef47ec8cde65c9d134e18e9f2e2761b3250fb472a578424fff31614404d0bc23c0cd75d26e2} +x{a2ebd309811f0c33ae45b709bf55e1c0cc0a09cb18a47855d42d5012e6d2e340105dcd85347060c64852a9da589c26fa} +x{af6c39210b9c6d153e141fb34d7739fc7a9fbf5656b30744e9a8440e6049d84863c2f208f14e03ab5fb5fb47a19dc277} +x{a19820316b4136e5b937c0b60812983f7fbf7a53b1758ad8dc0e249cd49dafbfda4c25d9c798a15a9693bc565a11383f} +x{851cf2adc1d7ad56a0ea3a7abff62570b9b4b25ad84e847e278edd8b11b2a6d2ce901bb45604e51ae5d3aa3c13ed4a07} +x{b9fd9b663fa540237e214c7b1e3b6b74a4381120f82e9691d3d9243d871eed4672926059973ade7badbb88961868e5ef} +x{b943affd10c2735dd5ef10376763e44ad0a848796e28fd215cf5c56d124d191f11fe22fd419ead954a4610b0990fcaa4} +x{a579968409343bda51ec7ba8a4870d8bd560c43a313db0564c5e6df8381d7ff818ffb4676c9a06469ab14d00dd26b00b} +x{b0fb5a7cf2df5834f822e44e6efe63211db7a747b196c6bc2d1605933dc1d24f75d8373d219da0210ebb4228d98cc4e9} +x{967512e3287fa5c4c0093dadf799a4a4053bf95574c18688f9ec9896c74978862517d118058590511a332ca303f42efb} +x{80532dfc08ee2b181e9c591d23c8aa53ad6b4dab54b87d57c1530cccfef26bc53a69e6edcdd74a0e072612f9967bc99f} +x{a03974bf0c0cd74db34d19a4a417bc5a4bff8a2a7566728a8b411317b2ae1c85d02eb17e955264a7439153876b41208a} +x{903f9407477a39f67d5bbd9b6d9a353470019d1f3508fe803a13ba69b01fee8713f468db4846b01d4d4e9f955b87f55b} +x{a7a6df5ba7ca5697aa90ee6a4806346d3e2a6b9aac371ac1aa2dc48616c4c24d236a8e8b4900f9382bec9b21907133f6} +x{b98f676715d14957248d0738e81e5d5f5359391181e0f573580539751f3d2311264aa8649eea66bc7016413e69ca7d01} +x{ac77a4b3a57b754a63d7ae75bc916e0750fdbaa01115f038c7c60f621dc6b0fc30d7e5eea1f0d0a533c90615bbe4429d} +x{9561be8f41acdee26b2d35c8812f2265a7e96f2964d90d1c4c26b057381d4f5406891c45c86c27ba1313e2d0938dcefe} +x{a61cf69326c454b9f25b54d47f5f7209649992124966b2decdb201e4fd469200a91ac95c8d606e856b02cc01553d806a} +x{8f9fb79917775751341b7c96d5325df771b9450b9e1a82d05a3674586f8a374fc4eeb7e2f176b96f18144f8ce6104723} +x{8830d4880c14d6ec69305f09d0b7f5d138efc37a1f8fe3d916f51c96feb6c4d6ef51e1a4d574d6f06b0a5c41ddc8b364} +x{ab109b1ae29d1687ebdd2d1d2c59d3196ea2afe222466b31ad4242f94a040c81e06e2175ab6f4f75f4738f8d7083e551} +x{92b58f175d394c5e5ef3bca7c1f63b53e6f5443572194b7122b6484db96605141c0fc8ca0a670f553c61f58af0f58ae3} +x{a3ae85c74796adfa4efdecdd39e014bfa26e69c9f14f69e0383313c7fa99768788037d64bb34b13826ab5a969c43b334} +x{b49f0e0bc429eb0016d2d203fb470016cfdcfddc30fb7c7c4bd6f10b77731f8bb2b91a5dfad9200b96a1201ed0b4754b} +x{a82a80e0e24d94c5cd6c66d0a8a937aa6f447678b2015f56d8123397f0165456e7000ba51501595a34203a9cbdd88077} +x{a52cd7f09adb8f5bf2fe6a3d206f795dd3d2fbf8c50ca54203c5cc04e9af5c78ea72cf0b2f5cc9f40e1ca9e995ade465} +x{b271b9a754c2cab8cadb0c2084c525ae4321d4a4200110152189b6fe9537156cbed646816c5a3b8458c8f879bdc2a2e3} +x{b09b2fa0f1f5ba3857c8be27197eb3349486c6a9b9e878e2cb6036e79ff8c7463983d73d28d8e9b0f119e7a3fb494e73} +x{b9adba35b8a1a01f5f6f6daa26e3bfbe9793b8402eb5e3e2aeccfcbdb597c0636ef8d4bf2c8713f5cdaa1f6432e5dc2b} +x{8de96521d0ec24ec97e69da3996389c60c782461a894a67b09562bd0fe2416e1d3b83c241dff07fba400d0def39dfe0a} +x{991ac0813bdd9a59ce2322a90da2511d511a12855b09df44555cf43b48296fa9869ef9df66f359179c706ea2e2a1977c} +x{978eaadba569a36fa8f5cc0532803b76432d51b26bfb2f3eb1841db325ffbf4f1f72be2d478dead2b79677cffe1331d4} +x{b4e52c231a548b29f496e4589afd554dba83b5db9565091eea0c4c79a10163181be836e15070b88c11ce306e8da2b356} +x{b928dd2f764ff18bd663ee455af3ed5518088a780fd3486535eaffbf5f55979ac115ba2f745fff6438be6623366c5663} +x{ae48e5fb169ac93073b1b36eb20a93fdf5d48f6ad8364a441b3dcbdf5761b5caf84176017e879bd2cc6e0efbe0dece21} +x{a4f81f4f3a77a94d3c24ac297d376418a114ea16771ba1b9abac90d6a048c3ce4ba67a724dbd9fc84d941838ec946aa2} +x{aad763ee3c5bb1272c24449f6458554039e3370234542b7131dc44c0b1f0f9dd18890b7048e690cd208ad5e066544833} +x{b05ef4dd1a820b49d0594240e906bca9e716cd4bf6d45a51d5d571ed205e39b6501930782cd8573d51963d5a0401ea5b} +x{a027e8dc718735f9acb9b2f06fc74052bdfd1f2b7ccbf181de1ebf7080e7bd35b7b8fffc825e7f6fe7aa75a814697d3e} +x{b07c797102e4f17ac8c33dd40081cd2a502ee2e4bce02bcf4eccd073c51d7db0ef4cccf83de1b7adb864cd38f92e8903} +x{98d211310a79d0da3594e88835e5b8cf944c61b1c4199b56af9d703451a21e55c38ba60e9cf566d677437c65d8fb026b} +x{92e5e8bbe9ffaf880adc98a42d3e41249b789c94551ffb380620da4cea22b163ea9ba8cbdb393e7dbbbc9553b85f4445} +x{a89604f3c9920aaaab0a40a059e621e42fec8902fb15f7e3fc24bad435386eaffcda79e94f52daf9b37058d7eb6af895} +x{9372aa0f3f96d683d81ce18233c326ddebca93e6f29a9fce651b1cae20410c1e93e54990af18bb55cc0b97dd3d4ae26d} +x{a9c4b9b1ff3b74ea6de69a396be9511a715c8ff87a9b33e0e74f99cea0d823eb907cd127ec06cdfdada16105cd973163} +x{a10c5483b6877478a90de5cb4fd2f23da77fca45cb6b53a8c2559b4e310116ff4feea80f308bb296d3e8aa5b00f1c40d} +x{8148b79dc931b103ac4a15ba1d613e8ff3b54941708c78bfdb7d8748c6cef01949e09d6a67488f7c12801f0c02b713ed} +x{a2e4657128e1bee011fee679b7fe7515335766ab7f635bea59b820de972a24dd3eb3829c875884143f223c03cd18c8d9} +x{88e8f1442b2f54fb6e882b71168dbfcfae30f73b422215d7cfac80e87ca87da2a235c71f0965d5428c3654a7cfb79235} +x{af992a54c30f72966ff2b5fabb01219812b189d501ad7d5f6e1d89b167f6500b1908b995bb1d96ed27ed74fed800b150} +x{99fd4146e659a523b7f3be89e6225849a51377ea49d8fe12b39b39ab926ba59f8176c6fbb121a6aaf4b47a4f4a9df89c} +x{8561e48d685afd45b2d0f6e7944c9cb87f3d3f7759cf2d40a9a67fa202db25dffe1380ff9028c6692c14b05fca52bd65} +x{93467762e27dd2647b83360aeb0b53b27ad1a49262191a83143e109519414f6e783109362d1f6f6c062f633c4311e2e7} +x{b2e9357b2a7e6dbc0168b7f5035e9c3c5f49f47702dddd3e6b08e235086780119a04006909aba277c54fa33768be7585} +x{b9820304d2fb65fa993e9316d434c21d4660e3b47db4bdcb4bc6e24dc11b1cd6e4c79d5ee66cf12aa9477d9d903434b2} +x{849cde94b4bc6c895ed590db92577a454577fcb2492aec26ca4df48a650b6252a69e7f43ed82ca920a81703e9f2f40a4} +x{8f2139e3eda2efbf6466768d5e16679e9cde6607fb15cdb1b91f437f232d830717cffd60da4062c3b5eb382de8330fd1} +x{abe47bb7af31ec2bb434ac94bdf514e21c8620eed7943545b30f4c1fe851f9413464550f301ca93ceeff925869cbb18a} +x{8130ffad0227ccdf49b6fc98d818baed9032168ad55b2f888af636a7cad52a0411bd8d699c78f63ee3288140759547af} +x{aa1760f885bea6903efa5d557a9d5c9f4cb54ff34129ead9e9faa07c0a41d066b667244229627ba5797feb984537f8df} +x{98403382601e7766acff837ada3342b15b744a8623ba6e5a55cf8df199ba0c2cd5cc5fd1aa319dff980b11bc6a199d6e} +x{b8af58fb6b4f548ff6918c42dd69608b9136a8909edd73fcd2cb994a45a627c6dc26793b7c69262f3e8892d3bf2eefff} +x{b2e385e6ee0bcd709dde65cf095f2d9c36f315ff06e83d9597df934a1d7eea5fcad77de858f3ab094772800d491e3819} +x{8c10a30693b4b1b752ae0aaca5c6dc656c871085701a8cf68c5c7958dbb896e8798b616fa0fbbeb7a2932adbe0f308d4} +x{91b0e15e00aa788d83be05ead90be662bfd17cf16cd5da705d81b3acaa7d478a3bd349552c1429652a64e3967833ae62} +x{8ddfe0d8e41c12332f7c5e4310899d9b1be138c80ccfdeadccaf5e74077e13aad63f4bd508290ded0e2c40c6628ec035} +x{94c43da38a8ed19392a8662d5ef7c8358eadcdd4a566a61f6a4fdc57cc3aac58d8ad2c4e61f283fef9ab5aea324c080c} +x{815fbf4029d334d63bd8f667a6684004714415fee64ca97c60b850b188ea3360d17299d9ff6a332f89ec561c179167e8} +x{89873aedf223606eb09afb13c34b1b0ba65532aa4e9864cb588601fa42d69250546214b2498e5047a6fed4e09a0e36a4} +x{82a2bb33c62a75abd2ed172d14abc0ef5637b14331c41b6f49b42c2297feb277566975a8f2c720b04474c221648dd95b} +x{a46d8964d9854114e82f0d98562e7f3b0b0f38037f9050a47645cece99f75d9cdafb304a8bf7dcc1049ead05a6086eee} +x{aece4f7f8c68a959f88128502115201de816f748f8f4f83d406f73806821aa43d204d2d02b487c44266f1559e7eddc69} +x{a999ffbea55a6ce252fc4661c337adc2b5675f999351071e6198570d5a7e7e5855ce0312685d691427cc4a230e1aa031} +x{b57e85d1390f113c620a772075d6edebf2f2379c7a3bcd469358c128b888f73c947d00f4054df5c2b220082eafd02ae1} +x{994df161084d1ac510ae0996121c74ff8c16cf5bebaecbf21aa1da07eed0f602654adaba025636f0bd338e9bc218d942} +x{9018e9e6318c824de62f2a3278ef214863b0c98e895e9ffbaefefdf56386c3e5c20f6d5236d4ff7709fd015e6abc3e96} +x{a6f41705254ddf479c3d19d60b7800b091561bc7790aedd2d33fa0f41a8d5147c81ebc347f4f012aaf363b3187bff990} +x{8fc374c056f5e726063f59e84f97b066af2e07e599d6e2e2593d8e31bf5665afdf3034be6a529ffc434e2b365b94fb01} +x{b05b312f4dad2ffba9b50d651607cdd19c22f2eba0cc5384d2743faf74f0f081533a50f7230756bd5638a8570fe73d56} +x{a96f25869f617c81188dda1b4d9422dc2a8ded653de0e1879f3e5534b582fd332cdeb13f6d887d9b28f653ab6ac09f88} +x{8f6c0bbc567c089a3b22a381d3e5f5915421f27563b7ac51318b9612515ce0d3224d40b3388983afe2c92d2da3844db3} +x{b2779d398c462262fb1b5ecb4ebc50d00c44337e6ed20210ada4b8b6321b99ef262455e50647a61452aa2678e64def15} +x{85ba9c1a72a420f960a443e7724835e08023581226ee4912a6a1876f40944c7262f92e3bbe66796dcf9c706986917671} +x{af01794226c596db4f502475eca86f399df28b1344af6a54b1faba31158702d56c57f1b35a9909f2458734f58c04ffd4} +x{8918c724fd6a5530e76d3518e5ab73a7144685769b1553861e0441cba0b0c307a68429923cb7c3cdc577e3dd9e0f11de} +x{b6bd93d8442d05d514a5cecd64efd5bc5571221769c1a76177376e2e0d6504c7c8196e300bdbdd38ab8514e0423c1dec} +x{b7a6125a2ec2dfe7fe6731bdb7d4d604c473a9f74abe11866f7cb20ca4fe11157d379ed3577b35d96839e95eff110fbe} +x{85960eb8968b9a267f65f4f7b2ee1e9ed676e5815615aa4b29abb6bccc669c0232401e529a1597b67b0cfd310e6ca5db} +x{a02101be2ec64317b52358933f7b68f0d49df19404f6dc035176d3313eaa5253584d023c43eee1e8e2e627b253fb5634} +x{8baede2de9d880a5e9e4f3c35c181a1fdc68867fb432ffb53b530a29daf52d844389cbe3d7ae2557ee00feba9ee2d7e3} +x{8f1eee175b515d5c4e8784a03c7192efcf93588d476eacbee95d01f3c7cba46be8279ba65e74eb7e8983383908b07cd7} +x{a24b3d111b7ec72a3281402e9d1be91b51f8e71d80d27ae62e6c75e5c8bd3a860f45de65e9bee657d400b78e7a2c5e16} +x{85d13e876e384ba0c55f72bf391ccf65248736d0a707e143d65146d439e945abd0133812319626c9e8092f5fefd54c45} +x{a0deed3a9b3cbd8ea5ea6497ecd3afd02616b953e33cbe8b117a4add6cf8cc4398268eec7e9e0bd91899472410a452ef} +x{a149ae720e47fbcbddde029074ef65969e587d09a8d6cd3aedeb63a46b54bab17b84216feabdd3bb81341c6a83a243c7} +x{85913becf48a087fc75613d24b332ccfda08abb67c0b8bd9bcbf5f0a8ab1bf6285c68d89fa80f6ec18c666316f19088b} +x{85685bbb5bb114db0d337bfe51089039749e7afcb7099b6d04e668e10e52d29256e950532b4684333dda9a094c6fc7e8} +x{a7327cb5024ea8438403f2836ba21bc84460ec2f267d399e0e0fd07ff9344baf689744ecfcb90ca9dfd95b157ffdf29d} +x{a3740c34b3dc44df50ac1fe8916a592e8cc86fea02ae29ef53632671b69bd9ee3c6d8b9aed87d4b1bbcb9457486bbfaa} +x{8d2c4c61467fde9a45d1adbe02a8c7d2e925e8f6f126be1b91fae1d8578311740678ae9e280c79620d08fcd879159ccf} +x{903f21545ef331d5c312801b78b8675fbf093ce8d3e4684da155f80f2153bde840f60436ea506e1d07bf5cf8cbb566b2} +x{a2ab1ea627cf7b2b3e3f4a358719d5696e9917b76898beb0b0519962cc34cf222b200367ecff032052023b0d5326e5a4} +x{b79fb683f4aa467dd1859468efbf53214cc9301f38958daf8c6f313274cc70a532a167cf24d7d023eb66cfeacd6b553d} +x{b202b37b8f801d67896cb60227a72138918488a46034556c90d00cccdc46b86e4d77adf3991e222f4d383f0e0cfec46d} +x{a721aab3a83aa009cc22fde90c0a5f1fcb42712a062a68628ee402399a81c4c3bec1a58ab4d1a37a4d4befbc275848af} +x{8fb335baabc4d561e133b874c98bbeb8b1787bd7b44fafc9dbd02c85d98db6bc03f439d285c7fe17c2c751268e651255} +x{aabc892d3f6b3dbf04b8f1f38215bd58f23f117e6643c47ccff6803fde56f0c950a5885d7e2ce97fdaf01a1ef32ffd9d} +x{87a0549679757add0f06d239aa760274c57ccfbf30e722d8a6b33c76ff5576d354f7a54a53073cc3babce0b0465eef3a} +x{99e84647be315371ee2714fd2524370daedf5e64c343a31cf35d05f0737f73ca97ac1645d17780916c73317cfb7ecce3} +x{ae30f745530dbc0096e0dbdf8b7547499eab8f68c5ffefa05ebf6b735b3f94df7161c09360165459d939f562961a7af0} +x{b3ddcfb849a79096763ba2abe2c51b4b0666d548d2c19be8042da0c02956a5b13fd4166ef3002aaf63e16f18ca27e777} +x{b7cd98db331a01c52012560297ea9b6a208bf7734164c35777db809aa1e987b5c1ae20bf62e68a6f8160f6606db25bb7} +x{a72480094bb69733ed322482458f26732449ec5520b28c70543bfb0e291aa6b2c454b9a67321af82a5aa614f3110a8d8} +x{a52162089b34711d405613a42e715e1f06f410f9e1824d91c10db392db200fae8771480ea75b65e43752f5c38f9325cc} +x{93869a5603e08ed1431cc308a64a094c2bd24f28bf1e8ebdb667e4da4af58488aaae3cb078b0d1e3ea92e1cecd902f93} +x{a6e3a7e4aa049bad205ea2d84f10e1ff096796e82242cbb06b8657bee144d8daa2d5ae23713df4616221a016fd269578} +x{8ef617adab8dda4770b870d42d3f3ce503665cbb55ab603f38e9cec0cad1e2f7f322d60a42dd2416a21c783a280a0e4f} +x{83f5fe871d91c771d8ad09d26ee4617220721cb4f2324d8b24ef21bc9f5f059949a94d2cb15d3011b86178a4eb52e88d} +x{8d528528af05691c4f5085aa3747fde2ba2716e5a79e050765e83c8e52927f32033b994a45b5de5ae310e055dee1dafb} +x{a6ddede616eb02303bbc8569d569082872967c7bc0c97462ebd871cca264cba03f114780e1436674022f11da754ec23f} +x{aae1a58b985833f827df87146e157900943c16c89d15451f464e17c480b8949228f9ee9117768f92042dfca3bc2e2290} +x{b74e17e474fee881d4a2aa803cb0018e5eb94d0d751ec04f2f5235a85c46445c94f21f314fdd6f6b6b862c8387976faa} +x{91d1bc79e3abe5156a7fcef084136622198a8bc4fc5fcb4d384a3c3089bae93ed80349e0220f168ede6df2992674b4ec} +x{95c1d6d602a03b1fe2eb36308cb939f7093bb9065a1441dcfe6cbdb6fd0051f1a58906829334dc4675c96a9835b23ba8} +x{ae07d4db6f10df60bb09d3c187c75953bdd4e7a492b3be74f753074d330b52bfb2f3118ba2f2561d90850afec527306c} +x{af93966afc0ba0acd2b91a254222e672dcf204fae9bf405de574f8c1ead72577016ecc5d45ddd1a5c67fa1bcf0e6f765} +x{a51adfff1f07ec1b2ba7e7352d262f54bc553510e4b6066b683aafc2748958d4b7a2016902ea8482889975ed61d5c85a} +x{a20433f93219eb9976803b7bbae5247c641bcd11821d5eaa7ae3a088faeaf8356f05c9116f28c78ef11cde111f1c1be1} +x{b6e6a8bbcba88ce35a38be0d6bacfa32cda83937cd68d504afb087cf02ebb8882ecc1db14a5a903d1abc3db589963d12} +x{b8adc04ea1f6ab4bacebbe38e5674d3cdee56f097455b0e94e02ca08f667af82379f8798c5f026b8c5e361c9926a3c3b} +x{84be6bbd912f3eb274c9fd12a15dfaa0a908eaef9a849b2aed2a620af2f11ccbf880d419a89e8f67bb81efce710afca0} +x{ac4e4d3ec168e14985f73c7b30469473a6e0c89db0f6649435aaff4267fc1ad1989de930ae843521253909d1032fb6be} +x{a6cb5e28f19b8a235f9d3e2097528650fb629fab591f2a5d32793fe0ca0b26803a4a284aa132478272ce4c393938ddb4} +x{acef262359340b6fc7104d2ad0f67b420f66cb1f8b51956257942a2a5b515db3c5b03a09c09bec9284af2ca4a73507b4} +x{ac3f31a5c3ad602dceb6fe7a1a64e167b268bb8493ede809938e2213b3b1608e679918b37a069499f95596ee1735778c} +x{8b774778623dcc4d48a049d75c9d42ca7b4a66f79583377fa5ae59c2a3719a97911f55c1768ed655fbbbd16540ea6095} +x{a8ad6c5a569b856997ef600b1b1728e4ad9ab8606d90619e2fbc336d4562b9d38498f69556e651b3cba7d61a69e48eb5} +x{abd6f511bf89d9c18e7fa0cf6c8aa0f028c31ff78b5d980136e1c528d593d259f1d26ae4c79576a47af8996396b76094} +x{a4479f00869f56b0b389d79ab9e23ec2cae1460593f6847b3f2bf5415929db91a0b94aefdf093c99870b1f66c6a0ae64} +x{a03f2529e611683bfa7977b08f27c9f5b1eb962acdaaa8c72933ba22376cf461a6fde95e4102a25908ce056f14ddf525} +x{a1b6f7748d7c2f7e767773316c7f4d489bd5b793cb30fd750f2a33a02b6db34f64c7a4180a05ac6fef049392cf87e70e} +x{93528f173f2dafe0114d688d33c4eb6b33753fb53c54f50c3c7b5990d873593dd6faa65906f1df7c7eb1bc1f6ddc21f7} +x{ad8996fb3c231514562b9926628906edf4dc6fdc714d35a8dece3a235c3f49637534166d1ab0715fd7bfc22ec5d17e26} +x{b6e5ed2b40848c59db54850ca64971759de81d0601a56d552060f1a6d98305ee97667cefacead2c3dccbcc58b75b1c87} +x{83fb0b6260971d174b14377e999617ab4d2621982a3d26555c27520ff8439e2b3585d12a61f34e1bbaf93779b89c2907} +x{8b6cdaaf5946847b1e7b7c6d2d5fa8ea1e6c2fc9dd21641b936fbf1b32121fb3bbf65dcba0df83b822e370c9c35a9a5f} +x{872eed4104bddf37251a144cf766ba3bc01bd27904b320e42b6122831087a7da0c5a5cf8dc6c00a4c8631f7a91dd3fa4} +x{919532809f2e0c285fbb90a52dc9e3d5004eacdc71622bcf8144376c0a63b995a2531ca0d18a6e0ca4df50044626f00c} +x{8f1d94624744ba2b92ef07663324c7784081e22911de67b1dd1780942c9bde1dd9667914e749829d76e87a1e86170485} +x{94a257f057123beaab8baacf6d3fbbd932ab05c84540273f3ea69633fa9cefe0cebf778da45661d9dd2f617dce9fb960} +x{8a33dbe5e72280da6e8d781246af15e92ebcdaa0add650bc0c13535537efe9ca4d51a1a083c952427d77f70954a9430c} +x{8d78bcf42dec8ef23bd0fdc515115cef37a89d3d2f5ac0723374c4076a3718600b8505eae1faaf854728ca398dfb1649} +x{952601b96441c611dbccaa960cd3657de437e4ef6a0458e4078c4ca45c90a0c90eab2189c6512691bb615ede1a0d835d} +x{b5e65e21d0b97ee6fbf858e270bc51d3cf2a95e6364b94eba8d9b5a5817dd345aca03b631b9d30c3fa018c482184303d} +x{938af819a7f9662a49dd1353191b43f7c3ed87ccc2b4472dba0f73fd9117177891d6fdd754605a0a98fc9d93b3132d5c} +x{a83a552c4b56d70f98d95c68c022959b1f0688df8d13631ba960fc0052b7db74a58a5e56e7389b41c05e0bc7d2ac9ba9} +x{ab68cb8be7456a2086cd3695e1bda4135da91894d2f9b49560c39a9ae07f7d91ac2d453c4be9497a7b8631ba83aa9cc6} +x{a5e60edcf107dff7d57e51c250862b3eb8c106e40d452a95246f2be08d163a333d626c377d1945cbd514733b5421bfed} +x{a72f4482408250365ca1648b6c9a1a6e0adde5bfc1e47933bb93bb72b4418e7782a13abfa550287aaa9137d44ca1d17e} +x{a3e0045f65097ab4951747733730d233df35935a08b8934148846c4aa57559c0cbd74de20dad1ebfc6fee1b26b94b868} +x{a611d5c5c00db0c6c98c41c74f5f4a6be5523e39a2ec3b172e4b6f142100f5cd700d7eb21d432c4cf3b8dea3fb981cdc} +x{8ed47f35a890e5238ae1445fb519646c17a17187370c10c267723cb3c95613da9bc4c9d3fa5dcd0de052716b2f3773a9} +x{86b93b4cdc3b3186d8ffcf7c75472b41176fccf3845d83c5e0172bcf6d04443ec644f8916c39d07e6a3f3e947212fe7d} +x{8290d28317930e75ce905397d9b203afd6bdb8daac8f654317c7fde3b61f36e67e517ffb43db58cb09fc67f571270119} +x{b34fbdd89c0fe771088ce52e16e1a166cabd4643e8848560f376c56f8265e478998c5dc236fd693509bf1615bff5495d} +x{b7c3cf81dbec8f4b430a6ce91006b90b8e90d04f5c299161e2db4caadede926ca3a082224342d37120ef42254eabb3b3} +x{a072b63854a4c2c6d003d79fd959ff4e6d2fa22d90bd87de6a08b568714caa6b9ee1a43766fb813e01882a9a48086758} +x{b319caf57dd380fbdc537ae09f5f59f9d30f3607d9ef7410b2c2d8d88ff8e64e66154c363299c67a8526b5f07d507e2e} +x{878fb941a76dce335d77daba3bc41cd9d1b145c4df980e5be9868b37d3c60421e3509d46ed0ff3ea01e8f6b717996774} +x{8d2262fa7cfa4fb5c1b5cb6daeadabb220f10171e4c041de13ad9b5aba30599ba9e7f0bf2eb19a446a3a6b0fe6720fcd} +x{b249b90858c33e11fa84aa6f412986a886743f7a8a3b81d59c752baec291ad58d9d592aeeb26a00103b8bac4f882eac8} +x{b02aa595959b64b09da7de5ffedd316a98fa7e913d442e4bcdc08a584302ebef651c22a5c06dfb891504c53ceb15e5ec} +x{9077c6fa2e76347814dbb1c3e9291b4536a5d23441db87ebfcf453b2a07cecdd7a8aed655a71c28112c826ef146a5b85} +x{8368584e6e9fd52e8dd9bfdb58087e380b99e9e8cbc551dd40d6d6e4e5207d9384ed6295e03704c00a874ec280b6cf6f} +x{b34d3cc4d5cd507fbcbabd2c808c068ef41d3b8efaf7e5302ead08301b4f79324f028968dca7e0a56d628718ff164c83} +x{ab9ae1b9172c4d067445552f7da039141ef72ad4fdd82462182d7daad8f6fd3789d2d40c8174dda3fe196f8665c48f64} +x{b95ec7ef32d3b0ec97b28073cfc2eacdad7c4a063d5f31c791169bbff0ec4496822624b67264002b1a2eba048c4fbd38} +x{b2ed832b474cc84c4d9296bcef944a26a5eacbfbb411cf9834010d3e67127c36759a92f667b46078ffb9482fe5ba37bc} +x{95004b20bceeaf744a40289440c1145b4e8d4f7f40460b38cfe272d49b2abcf99880573ea0dd9defd4991a0620d9e528} +x{90a921f83766c423cfd9ef04cc3faf208dad5d52b77af9678842b8db2894c33d2d8962edfe2c6e8b477dd6a89223fb61} +x{986217666c2fe4711465a2da8daa7d6ee44e4cf32b63a09aba26204b371f296b086f31701e114a3233799b8d2052d7f8} +x{88a94b40813d23933c86e6ebbaf36531c7de89fbc345d7593a62c355aedb2ac504ed1a58aa735c2fabf82e73bba87679} +x{8441f6b6db07ceeb3cda0d8649b557e082fdfd610a9760a811d0302bc9da6c3107d8a22a0c752fa20ef82054017c20e1} +x{854ad0cfac2b94faac229ec7792123fc54377e0d285570ef1435aec0e72d072da978c00d453975415550ab52e8284501} +x{b0ad4b51e7c698f77828d3c034fd9b177a877510d7552025fd3cd1c68e405dba23a7a72d921c4798a6cc237887baf967} +x{a59e691f1ae2265788523bb6ac5cae309420caaa54d4feaffa6882c1542fdaba817f497c5a8e30bfeaea3bc3a6ba4b42} +x{841fdbbdfa848144fc7b29520199a00c3398ef3d78ac67491a9c0f933eee22059f9a0446fa599df627336b1fb84b0145} +x{89a8c1e13030ff719ca22c939f4c84b1bdcf0ed11b6d0ff0deb1c3bf9c62640f80c96362e4e88362f7f7d69de831f523} +x{88b306b8323a1ccd933782e31e94ec070117a02a8f8349b445da66b33d1dca77e23256644904416751136bed9adc0d45} +x{a77b375d16d85257c5f4b996f5514ffa8a5ca31454129d2a25b4bfcf4309f27c97a71e6c33ec7fb9cc57914b3b7baca9} +x{a8098c4186848d9d9ba4a4b1af79decdafacdfea7b5cbfd3536aee6ed67653c6129557836252b22421f61b66c84b2e9d} +x{912569e76a70ee20160774d2956b70965689d19c8d64941313fcb0d61f35b10648860f85be7a81e90ef6975730f2f636} +x{b144b4047dd0ece9b3619bc04e7c971aa608d9143608a49c46a293df2bf2c30facfe4d39675fe23f5b7fc274d07f1b17} +x{89489bc8c8ef1224ed29d5f82370c6c3fef80ea23809673414309a1f4b2941acb049a0648c34cf0740f682624a660c3b} +x{b72f1a424b0c3609531bb9f5299ee2120066dd5561e42a3beb526f8dd32e89cfc51937fcc668834414b7c16a1516510d} +x{8a462a5dfe9b78315fb9945fb6717a27849785d98744d3bf798697823e1f8e6acad5581ed337d4d9e212f9dd96d94ae7} +x{a4d046c2d04306fba6c56bf0c9f546ef1a0b5c5762484c5de70e42d1b6a30d39cc80b22f66933bf3534b1d26fb6cb7eb} +x{ad8903641d07eb96663b0a2fbac3115127b24945a138ea6617e14545cec689dfd162422818cc4050a23a8df42cb08ce9} +x{b50cb2de4074397cc88600126c50da4bb2acbb02ef90bb3b370e1828c39fd78c17902818556e1689e5a7bca50237aafb} +x{8f5fb00cd6e476bed5b5562e934383cfc2f1a2b799e9c1f3dc2e0b0ccacee4734a31ff2d9a986e7c0251778e41bb99df} +x{aae8828201155e602880a4a9137d3d44c01d32b2374e4223576e8fa4ec56411aded934c2f3121526fe2d834e37c713d4} +x{8a074eb84f1ae6d049947cd6dc6bbbbada2aa4209ffc167fad467b44ba3926f3b6ddacae7186c9e155e233226c7fd3e0} +x{a85635c3cb2397e961c821cad4a9945bbbbf53c20721f9f1dba9a8c616b2819625767884e22757c29507f0ed73304c43} +x{809ac8f6102f411e5ace89bafee2b73c8a2f5340d7677c0877eb9de7b7d522d77b79499bb27bcdec06a2434ade31d40a} +x{82134713d5873008449747fb04026b02790c89d9656f2d2b3c22fcdb4e9bf1b328e4051200afd86bf2c7ceda424dc447} +x{96a195a8bc8e61dd270c9e1e2b2ac60ffcce8156b11cb2ec45229fa3151a6f8c1a796a752312ecebd5c5bafa2ab4991e} +x{89192f77e8caa08c0a976650701206da423fd3e4adf4c11c0b12cf693966e2d32a06bec27de11ef76cb57b1abee47a12} +x{89e7e76e55b1b3bde410d10c8c32d0f10c63e1284d4636f5ba73a285abcc9def139c3e419ddce83ea07a9f825b441523} +x{97d8551ed66159c461b1679ae0ae0bdc34f306f4cad6cb39b77999f85ad976f2ee2218f777e4e1368133ab31604df540} +x{941b0de89934fde7ad4dd6ee46bb1ac0d1228649469969fa9e016a51fe63f3a687b536f53eb70e867e11b306b66954f9} +x{8ad57d3d490a57d2cbada20ec81812c429daf3ae6ed372276c1c527dce09737ef4ba3bec464c44165594c8e552b95f55} +x{a6cd2543e60f86f7c976df845ca30debc686413418d559162597bf34e44952243906f249939d06d878e1d942500a7c4d} +x{b2e066f07c6cfd5e045f94f39f1e040ca09cae4b1b8e9cae55a57ca85301787e772f51b15000fbbfca19b1d28341eeab} +x{88242a0a598559686228cca4b72b47d503276c6d3f9270d943e43f6652ac600d91a6245ae3ce365b20d8121ffcd2c7eb} +x{b47776fda2429344019841061308ae5cc3e39e55355b4fa2bab80a79be35250cf38127be2d3f93eca196ef8bfa3049f4} +x{929c6bc299a6b479b7a5ea1a2c73cf7575161f184fa1fa536fed71fce16cc0127df765c9c3d02d5df15442b50e4d7c81} +x{87fd7e06cbdc2e1ffc1a0cf328870fa73cc1df6d4562508efbdd0d71d97866d8890f085e02a8845c8be69840e73c0698} +x{855a53160cd2baff4f69b01af39a8e6486aef4c8fba5b23fa958f8c4ae9a4779e3a171c35ba28a23b63d5a746e0def27} +x{b4e1464b63413c94f636d648ec6e9dabd357c23d7a37c9fcc3bedbbde7a94249c6dec2192702ced872856c92cc829da2} +x{aaaaa6549f519e43b3935cc1d9edcac6a32209ec8f9e9eb8598e7ad1448a4504d204175eda00d2a8bbeb736171389f2a} +x{8a6205892d6986bcdc1c3f8deb7f7301cb9be41a131c7c046bd2515e3b36f3253fdfc8609c80478dcc51a7b66b279a45} +x{b20d4402ef47455ba7d8f4f9bcf9a7c0d402396e6aaa14d3b1a6f1f5d0ef6705ba9dca6538d0e9fdacde8a5e252c786c} +x{a30880c55a04b15d14381001ec06340bf8d60f6c952ec50dcdd8222bb393f88f635dc85d99384a597eebde0693424d47} +x{b729dce9e0bf10d615d74931773c3dd81ec38050f597f7d6005def587526d4c587d7767b30f4108d83342dfff313c74f} +x{a1cced77186993b4215c66ddcb187e397e10a8ee9666986c6ef2f41398bedfed12c087430d81f4a608da46d275b9bc04} +x{862144b431ab9de9c4ceaa784858a2c6788b3758866a228b8e2671433bc56ebe9918a08a3be11d05a7ff9fc64ca882e7} +x{b4205cbe870360c5452b2efe87efe9b4aacb4f7edbb88ff2e414931a8613d686608b583fa9bc053ce96bb9930d4a4e8d} +x{8063a97bae4b2025eef8522d73a5e3932140a1afff478765dc1279b2bb8133d4bfeb256861afb213f2ace1d885b514cb} +x{a4f78536213b3cfdf5ce14fc845cb0a06726f80726740319c812c938417ce6346ca2cc055e2735eeae9b8cd1aafdbe9e} +x{a82edc8ff174d91a5c195a778aa265f35a4b7adb596caeddb566d86b15b4ad446ebc4a7c34889d0f69e6b820ae5ee2d1} +x{85ff418bd6582cd00828c5cc5fabbe68927d8cff526f435bdac63071707dc2f6cf0d4f916f2e52f8a341ad8e3725cf67} +x{ace11bad2e6d2ad1cf84b01c3f194c23d5b8e96840e76444f42a063ef357a3f5376e3ddd3b2031c99400c2f82afdaedb} +x{88eb0d46e735ddbdccc6d3763db910420a2c864895f03f3537dfe49aff54784b181d2d02ff37165b29eea18b529d8f82} +x{b904f873c0cb532c4633dace5b389ecca9513ec84562ea714d52e1d359c97c567c0267c4c747f060e5f6e3e2fa0f2c13} +x{b63791ae81e8abf907f7a6a1091d72e37b655cf1830a6a0bc634049c6f9f4afb597c4389b9636c7fe5e8db52867b26fa} +x{b3294d1fc9c45bb0f080db57cb628faf8e2684876c853390a548ee78878697030c932b9e5b5f77ba54cdc4162b439400} +x{a38e9faa508b2feb73b4040a0d79acf3bf39bc5a62ef30bbe43c8073a98f12ff9e286ff1490c8c9aed3faac16957b7aa} +x{ada99e8309ed1d1fa2621693c8c9e5d618218dde92888a3aeaa0692754e7dd94a4268afbb75550c2dfeaf5764adfc0c9} +x{9232ab744f72c5ae7fc674890d07027dc5541eaaf8dc1edc8d8fb4d5c763053a53697d9e5100ad9afa1e9fc888cf1197} +x{8b87270d542706c9d0db167db7302c5e3fa81642f8bc707eae2bbbbf731b3948dad68cf0dd1c1d69f61a911d1f8e87bb} +x{a9664311d8ac973f6ce364f7033c0d710a98df5ac6d7c3d1df70f78a33701bc0a9a3b2da1113e1667b89aad41c7d1b4e} +x{a6d02f30da6b850da8377c718d2d8ca90d2f1d352edc0abc5c0af2435dd180be4d0e1cade63382c990b8ca930dccb1be} +x{824c864ee1af1691d009e4c7d1d201da8a691e93b62523e22aca2e4b8a5d9502b6ff941851f8f46a203589e093539bab} +x{9873aa35cbb7235aba6dfb17cf8e046b84824b4598acb8cf63a20d26cb242087db54aa6d44270e948fa6a4bb3b1a4aa5} +x{929f1a544585afaa2df9f393129bdf3a0ad4e981146e9c9fd2ed89b1ca61e865c88e7347b07121684229e778b10be160} +x{97952ed5cb54d0451e8cf08cfc29a423a33a1ad84f7e02b00cc5de88a27b23f77428e4c3a49a022617229952dd27ba6f} +x{a49a6e47098ce9ed5d432aeed22a981c05dccda0eaeb25ddb2452d2c5c39f53f781b0840a894cf70804ed300e90c95b0} +x{ac3d8d959683d6db8298d6437aa22378375c5b3a4fdb416925b71646e6f7b0087d0c6e65d4f9beb0ae72358e99c1f5fa} +x{aaeae464badaba7da40bc59ac873e1f07fceedbcac915f33a94daaa72688c3c49e5717300abe2571446b010416b2dcd5} +x{a2f6caa19c0a43d3d6a3d1af5e8bc33a0bb3a54b8f5f6d434bd9b3328cd3b6b148168e554a0af10f47d43943dfc6566b} +x{85b48b545c089325b055d2b34666d091a07411272aa6ea074b550f9c9bffe118b1f2f9d4cb903e9caa39fe0cf1ffcfac} +x{8db60a483dbadfd71f08f6460027f9dc608df180ccded4a2677e88aba24e72a80d55b783ce84aa787049dc1ca9a53512} +x{b0888ba78b37c36f1c61064284aae6021722ae38ae8f64e6da2c3e13daa9396eb5520b910433d0ee25f36162a5d69ad6} +x{8e6777565dd463b41aba4c7a63df9d1ae5b6b5b1d7d336f67e86fca8280bfc90c1d7e95ace60c34e6b3bf55d28bb5d2c} +x{99275fbc4baac72896a20267af060f21ee65293b7cf8b27d6495d559886ca71a9572f6699e58b63ff2433d760ef2e31f} +x{85b16af1b7c62f0beb9c801fd36731dde735c9ef6bcf97bd29dfddf2ec438cd5cb568d914c7701080a7434841ccb0f1e} +x{a87a5cf9d7c130418cceb93f2b26747d3f70d8a6eb8ff0cec28ab969bc92addb4fc5dbcf5d18dbe21e150ec78a755e07} +x{abcc8ccb7854b76b80a0e6e4d390df544ed8d09daff0818a71e8adc7f4b6f2267769017db965a404665032c46766040c} +x{b90e7b9ca3237916f211c02cc1575d8b8df43313f54feae4c78944bca535ee95e37b63729910f9fc4dabb907f3e73acf} +x{aa968ee64eedc74b51ef13248e6ad4ed8fb96eb5e499602889b971c17fdb126335f59f98952de0e5243a0b486e2d4e62} +x{ac49aeaf558fcf8086def396c8db61cb80ad416a94af50a1b583c5814bc7d54bcaa72feae09a2e162ecb1d342608db10} +x{87ef03700a561ad0299e32ae473c1d724a391e3523636e64c75d8676eb2856ce8189a9e0279922fdd7a9365c2a483e7f} +x{b949a74107e0c6b93cfbbad5dd0a47f64364e5c7ecc55cca0fad5f85c4bbbac48555144b7f676603a5292fc1712c1bc0} +x{869029064f1a86ed00ea442bbc5d330c7a0ae4a06b5595c9a5b57934f6876f3bb96d9dfaef1e926428d14e450624be57} +x{8379963a7f188739e953a4e9799ab37d5c49e4b8f49dc9bcb686371219a04dfb6c55c441c59b2ad89d7145ab3dc08631} +x{8460a57fed7db8691ed1cc69c66116e1544e164478613ade64eea6b3926c99011d2cf386e0d8bb1681ef9a5d556f3c88} +x{8c9cb7d59ef8fe907074382c959b661665dfe9fe4fa328fc93752cc2cf80d431b8799868eaec777013e67966b37ee0f3} +x{85e7cba0dc3614869ccccee0ccd782554ec3821a8d6056daf10285973bbf548f7c7120627d1f0edab7bb29cccd4fd35a} +x{a2ed49318a58eaf3d2211f3c3573a522605481278c5d5aa06ae610928845f030b3455f8cff3cbe3afe08e8bcb5839b31} +x{898c2de6094e5d40e725faa69caae6ae499f2ce0d13ae0fac39291869852d5f9711d447de374942fe7281030cf6a4cab} +x{b59b4d2f3da26779b0c3c33493fd23d78d956e688eec9df7260e622e2228b6cf30b111088e6f1aec6e690a4ed80f086c} +x{af9916b2d4c305532662819fdafb544f4d4f74a3bf5738cc31cbfc0018310f0848ff749be71d797fa287a7b5e2774e88} +x{a6eb7c89dbc44ea9c7439d0ff2a7b302a5182020743d0e54d84048ea668a012c0a808aab9c7809ed9920f75bc1df04e3} +x{8da5e1e8173da17fb2527d049c746f216013a0cd3034be30fab97314d67f90638efeb394a504052f84dd3314f5a6e1fa} +x{a0a9dfea9829381a8a8be0dd6ae9df703da93546d93e5a8e2a0895d0149894fc424c5735b32517305a575936e6d0bd41} +x{afc39ec1ce487612179154f7e36e485626cdcde18593fabcf3a4fe5743abe57d6de0938d1e5b1f45e3861cbe9cff2107} +x{8182fbea440a49e1f1deda5b1973eb1a6555d8bef74271ea56489508ae847db9f2a2e0064c8f25c6acad4893ea3556a7} +x{b3af977dad139de108294d0fab8dcc817abff1948f6ed746e7f6aae1ca15ff628c4d9ef871481b8a05f3e4eb060f1569} +x{b5b23529ae9ecdad0030248957d7135bb0f2212654f8b06b921f4f2e9f3374cf8314ed08a2020a2b81307db91bd31325} +x{a05aee8260d4e96ffdfc3764c6aeefee513255daf8abe5df1e455ad9dc1ff826d0e57eb59352d6f3ca805f854ced20f9} +x{b3d57b48afdd734921b826b6e165fc7ede42a6298d795cc3df87a659f2920e21f6dcac0fb1ec28e145e415cf1f75f15c} +x{b9f8e0bb3f230f87496e6ba4ac104106426c87e1e6732863c28f4ab8b6d752c00d3d935f5e33669045c38a61adc09b5f} +x{974e00079eec61f2c2dd74a02da965d367ac1f4cc1e128af147fcfd4c6940d2e0cc3babcbf5514b2beae2882e1ee3e14} +x{9539571783ff73f8b5172728c3c5af82a1f36562e06e4e79fa8aff690eb5e4e6cb53f0fdc2a1fc2161e638313d379b59} +x{af64b9701e9073ef4cf2b5345190791b0704dbd28b3f626042e1a0c4fa215fda937e996dfbaa07c65d9ca5f96b8f61fa} +x{a10eeb3b9cfc1761bf9a22bfdeac39fa830cf2c52e2b70b82d99c005467243948821eafec82310ff761171ca4a5eccc4} +x{86a5d807681cb61dead165e7b6dc51fbc4d87a3e1ba203d0850a88fa6abc8c443f6e59d0367375e04166319bbbd70653} +x{b68306c1ee04db2c41a5599e8c65b36f27e2ef2dbf74153f50f3ef5a8566a8522268b7131ed8f6244a8e9285b8cc1363} +x{b168681033750e64fab4b54121fbf6dc64bb214eb9bacc00d199745354517e3e1b110ad882264862a91990400eb0d832} +x{a5a41fa143084456fc9240f4a0b0959c6ab2e4c77a8d0fbacbaebaa7762d19cf25e2bc9bf642c3dc4bd52ef9a125d9b6} +x{aa1044716ac0ce361fe3d7cf79cda8ac7bfd5d75c4c9a6385e54c0f058dc37bba7a98066419340119ea957835e3f5062} +x{8316f76c23a66cac4d13966c641a8b1fddec4a8a1da95e418d3c29a318123dcf62680b3d7d7fe989200f087da31f2d47} +x{b3520e472e5206768de36f16c59537ba7a5f548f1e606ef341be57c61c69b36dd3e9b6fe7fe8a36269e9f6b3b6860612} +x{8e58d534f013ab17fe6602ee4a477187367ef4c48dbabedbf81433243dd5138aad25aa483a34cc96665f6fc2b0c43ce1} +x{a53b58680e5397ace528cc8b2fe5e9bb72c40eb450c3fc5ca787cb95b1da733b6ba759b2df4e9e2b774e0423b57aa0c3} +x{9124081b9f24d896cb79f75a667e58bd97e7150bf245f9f50d3556e1108c47c73bdd153e65d75641b324ca75ef2ac4b8} +x{a6f86b395f56ea59ddb0f2329aaf2fb7ad7779b83e9284f9303dee3b29dfb318196f836f8abddcb8368a8e7c2cdaa462} +x{993bf4eaf832dcbff2f8c1e8009f779189ad123bcb12ea9c46e0db23dc0772fb0cbb89796d9dff8cc3c96a35efe33b6e} +x{b3fc6d1fbf08661dd9912d9f6badde61cfd6ad5a8be87024d9b25724f51d0fdf746b1c7ef08fdccb7453563c32d3b753} +x{875284793bc53f9b3483e59ee05094e45c9aaf49d7a94d9d541e1426fd02a0271f6619c1d5dd2ef2ffbcb1429ac65ffd} +x{87b53aec91540ea4bc0d89fb7f863a095e4fe9644b433810e75316c0015663cd0087b5044bcd6483b6de46052439ec61} +x{926d4637eea543e4d3a97963c9644632bcbce065cabffe5af044c73f43294446dff6f502b0d43978121f8783e789b784} +x{83709d410068ec4da081a18cb1000401741e652d2db38fecfc33c2b124cfbc2497ad490fae22c460905066eea5a0295f} +x{805b9aef8db25a170b664495fe825c92c737c2c2d42c982a0a87161d3e7ded0a75603946fb68e2dc05525a2617c950da} +x{844f8360c42e3472b8e1f0515be2b17c57263569f40e931e96ec456338f89f75f41998eae7d78a32d97f532dedd93ef0} +x{8f8a897dcd7a5a3c7bd68c3e9d7a742c116273337c15c7518264dd403467a26647573837ddf08644165fe87dccc8a263} +x{8b83e1982cf15c9910075224a8009c3363f2c1c914f2d74dc88f2d1acdb17bac75a838a56d123f8a6746b611b1105b18} +x{b27d8d49ee63ecf6f4ced8bd515c4fa27478e8a70344ce098e9cd3e6dc4712f3d24e47f93d23242571444cc726511865} +x{a3252f0ad64cfcdfe330f8939f8c9ffa477ff17cd45929f7fa62ba25a9cb5af0f83a070d141f315cc6e82f4564ec4f64} +x{a6bb5240fd5ab570f4b5bf8836c34241933973f0fcb537a124dff7ec545c1c55d13cc6c23ba1b7452b9aabb2b66dcb37} +x{af83b1ffb771e0698f9b2a7ffef6df235b18e89aa90a5358abe82a2d9b077e08dc1ee11869a53b95519072adff5d26c2} +x{a990df005e123fc73bc97c79ecf34dc029265a66b530687192230689aa6a96d4fd8d71d5d6292566d195b968184cc3b9} +x{b6db2b4d155a26adc7667e84a98ee9e2f57ba6eaa1a0b1d966502890a060ef5acb1b9ac0e0cd488b0d70f356d4ab1575} +x{ad23f7a128230b69b92156de6d12f3d7adca4f17e4fa95ad1e4aba93afeeffa1aec73cfa543b2e9387823c95db18eecc} +x{b021626d7882e973d1dc142833d7b78b6ea7ce6d7c5abc4e5c4232d61d9b8d540a01d0c3726f253702335a80d4873e3d} +x{97d37b022828ccbf20450561fcba5febcbf2627e2e0e61f0259d9aae32b63efd795e83b247da7828ab3a52f40b055c8d} +x{972829ba8a181be19333088f332b80506d5519853ae22d50a1be9fde4eb181f1a00b3e695da8872381d8c663e53ea752} +x{a97af7a23e81bc3b56d245bdfe656ddfbb30b00dd05b358b29c442c6d440c84c46a87b9df9bc7706ad6eb004091783a6} +x{b062a29f4441bd839232e2dde99e329f7e6c043f7f315ee156852fd557987b04ee911ad8130cca4c49cc8e09ceec6e81} +x{a8239d71d680131c1d3857e13d53f11858d81a92217b37aeeb19b634a02441082d966f0b66e7d3f330402f8436ff8424} +x{a1ffe6c1a89d5368bdd0366d4f780288d7856fa6085e85945c382d40931d2748b2db1cd443f574847649376487bdfebc} +x{aeb35f89d305071d9aff9cce962a0320f84e206dbd927a5a9554d5b4e18e65734b1e7c81d02e245b120c1f7566d9fefd} +x{9935f67ac4d2ee6a4c513e46220d67d5bd6bce78e73fc3acd7e4b4ea895f7c99d44c3ca6400b07c925e7c43c97805301} +x{b606626eee2ca8f22eafcc063b961b78ad58e67295f9e81ebebd07834d5fb7b094476d4cf4ba977fdbcee58b8ff91ec2} +x{aa4f50a49daa01f4e2b92fd58f30029c0692fd529cb2db3aa3a6ea0f990df5020ba8c09992cced29d50e88e77b9eef1f} +x{90cb4f0932eafe48081aaeaed46c608fc0d5aaf7cac29a0f28e7a1826882983136f5e91f3d47b147b1f1d252a68cdfa4} +x{8610084a4b1884b49f1a4785c8a485cda8d0719510e0013b31810db813dfd115b31eb1c3e29ac17233e903e102f2f858} +x{84c5434f9c4554d0d5ac44dc84142ff00c3fd20ddcf207c1b899399d71fd2104d408fced0b58d3673bccc56123e7a62b} +x{a186868726ea2fe22049b1dfaa62abdb42ec46ae860d2f60546ece07db5402383b6bf3c7d26781c393a611512c250b38} +x{b2fb64b19612176bc0961538c8ef5d5d167c98f3d43747d95fe2f030449efb61a962fb0562bf4c42e7bca96cca4bcd17} +x{907261678b16023479eac3a3d921374a6a42ea163a09e7a975627b23043011711f7729efa8a39eaa8b97f9d19a336b4c} +x{872246987efe00f8f6a24bd2eeeb6b431204c01f3dcd4ece3b680f2bc164fb65f671551c9611d892a313ffae8ad35bfa} +x{8a35e8cf02a79ebeece284cd83d4499b10e8f3bc31f0bb058dab05fed30c7ec1d790a1dcf22685189853d3c8de81fdba} +x{8c4251af4d9e27118bd59aaaaf2fedbc6a8d5dde289f66345ac64bd566d094e961a6860238f669e2b4170a85022619f1} +x{9798f348d7bdabbbdfb6d2345083ff74ac58db16a6f3d68cd972d8c58380f3f455e589a91beb866d6ee379b8801ca20f} +x{932552f80b6a1a93dfddde98362f1f6f2b753f3fa05d6a21feeb47caa44548c8052143e3f71a21189e22bede3b700fbe} +x{82a0a28b240899e36db8f0ea641a01225c0e148dda443929f1f4dcc7020dc64a56532c0e0c754f458a78292e67b01098} +x{8d131e2eaf0f6ed5b293f22a8523d3c99f7456a5ad866100ad11141148e4825bd041d6870af2db4b6068841ec306181e} +x{a7281362b96c621f04e4f9dad0f09f2fd880171649efb46381ac5846a18376018cc43734971f977d18d1751cfb05c709} +x{a5d0207289aa93655aff791bdd430ea25ab93076d4295a256529411b4a55aa25ed8b3433086512dedd0255ded3ff9a63} +x{8703dcb528278c5c65b410dad0047bf2257f988bac6a11f1fe55e9d9794fc2515ced5f9863262d13daebc487ba4d4cc7} +x{b080c720c764ee177c35cbd1e29096e54feb2c29c68c7b5279916fc32177eae21bdf8328c7477e7a7feab59182f79c8d} +x{a98842b26ac4212e620a9a09018ce4573c02bb64a37c4e6ba91f972744e73b37a5c2d3f84c6cb59bc00ee25915e8a918} +x{aaaff1c584152dbec4fb2b50b91abd0703853a8051cbd3bc536e90aa3b65637ce77ab3dad4e9d6e8f3def0ffc920f9ea} +x{8069968e491d68b934b27e91a355249b2b1999cfa2534b7cafb7adb7a333af7920ec7b628cc5725630c39462b967cb7b} +x{b4da9f8378e711b30c3dbdaea9dd95e0d43420f7498f12181fb5bd3743392d5b5c0f12c1121bc2dd6f325a3d4c268bf4} +x{ad234661b80488143b93ee2efc1ab8eacc50a137aec333ea8141b426e5fd4070c968618d1a875947e08c8428e68c88e5} +x{823f71e9139e4982ce3b5dc7242a61876fbff25b3e9c1b532b82895e8624942f5e57af2c7819a80d716e06e04b921250} +x{b8f32a192438bf2dd454d0d9b831630c54b65a79a79611ab00386dfd99a80e58101df5455084d91a9a9939e108670214} +x{a5f68bd025fe3fb4921de2a081381870d41c85999f1754ff66d270a74794c7ad50d2fc01cf01ae1ef63247528e02aab4} +x{b7bb0c34c3e5da34302e937ca40a53c980de5f43fab50299f98b6d44fde2603355845030a29c1593cf342f85a8955450} +x{83077ae296c08c8aae4bcfc79b2828403433cb6ac48bb5c48eb85d4ce09f61d916947354e49183fe675c0d7f5905fc4f} +x{ade42daf027ed0939428a379dee1d6f52d4d69bd8854a5a5b166b8b1715a5f51b3d7281a0a2a4fa86524775c694deca3} +x{a327e8017149cbc021a583348c07edf1699b26bca4e07b6f79b1bc9dc030b77512f2968ceb47c8f72c81a55dbc293a58} +x{8dfec6255438a25f4076480b80786a58eb3e5d63d76e30f95e39e590a39d82c405b33bae71001ce647a1e3b3822aa2d3} +x{b744e6c66ac37ad90bbdaa8daef65b66a41d6f7c7662e86db742a7d0e52e8b3e6de185c99b53d1d75bd120763d260e1e} +x{9954e4646ef602352b8316de9b9186ebfada10718712d0d7ce646dec72a4840e288f6029aa0c2a0a4cd1749a3fc49760} +x{aeab8fcafa3f35b2b6585c7b573ab001cb1b1eca62839430010d69bd626bd522a1f64eba0a72d7e35e6081f8f24f9ecf} +x{a92ec41af6d290cd87c272d30a9c6afbde28daead0266987cbc24ebb3d68793b3e3030ef1c0fd6162e5d6067189e5b0f} +x{870da719fb854d4e97bce5f84994ca582a7973f85abd172682083bf974e07ab0217c56dbc8668d978510ea6d49ebf0e8} +x{971389abf73b0b18a85a9bf1a5b78ae54af0e9dab2810ff2a235b106ec2093f31c6144b6267e143b79ffcd4c79ee4902} +x{94f929a1834d477597f4d1047d09298676948e7136cd7554de2a5bb89d947c476fb3a9391adb0d804f0304bdefb2c074} +x{b250f0c4310487e162a6e8a8b2362a6fc643772838b4fd0b330502f913b04ea55c88212e83ec5a8103408511905807f1} +x{a3b0ac5a206ed5a9032ed5cd213751fcee66c7d629fe473f09457b9da9142c957ed39c0090c7eef24397669b0d361f72} +x{a151ed4066eafd3ea7eb646def1ffb5d14258a603045e37cf2c8cd7248700e7e1ac3e7f852e2fe7ad5691eccce99252c} +x{9711657a493af933761b8b848b5f09fc872d4ec85e3567c40bb48cb4f922627c0088d173d835b115811aa095dd8e5d82} +x{a5e7f4a06080b860d376871ce0798aa7677e7a4b117a5bd0909f15fee02f28a62388496982c133fef1eba087d8a06005} +x{a821c289f883e5a9bc76076a7cf6f6ee4dcac14d064c76d4a98756f6bfff85cc1fd45f5031b0c491d393869dbf37ab58} +x{b5716cb955ab67df3f9035325e00ddf29855f010fdff09c708726aa08196807ba946cfb70a710dea25ee8209af5cd38e} +x{b370f1a22a538bce3680d8094eed26372201563713ded3308c2fb4998a4b30f92f57616f2d859ef0806dd6da776fb12c} +x{b144c4ec1624abdb6b0b006091ef941f4f785751d114d6bc39269da9431da9991fa23e2b0f333efeb38770a25523e820} +x{919a189511a5d7590ecf34fbe5f36d1f92244db0c06aeaf6fb56569abf30ffb71cfc7c42913a6483a57a39a0ccc90b9b} +x{b9f830b001c45c07a83d1ef9dfab49a9c76fa9c13d62a0678e4336c6031bda6e07223b87a7302decf09e72364121ebeb} +x{af014b3be9c6b92fe8ca07cdcc900c86611e35e32a758ec468c1afc13ce640a7375482d51b8681903372f9c5ecca7687} +x{90293185a10067becf6f10dd5bbcdad97e189504d6a1df630a1028103613c80c15b29e0fb4109337b611c66e09ffb050} +x{b23acf81c4f787dd63e3f8c31ba9dde38b44a455a18b04f7325e09bbd439e5ee2a75b67d3673aea6d2476998bb2adb0c} +x{916efb4510ac05f36693e543384a54c875c5ce811f3bce476a294d00e4d64f27b5ab4d4c4ac7ca9a2c46a2c317326f72} +x{b76b06907a9876f8538e3f58758aa95d23d449dad3caab1e9708ebf51b09b9edc29d04d60ca3d6fda0e2823a4437b0d8} +x{83c0ccbf5f94afa5a7f5e7b3fcf7eb2afd2e656ff327f357f1a4b36f630fa2856ad1f07e51b38ee3a6e92d8075f85fbf} +x{9527d6a088468097aee5e3f0c7cd469aa666f096f054432d2a34df504217dcc5f70b45c7a4923b84b8cc9ca9f4a4b23a} +x{aea834fd07048eb22116cee9cdcc04c0ca900b5ae15e297091ce64c5631cae870ca13323241cad96c81d1ffdee43495e} +x{a9973ccb82ca88c7862fb684abd6814420b5f763416527a4020ed15adb1d5280b71d21e2ef280bfeb3f64104fd0410df} +x{a85b5024a160e7ed3467930b62c1346166e3bc35be18c9a891f19c5f343d2ee3c2702e987a4a1b7c9980dc4e099a7494} +x{a279c5583f81d1b1c1c7f6652bef822f0ccd3364de4dd56132a70fc4dbde3e006c17bbaeba9ca3dff6ea0e0d7dc0bede} +x{929713e325fbc3b9012896497213781dcd7edcf1122ac2e71bf0eeedd4b72090f9b61780f159f89066aeeb29d1b0bbb1} +x{8da3be746b47660268d2f6d74236047f5cc5291b68799ac8bf1bf34e1d035e4c203ecc415e71381a11b3b5884c0f263f} +x{98742a51f3d4581ae8f22b8c8e195d4e87017f502c54862d7b76039958d90bff3c02c07cde47d3e0d6877b4937648bef} +x{aada0601bff5813cec1b849893e2e6db5fff6a1beb605517c77e4dd2722aaa41510e528ccd072a76c10f12744d2ae172} +x{84ea9203ef391535d61ba30fa3a2104acbc59318c2da90d5e6f5df40ae8e234eeee714af1b4715200c471b00682ec3c1} +x{899047e4fb2a2824bf3c612a1040fb6c71c1f7ef0654177144d236455b198ddef003b64bb7c9d3f0da78c32800956e2a} +x{a10af4ddc28d1794167cef4b751022d8f57860a2618ce05a8b5d87c95584f1c6ee2774df7de60768ff81db4f432a3211} +x{93614feda46e422eefb30a724bb519c7c2ca3f743546806d4ba6ed59bf8862fcbc1f3fdae9f17c127255eb6968780b17} +x{a1f5e841c97a4ff52b2fdd00164fb77d6960cba1ddb3477d6b522a05521aac0796dee38c7a43e10d9c1681b38d8892ff} +x{92d976efe2f26ed00fe867c789407dbdeec51921e718b1a18461f795460d3bbe7cd74ea817d1bdea149423f0ad8393b2} +x{a2a3e37af6c9bed27e8f5d7dce5eeb9cfcadd2a942e7e9f84c9d95fed6b1dc7ad7d079f3f5bafe2d44dbbc67d99b0a5f} +x{81ffe874b2efce3625b5cd61e0d276d4f460597907a7f862a0a17a8bdd6778f7884e6a9d80e4c5cda224b2701655c96e} +x{8d2a05160ae509264ae64e056518a0f3ae2c197c2450d14d7f30a85db58bc7c562b5d450fef287d7355e63cbe558f44b} +x{aa3284d0d6e875fdca38b4009f57d7185dd3d8fe58aeda254de4e7df3932d446b80706f754c6d36ac230877a14da2160} +x{85a98b4ee6889d0fcec0fb23025e62a0bd6acc92df9cc2ab0cce430d7b096dc3de22f79a22ed727a5d15ab9257216469} +x{874bf95557e0094df23d3f1cd41155862b755482d3ef1a2707f341a1c66cf5f3a9edf52df5b167940eb1c1bfc565fc67} +x{a8324649bb016038ab07cd91879772df95a952973a19c34cae6af7e4fefbc545a94d12b23a2159e48bd049f57f5e93fb} +x{83b8c1dfeb31c8b61d8ffebf44d54a36af52f75aaa0531322020a6b04df9adb53d9a8099c521844f4e88d6e6aa36ab3c} +x{abbd6ff3a89fb9e14ad17978f088eb4b60af37b02835eb8d3fb7e7ef59342b68ca6ed1fce928446806015951caabcd6b} +x{8e9e5baad181d47ace0c6b5e9d639a2dac88cf667c0a90610267046563afe28b7be6ccd887940b5261579f7dbe6f920d} +x{b3f0b8cf0b5a7c6ebcf0c46c1be6d3c1d0a5a8ff5639188b3854206f2912f384e9f4d13fe1de35da1ec0ff4cc0917c56} +x{88132b949584e6d96043228bd589ca6438c594fdf91b6640f65932f379cc94a02e294e9d27be40e3d889b63d33c388cd} +x{b449cff96f2dfe5bfa879b713b081d48898aebbcae376c5cb32ab1f2bf3a8eb329f3aafcf6c251b55c3622b6a5036a10} +x{b705ff85c991b76587c7ddf9dfa144b25d985aa85b0b79e3c21d2229542388d9e66bfe8aadd511229e64c3c14e06bcc3} +x{a1f5ecdb881f30fab751b45c17326d04aeb3b67db946b37c3ec9ca8c5608d949437612e0d08e96c393d5b8110d9fb619} +x{b53734cdc0454bb8e02789f20b414e3461a73a347aeed2c331ec625f35cf07b44e676d568cdfb1fda7e3bb46fec2a179} +x{a496d69daf6ffeb228106883ddc885a7df0290527b4d9ff902b446df6b220842c0040f9be9fd08d8e2c17731d9d6355f} +x{89532cb6bdaf72d8e430e8baf25a94ea475328edf876659039e71b1804b407964ec043508a81fc23659ac5d225f81752} +x{aadb20736b040c633d4790e0d30748ae047e86efcb5008b586f1bf2dceb99ff4659711b2933f50096ff2af89d9bc187c} +x{b1d65445dad3417235c059d084f23fa5407c2de501f3501729bfe9952e7a03c2699f7115130bf3cd7f3878be3bae963e} +x{89cbb614041988d7f15e4a2cd7552b4c54afa224839dbe5076ddaf4ef8c30e661af4080f64245588fa4ff71314a1ddb2} +x{8dec221ff90b27567f53bea9638293624c5fc64572a32ad93651fa2172b37132195b3d4de8b89df6809d312ddec8e554} +x{89700f819dcd49c6c2c6586333773f3a67043bbc780c9ca4f05dd1a48035138c47560dac51c7e0e58cf238b910bb8001} +x{96abae0439028d53d35dd4c0ec26dc8a4ba1545726e25620f0a5ce3901ac7b185c9315ef46c0a29e10d8f0a0c7c0fac3} +x{9799c21074cd36b98d1e37f66dc05741c13f463b893ed5bce9fd2db604fe95c65f23d07015eb53e2ed9fcece39a2145a} +x{9119782077a9ae2564124374d877b0835e79d9de524c6cea6b1f3be2e1f33417040bf62bf064200c74c086d9dde10084} +x{8075657d35885a8a3bf5ba8087a5cd5b089f894da72ba7150302a0e6adcdac186eac45cb79385445e3785278711f2091} +x{8e2f9aa48d8a3693c73995113ef3d2bb8c2c37f8b528b2e8a9e52104940b1fe3bb6df234eeee099d445c59dab9eefdd4} +x{99107a6ba9b0717141c9c36c8a2f99a293e0909da65f20c44594b7bfa519de73c2c93e3ae651f94ee7e7787d16e39ccb} +x{8239a6c06392fa5854bdb4a3703b7a38a6ee44df66d498e0c3afc7381a61f335012835bef8a0b558630f1e1863a11731} +x{8fdf5c3d7bd9d5d46a0714ba236ebe0f9f8f04db756bcb30f49e87f758a28f7833aef65dfb1bac9963ec945c9ae69314} +x{911419794a5b85e78452a8e156eef297d5f10a0b5488b215e8f7d9a757f88eb7f2febcbc4f2b135181f9a0ec5c8943a7} +x{acfcbcea8262c87fa851c4d6601cbe9cca7a597425f9aa4f002b518153fe6e9a84da7185a67bfef2be7d07de638617ad} +x{b89acb00a4d16e56460ea0bab3f3f5754eb79220d60fa8ea6d5588f20d21a4d16f38107994b2e350d52d5565924c88c5} +x{b0bc0f14093c805453040cabb3a58530b5c7d75dd8ed2499c3c089ae6eaff8cb90fee7f4fb4a9a18ab43567eb06b8bdc} +x{ad3d2da3b07f0d9688fddc6e19ba30dfcebbd3a5af3a3f791e056d89650bf98d931ebabeda4338d8196e86856b3d109a} +x{b501ede6b849057031006a356607df1690206fbd337cd6ef1db764aa257ab09818af900587a751bbfa7d384c0d542c35} +x{abc8caaffa2225d3df4aa9020e517f57561efce8bf1628d1a75ad7e5c1efb4469ef56e2fb44427c740aba293e1896992} +x{a166cccc21273eca781e33dce0769633296101a1e43515a120f027d06e110e5eb7ff1f6a1a324b9c9315bd89e12819e3} +x{81c29db55f0957d889ea8db8e2a15c2d7020d50f1f9f60ccbe74d4a58a9aa5579955d4a73065614d556e443551f1ec51} +x{89024f719d34cc220acc52d4075eb1d69a7d3624d6eeca3c0e6ceea66975c94947f6001189b21f72980f883a9f73eb2d} +x{b53fddc5ad0059ee152c0d096efef63293999e54a66c867432de3dce6043f7811dc58111480e184a99e4c7f360a3de70} +x{a21b66e7db725312ef2929a65d18cf60ad3f595d8d3a76cbbe419430e4e6a83b489343edd714f774ef69b07771ed57cb} +x{b177aede11e8288c8d2c7e274cf1b5d9cd17f0b965455d42d014bc4645b93572467c96f47c8d6a0c98c12730f323170a} +497 +x{30cfebbd980ea1c8f157a34abed82f3a34ecc2594e626265063e565230ae9193} +x{91cdca080f9cd6ae0bd15b427455053e12025843c2f602e0af70fa0e5d18dceb0bc46aa1a7652b54cfd8ea97c7210c5808d7cc72b82be7a2feb57f69d3511e4590a665e45e0e0f9bb43b05d8a0167fe2a91f4aa54c0a095c864be6e2b1e43081} +-1 +test-fast-aggregate-verify \ No newline at end of file diff --git a/crypto/test/fift/bls_ops.fif b/crypto/test/fift/bls_ops.fif new file mode 100644 index 00000000..c7f76d76 --- /dev/null +++ b/crypto/test/fift/bls_ops.fif @@ -0,0 +1,215 @@ +"Asm.fif" include +"FiftExt.fif" include + +{ { drop } depth 1- times } : clear-stack + +// Map to g1 +."G1 Points:" cr +x{7abd13983c76661a98659da83066c71bd6581baf20c82c825b007bf8057a258dc53f7a6d44fb6fdecb63d9586e845d92} +<{ BLS_MAP_TO_G1 }>s 0 runvmx abort"Exitcode != 0" dup ."a1 = " csr. constant a1 +x{7a6990b38d5a7bfc47b38c5adeec60680637e8a5030dddd796e7befbec3585c54c378472daadd7756ce7a52adbea507c} +<{ BLS_MAP_TO_G1 }>s 0 runvmx abort"Exitcode != 0" dup ."a2 = " csr. constant a2 +x{4e51f1317a8d7981f7bb061488b6e6528978209226ded49b02fd45fcb9b5ff8d33c360cd6db9661143a77edb34aac125} +<{ BLS_MAP_TO_G1 }>s 0 runvmx abort"Exitcode != 0" dup ."a3 = " csr. constant a3 +x{0ca4a2a9a055367caa8c41facaae4c1f28360e2bfc70182904ff966011de9c02e6744bad6b0096e7ef3f21bd972386af} +<{ BLS_MAP_TO_G1 }>s 0 runvmx abort"Exitcode != 0" dup ."a4 = " csr. constant a4 +x{1473aa897a1a166ce6c1b1d11e2401ad719b9c03f3a86d8dd63158d389667d66917d3845414a23c69ccef01762ec78d4} +<{ BLS_MAP_TO_G1 }>s 0 runvmx abort"Exitcode != 0" dup ."a5 = " csr. constant a5 + +// Validate points +a1 a2 a3 a4 a5 +<{ { BLS_G1_INGROUP 33 THROWIFNOT } 5 times }>s 0 runvmx abort"Exitcode != 0" + +// Invalid point +x{1d549908b5eb3c16f91174abe436c1a91442a57f922da813cb3dbc55de9e62bd63eac19a664eb8c3ea34b5a5c176d844} +<{ BLS_G1_INGROUP }>s 0 runvmx abort"Exitcode != 0" abort"0 expected" + +// Zero +."Zero:" cr +a1 a2 a3 a4 a5 +<{ { BLS_G1_ISZERO 33 THROWIF } 5 times }>s 0 runvmx abort"Exitcode != 0" +<{ BLS_G1_ZERO }>s 0 runvmx abort"Exitcode != 0" dup csr. constant zero +zero <{ BLS_G1_INGROUP }>s 0 runvmx abort"Exitcode != 0" not abort"-1 expected" +zero <{ BLS_G1_ISZERO }>s 0 runvmx abort"Exitcode != 0" not abort"-1 expected" + +// Addition +."a1 + a2 + a3:" cr +a1 a2 a3 <{ { BLS_G1_ADD } 2 times }>s 0 runvmx abort"Exitcode != 0" csr. +a3 a2 a1 <{ { BLS_G1_ADD } 2 times }>s 0 runvmx abort"Exitcode != 0" csr. +a2 a3 a1 <{ { BLS_G1_ADD } 2 times }>s 0 runvmx abort"Exitcode != 0" csr. +a1 zero a2 a3 zero <{ { BLS_G1_ADD } 4 times }>s 0 runvmx abort"Exitcode != 0" csr. + +// Subtraction +."a1 - a2:" cr +a1 a2 <{ BLS_G1_SUB }>s 0 runvmx abort"Exitcode != 0" csr. +a1 zero a2 <{ BLS_G1_SUB BLS_G1_ADD }>s 0 runvmx abort"Exitcode != 0" csr. + +// Negation +."-a1:" cr +a1 <{ BLS_G1_NEG }>s 0 runvmx abort"Exitcode != 0" csr. +zero a1 <{ BLS_G1_SUB }>s 0 runvmx abort"Exitcode != 0" csr. +."0:" cr +a1 a1 <{ BLS_G1_NEG BLS_G1_ADD }>s 0 runvmx abort"Exitcode != 0" csr. +a1 a1 <{ BLS_G1_SUB }>s 0 runvmx abort"Exitcode != 0" csr. + +// Multiplication: +."a1 * 1:" cr +a1 csr. +a1 1 <{ BLS_G1_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +."a1 * 0:" cr +zero csr. +a1 0 <{ BLS_G1_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +."a1 * (-1):" cr +a1 -1 <{ BLS_G1_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +a1 <{ BLS_G1_NEG }>s 0 runvmx abort"Exitcode != 0" csr. +."a1 * 3:" cr +a1 3 <{ BLS_G1_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +a1 a1 a1 <{ { BLS_G1_ADD } 2 times }>s 0 runvmx abort"Exitcode != 0" csr. +."a1 * 123:" cr +a1 123 <{ BLS_G1_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +<{ a1 SLICE 100 INT BLS_G1_MUL a1 SLICE 23 INT BLS_G1_MUL BLS_G1_ADD }>s 0 runvmx abort"Exitcode != 0" csr. +a1 -123 <{ BLS_G1_MUL BLS_G1_NEG }>s 0 runvmx abort"Exitcode != 0" csr. + +// Multiexp +."a1*111 + a2*222 + a3*(-333) + a4*0 + a5*1:" cr +a1 111 a2 222 a3 -333 a4 0 a5 1 5 <{ BLS_G1_MULTIEXP }>s 0 runvmx abort"Exitcode != 0" csr. +a1 111 a2 222 a3 -333 a5 1 4 <{ BLS_G1_MULTIEXP }>s 0 runvmx abort"Exitcode != 0" csr. +<{ + a1 SLICE 111 INT BLS_G1_MUL + a2 SLICE 222 INT BLS_G1_MUL + a3 SLICE -333 INT BLS_G1_MUL + a5 SLICE + { BLS_G1_ADD } 3 times +}>s 0 runvmx abort"Exitcode != 0" csr. +."0:" cr +zero csr. +0 <{ BLS_G1_MULTIEXP }>s 0 runvmx abort"Exitcode != 0" csr. +a1 0 1 <{ BLS_G1_MULTIEXP }>s 0 runvmx abort"Exitcode != 0" csr. + +// Map to g2 +."G2 Points:" cr +x{cce34c6322b8f3b455617a975aff8b6eaedf04fbae74a8890db6bc3fab0475b94cd8fbde0e1182ce6993afd56ed6e71919cae59c891923b4014ed9e42d9f0e1a779d9a7edb64f5e2fd600012805fc773b5092af5d2f0c6c0946ee9ad8394bf19} +<{ BLS_MAP_TO_G2 }>s 0 runvmx abort"Exitcode != 0" dup ."b1 = " csr. constant b1 +x{2faa65f3431da8f04b8d029f7699b6426eb31feb06b3429b13b99fde35d5c0ab17e67943802313a96b2252a69dfdcc6e56f5671d905984940f4b9ce3b410042457dff7ae5fd4be6a0b73cad5d0390ed379d658cb24e11973d80f98bd7ff64f19} +<{ BLS_MAP_TO_G2 }>s 0 runvmx abort"Exitcode != 0" dup ."b2 = " csr. constant b2 +x{28619564e5cbb27c9e709d80b654f2eb1fd2c3ab435d7b97b4bd80638dbfe5b47e52df0e5be0b2c328357c5ddd8018acc6e739c4d132cc6f2b9797c210051acef9513ae54bb66de2a9ea8d02cbca7e96ce8193be1557d3128906e12f37913887} +<{ BLS_MAP_TO_G2 }>s 0 runvmx abort"Exitcode != 0" dup ."b3 = " csr. constant b3 +x{66f14fc1bb199ece07fde0a7af3cb3d2719acd4bb5186ab4ddda7de6a9f96557df44f3d14264eb0fed79f53d972ddc4517e362a001c5e7c7217169a05d9e3cd82b521236737f5d564f5860139d027018d3b33605d51e48c77b51554bf1d5b24a} +<{ BLS_MAP_TO_G2 }>s 0 runvmx abort"Exitcode != 0" dup ."b4 = " csr. constant b4 +x{a9e68db711778adb0bcee53ae4fd2d31605c1eff02ae38279eebfb45fc319964d33cb45ee32bbcb13663fe2131f79120af2d8ce26400ece9a7fb57ef9666c5b1b6f1856cb121b1c618b2dcfb359ffa63a08989c1f457b355958f589e7314610a} +<{ BLS_MAP_TO_G2 }>s 0 runvmx abort"Exitcode != 0" dup ."b5 = " csr. constant b5 + +// Validate points +b1 b2 b3 b4 b5 +<{ { BLS_G2_INGROUP 33 THROWIFNOT } 5 times }>s 0 runvmx abort"Exitcode != 0" + +// Invalid point +x{090069862cb1b1ac4241c4b1ed5f98edb95413db77f534bba7e85d9cb54d953c61416c0eeb5c65c6f0b494e9f59b2c9dfe8b4a9af75e1114b45ec60f6b5d2327cc05a6d9d6e76d7a9efd947302966d4f357bd48e5c3f950101c88c65b13bd5c7} +<{ BLS_G2_INGROUP }>s 0 runvmx abort"Exitcode != 0" abort"0 expected" + +// Zero +."Zero:" cr +b1 b2 b3 b4 b5 +<{ { BLS_G2_ISZERO 33 THROWIF } 5 times }>s 0 runvmx abort"Exitcode != 0" +<{ BLS_G2_ZERO }>s 0 runvmx abort"Exitcode != 0" dup csr. constant zero +zero <{ BLS_G2_INGROUP }>s 0 runvmx abort"Exitcode != 0" not abort"-1 expected" +zero <{ BLS_G2_ISZERO }>s 0 runvmx abort"Exitcode != 0" not abort"-1 expected" + +// Addition +."b1 + b2 + b3:" cr +b1 b2 b3 <{ { BLS_G2_ADD } 2 times }>s 0 runvmx abort"Exitcode != 0" csr. +b3 b2 b1 <{ { BLS_G2_ADD } 2 times }>s 0 runvmx abort"Exitcode != 0" csr. +b2 b3 b1 <{ { BLS_G2_ADD } 2 times }>s 0 runvmx abort"Exitcode != 0" csr. +b1 zero b2 b3 zero <{ { BLS_G2_ADD } 4 times }>s 0 runvmx abort"Exitcode != 0" csr. + +// Subtraction +."b1 - b2:" cr +b1 b2 <{ BLS_G2_SUB }>s 0 runvmx abort"Exitcode != 0" csr. +b1 zero b2 <{ BLS_G2_SUB BLS_G2_ADD }>s 0 runvmx abort"Exitcode != 0" csr. + +// Negation +."-b1:" cr +b1 <{ BLS_G2_NEG }>s 0 runvmx abort"Exitcode != 0" csr. +zero b1 <{ BLS_G2_SUB }>s 0 runvmx abort"Exitcode != 0" csr. +."0:" cr +b1 b1 <{ BLS_G2_NEG BLS_G2_ADD }>s 0 runvmx abort"Exitcode != 0" csr. +b1 b1 <{ BLS_G2_SUB }>s 0 runvmx abort"Exitcode != 0" csr. + +// Multiplication: +."b1 * 1:" cr +b1 csr. +b1 1 <{ BLS_G2_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +."b1 * 0:" cr +zero csr. +b1 0 <{ BLS_G2_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +."b1 * (-1):" cr +b1 -1 <{ BLS_G2_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +b1 <{ BLS_G2_NEG }>s 0 runvmx abort"Exitcode != 0" csr. +."b1 * 3:" cr +b1 3 <{ BLS_G2_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +b1 b1 b1 <{ { BLS_G2_ADD } 2 times }>s 0 runvmx abort"Exitcode != 0" csr. +."b1 * 123:" cr +b1 123 <{ BLS_G2_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +<{ b1 SLICE 100 INT BLS_G2_MUL b1 SLICE 23 INT BLS_G2_MUL BLS_G2_ADD }>s 0 runvmx abort"Exitcode != 0" csr. +b1 -123 <{ BLS_G2_MUL BLS_G2_NEG }>s 0 runvmx abort"Exitcode != 0" csr. + +// Multiexp +."b1*111 + b2*222 + b3*(-333) + b4*0 + b5*1:" cr +b1 111 b2 222 b3 -333 b4 0 b5 1 5 <{ BLS_G2_MULTIEXP }>s 0 runvmx abort"Exitcode != 0" csr. +b1 111 b2 222 b3 -333 b5 1 4 <{ BLS_G2_MULTIEXP }>s 0 runvmx abort"Exitcode != 0" csr. +<{ + b1 SLICE 111 INT BLS_G2_MUL + b2 SLICE 222 INT BLS_G2_MUL + b3 SLICE -333 INT BLS_G2_MUL + b5 SLICE + { BLS_G2_ADD } 3 times +}>s 0 runvmx abort"Exitcode != 0" csr. +."0:" cr +zero csr. +0 <{ BLS_G2_MULTIEXP }>s 0 runvmx abort"Exitcode != 0" csr. +b1 0 1 <{ BLS_G2_MULTIEXP }>s 0 runvmx abort"Exitcode != 0" csr. + +// r +<{ BLS_PUSHR }>s 0 runvmx abort"Exitcode != 0" cr ."r = " . cr +b1 <{ BLS_PUSHR BLS_G2_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +zero csr. +b1 <{ BLS_PUSHR INC BLS_G2_MUL }>s 0 runvmx abort"Exitcode != 0" csr. +b1 csr. + +// Pairings +{ [[ <{ BLS_G1_MUL }>s ]] 0 runvmx abort"Exitcode != -1" } : bls_g1_mul +{ [[ <{ BLS_G2_MUL }>s ]] 0 runvmx abort"Exitcode != -1" } : bls_g2_mul +75634785643785634785634876232423354534 constant x +."a1*x,b1 a1,b1*(-x) : " +a1 x bls_g1_mul b1 +a1 b1 x negate bls_g2_mul +2 <{ BLS_PAIRING }>s 0 runvmx abort"Exitcode != 0" .s not abort"-1 expected" +."a1*x,b1 a1,b1*(-x-1) : " +a1 x bls_g1_mul b1 +a1 b1 x negate 1 - bls_g2_mul +2 <{ BLS_PAIRING }>s 0 runvmx abort"Exitcode != 0" .s abort"0 expected" + +08036758068232723862526737758751120353935980577994643429668638941492109432519 constant x1 +76720311667788346189068792441910584335982488547394926476426087533015880449318 constant x2 +73698677644295053147826041647629389417255852559045739853199261775689421644183 constant x3 +00651749128863148819911470689106677724299434569675211711456038250594316760143 constant x4 +."a1*x1,b1 a2*x2,b2 a3*x3,b3 a4*x4,b4 a1,b1*(-x1) a2,b2*(-x2) a3,b3*(-x3) a4,b4*(-x4) : " +a1 x1 bls_g1_mul b1 +a2 x2 bls_g1_mul b2 +a3 x3 bls_g1_mul b3 +a4 x4 bls_g1_mul b4 +a1 b1 x1 negate bls_g2_mul +a2 b2 x2 negate bls_g2_mul +a3 b3 x3 negate bls_g2_mul +a4 b4 x4 negate bls_g2_mul +8 <{ BLS_PAIRING }>s 0 runvmx abort"Exitcode != 0" .s not abort"-1 expected" +."a1*x1,b1 a2*x2,b2 a3*x3,b3 a4*x4,b4 a1,b1*(-x1) a2,b2*(-x2) a3,b3*(-x4) a4,b4*(-x3) : " +a1 x1 bls_g1_mul b1 +a2 x2 bls_g1_mul b2 +a3 x3 bls_g1_mul b3 +a4 x4 bls_g1_mul b4 +a1 b1 x1 negate bls_g2_mul +a2 b2 x2 negate bls_g2_mul +a3 b3 x4 negate bls_g2_mul +a4 b4 x3 negate bls_g2_mul +8 <{ BLS_PAIRING }>s 0 runvmx abort"Exitcode != 0" .s abort"0 expected" diff --git a/crypto/test/fift/deep_stack_ops.fif b/crypto/test/fift/deep_stack_ops.fif new file mode 100644 index 00000000..460ecdd7 --- /dev/null +++ b/crypto/test/fift/deep_stack_ops.fif @@ -0,0 +1,27 @@ +"Asm.fif" include + +{ { drop } depth 1- times } : clear-stack + +0 { dup 1+ } 500 times +<{ 400 INT XCHGX 300 INT PICK 450 INT CHKDEPTH }>s 1000000 64 8 + runvmx .s clear-stack + +0 { dup 1+ } 500 times +<{ 400 INT ROLLX }>s 1000000 64 8 + runvmx .s clear-stack + +0 { dup 1+ } 500 times +<{ 400 INT -ROLLX }>s 1000000 64 8 + runvmx .s clear-stack + +0 { dup 1+ } 700 times +<{ 350 INT 300 INT BLKSWX }>s 1000000 64 8 + runvmx .s clear-stack + +0 { dup 1+ } 500 times +<{ 400 INT 5 INT REVX }>s 1000000 64 8 + runvmx .s clear-stack + +0 { dup 1+ } 500 times +<{ 400 INT DROPX }>s 1000000 64 8 + runvmx .s clear-stack + +0 { dup 1+ } 500 times +<{ 400 INT ONLYTOPX }>s 1000000 64 8 + runvmx .s clear-stack + +0 { dup 1+ } 500 times +<{ 400 INT ONLYX }>s 1000000 64 8 + runvmx .s clear-stack diff --git a/crypto/test/fift/hash_ext.fif b/crypto/test/fift/hash_ext.fif new file mode 100644 index 00000000..3f009410 --- /dev/null +++ b/crypto/test/fift/hash_ext.fif @@ -0,0 +1,98 @@ +"Asm.fif" include + +{ { drop } depth 1- times } : clear-stack + +// Compare HASHEXT_SHA256 with SHA256U +<{ + x{0123456789abcdef} PUSHSLICE SHA256U + + x{0123456789abcdef} PUSHSLICE 1 PUSHINT HASHEXT_SHA256 + + x{01} PUSHSLICE + x{2} PUSHSLICE + b{001101} PUSHSLICE NEWC STSLICE + b{0} PUSHSLICE + b{00101} PUSHSLICE NEWC STSLICE + x{6789a} PUSHSLICE + b{1} PUSHSLICE + b{0111100} PUSHSLICE + x{def} PUSHSLICE + 9 PUSHINT HASHEXT_SHA256 + + x{01} PUSHSLICE + x{2} PUSHSLICE + b{001101} PUSHSLICE NEWC STSLICE + b{0} PUSHSLICE + b{00101} PUSHSLICE NEWC STSLICE + x{6789a} PUSHSLICE + b{1} PUSHSLICE + b{0111100} PUSHSLICE + x{def} PUSHSLICE + 9 0 REVERSE + 9 PUSHINT HASHEXTR_SHA256 +}>s +0 runvmx abort"runvmx finished with exitcode != 0" +. cr . cr . cr . cr .s + +// HASHEXTA +<{ + NEWC x{ff} PUSHSLICE STSLICER x{01234567} PUSHSLICE SHA256U 256 STUR ENDC CTOS + NEWC x{ff} PUSHSLICE STSLICER x{0123} PUSHSLICE x{4567} PUSHSLICE 2 PUSHINT HASHEXTA_SHA256 ENDC CTOS + NEWC x{ff} PUSHSLICE STSLICER x{4567} PUSHSLICE x{0123} PUSHSLICE 2 PUSHINT HASHEXTAR_SHA256 ENDC CTOS +}>s +0 runvmx abort"runvmx finished with exitcode != 0" +csr. csr. csr. .s + +// Exceptions on errors +<{ x{001122334455667} PUSHSLICE 1 PUSHINT HASHEXT_SHA256 }>s 0 runvmx .s 9 <> abort"exitcode != 9" clear-stack +<{ x{00} PUSHSLICE x{11} PUSHSLICE 3 PUSHINT HASHEXT_SHA256 }>s 0 runvmx .s 5 <> abort"exitcode != 5" clear-stack +<{ x{00} PUSHSLICE 1 PUSHINT 2 PUSHINT HASHEXT_SHA256 }>s 0 runvmx .s 7 <> abort"exitcode != 7" clear-stack +<{ x{1234} PUSHSLICE 1 PUSHINT 100 HASHEXT }>s 0 runvmx .s 5 <> abort"exitcode != 5" clear-stack + +// Other hash functions + s 0 runvmx .s abort"runvmx finished with exitcode != 0" clear-stack +<{ + str PUSHSLICE 1 PUSHINT 0 HASHEXT + str PUSHSLICE 1 PUSHINT 1 HASHEXT + str PUSHSLICE 1 PUSHINT 2 HASHEXT + str PUSHSLICE 1 PUSHINT 3 HASHEXT + str PUSHSLICE 1 PUSHINT 4 HASHEXT +}>s 0 runvmx .s abort"runvmx finished with exitcode != 0" clear-stack +<{ + NEWC str PUSHSLICE 1 PUSHINT 4 HASHEXTA ENDC CTOS + NEWC str PUSHSLICE 1 PUSHINT 3 HASHEXTA ENDC CTOS + NEWC str PUSHSLICE 1 PUSHINT 2 HASHEXTA ENDC CTOS + NEWC str PUSHSLICE 1 PUSHINT 1 HASHEXTA ENDC CTOS + NEWC str PUSHSLICE 1 PUSHINT 0 HASHEXTA ENDC CTOS +}>s 0 runvmx abort"runvmx finished with exitcode != 0" +{ csr. } 5 times .s + +// Long string +0 { + =: hash-idx + 0 { + dup =: len + s ]] 0 runvmx abort"Exitcode != 0" + @' n . dup (x.) type cr + @' ans <> abort"Invalid result" +} : test-basepoint + + 0 0x0000000000000000000000000000000000000000000000000000000000000000 test-basepoint + 1 0xe2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76 test-basepoint + 2 0x6a493210f7499cd17fecb510ae0cea23a110e8d5b901f8acadd3095c73a3b919 test-basepoint + 3 0x94741f5d5d52755ece4f23f044ee27d5d1ea1e2bd196b462166b16152a9d0259 test-basepoint + 4 0xda80862773358b466ffadfe0b3293ab3d9fd53c5ea6c955358f568322daf6a57 test-basepoint + 5 0xe882b131016b52c1d3337080187cf768423efccbb517bb495ab812c4160ff44e test-basepoint + 6 0xf64746d3c92b13050ed8d80236a7f0007c3b3f962f5ba793d19a601ebb1df403 test-basepoint + 7 0x44f53520926ec81fbd5a387845beb7df85a96a24ece18738bdcfa6a7822a176d test-basepoint + 8 0x903293d8f2287ebe10e2374dc1a53e0bc887e592699f02d077d5263cdd55601c test-basepoint + 9 0x02622ace8f7303a31cafc63f8fc48fdc16e1c8c8d234b2f0d6685282a9076031 test-basepoint +10 0x20706fd788b2720a1ed2a5dad4952b01f413bcf0e7564de8cdc816689e2db95f test-basepoint +11 0xbce83f8ba5dd2fa572864c24ba1810f9522bc6004afe95877ac73241cafdab42 test-basepoint +12 0xe4549ee16b9aa03099ca208c67adafcafa4c3f3e4e5303de6026e3ca8ff84460 test-basepoint +13 0xaa52e000df2e16f55fb1032fc33bc42742dad6bd5a8fc0be0167436c5948501f test-basepoint +14 0x46376b80f409b29dc2b5f6f0c52591990896e5716f41477cd30085ab7f10301e test-basepoint +15 0xe0c418f7c8d9c4cdd7395b93ea124f3ad99021bb681dfc3302a9d99a2e53e64e test-basepoint + +cr ."Invalid points:" cr +{ + =: x + @' x (x.) type cr + @' x + [[ <{ RIST255_QVALIDATE }>s ]] 0 runvmx abort"Exitcode != 0" + abort"Invalid result" +} : test-invalid +// These are all bad because they're non-canonical field encodings. +0x00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff test-invalid +0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f test-invalid +0xf3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f test-invalid +0xedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f test-invalid +// These are all bad because they're negative field elements. +0x0100000000000000000000000000000000000000000000000000000000000000 test-invalid +0x01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f test-invalid +0xed57ffd8c914fb201471d1c3d245ce3c746fcbe63a3679d51b6a516ebebe0e20 test-invalid +0xc34c4e1826e5d403b78e246e88aa051c36ccf0aafebffe137d148a2bf9104562 test-invalid +0xc940e5a4404157cfb1628b108db051a8d439e1a421394ec4ebccb9ec92a8ac78 test-invalid +0x47cfc5497c53dc8e61c91d17fd626ffb1c49e2bca94eed052281b510b1117a24 test-invalid +0xf1c6165d33367351b0da8f6e4511010c68174a03b6581212c71c0e1d026c3c72 test-invalid +0x87260f7a2f12495118360f02c26a470f450dadf34a413d21042b43b9d93e1309 test-invalid +// These are all bad because they give a nonsquare x^2. +0x26948d35ca62e643e26a83177332e6b6afeb9d08e4268b650f1f5bbd8d81d371 test-invalid +0x4eac077a713c57b4f4397629a4145982c661f48044dd3f96427d40b147d9742f test-invalid +0xde6a7b00deadc788eb6b6c8d20c0ae96c2f2019078fa604fee5b87d6e989ad7b test-invalid +0xbcab477be20861e01e4a0e295284146a510150d9817763caf1a6f4b422d67042 test-invalid +0x2a292df7e32cababbd9de088d1d1abec9fc0440f637ed2fba145094dc14bea08 test-invalid +0xf4a9e534fc0d216c44b218fa0c42d99635a0127ee2e53c712f70609649fdff22 test-invalid +0x8268436f8c4126196cf64b3c7ddbda90746a378625f9813dd9b8457077256731 test-invalid +0x2810e5cbc2cc4d4eece54f61c6f69758e289aa7ab440b3cbeaa21995c2f4232b test-invalid +// These are all bad because they give a negative xy value. +0x3eb858e78f5a7254d8c9731174a94f76755fd3941c0ac93735c07ba14579630e test-invalid +0xa45fdc55c76448c049a1ab33f17023edfb2be3581e9c7aade8a6125215e04220 test-invalid +0xd483fe813c6ba647ebbfd3ec41adca1c6130c2beeee9d9bf065c8d151c5f396e test-invalid +0x8a2e1d30050198c65a54483123960ccc38aef6848e1ec8f5f780e8523769ba32 test-invalid +0x32888462f8b486c68ad7dd9610be5192bbeaf3b443951ac1a8118419d9fa097b test-invalid +0x227142501b9d4355ccba290404bde41575b037693cef1f438c47f8fbf35d1165 test-invalid +0x5c37cc491da847cfeb9281d407efc41e15144c876e0170b499a96a22ed31e01e test-invalid +0x445425117cb8c90edcbc7c1cc0e74f747f2c1efa5630a967c64f287792a48a4b test-invalid +// This is s = -1, which causes y = 0. +0xecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f test-invalid + +cr ."Hash to point:" cr +{ + =: text =: ans + @' text $>s + [[ <{ 1 INT HASHEXT_SHA512 2 UNTUPLE RIST255_FROMHASH }>s ]] 0 runvmx abort"Exitcode != 0" + @' ans <> abort"Invalid result" + @' ans (x.) type ." " @' text type cr +} : test-hash + +0x3066f82a1a747d45120d1740f14358531a8f04bbffe6a819f86dfe50f44a0a46 "Ristretto is traditionally a short shot of espresso coffee" test-hash +0xf26e5b6f7d362d2d2a94c5d0e7602cb4773c95a2e5c31a64f133189fa76ed61b "made with the normal amount of ground coffee but extracted with" test-hash +0x006ccd2a9e6867e6a2c5cea83d3302cc9de128dd2a9a57dd8ee7b9d7ffe02826 "about half the amount of water in the same amount of time" test-hash +0xf8f0c87cf237953c5890aec3998169005dae3eca1fbb04548c635953c817f92a "by using a finer grind." test-hash +0xae81e7dedf20a497e10c304a765c1767a42d6e06029758d2d7e8ef7cc4c41179 "This produces a concentrated shot of coffee per volume." test-hash +0xe2705652ff9f5e44d3e841bf1c251cf7dddb77d140870d1ab2ed64f1a9ce8628 "Just pulling a normal shot short will produce a weaker shot" test-hash +0x80bd07262511cdde4863f8a7434cef696750681cb9510eea557088f76d9e5065 "and is not a Ristretto as some believe." test-hash \ No newline at end of file diff --git a/crypto/test/fift/tvm_runvm.fif b/crypto/test/fift/tvm_runvm.fif new file mode 100644 index 00000000..1037156b --- /dev/null +++ b/crypto/test/fift/tvm_runvm.fif @@ -0,0 +1,228 @@ +"Asm.fif" include + +// Just run +111 10 20 2 +<{ + ADD // Ensure that stack was passed to runvmx + DEPTH // Ensure that only 2 stack entries were passed + c4 PUSH CTOS SBITREFS // Ensure that c4 is empty + c5 PUSH CTOS SBITREFS // Ensure that c5 is empty + c7 PUSH // Ensure that c7 is empty + PUSHREF c4 POP // Ensure that it does not affect c4, c5, c7 in parent vm + PUSHREF c5 POP + NIL 100 PUSHINT TPUSH 200 PUSHINT TPUSH c7 POP + 123 PUSHINT +}>s +<{ + PUSHREF c4 POP + PUSHREF c5 POP + NIL 5 PUSHINT TPUSH 6 PUSHINT TPUSH c7 POP + 0 RUNVM + c4 PUSH CTOS c5 PUSH CTOS c7 PUSH // Ensure that c4, c5, c7 are unchanged +}>s 1000000 8 runvmx // Show gas usage +.s { drop } depth 1- times // 111 30 1 0 0 0 0 [] 123 0 x{1234} x{5678} [ 5 6 ] 0 1197 + +// Exception +111 10 20 2 +<{ 22 PUSHINT 55 PUSHINT 66 THROWARG }>s +<{ 0 RUNVM }>s 0 runvmx +.s { drop } depth 1- times // 111 55 66 0 + +// Mode +1 - set c3 to code +PROGRAM{ + 22 DECLMETHOD foo + DECLPROC main + foo PROC:<{ + MUL + }> + main PROC:<{ + DUP + foo CALLDICT + INC + }> +}END>s constant prog +<{ + 10 PUSHINT 0 PUSHINT 2 PUSHINT prog PUSHSLICE 1 RUNVM + 10 PUSHINT 0 PUSHINT 2 PUSHINT prog PUSHSLICE 0 RUNVM +}>s 0 runvmx +.s { drop } depth 1- times // 101 0 10 10 22 11 0 + +// Mode +2 - push 0 +<{ 10 PUSHINT 1 PUSHINT prog PUSHSLICE 3 RUNVM }>s 0 runvmx +.s { drop } depth 1- times // 101 0 0 + +// Mode +4 - load and return c4 +0 +<{ + c4 PUSHCTR CTOS // Ensure that this is x{5678} + PUSHREF c4 POPCTR // This should be returned from RUNVM + 1000 PUSHINT +}>s + +<{ + PUSHREF c4 POP // Ensure that this does not change + 4 RUNVM + CTOS + c4 PUSH CTOS // x{1234} +}>s 0 runvmx +.s { drop } depth 1- times // x{5678} 1000 0 x{abcd} x{1234} 0 + +// Mode +16 - load c7 +0 +<{ + c7 PUSH // Ensure that this is [ 10 15 20 ] + NIL 111 PUSHINT TPUSH 222 PUSHINT TPUSH 3333 PUSHINT TPUSH c7 POP + 1000 PUSHINT +}>s +10 15 20 3 tuple +<{ + NIL 1 PUSHINT TPUSH 2 PUSHINT TPUSH 3 PUSHINT TPUSH c7 POP // Ensure that this does not change + 16 RUNVM + c7 PUSH // [ 1 2 3 ] +}>s 0 runvmx +.s { drop } depth 1- times // [ 10 15 20 ] 1000 0 [ 1 2 3 ] 0 + +// Mode +32 - return c5 +0 +<{ + c5 PUSH CTOS SBITREFS // Ensure that this is empty + PUSHREF c5 POP // Ensure that this is returned from RUNVM + 1000 PUSHINT +}>s +<{ + PUSHREF c5 POP // Ensure that this does not change + 32 RUNVM + CTOS + c5 PUSH CTOS // x{1234} +}>s 0 runvmx +.s { drop } depth 1- times // 0 0 1000 0 x{5678} x{1234} 0 + +// c4, c5 with exception +0 +<{ + PUSHREF c4 POP + PUSHREF c5 POP + 55 THROW +}>s + // c4 for RUNVM +<{ + PUSHREF c4 POP // Ensure that this does not change + PUSHREF c5 POP // Ensure that this does not change + 32 4 + RUNVM + c4 PUSH CTOS // x{1234aaaa} + c5 PUSH CTOS // x{1234bbbb} +}>s 0 runvmx +.s { drop } depth 1- times // 0 55 null null x{1234aaaa} x{1234bbbb} 0 + +// c4, c5 with exception and commit +0 +<{ + PUSHREF c4 POP + PUSHREF c5 POP + COMMIT + PUSHREF c4 POP + PUSHREF c5 POP + 55 THROW +}>s + // c4 for RUNVM +<{ + PUSHREF c4 POP // Ensure that this does not change + PUSHREF c5 POP // Ensure that this does not change + 32 4 + RUNVM + CTOS SWAP CTOS SWAP + c4 PUSH CTOS // x{1234aaaa} + c5 PUSH CTOS // x{1234bbbb} +}>s 0 runvmx +.s { drop } depth 1- times // 0 55 x{abcdaaaa} x{abcdbbbb} x{1234aaaa} x{1234bbbb} 0 + +// Mode +8 - gas limit +0 +<{ AGAIN:<{ NOP }> }>s +200 +<{ 8 RUNVM 1234 PUSHINT }>s 0 runvmx +.s { drop } depth 1- times // 215 -14 215 1234 0 + +// Gas limit of parent vm is too low +0 +<{ AGAIN:<{ NOP }> }>s +1000000 +<{ 8 RUNVM 1234 PUSHINT }>s 300 8 runvmx +.s { drop } depth 1- times // 301 -14 301 + +// Mode +64 - hard gas limit +0 <{ AGAIN:<{ NOP }> }>s 200 500 +<{ 8 64 + RUNVM 1234 PUSHINT }>s 0 runvmx +.s { drop } depth 1- times // 215 -14 215 1234 0 +0 <{ ACCEPT AGAIN:<{ NOP }> }>s 200 500 +<{ 8 64 + RUNVM 1234 PUSHINT }>s 0 runvmx +.s { drop } depth 1- times // 517 -14 517 1234 0 + +// 10000 nested VMs (recursively calculating 1+...+10000) +<{ + DUP + 0 EQINT + IFJMP:<{ + DROP DROP + 0 PUSHINT + }> + OVER OVER DEC + 2 PUSHINT + s2 PUSH + 0 RUNVM + 11 THROWIF + ADD + NIP +}>s constant code1 +<{ code1 PUSHSLICE 10000 PUSHINT 2 PUSHINT code1 PUSHSLICE 0 RUNVM }>s 10000000 8 runvmx // Show gas +.s { drop } depth 1- times // 50005000 0 0 2710286 + +// Same thing, but out of gas +<{ code1 PUSHSLICE 10000 PUSHINT 2 PUSHINT code1 PUSHSLICE 0 RUNVM }>s 100000 8 runvmx // Show gas +.s { drop } depth 1- times // 100001 -14 100001 + +// RUNVMX +0 +<{ AGAIN:<{ NOP }> }>s +200 +<{ 8 PUSHINT RUNVMX 1234 PUSHINT }>s 0 runvmx +.s { drop } depth 1- times // 215 -14 215 1234 0 + +// +128 - separate loaded_cells + +<{ DUP CTOS DROP 2 INT <{ CTOS DROP CTOS DROP }>s SLICE 10000 INT 8 RUNVM }>s 1000000 8 runvmx +.s { drop } depth 1- times // 0 202 0 509 + +<{ DUP CTOS DROP 2 INT <{ CTOS DROP CTOS DROP }>s SLICE 10000 INT 8 128 + RUNVM }>s 1000000 8 runvmx +.s { drop } depth 1- times // 0 277 0 584 + +// +256 - fixed number of return values +11 22 33 3 +<{ 1 INT 2 INT 3 INT 4 INT 5 INT }>s +3 +<{ 256 RUNVM }>s 0 runvmx +.s { drop } depth 1- times // 3 4 5 0 0 + +11 22 33 3 +<{ 1 INT 2 INT 3 INT 4 INT 5 INT }>s +0 +<{ 256 RUNVM }>s 0 runvmx +.s { drop } depth 1- times // 0 0 + +11 22 33 3 +<{ 1 INT 2 INT 3 INT 4 INT 5 INT 77 THROW }>s +3 +<{ 256 RUNVM }>s 0 runvmx +.s { drop } depth 1- times // 0 77 0 + +11 22 33 3 +<{ 1 INT 2 INT 3 INT 4 INT 5 INT }>s +20 +<{ 256 RUNVM }>s 0 runvmx +.s { drop } depth 1- times // 0 -3 0 + +// GASCONSUMED +<{ 10 INT 20 INT ADD DROP GASCONSUMED }>s 0 runvmx +.s { drop } depth 1- times // 106 0 +0 <{ 10 INT 20 INT ADD DROP GASCONSUMED }>s +<{ 100 INT 200 INT 300 INT MUL DIV DROP 0 RUNVM GASCONSUMED }>s 0 runvmx +.s { drop } depth 1- times // 106 0 367 0 diff --git a/crypto/vm/Hasher.cpp b/crypto/vm/Hasher.cpp new file mode 100644 index 00000000..f70988d3 --- /dev/null +++ b/crypto/vm/Hasher.cpp @@ -0,0 +1,148 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#include "vm/Hasher.h" +#include "vm/excno.hpp" +#include "vm/vm.h" +#include +#include +#include "keccak/keccak.h" + +namespace vm { + +using td::Ref; + +class HasherImplEVP : public Hasher::HasherImpl { + public: + explicit HasherImplEVP(EVP_MD_CTX* ctx) : ctx_(ctx) { + } + + ~HasherImplEVP() override { + EVP_MD_CTX_free(ctx_); + } + + void append(const unsigned char *data, size_t size) override { + CHECK(EVP_DigestUpdate(ctx_, data, size)); + } + + td::BufferSlice finish() override { + td::BufferSlice hash(EVP_MD_CTX_size(ctx_)); + unsigned size; + CHECK(EVP_DigestFinal_ex(ctx_, (unsigned char *)hash.data(), &size) || size != hash.size()); + return hash; + } + + std::unique_ptr make_copy() const override { + EVP_MD_CTX *new_ctx = nullptr; + new_ctx = EVP_MD_CTX_new(); + CHECK(new_ctx != nullptr); + CHECK(EVP_MD_CTX_copy_ex(new_ctx, ctx_)); + return std::make_unique(new_ctx); + } + + private: + EVP_MD_CTX *ctx_; +}; + +class HasherImplKeccak : public Hasher::HasherImpl { + public: + explicit HasherImplKeccak(size_t hash_size) : hash_size_(hash_size) { + CHECK(keccak_init(&state_, hash_size * 2, 24) == 0); + CHECK(state_ != nullptr); + } + + ~HasherImplKeccak() override { + CHECK(keccak_destroy(state_) == 0); + } + + void append(const unsigned char *data, size_t size) override { + CHECK(keccak_absorb(state_, data, size) == 0); + } + + td::BufferSlice finish() override { + td::BufferSlice hash(hash_size_); + CHECK(keccak_digest(state_, (unsigned char*)hash.data(), hash_size_, 1) == 0); + return hash; + } + + std::unique_ptr make_copy() const override { + auto copy = std::make_unique(hash_size_); + CHECK(keccak_copy(state_, copy->state_) == 0); + return copy; + } + + private: + size_t hash_size_; + keccak_state *state_ = nullptr; +}; + +Hasher::Hasher(int hash_id) : id_(hash_id) { + if (hash_id == KECCAK256 || hash_id == KECCAK512) { + impl_ = std::make_unique(hash_id == KECCAK256 ? 32 : 64); + return; + } + + EVP_MD_CTX *ctx = EVP_MD_CTX_new(); + CHECK(ctx != nullptr); + const EVP_MD *evp; + switch (hash_id) { + case SHA256: evp = EVP_sha256(); break; + case SHA512: evp = EVP_sha512(); break; + case BLAKE2B: evp = EVP_blake2b512(); break; + default: + throw VmError{Excno::range_chk, "invalid hash id"}; + } + CHECK(evp != nullptr && EVP_DigestInit_ex(ctx, evp, nullptr)); + impl_ = std::make_unique(ctx); +} + +void Hasher::append(td::ConstBitPtr data, unsigned size) { + if (!impl_) { + throw VmError{Excno::unknown, "can't use finished hasher"}; + } + while (size > 0) { + unsigned cur_size = std::min(size, BUF_SIZE * 8 - buf_ptr_); + td::BitPtr{buf_, (int)buf_ptr_}.copy_from(data, cur_size); + buf_ptr_ += cur_size; + if (buf_ptr_ == BUF_SIZE * 8) { + impl_->append(buf_, BUF_SIZE); + buf_ptr_ = 0; + } + size -= cur_size; + data += cur_size; + } +} + +td::BufferSlice Hasher::finish() { + if (!impl_) { + throw VmError{Excno::unknown, "can't use finished hasher"}; + } + if (buf_ptr_ % 8 != 0) { + throw VmError{Excno::cell_und, "data does not consist of an integer number of bytes"}; + } + impl_->append(buf_, buf_ptr_ / 8); + td::BufferSlice hash = impl_->finish(); + impl_ = nullptr; + return hash; +} + +static const size_t BYTES_PER_GAS_UNIT[5] = {33, 16, 19, 11, 6}; + +size_t Hasher::bytes_per_gas_unit() const { + return BYTES_PER_GAS_UNIT[id_]; +} + +} diff --git a/crypto/vm/Hasher.h b/crypto/vm/Hasher.h new file mode 100644 index 00000000..7e441690 --- /dev/null +++ b/crypto/vm/Hasher.h @@ -0,0 +1,58 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once +#include "common/refcnt.hpp" +#include "td/utils/buffer.h" +#include "common/bitstring.h" +#include "vm/cells/Cell.h" +#include + +namespace vm { + +using td::Ref; + +class Hasher { + public: + explicit Hasher(int id); + Hasher(const Hasher&) = delete; + void append(td::ConstBitPtr data, unsigned size); + td::BufferSlice finish(); + size_t bytes_per_gas_unit() const; + + static const int SHA256 = 0; + static const int SHA512 = 1; + static const int BLAKE2B = 2; + static const int KECCAK256 = 3; + static const int KECCAK512 = 4; + + class HasherImpl { + public: + virtual ~HasherImpl() = default; + virtual void append(const unsigned char* data, size_t size) = 0; + virtual td::BufferSlice finish() = 0; + virtual std::unique_ptr make_copy() const = 0; + }; + + private: + int id_ = 0; + static const unsigned BUF_SIZE = 256; + unsigned char buf_[BUF_SIZE]; + unsigned buf_ptr_ = 0; + std::unique_ptr impl_; +}; + +} \ No newline at end of file diff --git a/crypto/vm/arithops.cpp b/crypto/vm/arithops.cpp index 24bb8a48..7da53567 100644 --- a/crypto/vm/arithops.cpp +++ b/crypto/vm/arithops.cpp @@ -265,26 +265,42 @@ void register_add_mul_ops(OpcodeTable& cp0) { int exec_divmod(VmState* st, unsigned args, int quiet) { int round_mode = (int)(args & 3) - 1; - if (!(args & 12) || round_mode == 2) { + unsigned d = (args >> 2) & 3; + bool add = false; + if (d == 0 && st->get_global_version() >= 4) { + d = 3; + add = true; + } + if (d == 0 || round_mode == 2) { throw VmError{Excno::inv_opcode}; } Stack& stack = st->get_stack(); VM_LOG(st) << "execute DIV/MOD " << (args & 15); - stack.check_underflow(2); + stack.check_underflow(add ? 3 : 2); auto y = stack.pop_int(); + auto w = add ? stack.pop_int() : td::RefInt256{}; auto x = stack.pop_int(); - switch ((args >> 2) & 3) { - case 1: - stack.push_int_quiet(td::div(std::move(x), std::move(y), round_mode), quiet); - break; - case 2: - stack.push_int_quiet(td::mod(std::move(x), std::move(y), round_mode), quiet); - break; - case 3: { - auto dm = td::divmod(std::move(x), std::move(y), round_mode); - stack.push_int_quiet(std::move(dm.first), quiet); - stack.push_int_quiet(std::move(dm.second), quiet); - break; + if (add) { + CHECK(d == 3); + typename td::BigInt256::DoubleInt tmp{*x}, quot; + tmp += *w; + tmp.mod_div(*y, quot, round_mode); + stack.push_int_quiet(td::make_refint(quot), quiet); + stack.push_int_quiet(td::make_refint(tmp), quiet); + } else { + switch (d) { + case 1: + stack.push_int_quiet(td::div(std::move(x), std::move(y), round_mode), quiet); + break; + case 2: + stack.push_int_quiet(td::mod(std::move(x), std::move(y), round_mode), quiet); + break; + case 3: { + auto dm = td::divmod(std::move(x), std::move(y), round_mode); + stack.push_int_quiet(std::move(dm.first), quiet); + stack.push_int_quiet(std::move(dm.second), quiet); + break; + } } } return 0; @@ -292,11 +308,20 @@ int exec_divmod(VmState* st, unsigned args, int quiet) { std::string dump_divmod(CellSlice&, unsigned args, bool quiet) { int round_mode = (int)(args & 3); - if (!(args & 12) || round_mode == 3) { + unsigned d = (args >> 2) & 3; + bool add = false; + if (d == 0) { + d = 3; + add = true; + } + if (round_mode == 3) { return ""; } - std::string s = (args & 4) ? "DIV" : ""; - if (args & 8) { + std::string s = add ? "ADD" : ""; + if (d & 1) { + s += "DIV"; + } + if (d & 2) { s += "MOD"; } if (quiet) { @@ -312,32 +337,50 @@ int exec_shrmod(VmState* st, unsigned args, int mode) { args >>= 8; } int round_mode = (int)(args & 3) - 1; - if (!(args & 12) || round_mode == 2) { + unsigned d = (args >> 2) & 3; + bool add = false; + if (d == 0 && st->get_global_version() >= 4) { + d = 3; + add = true; + } + if (d == 0 || round_mode == 2) { throw VmError{Excno::inv_opcode}; } Stack& stack = st->get_stack(); VM_LOG(st) << "execute SHR/MOD " << (args & 15) << ',' << y; if (!(mode & 2)) { - stack.check_underflow(2); + stack.check_underflow(add ? 3 : 2); y = stack.pop_smallint_range(256); } else { - stack.check_underflow(1); + stack.check_underflow(add ? 2 : 1); } if (!y) { round_mode = -1; } + auto w = add ? stack.pop_int() : td::RefInt256{}; auto x = stack.pop_int(); - switch ((args >> 2) & 3) { - case 1: - stack.push_int_quiet(td::rshift(std::move(x), y, round_mode), mode & 1); - break; - case 3: - stack.push_int_quiet(td::rshift(x, y, round_mode), mode & 1); - // fallthrough - case 2: - x.write().mod_pow2(y, round_mode).normalize(); - stack.push_int_quiet(std::move(x), mode & 1); - break; + if (add) { + CHECK(d == 3); + typename td::BigInt256::DoubleInt tmp{*x}, quot; + tmp += *w; + typename td::BigInt256::DoubleInt tmp2{tmp}; + tmp2.rshift(y, round_mode).normalize(); + stack.push_int_quiet(td::make_refint(tmp2), mode & 1); + tmp.normalize().mod_pow2(y, round_mode).normalize(); + stack.push_int_quiet(td::make_refint(tmp), mode & 1); + } else { + switch (d) { + case 1: + stack.push_int_quiet(td::rshift(std::move(x), y, round_mode), mode & 1); + break; + case 3: + stack.push_int_quiet(td::rshift(x, y, round_mode), mode & 1); + // fallthrough + case 2: + x.write().mod_pow2(y, round_mode).normalize(); + stack.push_int_quiet(std::move(x), mode & 1); + break; + } } return 0; } @@ -349,7 +392,7 @@ std::string dump_shrmod(CellSlice&, unsigned args, int mode) { args >>= 8; } int round_mode = (int)(args & 3); - if (!(args & 12) || round_mode == 3) { + if (round_mode == 3) { return ""; } std::ostringstream os; @@ -366,6 +409,9 @@ std::string dump_shrmod(CellSlice&, unsigned args, int mode) { case 12: os << "RSHIFTMOD"; break; + case 0: + os << "ADDRSHIFTMOD"; + break; } if (round_mode) { os << "FRC"[round_mode]; @@ -378,20 +424,30 @@ std::string dump_shrmod(CellSlice&, unsigned args, int mode) { int exec_muldivmod(VmState* st, unsigned args, int quiet) { int round_mode = (int)(args & 3) - 1; - if (!(args & 12) || round_mode == 2) { + unsigned d = (args >> 2) & 3; + bool add = false; + if (d == 0 && st->get_global_version() >= 4) { + d = 3; + add = true; + } + if (d == 0 || round_mode == 2) { throw VmError{Excno::inv_opcode}; } Stack& stack = st->get_stack(); VM_LOG(st) << "execute MULDIV/MOD " << (args & 15); - stack.check_underflow(3); + stack.check_underflow(add ? 4 : 3); auto z = stack.pop_int(); + auto w = add ? stack.pop_int() : td::RefInt256{}; auto y = stack.pop_int(); auto x = stack.pop_int(); typename td::BigInt256::DoubleInt tmp{0}, quot; + if (add) { + tmp = *w; + } tmp.add_mul(*x, *y); auto q = td::make_refint(); tmp.mod_div(*z, quot, round_mode); - switch ((args >> 2) & 3) { + switch (d) { case 1: stack.push_int_quiet(td::make_refint(quot.normalize()), quiet); break; @@ -407,11 +463,20 @@ int exec_muldivmod(VmState* st, unsigned args, int quiet) { std::string dump_muldivmod(CellSlice&, unsigned args, bool quiet) { int round_mode = (int)(args & 3); - if (!(args & 12) || round_mode == 3) { + unsigned d = (args >> 2) & 3; + bool add = false; + if (d == 0) { + d = 3; + add = true; + } + if (round_mode == 3) { return ""; } - std::string s = (args & 4) ? "MULDIV" : "MUL"; - if (args & 8) { + std::string s = add ? "MULADD" : "MUL"; + if (d & 1) { + s += "DIV"; + } + if (d & 2) { s += "MOD"; } if (quiet) { @@ -427,25 +492,35 @@ int exec_mulshrmod(VmState* st, unsigned args, int mode) { args >>= 8; } int round_mode = (int)(args & 3) - 1; - if (!(args & 12) || round_mode == 2) { + unsigned d = (args >> 2) & 3; + bool add = false; + if (d == 0 && st->get_global_version() >= 4) { + d = 3; + add = true; + } + if (d == 0 || round_mode == 2) { throw VmError{Excno::inv_opcode}; } Stack& stack = st->get_stack(); VM_LOG(st) << "execute MULSHR/MOD " << (args & 15) << ',' << z; if (!(mode & 2)) { - stack.check_underflow(3); + stack.check_underflow(add ? 4 : 3); z = stack.pop_smallint_range(256); } else { - stack.check_underflow(2); + stack.check_underflow(add ? 3 : 2); } if (!z) { round_mode = -1; } + auto w = add ? stack.pop_int() : td::RefInt256{}; auto y = stack.pop_int(); auto x = stack.pop_int(); typename td::BigInt256::DoubleInt tmp{0}; + if (add) { + tmp = *w; + } tmp.add_mul(*x, *y); - switch ((args >> 2) & 3) { + switch (d) { case 1: tmp.rshift(z, round_mode).normalize(); stack.push_int_quiet(td::make_refint(tmp), mode & 1); @@ -471,7 +546,7 @@ std::string dump_mulshrmod(CellSlice&, unsigned args, int mode) { args >>= 8; } int round_mode = (int)(args & 3); - if (!(args & 12) || round_mode == 3) { + if (round_mode == 3) { return ""; } std::ostringstream os; @@ -488,6 +563,9 @@ std::string dump_mulshrmod(CellSlice&, unsigned args, int mode) { case 12: os << "MULRSHIFTMOD"; break; + case 0: + os << "MULADDRSHIFTMOD"; + break; } if (round_mode) { os << "FRC"[round_mode]; @@ -505,22 +583,32 @@ int exec_shldivmod(VmState* st, unsigned args, int mode) { args >>= 8; } int round_mode = (int)(args & 3) - 1; - if (!(args & 12) || round_mode == 2) { + unsigned d = (args >> 2) & 3; + bool add = false; + if (d == 0 && st->get_global_version() >= 4) { + d = 3; + add = true; + } + if (d == 0 || round_mode == 2) { throw VmError{Excno::inv_opcode}; } Stack& stack = st->get_stack(); VM_LOG(st) << "execute SHLDIV/MOD " << (args & 15) << ',' << y; if (!(mode & 2)) { - stack.check_underflow(3); + stack.check_underflow(add ? 4 : 3); y = stack.pop_smallint_range(256); } else { - stack.check_underflow(2); + stack.check_underflow(add ? 3 : 2); } auto z = stack.pop_int(); + auto w = add ? stack.pop_int() : td::RefInt256{}; auto x = stack.pop_int(); typename td::BigInt256::DoubleInt tmp{*x}, quot; tmp <<= y; - switch ((args >> 2) & 3) { + if (add) { + tmp += *w; + } + switch (d) { case 1: { tmp.mod_div(*z, quot, round_mode); stack.push_int_quiet(td::make_refint(quot.normalize()), mode & 1); @@ -549,11 +637,27 @@ std::string dump_shldivmod(CellSlice&, unsigned args, int mode) { args >>= 8; } int round_mode = (int)(args & 3); - if (!(args & 12) || round_mode == 3) { + if (round_mode == 3) { return ""; } std::ostringstream os; - os << (mode & 1 ? "Q" : "") << (args & 4 ? "LSHIFTDIV" : "LSHIFT") << (args & 8 ? "MOD" : ""); + if (mode & 1) { + os << "Q"; + } + switch (args & 12) { + case 4: + os << "LSHIFTDIV"; + break; + case 8: + os << "LSHIFTMOD"; + break; + case 12: + os << "LSHIFTDIVMOD"; + break; + case 0: + os << "LSHIFTADDDIVMOD"; + break; + } if (round_mode) { os << "FRC"[round_mode]; } @@ -855,7 +959,9 @@ int exec_cmp(VmState* st, int mode, bool quiet, const char* name) { auto y = stack.pop_int(); auto x = stack.pop_int(); if (!x->is_valid() || !y->is_valid()) { - stack.push_int_quiet(std::move(x), quiet); + td::RefInt256 r{true}; + r.unique_write().invalidate(); + stack.push_int_quiet(std::move(r), quiet); } else { int z = td::cmp(std::move(x), std::move(y)); stack.push_smallint(((mode >> (4 + z * 4)) & 15) - 8); diff --git a/crypto/vm/bls.cpp b/crypto/vm/bls.cpp new file mode 100644 index 00000000..f6ccc275 --- /dev/null +++ b/crypto/vm/bls.cpp @@ -0,0 +1,334 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ + +#include "bls.h" +#include "blst.h" +#include "blst.hpp" +#include "excno.hpp" + +namespace vm { +namespace bls { + +static const std::string DST = "BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_"; + +bool verify(const P1 &pub, td::Slice msg, const P2 &sig) { + try { + blst::P1_Affine p1(pub.data(), P1_SIZE); + if (p1.is_inf()) { + return false; + } + blst::P2_Affine p2(sig.data(), P2_SIZE); + // core_verify checks for p1.in_group() and p2.in_group() + return p2.core_verify(p1, true, (const byte *)msg.data(), msg.size(), DST) == BLST_SUCCESS; + } catch (BLST_ERROR) { + return false; + } +} + +P2 aggregate(const std::vector &sig) { + try { + if (sig.empty()) { + throw VmError{Excno::unknown, "no signatures"}; + } + blst::P2 aggregated; + for (size_t i = 0; i < sig.size(); ++i) { + blst::P2_Affine p2(sig[i].data(), P2_SIZE); + if (i == 0) { + aggregated = p2.to_jacobian(); + } else { + aggregated.aggregate(p2); + } + } + P2 result; + aggregated.compress(result.data()); + return result; + } catch (BLST_ERROR e) { + throw VmError{Excno::unknown, PSTRING() << "blst error " << e}; + } +} + +bool fast_aggregate_verify(const std::vector &pubs, td::Slice msg, const P2 &sig) { + try { + if (pubs.empty()) { + return false; + } + blst::P1 p1_aggregated; + for (size_t i = 0; i < pubs.size(); ++i) { + blst::P1_Affine p1(pubs[i].data(), P1_SIZE); + if (p1.is_inf()) { + return false; + } + if (i == 0) { + p1_aggregated = p1.to_jacobian(); + } else { + p1_aggregated.aggregate(p1); + } + } + blst::P2_Affine p2(sig.data(), P2_SIZE); + blst::P1_Affine p1 = p1_aggregated.to_affine(); + // core_verify checks for p1.in_group() and p2.in_group() + return p2.core_verify(p1, true, (const byte *)msg.data(), msg.size(), DST) == BLST_SUCCESS; + } catch (BLST_ERROR) { + return false; + } +} + +bool aggregate_verify(const std::vector> &pubs_msgs, const P2 &sig) { + try { + if (pubs_msgs.empty()) { + return false; + } + std::unique_ptr pairing = std::make_unique(true, DST); + for (const auto &p : pubs_msgs) { + blst::P1_Affine p1(p.first.data(), P1_SIZE); + if (!p1.in_group() || p1.is_inf()) { + return false; + } + pairing->aggregate(&p1, nullptr, (const td::uint8 *)p.second.data(), p.second.size()); + } + pairing->commit(); + blst::P2_Affine p2(sig.data(), P2_SIZE); + if (!p2.in_group()) { + return false; + } + blst::PT pt(p2); + return pairing->finalverify(&pt); + } catch (BLST_ERROR) { + return false; + } +} + +template +static P generic_add(const P &a, const P &b) { + try { + blst_P point(a.data(), a.size() / 8); + point.aggregate(blst_P_Affine(b.data(), b.size() / 8)); + P result; + point.compress(result.data()); + return result; + } catch (BLST_ERROR e) { + throw VmError{Excno::unknown, PSTRING() << "blst error " << e}; + } +} + +template +static P generic_sub(const P &a, const P &b) { + try { + blst_P point(b.data(), b.size() / 8); + point.neg(); + point.aggregate(blst_P_Affine(a.data(), a.size() / 8)); + P result; + point.compress(result.data()); + return result; + } catch (BLST_ERROR e) { + throw VmError{Excno::unknown, PSTRING() << "blst error " << e}; + } +} + +template +static P generic_neg(const P &a) { + try { + blst_P point(a.data(), a.size() / 8); + point.neg(); + P result; + point.compress(result.data()); + return result; + } catch (BLST_ERROR e) { + throw VmError{Excno::unknown, PSTRING() << "blst error " << e}; + } +} + +template +static P generic_zero() { + static P zero = []() -> P { + blst_P point = blst_P(); + P result; + point.compress(result.data()); + return result; + }(); + return zero; +} + +template +static P generic_mul(const P &p, const td::RefInt256 &x) { + CHECK(x.not_null() && x->is_valid()); + if (x->sgn() == 0) { + return generic_zero(); + } + td::uint8 x_bytes[32]; + CHECK((x % get_r())->export_bytes(x_bytes, 32, false)); + try { + blst_P point(p.data(), p.size() / 8); + blst::Scalar scalar; + scalar.from_bendian(x_bytes, 32); + point.mult(scalar); + P result; + point.compress(result.data()); + return result; + } catch (BLST_ERROR e) { + throw VmError{Excno::unknown, PSTRING() << "blst error " << e}; + } +} + +template +static P generic_multiexp(const std::vector> &ps) { + if (ps.size() == 1) { + return generic_mul(ps[0].first, ps[0].second); + } + try { + std::vector points(ps.size()); + std::vector scalars(ps.size()); + std::vector scalar_ptrs(ps.size()); + for (size_t i = 0; i < ps.size(); ++i) { + points[i] = blst_P_Affine(ps[i].first.data(), ps[i].first.size() / 8); + CHECK(ps[i].second.not_null() && ps[i].second->is_valid()); + CHECK((ps[i].second % get_r())->export_bytes_lsb(scalars[i].data(), 32)); + scalar_ptrs[i] = (const byte *)&scalars[i]; + } + blst_P point = + ps.empty() ? blst_P() : blst_P_Affines::mult_pippenger(points.data(), points.size(), scalar_ptrs.data(), 256); + P result; + point.compress(result.data()); + return result; + } catch (BLST_ERROR e) { + throw VmError{Excno::unknown, PSTRING() << "blst error " << e}; + } +} + +template +static bool generic_in_group(const P &a) { + try { + blst_P point = blst_P(a.data(), a.size() / 8); + return point.in_group(); + } catch (BLST_ERROR e) { + return false; + } +} + +template +static bool generic_is_zero(const P &a) { + return a == generic_zero(); +} + +P1 g1_add(const P1 &a, const P1 &b) { + return generic_add(a, b); +} + +P1 g1_sub(const P1 &a, const P1 &b) { + return generic_sub(a, b); +} + +P1 g1_neg(const P1 &a) { + return generic_neg(a); +} + +P1 g1_mul(const P1 &p, const td::RefInt256 &x) { + return generic_mul(p, x); +} + +P1 g1_multiexp(const std::vector> &ps) { + return generic_multiexp(ps); +} + +P1 g1_zero() { + return generic_zero(); +} + +P1 map_to_g1(const FP &a) { + blst_fp fp; + blst_fp_from_bendian(&fp, a.data()); + blst_p1 point; + blst_map_to_g1(&point, &fp, nullptr); + P1 result; + blst_p1_compress(result.data(), &point); + return result; +} + +bool g1_in_group(const P1 &a) { + return generic_in_group(a); +} + +bool g1_is_zero(const P1 &a) { + return generic_is_zero(a); +} + +P2 g2_add(const P2 &a, const P2 &b) { + return generic_add(a, b); +} + +P2 g2_sub(const P2 &a, const P2 &b) { + return generic_sub(a, b); +} + +P2 g2_neg(const P2 &a) { + return generic_neg(a); +} + +P2 g2_mul(const P2 &p, const td::RefInt256 &x) { + return generic_mul(p, x); +} + +P2 g2_multiexp(const std::vector> &ps) { + return generic_multiexp(ps); +} + +P2 g2_zero() { + return generic_zero(); +} + +P2 map_to_g2(const FP2 &a) { + blst_fp2 fp2; + blst_fp_from_bendian(&fp2.fp[0], a.data()); + blst_fp_from_bendian(&fp2.fp[1], a.data() + FP_SIZE); + blst_p2 point; + blst_map_to_g2(&point, &fp2, nullptr); + P2 result; + blst_p2_compress(result.data(), &point); + return result; +} + +bool g2_in_group(const P2 &a) { + return generic_in_group(a); +} + +bool g2_is_zero(const P2 &a) { + return generic_is_zero(a); +} + +bool pairing(const std::vector> &ps) { + try { + std::unique_ptr pairing = std::make_unique(true, DST); + for (const auto &p : ps) { + blst::P1_Affine point1(p.first.data(), P1_SIZE); + blst::P2_Affine point2(p.second.data(), P2_SIZE); + pairing->raw_aggregate(&point2, &point1); + } + pairing->commit(); + return pairing->finalverify(); + } catch (BLST_ERROR e) { + throw VmError{Excno::unknown, PSTRING() << "blst error " << e}; + } +} + +td::RefInt256 get_r() { + static td::RefInt256 r = td::dec_string_to_int256( + td::Slice{"52435875175126190479447740508185965837690552500527637822603658699938581184513"}); + return r; +} + +} // namespace bls +} // namespace vm diff --git a/crypto/vm/bls.h b/crypto/vm/bls.h new file mode 100644 index 00000000..b7ffc136 --- /dev/null +++ b/crypto/vm/bls.h @@ -0,0 +1,65 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ + +#include +#include "td/utils/buffer.h" +#include "common/bitstring.h" +#include "common/refint.h" + +namespace vm { +namespace bls { + +const size_t P1_SIZE = 48; +const size_t P2_SIZE = 96; +const size_t FP_SIZE = 48; + +using P1 = td::BitArray; +using P2 = td::BitArray; +using FP = td::BitArray; +using FP2 = td::BitArray; + +bool verify(const P1 &pub, td::Slice msg, const P2 &sig); +P2 aggregate(const std::vector &sig); +bool fast_aggregate_verify(const std::vector &pubs, td::Slice msg, const P2 &sig); +bool aggregate_verify(const std::vector> &pubs_msgs, const P2 &sig); + +P1 g1_add(const P1 &a, const P1 &b); +P1 g1_sub(const P1 &a, const P1 &b); +P1 g1_neg(const P1 &a); +P1 g1_mul(const P1 &p, const td::RefInt256 &x); +P1 g1_multiexp(const std::vector> &ps); +P1 g1_zero(); +P1 map_to_g1(const FP &a); +bool g1_in_group(const P1 &a); +bool g1_is_zero(const P1 &a); + +P2 g2_add(const P2 &a, const P2 &b); +P2 g2_sub(const P2 &a, const P2 &b); +P2 g2_neg(const P2 &a); +P2 g2_mul(const P2 &p, const td::RefInt256 &x); +P2 g2_multiexp(const std::vector> &ps); +P2 g2_zero(); +P2 map_to_g2(const FP2 &a); +bool g2_in_group(const P2 &a); +bool g2_is_zero(const P2 &a); + +bool pairing(const std::vector> &ps); + +td::RefInt256 get_r(); + +} // namespace bls +} // namespace vm diff --git a/crypto/vm/boc.h b/crypto/vm/boc.h index 73c20bdf..c7a1810d 100644 --- a/crypto/vm/boc.h +++ b/crypto/vm/boc.h @@ -115,6 +115,9 @@ struct CellStorageStat { std::map seen; CellStorageStat() : cells(0), bits(0), public_cells(0) { } + explicit CellStorageStat(unsigned long long limit_cells) + : cells(0), bits(0), public_cells(0), limit_cells(limit_cells) { + } void clear_seen() { seen.clear(); } diff --git a/crypto/vm/contops.cpp b/crypto/vm/contops.cpp index a6a44ad3..9610e4aa 100644 --- a/crypto/vm/contops.cpp +++ b/crypto/vm/contops.cpp @@ -212,6 +212,77 @@ int exec_ret_data(VmState* st) { return st->ret(); } +// Mode: +// +1 = same_c3 (set c3 to code) +// +2 = push_0 (push an implicit 0 before running the code) +// +4 = load c4 (persistent data) from stack and return its final value +// +8 = load gas limit from stack and return consumed gas +// +16 = load c7 (smart-contract context) +// +32 = return c5 (actions) +// +64 = pop hard gas limit (enabled by ACCEPT) from stack as well +// +128 = isolated gas consumption (separate set of visited cells, reset chksgn counter) +// +256 = pop number N, return exactly N values from stack (only if res=0 or 1; if not enough then res=stk_und) +int exec_runvm_common(VmState* st, unsigned mode) { + if (mode >= 512) { + throw VmError{Excno::range_chk, "invalid flags"}; + } + st->consume_gas(VmState::runvm_gas_price); + Stack& stack = st->get_stack(); + bool with_data = mode & 4; + Ref c7; + Ref data, actions; + long long gas_max = (mode & 64) ? stack.pop_long_range(vm::GasLimits::infty) : vm::GasLimits::infty; + long long gas_limit = (mode & 8) ? stack.pop_long_range(vm::GasLimits::infty) : vm::GasLimits::infty; + if (!(mode & 64)) { + gas_max = gas_limit; + } else { + gas_max = std::max(gas_max, gas_limit); + } + if (mode & 16) { + c7 = stack.pop_tuple(); + } + if (with_data) { + data = stack.pop_cell(); + } + int ret_vals = -1; + if (mode & 256) { + ret_vals = stack.pop_smallint_range(1 << 30); + } + auto code = stack.pop_cellslice(); + int stack_size = stack.pop_smallint_range(stack.depth() - 1); + std::vector new_stack_entries(stack_size); + for (int i = 0; i < stack_size; ++i) { + new_stack_entries[stack_size - 1 - i] = stack.pop(); + } + td::Ref new_stack{true, std::move(new_stack_entries)}; + st->consume_stack_gas(new_stack); + gas_max = std::min(gas_max, st->get_gas_limits().gas_remaining); + gas_limit = std::min(gas_limit, st->get_gas_limits().gas_remaining); + vm::GasLimits gas{gas_limit, gas_max}; + + VmStateInterface::Guard guard{nullptr}; // Don't consume gas for creating/loading cells during VM init + VmState new_state{std::move(code), std::move(new_stack), gas, (int)mode & 3, std::move(data), + VmLog{}, std::vector>{}, std::move(c7)}; + new_state.set_chksig_always_succeed(st->get_chksig_always_succeed()); + new_state.set_global_version(st->get_global_version()); + st->run_child_vm(std::move(new_state), with_data, mode & 32, mode & 8, mode & 128, ret_vals); + return 0; +} + +int exec_runvm(VmState* st, unsigned args) { + VM_LOG(st) << "execute RUNVM " << (args & 4095) << "\n"; + return exec_runvm_common(st, args & 4095); +} + +int exec_runvmx(VmState* st) { + VM_LOG(st) << "execute RUNVMX\n"; + return exec_runvm_common(st, st->get_stack().pop_smallint_range(4095)); +} + +std::string dump_runvm(CellSlice&, unsigned args) { + return PSTRING() << "RUNVM " << (args & 4095); +} + void register_continuation_jump_ops(OpcodeTable& cp0) { using namespace std::placeholders; cp0.insert(OpcodeInstr::mksimple(0xd8, 8, "EXECUTE", exec_execute)) @@ -246,7 +317,9 @@ void register_continuation_jump_ops(OpcodeTable& cp0) { }, "JMPREFDATA"), compute_len_push_ref)) - .insert(OpcodeInstr::mksimple(0xdb3f, 16, "RETDATA", exec_ret_data)); + .insert(OpcodeInstr::mksimple(0xdb3f, 16, "RETDATA", exec_ret_data)) + .insert(OpcodeInstr::mkfixed(0xdb4, 12, 12, dump_runvm, exec_runvm)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xdb50, 16, "RUNVMX ", exec_runvmx)->require_version(4)); } int exec_if(VmState* st) { diff --git a/crypto/vm/opctable.cpp b/crypto/vm/opctable.cpp index 0ee33385..0521a763 100644 --- a/crypto/vm/opctable.cpp +++ b/crypto/vm/opctable.cpp @@ -447,4 +447,24 @@ dump_arg_instr_func_t dump_2c_add(unsigned add, std::string prefix, std::string } // namespace instr +OpcodeInstr* OpcodeInstr::require_version(int required_version) { + return new OpcodeInstrWithVersion(this, required_version); +} + +int OpcodeInstrWithVersion::dispatch(VmState* st, CellSlice& cs, unsigned opcode, unsigned bits) const { + if (st->get_global_version() < required_version) { + st->consume_gas(gas_per_instr); + throw VmError{Excno::inv_opcode, "invalid opcode", opcode}; + } + return instr->dispatch(st, cs, opcode, bits); +} + +std::string OpcodeInstrWithVersion::dump(CellSlice& cs, unsigned opcode, unsigned bits) const { + return instr->dump(cs, opcode, bits); +} + +int OpcodeInstrWithVersion::instr_len(const CellSlice& cs, unsigned opcode, unsigned bits) const { + return instr->instr_len(cs, opcode, bits); +} + } // namespace vm diff --git a/crypto/vm/opctable.h b/crypto/vm/opctable.h index f9ea7023..34d2ef0a 100644 --- a/crypto/vm/opctable.h +++ b/crypto/vm/opctable.h @@ -57,6 +57,9 @@ class OpcodeInstr { std::pair get_opcode_range() const { return {min_opcode, max_opcode}; } + + OpcodeInstr* require_version(int required_version); + //static OpcodeInstr* mksimple(unsigned opcode, unsigned opc_bits, std::string _name, exec_instr_func_t exec); static OpcodeInstr* mksimple(unsigned opcode, unsigned opc_bits, std::string _name, exec_simple_instr_func_t exec); static OpcodeInstr* mkfixed(unsigned opcode, unsigned opc_bits, unsigned arg_bits, dump_arg_instr_func_t dump, @@ -188,4 +191,19 @@ class OpcodeInstrExt : public OpcodeInstr { int instr_len(const CellSlice& cs, unsigned opcode, unsigned bits) const override; }; +class OpcodeInstrWithVersion : public OpcodeInstr { + public: + OpcodeInstrWithVersion() = delete; + OpcodeInstrWithVersion(OpcodeInstr* instr, int required_version) : + OpcodeInstr(instr->get_opcode_min(), instr->get_opcode_max()), instr(instr), required_version(required_version) { + } + ~OpcodeInstrWithVersion() override = default; + int dispatch(VmState* st, CellSlice& cs, unsigned opcode, unsigned bits) const override; + std::string dump(CellSlice& cs, unsigned opcode, unsigned bits) const override; + int instr_len(const CellSlice& cs, unsigned opcode, unsigned bits) const override; + private: + OpcodeInstr* instr; + int required_version; +}; + } // namespace vm diff --git a/crypto/vm/stack.cpp b/crypto/vm/stack.cpp index 18589812..69760524 100644 --- a/crypto/vm/stack.cpp +++ b/crypto/vm/stack.cpp @@ -349,7 +349,7 @@ void StackEntry::for_each_scalar(const std::function& f } } -const StackEntry& tuple_index(const Tuple& tup, unsigned idx) { +const StackEntry& tuple_index(const Ref& tup, unsigned idx) { if (idx >= tup->size()) { throw VmError{Excno::range_chk, "tuple index out of range"}; } diff --git a/crypto/vm/stack.hpp b/crypto/vm/stack.hpp index 69ed107c..6a52e4a2 100644 --- a/crypto/vm/stack.hpp +++ b/crypto/vm/stack.hpp @@ -305,7 +305,7 @@ inline void swap(StackEntry& se1, StackEntry& se2) { se1.swap(se2); } -const StackEntry& tuple_index(const Tuple& tup, unsigned idx); +const StackEntry& tuple_index(const Ref& tup, unsigned idx); StackEntry tuple_extend_index(const Ref& tup, unsigned idx); unsigned tuple_extend_set_index(Ref& tup, unsigned idx, StackEntry&& value, bool force = false); diff --git a/crypto/vm/stackops.cpp b/crypto/vm/stackops.cpp index a52a90e2..c8180f1a 100644 --- a/crypto/vm/stackops.cpp +++ b/crypto/vm/stackops.cpp @@ -301,9 +301,7 @@ int exec_blkswap(VmState* st, unsigned args) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute BLKSWAP " << x << ',' << y; stack.check_underflow(x + y); - std::reverse(stack.from_top(x + y), stack.from_top(y)); - std::reverse(stack.from_top(y), stack.top()); - std::reverse(stack.from_top(x + y), stack.top()); + std::rotate(stack.from_top(x + y), stack.from_top(y), stack.top()); return 0; } @@ -403,7 +401,7 @@ int exec_pick(VmState* st) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute PICK\n"; stack.check_underflow(1); - int x = stack.pop_smallint_range(255); + int x = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); stack.check_underflow_p(x); stack.push(stack.fetch(x)); return 0; @@ -413,8 +411,9 @@ int exec_roll(VmState* st) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute ROLL\n"; stack.check_underflow(1); - int x = stack.pop_smallint_range(255); + int x = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); stack.check_underflow_p(x); + st->consume_gas(std::max(x - 255, 0)); while (--x >= 0) { swap(stack[x], stack[x + 1]); } @@ -425,8 +424,9 @@ int exec_rollrev(VmState* st) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute ROLLREV\n"; stack.check_underflow(1); - int x = stack.pop_smallint_range(255); + int x = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); stack.check_underflow_p(x); + st->consume_gas(std::max(x - 255, 0)); for (int i = 0; i < x; i++) { swap(stack[i], stack[i + 1]); } @@ -437,13 +437,14 @@ int exec_blkswap_x(VmState* st) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute BLKSWX\n"; stack.check_underflow(2); - int y = stack.pop_smallint_range(255); - int x = stack.pop_smallint_range(255); + int y = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); + int x = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); stack.check_underflow(x + y); if (x > 0 && y > 0) { - std::reverse(stack.from_top(x + y), stack.from_top(y)); - std::reverse(stack.from_top(y), stack.top()); - std::reverse(stack.from_top(x + y), stack.top()); + if (st->get_global_version() >= 4) { + st->consume_gas(std::max(x + y - 255, 0)); + } + std::rotate(stack.from_top(x + y), stack.from_top(y), stack.top()); } return 0; } @@ -452,9 +453,10 @@ int exec_reverse_x(VmState* st) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute REVX\n"; stack.check_underflow(2); - int y = stack.pop_smallint_range(255); - int x = stack.pop_smallint_range(255); + int y = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); + int x = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); stack.check_underflow(x + y); + st->consume_gas(std::max(x - 255, 0)); std::reverse(stack.from_top(x + y), stack.from_top(y)); return 0; } @@ -463,7 +465,7 @@ int exec_drop_x(VmState* st) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute DROPX\n"; stack.check_underflow(1); - int x = stack.pop_smallint_range(255); + int x = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); stack.check_underflow(x); stack.pop_many(x); return 0; @@ -482,7 +484,7 @@ int exec_xchg_x(VmState* st) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute XCHGX\n"; stack.check_underflow(1); - int x = stack.pop_smallint_range(255); + int x = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); stack.check_underflow_p(x); swap(stack[0], stack[x]); return 0; @@ -499,7 +501,7 @@ int exec_chkdepth(VmState* st) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute CHKDEPTH\n"; stack.check_underflow(1); - int x = stack.pop_smallint_range(255); + int x = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); stack.check_underflow(x); return 0; } @@ -508,10 +510,11 @@ int exec_onlytop_x(VmState* st) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute ONLYTOPX\n"; stack.check_underflow(1); - int x = stack.pop_smallint_range(255); + int x = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); stack.check_underflow(x); int n = stack.depth(), d = n - x; if (d > 0) { + st->consume_gas(std::max(x - 255, 0)); for (int i = n - 1; i >= d; i--) { stack[i] = std::move(stack[i - d]); } @@ -524,7 +527,7 @@ int exec_only_x(VmState* st) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute ONLYX\n"; stack.check_underflow(1); - int x = stack.pop_smallint_range(255); + int x = stack.pop_smallint_range(st->get_global_version() >= 4 ? (1 << 30) - 1 : 255); stack.check_underflow(x); stack.pop_many(stack.depth() - x); return 0; diff --git a/crypto/vm/tonops.cpp b/crypto/vm/tonops.cpp index a164df83..0dd15d80 100644 --- a/crypto/vm/tonops.cpp +++ b/crypto/vm/tonops.cpp @@ -26,8 +26,15 @@ #include "vm/dict.h" #include "vm/boc.h" #include "Ed25519.h" +#include "vm/Hasher.h" +#include "block/block-auto.h" +#include "block/block-parse.h" +#include "crypto/ellcurve/secp256k1.h" +#include "crypto/ellcurve/p256.h" #include "openssl/digest.hpp" +#include +#include "bls.h" namespace vm { @@ -78,6 +85,12 @@ int exec_set_gas_limit(VmState* st) { return exec_set_gas_generic(st, gas); } +int exec_gas_consumed(VmState* st) { + VM_LOG(st) << "execute GASCONSUMED"; + st->get_stack().push_smallint(st->gas_consumed()); + return 0; +} + int exec_commit(VmState* st) { VM_LOG(st) << "execute COMMIT"; st->force_commit(); @@ -88,6 +101,7 @@ void register_basic_gas_ops(OpcodeTable& cp0) { using namespace std::placeholders; cp0.insert(OpcodeInstr::mksimple(0xf800, 16, "ACCEPT", exec_accept)) .insert(OpcodeInstr::mksimple(0xf801, 16, "SETGASLIMIT", exec_set_gas_limit)) + .insert(OpcodeInstr::mksimple(0xf802, 16, "GASCONSUMED", exec_gas_consumed)->require_version(4)) .insert(OpcodeInstr::mksimple(0xf80f, 16, "COMMIT", exec_commit)); } @@ -95,17 +109,21 @@ void register_ton_gas_ops(OpcodeTable& cp0) { using namespace std::placeholders; } +static const StackEntry& get_param(VmState* st, unsigned idx) { + auto tuple = st->get_c7(); + auto t1 = tuple_index(tuple, 0).as_tuple_range(255); + if (t1.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; + } + return tuple_index(t1, idx); +} + int exec_get_param(VmState* st, unsigned idx, const char* name) { if (name) { VM_LOG(st) << "execute " << name; } Stack& stack = st->get_stack(); - auto tuple = st->get_c7(); - auto t1 = tuple_index(*tuple, 0).as_tuple_range(255); - if (t1.is_null()) { - throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; - } - stack.push(tuple_index(*t1, idx)); + stack.push(get_param(st, idx)); return 0; } @@ -192,6 +210,41 @@ int exec_set_global_var(VmState* st) { return exec_set_global_common(st, args); } +int exec_get_prev_blocks_info(VmState* st, unsigned idx, const char* name) { + idx &= 3; + VM_LOG(st) << "execute " << name; + Stack& stack = st->get_stack(); + auto tuple = st->get_c7(); + auto t1 = tuple_index(tuple, 0).as_tuple_range(255); + if (t1.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; + } + auto t2 = tuple_index(t1, 13).as_tuple_range(255); + if (t2.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; + } + stack.push(tuple_index(t2, idx)); + return 0; +} + +int exec_get_global_id(VmState* st) { + Ref config = get_param(st, 9).as_cell(); + if (config.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a cell"}; + } + Dictionary config_dict{std::move(config), 32}; + Ref cell = config_dict.lookup_ref(td::BitArray<32>{19}); + if (cell.is_null()) { + throw VmError{Excno::unknown, "invalid global-id config"}; + } + CellSlice cs = load_cell_slice(cell); + if (cs.size() < 32) { + throw VmError{Excno::unknown, "invalid global-id config"}; + } + st->get_stack().push_smallint(cs.fetch_long(32)); + return 0; +} + void register_ton_config_ops(OpcodeTable& cp0) { using namespace std::placeholders; cp0.insert(OpcodeInstr::mkfixedrange(0xf820, 0xf823, 16, 4, instr::dump_1c("GETPARAM "), exec_get_var_param)) @@ -202,10 +255,17 @@ void register_ton_config_ops(OpcodeTable& cp0) { .insert(OpcodeInstr::mksimple(0xf827, 16, "BALANCE", std::bind(exec_get_param, _1, 7, "BALANCE"))) .insert(OpcodeInstr::mksimple(0xf828, 16, "MYADDR", std::bind(exec_get_param, _1, 8, "MYADDR"))) .insert(OpcodeInstr::mksimple(0xf829, 16, "CONFIGROOT", std::bind(exec_get_param, _1, 9, "CONFIGROOT"))) - .insert(OpcodeInstr::mkfixedrange(0xf82a, 0xf830, 16, 4, instr::dump_1c("GETPARAM "), exec_get_var_param)) + .insert(OpcodeInstr::mksimple(0xf82a, 16, "MYCODE", std::bind(exec_get_param, _1, 10, "MYCODE"))) + .insert(OpcodeInstr::mksimple(0xf82b, 16, "INCOMINGVALUE", std::bind(exec_get_param, _1, 11, "INCOMINGVALUE"))) + .insert(OpcodeInstr::mksimple(0xf82c, 16, "STORAGEFEES", std::bind(exec_get_param, _1, 12, "STORAGEFEES"))) + .insert(OpcodeInstr::mksimple(0xf82d, 16, "PREVBLOCKSINFOTUPLE", std::bind(exec_get_param, _1, 13, "PREVBLOCKSINFOTUPLE"))) + .insert(OpcodeInstr::mkfixedrange(0xf82e, 0xf830, 16, 4, instr::dump_1c("GETPARAM "), exec_get_var_param)) .insert(OpcodeInstr::mksimple(0xf830, 16, "CONFIGDICT", exec_get_config_dict)) .insert(OpcodeInstr::mksimple(0xf832, 16, "CONFIGPARAM", std::bind(exec_get_config_param, _1, false))) .insert(OpcodeInstr::mksimple(0xf833, 16, "CONFIGOPTPARAM", std::bind(exec_get_config_param, _1, true))) + .insert(OpcodeInstr::mksimple(0xf83400, 24, "PREVMCBLOCKS", std::bind(exec_get_prev_blocks_info, _1, 0, "PREVMCBLOCKS"))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf83401, 24, "PREVKEYBLOCK", std::bind(exec_get_prev_blocks_info, _1, 1, "PREVKEYBLOCK"))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf835, 16, "GLOBALID", exec_get_global_id)->require_version(4)) .insert(OpcodeInstr::mksimple(0xf840, 16, "GETGLOBVAR", exec_get_global_var)) .insert(OpcodeInstr::mkfixedrange(0xf841, 0xf860, 16, 5, instr::dump_1c_and(31, "GETGLOB "), exec_get_global)) .insert(OpcodeInstr::mksimple(0xf860, 16, "SETGLOBVAR", exec_set_global_var)) @@ -216,11 +276,11 @@ static constexpr int randseed_idx = 6; td::RefInt256 generate_randu256(VmState* st) { auto tuple = st->get_c7(); - auto t1 = tuple_index(*tuple, 0).as_tuple_range(255); + auto t1 = tuple_index(tuple, 0).as_tuple_range(255); if (t1.is_null()) { throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; } - auto seedv = tuple_index(*t1, randseed_idx).as_int(); + auto seedv = tuple_index(t1, randseed_idx).as_int(); if (seedv.is_null()) { throw VmError{Excno::type_chk, "random seed is not an integer"}; } @@ -276,12 +336,12 @@ int exec_set_rand(VmState* st, bool mix) { throw VmError{Excno::range_chk, "new random seed out of range"}; } auto tuple = st->get_c7(); - auto t1 = tuple_index(*tuple, 0).as_tuple_range(255); + auto t1 = tuple_index(tuple, 0).as_tuple_range(255); if (t1.is_null()) { throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; } if (mix) { - auto seedv = tuple_index(*t1, randseed_idx).as_int(); + auto seedv = tuple_index(t1, randseed_idx).as_int(); if (seedv.is_null()) { throw VmError{Excno::type_chk, "random seed is not an integer"}; } @@ -356,6 +416,77 @@ int exec_compute_sha256(VmState* st) { return 0; } +int exec_hash_ext(VmState* st, unsigned args) { + bool rev = (args >> 8) & 1; + bool append = (args >> 9) & 1; + int hash_id = args & 255; + VM_LOG(st) << "execute HASHEXT" << (append ? "A" : "") << (rev ? "R" : "") << " " << (hash_id == 255 ? -1 : hash_id); + Stack& stack = st->get_stack(); + if (hash_id == 255) { + hash_id = stack.pop_smallint_range(254); + } + int cnt = stack.pop_smallint_range(stack.depth() - 1); + Hasher hasher{hash_id}; + size_t total_bits = 0; + long long gas_consumed = 0; + for (int i = 0; i < cnt; ++i) { + td::ConstBitPtr data{nullptr}; + unsigned size; + int idx = rev ? i : cnt - 1 - i; + auto slice = stack[idx].as_slice(); + if (slice.not_null()) { + data = slice->data_bits(); + size = slice->size(); + } else { + auto builder = stack[idx].as_builder(); + if (builder.not_null()) { + data = builder->data_bits(); + size = builder->size(); + } else { + stack.pop_many(cnt); + throw VmError{Excno::type_chk, "expected slice or builder"}; + } + } + total_bits += size; + long long gas_total = (i + 1) * VmState::hash_ext_entry_gas_price + total_bits / 8 / hasher.bytes_per_gas_unit(); + st->consume_gas(gas_total - gas_consumed); + gas_consumed = gas_total; + hasher.append(data, size); + } + stack.pop_many(cnt); + td::BufferSlice hash = hasher.finish(); + if (append) { + Ref builder = stack.pop_builder(); + if (!builder->can_extend_by(hash.size() * 8)) { + throw VmError{Excno::cell_ov}; + } + builder.write().store_bytes(hash.as_slice()); + stack.push_builder(std::move(builder)); + } else { + if (hash.size() <= 32) { + td::RefInt256 res{true}; + CHECK(res.write().import_bytes((unsigned char*)hash.data(), hash.size(), false)); + stack.push_int(std::move(res)); + } else { + std::vector res; + for (size_t i = 0; i < hash.size(); i += 32) { + td::RefInt256 x{true}; + CHECK(x.write().import_bytes((unsigned char*)hash.data() + i, std::min(hash.size() - i, 32), false)); + res.push_back(std::move(x)); + } + stack.push_tuple(std::move(res)); + } + } + return 0; +} + +std::string dump_hash_ext(CellSlice& cs, unsigned args) { + bool rev = (args >> 8) & 1; + bool append = (args >> 9) & 1; + int hash_id = args & 255; + return PSTRING() << "HASHEXT" << (append ? "A" : "") << (rev ? "R" : "") << " " << (hash_id == 255 ? -1 : hash_id); +} + int exec_ed25519_check_signature(VmState* st, bool from_slice) { VM_LOG(st) << "execute CHKSIGN" << (from_slice ? 'S' : 'U'); Stack& stack = st->get_stack(); @@ -385,19 +516,636 @@ int exec_ed25519_check_signature(VmState* st, bool from_slice) { if (!key_int->export_bytes(key, 32, false)) { throw VmError{Excno::range_chk, "Ed25519 public key must fit in an unsigned 256-bit integer"}; } + st->register_chksgn_call(); td::Ed25519::PublicKey pub_key{td::SecureString(td::Slice{key, 32})}; auto res = pub_key.verify_signature(td::Slice{data, data_len}, td::Slice{signature, 64}); stack.push_bool(res.is_ok() || st->get_chksig_always_succeed()); return 0; } +int exec_ecrecover(VmState* st) { + VM_LOG(st) << "execute ECRECOVER"; + Stack& stack = st->get_stack(); + stack.check_underflow(4); + auto s = stack.pop_int(); + auto r = stack.pop_int(); + auto v = (td::uint8)stack.pop_smallint_range(255); + auto hash = stack.pop_int(); + + unsigned char signature[65]; + if (!r->export_bytes(signature, 32, false)) { + throw VmError{Excno::range_chk, "r must fit in an unsigned 256-bit integer"}; + } + if (!s->export_bytes(signature + 32, 32, false)) { + throw VmError{Excno::range_chk, "s must fit in an unsigned 256-bit integer"}; + } + signature[64] = v; + unsigned char hash_bytes[32]; + if (!hash->export_bytes(hash_bytes, 32, false)) { + throw VmError{Excno::range_chk, "data hash must fit in an unsigned 256-bit integer"}; + } + st->consume_gas(VmState::ecrecover_gas_price); + unsigned char public_key[65]; + if (td::ecrecover(hash_bytes, signature, public_key)) { + td::uint8 h = public_key[0]; + td::RefInt256 x1{true}, x2{true}; + CHECK(x1.write().import_bytes(public_key + 1, 32, false)); + CHECK(x2.write().import_bytes(public_key + 33, 32, false)); + stack.push_smallint(h); + stack.push_int(std::move(x1)); + stack.push_int(std::move(x2)); + stack.push_bool(true); + } else { + stack.push_bool(false); + } + return 0; +} + +int exec_p256_chksign(VmState* st, bool from_slice) { + VM_LOG(st) << "execute P256_CHKSIGN" << (from_slice ? 'S' : 'U'); + Stack& stack = st->get_stack(); + stack.check_underflow(3); + auto key_cs = stack.pop_cellslice(); + auto signature_cs = stack.pop_cellslice(); + unsigned char data[128], key[33], signature[64]; + unsigned data_len; + if (from_slice) { + auto cs = stack.pop_cellslice(); + if (cs->size() & 7) { + throw VmError{Excno::cell_und, "Slice does not consist of an integer number of bytes"}; + } + data_len = (cs->size() >> 3); + CHECK(data_len <= sizeof(data)); + CHECK(cs->prefetch_bytes(data, data_len)); + } else { + auto hash_int = stack.pop_int(); + data_len = 32; + if (!hash_int->export_bytes(data, data_len, false)) { + throw VmError{Excno::range_chk, "data hash must fit in an unsigned 256-bit integer"}; + } + } + if (!signature_cs->prefetch_bytes(signature, 64)) { + throw VmError{Excno::cell_und, "P256 signature must contain at least 512 data bits"}; + } + if (!key_cs->prefetch_bytes(key, 33)) { + throw VmError{Excno::cell_und, "P256 public key must contain at least 33 data bytes"}; + } + st->consume_gas(VmState::p256_chksgn_gas_price); + auto res = td::p256_check_signature(td::Slice{data, data_len}, td::Slice{key, 33}, td::Slice{signature, 64}); + if (res.is_error()) { + VM_LOG(st) << "P256_CHKSIGN: " << res.error().message(); + } + stack.push_bool(res.is_ok() || st->get_chksig_always_succeed()); + return 0; +} + +static_assert(crypto_scalarmult_ristretto255_BYTES == 32, "Unexpected value of ristretto255 constant"); +static_assert(crypto_scalarmult_ristretto255_SCALARBYTES == 32, "Unexpected value of ristretto255 constant"); +static_assert(crypto_core_ristretto255_BYTES == 32, "Unexpected value of ristretto255 constant"); +static_assert(crypto_core_ristretto255_HASHBYTES == 64, "Unexpected value of ristretto255 constant"); +static_assert(crypto_core_ristretto255_SCALARBYTES == 32, "Unexpected value of ristretto255 constant"); +static_assert(crypto_core_ristretto255_NONREDUCEDSCALARBYTES == 64, "Unexpected value of ristretto255 constant"); + +int exec_ristretto255_from_hash(VmState* st) { + VM_LOG(st) << "execute RIST255_FROMHASH"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + auto x2 = stack.pop_int(); + auto x1 = stack.pop_int(); + st->consume_gas(VmState::rist255_fromhash_gas_price); + unsigned char xb[64], rb[32]; + if (!x1->export_bytes(xb, 32, false)) { + throw VmError{Excno::range_chk, "x1 must fit in an unsigned 256-bit integer"}; + } + if (!x2->export_bytes(xb + 32, 32, false)) { + throw VmError{Excno::range_chk, "x2 must fit in an unsigned 256-bit integer"}; + } + CHECK(sodium_init() >= 0); + crypto_core_ristretto255_from_hash(rb, xb); + td::RefInt256 r{true}; + CHECK(r.write().import_bytes(rb, 32, false)); + stack.push_int(std::move(r)); + return 0; +} + +int exec_ristretto255_validate(VmState* st, bool quiet) { + VM_LOG(st) << "execute RIST255_VALIDATE"; + Stack& stack = st->get_stack(); + auto x = stack.pop_int(); + st->consume_gas(VmState::rist255_validate_gas_price); + unsigned char xb[64]; + CHECK(sodium_init() >= 0); + if (!x->export_bytes(xb, 32, false) || !crypto_core_ristretto255_is_valid_point(xb)) { + if (quiet) { + stack.push_bool(false); + return 0; + } + throw VmError{Excno::range_chk, "x is not a valid encoded element"}; + } + if (quiet) { + stack.push_bool(true); + } + return 0; +} + +int exec_ristretto255_add(VmState* st, bool quiet) { + VM_LOG(st) << "execute RIST255_ADD"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + auto y = stack.pop_int(); + auto x = stack.pop_int(); + st->consume_gas(VmState::rist255_add_gas_price); + unsigned char xb[32], yb[32], rb[32]; + CHECK(sodium_init() >= 0); + if (!x->export_bytes(xb, 32, false) || !y->export_bytes(yb, 32, false) || crypto_core_ristretto255_add(rb, xb, yb)) { + if (quiet) { + stack.push_bool(false); + return 0; + } + throw VmError{Excno::range_chk, "x and/or y are not valid encoded elements"}; + } + td::RefInt256 r{true}; + CHECK(r.write().import_bytes(rb, 32, false)); + stack.push_int(std::move(r)); + if (quiet) { + stack.push_bool(true); + } + return 0; +} + +int exec_ristretto255_sub(VmState* st, bool quiet) { + VM_LOG(st) << "execute RIST255_SUB"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + auto y = stack.pop_int(); + auto x = stack.pop_int(); + st->consume_gas(VmState::rist255_add_gas_price); + unsigned char xb[32], yb[32], rb[32]; + CHECK(sodium_init() >= 0); + if (!x->export_bytes(xb, 32, false) || !y->export_bytes(yb, 32, false) || crypto_core_ristretto255_sub(rb, xb, yb)) { + if (quiet) { + stack.push_bool(false); + return 0; + } + throw VmError{Excno::range_chk, "x and/or y are not valid encoded elements"}; + } + td::RefInt256 r{true}; + CHECK(r.write().import_bytes(rb, 32, false)); + stack.push_int(std::move(r)); + if (quiet) { + stack.push_bool(true); + } + return 0; +} + +static bool export_bytes_little(const td::RefInt256& n, unsigned char* nb) { + if (!n->export_bytes(nb, 32, false)) { + return false; + } + std::reverse(nb, nb + 32); + return true; +} + +static td::RefInt256 get_ristretto256_l() { + static td::RefInt256 l = + (td::make_refint(1) << 252) + td::dec_string_to_int256(td::Slice("27742317777372353535851937790883648493")); + return l; +} + +int exec_ristretto255_mul(VmState* st, bool quiet) { + VM_LOG(st) << "execute RIST255_MUL"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + auto n = stack.pop_int() % get_ristretto256_l(); + auto x = stack.pop_int(); + st->consume_gas(VmState::rist255_mul_gas_price); + unsigned char xb[32], nb[32], rb[32]; + memset(rb, 255, sizeof(rb)); + CHECK(sodium_init() >= 0); + if (!x->export_bytes(xb, 32, false) || !export_bytes_little(n, nb) || crypto_scalarmult_ristretto255(rb, nb, xb)) { + if (std::all_of(rb, rb + 32, [](unsigned char c) { return c == 255; })) { + if (quiet) { + stack.push_bool(false); + return 0; + } + throw VmError{Excno::range_chk, "invalid x or n"}; + } + } + td::RefInt256 r{true}; + CHECK(r.write().import_bytes(rb, 32, false)); + stack.push_int(std::move(r)); + if (quiet) { + stack.push_bool(true); + } + return 0; +} + +int exec_ristretto255_mul_base(VmState* st, bool quiet) { + VM_LOG(st) << "execute RIST255_MULBASE"; + Stack& stack = st->get_stack(); + auto n = stack.pop_int() % get_ristretto256_l(); + st->consume_gas(VmState::rist255_mulbase_gas_price); + unsigned char nb[32], rb[32]; + memset(rb, 255, sizeof(rb)); + CHECK(sodium_init() >= 0); + if (!export_bytes_little(n, nb) || crypto_scalarmult_ristretto255_base(rb, nb)) { + if (std::all_of(rb, rb + 32, [](unsigned char c) { return c == 255; })) { + if (quiet) { + stack.push_bool(false); + return 0; + } + throw VmError{Excno::range_chk, "invalid n"}; + } + } + td::RefInt256 r{true}; + CHECK(r.write().import_bytes(rb, 32, false)); + stack.push_int(std::move(r)); + if (quiet) { + stack.push_bool(true); + } + return 0; +} + +int exec_ristretto255_push_l(VmState* st) { + VM_LOG(st) << "execute RIST255_PUSHL"; + Stack& stack = st->get_stack(); + stack.push_int(get_ristretto256_l()); + return 0; +} + +static bls::P1 slice_to_bls_p1(const CellSlice& cs) { + bls::P1 p1; + if (!cs.prefetch_bytes(p1.as_slice())) { + throw VmError{Excno::cell_und, PSTRING() << "slice must contain at least " << bls::P1_SIZE << " bytes"}; + } + return p1; +} + +static bls::P2 slice_to_bls_p2(const CellSlice& cs) { + bls::P2 p2; + if (!cs.prefetch_bytes(p2.as_slice())) { + throw VmError{Excno::cell_und, PSTRING() << "slice must contain at least " << bls::P2_SIZE << " bytes"}; + } + return p2; +} + +static bls::FP slice_to_bls_fp(const CellSlice& cs) { + bls::FP fp; + if (!cs.prefetch_bytes(fp.as_slice())) { + throw VmError{Excno::cell_und, PSTRING() << "slice must contain at least " << bls::FP_SIZE << " bytes"}; + } + return fp; +} + +static bls::FP2 slice_to_bls_fp2(const CellSlice& cs) { + bls::FP2 fp2; + if (!cs.prefetch_bytes(fp2.as_slice())) { + throw VmError{Excno::cell_und, PSTRING() << "slice must contain at least " << bls::FP_SIZE * 2 << " bytes"}; + } + return fp2; +} + +static td::BufferSlice slice_to_bls_msg(const CellSlice& cs) { + if (cs.size() % 8 != 0) { + throw VmError{Excno::cell_und, "message does not consist of an integer number of bytes"}; + } + size_t msg_size = cs.size() / 8; + td::BufferSlice s(msg_size); + cs.prefetch_bytes((td::uint8*)s.data(), (int)msg_size); + return s; +} + +static Ref bls_to_slice(td::Slice s) { + VmStateInterface::Guard guard{nullptr}; // Don't consume gas for finalize and load_cell_slice + CellBuilder cb; + return load_cell_slice_ref(cb.store_bytes(s).finalize()); +} + +static long long bls_calculate_multiexp_gas(int n, long long base, long long coef1, long long coef2) { + int l = 4; + while ((1LL << (l + 1)) <= n) { + ++l; + } + return base + n * coef1 + n * coef2 / l; +} + +int exec_bls_verify(VmState* st) { + VM_LOG(st) << "execute BLS_VERIFY"; + Stack& stack = st->get_stack(); + stack.check_underflow(3); + st->consume_gas(st->bls_verify_gas_price); + bls::P2 sig = slice_to_bls_p2(*stack.pop_cellslice()); + td::BufferSlice msg = slice_to_bls_msg(*stack.pop_cellslice()); + bls::P1 pub = slice_to_bls_p1(*stack.pop_cellslice()); + stack.push_bool(bls::verify(pub, msg, sig)); + return 0; +} + +int exec_bls_aggregate(VmState* st) { + VM_LOG(st) << "execute BLS_AGGREGATE"; + Stack& stack = st->get_stack(); + int n = stack.pop_smallint_range(stack.depth() - 1, 1); + st->consume_gas( + std::max(0LL, VmState::bls_aggregate_base_gas_price + (long long)n * VmState::bls_aggregate_element_gas_price)); + std::vector sigs(n); + for (int i = n - 1; i >= 0; --i) { + sigs[i] = slice_to_bls_p2(*stack.pop_cellslice()); + } + bls::P2 aggregated = bls::aggregate(sigs); + stack.push_cellslice(bls_to_slice(aggregated.as_slice())); + return 0; +} + +int exec_bls_fast_aggregate_verify(VmState* st) { + VM_LOG(st) << "execute BLS_FASTAGGREGATEVERIFY"; + Stack& stack = st->get_stack(); + stack.check_underflow(3); + Ref sig = stack.pop_cellslice(); + Ref msg = stack.pop_cellslice(); + int n = stack.pop_smallint_range(stack.depth() - 1); + st->consume_gas(VmState::bls_fast_aggregate_verify_base_gas_price + + (long long)n * VmState::bls_fast_aggregate_verify_element_gas_price); + std::vector pubs(n); + for (int i = n - 1; i >= 0; --i) { + pubs[i] = slice_to_bls_p1(*stack.pop_cellslice()); + } + stack.push_bool(bls::fast_aggregate_verify(pubs, slice_to_bls_msg(*msg), slice_to_bls_p2(*sig))); + return 0; +} + +int exec_bls_aggregate_verify(VmState* st) { + VM_LOG(st) << "execute BLS_AGGREGATEVERIFY"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + Ref sig = stack.pop_cellslice(); + int n = stack.pop_smallint_range((stack.depth() - 1) / 2); + st->consume_gas(VmState::bls_aggregate_verify_base_gas_price + + (long long)n * VmState::bls_aggregate_verify_element_gas_price); + std::vector> vec(n); + for (int i = n - 1; i >= 0; --i) { + vec[i].second = slice_to_bls_msg(*stack.pop_cellslice()); + vec[i].first = slice_to_bls_p1(*stack.pop_cellslice()); + } + stack.push_bool(bls::aggregate_verify(vec, slice_to_bls_p2(*sig))); + return 0; +} + +int exec_bls_g1_add(VmState* st) { + VM_LOG(st) << "execute BLS_G1_ADD"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + st->consume_gas(VmState::bls_g1_add_sub_gas_price); + bls::P1 b = slice_to_bls_p1(*stack.pop_cellslice()); + bls::P1 a = slice_to_bls_p1(*stack.pop_cellslice()); + stack.push_cellslice(bls_to_slice(bls::g1_add(a, b).as_slice())); + return 0; +} + +int exec_bls_g1_sub(VmState* st) { + VM_LOG(st) << "execute BLS_G1_SUB"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + st->consume_gas(VmState::bls_g1_add_sub_gas_price); + bls::P1 b = slice_to_bls_p1(*stack.pop_cellslice()); + bls::P1 a = slice_to_bls_p1(*stack.pop_cellslice()); + stack.push_cellslice(bls_to_slice(bls::g1_sub(a, b).as_slice())); + return 0; +} + +int exec_bls_g1_neg(VmState* st) { + VM_LOG(st) << "execute BLS_G1_NEG"; + Stack& stack = st->get_stack(); + st->consume_gas(VmState::bls_g1_neg_gas_price); + bls::P1 a = slice_to_bls_p1(*stack.pop_cellslice()); + stack.push_cellslice(bls_to_slice(bls::g1_neg(a).as_slice())); + return 0; +} + +int exec_bls_g1_mul(VmState* st) { + VM_LOG(st) << "execute BLS_G1_MUL"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + st->consume_gas(VmState::bls_g1_mul_gas_price); + td::RefInt256 x = stack.pop_int_finite(); + bls::P1 p = slice_to_bls_p1(*stack.pop_cellslice()); + stack.push_cellslice(bls_to_slice(bls::g1_mul(p, x).as_slice())); + return 0; +} + +int exec_bls_g1_multiexp(VmState* st) { + VM_LOG(st) << "execute BLS_G1_MULTIEXP"; + Stack& stack = st->get_stack(); + int n = stack.pop_smallint_range((stack.depth() - 1) / 2); + st->consume_gas(bls_calculate_multiexp_gas(n, VmState::bls_g1_multiexp_base_gas_price, + VmState::bls_g1_multiexp_coef1_gas_price, + VmState::bls_g1_multiexp_coef2_gas_price)); + std::vector> ps(n); + for (int i = n - 1; i >= 0; --i) { + ps[i].second = stack.pop_int_finite(); + ps[i].first = slice_to_bls_p1(*stack.pop_cellslice()); + } + stack.push_cellslice(bls_to_slice(bls::g1_multiexp(ps).as_slice())); + return 0; +} + +int exec_bls_g1_zero(VmState* st) { + VM_LOG(st) << "execute BLS_G1_ZERO"; + Stack& stack = st->get_stack(); + stack.push_cellslice(bls_to_slice(bls::g1_zero().as_slice())); + return 0; +} + +int exec_bls_map_to_g1(VmState* st) { + VM_LOG(st) << "execute BLS_MAP_TO_G1"; + Stack& stack = st->get_stack(); + st->consume_gas(VmState::bls_map_to_g1_gas_price); + bls::FP a = slice_to_bls_fp(*stack.pop_cellslice()); + stack.push_cellslice(bls_to_slice(bls::map_to_g1(a).as_slice())); + return 0; +} + +int exec_bls_g1_in_group(VmState* st) { + VM_LOG(st) << "execute BLS_G1_INGROUP"; + Stack& stack = st->get_stack(); + st->consume_gas(VmState::bls_g1_in_group_gas_price); + bls::P1 a = slice_to_bls_p1(*stack.pop_cellslice()); + stack.push_bool(bls::g1_in_group(a)); + return 0; +} + +int exec_bls_g1_is_zero(VmState* st) { + VM_LOG(st) << "execute BLS_G1_ISZERO"; + Stack& stack = st->get_stack(); + bls::P1 a = slice_to_bls_p1(*stack.pop_cellslice()); + stack.push_bool(bls::g1_is_zero(a)); + return 0; +} + +int exec_bls_g2_add(VmState* st) { + VM_LOG(st) << "execute BLS_G2_ADD"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + st->consume_gas(VmState::bls_g2_add_sub_gas_price); + bls::P2 b = slice_to_bls_p2(*stack.pop_cellslice()); + bls::P2 a = slice_to_bls_p2(*stack.pop_cellslice()); + stack.push_cellslice(bls_to_slice(bls::g2_add(a, b).as_slice())); + return 0; +} + +int exec_bls_g2_sub(VmState* st) { + VM_LOG(st) << "execute BLS_G2_SUB"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + st->consume_gas(VmState::bls_g2_add_sub_gas_price); + bls::P2 b = slice_to_bls_p2(*stack.pop_cellslice()); + bls::P2 a = slice_to_bls_p2(*stack.pop_cellslice()); + stack.push_cellslice(bls_to_slice(bls::g2_sub(a, b).as_slice())); + return 0; +} + +int exec_bls_g2_neg(VmState* st) { + VM_LOG(st) << "execute BLS_G2_NEG"; + Stack& stack = st->get_stack(); + st->consume_gas(VmState::bls_g2_neg_gas_price); + bls::P2 a = slice_to_bls_p2(*stack.pop_cellslice()); + stack.push_cellslice(bls_to_slice(bls::g2_neg(a).as_slice())); + return 0; +} + +int exec_bls_g2_mul(VmState* st) { + VM_LOG(st) << "execute BLS_G2_MUL"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + st->consume_gas(VmState::bls_g2_mul_gas_price); + td::RefInt256 x = stack.pop_int_finite(); + bls::P2 p = slice_to_bls_p2(*stack.pop_cellslice()); + stack.push_cellslice(bls_to_slice(bls::g2_mul(p, x).as_slice())); + return 0; +} + +int exec_bls_g2_multiexp(VmState* st) { + VM_LOG(st) << "execute BLS_G2_MULTIEXP"; + Stack& stack = st->get_stack(); + int n = stack.pop_smallint_range((stack.depth() - 1) / 2); + st->consume_gas(bls_calculate_multiexp_gas(n, VmState::bls_g2_multiexp_base_gas_price, + VmState::bls_g2_multiexp_coef1_gas_price, + VmState::bls_g2_multiexp_coef2_gas_price)); + std::vector> ps(n); + for (int i = n - 1; i >= 0; --i) { + ps[i].second = stack.pop_int_finite(); + ps[i].first = slice_to_bls_p2(*stack.pop_cellslice()); + } + stack.push_cellslice(bls_to_slice(bls::g2_multiexp(ps).as_slice())); + return 0; +} + +int exec_bls_g2_zero(VmState* st) { + VM_LOG(st) << "execute BLS_G2_ZERO"; + Stack& stack = st->get_stack(); + stack.push_cellslice(bls_to_slice(bls::g2_zero().as_slice())); + return 0; +} + +int exec_bls_map_to_g2(VmState* st) { + VM_LOG(st) << "execute BLS_MAP_TO_G2"; + Stack& stack = st->get_stack(); + st->consume_gas(VmState::bls_map_to_g2_gas_price); + bls::FP2 a = slice_to_bls_fp2(*stack.pop_cellslice()); + stack.push_cellslice(bls_to_slice(bls::map_to_g2(a).as_slice())); + return 0; +} + +int exec_bls_g2_in_group(VmState* st) { + VM_LOG(st) << "execute BLS_G2_INGROUP"; + Stack& stack = st->get_stack(); + st->consume_gas(VmState::bls_g2_in_group_gas_price); + bls::P2 a = slice_to_bls_p2(*stack.pop_cellslice()); + stack.push_bool(bls::g2_in_group(a)); + return 0; +} + +int exec_bls_g2_is_zero(VmState* st) { + VM_LOG(st) << "execute BLS_G2_ISZERO"; + Stack& stack = st->get_stack(); + bls::P2 a = slice_to_bls_p2(*stack.pop_cellslice()); + stack.push_bool(bls::g2_is_zero(a)); + return 0; +} + +int exec_bls_pairing(VmState* st) { + VM_LOG(st) << "execute BLS_PAIRING"; + Stack& stack = st->get_stack(); + int n = stack.pop_smallint_range((stack.depth() - 1) / 2); + st->consume_gas(VmState::bls_pairing_base_gas_price + (long long)n * VmState::bls_pairing_element_gas_price); + std::vector> ps(n); + for (int i = n - 1; i >= 0; --i) { + ps[i].second = slice_to_bls_p2(*stack.pop_cellslice()); + ps[i].first = slice_to_bls_p1(*stack.pop_cellslice()); + } + stack.push_bool(bls::pairing(ps)); + return 0; +} + +int exec_bls_push_r(VmState* st) { + VM_LOG(st) << "execute BLS_PUSHR"; + Stack& stack = st->get_stack(); + stack.push_int(bls::get_r()); + return 0; +} + void register_ton_crypto_ops(OpcodeTable& cp0) { using namespace std::placeholders; cp0.insert(OpcodeInstr::mksimple(0xf900, 16, "HASHCU", std::bind(exec_compute_hash, _1, 0))) .insert(OpcodeInstr::mksimple(0xf901, 16, "HASHSU", std::bind(exec_compute_hash, _1, 1))) .insert(OpcodeInstr::mksimple(0xf902, 16, "SHA256U", exec_compute_sha256)) + .insert(OpcodeInstr::mkfixed(0xf904 >> 2, 14, 10, dump_hash_ext, exec_hash_ext)->require_version(4)) .insert(OpcodeInstr::mksimple(0xf910, 16, "CHKSIGNU", std::bind(exec_ed25519_check_signature, _1, false))) - .insert(OpcodeInstr::mksimple(0xf911, 16, "CHKSIGNS", std::bind(exec_ed25519_check_signature, _1, true))); + .insert(OpcodeInstr::mksimple(0xf911, 16, "CHKSIGNS", std::bind(exec_ed25519_check_signature, _1, true))) + .insert(OpcodeInstr::mksimple(0xf912, 16, "ECRECOVER", exec_ecrecover)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf914, 16, "P256_CHKSIGNU", std::bind(exec_p256_chksign, _1, false))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf915, 16, "P256_CHKSIGNS", std::bind(exec_p256_chksign, _1, true))->require_version(4)) + + .insert(OpcodeInstr::mksimple(0xf920, 16, "RIST255_FROMHASH", exec_ristretto255_from_hash)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf921, 16, "RIST255_VALIDATE", std::bind(exec_ristretto255_validate, _1, false))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf922, 16, "RIST255_ADD", std::bind(exec_ristretto255_add, _1, false))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf923, 16, "RIST255_SUB", std::bind(exec_ristretto255_sub, _1, false))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf924, 16, "RIST255_MUL", std::bind(exec_ristretto255_mul, _1, false))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf925, 16, "RIST255_MULBASE", std::bind(exec_ristretto255_mul_base, _1, false))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf926, 16, "RIST255_PUSHL", exec_ristretto255_push_l)->require_version(4)) + + .insert(OpcodeInstr::mksimple(0xb7f921, 24, "RIST255_QVALIDATE", std::bind(exec_ristretto255_validate, _1, true))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xb7f922, 24, "RIST255_QADD", std::bind(exec_ristretto255_add, _1, true))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xb7f923, 24, "RIST255_QSUB", std::bind(exec_ristretto255_sub, _1, true))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xb7f924, 24, "RIST255_QMUL", std::bind(exec_ristretto255_mul, _1, true))->require_version(4)) + .insert(OpcodeInstr::mksimple(0xb7f925, 24, "RIST255_QMULBASE", std::bind(exec_ristretto255_mul_base, _1, true))->require_version(4)) + + .insert(OpcodeInstr::mksimple(0xf93000, 24, "BLS_VERIFY", exec_bls_verify)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93001, 24, "BLS_AGGREGATE", exec_bls_aggregate)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93002, 24, "BLS_FASTAGGREGATEVERIFY", exec_bls_fast_aggregate_verify)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93003, 24, "BLS_AGGREGATEVERIFY", exec_bls_aggregate_verify)->require_version(4)) + + .insert(OpcodeInstr::mksimple(0xf93010, 24, "BLS_G1_ADD", exec_bls_g1_add)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93011, 24, "BLS_G1_SUB", exec_bls_g1_sub)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93012, 24, "BLS_G1_NEG", exec_bls_g1_neg)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93013, 24, "BLS_G1_MUL", exec_bls_g1_mul)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93014, 24, "BLS_G1_MULTIEXP", exec_bls_g1_multiexp)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93015, 24, "BLS_G1_ZERO", exec_bls_g1_zero)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93016, 24, "BLS_MAP_TO_G1", exec_bls_map_to_g1)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93017, 24, "BLS_G1_INGROUP", exec_bls_g1_in_group)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93018, 24, "BLS_G1_ISZERO", exec_bls_g1_is_zero)->require_version(4)) + + .insert(OpcodeInstr::mksimple(0xf93020, 24, "BLS_G2_ADD", exec_bls_g2_add)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93021, 24, "BLS_G2_SUB", exec_bls_g2_sub)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93022, 24, "BLS_G2_NEG", exec_bls_g2_neg)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93023, 24, "BLS_G2_MUL", exec_bls_g2_mul)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93024, 24, "BLS_G2_MULTIEXP", exec_bls_g2_multiexp)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93025, 24, "BLS_G2_ZERO", exec_bls_g2_zero)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93026, 24, "BLS_MAP_TO_G2", exec_bls_map_to_g2)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93027, 24, "BLS_G2_INGROUP", exec_bls_g2_in_group)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93028, 24, "BLS_G2_ISZERO", exec_bls_g2_is_zero)->require_version(4)) + + .insert(OpcodeInstr::mksimple(0xf93030, 24, "BLS_PAIRING", exec_bls_pairing)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf93031, 24, "BLS_PUSHR", exec_bls_push_r)->require_version(4)); } int exec_compute_data_size(VmState* st, int mode) { @@ -769,6 +1517,219 @@ int exec_send_raw_message(VmState* st) { return install_output_action(st, cb.finalize()); } +int parse_addr_workchain(CellSlice cs) { + // anycast_info$_ depth:(#<= 30) { depth >= 1 } rewrite_pfx:(bits depth) = Anycast; + // addr_std$10 anycast:(Maybe Anycast) workchain_id:int8 address:bits256 = MsgAddressInt; + // addr_var$11 anycast:(Maybe Anycast) addr_len:(## 9) workchain_id:int32 address:(bits addr_len) = MsgAddressInt; + if (cs.fetch_ulong(1) != 1) { + throw VmError{Excno::range_chk, "not an internal MsgAddress"}; + } + bool is_var = cs.fetch_ulong(1); + if (cs.fetch_ulong(1) == 1) { // Anycast + unsigned depth; + cs.fetch_uint_leq(30, depth); + cs.skip_first(depth); + } + + if (is_var) { + cs.skip_first(9); + return (int)cs.fetch_long(32); + } else { + return (int)cs.fetch_long(8); + } +} + +int exec_send_message(VmState* st) { + VM_LOG(st) << "execute SENDMSG"; + Stack& stack = st->get_stack(); + stack.check_underflow(2); + int mode = stack.pop_smallint_range(2047); + bool send = !(mode & 1024); + mode &= ~1024; + if (mode >= 256) { + throw VmError{Excno::range_chk}; + } + Ref msg_cell = stack.pop_cell(); + + block::gen::MessageRelaxed::Record msg; + if (!tlb::type_unpack_cell(msg_cell, block::gen::t_MessageRelaxed_Any, msg)) { + throw VmError{Excno::unknown, "invalid message"}; + } + + Ref my_addr = get_param(st, 8).as_slice(); + if (my_addr.is_null()) { + throw VmError{Excno::type_chk, "invalid param MYADDR"}; + } + bool ihr_disabled; + Ref dest; + td::RefInt256 value; + td::RefInt256 user_fwd_fee, user_ihr_fee; + bool have_extra_currencies = false; + bool ext_msg = msg.info->prefetch_ulong(1); + if (ext_msg) { // External message + block::gen::CommonMsgInfoRelaxed::Record_ext_out_msg_info info; + if (!tlb::csr_unpack(msg.info, info)) { + throw VmError{Excno::unknown, "invalid message"}; + } + ihr_disabled = true; + dest = std::move(info.dest); + value = user_fwd_fee = user_ihr_fee = td::zero_refint(); + } else { // Internal message + block::gen::CommonMsgInfoRelaxed::Record_int_msg_info info; + if (!tlb::csr_unpack(msg.info, info)) { + throw VmError{Excno::unknown, "invalid message"}; + } + ihr_disabled = info.ihr_disabled; + dest = std::move(info.dest); + Ref extra; + if (!block::tlb::t_CurrencyCollection.unpack_special(info.value.write(), value, extra)) { + throw VmError{Excno::unknown, "invalid message"}; + } + have_extra_currencies = !extra.is_null(); + user_fwd_fee = block::tlb::t_Grams.as_integer(info.fwd_fee); + user_ihr_fee = block::tlb::t_Grams.as_integer(info.ihr_fee); + } + + bool is_masterchain = parse_addr_workchain(*my_addr) == -1 || (!ext_msg && parse_addr_workchain(*dest) == -1); + Ref config_dict = get_param(st, 9).as_cell(); + Dictionary config{config_dict, 32}; + Ref prices_cell = config.lookup_ref(td::BitArray<32>{is_masterchain ? 24 : 25}); + block::gen::MsgForwardPrices::Record prices; + if (prices_cell.is_null() || !tlb::unpack_cell(std::move(prices_cell), prices)) { + throw VmError{Excno::unknown, "invalid prices config"}; + } + + // msg_fwd_fees = (lump_price + ceil((bit_price * msg.bits + cell_price * msg.cells)/2^16)) nanograms + // bits in the root cell of a message are not included in msg.bits (lump_price pays for them) + vm::VmStorageStat stat(1 << 13); + CellSlice cs = load_cell_slice(msg_cell); + cs.skip_first(cs.size()); + stat.add_storage(cs); + + if (!ext_msg) { + if (mode & 128) { // value is balance of the contract + Ref balance = get_param(st, 7).as_tuple(); + if (balance.is_null()) { + throw VmError{Excno::type_chk, "invalid param BALANCE"}; + } + value = tuple_index(balance, 0).as_int(); + if (value.is_null()) { + throw VmError{Excno::type_chk, "invalid param BALANCE"}; + } + have_extra_currencies |= !tuple_index(balance, 1).as_cell().is_null(); + } else if (mode & 64) { // value += value of incoming message + Ref balance = get_param(st, 11).as_tuple(); + if (balance.is_null()) { + throw VmError{Excno::type_chk, "invalid param INCOMINGVALUE"}; + } + td::RefInt256 balance_grams = tuple_index(balance, 0).as_int(); + if (balance_grams.is_null()) { + throw VmError{Excno::type_chk, "invalid param INCOMINGVALUE"}; + } + value += balance_grams; + have_extra_currencies |= !tuple_index(balance, 1).as_cell().is_null(); + } + } + + bool have_init = msg.init->bit_at(0); + bool init_ref = have_init && msg.init->bit_at(1); + bool body_ref = msg.body->bit_at(0); + + td::RefInt256 fwd_fee, ihr_fee; + td::uint64 cells = stat.cells; + td::uint64 bits = stat.bits; + auto compute_fees = [&]() { + td::uint64 fwd_fee_short = prices.lump_price + td::uint128(prices.bit_price) + .mult(bits) + .add(td::uint128(prices.cell_price).mult(cells)) + .add(td::uint128(0xffffu)) + .shr(16) + .lo(); + td::uint64 ihr_fee_short; + if (ihr_disabled) { + ihr_fee_short = 0; + } else { + ihr_fee_short = td::uint128(fwd_fee_short).mult(prices.ihr_price_factor).shr(16).lo(); + } + fwd_fee = td::RefInt256{true, fwd_fee_short}; + ihr_fee = td::RefInt256{true, ihr_fee_short}; + fwd_fee = std::max(fwd_fee, user_fwd_fee); + if (!ihr_disabled) { + ihr_fee = std::max(ihr_fee, user_ihr_fee); + } + }; + compute_fees(); + + auto stored_grams_len = [](td::RefInt256 const& x) -> unsigned { + unsigned bits = x->bit_size(false); + return 4 + ((bits + 7) & ~7); + }; + + auto msg_root_bits = [&]() -> unsigned { + unsigned bits; + // CommonMsgInfo + if (ext_msg) { + bits = 2 + my_addr->size() + dest->size() + 32 + 64; + } else { + bits = 4 + my_addr->size() + dest->size() + stored_grams_len(value) + 1 + 32 + 64; + td::RefInt256 fwd_fee_first = (fwd_fee * prices.first_frac) >> 16; + bits += stored_grams_len(fwd_fee - fwd_fee_first); + bits += stored_grams_len(ihr_fee); + } + // init + bits++; + if (have_init) { + bits += 1 + (init_ref ? 0 : msg.init->size() - 2); + } + // body + bits++; + bits += (body_ref ? 0 : msg.body->size() - 1); + return bits; + }; + auto msg_root_refs = [&]() -> unsigned { + unsigned refs; + // CommonMsgInfo + if (ext_msg) { + refs = 0; + } else { + refs = have_extra_currencies; + } + // init + if (have_init) { + refs += (init_ref ? 1 : msg.init->size_refs()); + } + // body + refs += (body_ref ? 1 : msg.body->size_refs()); + return refs; + }; + + if (have_init && !init_ref && (msg_root_bits() > Cell::max_bits || msg_root_refs() > Cell::max_refs)) { + init_ref = true; + cells += 1; + bits += msg.init->size() - 2; + compute_fees(); + } + if (!body_ref && (msg_root_bits() > Cell::max_bits || msg_root_refs() > Cell::max_refs)) { + body_ref = true; + cells += 1; + bits += msg.body->size() - 1; + compute_fees(); + } + stack.push_int(fwd_fee + ihr_fee); + + if (send) { + CellBuilder cb; + if (!(cb.store_ref_bool(get_actions(st)) // out_list$_ {n:#} prev:^(OutList n) + && cb.store_long_bool(0x0ec3c86d, 32) // action_send_msg#0ec3c86d + && cb.store_long_bool(mode, 8) // mode:(## 8) + && cb.store_ref_bool(std::move(msg_cell)))) { + throw VmError{Excno::cell_ov, "cannot serialize raw output message into an output action cell"}; + } + return install_output_action(st, cb.finalize()); + } + return 0; +} + bool store_grams(CellBuilder& cb, td::RefInt256 value) { int k = value->bit_size(false); return k <= 15 * 8 && cb.store_long_bool((k + 7) >> 3, 4) && cb.store_int256_bool(*value, (k + 7) & -8, false); @@ -778,7 +1739,7 @@ int exec_reserve_raw(VmState* st, int mode) { VM_LOG(st) << "execute RAWRESERVE" << (mode & 1 ? "X" : ""); Stack& stack = st->get_stack(); stack.check_underflow(2 + (mode & 1)); - int f = stack.pop_smallint_range(15); + int f = stack.pop_smallint_range(st->get_global_version() >= 4 ? 31 : 15); Ref y; if (mode & 1) { y = stack.pop_maybe_cell(); @@ -814,12 +1775,20 @@ int exec_set_lib_code(VmState* st) { VM_LOG(st) << "execute SETLIBCODE"; Stack& stack = st->get_stack(); stack.check_underflow(2); - int mode = stack.pop_smallint_range(2); + int mode; + if (st->get_global_version() >= 4) { + mode = stack.pop_smallint_range(31); + if ((mode & ~16) > 2) { + throw VmError{Excno::range_chk}; + } + } else { + mode = stack.pop_smallint_range(2); + } auto code = stack.pop_cell(); CellBuilder cb; if (!(cb.store_ref_bool(get_actions(st)) // out_list$_ {n:#} prev:^(OutList n) && cb.store_long_bool(0x26fa1dd4, 32) // action_change_library#26fa1dd4 - && cb.store_long_bool(mode * 2 + 1, 8) // mode:(## 7) { mode <= 2 } + && cb.store_long_bool(mode * 2 + 1, 8) // mode:(## 7) && cb.store_ref_bool(std::move(code)))) { // libref:LibRef = OutAction; throw VmError{Excno::cell_ov, "cannot serialize new library code into an output action cell"}; } @@ -830,7 +1799,15 @@ int exec_change_lib(VmState* st) { VM_LOG(st) << "execute CHANGELIB"; Stack& stack = st->get_stack(); stack.check_underflow(2); - int mode = stack.pop_smallint_range(2); + int mode; + if (st->get_global_version() >= 4) { + mode = stack.pop_smallint_range(31); + if ((mode & ~16) > 2) { + throw VmError{Excno::range_chk}; + } + } else { + mode = stack.pop_smallint_range(2); + } auto hash = stack.pop_int_finite(); if (!hash->unsigned_fits_bits(256)) { throw VmError{Excno::range_chk, "library hash must be non-negative"}; @@ -852,7 +1829,8 @@ void register_ton_message_ops(OpcodeTable& cp0) { .insert(OpcodeInstr::mksimple(0xfb03, 16, "RAWRESERVEX", std::bind(exec_reserve_raw, _1, 1))) .insert(OpcodeInstr::mksimple(0xfb04, 16, "SETCODE", exec_set_code)) .insert(OpcodeInstr::mksimple(0xfb06, 16, "SETLIBCODE", exec_set_lib_code)) - .insert(OpcodeInstr::mksimple(0xfb07, 16, "CHANGELIB", exec_change_lib)); + .insert(OpcodeInstr::mksimple(0xfb07, 16, "CHANGELIB", exec_change_lib)) + .insert(OpcodeInstr::mksimple(0xfb08, 16, "SENDMSG", exec_send_message)->require_version(4)); } void register_ton_ops(OpcodeTable& cp0) { diff --git a/crypto/vm/tupleops.cpp b/crypto/vm/tupleops.cpp index ef906f6a..f4be2c76 100644 --- a/crypto/vm/tupleops.cpp +++ b/crypto/vm/tupleops.cpp @@ -99,7 +99,7 @@ int exec_mktuple_var(VmState* st) { int exec_tuple_index_common(Stack& stack, unsigned n) { auto tuple = stack.pop_tuple_range(255); - stack.push(tuple_index(*tuple, n)); + stack.push(tuple_index(tuple, n)); return 0; } @@ -322,11 +322,11 @@ int exec_tuple_index2(VmState* st, unsigned args) { VM_LOG(st) << "execute INDEX2 " << i << "," << j; Stack& stack = st->get_stack(); auto tuple = stack.pop_tuple_range(255); - auto t1 = tuple_index(*tuple, i).as_tuple_range(255); + auto t1 = tuple_index(tuple, i).as_tuple_range(255); if (t1.is_null()) { throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; } - stack.push(tuple_index(*t1, j)); + stack.push(tuple_index(t1, j)); return 0; } @@ -342,15 +342,15 @@ int exec_tuple_index3(VmState* st, unsigned args) { VM_LOG(st) << "execute INDEX3 " << i << "," << j << "," << k; Stack& stack = st->get_stack(); auto tuple = stack.pop_tuple_range(255); - auto t1 = tuple_index(*tuple, i).as_tuple_range(255); + auto t1 = tuple_index(tuple, i).as_tuple_range(255); if (t1.is_null()) { throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; } - auto t2 = tuple_index(*t1, j).as_tuple_range(255); + auto t2 = tuple_index(t1, j).as_tuple_range(255); if (t2.is_null()) { throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; } - stack.push(tuple_index(*t2, k)); + stack.push(tuple_index(t2, k)); return 0; } diff --git a/crypto/vm/vm.cpp b/crypto/vm/vm.cpp index fbea1952..630f4991 100644 --- a/crypto/vm/vm.cpp +++ b/crypto/vm/vm.cpp @@ -389,7 +389,7 @@ int VmState::throw_exception(int excno) { stack_ref.push_smallint(0); stack_ref.push_smallint(excno); code.clear(); - gas.consume_chk(exception_gas_price); + consume_gas_chk(exception_gas_price); return jump(get_c2()); } @@ -399,7 +399,7 @@ int VmState::throw_exception(int excno, StackEntry&& arg) { stack_ref.push(std::move(arg)); stack_ref.push_smallint(excno); code.clear(); - gas.consume_chk(exception_gas_price); + consume_gas_chk(exception_gas_price); return jump(get_c2()); } @@ -453,54 +453,41 @@ int VmState::step() { VM_LOG(this) << "execute implicit JMPREF"; auto ref_cell = code->prefetch_ref(); VM_LOG_MASK(this, vm::VmLog::ExecLocation) << "code cell hash: " << ref_cell->get_hash().to_hex() << " offset: 0"; - gas.consume_chk(implicit_jmpref_gas_price); + consume_gas_chk(implicit_jmpref_gas_price); Ref cont = Ref{true, load_cell_slice_ref(std::move(ref_cell)), get_cp()}; return jump(std::move(cont)); } else { VM_LOG(this) << "execute implicit RET"; - gas.consume_chk(implicit_ret_gas_price); + consume_gas_chk(implicit_ret_gas_price); return ret(); } } -int VmState::run() { - if (code.is_null() || stack.is_null()) { - // throw VmError{Excno::fatal, "cannot run an uninitialized VM"}; - return (int)Excno::fatal; // no ~ for unhandled exceptions - } +int VmState::run_inner() { int res; Guard guard(this); do { try { try { - try { - res = step(); - VM_LOG_MASK(this, vm::VmLog::GasRemaining) << "gas remaining: " << gas.gas_remaining; - gas.check(); - } catch (vm::CellBuilder::CellWriteError) { - throw VmError{Excno::cell_ov}; - } catch (vm::CellBuilder::CellCreateError) { - throw VmError{Excno::cell_ov}; - } catch (vm::CellSlice::CellReadError) { - throw VmError{Excno::cell_und}; - } - } catch (const VmError& vme) { - VM_LOG(this) << "handling exception code " << vme.get_errno() << ": " << vme.get_msg(); - try { - ++steps; - res = throw_exception(vme.get_errno()); - } catch (const VmError& vme2) { - VM_LOG(this) << "exception " << vme2.get_errno() << " while handling exception: " << vme.get_msg(); - return ~vme2.get_errno(); - } + res = step(); + VM_LOG_MASK(this, vm::VmLog::GasRemaining) << "gas remaining: " << gas.gas_remaining; + gas.check(); + } catch (vm::CellBuilder::CellWriteError) { + throw VmError{Excno::cell_ov}; + } catch (vm::CellBuilder::CellCreateError) { + throw VmError{Excno::cell_ov}; + } catch (vm::CellSlice::CellReadError) { + throw VmError{Excno::cell_und}; + } + } catch (const VmError& vme) { + VM_LOG(this) << "handling exception code " << vme.get_errno() << ": " << vme.get_msg(); + try { + ++steps; + res = throw_exception(vme.get_errno()); + } catch (const VmError& vme2) { + VM_LOG(this) << "exception " << vme2.get_errno() << " while handling exception: " << vme.get_msg(); + return ~vme2.get_errno(); } - } catch (VmNoGas vmoog) { - ++steps; - VM_LOG(this) << "unhandled out-of-gas exception: gas consumed=" << gas.gas_consumed() - << ", limit=" << gas.gas_limit; - get_stack().clear(); - get_stack().push_smallint(gas.gas_consumed()); - return vmoog.get_errno(); // no ~ for unhandled exceptions (to make their faking impossible) } } while (!res); if ((res | 1) == -1 && !try_commit()) { @@ -512,6 +499,34 @@ int VmState::run() { return res; } +int VmState::run() { + if (code.is_null() || stack.is_null()) { + // throw VmError{Excno::fatal, "cannot run an uninitialized VM"}; + return (int)Excno::fatal; // no ~ for unhandled exceptions + } + int res = 0; + bool restore_parent = false; + while (true) { + try { + if (restore_parent) { + restore_parent_vm(~res); + } + res = run_inner(); + } catch (VmNoGas &vmoog) { + ++steps; + VM_LOG(this) << "unhandled out-of-gas exception: gas consumed=" << gas.gas_consumed() + << ", limit=" << gas.gas_limit; + get_stack().clear(); + get_stack().push_smallint(gas.gas_consumed()); + res = vmoog.get_errno(); // no ~ for unhandled exceptions (to make their faking impossible) + } + if (!parent) { + return res; + } + restore_parent = true; + } +} + bool VmState::try_commit() { if (cr.d[0].not_null() && cr.d[1].not_null() && cr.d[0]->get_depth() <= max_data_depth && cr.d[1]->get_depth() <= max_data_depth && cr.d[0]->get_level() == 0 && cr.d[1]->get_level() == 0) { @@ -544,7 +559,8 @@ ControlRegs* force_cregs(Ref& cont) { } int run_vm_code(Ref code, Ref& stack, int flags, Ref* data_ptr, VmLog log, long long* steps, - GasLimits* gas_limits, std::vector> libraries, Ref init_c7, Ref* actions_ptr) { + GasLimits* gas_limits, std::vector> libraries, Ref init_c7, Ref* actions_ptr, + int global_version) { VmState vm{code, std::move(stack), gas_limits ? *gas_limits : GasLimits{}, @@ -553,6 +569,7 @@ int run_vm_code(Ref code, Ref& stack, int flags, Ref* da log, std::move(libraries), std::move(init_c7)}; + vm.set_global_version(global_version); int res = vm.run(); stack = vm.get_stack_ref(); if (vm.committed() && data_ptr) { @@ -582,12 +599,13 @@ int run_vm_code(Ref code, Ref& stack, int flags, Ref* da } int run_vm_code(Ref code, Stack& stack, int flags, Ref* data_ptr, VmLog log, long long* steps, - GasLimits* gas_limits, std::vector> libraries, Ref init_c7, Ref* actions_ptr) { + GasLimits* gas_limits, std::vector> libraries, Ref init_c7, Ref* actions_ptr, + int global_version) { Ref stk{true}; stk.unique_write().set_contents(std::move(stack)); stack.clear(); int res = run_vm_code(code, stk, flags, data_ptr, log, steps, gas_limits, std::move(libraries), std::move(init_c7), - actions_ptr); + actions_ptr, global_version); CHECK(stack.is_unique()); if (stk.is_null()) { stack.clear(); @@ -608,7 +626,7 @@ int run_vm_code(Ref code, Stack& stack, int flags, Ref* data_pt Ref VmState::load_library(td::ConstBitPtr hash) { std::unique_ptr tmp_ctx; // install temporary dummy vm state interface to prevent charging for cell load operations during library lookup - VmStateInterface::Guard(tmp_ctx.get()); + VmStateInterface::Guard guard{global_version >= 4 ? tmp_ctx.get() : VmStateInterface::get()}; for (const auto& lib_collection : libraries) { auto lib = lookup_library_in(hash, lib_collection); if (lib.not_null()) { @@ -632,9 +650,6 @@ void VmState::register_cell_load(const CellHash& cell_hash) { consume_gas(cell_load_gas_price); } else { auto ok = loaded_cells.insert(cell_hash); // check whether this is the first time this cell is loaded - if (ok.second) { - loaded_cells_count++; - } consume_gas(ok.second ? cell_load_gas_price : cell_reload_gas_price); } } @@ -681,4 +696,78 @@ Ref lookup_library_in(td::ConstBitPtr key, Ref lib_root) { return lookup_library_in(key, dict); } +void VmState::run_child_vm(VmState&& new_state, bool return_data, bool return_actions, bool return_gas, + bool isolate_gas, int ret_vals) { + new_state.log = std::move(log); + new_state.libraries = std::move(libraries); + new_state.stack_trace = stack_trace; + new_state.max_data_depth = max_data_depth; + if (!isolate_gas) { + new_state.loaded_cells = std::move(loaded_cells); + } else { + consume_gas(std::min(chksgn_counter, chksgn_free_count) * chksgn_gas_price); + chksgn_counter = 0; + } + new_state.chksgn_counter = chksgn_counter; + + auto new_parent = std::make_unique(); + new_parent->return_data = return_data; + new_parent->return_actions = return_actions; + new_parent->return_gas = return_gas; + new_parent->isolate_gas = isolate_gas; + new_parent->ret_vals = ret_vals; + new_parent->state = std::move(*this); + new_state.parent = std::move(new_parent); + *this = std::move(new_state); +} + +void VmState::restore_parent_vm(int res) { + auto parent = std::move(this->parent); + CHECK(parent); + VmState child_state = std::move(*this); + *this = std::move(parent->state); + log = std::move(child_state.log); + libraries = std::move(child_state.libraries); + steps += child_state.steps; + if (!parent->isolate_gas) { + loaded_cells = std::move(child_state.loaded_cells); + } + chksgn_counter = child_state.chksgn_counter; + VM_LOG(this) << "Child VM finished. res: " << res << ", steps: " << child_state.steps + << ", gas: " << child_state.gas_consumed(); + + consume_gas(std::min(child_state.gas_consumed(), child_state.gas.gas_limit + 1)); + Stack& cur_stack = get_stack(); + int ret_cnt; + if (res == 0 || res == 1) { + if (parent->ret_vals >= 0) { + if (child_state.stack->depth() >= parent->ret_vals) { + ret_cnt = parent->ret_vals; + } else { + ret_cnt = 0; + res = ~(int)Excno::stk_und; + cur_stack.push(td::zero_refint()); + } + } else { + ret_cnt = child_state.stack->depth(); + } + } else { + ret_cnt = std::min(child_state.stack->depth(), 1); + } + consume_stack_gas(ret_cnt); + for (int i = ret_cnt - 1; i >= 0; --i) { + cur_stack.push(std::move(child_state.stack->at(i))); + } + cur_stack.push_smallint(res); + if (parent->return_data) { + cur_stack.push_cell(child_state.get_committed_state().c4); + } + if (parent->return_actions) { + cur_stack.push_cell(child_state.get_committed_state().c5); + } + if (parent->return_gas) { + cur_stack.push_smallint(child_state.gas.gas_consumed()); + } +} + } // namespace vm diff --git a/crypto/vm/vm.h b/crypto/vm/vm.h index 17ce1aa3..c8649477 100644 --- a/crypto/vm/vm.h +++ b/crypto/vm/vm.h @@ -80,6 +80,8 @@ struct CommittedState { bool committed{false}; }; +struct ParentVmState; + class VmState final : public VmStateInterface { Ref code; Ref stack; @@ -93,11 +95,13 @@ class VmState final : public VmStateInterface { GasLimits gas; std::vector> libraries; td::HashSet loaded_cells; - td::int64 loaded_cells_count{0}; int stack_trace{0}, debug_off{0}; bool chksig_always_succeed{false}; td::ConstBitPtr missing_library{0}; td::uint16 max_data_depth = 512; // Default value + int global_version{0}; + size_t chksgn_counter = 0; + std::unique_ptr parent = nullptr; public: enum { @@ -109,7 +113,51 @@ class VmState final : public VmStateInterface { implicit_jmpref_gas_price = 10, implicit_ret_gas_price = 5, free_stack_depth = 32, - stack_entry_gas_price = 1 + stack_entry_gas_price = 1, + runvm_gas_price = 40, + hash_ext_entry_gas_price = 1, + + rist255_mul_gas_price = 2000, + rist255_mulbase_gas_price = 750, + rist255_add_gas_price = 600, + rist255_fromhash_gas_price = 600, + rist255_validate_gas_price = 200, + + ecrecover_gas_price = 1500, + chksgn_free_count = 10, + chksgn_gas_price = 4000, + p256_chksgn_gas_price = 3500, + + bls_verify_gas_price = 61300, + bls_aggregate_base_gas_price = -2645, + bls_aggregate_element_gas_price = 4355, + bls_fast_aggregate_verify_base_gas_price = 58400, + bls_fast_aggregate_verify_element_gas_price = 2990, + bls_aggregate_verify_base_gas_price = 37275, + bls_aggregate_verify_element_gas_price = 22290, + + bls_g1_add_sub_gas_price = 3925, + bls_g1_neg_gas_price = 765, + bls_g1_mul_gas_price = 5180, + bls_map_to_g1_gas_price = 2330, + bls_g1_in_group_gas_price = 2930, + + bls_g2_add_sub_gas_price = 6100, + bls_g2_neg_gas_price = 1550, + bls_g2_mul_gas_price = 10530, + bls_map_to_g2_gas_price = 7970, + bls_g2_in_group_gas_price = 4255, + + // multiexp gas = base + n * coef1 + n/floor(max(log2(n), 4)) * coef2 + bls_g1_multiexp_base_gas_price = 11375, + bls_g1_multiexp_coef1_gas_price = 630, + bls_g1_multiexp_coef2_gas_price = 8820, + bls_g2_multiexp_base_gas_price = 30388, + bls_g2_multiexp_coef1_gas_price = 1280, + bls_g2_multiexp_coef2_gas_price = 22840, + + bls_pairing_base_gas_price = 20000, + bls_pairing_element_gas_price = 11770 }; VmState(); VmState(Ref _code); @@ -122,9 +170,9 @@ class VmState final : public VmStateInterface { : VmState(convert_code_cell(std::move(code_cell)), std::forward(args)...) { } VmState(const VmState&) = delete; - VmState(VmState&&) = delete; + VmState(VmState&&) = default; VmState& operator=(const VmState&) = delete; - VmState& operator=(VmState&&) = delete; + VmState& operator=(VmState&&) = default; bool set_gas_limits(long long _max, long long _limit, long long _credit = 0); bool final_gas_ok() const { return gas.final_ok(); @@ -138,8 +186,15 @@ class VmState final : public VmStateInterface { const CommittedState& get_committed_state() const { return cstate; } + void consume_gas_chk(long long amount) { + gas.consume_chk(amount); + } void consume_gas(long long amount) { - gas.consume(amount); + if (global_version >= 4) { + gas.consume_chk(amount); + } else { + gas.consume(amount); + } } void consume_tuple_gas(unsigned tuple_len) { consume_gas(tuple_len * tuple_entry_gas_price); @@ -283,6 +338,12 @@ class VmState final : public VmStateInterface { void preclear_cr(const ControlRegs& save) { cr &= save; } + int get_global_version() const { + return global_version; + } + void set_global_version(int version) { + global_version = version; + } int call(Ref cont); int call(Ref cont, int pass_args, int ret_args = -1); int jump(Ref cont); @@ -328,17 +389,36 @@ class VmState final : public VmStateInterface { void set_max_data_depth(td::uint16 depth) { max_data_depth = depth; } + void run_child_vm(VmState&& new_state, bool return_data, bool return_actions, bool return_gas, bool isolate_gas, + int ret_vals); + void restore_parent_vm(int res); + + void register_chksgn_call() { + if (global_version >= 4) { + ++chksgn_counter; + if (chksgn_counter > chksgn_free_count) { + consume_gas(chksgn_gas_price); + } + } + } private: void init_cregs(bool same_c3 = false, bool push_0 = true); + int run_inner(); +}; + +struct ParentVmState { + VmState state; + bool return_data, return_actions, return_gas, isolate_gas; + int ret_vals; }; int run_vm_code(Ref _code, Ref& _stack, int flags = 0, Ref* data_ptr = nullptr, VmLog log = {}, long long* steps = nullptr, GasLimits* gas_limits = nullptr, std::vector> libraries = {}, - Ref init_c7 = {}, Ref* actions_ptr = nullptr); + Ref init_c7 = {}, Ref* actions_ptr = nullptr, int global_version = 0); int run_vm_code(Ref _code, Stack& _stack, int flags = 0, Ref* data_ptr = nullptr, VmLog log = {}, long long* steps = nullptr, GasLimits* gas_limits = nullptr, std::vector> libraries = {}, - Ref init_c7 = {}, Ref* actions_ptr = nullptr); + Ref init_c7 = {}, Ref* actions_ptr = nullptr, int global_version = 0); Ref lookup_library_in(td::ConstBitPtr key, Ref lib_root); diff --git a/doc/GlobalVersions.md b/doc/GlobalVersions.md new file mode 100644 index 00000000..ccfca940 --- /dev/null +++ b/doc/GlobalVersions.md @@ -0,0 +1,39 @@ +# Global versions +Global version is a parameter specified in `ConfigParam 8` ([block.tlb](https://github.com/ton-blockchain/ton/blob/master/crypto/block/block.tlb#L595)). +Various features are enabled depending on the global version. + +## Version 4 + +### New TVM instructions +* `PREVMCBLOCKS`, `PREVKEYBLOCK` +* `GLOBALID` +* `HASHEXT(A)(R)` +* `ECRECOVER` +* `SENDMSG` +* `RUNVM`, `RUNVMX` +* `GASCONSUMED` +* `RIST255_...` instructions +* `BLS_...` instructions +* `P256_CHKSIGNS`, `P256_CHKSIGNU` + +### Division +[Division instruction](https://ton.org/docs/learn/tvm-instructions/instructions#52-division) can add a number to the +intermediate value before division (e.g. `(xy+w)/z`). + +### Stack operations +* Arguments of `PICK`, `ROLL`, `ROLLREV`, `BLKSWX`, `REVX`, `DROPX`, `XCHGX`, `CHKDEPTH`, `ONLYTOPX`, `ONLYX` are now unlimited. +* `ROLL`, `ROLLREV`, `BLKSWX`, `REVX`, `ONLYTOPX` consume more gas when arguments are big. + +### c7 tuple +**c7** tuple extended from 10 to 14 elements: +* **10**: code of the smart contract. +* **11**: value of the incoming message. +* **12**: fees collected in the storage phase. +* **13**: information about previous blocks. + +### Action phase +* If "send message" action fails, the account is required to pay for processing cells of the message. +* Flag +16 in actions "Send message", "Reserve", "Change library" causes bounce if action fails. + +### Storage phase +* Unpaid storage fee is now saved to `due_payment` \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile index 38ea6267..595b4d87 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,6 +1,6 @@ FROM ubuntu:20.04 as builder RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential cmake clang-6.0 openssl libmicrohttpd-dev pkg-config libssl-dev zlib1g-dev gperf wget git ninja-build && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential cmake clang-6.0 openssl libssl-dev zlib1g-dev gperf wget git ninja-build libsecp256k1-dev libsodium-dev libmicrohttpd-dev pkg-config && \ rm -rf /var/lib/apt/lists/* ENV CC clang-6.0 ENV CXX clang++-6.0 diff --git a/emulator/CMakeLists.txt b/emulator/CMakeLists.txt index 1389050c..c23f071c 100644 --- a/emulator/CMakeLists.txt +++ b/emulator/CMakeLists.txt @@ -63,3 +63,5 @@ if (USE_EMSCRIPTEN) endif() target_compile_options(emulator-emscripten PRIVATE -fexceptions) endif() + +install(TARGETS emulator LIBRARY DESTINATION lib) diff --git a/emulator/emulator-extern.cpp b/emulator/emulator-extern.cpp index c5717dcd..0ffc316a 100644 --- a/emulator/emulator-extern.cpp +++ b/emulator/emulator-extern.cpp @@ -336,6 +336,33 @@ bool transaction_emulator_set_debug_enabled(void *transaction_emulator, bool deb return true; } +bool transaction_emulator_set_prev_blocks_info(void *transaction_emulator, const char* info_boc) { + auto emulator = static_cast(transaction_emulator); + + if (info_boc != nullptr) { + auto info_cell = boc_b64_to_cell(info_boc); + if (info_cell.is_error()) { + LOG(ERROR) << "Can't deserialize previous blocks boc: " << info_cell.move_as_error(); + return false; + } + vm::StackEntry info_value; + if (!info_value.deserialize(info_cell.move_as_ok())) { + LOG(ERROR) << "Can't deserialize previous blocks tuple"; + return false; + } + if (info_value.is_null()) { + emulator->set_prev_blocks_info({}); + } else if (info_value.is_tuple()) { + emulator->set_prev_blocks_info(info_value.as_tuple()); + } else { + LOG(ERROR) << "Can't set previous blocks tuple: not a tuple"; + return false; + } + } + + return true; +} + void transaction_emulator_destroy(void *transaction_emulator) { delete static_cast(transaction_emulator); } diff --git a/emulator/emulator-extern.h b/emulator/emulator-extern.h index c2b0bf9a..4409608f 100644 --- a/emulator/emulator-extern.h +++ b/emulator/emulator-extern.h @@ -72,6 +72,14 @@ EMULATOR_EXPORT bool transaction_emulator_set_libs(void *transaction_emulator, c */ EMULATOR_EXPORT bool transaction_emulator_set_debug_enabled(void *transaction_emulator, bool debug_enabled); +/** + * @brief Set tuple of previous blocks (13th element of c7) + * @param transaction_emulator Pointer to TransactionEmulator object + * @param info_boc Base64 encoded BoC serialized TVM tuple (VmStackValue). + * @return true in case of success, false in case of error + */ +EMULATOR_EXPORT bool transaction_emulator_set_prev_blocks_info(void *transaction_emulator, const char* info_boc); + /** * @brief Emulate transaction * @param transaction_emulator Pointer to TransactionEmulator object diff --git a/emulator/emulator_export_list b/emulator/emulator_export_list index 950c57a0..acd79df8 100644 --- a/emulator/emulator_export_list +++ b/emulator/emulator_export_list @@ -6,6 +6,7 @@ _transaction_emulator_set_ignore_chksig _transaction_emulator_set_config _transaction_emulator_set_libs _transaction_emulator_set_debug_enabled +_transaction_emulator_set_prev_blocks_info _transaction_emulator_emulate_transaction _transaction_emulator_emulate_tick_tock_transaction _transaction_emulator_destroy diff --git a/emulator/transaction-emulator.cpp b/emulator/transaction-emulator.cpp index 7c8ade62..505c0c37 100644 --- a/emulator/transaction-emulator.cpp +++ b/emulator/transaction-emulator.cpp @@ -25,7 +25,7 @@ td::Result> TransactionEmu utime = (unsigned)std::time(nullptr); } - auto fetch_res = block::FetchConfigParams::fetch_config_params(config_, &old_mparams, + auto fetch_res = block::FetchConfigParams::fetch_config_params(config_, prev_blocks_info_, &old_mparams, &storage_prices, &storage_phase_cfg, &rand_seed_, &compute_phase_cfg, &action_phase_cfg, &masterchain_create_fee, @@ -261,4 +261,8 @@ void TransactionEmulator::set_debug_enabled(bool debug_enabled) { debug_enabled_ = debug_enabled; } +void TransactionEmulator::set_prev_blocks_info(td::Ref prev_blocks_info) { + prev_blocks_info_ = std::move(prev_blocks_info); +} + } // namespace emulator diff --git a/emulator/transaction-emulator.h b/emulator/transaction-emulator.h index b26f4e8a..8186a3c4 100644 --- a/emulator/transaction-emulator.h +++ b/emulator/transaction-emulator.h @@ -17,9 +17,10 @@ class TransactionEmulator { td::BitArray<256> rand_seed_; bool ignore_chksig_; bool debug_enabled_; + td::Ref prev_blocks_info_; public: - TransactionEmulator(block::Config&& config, int vm_log_verbosity = 0) : + TransactionEmulator(block::Config&& config, int vm_log_verbosity = 0) : config_(std::move(config)), libraries_(256), vm_log_verbosity_(vm_log_verbosity), unixtime_(0), lt_(0), rand_seed_(td::BitArray<256>::zero()), ignore_chksig_(false), debug_enabled_(false) { } @@ -35,7 +36,7 @@ public: struct EmulationSuccess: EmulationResult { td::Ref transaction; block::Account account; - td::Ref actions; + td::Ref actions; EmulationSuccess(td::Ref transaction_, block::Account account_, std::string vm_log_, td::Ref actions_, double elapsed_time_) : EmulationResult(vm_log_, elapsed_time_), transaction(transaction_), account(account_) , actions(actions_) @@ -45,8 +46,8 @@ public: struct EmulationExternalNotAccepted: EmulationResult { int vm_exit_code; - EmulationExternalNotAccepted(std::string vm_log_, int vm_exit_code_, double elapsed_time_) : - EmulationResult(vm_log_, elapsed_time_), vm_exit_code(vm_exit_code_) + EmulationExternalNotAccepted(std::string vm_log_, int vm_exit_code_, double elapsed_time_) : + EmulationResult(vm_log_, elapsed_time_), vm_exit_code(vm_exit_code_) {} }; @@ -76,6 +77,7 @@ public: void set_config(block::Config &&config); void set_libs(vm::Dictionary &&libs); void set_debug_enabled(bool debug_enabled); + void set_prev_blocks_info(td::Ref prev_blocks_info); private: bool check_state_update(const block::Account& account, const block::gen::Transaction::Record& trans); diff --git a/example/android/CMakeLists.txt b/example/android/CMakeLists.txt index fc8067dd..b9651f61 100644 --- a/example/android/CMakeLists.txt +++ b/example/android/CMakeLists.txt @@ -37,9 +37,6 @@ add_subdirectory(${TON_DIR} ton EXCLUDE_FROM_ALL) target_link_libraries(native-lib tonlibjson) target_link_libraries(native-lib tonlib) -#target_sources(native-lib PRIVATE ${ALL_TEST_SOURCE}) -#target_link_libraries(native-lib all_tests) - set(TONLIB_API_JAVA_PACKAGE "drinkless/org/ton") target_compile_definitions(native-lib PRIVATE PACKAGE_NAME="${TONLIB_API_JAVA_PACKAGE}") diff --git a/example/android/README.md b/example/android/README.md index 0d10ff1e..f17ba9d2 100644 --- a/example/android/README.md +++ b/example/android/README.md @@ -16,6 +16,10 @@ export JAVA_INCLUDE_PATH2=${JAVA_HOME}/include/linux export ANDROID_NDK_ROOT=$(pwd)/android-ndk-r25b export OPENSSL_DIR=$(pwd)/example/android/third_party/crypto +export SECP256K1_INCLUDE_DIR=$(pwd)/example/android/third_party/secp256k1/include +export SECP256K1_LIBRARY=$(pwd)/example/android/third_party/secp256k1/.libs/libsecp256k1.a +export SODIUM_INCLUDE_DIR=$(pwd)/example/android/third_party/libsodium/libsodium-android-westmere/include +export SODIUM_LIBRARY=$(pwd)/example/android/third_party/libsodium/libsodium-android-westmere/lib/libsodium.a rm -rf example/android/src/drinkless/org/ton/TonApi.java cd example/android/ diff --git a/example/android/build-all.sh b/example/android/build-all.sh index e1abc469..f436e361 100755 --- a/example/android/build-all.sh +++ b/example/android/build-all.sh @@ -1,5 +1,16 @@ #!/bin/bash +echo Building tonlib for x86... +echo ARCH="x86" ./build.sh || exit 1 + +echo Building tonlib for x86_64... +echo ARCH="x86_64" ./build.sh || exit 1 + +echo Building tonlib for arm... +echo ARCH="arm" ./build.sh || exit 1 + +echo Building tonlib for arm64... +echo ARCH="arm64" ./build.sh || exit 1 diff --git a/example/android/build.sh b/example/android/build.sh index 61681da2..8cecfa41 100755 --- a/example/android/build.sh +++ b/example/android/build.sh @@ -1,43 +1,62 @@ #!/bin/bash + pushd . -# ANDROID_TOOLCHAIN -# ANDROID_ABI -# ANDROID_PLATFORM -# ANDROID_STL -# ANDROID_PIE -# ANDROID_CPP_FEATURES -# ANDROID_ALLOW_UNDEFINED_SYMBOLS -# ANDROID_ARM_MODE -# ANDROID_ARM_NEON -# ANDROID_DISABLE_FORMAT_STRING_CHECKS -# ANDROID_CCACHE + +SECP256K1_INCLUDE_DIR=$(pwd)/third_party/secp256k1/include +OPENSSL_DIR=$(pwd)/third_party/crypto/ if [ $ARCH == "arm" ] then ABI="armeabi-v7a" + SODIUM_INCLUDE_DIR=$(pwd)/third_party/libsodium/libsodium-android-armv7-a/include + SODIUM_LIBRARY_RELEASE=$(pwd)/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.a + SECP256K1_LIBRARY=$(pwd)/third_party/secp256k1/armv7/libsecp256k1.a + BLST_LIBRARY=$(pwd)/third_party/blst/armv7/libblst.a elif [ $ARCH == "x86" ] then ABI=$ARCH + SODIUM_INCLUDE_DIR=$(pwd)/third_party/libsodium/libsodium-android-i686/include + SODIUM_LIBRARY_RELEASE=$(pwd)/third_party/libsodium/libsodium-android-i686/lib/libsodium.a + SECP256K1_LIBRARY=$(pwd)/third_party/secp256k1/i686/libsecp256k1.a + BLST_LIBRARY=$(pwd)/third_party/blst/i686/libblst.a + TARGET=i686-linux-android21 elif [ $ARCH == "x86_64" ] then ABI=$ARCH + SODIUM_INCLUDE_DIR=$(pwd)/third_party/libsodium/libsodium-android-westmere/include + SODIUM_LIBRARY_RELEASE=$(pwd)/third_party/libsodium/libsodium-android-westmere/lib/libsodium.a + SECP256K1_LIBRARY=$(pwd)/third_party/secp256k1/x86-64/libsecp256k1.a + BLST_LIBRARY=$(pwd)/third_party/blst/x86-64/libblst.a elif [ $ARCH == "arm64" ] then ABI="arm64-v8a" + SODIUM_INCLUDE_DIR=$(pwd)/third_party/libsodium/libsodium-android-armv8-a/include + SODIUM_LIBRARY_RELEASE=$(pwd)/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.a + SECP256K1_LIBRARY=$(pwd)/third_party/secp256k1/armv8/libsecp256k1.a + BLST_LIBRARY=$(pwd)/third_party/blst/armv8/libblst.a fi + ARCH=$ABI -echo $ABI mkdir -p build-$ARCH cd build-$ARCH +cmake .. -GNinja -DPORTABLE=1 \ +-DANDROID_ABI=x86 -DANDROID_PLATFORM=android-32 -DANDROID_NDK=${ANDROID_NDK_ROOT} \ +-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake \ +-DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=${ABI} \ +-DOPENSSL_ROOT_DIR=${OPENSSL_DIR}/${ARCH} -DTON_ARCH="" \ +-DTON_ONLY_TONLIB=ON \ +-DSECP256K1_INCLUDE_DIR=${SECP256K1_INCLUDE_DIR} -DSECP256K1_LIBRARY=${SECP256K1_LIBRARY} \ +-DSODIUM_INCLUDE_DIR=${SODIUM_INCLUDE_DIR} -DSODIUM_LIBRARY_RELEASE=${SODIUM_LIBRARY_RELEASE} \ +-DSODIUM_USE_STATIC_LIBS=1 \ +-DBLST_LIB=${BLST_LIBRARY} || exit 1 -cmake .. -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -GNinja -DANDROID_ABI=${ABI} -DOPENSSL_ROOT_DIR=${OPENSSL_DIR}/${ARCH} -DTON_ARCH="" -DTON_ONLY_TONLIB=ON -DBUILD_SHARED_LIBS=OFF || exit 1 ninja native-lib || exit 1 popd +$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip build-$ARCH/libnative-lib.so + mkdir -p libs/$ARCH/ cp build-$ARCH/libnative-lib.so* libs/$ARCH/ - - diff --git a/example/android/third_party/blst/armv7/libblst.a b/example/android/third_party/blst/armv7/libblst.a new file mode 100644 index 0000000000000000000000000000000000000000..d9e8ff8d15b9c7935a3a85e88c38905b827c7bc2 GIT binary patch literal 287466 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 E7ufaIHvj+t literal 0 HcmV?d00001 diff --git a/example/android/third_party/blst/i686/libblst.a b/example/android/third_party/blst/i686/libblst.a new file mode 100644 index 0000000000000000000000000000000000000000..666954b2d24c87eda30fdfa60d9df15530f70b81 GIT binary patch literal 337346 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

+zS^PO% zO~)%tCSnv+p!}$<2 zymkWaV+?ma!JZg+&*=k7Jl5-Pg5T5fW83mW+j10^)W}Hkvzgh!ersZStK?;#5AUqL zEP$Py=2<{NqL&4*!44I>;u-7YRZi-d?_%ji>JiAH?&bkBNor`axxfEJaQG$MN^;C9 z9lUmsZT|#IYF#M81vtnrpRLUz{o4yDz`%v$U&dBwz<_;70*y$&Z~TY{!ihYN97=pj zH{E5dEqFHgKN62AA*>kcdMi|JeQb6=px(-UvZ58u20y2n)x z&!p!R;JT?2$ZP^6EE-2dChEh#XZ#MK7=X0a}0p zi;rf|)@R^R`tAv9 zw?3VbouSrjAPY#M$OM%^^I3_GdjTnegGQ{Ae>NddI-)0TsU#Q!Lb;n7GWlhl`x!XX zQ}#lxqxs@ykf`;=Th+WRSaw+m+lUZ^n(MmdIj(jd*OQe|trm{-luzV+vF z%Mu_gA|w1MBB;P;uRY7aIP+zmi(7X{NZd<=rA6#``RL1(R%LsQwfzlEH2-Q_w%C?$ z*_Ms4fS*>b>w}OwBRumkX4GYmeBJ4tO`FiXkxa{F{lAYM%Ce%|!(hKS z5O_s*bu9c0Zio4ziBsU04ZrBCRCTOYS1fMzp=%&ZtHPrHYOx;!+zJIo8Om@IkV-o^ zBlj?JxzzD}~6{|z9bQ=q3+SNl&)$mHK^p1by#JGiWSIyo(K0~jdBl<>~> z&j&#K;2hARaYRw6g?HBeVIcQBYM!r#l#uy+cxPQ8=jl;{iCWXbJgF9Zn&ZjiCV$g~E7( zk#jUra46x`chWxJMf)HVj3#AjG`ZzzTO%KW2A>GK>-*z}%$88v@}^h3JD zF1(MW(T;Mr8Mj4F!zS_+w?+P5kOWFl+>=Q?C_RMs3S#ccLpxu>QOp*c$dOYRy#CWU zgz=>k_|(Ml`D>mBSWu47(h>xqhN~(Li>=*?N8zAmYhF1lzXh$9_euN+Djqc$eIE6&|FD5KeT!`~ud@#VV<6o@hu0VQt?~~cTQ-lJYp-Hk zu-0<;sfukhuLQ2~&$W+pgk_9keNcIJad`C9==<5K4%aMp1Ye~Unt zz%UuI4*v;xOY#%oCFia0!vP}8q#jh>5%UN%@9UnCkpPP5U}kTu8OcFy_yXL$UDsx}H zKM?yPZXIy~or2t$xsO7PCsPZxiCh2d1llWscK8Faq2pGE6R1Z5b@>CaN#oX6oIvv> zP^~`@8!v8s#tBp`fnuIObyk7ndjZ6jx$hk`gr~%3(IHs>#m!Kv*N;k|1O7mVCD4;j zAW=j*orK2bOe}8w4;>)&Aes(+yBSS};j*QWdt#&-56&pkdPK#`eE(VY_I-w>RT}aie;`F#H`sv=s6eD0PfCik{=^Q{s{)aBJb@Hx z1?)hJR3OrhCy*komv2&Zao=Znk`8Sau;f3+L#3~D$o7Q8vf!GcR-{bO#pO_xgVAKh@5#QHnk za3z;Yuf`2`Nvyxt4R=Yb&vC+B~p%=G@{ z4x)Bf8AmDI`CMec{dX!>YG5!mGT8b=Ce;;2z^$=n4rj+9XxKZS)7TD!4MR&+c;s4! z5Z>K;k0g+BdOG&i+kc*Y2Hb0m)r>#Wv7r=Ux#~SzA9M*GN5B~%FUkLiuc*JQ&Z=O> zTR#?ijQZ_Tk(~N%jU5HsADJFQ4a!ji?j^#G410TnuM(rnzg(r3xm5X4b`C6d*`?i} zs!!Hi#VWQZS?*|3y%*7bZ(=$}3ez>m_L6u1n<8?+kuFk#(!=$ALHT-S^$jYsM|3o( z0Fa@*8@{35`i_p_y$AxwDA^X)hB5ux#BYW2gR(J*vsl0e2&^YS+;Ww*QW?E`n6t_} z2(L1$l}=Bmm^t^ zd@kuXWu>2R(+55Vu(sZP31f@$qhZ}4IYxmHxHl$`8ON>bB;SO}H;uX7$t!K_w%0R@ zQ4RA6Zz*_jA=K$lOqNSlA3)mB-#$WDm+W59rvtr;nQ&w#u22o)Ncc=y0>E0pOj!bm z!XirmC9ud6KshXNSqs1fqA7K-Df4~NOgb`5gZ1c_6w1Kg!9z>}wkojsDsYUYvcCO_ z=#)_byT3Y5aSoJLyT8&UTuzDyp+gC#t3uG{g>v6YC-S%@Cil&BTZ9U|++*o@KD8{l z&!^)BuoS?OC`6dT+^5o2QN)VoKAEnH!4jjT2$mvP;yf;2ocn&dssxad+#~6#>99Og1p6O}KlwX<=GCMzHK(P#bXf+=o32)8a)0(~3h3MEyP7vM?=P zOt9=;P#bT32>Ys4f~D2$do!t@10{Gvg8F%;F6KR|lN!#+%xY3v@;dA@vw3OfA>xwf zOk$y6nM*(8&8IKDA57>iYd=`};RDFZc(_l#hviE-$9R~dtnu)(@};WYc=#3h4$1d5 z`Lcq>!>8nXM!xUJ_pE#=R2dI*R5u>xc5LHeD)Nno^W+M zu~txMEm6o=E6C&7Nwcm`--df0{qXDFhARujlV&%`I`O30STA1Nf!c*9-7Q9B?Iz_C zBeHgja)}XHyG^-hbRJ;Ss*zC9F!_Tt_04H$z%V-Iha*TgCmg}0x|49ZZUmR=PO88V zhD&uP;d0#wF4dh>fdQ->mqg)m-AH*8Oq8rV0TU(b=#cz6#fWsMl69(*b!<_7VnjMr z$vSDI6G5ZINQ8_;o{@+ciF_kbU?d8SMAS&cj6{)+gLDTTd#Z{kT2=d*tSK!56br;`EHdj3u|oK zA>Up2cJBWi`+M77*v;YL=Xs;!``9Wv{9~*--V30!)khjUUAQM*ysPv_Q+`$YqxAee zL38WwK7>g(?+Pj)074-H6H+4ut%F|LU;<;`zq=Dj0OjRotvOUoe+)!0NQmfU;o!Ze z8(CMF^>F}rFV#j?2Ij2^07N@WV22I`ZM6!uMFEyH0q`n*KgI87pq-<3c;XUMZWUDxbZ?hw664_^tP7jwLtSc85%AKq% zy_bLTdLG_GVDnvud4XZ9xI|LC(=+5nGpQX|{Hlw)`?E8t*93y7#1MyjMlxS-QY*ZO z@1(1@UBgW#0w1^Jkc=F;9`o=g@$>|gWa`#iPpaJii7QbMTl0Jtn*1kjeOpCA$5qCf z@x?g@d{I5HM`8fhe_$JRbyTk$ih}=U`?jeEE^wHAo2uev+ihpIsSi0B!!ywbLR%(7b2M6HA_KkGI7!QT01mnz6uF7h9f`dWSOQdZA9vE|8tidfphB# zm{WrY)^w$7|F#6}=BotVHfh=E=WUc1RQ2g+{C5 zaVoZqTTG|B;FU%4f7{e~aFc57QRP)HKKlBBB=6|v>a3UlQkS1HqT5Cg^Rh^uC0Hum z^^l4JoK_olVS!MHFQyy#IuyM~2zdw~?A3Ben(TlieH3uKY5^DSAUt^xzkWc}$#z&A z2BC=kMSxs(z-!wF$^8dOH01uEt2Lmw4_;g}u)x}RfCMf>TlRRyr8q3fA-C(J_}ox} z&mS-&LcD|71~xf>bM3)w!!`xD**lnR=+L3;!ED181-R{l2Q$`fG@BTGaWe`amu+Lc zc$|xy>Cwbb0v{2KXsQZ)qf?dW8zKg&E1scz!7w0KJgfOzvsO;r+Ia|i9IiUb_3WAJ zOVanl9WdV(X&n>f&|G&0;@-+@o>tPH=lsm?AD{`T{c?Xd zt^+xb{myA1(`9T&Pa!zb!X(P(7&DuErO@|>&(A9xGk<}O%Ae42^T)xgtlV8btQdpr z`re~Fvkk#7_?Yc*^_oMo8|P-uE=HX>fnel=IwQI04%Sa}SR`oH2&{ z>+%bk@1blP&Hx`^-rEOLa}GUU`wZaS z*){`E^sn}>YwCyYrWSo3M;&KJ@wtgS@+w_Zb=$kH<~@qVv^1cEBFf*hO|?y90svd! zzo$b18*CnV&lUx^{Ws;2qiz;=9whMIZw?+f6Gi{V%yNF>xbFN<&>NZACFzaGUsNMD zUjvrc#OK;H?eaAbKl8pv;JI&Hz?z}C_l*-O3@!VsRW#&QoK(R$%M1=c6G- zezu}pX%cEgD`;$9Qrqs7+~H%q+l{b)P(X6Bq|$cKo*a4@b^95 zGB_r|kH!REWZQ=hzXHG65q_fl5D{jV^Fu^qX78UerA6IYTqnvn7o6qUKpo3D;PkCttRPv0l_X>qX78ehf8F z0c7VHSmJxjJZXJ|+Xvs*?atktQgklKx$hx_#zAcvvd281DgGv2dTaTz!noyt^i0Med>U)*CRj%fr_2W{jZM zPuR_iq_JFqd!BJ;|LdXL)8-RuH+nhmCSHkUsqoIC%u3~_ZiX(WRao%7`nYRvGh@F<%)?%2=d~rOIelMnV}$Wwa@yT?`S) zm92{g{s!dHHD&7&2w|HXTd!k#z_D$1Y+D@LgO2SX$F|k6ZF6ip9NR9(wpZIqM~-tT zJ^N~M#UHZoCy$K2pFA?^e)5Rtesb`Ea@=cRzW{mYZ ze36JAM$~GEcr<|@kDey>0XljQYWB_K*zi0;Qsa&U6fsg?XCCBgg@s%l=^o|ivde+h z3@O$tcCjLQgivZXDPzf)1H@rK$C7=sUb72#y#_i^C$c^3|5#bM3OXL{ZENOp4emy? z2J8JlS031DfvEL$7#RvYDw!_1w$G;>=!tDX`MnB)Jt~cQXjX_!4X#cC`6c8%ZYJ*N zi@Nl+0c$0m)^VT(W9~)`tJS$F10vB1}S&1gT=-I*KCe2DXuX|2fFCchr5wG>6H2RW4!jsk$iZ>Ck zUk(;X3F`^BU!?%o&U3ea;Ng|C6Te<|?6he?N)GX%-k;}`UWC*fgrd$t9ksIQy=dcj zF9yR$^DGRWeOUWFsrQ$BGt|_qm2$qLCRhrc6{s=$Zz3}0mo#7i5-$r~E3iKqGHatqj z5R^-odSm9wzvpqZ@XnXRJGb*JS$O9j9z)9=hMW8^_kBS4I=VpczM??xeT0^`a$nNp z)RA!4Cozl<%mkQ5P#Ga*w>gff!KXj4YJ80$J{;BR1Em$Jat?bv!8+a|}> z>)0M}Y?~e17RUCWV|&Q4ZFOwh9NP}Zw#%{Y)wbjJ1cB#JHkwLL3qdOTMGldt@IKOU z^&UrcaYDVvQN;H+2&XJnJv~8Litlki#Z@}8+nsP_R!)%PfJM0%8M1kLdFIX>oHz~d zOyuOg!Q+9+vT_;k+9u=diwAdjmZKjxVLr+e71BOWX?DE&7ar#VD_M-9>C zV6V;{Ly|vp#=KcF!)Odqp`7eN{Fph8K>z0k!#SIhb?T*rolRE z<$qPeNHwH}BU)U*-o%?VSW6xrpK`~C4eX8cN#%ocb!9(Q53OuR2oV6FD1mq&c5D#9 zCIWS733d@s1^@*2nb-mVwi3X;iBa)JFYQ~Dy~!Q=v8@2`K7n_1(14TW2~Sdc3*a15 z&Mh!RNH_xvgap}NP}+C$qc}YO4$g(2yi8gNyBpC;GP29T!;^2=%5mx!$C+QET9-H< zR7SqXC$)X=r)1Xlp&*b>Lh0X`y-mi$qOq_qneN=rw!*qW1aEjdx2F`~esmN&IF|~2 z_X&`$80n2yHuE0Xh-Voa`}Z+HagYtZA@zRCMIdBKUH=omkmnxdZE_Sp&wD3+iP7_!yN7%CiWxD%VTWkSMZ#w{+ zv5jtH+hO@0l`m1t*!HY^nY*#=75NUy_ci%i@;xPAW@K!8N4{s}dqKXULfR%Oq-~-? z+D5E1wuuU9o2ZbsQH7M*qq`3bYxp`tD{}+%I&i_bkHJ8x2a%Wj3 z(}8J8Af-y;1~R)R7?l2;H#ylwRT%~egWnKZ%kg7T*jRvHfPs+l8oQ?>Djs{oQ+5Sp z)4D*noJgmfW#mfrS)z@-2@d%jhKIe!jg4ADe{3~g3T(3T)MXu_7lIs+cC*#cNaGX$ zfaf8KzpU`%q)e5rPomjrGOuRs*AqJfKhI^q@M}kAjMpQ&+8UUZ2<_Vdv)PHBpx5Xi z*uM@BY#Cu8JRMqNHUF^(4;b5RHa0%PBO1%#iH1@=#GuxvB(|@8f}P?!j9|B#?g{B=gb}QPsfuN<_2JrXl){4&c1Syw2(se^ zsU&QF{Ya2;YfholI=pM$gO}=VR5rXn-UF<*^)WXd#x|)aH&@#2z%JhkC~*YhnkQYB z6<2i;>JLsK{KE!U6{fI0X6m@0RSmdqc~rKzOkPc}9S>j6lD{#;CYp9tbUzI0UhnYw zX$lQ!OxQMt-)|I8GcmRz`LA6RX6Io>ss}YHs3y52wu~J_^{0za!i`2DOpO)0#=#V& z#qo41=!gggJR1*ResQ%Yc2w{sn-i+y$)JgPN7&xpiUU@n+j(e=b`}nw9naUhgE}@x zA1CFge)Y)}h@AW5=i`A5&-+jEvWEBlr+hxEp#bXQ_#0XuwI2tez<`UO!6i4T`()*@ z4!L&Te*a0*QxJWhEYl-EKhtqTE8c&ioaI-^j3=)_jJw49Pp8o2xWBF%_aLD9_O*Rz zuWooK4WI8Ocii9yk4$R`9_Mj-0l~?Bycd~+jEj8kp4dEQW$#zQUfYvbN!Oe2b4;2K zPcP!^jTJGt+y~*Z8ZOn~t(xyiOdPtQcCg->fYs8JJU!LKIFQ@xtv6zlc;?0?B+da& zo}G$%29KWDS%5R^NYwRlhrLG9*zttMbtI%vy88fv7$Pwl-6A1%i-goYC~%RGxdNpLfp3yB5Qnyb+ z3L4$uvw^G&_@m}<{alepRWsSN+a>Sy$c?_9J_Bho31?bF24XdQOqz{7@(O&tJ%Wo% z0D+WhKU>8>wG3oUQL*4&$|n70A8Kw7Wz4p4uKApeEYWmEnlr;dMn;-5Bh8tS=FCWQ zW~4bY(wvzg2`SB)k><=ub7n}eMn;-5Bh8tS=FCWQW~4bY(wrG-&J0);hpJ8e zPo5NkDOMp7J&3X~yQDFnMFBBUNbQXUgDf6i!U}h>nRpa#emzv(CEN|@D-f>I%LBDJ zY1rlLiE$c%t0CcUXH;*kQaLnaw#Lff?cM9RBNk!=p4%I@2 z`78-mJDh8#qezHI+JJPoB2JBGORQRuXg~vyxY(6VuCMeVA~O=Dml7v8o=gjQUxq-? zVq<=+2*3Xq-$BExXl!m6J<8amj9z6tpp4DR*rJRFmGO`=wkl(rGIl6~jg2(-Dx*&s z2b6JG8Nv=Wi*5rUg&}MfK>{ve37ca>D&%W0eDAfrs9%&wW76)9-L$25^lm}ZrnmM! zNTYod-)nn{@3kp-aueTcdy?<9sSrDQ$?(!;o1AcT%aao~@V&OIJNnbfo~XRZwzr4V z97OsF5^o1^M-Qh<&QokL{XQEF++4XwMqI1OH2P>+?eGNNqkEier4n%xebNUemI2dD`lZuRr=05U*PA@tU3`;$-NY3#HzHsh zyAravA1Z8Kbc$zJd9NDZJXgRV2=NT}KZjMVy(@^gmmB4hMMMwhb8G#19S4aVWluN+ zFE2V>Ajn;h1S{Suk9>MUaYJ}Ht8BNFZb2ltnWb`q%BJgLvP=ggd5DPQ#EyUoMBN7p zf;fNHCHURbCHS3$WT~D7+@av^6L7sML{FFCw}`8JuAo=k@?-(<8_9d$mxI(wrt2Xo zydo$0)n>gnC%L3sc!JBzCeCV}m8%Q}R6{-*@DDR=&hhV?zK4V{8b@HzZ$? zGh|Dpu>m6`d?{xb8$`N*F3J(u)X9ndFxm=@wy4n-Gun!bwqm2L#Austv>{lT z(N=D>RT^zoMq9Pf7B|{zjkbA4+kB&~$!J?-v@JE-nvJ%E(UvsY+Kje#V^;^8dsmly zyXD&>U-AQESFd~@kS{68*tJEz56br;`EHf(Hu>(5?=Jc7#n4N@svZQKgM&!41hPeQs)X<9|N_9Z0*!$;qy9CN8jbXRGaL= z4T17Lx$mJwzE7?IO5ZgV`Yz|W^B@EXxn$V$e$shJ8+iE~5WHCRf$t-VzKi4hhtqeV zg)Xr^Df%w#QgSt3X{GN;f4~cgosa$*S`F_cW|rb@#1DQR(Wq)NsumelOO2{#qbgxk zC5@^!qpIEL?qE9IGMaVEXx7~$5E;$7Wi;!S(X4y3z_-X(Mzd}i&ALg;Mz@S+-7=bW z%V^fU7jVzBjM(474Pi>kh-TzyJOJcxm(=bx)cJTJhl++e%ymOS4>5sJ6gAYPK{$YV z)M`7Fp6|_cuLz8`)&b->QOF5;Lwlkh0qKgCj~tb`*nyEYw0w_C1m|tY!byy;?nusS zus$MA)`jyZJ{1}9uO6M%;Cv4l6RP~ocl*#x>5T{2h#P4)HXfGmQTYza_gVRppp1JtN4;|E8(pkY)fyb z@heTBaiZqP!6+6h;wgjT^QZ^ZXi856X}Xx9iXByG6ddaJ>J%X5W_8W_i^IoKkB&@v zy#M56s8-YiooO7A@D4Vxr<*sO)v7o=)M-E4xwn@?JhUr#x$}Pe<<70Wl?0Y;N*CX+ zAMf1SOM(|=%GA~!%%}8ee+KEjy&R*Vuc5*Y+8fe&>HE;oybleHcMCpjeXG1CN^OqlWf0*2 zBG^pF4yAUGyRjhwV%h;#!HAn+QuXAkyi(3!$2N*;Yd#_f+=kS#fMcu5De;ga$E{~C zsuu80Vby#^#I7-0V2h4}M2Ha{F2r<2IRmqU6|!rDCPvY>0pwv9N@v74?F{QETkN*| zO;t4*boHB_>8-XN1@fAZN^g%4M>}5i9LAfe&_^nG5)XSm2Z8N52y7Cfw}&K?PU3k_ z8!j|N#o^S}Z4l%lavc%aWZFbidX+V#*BxC#G`(FyCuN<;?liMg;ACeI$-cqtB!Iq{ z=rQ28qh`YBnZ|WlicX=`k@DC2p2Y0wlCmnP&VCiMr%OsMFKT-p#=N2R!{~o5y`P*a z5?Q~Da7=dAFYhXGlq!Yw4Rf9OEP9s0lPFap9w|pnfL&~Cux@-$p&?K;fjqp}s5ghy z#tJ>8NC_-%U8Q1CH%i->jKC&2?uSlZ=(>5 zfVFUP$EDD4Hdz1Nj)K#Xyg?!scPUP-%>(IC6wkqnt)fuRQVh?-{tum$pARutsFB*8 zoYmkQw#bV_3Z^q=_3dWVr~x9w(;_9p@5+#fr@6^C*j9+&DYTika zD~($=90nY%#{;eUU1vKiE=eJbLbekQPaLx~n(BEB8F+2?rMg{6p;#qeOtF#2<<)Vv zl~YGiR(wD&;}HqOQS;34^wF2*N6i?1e4OZC`%sy*++=0Q1y{!I!+;pOkIHvYzB1d` z{eswKwy}Fi>@wTf&Gd}jr{v4VHFnEvV>h}McA0JL4xrq|?x1`_@|D@f?ugiBwy~RX zw6R;}8R$f>(lfoCW3REjPrg#V?NYw&Qoij{zU@-J?NYw&LlRQTw_VD&UCOsz%C}w0 zw_VD&UCOsz%C}w0w_VD&UCOsz%C}w0w_VD&UCL)~{p{>#f|UGm!2mYr7C1YJBbl}0 z1$~Hf0bvk~kp+v_)B$yioMZAtZs1>#+{wX9PEg9wTMpAFR`a!^0;}d%LNuItamB_v zd+L$pW1WwtOS0PHxb;Um7Lwpi6a|dVMsbi^7a>oFx5ojTE=0$SDn`C_1kDKAWjaF$ z;V%XebCDJiOlyyXi64ay2_Ku=?$`LgU$v@?8DP{v< zE2^!MMW7C(i9k^OI4WEQDsck28A(x);XJ90PQ&$um? zUFyvYQtMp!jkl-&=1o-_Fq5>qFB~4XDG!pRY|?%ZQ62o_Mp@oJ#q_L#Z|2CALx^wR zB+gj4=H}y0;?3T~m1mC5V0jMQNjGW6O;9Oc$&Y(k4rqWaQirS)HTYC|^lR!aRS04B z8^}zgEpGkaXcNsW*dKmo!NMboyJ*zaDJvk#4oTM`ec68_ zyKL&f1{kx(sakaSC(gyFdRm{}+}VdP`byOF*7bDZrpJq=KQfiWy&v_x(q~L{S*o6f zjCDWi2b@nS#2vuU7k#ZurhlFe9Z1G{XQ>K@Utfz z9$VXoVu8!1VDK=REa=0$cSylM+!M>=UWURP&ghg`JEqJQPz*b9gcrW>k|^h{&*#Tv z*!{WZaGx=Dm6$c6&=k2-b zh2=JAtMfB$SK#HptoM~~9=Yy4zOVeA^S(0Ah^UG7h{Vyk0mcOtKETNi8(VJZO@8 z&?Nf^3MOGuh`dj%bOX3V8t)Ty z$+iX9@k9X@;?WDR}xwvT{`=ebCY%s zD(4pM98yj)bOt`7oPF9EfLMpStp~M}`fE6cw3CuDoNRZ-Em6(@lYp~aIV0K`hcmNP zb{OFJ=fP9*!g0q$bO~Nd-K$u~i3Y3ekUY$Wp?pgaZFa)?whGw?%wR}dw2wG-R=yK% z2p0_i%%sd8TFokWAY=#Mie&1npC7c7jpj;lNgYaa>n{-@-5XoP9>Oh2*$*r8J(%P) z^H}DV5%W3RC5`9C5xNPX@gC|_K4AP~fWkZTr$YT6%01HYvn$LO@v3rOx<`lNtIF7p z?Rg4ww~fqTu>+MGH9l|D_`Ff$^G3ES5OSl&=ZzYlH)?#AOW9KWq0~9xGoEV3Fr4~n z7)F6S0;1&|^O1tn@gzMaZmPcOjj3 zcj=n|yve$mdFw?C`cmuTChmF2=^Th6wbc3C)^8&`&Z`D-uLmD3;8KL}1Ml@78CigX z2C~o#Ma2AdzYKRBLQ3Xo#^e!c>t9Y_XrkpGY|A%oOAjom0X#zthO$Fi81H}H_+IMZ z2%f+V?+kvbe@MM{jV}3E?tb+iX;?P~jPTBnXm`Y z9v}?coiDqK2_7V7M4S2AEYN15Hls9khwSooh}>-j94$vR-J*!iJU0zH?r{Ag*2jlm z{Ql_vsoY$cZr+Tg&A-1;dI-x-hs-1(!M`uHrW`J{%*xHt)T0wp?|rHDhpB;_&i&FS zBe|{rLVZ>L>0s*h9O)3Q4LM3bdsZ6}&@L3)5t$>ZOOlg8Y+O!dH$Y8U++h9Fejy?A z^#5k>d%&Z-%6tIHetzVtCzvz8$8aGO;XlN?DH!askv^6y4 z-<$5nPN?G?U7Y>j#bukvokPEnxzR#rKL9?Mg1-o)dIKBB#@2mu+BoEWnN#!2(vtd< z`C*B#&*FZF%7*lI2C^F)(!*=sjL>JCUpz7E{Q6uhrH+zQcy*V=cL z?t5Oi7uhhR6osGRd26+Nk$O_G$i1AzwR~Bt<;z+vU)Hk5T=`PJYYrGM9LPL( zIVIx#c|JAwK)#f@@T29Z4S>~GlI6M zwHt3in}t-Hv3DZnDlGb_31LCj2&n|TlqZ!jBxMf7%Cc~G!Z|c7Vg=O}CR3mh*ab3Y zeBkwY!M>FcMKV%!AJ)LH*4mFhc~aIX9DiIoLOWxq5xp z#yS@JKkj2e3xgd3Y-6jm(7w{R@)mn_@IDOhnP)$2?vuvcccjpgicx-V?YU*0zPXhb!^Zin#j{euJ+mn0YPt-hJf5L171>5b9067Ar(4MGY zHKwD}dD}DmyR;`pHyI?PH7|wMW}bn82z4IFWJ}2`>0xQn)4pKedbB2*r-_UVS9gT4 z?g(Ms5yHA7gmp&TL7pF z27g|vpF?-@&!LYOKZkBMggKCPN6e#q7oGLaXVBw_3(ugxqa^oinfa(_gv;K~m;1_} zqzdwD(FawaIiv50;nID-u7B983$o3AU;5y~&^e)yUCza`3-m$5mDdkm$S<(d zc5gms!SQXjn(sZQ6+jfb`MXdE@2$^4DCEq*cQX&q$h`8=o=1z6!HS-5py&I%()!hu z!Ah^p1~Zh=#Kqe!UH0uaUt#yA3gi6!nC{|hT;OXiaI*`19su5FN2$x89%L#_`|xz?p^;CmpdVIcp8W{*!&w*VhkATmr?~Dvr!KnVsi=oO>Yy01UG-3LBJ@GS z)d#0(pLv6o*5bh`tNYt|eGnAiw=sr}U<{o%Sfv}rs}G_-qjr6{7iJao!Aep7QYb}U z`YL^JsEDLmrTZO99~Au@k~y4kzP?o?^Z25?HVDOAw83!P`6Hz);)FPwpr8#-bDt01 zLxE&9`m)_`g-EZ2UdctEu(M-=(O3QXj$(;AJTI;FnY46g;98$aPpAe-YkelI^_jG8 zuQa{g`G4Ld3qeFh_BFgOAA$u=o{r}|%%8yh$X{sUomp6ip&d?c(YiXyFi}uP0bI?C zwia?3=pg)`2696ZKhY#8SY6=)kX-!r(JoN=M*Itm*-Rmua5vEf&Ak=e>{s-Dx(ti2 zd3m5Ypy-?Ey5Zq>5PtH60bJRn3qM{2$V;LxyzO(uyRK8Pev1Cax{+h&a8sj_isV}k zjDyxcrfAH)`?$*{HU?7rou8POM*i*Z-ACCvO>7hcsj~K?1hAkc_sg%*l@~{A$i?eY zBM7w+)t$vvfq3$tS3{(KWr!hQB1YVe^Oe4TmSwLlJ>0gIUwkScBY%dqm16TMK1A> zbao7vWB@3Z0ll*c8_AGi8>^|X?-Xq$!tOPw+(o28S>!F+=F=;OTjI`=1L&OCA!5GZ z+23Lhia|>i21R*>#+l2W7vZcbgi`;`^4V#jII{EGwPpS+Q zC*P04T|D`FcQxo zX%igJb+dZ^3U?=NfKT!M6`t@aY-us@wFAn9Uqcu3-g3*lFTUW@HB&ydGnIefmIHO- zgZB+QsQUzfd{OWO7z&HJQk9Ny_n=Y`u6W-k59=Rd!8)MmW6G#&+^{#u9Z_KKC^L18 znYzKvnaJR z{uAEf=ZnSSyWIWTSz!Z`LfM;;GgU*}Ylf2&ZgR}NutL6&+=#La!RgbCDw}!(0S<*0 zeLaN-_?c8A3f_%q@+{`o$8TkYe2wNmHNZc3dRVt{f#FbxWUatd{|uM2op(LKc`8Q3 zUq22jB7wsI)Vg~uZg36G!Ey&O7o4MZ>Ci{kYT_gUi84e|BeGi4rI93kQW}x<8jdmf zMR|A*Xq-9=0}pAO6+}F%@gd^1>%v)0A0-_b8q@x$1qnZ)@iC3dq7K&bCp0drI>1Zh zd$kdZ`7tyu>pH+g8t1}JJ2sJEixen%w!*GS(ngACHV$GTIF9B1-^XMyJAq*(cslM|}U8_s#7eaht9CqWb!iEQ@~GTumxv z{XC0Ei;~z!M=gmkvy_0Q@f)*4;z5a+| z6=gsz#GwLf5g#Hr;>-m5s5$_00H$%ozEnRzU1Z2sJL3{wnkbH|o@54^k&<`5r_!e; zDCsY>)alNkF_X`&<2l=F4FVwmAp&^N_FD8L_8{ZhC;>cado6kp$_gM!0FT;UD?KNL z(gux;IOrJt3KfU_NTK4e8!1#A_9CFx0-xXSUr^>>5b!TB{0l1m3#$AJs{IQ>{sm$G zf?EHAI{$)*e?fzP!Ce1>M*o7Sf5ANef+qihX8(e?e?gmn!9xFn#r_3J|AHm{1xx)4 zmiZTS`4@Ei7cBQLSmC!)NW^dT%I_NarPaW1F^hg{gZyri-@D{@Kz{F$-_7znD8J0K z-`XO-Tk)ID;@NpnwgL7&2!?Y~^(4W%X7L-`?>2ZxBUTHnZFfZJ^xj6yT|3$k0D<)S z(=Z;KHs@`CWoSm`>_>Y>bjP(}J|cUF0cPwGa7Er=cElOtT8okb(=!TX!G(EB^P5-S?>q>uGY`N{Tj%9+dlf~N2~(CVM`EyE2fQO*bP!`3NOpS!b{L<1 zYnjp(@H#=_79#YVy;5vJC@HKoGf5MWW5YGlE_gAI#dVf)r06|8JZF!m4o)+~cz z9I@{hV=&k~a5}`B;tCcBrf^$Uff2OY{x0P-ZssTiLvO*^SFY?8Xua~jsT`HurN?MP zjZPT1qQMGi;7Bo8p^lo+2e(42gGT7^%Q|?iL@0s#hTV_Rz~oI{B$dRMH^4aKx!_j4 zYs!<1+}0fN=Hnc{0cOU?M+w}b zFUGV-WU7ZW4ZcVgd&snO189YN*lnC34TPyxP|(AWacR^LYu(jo1~VJ72r1sC?(} zp6}!wW`Y@o8eExImSuLqeLkMHwp+=fRpv`5Yb8&@LZ#C

rFT)t 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

calUdhpekLM{e%h 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%0Dd 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 literal 0 HcmV?d00001 diff --git a/example/android/third_party/libsodium/build.sh b/example/android/third_party/libsodium/build.sh new file mode 100644 index 00000000..4eca044c --- /dev/null +++ b/example/android/third_party/libsodium/build.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +rm -rf libsodium-1.0.18 libsodium-1.0.18.tar.gz + +export ANDROID_NDK_ROOT=../../../../android-ndk-r25b +export NDK_PLATFORM="android-32" +export OPENSSL_DIR=../crypto +export LIBSODIUM_FULL_BUILD=1 +export CC= +export CXX= + +wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz +tar -xvf libsodium-1.0.18.tar.gz + +cd libsodium-1.0.18 +#./autogen.sh -s + +./dist-build/android-x86.sh +cp -R libsodium-android-i686 .. + +./dist-build/android-x86_64.sh +cp -R libsodium-android-westmere .. + +./dist-build/android-armv7-a.sh +cp -R libsodium-android-armv7-a .. + +./dist-build/android-armv8-a.sh +cp -R libsodium-android-armv8-a .. + +#./dist-build/android-aar.sh + diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium.h new file mode 100644 index 00000000..295f911c --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium.h @@ -0,0 +1,69 @@ + +#ifndef sodium_H +#define sodium_H + +#include "sodium/version.h" + +#include "sodium/core.h" +#include "sodium/crypto_aead_aes256gcm.h" +#include "sodium/crypto_aead_chacha20poly1305.h" +#include "sodium/crypto_aead_xchacha20poly1305.h" +#include "sodium/crypto_auth.h" +#include "sodium/crypto_auth_hmacsha256.h" +#include "sodium/crypto_auth_hmacsha512.h" +#include "sodium/crypto_auth_hmacsha512256.h" +#include "sodium/crypto_box.h" +#include "sodium/crypto_box_curve25519xsalsa20poly1305.h" +#include "sodium/crypto_core_hsalsa20.h" +#include "sodium/crypto_core_hchacha20.h" +#include "sodium/crypto_core_salsa20.h" +#include "sodium/crypto_core_salsa2012.h" +#include "sodium/crypto_core_salsa208.h" +#include "sodium/crypto_generichash.h" +#include "sodium/crypto_generichash_blake2b.h" +#include "sodium/crypto_hash.h" +#include "sodium/crypto_hash_sha256.h" +#include "sodium/crypto_hash_sha512.h" +#include "sodium/crypto_kdf.h" +#include "sodium/crypto_kdf_blake2b.h" +#include "sodium/crypto_kx.h" +#include "sodium/crypto_onetimeauth.h" +#include "sodium/crypto_onetimeauth_poly1305.h" +#include "sodium/crypto_pwhash.h" +#include "sodium/crypto_pwhash_argon2i.h" +#include "sodium/crypto_scalarmult.h" +#include "sodium/crypto_scalarmult_curve25519.h" +#include "sodium/crypto_secretbox.h" +#include "sodium/crypto_secretbox_xsalsa20poly1305.h" +#include "sodium/crypto_secretstream_xchacha20poly1305.h" +#include "sodium/crypto_shorthash.h" +#include "sodium/crypto_shorthash_siphash24.h" +#include "sodium/crypto_sign.h" +#include "sodium/crypto_sign_ed25519.h" +#include "sodium/crypto_stream.h" +#include "sodium/crypto_stream_chacha20.h" +#include "sodium/crypto_stream_salsa20.h" +#include "sodium/crypto_stream_xsalsa20.h" +#include "sodium/crypto_verify_16.h" +#include "sodium/crypto_verify_32.h" +#include "sodium/crypto_verify_64.h" +#include "sodium/randombytes.h" +#include "sodium/randombytes_internal_random.h" +#include "sodium/randombytes_sysrandom.h" +#include "sodium/runtime.h" +#include "sodium/utils.h" + +#ifndef SODIUM_LIBRARY_MINIMAL +# include "sodium/crypto_box_curve25519xchacha20poly1305.h" +# include "sodium/crypto_core_ed25519.h" +# include "sodium/crypto_core_ristretto255.h" +# include "sodium/crypto_scalarmult_ed25519.h" +# include "sodium/crypto_scalarmult_ristretto255.h" +# include "sodium/crypto_secretbox_xchacha20poly1305.h" +# include "sodium/crypto_pwhash_scryptsalsa208sha256.h" +# include "sodium/crypto_stream_salsa2012.h" +# include "sodium/crypto_stream_salsa208.h" +# include "sodium/crypto_stream_xchacha20.h" +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/core.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/core.h new file mode 100644 index 00000000..dd088d2c --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/core.h @@ -0,0 +1,28 @@ + +#ifndef sodium_core_H +#define sodium_core_H + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +int sodium_init(void) + __attribute__ ((warn_unused_result)); + +/* ---- */ + +SODIUM_EXPORT +int sodium_set_misuse_handler(void (*handler)(void)); + +SODIUM_EXPORT +void sodium_misuse(void) + __attribute__ ((noreturn)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_aes256gcm.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_aes256gcm.h new file mode 100644 index 00000000..9baeb3f1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_aes256gcm.h @@ -0,0 +1,179 @@ +#ifndef crypto_aead_aes256gcm_H +#define crypto_aead_aes256gcm_H + +/* + * WARNING: Despite being the most popular AEAD construction due to its + * use in TLS, safely using AES-GCM in a different context is tricky. + * + * No more than ~ 350 GB of input data should be encrypted with a given key. + * This is for ~ 16 KB messages -- Actual figures vary according to + * message sizes. + * + * In addition, nonces are short and repeated nonces would totally destroy + * the security of this scheme. + * + * Nonces should thus come from atomic counters, which can be difficult to + * set up in a distributed environment. + * + * Unless you absolutely need AES-GCM, use crypto_aead_xchacha20poly1305_ietf_*() + * instead. It doesn't have any of these limitations. + * Or, if you don't need to authenticate additional data, just stick to + * crypto_secretbox(). + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +SODIUM_EXPORT +int crypto_aead_aes256gcm_is_available(void); + +#define crypto_aead_aes256gcm_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_keybytes(void); + +#define crypto_aead_aes256gcm_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_nsecbytes(void); + +#define crypto_aead_aes256gcm_NPUBBYTES 12U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_npubbytes(void); + +#define crypto_aead_aes256gcm_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_abytes(void); + +#define crypto_aead_aes256gcm_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_aes256gcm_ABYTES, \ + (16ULL * ((1ULL << 32) - 2ULL))) +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_messagebytes_max(void); + +typedef struct CRYPTO_ALIGN(16) crypto_aead_aes256gcm_state_ { + unsigned char opaque[512]; +} crypto_aead_aes256gcm_state; + +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_statebytes(void); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +/* -- Precomputation interface -- */ + +SODIUM_EXPORT +int crypto_aead_aes256gcm_beforenm(crypto_aead_aes256gcm_state *ctx_, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_afternm(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_afternm(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_detached_afternm(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_detached_afternm(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_aes256gcm_keygen(unsigned char k[crypto_aead_aes256gcm_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_chacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_chacha20poly1305.h new file mode 100644 index 00000000..5d671df1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_chacha20poly1305.h @@ -0,0 +1,180 @@ +#ifndef crypto_aead_chacha20poly1305_H +#define crypto_aead_chacha20poly1305_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +/* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */ + +#define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_keybytes(void); + +#define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void); + +#define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U + +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void); + +#define crypto_aead_chacha20poly1305_ietf_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_abytes(void); + +#define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \ + (64ULL * ((1ULL << 32) - 1ULL))) +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */ + +#define crypto_aead_chacha20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_keybytes(void); + +#define crypto_aead_chacha20poly1305_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_nsecbytes(void); + +#define crypto_aead_chacha20poly1305_NPUBBYTES 8U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_npubbytes(void); + +#define crypto_aead_chacha20poly1305_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_abytes(void); + +#define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \ + (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_aead_chacha20poly1305_IETF_KEYBYTES crypto_aead_chacha20poly1305_ietf_KEYBYTES +#define crypto_aead_chacha20poly1305_IETF_NSECBYTES crypto_aead_chacha20poly1305_ietf_NSECBYTES +#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES crypto_aead_chacha20poly1305_ietf_NPUBBYTES +#define crypto_aead_chacha20poly1305_IETF_ABYTES crypto_aead_chacha20poly1305_ietf_ABYTES +#define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_xchacha20poly1305.h new file mode 100644 index 00000000..6643b0cb --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_aead_xchacha20poly1305.h @@ -0,0 +1,100 @@ +#ifndef crypto_aead_xchacha20poly1305_H +#define crypto_aead_xchacha20poly1305_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_aead_xchacha20poly1305_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_keybytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_nsecbytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_NPUBBYTES 24U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_npubbytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_abytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX \ + (SODIUM_SIZE_MAX - crypto_aead_xchacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_xchacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_xchacha20poly1305_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_aead_xchacha20poly1305_IETF_KEYBYTES crypto_aead_xchacha20poly1305_ietf_KEYBYTES +#define crypto_aead_xchacha20poly1305_IETF_NSECBYTES crypto_aead_xchacha20poly1305_ietf_NSECBYTES +#define crypto_aead_xchacha20poly1305_IETF_NPUBBYTES crypto_aead_xchacha20poly1305_ietf_NPUBBYTES +#define crypto_aead_xchacha20poly1305_IETF_ABYTES crypto_aead_xchacha20poly1305_ietf_ABYTES +#define crypto_aead_xchacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth.h new file mode 100644 index 00000000..540aee0e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth.h @@ -0,0 +1,46 @@ +#ifndef crypto_auth_H +#define crypto_auth_H + +#include + +#include "crypto_auth_hmacsha512256.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_BYTES crypto_auth_hmacsha512256_BYTES +SODIUM_EXPORT +size_t crypto_auth_bytes(void); + +#define crypto_auth_KEYBYTES crypto_auth_hmacsha512256_KEYBYTES +SODIUM_EXPORT +size_t crypto_auth_keybytes(void); + +#define crypto_auth_PRIMITIVE "hmacsha512256" +SODIUM_EXPORT +const char *crypto_auth_primitive(void); + +SODIUM_EXPORT +int crypto_auth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_verify(const unsigned char *h, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +void crypto_auth_keygen(unsigned char k[crypto_auth_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha256.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha256.h new file mode 100644 index 00000000..3da864c7 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha256.h @@ -0,0 +1,70 @@ +#ifndef crypto_auth_hmacsha256_H +#define crypto_auth_hmacsha256_H + +#include +#include "crypto_hash_sha256.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha256_BYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_bytes(void); + +#define crypto_auth_hmacsha256_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha256(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef struct crypto_auth_hmacsha256_state { + crypto_hash_sha256_state ictx; + crypto_hash_sha256_state octx; +} crypto_auth_hmacsha256_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_final(crypto_auth_hmacsha256_state *state, + unsigned char *out) __attribute__ ((nonnull)); + + +SODIUM_EXPORT +void crypto_auth_hmacsha256_keygen(unsigned char k[crypto_auth_hmacsha256_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha512.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha512.h new file mode 100644 index 00000000..d992cb81 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha512.h @@ -0,0 +1,68 @@ +#ifndef crypto_auth_hmacsha512_H +#define crypto_auth_hmacsha512_H + +#include +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha512_BYTES 64U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_bytes(void); + +#define crypto_auth_hmacsha512_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef struct crypto_auth_hmacsha512_state { + crypto_hash_sha512_state ictx; + crypto_hash_sha512_state octx; +} crypto_auth_hmacsha512_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_update(crypto_auth_hmacsha512_state *state, + const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_final(crypto_auth_hmacsha512_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_auth_hmacsha512_keygen(unsigned char k[crypto_auth_hmacsha512_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha512256.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha512256.h new file mode 100644 index 00000000..3fb52638 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_auth_hmacsha512256.h @@ -0,0 +1,65 @@ +#ifndef crypto_auth_hmacsha512256_H +#define crypto_auth_hmacsha512256_H + +#include +#include "crypto_auth_hmacsha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha512256_BYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_bytes(void); + +#define crypto_auth_hmacsha512256_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef crypto_auth_hmacsha512_state crypto_auth_hmacsha512256_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_init(crypto_auth_hmacsha512256_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_update(crypto_auth_hmacsha512256_state *state, + const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_final(crypto_auth_hmacsha512256_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_auth_hmacsha512256_keygen(unsigned char k[crypto_auth_hmacsha512256_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box.h new file mode 100644 index 00000000..e060dd29 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box.h @@ -0,0 +1,177 @@ +#ifndef crypto_box_H +#define crypto_box_H + +/* + * THREAD SAFETY: crypto_box_keypair() is thread-safe, + * provided that sodium_init() was called before. + * + * Other functions are always thread-safe. + */ + +#include + +#include "crypto_box_curve25519xsalsa20poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_SEEDBYTES crypto_box_curve25519xsalsa20poly1305_SEEDBYTES +SODIUM_EXPORT +size_t crypto_box_seedbytes(void); + +#define crypto_box_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES +SODIUM_EXPORT +size_t crypto_box_publickeybytes(void); + +#define crypto_box_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES +SODIUM_EXPORT +size_t crypto_box_secretkeybytes(void); + +#define crypto_box_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_NONCEBYTES +SODIUM_EXPORT +size_t crypto_box_noncebytes(void); + +#define crypto_box_MACBYTES crypto_box_curve25519xsalsa20poly1305_MACBYTES +SODIUM_EXPORT +size_t crypto_box_macbytes(void); + +#define crypto_box_MESSAGEBYTES_MAX crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_box_messagebytes_max(void); + +#define crypto_box_PRIMITIVE "curve25519xsalsa20poly1305" +SODIUM_EXPORT +const char *crypto_box_primitive(void); + +SODIUM_EXPORT +int crypto_box_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_easy(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open_easy(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_detached(unsigned char *c, unsigned char *mac, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 2, 5, 6, 7))); + +SODIUM_EXPORT +int crypto_box_open_detached(unsigned char *m, const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6, 7))); + +/* -- Precomputation interface -- */ + +#define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES +SODIUM_EXPORT +size_t crypto_box_beforenmbytes(void); + +SODIUM_EXPORT +int crypto_box_beforenm(unsigned char *k, const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_box_detached_afternm(unsigned char *c, unsigned char *mac, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +/* -- Ephemeral SK interface -- */ + +#define crypto_box_SEALBYTES (crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_sealbytes(void); + +SODIUM_EXPORT +int crypto_box_seal(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *pk) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_box_seal_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES +SODIUM_EXPORT +size_t crypto_box_zerobytes(void); + +#define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES +SODIUM_EXPORT +size_t crypto_box_boxzerobytes(void); + +SODIUM_EXPORT +int crypto_box(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_afternm(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_open_afternm(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box_curve25519xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box_curve25519xchacha20poly1305.h new file mode 100644 index 00000000..26a3d31e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box_curve25519xchacha20poly1305.h @@ -0,0 +1,164 @@ + +#ifndef crypto_box_curve25519xchacha20poly1305_H +#define crypto_box_curve25519xchacha20poly1305_H + +#include +#include "crypto_stream_xchacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_curve25519xchacha20poly1305_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_seedbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_publickeybytes(void); + +#define crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_secretkeybytes(void); + +#define crypto_box_curve25519xchacha20poly1305_BEFORENMBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_beforenmbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_noncebytes(void); + +#define crypto_box_curve25519xchacha20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_macbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xchacha20_MESSAGEBYTES_MAX - crypto_box_curve25519xchacha20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seed_keypair(unsigned char *pk, + unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_easy(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_easy(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_detached(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 2, 5, 6, 7))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6, 7))); + +/* -- Precomputation interface -- */ + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_beforenm(unsigned char *k, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_easy_afternm(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_easy_afternm(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_detached_afternm(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_detached_afternm(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +/* -- Ephemeral SK interface -- */ + +#define crypto_box_curve25519xchacha20poly1305_SEALBYTES \ + (crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES + \ + crypto_box_curve25519xchacha20poly1305_MACBYTES) + +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_sealbytes(void); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seal(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seal_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box_curve25519xsalsa20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box_curve25519xsalsa20poly1305.h new file mode 100644 index 00000000..e733f499 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_box_curve25519xsalsa20poly1305.h @@ -0,0 +1,112 @@ +#ifndef crypto_box_curve25519xsalsa20poly1305_H +#define crypto_box_curve25519xsalsa20poly1305_H + +#include +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_curve25519xsalsa20poly1305_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_seedbytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_publickeybytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_secretkeybytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_beforenmbytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_noncebytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_macbytes(void); + +/* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ +#define crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_box_curve25519xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_seed_keypair(unsigned char *pk, + unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_beforenm(unsigned char *k, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_boxzerobytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES \ + (crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES + \ + crypto_box_curve25519xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_zerobytes(void); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_afternm(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_open_afternm(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_ed25519.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_ed25519.h new file mode 100644 index 00000000..3eae00c4 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_ed25519.h @@ -0,0 +1,100 @@ +#ifndef crypto_core_ed25519_H +#define crypto_core_ed25519_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_ed25519_BYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_bytes(void); + +#define crypto_core_ed25519_UNIFORMBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_uniformbytes(void); + +#define crypto_core_ed25519_HASHBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ed25519_hashbytes(void); + +#define crypto_core_ed25519_SCALARBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_scalarbytes(void); + +#define crypto_core_ed25519_NONREDUCEDSCALARBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ed25519_nonreducedscalarbytes(void); + +SODIUM_EXPORT +int crypto_core_ed25519_is_valid_point(const unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_add(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_sub(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_from_uniform(unsigned char *p, const unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_from_hash(unsigned char *p, const unsigned char *h) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_random(unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_random(unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_scalar_invert(unsigned char *recip, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_negate(unsigned char *neg, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_complement(unsigned char *comp, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_add(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_sub(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_mul(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +/* + * The interval `s` is sampled from should be at least 317 bits to ensure almost + * uniformity of `r` over `L`. + */ +SODIUM_EXPORT +void crypto_core_ed25519_scalar_reduce(unsigned char *r, const unsigned char *s) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_hchacha20.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_hchacha20.h new file mode 100644 index 00000000..ece141b0 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_hchacha20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_hchacha20_H +#define crypto_core_hchacha20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_hchacha20_OUTPUTBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hchacha20_outputbytes(void); + +#define crypto_core_hchacha20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hchacha20_inputbytes(void); + +#define crypto_core_hchacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hchacha20_keybytes(void); + +#define crypto_core_hchacha20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hchacha20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_hchacha20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_hsalsa20.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_hsalsa20.h new file mode 100644 index 00000000..4bf7a487 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_hsalsa20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_hsalsa20_H +#define crypto_core_hsalsa20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_hsalsa20_OUTPUTBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_outputbytes(void); + +#define crypto_core_hsalsa20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_inputbytes(void); + +#define crypto_core_hsalsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_keybytes(void); + +#define crypto_core_hsalsa20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_hsalsa20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_ristretto255.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_ristretto255.h new file mode 100644 index 00000000..f2820e55 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_ristretto255.h @@ -0,0 +1,100 @@ +#ifndef crypto_core_ristretto255_H +#define crypto_core_ristretto255_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_ristretto255_BYTES 32 +SODIUM_EXPORT +size_t crypto_core_ristretto255_bytes(void); + +#define crypto_core_ristretto255_HASHBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ristretto255_hashbytes(void); + +#define crypto_core_ristretto255_SCALARBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ristretto255_scalarbytes(void); + +#define crypto_core_ristretto255_NONREDUCEDSCALARBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ristretto255_nonreducedscalarbytes(void); + +SODIUM_EXPORT +int crypto_core_ristretto255_is_valid_point(const unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_add(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_sub(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_from_hash(unsigned char *p, + const unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_random(unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_random(unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_scalar_invert(unsigned char *recip, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_negate(unsigned char *neg, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_complement(unsigned char *comp, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_add(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_sub(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_mul(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +/* + * The interval `s` is sampled from should be at least 317 bits to ensure almost + * uniformity of `r` over `L`. + */ +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_reduce(unsigned char *r, + const unsigned char *s) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa20.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa20.h new file mode 100644 index 00000000..bd79fd9f --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_salsa20_H +#define crypto_core_salsa20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa20_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa20_outputbytes(void); + +#define crypto_core_salsa20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa20_inputbytes(void); + +#define crypto_core_salsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa20_keybytes(void); + +#define crypto_core_salsa20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_salsa20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa2012.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa2012.h new file mode 100644 index 00000000..05957591 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa2012.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_salsa2012_H +#define crypto_core_salsa2012_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa2012_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa2012_outputbytes(void); + +#define crypto_core_salsa2012_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa2012_inputbytes(void); + +#define crypto_core_salsa2012_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa2012_keybytes(void); + +#define crypto_core_salsa2012_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa2012_constbytes(void); + +SODIUM_EXPORT +int crypto_core_salsa2012(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa208.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa208.h new file mode 100644 index 00000000..d2f216af --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_core_salsa208.h @@ -0,0 +1,40 @@ +#ifndef crypto_core_salsa208_H +#define crypto_core_salsa208_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa208_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa208_outputbytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa208_inputbytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa208_keybytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa208_constbytes(void) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_core_salsa208(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_generichash.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_generichash.h new file mode 100644 index 00000000..d897e5d2 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_generichash.h @@ -0,0 +1,84 @@ +#ifndef crypto_generichash_H +#define crypto_generichash_H + +#include + +#include "crypto_generichash_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_generichash_BYTES_MIN crypto_generichash_blake2b_BYTES_MIN +SODIUM_EXPORT +size_t crypto_generichash_bytes_min(void); + +#define crypto_generichash_BYTES_MAX crypto_generichash_blake2b_BYTES_MAX +SODIUM_EXPORT +size_t crypto_generichash_bytes_max(void); + +#define crypto_generichash_BYTES crypto_generichash_blake2b_BYTES +SODIUM_EXPORT +size_t crypto_generichash_bytes(void); + +#define crypto_generichash_KEYBYTES_MIN crypto_generichash_blake2b_KEYBYTES_MIN +SODIUM_EXPORT +size_t crypto_generichash_keybytes_min(void); + +#define crypto_generichash_KEYBYTES_MAX crypto_generichash_blake2b_KEYBYTES_MAX +SODIUM_EXPORT +size_t crypto_generichash_keybytes_max(void); + +#define crypto_generichash_KEYBYTES crypto_generichash_blake2b_KEYBYTES +SODIUM_EXPORT +size_t crypto_generichash_keybytes(void); + +#define crypto_generichash_PRIMITIVE "blake2b" +SODIUM_EXPORT +const char *crypto_generichash_primitive(void); + +/* + * Important when writing bindings for other programming languages: + * the state address should be 64-bytes aligned. + */ +typedef crypto_generichash_blake2b_state crypto_generichash_state; + +SODIUM_EXPORT +size_t crypto_generichash_statebytes(void); + +SODIUM_EXPORT +int crypto_generichash(unsigned char *out, size_t outlen, + const unsigned char *in, unsigned long long inlen, + const unsigned char *key, size_t keylen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_init(crypto_generichash_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_update(crypto_generichash_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_final(crypto_generichash_state *state, + unsigned char *out, const size_t outlen) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_generichash_keygen(unsigned char k[crypto_generichash_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_generichash_blake2b.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_generichash_blake2b.h new file mode 100644 index 00000000..fee9d8ad --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_generichash_blake2b.h @@ -0,0 +1,118 @@ +#ifndef crypto_generichash_blake2b_H +#define crypto_generichash_blake2b_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# pragma pack(1) +#else +# pragma pack(push, 1) +#endif + +typedef struct CRYPTO_ALIGN(64) crypto_generichash_blake2b_state { + unsigned char opaque[384]; +} crypto_generichash_blake2b_state; + +#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# pragma pack() +#else +# pragma pack(pop) +#endif + +#define crypto_generichash_blake2b_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes_min(void); + +#define crypto_generichash_blake2b_BYTES_MAX 64U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes_max(void); + +#define crypto_generichash_blake2b_BYTES 32U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes(void); + +#define crypto_generichash_blake2b_KEYBYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes_min(void); + +#define crypto_generichash_blake2b_KEYBYTES_MAX 64U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes_max(void); + +#define crypto_generichash_blake2b_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes(void); + +#define crypto_generichash_blake2b_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_saltbytes(void); + +#define crypto_generichash_blake2b_PERSONALBYTES 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_personalbytes(void); + +SODIUM_EXPORT +size_t crypto_generichash_blake2b_statebytes(void); + +SODIUM_EXPORT +int crypto_generichash_blake2b(unsigned char *out, size_t outlen, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *key, size_t keylen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *key, + size_t keylen, + const unsigned char *salt, + const unsigned char *personal) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_init_salt_personal(crypto_generichash_blake2b_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen, + const unsigned char *salt, + const unsigned char *personal) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_update(crypto_generichash_blake2b_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_final(crypto_generichash_blake2b_state *state, + unsigned char *out, + const size_t outlen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_generichash_blake2b_keygen(unsigned char k[crypto_generichash_blake2b_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash.h new file mode 100644 index 00000000..8752f9ca --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash.h @@ -0,0 +1,40 @@ +#ifndef crypto_hash_H +#define crypto_hash_H + +/* + * WARNING: Unless you absolutely need to use SHA512 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA512, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include + +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_hash_BYTES crypto_hash_sha512_BYTES +SODIUM_EXPORT +size_t crypto_hash_bytes(void); + +SODIUM_EXPORT +int crypto_hash(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +#define crypto_hash_PRIMITIVE "sha512" +SODIUM_EXPORT +const char *crypto_hash_primitive(void) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash_sha256.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash_sha256.h new file mode 100644 index 00000000..b18217e1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash_sha256.h @@ -0,0 +1,60 @@ +#ifndef crypto_hash_sha256_H +#define crypto_hash_sha256_H + +/* + * WARNING: Unless you absolutely need to use SHA256 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA256, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_hash_sha256_state { + uint32_t state[8]; + uint64_t count; + uint8_t buf[64]; +} crypto_hash_sha256_state; + +SODIUM_EXPORT +size_t crypto_hash_sha256_statebytes(void); + +#define crypto_hash_sha256_BYTES 32U +SODIUM_EXPORT +size_t crypto_hash_sha256_bytes(void); + +SODIUM_EXPORT +int crypto_hash_sha256(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha256_init(crypto_hash_sha256_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_hash_sha256_update(crypto_hash_sha256_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha256_final(crypto_hash_sha256_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash_sha512.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash_sha512.h new file mode 100644 index 00000000..8efa7193 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_hash_sha512.h @@ -0,0 +1,60 @@ +#ifndef crypto_hash_sha512_H +#define crypto_hash_sha512_H + +/* + * WARNING: Unless you absolutely need to use SHA512 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA512, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_hash_sha512_state { + uint64_t state[8]; + uint64_t count[2]; + uint8_t buf[128]; +} crypto_hash_sha512_state; + +SODIUM_EXPORT +size_t crypto_hash_sha512_statebytes(void); + +#define crypto_hash_sha512_BYTES 64U +SODIUM_EXPORT +size_t crypto_hash_sha512_bytes(void); + +SODIUM_EXPORT +int crypto_hash_sha512(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha512_init(crypto_hash_sha512_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_hash_sha512_update(crypto_hash_sha512_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha512_final(crypto_hash_sha512_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kdf.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kdf.h new file mode 100644 index 00000000..ac2fc618 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kdf.h @@ -0,0 +1,53 @@ +#ifndef crypto_kdf_H +#define crypto_kdf_H + +#include +#include + +#include "crypto_kdf_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kdf_BYTES_MIN crypto_kdf_blake2b_BYTES_MIN +SODIUM_EXPORT +size_t crypto_kdf_bytes_min(void); + +#define crypto_kdf_BYTES_MAX crypto_kdf_blake2b_BYTES_MAX +SODIUM_EXPORT +size_t crypto_kdf_bytes_max(void); + +#define crypto_kdf_CONTEXTBYTES crypto_kdf_blake2b_CONTEXTBYTES +SODIUM_EXPORT +size_t crypto_kdf_contextbytes(void); + +#define crypto_kdf_KEYBYTES crypto_kdf_blake2b_KEYBYTES +SODIUM_EXPORT +size_t crypto_kdf_keybytes(void); + +#define crypto_kdf_PRIMITIVE "blake2b" +SODIUM_EXPORT +const char *crypto_kdf_primitive(void) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_kdf_derive_from_key(unsigned char *subkey, size_t subkey_len, + uint64_t subkey_id, + const char ctx[crypto_kdf_CONTEXTBYTES], + const unsigned char key[crypto_kdf_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_kdf_keygen(unsigned char k[crypto_kdf_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kdf_blake2b.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kdf_blake2b.h new file mode 100644 index 00000000..3ae47dd3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kdf_blake2b.h @@ -0,0 +1,44 @@ +#ifndef crypto_kdf_blake2b_H +#define crypto_kdf_blake2b_H + +#include +#include + +#include "crypto_kdf_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kdf_blake2b_BYTES_MIN 16 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_bytes_min(void); + +#define crypto_kdf_blake2b_BYTES_MAX 64 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_bytes_max(void); + +#define crypto_kdf_blake2b_CONTEXTBYTES 8 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_contextbytes(void); + +#define crypto_kdf_blake2b_KEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_keybytes(void); + +SODIUM_EXPORT +int crypto_kdf_blake2b_derive_from_key(unsigned char *subkey, size_t subkey_len, + uint64_t subkey_id, + const char ctx[crypto_kdf_blake2b_CONTEXTBYTES], + const unsigned char key[crypto_kdf_blake2b_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kx.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kx.h new file mode 100644 index 00000000..347132c3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_kx.h @@ -0,0 +1,66 @@ +#ifndef crypto_kx_H +#define crypto_kx_H + +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kx_PUBLICKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_publickeybytes(void); + +#define crypto_kx_SECRETKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_secretkeybytes(void); + +#define crypto_kx_SEEDBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_seedbytes(void); + +#define crypto_kx_SESSIONKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_sessionkeybytes(void); + +#define crypto_kx_PRIMITIVE "x25519blake2b" +SODIUM_EXPORT +const char *crypto_kx_primitive(void); + +SODIUM_EXPORT +int crypto_kx_seed_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], + unsigned char sk[crypto_kx_SECRETKEYBYTES], + const unsigned char seed[crypto_kx_SEEDBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_kx_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], + unsigned char sk[crypto_kx_SECRETKEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_kx_client_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], + unsigned char tx[crypto_kx_SESSIONKEYBYTES], + const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES], + const unsigned char client_sk[crypto_kx_SECRETKEYBYTES], + const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES]) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 4, 5))); + +SODIUM_EXPORT +int crypto_kx_server_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], + unsigned char tx[crypto_kx_SESSIONKEYBYTES], + const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES], + const unsigned char server_sk[crypto_kx_SECRETKEYBYTES], + const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES]) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_onetimeauth.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_onetimeauth.h new file mode 100644 index 00000000..7cd7b070 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_onetimeauth.h @@ -0,0 +1,65 @@ +#ifndef crypto_onetimeauth_H +#define crypto_onetimeauth_H + +#include + +#include "crypto_onetimeauth_poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef crypto_onetimeauth_poly1305_state crypto_onetimeauth_state; + +SODIUM_EXPORT +size_t crypto_onetimeauth_statebytes(void); + +#define crypto_onetimeauth_BYTES crypto_onetimeauth_poly1305_BYTES +SODIUM_EXPORT +size_t crypto_onetimeauth_bytes(void); + +#define crypto_onetimeauth_KEYBYTES crypto_onetimeauth_poly1305_KEYBYTES +SODIUM_EXPORT +size_t crypto_onetimeauth_keybytes(void); + +#define crypto_onetimeauth_PRIMITIVE "poly1305" +SODIUM_EXPORT +const char *crypto_onetimeauth_primitive(void); + +SODIUM_EXPORT +int crypto_onetimeauth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_verify(const unsigned char *h, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_init(crypto_onetimeauth_state *state, + const unsigned char *key) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_onetimeauth_update(crypto_onetimeauth_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_onetimeauth_final(crypto_onetimeauth_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_onetimeauth_keygen(unsigned char k[crypto_onetimeauth_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_onetimeauth_poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_onetimeauth_poly1305.h new file mode 100644 index 00000000..f3e34d86 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_onetimeauth_poly1305.h @@ -0,0 +1,72 @@ +#ifndef crypto_onetimeauth_poly1305_H +#define crypto_onetimeauth_poly1305_H + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#include +#include +#include + +#include + +#include "export.h" + +typedef struct CRYPTO_ALIGN(16) crypto_onetimeauth_poly1305_state { + unsigned char opaque[256]; +} crypto_onetimeauth_poly1305_state; + +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_statebytes(void); + +#define crypto_onetimeauth_poly1305_BYTES 16U +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_bytes(void); + +#define crypto_onetimeauth_poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_keybytes(void); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_init(crypto_onetimeauth_poly1305_state *state, + const unsigned char *key) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_update(crypto_onetimeauth_poly1305_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_final(crypto_onetimeauth_poly1305_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_onetimeauth_poly1305_keygen(unsigned char k[crypto_onetimeauth_poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash.h new file mode 100644 index 00000000..585a993e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash.h @@ -0,0 +1,147 @@ +#ifndef crypto_pwhash_H +#define crypto_pwhash_H + +#include + +#include "crypto_pwhash_argon2i.h" +#include "crypto_pwhash_argon2id.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_ALG_ARGON2I13 crypto_pwhash_argon2i_ALG_ARGON2I13 +SODIUM_EXPORT +int crypto_pwhash_alg_argon2i13(void); + +#define crypto_pwhash_ALG_ARGON2ID13 crypto_pwhash_argon2id_ALG_ARGON2ID13 +SODIUM_EXPORT +int crypto_pwhash_alg_argon2id13(void); + +#define crypto_pwhash_ALG_DEFAULT crypto_pwhash_ALG_ARGON2ID13 +SODIUM_EXPORT +int crypto_pwhash_alg_default(void); + +#define crypto_pwhash_BYTES_MIN crypto_pwhash_argon2id_BYTES_MIN +SODIUM_EXPORT +size_t crypto_pwhash_bytes_min(void); + +#define crypto_pwhash_BYTES_MAX crypto_pwhash_argon2id_BYTES_MAX +SODIUM_EXPORT +size_t crypto_pwhash_bytes_max(void); + +#define crypto_pwhash_PASSWD_MIN crypto_pwhash_argon2id_PASSWD_MIN +SODIUM_EXPORT +size_t crypto_pwhash_passwd_min(void); + +#define crypto_pwhash_PASSWD_MAX crypto_pwhash_argon2id_PASSWD_MAX +SODIUM_EXPORT +size_t crypto_pwhash_passwd_max(void); + +#define crypto_pwhash_SALTBYTES crypto_pwhash_argon2id_SALTBYTES +SODIUM_EXPORT +size_t crypto_pwhash_saltbytes(void); + +#define crypto_pwhash_STRBYTES crypto_pwhash_argon2id_STRBYTES +SODIUM_EXPORT +size_t crypto_pwhash_strbytes(void); + +#define crypto_pwhash_STRPREFIX crypto_pwhash_argon2id_STRPREFIX +SODIUM_EXPORT +const char *crypto_pwhash_strprefix(void); + +#define crypto_pwhash_OPSLIMIT_MIN crypto_pwhash_argon2id_OPSLIMIT_MIN +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_min(void); + +#define crypto_pwhash_OPSLIMIT_MAX crypto_pwhash_argon2id_OPSLIMIT_MAX +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_max(void); + +#define crypto_pwhash_MEMLIMIT_MIN crypto_pwhash_argon2id_MEMLIMIT_MIN +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_min(void); + +#define crypto_pwhash_MEMLIMIT_MAX crypto_pwhash_argon2id_MEMLIMIT_MAX +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_max(void); + +#define crypto_pwhash_OPSLIMIT_INTERACTIVE crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_interactive(void); + +#define crypto_pwhash_MEMLIMIT_INTERACTIVE crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_interactive(void); + +#define crypto_pwhash_OPSLIMIT_MODERATE crypto_pwhash_argon2id_OPSLIMIT_MODERATE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_moderate(void); + +#define crypto_pwhash_MEMLIMIT_MODERATE crypto_pwhash_argon2id_MEMLIMIT_MODERATE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_moderate(void); + +#define crypto_pwhash_OPSLIMIT_SENSITIVE crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_sensitive(void); + +#define crypto_pwhash_MEMLIMIT_SENSITIVE crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_sensitive(void); + +/* + * With this function, do not forget to store all parameters, including the + * algorithm identifier in order to produce deterministic output. + * The crypto_pwhash_* definitions, including crypto_pwhash_ALG_DEFAULT, + * may change. + */ +SODIUM_EXPORT +int crypto_pwhash(unsigned char * const out, unsigned long long outlen, + const char * const passwd, unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +/* + * The output string already includes all the required parameters, including + * the algorithm identifier. The string is all that has to be stored in + * order to verify a password. + */ +SODIUM_EXPORT +int crypto_pwhash_str(char out[crypto_pwhash_STRBYTES], + const char * const passwd, unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_alg(char out[crypto_pwhash_STRBYTES], + const char * const passwd, unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit, int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_needs_rehash(const char str[crypto_pwhash_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#define crypto_pwhash_PRIMITIVE "argon2i" +SODIUM_EXPORT +const char *crypto_pwhash_primitive(void) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_argon2i.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_argon2i.h new file mode 100644 index 00000000..88ff6221 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_argon2i.h @@ -0,0 +1,122 @@ +#ifndef crypto_pwhash_argon2i_H +#define crypto_pwhash_argon2i_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_argon2i_ALG_ARGON2I13 1 +SODIUM_EXPORT +int crypto_pwhash_argon2i_alg_argon2i13(void); + +#define crypto_pwhash_argon2i_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_bytes_min(void); + +#define crypto_pwhash_argon2i_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_bytes_max(void); + +#define crypto_pwhash_argon2i_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_passwd_min(void); + +#define crypto_pwhash_argon2i_PASSWD_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_passwd_max(void); + +#define crypto_pwhash_argon2i_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_saltbytes(void); + +#define crypto_pwhash_argon2i_STRBYTES 128U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_strbytes(void); + +#define crypto_pwhash_argon2i_STRPREFIX "$argon2i$" +SODIUM_EXPORT +const char *crypto_pwhash_argon2i_strprefix(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MIN 3U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_min(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_max(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MIN 8192U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_min(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MAX \ + ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_max(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE 4U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_interactive(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE 33554432U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_interactive(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MODERATE 6U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_moderate(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MODERATE 134217728U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_moderate(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE 8U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_sensitive(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE 536870912U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_argon2i(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, + int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str(char out[crypto_pwhash_argon2i_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str_verify(const char str[crypto_pwhash_argon2i_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str_needs_rehash(const char str[crypto_pwhash_argon2i_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_argon2id.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_argon2id.h new file mode 100644 index 00000000..7183abd1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_argon2id.h @@ -0,0 +1,122 @@ +#ifndef crypto_pwhash_argon2id_H +#define crypto_pwhash_argon2id_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_argon2id_ALG_ARGON2ID13 2 +SODIUM_EXPORT +int crypto_pwhash_argon2id_alg_argon2id13(void); + +#define crypto_pwhash_argon2id_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_bytes_min(void); + +#define crypto_pwhash_argon2id_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_bytes_max(void); + +#define crypto_pwhash_argon2id_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_passwd_min(void); + +#define crypto_pwhash_argon2id_PASSWD_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_passwd_max(void); + +#define crypto_pwhash_argon2id_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_saltbytes(void); + +#define crypto_pwhash_argon2id_STRBYTES 128U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_strbytes(void); + +#define crypto_pwhash_argon2id_STRPREFIX "$argon2id$" +SODIUM_EXPORT +const char *crypto_pwhash_argon2id_strprefix(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MIN 1U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_min(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_max(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MIN 8192U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_min(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MAX \ + ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_max(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE 2U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_interactive(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE 67108864U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_interactive(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MODERATE 3U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_moderate(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MODERATE 268435456U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_moderate(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE 4U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_sensitive(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE 1073741824U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_argon2id(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, + int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str(char out[crypto_pwhash_argon2id_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str_verify(const char str[crypto_pwhash_argon2id_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str_needs_rehash(const char str[crypto_pwhash_argon2id_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_scryptsalsa208sha256.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_scryptsalsa208sha256.h new file mode 100644 index 00000000..5c0bf7d3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_pwhash_scryptsalsa208sha256.h @@ -0,0 +1,120 @@ +#ifndef crypto_pwhash_scryptsalsa208sha256_H +#define crypto_pwhash_scryptsalsa208sha256_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_scryptsalsa208sha256_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_bytes_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_BYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, 0x1fffffffe0ULL) +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_bytes_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_passwd_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_passwd_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_SALTBYTES 32U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_saltbytes(void); + +#define crypto_pwhash_scryptsalsa208sha256_STRBYTES 102U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_strbytes(void); + +#define crypto_pwhash_scryptsalsa208sha256_STRPREFIX "$7$" +SODIUM_EXPORT +const char *crypto_pwhash_scryptsalsa208sha256_strprefix(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN 32768U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN 16777216U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX \ + SODIUM_MIN(SIZE_MAX, 68719476736ULL) +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE 524288U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_interactive(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE 16777216U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_interactive(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE 33554432U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE 1073741824U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str(char out[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str_verify(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_ll(const uint8_t * passwd, size_t passwdlen, + const uint8_t * salt, size_t saltlen, + uint64_t N, uint32_t r, uint32_t p, + uint8_t * buf, size_t buflen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str_needs_rehash(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult.h new file mode 100644 index 00000000..1c685853 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult.h @@ -0,0 +1,46 @@ +#ifndef crypto_scalarmult_H +#define crypto_scalarmult_H + +#include + +#include "crypto_scalarmult_curve25519.h" +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_BYTES crypto_scalarmult_curve25519_BYTES +SODIUM_EXPORT +size_t crypto_scalarmult_bytes(void); + +#define crypto_scalarmult_SCALARBYTES crypto_scalarmult_curve25519_SCALARBYTES +SODIUM_EXPORT +size_t crypto_scalarmult_scalarbytes(void); + +#define crypto_scalarmult_PRIMITIVE "curve25519" +SODIUM_EXPORT +const char *crypto_scalarmult_primitive(void); + +SODIUM_EXPORT +int crypto_scalarmult_base(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_curve25519.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_curve25519.h new file mode 100644 index 00000000..60e9d0c5 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_curve25519.h @@ -0,0 +1,42 @@ +#ifndef crypto_scalarmult_curve25519_H +#define crypto_scalarmult_curve25519_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_curve25519_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_curve25519_bytes(void); + +#define crypto_scalarmult_curve25519_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_curve25519_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_curve25519_base(unsigned char *q, + const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_ed25519.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_ed25519.h new file mode 100644 index 00000000..2dfa4d70 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_ed25519.h @@ -0,0 +1,51 @@ + +#ifndef crypto_scalarmult_ed25519_H +#define crypto_scalarmult_ed25519_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_ed25519_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ed25519_bytes(void); + +#define crypto_scalarmult_ed25519_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ed25519_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_ed25519(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_noclamp(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_base(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_base_noclamp(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_ristretto255.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_ristretto255.h new file mode 100644 index 00000000..40a45cce --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_scalarmult_ristretto255.h @@ -0,0 +1,43 @@ + +#ifndef crypto_scalarmult_ristretto255_H +#define crypto_scalarmult_ristretto255_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_ristretto255_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ristretto255_bytes(void); + +#define crypto_scalarmult_ristretto255_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ristretto255_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_ristretto255(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ristretto255_base(unsigned char *q, + const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox.h new file mode 100644 index 00000000..1d3709db --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox.h @@ -0,0 +1,93 @@ +#ifndef crypto_secretbox_H +#define crypto_secretbox_H + +#include + +#include "crypto_secretbox_xsalsa20poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_KEYBYTES crypto_secretbox_xsalsa20poly1305_KEYBYTES +SODIUM_EXPORT +size_t crypto_secretbox_keybytes(void); + +#define crypto_secretbox_NONCEBYTES crypto_secretbox_xsalsa20poly1305_NONCEBYTES +SODIUM_EXPORT +size_t crypto_secretbox_noncebytes(void); + +#define crypto_secretbox_MACBYTES crypto_secretbox_xsalsa20poly1305_MACBYTES +SODIUM_EXPORT +size_t crypto_secretbox_macbytes(void); + +#define crypto_secretbox_PRIMITIVE "xsalsa20poly1305" +SODIUM_EXPORT +const char *crypto_secretbox_primitive(void); + +#define crypto_secretbox_MESSAGEBYTES_MAX crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_secretbox_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_easy(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_open_easy(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_detached(unsigned char *c, unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_secretbox_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +SODIUM_EXPORT +void crypto_secretbox_keygen(unsigned char k[crypto_secretbox_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_secretbox_ZEROBYTES crypto_secretbox_xsalsa20poly1305_ZEROBYTES +SODIUM_EXPORT +size_t crypto_secretbox_zerobytes(void); + +#define crypto_secretbox_BOXZEROBYTES crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES +SODIUM_EXPORT +size_t crypto_secretbox_boxzerobytes(void); + +SODIUM_EXPORT +int crypto_secretbox(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox_xchacha20poly1305.h new file mode 100644 index 00000000..6ec674e3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox_xchacha20poly1305.h @@ -0,0 +1,70 @@ +#ifndef crypto_secretbox_xchacha20poly1305_H +#define crypto_secretbox_xchacha20poly1305_H + +#include +#include "crypto_stream_xchacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_xchacha20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_keybytes(void); + +#define crypto_secretbox_xchacha20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_noncebytes(void); + +#define crypto_secretbox_xchacha20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_macbytes(void); + +#define crypto_secretbox_xchacha20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xchacha20_MESSAGEBYTES_MAX - crypto_secretbox_xchacha20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_easy(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_open_easy(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_detached(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox_xsalsa20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox_xsalsa20poly1305.h new file mode 100644 index 00000000..be0874cb --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretbox_xsalsa20poly1305.h @@ -0,0 +1,69 @@ +#ifndef crypto_secretbox_xsalsa20poly1305_H +#define crypto_secretbox_xsalsa20poly1305_H + +#include +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_xsalsa20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_keybytes(void); + +#define crypto_secretbox_xsalsa20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_noncebytes(void); + +#define crypto_secretbox_xsalsa20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_macbytes(void); + +/* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ +#define crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_secretbox_xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_xsalsa20poly1305(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xsalsa20poly1305_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +void crypto_secretbox_xsalsa20poly1305_keygen(unsigned char k[crypto_secretbox_xsalsa20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_boxzerobytes(void); + +#define crypto_secretbox_xsalsa20poly1305_ZEROBYTES \ + (crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES + \ + crypto_secretbox_xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_zerobytes(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretstream_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretstream_xchacha20poly1305.h new file mode 100644 index 00000000..b22e4e93 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_secretstream_xchacha20poly1305.h @@ -0,0 +1,108 @@ +#ifndef crypto_secretstream_xchacha20poly1305_H +#define crypto_secretstream_xchacha20poly1305_H + +#include + +#include "crypto_aead_xchacha20poly1305.h" +#include "crypto_stream_chacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretstream_xchacha20poly1305_ABYTES \ + (1U + crypto_aead_xchacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_abytes(void); + +#define crypto_secretstream_xchacha20poly1305_HEADERBYTES \ + crypto_aead_xchacha20poly1305_ietf_NPUBBYTES +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_headerbytes(void); + +#define crypto_secretstream_xchacha20poly1305_KEYBYTES \ + crypto_aead_xchacha20poly1305_ietf_KEYBYTES +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_keybytes(void); + +#define crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_secretstream_xchacha20poly1305_ABYTES, \ + (64ULL * ((1ULL << 32) - 2ULL))) +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_messagebytes_max(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_MESSAGE 0x00 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_message(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_PUSH 0x01 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_push(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_REKEY 0x02 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_rekey(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_FINAL \ + (crypto_secretstream_xchacha20poly1305_TAG_PUSH | \ + crypto_secretstream_xchacha20poly1305_TAG_REKEY) +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_final(void); + +typedef struct crypto_secretstream_xchacha20poly1305_state { + unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]; + unsigned char nonce[crypto_stream_chacha20_ietf_NONCEBYTES]; + unsigned char _pad[8]; +} crypto_secretstream_xchacha20poly1305_state; + +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_statebytes(void); + +SODIUM_EXPORT +void crypto_secretstream_xchacha20poly1305_keygen + (unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_init_push + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES], + const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_push + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char *c, unsigned long long *clen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, unsigned char tag) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_init_pull + (crypto_secretstream_xchacha20poly1305_state *state, + const unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES], + const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_pull + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char *m, unsigned long long *mlen_p, unsigned char *tag_p, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +void crypto_secretstream_xchacha20poly1305_rekey + (crypto_secretstream_xchacha20poly1305_state *state); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_shorthash.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_shorthash.h new file mode 100644 index 00000000..fecaa88b --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_shorthash.h @@ -0,0 +1,41 @@ +#ifndef crypto_shorthash_H +#define crypto_shorthash_H + +#include + +#include "crypto_shorthash_siphash24.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_shorthash_BYTES crypto_shorthash_siphash24_BYTES +SODIUM_EXPORT +size_t crypto_shorthash_bytes(void); + +#define crypto_shorthash_KEYBYTES crypto_shorthash_siphash24_KEYBYTES +SODIUM_EXPORT +size_t crypto_shorthash_keybytes(void); + +#define crypto_shorthash_PRIMITIVE "siphash24" +SODIUM_EXPORT +const char *crypto_shorthash_primitive(void); + +SODIUM_EXPORT +int crypto_shorthash(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +void crypto_shorthash_keygen(unsigned char k[crypto_shorthash_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_shorthash_siphash24.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_shorthash_siphash24.h new file mode 100644 index 00000000..1e6f72a6 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_shorthash_siphash24.h @@ -0,0 +1,50 @@ +#ifndef crypto_shorthash_siphash24_H +#define crypto_shorthash_siphash24_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +/* -- 64-bit output -- */ + +#define crypto_shorthash_siphash24_BYTES 8U +SODIUM_EXPORT +size_t crypto_shorthash_siphash24_bytes(void); + +#define crypto_shorthash_siphash24_KEYBYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphash24_keybytes(void); + +SODIUM_EXPORT +int crypto_shorthash_siphash24(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +#ifndef SODIUM_LIBRARY_MINIMAL +/* -- 128-bit output -- */ + +#define crypto_shorthash_siphashx24_BYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphashx24_bytes(void); + +#define crypto_shorthash_siphashx24_KEYBYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphashx24_keybytes(void); + +SODIUM_EXPORT +int crypto_shorthash_siphashx24(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign.h new file mode 100644 index 00000000..f5fafb12 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign.h @@ -0,0 +1,107 @@ +#ifndef crypto_sign_H +#define crypto_sign_H + +/* + * THREAD SAFETY: crypto_sign_keypair() is thread-safe, + * provided that sodium_init() was called before. + * + * Other functions, including crypto_sign_seed_keypair() are always thread-safe. + */ + +#include + +#include "crypto_sign_ed25519.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef crypto_sign_ed25519ph_state crypto_sign_state; + +SODIUM_EXPORT +size_t crypto_sign_statebytes(void); + +#define crypto_sign_BYTES crypto_sign_ed25519_BYTES +SODIUM_EXPORT +size_t crypto_sign_bytes(void); + +#define crypto_sign_SEEDBYTES crypto_sign_ed25519_SEEDBYTES +SODIUM_EXPORT +size_t crypto_sign_seedbytes(void); + +#define crypto_sign_PUBLICKEYBYTES crypto_sign_ed25519_PUBLICKEYBYTES +SODIUM_EXPORT +size_t crypto_sign_publickeybytes(void); + +#define crypto_sign_SECRETKEYBYTES crypto_sign_ed25519_SECRETKEYBYTES +SODIUM_EXPORT +size_t crypto_sign_secretkeybytes(void); + +#define crypto_sign_MESSAGEBYTES_MAX crypto_sign_ed25519_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_sign_messagebytes_max(void); + +#define crypto_sign_PRIMITIVE "ed25519" +SODIUM_EXPORT +const char *crypto_sign_primitive(void); + +SODIUM_EXPORT +int crypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign(unsigned char *sm, unsigned long long *smlen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_open(unsigned char *m, unsigned long long *mlen_p, + const unsigned char *sm, unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_verify_detached(const unsigned char *sig, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_sign_init(crypto_sign_state *state); + +SODIUM_EXPORT +int crypto_sign_update(crypto_sign_state *state, + const unsigned char *m, unsigned long long mlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_sign_final_create(crypto_sign_state *state, unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *sk) + __attribute__ ((nonnull(1, 2, 4))); + +SODIUM_EXPORT +int crypto_sign_final_verify(crypto_sign_state *state, const unsigned char *sig, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign_ed25519.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign_ed25519.h new file mode 100644 index 00000000..0fdac42d --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign_ed25519.h @@ -0,0 +1,124 @@ +#ifndef crypto_sign_ed25519_H +#define crypto_sign_ed25519_H + +#include +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_sign_ed25519ph_state { + crypto_hash_sha512_state hs; +} crypto_sign_ed25519ph_state; + +SODIUM_EXPORT +size_t crypto_sign_ed25519ph_statebytes(void); + +#define crypto_sign_ed25519_BYTES 64U +SODIUM_EXPORT +size_t crypto_sign_ed25519_bytes(void); + +#define crypto_sign_ed25519_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_sign_ed25519_seedbytes(void); + +#define crypto_sign_ed25519_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_sign_ed25519_publickeybytes(void); + +#define crypto_sign_ed25519_SECRETKEYBYTES (32U + 32U) +SODIUM_EXPORT +size_t crypto_sign_ed25519_secretkeybytes(void); + +#define crypto_sign_ed25519_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_ed25519_BYTES) +SODIUM_EXPORT +size_t crypto_sign_ed25519_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p, + const unsigned char *sm, unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_detached(unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_verify_detached(const unsigned char *sig, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_sign_ed25519_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk, + const unsigned char *ed25519_pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk, + const unsigned char *ed25519_sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_seed(unsigned char *seed, + const unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_init(crypto_sign_ed25519ph_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_update(crypto_sign_ed25519ph_state *state, + const unsigned char *m, + unsigned long long mlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_final_create(crypto_sign_ed25519ph_state *state, + unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *sk) + __attribute__ ((nonnull(1, 2, 4))); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_final_verify(crypto_sign_ed25519ph_state *state, + const unsigned char *sig, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign_edwards25519sha512batch.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign_edwards25519sha512batch.h new file mode 100644 index 00000000..eed158aa --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_sign_edwards25519sha512batch.h @@ -0,0 +1,55 @@ +#ifndef crypto_sign_edwards25519sha512batch_H +#define crypto_sign_edwards25519sha512batch_H + +/* + * WARNING: This construction was a prototype, which should not be used + * any more in new projects. + * + * crypto_sign_edwards25519sha512batch is provided for applications + * initially built with NaCl, but as recommended by the author of this + * construction, new applications should use ed25519 instead. + * + * In Sodium, you should use the high-level crypto_sign_*() functions instead. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_sign_edwards25519sha512batch_BYTES 64U +#define crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES 32U +#define crypto_sign_edwards25519sha512batch_SECRETKEYBYTES (32U + 32U) +#define crypto_sign_edwards25519sha512batch_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_edwards25519sha512batch_BYTES) + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch(unsigned char *sm, + unsigned long long *smlen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((deprecated)) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch_open(unsigned char *m, + unsigned long long *mlen_p, + const unsigned char *sm, + unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((deprecated)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream.h new file mode 100644 index 00000000..88dab5f6 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream.h @@ -0,0 +1,59 @@ +#ifndef crypto_stream_H +#define crypto_stream_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include + +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_KEYBYTES crypto_stream_xsalsa20_KEYBYTES +SODIUM_EXPORT +size_t crypto_stream_keybytes(void); + +#define crypto_stream_NONCEBYTES crypto_stream_xsalsa20_NONCEBYTES +SODIUM_EXPORT +size_t crypto_stream_noncebytes(void); + +#define crypto_stream_MESSAGEBYTES_MAX crypto_stream_xsalsa20_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_stream_messagebytes_max(void); + +#define crypto_stream_PRIMITIVE "xsalsa20" +SODIUM_EXPORT +const char *crypto_stream_primitive(void); + +SODIUM_EXPORT +int crypto_stream(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_keygen(unsigned char k[crypto_stream_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_chacha20.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_chacha20.h new file mode 100644 index 00000000..40889755 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_chacha20.h @@ -0,0 +1,106 @@ +#ifndef crypto_stream_chacha20_H +#define crypto_stream_chacha20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_chacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_chacha20_keybytes(void); + +#define crypto_stream_chacha20_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_chacha20_noncebytes(void); + +#define crypto_stream_chacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_chacha20_messagebytes_max(void); + +/* ChaCha20 with a 64-bit nonce and a 64-bit counter, as originally designed */ + +SODIUM_EXPORT +int crypto_stream_chacha20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_chacha20_keygen(unsigned char k[crypto_stream_chacha20_KEYBYTES]) + __attribute__ ((nonnull)); + +/* ChaCha20 with a 96-bit nonce and a 32-bit counter (IETF) */ + +#define crypto_stream_chacha20_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_keybytes(void); + +#define crypto_stream_chacha20_ietf_NONCEBYTES 12U +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_noncebytes(void); + +#define crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, 64ULL * (1ULL << 32)) +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint32_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_chacha20_ietf_keygen(unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_stream_chacha20_IETF_KEYBYTES crypto_stream_chacha20_ietf_KEYBYTES +#define crypto_stream_chacha20_IETF_NONCEBYTES crypto_stream_chacha20_ietf_NONCEBYTES +#define crypto_stream_chacha20_IETF_MESSAGEBYTES_MAX crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa20.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa20.h new file mode 100644 index 00000000..45b3b3e3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_salsa20_H +#define crypto_stream_salsa20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa20_keybytes(void); + +#define crypto_stream_salsa20_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa20_noncebytes(void); + +#define crypto_stream_salsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_salsa20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_salsa20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa20_keygen(unsigned char k[crypto_stream_salsa20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa2012.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa2012.h new file mode 100644 index 00000000..6c5d303c --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa2012.h @@ -0,0 +1,53 @@ +#ifndef crypto_stream_salsa2012_H +#define crypto_stream_salsa2012_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa2012_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa2012_keybytes(void); + +#define crypto_stream_salsa2012_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa2012_noncebytes(void); + +#define crypto_stream_salsa2012_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_salsa2012_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_salsa2012(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa2012_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa2012_keygen(unsigned char k[crypto_stream_salsa2012_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa208.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa208.h new file mode 100644 index 00000000..d574f304 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_salsa208.h @@ -0,0 +1,56 @@ +#ifndef crypto_stream_salsa208_H +#define crypto_stream_salsa208_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa208_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa208_keybytes(void) + __attribute__ ((deprecated)); + +#define crypto_stream_salsa208_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa208_noncebytes(void) + __attribute__ ((deprecated)); + +#define crypto_stream_salsa208_MESSAGEBYTES_MAX SODIUM_SIZE_MAX + SODIUM_EXPORT +size_t crypto_stream_salsa208_messagebytes_max(void) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_stream_salsa208(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa208_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa208_keygen(unsigned char k[crypto_stream_salsa208_KEYBYTES]) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_xchacha20.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_xchacha20.h new file mode 100644 index 00000000..c4002db0 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_xchacha20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_xchacha20_H +#define crypto_stream_xchacha20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_xchacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_xchacha20_keybytes(void); + +#define crypto_stream_xchacha20_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_stream_xchacha20_noncebytes(void); + +#define crypto_stream_xchacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_xchacha20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_xchacha20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xchacha20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xchacha20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_xchacha20_keygen(unsigned char k[crypto_stream_xchacha20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_xsalsa20.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_xsalsa20.h new file mode 100644 index 00000000..20034e34 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_stream_xsalsa20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_xsalsa20_H +#define crypto_stream_xsalsa20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_xsalsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_keybytes(void); + +#define crypto_stream_xsalsa20_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_noncebytes(void); + +#define crypto_stream_xsalsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_xsalsa20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xsalsa20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xsalsa20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_xsalsa20_keygen(unsigned char k[crypto_stream_xsalsa20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_16.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_16.h new file mode 100644 index 00000000..7b9c8077 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_16.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_16_H +#define crypto_verify_16_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_16_BYTES 16U +SODIUM_EXPORT +size_t crypto_verify_16_bytes(void); + +SODIUM_EXPORT +int crypto_verify_16(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_32.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_32.h new file mode 100644 index 00000000..9b0f4529 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_32.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_32_H +#define crypto_verify_32_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_32_BYTES 32U +SODIUM_EXPORT +size_t crypto_verify_32_bytes(void); + +SODIUM_EXPORT +int crypto_verify_32(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_64.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_64.h new file mode 100644 index 00000000..c83b7302 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/crypto_verify_64.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_64_H +#define crypto_verify_64_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_64_BYTES 64U +SODIUM_EXPORT +size_t crypto_verify_64_bytes(void); + +SODIUM_EXPORT +int crypto_verify_64(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/export.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/export.h new file mode 100644 index 00000000..a0074fc9 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/export.h @@ -0,0 +1,57 @@ + +#ifndef sodium_export_H +#define sodium_export_H + +#include +#include +#include + +#if !defined(__clang__) && !defined(__GNUC__) +# ifdef __attribute__ +# undef __attribute__ +# endif +# define __attribute__(a) +#endif + +#ifdef SODIUM_STATIC +# define SODIUM_EXPORT +# define SODIUM_EXPORT_WEAK +#else +# if defined(_MSC_VER) +# ifdef SODIUM_DLL_EXPORT +# define SODIUM_EXPORT __declspec(dllexport) +# else +# define SODIUM_EXPORT __declspec(dllimport) +# endif +# else +# if defined(__SUNPRO_C) +# ifndef __GNU_C__ +# define SODIUM_EXPORT __attribute__ (visibility(__global)) +# else +# define SODIUM_EXPORT __attribute__ __global +# endif +# elif defined(_MSG_VER) +# define SODIUM_EXPORT extern __declspec(dllexport) +# else +# define SODIUM_EXPORT __attribute__ ((visibility ("default"))) +# endif +# endif +# if defined(__ELF__) && !defined(SODIUM_DISABLE_WEAK_FUNCTIONS) +# define SODIUM_EXPORT_WEAK SODIUM_EXPORT __attribute__((weak)) +# else +# define SODIUM_EXPORT_WEAK SODIUM_EXPORT +# endif +#endif + +#ifndef CRYPTO_ALIGN +# if defined(__INTEL_COMPILER) || defined(_MSC_VER) +# define CRYPTO_ALIGN(x) __declspec(align(x)) +# else +# define CRYPTO_ALIGN(x) __attribute__ ((aligned(x))) +# endif +#endif + +#define SODIUM_MIN(A, B) ((A) < (B) ? (A) : (B)) +#define SODIUM_SIZE_MAX SODIUM_MIN(UINT64_MAX, SIZE_MAX) + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes.h new file mode 100644 index 00000000..a03cc657 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes.h @@ -0,0 +1,72 @@ + +#ifndef randombytes_H +#define randombytes_H + +#include +#include + +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct randombytes_implementation { + const char *(*implementation_name)(void); /* required */ + uint32_t (*random)(void); /* required */ + void (*stir)(void); /* optional */ + uint32_t (*uniform)(const uint32_t upper_bound); /* optional, a default implementation will be used if NULL */ + void (*buf)(void * const buf, const size_t size); /* required */ + int (*close)(void); /* optional */ +} randombytes_implementation; + +#define randombytes_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 0xffffffffUL) + +#define randombytes_SEEDBYTES 32U +SODIUM_EXPORT +size_t randombytes_seedbytes(void); + +SODIUM_EXPORT +void randombytes_buf(void * const buf, const size_t size) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void randombytes_buf_deterministic(void * const buf, const size_t size, + const unsigned char seed[randombytes_SEEDBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +uint32_t randombytes_random(void); + +SODIUM_EXPORT +uint32_t randombytes_uniform(const uint32_t upper_bound); + +SODIUM_EXPORT +void randombytes_stir(void); + +SODIUM_EXPORT +int randombytes_close(void); + +SODIUM_EXPORT +int randombytes_set_implementation(randombytes_implementation *impl) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +const char *randombytes_implementation_name(void); + +/* -- NaCl compatibility interface -- */ + +SODIUM_EXPORT +void randombytes(unsigned char * const buf, const unsigned long long buf_len) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes_internal_random.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes_internal_random.h new file mode 100644 index 00000000..2b2b7d6e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes_internal_random.h @@ -0,0 +1,22 @@ + +#ifndef randombytes_internal_random_H +#define randombytes_internal_random_H + +#include "export.h" +#include "randombytes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +extern struct randombytes_implementation randombytes_internal_implementation; + +/* Backwards compatibility with libsodium < 1.0.18 */ +#define randombytes_salsa20_implementation randombytes_internal_implementation + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes_sysrandom.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes_sysrandom.h new file mode 100644 index 00000000..9e27b674 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/randombytes_sysrandom.h @@ -0,0 +1,19 @@ + +#ifndef randombytes_sysrandom_H +#define randombytes_sysrandom_H + +#include "export.h" +#include "randombytes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +extern struct randombytes_implementation randombytes_sysrandom_implementation; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/runtime.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/runtime.h new file mode 100644 index 00000000..7f15d58e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/runtime.h @@ -0,0 +1,52 @@ + +#ifndef sodium_runtime_H +#define sodium_runtime_H + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_neon(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse2(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse3(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_ssse3(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse41(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx2(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx512f(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_pclmul(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_aesni(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_rdrand(void); + +/* ------------------------------------------------------------------------- */ + +int _sodium_runtime_get_cpu_features(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/utils.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/utils.h new file mode 100644 index 00000000..ac801512 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/utils.h @@ -0,0 +1,179 @@ + +#ifndef sodium_utils_H +#define sodium_utils_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SODIUM_C99 +# if defined(__cplusplus) || !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L +# define SODIUM_C99(X) +# else +# define SODIUM_C99(X) X +# endif +#endif + +SODIUM_EXPORT +void sodium_memzero(void * const pnt, const size_t len); + +SODIUM_EXPORT +void sodium_stackzero(const size_t len); + +/* + * WARNING: sodium_memcmp() must be used to verify if two secret keys + * are equal, in constant time. + * It returns 0 if the keys are equal, and -1 if they differ. + * This function is not designed for lexicographical comparisons. + */ +SODIUM_EXPORT +int sodium_memcmp(const void * const b1_, const void * const b2_, size_t len) + __attribute__ ((warn_unused_result)); + +/* + * sodium_compare() returns -1 if b1_ < b2_, 1 if b1_ > b2_ and 0 if b1_ == b2_ + * It is suitable for lexicographical comparisons, or to compare nonces + * and counters stored in little-endian format. + * However, it is slower than sodium_memcmp(). + */ +SODIUM_EXPORT +int sodium_compare(const unsigned char *b1_, const unsigned char *b2_, + size_t len) __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int sodium_is_zero(const unsigned char *n, const size_t nlen); + +SODIUM_EXPORT +void sodium_increment(unsigned char *n, const size_t nlen); + +SODIUM_EXPORT +void sodium_add(unsigned char *a, const unsigned char *b, const size_t len); + +SODIUM_EXPORT +void sodium_sub(unsigned char *a, const unsigned char *b, const size_t len); + +SODIUM_EXPORT +char *sodium_bin2hex(char * const hex, const size_t hex_maxlen, + const unsigned char * const bin, const size_t bin_len) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_hex2bin(unsigned char * const bin, const size_t bin_maxlen, + const char * const hex, const size_t hex_len, + const char * const ignore, size_t * const bin_len, + const char ** const hex_end) + __attribute__ ((nonnull(1))); + +#define sodium_base64_VARIANT_ORIGINAL 1 +#define sodium_base64_VARIANT_ORIGINAL_NO_PADDING 3 +#define sodium_base64_VARIANT_URLSAFE 5 +#define sodium_base64_VARIANT_URLSAFE_NO_PADDING 7 + +/* + * Computes the required length to encode BIN_LEN bytes as a base64 string + * using the given variant. The computed length includes a trailing \0. + */ +#define sodium_base64_ENCODED_LEN(BIN_LEN, VARIANT) \ + (((BIN_LEN) / 3U) * 4U + \ + ((((BIN_LEN) - ((BIN_LEN) / 3U) * 3U) | (((BIN_LEN) - ((BIN_LEN) / 3U) * 3U) >> 1)) & 1U) * \ + (4U - (~((((VARIANT) & 2U) >> 1) - 1U) & (3U - ((BIN_LEN) - ((BIN_LEN) / 3U) * 3U)))) + 1U) + +SODIUM_EXPORT +size_t sodium_base64_encoded_len(const size_t bin_len, const int variant); + +SODIUM_EXPORT +char *sodium_bin2base64(char * const b64, const size_t b64_maxlen, + const unsigned char * const bin, const size_t bin_len, + const int variant) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_base642bin(unsigned char * const bin, const size_t bin_maxlen, + const char * const b64, const size_t b64_len, + const char * const ignore, size_t * const bin_len, + const char ** const b64_end, const int variant) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_mlock(void * const addr, const size_t len) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_munlock(void * const addr, const size_t len) + __attribute__ ((nonnull)); + +/* WARNING: sodium_malloc() and sodium_allocarray() are not general-purpose + * allocation functions. + * + * They return a pointer to a region filled with 0xd0 bytes, immediately + * followed by a guard page. + * As a result, accessing a single byte after the requested allocation size + * will intentionally trigger a segmentation fault. + * + * A canary and an additional guard page placed before the beginning of the + * region may also kill the process if a buffer underflow is detected. + * + * The memory layout is: + * [unprotected region size (read only)][guard page (no access)][unprotected pages (read/write)][guard page (no access)] + * With the layout of the unprotected pages being: + * [optional padding][16-bytes canary][user region] + * + * However: + * - These functions are significantly slower than standard functions + * - Each allocation requires 3 or 4 additional pages + * - The returned address will not be aligned if the allocation size is not + * a multiple of the required alignment. For this reason, these functions + * are designed to store data, such as secret keys and messages. + * + * sodium_malloc() can be used to allocate any libsodium data structure. + * + * The crypto_generichash_state structure is packed and its length is + * either 357 or 361 bytes. For this reason, when using sodium_malloc() to + * allocate a crypto_generichash_state structure, padding must be added in + * order to ensure proper alignment. crypto_generichash_statebytes() + * returns the rounded up structure size, and should be prefered to sizeof(): + * state = sodium_malloc(crypto_generichash_statebytes()); + */ + +SODIUM_EXPORT +void *sodium_malloc(const size_t size) + __attribute__ ((malloc)); + +SODIUM_EXPORT +void *sodium_allocarray(size_t count, size_t size) + __attribute__ ((malloc)); + +SODIUM_EXPORT +void sodium_free(void *ptr); + +SODIUM_EXPORT +int sodium_mprotect_noaccess(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_mprotect_readonly(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_mprotect_readwrite(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_pad(size_t *padded_buflen_p, unsigned char *buf, + size_t unpadded_buflen, size_t blocksize, size_t max_buflen) + __attribute__ ((nonnull(2))); + +SODIUM_EXPORT +int sodium_unpad(size_t *unpadded_buflen_p, const unsigned char *buf, + size_t padded_buflen, size_t blocksize) + __attribute__ ((nonnull(2))); + +/* -------- */ + +int _sodium_alloc_init(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/version.h b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/version.h new file mode 100644 index 00000000..201a290e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/include/sodium/version.h @@ -0,0 +1,33 @@ + +#ifndef sodium_version_H +#define sodium_version_H + +#include "export.h" + +#define SODIUM_VERSION_STRING "1.0.18" + +#define SODIUM_LIBRARY_VERSION_MAJOR 10 +#define SODIUM_LIBRARY_VERSION_MINOR 3 + + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +const char *sodium_version_string(void); + +SODIUM_EXPORT +int sodium_library_version_major(void); + +SODIUM_EXPORT +int sodium_library_version_minor(void); + +SODIUM_EXPORT +int sodium_library_minimal(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.a b/example/android/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.a new file mode 100644 index 0000000000000000000000000000000000000000..981e22cad0cc6ee519b6b8c175d3c8d5814694f4 GIT binary patch literal 433614 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∓RWmPoBEv<%gW^T;j&P6=9e<{=RTm_xo<@vT9 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 literal 0 HcmV?d00001 diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.la b/example/android/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.la new file mode 100644 index 00000000..0a5a3478 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.la @@ -0,0 +1,41 @@ +# libsodium.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libsodium.so' + +# Names of this library. +library_names='libsodium.so' + +# The name of the static archive. +old_library='libsodium.a' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags=' -pthread' + +# Libraries that this one depends upon. +dependency_libs='' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libsodium. +current=0 +age=0 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/home/alex/magnet/example/android/third_party/libsodium/libsodium-1.0.18/libsodium-android-armv7-a/lib' diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.so b/example/android/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.so new file mode 100644 index 0000000000000000000000000000000000000000..58caf1642a0606ab4d710838576742e5b6c96ef1 GIT binary patch literal 314464 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 literal 0 HcmV?d00001 diff --git a/example/android/third_party/libsodium/libsodium-android-armv7-a/lib/pkgconfig/libsodium.pc b/example/android/third_party/libsodium/libsodium-android-armv7-a/lib/pkgconfig/libsodium.pc new file mode 100644 index 00000000..8ef4197f --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv7-a/lib/pkgconfig/libsodium.pc @@ -0,0 +1,12 @@ +prefix=/home/alex/magnet/example/android/third_party/libsodium/libsodium-1.0.18/libsodium-android-armv7-a +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: libsodium +Version: 1.0.18 +Description: A modern and easy-to-use crypto library + +Libs: -L${libdir} -lsodium +Libs.private: -pthread +Cflags: -I${includedir} diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium.h new file mode 100644 index 00000000..295f911c --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium.h @@ -0,0 +1,69 @@ + +#ifndef sodium_H +#define sodium_H + +#include "sodium/version.h" + +#include "sodium/core.h" +#include "sodium/crypto_aead_aes256gcm.h" +#include "sodium/crypto_aead_chacha20poly1305.h" +#include "sodium/crypto_aead_xchacha20poly1305.h" +#include "sodium/crypto_auth.h" +#include "sodium/crypto_auth_hmacsha256.h" +#include "sodium/crypto_auth_hmacsha512.h" +#include "sodium/crypto_auth_hmacsha512256.h" +#include "sodium/crypto_box.h" +#include "sodium/crypto_box_curve25519xsalsa20poly1305.h" +#include "sodium/crypto_core_hsalsa20.h" +#include "sodium/crypto_core_hchacha20.h" +#include "sodium/crypto_core_salsa20.h" +#include "sodium/crypto_core_salsa2012.h" +#include "sodium/crypto_core_salsa208.h" +#include "sodium/crypto_generichash.h" +#include "sodium/crypto_generichash_blake2b.h" +#include "sodium/crypto_hash.h" +#include "sodium/crypto_hash_sha256.h" +#include "sodium/crypto_hash_sha512.h" +#include "sodium/crypto_kdf.h" +#include "sodium/crypto_kdf_blake2b.h" +#include "sodium/crypto_kx.h" +#include "sodium/crypto_onetimeauth.h" +#include "sodium/crypto_onetimeauth_poly1305.h" +#include "sodium/crypto_pwhash.h" +#include "sodium/crypto_pwhash_argon2i.h" +#include "sodium/crypto_scalarmult.h" +#include "sodium/crypto_scalarmult_curve25519.h" +#include "sodium/crypto_secretbox.h" +#include "sodium/crypto_secretbox_xsalsa20poly1305.h" +#include "sodium/crypto_secretstream_xchacha20poly1305.h" +#include "sodium/crypto_shorthash.h" +#include "sodium/crypto_shorthash_siphash24.h" +#include "sodium/crypto_sign.h" +#include "sodium/crypto_sign_ed25519.h" +#include "sodium/crypto_stream.h" +#include "sodium/crypto_stream_chacha20.h" +#include "sodium/crypto_stream_salsa20.h" +#include "sodium/crypto_stream_xsalsa20.h" +#include "sodium/crypto_verify_16.h" +#include "sodium/crypto_verify_32.h" +#include "sodium/crypto_verify_64.h" +#include "sodium/randombytes.h" +#include "sodium/randombytes_internal_random.h" +#include "sodium/randombytes_sysrandom.h" +#include "sodium/runtime.h" +#include "sodium/utils.h" + +#ifndef SODIUM_LIBRARY_MINIMAL +# include "sodium/crypto_box_curve25519xchacha20poly1305.h" +# include "sodium/crypto_core_ed25519.h" +# include "sodium/crypto_core_ristretto255.h" +# include "sodium/crypto_scalarmult_ed25519.h" +# include "sodium/crypto_scalarmult_ristretto255.h" +# include "sodium/crypto_secretbox_xchacha20poly1305.h" +# include "sodium/crypto_pwhash_scryptsalsa208sha256.h" +# include "sodium/crypto_stream_salsa2012.h" +# include "sodium/crypto_stream_salsa208.h" +# include "sodium/crypto_stream_xchacha20.h" +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/core.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/core.h new file mode 100644 index 00000000..dd088d2c --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/core.h @@ -0,0 +1,28 @@ + +#ifndef sodium_core_H +#define sodium_core_H + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +int sodium_init(void) + __attribute__ ((warn_unused_result)); + +/* ---- */ + +SODIUM_EXPORT +int sodium_set_misuse_handler(void (*handler)(void)); + +SODIUM_EXPORT +void sodium_misuse(void) + __attribute__ ((noreturn)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_aes256gcm.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_aes256gcm.h new file mode 100644 index 00000000..9baeb3f1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_aes256gcm.h @@ -0,0 +1,179 @@ +#ifndef crypto_aead_aes256gcm_H +#define crypto_aead_aes256gcm_H + +/* + * WARNING: Despite being the most popular AEAD construction due to its + * use in TLS, safely using AES-GCM in a different context is tricky. + * + * No more than ~ 350 GB of input data should be encrypted with a given key. + * This is for ~ 16 KB messages -- Actual figures vary according to + * message sizes. + * + * In addition, nonces are short and repeated nonces would totally destroy + * the security of this scheme. + * + * Nonces should thus come from atomic counters, which can be difficult to + * set up in a distributed environment. + * + * Unless you absolutely need AES-GCM, use crypto_aead_xchacha20poly1305_ietf_*() + * instead. It doesn't have any of these limitations. + * Or, if you don't need to authenticate additional data, just stick to + * crypto_secretbox(). + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +SODIUM_EXPORT +int crypto_aead_aes256gcm_is_available(void); + +#define crypto_aead_aes256gcm_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_keybytes(void); + +#define crypto_aead_aes256gcm_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_nsecbytes(void); + +#define crypto_aead_aes256gcm_NPUBBYTES 12U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_npubbytes(void); + +#define crypto_aead_aes256gcm_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_abytes(void); + +#define crypto_aead_aes256gcm_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_aes256gcm_ABYTES, \ + (16ULL * ((1ULL << 32) - 2ULL))) +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_messagebytes_max(void); + +typedef struct CRYPTO_ALIGN(16) crypto_aead_aes256gcm_state_ { + unsigned char opaque[512]; +} crypto_aead_aes256gcm_state; + +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_statebytes(void); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +/* -- Precomputation interface -- */ + +SODIUM_EXPORT +int crypto_aead_aes256gcm_beforenm(crypto_aead_aes256gcm_state *ctx_, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_afternm(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_afternm(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_detached_afternm(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_detached_afternm(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_aes256gcm_keygen(unsigned char k[crypto_aead_aes256gcm_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_chacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_chacha20poly1305.h new file mode 100644 index 00000000..5d671df1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_chacha20poly1305.h @@ -0,0 +1,180 @@ +#ifndef crypto_aead_chacha20poly1305_H +#define crypto_aead_chacha20poly1305_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +/* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */ + +#define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_keybytes(void); + +#define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void); + +#define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U + +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void); + +#define crypto_aead_chacha20poly1305_ietf_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_abytes(void); + +#define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \ + (64ULL * ((1ULL << 32) - 1ULL))) +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */ + +#define crypto_aead_chacha20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_keybytes(void); + +#define crypto_aead_chacha20poly1305_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_nsecbytes(void); + +#define crypto_aead_chacha20poly1305_NPUBBYTES 8U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_npubbytes(void); + +#define crypto_aead_chacha20poly1305_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_abytes(void); + +#define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \ + (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_aead_chacha20poly1305_IETF_KEYBYTES crypto_aead_chacha20poly1305_ietf_KEYBYTES +#define crypto_aead_chacha20poly1305_IETF_NSECBYTES crypto_aead_chacha20poly1305_ietf_NSECBYTES +#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES crypto_aead_chacha20poly1305_ietf_NPUBBYTES +#define crypto_aead_chacha20poly1305_IETF_ABYTES crypto_aead_chacha20poly1305_ietf_ABYTES +#define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_xchacha20poly1305.h new file mode 100644 index 00000000..6643b0cb --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_aead_xchacha20poly1305.h @@ -0,0 +1,100 @@ +#ifndef crypto_aead_xchacha20poly1305_H +#define crypto_aead_xchacha20poly1305_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_aead_xchacha20poly1305_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_keybytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_nsecbytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_NPUBBYTES 24U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_npubbytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_abytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX \ + (SODIUM_SIZE_MAX - crypto_aead_xchacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_xchacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_xchacha20poly1305_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_aead_xchacha20poly1305_IETF_KEYBYTES crypto_aead_xchacha20poly1305_ietf_KEYBYTES +#define crypto_aead_xchacha20poly1305_IETF_NSECBYTES crypto_aead_xchacha20poly1305_ietf_NSECBYTES +#define crypto_aead_xchacha20poly1305_IETF_NPUBBYTES crypto_aead_xchacha20poly1305_ietf_NPUBBYTES +#define crypto_aead_xchacha20poly1305_IETF_ABYTES crypto_aead_xchacha20poly1305_ietf_ABYTES +#define crypto_aead_xchacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth.h new file mode 100644 index 00000000..540aee0e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth.h @@ -0,0 +1,46 @@ +#ifndef crypto_auth_H +#define crypto_auth_H + +#include + +#include "crypto_auth_hmacsha512256.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_BYTES crypto_auth_hmacsha512256_BYTES +SODIUM_EXPORT +size_t crypto_auth_bytes(void); + +#define crypto_auth_KEYBYTES crypto_auth_hmacsha512256_KEYBYTES +SODIUM_EXPORT +size_t crypto_auth_keybytes(void); + +#define crypto_auth_PRIMITIVE "hmacsha512256" +SODIUM_EXPORT +const char *crypto_auth_primitive(void); + +SODIUM_EXPORT +int crypto_auth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_verify(const unsigned char *h, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +void crypto_auth_keygen(unsigned char k[crypto_auth_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha256.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha256.h new file mode 100644 index 00000000..3da864c7 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha256.h @@ -0,0 +1,70 @@ +#ifndef crypto_auth_hmacsha256_H +#define crypto_auth_hmacsha256_H + +#include +#include "crypto_hash_sha256.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha256_BYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_bytes(void); + +#define crypto_auth_hmacsha256_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha256(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef struct crypto_auth_hmacsha256_state { + crypto_hash_sha256_state ictx; + crypto_hash_sha256_state octx; +} crypto_auth_hmacsha256_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_final(crypto_auth_hmacsha256_state *state, + unsigned char *out) __attribute__ ((nonnull)); + + +SODIUM_EXPORT +void crypto_auth_hmacsha256_keygen(unsigned char k[crypto_auth_hmacsha256_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha512.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha512.h new file mode 100644 index 00000000..d992cb81 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha512.h @@ -0,0 +1,68 @@ +#ifndef crypto_auth_hmacsha512_H +#define crypto_auth_hmacsha512_H + +#include +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha512_BYTES 64U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_bytes(void); + +#define crypto_auth_hmacsha512_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef struct crypto_auth_hmacsha512_state { + crypto_hash_sha512_state ictx; + crypto_hash_sha512_state octx; +} crypto_auth_hmacsha512_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_update(crypto_auth_hmacsha512_state *state, + const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_final(crypto_auth_hmacsha512_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_auth_hmacsha512_keygen(unsigned char k[crypto_auth_hmacsha512_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha512256.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha512256.h new file mode 100644 index 00000000..3fb52638 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_auth_hmacsha512256.h @@ -0,0 +1,65 @@ +#ifndef crypto_auth_hmacsha512256_H +#define crypto_auth_hmacsha512256_H + +#include +#include "crypto_auth_hmacsha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha512256_BYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_bytes(void); + +#define crypto_auth_hmacsha512256_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef crypto_auth_hmacsha512_state crypto_auth_hmacsha512256_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_init(crypto_auth_hmacsha512256_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_update(crypto_auth_hmacsha512256_state *state, + const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_final(crypto_auth_hmacsha512256_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_auth_hmacsha512256_keygen(unsigned char k[crypto_auth_hmacsha512256_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box.h new file mode 100644 index 00000000..e060dd29 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box.h @@ -0,0 +1,177 @@ +#ifndef crypto_box_H +#define crypto_box_H + +/* + * THREAD SAFETY: crypto_box_keypair() is thread-safe, + * provided that sodium_init() was called before. + * + * Other functions are always thread-safe. + */ + +#include + +#include "crypto_box_curve25519xsalsa20poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_SEEDBYTES crypto_box_curve25519xsalsa20poly1305_SEEDBYTES +SODIUM_EXPORT +size_t crypto_box_seedbytes(void); + +#define crypto_box_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES +SODIUM_EXPORT +size_t crypto_box_publickeybytes(void); + +#define crypto_box_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES +SODIUM_EXPORT +size_t crypto_box_secretkeybytes(void); + +#define crypto_box_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_NONCEBYTES +SODIUM_EXPORT +size_t crypto_box_noncebytes(void); + +#define crypto_box_MACBYTES crypto_box_curve25519xsalsa20poly1305_MACBYTES +SODIUM_EXPORT +size_t crypto_box_macbytes(void); + +#define crypto_box_MESSAGEBYTES_MAX crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_box_messagebytes_max(void); + +#define crypto_box_PRIMITIVE "curve25519xsalsa20poly1305" +SODIUM_EXPORT +const char *crypto_box_primitive(void); + +SODIUM_EXPORT +int crypto_box_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_easy(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open_easy(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_detached(unsigned char *c, unsigned char *mac, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 2, 5, 6, 7))); + +SODIUM_EXPORT +int crypto_box_open_detached(unsigned char *m, const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6, 7))); + +/* -- Precomputation interface -- */ + +#define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES +SODIUM_EXPORT +size_t crypto_box_beforenmbytes(void); + +SODIUM_EXPORT +int crypto_box_beforenm(unsigned char *k, const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_box_detached_afternm(unsigned char *c, unsigned char *mac, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +/* -- Ephemeral SK interface -- */ + +#define crypto_box_SEALBYTES (crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_sealbytes(void); + +SODIUM_EXPORT +int crypto_box_seal(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *pk) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_box_seal_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES +SODIUM_EXPORT +size_t crypto_box_zerobytes(void); + +#define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES +SODIUM_EXPORT +size_t crypto_box_boxzerobytes(void); + +SODIUM_EXPORT +int crypto_box(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_afternm(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_open_afternm(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box_curve25519xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box_curve25519xchacha20poly1305.h new file mode 100644 index 00000000..26a3d31e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box_curve25519xchacha20poly1305.h @@ -0,0 +1,164 @@ + +#ifndef crypto_box_curve25519xchacha20poly1305_H +#define crypto_box_curve25519xchacha20poly1305_H + +#include +#include "crypto_stream_xchacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_curve25519xchacha20poly1305_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_seedbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_publickeybytes(void); + +#define crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_secretkeybytes(void); + +#define crypto_box_curve25519xchacha20poly1305_BEFORENMBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_beforenmbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_noncebytes(void); + +#define crypto_box_curve25519xchacha20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_macbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xchacha20_MESSAGEBYTES_MAX - crypto_box_curve25519xchacha20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seed_keypair(unsigned char *pk, + unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_easy(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_easy(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_detached(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 2, 5, 6, 7))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6, 7))); + +/* -- Precomputation interface -- */ + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_beforenm(unsigned char *k, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_easy_afternm(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_easy_afternm(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_detached_afternm(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_detached_afternm(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +/* -- Ephemeral SK interface -- */ + +#define crypto_box_curve25519xchacha20poly1305_SEALBYTES \ + (crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES + \ + crypto_box_curve25519xchacha20poly1305_MACBYTES) + +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_sealbytes(void); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seal(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seal_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box_curve25519xsalsa20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box_curve25519xsalsa20poly1305.h new file mode 100644 index 00000000..e733f499 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_box_curve25519xsalsa20poly1305.h @@ -0,0 +1,112 @@ +#ifndef crypto_box_curve25519xsalsa20poly1305_H +#define crypto_box_curve25519xsalsa20poly1305_H + +#include +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_curve25519xsalsa20poly1305_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_seedbytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_publickeybytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_secretkeybytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_beforenmbytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_noncebytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_macbytes(void); + +/* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ +#define crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_box_curve25519xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_seed_keypair(unsigned char *pk, + unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_beforenm(unsigned char *k, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_boxzerobytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES \ + (crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES + \ + crypto_box_curve25519xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_zerobytes(void); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_afternm(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_open_afternm(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_ed25519.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_ed25519.h new file mode 100644 index 00000000..3eae00c4 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_ed25519.h @@ -0,0 +1,100 @@ +#ifndef crypto_core_ed25519_H +#define crypto_core_ed25519_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_ed25519_BYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_bytes(void); + +#define crypto_core_ed25519_UNIFORMBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_uniformbytes(void); + +#define crypto_core_ed25519_HASHBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ed25519_hashbytes(void); + +#define crypto_core_ed25519_SCALARBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_scalarbytes(void); + +#define crypto_core_ed25519_NONREDUCEDSCALARBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ed25519_nonreducedscalarbytes(void); + +SODIUM_EXPORT +int crypto_core_ed25519_is_valid_point(const unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_add(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_sub(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_from_uniform(unsigned char *p, const unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_from_hash(unsigned char *p, const unsigned char *h) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_random(unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_random(unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_scalar_invert(unsigned char *recip, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_negate(unsigned char *neg, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_complement(unsigned char *comp, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_add(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_sub(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_mul(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +/* + * The interval `s` is sampled from should be at least 317 bits to ensure almost + * uniformity of `r` over `L`. + */ +SODIUM_EXPORT +void crypto_core_ed25519_scalar_reduce(unsigned char *r, const unsigned char *s) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_hchacha20.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_hchacha20.h new file mode 100644 index 00000000..ece141b0 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_hchacha20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_hchacha20_H +#define crypto_core_hchacha20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_hchacha20_OUTPUTBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hchacha20_outputbytes(void); + +#define crypto_core_hchacha20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hchacha20_inputbytes(void); + +#define crypto_core_hchacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hchacha20_keybytes(void); + +#define crypto_core_hchacha20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hchacha20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_hchacha20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_hsalsa20.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_hsalsa20.h new file mode 100644 index 00000000..4bf7a487 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_hsalsa20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_hsalsa20_H +#define crypto_core_hsalsa20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_hsalsa20_OUTPUTBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_outputbytes(void); + +#define crypto_core_hsalsa20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_inputbytes(void); + +#define crypto_core_hsalsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_keybytes(void); + +#define crypto_core_hsalsa20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_hsalsa20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_ristretto255.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_ristretto255.h new file mode 100644 index 00000000..f2820e55 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_ristretto255.h @@ -0,0 +1,100 @@ +#ifndef crypto_core_ristretto255_H +#define crypto_core_ristretto255_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_ristretto255_BYTES 32 +SODIUM_EXPORT +size_t crypto_core_ristretto255_bytes(void); + +#define crypto_core_ristretto255_HASHBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ristretto255_hashbytes(void); + +#define crypto_core_ristretto255_SCALARBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ristretto255_scalarbytes(void); + +#define crypto_core_ristretto255_NONREDUCEDSCALARBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ristretto255_nonreducedscalarbytes(void); + +SODIUM_EXPORT +int crypto_core_ristretto255_is_valid_point(const unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_add(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_sub(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_from_hash(unsigned char *p, + const unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_random(unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_random(unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_scalar_invert(unsigned char *recip, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_negate(unsigned char *neg, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_complement(unsigned char *comp, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_add(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_sub(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_mul(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +/* + * The interval `s` is sampled from should be at least 317 bits to ensure almost + * uniformity of `r` over `L`. + */ +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_reduce(unsigned char *r, + const unsigned char *s) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa20.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa20.h new file mode 100644 index 00000000..bd79fd9f --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_salsa20_H +#define crypto_core_salsa20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa20_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa20_outputbytes(void); + +#define crypto_core_salsa20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa20_inputbytes(void); + +#define crypto_core_salsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa20_keybytes(void); + +#define crypto_core_salsa20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_salsa20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa2012.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa2012.h new file mode 100644 index 00000000..05957591 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa2012.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_salsa2012_H +#define crypto_core_salsa2012_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa2012_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa2012_outputbytes(void); + +#define crypto_core_salsa2012_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa2012_inputbytes(void); + +#define crypto_core_salsa2012_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa2012_keybytes(void); + +#define crypto_core_salsa2012_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa2012_constbytes(void); + +SODIUM_EXPORT +int crypto_core_salsa2012(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa208.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa208.h new file mode 100644 index 00000000..d2f216af --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_core_salsa208.h @@ -0,0 +1,40 @@ +#ifndef crypto_core_salsa208_H +#define crypto_core_salsa208_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa208_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa208_outputbytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa208_inputbytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa208_keybytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa208_constbytes(void) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_core_salsa208(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_generichash.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_generichash.h new file mode 100644 index 00000000..d897e5d2 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_generichash.h @@ -0,0 +1,84 @@ +#ifndef crypto_generichash_H +#define crypto_generichash_H + +#include + +#include "crypto_generichash_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_generichash_BYTES_MIN crypto_generichash_blake2b_BYTES_MIN +SODIUM_EXPORT +size_t crypto_generichash_bytes_min(void); + +#define crypto_generichash_BYTES_MAX crypto_generichash_blake2b_BYTES_MAX +SODIUM_EXPORT +size_t crypto_generichash_bytes_max(void); + +#define crypto_generichash_BYTES crypto_generichash_blake2b_BYTES +SODIUM_EXPORT +size_t crypto_generichash_bytes(void); + +#define crypto_generichash_KEYBYTES_MIN crypto_generichash_blake2b_KEYBYTES_MIN +SODIUM_EXPORT +size_t crypto_generichash_keybytes_min(void); + +#define crypto_generichash_KEYBYTES_MAX crypto_generichash_blake2b_KEYBYTES_MAX +SODIUM_EXPORT +size_t crypto_generichash_keybytes_max(void); + +#define crypto_generichash_KEYBYTES crypto_generichash_blake2b_KEYBYTES +SODIUM_EXPORT +size_t crypto_generichash_keybytes(void); + +#define crypto_generichash_PRIMITIVE "blake2b" +SODIUM_EXPORT +const char *crypto_generichash_primitive(void); + +/* + * Important when writing bindings for other programming languages: + * the state address should be 64-bytes aligned. + */ +typedef crypto_generichash_blake2b_state crypto_generichash_state; + +SODIUM_EXPORT +size_t crypto_generichash_statebytes(void); + +SODIUM_EXPORT +int crypto_generichash(unsigned char *out, size_t outlen, + const unsigned char *in, unsigned long long inlen, + const unsigned char *key, size_t keylen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_init(crypto_generichash_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_update(crypto_generichash_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_final(crypto_generichash_state *state, + unsigned char *out, const size_t outlen) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_generichash_keygen(unsigned char k[crypto_generichash_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_generichash_blake2b.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_generichash_blake2b.h new file mode 100644 index 00000000..fee9d8ad --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_generichash_blake2b.h @@ -0,0 +1,118 @@ +#ifndef crypto_generichash_blake2b_H +#define crypto_generichash_blake2b_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# pragma pack(1) +#else +# pragma pack(push, 1) +#endif + +typedef struct CRYPTO_ALIGN(64) crypto_generichash_blake2b_state { + unsigned char opaque[384]; +} crypto_generichash_blake2b_state; + +#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# pragma pack() +#else +# pragma pack(pop) +#endif + +#define crypto_generichash_blake2b_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes_min(void); + +#define crypto_generichash_blake2b_BYTES_MAX 64U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes_max(void); + +#define crypto_generichash_blake2b_BYTES 32U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes(void); + +#define crypto_generichash_blake2b_KEYBYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes_min(void); + +#define crypto_generichash_blake2b_KEYBYTES_MAX 64U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes_max(void); + +#define crypto_generichash_blake2b_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes(void); + +#define crypto_generichash_blake2b_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_saltbytes(void); + +#define crypto_generichash_blake2b_PERSONALBYTES 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_personalbytes(void); + +SODIUM_EXPORT +size_t crypto_generichash_blake2b_statebytes(void); + +SODIUM_EXPORT +int crypto_generichash_blake2b(unsigned char *out, size_t outlen, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *key, size_t keylen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *key, + size_t keylen, + const unsigned char *salt, + const unsigned char *personal) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_init_salt_personal(crypto_generichash_blake2b_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen, + const unsigned char *salt, + const unsigned char *personal) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_update(crypto_generichash_blake2b_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_final(crypto_generichash_blake2b_state *state, + unsigned char *out, + const size_t outlen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_generichash_blake2b_keygen(unsigned char k[crypto_generichash_blake2b_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash.h new file mode 100644 index 00000000..8752f9ca --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash.h @@ -0,0 +1,40 @@ +#ifndef crypto_hash_H +#define crypto_hash_H + +/* + * WARNING: Unless you absolutely need to use SHA512 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA512, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include + +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_hash_BYTES crypto_hash_sha512_BYTES +SODIUM_EXPORT +size_t crypto_hash_bytes(void); + +SODIUM_EXPORT +int crypto_hash(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +#define crypto_hash_PRIMITIVE "sha512" +SODIUM_EXPORT +const char *crypto_hash_primitive(void) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash_sha256.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash_sha256.h new file mode 100644 index 00000000..b18217e1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash_sha256.h @@ -0,0 +1,60 @@ +#ifndef crypto_hash_sha256_H +#define crypto_hash_sha256_H + +/* + * WARNING: Unless you absolutely need to use SHA256 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA256, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_hash_sha256_state { + uint32_t state[8]; + uint64_t count; + uint8_t buf[64]; +} crypto_hash_sha256_state; + +SODIUM_EXPORT +size_t crypto_hash_sha256_statebytes(void); + +#define crypto_hash_sha256_BYTES 32U +SODIUM_EXPORT +size_t crypto_hash_sha256_bytes(void); + +SODIUM_EXPORT +int crypto_hash_sha256(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha256_init(crypto_hash_sha256_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_hash_sha256_update(crypto_hash_sha256_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha256_final(crypto_hash_sha256_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash_sha512.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash_sha512.h new file mode 100644 index 00000000..8efa7193 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_hash_sha512.h @@ -0,0 +1,60 @@ +#ifndef crypto_hash_sha512_H +#define crypto_hash_sha512_H + +/* + * WARNING: Unless you absolutely need to use SHA512 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA512, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_hash_sha512_state { + uint64_t state[8]; + uint64_t count[2]; + uint8_t buf[128]; +} crypto_hash_sha512_state; + +SODIUM_EXPORT +size_t crypto_hash_sha512_statebytes(void); + +#define crypto_hash_sha512_BYTES 64U +SODIUM_EXPORT +size_t crypto_hash_sha512_bytes(void); + +SODIUM_EXPORT +int crypto_hash_sha512(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha512_init(crypto_hash_sha512_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_hash_sha512_update(crypto_hash_sha512_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha512_final(crypto_hash_sha512_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kdf.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kdf.h new file mode 100644 index 00000000..ac2fc618 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kdf.h @@ -0,0 +1,53 @@ +#ifndef crypto_kdf_H +#define crypto_kdf_H + +#include +#include + +#include "crypto_kdf_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kdf_BYTES_MIN crypto_kdf_blake2b_BYTES_MIN +SODIUM_EXPORT +size_t crypto_kdf_bytes_min(void); + +#define crypto_kdf_BYTES_MAX crypto_kdf_blake2b_BYTES_MAX +SODIUM_EXPORT +size_t crypto_kdf_bytes_max(void); + +#define crypto_kdf_CONTEXTBYTES crypto_kdf_blake2b_CONTEXTBYTES +SODIUM_EXPORT +size_t crypto_kdf_contextbytes(void); + +#define crypto_kdf_KEYBYTES crypto_kdf_blake2b_KEYBYTES +SODIUM_EXPORT +size_t crypto_kdf_keybytes(void); + +#define crypto_kdf_PRIMITIVE "blake2b" +SODIUM_EXPORT +const char *crypto_kdf_primitive(void) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_kdf_derive_from_key(unsigned char *subkey, size_t subkey_len, + uint64_t subkey_id, + const char ctx[crypto_kdf_CONTEXTBYTES], + const unsigned char key[crypto_kdf_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_kdf_keygen(unsigned char k[crypto_kdf_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kdf_blake2b.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kdf_blake2b.h new file mode 100644 index 00000000..3ae47dd3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kdf_blake2b.h @@ -0,0 +1,44 @@ +#ifndef crypto_kdf_blake2b_H +#define crypto_kdf_blake2b_H + +#include +#include + +#include "crypto_kdf_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kdf_blake2b_BYTES_MIN 16 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_bytes_min(void); + +#define crypto_kdf_blake2b_BYTES_MAX 64 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_bytes_max(void); + +#define crypto_kdf_blake2b_CONTEXTBYTES 8 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_contextbytes(void); + +#define crypto_kdf_blake2b_KEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_keybytes(void); + +SODIUM_EXPORT +int crypto_kdf_blake2b_derive_from_key(unsigned char *subkey, size_t subkey_len, + uint64_t subkey_id, + const char ctx[crypto_kdf_blake2b_CONTEXTBYTES], + const unsigned char key[crypto_kdf_blake2b_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kx.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kx.h new file mode 100644 index 00000000..347132c3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_kx.h @@ -0,0 +1,66 @@ +#ifndef crypto_kx_H +#define crypto_kx_H + +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kx_PUBLICKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_publickeybytes(void); + +#define crypto_kx_SECRETKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_secretkeybytes(void); + +#define crypto_kx_SEEDBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_seedbytes(void); + +#define crypto_kx_SESSIONKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_sessionkeybytes(void); + +#define crypto_kx_PRIMITIVE "x25519blake2b" +SODIUM_EXPORT +const char *crypto_kx_primitive(void); + +SODIUM_EXPORT +int crypto_kx_seed_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], + unsigned char sk[crypto_kx_SECRETKEYBYTES], + const unsigned char seed[crypto_kx_SEEDBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_kx_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], + unsigned char sk[crypto_kx_SECRETKEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_kx_client_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], + unsigned char tx[crypto_kx_SESSIONKEYBYTES], + const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES], + const unsigned char client_sk[crypto_kx_SECRETKEYBYTES], + const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES]) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 4, 5))); + +SODIUM_EXPORT +int crypto_kx_server_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], + unsigned char tx[crypto_kx_SESSIONKEYBYTES], + const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES], + const unsigned char server_sk[crypto_kx_SECRETKEYBYTES], + const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES]) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_onetimeauth.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_onetimeauth.h new file mode 100644 index 00000000..7cd7b070 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_onetimeauth.h @@ -0,0 +1,65 @@ +#ifndef crypto_onetimeauth_H +#define crypto_onetimeauth_H + +#include + +#include "crypto_onetimeauth_poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef crypto_onetimeauth_poly1305_state crypto_onetimeauth_state; + +SODIUM_EXPORT +size_t crypto_onetimeauth_statebytes(void); + +#define crypto_onetimeauth_BYTES crypto_onetimeauth_poly1305_BYTES +SODIUM_EXPORT +size_t crypto_onetimeauth_bytes(void); + +#define crypto_onetimeauth_KEYBYTES crypto_onetimeauth_poly1305_KEYBYTES +SODIUM_EXPORT +size_t crypto_onetimeauth_keybytes(void); + +#define crypto_onetimeauth_PRIMITIVE "poly1305" +SODIUM_EXPORT +const char *crypto_onetimeauth_primitive(void); + +SODIUM_EXPORT +int crypto_onetimeauth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_verify(const unsigned char *h, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_init(crypto_onetimeauth_state *state, + const unsigned char *key) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_onetimeauth_update(crypto_onetimeauth_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_onetimeauth_final(crypto_onetimeauth_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_onetimeauth_keygen(unsigned char k[crypto_onetimeauth_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_onetimeauth_poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_onetimeauth_poly1305.h new file mode 100644 index 00000000..f3e34d86 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_onetimeauth_poly1305.h @@ -0,0 +1,72 @@ +#ifndef crypto_onetimeauth_poly1305_H +#define crypto_onetimeauth_poly1305_H + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#include +#include +#include + +#include + +#include "export.h" + +typedef struct CRYPTO_ALIGN(16) crypto_onetimeauth_poly1305_state { + unsigned char opaque[256]; +} crypto_onetimeauth_poly1305_state; + +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_statebytes(void); + +#define crypto_onetimeauth_poly1305_BYTES 16U +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_bytes(void); + +#define crypto_onetimeauth_poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_keybytes(void); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_init(crypto_onetimeauth_poly1305_state *state, + const unsigned char *key) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_update(crypto_onetimeauth_poly1305_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_final(crypto_onetimeauth_poly1305_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_onetimeauth_poly1305_keygen(unsigned char k[crypto_onetimeauth_poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash.h new file mode 100644 index 00000000..585a993e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash.h @@ -0,0 +1,147 @@ +#ifndef crypto_pwhash_H +#define crypto_pwhash_H + +#include + +#include "crypto_pwhash_argon2i.h" +#include "crypto_pwhash_argon2id.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_ALG_ARGON2I13 crypto_pwhash_argon2i_ALG_ARGON2I13 +SODIUM_EXPORT +int crypto_pwhash_alg_argon2i13(void); + +#define crypto_pwhash_ALG_ARGON2ID13 crypto_pwhash_argon2id_ALG_ARGON2ID13 +SODIUM_EXPORT +int crypto_pwhash_alg_argon2id13(void); + +#define crypto_pwhash_ALG_DEFAULT crypto_pwhash_ALG_ARGON2ID13 +SODIUM_EXPORT +int crypto_pwhash_alg_default(void); + +#define crypto_pwhash_BYTES_MIN crypto_pwhash_argon2id_BYTES_MIN +SODIUM_EXPORT +size_t crypto_pwhash_bytes_min(void); + +#define crypto_pwhash_BYTES_MAX crypto_pwhash_argon2id_BYTES_MAX +SODIUM_EXPORT +size_t crypto_pwhash_bytes_max(void); + +#define crypto_pwhash_PASSWD_MIN crypto_pwhash_argon2id_PASSWD_MIN +SODIUM_EXPORT +size_t crypto_pwhash_passwd_min(void); + +#define crypto_pwhash_PASSWD_MAX crypto_pwhash_argon2id_PASSWD_MAX +SODIUM_EXPORT +size_t crypto_pwhash_passwd_max(void); + +#define crypto_pwhash_SALTBYTES crypto_pwhash_argon2id_SALTBYTES +SODIUM_EXPORT +size_t crypto_pwhash_saltbytes(void); + +#define crypto_pwhash_STRBYTES crypto_pwhash_argon2id_STRBYTES +SODIUM_EXPORT +size_t crypto_pwhash_strbytes(void); + +#define crypto_pwhash_STRPREFIX crypto_pwhash_argon2id_STRPREFIX +SODIUM_EXPORT +const char *crypto_pwhash_strprefix(void); + +#define crypto_pwhash_OPSLIMIT_MIN crypto_pwhash_argon2id_OPSLIMIT_MIN +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_min(void); + +#define crypto_pwhash_OPSLIMIT_MAX crypto_pwhash_argon2id_OPSLIMIT_MAX +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_max(void); + +#define crypto_pwhash_MEMLIMIT_MIN crypto_pwhash_argon2id_MEMLIMIT_MIN +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_min(void); + +#define crypto_pwhash_MEMLIMIT_MAX crypto_pwhash_argon2id_MEMLIMIT_MAX +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_max(void); + +#define crypto_pwhash_OPSLIMIT_INTERACTIVE crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_interactive(void); + +#define crypto_pwhash_MEMLIMIT_INTERACTIVE crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_interactive(void); + +#define crypto_pwhash_OPSLIMIT_MODERATE crypto_pwhash_argon2id_OPSLIMIT_MODERATE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_moderate(void); + +#define crypto_pwhash_MEMLIMIT_MODERATE crypto_pwhash_argon2id_MEMLIMIT_MODERATE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_moderate(void); + +#define crypto_pwhash_OPSLIMIT_SENSITIVE crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_sensitive(void); + +#define crypto_pwhash_MEMLIMIT_SENSITIVE crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_sensitive(void); + +/* + * With this function, do not forget to store all parameters, including the + * algorithm identifier in order to produce deterministic output. + * The crypto_pwhash_* definitions, including crypto_pwhash_ALG_DEFAULT, + * may change. + */ +SODIUM_EXPORT +int crypto_pwhash(unsigned char * const out, unsigned long long outlen, + const char * const passwd, unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +/* + * The output string already includes all the required parameters, including + * the algorithm identifier. The string is all that has to be stored in + * order to verify a password. + */ +SODIUM_EXPORT +int crypto_pwhash_str(char out[crypto_pwhash_STRBYTES], + const char * const passwd, unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_alg(char out[crypto_pwhash_STRBYTES], + const char * const passwd, unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit, int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_needs_rehash(const char str[crypto_pwhash_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#define crypto_pwhash_PRIMITIVE "argon2i" +SODIUM_EXPORT +const char *crypto_pwhash_primitive(void) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_argon2i.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_argon2i.h new file mode 100644 index 00000000..88ff6221 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_argon2i.h @@ -0,0 +1,122 @@ +#ifndef crypto_pwhash_argon2i_H +#define crypto_pwhash_argon2i_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_argon2i_ALG_ARGON2I13 1 +SODIUM_EXPORT +int crypto_pwhash_argon2i_alg_argon2i13(void); + +#define crypto_pwhash_argon2i_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_bytes_min(void); + +#define crypto_pwhash_argon2i_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_bytes_max(void); + +#define crypto_pwhash_argon2i_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_passwd_min(void); + +#define crypto_pwhash_argon2i_PASSWD_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_passwd_max(void); + +#define crypto_pwhash_argon2i_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_saltbytes(void); + +#define crypto_pwhash_argon2i_STRBYTES 128U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_strbytes(void); + +#define crypto_pwhash_argon2i_STRPREFIX "$argon2i$" +SODIUM_EXPORT +const char *crypto_pwhash_argon2i_strprefix(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MIN 3U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_min(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_max(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MIN 8192U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_min(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MAX \ + ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_max(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE 4U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_interactive(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE 33554432U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_interactive(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MODERATE 6U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_moderate(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MODERATE 134217728U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_moderate(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE 8U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_sensitive(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE 536870912U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_argon2i(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, + int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str(char out[crypto_pwhash_argon2i_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str_verify(const char str[crypto_pwhash_argon2i_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str_needs_rehash(const char str[crypto_pwhash_argon2i_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_argon2id.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_argon2id.h new file mode 100644 index 00000000..7183abd1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_argon2id.h @@ -0,0 +1,122 @@ +#ifndef crypto_pwhash_argon2id_H +#define crypto_pwhash_argon2id_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_argon2id_ALG_ARGON2ID13 2 +SODIUM_EXPORT +int crypto_pwhash_argon2id_alg_argon2id13(void); + +#define crypto_pwhash_argon2id_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_bytes_min(void); + +#define crypto_pwhash_argon2id_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_bytes_max(void); + +#define crypto_pwhash_argon2id_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_passwd_min(void); + +#define crypto_pwhash_argon2id_PASSWD_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_passwd_max(void); + +#define crypto_pwhash_argon2id_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_saltbytes(void); + +#define crypto_pwhash_argon2id_STRBYTES 128U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_strbytes(void); + +#define crypto_pwhash_argon2id_STRPREFIX "$argon2id$" +SODIUM_EXPORT +const char *crypto_pwhash_argon2id_strprefix(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MIN 1U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_min(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_max(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MIN 8192U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_min(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MAX \ + ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_max(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE 2U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_interactive(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE 67108864U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_interactive(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MODERATE 3U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_moderate(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MODERATE 268435456U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_moderate(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE 4U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_sensitive(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE 1073741824U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_argon2id(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, + int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str(char out[crypto_pwhash_argon2id_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str_verify(const char str[crypto_pwhash_argon2id_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str_needs_rehash(const char str[crypto_pwhash_argon2id_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_scryptsalsa208sha256.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_scryptsalsa208sha256.h new file mode 100644 index 00000000..5c0bf7d3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_pwhash_scryptsalsa208sha256.h @@ -0,0 +1,120 @@ +#ifndef crypto_pwhash_scryptsalsa208sha256_H +#define crypto_pwhash_scryptsalsa208sha256_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_scryptsalsa208sha256_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_bytes_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_BYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, 0x1fffffffe0ULL) +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_bytes_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_passwd_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_passwd_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_SALTBYTES 32U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_saltbytes(void); + +#define crypto_pwhash_scryptsalsa208sha256_STRBYTES 102U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_strbytes(void); + +#define crypto_pwhash_scryptsalsa208sha256_STRPREFIX "$7$" +SODIUM_EXPORT +const char *crypto_pwhash_scryptsalsa208sha256_strprefix(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN 32768U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN 16777216U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX \ + SODIUM_MIN(SIZE_MAX, 68719476736ULL) +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE 524288U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_interactive(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE 16777216U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_interactive(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE 33554432U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE 1073741824U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str(char out[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str_verify(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_ll(const uint8_t * passwd, size_t passwdlen, + const uint8_t * salt, size_t saltlen, + uint64_t N, uint32_t r, uint32_t p, + uint8_t * buf, size_t buflen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str_needs_rehash(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult.h new file mode 100644 index 00000000..1c685853 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult.h @@ -0,0 +1,46 @@ +#ifndef crypto_scalarmult_H +#define crypto_scalarmult_H + +#include + +#include "crypto_scalarmult_curve25519.h" +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_BYTES crypto_scalarmult_curve25519_BYTES +SODIUM_EXPORT +size_t crypto_scalarmult_bytes(void); + +#define crypto_scalarmult_SCALARBYTES crypto_scalarmult_curve25519_SCALARBYTES +SODIUM_EXPORT +size_t crypto_scalarmult_scalarbytes(void); + +#define crypto_scalarmult_PRIMITIVE "curve25519" +SODIUM_EXPORT +const char *crypto_scalarmult_primitive(void); + +SODIUM_EXPORT +int crypto_scalarmult_base(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_curve25519.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_curve25519.h new file mode 100644 index 00000000..60e9d0c5 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_curve25519.h @@ -0,0 +1,42 @@ +#ifndef crypto_scalarmult_curve25519_H +#define crypto_scalarmult_curve25519_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_curve25519_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_curve25519_bytes(void); + +#define crypto_scalarmult_curve25519_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_curve25519_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_curve25519_base(unsigned char *q, + const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_ed25519.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_ed25519.h new file mode 100644 index 00000000..2dfa4d70 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_ed25519.h @@ -0,0 +1,51 @@ + +#ifndef crypto_scalarmult_ed25519_H +#define crypto_scalarmult_ed25519_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_ed25519_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ed25519_bytes(void); + +#define crypto_scalarmult_ed25519_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ed25519_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_ed25519(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_noclamp(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_base(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_base_noclamp(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_ristretto255.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_ristretto255.h new file mode 100644 index 00000000..40a45cce --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_scalarmult_ristretto255.h @@ -0,0 +1,43 @@ + +#ifndef crypto_scalarmult_ristretto255_H +#define crypto_scalarmult_ristretto255_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_ristretto255_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ristretto255_bytes(void); + +#define crypto_scalarmult_ristretto255_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ristretto255_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_ristretto255(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ristretto255_base(unsigned char *q, + const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox.h new file mode 100644 index 00000000..1d3709db --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox.h @@ -0,0 +1,93 @@ +#ifndef crypto_secretbox_H +#define crypto_secretbox_H + +#include + +#include "crypto_secretbox_xsalsa20poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_KEYBYTES crypto_secretbox_xsalsa20poly1305_KEYBYTES +SODIUM_EXPORT +size_t crypto_secretbox_keybytes(void); + +#define crypto_secretbox_NONCEBYTES crypto_secretbox_xsalsa20poly1305_NONCEBYTES +SODIUM_EXPORT +size_t crypto_secretbox_noncebytes(void); + +#define crypto_secretbox_MACBYTES crypto_secretbox_xsalsa20poly1305_MACBYTES +SODIUM_EXPORT +size_t crypto_secretbox_macbytes(void); + +#define crypto_secretbox_PRIMITIVE "xsalsa20poly1305" +SODIUM_EXPORT +const char *crypto_secretbox_primitive(void); + +#define crypto_secretbox_MESSAGEBYTES_MAX crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_secretbox_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_easy(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_open_easy(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_detached(unsigned char *c, unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_secretbox_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +SODIUM_EXPORT +void crypto_secretbox_keygen(unsigned char k[crypto_secretbox_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_secretbox_ZEROBYTES crypto_secretbox_xsalsa20poly1305_ZEROBYTES +SODIUM_EXPORT +size_t crypto_secretbox_zerobytes(void); + +#define crypto_secretbox_BOXZEROBYTES crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES +SODIUM_EXPORT +size_t crypto_secretbox_boxzerobytes(void); + +SODIUM_EXPORT +int crypto_secretbox(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox_xchacha20poly1305.h new file mode 100644 index 00000000..6ec674e3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox_xchacha20poly1305.h @@ -0,0 +1,70 @@ +#ifndef crypto_secretbox_xchacha20poly1305_H +#define crypto_secretbox_xchacha20poly1305_H + +#include +#include "crypto_stream_xchacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_xchacha20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_keybytes(void); + +#define crypto_secretbox_xchacha20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_noncebytes(void); + +#define crypto_secretbox_xchacha20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_macbytes(void); + +#define crypto_secretbox_xchacha20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xchacha20_MESSAGEBYTES_MAX - crypto_secretbox_xchacha20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_easy(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_open_easy(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_detached(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox_xsalsa20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox_xsalsa20poly1305.h new file mode 100644 index 00000000..be0874cb --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretbox_xsalsa20poly1305.h @@ -0,0 +1,69 @@ +#ifndef crypto_secretbox_xsalsa20poly1305_H +#define crypto_secretbox_xsalsa20poly1305_H + +#include +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_xsalsa20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_keybytes(void); + +#define crypto_secretbox_xsalsa20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_noncebytes(void); + +#define crypto_secretbox_xsalsa20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_macbytes(void); + +/* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ +#define crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_secretbox_xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_xsalsa20poly1305(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xsalsa20poly1305_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +void crypto_secretbox_xsalsa20poly1305_keygen(unsigned char k[crypto_secretbox_xsalsa20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_boxzerobytes(void); + +#define crypto_secretbox_xsalsa20poly1305_ZEROBYTES \ + (crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES + \ + crypto_secretbox_xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_zerobytes(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretstream_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretstream_xchacha20poly1305.h new file mode 100644 index 00000000..b22e4e93 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_secretstream_xchacha20poly1305.h @@ -0,0 +1,108 @@ +#ifndef crypto_secretstream_xchacha20poly1305_H +#define crypto_secretstream_xchacha20poly1305_H + +#include + +#include "crypto_aead_xchacha20poly1305.h" +#include "crypto_stream_chacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretstream_xchacha20poly1305_ABYTES \ + (1U + crypto_aead_xchacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_abytes(void); + +#define crypto_secretstream_xchacha20poly1305_HEADERBYTES \ + crypto_aead_xchacha20poly1305_ietf_NPUBBYTES +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_headerbytes(void); + +#define crypto_secretstream_xchacha20poly1305_KEYBYTES \ + crypto_aead_xchacha20poly1305_ietf_KEYBYTES +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_keybytes(void); + +#define crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_secretstream_xchacha20poly1305_ABYTES, \ + (64ULL * ((1ULL << 32) - 2ULL))) +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_messagebytes_max(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_MESSAGE 0x00 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_message(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_PUSH 0x01 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_push(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_REKEY 0x02 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_rekey(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_FINAL \ + (crypto_secretstream_xchacha20poly1305_TAG_PUSH | \ + crypto_secretstream_xchacha20poly1305_TAG_REKEY) +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_final(void); + +typedef struct crypto_secretstream_xchacha20poly1305_state { + unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]; + unsigned char nonce[crypto_stream_chacha20_ietf_NONCEBYTES]; + unsigned char _pad[8]; +} crypto_secretstream_xchacha20poly1305_state; + +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_statebytes(void); + +SODIUM_EXPORT +void crypto_secretstream_xchacha20poly1305_keygen + (unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_init_push + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES], + const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_push + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char *c, unsigned long long *clen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, unsigned char tag) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_init_pull + (crypto_secretstream_xchacha20poly1305_state *state, + const unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES], + const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_pull + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char *m, unsigned long long *mlen_p, unsigned char *tag_p, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +void crypto_secretstream_xchacha20poly1305_rekey + (crypto_secretstream_xchacha20poly1305_state *state); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_shorthash.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_shorthash.h new file mode 100644 index 00000000..fecaa88b --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_shorthash.h @@ -0,0 +1,41 @@ +#ifndef crypto_shorthash_H +#define crypto_shorthash_H + +#include + +#include "crypto_shorthash_siphash24.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_shorthash_BYTES crypto_shorthash_siphash24_BYTES +SODIUM_EXPORT +size_t crypto_shorthash_bytes(void); + +#define crypto_shorthash_KEYBYTES crypto_shorthash_siphash24_KEYBYTES +SODIUM_EXPORT +size_t crypto_shorthash_keybytes(void); + +#define crypto_shorthash_PRIMITIVE "siphash24" +SODIUM_EXPORT +const char *crypto_shorthash_primitive(void); + +SODIUM_EXPORT +int crypto_shorthash(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +void crypto_shorthash_keygen(unsigned char k[crypto_shorthash_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_shorthash_siphash24.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_shorthash_siphash24.h new file mode 100644 index 00000000..1e6f72a6 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_shorthash_siphash24.h @@ -0,0 +1,50 @@ +#ifndef crypto_shorthash_siphash24_H +#define crypto_shorthash_siphash24_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +/* -- 64-bit output -- */ + +#define crypto_shorthash_siphash24_BYTES 8U +SODIUM_EXPORT +size_t crypto_shorthash_siphash24_bytes(void); + +#define crypto_shorthash_siphash24_KEYBYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphash24_keybytes(void); + +SODIUM_EXPORT +int crypto_shorthash_siphash24(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +#ifndef SODIUM_LIBRARY_MINIMAL +/* -- 128-bit output -- */ + +#define crypto_shorthash_siphashx24_BYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphashx24_bytes(void); + +#define crypto_shorthash_siphashx24_KEYBYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphashx24_keybytes(void); + +SODIUM_EXPORT +int crypto_shorthash_siphashx24(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign.h new file mode 100644 index 00000000..f5fafb12 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign.h @@ -0,0 +1,107 @@ +#ifndef crypto_sign_H +#define crypto_sign_H + +/* + * THREAD SAFETY: crypto_sign_keypair() is thread-safe, + * provided that sodium_init() was called before. + * + * Other functions, including crypto_sign_seed_keypair() are always thread-safe. + */ + +#include + +#include "crypto_sign_ed25519.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef crypto_sign_ed25519ph_state crypto_sign_state; + +SODIUM_EXPORT +size_t crypto_sign_statebytes(void); + +#define crypto_sign_BYTES crypto_sign_ed25519_BYTES +SODIUM_EXPORT +size_t crypto_sign_bytes(void); + +#define crypto_sign_SEEDBYTES crypto_sign_ed25519_SEEDBYTES +SODIUM_EXPORT +size_t crypto_sign_seedbytes(void); + +#define crypto_sign_PUBLICKEYBYTES crypto_sign_ed25519_PUBLICKEYBYTES +SODIUM_EXPORT +size_t crypto_sign_publickeybytes(void); + +#define crypto_sign_SECRETKEYBYTES crypto_sign_ed25519_SECRETKEYBYTES +SODIUM_EXPORT +size_t crypto_sign_secretkeybytes(void); + +#define crypto_sign_MESSAGEBYTES_MAX crypto_sign_ed25519_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_sign_messagebytes_max(void); + +#define crypto_sign_PRIMITIVE "ed25519" +SODIUM_EXPORT +const char *crypto_sign_primitive(void); + +SODIUM_EXPORT +int crypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign(unsigned char *sm, unsigned long long *smlen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_open(unsigned char *m, unsigned long long *mlen_p, + const unsigned char *sm, unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_verify_detached(const unsigned char *sig, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_sign_init(crypto_sign_state *state); + +SODIUM_EXPORT +int crypto_sign_update(crypto_sign_state *state, + const unsigned char *m, unsigned long long mlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_sign_final_create(crypto_sign_state *state, unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *sk) + __attribute__ ((nonnull(1, 2, 4))); + +SODIUM_EXPORT +int crypto_sign_final_verify(crypto_sign_state *state, const unsigned char *sig, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign_ed25519.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign_ed25519.h new file mode 100644 index 00000000..0fdac42d --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign_ed25519.h @@ -0,0 +1,124 @@ +#ifndef crypto_sign_ed25519_H +#define crypto_sign_ed25519_H + +#include +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_sign_ed25519ph_state { + crypto_hash_sha512_state hs; +} crypto_sign_ed25519ph_state; + +SODIUM_EXPORT +size_t crypto_sign_ed25519ph_statebytes(void); + +#define crypto_sign_ed25519_BYTES 64U +SODIUM_EXPORT +size_t crypto_sign_ed25519_bytes(void); + +#define crypto_sign_ed25519_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_sign_ed25519_seedbytes(void); + +#define crypto_sign_ed25519_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_sign_ed25519_publickeybytes(void); + +#define crypto_sign_ed25519_SECRETKEYBYTES (32U + 32U) +SODIUM_EXPORT +size_t crypto_sign_ed25519_secretkeybytes(void); + +#define crypto_sign_ed25519_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_ed25519_BYTES) +SODIUM_EXPORT +size_t crypto_sign_ed25519_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p, + const unsigned char *sm, unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_detached(unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_verify_detached(const unsigned char *sig, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_sign_ed25519_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk, + const unsigned char *ed25519_pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk, + const unsigned char *ed25519_sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_seed(unsigned char *seed, + const unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_init(crypto_sign_ed25519ph_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_update(crypto_sign_ed25519ph_state *state, + const unsigned char *m, + unsigned long long mlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_final_create(crypto_sign_ed25519ph_state *state, + unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *sk) + __attribute__ ((nonnull(1, 2, 4))); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_final_verify(crypto_sign_ed25519ph_state *state, + const unsigned char *sig, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign_edwards25519sha512batch.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign_edwards25519sha512batch.h new file mode 100644 index 00000000..eed158aa --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_sign_edwards25519sha512batch.h @@ -0,0 +1,55 @@ +#ifndef crypto_sign_edwards25519sha512batch_H +#define crypto_sign_edwards25519sha512batch_H + +/* + * WARNING: This construction was a prototype, which should not be used + * any more in new projects. + * + * crypto_sign_edwards25519sha512batch is provided for applications + * initially built with NaCl, but as recommended by the author of this + * construction, new applications should use ed25519 instead. + * + * In Sodium, you should use the high-level crypto_sign_*() functions instead. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_sign_edwards25519sha512batch_BYTES 64U +#define crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES 32U +#define crypto_sign_edwards25519sha512batch_SECRETKEYBYTES (32U + 32U) +#define crypto_sign_edwards25519sha512batch_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_edwards25519sha512batch_BYTES) + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch(unsigned char *sm, + unsigned long long *smlen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((deprecated)) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch_open(unsigned char *m, + unsigned long long *mlen_p, + const unsigned char *sm, + unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((deprecated)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream.h new file mode 100644 index 00000000..88dab5f6 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream.h @@ -0,0 +1,59 @@ +#ifndef crypto_stream_H +#define crypto_stream_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include + +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_KEYBYTES crypto_stream_xsalsa20_KEYBYTES +SODIUM_EXPORT +size_t crypto_stream_keybytes(void); + +#define crypto_stream_NONCEBYTES crypto_stream_xsalsa20_NONCEBYTES +SODIUM_EXPORT +size_t crypto_stream_noncebytes(void); + +#define crypto_stream_MESSAGEBYTES_MAX crypto_stream_xsalsa20_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_stream_messagebytes_max(void); + +#define crypto_stream_PRIMITIVE "xsalsa20" +SODIUM_EXPORT +const char *crypto_stream_primitive(void); + +SODIUM_EXPORT +int crypto_stream(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_keygen(unsigned char k[crypto_stream_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_chacha20.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_chacha20.h new file mode 100644 index 00000000..40889755 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_chacha20.h @@ -0,0 +1,106 @@ +#ifndef crypto_stream_chacha20_H +#define crypto_stream_chacha20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_chacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_chacha20_keybytes(void); + +#define crypto_stream_chacha20_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_chacha20_noncebytes(void); + +#define crypto_stream_chacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_chacha20_messagebytes_max(void); + +/* ChaCha20 with a 64-bit nonce and a 64-bit counter, as originally designed */ + +SODIUM_EXPORT +int crypto_stream_chacha20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_chacha20_keygen(unsigned char k[crypto_stream_chacha20_KEYBYTES]) + __attribute__ ((nonnull)); + +/* ChaCha20 with a 96-bit nonce and a 32-bit counter (IETF) */ + +#define crypto_stream_chacha20_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_keybytes(void); + +#define crypto_stream_chacha20_ietf_NONCEBYTES 12U +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_noncebytes(void); + +#define crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, 64ULL * (1ULL << 32)) +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint32_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_chacha20_ietf_keygen(unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_stream_chacha20_IETF_KEYBYTES crypto_stream_chacha20_ietf_KEYBYTES +#define crypto_stream_chacha20_IETF_NONCEBYTES crypto_stream_chacha20_ietf_NONCEBYTES +#define crypto_stream_chacha20_IETF_MESSAGEBYTES_MAX crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa20.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa20.h new file mode 100644 index 00000000..45b3b3e3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_salsa20_H +#define crypto_stream_salsa20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa20_keybytes(void); + +#define crypto_stream_salsa20_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa20_noncebytes(void); + +#define crypto_stream_salsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_salsa20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_salsa20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa20_keygen(unsigned char k[crypto_stream_salsa20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa2012.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa2012.h new file mode 100644 index 00000000..6c5d303c --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa2012.h @@ -0,0 +1,53 @@ +#ifndef crypto_stream_salsa2012_H +#define crypto_stream_salsa2012_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa2012_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa2012_keybytes(void); + +#define crypto_stream_salsa2012_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa2012_noncebytes(void); + +#define crypto_stream_salsa2012_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_salsa2012_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_salsa2012(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa2012_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa2012_keygen(unsigned char k[crypto_stream_salsa2012_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa208.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa208.h new file mode 100644 index 00000000..d574f304 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_salsa208.h @@ -0,0 +1,56 @@ +#ifndef crypto_stream_salsa208_H +#define crypto_stream_salsa208_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa208_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa208_keybytes(void) + __attribute__ ((deprecated)); + +#define crypto_stream_salsa208_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa208_noncebytes(void) + __attribute__ ((deprecated)); + +#define crypto_stream_salsa208_MESSAGEBYTES_MAX SODIUM_SIZE_MAX + SODIUM_EXPORT +size_t crypto_stream_salsa208_messagebytes_max(void) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_stream_salsa208(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa208_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa208_keygen(unsigned char k[crypto_stream_salsa208_KEYBYTES]) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_xchacha20.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_xchacha20.h new file mode 100644 index 00000000..c4002db0 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_xchacha20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_xchacha20_H +#define crypto_stream_xchacha20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_xchacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_xchacha20_keybytes(void); + +#define crypto_stream_xchacha20_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_stream_xchacha20_noncebytes(void); + +#define crypto_stream_xchacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_xchacha20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_xchacha20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xchacha20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xchacha20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_xchacha20_keygen(unsigned char k[crypto_stream_xchacha20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_xsalsa20.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_xsalsa20.h new file mode 100644 index 00000000..20034e34 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_stream_xsalsa20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_xsalsa20_H +#define crypto_stream_xsalsa20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_xsalsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_keybytes(void); + +#define crypto_stream_xsalsa20_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_noncebytes(void); + +#define crypto_stream_xsalsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_xsalsa20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xsalsa20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xsalsa20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_xsalsa20_keygen(unsigned char k[crypto_stream_xsalsa20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_16.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_16.h new file mode 100644 index 00000000..7b9c8077 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_16.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_16_H +#define crypto_verify_16_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_16_BYTES 16U +SODIUM_EXPORT +size_t crypto_verify_16_bytes(void); + +SODIUM_EXPORT +int crypto_verify_16(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_32.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_32.h new file mode 100644 index 00000000..9b0f4529 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_32.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_32_H +#define crypto_verify_32_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_32_BYTES 32U +SODIUM_EXPORT +size_t crypto_verify_32_bytes(void); + +SODIUM_EXPORT +int crypto_verify_32(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_64.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_64.h new file mode 100644 index 00000000..c83b7302 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/crypto_verify_64.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_64_H +#define crypto_verify_64_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_64_BYTES 64U +SODIUM_EXPORT +size_t crypto_verify_64_bytes(void); + +SODIUM_EXPORT +int crypto_verify_64(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/export.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/export.h new file mode 100644 index 00000000..a0074fc9 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/export.h @@ -0,0 +1,57 @@ + +#ifndef sodium_export_H +#define sodium_export_H + +#include +#include +#include + +#if !defined(__clang__) && !defined(__GNUC__) +# ifdef __attribute__ +# undef __attribute__ +# endif +# define __attribute__(a) +#endif + +#ifdef SODIUM_STATIC +# define SODIUM_EXPORT +# define SODIUM_EXPORT_WEAK +#else +# if defined(_MSC_VER) +# ifdef SODIUM_DLL_EXPORT +# define SODIUM_EXPORT __declspec(dllexport) +# else +# define SODIUM_EXPORT __declspec(dllimport) +# endif +# else +# if defined(__SUNPRO_C) +# ifndef __GNU_C__ +# define SODIUM_EXPORT __attribute__ (visibility(__global)) +# else +# define SODIUM_EXPORT __attribute__ __global +# endif +# elif defined(_MSG_VER) +# define SODIUM_EXPORT extern __declspec(dllexport) +# else +# define SODIUM_EXPORT __attribute__ ((visibility ("default"))) +# endif +# endif +# if defined(__ELF__) && !defined(SODIUM_DISABLE_WEAK_FUNCTIONS) +# define SODIUM_EXPORT_WEAK SODIUM_EXPORT __attribute__((weak)) +# else +# define SODIUM_EXPORT_WEAK SODIUM_EXPORT +# endif +#endif + +#ifndef CRYPTO_ALIGN +# if defined(__INTEL_COMPILER) || defined(_MSC_VER) +# define CRYPTO_ALIGN(x) __declspec(align(x)) +# else +# define CRYPTO_ALIGN(x) __attribute__ ((aligned(x))) +# endif +#endif + +#define SODIUM_MIN(A, B) ((A) < (B) ? (A) : (B)) +#define SODIUM_SIZE_MAX SODIUM_MIN(UINT64_MAX, SIZE_MAX) + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes.h new file mode 100644 index 00000000..a03cc657 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes.h @@ -0,0 +1,72 @@ + +#ifndef randombytes_H +#define randombytes_H + +#include +#include + +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct randombytes_implementation { + const char *(*implementation_name)(void); /* required */ + uint32_t (*random)(void); /* required */ + void (*stir)(void); /* optional */ + uint32_t (*uniform)(const uint32_t upper_bound); /* optional, a default implementation will be used if NULL */ + void (*buf)(void * const buf, const size_t size); /* required */ + int (*close)(void); /* optional */ +} randombytes_implementation; + +#define randombytes_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 0xffffffffUL) + +#define randombytes_SEEDBYTES 32U +SODIUM_EXPORT +size_t randombytes_seedbytes(void); + +SODIUM_EXPORT +void randombytes_buf(void * const buf, const size_t size) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void randombytes_buf_deterministic(void * const buf, const size_t size, + const unsigned char seed[randombytes_SEEDBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +uint32_t randombytes_random(void); + +SODIUM_EXPORT +uint32_t randombytes_uniform(const uint32_t upper_bound); + +SODIUM_EXPORT +void randombytes_stir(void); + +SODIUM_EXPORT +int randombytes_close(void); + +SODIUM_EXPORT +int randombytes_set_implementation(randombytes_implementation *impl) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +const char *randombytes_implementation_name(void); + +/* -- NaCl compatibility interface -- */ + +SODIUM_EXPORT +void randombytes(unsigned char * const buf, const unsigned long long buf_len) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes_internal_random.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes_internal_random.h new file mode 100644 index 00000000..2b2b7d6e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes_internal_random.h @@ -0,0 +1,22 @@ + +#ifndef randombytes_internal_random_H +#define randombytes_internal_random_H + +#include "export.h" +#include "randombytes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +extern struct randombytes_implementation randombytes_internal_implementation; + +/* Backwards compatibility with libsodium < 1.0.18 */ +#define randombytes_salsa20_implementation randombytes_internal_implementation + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes_sysrandom.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes_sysrandom.h new file mode 100644 index 00000000..9e27b674 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/randombytes_sysrandom.h @@ -0,0 +1,19 @@ + +#ifndef randombytes_sysrandom_H +#define randombytes_sysrandom_H + +#include "export.h" +#include "randombytes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +extern struct randombytes_implementation randombytes_sysrandom_implementation; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/runtime.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/runtime.h new file mode 100644 index 00000000..7f15d58e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/runtime.h @@ -0,0 +1,52 @@ + +#ifndef sodium_runtime_H +#define sodium_runtime_H + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_neon(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse2(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse3(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_ssse3(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse41(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx2(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx512f(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_pclmul(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_aesni(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_rdrand(void); + +/* ------------------------------------------------------------------------- */ + +int _sodium_runtime_get_cpu_features(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/utils.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/utils.h new file mode 100644 index 00000000..ac801512 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/utils.h @@ -0,0 +1,179 @@ + +#ifndef sodium_utils_H +#define sodium_utils_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SODIUM_C99 +# if defined(__cplusplus) || !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L +# define SODIUM_C99(X) +# else +# define SODIUM_C99(X) X +# endif +#endif + +SODIUM_EXPORT +void sodium_memzero(void * const pnt, const size_t len); + +SODIUM_EXPORT +void sodium_stackzero(const size_t len); + +/* + * WARNING: sodium_memcmp() must be used to verify if two secret keys + * are equal, in constant time. + * It returns 0 if the keys are equal, and -1 if they differ. + * This function is not designed for lexicographical comparisons. + */ +SODIUM_EXPORT +int sodium_memcmp(const void * const b1_, const void * const b2_, size_t len) + __attribute__ ((warn_unused_result)); + +/* + * sodium_compare() returns -1 if b1_ < b2_, 1 if b1_ > b2_ and 0 if b1_ == b2_ + * It is suitable for lexicographical comparisons, or to compare nonces + * and counters stored in little-endian format. + * However, it is slower than sodium_memcmp(). + */ +SODIUM_EXPORT +int sodium_compare(const unsigned char *b1_, const unsigned char *b2_, + size_t len) __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int sodium_is_zero(const unsigned char *n, const size_t nlen); + +SODIUM_EXPORT +void sodium_increment(unsigned char *n, const size_t nlen); + +SODIUM_EXPORT +void sodium_add(unsigned char *a, const unsigned char *b, const size_t len); + +SODIUM_EXPORT +void sodium_sub(unsigned char *a, const unsigned char *b, const size_t len); + +SODIUM_EXPORT +char *sodium_bin2hex(char * const hex, const size_t hex_maxlen, + const unsigned char * const bin, const size_t bin_len) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_hex2bin(unsigned char * const bin, const size_t bin_maxlen, + const char * const hex, const size_t hex_len, + const char * const ignore, size_t * const bin_len, + const char ** const hex_end) + __attribute__ ((nonnull(1))); + +#define sodium_base64_VARIANT_ORIGINAL 1 +#define sodium_base64_VARIANT_ORIGINAL_NO_PADDING 3 +#define sodium_base64_VARIANT_URLSAFE 5 +#define sodium_base64_VARIANT_URLSAFE_NO_PADDING 7 + +/* + * Computes the required length to encode BIN_LEN bytes as a base64 string + * using the given variant. The computed length includes a trailing \0. + */ +#define sodium_base64_ENCODED_LEN(BIN_LEN, VARIANT) \ + (((BIN_LEN) / 3U) * 4U + \ + ((((BIN_LEN) - ((BIN_LEN) / 3U) * 3U) | (((BIN_LEN) - ((BIN_LEN) / 3U) * 3U) >> 1)) & 1U) * \ + (4U - (~((((VARIANT) & 2U) >> 1) - 1U) & (3U - ((BIN_LEN) - ((BIN_LEN) / 3U) * 3U)))) + 1U) + +SODIUM_EXPORT +size_t sodium_base64_encoded_len(const size_t bin_len, const int variant); + +SODIUM_EXPORT +char *sodium_bin2base64(char * const b64, const size_t b64_maxlen, + const unsigned char * const bin, const size_t bin_len, + const int variant) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_base642bin(unsigned char * const bin, const size_t bin_maxlen, + const char * const b64, const size_t b64_len, + const char * const ignore, size_t * const bin_len, + const char ** const b64_end, const int variant) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_mlock(void * const addr, const size_t len) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_munlock(void * const addr, const size_t len) + __attribute__ ((nonnull)); + +/* WARNING: sodium_malloc() and sodium_allocarray() are not general-purpose + * allocation functions. + * + * They return a pointer to a region filled with 0xd0 bytes, immediately + * followed by a guard page. + * As a result, accessing a single byte after the requested allocation size + * will intentionally trigger a segmentation fault. + * + * A canary and an additional guard page placed before the beginning of the + * region may also kill the process if a buffer underflow is detected. + * + * The memory layout is: + * [unprotected region size (read only)][guard page (no access)][unprotected pages (read/write)][guard page (no access)] + * With the layout of the unprotected pages being: + * [optional padding][16-bytes canary][user region] + * + * However: + * - These functions are significantly slower than standard functions + * - Each allocation requires 3 or 4 additional pages + * - The returned address will not be aligned if the allocation size is not + * a multiple of the required alignment. For this reason, these functions + * are designed to store data, such as secret keys and messages. + * + * sodium_malloc() can be used to allocate any libsodium data structure. + * + * The crypto_generichash_state structure is packed and its length is + * either 357 or 361 bytes. For this reason, when using sodium_malloc() to + * allocate a crypto_generichash_state structure, padding must be added in + * order to ensure proper alignment. crypto_generichash_statebytes() + * returns the rounded up structure size, and should be prefered to sizeof(): + * state = sodium_malloc(crypto_generichash_statebytes()); + */ + +SODIUM_EXPORT +void *sodium_malloc(const size_t size) + __attribute__ ((malloc)); + +SODIUM_EXPORT +void *sodium_allocarray(size_t count, size_t size) + __attribute__ ((malloc)); + +SODIUM_EXPORT +void sodium_free(void *ptr); + +SODIUM_EXPORT +int sodium_mprotect_noaccess(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_mprotect_readonly(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_mprotect_readwrite(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_pad(size_t *padded_buflen_p, unsigned char *buf, + size_t unpadded_buflen, size_t blocksize, size_t max_buflen) + __attribute__ ((nonnull(2))); + +SODIUM_EXPORT +int sodium_unpad(size_t *unpadded_buflen_p, const unsigned char *buf, + size_t padded_buflen, size_t blocksize) + __attribute__ ((nonnull(2))); + +/* -------- */ + +int _sodium_alloc_init(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/version.h b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/version.h new file mode 100644 index 00000000..201a290e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/include/sodium/version.h @@ -0,0 +1,33 @@ + +#ifndef sodium_version_H +#define sodium_version_H + +#include "export.h" + +#define SODIUM_VERSION_STRING "1.0.18" + +#define SODIUM_LIBRARY_VERSION_MAJOR 10 +#define SODIUM_LIBRARY_VERSION_MINOR 3 + + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +const char *sodium_version_string(void); + +SODIUM_EXPORT +int sodium_library_version_major(void); + +SODIUM_EXPORT +int sodium_library_version_minor(void); + +SODIUM_EXPORT +int sodium_library_minimal(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.a b/example/android/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.a new file mode 100644 index 0000000000000000000000000000000000000000..865ac560a1b5e44263633e4b49df11f276bc4508 GIT binary patch literal 433990 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

    ^WWPjeTpD^YaO{B8pMP}082qpr|FnB5Y)1%1VG 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®%%>f@Km@K>XdZl(I$c884`h$@kYyn^Cgmq3)K< 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 literal 0 HcmV?d00001 diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.la b/example/android/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.la new file mode 100644 index 00000000..4248f421 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.la @@ -0,0 +1,41 @@ +# libsodium.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libsodium.so' + +# Names of this library. +library_names='libsodium.so' + +# The name of the static archive. +old_library='libsodium.a' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags=' -pthread' + +# Libraries that this one depends upon. +dependency_libs='' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libsodium. +current=0 +age=0 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/home/alex/magnet/example/android/third_party/libsodium/libsodium-1.0.18/libsodium-android-armv8-a/lib' diff --git a/example/android/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.so b/example/android/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.so new file mode 100644 index 0000000000000000000000000000000000000000..b5fe50346c6feed9aca0220e0a6e07935a47ca85 GIT binary patch literal 283928 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

    Xw`Ok#ij`D`w0N}(Q&-@_F&mf7z`H(&d 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 kc4g(my?;vTf6_#pTfUb3Z=AIF@BB+rpV8-$;Y +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +SODIUM_EXPORT +int crypto_aead_aes256gcm_is_available(void); + +#define crypto_aead_aes256gcm_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_keybytes(void); + +#define crypto_aead_aes256gcm_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_nsecbytes(void); + +#define crypto_aead_aes256gcm_NPUBBYTES 12U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_npubbytes(void); + +#define crypto_aead_aes256gcm_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_abytes(void); + +#define crypto_aead_aes256gcm_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_aes256gcm_ABYTES, \ + (16ULL * ((1ULL << 32) - 2ULL))) +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_messagebytes_max(void); + +typedef struct CRYPTO_ALIGN(16) crypto_aead_aes256gcm_state_ { + unsigned char opaque[512]; +} crypto_aead_aes256gcm_state; + +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_statebytes(void); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +/* -- Precomputation interface -- */ + +SODIUM_EXPORT +int crypto_aead_aes256gcm_beforenm(crypto_aead_aes256gcm_state *ctx_, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_afternm(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_afternm(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_detached_afternm(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_detached_afternm(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_aes256gcm_keygen(unsigned char k[crypto_aead_aes256gcm_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_aead_chacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_aead_chacha20poly1305.h new file mode 100644 index 00000000..5d671df1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_aead_chacha20poly1305.h @@ -0,0 +1,180 @@ +#ifndef crypto_aead_chacha20poly1305_H +#define crypto_aead_chacha20poly1305_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +/* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */ + +#define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_keybytes(void); + +#define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void); + +#define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U + +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void); + +#define crypto_aead_chacha20poly1305_ietf_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_abytes(void); + +#define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \ + (64ULL * ((1ULL << 32) - 1ULL))) +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */ + +#define crypto_aead_chacha20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_keybytes(void); + +#define crypto_aead_chacha20poly1305_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_nsecbytes(void); + +#define crypto_aead_chacha20poly1305_NPUBBYTES 8U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_npubbytes(void); + +#define crypto_aead_chacha20poly1305_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_abytes(void); + +#define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \ + (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_aead_chacha20poly1305_IETF_KEYBYTES crypto_aead_chacha20poly1305_ietf_KEYBYTES +#define crypto_aead_chacha20poly1305_IETF_NSECBYTES crypto_aead_chacha20poly1305_ietf_NSECBYTES +#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES crypto_aead_chacha20poly1305_ietf_NPUBBYTES +#define crypto_aead_chacha20poly1305_IETF_ABYTES crypto_aead_chacha20poly1305_ietf_ABYTES +#define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_aead_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_aead_xchacha20poly1305.h new file mode 100644 index 00000000..6643b0cb --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_aead_xchacha20poly1305.h @@ -0,0 +1,100 @@ +#ifndef crypto_aead_xchacha20poly1305_H +#define crypto_aead_xchacha20poly1305_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_aead_xchacha20poly1305_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_keybytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_nsecbytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_NPUBBYTES 24U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_npubbytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_abytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX \ + (SODIUM_SIZE_MAX - crypto_aead_xchacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_xchacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_xchacha20poly1305_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_aead_xchacha20poly1305_IETF_KEYBYTES crypto_aead_xchacha20poly1305_ietf_KEYBYTES +#define crypto_aead_xchacha20poly1305_IETF_NSECBYTES crypto_aead_xchacha20poly1305_ietf_NSECBYTES +#define crypto_aead_xchacha20poly1305_IETF_NPUBBYTES crypto_aead_xchacha20poly1305_ietf_NPUBBYTES +#define crypto_aead_xchacha20poly1305_IETF_ABYTES crypto_aead_xchacha20poly1305_ietf_ABYTES +#define crypto_aead_xchacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth.h new file mode 100644 index 00000000..540aee0e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth.h @@ -0,0 +1,46 @@ +#ifndef crypto_auth_H +#define crypto_auth_H + +#include + +#include "crypto_auth_hmacsha512256.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_BYTES crypto_auth_hmacsha512256_BYTES +SODIUM_EXPORT +size_t crypto_auth_bytes(void); + +#define crypto_auth_KEYBYTES crypto_auth_hmacsha512256_KEYBYTES +SODIUM_EXPORT +size_t crypto_auth_keybytes(void); + +#define crypto_auth_PRIMITIVE "hmacsha512256" +SODIUM_EXPORT +const char *crypto_auth_primitive(void); + +SODIUM_EXPORT +int crypto_auth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_verify(const unsigned char *h, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +void crypto_auth_keygen(unsigned char k[crypto_auth_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha256.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha256.h new file mode 100644 index 00000000..3da864c7 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha256.h @@ -0,0 +1,70 @@ +#ifndef crypto_auth_hmacsha256_H +#define crypto_auth_hmacsha256_H + +#include +#include "crypto_hash_sha256.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha256_BYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_bytes(void); + +#define crypto_auth_hmacsha256_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha256(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef struct crypto_auth_hmacsha256_state { + crypto_hash_sha256_state ictx; + crypto_hash_sha256_state octx; +} crypto_auth_hmacsha256_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_final(crypto_auth_hmacsha256_state *state, + unsigned char *out) __attribute__ ((nonnull)); + + +SODIUM_EXPORT +void crypto_auth_hmacsha256_keygen(unsigned char k[crypto_auth_hmacsha256_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha512.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha512.h new file mode 100644 index 00000000..d992cb81 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha512.h @@ -0,0 +1,68 @@ +#ifndef crypto_auth_hmacsha512_H +#define crypto_auth_hmacsha512_H + +#include +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha512_BYTES 64U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_bytes(void); + +#define crypto_auth_hmacsha512_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef struct crypto_auth_hmacsha512_state { + crypto_hash_sha512_state ictx; + crypto_hash_sha512_state octx; +} crypto_auth_hmacsha512_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_update(crypto_auth_hmacsha512_state *state, + const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_final(crypto_auth_hmacsha512_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_auth_hmacsha512_keygen(unsigned char k[crypto_auth_hmacsha512_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha512256.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha512256.h new file mode 100644 index 00000000..3fb52638 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_auth_hmacsha512256.h @@ -0,0 +1,65 @@ +#ifndef crypto_auth_hmacsha512256_H +#define crypto_auth_hmacsha512256_H + +#include +#include "crypto_auth_hmacsha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha512256_BYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_bytes(void); + +#define crypto_auth_hmacsha512256_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef crypto_auth_hmacsha512_state crypto_auth_hmacsha512256_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_init(crypto_auth_hmacsha512256_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_update(crypto_auth_hmacsha512256_state *state, + const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_final(crypto_auth_hmacsha512256_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_auth_hmacsha512256_keygen(unsigned char k[crypto_auth_hmacsha512256_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box.h new file mode 100644 index 00000000..e060dd29 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box.h @@ -0,0 +1,177 @@ +#ifndef crypto_box_H +#define crypto_box_H + +/* + * THREAD SAFETY: crypto_box_keypair() is thread-safe, + * provided that sodium_init() was called before. + * + * Other functions are always thread-safe. + */ + +#include + +#include "crypto_box_curve25519xsalsa20poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_SEEDBYTES crypto_box_curve25519xsalsa20poly1305_SEEDBYTES +SODIUM_EXPORT +size_t crypto_box_seedbytes(void); + +#define crypto_box_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES +SODIUM_EXPORT +size_t crypto_box_publickeybytes(void); + +#define crypto_box_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES +SODIUM_EXPORT +size_t crypto_box_secretkeybytes(void); + +#define crypto_box_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_NONCEBYTES +SODIUM_EXPORT +size_t crypto_box_noncebytes(void); + +#define crypto_box_MACBYTES crypto_box_curve25519xsalsa20poly1305_MACBYTES +SODIUM_EXPORT +size_t crypto_box_macbytes(void); + +#define crypto_box_MESSAGEBYTES_MAX crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_box_messagebytes_max(void); + +#define crypto_box_PRIMITIVE "curve25519xsalsa20poly1305" +SODIUM_EXPORT +const char *crypto_box_primitive(void); + +SODIUM_EXPORT +int crypto_box_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_easy(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open_easy(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_detached(unsigned char *c, unsigned char *mac, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 2, 5, 6, 7))); + +SODIUM_EXPORT +int crypto_box_open_detached(unsigned char *m, const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6, 7))); + +/* -- Precomputation interface -- */ + +#define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES +SODIUM_EXPORT +size_t crypto_box_beforenmbytes(void); + +SODIUM_EXPORT +int crypto_box_beforenm(unsigned char *k, const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_box_detached_afternm(unsigned char *c, unsigned char *mac, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +/* -- Ephemeral SK interface -- */ + +#define crypto_box_SEALBYTES (crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_sealbytes(void); + +SODIUM_EXPORT +int crypto_box_seal(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *pk) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_box_seal_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES +SODIUM_EXPORT +size_t crypto_box_zerobytes(void); + +#define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES +SODIUM_EXPORT +size_t crypto_box_boxzerobytes(void); + +SODIUM_EXPORT +int crypto_box(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_afternm(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_open_afternm(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box_curve25519xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box_curve25519xchacha20poly1305.h new file mode 100644 index 00000000..26a3d31e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box_curve25519xchacha20poly1305.h @@ -0,0 +1,164 @@ + +#ifndef crypto_box_curve25519xchacha20poly1305_H +#define crypto_box_curve25519xchacha20poly1305_H + +#include +#include "crypto_stream_xchacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_curve25519xchacha20poly1305_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_seedbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_publickeybytes(void); + +#define crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_secretkeybytes(void); + +#define crypto_box_curve25519xchacha20poly1305_BEFORENMBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_beforenmbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_noncebytes(void); + +#define crypto_box_curve25519xchacha20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_macbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xchacha20_MESSAGEBYTES_MAX - crypto_box_curve25519xchacha20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seed_keypair(unsigned char *pk, + unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_easy(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_easy(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_detached(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 2, 5, 6, 7))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6, 7))); + +/* -- Precomputation interface -- */ + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_beforenm(unsigned char *k, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_easy_afternm(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_easy_afternm(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_detached_afternm(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_detached_afternm(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +/* -- Ephemeral SK interface -- */ + +#define crypto_box_curve25519xchacha20poly1305_SEALBYTES \ + (crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES + \ + crypto_box_curve25519xchacha20poly1305_MACBYTES) + +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_sealbytes(void); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seal(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seal_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box_curve25519xsalsa20poly1305.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box_curve25519xsalsa20poly1305.h new file mode 100644 index 00000000..e733f499 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_box_curve25519xsalsa20poly1305.h @@ -0,0 +1,112 @@ +#ifndef crypto_box_curve25519xsalsa20poly1305_H +#define crypto_box_curve25519xsalsa20poly1305_H + +#include +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_curve25519xsalsa20poly1305_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_seedbytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_publickeybytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_secretkeybytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_beforenmbytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_noncebytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_macbytes(void); + +/* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ +#define crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_box_curve25519xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_seed_keypair(unsigned char *pk, + unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_beforenm(unsigned char *k, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_boxzerobytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES \ + (crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES + \ + crypto_box_curve25519xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_zerobytes(void); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_afternm(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_open_afternm(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_ed25519.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_ed25519.h new file mode 100644 index 00000000..3eae00c4 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_ed25519.h @@ -0,0 +1,100 @@ +#ifndef crypto_core_ed25519_H +#define crypto_core_ed25519_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_ed25519_BYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_bytes(void); + +#define crypto_core_ed25519_UNIFORMBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_uniformbytes(void); + +#define crypto_core_ed25519_HASHBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ed25519_hashbytes(void); + +#define crypto_core_ed25519_SCALARBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_scalarbytes(void); + +#define crypto_core_ed25519_NONREDUCEDSCALARBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ed25519_nonreducedscalarbytes(void); + +SODIUM_EXPORT +int crypto_core_ed25519_is_valid_point(const unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_add(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_sub(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_from_uniform(unsigned char *p, const unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_from_hash(unsigned char *p, const unsigned char *h) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_random(unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_random(unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_scalar_invert(unsigned char *recip, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_negate(unsigned char *neg, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_complement(unsigned char *comp, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_add(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_sub(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_mul(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +/* + * The interval `s` is sampled from should be at least 317 bits to ensure almost + * uniformity of `r` over `L`. + */ +SODIUM_EXPORT +void crypto_core_ed25519_scalar_reduce(unsigned char *r, const unsigned char *s) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_hchacha20.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_hchacha20.h new file mode 100644 index 00000000..ece141b0 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_hchacha20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_hchacha20_H +#define crypto_core_hchacha20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_hchacha20_OUTPUTBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hchacha20_outputbytes(void); + +#define crypto_core_hchacha20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hchacha20_inputbytes(void); + +#define crypto_core_hchacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hchacha20_keybytes(void); + +#define crypto_core_hchacha20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hchacha20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_hchacha20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_hsalsa20.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_hsalsa20.h new file mode 100644 index 00000000..4bf7a487 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_hsalsa20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_hsalsa20_H +#define crypto_core_hsalsa20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_hsalsa20_OUTPUTBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_outputbytes(void); + +#define crypto_core_hsalsa20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_inputbytes(void); + +#define crypto_core_hsalsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_keybytes(void); + +#define crypto_core_hsalsa20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_hsalsa20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_ristretto255.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_ristretto255.h new file mode 100644 index 00000000..f2820e55 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_ristretto255.h @@ -0,0 +1,100 @@ +#ifndef crypto_core_ristretto255_H +#define crypto_core_ristretto255_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_ristretto255_BYTES 32 +SODIUM_EXPORT +size_t crypto_core_ristretto255_bytes(void); + +#define crypto_core_ristretto255_HASHBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ristretto255_hashbytes(void); + +#define crypto_core_ristretto255_SCALARBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ristretto255_scalarbytes(void); + +#define crypto_core_ristretto255_NONREDUCEDSCALARBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ristretto255_nonreducedscalarbytes(void); + +SODIUM_EXPORT +int crypto_core_ristretto255_is_valid_point(const unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_add(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_sub(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_from_hash(unsigned char *p, + const unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_random(unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_random(unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_scalar_invert(unsigned char *recip, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_negate(unsigned char *neg, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_complement(unsigned char *comp, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_add(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_sub(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_mul(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +/* + * The interval `s` is sampled from should be at least 317 bits to ensure almost + * uniformity of `r` over `L`. + */ +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_reduce(unsigned char *r, + const unsigned char *s) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa20.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa20.h new file mode 100644 index 00000000..bd79fd9f --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_salsa20_H +#define crypto_core_salsa20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa20_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa20_outputbytes(void); + +#define crypto_core_salsa20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa20_inputbytes(void); + +#define crypto_core_salsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa20_keybytes(void); + +#define crypto_core_salsa20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_salsa20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa2012.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa2012.h new file mode 100644 index 00000000..05957591 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa2012.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_salsa2012_H +#define crypto_core_salsa2012_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa2012_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa2012_outputbytes(void); + +#define crypto_core_salsa2012_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa2012_inputbytes(void); + +#define crypto_core_salsa2012_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa2012_keybytes(void); + +#define crypto_core_salsa2012_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa2012_constbytes(void); + +SODIUM_EXPORT +int crypto_core_salsa2012(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa208.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa208.h new file mode 100644 index 00000000..d2f216af --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_core_salsa208.h @@ -0,0 +1,40 @@ +#ifndef crypto_core_salsa208_H +#define crypto_core_salsa208_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa208_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa208_outputbytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa208_inputbytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa208_keybytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa208_constbytes(void) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_core_salsa208(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_generichash.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_generichash.h new file mode 100644 index 00000000..d897e5d2 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_generichash.h @@ -0,0 +1,84 @@ +#ifndef crypto_generichash_H +#define crypto_generichash_H + +#include + +#include "crypto_generichash_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_generichash_BYTES_MIN crypto_generichash_blake2b_BYTES_MIN +SODIUM_EXPORT +size_t crypto_generichash_bytes_min(void); + +#define crypto_generichash_BYTES_MAX crypto_generichash_blake2b_BYTES_MAX +SODIUM_EXPORT +size_t crypto_generichash_bytes_max(void); + +#define crypto_generichash_BYTES crypto_generichash_blake2b_BYTES +SODIUM_EXPORT +size_t crypto_generichash_bytes(void); + +#define crypto_generichash_KEYBYTES_MIN crypto_generichash_blake2b_KEYBYTES_MIN +SODIUM_EXPORT +size_t crypto_generichash_keybytes_min(void); + +#define crypto_generichash_KEYBYTES_MAX crypto_generichash_blake2b_KEYBYTES_MAX +SODIUM_EXPORT +size_t crypto_generichash_keybytes_max(void); + +#define crypto_generichash_KEYBYTES crypto_generichash_blake2b_KEYBYTES +SODIUM_EXPORT +size_t crypto_generichash_keybytes(void); + +#define crypto_generichash_PRIMITIVE "blake2b" +SODIUM_EXPORT +const char *crypto_generichash_primitive(void); + +/* + * Important when writing bindings for other programming languages: + * the state address should be 64-bytes aligned. + */ +typedef crypto_generichash_blake2b_state crypto_generichash_state; + +SODIUM_EXPORT +size_t crypto_generichash_statebytes(void); + +SODIUM_EXPORT +int crypto_generichash(unsigned char *out, size_t outlen, + const unsigned char *in, unsigned long long inlen, + const unsigned char *key, size_t keylen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_init(crypto_generichash_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_update(crypto_generichash_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_final(crypto_generichash_state *state, + unsigned char *out, const size_t outlen) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_generichash_keygen(unsigned char k[crypto_generichash_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_generichash_blake2b.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_generichash_blake2b.h new file mode 100644 index 00000000..fee9d8ad --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_generichash_blake2b.h @@ -0,0 +1,118 @@ +#ifndef crypto_generichash_blake2b_H +#define crypto_generichash_blake2b_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# pragma pack(1) +#else +# pragma pack(push, 1) +#endif + +typedef struct CRYPTO_ALIGN(64) crypto_generichash_blake2b_state { + unsigned char opaque[384]; +} crypto_generichash_blake2b_state; + +#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# pragma pack() +#else +# pragma pack(pop) +#endif + +#define crypto_generichash_blake2b_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes_min(void); + +#define crypto_generichash_blake2b_BYTES_MAX 64U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes_max(void); + +#define crypto_generichash_blake2b_BYTES 32U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes(void); + +#define crypto_generichash_blake2b_KEYBYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes_min(void); + +#define crypto_generichash_blake2b_KEYBYTES_MAX 64U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes_max(void); + +#define crypto_generichash_blake2b_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes(void); + +#define crypto_generichash_blake2b_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_saltbytes(void); + +#define crypto_generichash_blake2b_PERSONALBYTES 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_personalbytes(void); + +SODIUM_EXPORT +size_t crypto_generichash_blake2b_statebytes(void); + +SODIUM_EXPORT +int crypto_generichash_blake2b(unsigned char *out, size_t outlen, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *key, size_t keylen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *key, + size_t keylen, + const unsigned char *salt, + const unsigned char *personal) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_init_salt_personal(crypto_generichash_blake2b_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen, + const unsigned char *salt, + const unsigned char *personal) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_update(crypto_generichash_blake2b_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_final(crypto_generichash_blake2b_state *state, + unsigned char *out, + const size_t outlen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_generichash_blake2b_keygen(unsigned char k[crypto_generichash_blake2b_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash.h new file mode 100644 index 00000000..8752f9ca --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash.h @@ -0,0 +1,40 @@ +#ifndef crypto_hash_H +#define crypto_hash_H + +/* + * WARNING: Unless you absolutely need to use SHA512 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA512, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include + +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_hash_BYTES crypto_hash_sha512_BYTES +SODIUM_EXPORT +size_t crypto_hash_bytes(void); + +SODIUM_EXPORT +int crypto_hash(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +#define crypto_hash_PRIMITIVE "sha512" +SODIUM_EXPORT +const char *crypto_hash_primitive(void) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash_sha256.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash_sha256.h new file mode 100644 index 00000000..b18217e1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash_sha256.h @@ -0,0 +1,60 @@ +#ifndef crypto_hash_sha256_H +#define crypto_hash_sha256_H + +/* + * WARNING: Unless you absolutely need to use SHA256 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA256, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_hash_sha256_state { + uint32_t state[8]; + uint64_t count; + uint8_t buf[64]; +} crypto_hash_sha256_state; + +SODIUM_EXPORT +size_t crypto_hash_sha256_statebytes(void); + +#define crypto_hash_sha256_BYTES 32U +SODIUM_EXPORT +size_t crypto_hash_sha256_bytes(void); + +SODIUM_EXPORT +int crypto_hash_sha256(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha256_init(crypto_hash_sha256_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_hash_sha256_update(crypto_hash_sha256_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha256_final(crypto_hash_sha256_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash_sha512.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash_sha512.h new file mode 100644 index 00000000..8efa7193 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_hash_sha512.h @@ -0,0 +1,60 @@ +#ifndef crypto_hash_sha512_H +#define crypto_hash_sha512_H + +/* + * WARNING: Unless you absolutely need to use SHA512 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA512, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_hash_sha512_state { + uint64_t state[8]; + uint64_t count[2]; + uint8_t buf[128]; +} crypto_hash_sha512_state; + +SODIUM_EXPORT +size_t crypto_hash_sha512_statebytes(void); + +#define crypto_hash_sha512_BYTES 64U +SODIUM_EXPORT +size_t crypto_hash_sha512_bytes(void); + +SODIUM_EXPORT +int crypto_hash_sha512(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha512_init(crypto_hash_sha512_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_hash_sha512_update(crypto_hash_sha512_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha512_final(crypto_hash_sha512_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kdf.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kdf.h new file mode 100644 index 00000000..ac2fc618 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kdf.h @@ -0,0 +1,53 @@ +#ifndef crypto_kdf_H +#define crypto_kdf_H + +#include +#include + +#include "crypto_kdf_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kdf_BYTES_MIN crypto_kdf_blake2b_BYTES_MIN +SODIUM_EXPORT +size_t crypto_kdf_bytes_min(void); + +#define crypto_kdf_BYTES_MAX crypto_kdf_blake2b_BYTES_MAX +SODIUM_EXPORT +size_t crypto_kdf_bytes_max(void); + +#define crypto_kdf_CONTEXTBYTES crypto_kdf_blake2b_CONTEXTBYTES +SODIUM_EXPORT +size_t crypto_kdf_contextbytes(void); + +#define crypto_kdf_KEYBYTES crypto_kdf_blake2b_KEYBYTES +SODIUM_EXPORT +size_t crypto_kdf_keybytes(void); + +#define crypto_kdf_PRIMITIVE "blake2b" +SODIUM_EXPORT +const char *crypto_kdf_primitive(void) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_kdf_derive_from_key(unsigned char *subkey, size_t subkey_len, + uint64_t subkey_id, + const char ctx[crypto_kdf_CONTEXTBYTES], + const unsigned char key[crypto_kdf_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_kdf_keygen(unsigned char k[crypto_kdf_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kdf_blake2b.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kdf_blake2b.h new file mode 100644 index 00000000..3ae47dd3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kdf_blake2b.h @@ -0,0 +1,44 @@ +#ifndef crypto_kdf_blake2b_H +#define crypto_kdf_blake2b_H + +#include +#include + +#include "crypto_kdf_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kdf_blake2b_BYTES_MIN 16 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_bytes_min(void); + +#define crypto_kdf_blake2b_BYTES_MAX 64 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_bytes_max(void); + +#define crypto_kdf_blake2b_CONTEXTBYTES 8 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_contextbytes(void); + +#define crypto_kdf_blake2b_KEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_keybytes(void); + +SODIUM_EXPORT +int crypto_kdf_blake2b_derive_from_key(unsigned char *subkey, size_t subkey_len, + uint64_t subkey_id, + const char ctx[crypto_kdf_blake2b_CONTEXTBYTES], + const unsigned char key[crypto_kdf_blake2b_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kx.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kx.h new file mode 100644 index 00000000..347132c3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_kx.h @@ -0,0 +1,66 @@ +#ifndef crypto_kx_H +#define crypto_kx_H + +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kx_PUBLICKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_publickeybytes(void); + +#define crypto_kx_SECRETKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_secretkeybytes(void); + +#define crypto_kx_SEEDBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_seedbytes(void); + +#define crypto_kx_SESSIONKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_sessionkeybytes(void); + +#define crypto_kx_PRIMITIVE "x25519blake2b" +SODIUM_EXPORT +const char *crypto_kx_primitive(void); + +SODIUM_EXPORT +int crypto_kx_seed_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], + unsigned char sk[crypto_kx_SECRETKEYBYTES], + const unsigned char seed[crypto_kx_SEEDBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_kx_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], + unsigned char sk[crypto_kx_SECRETKEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_kx_client_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], + unsigned char tx[crypto_kx_SESSIONKEYBYTES], + const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES], + const unsigned char client_sk[crypto_kx_SECRETKEYBYTES], + const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES]) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 4, 5))); + +SODIUM_EXPORT +int crypto_kx_server_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], + unsigned char tx[crypto_kx_SESSIONKEYBYTES], + const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES], + const unsigned char server_sk[crypto_kx_SECRETKEYBYTES], + const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES]) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_onetimeauth.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_onetimeauth.h new file mode 100644 index 00000000..7cd7b070 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_onetimeauth.h @@ -0,0 +1,65 @@ +#ifndef crypto_onetimeauth_H +#define crypto_onetimeauth_H + +#include + +#include "crypto_onetimeauth_poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef crypto_onetimeauth_poly1305_state crypto_onetimeauth_state; + +SODIUM_EXPORT +size_t crypto_onetimeauth_statebytes(void); + +#define crypto_onetimeauth_BYTES crypto_onetimeauth_poly1305_BYTES +SODIUM_EXPORT +size_t crypto_onetimeauth_bytes(void); + +#define crypto_onetimeauth_KEYBYTES crypto_onetimeauth_poly1305_KEYBYTES +SODIUM_EXPORT +size_t crypto_onetimeauth_keybytes(void); + +#define crypto_onetimeauth_PRIMITIVE "poly1305" +SODIUM_EXPORT +const char *crypto_onetimeauth_primitive(void); + +SODIUM_EXPORT +int crypto_onetimeauth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_verify(const unsigned char *h, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_init(crypto_onetimeauth_state *state, + const unsigned char *key) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_onetimeauth_update(crypto_onetimeauth_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_onetimeauth_final(crypto_onetimeauth_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_onetimeauth_keygen(unsigned char k[crypto_onetimeauth_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_onetimeauth_poly1305.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_onetimeauth_poly1305.h new file mode 100644 index 00000000..f3e34d86 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_onetimeauth_poly1305.h @@ -0,0 +1,72 @@ +#ifndef crypto_onetimeauth_poly1305_H +#define crypto_onetimeauth_poly1305_H + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#include +#include +#include + +#include + +#include "export.h" + +typedef struct CRYPTO_ALIGN(16) crypto_onetimeauth_poly1305_state { + unsigned char opaque[256]; +} crypto_onetimeauth_poly1305_state; + +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_statebytes(void); + +#define crypto_onetimeauth_poly1305_BYTES 16U +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_bytes(void); + +#define crypto_onetimeauth_poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_keybytes(void); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_init(crypto_onetimeauth_poly1305_state *state, + const unsigned char *key) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_update(crypto_onetimeauth_poly1305_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_final(crypto_onetimeauth_poly1305_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_onetimeauth_poly1305_keygen(unsigned char k[crypto_onetimeauth_poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash.h new file mode 100644 index 00000000..585a993e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash.h @@ -0,0 +1,147 @@ +#ifndef crypto_pwhash_H +#define crypto_pwhash_H + +#include + +#include "crypto_pwhash_argon2i.h" +#include "crypto_pwhash_argon2id.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_ALG_ARGON2I13 crypto_pwhash_argon2i_ALG_ARGON2I13 +SODIUM_EXPORT +int crypto_pwhash_alg_argon2i13(void); + +#define crypto_pwhash_ALG_ARGON2ID13 crypto_pwhash_argon2id_ALG_ARGON2ID13 +SODIUM_EXPORT +int crypto_pwhash_alg_argon2id13(void); + +#define crypto_pwhash_ALG_DEFAULT crypto_pwhash_ALG_ARGON2ID13 +SODIUM_EXPORT +int crypto_pwhash_alg_default(void); + +#define crypto_pwhash_BYTES_MIN crypto_pwhash_argon2id_BYTES_MIN +SODIUM_EXPORT +size_t crypto_pwhash_bytes_min(void); + +#define crypto_pwhash_BYTES_MAX crypto_pwhash_argon2id_BYTES_MAX +SODIUM_EXPORT +size_t crypto_pwhash_bytes_max(void); + +#define crypto_pwhash_PASSWD_MIN crypto_pwhash_argon2id_PASSWD_MIN +SODIUM_EXPORT +size_t crypto_pwhash_passwd_min(void); + +#define crypto_pwhash_PASSWD_MAX crypto_pwhash_argon2id_PASSWD_MAX +SODIUM_EXPORT +size_t crypto_pwhash_passwd_max(void); + +#define crypto_pwhash_SALTBYTES crypto_pwhash_argon2id_SALTBYTES +SODIUM_EXPORT +size_t crypto_pwhash_saltbytes(void); + +#define crypto_pwhash_STRBYTES crypto_pwhash_argon2id_STRBYTES +SODIUM_EXPORT +size_t crypto_pwhash_strbytes(void); + +#define crypto_pwhash_STRPREFIX crypto_pwhash_argon2id_STRPREFIX +SODIUM_EXPORT +const char *crypto_pwhash_strprefix(void); + +#define crypto_pwhash_OPSLIMIT_MIN crypto_pwhash_argon2id_OPSLIMIT_MIN +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_min(void); + +#define crypto_pwhash_OPSLIMIT_MAX crypto_pwhash_argon2id_OPSLIMIT_MAX +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_max(void); + +#define crypto_pwhash_MEMLIMIT_MIN crypto_pwhash_argon2id_MEMLIMIT_MIN +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_min(void); + +#define crypto_pwhash_MEMLIMIT_MAX crypto_pwhash_argon2id_MEMLIMIT_MAX +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_max(void); + +#define crypto_pwhash_OPSLIMIT_INTERACTIVE crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_interactive(void); + +#define crypto_pwhash_MEMLIMIT_INTERACTIVE crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_interactive(void); + +#define crypto_pwhash_OPSLIMIT_MODERATE crypto_pwhash_argon2id_OPSLIMIT_MODERATE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_moderate(void); + +#define crypto_pwhash_MEMLIMIT_MODERATE crypto_pwhash_argon2id_MEMLIMIT_MODERATE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_moderate(void); + +#define crypto_pwhash_OPSLIMIT_SENSITIVE crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_sensitive(void); + +#define crypto_pwhash_MEMLIMIT_SENSITIVE crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_sensitive(void); + +/* + * With this function, do not forget to store all parameters, including the + * algorithm identifier in order to produce deterministic output. + * The crypto_pwhash_* definitions, including crypto_pwhash_ALG_DEFAULT, + * may change. + */ +SODIUM_EXPORT +int crypto_pwhash(unsigned char * const out, unsigned long long outlen, + const char * const passwd, unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +/* + * The output string already includes all the required parameters, including + * the algorithm identifier. The string is all that has to be stored in + * order to verify a password. + */ +SODIUM_EXPORT +int crypto_pwhash_str(char out[crypto_pwhash_STRBYTES], + const char * const passwd, unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_alg(char out[crypto_pwhash_STRBYTES], + const char * const passwd, unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit, int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_needs_rehash(const char str[crypto_pwhash_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#define crypto_pwhash_PRIMITIVE "argon2i" +SODIUM_EXPORT +const char *crypto_pwhash_primitive(void) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_argon2i.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_argon2i.h new file mode 100644 index 00000000..88ff6221 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_argon2i.h @@ -0,0 +1,122 @@ +#ifndef crypto_pwhash_argon2i_H +#define crypto_pwhash_argon2i_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_argon2i_ALG_ARGON2I13 1 +SODIUM_EXPORT +int crypto_pwhash_argon2i_alg_argon2i13(void); + +#define crypto_pwhash_argon2i_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_bytes_min(void); + +#define crypto_pwhash_argon2i_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_bytes_max(void); + +#define crypto_pwhash_argon2i_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_passwd_min(void); + +#define crypto_pwhash_argon2i_PASSWD_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_passwd_max(void); + +#define crypto_pwhash_argon2i_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_saltbytes(void); + +#define crypto_pwhash_argon2i_STRBYTES 128U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_strbytes(void); + +#define crypto_pwhash_argon2i_STRPREFIX "$argon2i$" +SODIUM_EXPORT +const char *crypto_pwhash_argon2i_strprefix(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MIN 3U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_min(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_max(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MIN 8192U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_min(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MAX \ + ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_max(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE 4U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_interactive(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE 33554432U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_interactive(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MODERATE 6U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_moderate(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MODERATE 134217728U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_moderate(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE 8U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_sensitive(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE 536870912U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_argon2i(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, + int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str(char out[crypto_pwhash_argon2i_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str_verify(const char str[crypto_pwhash_argon2i_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str_needs_rehash(const char str[crypto_pwhash_argon2i_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_argon2id.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_argon2id.h new file mode 100644 index 00000000..7183abd1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_argon2id.h @@ -0,0 +1,122 @@ +#ifndef crypto_pwhash_argon2id_H +#define crypto_pwhash_argon2id_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_argon2id_ALG_ARGON2ID13 2 +SODIUM_EXPORT +int crypto_pwhash_argon2id_alg_argon2id13(void); + +#define crypto_pwhash_argon2id_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_bytes_min(void); + +#define crypto_pwhash_argon2id_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_bytes_max(void); + +#define crypto_pwhash_argon2id_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_passwd_min(void); + +#define crypto_pwhash_argon2id_PASSWD_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_passwd_max(void); + +#define crypto_pwhash_argon2id_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_saltbytes(void); + +#define crypto_pwhash_argon2id_STRBYTES 128U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_strbytes(void); + +#define crypto_pwhash_argon2id_STRPREFIX "$argon2id$" +SODIUM_EXPORT +const char *crypto_pwhash_argon2id_strprefix(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MIN 1U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_min(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_max(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MIN 8192U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_min(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MAX \ + ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_max(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE 2U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_interactive(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE 67108864U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_interactive(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MODERATE 3U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_moderate(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MODERATE 268435456U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_moderate(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE 4U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_sensitive(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE 1073741824U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_argon2id(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, + int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str(char out[crypto_pwhash_argon2id_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str_verify(const char str[crypto_pwhash_argon2id_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str_needs_rehash(const char str[crypto_pwhash_argon2id_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_scryptsalsa208sha256.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_scryptsalsa208sha256.h new file mode 100644 index 00000000..5c0bf7d3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_pwhash_scryptsalsa208sha256.h @@ -0,0 +1,120 @@ +#ifndef crypto_pwhash_scryptsalsa208sha256_H +#define crypto_pwhash_scryptsalsa208sha256_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_scryptsalsa208sha256_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_bytes_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_BYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, 0x1fffffffe0ULL) +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_bytes_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_passwd_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_passwd_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_SALTBYTES 32U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_saltbytes(void); + +#define crypto_pwhash_scryptsalsa208sha256_STRBYTES 102U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_strbytes(void); + +#define crypto_pwhash_scryptsalsa208sha256_STRPREFIX "$7$" +SODIUM_EXPORT +const char *crypto_pwhash_scryptsalsa208sha256_strprefix(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN 32768U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN 16777216U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX \ + SODIUM_MIN(SIZE_MAX, 68719476736ULL) +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE 524288U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_interactive(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE 16777216U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_interactive(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE 33554432U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE 1073741824U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str(char out[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str_verify(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_ll(const uint8_t * passwd, size_t passwdlen, + const uint8_t * salt, size_t saltlen, + uint64_t N, uint32_t r, uint32_t p, + uint8_t * buf, size_t buflen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str_needs_rehash(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult.h new file mode 100644 index 00000000..1c685853 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult.h @@ -0,0 +1,46 @@ +#ifndef crypto_scalarmult_H +#define crypto_scalarmult_H + +#include + +#include "crypto_scalarmult_curve25519.h" +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_BYTES crypto_scalarmult_curve25519_BYTES +SODIUM_EXPORT +size_t crypto_scalarmult_bytes(void); + +#define crypto_scalarmult_SCALARBYTES crypto_scalarmult_curve25519_SCALARBYTES +SODIUM_EXPORT +size_t crypto_scalarmult_scalarbytes(void); + +#define crypto_scalarmult_PRIMITIVE "curve25519" +SODIUM_EXPORT +const char *crypto_scalarmult_primitive(void); + +SODIUM_EXPORT +int crypto_scalarmult_base(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_curve25519.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_curve25519.h new file mode 100644 index 00000000..60e9d0c5 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_curve25519.h @@ -0,0 +1,42 @@ +#ifndef crypto_scalarmult_curve25519_H +#define crypto_scalarmult_curve25519_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_curve25519_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_curve25519_bytes(void); + +#define crypto_scalarmult_curve25519_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_curve25519_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_curve25519_base(unsigned char *q, + const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_ed25519.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_ed25519.h new file mode 100644 index 00000000..2dfa4d70 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_ed25519.h @@ -0,0 +1,51 @@ + +#ifndef crypto_scalarmult_ed25519_H +#define crypto_scalarmult_ed25519_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_ed25519_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ed25519_bytes(void); + +#define crypto_scalarmult_ed25519_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ed25519_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_ed25519(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_noclamp(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_base(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_base_noclamp(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_ristretto255.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_ristretto255.h new file mode 100644 index 00000000..40a45cce --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_scalarmult_ristretto255.h @@ -0,0 +1,43 @@ + +#ifndef crypto_scalarmult_ristretto255_H +#define crypto_scalarmult_ristretto255_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_ristretto255_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ristretto255_bytes(void); + +#define crypto_scalarmult_ristretto255_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ristretto255_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_ristretto255(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ristretto255_base(unsigned char *q, + const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox.h new file mode 100644 index 00000000..1d3709db --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox.h @@ -0,0 +1,93 @@ +#ifndef crypto_secretbox_H +#define crypto_secretbox_H + +#include + +#include "crypto_secretbox_xsalsa20poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_KEYBYTES crypto_secretbox_xsalsa20poly1305_KEYBYTES +SODIUM_EXPORT +size_t crypto_secretbox_keybytes(void); + +#define crypto_secretbox_NONCEBYTES crypto_secretbox_xsalsa20poly1305_NONCEBYTES +SODIUM_EXPORT +size_t crypto_secretbox_noncebytes(void); + +#define crypto_secretbox_MACBYTES crypto_secretbox_xsalsa20poly1305_MACBYTES +SODIUM_EXPORT +size_t crypto_secretbox_macbytes(void); + +#define crypto_secretbox_PRIMITIVE "xsalsa20poly1305" +SODIUM_EXPORT +const char *crypto_secretbox_primitive(void); + +#define crypto_secretbox_MESSAGEBYTES_MAX crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_secretbox_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_easy(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_open_easy(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_detached(unsigned char *c, unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_secretbox_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +SODIUM_EXPORT +void crypto_secretbox_keygen(unsigned char k[crypto_secretbox_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_secretbox_ZEROBYTES crypto_secretbox_xsalsa20poly1305_ZEROBYTES +SODIUM_EXPORT +size_t crypto_secretbox_zerobytes(void); + +#define crypto_secretbox_BOXZEROBYTES crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES +SODIUM_EXPORT +size_t crypto_secretbox_boxzerobytes(void); + +SODIUM_EXPORT +int crypto_secretbox(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox_xchacha20poly1305.h new file mode 100644 index 00000000..6ec674e3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox_xchacha20poly1305.h @@ -0,0 +1,70 @@ +#ifndef crypto_secretbox_xchacha20poly1305_H +#define crypto_secretbox_xchacha20poly1305_H + +#include +#include "crypto_stream_xchacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_xchacha20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_keybytes(void); + +#define crypto_secretbox_xchacha20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_noncebytes(void); + +#define crypto_secretbox_xchacha20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_macbytes(void); + +#define crypto_secretbox_xchacha20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xchacha20_MESSAGEBYTES_MAX - crypto_secretbox_xchacha20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_easy(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_open_easy(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_detached(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox_xsalsa20poly1305.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox_xsalsa20poly1305.h new file mode 100644 index 00000000..be0874cb --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretbox_xsalsa20poly1305.h @@ -0,0 +1,69 @@ +#ifndef crypto_secretbox_xsalsa20poly1305_H +#define crypto_secretbox_xsalsa20poly1305_H + +#include +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_xsalsa20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_keybytes(void); + +#define crypto_secretbox_xsalsa20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_noncebytes(void); + +#define crypto_secretbox_xsalsa20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_macbytes(void); + +/* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ +#define crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_secretbox_xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_xsalsa20poly1305(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xsalsa20poly1305_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +void crypto_secretbox_xsalsa20poly1305_keygen(unsigned char k[crypto_secretbox_xsalsa20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_boxzerobytes(void); + +#define crypto_secretbox_xsalsa20poly1305_ZEROBYTES \ + (crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES + \ + crypto_secretbox_xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_zerobytes(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretstream_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretstream_xchacha20poly1305.h new file mode 100644 index 00000000..b22e4e93 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_secretstream_xchacha20poly1305.h @@ -0,0 +1,108 @@ +#ifndef crypto_secretstream_xchacha20poly1305_H +#define crypto_secretstream_xchacha20poly1305_H + +#include + +#include "crypto_aead_xchacha20poly1305.h" +#include "crypto_stream_chacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretstream_xchacha20poly1305_ABYTES \ + (1U + crypto_aead_xchacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_abytes(void); + +#define crypto_secretstream_xchacha20poly1305_HEADERBYTES \ + crypto_aead_xchacha20poly1305_ietf_NPUBBYTES +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_headerbytes(void); + +#define crypto_secretstream_xchacha20poly1305_KEYBYTES \ + crypto_aead_xchacha20poly1305_ietf_KEYBYTES +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_keybytes(void); + +#define crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_secretstream_xchacha20poly1305_ABYTES, \ + (64ULL * ((1ULL << 32) - 2ULL))) +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_messagebytes_max(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_MESSAGE 0x00 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_message(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_PUSH 0x01 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_push(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_REKEY 0x02 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_rekey(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_FINAL \ + (crypto_secretstream_xchacha20poly1305_TAG_PUSH | \ + crypto_secretstream_xchacha20poly1305_TAG_REKEY) +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_final(void); + +typedef struct crypto_secretstream_xchacha20poly1305_state { + unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]; + unsigned char nonce[crypto_stream_chacha20_ietf_NONCEBYTES]; + unsigned char _pad[8]; +} crypto_secretstream_xchacha20poly1305_state; + +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_statebytes(void); + +SODIUM_EXPORT +void crypto_secretstream_xchacha20poly1305_keygen + (unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_init_push + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES], + const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_push + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char *c, unsigned long long *clen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, unsigned char tag) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_init_pull + (crypto_secretstream_xchacha20poly1305_state *state, + const unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES], + const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_pull + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char *m, unsigned long long *mlen_p, unsigned char *tag_p, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +void crypto_secretstream_xchacha20poly1305_rekey + (crypto_secretstream_xchacha20poly1305_state *state); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_shorthash.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_shorthash.h new file mode 100644 index 00000000..fecaa88b --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_shorthash.h @@ -0,0 +1,41 @@ +#ifndef crypto_shorthash_H +#define crypto_shorthash_H + +#include + +#include "crypto_shorthash_siphash24.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_shorthash_BYTES crypto_shorthash_siphash24_BYTES +SODIUM_EXPORT +size_t crypto_shorthash_bytes(void); + +#define crypto_shorthash_KEYBYTES crypto_shorthash_siphash24_KEYBYTES +SODIUM_EXPORT +size_t crypto_shorthash_keybytes(void); + +#define crypto_shorthash_PRIMITIVE "siphash24" +SODIUM_EXPORT +const char *crypto_shorthash_primitive(void); + +SODIUM_EXPORT +int crypto_shorthash(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +void crypto_shorthash_keygen(unsigned char k[crypto_shorthash_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_shorthash_siphash24.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_shorthash_siphash24.h new file mode 100644 index 00000000..1e6f72a6 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_shorthash_siphash24.h @@ -0,0 +1,50 @@ +#ifndef crypto_shorthash_siphash24_H +#define crypto_shorthash_siphash24_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +/* -- 64-bit output -- */ + +#define crypto_shorthash_siphash24_BYTES 8U +SODIUM_EXPORT +size_t crypto_shorthash_siphash24_bytes(void); + +#define crypto_shorthash_siphash24_KEYBYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphash24_keybytes(void); + +SODIUM_EXPORT +int crypto_shorthash_siphash24(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +#ifndef SODIUM_LIBRARY_MINIMAL +/* -- 128-bit output -- */ + +#define crypto_shorthash_siphashx24_BYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphashx24_bytes(void); + +#define crypto_shorthash_siphashx24_KEYBYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphashx24_keybytes(void); + +SODIUM_EXPORT +int crypto_shorthash_siphashx24(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign.h new file mode 100644 index 00000000..f5fafb12 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign.h @@ -0,0 +1,107 @@ +#ifndef crypto_sign_H +#define crypto_sign_H + +/* + * THREAD SAFETY: crypto_sign_keypair() is thread-safe, + * provided that sodium_init() was called before. + * + * Other functions, including crypto_sign_seed_keypair() are always thread-safe. + */ + +#include + +#include "crypto_sign_ed25519.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef crypto_sign_ed25519ph_state crypto_sign_state; + +SODIUM_EXPORT +size_t crypto_sign_statebytes(void); + +#define crypto_sign_BYTES crypto_sign_ed25519_BYTES +SODIUM_EXPORT +size_t crypto_sign_bytes(void); + +#define crypto_sign_SEEDBYTES crypto_sign_ed25519_SEEDBYTES +SODIUM_EXPORT +size_t crypto_sign_seedbytes(void); + +#define crypto_sign_PUBLICKEYBYTES crypto_sign_ed25519_PUBLICKEYBYTES +SODIUM_EXPORT +size_t crypto_sign_publickeybytes(void); + +#define crypto_sign_SECRETKEYBYTES crypto_sign_ed25519_SECRETKEYBYTES +SODIUM_EXPORT +size_t crypto_sign_secretkeybytes(void); + +#define crypto_sign_MESSAGEBYTES_MAX crypto_sign_ed25519_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_sign_messagebytes_max(void); + +#define crypto_sign_PRIMITIVE "ed25519" +SODIUM_EXPORT +const char *crypto_sign_primitive(void); + +SODIUM_EXPORT +int crypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign(unsigned char *sm, unsigned long long *smlen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_open(unsigned char *m, unsigned long long *mlen_p, + const unsigned char *sm, unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_verify_detached(const unsigned char *sig, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_sign_init(crypto_sign_state *state); + +SODIUM_EXPORT +int crypto_sign_update(crypto_sign_state *state, + const unsigned char *m, unsigned long long mlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_sign_final_create(crypto_sign_state *state, unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *sk) + __attribute__ ((nonnull(1, 2, 4))); + +SODIUM_EXPORT +int crypto_sign_final_verify(crypto_sign_state *state, const unsigned char *sig, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign_ed25519.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign_ed25519.h new file mode 100644 index 00000000..0fdac42d --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign_ed25519.h @@ -0,0 +1,124 @@ +#ifndef crypto_sign_ed25519_H +#define crypto_sign_ed25519_H + +#include +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_sign_ed25519ph_state { + crypto_hash_sha512_state hs; +} crypto_sign_ed25519ph_state; + +SODIUM_EXPORT +size_t crypto_sign_ed25519ph_statebytes(void); + +#define crypto_sign_ed25519_BYTES 64U +SODIUM_EXPORT +size_t crypto_sign_ed25519_bytes(void); + +#define crypto_sign_ed25519_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_sign_ed25519_seedbytes(void); + +#define crypto_sign_ed25519_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_sign_ed25519_publickeybytes(void); + +#define crypto_sign_ed25519_SECRETKEYBYTES (32U + 32U) +SODIUM_EXPORT +size_t crypto_sign_ed25519_secretkeybytes(void); + +#define crypto_sign_ed25519_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_ed25519_BYTES) +SODIUM_EXPORT +size_t crypto_sign_ed25519_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p, + const unsigned char *sm, unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_detached(unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_verify_detached(const unsigned char *sig, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_sign_ed25519_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk, + const unsigned char *ed25519_pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk, + const unsigned char *ed25519_sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_seed(unsigned char *seed, + const unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_init(crypto_sign_ed25519ph_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_update(crypto_sign_ed25519ph_state *state, + const unsigned char *m, + unsigned long long mlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_final_create(crypto_sign_ed25519ph_state *state, + unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *sk) + __attribute__ ((nonnull(1, 2, 4))); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_final_verify(crypto_sign_ed25519ph_state *state, + const unsigned char *sig, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign_edwards25519sha512batch.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign_edwards25519sha512batch.h new file mode 100644 index 00000000..eed158aa --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_sign_edwards25519sha512batch.h @@ -0,0 +1,55 @@ +#ifndef crypto_sign_edwards25519sha512batch_H +#define crypto_sign_edwards25519sha512batch_H + +/* + * WARNING: This construction was a prototype, which should not be used + * any more in new projects. + * + * crypto_sign_edwards25519sha512batch is provided for applications + * initially built with NaCl, but as recommended by the author of this + * construction, new applications should use ed25519 instead. + * + * In Sodium, you should use the high-level crypto_sign_*() functions instead. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_sign_edwards25519sha512batch_BYTES 64U +#define crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES 32U +#define crypto_sign_edwards25519sha512batch_SECRETKEYBYTES (32U + 32U) +#define crypto_sign_edwards25519sha512batch_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_edwards25519sha512batch_BYTES) + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch(unsigned char *sm, + unsigned long long *smlen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((deprecated)) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch_open(unsigned char *m, + unsigned long long *mlen_p, + const unsigned char *sm, + unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((deprecated)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream.h new file mode 100644 index 00000000..88dab5f6 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream.h @@ -0,0 +1,59 @@ +#ifndef crypto_stream_H +#define crypto_stream_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include + +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_KEYBYTES crypto_stream_xsalsa20_KEYBYTES +SODIUM_EXPORT +size_t crypto_stream_keybytes(void); + +#define crypto_stream_NONCEBYTES crypto_stream_xsalsa20_NONCEBYTES +SODIUM_EXPORT +size_t crypto_stream_noncebytes(void); + +#define crypto_stream_MESSAGEBYTES_MAX crypto_stream_xsalsa20_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_stream_messagebytes_max(void); + +#define crypto_stream_PRIMITIVE "xsalsa20" +SODIUM_EXPORT +const char *crypto_stream_primitive(void); + +SODIUM_EXPORT +int crypto_stream(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_keygen(unsigned char k[crypto_stream_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_chacha20.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_chacha20.h new file mode 100644 index 00000000..40889755 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_chacha20.h @@ -0,0 +1,106 @@ +#ifndef crypto_stream_chacha20_H +#define crypto_stream_chacha20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_chacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_chacha20_keybytes(void); + +#define crypto_stream_chacha20_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_chacha20_noncebytes(void); + +#define crypto_stream_chacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_chacha20_messagebytes_max(void); + +/* ChaCha20 with a 64-bit nonce and a 64-bit counter, as originally designed */ + +SODIUM_EXPORT +int crypto_stream_chacha20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_chacha20_keygen(unsigned char k[crypto_stream_chacha20_KEYBYTES]) + __attribute__ ((nonnull)); + +/* ChaCha20 with a 96-bit nonce and a 32-bit counter (IETF) */ + +#define crypto_stream_chacha20_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_keybytes(void); + +#define crypto_stream_chacha20_ietf_NONCEBYTES 12U +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_noncebytes(void); + +#define crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, 64ULL * (1ULL << 32)) +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint32_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_chacha20_ietf_keygen(unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_stream_chacha20_IETF_KEYBYTES crypto_stream_chacha20_ietf_KEYBYTES +#define crypto_stream_chacha20_IETF_NONCEBYTES crypto_stream_chacha20_ietf_NONCEBYTES +#define crypto_stream_chacha20_IETF_MESSAGEBYTES_MAX crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa20.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa20.h new file mode 100644 index 00000000..45b3b3e3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_salsa20_H +#define crypto_stream_salsa20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa20_keybytes(void); + +#define crypto_stream_salsa20_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa20_noncebytes(void); + +#define crypto_stream_salsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_salsa20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_salsa20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa20_keygen(unsigned char k[crypto_stream_salsa20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa2012.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa2012.h new file mode 100644 index 00000000..6c5d303c --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa2012.h @@ -0,0 +1,53 @@ +#ifndef crypto_stream_salsa2012_H +#define crypto_stream_salsa2012_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa2012_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa2012_keybytes(void); + +#define crypto_stream_salsa2012_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa2012_noncebytes(void); + +#define crypto_stream_salsa2012_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_salsa2012_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_salsa2012(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa2012_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa2012_keygen(unsigned char k[crypto_stream_salsa2012_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa208.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa208.h new file mode 100644 index 00000000..d574f304 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_salsa208.h @@ -0,0 +1,56 @@ +#ifndef crypto_stream_salsa208_H +#define crypto_stream_salsa208_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa208_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa208_keybytes(void) + __attribute__ ((deprecated)); + +#define crypto_stream_salsa208_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa208_noncebytes(void) + __attribute__ ((deprecated)); + +#define crypto_stream_salsa208_MESSAGEBYTES_MAX SODIUM_SIZE_MAX + SODIUM_EXPORT +size_t crypto_stream_salsa208_messagebytes_max(void) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_stream_salsa208(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa208_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa208_keygen(unsigned char k[crypto_stream_salsa208_KEYBYTES]) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_xchacha20.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_xchacha20.h new file mode 100644 index 00000000..c4002db0 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_xchacha20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_xchacha20_H +#define crypto_stream_xchacha20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_xchacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_xchacha20_keybytes(void); + +#define crypto_stream_xchacha20_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_stream_xchacha20_noncebytes(void); + +#define crypto_stream_xchacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_xchacha20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_xchacha20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xchacha20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xchacha20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_xchacha20_keygen(unsigned char k[crypto_stream_xchacha20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_xsalsa20.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_xsalsa20.h new file mode 100644 index 00000000..20034e34 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_stream_xsalsa20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_xsalsa20_H +#define crypto_stream_xsalsa20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_xsalsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_keybytes(void); + +#define crypto_stream_xsalsa20_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_noncebytes(void); + +#define crypto_stream_xsalsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_xsalsa20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xsalsa20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xsalsa20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_xsalsa20_keygen(unsigned char k[crypto_stream_xsalsa20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_16.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_16.h new file mode 100644 index 00000000..7b9c8077 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_16.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_16_H +#define crypto_verify_16_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_16_BYTES 16U +SODIUM_EXPORT +size_t crypto_verify_16_bytes(void); + +SODIUM_EXPORT +int crypto_verify_16(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_32.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_32.h new file mode 100644 index 00000000..9b0f4529 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_32.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_32_H +#define crypto_verify_32_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_32_BYTES 32U +SODIUM_EXPORT +size_t crypto_verify_32_bytes(void); + +SODIUM_EXPORT +int crypto_verify_32(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_64.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_64.h new file mode 100644 index 00000000..c83b7302 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/crypto_verify_64.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_64_H +#define crypto_verify_64_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_64_BYTES 64U +SODIUM_EXPORT +size_t crypto_verify_64_bytes(void); + +SODIUM_EXPORT +int crypto_verify_64(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/export.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/export.h new file mode 100644 index 00000000..a0074fc9 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/export.h @@ -0,0 +1,57 @@ + +#ifndef sodium_export_H +#define sodium_export_H + +#include +#include +#include + +#if !defined(__clang__) && !defined(__GNUC__) +# ifdef __attribute__ +# undef __attribute__ +# endif +# define __attribute__(a) +#endif + +#ifdef SODIUM_STATIC +# define SODIUM_EXPORT +# define SODIUM_EXPORT_WEAK +#else +# if defined(_MSC_VER) +# ifdef SODIUM_DLL_EXPORT +# define SODIUM_EXPORT __declspec(dllexport) +# else +# define SODIUM_EXPORT __declspec(dllimport) +# endif +# else +# if defined(__SUNPRO_C) +# ifndef __GNU_C__ +# define SODIUM_EXPORT __attribute__ (visibility(__global)) +# else +# define SODIUM_EXPORT __attribute__ __global +# endif +# elif defined(_MSG_VER) +# define SODIUM_EXPORT extern __declspec(dllexport) +# else +# define SODIUM_EXPORT __attribute__ ((visibility ("default"))) +# endif +# endif +# if defined(__ELF__) && !defined(SODIUM_DISABLE_WEAK_FUNCTIONS) +# define SODIUM_EXPORT_WEAK SODIUM_EXPORT __attribute__((weak)) +# else +# define SODIUM_EXPORT_WEAK SODIUM_EXPORT +# endif +#endif + +#ifndef CRYPTO_ALIGN +# if defined(__INTEL_COMPILER) || defined(_MSC_VER) +# define CRYPTO_ALIGN(x) __declspec(align(x)) +# else +# define CRYPTO_ALIGN(x) __attribute__ ((aligned(x))) +# endif +#endif + +#define SODIUM_MIN(A, B) ((A) < (B) ? (A) : (B)) +#define SODIUM_SIZE_MAX SODIUM_MIN(UINT64_MAX, SIZE_MAX) + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes.h new file mode 100644 index 00000000..a03cc657 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes.h @@ -0,0 +1,72 @@ + +#ifndef randombytes_H +#define randombytes_H + +#include +#include + +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct randombytes_implementation { + const char *(*implementation_name)(void); /* required */ + uint32_t (*random)(void); /* required */ + void (*stir)(void); /* optional */ + uint32_t (*uniform)(const uint32_t upper_bound); /* optional, a default implementation will be used if NULL */ + void (*buf)(void * const buf, const size_t size); /* required */ + int (*close)(void); /* optional */ +} randombytes_implementation; + +#define randombytes_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 0xffffffffUL) + +#define randombytes_SEEDBYTES 32U +SODIUM_EXPORT +size_t randombytes_seedbytes(void); + +SODIUM_EXPORT +void randombytes_buf(void * const buf, const size_t size) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void randombytes_buf_deterministic(void * const buf, const size_t size, + const unsigned char seed[randombytes_SEEDBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +uint32_t randombytes_random(void); + +SODIUM_EXPORT +uint32_t randombytes_uniform(const uint32_t upper_bound); + +SODIUM_EXPORT +void randombytes_stir(void); + +SODIUM_EXPORT +int randombytes_close(void); + +SODIUM_EXPORT +int randombytes_set_implementation(randombytes_implementation *impl) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +const char *randombytes_implementation_name(void); + +/* -- NaCl compatibility interface -- */ + +SODIUM_EXPORT +void randombytes(unsigned char * const buf, const unsigned long long buf_len) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes_internal_random.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes_internal_random.h new file mode 100644 index 00000000..2b2b7d6e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes_internal_random.h @@ -0,0 +1,22 @@ + +#ifndef randombytes_internal_random_H +#define randombytes_internal_random_H + +#include "export.h" +#include "randombytes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +extern struct randombytes_implementation randombytes_internal_implementation; + +/* Backwards compatibility with libsodium < 1.0.18 */ +#define randombytes_salsa20_implementation randombytes_internal_implementation + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes_sysrandom.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes_sysrandom.h new file mode 100644 index 00000000..9e27b674 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/randombytes_sysrandom.h @@ -0,0 +1,19 @@ + +#ifndef randombytes_sysrandom_H +#define randombytes_sysrandom_H + +#include "export.h" +#include "randombytes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +extern struct randombytes_implementation randombytes_sysrandom_implementation; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/runtime.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/runtime.h new file mode 100644 index 00000000..7f15d58e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/runtime.h @@ -0,0 +1,52 @@ + +#ifndef sodium_runtime_H +#define sodium_runtime_H + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_neon(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse2(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse3(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_ssse3(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse41(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx2(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx512f(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_pclmul(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_aesni(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_rdrand(void); + +/* ------------------------------------------------------------------------- */ + +int _sodium_runtime_get_cpu_features(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/utils.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/utils.h new file mode 100644 index 00000000..ac801512 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/utils.h @@ -0,0 +1,179 @@ + +#ifndef sodium_utils_H +#define sodium_utils_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SODIUM_C99 +# if defined(__cplusplus) || !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L +# define SODIUM_C99(X) +# else +# define SODIUM_C99(X) X +# endif +#endif + +SODIUM_EXPORT +void sodium_memzero(void * const pnt, const size_t len); + +SODIUM_EXPORT +void sodium_stackzero(const size_t len); + +/* + * WARNING: sodium_memcmp() must be used to verify if two secret keys + * are equal, in constant time. + * It returns 0 if the keys are equal, and -1 if they differ. + * This function is not designed for lexicographical comparisons. + */ +SODIUM_EXPORT +int sodium_memcmp(const void * const b1_, const void * const b2_, size_t len) + __attribute__ ((warn_unused_result)); + +/* + * sodium_compare() returns -1 if b1_ < b2_, 1 if b1_ > b2_ and 0 if b1_ == b2_ + * It is suitable for lexicographical comparisons, or to compare nonces + * and counters stored in little-endian format. + * However, it is slower than sodium_memcmp(). + */ +SODIUM_EXPORT +int sodium_compare(const unsigned char *b1_, const unsigned char *b2_, + size_t len) __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int sodium_is_zero(const unsigned char *n, const size_t nlen); + +SODIUM_EXPORT +void sodium_increment(unsigned char *n, const size_t nlen); + +SODIUM_EXPORT +void sodium_add(unsigned char *a, const unsigned char *b, const size_t len); + +SODIUM_EXPORT +void sodium_sub(unsigned char *a, const unsigned char *b, const size_t len); + +SODIUM_EXPORT +char *sodium_bin2hex(char * const hex, const size_t hex_maxlen, + const unsigned char * const bin, const size_t bin_len) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_hex2bin(unsigned char * const bin, const size_t bin_maxlen, + const char * const hex, const size_t hex_len, + const char * const ignore, size_t * const bin_len, + const char ** const hex_end) + __attribute__ ((nonnull(1))); + +#define sodium_base64_VARIANT_ORIGINAL 1 +#define sodium_base64_VARIANT_ORIGINAL_NO_PADDING 3 +#define sodium_base64_VARIANT_URLSAFE 5 +#define sodium_base64_VARIANT_URLSAFE_NO_PADDING 7 + +/* + * Computes the required length to encode BIN_LEN bytes as a base64 string + * using the given variant. The computed length includes a trailing \0. + */ +#define sodium_base64_ENCODED_LEN(BIN_LEN, VARIANT) \ + (((BIN_LEN) / 3U) * 4U + \ + ((((BIN_LEN) - ((BIN_LEN) / 3U) * 3U) | (((BIN_LEN) - ((BIN_LEN) / 3U) * 3U) >> 1)) & 1U) * \ + (4U - (~((((VARIANT) & 2U) >> 1) - 1U) & (3U - ((BIN_LEN) - ((BIN_LEN) / 3U) * 3U)))) + 1U) + +SODIUM_EXPORT +size_t sodium_base64_encoded_len(const size_t bin_len, const int variant); + +SODIUM_EXPORT +char *sodium_bin2base64(char * const b64, const size_t b64_maxlen, + const unsigned char * const bin, const size_t bin_len, + const int variant) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_base642bin(unsigned char * const bin, const size_t bin_maxlen, + const char * const b64, const size_t b64_len, + const char * const ignore, size_t * const bin_len, + const char ** const b64_end, const int variant) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_mlock(void * const addr, const size_t len) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_munlock(void * const addr, const size_t len) + __attribute__ ((nonnull)); + +/* WARNING: sodium_malloc() and sodium_allocarray() are not general-purpose + * allocation functions. + * + * They return a pointer to a region filled with 0xd0 bytes, immediately + * followed by a guard page. + * As a result, accessing a single byte after the requested allocation size + * will intentionally trigger a segmentation fault. + * + * A canary and an additional guard page placed before the beginning of the + * region may also kill the process if a buffer underflow is detected. + * + * The memory layout is: + * [unprotected region size (read only)][guard page (no access)][unprotected pages (read/write)][guard page (no access)] + * With the layout of the unprotected pages being: + * [optional padding][16-bytes canary][user region] + * + * However: + * - These functions are significantly slower than standard functions + * - Each allocation requires 3 or 4 additional pages + * - The returned address will not be aligned if the allocation size is not + * a multiple of the required alignment. For this reason, these functions + * are designed to store data, such as secret keys and messages. + * + * sodium_malloc() can be used to allocate any libsodium data structure. + * + * The crypto_generichash_state structure is packed and its length is + * either 357 or 361 bytes. For this reason, when using sodium_malloc() to + * allocate a crypto_generichash_state structure, padding must be added in + * order to ensure proper alignment. crypto_generichash_statebytes() + * returns the rounded up structure size, and should be prefered to sizeof(): + * state = sodium_malloc(crypto_generichash_statebytes()); + */ + +SODIUM_EXPORT +void *sodium_malloc(const size_t size) + __attribute__ ((malloc)); + +SODIUM_EXPORT +void *sodium_allocarray(size_t count, size_t size) + __attribute__ ((malloc)); + +SODIUM_EXPORT +void sodium_free(void *ptr); + +SODIUM_EXPORT +int sodium_mprotect_noaccess(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_mprotect_readonly(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_mprotect_readwrite(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_pad(size_t *padded_buflen_p, unsigned char *buf, + size_t unpadded_buflen, size_t blocksize, size_t max_buflen) + __attribute__ ((nonnull(2))); + +SODIUM_EXPORT +int sodium_unpad(size_t *unpadded_buflen_p, const unsigned char *buf, + size_t padded_buflen, size_t blocksize) + __attribute__ ((nonnull(2))); + +/* -------- */ + +int _sodium_alloc_init(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/version.h b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/version.h new file mode 100644 index 00000000..201a290e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/include/sodium/version.h @@ -0,0 +1,33 @@ + +#ifndef sodium_version_H +#define sodium_version_H + +#include "export.h" + +#define SODIUM_VERSION_STRING "1.0.18" + +#define SODIUM_LIBRARY_VERSION_MAJOR 10 +#define SODIUM_LIBRARY_VERSION_MINOR 3 + + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +const char *sodium_version_string(void); + +SODIUM_EXPORT +int sodium_library_version_major(void); + +SODIUM_EXPORT +int sodium_library_version_minor(void); + +SODIUM_EXPORT +int sodium_library_minimal(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-i686/lib/libsodium.a b/example/android/third_party/libsodium/libsodium-android-i686/lib/libsodium.a new file mode 100644 index 0000000000000000000000000000000000000000..8d5be2e7df7c943785154b88f93fd23b47d11ba4 GIT binary patch literal 567114 zcmeFa4}4u!l`np7a@$@?xVeR>0W*55S4|{9(uNYWqe)4VSV9{#{i8;cG`S@yw@J(& z2wJ5zVa)ONI(<%`kNLemr_OX7p0DHd{iZV2S1>7sRzxg_P!+Kv>Mc|WSfN5`f8X!^ zbM86kp8F^KndiLUJD;4av({dF?X~}}wf8>fE?n9*)ZP1m`B#LUSCtKw&-VY}@S-cL zm(&QJ&iRH>aKtbM-|_n1i6;yrpL^F&4a4jHr*9ZWuKQbGHjG^NJ&>R4e(-t2c&+!( z4jM+b`?p^-41Ldh$uM5S?eo3E`1igG{@dL~+PxdJZ+ydffAgnC!K=Lw1dW2(-uHdL zD9Gpj!Ahg>l1KBqYYL3QOn2Q`qfp<=pEe44e`urg?*5!n$a@2L?e~{|Y81NfzkP>M znCbqz`;Ed}_nt*YVLtb_eq$8obKecVqf2t%zg}S!@;>!3!@syO_r2_C!@uJ1-?+Q| zi-!O8zHeM<`2Rib&wj`7yYKNQ4gbD7)9>#*X!!HF?|Fyex8DyzUatFRFBtw;d!Itx zy6=~eFWzTAY|II~@3r4=dfJ#Xn>+j^V~+iP|5uDT`fmKPF~@#?_@FW8wchK0YRnn> zX6E~rM~ykz?(t6>b28oAK5xwNy1#tCF(;q<@0J*I-1onJ)tKYHzY85_bARvuHRik# z_mdwm=GgDwUTDmD_U!9&&-Je~tULH#WA5v9zvnx~+}Ce9iZ~ML}a;=a-FnpZ>ZrZ^uew-hqdWc|ZQDG4JKi8-a`d z-Uw7IGXmE>Y6SY9Hv)M^AJF zA<-TqAMWf-ebJE(vy^L(l3jRDbT;}b?(8B(;6?ZzhxvkoCjKe;KXJqe&Xn%Ib{E8sY-1p~~@qF?;yX<=8bS$k) z*&DNWzserRQIHu}vo_c4aqPdX3v_-!0b_f891}nVum=bx*Q$p?Qr%H zQql^7#KEDyO?@MMH$|XF9;>U zK2)(bZHZ?p2*%7@5Dd*&5D4@t2*&YfBq?38HVVXMc#h&AOU@EeaxxbR8M2fMgR>S5 z8M2iQ!ZQ>QV>-)d{lHkqa5UQE=%*xN(v0mTUv zc6KKU`gC+?AdM9Po^*8VG~P^Ol+fQjqDa-FJ*?xwuD&5%M5KF=bYARiT^mNCL;aiV zq=CU`e@8mq&0@#3UFZ=lZEmA-(XQcJym(2s%N43*6YgM0iJj4x6``xA$9hgh)}a=qqd$5Btc#ADx`syjHbt!{ zgVlr89dKC(7p0RHr$~#*(=FXrEqjneS#O#&Ji6YB;|}W?z|0Zt81C+hbq#GAjg6$~ zk_xhfq(~j>yM|M0_YHRp^vhmn@k-jJuD<>b=yAi)!04both)>CrVpuG#NMvqj^RyR zF^o_{J<%a!xLb@r9Z=5x%o5f?s_->B6zv)9j;2C~QAX}mSOp!U{e74MH(5ywBGT_Q zhWds_&}~KrkhZP%9b{WcJLoAXYAK-`(`-ktc9Znr;G}j8jE)SBjyO7;i=z*YMpg#* zB=3sfJvSJDD?j_d)tj50}0g?kIu;a;-STv~g==}v?#)JvM(U$C*d90hxb!$YtKKxv>} ziL8%x-56c8UV4m~%EZOwT`&%&Y)R=7%#~V-FMEQTFI$@EX3kN|UOHOy!RXNN09ZY0V&+;I=-H!Fq;gOEMO@p!Mrf5Ibfcgfqb(Cxx zo&8~g;-Yh}(JklvN-q4t8Z z)16tihd7#&Ex@jJ2bAK{k)xk$UIt`VilJUgk?yS&Lp+s2fL7|po(;N%rw_y)fvNG( z9*F6EBs%6C=Ir6_anc?J8yPFH!bs(WZC5O1D&WgSquV}0n?Sn(PjM%QK(YX=FT!%?hF3}p)Sc9umnFNatJxE9s~O(dO` zW30HjSF8s5qx9jrxTKoi3hkke#%m97Cu0lK#b+bA)&}h%_I7TkJKMQE#L>>}0a^3u ztXfAjwZH16x3%}`T-@}E?&z_e44JcJC6hUCdJ{NfjaV|WR85D)l)c(5HdShRQ1{GM zu2J1HQqMqtf0uhg+%Oc4q8OnYR&@IMA|yrkArkEQU<=-vh5Ldv8f`WR{Vmzlcm{=`bQZTaW3% zrcJIcW9P}Nsnv#U3pDN`OYvluW9gH#FJK_j9W@VLOK$cKVH28*(UO>>N7zK>;`Ht! zq876RW#~THCWKU&M;Aa~Pjo{UmhN4NW|}`T%^MkefDTA&2ASG>hIs*G&(>{KO?qQY z1*Ii!HK+7gsi3r2mcY!7(2AXz#gdYt)mb7kgj?}5H8D#-1_oDEqh!-5G%`G>PNQ3O z`W&NiniF8#0m>F8c8Amikcy&}N>QBtyp1j&9b={~G_{pSOR&1iZThCAY}*m`P{Jn8 zTX9?Tj2hd7*p=57u($RZ4QHJLv5BkBJ~&Im3Q6C8m0Q1zm9}r13i8@jO@+EQP;DU@ zj!C9C(i?`>)hc^Ua2!TRNpQNCDY`y3kuJx6@*&0Vd6dEx>>bm6>LEQvH%Er7q_Mdj z%9J{3tl4TdjX6tIr}1X5`!x2n0=rP!#IqDSH-b436flLHfc&4waoJOLH*y;^2JL>FMQ&;oZ117GT=B zi~QgPE3cZs zg;CoIYbw#$kvP`osz(hdTO2pmQnBArW>f=9F# z*alJC+JG&j5cy9lUlk8Q9wnU$%vk1bmdvFuboOjkT6d4;)uF=%MYdChqF4SphTTk- z1<7`&MP+M$v*8h~-7^JgSoey;_GIwv7dq{1fmXKVB(Kj$u~?nMh%4N~9CC4FYiC zQCH27LubY2(oskDtZ`dlhG^dPsN>~XjoL+UrJ>2*joBWWDPo3Nx1we&Qi~%;nOc0# zidCa^wd-{!MPBSW)}Y8sT-KWBK8T{wWqC;4=!y#J?cXsa7k$5|`J2rq*#x{yEJkZlO zx~XG*U;m=s=$JNTT-yK*xwUF%nlVaG}_OD0v$JirF(F+V*`x8Q5-MRQFS;> zckGbhNRulb>BGa(MH%Rez3Icz3<1%aYOfewH(AAMR|sU!gh9utmOK4+AW*b55&Z=_@U@c-2TNXDVIAsVj}}uiXv$gZc6u! zp+2Y4GneOqA5HEpr3J?abP6cJ<`!X(AC`y4>~OX4haqu z#H`p>3cWWw9lEJ&BkYAtfqnhy zfgCpQc7Pu1)S7~xSu#)fTn0^<-03SydA!b~EmZqK4!aMTD+&Epjn+LEzc!w|UMI_z z6&)|%bTYk5mMsnYa%rx7IF?^$n;A#sd~+lsy_#%U5%WzcHDReWt6YWQ?Ox}K<-I79 zE0%6>4tFY7q;%saR}A;Ma8CXVi^I9%xnE<<);`JWSc=a_xTBoJJ09AP#Skt|N8zj& zb_I3gaIkO`S8c#S=aBA2cf5g=k%8-Xp3$W>&}>mysjT`>iwwi${ZTgsZa7lg*=Xc}eqVVP0$*nwb}C_A-(UE^AR`Xj5Kk zc{E%HTY9r_1m|vq4tDQ`=3ue6w&<|v5_}7>?fS2)Llp) z3J}qiX;rIU2f&_`G)#x0H}HK6alBMLYk_o~I$)f_Ow%O6CP}T!u5D;s)bWw#dfTTD zvLz`B(c_Sy%!o@r#hiBV!;@K`Y)QSPmQ4@Mou6zLsiXR{iG~?F8(z<2G@d!MPMV~j zlF7lJUoNeKDtXFJ@#iPs(m(TI9M61M>C7^om0pH}H+WN;UlVgRIxDr=#LB0)p>jmN+@mGUeVk2b0x=4?^h8mDkFQz#cM(`$E`mTc&Cq1Vwq3D(FPXeXM&#@%# zNGyE^NDrvq*{aQ~efnGKPR(j_>Ry}qT!Et)L`vzJTU|0!DW(`QmSTz}M=4s2u5z;I z88$`q(v?R!rlP9N3TfX+$N7Qd&D#u=`t^?zNx{ z?5@xBxVYS30?Z*)vu79T)--#DGKA`++{3wd1~LeNXV`U9S6{3PpJ~a!;vT15^1VM6 znW{AJ?-!=RooB^d!qd+Ixfn7vXcwDmdv;62ZihHJV#nB~O-o?ciCqwP!*skKHVhey z4gEeAeMs>dza(qhK+3jyNY6lQJ>KGkaKv>>_YlSX6Gx(AizJOvP;(?n9(Rh)C~BCr zO28|ITN$x0WAD_$B*w=Q+(}*G{vit6?@)L>F0QGTKSL4joR5Wly^7y;nW$S`pnA3Z z@_{QnxUA79BbzD!zE_(r!uI__3_)4LQ4G1ly+o+wVSJ^W=4gFnC_}JrJ`j;!7*c{_@fIKgdDcEXSbk#})1&?ZOd5+VOuaIn z#-e)7WxA(c=9QFY@(N2&V|`j8s@k}ik`_iHzcJv|5^Q1Ex6K&UtDWhn2=j_+d!0W` ztkM=N8G|ymOxsJsX_0MV)(gyOOu8+0h&PMVg5?{msI8%BrZBPjj%BAz;T)_k6K@xL z*0oF_EwXL`e8V;^P_475*K2bG_oRiZ0+&)Ug{IujG>$R(xiYlQ>Z-KBR6N^eWEz)J z!E$wSGI)->S@jk&(xN)OluW_8;?lz9p`SFeZJJLD<16sp!yaUh-m6Y& zq%n_<^u^LesNMWDZrgN|7Ur7#bV+7xq2w2vdRcb;(h{+6#CZqWmub>D z8t`a1qPKPo#=1uMF~Kw;gX=MNFS;zlq>^P(I9-zbdV=Sgo>;a^i(wmXvRe-}Mtg~{ zU3-mUnOAqxRdA04STxCt$+J%lz{-r_^jNwChlhY^*2_9@_BjuG(8*AnhmhJ#nplHq z8iTEm;!KnBuN4=(uKvD`m@=VlJ{aj*63%{+MRyh92D!tsG!^(YE^ggVm0xukI4tu} zctKQ1eB$FW+k7n?Buf&VC9vt4*|Oj~xpZ%bT_Kz;q=@*IEVxt|WFbUx3D3t&cDL`Q-E;6?5O=W0hiQB zN9?LAuUsTOwa)psE^le{`Fw`Hd`6*>!tfh*ZzdWcGw05o8$VQ`Z1&@68+grtIlVuCB&%Oo(|Y|{^A*hvSvwKFW}^>J zyYUo15ZM8+Hoi~5H6RlQpd1w~yq5Ga5VX1?S#!*9R#kuR`foF(>sxhL0KA)Ryn$X8 zqYRBtL?(fZ9}3+zHFCk>IzM6>hm8>a%R+ml@uyKR2vjOfBbN0{87WKH3$9G zQ{#u0I+gt2+aOTHthyJEjUO*g#Hl)R<*$DD!)OSqK8sL8yTFsH6~y-lQMzK$3|6BJ zw`)9P&WKd1&#i4eHxenb=!p@u$qCse8~sWlbFOHSYg27LgpdiSVG5ote44vfFr|3@ zZ(}+cL&4Y^y*0Y@B0!8Tch#Ym6PqKIsMmcUD$u%GS9mFEq<8HaRs8{r&as6J!3i{9 z2qIaJ4c} zRMtOJ)j0{7_l=(nYz#?U$(6%N>uoQLTrz&ruM*#Aw5t4us$W?7%p#CE@@|x^elH$D zNzc5F6s~^38j)DgqZgPnTMw}=oSl9AWTm}wFe0_ZW06)2J`LlqpofefGln|N5g-ZXyi%=n|{s=s&JRPpi?#mk>F-)j!}#}8EsjpbDJzppW=<|D_Y z|HW|$Q%9>+?RuKa)P&5W9BY2J+7>560~PJd&X;O`c;e`2&RhM)G{Ti=fM|zr@ot1w zAn!r)V&MJ%UlZIPMy=nozli^%0nruuN{$L~?G zIUB!<*ofu4>ic_!2Ksu!<+U|eS5;qCTN&mHE%4Fdx=#G=CkqeI=%%VEf0F)}a^gL&N7e?=^I z)27St_P|EGJrJ(xUQ)Fg&OuHCSt z!l3=g%lGLI8@|l}-&>3Pei}{&?lKW#80^YMeK1fTEUFKN>VqYX!I^@;n)3z!c;RgY z%Y&y1>VdBbo+ z)>{fw6~;EYrEm?}&xeusrr-|Xx8vT4dzWZi%dPfnZ_BcMH>tKK+xM2jjETaiemDkyw1)sjDNSZftqE}Nlob`?){^jQx2C7F~q@4n-#zhN&;eDWS zRe=}z%0T-|7he@<*Vt&4;A;TwL!iBr5ixvT6AX=G{NQ-{pKF1|ycZMD&;(=pJ#09rmeQEmIRO)M5jir;wdoIR}2 zC@_Ad!l}2d#xQ*mU!e;C&&2y(@lU$= zf9Ar!f;f5(qduEl@=V}*eq#9LuJCJJ>BS&VkJIG;3xw-2m-xdj{u)>QevSBgydnS7 zNKcO+#A&nZHc$Nhh_Bl)@m~Pf?U(pA;JWP+UxfVYc1xVe>o!aLO9b2GBpxFg`+vKK=

    }Ldg3TA@n%{ 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‚>7-CpI7`| zwmaK;K{xn6)}gOGVkYQ3No>jelcGVA4<0T&6ZHG}b! zF;1Y?_S_yZ^P=3gfQTWF^H*YR`5%f0n)t7HL-E-oL_+wtwiejYcvHBrsX4wXQn;$+ z55>0zajyxPjbU?TB(bs_Glt(>8cFgk{KU#ut`nG8uYW#y?X&03C6MTym8iKa0GCEo?&_~F*^ds`WcTYeXT@`vKj%|+5v8;Wm5p+S?C0ifRliarZ; zO)1cafwo1eu<6yXq4;z2HWUv|t;R!>9}2Dt;NMyFEY%n zF=QqHmhnR|Q5$QZ4b&Paz`cT*g4mZ10=Dwu{`gS%(n0Q-UD_If6r2>e^+O>Z4Y)q? zN%0fWTTgN-byTLZX7YRVO9wnwj!8^QN-lgdJJA_uy z^%C4TL4kF}6%j5ZBfGa#UknOoaN^*L^CCV>Gmn7u#SguG>cqUN>Eb)5sg0C?opnEw z#K?fsDx)6HCySw4R5a)J%jP_K;rUo6yUt8*J;Y8R`je0@cc|&yn2(|GL-y{0E%_ev zMDnU%qJBp(x$x}3dx417u#gWpS@0b4UxZrT`Lx7&(qKEE`Eceq9?)cXsNgdsQp9gT zOdUV?2{7wW0p=%gUavXtBByoy;9s1aY?AK*C&sU(=y1;`{~F<`;|E)TSzG^0QAjVJ z5a~akyul&$qf)BKt2lljb@+kgemZ$Ixvk>|mr8ErNtMX+$$tQ+rNj9MPaQvad3Lz<}KL*C*2bgP7q-aGb>*TeX_umjIiu{{+KphvMjxj=pn1AqWJ;d4*HHrfz z)jzwmU5xk_qwUp);-3n~>oFV-T!?!`2!{%)U&IhueQ-l@|F1COKV>ZZ#loMW3!dCi z{EKHc6#ooe@|hoF=v;v32S7Ux{FlJHLe)5|6|O$W;S?|8$#%0DZOPtZ&`x)NglTa* zfNX&nP-%ZA2K0a`+TG!%RuB!0rcG^TQ@h!;&TQ&2n>x*=nAy~8HjS7~gD8(GWE?+G zk5=Z(}>NKB2R^Eo2z3wFpEf`6|c*2l_scta7CLA9a ztl++EY5b;0ylF%nZ7W0Q#kj8znb*?-!1BA?%7BIu!aF!?`WV7(Z6v59k} zyZyJKrd~?=6_IUp97ME_D)eVji^G!X`Q%pg?u6Pi=Nt>(wG2~y*D~G#;i`$|z4zy- zgswmsa)~*6U=?zTNxl=g#F{alF}dOyerS9kY$h+o>SO#?sCOy12IP7XnB+8}#vIsG z33xiF4{J!Qi5$iV8Ac{WZQV9ie47ab>4~JyVwnQZA}P$~budd?VQaQQ@`MnChizha z)Ren$<^j3!FGD%{B5UiIq8jA@-6>A6jIFU3O^a;`cF>~Vpc}}&7Y{*dxMVYw!)5J} z(JMF}t0-tEG$Lp-q=scQ@KW4$p%>SMUtAZ#78uh?tl*GZg6@{Q`_~-n^^2n0M2j8` zZ9T*eAi5quNO9a6QSns@N4LPi$@oYllIS0kP38IICJ0QdDo?B_AHT1a#oi9W_+eqi zaWK1%=%FGZn|&>l#71tJ2cV*8BX3bs`;}Dm8^0iNVM=g4pZo*tlJUb*kvNu`l24ML zk`gI7CIRRjj&FwUuf@hiC4boKG{%?Jm6VBrD(UE<6Pa`U6ds zM)V2gB=BhpotWED{bAql;-8E7Xd$B4-wIa(J%wi($0BG}HV5HjP>OOm7<)MgFlb@N zqN6Df!PnUATiF5`YDx=W>Z?kYC@Eu*@+Fo&bdf%U@EdMzM8K^g!1vAD5$wC0tA_eh zH*#Wn9U98_Vc@tL%6{5BuXjV)dU7dDoFuYfwQ8)Rf`nPLod8=h09G5X1(Mhn;a8ZF zP58%W9QQ|exf&SW1W(8X!PKv3VIFNpe}d(u81_VVVcc4yU)C>LyIQ|0A4tf>K`Sf- zX~$q*LarsSXl();Cy-#hVIOetkHLSQ4S%VBcKrKi$-fS7Im||%(`o#u3f4%rY-0ly z?^PffEFuL~Ti;`%f#WylnN3AzQ^0I0F`GhWQ<>RRYBoj8Cb$Ci=BjeDsnTq!F`KH) zrln?6t=ZIIHr1I;EoM`*xvDjbg><)pTG(=+<|xvpI2xF3sX*gBjTCB#8mO*N+cv?LN;VJD49sRbv4=%rLHv(r{vy<0e_-! z3>ss4Gf%)gkqPsc{*dsACs5H7Q&hd!d{|bx)Df<#TT9pnVaSIMQ;C`WG-P5Hs6vLh zLPcq_|Af)&KM<93%lK9>Uk9`)wp4)KEq=Njam>mLXZWdUOgHMy4oE!a5QCUN!xs({$|!DF+uu=iotFm z5@6$EBctN>Mg}urn^?%ggFNpd&6KlKVAjnK<<`rNAzPt1fV)$+!~^2QADW*iS2(Ch z6_VsGDIVkrMtCz=O?v4`z$D-^(DXPMD-NOxo)R%`-7Q)ZY>z#%A>iOT0up5(toXi( z4H!QAdlN;sK)d^K-vdthRsbHbi;8e4ahyPkqDJKKR zqmNYo%=`)7T`In_BxwF*%P;5s=;vU?*?uSw0rub_238t{oY?S|hsR(IffZE2AawmERqi_=fCS{;2t5yMeWsc&tQ3T z;qq|&x|YK0xR|Z%WwWu_T-lP~Y1AJlcR?ulg|Qt}5*jH%F2=_j!-X`rBZYR0TS|aC zBi1XvfyEP(E4mnTOOiW@EtN}4_b0yuZ2Zttn*$od3ZWyD=yO|83gZWvi`TaM5k_i` z-H+=Y1!1{u_hTsu(w)I(hur;uN&7C4vG35-iV~0x3yWaYI-sfTjFPB|vnVL;Ebsf}|`(onZ$ z_dw(bUxj1JtxWlkFUvgd6Lzm7<#K7RTLPJKB_eyJyf@%V`G|~cOL<>pay||5XNA9J0i!XLr1-2in#$3-EM?{(-@UREsd`1&%n-d0xCEA~1IrCEw`|*I) z%+8-;RM^=ds(mUj`q=(yNZ`0#u+4uM6=vSQ1V@T#vW-~Svq zg+xx96C1|R=C&u-qb3rapqVjh)W8H9J1N95rRYCu?hJMkj5KvpWgLVsP|dF)GgX<9 zxiVhv4EH}BFFK4O)=D*}w2;!4f-RI*Tj{F@`oc?JcxlbKpYK|~-#G{Ra-IM4f1cra z$nWg;wbovH?X~w_YwsFEQisx=xo=Pek-L!TQv6uFrS>YQxq;O})PE`4eA&ZPB+So_ zz4df5-ZU+8V1HZrvB@h;7PSIL3r$(enMQfY&-RuO%%(FQ?#^c$Jma#sc&6zUR=;>L% zm=k=gE|`r6b5k(8F__&F%x(^5a}bRQdq*(4J@{B>FdKvQ?qK$!VD{o*c26+7KbYMc z%pMG84+OK92eX$2t86A)H3YQ5DpML)4cl*12UnS5v&yvDRZ@7P(@teMM`Yiy))kTQ zvE0<*woFAZK6YwqdOS8(mmTiNT%hBuDYKppmL`Iw$zW+&u(T>znhKWI1WT)frI}!9 zI+#}%ENuvuHU&!?gQYFO(&k`kTd=e>SlSURZRdP6SlSgV?GBbM3YIPomi7co`-7#u z!P3EC=|He_dB6_n_YIrx4+*^Q8#doJY`$;UeBZG7zF}kAJHdEU92KWMo4Yj7zF_XB z--9{7wUOdCv}G=6nsip;cPvp$B}+t!DJi+i5)Va*TscsZxY!bh;8`olT?8eGmsz4L z7%XwhS&8qo#IY!m%L+=ffKkcur3;tRO!FNUcifv*KBlzXO$hjer1#Mu}Grxk0Iie!f3JLH6 zQOFaC{OH<3T)_z4QYzm{Wn1d?Wm}gDuD%V~_A`@hW5I2c)-~x(*x>_1JIjWTjh#vi zJ$0<^#IVQCyY7+LnvBwOy-YW=@(a*XT~kK}wCMf`VWaa!UD}JnEJ0M#$4I3!FZO6 zhrHNGlYK|T-J|Pfwlm`*Gu}XWR?4CSYg6rMMJQn zDOk}MtY`^VGzTl%f)%a7ijH7Kd$6J_SkW1*=nhsa3RWx*R`dib`hyj{!HU6P#lWk? zzy;Ex*UcOQA{$v}%YkG6YN^f4)0TR+Aozu+Zi!OQmIPZpwT@}p%APF>{@znJMyY4Z zf@PjsT^5!-TNr%OQ*Vq?&yohY7E=E&vOwd$APh9>O&UbwUHk6R{)-1&vNsr*xdMr> z@{_2@E9dkCNQf^FmW=M5H)(XM>q|zrHlfZM-6&8*74*$!0`UDYv7?TwE@X_dq+!&I zDe7=;5)rF+c4~}~{KA;&H**n0*IdEb!Wm93&n!rd%uUa{j8#r%<^r9k1NlnKmR530 zhFeF4XI45H{m^b(s*JMtz!*N0dl%utaWFAQau+LxgJ%N?DO#3W;jKoeq!Vg>;);~) zu~=JSk97q`B-i{NpzP(V(~mP*nkQoAyj1D%!@EX0J{vq@}1$ zR&b>nS8^eeB30P9EpF;7^Z0)xbFXXe1yJ9x=CV*zj}*T*%zV>-By)SHiT@5Yqock` zZAZz4WUSHOix9naGD3Ishixlh?zO(jb0+r#?CC1DO<_O#W9p#orrxuS&B~{Xq6HfAk`sP(H}tJ$Z&CT^gw*8yWhGwxfCeip84X3r9q6gz7-zR1pM@rL$G zU)neH=*n9z0i7EfQZMZhvKVmFDsF3 zH-R^EtxSt6evJI>WZoE*w&uNKAI{&P6nocPHv_u zD?gEas=9nn(8SGC?a20lGL_t;Y`Uw8`r6CGGM!usH89O8&OTO6ty1i^btcus3G#8p z71;;QFF&p-4yS@dj#&?YEKrlCb^OOS6Zn z%g5Qrl&%gLZxk<+#T`GTFD&qM_@;M}= zzH`ZU+ek8#J$xSb30)ei4IRw6KWY-crIU7Wkvd>Pb zmD_h!_UXxN88peIi9X3beO~Pjwxji%>}^r4ZQ0G%XH!}DHhLx<4q@AxeRh&nR6};4 z@^-Zg*buebK%g#cS6)D^T#aQwv}TV^X0yJUxEAoSxR&g5leji%Fw>kpG8LZJF~wkT zigkg;)X7H~Tqz_NEM(_m2Q6m1$86Q-)JRk2m?o(O@d9Ng5rEiE~&r4|6M!ML0xjsw(=TT6;Y)&Pe) z9=l1OQ=pPM`5W?D#RVs}hLf8NITB2RcCSJ_dK)q)pM(V6NbpXYd5Yg1!A@%aO>ke3 zb;6v)6gECy`B3~Aw(T99jCAtt29=G#2RygaGN@R^co`B>Z%|vI%`JkB!zm?kUPY7O z=yB^6XP7&cNLlA8H+t?GP)(hDT#$SGu*WwFEMnJq>~ejCe!|c%!IBnRBT$N%LePC6 zEz^z$Lt7_k1JM6*NFa-)eo|_z4LOqD0d$Qx8j38tNEsxhDt-#0WJkq>`j0XK4-|O)WP%dTE zT`O!a!hR zuLz-Jf!1nd>nGGpsLpt5F`*tp4IvR15$+-^-~@&g4d^N=KgF4jE-Gs*q3pYd4f)QTHSbH)t1j zkZ?`WnNbI+GYj6rw>xxoAud}SfH9Btk-XXCZt}Q{jlY8)cfZHg0Q~;2ho34LL2Y68 zN-ioZeXN3nR2d;vO=!$RYMhWjB5houH{b@k&2owko*U}4N7Qiziacu2$Yvr|P!QSZ z1a6^E$_$?dB8cB4)r_&gs7cwV*+>NO+D9f{l$1=8Hx;o`V2Ksih!3=EB6h9EilSA- zN*5+}jmL^-nuygVAF<0lHUre+0TPyZ!k{Nahw;Ww1D@3HNsVx2oAqR`$1nEyLHKDM zb=h!^#&5egq)In_3>qyo@FR9Ma+{fVHTk*)apqM><`|k?$n&x;z_cB0-j8P1DZU((c^0n8^!^e?W0~6mJ$MT z&j>M8H_ObZ(Qp$>XrZ^5keEQ1-t`b(L|C{q5$*zQbvaS32CIfKan(*B%?tZ&`fQ*> z_XRu1ha!byw3|+q5Ku zQAf%R^ZCYNtRQ`<92f=?I=Z6;51UgQanZ!MKctw7ZfLeu0z zsg7W?VQmzlbzeTvfgmKZ(B^MYBBV}KBO-E@CqVOTbRh~k>om5jGzsfAl2GzsVg``v zU%J0J7!MvX);Q!q{>p)D@rljj?)SJPfLK=w5RDF9k)UBEIJrNUA`e)9w48jL{x}0r zNm7jd271o=?0^l5X7ZdOwVBJkFnpt?#|eokT5i_8-ViCN*6)q)qS=&wKB8;BPH>s> zG)$T{3MRkb120t~wkiwyv<3+A3VAZs9m?14!lm_4zWy}EKB{-d^DN3#EA8CP2k+NZ zEWQtB-AhOp7;N`CCbG{>uh?|&wBRmsZlZDwr8cSDn#_Qk=$?t6X@e0@EoWB8T|^ z!CDX9=%IBUTJNC^9=gdxTlg4ss@0%d%a7Wp0ZiD4G=$^(fYt!pOUMCJ$s%C8VWds~ zh^Y|%$^fy5pTs2i5bE|&kB7=UM87C)v4?s+t=~ff9vbw}G7k;$0bJSwR+_=Pn2vpj zPTxcd&{iqKVJNt@0H`|WY(SR-R+I9xYN2^4nZz^`L#Txhp+gSZ6P}jy&@&!7=Ajon z)avEhyj;77Iy}_rp;Mky3OFrv5ot&)HzYc0A2KvRVk0Ty1@ajZQ(hLMlbc#gywW& zG}jZ-%ulG*Lv0>v_fUt2Iz80op+z3*_E3+9Y8;8QBa!h?okA#vhC#1k&|k!0m{c&h zDZ)Tguwx)*ri)52=mElT4qOb(niYvjdD~SUstzIXP})No57l|7!9&#!SB41X~;9P5sf#Sz#OTuc#q4jV2gkT(aN0;0ma1HYOFaNk z#{CHgRWtXHsAh(ohcqp5p+a?BcRe&!9@YjNw3Ps_r)tD@jf|#K!2x2C*gL6=+cf=} z(4*6X9Tl6NpJvvue&Z+CN60u@a@fViBV1%p`5AT-rnJ@I)X%J@V^rJX_rY)x<8;iV z6Mz)l!}S@{2*e1~9`s4XZf>;eSX#mcao8{f)TyBpSXd@!LR_E#I@I*Sei>oiE@hd|KZAC6O+I2wi zW!{Uo(TfA3*xJmHh`xt`#4dRczbiKF6TaR21em?(1}OD{F5ECX-~}a| zr6&+Aaa}74uTdHF>iBJr80xjShJ`B$y0cy_N=R31+B=QtQ!1#&ZY16MofaE{)A0w< z30s4Q)T%YNw_?-yG<2Oh3Q4+Oh&891<<%ZGYwd;^x~Qd<;@r#b2xqB~DRmGv>X@Lo zEqlgz_b%~n3dYFMy7X7t*Sy1k2K9YbUDFKFPzLSmNkKt6ih3#r_o{YeU!ES^QL*W_ z(=ZIzEvPNE5187c+!Xb^w_MoprWobK*6j2>2JF53q*8HxUslQSy~HjicuV!WrbfBi zELjnj+^Xb1f4MwL*2LYHRfHw?EBWI)kL9fmZv3b}(RW(m_yf1>n?5NjwaiK>!b%OQ z)an~wv{IBfuHW$k(720Rsus;e@?4A$6^kZy5~{!=?x0fFL6@!|_cH;HV(Q6#I}DfG zprj^bu748ntT9+=^zAT2Bx~wO5ZIQ`-nYY0Py+YH{zMR4LaP2q-wuO+FXeTUu7D=V zZ^rA}VK}I*LjouF6G2XLBBO$ah6*O4&eJCJePQ?Y9WX%e15It}{fY|cy^dh~Rs;A+ z;-pyg?F?aF=eJ3W8~LpV)tP-eL&!rLb_$AH(=+{Waf8ITL2H2-NT@z5bY@oeP-Gnx1(eerg`^9lTedb_Us~E4^?@Z>m2Eh^SQ9n;J!1-D3$WcBWyCXJW)Egv20(#%P()7CwZe?hz7g z;yWw%&1A2DpBE#JJhwzO1F@YvJ^D$-%xsd3Tuo)Y{U{v2h;ZK?qtMlgD6Jk%}YYFNdORP_mH@qkhmOYpl)Pir;#aBX~)-v4u^|GTl)QZ>-Q6IlkjFbOa>3YXJ`t$ zAWd`dpeA7+beS#{VPcwY@}eu7(Dk(5FKA+CV7KIqyP!ogXw(D~UdK-A;MV)XgvKrL z$EP75)SL8MCv41M@M)Y!iXdW*UHV=P0mSa6&uJ&i)Q5Ys`RP&}o}Y%A+5%a7!J4g% zI%uj{i5LkyLa&Gb;SQSH2@;|{rIjhCj!XJEE(wpPHhZtL<4oekn@#749|Xac%HMK? ztNZ7fZFklKm1!zzxU${h%j!TQ$Q4lBS+Qx)G-!~ba|Wml3N&)HTfbVxZHk`~q$Emo z5Lz!#(Oi)1{V@0%0f1u^AG`4{Wp}zYM$%5tkjJ1;BHgC{84f9g_3@U{m76tpFRy3EIauR72_ei5?pvqP{ zei;QNbrzX6(gg{M%FXNOH8m8|fnhbpY9bWn&K7AjQamFCi8?~Xle^KT2a%GcUA$^Q zNK==(7zDDW6-8R8_Uj&uP+-LnOla4Lw~eN2>uC2h+~3-1f4P<~)YTf*A!crwA)c(G z=~QsMSO-o}QufY*qm8m@;OL;3UPv%FWFC@26<^LSG8=CNO427jDoo4VrR^j-XA$F7 z7mfF@aG>~c$XS)K@t`{@LqW+hy6-`glA01W!aX$Hfsk9PpQfEevhYEZh1vntuABCb z_4q}9kc(vCgW=SojXP8^GH9ott+!B)p`tu!GE6GS0764;fTQ}Ymt3I)d(fswwbMy8 zO*X%&s$8Tj9O=8$#LPajRFkDyH{>z?Yq$;H(9-PH4wZZQb{cA$Ne#7A5iWZS7o910 zkhg<2v{lQpB-GLR_82b8u$T;0WauXYmk>v~+I{sehjZgyWKwqxfC~4fM`-LZGakT8bRqu_Lp^^V>5PX?i_5t%@Aqzf}NHETLT@HK>s0d0OLqpmyFS5Z*{65y+lex<;JSOIttF9I)7T>|`i!Eq3{-6}BH zU;l6jJTIa|fU^ea%NpqF(k@x66o3__H4dsO&p?YIssq~P1!x%vt&t`K+DU<#$iO=( z{bH|zoC4GqAk_t(QQUs;oZ*1_d?VE}7u-!*I&V!j+Ri7wt8yQC)WM{y zQxQiEtdUh1il!N?gH&$)rG-)hxcIU`{ROciUb8_IoQ&^Aqg$hTxBx~i`)&o5kE?O~ z%)Ie2KIjxu4L2(HAQNE+S|VyBCB-zPh*=12;lpB8wXzKqZhst%7E}ljU~)xVFtv^( zLk%L!ES3uH3-1!09z0?*G(7-q*HIZ`HG^KTU9GqQC?WAi{229An+8yrS(2F<8a^q| z6Kzmk&{6h?u)bTNTJ&xQ8<)qY;c&~5788v2LZr}bQX5Dn#^+*ox=aPwYAS#|f74K@ zC-Ks?(GE;VL)#jNKNr%_+Y#VwC!LAf(c3QF7@5I3R9?pKPQD#{ZB~hEHfuL6Fr47j zhQMK-u3``4Fvoa9s`DI8h8`IJCP|)U;9XWaOIM+acq!0K7H2nPpI5`nK+^+Lh^VHG zYP8@p;mU+qoaCfBN~uWzeRFZ1#q=#WqIs4#0gLl}3w_eUCSIK;=F)k#dB%R~sG*K( zpQ(2ORYv7aiOHVUmYIzpw#?`oKlTZAPhgYA(ty@W2S`DnhXU@C)pp%7KV#xoFB?ZF zQMUOL-vKSyvccR=UBZ5q>B$wF9-PLWtR9P7&fclf6p3b=p}O;-DR_`mCCTu;QrXT@ z0FqR$ZqoyF-L;2tTPObv$&WICYb&ZkGJmtfud~#cW`v2TizcJ9UNuc6g1C)sQp$i^ z3pySgE5@vI2++w-Ppdr|+yT?p>)DzXYY_{!aBl8<(dMxOIx$5I4KkRVXUSn=NV9jM z@3$s9A0X1_E+U)zUbOiOm-T4AVtQfKaYrcX!z&(2b{wku9yXzQA4Po5rJj_E*c_#i zEvpX`!8}Mgol#z~=^kw+Cm2}OFh*u3;`U;+srZpfJq#IIa0WbN$zXY48XeZm62v6i zU}liLiH#77^_2+#=L&|ZIECHpdnaem<)J) z6Tt5i;3+t(9eGv5;-z&aPpVwZA}0P|rCz=SPv4#53T^V6ZoZsh+hJCpDZT4N^bzU1 zx{SHZZAxutRa>gmEY|C`O45P$=_MyMaA~a3D#_@2ZlYhD#-+!`X+C?IIcZ~Q3oW!z zM+^6g;xufvHWbvO;J&_nVk$p`Z)NonsX~3n#YW7J33|HDj)Gf?>drRWkNKH|+isk%4));hhtM-10 z*4cR({lZeh$hbq>veh7&xWy>H_h;7AQVLxtn-FM*{B6O(TFoQvyt1Tz+&wMWgKS7m z)_MS*YG$-1gA-Q1Rwof{w)Y!uA)_JG>TzIJ zE-fU|@Lr1~UpC@@>Dt~tXXO%$h@M^HfS^Dl1=5Pk8g{3q#dCmMC%JYHlhAffcSe{} zho=l*9p}~C)rT(S$li9jxYeTk)bPAX$S1VYY;N-Kyvf<4(*oiWdZG40vbB#UhKJ{! zmwkH5@TaHnTCd5nQ`tjP%g2Z3O%+=QM^RTckAD&+xoX#GuBoC^2_E183-b5bk z60*6(@Vsey6?eYUco!G?k0#oO=bb;o%d_~r&Et{Y3W~C@$R3)aq7~#}V@6Nr&ckT? zO~dmmRrJk7w~Qvp@Ma~RH$3mc?BVl==j*sCjpl5fIzGH``tTQjFMA|~;{l}MQR{uf z^WVZ9S|Aeui<)8aKx+bG6*I(BS0%1+^tNkG4v+xFf5FKx9 zz%O(ER~zuRQ|B8P@Z(9)UKROaEF$m*M*LlGY{cLFY9oFmWixf2Ysk;S3JM+)1>eXC zLS6xH-~=JRk8_R{ zOXrmzi+pGLNp>1uGqwCk_Q_PaRK8{8EzcfGmG9-{c6TJXDs&{#GI7YOja+gryTGeG zKdRR6tDt7*#?MrgKO|q99n@MG)_RqDB>&B8QaZGJ2~%=!1s$l^_Axw_s>^w% z5J7|7InSpFZC1-;Bq6U41rh{0ztUMDRXVM=;WmrZl+MxDUPN}4p1>>v%+%Q>|ALKEU5N#b%gRJZAw8ZVD(Dc$? zGx42*D7>FaehVG6t+k08Ez3qY+>QyaK^wRFx>&|w4<@A5fXwMQ7BVxv7tN>`eV?P) z#cYeqokPHPLM78rDa+5BD9hf%?R*HS=crKTDvp>o-o-l{c**|qY+Fg2i4Bf*k=sFs z@?#gmhKRsfca}E+q%}icNA*{0xY95>pnXF`Ak9(n6RAOv)Tcaad< zpmZuc0NHwM4+kBOj5!s@^ptBO{k7*9XJ)>wW(}EW~>oJd&neZZ`M~HyP3K-r? zLJ=~$MYN20J4IAMZ=5NzzTo+>Nu};%%I{ldWRg3MdUecW*L%*Y5IQY|sBO8!+Zeh} z$j!u!Mb#NyaO?>@vyMRg<N@S?5vz?Wr`jSSQy!_^HnOH!(R6XJ zAKJ#Qv8_eoMNJ(^8@kTB#5Q2QEAhdoAtbYKZB1)uE#d$XSAaNCWEL-E)B(h<^H`y% zQw3Qt+~`r&#=+yBt;|6aI|z$}103^M;U+X*QQkWotuDr+Oy|Y2-6ibMZ0sOodO1s} z1Rbt=2&q;=YKxFsCM0NJg5~@atRx6>LSr5hcCc0}d3yLpBYOkUA=1th$_G3Hz$5v0 zHeT{*kyJk$uO?z8`wTCJgk!6rDFSXLNDDW4tjMZ?vdLpNdaNWwyP0Hf@c8u}Uk#@< z8mF!E_!~W5euO@h$0k|r;hIhq?xOaaJ$5S}C$sori$`u&q__v|!n#iD6ad`h@hu3S zUgHk!&9#N3kT*q&Od=OiqJt)%B0CA!QigIY&t{&av0w@7$cKVWE=O%RMA;*cEOLhoFdELpEF>O9ICqn;J<%APd4o*;Qgj6>nwMR&;6M7x?d0mDv z9urNR&q6YZCTYl|N<%V<1=JL=YM5BDi&#M55G&w_)oj&nxC?0FH+p}_@Ryi zt@rpkSYwg1hR5IN@lyA?OlYn3_+gLNkQ5iJ@z^1c6%Dn~xZGoxDVB+ojeBDa8y!9= zXh3uXY;&}s<~j#R5NL-*ey2@assGM{Sgzq*YO-5$Tl|(&YO~R%$>SS5UPtv}MD1>C7hKxjB0_=-LlmfAqyXS`8^NkV zSF9(QS)}vfVT23K?)bs8anp%iHBn-MGTN8Bv2=wjlYb?ryVva4b2u` z#(->#w#`*n}#*kb`6IO?&<4hd>qvz0WiLUEk-sw`&pkU zlUuiM<`?y1rLfbisIj5;24>vD0<1@)bDgbz{Osxo%fM4A%)!c5Ut%549%j3eO>td$ zJjj;#A<`lKG7e2THB#4^MHr!O50wE7p%fp|hRDr^r9CP+SUC=^%W8kkich&{x=N5A zahuw$W*p>At8`G(bhxewUDHDwA-5f)kzdgWO}01yt$YZzd8orfT^@SHLoo*~!N-B~ z`hm}@HV~Bxh*}K9MVOpWu@k37XM=VV2|#g-x{IzoFL;BeyuoS@)p#iFp^S&>Jk;Q! zMh`W4sM$kWZh+GL-q5fBF`D|q#lV*457@e@+EsXi`2}UQ&Q$N54YqV?z)q3?*jowF z#8z+cWc9;))tb`Ont=ynf{d+2Tt?e)<89y;iuUwP<|ho10I&O^_5Xrtf^Q4(B+ zl0dSa=pqwXjS)7iw(!HTT0}}IR&29^(kAtsjvrCZ_({xWK7_V-Xsd^A_Rw|@jd|!s zhijd~wcbM;Jhah6n>=)rhck9+Ji>=mdQ@B-(69v>2A1KeW zR|Ay-R~>LQdHv1aT8oETJ=Er*b`NzZ#Jmhy8m-|PYq*YvQSqQdHC6%rOh_imOUxs? zI1OcqPjTAJ&}NO-oA!D$9;)+DBcHg88WNSKkfRwB=(Ug3Q$5n0>PMI}3*I$mE?_f9 zHaA_)FdPPA1V}!eWOY+Py7rN1PQZLk$In%OnhcJ)v4q|zZYnY8l%Wa7guA98y*ENk zo^_QwL(&W_n{@g_WTCK&^l(Eiv~+~Yfgtu2h9!#biRb9_?FvT5)NA)uEK zj~@tkHAOeKX9@1j(!AgF9GWA%Kmkrtx4JXpR@;-Xl9E?m@_v3rB{SBr88XyFCHImJ zrfn4Ce9OzUkVqL!DA>g>mibjw=Af5ZY)xszd9k*VVpYXrsi;^hKWM7Qn(Fj29VKNn znS_W*Fd1Tp_+hpa6s!qO;uhA8o_3ab@M#@HSBps0Wy+Rc4^(^9Y!lo(SXy2pcph4( z&`;>njGHo;y$SXV9KI$q)R9yjVpunAa$AqP>K}o<5@zHe)r*5g@8i8xls?-|Xs6D< zlT^`UVB@VMFR^A!fbMgD86N5ZC$ueD@TX~x3M2bCZA(`ZWkwQVmYWHOR%S}xs$`vM zhsh0=Y&H{0u2Ztkv@MyDg+XS~O0LXKw!@OmR?CiN*y-qiT$Ry_h(Ww z5h$1r^s^jN=TJZ&%%0S1C~zC~ITo6nk~*f^i!K=336fl5gSN|zKV*N>7}#wU$Ow;b;qYN87gIg8Qbk52v zh-Hs59I_0-^O60^&Z6BP+>s7#PY}#y2+ZZMdw*pve!Oz;Onlvd?PAU>$)kY=ucZ;* z8h#L_jAJ-)G{@79_pSN>!A(RWV8$t2V%@mOvKDF3Tw>kWTQI4h_!csjST}C=as>jY zb!|DOwRkuRnGcMCzV#F4N#0-R_TM?3GMMwmxJT99`tSqIvU}f3v86|a@tWsotLO-dK z#n;{Xi9snVv%UN*F&ut|Ae$A(_%K$VP&4an!N3Ua0>hkYmwlVBCrS-NyGksI7ZnXd zLyKZ0sGj@|S!YNU`!xok>E#P*c&!}|knNbKzrbhaRzJz1JZN>34M96ZLaBKu`a=C9 zp_LccsYQc(S7eF|^S6S}7^PucjY!(s?nrL&mc@o-Q5TY?j$?m!A2Br^lkxO1FS~`$ zOkX&{GOa+ih;$%R-2h-LDe016Fox#N&`iYuKvaz8c_v9hzRDH8Sc}MP=iX_|Rb8x* zjbqtJLs*JaiMfdnAuW{f8)~9mJV>;%iocA}U00>fxfl8TA+uG{5?<=JyCsGQcw6F~ z(1wS$uwMezaq6PkUM$6KcXY+@gv98`@=WFPxYW63bM5G@ zRnzN;^!XQs)o0J!P*Fr9S6sQhJzNdYY&E#01p(6^n*r5obAyRXLic;9iVvZbhsLQ$ z+Xf2Z;=oT4n4fJ-p)C;SAVHj}TF4NWMPhZO)WfD)Gp>Uuskn@F8+|sHL84oa0znny zs)1s_)c~?}YQnFEC3Hw3cdofn4f0A7vC?H2fUP7#kTyQ%QBzg(HoUVO()G95^5XFAIq9a(o9Vz>~?dEN#ju?8Lp|e zXv!HnIuwmTaacE}-x@Yt#8VjM)uFJo)XJ38O9QYM1Lm%%AK6@VElhYv4%3JD9Xd=) z5V-~Zl?NI z`#h&KA&?iS8>wWuK}`|!c$Vb=FDJVR>S-Wo@SZ-)pC}C+8a>dp3=)WueMRzMz3d^Y zthXAd39GsI8T!H%$Vm6YlF=_$f%`U6)_dScy=)_rIMZ-jfYTLIeVaz5xrt4wv8BZQ zWQ?d%=YY0?oqc#@UE&|09xZXR-RMONGpM+}#9lspYO2IjptInZsRNONk+aD|eJ|N8 zBtPdGv4N>?K3QnI{^-5e;I7uB{)w9r+#jb{)R*i;1c~!!lMYUZx5E}ZzlIkpdJK@%qMH2otQUHtdEdPu-?{}6ncGmvdIY{Kf=c{y8cN0&B#iuW?zMi~jj)lQbuR^hwgV7P(G z8CwegmDHY$oM5#4OlHWMRvVNet27|^3oohSf+{KJm$1uqa1i<9+-u6M+8dyfDypTu zZYo(!CA63D_ELOEm&_ndvVxEX9wD2p-63ZPAc+ynk#4<4#dax6H*MO$7q2`+J^@tV zC1D2)Z8zJJeJ7+GbRWw7n&j^@pI&&2QMFw;v1(x5vzed7i17%C+2Rj^cSB_kx>r$^ zjvwl&)jTW*skGgX zImjpc_;H#|Vin$!vAdhq-!>;v(?I-i)LOTeHt8S@dTc+#}$cea^2x9nBw9J@YLrFSrEXrYJS&3t=N5Z6#OjctuusH>D8MNO!z zA&pw z*^C#_-ZGT0W5>Y8owiSZ#HJcgt%6ci5^5wGPj z)TSb#^ns#Gzt+5Y45288E<;@~M+2N!HPa6(;XE-wspAlt!xf-;4z)1Tw}Vgz)4Zer zQ~VGm5FQ)(paN(-o$EG)*Sz(zxefKwrmoo>M6A=S_yez@R<`#euc4OL@EYxnLS(p^oCO$(lf%@Rx}8qP4NF6_`)W^&R9y%^ghK1_zY-I>KM+z5S*Y_+s+ilZ6RV8QvKWoQUXnk!ivVNw?CL;%(5j<-z6)6Y$t+@wc% zsx`YDCW(!AEt+LkK!tT$R~|OLxkK&ONbWhq9M(?1WL}L+(K;mhLDx?@hA$Xi8qXe1 zVd~8z$FfY>C-0ln!}H~6G!XjVOxAbW@caa+hc6^s_h|C#ym1~n8Xb|NQ6qUCohrYb zsbs(lZr|bI`DNK7<--fh*={)^MfZ~!s&;1|JFon<;e~I3^zx;u&OSRWz*T65Wd_!o+B4uf zn)v$gyo-Q^MY^4sG!@*8j$FW;f}7Fa;d#8A;BH2EIGLN#;mYCpxEb9Jl}p@=lE|?f zL#*&noGY8`i%G#NJb+Y2fH!kS{r;MdeJpy_C^_ot{gphN>+g%&0q&N zVIgY4bw`DkucbSS@jp+zepU_W(yZsbPSz_+s{38?yl#_7tkU-Az}Lg#{|jiZ+w7}} z!uw3G*Rr~{6v)Z1mz9NPX};fuFt3+q^qjih0F&R9FjU!43f}8td`>Z-{+q*T7!{g=vRBcNp=o@j~4SB+P!7EIv{ zrt*FA9@C~7&of;{adVw3zfJjM>()bT_f19h~ z#|x(Ol2#SohYMy1f-J=@wrp2jRD=NM$OZq!o2V&5fKTFOml%p*l(t8w7F=4sJHiU* z$OW|#R&Vt>|7)>MTv`{r&Fjn*>%`CUvbTqIE~xY5cNDS0iSn{~r>gsq5q_6r)o>P8 z?*uEfR@!)XgjS=2@cTs&aB*Gm9&ck-5ri)4d~XQCm;S)K2p2S!^CTIa1)_f#Iv8Ho zZ1sKVedX>mNzw;`myHV7yg&4qq^1w5CV3xz$dXpJ$osImd{@P`Kl-pGu@pA0+xE$i zWFN0CmwCis_DJ}am9Z2tJ=r6ZOnvVm(9J_o7U(9>nmv-RKr4ZkeMjtf3%?t(N2XYy zA-mZaU^0?Uhy&NJNz;2-Jj?*6=$SRhp#Ijc}DJZHy|_nM_wy zX_q~Hm3=NzyK~>OwRfQK)b8SGEz|JXqO_x8x@f?(`Y=M~&t-04;W^}T(CH=>2TvYh zBuQItc0&r~@Lf+<)f)4rrc;v~jOxg{SlbIaY>jStBCwqJWyRxayaOmmHJkK_u5lt? z8*y5tMaR>+zj2*sz0sq?LuoCIcr@$hwwHF4k}?WTvrB86kdIMJD>CAA0av(~_9YT6 zXu(9ZZ51nP3h_g<1QgM>Xi>xWd&AO|hz=X}RTsInrer7jC|D=K*vz1H^pK)anR_<_ z6vh`tfQG!fgZe~^Dq4woQdIObP9Jx8m$ z*P(bX35BG#Qs@bN3R?@lI3{|`qYEt`^W4u^^hq^(x5tco#sVR<2|)Q5JmYh=uL%JX zq6S`)tms5K)~O;SA$2T-X(LZNAhz>cM&fPg>s>`=(J@X#utTezf_Vc&gY{^{Cs=pW z1Qm{X^|yQVM%b{G&<3Jl3K90H8f4oyvdW;PCa+1T0jLnAUJ;$pArFaL2x)mu0oydo9ucU+I)V1U43v!DzTvgx6I zWXDClN=R%*NK8kzUVd&MhHI6oGL^d3rmQw+0MM^WK(Z{0>!y9X!DqQ|$MxCRZf&8h&mA0wB6(z0JXa1X@J#R zJ6A{R9>?OHOLi3?+nm}T)%IIbsQNY!7~P}_{ZxX`I)%7!knNUEGc~BQD^HTe?O4An zQs*HlIvMinbiKJ`J2q-AO|2WLjuy42NoYMG+Sts;>Q39$RGF|V>!VZiW-44c|w@Q(88!cJusW_a2J>N4BX zgcjka;(Nsx!EyEDUAi6;7o5T^<27N|v$ffhnW01EG8*)Yn6&zTtqUQ224Js5f?K5F zAlt8F(l&bo;ME1E+1Q1s$Du*;H4d^}PBXxye0TLhyN#*NHcXSikPaU5dtZZ7 zrPc-qWOlfiJ)A|5grT#$UiXEkXXwUTZRp~~97dLmx`zN7-KgQU63<< zcWI{JxYdssKuOF4!%74&#`_B*sP8U`OFNj=c9?Fkk&Bw{;PE{#A`=|BMaPTUP>ZBa z-(8ZRltmKhV64le;9}BkGSlseFWa81>^^H?-DOa&Q6gt%cV+-Hrrz*2UEiIGW*9ez z0y%kywHk67S;eX5fxdeTy?e={YZ80ewlwq$n|RSRijFr~ZJ(v_}}?MNz{`MYWUHMbX6+T@F*G3ucNS9iDrWO@`9T z3>Wnud2A|ww9rwG?P9vfaFt6>WLH_zMZMJ0VnU^rWJBc9;DP#+eRt`1JR(Rxd)#0e zoe4(W(?>9Ft*g8vnE^8LS%go;@rA; ziMe1asx|lZ`MsXH^s^swr7K^iv~}F06mts;J(ncT5iL4J3me~&oh8FXod7n;zB}yv zS8zxebFkw5M%i}G)cp=mY#<{OST~00yCZ}i7ALI$y5 zJXe2)b0#&4D0w2h+);)AgNTEVL}_414J@}? zr6qoJq-oQB#?A%m>=`BHu@=E#ar}8&X!8~}k`SH-J~)kWl4M-z0mg2sX=My*sD;Nd zr05t{B0O$a#8qly=(hTmjjB^c;xLPpC>YUgj2(>9mXO<9BaJ~5T*{7cH6vFQ>tKK1 z-~6!S`snIqO%OfIQp=g>22n8V=uvf4*#jWe)KODf2PY$iGictUuw#WL%Ib2-270xj z6pk9x4CLgJplYUBUFVoa6C-19pv&w+gGN0+VqOrUxzCq-P%Ul5B60B#7~~kj{Obmy zqg|7^-2VK~G-~Up70mt7DQz-*52WbmSU3RW;46g*o&*eSgZDgE0!)cTI@j( znG(I)q_2v0mZ7dyL;T1x&Tm_6g;qU9TFE@()mn+1YP)E-5xOr5Ikv}cs2&8zrs7F$ zXjT{9>?rd(^Pcd#BpZq+wa=S0)54^TI&1u)5=o`vY6=y&?`fM}_Y>*jfxK0H&znpu zx!RE@Eh1AZnGczKEF9G$q5597@vj>qecq%R*_1^VM<9keW3B7TLxx6;Od;v^YBc%; zjF#r$Q~iqTLNBM6;jM?-@u~@rs`l%a#3~M!njv#LhqOb=?lTzYlQt|}bB-Sl?y21Q zQ@iL*&QI0FLt0yCWLSv^1?IH6nSNqA5FXM#49`}beYP3AXjeO?0CX_}whcfv5;;)b z$cNaDP)z7-nR^{MGb_1|vJ8Nw4mR51E=RMR>`IKsPgm|J-t3qP4+60cb>r4hwAs~+ zI(m{HpB({WjtAJS*s4&cog9S=o8vljTLys3?Ix#W;Sne}y9bI5+I>=WAt~&-e=*#m z+6M~9weX6rk8H3C2K_Z8TCSDd3D5sUy8^`n*BTNUIBtz5o5Br`I^e9an;10{g%eM7 z!($bRX-njC{YXVS65jA=`enjaJ3XY@bXmOMQTr6S9MUGZP(uqnU_wSuRbpYL3m(BE zyl7ESwnF|)=>?BEF0b-qy21sIEu|Mca>XICi-Bu*Fm{K1z{^fMsjiG}$7TZFN^sU+ zdc|W;SVvafk*YjWdrXUWKf~pI$Z;4tO<``-WKB&X!!5jd^PXv>Wpt2>BrIO;$Qw-7 z`*yphUE3Jhm9S=qwE>Zo+4BRAeRa7b2BGk!r0zQBgUM zKdIJ~e(@(2<9~Y@q51kVrDEIsOX0qIGAoDYUCJDl;9RyUXvx^QE=t6qA@S+);7qQJ zx>w)cQfPM7GYvEct5ub@KDrgd4x*3e{&YIW!BbQvqR*>q%8Y)qo#R->M{0DtIqn9h zb1%)#=dZ3fI(Bu%HJ4spv659UzphI06QYxF=hYQw?&AM#BbP~KtvPvcWPzR%s6P21 zc`EpSSt=lDL59ZV?rPvpZ_ejwcyzO0X>%A1My;W1=EkW13hF-tk5StGp213n-~1i< zN_r-T?jxVi%XV-;>NJ(VgM7Cp=poBFgU}V%y%6Q3Ojx(dd@U;T{2x-LJSy`fA(cU=RqcsF88!WJ z%793#0sB*O{_H}PI}E7bBQ*cI7lM||s5GF{xp#Q|XL8?EzC!)idp`QZ>Tf92FZ`eX zh~aT0_ZgL$6~XkeuOH72CcTU;R{^M&zOH z9DZhM$j}Q?v&Lp#mY#LzOxPB}!7-Ege|ajHlMXJ=PzR(OyAn({8&A&~3+85mx$vt7 z%F4MK9&=-4vlb5{pHjK6lYM0B%(=1WE3UaL!JjJ*iM7ShpJ}fT&h`lWmP~4H+V`EY35@Z+Tro0Q76WI=ZB#K`*=u^ z-iQu2tYI}1iZSc*Udtv_CijZ<0q@t3mkit7(i$dKJ? zM+^~u^mD7ryc4;vyr)Q4=qvG!>cg*4;!7@P!$Gop&2txwm<}EEun@Sh2Tt)HVMgZep5Buc6WpRNN+hp3Sfr$X-dl*$jz+>~s26tzY!` zirF>6wdvq5Gr{iBt$vzzJU2cIE<_4_6O3bEbBGV)v*m+^3uF441u14H#@5vpni-D% z0xb6Odp<2|z@EuYo|is(aPs_&ONHo+dEF_+DAIRrtjkO|SZdTN!Suh0X-%Oxy_>iC~u7cXfK- z)v894;gH}62V}*zsk82!UCWp$6phH@6hZdQPtW?r%!LqbWk`_)>ENmiK!U#2bv(Dd z6QPF693&+tdvfFNH~Iu8f_a_j+)KKGCEdZ2MZuEA!IGX}Nq?}UH&`+lEEyR6^0JYB z%4zn@eS=an2ifwHY&sjx;8ex7j|kFxS>q){pgUarG-P%$ZqpFN!sVyRVa2B>&l+nF zN680$l$bpTjDPMB+bm*e)A(MLm2Mksi&l*xm||S-wAnmii?WBjaDiL{=#3+}tA5`Y z&U)s6G#O3ubHYds|16Q9S7zuD{&&xGCin9z$gSCf$PJ1NwTBz|O$*w+5TCJ3?93g1 zHYDVVHl$Q(Cn%FoS`B<7FEhDpaN|0o1+6*&`AvdOBI7V#SOlev^G&LX< z*IIutn2qH1fvK40`dlzu=7+)q*xF%8!GQ*-kWQh>f|qkYLbrhy^pQ&+^wOSC_Jpb^wWZ_p zRB26oUS@QS(_gbvs7!_vk*!K-B@u)X{MMOPA$)6E4VOfap^W;56kS@bG>cuZ767+D zstyr()h(AtqnZ|S@bOVUq0a5;fMX>~3TmQ_y^3vfW2+A#%a4vBPA=g8Li+dUFA=P) z0nXeu>rTm$^vwAZC7*&ZP>_Nv)2JnAuKiG ztXXm^C;lZWLmdHtnb*mm`E}4-(r#X};8PFm9huiYdEUUt{Eo@<2N64(s(?*%-c?$% zj4tfds%4&uW$hoxTs9{ea5(o*^NM5l{w5pKbXJch*yAJX42;}%;whnPg=~pYJJZWZ zrQWDCHo{5UHHj)?XpnQtf;ov`4mxHsm{T3hsgklerzV(_37FhAn=Lj?f9PeZF}==) zsnoDP2_YC{s7XG}DTH~wht}Rh7?~#GjDBSqg-vqR2!)fSEtVdkpiCpz1q(mP#ObFDO^|L$Rg;77AKD4HAScsOUL2q?bVcrL&!8hj)Q0kHfq*eR; z)LC=97Tzl%{}t)r%5Y#BXvcF8v^%;?My&!i?90Mf)i~2M`&w%Ka?;Kjqw9!T{Y)9U za`VE-v^=$XXIgQn1PdcO_7rHYr`L^zyXg+N;1nMtRtG;+V6(j?aaB}CmhQU1>&imS zWvKE!S4GCVhV)o(!VCz&M^;@DAsg zZ`vR_p4*Mq4?A7}Azf>h99%KpIx;^!vQR6rcGXXR`rLO}LccVfURIb!FH2I`c2-tM z7@R;Mywb<=3K}XGX0`TBdVke`7;#jCyn5MMa`1aoQK*z@z9cu5>|7yZ%5t$RWeBWXkUII9^vTa; zM*2|~5Z>W(=S*%bg%q*bmlTHqQs-liAe_s29 z`qipmQbei)(-*1&6d3WkdA}$4x6(!3GRIm8h$kI&wS%hQ{g%G|gKZ;(M4*D`d6^pXmu6L>VF>fBcHHyG) zi=x5RyW~V}dd6Uin2$NvR+zT7dQ&p_)_@kb5DlN?G>X$Eta|bjV8AN@Pxa`SYDB$MT!Dt38 zjCLlMZ%|yPh`Y|BbI%g9dZ*8xR_s?q6l9v zoV2(hj~i5+JcW;0>@kfnwY$b=-d{Ba*6BWNt>puan~0UAur>#Y-LBYv(8fNR;338O z)mxv-zTIlqO1Fxa{*FQ2W{YVdrknP#z#{Cozf*QtWyO4jcNexO#(DP{{S4o*KLwpL z2HKEfWvP42T9?qIwCq4et3EDrPZIhSA3|a#LgHuYsUpTWTtcZI1EJ0Sngt7C?l`DcmF_@DNWDZz{U6?cKd*iqHvLh5WnFYrO&>CRSTF6yAl8d5sE z%63u~sY;)438^m#sV50-_0S&u?de-<|^=nNM652?1 z($rgoZuZcahYs?gsxs1zTc~Cvks({FSE@@zB%6p?!-vqYht$IyZ0ngH;|bpM3@1+R z6aktv2-K(!*=MaW5kkyj)v?C(2tpFRgx0G@xCa}7CccZnGRj;xLoBN9ZQ6Nk@5!$_bio1UwT*m{I~?kJ8uJ%_D@GJtUz?NFtQ9%^upK z5KIXSjhG?o{+<-Ab`njs{XpHN9Bcg{02skT8~Bj6(L-DL07{COoAoox7?eFzRmG-X z$K$`O*whbV@n@L|yQvf}TzDfMAEV7W!q~0Q#~!YMlN*RDtJrjh$CS}c%Fv-8o3qGB z1=~C|O*p}w3~{F2UaL_ulk?`=bV#$wR^>o;;-Wxy zT2mlJH(({P?$Dhau~%xdX2@J+m!=3O9L%kB{I{j3gESh8S5!UO$zW9T(uX;ZF@(ir+rm`nihb2WTR#CAD%#`Ffl?3M?i+xut9^V)I zR$k#eB}(>tree&H#)zT~^ChyMt{flTo!Y%3bTOgTyOv3DwXNn8xpKwap8TC^epuVmg_`drw0c+P>Yb{YmDP#dt%?cj z5@aR+D#CwJR1`k<`?~2DoS&Tbrt-3>Q_f3FW{V7Bob_+pvQOl%|H6H-TbEAHSG;LS ztR8Z$&;4b7d&|cBKU}*f{~yh-C9hVuTQ*)Wao?R^&3~u*Z(}R_{vg(qyfyYO54@cJ zA00yzOFsK({*qS`v2P^5AN$1dA56UI$^SS1R}a5);*zTSV}CLKjeYFvt@$s`z99Bbe{mo`<%W01mOu4E{!KUhZLH~{+hRAr&=FhpxApO#y>Mav zufF@`{GYCBi~Z&PZ^jmW_LBVn{PS@Qxy|I}dG5*hg^>8e`v?|~9mj4yI<-ldJ!&`b{CyxGM{QaM}A@=cDSAKZo;#l|JESuTgVZ_nPYb zzt_HJ;(x#WuKfIygRy-N|3mEhp&!IQ&@dx*=Q}mGkeOc;S0riZwi(p6EJK6+69gXZ)EJNAkb_XE#lJ_pyJ-U;V>_ zvByTgod5Eif0)?z;#XsjKQSYI;QdeM4}PyX|D)ghBKD=Bf6TA?%y53`iucAQ{p*kO zQ~&x;C+2SXbbc`Lc>KW=U(fIU-lg%r_&f6N{15m7m%)kYC$8Ctvs2 zi}?rVy=`Lif%1I&AAL3cjj;pyhPMyI+HU^i{GLy~9Q(VcM`J(w?gwInFC2|^|Kp_C z)!+Nm*x{fjzH-)GvGcyYF7}pn<@x)*oQ(a~uU?e@<=w-vua?#44}E;*#FaBn#y-C? zHu0~+jj`vx^vnEjzPCTN=gkunWw%VtuPC1yzvi9ov1^*1ndte*XzZImUpaBl{IUE6 zOP-DY^p_p6e|!F?6MdifUhK*lpNRj{^Xp=hzPN9q_B-XVk$--7{!{bnV*T&@n~7^) z`J4Q=e|=-@y-)s2{-dvaJOAmyWPbg|hw>Yqdt3g8NAAtv5&L2Ozi%3iJ$id@>`iZ- zF|qId6Z!x4+eapD{_K;nN8Y?LzG?Vt`AhCyJMoSG_IzyB*hLd}cGc#udDHy-H$V1+ zd?HaD`=8G}ke@PI8~cL?F38vaXm9>EBmWrt;av~s^FO&ZcI#uC^ViNfkl+2`cjd2c zEz8gUern?S>)J5w`rZDWD{sy%_4eG~{q1c(c*mBxJ6;G*99@5G|F1Wnci+zUzW?8w zCk=o8n%$LK6J&w1-GOwZCvt^*!%ChY9jfITVjj04^GTJ7?0)0KNLSWXI(z_a(68A zgGclKS@P`2wJrI#<=>y5`-5#0LwkQ1`{G4knV3BFK>ql9uE<|`*B$x$zIG-*qj7Qm zr~9`~R4(d^eSF_{;^+OvpT-j3Z<+Yt?^~LG@JE&Ts_oy6ePhGb6IUJhe*Ozz{&xIu z!*^pV%Z|nmJaZ)WZ|D6oHfza;@>AyQ%}-jgH2<+97v>-M+}MAb9Q{H0D-(;C-XFW* zynl%uKKjr3ns5DM{IlP9Q-0z*^Cm7k{X}fhCGUx~ePCn$=heOORdZJ5$KG>gzU+rL ze|>>7JW1J$+lgw-*$W_R+Il??AkLEu{nSI?$}cg&5S*{?3Vbt zwwbZv<E$^Vb<#bfWS|4r=cAFhqvaLuRUKl%9F*o}Yj?%03( zRw`fp#6_`L4?Y&V_K%NDWd9+V-`3cZzu^3fVnaJlPt47JFt+AxADj5fl9t$kWB(f8 z^!S|Ef7ZP5w;z5uw(1iH^6witZ=$X0=lKin{z3e$J06Vv{(JYt-~Q77itV|0%EWiB z%ETUQ`bPdMfAv8A%9cy>|NH!@v4>tqqObo` z{0m?FO6=4tXJViI^zHebqmNCz_nq5fUrUxxe17x)Vd%OavFyU|brO+MQAS0BBrUTN zDN0m?G*D!;l{AQu$Y`mMkgS>xxe=xcz-zWInTM~eafkz z^C|mo5DT^VxpZOae5y^E%2(dGjaoxvW_{Qh6?Z?-Ce=3TMl61r-6MO;t4y-;J+9dq zL(Bd*B%`nJf-*zO`ZF^(q2=- z&PaRE)^S<0JNK zha_726iDX05nQdc_{Y08R65s|@4sR}Qx5*d?U)T@bS|4&ca5iollL)ZW&~X?EsE)~ zf|h7L+NOV@7gJB7VcB(T)am7Q<$m;JSRap8%*C_L6zsKoi;Dgr78_JXac#q~WVJF5 z4{TuyQjVm*ae(~}GDE@QbbfI78r<*P$17evrA1r*awXwnI<)Zu`J2mQ`}S-6TlHRg zuWf|x9vM81tS9B>2DH;1?y)9_bjq^XsrDdTyg7$I73^uj1A%Pf_Ww}daDzvForUNY zIbOSSJI<^tN2LE_sx+|Y?!is8rqCS;^>s+vs)U05)375mm5b*9mL_@Rm^Ye?M26!< zL>P&R9bg7kH>l=%87%x#(f@fUPrK(swi93T8@fFtKI1prt)fZivY+v&!6P`i(SUjC zHPEm8Zpc?XqN79PU=f=LvpN^n@n$8>OWjTfO~lY*KbI7WQuPLV~kCFB#TM4$Ge5^uq)?Ce=m)XalVe zi}}A))8u8hCD%%t=p3LHA z3mQffNw;Y=j*scbZm-EOAACd(pZ;>?@A}Zs@};=Fb~L>8EpseTA*kzcgTaxI{1ZiW zd&)^TE0xdke}u1!5j3qoluSa0(sma@zwJO>BYrl zS}2+cvneBBuviEe%%)H#-^N<%htdWG&cbJ`r<1R{`R>p$l-nDE@=`x6n=QdtIOxMt zPnNEVD3Q>>cqmrxfwccT8mHJy9g7yw!Wt2r^|40h5kr(I-=nErB9s-j4V$Ik;rXZw ze9qc-a-SN`+6GtBgy1b~Q|>dmTIdGPiK-}Dz7+D7lOUhIg=Jj73>QUr=sW0=KY|gFhi{Ea_wg$_EZ|YyVtGiK=sbiE{$J^$t~P?sMXUafVzI_`Br|d&3r%;RyE#D^)SQowjtYKb@kLDU(P9@LDN&`$IyU)EKS^yH z&(_L1lF_&ZoIiD#>MFmo_E!Wiod|py77K0Z2xh{Xu_joJTj?cGm`MhvZtq6nm$^77 zHI(k}5~F+mR#3Xx%BF5N!H2|P{8GJ$$&n5`W!5zv}X&s-Ib*sb-OYD-7z?isHB+aFzOP%1jjg0OxbM-CbS*;d#2K0+#O6den!g6 z!`P+GzhLxvD?2{12j)$3SncXXzteq?d$b=zBEE8S@jxtJID*|3O(OFXK{V~EIEDUL zM>pH5>2*{xbyo{`$A)+=nq*CxQ`=!UYa30NH-mRNZ=f088BA;cOt=TDATD@3+DbNZ z#Xx1j`ucLEPeJ4%w2$OR`XI((C9@8HOKJbr@kB{$%Gn}=N$y&(oU@CK7%~h-7B5*@ zUnWMVg|eo1);Rd_5)L~Bz@W2(HGdSNl8@fZrb-uXA=b?H=PObdS7!dZAHv3M6x%xI zHTk`s&CRKvG*?KHpXyfnKCT#-KMli9jZT-onbQckpAb8nWbO(wgi4*u4EuNM-&;RPVk?;tPhM>5D1KoQip`oG)hO z+woVT*$BBQ1vleLdaHYr4P81O5@##9>ikmDTk47YaY=AaK7iq4JrG~fz%LK0q5Z#1 znY*qxZa!VlD@WbL>bE7l(q9)}{zx;2`7zW`sXtcW1?wSvjWSL4Pav40%%bX_0+3;aU#vsCA3Y**U z592i@vD4}WB|UG&zTe6C$ZPSa>=h;VH*iu+!O*-P%eF+WNITH%=mAz2wgpR`Tq4izkMO@04m|P2*OMK% zmk}x)yno_=}Ale&EJd0mPD}`FGiEd*rT}Q zA&k4D&r+T8D99{{;48+D#D*3f_S)wtX393=gYyeWuNq5I6OJH3zZ$Oct+<^=Y~J6; zsDGWqZ(lSZ%LE}jt-XY+je=gS_+(Npa6)?WG{{&FW62L);h+?Zj^580^pZj^cO#*> z_Drl>ge-$E@T!05wA7~wzc#PLM1@(L?Wv<%Ha7UHWD42BIb>?K7r`CJX}Y~U9+-5{ za)Dmcwrv2kwR)Ezm*Q(P|7n!4ZY`;Fr`7b-&;C)eWgiPiMc!-BLX1kz%M zQxr2e9eHu1(5@N9RYtW_&u1|@abp6lTH(lQE5s2ZoXA`rRAR`03#s%j$A=<0$R&)# z(lr+Jd_ac6#zsQJBpmjp=b7vu15A1%gZmXP$@@zp>%VS-#0?+#kzgBK5+A`+cgkbM zgci2X^Bx%{?O_#X#pzO8I-{eu(2-ckZM25dKhY$HuyPvizmCnhI|18|U*<>h%4n+M zUQ~aOr3&#XzE#)*?FB*9n6`($S*)k!r|fYt|34NtN|Q!CK7iFBB{VR60=w(`1)DQR z@~f3sXnN;K+HALh9v|Hd-%)Ro8g&VuMqQ-07d=Te^eDF8@?`OQj-gg!7Vl4gOBHSt z;Wnm)Y)4OH1r58wORPxD_6Pm=nThe%2k6bg!}zZ?A9uEhvzloR6uUYeUppqz+grCN z^2s0M42GajdMAAH_t22?NXi&<6>xARcQH|>;jKdXkDM{}(`BexEa&euJ2Ct4FFq?v z6xXMHp^FCBaM-AtY%PY+v0V=Q)BX^=Q9s0Q>Mx-+nq%nu*dG)yQj{O9`9X;j7`OHK zj=sV^nm^iuiY_G}X$-?@7cZ>4;z7!YMEu+?h^3~oRZe$FW2GDnN6p2l=1VXYIztj& z_aR=QP4}KWWY;EV(SN4(tpDl<$YpBq8nG{Ubz~Xc+oT4+w0q1zon!Q3KgP#h72rBQ zF0HnhCaezND$nFG80f|oU!B8_jC7RzQ=lCx%G|!i8gEA*rHc87sZqKEjRk)AclRy} z+vb7J3rbW`V?twr&jrxVnsPFs%-n_|@8Z7$wRc{+w`63kZV@2uY@#SQ`eFr+Em@7Xa@T;?Q~2+nE8pIqh9xR0Of}^@>8@(w zK0hAO^G&xX;PiS5wOPO-3We#_?~D9gVkpEjKO#VN9I>>sbWTZ$)U1Ybts&&>kjnKRAEDh1>1@@IxUR(KJ8eXx>NYOummtAb4&8^B&|i@+7&dP#tvQ&5 zkZJR1)I(o6Zg1N6+rsc65!zOe7 zlmDW$b5F^4pA6mfx{Kp$%WzUefo#+!VoIC@$@Rn{^vxc&{D3}G%h$I?hSlMGs^6+kFBP+L(_k3?YL7)?8IGfVxs>$SNu#{v+OhnfD)oe+> z11^Uwh2i`k6!F@D#*0iLCrvAMp;Dl2-JeHtwc=1;+Q%g$O=zT?2~^FipgL5UO*nOq zB6DRRnH-2;YwvTqB+-Sq_Y*3=l-Ls zvsKy2G9Oe4_U4Gzcx+R0<3bTjp;hfoU#`s~rxW_6?q z$XYwBlU>G_kF}sj!l&69M^4Vp|54!DAabcaNN$JcVCR_0czSs;Eo+$0-v8T#?455Y z^5rwAHj9%=;sJ;avqVbm2i%bcmk<9-;U&%NPKX00CAlG6`~wAz$mcUxYrtTi7t^f~ zAy<1@=9ak^!$vtkX`MHWqsCF`iab0KPh*w8rb4WB6B5r%r)t{?aB{SPz4<%XCiGx) z-4V9!=0_+gG;zgAerRhyz}8s>pnSzIntOIXEi)*9u8BU~3%btjygW!Z+mbqruG5>N z*{J)eiSa)Lenx{CC5bxlsK|G?$X~H}ey4DyNf$%+NK=FAY$^@kMxAGJq4DMy4PR-) z)y&VJ!8CvrQWv9h#7I)V{}Z|UwxM?GKU~ns;gh3OAy*jAzI|VS)60ahF*%b~hdty= zwcg-Ei9g$OU<~G+UC74$_N3dSfc#EF!8dUj{d=NDQbsjQs0y@XYdCB4Riv*gZqq>8 zM>O9U&KwgLVwc-Bwl-6kf==I};9qCpXzNQ4Up=5kGZ}iaX%|Kn9-x|--?(j6gh@0vu z7-i~B(`ql%rjXHW_>ujzT)2t)2STxItRDMb{)nE{h>!{s9j>x8;D)|l8 zo^OeXGvoOPBT+=i3N*Dsbp-1v!lO@;)U7#h8TXKK4BXfUX-3jVwCItxI=RW6g|gp# z`nWZTmj*4O6GmC=u}2u`Ienm-k-up0_;9S{AMtXMFYD3#Lz9jL(2$cFR9&6T8b@@| z-^c~zvvC=j9J$I5(G~=Rw3CGSEeswjz{$c=!JT%BACgoe`TWBeE!abqJzrVt;|wZP zY~ii~9932Sofe!A!4vn@Jk+j)&Kg8woTL+Np7oRM`p*n}ohYwzy-6#sOYzIkU(h$( zbI8x!M@4bRd5dj5PN=VB$@SG#_DGm^cFrf&N&YOKIx(k44=1g2>EoJCvNVdOGml5J zk-?(yJFG^QOX6|u$0>YM?8D)+`MlzAI5y89wjt0ALn|g>%%s(rKKnYCJyS!Q#YE_n zl?a@41Gv7z6o?*p#}XZn(y;q7{NTiN`h7B*oPPG;p+^Ar|NcrluNSe)KE`CPl+11z zgj3h|tGu|d04>HR`Ru+u^i=C2f^u)d>TfK!c~nnVSNz5Kg}zW)rpZ-}vMJqkJt=Q_ zP0HGexFO|;=B|HaX(`ZjCJ_I+!Uduw2e8KPIMzCk<0VqZu_bvcEK1ENu;d$!5*kHQ zQe6?hc^yrAu$M*cQl!*qQ|#XmLYJN{!HC0?sD0R0e*KUW1X>6GPe+^5+b>hoWM`_4 zPeJsBB-D&N&kFY0AaddrULvD_oq?ZdUaLI?U4KoR?j?}*xxakd6kA+!6vExwIO^Gd z2)nAZDdq727PGOLtar_#(nW&vpyh-ACd8BLyiO*ekV@12O4#QY6Oq@F$G0SWMPKbb z<|3U>Z!d3#X?FxluDC-pbqHy>59ccue4?2AW(3+Fr>*~$VY16-Dx7(TZ7KJ_{-qa4 z#(F&2#BO4Bo~P;D{u26oV34N1HNnXsKN7v=!#1pP#Hi1kc+b*fg8S?f5BJTLv?mLf+`dEDHIgZ%)FM@0irt#C z0(LVe^WTrYVOv}%UfMmQ@2CFJsJ%|K+aQU@nLnl#S^2zAMU7mn#d)#gI{NoolJ@l) z!u9e~UMl$zmgDr0wwQXP4D&>1Y~J;7(}4Zz;$g=}wSDBa8aPRb(B>A^5>nj_wa zUpo)6QA4hf=-b&OS-g_0d=9XR&;(eCmhn>p9+WxnI@jnAMAf58oV&jhjr=z#qK9Pi zOfXDy9`fYw@VYx7tIK1N^ymjIEPF~DR_I}utU7)T)Is`s8a%|Gk<^iIaJ@8*bl1$q zo!s@vJ73DSObeo6Zu#)fi>I}_{3)op7!sX(NoDL-WM-;!&3P;7&x8A97uQ602AWu_ zfP0(h%;UH8@8i%L6FlhtM~g<);`!1A)G_%QoAaRsrMo+5?BaGx(SE^#T7*gKjSE(G zou;Vx54=0`7X5kD$S0q9N429)vhU9=Fj2{gOLx4$qHlH7r!x&_#+;!9{qdODwV4YE z?$=7W9yYx$i(=oXajB6{=;zdV{PgHJ^xPHZart^kJvx+>!WK|e&j)yFhGESGRd%{F z94?!Fvq!^)u=sc{-c6T{|pA9oz8!VEKW3R5&(Wcd> z5H{s5WyprI`BAq84_;YN?Q}OS*GEm`!g;ruvS4L^8unQv4|^ICXuii{dK3K+pQc0- zzuCt=Wq-odT}k}rOmpnoyqZ1uewZFeEP@g%#>iWV)GyE_ue5Gr2J8Vv@FjGy zw-)1)eNlPpFk5Q80k1CJV$qvsB4)2JO&98>8XBaVi;ZdJFEcinB}r4&KT+SDKNPE| z#(WbN(JrOcwJJzDbLOj3{;2meqr+U7Zo zJvBXzyc=3H#_~Mc*Ux9oYMBUDRi!SCxyX>@7#ktLAg_aF;)e06lfyK{lr! zQ?}s|zUzS@)N3c&Ii6H^D_Zu<9&-X;q9?{0$vQ^-a+50Q zRxhPP&q7J*ju$VPD@s}AjRMVc8PS?hHhAI-9M=c2(H2GsJa!2O?Y3Zc=qbcxCXnsS zjWE722h&HpQO$8jswhsrfx1b4lRP>Tgg+!ra{!Ln>VSt$38C189kz2?oB#wWG5{C!; z=W!R~Kj?r)xUr%S{-9eQot~21$=jLIUq0n?I;!wrkUBYM z9Kz#VMRs7^Y#KOb0yhzFs#3qpQ@>2brh;w!U&|X3(tXKPo#x=fG)2mIrVM+Zd=@{m z5t~hdxaZsdaJZnGvUAOe&l$o7(;j23zZ72WOQnHHkGM%fF_jvxpb}XV3?D7Y$}LUF zy7UPh`Qbucp`P@@tAkFA&?TihZ#sWlkN1p_hanu9l7ccFV0PrNy^RVk>ar)vJt!{L zA=xZ7*qFsJRnuzxjQ#={HA{5+Y4J}1)9Cj>JLVJUf$RJU6ZvXIt~c7)pNTo}AF$(V z?;nNfU47g*`Vd>RkMlk9A5s5hAsg$w5|F-(;F04XrZu0&*qp|Vsk&I3a)_EfcF-^r zLGJ7T3HDVV28S85nz{$5P&6fF-y3-3SdRT&vuH+M2A};f7M7c&5qLQtUZqYn(sCBP zieCfcg#ym9|39vw9D&&P&#+Za5_*Hx^d;~sZNG7bjh5Ji&`GYm>-%iFP}9vE)92E_ zy3uUn4Smw#^U%carVUNi^~2K3cg@ z9Qt*A`hEQC z-b!5c+|2*f55eq!i+rbj4fSf>;g!o~(+=f{_<7M3SBe}2KEz1MU3wl@=l#Z^#9L%F zRvfCTPgwY+B)ZqW7iOQwk+Jq!!TV!V(RX|xRKs!EBfT)iaQQ}N!xu2Pp(@-GuQ-DPEMs{=M28++;V!7 zDhZcCLlhWjfZdiP+QDe%1x2#hn-13->6o!|HhqwIL&;xG^O?*;@IO4mtu>eE16z=p2dTfyU^B87JO62d{nEdWB;9XG^Kq4%dC`x{!MQ_IY^e8|I>%v z@(Z}Dx`Rpo*F;4{r)i*L8X|Q<@oYgU@qpzt`Fan@*S&!2mID;{c>pb68fn`5GJY$& zjPA`&;Z2VFal$d3nj12aGE$wDe|=4Vhfd_nFGr*Ou@<-bZAbdmX6(j|+jLpO5MFAf zSe#KtC@(@&?ku(tF0s3+6?*~vl_+R6(U+QamLAj7Kce=`7S%OpLAiaw-?bnf5C+7 zvQ1F5tzkK5chSME0`F!qV;PUAwW$h}WwHKB%4aLzIT=|}NJ~E^W10&ITYbe#v=z_;5FS6fon)5@O zu%f$*CPQgzEVc!zLOx7$Hb~<>A zKwtmCa<*N=*H}%Q5%wm%bQ@M9A<&JggxR|^j#(nb+*4BEj_tco_Zv?^CHoN1@wOG{ zZ#U6z_7oF3Jkf?K(w(jVU*|B2TDFXZHvGl~?{aeWi=od`s#r*Uf#Clhf)Qt5ljV#& z954?cd!azY+{h)L(BX9C$!!wfUWiDM+4!(7m$gdXB9ojL2o>I^qi#*i@k%SWvobBb zRDfv1570F_OAp)za7b{5y#oS~ZoHZH-Be-i53Zxc&Ydkw*iGAnBe=Tb6xbN-<^2jt zi%IkQ!r4w7mi%jm;F2wE4WA;Z*qk2*oGwT_R z%3e99Y@Cia5AC@6yVE34vMAUi1(zd&$@QTk75)(HmGDCd{+h&weh;DiIr)719dl|P zD)4y(oH#t>ChOR%03*XnKEuHqUiPYV>%V6-CqNbMYengcdKK?Fyayu2HmviVH-3&( z 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

    gLUs6v#1!{~=CdF=rWQTUl1I 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 y>IUzFSQd5bf*jfNmz7n8R;YhJBtuVKy;k3 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

    NSp%kj?1EW z7=5gbhdWI`k25Uh9x8d(-F)a!>moFPc@*F=)&fTP=xn6st*8!Znn)#yuSWdN9G?&% zHt=GK+s7m}ta@ol>d&lPpYJP!jUVkgg%_zMHr^m{aaDUS>*iC0Id``yo7LB#h?=u9 zFFtRh1up?i>%ASXo zc2FNqrEwM7bcts+}Zj>=Br3Ia(DD^F7O0m9XgEL(KK_1MOb16LxTdQ4wjmRWPiG;@I=PJt|wbV z3n8W;ypy+7<<6vPBN&5A{ka6T2Emh1(&)J{ukl9DtOXbq> zP}x1pWeu;TFQeWd@q#yOVom$59?{E2=lL8B7S7Jju8azS^8rz&8ZZz1(9vKn%JYNUW2 zGLNdYRz_|J`oISONDNq>P-_zk6nifLmf;kg9Xt+O%|`YvCkhuqV}DCzujSED^vEN- zDQBIif-Wi*Q}5uxbUlHG&&<$X%d#pJBNkIkVjj_D?V7QGZD|wuMz=l=FGv2{8-TWHe7QD7pH>y$sSWAbBjjkV!;GU^hy`EYd*eTPnx#WUysZ9tH_SpsMj@i?|CA^O156M|LoS0zTjoN3qxn{zty_QCoc) ztxDU{mdgBuL*QaOw`ty8_TftEHZ!SzUXH#v+-jbVlC@Dw_alpT>xz$>2JBDCi}MXn z(?adp(jRjCI(9!zy{7iJ?5rP?T|D$1 z*bPKw`2NMcTx=cDSF7U7cXPq94BEGKk+cuAnv!zy)=8D*R-ja2RV#`k2^lID^fYe~ zQd&frSBWur^Nq=z68GEIxh{Wb_>|)rE<%`(`41|}t+DSGnS7{Fgs>JLm*eg^ll3Lf zDF=6C-I&;2D3CENIQ5FzDe^h_C9M~{Fj;S)$Q~9`!BzTkzqB41*&|eP>zuKZ?y6bQ z;DOW{h?SffGPEgV2$7wBZpG9{3>7-^A@$)m4+25zF6En>s26>XSB3Q$*1Y$$(?Rky z91STi6X%>ISLMMrF{wx9`A>WghyvPw70iMZnPo~LDp6C@nLG;?gQ63$=CUH^r{=gW zU-f_&;Idl!K+F?c$I3jU&jPUxv1{A?FAMXx`Vi9PB{UyU3)U0WzTFA`5*3tkMbAd0 zDBf~>W_78@wf#v)SF%HXmAmt~6Lcjbiv!M{KgR4JCo@Mr*A|35p$;REmHz?B^*(iA zm3{8)5F*T;>V7h35!97GNxS8GUg0{}4nv)P_AeEr;@#Q-1%S+}VihaNg@WN9^43N& zJBaP>voGZxdIw-Il1xF>DMmPQA}cp*e_cW$RmkmN1#{Ri>$kqE|M!0~M!WFviKv>F zoem|SI-s#uq)`^?^jwiq?!!7oI%x>0uUe+V+W8;5{Mw#3v`$H1!OxtBk`no`ELksi zEg8N86@#Z?qeYVCt(4uo+M8g5qd6G}xWM8`(rN;x5tZb0VxQZ=@kj)>?2pEBy5Q-R z^?s;wJHsu9d~S}c_e&l0Y>FyjA{1=5ZZ5ZhF`zx5y!=@pIOVn>fHp-dEa%e$2IjDC}WX`jb3FLjgZke2fzr%>gl_Ji*7rr37rRHga-TW^Kt+5C%+YZ-XWrqE4crcL$5S| z>X>vc+~_u{nVv6+vk!vWO_m-KeZIHq^|)xTfhuOD+FCl!N%Y)Trr@voC$@ORrZdBy zJAsJjICZ%(qIGMHr6v8PBRd;9K|VKhn;Pmvc&#Um%w}rDRwxQAzBqZD$kvU80#$|4 zL1E>TmfWN)-OKZTs%5F|IxQIeI6^41}Jul zt3&8l!XIddyWzS4+1}8qv|zaI{jt%rh$Yl4ldLzzuc)BUC_U7~)D9F~a6%Ht=ho@8 zN4E!ZU3B+EG|cop)-HF@(uRC}LeCyueu*zJiA>4su($>b7(n*e`DpA7_F>}QR(zX6 zKSA7gCNIPmwQxzhK%u_a=`;np96JY}j>af@5L6}^kHrTdjV`<=(c!)`HC_G z%5KjsZwa4r*}k}xzjuFGMz(6ulX@HW;Vm`~T+N&Hkk1{{FO`1yLS_W5VJ2MQPZ7Oz zzXheVe)H<%HMTIqh%c|^L2A&JgL$i?Rn^%2+W zM9@xZfFfyK&wInV@naM}8R=`VaO46HWlqvlf8hAvKdfG3Pbrv3Y9n-vm*3%^$pPa* zh6SigI`eVmy)yDxb~#VZKA;8<&wE3~+&i{rAs6xR1@~TH->xq^(4Nu;JODOle2d1a zXG6@(V=rgmGQ|2_0M3GAnl({c(7FV*scqSVO?;Rc-=lj(Mx0ju(mWxO&f+ z6?xx2CSsIVbi)Hu#j;Cw%ps@%Fg7FsI~kulRDC+j82ct;ZzJNY)&Fm5^k?(k`#;qg zebB~@TyPfwHDTP+*;+%jC85SKZ!ZiilowO!2h+2?6yS6(&Iz&M1jF( zK?X`&asGenYAFen;W3E$r{-;)UQ)J0-tS_V_c??iHJ~4hZ0SnboF(BRIw;``YR@j# z;j0Dgv2Kk;?WzqwEqxyMAE<<#(#23UFiU~ODf&leD;I|21wk5wOvvqw2Fds5= zPpN*!-M-PvRM^WezMe{%D6ji>&38oLg#yAY_^zDlz!fqS)&JF`_!MT0N_=m zlb;^&1sr-p*4;#R84GOqac^k93VV#t@H}GFm4n5-21}7EO8ax^M!JI?<877~3)3r) zOL?!&j$3_Z?~Wam(idL3&BY_1O!lr1uxVkJuODsRSowub<{I!HPRBrQjzmaNX|xoT zR<3hH7P@0+&YL0aQH{-|I)z{E0BlbnWm!?T4xq(A( zBX>pt)Iz0i?V1}yUnC5LpB&-d!r;swDtrAK+{dLPoxj`_!$Q6r?Hj(`+=QnY)IUai zFgaGBkGywv!cJ7c7~ABjDqJjO_Z+dCZ>wTp&mR0?*UG^&D3%Ao40Lq@Q^T)O4-OW} zZ5H>r%ELf!FGbUK7@r{Mvx|C6M6bSpm*%Y(r4Bi~u|oi@ZRX8yeHkR#Za6Q8r;fbq z{e~Owy9&UUd(7ne91J>T#0_lQNY}oj$7!2~9P<)Dz%)v3!J{KJ+wx+@8sV)2lpRm| z1pRYx@K;%>rL+!oZ;YNDaK6YS>uI}255E3Ekv&Q9W)gcXk(lL_hJ7bQT`cCFTUKNC z3_-(r8oYeHj5cH`gH*iKB)PLoup2q>mtpWSTG8Hn_*>9c5ZgiNDVYN~s-Qsjk8Aw( zR27w>E+Iy^0%vM5v*6FDwQ8Uo1f}#t^&k#v9jCgDU}{TFm4#nBhKma7r@RIMvwRQ( zhIvnv1s}gCFFLy-9>epl_`T1j^cFHvNWVXy#k&DyMCqi$SW$=`T8p|!^I)YZ#gYpo zSgAIoL%Bj}Px)GMSA(;QRemKGt7He zaLvU(sa7NFlu0^waJtbhxVB0fF%0w85StT_rr`+>kr8oGx2;*$@!|$^Dtlxh4H)_1 z>9<*rao^R5U2tYTkYlZ6`u_JaHAT5{{`yiyG`oNHQ#s3g$KM*5-i@~N`IA%r*tIa} z8oWCR3!@u|>oviA@Nm^{klfG-S^z+A~4O zKB2?NTG**aEV|uBGFLdu7qj{v3J^?534^Qh(yLv`iK&mKLh`AV6D(_v-hb&J!ZP5C z>M3p63Yjg{`WVYaVs2XlUra~K$!$W)yq@N#aH~;!ty|#)q8*{$gZ!p$k5__glJkjM zYJ3el$0{-_`Xp7t#`f`dT2}`Pu4}*cM7Ty3a+M^;a*ZEgYZ1u3*3sSB3&KFZEQ0M5 zFE>*gf<`)JEQmDU1R&m~d`GwEfKQ$v@lFgt2qVUwAJ7@^tfAT?WIsy}ZMVi@Hx1ia z)6L99Z&}n&s@g1}AkM3`s}k zsN!Y+w7{t_l2fDvmZ}P!W__`-xYM7cKgOt$o~d&!vSK!{r+oM`w1Ax7YNZvC;)Z`a z%y`q7+OFT?JihqYIIRa##ux zN0o-y1NF;8d*E~m$B9c)`o{S{Fga6?YW}0yjF6EM>k>)l@eyqX-Czpms0W~Ph!hQb zNhVcL_E;#J9Xv8LR5t2WQ)FRB$zWli#<(Q#0~E|!e7OuE$A-_~qIoEHU>IalGB0oo zsQV=8^z#SXAad!H%A4dsWWd>0&Y|-U7ikP$I7T;7HmXiq1#J4z2}3Z1X z6sAo!nJ5C0SI21%qQt}dw)t>nQL$#7^YX-QlwDMXh_KzEr5zTS`|N6CK|wtC`0QJ3 z*bw({vqk{P<4y>^KTAj{-4G!HcDWg;a(c@cO4I+}OHIocagGl=Bm^T9<+I8+01vcP zoKX)hP_~5gEIhD!&r#P@3B6zqh9A3h*y)^Q#N36(_33*Jjr+k&wTtijU@)+W7MQ}0 zh+)j|g-nI+^Ll73Bh?G;dHx=mW+8dClRjKDpwmOUrmeb^M30?!no)KDkA6OzV6?`{ zN6XPk-|yCEn8!ib7n%5590W4OBjXH%Gb$R+A_=5O(Z8r%ue^zdv{aC0(S)EKR-j9z z-X6{#BmkN?Iz%{@ohA#@c@M~(*CIW@2BVtVsGC~kFM6%nITHBsUK7}@ z-r&WbUBrR5>&rvkkO>qGpnriG;wC{cO&8bP{5Xkt6#_KsLnYc2*2|@u?$m0i=%ofD za(cR&J_$IuJof;#TfUK~##)YdAaKr;pr)?P!R(m%!%_>Hy4yjS-1z_8N4@iNdu*UO zp67|?ws%(qBRYKFQJ8`;Tk~FQJI9wY`d$bk*g3D03Dxssw4LxT9d81>`%cn;1grV( za-9DQ0y(>pMY4DAx(wTjrBvZeZBqnkut&xmp`}15iT2RuKh0nGa=*i7R_h+rZs53Y z@5XyW^Oyc!ke=mCY>4Rf*;nJ+>tHoPl53Dz}XUPRdSiOT>jsNGUFwENuumxWmAi5@bR2JS2sXm1IY25Z31A^pB zJe-FgX!>9(=qMt8u$*l~b&SsMId@Gr9Zg*hLo^=(~t=^g(;LN9te#5z;BZyBQ1hj25>8h>KM`@M{ zZpDc7x5dg>xW67)scDHl{&f2CWy?`6w*6&ZWu^5>NMrcnw$a2`FiqD|5*g5 zBECQ*zQ{BwBz)T|k#cq|Q_qO}vQv-?GlSq({f14hw7s#qdTK>RaM`gyxEtrFsNWBb z8WG%-Am65me=Dw%1Vyo|N+@Q9B;?;V`&kBRX0fh0b1 zj+DXAaJ3N)V&dyF!W`PC->lfaxB(t5cco?i#!xx{NOyO6;zf&_wfVOI)SbEbK}x)D zPe~PdoR&quZM`GJE>e~wk4R6e6zM${fcd95oE&+xTSj2lfzAbn+;~P*tdaCLH1P$0 z9oFz`08gM&f}V2ndNrd2MkK3Bw~dB>5^_kNjR}S75!wdRn`wqrqTx>4S69wUe zx6M7(;H>xgwEjJ`;dxH#9{=6^o{@HxUhJwJ)4V-XjZf(yX^#hjq3aN@1duPpQ}&3i zOhq;s+G9e-Py$H|{f!Jfyp~oVZec#!lqs^c3hk0r_y0gq7JK9OGtW`s$BGzaq);O@MwX@SzHsz-u$}z_@Uhb9}FJ z!}=zSDrYrOw=Q;~0q(Qf6i>qXrDu-+Lm_@U&oBMw(erF^N$hOUgZk|vxLGi(0{OJJ z@3fI$Cuq!A&_KYSVPcEMaD0g&M*09%8W`bjpR2U|Np(AYh&>QS=td%qkf)kOULQ3em`%bMZ-bax@|FSy?}}+VyFcZ zFjtHWr17G14%Bh9nlCB_6jl-bPm4yv8^3}Op*S?kE=&?g63@vo<$CrJP28>WEr+^+(N!gDV@4BB22f;JkzDK z`EvCX;Cc4~0rSX-i|1(CmlNU4xle|T4*Wjctf7U|n^NXTR8Ep-_uQo3!D9VWIr6`6 z*$s=U#0OpE^46pVx9I$eN}wp!Y8@bpj^-ynh@SxS)f%~ZY3`e>XRCtD?fDWg=36i+ zCG?j-_G1}3hB+Uf3YJ5sabu$7o4eX&M-s_pqT5X^O7{hrT`06fal^l~*^iwtc9 zZ9sP@ofmQsYq{Pu{Erg5={x|bu6CxO4j@dPJ9ouBIs^_)n~tX&+mkozY~WNH>}s7Y!zE9bo3+XX?QNB=N2&z_JlKHXU;)5`x{i&XKCe*;p4dR6 zRAW~UwqrZ2<{kAVy4eJ?+~1c-AY~%^?e5ak!;PxJqbZ{z}9KOZzQK>H#0*Hk5<&3eJ7)6N?OOc z{V6U-|2DY3iY#Q}aB?JzCf1ug!@sRgmsSU)ioGF%9ua!at~ZMP3zR-UVOx?X+M}9T z_0KALb7U3r+w#{R*NfDDBnsG1UT<0%*e+pO?g$M-ig{tLz3DoQT&es{7qIEi~P z1N_)tTozf#51NHXO3FDoOF9c5V~^|nDtG>lO13eD+_&W9_ADdRih~Q)qE~}e)KXIs zVgvfH;w5AxK1nZQ{8(X4fwrmgslK)LhR;VvrKJiPp|Sm;O*&kg8^N3w0|1fd6$NCf zYL!$*P&%DeM__iw{~s#rzzW5m@FG^<1rq&_ZCJ2mh%`pz^%6{T#%}!y9QpqU#1A#w zb>lP1Wm}3Fkq&8*A>B6&S1mG!i*DZ|Bb9Pnt?ntEP2&5W=of4;^}61cXJXy`%RK35 zN3ir^fWxf2aUA*u)_2OUx|vW8twCcYY4BcCko1(?)j4txnD%^{k6ldgO)?x>0v-66 zJ-`oJkQ}B&Nc^xw!a0-+!()=^{et2F7h#ub(IVPXF#h05Yo09_pgF!jXF(}WO|$d? zxKcvm2nFq8aoTC zpaedA#W+B1UiOpxDb~2n!m3*Cu(K0%WvYiVva7#u$v7ZPA03-x)~t)DgmUPdHU37x zB5TJ|$b>h@0(KmiVwHdw;7(Wt4m-qx^)(G~k?yOrM7cV{6DB`@ z0rjM*@xY-!^OpowxsGhuP?7*QS%23CZ~sj#atE%YaLnO+kQ=z-+(6Gc{PR zx(1ZTN)bLVNQ%R44>Z5YxQb8H_|K_aSdHY=`9k4AGLUL60IyxJh%W8Y;y^Q6GqHQb zy=HLugZ5~w$_*gyVF#VFE6elacNQN+O{2mNhGpxgR64$}xgTgG{RH*5`DSHNOX&NZ zNvwTOraVdkxtf4>;O_b@h9%ZFEY+C;={Lq{fwfImO&YxMHxT51U~MvAwjera#Czsd zubU_?rM9%K_n91XcSD>3r-9}$n&%&Fst7Pz&!e-r5eqvnkwvEkfdd5cvD*sU$xNvz{9qg-^|d{p;OC9+=R$SBUDXw}d4&wKDf zS5tZa^wKui&=9MN#3i`hO2TOd+;^mnP4*GzdAtWCBk)b)Ss+JmsbCHyc_01KUq+xT zr>^$icEdLmR_3F_pU!eyZ3et*8Z(++=*^8!Fxht4Kps?xv;Igx^X$ASC)R0Sek%Pb zm%0LN4>zx5p)qO^fP9Vb2+Da@iKAsPg`l17?aQtMzu_qWRM8XU7ghApp_o8TtUQrr zo2c!B19}Y+2?pC$)l|IlF!N%Av$T8?S`$$qh5Q{nU)da}9jf59GLY5F(B}EvFo}T^ z0Xr^UoC36I@})8Q_Vq{lVcwS3xvtW491qYt;3MF?yZIv8*_qF=;QQt(Uj*pR8)9>F^cZkge;#{ zSa*~l-bG;KAvv|E7B23MT!@(&+Wm_m^3L;sgt>uu2>ACC3l)P;&nF8T#9HR9L~+&P z+gRYp&t9oa4vqaoghTfZT$+T>Vm8(-^rEkpa3|ZbDX}}#yf?L+wp!F>eq}|yPoD6E zmVRoMttR=q*r>aNi5^CP3(s~KH=MW-#QdFv@Vk|>pu<3zMqDOQ938GW!RmwwF z(x2_wW~UKv$g5jcP?6O|81|M_e$cEp5O-ld#2V*=wlGRjJ~ zP}Lm<+d28fElbWcJAUQoAe`fXwOt}R@Uz>BOBMi2gn<=<$lahV>q7>U3S z5jW+~tdMrp-OFF1aIRNj9?EN8vJ_$%A)HROsK3tLn3reR@a8YCXBWg3(dK{*NTdl+ zKSK|-7dQWO^gb4GY;jBp;0c1KZ;dB4!obmcAuIUZ!@lMtFhoudyKG_H?|Lvr#@DDA z5}Fd|1-}*St<$qPB-ij~*3eDPl^T+onjRbVI#N0_KT!OC9oSYh_8Xz;6a156B3Y^& zJL36r*9VA6>4?2U8=Jp1T&(X>{}!2rCE!u4UPr|z`zFjq#leZ{%M3^y{gl~;?K{zW z6U68>f*DosLaHr?YFcEtaxA8(qh@?*9eq*!qh7$ zLMYktF9+My9B^g{nCd=KaG5>Fn{*@&=db>n_+8-$$WX+TrXKmT>Ak3un-ih9rld5x4*+9UQ!K|nf%~{+B2vCMa>%VW)feXD@M{BL8(OVru4e}o%FGka zZ{Ij!o4mt|CfY&Zy*fV!!OESWe}SYFx-c);4t=bb(=GsONWRnHz5_*ft%(fk-6eTZ z-YLN)zK&--;gQ&DbB9h?3dPz$jTD_W#K^lJa1>vhU2B{M1{h*%O`Dp+6~ae{HfuFR zT+hB0#M>a$VJ({zLm9rZWy~uW@WHm8_b`$RK9&uhVBTp$^6kgCrh~aH*ic}i@wxhm z=(@Lu9ECYCjtia4S`d4;*@TR(HbYe0^i0D=R1WA8Qa6?+tO23>1#2+yrOSF z=!-V61?BI(_uX1%N$zUos+s~ff^#9U}`ev+W z1&FpI79A3+d=(8h)qQ)+W~IzLeus&R@93xYm#R~~Op+Gx-$VxH<`GF#xC0h7!x9?i zDe`_>tc>`UaWG;3hBV|XHuDmMCKz#$I%gq)=y6E3(AvQ?)KlmW9vK)d|`s8Zi{FyrA&NGm}wn z)^W>kh|RZEkIQcvSoiz(Fh0u0 zU0;+2V&Zp6ohG9~AuW0-fdMI?T)o%HT+O)!56;1zUlxcK-j-Ey5ck$zCUGQPi;-gSI^e!`;33g&cAH6n)Aq; z1>y51vy&+T3a&P?SBiS=hIFmp%QP0c;af)X-&JR*0}GdW$TkH$2qSoA&xHQ9eQS+) z?j2+3>W*!R<$t$mV^w#tsKiMMgiFTy@(N4N=iio%HVEGOEkdg7V3bfcPNhQaDoiW5 z$&FQG9f4c;;@zDKca3L{&BVOe;NzN`Af1nX=C885*MaW35H>n!IX6>R!S2bdS~OrC zpl5bz=cs%!ooIm~?OCZNp0(Z3GQoQAx||qz%Wr0@{Fq6lH+tF%Jk_SbmjA@IApV#6 z0|&0pV@TjZKE2>!4wUcLx{qbb>DT-ICqYpo;$AxGt%Rt+&g+*1i9Lx`M6&1P5{62pX6A8*wPfa!2dcp@G6EkP! zkef22+GNXd*$dgi{RZt!T6QH5wcd(CQA1VGr_D5+42zVru&HLb~K1Cu%WzwP}PS z67-C`;4&5|%NA7+^Qzv>?t>vI*rLfWGT)h; z^5BDNgex}Wg24D#*i!6F)lupRx(vwhy^l*F632E|Np@yOlAYvg*A{dBu3l5Ae_t>` zU}W4B2NPNQgHAbsH-8bdZhVRg=wRB^4~P)@tg#K8BwAd1zTlYL^uP<@%s30rXB+Ts z7z$_}br%VMPCK_%ILwfkFW$_!W=MPAXGM8r4~ZLj6|L%F`IK_18Gn06{i2f4?nUR(txy; zlIyHEx5VS9qtgxP)Z&g#0*hJ(XA9qMnx7=aKDVMwP!K$d=&%nLA=@#0nGE#9e4})H zn?F|>o3xwk@}O7-_7}wqWjww6@4+8D!>TM7AA+ap(mV~IKGiCaVc_8yw%6LQ+jFqE zmHA|yv@J;J1ZCq%KNZI>(yzTk=W(E3z2qimt1}h(toE2?2!+%dL}<%A#{!sl*)bM` zQ1C)(D%;y!=tiJa&0+jm@UzktQMJx%sZZxiQ$dD0IG<5D8NG@mg=Hc~t~zgNe{fnp zRr}3dB_C3HnAI66yy+C3_$^9(GqUfI11k<{mZe(gR0Du~R&6wzH-zxM6ngESwbl`&Z-g($+(qGtU_$K}}W1PKscW9!C)~04?z$F|O5R`R?wqVQ(D6=9buUTNt zOhC4!EaUe>s|VqZ-s8mHFiPQ6V}z-m_LpKnp|4RHz1r*#Fzo*$E~F)fYO!+sxr>PI zvg!!Mo+ywiP~!nz9$N|1GS#|M55NNrCSji0J}IH$0(GLQR}QJ%1b3iZ=k}Klk&9U$ zIYUw+6p207OxMSQ2MJsEHiKbX-$NyuZRUUA=EacN&KD6(oCuBQd6psC>dD`q$MX_Y zhyzl8f&wS^r4l6U-p87yd%7ufwqt=GxR3z%Xzi-`i##F(d;bxazWsYdG-^YlWP1Tt z0gs?*XKx}#bx%>N1F8(cI@19zHh3Tjj!EkAV|RK!z!EEn=HV&NH_51A@A6?Rp?AIY z4mwt>CM5ZYYZz-SMyo)U2fJwq^Iq5p3EbSYASbJS49CQv+T2TRpr+7$_FZdsX=7Z) zWzIK&-i_pzms6pr;!UO{(|NROUIS8d8uGksbmVFa-^Rp|XcD#VQje+T4sI6@78|Ew z0jX?EknHvb5pouB{{}DT7W+iuXtu{;PFZr*+FjB;_f$!XtVhc&DfB`j39rLI9z*24 z_@&G`&YDT9TGIFY;A&} z4X@(MX&>MQzU=IWO1p83KB^i*tA zXj9whXzb`|Yr5YDIZK1Gc(MJGo<2ga)aFF@x828CS_kJx$xj1sBb#jcYu-fi@o-jH zSxT`x3>59~%Lijhf?%zU;NMhh0dc)P^6V{w&wDcsy=^VxInRYY?jKyZeT z!}RE`Z`!zc!wV1YNjA!Jz|t8 ziw>-1d592bM}fd9Ha53FO|i=x5By5V4dcrJ)Q-|P0P3~X$#OTl(d(do68xtAz*_+k49+jD1$m(DN^=w6UJ?+` zJ-(A5C8c=@czxEf=AA6cgl>gNg1yW@IXMjN+En-mjDRi#o63c@&vIy;_D#Jji^A9_ z%W~q*r1)2DkUze4wqh1V29!TpBahN0Qk>C}jMGHmyhN$^ENxaJo2! zZePSxRCnme0_JmAlnj>8bBqI7Cd~mn8#+c!$`!<6QJ_UPHWpcXD4bEI;`9CCDXt^77%Q_I>eCO&dUa5eoB-QUVox;pK2h6aP9 zJlZa>!^$S)Yi9nremJP@upXMM=Y!gyh1BuB3$sC;hwWsW`; z$n#7~7WFW=0~0IfjeB*rCQ$JWA;Hy%MDg-}YiJh|2s=o2Suw=c-PaBJ9YwO!B!D1& zqrWbs3~h}yUB1D4!!eHiz#LlaMA56;lc*F}g8U^XpxacoMm0sLDJ2QSJ1Zso`s0w=aN_^`1ixZ5u?}&RiC2t*PmNg9M_L*y2O%5h{v62oPK+I$95C=Euc7IXRpQ zMtVa21_(4~=(M1a(s#P)`Urc8o2R_AQ9A5$^tPktqzL7?Nh^NthHmG;NKv<@$(74# zbv8~e{~S}TI@hzJ-u2!0vO_2^>AflFCV0W_~|-k0kN{N^=nY{!I` z6$A^eA*4Cp;sn*TD8_|Jx*Hk9ERJzn6*-#zM)R9vL&P$+D;Sk_q)IATznt?8&P!D0 zFZk)iW@Fh)J9xX%0_}O<2ew6Yj%Fq9Ip!m8s5qOXsVe@Usor0L-16vM6UDJ>ovwXX zqgsLr{Ew&fJd}?xwgmad z<5hY_q6{5CyV=Mrt7|HD3no2dgWOwhgs5qu1t6;3rwhSZfEe$bmUzUz|8Fl7IT_GD zza@-f9&948XEqHNcuoceuMG?7^BNQVLGpZ^se5{9N2*WfU;~BthH2PnRp@jL{~cmu zps8QNwEAnMsyi?x()1iZO_hdqKh~^VAeGULLcxn`#XWBl#iHOh?u5_r-Q<=^=)r26 znEa&Q!0dA8Gpz!_bQ$m(Wv{zp>_3+u*GUV{8sI*r$van8)(@tEAHgGh`>_ zq*CEW#S~=3zxEN^S3%8~kmx!oE;W$pW~@S*GMZ|${#sZG9|PvY4VI@ zKy5Nkv#x$xX}v}v(YFd*=0=?;o4tLd|Jm$yQJj81Ey!iLo2@>nZOea9&xQ@ z1S1yV)i(c2-@buiOV_e;)siAsx>QzLXp!P|17Y)wo^zGu**b<+9E&H#DAtvpJ9;=lVBeOp&;kiL0BNiRo=z{kCcJd`GDUMbbb$MY!d_We5JW$Eq9j?xl3 z$qkw-ng{xJmW*Ytv()GY?)OBKcTi^U#y49ASdn+S_P6O_Sk=t{c+BKxVqCS#sY_d3 zvN@p`(U}`9KjeCIhZ)(U%$p{lVbc%R&%;(UC9kVV^N1D;SgXZgx0vwymdAp2gt_Z) zjIlYg(l792Ngd|(CxGGvNUbnJm0zdQk>Sww3uc$`=?O4f`1gxIM1H*~1K;8**dft# zUT+xv*xT$r$Ib=K%7fPzKQ;Wu$nGwsYggb~m#52)bh~agt2kV9wX988m<(@CVJIVa zuiiyT2^~bDM4Q@O#({;1;%**YwBncn<~LShQ>eu;fLT+XmzI7-AtDL#gB`-3QN=V* z=~Hd%2j;LI!!S#-Ax$;1G@+w(zr_-j8hul4e<@4XA=Oy9As$#`XjSUAaH`UzqSwPw zr_QN-F~)b)&kK&S7AP#!49!#0_s7AbLueiDg29?K?Kd7U-z!_lt4_?umFPl#%BcE& zWvJpm*)bqWWzlq5P)Fs{L#FJCVXT+Zh3vSx5ZC`#u*ed4A}wX=YA9Ro|B041Ja>#5 z>Gy$81wmBwTMNh#plfy&8rAV8YMMjCFMDZ{vVsZMd;wJKwVNM1Copx5Q#}#sS@rcZ z^@OlKiyJ$NkVz~ByA>!$Hmx&q9V-Y#3`1XYQ|$hib3)a%>1`JwV#V;S>ll-H7(LwNedjY-eMSEhM19vemy7=&SHohuH*cd2(Ys1b zcy|i%6xkUW<V~E<2CR?-NJr#jJBkGM7bJdSF zdS+CmM&5Iz?7Z6(PoA_`6>9jdf!0rlil9i|>G>;qHrcL{Vzi)3!H-JB8OsvhPd!~S zzW?)GT;NlCdxL|qz_`SWu(yWQFhQT+;;PJc~;P zt)TgeLyOH4>~txs#Q6`dpf4rEw6^Y$=4Gg_!9y1$qYcSvMZ1~naYWkNc|$;~lnA5x6{C1H}F*KT9ndM%#VYDy#+A0n4+EKBB0Nt6e;n?qJ*0 zjY$nR;>iqPeX0gQeF$gpKul^OayO9s7TJdyU;3QNtK_({83r81K$*PWirm|L!ny+RGP8LgQ) zj^Wpjp{c_1{TqooNA2th0Wd260PN*__itO2#Pj0K4|6JCiA?q_%jbg_+~s@|XkUFLQUW|3vFze7JtxK&FNYZhz9ykx z!9unPY@W>C(0QRo;49$x21cx({Td87;WV^JT_^7p^ka;JsA3cYI@^h1!kf+0Wt>DO^xTIWEaOfj%?=wx_Syqe)1o&qQL>sC zmxkx~m8d}&*hK(#O6O@f{fFHrbcM@n{(6tssO-3Mk**O8Pq`M(eORnzmDc8$$F+B_ z7XcPWHk(0?h9Hs|NmiIs?ht+jeyjl3^EyCwcQqkGV&Q}NHdKFtR&(fF$B#_PNdHjq z#4K4R*4roGe*yMhG-6Eus`q4{`u@W8Bv1FSYUL({4?z?J@Q@dT=a8Rb1MZV(T+X0t z*XKwp@|6(@3e7A+?>LAlPhj`ag~>s)@0k#mIZD(e?A)}OQ1JS;W^djY%-rKv^$ znV)zxU);RAgvUcHhEw_&SCE@V0DJlO7oOx#~i2hV&T(~`5s zwALlI%7Zb0>a zq@Jk?m59Z`e#O?eKUjT;18&)^D>rP$D4Q*f4Y*;Zg%_*%>_cHW8EROm3Gz=ll}M$M z>Ljat)?28)%e%e^1CMV=wR5JDi@gB|_5hBIInEp5)Ro9tuNvaiVd#S4lmL zKb~ndH8cipOSJlCwomIZSy0QwWtA$$L?mCv_ftf3;JwR14;3he!|bB#G{Q!W(c?o|Bej+tNksr1+ zst4J42;L`c(dDi5y-Z3Kg3RVo-BnE}3k|EJv z_g^~LL>Eq)u~=O})rSf4QLso_)SRSkyV9x*fa^zRGgWx1(z$P5EqX;$^dng${6P~&y0S()rD+#Ti|=cKqy)fRAFY8 zn`G4+TP8LFVh?&E&wl?w#i0sQqpw6qBtl`h=<;IGgDbV$BoKi3B$wEsY28Qqp|jtC z>6BG50?Apv3%6Ak;fOsir~PlMt$N0{i5zb7I8EYfIM*}MEX44V?E zQ)bb{*!@Kj4mS~Q3?*mYcXcH%=r!d%a`B{I-}jiOJgB|jJUoG!CK3YG{P`lPZTyq} zHw2{-kZGs>TzW8r90a!n1NW^z_`$h>LEUn;ds_ zpLM8F(&IuE1lVFj6*1Wu0m7!D17=ddmzlQ*mVSoVTgbZ>W8o1qLt91~)Enj7#Wu?F zfuaG*Yx(PYiDbe1bs_f>pP0E5g&y<&!>SvoVRsdm9dF*6EuV50B$t&3#NFW4wF}0} zDd4|By=o9%plc7-A+ynn8HvWy2UlV(5Ti?BtrIFT?=FJHdvS4Zqb>~83Pd6|3CRbb zvUomQcsjGyMa#A$?W?(F20Lo|IO(RS)4 z7D&Fc>l94lz_}h*91@*Jdf!Pt;UN)qe37@p=n%l%L_RF=?=38;d^m6ASoHA1Hrd~h zYZ6duRBt*1m*HIS_Q9G%FPU)dPOfAqU^j*0uk= zq(3=}eA~ZE?Lj1F41ntHcjtjGAfwneoS?RtP3-c*u(K7o_3jnHc71x*A)U+(KsE6h z4`g%M%h(L8Eukd49W()wWQm4J_)sf4!It+jyT+P(sgz>DD$Ww9JRJ`HR&s1ycL2;g zk#+h3v3ex<_nD5?kr&vfi;qO3!5|Ako zGDIj|cCm-s@P8bg(7PYFHNY^*e<<3Cui*9J5^JacWe1hy+&v0md;HZZf?Nn-Cg1VT zH1nx(91H(Xd-aG_9|&B%#0GWDktV$0%iLKI5L%OZiCzj<7gchYh zi{4H9A+o;;bSB1axExq&AxY*tj18aRTsrSY&(ln219m-i``m4?(JQB-3g(7Nu9m=U zkY@Q&h?-{^r^$ekjzezqJ5?IVjHZ73&kQdl=?OHYa{^~t3_E42^pMzOJB`*q_vC`n zLX5#>iKa3C-WwA7&CVH>4EnVhHkIX#yVLQ1QN>xLh9`O}#3^fX;%pB~lFq1?(p6da zT_Fv74Ly|t_2eGJ=XPtg)OWJK-=tmUnf4=y#hXV<#iQmOSgM7Sa$K*McR71-JXb1~ zG@z{acy$UjMi22WbN^>vzzNZnF~}jkJVfG=-S&k`pkShVdwko{e10Qy*A{H(u8}xT zZ|LQXTV}NiSKc_eE)Ib(?|qUNklfLp^syT^Nxf~UWAZklA4D@b!}NRxVQ#%>&c_AS zafjql#yF8krv(oY7CQ>*_TQ6Fc}!d>3IetXCngf&qz-V3+*cl6~X3osu%=V-UevHJR02%Enr= z62HJUFv1LMW=&g0Y4JOb=tk%r+G+dVM;9stsXzegXN}{#3sxZ*7?Y$iyu|9rOgSal zk&})#oYre=jMIh$B10aS)2tC-`$M;S*g(%bj?ztf5HMxp;!TUN@T%KP%BdH`q@cC3 z_vCIGJKqgxDBR$QCcS?&YuXcdrWobrPom-sdvw+5;Cx5-?o|$i$d)o$B*8>uVj%HV z*2NAQN$nPb8~OehtLwk;z#?@6_Hn6xE&h7j=47^p7qD37E;?R5&o|oykxb7%I zo0NpN4v}P-jmHaIIeU&C!#1^6Ha~7fV+BtRO>~n#8f=4qbZIvFcn>L$#=#vr&+D>T z5=>U3RIK=3MP}v(Z=;wZv3E3_E^A+=Tlw}Yxtja$k;woSw>dp2WfyQJrm&sbv=%i{ zh;lM-9Ys5sm}A?~=H^ISd&>Sx!y7{NgVsAG$oNJxG&PLC{YuGti>G=iXEM&TLf?{> zRVCB2xh}9_vw-{@ocv>h;@(flxg<&S*&x0-L zaf6@UFeG~71P!GE9W*Vl3Stp5JQIJ-nO*tlYG~No!QX$UY0D|0wD6-cmDKNul1-Tj z#lu|+UEeD><*cK^fCSrf6FdXB*66#2vN7=-@)L}AoD$HaS(C-)rMUk@*_mRgqXF?+knazfuT~pI zUeY_35;5eHtZQ2q6oth%Wf;IpE_)(V=xFx9^tbaB&8cM!osuLi+cExRRiyfosXYFytvU2c7)lE$xY5{ z`18PvCysBt5q50<2ZM5AM%{D`H_4n$ z6nx)_b)Q=?YDE8X+E^V>yakyhTk@>~^8x|xz$cGFA?ZGlF{z(Jp`HmI9aH|@(Vm;)= z&f~&_6eOtDfPDBexcrr8pOY0i@v(jA^D?xJK;}`ehZj&S!0)h-k8smiJLio@D`@dXz zpDos^&G{H9WP_Wkf6SDQpEl7kGb=jXW1_Hm4T-~CkHEeYIyY>D#ow9svuH^i9)(pP z!pAp60PI~NC4F&1<^8Y3T}qsKOs30CWDc9nQ)-zo)`h@)iQ*C}@&JBgVksqQhg-3m zX9oKkSkID3;6hUTDQs3liiD0UNeA5=n500FC@2j6lseKDk&_WE=hM#+LLa*+#?tWH zbg7H7=cHqVO-OfXI)f!ci0pL{*ZxwvB8@h| zDe6Do0D?!e@9G{Z?LvoRs$RSif~)K=3s1-D?J0@Qn12z_el*~hhUOp=PV?y&?NC7H z2sO<_6~Xg7DortG%?S+haNMoFoJ-A)Jhvwb4tawi_whPTdB4AhgiygXB0314&-Yq+ z(cdivHsJHSj`2$n07tDUz6oEsF8{gCjI@dfy8V*1gq5y>uzv<5u}8IbZNOy@8>!DW z2zXH4KQXe3$az0a$;k$+3L`5A{Xbli=0T)rU-ZHuyD$nK(o`}{e!#{xB%86rKkRCT zW~3ruV+T76?DO>sVpdey(GFrfcMJ+(?OokFzINh2v%9+c$=$0nVj8Wus^#e--ER0M zO38ATc`sr~)+Eymp=I~PwqV_GJBn!a#29si+5kZr#CZ?%y~Y&5E#SEVF)h|(fcLE- z7;W97P8=D>{EXi(B34Gt^@w}GSwNOp{V!dWE)}~qX_@84xA?8)9{o0faU-6C5yS!J zVYYc6apt zx`3ho?pw8%r(^4Xhcls=2&usRvQMB(8SV%31|s&Me<-c1evBI&Ou&t-uCQX)UMo^2 zWhY3M%sZ(5+981h-peedvW?DP?Ne-^a*#~4eIu7Vk&-e%8PuRUpIj?{crtO;qnUtV zXhXvwLoqk_n$+d7 z&XVh0(pyh3`Qg4v4OOGxudWPX_o{vrzRpb~%#+)rzY)8+(vc&Qs@2M~;)mQFsG7~Q z7Ak$$k>z(CqG@C==bwp4G=%bflXC+gLIF`g`dGH0@8J{wnv<+B&4;k;Gx2UP>HavY zU6}2K{rZYnI_Hp;J#EZxuK;?=Kv;sd;Ro!-gA7FlNqOgGqG$jTA2)q5zS-x&LsWfJ zjj7*de{`MpjwH$6ZkVdn8}RSqowF&N-WPq`JI|33kCVwKq;5CBUchl{HOmo}H4!QW zf0#TOPyh{kxbpJe4ap_U0mJ-=HcQFzOR)6<9#ZvMRb~^*x zqBXTjANyzwHwpkFO_OYwQp(dbUH#A6S{_a#pQo+=6#1Nj6epzcu|L8(yF+z8iN@KV zpl|8Lv#9R&bc%>o<|R(10sBeuXRiu@f?kL62ooKqWN+K zi*ysN1KJOQ_LMlhANg6GtlVCjm(Vtj{ugYK?O+r$0zck4O2g9SHfC@ckmC3o#RB5s zO?68$4)jK4?j;rk>j+ZnQ6238+m`V3oMB$!c7OGF!nV=`q8W3mS0uSK zfIW%z%>+v24*cIVl3wkuUIvea1l$4kT7D*R)v9^0k(Q{m**y>l09`WT-)C44b$6Jx zD{RN11*id|LL(lLi;dA!2xuR10m@K=S)Dvf)`w&{iR(U?WG?V9@|`ZDP^Ik6t1uP` zCeY42eknwrb7P}PaPB^Qk$=ue3C7;3)YL)^`y^X-oVP&2MfDY)P`~-H7aTW->n<>X zcTUkJ5u#bxFO5J}8JWyF&T8}xNzwYZ+Fak!Zc=I-ntqyd&ZiS=-UpAiyD&oa_h3k~ z7+C3}yqetn&N-U?sD$rFMdlx{Vm-Htw~H;PqqFvTaUA@XBVTMq)ywn*}EbAqevWIqnl)B%A0)Y26k-M`7ld$QszU(S=b(*Rb@4|SVYD?S30G4{FwNW*4ODB-I;`+u2N#+8KwuYF2bp-6%*mUVF^60|j{l26|`> zIa4b?MJofKjx_N=^TEkp1~`vEVCS1JpZJhnsaItq*M32@qGjD!?n}V8!jZfi3S)~l zR+7UllK#0ndSbphi8{>RKm7h|ay7JDrFGFKYqQN?rB+!ULz`>2vQ5c9Gd`4ZPG&vK zw)|#7GiVJtzDB%+t>mr$`hTsoq$1_r8Bj8lVY>QAr=lFj|4w^gwHvuNglnjEZSsd% zxM}fyK))nv5wa*3@8SB07o_8?qT}w4@gCRe^+v=S!F4!EP^49vYp8(9y12RPemh30 z;6eZWd(d|X>TSjI0;)7*t+!K);GLDCAg-!+iI}}>3$W3s7iQ+j?Jozh?8W}Sm^cz5 z(1&R$Mu|K9%W9suxZMQba*M_^K-_bgPK%yHIypoK)aDX(ybL5%8_GjRJ+(?i3K?7X z2fVF1Kv!Pk_|3J(#6ar?aK);C5Jx9+SLwz6P9BWqVP7D_u%H~uS`HDq6)WjH$b4)W zaF$PTz}2%t29Uht5l?GIXy-T4gME(m1J^qj3E6q z+^>>GgQqnG`g#6gD|QeeRoS)HTC_ZqT&1*LE3pcSCw#V7KBfHS*XlrgT)7T2z46WV zAK~0ezJG1V*sF09rWF)X*~nHMcYEEM8-b+-Ug3Yh8>l%Kb;E_yOV+X72P(E_t*qDn5%= zeCq$8vdJ|KLU5+qpeF zNb+fJf>ob!+B4(~>L4T@zyjm1cWouPK@~Kc%!UgBBOi{-HOl}}LH3ry@$AR^DV9YA zX@!X^x4UDE=B}G0V4jN;+$C0&o+cUU3pcwgcmf>x_6{kz!CI*H1clfpz_{LqGb>e7 zfxD;mmgRQ@b|lb0y4d5e`;*)w^hR{c&4U@naIbQ?Y2xS^I-K7mXY9YybrYS8NKu3E z9rHJ7(iR7I0yYxzJ(qznmUjCU_6?yZ1S>wFnK7Q;bkmTIyjiE5Nk&f7|Ndx6`R&oD ztZoc}fO&EWUydl-HVf{gNAtZnc+8Q6^|Cf8S)&eEwslBi)RwAf>zG9hRR`Lqg)UVC zW>fw}OJ!Kn8;zNf%dQ;@o^nM_mrrJbmmTpw%{kY!sMV* zF`E9)=mTvED9x>Ne;3Mtc$iV~;mWz^^p%UV9hVZ4L11T`K0!><<<%Uy3U<|;yv>#VE}YMG0735L>X!O`;n274F@U&5=5_j#L!LK zIcSfhD-GErfh@lb$BfUmSuWy7o@psm5C)>*PuZK_P`jC~YVcDYqW0(+gtzFSNe4z- z#Y9($1+Z$x=s^Zs$_0y*!H6A*mhs_Dye`GNdr6Ag#{cV~FH!m+h*`{lSUzid>gc0} z;QpJvw3?p5_Ebwjq2}nxN|2)IRxczD;K;0h?xvTJW0sq4vcX_Jf4-$zn)Y~Tb2OeF zk+dOo6@?lEM1vVEt@z#9)Tl3qG?p+8B4_s7kCJw45Uks0`M=_Qn2$Rrn;Gz60#Qw_*`rxQm;u}L7f1q|5rvbSaVe1S8uljik^T$tFctauag zZ1#@e>Bf0>6SmAuCLQc90^$SPK8-s4z}2-8XKIP!SgnS;?TTx6XN?>4;=Kz$#-fFO;$}QqRsad66#YJER)jkAV z%|aK)v7n0=v%y~wG-8O^w$MDuIi#E(*g8Kl15Y^;5_D+C;v_iJ|_!~g&oA(=qd2Ak}-Pxiq^=W!9?Ph8hE#W%UM*wmhlZx zYOu2v2xVyg>%E!Jq0S02w?9fbhKWCA7c~$$IVrEt&rtObl*UB@YN58xAlem{HRg!y z<_*hgFXAUs_n9j+fDU$?>R6=EtxapQT}w>nM9h?_W2AJ93{v*g`rE7!{?-q!y%}7;!5yTZ4BJxv2H!La~Hy zEE6^n&fOI3n)uf~1)iJCwseKL&D)pXZ;FeRCu z$YU+2R^d^hGbc1I3f)<%BjR8>2rvI5ZnNL}CL^}>8h>)QIRrUG#9HncXR=H23|7KR zLmA^6BDnBZBKy2ChbvbX;f+*Id>rH@-J?HqAo!c-4q;0B1HP{(Pkz83*GRm83nHFL zeEFN=JjQRA-J4+X$r1@655r9aaLae47*+gm%!Xwq4RVX_J6gZirI=4g1rKwvAk z2NjEl8FFUZP?7y8wDAlnDZRD3FiRe*kqlG~7{NJ3!%{uNK_b2_| zyJ5uEXxq-*w(2`LP)1U$^wF1NowJ?F8v519b>p7(-kC~Sd?;=xSDinRz;u630OkU1 zjZGq*V0KtJqOX++U{*x=qh!)=TfXHT{lR6-njU|rAz}B>ox0onxZcYiSQN6jR1cd=H29J@1t$ znv{a?EYHje!Svg}x1uiO8NYXJSz8gEnS8bVCVl`4rB~~JzjB@5M>wX&BEs~qLLNI* zhM2#_s#+Rywz^PT<)FVf&LI|^bl456iKq60c->PCT9hCAxJ&z#ZbZtnTeq-fYeAT- z+xQK$tJ}Fk6~U9@mP`qfr4839nFq%)V#a{~f0T+pXvU%Ma<`+0n4OBY$s=`E~YmHMb5dwG@0c>b2?Xt;lSc4>Y$u*lN)3O-h1^ zZ2|g*kMyz$zYnd2b7{;j>EP#K6^OnbKF$88Z~``7hmcgUl3}wczCv%<_sXJYcdbCTI zl&o2#bd0;4R-v24fWMF@uds?C=NX_Z&V9MfJ-oE8$?cwL@jJP*EuEjeFC9cF4m)Uj-prjW{^EGb{M<9CC5;BR7TsaLZ6WEZcP7qls*`$E`UI&ieyzTyHtZL#> z$jRO2we)$-`2zb=&@X>}M!Ys2@1mDE6hV@RHi<~(wT%QkguFq01Is;RY($1`?HPd5!6EoJ~DltXy4@xW!9Lg z;wBP(mB@htXmhhuG&nL}$wMo(lvS1@F;>d!Y#w>5i{!K_Q*T#7RpMfWA!sCraD1;x zCL5C-`+*I^7xil}n*~BB)v=s+OKQZ_0?02>q?~&k=kOL(ibIhTs9(|0jCiq;&VZ#h zs-N0M(&i+=`FaH1*rw^joKF?|8q$s|j#8)gF6+BPnU5t!c!n?hg$j<=3vtfaOp*g= zD4yDV{q?IDw7)N8pZ-mL9x+PGc~b?$;j-*jV|J--^ytq@HpqB%Bwhr=WgJk%=W_@U za9~m-#9s2<6vj)`(5u#^gV#sTKuT0H*Du8+8KBP(Qp(spFwBfTObLoNNYk149ZXLK_$13| z5p{w%TneZj7Tur`YO2={ldZ3r2i}|O96!EKRXTe0sMFS8M0#uzUVT|X@QUc3dGISM z6Cu22CttDXi;pY?Em(O z;*wQ*Bn6EvP`KGRSO)QWAPkB7Yjm%ddL~jO!Zpi9^6Fq6wrsbf^#nW*SY})F=4u%w zdAo&pr&Wb6BFyum5E%n6hti1MA*gB6I-L<30p8iP;;K2Ay`Kyf3)m&&yoZ-EkfCHl zY0tvbD7xNs=O8KDe(_~wEJ#^T}pONAGP4dcWGuQEkHCMNfmEg{F z8QQwYUF%3_xs{4Aj-RrJ3iD^TPA1pfj;e1(q)w zTD0#=>z`}Ii-jj5>*l9YuOW08TyDQ&~eTXa}i> zLA0kfuwNqyJVAZLA%8k>?LQu=SX*e>e6wc9dnbsR-xZ0T9#eISRnG%83$1JW)H%y| zSbpGqu(e+XLDirGVv7}vbW*yKz)B&E+WvzCvIUGB&ux$IT-Lj}g33Q*xH#7L-U<7H zB}o0LNz=zLu3<-^?g#)wK)k=&9?UemVH?`2aVVFAquvbzs0zLGZJlk$Ruqc5o)P8E z;Id31uYiErmXCmmnH)Ys(tWo(_c^5c6YzlJ(=H5X ze?il3?<`QiE;2Qu(;SvTH3WJZ2%Kd)^on%{zn-hIH>Q6=m2%@ z9t|bBA^q4pMuzPgu?6Ebt#Lf9-vNi;sEpZAgIIxjsVm;D;iu_ zO5VW=^gYuDbh&&=nf=i><6=;GA(rj1_8eMuF;50apSWSMw8r>a#V8)Bu z=}R{GY#bp0#p0dIysA`+)s~B8OF8)g@ZH670!@GS=wa$rhLO&<8yJspTF5QHF<{Y; z*7I9%fS=vbA?^M|a6s8Ya*^VxU@vQ{sIhf{?7`#}a3V7!uiwN`A1Ux61TI1!oS-ce zoy98!PPS+o7+F0w4L20l;hodf4zMz=Q4ZDY8)ce~x;hE=uj5Yt(<3^0UNk(ewr;uOE8XX|Ck<}=X z_ty%8WjD0f#6i3QB=1GV?NkK#YLSLh3fBZ>A!~{=kl6`bLma6n{IPrg;6aRa>;+jo z8ss`3z`G00_DDUwJO^JPL;mGg`x@*d<9DBMXL+8o|MO50@)tOc~jsn()Fyu#V`n%GQ^L$&|4rM}T~Yw0Ub=T1WOs=Yr192D=rPQ7shKj+;6_C{@{;<+TGNuFA?<4s!9lp6?9Z!;e4q+q@OO+yjgua`h+|4KjC=zJFOefOX*&~g6;4oy~!O0A;Pg$ zF90L$m6jq8!D*_UxBcx9cMJoi^nl42ASkaL{zYv>XgOWI{!!JrS|uYsK^~qcU-NbA zaJv2{7(Fw-WuQWQyk&gDxSq1PYYE2bdZ7l?LIR0xO6QY_={l)9uL$A4HQ~~VGN7Jx9E|?hwh!@^4SO1i-0eQ?C7-z1%W6{6^*?j#q^1#NAeH}8db2INU6ldOk#}E*q+dj6& zBWAQN5_*vmZVCDhMS48=mQBsM%X&gD?85@#T-cx^axD!VszQP`+6)}RXZk?Fkt%69 z%ZhO{bA(Q=Cc>FUP0f-m9=ut6GPL}aHK|DykmFHaP4gTD<0AI6bdIE5AHJZ``iabY zTmosH4MJcwGKU;bwgQo(rPw(;xx)z#e#PdE{ypxIo z6ubU@Ueb*6b)ir8lS~v$SwIFD0(=#6<8vawHw69a5OgDW zGXTb`Of3nEA71`xc+(iG05`eRVcE2KNZ$*pP+qjFoDG>T^tS^9?^eep-7 zQ6~_ZBmSX+)&{7>HOCuFzv`tsR&WPFDDg5v{oV8MgJ^icBcn^5sD}8hU^goOyW1ko zJGgcy$BREJL=1*Xjn-knLD+L=7&2cGXtrg_N~}@_2La5`hGtJvU6DT?n&H2ftE~^Y zJyAjoLSeR7c=vuz3&7=n{J{|?VPkJGIZVG;->~^r@(e;QjCNNbbyG$ARHH!5<8AKTlmp_3#B8<-oyomG8HIpYz~?(B zPB)g3K=AWUuRQlqXvdlo5D zY1z>JVsJr~8ND0HmfL3E9p!y^J8}+mMLk}S?C7_QMTSDMfm&Qz8J35cI^weh(2+i_ zKvQ5@I5BZz2X9g?^>V|v4x4=d#ntKGv3YdhyoHq9$&OfrR8!3UpILhr2aS~Bc^`+u zxd#a3-QSDkn40ZeI?@|XS?Vyw^&$XSN{=<;;i(SmENkPVjoF^B;P3F8yVU&G0T%cp zZwQKnxWek`<0Fm(A6Sa}di|jbJiWc(l|Qohz9u|oxvCyl%}myOs*b#s?czO@W0m<_W-XNt`xVQ?X_;p9rE#=L&PK zw`C3JG!>aqWz5t>1=?xJ>oqN8LX%bGpgY&%jb$wR3u;s2{xTboO7N?b?$s+eUqg^vvp@jn& zH6)BgkjO;k3&xx2fd&?HH4?mDF%IsoWi3|ZhhF_8et`J}ED)0DRr#4o6}ecUf(P!P zJFuSo?H~>5id@ThE;F7yI%%2ZLSldegGQPPPy<2ZkQ*pJvmH)mM$W{dcH?*d$X0Y6 zb%rfGY9b^cFGIW8EQGiTRw^Y_o?BmFkJ5_$~ zh+NHas#94Yv*X%cv{iXZC!ozO1J0iQ^L97T;97j!LG#U>N8M*#ES^ckb6dwhuhC3+ zWo>SJ{>|pIdD7EPpoOP;PIZY5pi2K(;{iDZi4v94Daw-iZv=P5I0S*B%<-0na@O zuB$k0VWRdXxYtJEEb8E0p?En);Dj?5`$mC9Mr#jEBW0sB5X&X{j}y+RO5F8XiT4hn zO0`hf5sxmgy0GjE{bus$I1(HwY3zdBSFg<(uQSfIyY^x+1EMlRlGgGtXYiLLmBFmP z^n~5{txHOHg`qPrz5xW*d~nm99fynWbTY>S{?Z7k%cEi7SZ*HBn_ov%~c-|gH z?GVz8@n$LAhQ~z>%`!wqAT0BrI^ZA-B4-PAQ5 z^Imw-r|%}ORbiZV`T`Tw5~|65?1d25gK1>JxqK2nqEdB-pyzNb6tz(NBonf0EiAiAUQA2A_K1@X?tj3@t#4F*#3NxL8?G@m!+WugxkQF;8J5u$Dji$`_nC0aX}bz0 zI%^Cg(JEmzuP+;wyPqYxMvjBhvkGY}f`X5*L^PIS4{qrmJ$2yiS`K z=yaF@gy{?vxR1o+U1F35H_CxA7~a3H-jzJH2 zp}0Aso8<~Xj2)I%8_=^D4hBm;nr092Tuwf9K~}aMOna3K-2fO6<92!I%w}|KsOCq32FF6aLU9+DwbOMvPwDCUuqg8sDqda3~ zaGAX1gv{?qN`-u?gvGx}2xt<|Ydo5>bNobx2CG5L8X_c7WGWDtZ_}9S7O%J@N$ex` zmvHGWBbY;r8+&_n;IRh~r&*$*Z-icUnAv{66PC>wR@5t7!@PEs4FPQmTuv%w^tuI)m)e;}H2wDOe$ zx?`TmzkCZthIh;Y`OvPZE<-Vm;N9sO!7k^t+@foQe;Y1Ff34JzompSg(=(mMk_#)$z$`FH;Samc?WJSVz8^9F z8b-O0?M>FefKQzdb)EFR*p%S32I5sJ%ZRWBb+|f&mkgl{LOy==D$ow87Jp_Np|I^ZDSvyDdn5u$KzrUU zlRkUmKqb-nKCaR{@W{pYVWZ`%U=z&V>$wI=R^bK7{?En>SH<<-HNCl8&P5C|n>jmB zcb6uq)a7CRf<-X*0VwysRpc)4`S`ViV%Rm<{KO%bt};NPIB5DFV&mlOh-s^Ry$1WX zp(43|BadyqE|AL2*k#dB(Dr6G85*AemB1`S$6UrI9fh6Nv08@U;P34?i;my^=$7i0 zas63@>ph}?r<~+nHB|VOF;Yfe57i-KQ>Fw-@?&{Co`rEAp)y9v`07IfKl;|NhLI~V z=t4oM6aYb#^{(Tee@F3vyRbs5@T4RsGo2iQwv-0iL-k-bZLB9E=a`SRrvs1RwYF+{ zBPze0u`u307CGCfEqhltAesc;#%(`ORami-U>#~0ILJe6%kMHTL?$CA>$S>;`BZII zNAv+*L5iY&oJH`A3QaojfF6=PxfUC`(5Hjs&tqZ`s!rP*Fcwb;!s|Ers@a5J_|npp z3VNu7;OYS-zzOe4$vkT|hLIiMi!NjsetL!(j+z*F#{7gT5jSEz^-0Up{@Ly<&-O7V z?0JHV5{Zx1Ib=w>9)v;Z62&Wd}@jRZ83D+vyNv@fokjNvymD>t^#NA6;YGDwKIRXp~Mo* z>hrp$ZY^E843SG>b*rHX_o7T2A+Ev4$Rb>wV7%8`Q+LmMQbvsI)M(7L?dZPdX=ix= zON-DG4^pzHWf7e}owf@JPmlDmmw~nJuXsI%ilOM|Uj~w@FXJ>7X=?zro-YRs9&p#RjwO6eJW18QgPJajM{qkuYDZC3TEa=iPcHy%1 z{b?1TPS#p+Kkvc{{k3VHGX9;v--R{I!Eq<|pZSo$UHCdi<*i?wzRTvGx{EbCsH*Y`@C{nYEK{4NQJuD0y_ zGW!Qg(Ac4w76TCwgW?E;^w_)K@I)A9&@8)*~}E|^>ODR=EwEYyEp+8qHxndkd9 zfkiIuqaeqQnMr?6&A||zYlL5|!SEpXBz>qWU4`m*dDR=Rr>q(1`8sPUun`?@r%-jv zu@%MxdoBiYm)5wzVXZ{;n9eZBG&%UT3k5@UjZfcun5=0b}#8cA$>9JbE) zvi|AV%v0h`h@(s=cKS`-zkVjD8?EG_fj`)y!VpdTM}vJ#v5v!@Q|CD*4cNlY=bbc4 zIuvWp{d4~eGx(d-Nt{;l(|LXm>Tu`NB{70&VqLA7rG1khyW7l)kt4fd+MjE3mM zYjCMCl%d{WIkV=RsLA+)av9}$eockscz+sZ1QP-YpLlSVZT@Z8JlHth@&7wbmM`df zdWjT>t2LuiI_pUk6j=)16~DOop=ymuYXA|oFHCDyQ*~*8$m18$-w+z&gwO`R>p(hI z-Qt~Pb|LGJg~~oV&Tj&uV%m^kIdvdJeUdBB2`0MB7qv(e|K=3iu!r5DgFe{Zy`Tgs z*Oer!u$LcJqEQ(0aRNb5__>e@C`pMoIs`>W#~?ZeQ!vPcWY!WTkRW{B5Nw6K6X`7+ zIN#WKeXjR#_y2DJ$N@wlLq|J(lO?+(7MX~q?sYs{bR@P>E60i3P-)UJTOBdaL(Nv4 zUe6uOe)S%Gp-{2I8$6fN0lU$8A7Yz)ZKXQ5L*`O~E`1xW1A2mJH&UyFAZW7C4+OK6 zOm9W{;>a4x6nBG6%BYHc^@F_ierk&!SP76>oJZ_LHY~vcLU`TE2e%2e)7!zO?VkF`V+IVtJ5mU<49ACB4A`E&=uN;GZbTg6k;IPsg z^rKIVwrZJtDZv(vnIpC1yr+{6>9(GF#d~PfCf9|OhDITTV|=u^3`R;3{LB$C6{(1Q zjbV-%0!r#KJep4~&go=LjA5&u)JiZUFxV6_qn+Qt9Sr;pB#^T7#FM9xTyOVUwR!=h zq*@xwbBBqgK#U){MO!eGG0}-Sg6mOFk`C(gIkS-U$E-p3TrUbhMyx|LJL-zb6!uxS z)2itEj9*_#Gr%0v%m`mg=?XRcu@ZV$#WTVV2`$qy{drZGpD44g{WJ_7Q`X44>i@aQ zNp}l;5v8`(zeYr^i(NFX|K_M$MJ3L$5(T>$G?mrgkefgqo zY+};Utoh+gf6pJl$?T~Mk-D05#5D#Xwd5#)=HWsiB&S`YGtFoOb;RT=8Wu|Ya2HzK zqdO=p@}-|o#a=ztvNV3!77%CjXL7fa`oZ>WPlBOaYU*#XuO3-^$ew+I7Ja686PPtn zaFbZUQ)+s-9P;9({3f3Hd}SCF3qq6``%R~?L#@Ct99?1yKwzOW;u?i&%Eoyv7Ue$` z>&mocgAD?ta)Rb4Hy2|++RMwsw-kF8#RnIu}bi_^qY5u z(8|rYc&0LM8SgFFS0RmiB`2vO;0DDZsHSa%!d9YM`}&8dSfaC5qF04#nknvf$IFmS zKYu}?PC*<))ySKIV~l_4i>isXaQ_6}0koLK(q>{Sbh3x}0U;&6d;5Y3Kuv_k&!wpt z%Lcn`42U7S*v!yBiFDY!Y(0~of<#+pSIul z*akLJia=AMR8o;Jo+e$_In*N%8&t=4dBR)3xfR+ZP90nr%xQPd%mdk#tLLtp7;&i& z{`f+5=9o!o{R9phh zUk$hO5WE(sVLVB}af52G5O@#tcUC@a#!G;Emfw_7xpbg&>q=+q$@b=&)?~OO@%x8? zVfS{h#|@9VA62w_kYbNiX^TnkB?H8H2~ZR)cbVnu(DuU4Ka5DXJE(%j*hUfk%#~7v zFNv?0%S*|YI~Ak<(Cffl>-QQy4FvU7TR-6MD(N<$@N`R^fm1j0IhY3GFOswH9|2ir=6Q`f#bC8bNmECoLwKuS1z+yl&?BG6!}u9Dr0e=8-oj@1=d8 zF}}6mlqG@y1u0_@)Lm>ufIqi3M}7BmLaL1H+KawzOp>yZUEF4QW!8&?=LCg>X6SBmq@R)`DkwsdacYG=YB*vivwO#Har+fB$=;Dw= zcmMiI74diS^80s;AZ{O4d<9Fv4>v+Qt7ggf=n9FtqA{1;qB*z|23jMJVfug~gdp%K z%TG+93j9f|T8c4>gtb_wg_t?EB8JQF;SW9S5q56Fpb{;Rv`XHw*xt}0jp&DeJK>2l zWlL_TWs4NWPlF`&bQ-@N;78#e&BV0mq|rcL3H=Lkx|f-s4~ih;Fp>JMX%9$mPqAOK zg(P-|(Op&!v3{eO7oQe;k3mQ4rWEzHnXbyRHgV_y&8vF~N_Ihip22Rv8`Yt2EAxNzA0` z-Q}s9A{&i2T_et+cizq5DfvZpi=qcTU?$j091IQI0kUF69Pn=O4rugX@)<4(1@8FY znY{+@p4vkTy>1_8d1hjlxPZfbiHjiE?pxL!kH+_lXf<(qCM@9_*G6>x#|QK6sh^KS zBud(nNxz}o%4JC-f_G{25pRu8!f?})Yy_3JYX-vH3V4oGa#iYic4r-}p8|^FHc5eE{Xs7e46e|E=Sj_M|wOan%NWAh0moVXN24 zbCm}+G&d`$l5J&tX=w!=k5YFb#wf8!>GF!!6jYPlHh%FpZ}?6NlASxJC)4XhqY(dUv(gpoi=^_7M%y;OgMgM+j_(W zPS4}`2QP{EAv+^<<%TB4fcB_~8<2|9Y`AXz4s?eqm7u8x=W+jy5OLkqrk(WfMnpB9 z_}f=6iAZs7$xuD|m#2a+%jbpgcW}B%?hY{~i|dEVECmC)ef}<@H!vk*N__S-|FC;| z!~W5RVqKi2aw~(P4nc=<>30&#%q0l3z2xuZ^2qdhNwABS{}020)a z+hfQKFZk5D7A?Xw9@O}8gv8;n9+ki6jDJ>^wz3|N?I4k#A9WQBM2@>bDXHpcPeFABHzV7f*;B^;yQqm6ts-g>+aHgQ` z!goPbu<;!<2@RnUaa7A*z)su_S}oUu{3T)nOd@CV^HqqT{~Z`$(2?f6eB4b8?1hYr zWkpa4F$^JmR6wnpdAL{9O92}*OK-u;nmgyVuIC&h94Ez$ns{bh=&R~1PcM|;nHYF< zsZiU&jG+&6PX~E>n$7ld13z_gJW^R_?spbrlrsi@<*M2=F0ZXhjSA4~fulm3eD>Oe z8L@>bzQ3irD7W{;PuUOlR7GnE%Y@+-a&8IdcSDvj&CGn3zG0&}!W6iTepNngbRpi5 znlo1A+QB@LO8p>qb`UhN<^0!$ZZs^J=QV-D(v<)crqI^EG$+W`5B42Yv|+dG^8_MQ z@4d-R#E&t(1(({=1`dOV9;RxUqpsq=?*b57aEi9PW&@5hs4LGzjzDMexzLigc zB%$$OWQ>>C;ZXZ!=NnRs0gKiPF-97-rP~O{*3`k}*Ux3VoJw84!1Q`oJ6gGrx_*80 zF_4b#V;d^AVuI+>(WnH_c9EH#Q^!GFoUj?!W>a7il8vinQChw1VxLcsxUT@yN}05( z)#*xMkZmyK#B|dJ#?vzA9%aS!tSS8%kyM^-$Y_A-9mb*(Ibua?)W1zH%;q=5-AA&d z-_f?1gt-D{4LE2PL1bkSnnadXCkUbR*pMWS>Wi>5j|kWU!@(vT?}mNd%`F%xZSVsJdx@VgO2g#D|`aYaMx-U5TP z-;8O7a=uNZ&W#XKr2w*ps2v!7mmSftewIZ4Hqe_DkN&~i7B1rXEK1x$JHSf16CLWn zVqd|2c=|+aWF3}LQ0<|Yf{u-ydGAQ^`u6^&oCszuSyz6|wD01&ZiHmVBfnjY;{D0S znp;(UxOA$z4UdonGO>a3mzHK*ci(r07GS_~lq3aXx6HjLmdFc*_8em7c~md_Z*-TZ(l@c$n&5ptWQ0(0p}G$J-`zRlUc!jkMsOeLdJ_m?}|E$6LKs zI7ayh?6$^=-kE-UPlh;eu<}W7`3bRP_6i-WnMG->$yi1_yIzVGYUlN&J(Ez_3JZ8& zR=xIIYoB9YgPUa`!2NM2uj&i_{IAQ2sG&Rk^2O8HmIIp)A?0!%AayoX?R9u7cn(K5 z+oXN5)l6!6RY9;4uc5nS5jQPYLi721J1w`C^ea5!9p& z6tsbxAGjx2N0IfiTs!9EqnNR=6TYq5J&~sg?)1i+gLZFhN|LgPKYRh+k+<_lgfzsP z0lj6}y}JJTh~FvY?Hgh~d=|pG*)!MGEvIAGRU@c~%-kn|<6Jj1+VYIz((if|LF61_ zEG4G|TuqP%pz`6BfYMVF+j(U|6A3WfawPzZ(&_KyU+9H9;&14)l*~leI-D z+|&@|#vqYEEiJEu?qRAB0U=%-U-bUspG!(;T4>n#3 zD{P@Sz>#$Zsv4&B@yZ(T-1*4tmIystk@v<~wYVZd|Ji?;q%gJUfz%r+`eS&$r_BK` z#r|cUM5UTE*{DxG!fKH#Zjyc!dTTYV_K9I?ZV8`%x=3)8{YBb$;!!Y5g2$+2PAg75 z(cIrLjezIS17q!zMm#e!_VjVL@l$@ZeS}{}~lJT83yR?JQi*6x!{yp>I)@5u^*) z3}$c7+P7E~D<3bL6LSe3zD%baYF<)en zxT_#43TU*jBYkSPfkxJ+MEguFHFzJV2m|(Ju-w7nzt{OtIQ^L!medSQmExO9Nt30; zfBz%~#H%eRObOWz1FRBc)}cj&djVN~_+RwoWBmbbdqx#~#`J(FK($G}%KDbEESIn!RIQ&4>ja$CMh7 zt4N0Il$cf3F>%Q&p=;zoWKA<6PA-6Vj7qy?e1vhAu!3IC+K2+t;L=)Vrnr_ z;H@^_Kjk|bbb2D|BhKUx%(-gSd50~&$%HfFl)t=KGi)Z?VvG*te72V{Q=j}SDRs?Z zcwlEk5e=7(;xQWT9V_F|%pML_W7poxKF@J!oWKE=MsvRae~7a*^EU5vMhu3nkY9TIpD-gIpEonRZo;TD$fPmVXT{7@ib{<)=N;@NKc_UiZ|>up4;l-3h1{Kl3e{?fLImQ3VpELX%z* zu-b{R$|Av60(k?o46ziMusqBF7aZ}22`XGLOSQ^9qgd*>9bUVsP*eM^DF~6g9JQd6 zt;>En!={U@?r=+Y+7r3;n060v8>Wt)X{&;xZ^9V#cKpkhMH-;$;HYsuY2UOu#KPmz zq_X*szvvgv+TO1Q+bCA#4#orNGkNpLt?L~bWdW?OUWU#${had<;#>};fGpci30L;3 zsU>8yiUGm6x+)A@AK-(jg~R2i`kV# zYVs_BGY;gaWR{HdN^+k(M+$L{?q`gdgMCbUTgd(|38No{#5O;-iT=-3D1&ZxB{Jr+ z%G!09eioO%&rxd9Yx=+EP1nID40FQQ?2hPj4K6JEB$Pyu8gDRDIFT*!rq&c=Io4?V z(1gcMg5m}2bgxV{=Awtz_%sr-&zx}SJ)o&Yh#iM3nmQa=GgS%K zavQv%REJ14{~{ThRVG98&Qqb=d;y22$rUUs)<&9MDA1M)hM&B4vg@1_YIJ-ms*ISc z*+_&eHI*{ilnlCDPtn+o99BUf$-WuJ*;Ae4Io!hpOqnsz*{c_MHTq@Xa%6{2btJdg z0PU+fqkMtJR(Ke)fN4`K6lEkICotzBUEE61R}aLQuBg*xC(I4cD14rxKbwiV96?pX zZY()vg*6RR60$K#cQpHSH`auWkkwble&ncmXVWvR1m#P_^`K4mN)5$rt!HtT2mIqY zIHGI8Tu)9_4>gH&Jg+5<#%zA_CFFEDCc#AWZueKN5pNqCl|MGW02FxwHqm(7$QXN? zh5>s>$-Ue8{qDXIpRQ_h=c?GC`UV0m%&Yg9zz_^G%JGNF(g8HRdZ?LLGsfyfqHt5> zG={qORYb-qP~7Hb_jER@FMnQjwn&L5G`XK!RXRX+9BV_C^F4ePqpyUIgIxBp9H$UDkZR^t z<<|Ph1>Np1R?-KcdOB8)_{Imz*}gwk(AkTZ8D+W1-ylG)I<3P`IOe zTe`pq%=Y8nv*_Zw*>3sWS>c{}G0xV9)MH;cSh8Z_Dug)ugo6gmJ~SN{gP@>p=%C z8h1k|88Z2l149L&5&M#APAsA@pq4oT zg&d3I!*mO5K-l0rz_azO3N=eF5+5pVzuMCSru2+GxkCPs)?PlhT36G=O`E%d?w zNDsSm?I#Q`Wr0ES!N)o6fR`$mpejMV!F*g9ZW%(tP0EHRRVGiTVVX94;%?xj z)V@-n=X~?=M-wesroRbDsLPYBK0td>6D_LSXHvU+r<|8zs>QCi3=0i11YZaoP

    zrKm=g;unY93 zv4KfnUPQ8u1)5zdEcQt&EPHM!nGZ@XJemJHdD~P^zrO*|ixA6sz?C7YNFY#LUHmbz z1PNx0<>D9N?$@u%(cJ?41-UvBk54ah$+awa`!@WErjq-ug4l`SV%N@DXU;YB4rA-f z`X-?hw`IUck|DyyixyHc`g2c~pG8CH!oTyqXcg^p-K~5ei@aKb{|Wv>zyT4OQbmC;wzg z7fk^D`>+sU#VrnHX8|IbE<8=qhu6kMjQQujAhO3QxE2m460Li5?q(!o&`O2@5|O6M z1RWtu=qUiWcpo(ZO~*tGInBABwKZ&(hBBcys#;~%c|K12=5n$EzQO#oh>qxP@Oi*^fqFA!ywZm`;J#An z+pp&uu#rlORZ@Tf_M|LTQOAsMuy8`sb-$m7q-o){20Gb&t3VUh9ft0jVn)BFmyPDH zrt+657L81DG_?50pJ0O2)C;*^udT$0_i28^nKE%w6=;Woe#Y>?DXNyCXfeakZ!4ny z-H##?ihv4|VpLqIuLZaRuIG+Nj{~D}IF+f0wPcH>E1tuWuU!LzAHYYvUEPd%tw)tM{eb+iycRI4RecWOJ3mONw;FV(AsH-I@5v0 zy*U~|Dd4xs~$!26z&M#1odT%`b*>%Vy=Ml7^w8TbSSDA`g~t5M4O-{ z^VzNY61;$P;jgAgH+nF#8G?K*ryRg$K0IpLtLdgZy}x~mt;#~y|IQ9t)me>3Uuq{L zj24XdoSx9KOXnp0%)udPG^Lxbrv{KK%naN820J@Ow<9n>_)vhKM8p{DBI|C-!n;hn zl^K(_u7w+pL#2jH${1a#vr`Q*{uWS;Q);lAecwo#9~4Br_Kp|@($cwxYHY4mSP~_P z0KRL}0bw9%bWfJuxxf`Bmo_aL&zU`ocF9c_)CCV;lR8lVKVzZs-KylC6@s&gwQ#~o z8qFGlUJM?nP;3-vIC5v>O8t&wa(-4+pRnw%3HnMk`_CYcK?RP)t5B1$9ey#QC zC0eMohVmyUzzD!~>FS)ouTASd9x|5^%uD0VBbO=x1PP9SKfs0QDstlmh;42rO{;|I zj@H79;2Kw^leXhCCcg3Pe{@K5yo>VipJFyC_qE$I<)G z5GjVdrTV7NY-baIYnUa~m9~jI?fdU?=vJCJ=9X?sMM$!)#NQmU8*##Rg??~^J^Id2 z+s2X~hgd-3J_z+sc)R!03faWUD|C=F8aKVco#NH0H*B44BiQ*6HHP8w9&ZL&53>LI z!l4n)D)3hr55U-Y^l{KJZT!Z~O#;-7GJ5h8grQ-wO6$Zuo{sj7CA$q^j1#0j<%SHo4$(CfsJ@0qAZ)c9gqQgJf@m`hLrSZ9Zi4}qwu&h*r>D{<1uEcsCl zs-qVhxUcxYS_k1eK#w#I(ZFu9!Op#1X%jqihp5AuU*H)xxSQ@61mQIS1ABJ;1*lB` zOJTKK!f*_1y&EOP5m1H%^%p)z>~zd~Z#1djuQ^JZnQA|i{f6=k3P!}Gc-`I11e6bQ zxW>+P)h6t2vEt!*ct_^$ zQ|V6&KrF<6A}htHN>X@w^){XNYYjWn2n+zabJ%gD54*1LR6vw5Kun6O%+Nw2&p-tV zDfU$W0sQ?-CL4$6x*uYt!=&8VC) zEUd_V%|QednxjX`Qwd(n=nhf#P!;kB?N7GjpK{*Bu}RO2WlC+-4t$SiGoSB@w^5j! zSct&nIWU-VoNjL1KkJZ)UrOqMKWAS)=IGMx(s4WulRXT&{+UfleXQ?@WGt@Gd~k^r zR3$aG%FtO)A$C3eps1n;rHh?b4SVC@0On?rS;;9XpzvpiuS@D3wT&h|z8MtS^~kX; zB;t`+9`tF=jB6fC5HPN(Z&T^dL^8feN0!y>0b9OQ77?ZA1RC7+muJ#8A`d+^wold` zIPH(4T17gp>ImH*%@`Y~SN9YnYf3L4-k{=}uo-wRSMQuXf8E~kB;{4nhva`(nM&&x zTqhBQ3}3|_xsa%jc1?o&>G7$TsZ6BjyhmMTY4uE6_4>PR3l|yI3A!7S)cAJ&!=g6v zobh)z05eR)5JzE5r;i}3`Sqrs-pxbQa&rEUm3t^44>6hGxk%Z*sw&;I9}|IE0}9wi zRCM*%WoDzphhI-&&J$P8=-Lp0qIR_)50G{PTtT`4cW7qQAqv zl|E1GA1c-`q?6x_$;ajb%>e-~ds?5~QP{Ca@1+6HW~m=Lcl~H5TxtMiB2Cp z@iPhf)fzkeIy}5%|03u4cH7uB0PhDRf$89;`dzl3ix`RgUfR0!*aTnd?9;uW`87RE zzrJ|0xH$QS=}Q_Z{BNF#lRhaX(R0fwk`i?BL!pQ&2Us!9~qiYluz+ zFWyQm9l_Kztg5gMzj9%WfFmdN)-(CRy7G!HWkK6jYk0M@u2tcYaZGdn$=FHs-38B= zyxmi_4!J>n7*to`9FmEc@%y^Or{f6WUiw-*=v)?(i$lrF2^}r*(^`$&fo-cw+A|08 z%#Bv}LxDykoi3HFP_u+_n=}4#77{1GDX{%m=U1ppz{uwGyXQxJ>;2Y$@F5*a#^dKr z^H*=Mw03LxWy;y*oM*b2DGQ(Jq=MYH1$*x+CEPOyG)YRg=~$j6f#>Hif+DzhF% zrxw%Y&@3lz7-iV4+DuUUYpZx;4{AL$hZIrXK_3A5ptrq+xyAPB!bXc^$~oSdyh(3v^V~)jo3vA_O6c zi}0*4Sb|YunDprA%&SZjyn?%s4ZFkRK=_RuCw#Ly zDaGaIFXTQ|zM%AEuA{SM)O*RqRg_8+02 z@Be7!_@8@bTfTn%Z0~-}qc(l`!tjYb-tYSU+Qy=(Z+>&2*W0gbT$uN(TPCglruxI9 zHE*uzf5>v*rqc@=S{D!e_^#FWhq`|L(S*`3){i-I-;hB?$3I>8Z27RcWzjyfdiGzt z)%J2=OzU$mJ{+q2UCMs@H=lI--NwAeufJY5rQ?^A*GJwt``NvJnR+C>+1l*fSzG>> zB~JwNVtW>T_15AX{6Av;8rZhAhcCAK>DiZF8*_cr`8U>hH~w^N-S&AoM+>{=E*R;8x2uq__5 zB|Tn;Ki~=9WD7;rSdDF(mP|!Z@ATLmcAu@dHl0qSel&Ebs=Kh)#N#zlEfud%hBSL9 zUNFS+`Qy zU`2nTW)_yq%AhaSs~{D&_FBdkN&MlCj5UFG!pFjLSU>O@O3@Q)?l3j5O% ze;k~~MlTBM2=0*h0>oD?@%8Bc5#(DW`nwVO2PFMA=od-69P_&poZ_SL|1tC{BzMqVZh^z7xEM;8zfDg=GJC@cNmI zJuKEk4%W}1S&W^74aM6J+?`_V?`Tha2JBnlQ!fg8348=d9zN7xIrx2eHrB%c@WYb* zYshyFDS1)YpTH~eOs6ijp9!AC^F4z12XDr+;eS7T?FSz%^y9!kKz{uM9}oK#lK&^6 z+x0WX28;YI!hR7s<3(X{@b1tdOy2*?;L9cbAt>(5XRJ}QzZ?2n!S$lBe_{M>&`}k| z{{i?&NnZzky02;f9{gR9cnZAbdQ-mu_73Ts z^rs~KCs<1ZUSjMQ;(U1n>+#H!m=o+#n$Mfj_RwO+N)a>he_*@{UPL~qCq5VLj$=Y- zPKkes`~$T3c~RIB#5WGM9&pP4Ht@%#c+O%SJpfHH*LPuk(0)AHKLt+yUI4F<{4K-Y zeC!?MDD?S=U)zp36}%tff9*!J$GW8UBhY?1xLy?YF7jW7{%=JE#Zw1<0Nhw#dEkEo zH`dc1F@9^M_Rqq9!4Sq07zgs-hPwc zdlkHPoawI%><7WVw`kuP`n059hJ4D$oAy72emLxn@hXA-AxVE6@okp)0`MIYcY@Em z-}JWw{jZSt1n@WMzQBvZ-bQ~d5`P4IDc<*n-b#9jFGM`8Aye-LXJL~cMgJRc9_mG5 zkAt^Jyb%4*+K4&~D6Pk>I45q~hBFOgPCOU(=YDCn-vax5oEL__al~=n7`R`9Pd-jqu*KGz}N1K>B|nO-TxcVS-2@H`Op z#20{Tc#aDFM&Tcnx5;nA*TdE*N zqyI6edkowGB>OXM?3ZA?so_zRrLf{dvJBAV-7$3eU~>(3T+k zn}LOh!D#=c@Q-Tln=V4*@tKdj$o?pNAHkfpz>aujn|$8`Ux_)pB>bPpWIU6HJtO#P z=yw(1OoI<t5(cd5N{7wP>Nh!2Z!rxEs# zLhrrB%rAyq7lY3cdO!GMcpp$d)c$_(LZ^Nv62BAkU4ZkxROrLt<8hw1ivC;BpA+Zz zVe~`xe*^CvfV~)xzKHkkVK_sDejdiI2F`AjJKGzSEHX9$+QTgT2HtPx}e`;hh1@ z#XhI+F4h6q2SD!^oazU`AFv<#Zxu-2MM!^&a1h1; z^GCdx5d01x#W{))ang4Wim!t7L-g+!WWSU+>|ZB4*uO;xd-^Ux_D!Uxe5f9A({~7p zcMvf5_vi;manW}NE7n6fA=be`jIH%{+^GpM@7H1f=I+D#!&qDIz`KiZ1jd(eB;p~2 z{Zhg^u`UTmp&on2ItKNG@I!ZI;-!RR8Qa$ve*ehWM*``NO#aRhqM!4Gu&2AR73*aW zAvoQAtqC_A?gD_z8Vh()Q=>D{aMse|2B*zt#`T;S)ahVBK#S~h44wND?-@Q9f!svN{I1J z5I%+Yuor1OD+r-~fN-&XXCdB19OFxO6v}@-A;xPFA;xPdA>yVx3dOsD5c7J+*O9u#<3V5`7W0?!G&Adp$~xH<`>?`b@Lfi{7~0_omF`hdVvfujXh2z*Fj zrNCN&34sj)=LnoHaH+r*0#^xKD{zCrCV?#i_X<2H@UXyEfu{tX6L>)&UMW1EP6G1< z(tCjNvV#K?H;RN6%oLRu@XlU@0w>aCv=G zoxxB%mev~5!LXJ}C*!gv6-uh;L;!-&d`^>$`Z|K7I!J`!p&^`H39w&R1YrqjttRef4Z zF?+ckOM#`*VJ!*BtdvwpjjG9D>QT88lS38q@`}p(tRaz{!FNy(BZBo;qg~ymz2QJB z$w%8^)BR=J)M!(J+M~gS;51ckT7$5)bg&`brXK0U;>kKbQK?`$9&FT--)GaNIrSEf z*V7Vf+uxKR{t6L9zu5|76UE{|>?2wljJ7Di9Qb5)$XDVo3D(xB*h{r4HZFEVB(1L} zJB9dftZTFwR(@L3ZTU_Kt7(-#WHrtVDc>TJ*Nh@2Rf-)D#5##5gIFHXDm64USlymY zBpTIf)aZ9ui7kydCHG>%VHZl3I8GAD$TT`n($h6{YVc}xebskqF}-ANkHs+-ca5De z1ZPNSDr-LvsZ(Q?Xw76Nn`zrNzwc=MJ!V)N=qHs9*05@%7)w`6KEwb`kEwF45m(j` z9E!$cbi_4kQu}r-zr!YpKflH6vfImRuR0Rr8$@z%E)V@!&1@pcM&4Ue_4luC$xsf# zT>g>)Ee(C{GY6=o6&q)IGLn`DroHZs?IN|7mR$_%ILn3E@As%ecuQurGG^o|MfQ95 zDz(urd(PW>7kdXUPW*{g&esf!hGV{d+Nsa(kQSL_)ZQ?flVr~}HeZB&OHIJWQRWuR{ zOCH2P!n0H_wCLfKmEgX{{iGL3CzPpDyrR}ijLW|#I5qqlNetpd)d=j{Fy_*HtpwS?u)U;&WT3?Ki`QM&rAEvnnfbY~k4rC?9xmM_;)-B*aSo|p z8SGBZAqD3YB5f}TkPL9?=hDZemrD#pLR|W}^l|Cs z(!-_OZ!~dn4r#>8IetG9oKpzI>*IZK>F3hNrI$+&mu@ayKBG0BDBcXm6L^M#Azm+! zmrFmFJ}$jndbo6ZGafm2Ww?`bND(im-mJ@4VumM+N0T0&50?Qh{apIE^m6Ip(#@sI zV|d3C<&)uf0?$w|2XO5*tnMB)m-J471(F=zNSj}(xuB~^o1vLy9ggiEnJTqzSqfHKpN|W^9%(;=1!hD zmwqmNTza|maOrj$9$cJ58Xh@!nw*@0>06q1x)T&(mpJ%9aOvmL$EBA`50`E(T@J%J zp3u^n;dtVl1HLr=hhy%FXcC3M1LyDflCuQHqR$7SUqjV;oUwPgMsH~3F#yJ7Z_M;d|7T$@>Ly&0 zjy~Nw>S(BLJ3+N(F&O>(IT*Wyp&>i^`-D*pyZwmIh>dhJVONUvLi)Gyp?vf4`F}wl BhT;GK literal 0 HcmV?d00001 diff --git a/example/android/third_party/secp256k1/armv7/libsecp256k1.so b/example/android/third_party/secp256k1/armv7/libsecp256k1.so new file mode 100644 index 0000000000000000000000000000000000000000..b5d939abd19d5951399ff0039fa6a8aaf52e432d GIT binary patch literal 136228 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%0D9RAIr7x5 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 ZUy%Hzx8`dj4zV*|iEd}9L8 z0gw+U_(SD=?)|5vdp7$mp`Z00eLULzw^Bm%6vb}|Kz!1CL?IsPZ@h&5S?^hr@;$YG z%RlWNV;$Ci3TW8x?-CL0iT}6!r`;m(Nq;f^@ACI}e#_r>k6MrZHVmHhH~jxDeV)Pu z{FcA%8~!M{A|;Xi)yzySn# zA4d)V`26|?0Q!FMzyU-Bo^X$6Jp5r|kpXZ3&9o<6@p(OTKjWV=o^X?A{iA0bGxG^Q zc@hB2U-7^JP-UNhxo3URhb9sL1@Qa1`~94Je83<5*7HB<|K=xs<}nn1!g(M3J(iYd zyj}eXXM2tl{^7ZQ}{)vC_NdP`RpyPGkNA$<6VLc_;x?c03(Y6|d07KEpZ)3vKjC!Gd3f>6-~FtZ`^>-f8-HH^zw-n0 z%nuNJ;`zOqiaq1G(oeX}lK?0_=i%UaUXmW#k0tCG2RJ?{Nl?C`5JbXa|9w)aQ z0HXNo7c{g_7Vkq=006>=?O!(<93c1+fCz~Qf*62^=m)~9OB_H7c=O2h=?t2Y+68!9tCh&S-U$L>SJv zI*p_vlkLa5#Fq9&U14kR;P#yTg6wQ%jy%A(WI>U#q8uct7ax}-D%K~JInLz$tEFo; zS~ywalO@ws*f?!6?#E}F_ZkwtM<&2x&#sCyLrq}$4rc9)rRN}m>qu4A-d?DqHNzP# zUdt~e6WO__a`@(D+yiuU3|#bdj7+WcEKJ>i&rLlCpo^))L&FYeY-;ZSwA0aZFtWBY z2iOA*Y#5kX%;|LutgRlD9CU2#fO-}d)&>tIhC23-6#s*cfrYgd@c&Npf!g8U_za#p zEPpu$7})_IlpG9!c6I&HR@RTXF|f9@`4^7=Ze|a3&@r{J02=FA=omZ;yMI%%H?Y%l zFfh@vx6v~I>O5!bKhyH}?*Ba$pn;B!qrN%NRmVop&i>B{_)m{L(9ZN}#XRKiA(%hL z2sALX*L#>?V=FxeM?2sXiO$3H{Es@1$KzZqLPTKpf3|K9uifw$AMGPJh*XS)6xr?sWNsny@t%;R!+d=ehg zqo;52`0W3EY5cb-`gfcEd20XN?jin%0RDY({Tbfh67omrf8bWuRu9jWk)xG?gQ>NZ zj-8PK3p*?Oe^)RB8tFM&H~=h6^$lq3tpSo^`~r^+LyO1O!;in7&Byky^80-c?D?Gk z-41@fU;M_Sp6@eB|G){K&;5db;J@|j|AGJ3|9yY?&7Y+IbdLYN-~AJx`Ug+<^Ly>$ zKk(o0y}$3pzj>yf-)l_*e;u^|kcaX9`F>~f2ma^#MbtC?ct3oK@F{Oef8bAyPk7cJ z`12L!S4Y7gIMI{pukTNP;LlU=3$OnJ|KnN#X#WF;`h(}oANcRP@niS!ANb>)$@}}MXKB3l!Yr`NxXJF=ij(71CeK^` zrChiPL~8N0KLOUjqQ>K$<*~p$3BZ#X!n6DZK0pWnz`B@_iL9uB z5zzdAU*GcpZhjf^0Mw>~$$IL*{+g57U-K2hbu)kN$f0oJL5f-MuNdLq3 z9NKTve-Hd2hF6ba{yGcn|6+M^^jGt*qwX){*UbFk_BX{}3QrG4jRbh3=<4A0u*Ezy zfxEA=yl@RsyZUy@4)?B={a6Nvcw(;*90>nt$4lLaBn-!5Q&X9YdV|jkB<){YDAoGi zRriZ!WjuIvkrG|RF9OyyZ^UKtK{!#QRVe$q9G#?oN?haMr%9;PL0hQeOticzxTHjNd|RxRxR} z*bpxSkU)d84r18uB3LM44Y?`t8G}zjqB5?dMGlXe9iA(A4`mZu^}I|cWG<%(^j*k9 zbuTDbs#}rka$w;amFBwp_5_cX2-rDIn@&8Lug&qc z1usMUar$jd#2gYTJ0orP@FZoj8~7)o%D#fMGTNF1Bzw}Sd{mvcHkzuz2y(7l`&zy{ z5nRTrEgmSjmN>_HQteJhVnx!E+K!^KwC{wPUjwUlJnpJRSS1B1+3}ljRzK|Wjf(8l zzv@fH8qc4=-3B#}b=E12HCJq=fg~lFJa4z>Z-S`dfn{aC!o3F1^$B}}Z3L0JIe!xDhP$EypEi|;%s@-7Eo-iaZ9F>C^{2rWPENg5iG#2b7UxLVI*i1jL)dSt{ z0E5z^wPyShn4KRV%5+{bH5&laMcAyhV|*edwaGc#Sd8tpq5W?vPH7oC^qDK|h<+Nr zc2kKy-bIz5$5R{TF77x8FHO*mUNe0*OLo1Ke&oTI`13y3g{Ua z`-4l_9%@##qFF8%NtSbCyDht2fr$E=KLo;sVdOm@!UVWep{$ld)O@y#0V@?|0hv=( zirSlrmY975@b0DQGSpT!xA!}J)f9;zv5rdN%7^=+VSD9+`CFDxUqM$o3mS*?#UgSO z@lQKX@-T@10Kmu9BQ{L2LGr*S-NSDYx{V;J_{spK?00}Kx+ci`GTWhwT~9g&X=z#O zE6)dTxAg;X$fEk;pfE>rVg%Z=F?08RGJ1AhQy9)G;f3T^D;d*5YNdV#j804WBY+d@ z&IynR_i|v1YM?Te#d?|IfJ$DSamPW!tz+Zyc73ycuXYo?rI$fJw%aIPPnk@>EU~z% zHO`N`VFW$q8|<_iDggB4DgP?83O8V1gj#($rK;{TWKP#5b3-s0St|1LMmjpf!-0a5 z#Cp5yO7mNGGR9}66Z@ZbF!!H;$oz2(NP^q%=4GziSw8lZSWzF01m{i9iVl+Rm$j` zOzCb=HF(6y_AMQZHzCpPtUF&6D}M})_`^{~&_LRp)m<0QX0(vv6K zR3LU`;P$MRZQP{7;lQG1xi#L@@oB+|(%hF9B-;1Wei>_&t5mI(aLnEza8h8oYY1@w zWWxRgC8xYlx@jKqxH@a~s4Df|c0HE~*)+d82$Q6<6@en|q64VCP$$la0hoE&$tWi#Z6mu6 z4iHrR?|WX}gu2*%R7}foi|HI=>_U3ypc__o+4?Sk1Vd~6dmOi+Ya-Z3r^uL;F)IxE zN_cNj!<`pS7_;AxJ0q+GVhQeytIB-?S5SH~Xam+CA-=&d3#PQ%c&yDIcpH_zC z3}$OV3EEEMqth&2hf*HF?74Cc!S+M@*X$<=kST08rv=9QkJ3Yj9upaLEUUQ6yJ?wN z*|6~J`w*VyuPK>pHDOPTe}aYn+WEyG8-$yT{^Gq2PWPp=1;V$6_9~0KWcy@uMRzjJ zG-uUZGWO3gUd$R|>*SKF5jHBcewGBK7W2}bu6JsCV-=gBQ_T3s>tS@_b`g#@WlVCe zk>+|q73>UDl6JvzNK*>O4)Z8O1F)lRwndk@zF6-Xk~{6Tne%0^bV0nQU&lrCmc58}(b{J5>KI^Vy_ z7o`!0X0<-3fli!Id>pK^_C6wG>1A!x;p%o(U5au`)YM48@_OT2w#d7P*Vgq^3*jZl zv-46+3Z+KGMDOJCg!>Vu>VPpXU+QL~we7?7R%+7l(8XM6gT(Qyv#4JUN(ELMu-zqQ zMIj91EyOnijBl9&1f#0}jqz}wnnd(DctwRM^opyK< z`^2oBGt?!QUPi(Ku9CPAG4%|o2Ap_~L7ay6AtryWo#}+WQi&dR(fqRCb#?6qY>D1i zVx36Vd)F$5_dc%{OfUg!5F|mBPO(;yHfs{j!|LE-`-i~RmjZ9 z)atEtpCa2Dky9sOig`*6`qqUVI&ABbFXhKi0=rEDO@7WqTX%%*83l?C-tmrSo0&Ts zVrLLC;I9M{ex}UN41MPj&1)o5J2QB ze?arrIkiZ4qzh8^w#Bd)dJEMzi=3?8zjF>HBE6_`^+pipof9}rpkco?P*~}MetTAB zzX^>BYxC)F-`fTc{}0#mAEQT0bUX&!I=>;HkGgu4m;@=ic%LhSL~P`f2nB$lrk=}E z-HMMe6tH5vjzA~e6s;N%-_FX-_)yY zvuhv4z`1#rd{5)0L^*k7Ia526fEIe;2vu zyv!}+AdxGQC(|)gH9~Loi#j#rGDYk$BMWS4Kwob8XJ7n4IH!Qxh;rl77bl?}%V5;4 zQt}REkpi`Ng&kjMsp9Ia>|UmK#g*sif2KJ7iq}YZf~yloV|~XFL)y{FDmhZNo{tOW z@Z-RAkZK2-hrs7P3WEP|bsz>B3(b2Z<4)1K9o}2ovo^$S(LyhynfG`t9qRN0-B3B@ z63#02-MssnL4hzaJB@H>drK{^DPt~UU=3Ny4takauupMo*8RSEjc*eIkExKIAf0?T z(5hI0;UF|2{}w^QT~ zsbP5mvo4Zzb}oXF&ZUS&sgp(_0g82X#|x3okdnYjiwotMq9MCC$8LO~28N2*)vpb&1+|SHdk{2GYY6)!`nF|>Gx-~9xhkW+#_Y8| zD@>4YD3{m;z4|hkNt7V-_ zhG#T=^bKZJ|$>U)p{0k8DBRm6hqTi=L+ezI2u#i#x7nmHZ&EEXd{|vUC~7yQ(w7@xsOY z`UA+JL=%YM<}3MVjPnBimT(t2y2y)BvexjPfXh4l(k!wZo}p=G{woyzFW)taDMt9oex)$YWYrsrATbkLi6%VCQ&6=P_X4-cMn*rmQ1R0! zmEW0_*ROszsorRIsg3i#5P^7a&RB&6F0!@tbfItV+=M1AipASvz=B8uOmH(%d;xy(^$E#thEAfQ>XK{l{sZTCKgx2NvK(W8ysvWH_cuF)3*V#)0|o-ukSZ;!wjH8YlJco zhiTck+OI17Xo=6aUujx!Cb_sJGw@~DYe+Y{jR1zl8%DpS-?_1GF%iD^+^>nX#VkG1 z30cy6BUfj3VQOlsj`$ImFUP%r)R*S#i=MsS@11*y6Iy}t*p|z9e$vPV{*9GR?^x;E zxirS+*7!GN>K2f>EvoAYC<039DYhN;GfL|w&DaYZ>H=qA#`{uZ%>2~q_y$~i@l#J> z=OL@L1j%A={0~erC>8k`f>8m?dOIee24V*}j#6TTR2b zK$r~@2<-}BO;LU&%(B+G6=n0Qkj0{y2(Lp52JxWvO`5clPD}Cx% zA$OMW;;|Clo*>e>u&&o^ZjN&`2EHHFZN5!R;N;hchn^%@ zI!TfA%U3*g*HyIj7$Sz0AM=-+W7$Q|3A@&tk>^aMk6)f;e3;r_;>YulWS?iIh%vm+ z99>7k)ewNGGdhBK8>7qFOO{a7@9RamjHL1%qd7qC$Al@lB0>C77;%4R3rJSn{(!N$ zE``o4l4Fm0{4fJyysbUd1dS35ScCFOG5AQ&SI&rqorO*VRq6@c>Qry>@(mdqjud=e0x_N zCk92p#NGGW@dAMj?oPKd@H1e@s~i;A*t1f-1{YkMpnjY`_Ep@S-&^{FeGubUI|aV5 z5dGIgti74LulZi=9^Z&~R{F)jdG7smJ?2%u@XydOYAP)ZHq#$X*v6sT+n3TWwxeCS zg=b0KO|Zw*7tAqT2>c4>S*a6lG~PqT+#NJ7B`hMjZ7(;kI(a%;@e)paffqznx?H@^xG}SHih49m8styZt;YAziJlLIpA5P?rr=3J~sZRljS zZ)T%4N&xEjsg*bWFY}>+i?bl9H!<%B;RS@VMBAAhe2ik3V3sT(OuTvmJ!rOhqZ8)? zS-XTm7h88PheuJU*adS&+nB_8YcQsB zt@xc*4h&(Ovv&@3(a`rj{7Of z6eT8VHn%XHn#CQiGJX!#b243)ZCUdyN3&62Pr#)au$*J{Ik4TN*`akMMMwDZR_yG= z&nPEubQtP0W_(WVF7N1f%M_YX1kIms*>uU*>|DA6w%!L>+65mO^m?k9WLh6` zP}pPE8Y$9Cwc`Z#M)L+DqLios&Et= z#euL;X)$#2R}aKlK7YmCc8iH%DmW)s$I}hG9P{CdLKknyrm+ivotAp*m_g9L|23wn zJ5v6|hR5F6-qyKM0N1VAJ18Vh#B$~fVl|pJV{tMoQn*@llf<^Kl`IoCT?B81e!k6s z>*)1di!h>~tHtWz51Kk)V$!u9sE5x|Ff_<|qYg6BO`7in4PA+1#)HgvhTzT?x+=kZ zm;Sx7g_oPI72{|gJ&0ZsY5u5yX-lFW;jmM(@f7fu8)|$rd|0ynTG-{rXw+^mt+eSC zg<6_6<;?j=0G6i%fYhMimUa@BPv2i&faH4%LrH-x(Px@!U!msIextW*X~M~`nwR5U zy!kFN!p~coP1ykiR=iN^*dP7))QG<4>0pFHSo`fGYGYT&zO4JayK5X3dJ4ILuezjZ zX!}l)=I{&u3(n(CBa`SLu)Jc8c(6;Rdm32iIX^)G*Vi-9eIbwG9D|JmGWRYp#0@!*0s z$tq=s;&s^^KTmTm;?Iqpj`C=GyxAp_DOK}jyLyzArp6BPi^7he;~W0=ncR?`0KNbf zcbfZo8U~x`6isRu$Zf#U7(Y-6Wu;u1Fsutl{^ zlx0D63Zc-8*YL9iD8@1vy6E^V>$k&=lk=QwxIIZPaNsY@J7r!V-G#(ds|UY<=7SAn zNW>2JhJ5u_Z@56aN?RsbxZ2ctQW%G#g%ZE={T^XN{Z!p>FeN#$^ak05G`>OZ9ho6+ z7+Z97g#W6egW?cGa@gQxD#8yYMu{K7ip7ExdgZ*WFLm=$;?~y1pfJT3uefsiPf9;0 zwUp1>)Vq+027RXuZAZ5@a#;2hlrK!F<4I7!Z+9nvrvxB*ZH?FYCC*|lGmHESp@$aMt>X&W@_uCw~SSk*M*aXRDhc1h}%|9qLaFe+^d{{eR2BKYlMhA*JJV?o&D z#^rXL`J8f<&Zyuu0s|99L)oTGc(;G^&jlCO$o-KHDB12rSU}z~*(gQfQpvg-d2h_+ z-Arnc2Oqva`DY8X*Rl;X_t=GCnZue)6F6MN2B-{%SdCM?_=+-qPC|xkkQqF-7g@-0Z51Zc2uvLt zl&hT5(oByqz5f)q1}fxdKYxJ&B~!jy56!QANBcp4Yhii655MU3xWc4BuwH?-A<}iA zRE}_-mozC}5;RnR(!BbKi)pU%3hvb0hkayssw)I%lazaI8$h9{-H8LRQnT|Vkjtnh zuhr_U!$RA*YLkd=R3fb^J1Jn(6ZynJEg5~~qMc4u506DtZ&_$z`OE1IX{mLs` z4HLY;VpZ>!-8o})u@O@I$)64|5*nZ1Z5;v)5awU1Q95v*Gnd?}x7-8*uB2Tf#;`iJ zAw#Xo@fvnUt6CY}Cp(nOFVz~eY$2o$R8%0b$0T!LezGu^@|l7Pz^jG_2#_w5oEg>UGVFc>_D&J z6r-Pue^8RyhtK_NEWUY1t>MI^MVa+>U>}V;eSyc(aZA5c-9yOM71%sIeAwo>=|}c{ z4uSKvz6nI}Cr4Wp$ni@ zy-=VMR3riyjr6XQ{*F?*68jeI$8XQvKB)z2A^q3+tXjU zShQ81sUu^l1uzBFErh9xa*+6itSO&&*%Toq37w&0$8>d&qliaxCy3Yy7q6p%k5i%Z zSTs6Hh6c{$wa$o4zp%CLapZJPp#_IaLp|FN^-ws-8^;mng|DO0030l;5A1GFK(4Ad zeP3*qOx2ZXKeySEy^2G$+V^Z9ZAcxR0keJG8D{L$OK6GVuURvuNjUFeu~W3)K@YMg zo3fbv`RZd!i1mjMrz7ovlV5~7uenyl`xN;^&NR{L5enV9T#xWPzPR!X<+8isoP^Ly(Sk9?&X!N zX#Ro5((|qnih6ecu)m1#mK6Ca^$zjURY9}praM>(?iLMYm+l*fE;+4eRu;oGdUL=r zQiqE@gzQqnRYMQVT8Q^lg?lbiR2;HY5pcYm@{@B3uO8gdL9%;s6M1X!EOv|Z4~*Do zV4h`CRAJ}!^{uDX9&sSdrgO@EH1Y)b(hX|N=4ttq?!HCLAIeDp>W7U~`^~)`o{pdx2)Rfbd0|}zDmHCT^Gz)^#mc2v8 zloaDjQ@>=_MGk9u0VljWoOVxxDdBe~7I>hIZb&vA3>p&VixBHxIfH`e39%D#rDz`o zUK>r^D~_Oy$@&=!dRcGMCRSNlhxBx=Wm$8F#Z2*EumW7>?HlvPGc?{+*P_&%AMpkr zf*E5HUwxlElAU)vB62@G252J`6cP|YoAV2M7^Th`X=Y|oz53W7(F|o?H!TGLhF;~y zJN+uNW$;BalC@pDVZ)Ao0ecMiORZ1md4Oe#9WIQ8D}6%2dWz^id}Rgt%g9@__Ci?% z#x_ypovFANr`vl1Q3C|m$NpOCL*Wka3Tda;WpUBa1hGB11DRWw;dizkTx(;wce!7j zr(|jTm;3TQ;J`{(a)DV8v_p;0j!xF`a0SCqL9^b%Uu+E1gzgZ@DY0hP!iSBaC@G_7 z-+0<%DcLNUMd(d5pOU+Bc$>|#8{v&6-0or8H4>%2qOEJdq#*l12w%{qP@&$|NQ9|r zEBtau%5V}bX@Z-dhPBLcsJt8Pt1;7y^C(b7q#TZe zh?s0fn&<+$X*u=^{Wzclf$A$`JEA=#N#+zV#tO}nK5BI1LcO5IyZEstd`*y5?9V2f zJ3UI(^!~z{Dchr}xYssrrB2?ley2Z*eb`|8CMwfic0E~dtlmR-zkC;@ZxI~ila-5qaRCJN+#I$BNC)9k`3^rcGR|C3xte+TuZNWvS#Nm zG@IogdrhX?gAM^NRIyaDNnYvE6(FeNz@QlF`pM~++eeuN{uVt3`qN3Lup6l zs?nnVptjO13+FtymDmqYnjCrgNWaLbX5l3sTd2T|rw%N9Y9{C0)&8wI_atQTO?QZw zP7f_Ii?1sB04m36fFb))omlP~7I$Oh4JrfDc?f5>xs!ANF$EDJC(F^lzl8Y zJsQu#L6Ye<(+)US0}MBbu<^@E)x2g0)dHBo49v1~6QpmF-b_Ej-|4nk3LIy8kZuul zV$Ph1j5D+0iu3Vyw&Fm?MKjWUu*FZEA_ToR<6gy>Ed6*!kgc@=yV}y(A3@IhJ_s z2f+?>VSWa|7~h=ZR&}A^IglEBjWt*aP{gc_M&nn%Bmn8t($k?M=%SV=M5&nH`2Ij{ zmdGN}L@6hkDm;2qa3!|amY~qftwNpR9qS!$qq!FV+2`}q+`#_|CoIPjR0Mu>fT*=Y zM=8O~rEKNPR{wo^WyG+CTs>vyu_uK=qEaiadmeN!)L@Kvn>wK7TBNC9xR>F+lAm~l ziJTo$9)Dv$UjE4K{_T<-v(7P4lh(57_8to}m_)T&EaD0d{v1uu)>QyVIP|(Vq$GIh z;B~6-91S1(tTXX;_}sZ(xzSrO6t@ff2?zbf^=nInS=8zQf5?d0Fb-FZ7_w9edB{j$ z48K)VaMF7{(#Fp^;bW7<8No&^bE#7br#c*~>~N}|6Tw*W2i_2L06*Hy)sOZb626ox z5yDkquxw%vD5KXd4EZ_I`UR($7fysly`FEN_M+2Y+td;JTOpLseWeAdEjrb(xhjpEkDSPHDB7=NGoxSgaDp{lZFEE+Fl=$~nz|Uv>Karm(01Q$LJ(p>q3c_| zR-&%8dL{ENL_v&r)x20zxw`kvWFKR&3*Z^wO@ra(C166{!%iZiII3H0QmrR<{k_!o z3*BuTbN?srh?V&d8nEpQMWEx+M^LNanD0ILFgv&xn7+}17gd(!RFA^-aT)-(gzw!G zebyJ1Hz63Bgv!0HsaA!vP;d-|ly*tYF2Cjk_+h;)mDNq(1rxiEha1r9z%YtQRyOC8 zT5(_$*(jLhbR#Mq>`j|Ql?reX-}d`b9_TD!7z_XM;`1kTNg;VUORMh(29?`$T;*K% zFyR{o$sgrJxH$B}4YJNQsYc>akLVPek(hsEOMK3=14&j^W1v>1MR%zft29NWO_w+c zjQC;I{BS1RDHLpC@Lal2FQ)RZi`_>mJ0SGf10;zYvq~Bx+v!WfRMNr7lQN8jDQ>hf z?#qS?mk>{!2^lV3aeKuwa_pAIcH+WB97kF9xswuc@v0}A#qBb@e(Xb9m80`tS_Hi3 zHL)&sCDEngdUW*U5w2V8ER10jbRg7nr`bSnh?N%6#>U+{tT|CQg7rJsc&`bDr z?nvLv*j!}a2h9}2E8h0&&b2aEY z@&I%efBm5Qb<`@D$yfiIBO_MP;S585)h~+Vz}}>5)OalN8^~Z^P-P0%rJxzibnd-- zxb9c^Ydu72@;;lLwX;yA)I$)>$#Df00Ah0(*m*(&@*@z9u-)sJEaYS?|Ljp&^CT0- zseK++Mrg*BPM_LfL>TGVoyn~cORHjNL;dhlo)zB@s+jS+cgqvQ={*EWF;Jl9rm0{ar-j$i6ISP zan8SITOE`?sbk6)#SEVds~>td*uU(ki7&|g7STKN( zlJ^?f8C1XnU&8dl0-Q6SWr~s?2Zr5WsZp+yE4sxet+qU?D-%H1&0M#Yxj`4|aS4$Z zGW^m)f<#s0Wem;+&E)ucAXz*H5Hb`9X--Mx3O{A@N(Q{q?k=8p%|5arKA2n zC_!3>lHy{tKZ$N7Zkt-)3TPUvvwxuh*eBZ6L#niNs^_z;25lA~+Co4Ne7mE=dHR|RjrD``07Y~xrqgH_Lxw}x8?v? z%?-(uB>7FDn_Yt{D_h z{JGNucPb!84_7-6+N8?^gl2k0p)+H=XrwVDm>_p2kDs}E+(<#Fwtx=#o~G53 zvMTuK8-`lnL_V_Od+c&M@}}{32Qb+C@200Miq$(B+%dd}Hv|VL;vs|G`XTU;9d|bi z2eqSjn%)p#UB}2H(V&5nr%KHByymZAh328UGaJeK`IYS4CmT_+;w%AtXT4fSk73aS^AmbZttoYIDH4E-~loWuQ45rgv|>o{p#js?rJA;Sh({n z?)M8L_@oMLb$BWA`xm!7r_m6CfN+Q(4K-K^Dw`6K2`+8t zJ=DZM7t>x&pu!)FObP15X3}vOo6J=onLJr&93#9UDARG1OXdq@Z4G&3I~3 zV>Vdkd6a%H+hjgRgyBchzJ`po`?meb!#Ph7{^E}wNAS_nwD%2@9u`~0ZQIJ9a`Lcs z9WQ~B?(rGx(M-Yc710Ts$?r}aWP+jtBv-oJ@0d>&&~L&P3%`-_#?#X!)4JBx461z~ zZ$&FJDLUgdKvt`8;!qcG_cUkKLN(S<8(c26DF5Jo97Jkw{c;c^@Oqsjgy(DB+O@XV z&q;AR3)@n~Ft~zh}3n!&wFNDwRw^sw?)pS+owdu=zmvqGRfr%e)N9YWT?Y(|l7xZv`Qj z>53MpcCvMOIKI6s5wN$`Mk}2Lm2zJG!AIq$Vr6;Ib>(M8Rs{kwTpQR za2I~s^t{{|35r9wlVbAZ5jWfo78m~tljrnhkQ|vH2;Z+a;!xz!mV`X~5LFwt zj_f0z)7&t$7eZ{;a51-A3OR8<+eDoU24h>j)3_PhM;DV={#bie>~S@;rfr@o03FM^ zYd1oSQY7C`Jvvb{-5PviqB=fket~iYyM>5KW>S=UF}K>H>$vMWJv8Ci4R%B(-B4sT zc#kXk>dUQLY^N@$WSgpa>4|g+6tw6K#rBz75JBea7ma#wm6u-Boqh^=IlKIuk`vsu zIuc117UZL$_T`%{9PY^{BuJ*ZKgq7jyb1{~iHkk!4z}+g{*L| z>t7}-sb?kOoKQ@NEp8(VLmSs*A*rx@L)6AgrPY2%)bg1<>BGtAOkNJ)kp_3+UC*Wx zP?jZ-b)Ds{VoZe_O8}89!C^ajCFcuO|I=F^bSmsQ?Uk?W+1dsQ+o-;PSQ}olzOhly@bl>N4@R=JZwBLxAd}3F@J+)eT?b=mC(| z`FIk8i(v(0gHSlAm%o0bDHXN|k(um$HKV!jHeJ-*1)ZrBXK~33+-Zqtgt? zzO^UW77T753bUEhX=(yBygKDmTS||FPJAEM{x)p{Uc}O-Vuod5?^fhi35Fsm>NQ#Q z9Gv{X=cw%M6*wq=>HQbw{nRl52m7OZ{Oh6frgae7re7NA2y!dq28h|Pl|jIBvN&T& zseD0gW+OhQSfWXO-MxangRxdLFp+lrBnjFbN3XY2Eg<~`ku0fsRNhEPL7vdXogW}* zMHf+gW|7DB(wqaEF!>Nx;gGs@;1ksgi--_)LL6hUcjF$ygM zn1R3`2%UtXgtD?FM}E~v{X%z4R8rG z({~j@wI57Qx-zrN`im|y&8cV}4l+?p!!s;Wes@9r$}&wBVykos{iMW=p2XY5m8A(< z)xsdt`4|e+o_WHBqquq;A!(^kWP{&CnnedPGuIu^;uv`vsD?N^1O%7f@$M8zP=WMP zE(LO<2GiDcnz?JP8d!M{X)x5l~ex@)S{o9g32$brVN0{)^WCJ#bug$Z^k z^!|$$g@(8trGH<>XfP8pg}ZN?yyUzUQZ^R7Nh*ixMWO9Uf=!sHfdfoY^0b z_4*}NxqN>c!y~S__VoC zep9bm;2Rjl3vZkfo=skl>dD);cbRv0%GBD|ohIsf!PaE!h8hqAH^0cwq|jousf~-T zsb#qO{w?7Lwe7hXJ3#IT`(&)&2fElHaxL76?H5H;pVW(Ui{-?ZG5TtMw1<1jBk0Lo zQ!^#H2`&3ChrxU>=ZEB^KF8jg`Wl(R7_)0s{O-bP;(M@^@Hze=V}8%2Ejp5p`mLPO z#?_s2>Kb?r-F%$!H_4BMl{XxSFx*o_`mjBUsu3-7Q;>bG(DvdjMxzo2(7;$Vwb+G` ziWQetMlW}2+Ht3m=#xAztPs4GY-&Y5Bo){mro6_n~HjY zRtsY+JMYZ5)-M=caSdITrDaa5MBpcZ@~E;@eCp(&WhW=ld8u$D=)(YeEmI@^~az=WD^w4QlJuBsWZQHt~zMwvdC-_I>Y z@7t{VmcZ0UInq+>SV`VAn$iaaU4TGaY;K=M5cWVYQGPQ;22IwCf~p$nTS)Ii_LJz^ z?j5E(ha#|nAM?t4+nC8_$Iui~e?ZbZB}@x5{Fw#U5e^|i{=1norUCdyZHzOqH2%^w z2BGgIUvmyLs<{SJk&*m@8h%t)^S$YuLvc+fdRJyE+wGUBS9jnmn<28c8%QS5iu7B# z8DU5Iz*zp^Km~x{%Zsk82u9j(RTYynEZ^PO;yBmG)}7fa$Tw*fc@_ee#wN1WI75+ADs#guG@Gg!}E?#7ZQ_HNF?(DxV_INkPwr9tP+1HGba(! zqB0asTmCM$PL*=97r50VV-ifksPL6@0yeF!Z8rN}#?WT3AoRcv>3C}Z>&v!PsUeC;T@IncX8S)W3R z3%^5sW4quhXcVd>J6U%gcEONYx+v@&Sa4vrB*h?+U^=&%=VKGlBGUqzF3-$eNw%oY zQ`e2O(=oZa>cH(5znV#In!(FF7c1a(PVU!mTpX{#hiMPU<Gc*YhBHdQA)mmt_0UN z#ruaB90^shYwf1V1_?P%!l|Lixvux=ee)Y4FdFk1pu2{YhpCj!NcA97sk_OS#zDR< zSiN#I(FWRw9PK~cdqD%QUU}!TCVGsx(%1_STd}EF|)0^pe_$tW%kn#2?Y7 z5Lz+xg7HNg&14YG4b?J98=He(FK5wqPjwALW)RxtFi4<5mTKQkR3?)r4+aZKPHmu} zUfVCmS&AT{(+6d1+P!K0QD*loP9r*0YInXy54)^#Dd4zMD10pEWZUJ;MR(Clj|uvq zrb>i#rgESE&Dm1I3)YPnuN8VSW=+{@$M@T$-zc%?mG$uXoDDdvn=XEskq^p|ih{D= z{*DF9?S1uXi?(3z;3o61L+ry~7CLgjk-0fQNZdAD{^QrBHaM%CK836@kfNrR!HPOV zK{kQ4&{k>ly`UNS1#>|U(@&}$nLFRHzx&>Z{PeBEXhNq2%`9eCvB)+KLuCc}=|haz zD|*mUyrN;c=p4U54E?|`*ZCc%wMXg?}GDS766lD+vGg!WCIYSUB zXb!9-$?nY`&V>4^+(^S92Wjf}hM>MzYa^YN>}?VO(^F*)4#n z(di7iwy`x@hI4u>pX}`4-lkX$i_Gbab>=n)0l3@VVR@>~_2cfcvBTde)cwOvd*FfL zm&=%d9;x|ms7Gd{TIN|Q;+V&hqnUqJw1TU(Z%GDWY8nXij5#6>A(P4@+YlS0f%rwz zqL&c!*f@<{@mbTu`|HT5g?F7cbWKm(cUzUwot*=15^2UBs`^?fX5MfnXxrM*PkCLm zirkbjikyLk4+LcKi*tnaOG(CYCQ_n=VoTC{<2T(?O1(%jBahTRiWaG5zmhVe3cZOu%^F*R5n^V7~1baP9Qp0Bt zE4hg65wDc4nIy}$FE5ObX5^qn#dgWAc5&Bpl_UB1RbKY$rF}6`S30EYqRs`}o?QM- zHPtv_W#(thu=L1r@P2G;yVNwJLO`TM@VCS_7l+G_z2QS$INCE(W%qmoLWw}eyXmm{ zi!DD3Iq!#w_nBcCH3I23^D*J|p%ytos~mQby>0T2vJddX(C)zx~MU7YgzT=a}#43&Zr2iVT2?j#C0pM`HL< z#E8h(gB{1b><|3UlhBMhM|z@6K%P8J4RbkB}Y9jG)X!?wy(C?1Be^Jx0@ojE*K1 zM{&&uy6H0*ls5+a5`D9mc5(UCw!S;c|g+6R5dN8*6e-LDjH z;=WMii^vIi?;ilma*fEwFxu&*kb08K@lH(>GFpbqkv(}iIFuTx2{-H2Q;rQ_05zGO zrkfydEo}^m(gTM{LH~h%rPz0)pSQyGRvcvXtllHA(!&K{Qt%`!Ho?ruYjdluD`{(q z0hfI7`+D~1KST>v=0PD2W#)|DsvZS;0_UkYf30L2%_<^XBf>u}Lr#z?ILb$DdO@E- zM1#6(9I~v=$uOr0M)?Pr22v=f!7&$M%DEbXNMYsQOvDH7%h_j^G8}I>1Deo=VJ`@r zNzu4~VR7$YfaP)Y<+%Bo*zN$?g3;_%4&kd4FC_Z9egaKKB}1fl34_DNhP?3RU+#70 z;1+@XaTWkt8iz;bQa+0iU(Fl~woV69S5^50OFplkJ+6$4FSa-5tE^!h=++x1FCqW% zWVO^jb7$tRY|?!hJ6Qonw+C@a2YLEA`z)aahN!vHXv;Y&FI;+r5HM1EKAk)!noJlv zF)L?)KO!e`vEmT43^C;YKpy}ai8T}XlHN;uG=fqQI3wsq`4dFy88-*=fM{2TigYnc zJlMst1WCel2L89q5t*qOp}Tt`Tuy)7BX2i_*{aOSW*N4Q=S<*6LEYqD3F3s*MTmJ6;cw(MH&f1E$1-#GoRETWe6|GPc9u?Ut;Yr?NGD=nUgi zG_gK02+*IlX5^!s-TmaXV}KdIP>|+8quIqwGA`MA+T9<7li>yx6;T1~_Aft|hEPBy zr;Fzuc+Vwg5U^nDmW&Cv3uZ?AW9HwE`ygF-xJ_-u`z{E%A?)yn&rD*Idgs>TD<;Zn zihO#v?Y*W6`Q268XAf99BM7xnmli&*{8k&B$jBeJdCk6Vg4wAPK>8=I z$kdL)5H7gb37Sx^pK`Sy0?Wud1hEfjiB{E|r+ClBHN6BVNqR`Mx}dM~1BI&@@Ut$& zr*>MtiVh1e%@HpK0V5PjSzqs_e;NM^guWF@a+hK)q~qTy(BDkcqc$t+zYR!E^9|7# zIGpHZe8Ha8cpWY9^W|*XquwzL*;e5tv0p+PhsqPO@i(5-Kj3)^Z>#_uy+osv1#iRQ#_C5WXh3jS+}h_l7R=+atUhRWjbfV3{8PXu0VKUT?phK0(H zl6Wb0Sd)?CTg5sH{k0m|#r-ya``Y@<>OM!Y@@9ayS6G=Axt}|Q_?9!LZ>%OC5ZZlI zu8{+&ET*af8G}(?;vHj928s;dQcrN2>c&4pLGY18n{v)P>fC;HTo#GM?+2%nEc$eB z2c_K!__+6DZ9&OfVr$TlS{%TXgkfxaW#{sJ+>3+8h3$lwfnJwk=2tujXhxv#7rdQi z*XMOUqj2U!7@M7*Io}Jt)h1@skTo-n1L5v`{6Nt~bRSCRb6($@EwnFHXdWvDXf1}s zG&VUQ5D>{wNQhbrn7$Dcgc^0fp@1Dcg{xc(^JJ`wA`@-67cSRd<6J^D!mY2m7NjQm z2My~pz}w6@9vyOcQ^ZFhNq9rw)@qd1LTGKT@qo7aRWLq`?-_(T<@xeLnt{(iB4D4C!F{!I@*uMt}kC zi0*12UDi|ka~ZqUi^SsO{;sX1a{^BX)HeUGm;aQlUll|R`z~!mZ+HUny&oH~Z0*E8 zlFf7!&Wa%R0Tq%v5fZVr%{5kwII=#V$YLILdwdJL%Bdq};SVb@t_AbE9zWJ6;F=@Q zZdG^)3Tive+d78k(-j@Uhz7h&)_rhsM9g$+?gDbq{XuPEBzU9Mv-ndBX(yh_aDF-> zJkK9?F~CF1)pz?6Y?Z0WVnO?ZxsL1q@KmNvW#J>;+L6r02SrrWa4(q!@}WgSv=utG3hQ7iUdl)F$-SwoOW_8djBQ`7-v3 zOqB|)Qr9qr#0jUM@^2cKq)n!w(3+E+6j8@tI?q+H%;M!DqP&vZ%RcpG9c|+daQDiL5x(^@6S@ja2d!K+nYn76#RP{|dHXL#!0l zDC>bJBCaum3t6!!PFQ~LhPm^mPt|JYjU}mm`1Ev!DKtVmWpQM!8IAhwZ55=sTFNA( z5S2e$6jy8*?>t#b00mwTt+dC=;&%%P&3EikJTsVq=PuePkqPCuGcJ@0KA^Q=XrL%v zp{wXfQdbfsAS`?tYLPg+M@m7|ugksW-XcAkJUUqhs+rHRT2_&6Qc2?$$FW1 zQu9Aii+@aFNV)aNtQ7CWls5(ddf5v(^3<+ihy8As`PUc0>d2_CTG+{lcY&C23;ew(a1tH~3a!eOjmudlqt5I$PK0t3kuPZp}$4<`iOagkxp0;)Qp9#GvL zw%?y!psYwO)T9|Pk}sDs`x2<7SxnMl?k#^J)Wf)O~a-U)oe}Cqn+F$ zEbDacHg+W@?Bn;fUP)hJpw`<6PqpfjI-8569_D5@&6y7t19?!>0;8e?8e*ViAEU?G zH<9F*UG*b6hFkojhPq8(#Qi#ntQ{z}x$IllB4wQLPd%@h?ka`)(#CgiLi3AU@axD| zr}+{zSWV>Qs*(tXci@Y>0O8w+$9!mMY~u;ChpUnHJ>!khOUHcRN7{(1-0yN>Ut+k3 zt+G!Ru@Q>gsjOu^GMpMvcLwCWTtb&rVW^hO74+DZPz1-2tHE`R7D8hK)3@@22$Cfu z@c$(Y<~o%&Zdp-HxsD+U9VCD-*${f*X431GI+R@aLM6hlh+JJOd%teOYfnf&)9nX1 z=4dVz(_87}?-Ika6Vj5YB-aM&pbCk}-4Zo9n ztF2riPcq~*=6#h=Tg&Vag=qiI;baF;rrG0@$uOPAsrYsEydxm2s10ja$sguKZPYj6 z7uQ*`n3~f`b*dHuA~2cf{SH`my(HzDmS!4gmF(`EC``C(b=a^(SW83$w{0^Wjr>y% zwREffBYQ}5+r(suf1Ax^6@1mh_R6UmuPy|m`gdXntoR!Tv+?1K0Wv{0;}MZ`#*aF}F2w0+1p z?+#zD1aaSAJbC>6+F_c**_S*J%DS*>O~6Ss#jtaQ^_PLD@Hqi)!KE0dUM3@(ybF4}GPicG}|p{V0d!g;`aL$I5j4WuWi(ARDa@9F?uytWHBtJdu(+J*ec zVE|0H(q%YlK5bpj<=rzPc()hMJO_X=5jwN4G9{uwNM67lO$X**gB82&2=QW!YE|Z# z=e*aThjsGGCkZzs+2@K4-}^BJAoe|RcL5UQ1LC>2Y{m{rxO2c`;w+T|3Z6LWL|i}; zXR5?&9`~{(9Qa2TY0&O`Gh-9Q;jm#EE7<9$>z-q`QjD$eD|dpI}+g*vnB6M z3^_l95+Y_hRpxgS6+!Vu2dTLTkQ&Mt%#Uw1KDIKf_J}4wZ81GbGZlBaKuY`MMK%4D zKI!pzMD@v8q?UuCK3;CZG|F5!0;UTDZJpGuqaQ6vDt?Y;-G{Zrh$l^)eF8Z<`PYJW zb}mu0`LzP}X_TD9T>-tS1i}f#=~5v=qs_zhb0=z6Eod{Rc6(3;z`#W?*BgWn$XR$2 zv-@^U^k387=K!;}1~e>p8eRp%(9Kwu(GcN4)tHZwvleqLI(O_TVn>^e?7|21x$^g{ zMez>Cx5hkpRsx_pTqs z^RI#M@vR0*`zAhy!>gd46Rf=GTb+ut)JkHBmyTT2yjPA$wfX62;#^+joi{!hSW_r>wF1G}`L4(t zK;1*5f3J<(>d55rU$nL8ja-%tz7HpxWgH0ylNU^wB;-Seo!`Y)2+1theU<#%E^mnue?P^5AXfIDPmBtV5CQihdgl%pylW8{ z1@xnaNM{2#u{LB$KeVi-EHOJNdw@##-ar+))TrnNBFr>~0D8x?9YE1piHOKoav$PZ z@D*X!3J~DPD5lo7UBoy+0ztU`*H@Qm0znlFlSEViw2CN5&k#b=-OK!Q%b23q1=0Cx zl+Di5SGB+!w)A)yPuaec8{nVNr;~ijI$7k{|77-X2S*-5m0p-K832XI)2AYkQUwFZ zr)t+hK(cx_i+q%7X%$LoQfbhgbYYsHDi>w_H4p2dbZS9(>IL~Sr(&h>U5VUg(E@gt zEb_ZMf^b9>RO7~5!CQQfWrNFKA7RJfe6%(UnDeg!`EGOn?y&)?sz3ssHvbz*4gC>} z8@JarQb^6_TqUFvp=-f)S~R~Nd~R0d@_CiIkfW|qzc*;bwHpf)CzFYd`fuQwDT|5{ zajLoglod!knfW0dd7VXn7a`fN+o$=E=r<==)uo)K7&!NSp%kj?1EW7=5gbhdWI`k25Uh9x8d( z-F)a!>moFPc@*F=)&fTP=xn6st*8!Znn)#yuSWdN9G?&%Ht=GK+s7m}ta@ol>d&lP zpYJP!jUVkgg%_zMHr^m{aaDUS>*iC0Id``yo7LB#h?=u9FFtRh1up?i>%ASXoc2FNqrEwM7bcts+}Zj>=Br3Ia(DD^F7O0m9XgEL(KK_1MOb16LxTdQ4wjmRWPiG;@I=PJt|wbV3n8W;ypy+7<<6vPBN&5A{ka6T2Emh1(&)J{ukl9DtOXbq>P}x1pWeu;TFQeWd@q#yOVom$59?{E2=lL8B7S7Jju8azS^8rz&8ZZz1(9vKn%JYNUW2GLNdYRz_|J`oISONDNq> zP-_zk6nifLmf;kg9Xt+O%|`YvCkhuqV}DCzujSED^vEN-DQBIif-Wi*Q}5uxbUlHG z&&<$X%d#pJBNkIkVjj_D?V7QGZD|wuMz=l=FGv2{ z8-TWHe7QD7pH>y$ zsSWAbBjjkV!;GU^hy`EYd*eTPnx#WUysZ9tH_SpsMj@i?|CA^O156M|LoS0zTjoN3qxn{zty_QCoc)txDU{mdgBuL*QaOw`ty8 z_TftEHZ!SzUXH#v+-jbVlC@Dw_alpT>xz$>2JBDCi}MXn(?adp(jRjCI(9!zy{7iJ z?5rP?T|D$1*bPKw`2NMcTx=cDSF7U7 zcXPq94BEGKk+cuAnv!zy)=8D*R-ja2RV#`k2^lID^fYe~Qd&frSBWur^Nq=z68GEI zxh{Wb_>|)rE<%`(`41|}t+DSGnS7{Fgs>JLm*eg^ll3LfDF=6C-I&;2D3CENIQ5Fz zDe^h_C9M~{Fj;S)$Q~9`!BzTkzqB41*&|eP>zuKZ?y6bQ;DOW{h?SffGPEgV2$7wB zZpG9{3>7-^A@$)m4+25zF6En>s26>XSB3Q$*1Y$$(?Rky91STi6X%>ISLMMrF{wx9 z`A>WghyvPw70iMZnPo~LDp6C@nLG;?gQ63$=CUH^r{=gWU-f_&;Idl!K+F?c$I3jU z&jPUxv1{A?FAMXx`Vi9PB{UyU3)U0WzTFA`5*3tkMbAd0DBf~>W_78@wf#v)SF%HX zmAmt~6Lcjbiv!M{KgR4JCo@Mr*A|35p$;REmHz?B^*(iAm3{8)5F*T;>V7h35!97G zNxS8GUg0{}4nv)P_AeEr;@#Q-1%S+}VihaNg@WN9^43N&JBaP>voGZxdIw-Il1xF> zDMmPQA}cp*e_cW$RmkmN1#{Ri>$kqE|M!0~M!WFviKv>Foem|SI-s#uq)`^?^jwiq z?!!7oI%x>0uUe+V+W8;5{Mw#3v`$H1!OxtBk`no`ELksiEg8N86@#Z?qeYVCt(4uo z+M8g5qd6G}xWM8`(rN;x5tZb0VxQZ=@kj)>?2pEBy5Q-R^?s;wJHsu9d~S}c_e&l0 zY>FyjA{1=5ZZ5ZhF`zx5y!=@pIOVn>fHp-dEa%e$2IjDC}WX`jb3FLjgZke2fzr% z>gl_Ji*7rr37rRHga-TW^Kt+5C%+YZ-XWrqE4crcL$5S|>X>vc+~_u{nVv6+vk!vW zO_m-KeZIHq^|)xTfhuOD+FCl!N%Y)Trr@voC$@ORrZdByJAsJjICZ%(qIGMHr6v8P zBRd;9K|VKhn;Pmvc&#Um%w}rDRwxQAzBqZD$kvU80#$|4L1E>TmfWN)-OKZTs%5F|IxQIeI6^41}Jult3&8l!XIddyWzS4+1}8q zv|zaI{jt%rh$Yl4ldLzzuc)BUC_U7~)D9F~a6%Ht=ho@8N4E!ZU3B+EG|cop)-HF@ z(uRC}LeCyueu*zJiA>4su($>b7(n*e`DpA7_F>}QR(zX6KSA7gCNIPmwQxzhK%u_a z=`;np96JY}j>af@5L6}^kHrTdjV`<=(c!)`HC_G%5KjsZwa4r*}k}xzjuFG zMz(6ulX@HW;Vm`~T+N&Hkk1{{FO`1yLS_W5VJ2MQPZ7OzzXheVe)H<%HMTIqh%c|^L2A&JgL$i?Rn^%2+WM9@xZfFfyK&wInV@naM} z8R=`VaO46HWlqvlf8hAvKdfG3Pbrv3Y9n-vm*3%^$pPa*h6SigI`eVmy)yDxb~#VZ zKA;8<&wE3~+&i{rAs6xR1@~TH->xq^(4Nu;JODOle2d1aXG6@(V=rgmGQ|2_0M3GA znl({c(7FV*scqSVO?;Rc-=lj(Mx0ju(mWxO&f+6?xx2CSsIVbi)Hu#j;Cw z%ps@%Fg7FsI~kulRDC+j82ct;ZzJNY)&Fm5^k?(k`#;qgebB~@TyPf zwHDTP+*;+%jC85SKZ!ZiilowO!2h+2?6yS6(&Iz&M1jF(K?X`&asGenYAFen;W3E$ zr{-;)UQ)J0-tS_V_c??iHJ~4hZ0SnboF(BRIw;``YR@j#;j0Dgv2Kk;?WzqwE zqxyMAE<<#(#23UFiU~ODf&leD;I|21wk5wOvvqw2Fds5=PpN*!-M-PvRM^WezMe{% zD6ji>&38oLg#yAY_^zDlz!fqS)&JF`_!MT0N_=mlb;^&1sr-p*4;#R84GOq zac^k93VV#t@H}GFm4n5-21}7EO8ax^M!JI?<877~3)3r)OL?!&j$3_Z?~Wam(idL3 z&BY_1O!lr1uxVkJuODsRSowub<{I!HPRBrQjzmaNX|xoTR<3hH7P@0+&YL0aQH{-|I)z{E0BlbnWm!?T4xq(A(BX>pt)Iz0i?V1}yUnC5L zpB&-d!r;swDtrAK+{dLPoxj`_!$Q6r?Hj(`+=QnY)IUaiFgaGBkGywv!cJ7c7~ABj zDqJjO_Z+dCZ>wTp&mR0?*UG^&D3%Ao40Lq@Q^T)O4-OW}Z5H>r%ELf!FGbUK7@r{M zvx|C6M6bSpm*%Y(r4Bi~u|oi@ZRX8yeHkR#Za6Q8r;fbq{e~Owy9&UUd(7ne91J>T z#0_lQNY}oj$7!2~9P<)Dz%)v3!J{KJ+wx+@8sV)2lpRm|1pRYx@K;%>rL+!oZ;YND zaK6YS>uI}255E3Ekv&Q9W)gcXk(lL_hJ7bQT`cCFTUKNC3_-(r8oYeHj5cH`gH*iK zB)PLoup2q>mtpWSTG8Hn_*>9c5ZgiNDVYN~s-Qsjk8Aw(R27w>E+Iy^0%vM5v*6FD zwQ8Uo1f}#t^&k#v9jCgDU}{TFm4#nBhKma7r@RIMvwRQ(hIvnv1s}gCFFLy-9>epl z_`T1j^cFHvNWVXy#k&DyMCqi$SW$=`T8p|!^I)YZ#gYpoSgAIoL%Bj}Px)GMSA(;Q zRemKGt7HeaLvU(sa7NFlu0^waJtbh zxVB0fF%0w85StT_rr`+>kr8oGx2;*$@!|$^Dtlxh4H)_1>9<*rao^R5U2tYTkYlZ6 z`u_JaHAT5{{`yiyG`oNHQ#s3g$KM*5-i@~N`IA%r*tIa}8oWCR3!@u|>oviA@Nm^{klfG-S^z+A~4OKB2?NTG**aEV|uBGFLdu z7qj{v3J^?534^Qh(yLv`iK&mKLh`AV6D(_v-hb&J!ZP5C>M3p63Yjg{`WVYaVs2Xl zUra~K$!$W)yq@N#aH~;!ty|#)q8*{$gZ!p$k5__glJkjMYJ3el$0{-_`Xp7t#`f`d zT2}`Pu4}*cM7Ty3a+M^;a*ZEgYZ1u3*3sSB3&KFZEQ0M5FE>*gf<`)JEQmDU1R&m~ zd`GwEfKQ$v@lFgt2qVUwAJ7@^tfAT?WIsy}ZMVi@Hx1ia)6L99Z&}n&s@g1}AkM3`s}ksN!Y+w7{t_l2fDvmZ}P! zW__`-xYM7cKgOt$o~d&!vSK!{r+oM`w1Ax7YNZvC;)Z`a%y`q7+OFT?JihqYIIRa# z#uxN0o-y1NF;8d*E~m$B9c) z`o{S{Fga6?YW}0yjF6EM>k>)l@eyqX-Czpms0W~Ph!hQbNhVcL_E;#J9Xv8LR5t2W zQ)FRB$zWli#<(Q#0~E|!e7OuE$A-_~qIoEHU>IalGB0oosQV=8^z#SXAad!H%A4ds zWWd>0&Y|-U7ikP$I7T;7HmXiq1#J4z2}3Z1X6sAo!nJ5C0SI21%qQt}d zw)t>nQL$#7^YX-QlwDMXh_KzEr5zTS`|N6CK|wtC`0QJ3*bw({vqk{P<4y>^KTAj{ z-4G!HcDWg;a(c@cO4I+}OHIocagGl=Bm^T9<+I8+01vcPoKX)hP_~5gEIhD!&r#P@ z3B6zqh9A3h*y)^Q#N36(_33*Jjr+k&wTtijU@)+W7MQ}0h+)j|g-nI+^Ll73Bh?G; zdHx=mW+8dClRjKDpwmOUrmeb^M30?!no)KDkA6OzV6?`{N6XPk-|yCEn8!ib7n%55 z90W4OBjXH%Gb$R+A_=5O(Z8r%ue^zdv{aC0(S)EKR-j9z-X6{#BmkN?Iz%{@ohA#@c@M~(*CIW@2BVtVsGC~kFM6%nITHBsUK7}@-r&WbUBrR5>&rvkkO>qG zpnriG;wC{cO&8bP{5Xkt6#_KsLnYc2*2|@u?$m0i=%ofDa(cR&J_$IuJof;#TfUK~ z##)YdAaKr;pr)?P!R(m%!%_>Hy4yjS-1z_8N4@iNdu*UOp67|?ws%(qBRYKFQJ8`; zTk~FQJI9wY`d$bk*g3D03Dxssw4LxT9d81>`%cn;1grV(a-9DQ0y(>pMY4DAx(wTj zrBvZeZBqnkut&xmp`}15iT2RuKh0nGa=*i7R_h+rZs53Y@5XyW^Oyc!ke=mCY>4Rf z*;nJ+>tHoPl53Dz}XUPRd zSiOT>jsNGUFwENuumxWmAi5@bR2JS2sXm1IY25Z31A^pBJe-FgX!>9(=qMt8u$*l~b&SsMId@Gr9 zZg*hLo^=(~t=^g(;LN9te#5z;BZyBQ1hj25>8h>KM`@M{ZpDc7x5dg>xW67)scDHl z{&f2CWy?`6w*6& zZWu^5>NMrcnw$a2`FiqD|5*g5BECQ*zQ{BwBz)T|k#cq| zQ_qO}vQv-?GlSq({f14hw7s#qdTK>RaM`gyxEtrFsNWBb8WG%-Am65me=Dw%1Vyo|N+@Q9B;?;V`&kBRX0fh0b1j+DXAaJ3N)V&dyF!W`PC z->lfaxB(t5cco?i#!xx{NOyO6;zf&_wfVOI)SbEbK}x)DPe~PdoR&quZM`GJE>e~w zk4R6e6zM${fcd95oE&+xTSj2lfzAbn+;~P*tdaCLH1P$09oFz`08gM&f}V2ndNrd2 zMkK3Bw~dB z>5^_kNjR}S75!wdRn`wqrqTx>4S69wUex6M7(;H>xgwEjJ`;dxH# z9{=6^o{@HxUhJwJ)4V-XjZf(yX^#hjq3aN@1duPpQ}&3iOhq;s+G9e-Py$H|{f!Jf zyp~oVZec#!lqs^c3hk0r_y0 zgq7JK9OGtW`s$BGzaq);O@MwX@SzHsz-u$}z_@Uhb9}FJ!}=zSDrYrOw=Q;~0q(Qf z6i>qXrDu-+Lm_@U&oBMw(erF^N$hOUgZk|vxLGi(0{OJJ@3fI$Cuq!A&_KYSVPcEM zaD0g&M*09%8W`bjpR2U|Np(AYh&>QS=td%qkf)kOULQ3em`%bMZ-bax@|FSy?}}+VyFcZFjtHWr17G14%Bh9nlCB_ z6jl-bPm4yv8^3}Op*S?kE=&?g63@vo<$CrJP28>WEr+^+(N!gDV@4BB22f;JkzDK`EvCX;Cc4~0rSX-i|1(C zmlNU4xle|T4*Wjctf7U|n^NXTR8Ep-_uQo3!D9VWIr6`6*$s=U#0OpE^46pVx9I$e zN}wp!Y8@bpj^-ynh@SxS)f%~ZY3`e>XRCtD?fDWg=36i+CG?j-_G1}3hB+Uf3Y zJ5sabu$7o4eX&M-s_pqT5X^O7{hrT`06fal^l~*^iwtc9Z9sP@ofmQsYq{Pu{Erg5 z={x|bu6CxO4j@dPJ9ouBIs^_)n~tX&+mkozY~WNH>}s7Y z!zE9bo3+XX?QNB=N2&z_JlKHXU;)5`x{i&XKCe*;p4dR6RAW~UwqrZ2<{kAVy4eJ? z+~1c-AY~% z^?e5ak!;PxJqbZ{z}9KOZzQK>H#0*Hk5<&3eJ7)6N?OOc{V6U-|2DY3iY#Q}aB?Jz zCf1ug!@sRgmsSU)ioGF%9ua!at~ZMP3zR-UVOx?X+M}9T_0KALb7U3r+w#{R*NfDD zBnsG1UT<0%*e+pO?g$M-ig{tLz3DoQT&es{7qIEi~P1N_)tTozf#51NHXO3FDo zOF9c5V~^|nDtG>lO13eD+_&W9_ADdRih~Q)qE~}e)KXIsVgvfH;w5AxK1nZQ{8(X4 zfwrmgslK)LhR;VvrKJiPp|Sm;O*&kg8^N3w0|1fd6$NCfYL!$*P&%DeM__iw{~s#r zzzW5m@FG^<1rq&_ZCJ2mh%`pz^%6{T#%}!y9QpqU#1A#wb>lP1Wm}3Fkq&8*A>B6& zS1mG!i*DZ|Bb9Pnt?ntEP2&5W=of4;^}61cXJXy`%RK35N3ir^fWxf2aUA*u)_2OU zx|vW8twCcYY4BcCko1(?)j4txnD%^{k6ldgO)?x>0v-66J-`oJkQ}B&Nc^xw!a0-+ z!()=^{et2F7h#ub(IVPXF#h05Yo09_pgF!jXF(}WO|$d?xKcvm2nFq8aoTCpaedA#W+B1UiOpxDb~2n z!m3*Cu(K0%WvYiVva7#u$v7ZPA03-x)~t)DgmUPdHU37xB5TJ| z$b>h@0(KmiVwHdw;7(Wt4m-qx^)(G~k?yOrM7cV{6DB`@0rjM*@xY-!^OpowxsGhu zP?7*QS%23CZ~sj#atE%YaLnO+kQ=z-+(6Gc{PRx(1ZTN)bLVNQ%R44>Z5Y zxQb8H_|K_aSdHY=`9k4AGLUL60IyxJh%W8Y;y^Q6GqHQby=HLugZ5~w$_*gyVF#VF zE6elacNQN+O{2mNhGpxgR64$}xgTgG{RH*5`DSHNOX&NZNvwTOraVdkxtf4>;O_b@ zh9%ZFEY+C;={Lq{fwfImO&YxMHxT51U~MvAwjera#CzsdubU_?rM9%K_n91XcSD>3 zr-9}$n&%&Fst7Pz&!e-r5eqvnkwvEkfd zd5cvD*sU$xNvz{9qg-^|d{p;OC9+=R$SBUDXw}d4&wKDfS5tZa^wKui&=9MN#3i`h zO2TOd+;^mnP4*GzdAtWCBk)b)Ss+JmsbCHyc_01KUq+xTr>^$icEdLmR_3F_pU!ey zZ3et*8Z(++=*^8!Fxht4Kps?xv;Igx^X$ASC)R0Sek%Pbm%0LN4>zx5p)qO^fP9Vb z2+Da@iKAsPg`l17?aQtMzu_qWRM8XU7ghApp_o8TtUQrro2c!B19}Y+2?pC$)l|Il zF!N%Av$T8?S`$$qh5Q{nU)da}9jf59GLY5F(B}EvFo}T^0Xr^UoC36I@})8Q_Vq{l zVcwS3xvtW491qYt;3MF?yZIv8*_qF=;QQt(Uj*pR8)9>F^cZkge;#{Sa*~l-bG;KAvv|E7B23M zT!@(&+Wm_m^3L;sgt>uu2>ACC3l)P;&nF8T#9HR9L~+&P+gRYp&t9oa4vqaoghTfZ zT$+T>Vm8(-^rEkpa3|ZbDX}}#yf?L+wp!F>eq}|yPoD6EmVRoMttR=q*r>aNi5^CP z3(s~KH=MW-#QdFv@Vk|>pu<3zMqDOQ938GW!RmwwF(x2_wW~UKv$g5jcP?6O| z81|M_e$cEp5O-ld#2V*=wlGRjJ~P}Lm<+d28fEl zbWcJAUQoAe`fXwOt}R@Uz>BOBMi2gn<=<$lahV>q7>U3S5jW+~tdMrp-OFF1aIRNj z9?EN8vJ_$%A)HROsK3tLn3reR@a8YCXBWg3(dK{*NTdl+KSK|-7dQWO^gb4GY;jBp z;0c1KZ;dB4!obmcAuIUZ!@lMtFhoudyKG_H?|Lvr#@DDA5}Fd|1-}*St<$qPB-ij~ z*3eDPl^T+onjRbVI#N0_KT!OC9oSYh_8Xz;6a156B3Y^&JL36r*9VA6>4?2U8=Jp1 zT&(X>{}!2rCE!u4UPr|z`zFjq#leZ{%M3^y{gl~;?K{zW6U68>f*DosLaHr?YFcEt zaxA8(qh@?*9eq*!qh7$LMYktF9+My9B^g{nCd=K zaG5>Fn{*@&=db>n_+8-$$N(uo*1u51l%^i}v+2F4lA9BuxTlx`A0(I6?*W6qf{}>E zuPFDcS!aiXb8C~;&3IuWBauwjR`KBt;h@EiQm?L4Qc-Tdjd-y0 zdQ*DC&LSNg`4kP%(5a0sE-fJrIW!kdV@{aVpEX=c7=!2)D=T8jua8nz3nLZ2)aw_U z@ecrFR#Pm;KY{zWWg=3(IC99XH`N#BjPkXRc=l70S#L&Trp1VVk_eizeDZ z;JrFO2f@mnpnrj+6uK}k*baTHm(wl)Ye>G+;JyPzcddyG>fI%IQQj%RCBBYlJ>ikq zYjcNASPI43K#dfgHpIxgA8-_3oLy_21_l^nYfYP)!WF_thc;_9L|o6l6~x;h)L|`~ z6GIukvSrLG81TWip7$`43qF<&o?zZ-Lh|j$xTb@-E!a?CqVc)n+Q=-bj$R_SXozr3PvKC_Lr(tzD$x9@ZUrR=H?MeQ@8^bHNz4b<|*=iTda)umT@p) z|AsW=EH?8JgeDkqkUD1}f#`8awb0tZG}Ke*I6X~bQu7SgPh4io>%(+_inATOudBN8 z0ejwEaqVG#X^`#4TpQwjz+%{Mo7T_YQ1dY3J{D^C+>#j>U+vK~B zKV3=PcQ7*hV*cn6MxyI|UIh7_U|G$N8riao+I0p*ctcefwb2Cfl&-+8GWgE*`3ql7 zS1JqO-JVHdqQ7u}Y*>*_*76d6E|$Lnz#(nX-b@o+zGBHq3?EiA0aeIm!$w;Y>Be6& z$*;YP=osNtioCYB;4+_t6D@ctfFI>fdb_=LVH&-Ht*e+!C|~|9&BJA-qhab}IYc8w zX4*P`@~Pp0icnii7YwW>4PZ3?Dp$@~t8uc%DZSqfDp9BKGqHSeDmx{DZ{EGu`GYGx zx=y1!3TZ0d*3eboutCmJynue_k}$TO2sZq{+jZ-~veRgcSW z8ClGZGfEETu#xwmlE0ISin}fJP<@>-B(%Uw!4WZBA?q|)bud24#$8{O24doONu4I6 zLLn`BDS-hgpj^Gz$z0931rN^YW#qByv>K_ne5RTs7fAybqmqA07HaR(JZrUqIKFh@ zOvl@lbH3^|y5ck$zCUGQPi;-gSI^e!`;33g&cAH6n)Aq;1>y51vy&+T3a&P?SBiS= zhIFmp%QP0c;af)X-&JR*0}GdW$TkH$2qSoA&xHQ9eQS+)?j2+3>W*!R<$t$mV^w#t zsKiMMgiFTy@(N4N=iio%HVEGOEkdg7V3bfcPNhQaDoiW5$&FQG9f4c;;@zDKca3L{ z&BVOe;NzN`Af1nX=C885*MaW35H>n!IX6>R!S2bdS~OrCpl5bz=cs%!ooIm~?OCZN zp0(Z3GQoQAx||qz%Wr0@{Fq6lH+tF%Jk_SbmjA@IApV#60|&0pV@TjZKE2>!4wUcL zx{qbb>DT-ICqYpo;$AxGt%Rt+&g+*1i9Lx`M6&1P5{62pX6A8*wPfa!2dcp@G6EkP!kef22+GNXd*$dgi{RZ zt!T6QH5wcd(CQA1VGr_D5+42zVru&HLb~K1Cu%WzwP}PS67-C`;4&5|%NA7+^Qzv> z?t>vI*rLfWGT)h;^5BDNgex}Wg24D#*i!6F z)lupRx(vwhy^l*F632E|Np@yOlAYvg*A{dBu3l5Ae_t>`U}W4B2NPNQgHAbsH-8bd zZhVRg=wRB^4~P)@tg#K8BwAd1zTlYL^uP<@%s30rXB+Ts7z$_}br%VMPCK_%ILwfk zFW$_!W=MPAXGM8r4~ZLj6|L%F`IK_18Gn06{i2f4?nUR(txy;lIyHEx5VS9qtgxP)Z&g# z0*hJ(XA9qMnx7=aKDVMwP!K$d=&%nLA=@#0nGE#9e4})Hn?F|>o3xwk@}O7-_7}wq zWjww6@4+8D!>TM7AA+ap(mV~IKGiCaVc_8yw%6LQ+jFqEmHA|yv@J;J1ZCq%KNZI> z(yzTk=W(E3z2qimt1}h(toE2?2!+%dL}<%A#{!sl*)bM`Q1C)(D%;y!=tiJa&0+jm z@UzktQMJx%sZZxiQ$dD0IG<5D8NG@mg=Hc~t~zgNe{fnpRr}3dB_C3HnAI66yy+C3 z_$^9(GqUfI11k<{mZe(gR0Du~R&6wzH-zxM6ngESwbl`&Z-g($+(qGtU z_$K}}W1PKscW9!C)~04?z$F|O5R`R?wqVQ(D6=9buUTNtOhC4!EaUe>s|VqZ-s8mH zFiPQ6V}z-m_LpKnp|4RHz1r*#Fzo*$E~F)fYO!+sxr>PIvg!!Mo+ywiP~!nz9$N|1 zGS#|M55NNrCSji0J}IH$0(GLQR}QJ%1b3iZ=k}Klk&9U$IYUw+6p207OxMSQ2MJsE zHiKbX-$NyuZRUUA=EacN&KD6(oCuBQd6psC>dD`q$MX_Yhyzl8f&wS^r4l6U-p87y zd%7ufwqt=GxR3z%Xzi-`i##F(d;bxazWsYdG-^YlWP1Tt0gs?*XKx}#bx%>N1F8(c zI@19zHh3Tjj!EkAV|RK!z!EEn=HV&NH_51A@A6?Rp?AIY4mwt>CM5ZYYZz-SMyo)U z2fJwq^Iq5p3EbSYASbJS49CQv+T2TRpr+7$_FZdsX=7Z)WzIK&-i_pzms6pr;!UO{ z(|NROUIS8d8uGksbmVFa-^Rp|XcD#VQje+T4sI6@78|Ew0jX?EknHvb5pouB{{}DT z7W+iuXtu{;PFZr*+FjB;_f$!XtVhc&DfB`j39rLI9z*24_@&G`&YDT9TGIFY;A&}4X@(MX&>MQzU=IWO1p83 zKB^i*tAXj9whXzb`|Yr5YDIZK1G zc(MJGo<2ga)aFF@x828CS_kJx$xj1sBb#jcYu-fi@o-jHSxT`x3>59~%Lijhf?%zU z;NMhh0dc)P^6V{w&wDcsy=^VxInRYY?jKyZeT!}RE`Z`!zc!wV1YNjA!J zz|t8iw>-1d592bM}fd9Ha53F zO|i=x5By5V4dcrJ)Q-|P0P3~X$#OTl(d(do68xtAz*_+k49+jD1$m(DN^=w6UJ?+`J-(A5C8c=@czxEf=AA6c zgl>gNg1yW@IXMjN+En-mjDRi#o63c@&vIy;_D#Jji^A9_%W~q*r1) z2DkUze4wqh1V29!TpBahN0Qk>C}jMGHmyhN$^ENxaJo2!ZePSxRCnme0_JmAl znj>8bBqI7Cd~mn8#+c!$`!<6QJ_UPHWpcXD4bE zI;`9CCDXt^77%Q_I>eCO&dUa5eoB-QUVox;pK2h6aP9JlZa>!^$S)Yi9nremJP@ zupXMM=Y!gyh1BuB3$sC;hwWsW`;$n#7~7WFW=0~0IfjeB*r zCQ$JWA;Hy%MDg-}YiJh|2s=o2Suw=c-PaBJ9YwO!B!D1&qrWbs3~h}yUB1D4!!eHi zz#LlaMA56;lc*F}g8U^XpxacoMm0sLDJ2QSJ1Zso`s0w=aN_^`1ixZ5u?} z&RiC2t*PmNg9M_L*y2O%5h{v62oPK+I$95C=Euc7IXRpQMtVa21_(4~=(M1a(s#P) z`Urc8o2R_AQ9A5$^tPktqzL7?Nh^NthHmG;NKv<@$(74#bv8~e{~ zS}TI@hzJ-u2!0vO_2^>AflFCV0W_~|-k0kN{N^=nY{!I`6$A^eA*4Cp;sn*TD8_|J zx*Hk9ERJzn6*-#zM)R9vL&P$+D;Sk_q)IATznt?8&P!D0FZk)iW@Fh)J9xX%0_}O< z2ew6Yj%Fq9Ip!m8s5qOXsVe@Usor0L-16vM6UDJ>ovwXXqgsLr{Ew&fJd}?xwgmad<5hY_q6{5CyV=Mrt7|HD z3no2dgWOwhgs5qu1t6;3rwhSZfEe$bmUzUz|8Fl7IT_GDza@-f9&948XEqHNcuoce zuMG?7^BNQVLGpZ^se5{9N2*WfU;~BthH2PnRp@jL{~cmups8QNwEAnMsyi?x()1iZ zO_hdqKh~^VAeGULLcxn`#XWBl#iHOh?u5_r-Q<=^=)r26nEa&Q!0dA8Gpz!_bQ$m( zWv{zp>_3+u*GUV{8sI*r$van8)(@tEAHgGh`>_q*CEW#S~=3zxEN^S3%8~ zkmx!oE;W$pW~@S*GMZ|${#sZG9|PvY4VI@Ky5Nkv#x$xX}v}v(YFd* z=0=?;o4tLd|Jm$yQJj81Ey!iLo2@>nZOea9&xQ@1S1yV)i(c2-@buiOV_e; z)siAsx>QzLXp!P|17Y)wo^zGu**b<+9E&H#DAtvpJ9;=lVBeOp&; zkiL0BNiRo=z{kCcJd`GDUMbbb$MY!d_We5JW$Eq9j?xl3$qkw-ng{xJmW*Ytv()GY z?)OBKcTi^U#y49ASdn+S_P6O_Sk=t{c+BKxVqCS#sY_d3vN@p`(U}`9KjeCIhZ)(U z%$p{lVbc%R&%;(UC9kVV^N1D;SgXZgx0vwymdAp2gt_Z)jIlYg(l792Ngd|(CxGGv zNUbnJm0zdQk>Sww3uc$`=?O4f`1gxIM1H*~1K;8**dft#UT+xv*xT$r$Ib=K%7fPz zKQ;Wu$nGwsYggb~m#52)bh~agt2kV9wX988m<(@CVJIVauiiyT2^~bDM4Q@O#({;1 z;%**YwBncn<~LShQ>eu;fLT+XmzI7-AtDL#gB`-3QN=V*=~Hd%2j;LI!!S#-Ax$;1 zG@+w(zr_-j8hul4e<@4XA=Oy9As$#`XjSUAaH`UzqSwPwr_QN-F~)b)&kK&S7AP#! z49!#0_s7AbLueiDg29?K?Kd7U-z!_lt4_?umFPl#%BcE&WvJpm*)bqWWzlq5P)Fs{ zL#FJCVXT+Zh3vSx5ZC`#u*ed4A}wX=YA9Ro|B041Ja>#5>Gy$81wmBwTMNh#plfy& z8rAV8YMMjCFMDZ{vVsZMd;wJKwVNM1Copx5Q#}#sS@rcZ^@OlKiyJ$NkVz~ByA>!$ zHmx&q9V-Y#3`1XYQ|$hib3)a%>1`JwV#V;S>ll-H7(LwNedjY-eMSEhM19vemy7=&SHohuH*cd2(Ys1bcy|i%6xkUW<V~E<2CR?-NJr#jJBkGM7bJdSFdS+CmM&5Iz?7Z6(PoA_` z6>9jdf!0rlil9i|>G>;qHrcL{Vzi)3!H-JB8OsvhPd!~SzW?)GT;NlCdxL|qz_`SWu(yWQFhQT+;;PJc~;Pt)TgeLyOH4>~txs#Q6`d zpf4rEw6^Y$=4Gg_!9y1$qYcSvMZ1~naYWkNc|$;~lnA z5x6{C1H}F*KT9ndM%#VYDy#+A0n4+EKBB0Nt6e;n?qJ*0jY$nR;>iqPeX0gQeF$gp zKul^OayO9s7TJdyU;3QNtK_({83r81K$*PWirm|L!ny+RGP8LgQ)j^Wpjp{c_1{TqooNA2th z0Wd260PN*__itO2#Pj0K4|6JCiA?q_%jbg_+~s@|XkUFLQUW|3vFze7JtxK&FNYZhz9ykx!9unPY@W>C(0QRo;49$x z21cx({Td87;WV^JT_^7p^ka;JsA3cY zI@^h1!kf+0Wt>DO^xTIWEaOfj%?=wx_Syqe)1o&qQL>sCmxkx~m8d}&*hK(#O6O@f z{fFHrbcM@n{(6tssO-3Mk**O8Pq`M(eORnzmDc8$$F+B_7XcPWHk(0?h9Hs|NmiIs z?ht+jeyjl3^EyCwcQqkGV&Q}NHdKFtR&(fF$B#_PNdHjq#4K4R*4roGe*yMhG-6Eu zs`q4{`u@W8Bv1FSYUL({4?z?J@Q@dT=a8Rb1MZV(T+X0t*XKwp@|6(@3e7A+?>LAl zPhj`ag~>s)@0k#mIZD(e?A)}OQ1JS;W^djY%-rKv^$nV)zxU);RAgvUcHhEw_& zSCE@V0DJlO7oOx#~i2hV&T(~`5swALlI%7Zb0>aq@Jk?m59Z`e#O?eKUjT; z18&)^D>rP$D4Q*f4Y*;Zg%_*%>_cHW8EROm3Gz=ll}M$M>Ljat)?28)%e%e^1CMV= zwR5JDi@gB|_5hBIInEp5)Ro9tuNvaiVd#S4lmLKb~ndH8cipOSJlCwomIZ zSy0QwWtA$$L?mCv_ftf3;JwR14;3he!|bB#G{Q!W(c?o|Bej+tNksr1+st4J42;L`c(dDi5y-Z3K zg3RVo-BnE}3k|EJv_g^~LL>Eq)u~=O})rSf4 zQLso_)SRSkyV9x*fa^zRGgWx1(z$P5EqX;$^dng${6P~&y0S()rD+#Ti|=cKqy)fRAFY8n`G4+TP8LFVh?&E&wl?w z#i0sQqpw6qBtl`h=<;IGgDbV$BoKi3B$wEsY28Qqp|jtC>6BG50? zApv3%6Ak;fOsir~PlMt$N0{i5zb7I8EYfIM*}MEX44V?EQ)bb{*!@Kj4mS~Q3?*mY zcXcH%=r!d%a`B{I-}jiOJgB|jJUoG!CK3YG{P`lPZTyq}Hw2{-kZGs>TzW8r90a!n1NW^z_`$h>LEUn;ds_pLM8F(&IuE1lVFj6*1Wu z0m7!D17=ddmzlQ*mVSoVTgbZ>W8o1qLt91~)Enj7#Wu?FfuaG*Yx(PYiDbe1bs_f> zpP0E5g&y<&!>SvoVRsdm9dF*6EuV50B$t&3#NFW4wF}0}Dd4|By=o9%plc7-A+ynn z8HvWy2UlV(5Ti?BtrIFT?=FJHdvS4Zqb>~83Pd6|3CRbbvUomQcsjGyMa#A$?W?(F z20Lo|IO(RS)47D&Fc>l94lz_}h*91@*J zdf!Pt;UN)qe37@p=n%l%L_RF=?=38;d^m6ASoHA1Hrd~hYZ6duRBt*1m*HIS_Q9G%FPU)dPOfAqU^j*0uk=q(3=}eA~ZE?Lj1F41ntH zcjtjGAfwneoS?RtP3-c*u(K7o_3jnHc71x*A)U+(KsE6h4`g%M%h(L8Eukd49W()w zWQm4J_)sf4!It+jyT+P(sgz>DD$Ww9JRJ`HR&s1ycL2;gk#+h3v3ex<_nD5?kr&vf zi;qO3!5|AkoGDIj|cCm-s@P8bg(7PYF zHNY^*e<<3Cui*9J5^JacWe1hy+&v0md;HZZf?Nn-Cg1VTH1nx(91H(Xd-aG_9|&B% z#0GWDktV$0%iLKI5L%OZiCzj<7gchYhi{4H9A+o;;bSB1axExq& zAxY*tj18aRTsrSY&(ln219m-i``m4?(JQB-3g(7Nu9m=UkY@Q&h?-{^r^$ekjzezq zJ5?IVjHZ73&kQdl=?OHYa{^~t3_E42^pMzOJB`*q_vC`nLX5#>iKa3C-WwA7&CVH> z4EnVhHkIX#yVLQ1QN>xLh9`O}#3^fX;%pB~lFq1?(p6daT_Fv74Ly|t_2eGJ=XPtg z)OWJK-=tmUnf4=y#hXV<#iQmOSgM7Sa$K*McR71-JXb1~G@z{acy$UjMi22WbN^>v zzzNZnF~}jkJVfG=-S&k`pkShVdwko{e10Qy*A{H(u8}xTZ|LQXTV}NiSKc_eE)Ib( z?|qUNklfLp^syT^Nxf~UWAZklA4D@b!}NRxVQ#%>&c_ASafjql#yF8krv(oY7CQ>* z_TQ6Fc}!d>3Iet zXCngf&qz-V3+*cl6~X3osu%=V-UevHJR02%Enr=62HJUFv1LMW=&g0Y4JOb z=tk%r+G+dVM;9stsXzegXN}{#3sxZ*7?Y$iyu|9rOgSalk&})#oYre=jMIh$B10aS z)2tC-`$M;S*g(%bj?ztf5HMxp;!TUN@T%KP%BdH`q@cC3_vCIGJKqgxDBR$QCcS?& zYuXcdrWobrPom-sdvw+5;Cx5-?o|$i$d)o$B*8>uVj%HV*2NAQN$nPb8~OehtLwk; zz#?@6_Hn6xE&h7j=47^p7qD37E;?R5&o|oykxb7%Io0NpN4v}P-jmHaIIeU&C z!#1^6Ha~7fV+BtRO>~n#8f=4qbZIvFcn>L$#=#vr&+D>T5=>U3RIK=3MP}v(Z=;wZ zv3E3_E^A+=Tlw}Yxtja$k;woSw>dp2WfyQJrm&sbv=%i{h;lM-9Ys5sm}A?~=H^IS zd&>Sx!y7{NgVsAG$oNJxG&PLC{YuGti>G=iXEM&TLf?{>RVCB2xh}9_vw-{@ocv>h z;@(flxg<&S*&x0-Laf6@UFeG~71P!GE9W*Vl z3Stp5JQIJ-nO*tlYG~No!QX$UY0D|0wD6-cmDKNul1-Tj#lu|+UEeD><*cK^fCSrf z6FdXB*66#2 zvN7=-@)L}AoD$HaS(C-)rMUk@*_mRgqXF?+knazfuT~pIUeY_35;5eHtZQ2q6oth% zWf;IpE_)(V=xFx9^tbaB&8cM!osuLi+cExRRiyfosXYFytvU2c7)lE$xY5{`18PvCysBt5q50<2ZM5A zM%{D`H_4n$6nx)_b)Q=?YDE8X+E^V> zyakyhTk@>~^8x|xz$cGFA?ZGlF{z(Jp`HmI9aH|@(Vm;)=&f~&_6eOtDfPDBexcrr8p zOY0i@v(jA^D?xJK;}`ehZj&S!0)h-k8smiJLio@D`@dXzpDos^&G{H9WP_Wkf6SDQ zpEl7kGb=jXW1_Hm4T-~CkHEeYIyY>D#ow9svuH^i9)(pP!pAp60PI~NC4F&1<^8Y3 zT}qsKOs30CWDc9nQ)-zo)`h@)iQ*C}@&JBgVksqQhg-3mX9oKkSkID3;6hUTDQs3l ziiD0UNeA5=n500FC@2j6lseKDk&_WE=hM#+LLa*+#?tWHbg7H7=cHqVO-OfXI)f!ci0pL{*ZxwvB8@h|De6Do0D?!e@9G{Z?LvoR zs$RSif~)K=3s1-D?J0@Qn12z_el*~hhUOp=PV?y&?NC7H2sO<_6~Xg7DortG%?S+h zaNMoFoJ-A)Jhvwb4tawi_whPTdB4AhgiygXB0314&-Yq+(cdivHsJHSj`2$n07tDU zz6oEsF8{gCjI@dfy8V*1gq5y>uzv<5u}8IbZNOy@8>!DW2zXH4KQXe3$az0a$;k$+ z3L`5A{Xbli=0T)rU-ZHuyD$nK(o`}{e!#{xB%86rKkRCTW~3ruV+T76?DO>sVpdey z(GFrfcMJ+(?OokFzINh2v%9+c$=$0nVj8Wus^#e--ER0MO38ATc`sr~)+Eymp=I~P zwqV_GJBn!a#29si+5kZr#CZ?%y~Y&5E#SEVF)h|(fcLE-7;W97P8=D>{EXi(B34Gt z^@w}GSwNOp{V!dWE)}~qX_@84xA?8)9{o0faU-6C5yS!JVYYc6aptx`3ho?pw8%r(^4Xhcls= z2&usRvQMB(8SV%31|s&Me<-c1evBI&Ou&t-uCQX)UMo^2WhY3M%sZ(5+981h-peed zvW?DP?Ne-^a*#~4eIu7Vk&-e%8PuRUpIj?{crtO;qnUtVXhXvwLoqk_n$+d7&XVh0(pyh3`Qg4v4OOGx zudWPX_o{vrzRpb~%#+)rzY)8+(vc&Qs@2M~;)mQFsG7~Q7Ak$$k>z(CqG@C==bwp4 zG=%bflXC+gLIF`g`dGH0@8J{wnv<+B&4;k;Gx2UP>HavYU6}2K{rZYnI_Hp;J#EZx zuK;?=Kv;sd;Ro!-gA7FlNqOgGqG$jTA2)q5zS-x&LsWfJjj7*de{`MpjwH$6ZkVdn z8}RSqowF&N-WPq`JI|33kCVwKq;5CBUchl{HOmo}H4!QWf0#TOPyh{kxbpJe4ap_U z0mJ-=HcQFzOR)6<9#ZvMRb~^*xqBXTjANyzwHwpkFO_OYw zQp(dbUH#A6S{_a#pQo+=6#1Nj6epzcu|L8(yF+z8iN@KVpl|8Lv#9R&bc%>o<|R(1 z0sBeuXRiu@f?kL62ooKqWN+Ki*ysN1KJOQ_LMlhANg6G ztlVCjm(Vtj{ugYK?O+r$0zck4O2g9SHfC@ckmC3o#RB5sO?68$4)jK4?j;rk>j+Zn zQ6238+m`V3oMB$!c7OGF!nV=`q8W3mS0uSKfIW%z%>+v24*cIVl3wku zUIvea1l$4kT7D*R)v9^0k(Q{m**y>l09`WT-)C44b$6JxD{RN11*id|LL(lLi;dA! z2xuR10m@K=S)Dvf)`w&{iR(U?WG?V9@|`ZDP^Ik6t1uP`CeY42eknwrb7P}PaPB^Q zk$=ue3C7;3)YL)^`y^X-oVP&2MfDY)P`~-H7aTW->n<>XcTUkJ5u#bxFO5J}8JWyF z&T8}xNzwYZ+Fak!Zc=I-ntqyd&ZiS=-UpAiyD&oa_h3k~7+C3}yqetn&N-U?sD$rF zMdlx{ zVm-Htw~H;PqqFvTaUA@XBVTMq)ywn*}E zbAqevWIqnl)B%A z0)Y26k-M`7ld$QszU(S=b(*Rb@4|SVYD?S30G4{FwNW*4ODB-I;`+u2N#+8KwuYF2bp-6%*mUVF^60|j{l26|`>Ia4b?MJofKjx_N=^TEkp z1~`vEVCS1JpZJhnsaItq*M32@qGjD!?n}V8!jZfi3S)~lR+7UllK#0ndSbphi8{>R zKm7h|ay7JDrFGFKYqQN?rB+!ULz`>2vQ5c9Gd`4ZPG&vKw)|#7GiVJtzDB%+t>mr$ z`hTsoq$1_r8Bj8lVY>QAr=lFj|4w^gwHvuNglnjEZSsd%xM}fyK))nv5wa*3@8SB0 z7o_8?qT}w4@gCRe^+v=S!F4!EP^49vYp8(9y12RPemh30;6eZWd(d|X>TSjI0;)7* zt+!K);GLDCAg-!+iI}}>3$W3s7iQ+j?Jozh?8W}Sm^cz5(1&R$Mu|K9%W9suxZMQb za*M_^K-_bgPK%yHIypoK)aDX(ybL5%8_GjRJ+(?i3K?7X2fVF1Kv!Pk_|3J(#6ar? zaK);C5Jx9+SLwz6P9BWqVP7D_u%H~uS`HDq6)WjH$b4)WaF$PTz}2%t29Uht5l?GIXy-T4gME(m1J^qj3E6q+^>>GgQqnG`g#6gD|Qee zRoS)HTC_ZqT&1*LE3pcSCw#V7KBfHS*XlrgT)7T2z46WVAK~0ezJG1V*sF09rWF)X z*~nHMcYEEM8-b+-Ug3Yh8>l%Kb;E_yOV+X72P(E_t*qDn5%=eCq$8vdJ|KLU5+qpeFNb+fJf>ob!+B4(~>L4T@ zzyjm1cWouPK@~Kc%!UgBBOi{-HOl}}LH3ry@$AR^DV9YAX@!X^x4UDE=B}G0V4jN; z+$C0&o+cUU3pcwgcmf>x_6{kz!CI*H1clfpz_{LqGb>e7fxD;mmgRQ@b|lb0y4d5e z`;*)w^hR{c&4U@naIbQ?Y2xS^I-K7mXY9YybrYS8NKu3E9rHJ7(iR7I0yYxzJ(qzn zmUjCU_6?yZ1S>wFnK7Q;bkmTIyjiE5Nk&f7|Ndx6`R&oDtZoc}fO&EWUydl-HVf{g zNAtZnc+8Q6^|Cf8S)&eEwslBi)RwAf>zG9hRR`Lqg)UVCW>fw}OJ!Kn8;zNf%dQ;@ zo^nM_mrrJbmmTpw%{kY!sMV*F`E9)=mTvED9x>Ne;3Mt zc$iV~;mWz^^p%UV9hVZ4L11T`K0!><<<%U zy3U<|;yv>#VE}YMG0735L>X!O`;n274F@U&5=5_j#L!LKIcSfhD-GErfh@lb$BfUm zSuWy7o@psm5C)>*PuZK_P`jC~YVcDYqW0(+gtzFSNe4z-#Y9($1+Z$x=s^Zs$_0y* z!H6A*mhs_Dye`GNdr6Ag#{cV~FH!m+h*`{lSUzid>gc0};QpJvw3?p5_Ebwjq2}nx zN|2)IRxczD;K;0h?xvTJW0sq4vcX_Jf4-$zn)Y~Tb2OeFk+dOo6@?lEM1vVEt@z#9 z)Tl3qG?p+8B4_s7kCJw45Uks0`M=_Qn2$Rrn;Gz60# zQw_*`rxQm;u}L7f1q|5rvbSaVe1S8uljik^T$tFctauagZ1#@e>Bf0>6SmAuCLQc9 z0^$SPK8-s4z}2-8XKIP!SgnS;?TTx6XN?>4;=Kz$#-fFO;$}QqRsad66#YJER)jkAV%|aK)v7n0=v%y~wG-8O^ zw$MDuIi#E(*g8Kl15Y^;5_D+C;v_i zJ|_!~g&oA(=qd2Ak}-Pxiq^=W!9?Ph8hE#W%UM*wmhlZxYOu2v2xVyg>%E!Jq0S02 zw?9fbhKWCA7c~$$IVrEt&rtObl*UB@YN58xAlem{HRg!y<_*hgFXAUs_n9j+fDU$? z>R6=EtxapQT}w>nM9h?_W2AJ93{v*g`rE7!{?-q!y%}7;!5yTZ4BJxv2H!La~HyEE6^n&fOI3n)uf~1)iJCwseKL&D)pXZ;FeRCu$YU+2R^d^hGbc1I3f)<% zBjR8>2rvI5ZnNL}CL^}>8h>)QIRrUG#9HncXR=H23|7KRLmA^6BDnBZBKy2ChbvbX z;f+*Id>rH@-J?HqAo!c-4q;0B1HP{(Pkz83*GRm83nHFLeEFN=JjQRA-J4+X$r1@6 z55r9aaLae47*+gm%!Xwq4RVX_J6gZirI=4g1rKwvAk2NjEl8FFUZP?7y8wDAln zDZRD3FiRe*kqlG~7{NJ3!%{uNK_b2_|yJ5uEXxq-*w(2`LP)1U$ z^wF1NowJ?F8v519b>p7(-kC~Sd?;=xSDinRz;u630OkU1jZGq*V0KtJqOX++U{*x= zqh!)=TfXHT{lR6-njU|rAz}B>ox0onxZcYiSQN6jR1cd=H29J@1t$nv{a?EYHje!Svg}x1uiO z8NYXJSz8gEnS8bVCVl`4rB~~JzjB@5M>wX&BEs~qLLNI*hM2#_s#+Rywz^PT<)FVf z&LI|^bl456iKq60c->PCT9hCAxJ&z#ZbZtnTeq-fYeAT-+xQK$tJ}Fk6~U9@mP`qf zr4839nFq%)V#a{~f0T+pXvU%Ma<`+0n4OBY$s=`E~YmHMb5dwG@0c>b2?Xt;lSc4>Y$u*lN)3O-h1^Z2|g*kMyz$zYnd2b7{;j z>EP#K6^OnbKF$88Z~``7hmcgUl3}wczCv%<_sXJYcdbCTIl&o2#bd0;4R-v24fWMF@ zuds?C=NX_Z&V9MfJ-oE8$?cwL@jJP*EuEjeFC9cF4m)Uj-prjW{^EGb{ zM<9CC5;BR7TsaLZ6WEZcP7qls*`$E`UI&ieyzTyHtZL#>$jRO2we)$-`2zb=&@X>} zM!Ys2@1mDE6hV@RHi<~(wT%QkguFq01Is;RY($1`?HPd5!6EoJ~DltXy4@xW!9Lg;wBP(mB@htXmhhuG&nL} z$wMo(lvS1@F;>d!Y#w>5i{!K_Q*T#7RpMfWA!sCraD1;xCL5C-`+*I^7xil}n*~BB z)v=s+OKQZ_0?02>q?~&IJ3z$09Ov*BREk596R2O&(2RJokOUH%Qa5_s7w@om759MLUtsxK*iI z#>3S5$0HK_ZKiyFjA}zHxr(b|c%dg2I6S8bWzl{D6PgOd4^{CUKSr!8LIYmZI~km4%s@8(9vcd z-ANG0<{@yPPp$%y=pw}a`K-Co#`#b2-ZfwBq8F;SYdmKT`8A)XF}dZ$-=r9`L1Pn_ zF5I%%)MR0EjQ^NRT+XF><-B*dO@iBa?rYUsx(2VG4QNqprtJUriQ#()9pZZ~mBtL8H7 zB}zjzE-qL52%ju{PFwc4QQ6!y1rR7p_p1&K9vh^V!56andz821=ArWh4flLsMBpEocX+he5QbHn3kK2|Pi4 z#36q=aP2=HsaRWR*?hBR$9pG;n%@=H5Xe?il3?<`QiE;2Qu(;SvTH3WJZ2%Kd)^on%{zn-hIH>Q6=m2%@9t|bBA^q4pMuzPgu?6Eb zt#Lf9-vNi;sEpZAgIIxjsVm;D;iu_O5VW=^gYuDbh&&=nf=i> z<6=;GA(rj1_8eMuF;50apSWSMw8r>a#V8)Bu=}R{GY#bp0#p0dIysA`+ z)s~B8OF8)g@ZH670!@GS=wa$rhLO&<8yJspTF5QHF<{Y;*7I9%fS=vbA?^M|a6s8Y za*^VxU@vQ{sIhf{?7`#}a3V7!uiwN`A1Ux61TI1!oS-ceoy98!PPS+o7+F0w4L20l z;hodf4zMz=Q4ZDY8)ce~x;hE=uj5Yt z(<3^0UNk(ewr;uOE8XX|Ck<}=X_ty%8WjD0f#6i3QB=1GV z?NkK#YLSLh3fBZ>A!~{=kl6`bLma6n{IPrg;6aRa>;+jo8ss`3z`G00_DDUwJO^JP zL;mGg`x@*d<9DBMXL+8o|MO50@) ztOc~jsn()Fyu#V`n%GQ^L$&|4rM}T~Yw0Ub=T1WOs=Yr192D= zrPQ7shKj+;6_C{@{;<+TGNuFA?<4s!9lp6?9Z!;e4q+ zq@OO+yjgua`h+|4KjC=zJFOefOX*&~g6;4oy~!O0A;Pg$F90L$m6jq8!D*_UxBcx9 zcMJoi^nl42ASkaL{zYv>XgOWI{!!JrS|uYsK^~qcU-NbAaJv2{7(Fw-WuQWQyk&gD zxSq1PYYE2bdZ7l?LIR0xO6QY_={l)9uL$A4HQ~~V zGN7Jx9E|?hwh!@^4SO1i-0eQ?C7-z1%W6{6^*?j#q^1#NAeH}8db2INU6ldOk#}E*q+dj6&BWAQN5_*vmZVCDhMS48= zmQBsM%X&gD?85@#T-cx^axD!VszQP`+6)}RXZk?Fkt%69%ZhO{bA(Q=Cc>FUP0f-m z9=ut6GPL}aHK|DykmFHaP4gTD<0AI6bdIE5AHJZ``iabYTmosH4MJcwGKU;bwgQo(rPw(;xx)z#e#PdE{ypxIo6ubU@Ueb*6b)ir8lS~v$ zSwIFD0(=#6<8vawHw69a5OgDWGXTb`Of3nEA71`xc+(iG z05`eRVcE2KNZ$*pP+qjFoDG>T^tS^9?^eep-7Q6~_ZBmSX+)&{7>HOCuF zzv`tsR&WPFDDg5v{oV8MgJ^icBcn^5sD}8hU^goOyW1koJGgcy$BREJL=1*Xjn-kn zLD+L=7&2cGXtrg_N~}@_2La5`hGtJvU6DT?n&H2ftE~^YJyAjoLSeR7c=vuz3&7=n z{J{|?VPkJGIZVG;->~^r@(e;QjCNNbbyG$ARHH!5<8AKTlmp_3#B8<-oyomG8HIpYz~?(BPB)g3K=AWUuRQlqXvdlo5DY1z>JVsJr~8ND0HmfL3E z9p!y^J8}+mMLk}S?C7_QMTSDMfm&Qz8J35cI^weh(2+i_KvQ5@I5BZz2X9g?^>V|v z4x4=d#ntKGv3YdhyoHq9$&OfrR8!3UpILhr2aS~Bc^`+uxd#a3-QSDkn40ZeI?@|X zS?Vyw^&$XSN{=<;;i(SmENkPVjoF^B;P3F8yVU&G0T%cpZwQKnxWek`<0Fm(A6Sa} zdi|jbJiWc(l|Qohz9u|oxvCyl%}myOs*b#s?czO@W0m<_W-XNt`xVQ?X_;p9rE#=L&PKw`C3JG!>aqWz5t>1=?xJ z>oqN8LX%bGpgY&%jb$wR3u;s2{xTboO7N?b?$s+eUqg^vvp@jn&H6)BgkjO;k3&xx2fd&?H zH4?mDF%IsoWi3|ZhhF_8et`J}ED)0DRr#4o6}ecUf(P!PJFuSo?H~>5id@ThE;F7y zI%%2ZLSldegGQPPPy<2ZkQ*pJvmH)mM$W{dcH?*d$X0Y6b%rfGY9b^cFGIW8EQGiTRw^Y_o?BmFkJ5_$~h+NHas#94Yv*X%cv{iXZ zC!ozO1J0iQ^L97T;97j!LG#U>N8M*#ES^ckb6dwhuhC3+Wo>SJ{>|pIdD7EPpoO zP;PIZY5pi2K(;{iDZi4v94Daw-iZv=P5I0S*B%<-0na@OuB$k0VWRdXxYtJEEb8E0 zp?En);Dj?5`$mC9Mr#jEBW0sB5X&X{j}y+RO5F8XiT4hnO0`hf5sxmgy0GjE{bus$ zI1(HwY3zdBSFg<(uQSfIyY^x+1EMlRlGgGtXYiLLmBFmP^n~5{txHOHg`qPrz5xW* zd~nm99fynWbTY>S{?Z7k%cEi7SZ*HBn_ov%~c-|gH?GVz8@n$LAhQ~z>%`!wqAT0BrI^ZA-B4-PAQ5^Imw-r|%}ORbiZV`T`Tw z5~|65?1d25gK1>JxqK2nqEdB-pyzNb6tz(NBo znf0EiAiAUQA2A_K1@X?tj3@t#4F*#3NxL8?G@m!+WugxkQF;8J5u$Dji$`_nC0aX}bz0I%^Cg(JEmzuP+;wyPqYx zMvjBhvkGY}f`X5*L^PIS4{qrmJ$2yiS`K=yaF@gy{?vxR1o+U1F35 zH_CxA7~a3H-jzJH2p}0Aso8<~Xj2)I%8_=^D z4hBm;nr092Tuwf9K~}aMOna3K-2fO6< z92!I%w}|KsOCq32FF6aLU9+DwbOMvPwDCUuqg8sDqda3~aGAX1gv{?qN`-u?gvGx} z2xt<|Ydo5>bNobx2CG5L8X_c7WGWDtZ_}9S7O%J@N$ex`mvHGWBbY;r8+&_n;IRh~ zr&*$*Z-icUnAv{66 zPC>wR@5t7!@PEs4FPQmTuv%w^tuI)m)e;}H2wDOe$x?`TmzkCZthIh;Y`OvPZ zE<-Vm;N9sO!7k^t+@foQe;Y1Ff34JzompSg(=(mMk_#)$z$`FH;Samc?WJSVz8^9F8b-< zntGsIgtm**NI3)O0?M> zFefKQzdb)EFR*p%S32I5sJ%ZRWBb+|f&mkgl{LOy==D$ow87Jp_Np|I^ZDSvyDdn5u$KzrUUlRkUmKqb-nKCaR{@W{pY zVWZ`%U=z&V>$wI=R^bK7{?En>SH<<-HNCl8&P5C|n>jmBcb6uq)a7CRf<-X*0Vwys zRpc)4`S`ViV%Rm<{KO%bt};NPIB5DFV&mlOh-s^Ry$1WXp(43|BadyqE|AL2*k#dB z(Dr6G85*AemB1`S$6UrI9fh6Nv08@U;P34?i;my^=$7i0as63@>ph}?r<~+nHB|VO zF;Yfe57i-KQ>Fw-@?&{Co`rEAp)y9v`07IfKl;|NhLI~V=t4oM6aYb#^{(Tee@F3v zyRbs5@T4RsGo2iQwv-0iL-k-bZLB9E=a`SRrvs1RwYF+{BPze0u`u307CGCfEqhlt zAesc;#%(`ORami-U>#~0ILJe6%kMHTL?$CA>$S>;`BZIINAv+*L5iY&oJH`A3Qaoj zfF6=PxfUC`(5Hjs&tqZ`s!rP*Fcwb;!s|Ers@a5J_|npp3VNu7;OYS-zzOe4$vkT| zhLIiMi!NjsetL!(j+z*F#{7gT5jSEz^-0Up{@Ly<&-O7V?0JHV5{Zx1Ib=w>9)v;Z62&W zd}@jRZ83D+vyNv@fokjNvymD>t^#NA6;YGDwKIRXp~Mo*>hrp$ZY^E843SG>b*rHX z_o7T2A+Ev4$Rb>wV7%8`Q+LmMQbvsI)M(7L?dZPdX=ix=ON-DG4^pzHWf7e}owf@J zPmlDmmw~nJuXsI%ilOM|Uj~w@FXJ>7X=?zro z-YRs9&p#RjwO6eJW18QgPJajM{qkuYDZC3TEa=iPcHy%1{b?1TPS#p+Kkvc{{k3VH zGX9;v--R{I!Eq<|pZSo$UHCdi<*i?wzRTvGx{EbCsH*Y`@C{nYEK{4NQJuD0y_GW!Qg(Ac4w76TCwgW?E;^w_)K@I)A9&@8)*~}E|^>ODR=EwEYyEp+8qHxndkd9fkiIuqaeqQnMr?6&A||z zYlL5|!SEpXBz>qWU4`m*dDR=Rr>q(1`8sPUun`?@r%-jvu@%MxdoBiYm)5wzVXZ{; zn9eZBG&%UT3k5@UjZfcun5=0b}#8cA$>9JbE)vi|AV%v0h`h@(s=cKS`- zzkVjD8?EG_fj`)y!VpdTM}vJ#v5v!@Q|CD*4cNlY=bbc4IuvWp{d4~eGx(d-Nt{;l z(|LXm>Tu`NB{70&VqLA7rG1khyW7l)kt4fd+MjE3mMYjCMCl%d{WIkV=RsLA+) zav9}$eockscz+sZ1QP-YpLlSVZT@Z8JlHth@&7wbmM`dfdWjT>t2LuiI_pUk6j=)1 z6~DOop=ymuYXA|oFHCDyQ*~*8$m18$-w+z&gwO`R>p(hI-Qt~Pb|LGJg~~oV&Tj&u zV%m^kIdvdJeUdBB2`0MB7qv(e|K=3iu!r5DgFe{Zy`Tgs*Oer!u$LcJqEQ(0aRNb5 z__>e@C`pMoIs`>W#~?ZeQ!vPcWY!WTkRW{B5Nw6K6X`7+IN#WKeXjR#_y2DJ$N@wl zLq|J(lO?+(7MX~q?sYs{bR@P>E60i3P-)UJTOBdaL(Nv4Ue6uOe)S%Gp-{2I8$6fN z0lU$8A7Yz)ZKXQ5L*`O~E`1xW1A2mJH&UyFAZW7C4+OK6Om9W{;>a4x6nBG6%BYHc z^@F_ierk&!SP76>oJZ_LHY~vcLU`TE2e%2e)7!zO?VkF`V+IVtJ5mU<49ACB4A`E&=uN;GZbTg6k;IPsg^rKIVwrZJtDZv(vnIpC1 zyr+{6>9(GF#d~PfCf9|OhDITTV|=u^3`R;3{LB$C6{(1QjbV-%0!r#KJep4~&go=L zjA5&u)JiZUFxV6_qn+Qt9Sr;pB#^T7#FM9xTyOVUwR!=hq*@xwbBBqgK#U){MO!eG zG0}-Sg6mOFk`C(gIkS-U$E-p3TrUbhMyx|LJL-zb6!uxS)2itEj9*_#Gr%0v%m`mg z=?XRcu@ZV$#WTVV2`$qy{drZGpD44g{WJ_7Q`X44>i@aQNp}l;5v8`(zeYr^i(NFX z|K_M$MJ3L$5(T>$G?mrgkefgqoY+};Utoh+gf6pJl$?T~M zk-D05#5D#Xwd5#)=HWsiB&S`YGtFoOb;RT=8Wu|Ya2HzKqdO=p@}-|o#a=ztvNV3! z77%CjXL7fa`oZ>WPlBOaYU*#XuO3-^$ew+I7Ja686PPtnaFbZUQ)+s-9P;9({3f3H zd}SCF3qq6``%R~?L#@Ct99?1yKwzOW;u?i&%Eoyv7Ue$`>&mocgAD?ta)Rb4Hy2

    |++RMwsw-kF8#RnIu}bi_^qY5u(8|rYc&0LM8SgFFS0Rmi zB`2vO;0DDZsHSa%!d9YM`}&8dSfaC5qF04#nknvf$IFmSKYu}?PC*<))ySKIV~l_4 zi>isXaQ_6}0koLK(q>{Sbh3x}0U;&6d;5Y3Kuv_k&!wpt%Lcn`42U7S*v!yBiFDY!Y(0~of<#+pSIul*akLJia=AMR8o;Jo+e$_ zIn*N%8&t=4dBR)3xfR+ZP90nr%xQPd%mdk#tLLtp7;&i&{`f+5=9o!o{R9phhUk$hO5WE(sVLVB}af52G z5O@#tcUC@a#!G;Emfw_7xpbg&>q=+q$@b=&)?~OO@%x8?VfS{h#|@9VA62w_kYbNi zX^TnkB?H8H2~ZR)cbVnu(DuU4Ka5DXJE(%j*hUfk%#~7vFNv?0%S*|YI~Ak<(Cffl z>-QQy4FvU7TR-6MD(N<$@N`R^fm1j0IhY3GFOswH9|2ir=6Q z`f#bC8bNmECoLwKuS1z+yl&?BG6!}u9Dr0e=8-oj@1=d8F}}6mlqG@y1u0_@)Lm>u zfIqi3M}7BmLaL1H+KawzOp>yZUEF4QW!8&?= zLCg>X6SBmq@R)`DkwsdacYG=YB*vivwO#Har+fB$=;Dw=cmMiI74diS^80s;AZ{O4 zd<9Fv4>v+Qt7ggf=n9FtqA{1;qB*z|23jMJVfug~gdp%K%TG+93j9f|T8c4>gtb_w zg_t?EB8JQF;SW9S5q56Fpb{;Rv`XHw*xt}0jp&DeJK>2lWlL_TWs4NWPlF`&bQ-@N z;78#e&BV0mq|rcL3H=Lkx|f-s4~ih;Fp>JMX%9$mPqAOKg(P-|(Op&!v3{eO7oQe;k3m zQ4rWEzHnXbyRHgV_y&8vF~N_Ihip22Rv8`Yt2EAxNzA0`-Q}s9A{&i2T_et+cizq5 zDfvZpi=qcTU?$j091IQI0kUF69Pn=O4rugX@)<4(1@8FYnY{+@p4vkTy>1_8d1hjl zxPZfbiHjiE?pxL!kH+_lXf<(qCM@9_*G6>x#|QK6sh^KSBud(nNxz}o%4JC-f_G{< ztpT^EHc-Adl#=Ekn&hfgD{rG7)q|fp`j?en9O2JQl~Pt@L({!}ttHMo08$*}vuCiH zJ_O7aLptI2yAmxmK^CkxP4sm&e~bCs&zp|q8QvHD!1$R1yvPSNx2mvfrO#Fw4-Ajq z3>25pRu8!f?})Yy_3JYX-vH3V4oGa#iYic4r z-}p8|^FHc5eE{Xs7e46e|E=Sj_M|wOan%NWAh0moVXN24bCm}+G&d`$l5J&tX=w!= zk5YFb#wf8!>GF!!6jYPlHh%F zpZ}?6NlASxJC)4XhqY(dUv(gpoi=^_7M%y;OgMgM+j_(WPS4}`2QP{EAv+^<<%TB4 zfcB_~8<2|9Y`AXz4s?eqm7u8x=W+jy5OLkqrk(WfMnpB9_}f=6iAZs7$xuD|m#2a+ z%jbpgcW}B%?hY{~i|dEVECmC)ef}<@H!vk*N__S-|FC;|!~W5RVqKi2aw~(P4nc=< z>30&#%q0l3z2xuZ^2qdhNwABS{}020)a+hfQKFZk5D7A?Xw9@O}8 zgv8;n9+ki6jDJ>^wz3|N?I4k#A z9WQBM2@>bDXHpcPeFABHzV7f*;B^;yQqm6ts-g>+aHgQ`!goPbu<;!<2@RnUaa7A* zz)su_S}oUu{3T)nOd@CV^HqqT{~Z`$(2?f6eB4b8?1hYrWkpa4F$^JmR6wnpdAL{9 zO92}*OK-u;nmgyVuIC&h94Ez$ns{bh=&R~1PcM|;nHYFn$7ld z13z_gJW^R_?spbrlrsi@<*M2=F0ZXhjSA4~fulm3eD>Oe8L@>bzQ3irD7W{;PuUOl zR7GnE%Y@+-a&8IdcSDvj&CGn3zG0&}!W6iTepNngbRpi5nlo1A+QB@LO8p>qb`UhN z<^0!$ZZs^J=QV-D(v<)crqI^EG$+W`5B42Yv|+dG^8_MQ@4d-R#E&t(1(({=1`dOV z9;RxUqpsq=?*b57aEi9PW&@5hs4LGzjzDMexzLigcB%$$OWQ>>C;ZXZ!=NnRs z0gKiPF-97-rP~O{*3`k}*Ux3VoJw84!1Q`oJ6gGrx_*80F_4b#V;d^AVuI+>(WnH_ zc9EH#Q^!GFoUj?!W>a7il8vinQChw1VxLcsxUT@yN}05()#*xMkZmyK#B|dJ#?vzA z9%aS!tSS8%kyM^-$Y_A-9mb*(Ibua?)W1zH%;q=5-AA&d-_f?1gt-D{4LE2PL1bkS znnadXCkUbR*pMWS>Wi>5j|kWU!@(vT?}mNd%`F%xZSVsJdx@VgO2g#D|`aYaMx-U5TP-;8O7a=uNZ&W#XKr2w*p zs2v!7mmSftewIZ4Hqe_DkN&~i7B1rXEK1x$JHSf16CLWnVqd|2c=|+aWF3}LQ0<|Y zf{u-ydGAQ^`u6^&oCszuSyz6|wD01&ZiHmVBfnjY;{D0Snp;(UxOA$z4UdonGO>a3 zmzHK*ci(r07GS_~lq3aXx6HjLmdFc*_8em7c~md_Z*-TZ(l@ zc$n&5ptWQ0(0p}G$J-`zRlUc!jkMsOeLdJ_m?}|E$6LKsI7ayh?6$^=-kE-UPlh;e zu<}W7`3bRP_6i-WnMG->$yi1_yIzVGYUlN&J(Ez_3JZ8&R=xIIYoB9YgPUa`!2NM2 zuj&i_{IAQ2sG&Rk^2O8HmIIp)A?0!%AayoX?R9u7cn(K5+oXN5)l6!6RY9;4uc5nS z5jQPYLi721J1w`C^ea5!9p&6tsbxAGjx2N0IfiTs!9E zqnNR=6TYq5J&~sg?)1i+gLZFhN|LgPKYRh+k+<_lgfzsP0lj6}y}JJTh~FvY?Hgh~ zd=|pG*)!MGEvIAGRU@c~%-kn|<6Jj1+VYIz((if|LF61_EG4G|TuqP%pz`6BfYMVF z+j(U|6A3WfawPzZ(&_KyU+9H9;&14)l*~leI-D+|&@|#vqYEEiJEu?qRAB z0U=%-U-bUspG!(;T4>n#3D{P@Sz>#$Zsv4&B@yZ(T z-1*4tmIystk@v<~wYVZd|Ji?;q%gJUfz%r+`eS&$r_BK`#r|cUM5UTE*{DxG!fKH# zZjyc!dTTYV_K9I?ZV8`%x=3)8{YBb$;!!Y5g2$+2PAg75(cIrLjezIS17q!zMm#e! z_VjVL@l$@ZeS}{}~lJT83yR?JQi*6x!{yp>I)@5u^*)3}$c7+P7E~D<3bL6LSe3 zzD%baYF<)enxT_#43TU*jBYkSPfkxJ+ zMEguFHFzJV2m|(Ju-w7nzt{OtIQ^L!medSQmExO9Nt30;fBz%~#H%eRObOWz1FRBc z)}cj&djVN~_+RwoWBmbbdqx#~#`J(FK($G}%KDbEESIn!RIQ&4>ja$CMh7t4N0Il$cf3F>%Q&p=;zo zWKA<6PA-6Vj7qy?e1vhAu!3IC+K2+t;L=)Vrnr_;H@^_Kjk|bbb2D|BhKUx z%(-gSd50~&$%HfFl)t=KGi)Z?VvG*te72V{Q=j}SDRs?ZcwlEk5e=7(;xQWT9V_F| z%pML_W7poxKF@J!oWKE=MsvRae~7a*^EU5vMhu3nkY9TIpD-gI zpEonRZo;TD$fPmVXT{7@ib{<)=N;@NKc_UiZ|>up4;l-3h1{Kl3e{?fLImQ3VpELX%z*u-b{R$|Av60(k?o46ziM zusqBF7aZ}22`XGLOSQ^9qgd*>9bUVsP*eM^DF~6g9JQd6t;>En!={U@?r=+Y+7r3; zn060v8>Wt)X{&;xZ^9V#cKpkhMH-;$;HYsuY2UOu#KPmzq_X*szvvgv+TO1Q+bCA# z4#orNGkNpLt?L~bWdW?OUWU#${had<;#>};fGpci30L;3sU>8yiUGm6x+)A@AK-(j zg~R2i`kV#YVs_BGY;gaWR{HdN^+k( zM+$L{?q`gdgMCbUTgd(|38No{#5O;-iT=-3D1&ZxB{Jr+%G!09eioO%&rxd9Yx=+E zP1nID40FQQ?2hPj4K6JEB$Pyu8gDRDIFT*!rq&c=Io4?V(1gcM zg5m}2bgxV{=Awtz_%sr-&zx}SJ)o&Yh#iM3nmQa=GgS%KavQv%REJ14{~{ThRVG98 z&Qqb=d;y22$rUUs)<&9MDA1M)hM&B4vg@1_YIJ-ms*ISc*+_&eHI*{ilnlCDPtn+o z99BUf$-WuJ*;Ae4Io!hpOqnsz*{c_MHTq@Xa%6{2btJdg0PU+fqkMtJR(Ke)fN4`K z6lEkICotzBUEE61R}aLQuBg*xC(I4cD14rxKbwiV96?pXZY()vg*6RR60$K#cQpHS zH`auWkkwble&ncmXVWvR1m#P_^`K4mN)5$rt!HtT2mIqYIHGI8Tu)9_4>gH&Jg+5< z#%zA_CFFEDCc#AWZueKN5pNqCl|MGW02FxwHqm(7$QXN?h5>s>$-Ue8{qDXIpRQ_h z=c?GC`UV0m%&Yg9zz_^G%JGNF(g8HRdZ?LLGsfyfqHt5>G={qORYb-qP~7Hb_jER@ zFMnQjwn&L5G`XK!RXRX+9BV_C^F4ePqpyUIgIxBp9H$UDkZR^t<<|Ph1>Np1R?-KcdOB8) z_{Imz*}gwk(AkTZ8D+W1-ylG)I<3P`IOeTe`pq%=Y8nv*_Zw*>3sW zS>c{}G0xV9)MH;cSh8Z_Dug)ugo6gmJ~SN{gP@>p=%C8h1k|88Z2l149L&5&M#A zPAsA@pq4oTg&d3I!*mO5K-l0rz_azO z3N=eF5+5pVzuMCSru2+GxkCPs)?PlhT36G=O`E%d?wNDsSm?I#Q`Wr0ES z!N)o6fR`$mpejMV!F*g9ZW%(tP0EHRRVGiTVVX94;%?xj)V@-n=X~?=M-wesroRbD zsLPYBK0td>6D_LSXHvU+r<|8zs>QCi3=0i11YZaoPzrKm=g;unY93v4KfnUPQ8u1)5zdEcQt& zEPHM!nGZ@XJemJHdD~P^zrO*|ixA6sz?C7YNFY#LUHmbz1PNx0<>D9N?$@u%(cJ?4 z1-UvBk54ah$+awa`!@WErjq-ug4l`SV%N@DXU;YB4rA-f`X-?hw`IUck|DyyixyHc z`g2c~pG8CH!oTyqXcg^p-K~5ei@aKb{|Wv>zyT4OQbmC;wzg7fk^D`>+sU#VrnHX8|Ib zE<8=qhu6kMjQQujAhO3QxE2m460Li5?q(!o&`O2@5|O6M1RWtu=qUiWcpo(ZO~*tG zInBABwKZ&(hBBcy zs#;~%c|K12=5n$EzQO#oh>qxP@Oi*^fqFA!ywZm`;J#An+pp&uu#rlORZ@Tf_M|LT zQOAsMuy8`sb-$m7q-o){20Gb&t3VUh9ft0jVn)BFmyPDHrt+657L81DG_?50pJ0O2 z)C;*^udT$0_i28^nKE%w6=;Woe#Y>?DXNyCXfeakZ!4ny-H##?ihv4|VpLqIuLZaR zuIG+Nj{~D}IF+f0wPcH>E1tuWuU!LzAHYYvUEPd%tw)tM{eb+iycRI4RecWOJ3mONw;FV(AsH-I@5v0y*U~|Dd4x zs~$!26z&M#1odT%`b*>%Vy=Ml7^w8TbSSDA`g~t5M4O-{^VzNY61;$P;jgAgH+nF# z8G?K*ryRg$K0IpLtLdgZy}x~mt;#~y|IQ9t)me>3Uuq{Lj24XdoSx9KOXnp0%)udP zG^Lxbrv{KK%naN820J@Ow<9n>_)vhKM8p{DBI|C-!n;hnl^K(_u7w+pL#2jH${1a# zvr`Q*{uWS;Q);lAecwo#9~4Br_Kp|@($cwxYHY4mSP~_P0KRL}0bw9%bWfJuxxf`B zmo_aL&zU`ocF9c_)CCV;lR8lVKVzZs-KylC6@s&gwQ#~o8qFGlUJM?nP;3-vIC5v> zO8t&wa(-4+pRnw%3HnMk`_CYcK?RP)t5B1$9ey#QCC0eMohVmyUzzD!~>FS)o zuTASd9x|5^%uD0VBbO=x1PP9SKfs0QDstlmh;42rO{;|Ij@H79;2Kw^leXhCCcg3P ze{@K5yo>VipJFyC_qE$I<)G5GjVdrTV7NY-baIYnUa~ zm9~jI?fdU?=vJCJ=9X?sMM$!)#NQmU8*##Rg??~^J^Id2+s2X~hgd-3J_z+sc)R!0 z3faWUD|C=F8aKVco#NH0H*B44BiQ*6HHP8w9&ZL&53>LI!l4n)D)3hr55U-Y^l{KJ zZT!Z~O#;-7GJ5h8grQ-wO6$Zuo{sj7CA$q^j1#0j<%SHo z4$(CfsJ@0qAZ)c9gqQgJf@m`hLrSZ9Zi4}qwu&h*r>D{<1uEcsCls-qVhxUcxYS_k1eK#w#I z(ZFu9!Op#1X%jqihp5AuU*H)xxSQ@61mQIS1ABJ;1*lB`OJTKK!f*_1y&EOP5m1H% z^%p)z>~zd~Z#1djuQ^JZnQA|i{f6=k3P!}Gc-`I11e6bQxW>+P)h6t2vEt!*ct_^$Q|V6&KrF<6A}htHN>X@w z^){XNYYjWn2n+zabJ%gD54*1LR6vw5Kun6O%+Nw2&p-tVDfU$W0sQ?-CL4$6x*uYt!=&8VC)EUd_V%|QednxjX`Qwd(n z=nhf#P!;kB?N7GjpK{*Bu}RO2WlC+-4t$SiGoSB@w^5j!Sct&nIWU-VoNjL1KkJZ) zUrOqMKWAS)=IGMx(s4WulRXT&{+UfleXQ?@WGt@Gd~k^rR3$aG%FtO)A$C3eps1n; zrHh?b4SVC@0On?rS;;9XpzvpiuS@D3wT&h|z8MtS^~kX;B;t`+9`tF=jB6fC5HPN( zZ&T^dL^8feN0!y>0b9OQ77?ZA1RC7+muJ#8A`d+^wold`IPH(4T17gp>ImH*%@`Y~ zSN9YnYf3L4-k{=}uo-wRSMQuXf8E~kB;{4nhva`(nM&&xTqhBQ3}3|_xsa%jc1?o& z>G7$TsZ6BjyhmMTY4uE6_4>PR3l|yI3A!7S)cAJ&!=g6vobh)z05eR)5JzE5r;i}3 z`Sqrs-pxbQa&rEUm3t^44>6hGxk%Z*sw&;I9}|J>y$M)T*VZ?_&p8ZX1{nlo6s-aZ zTD2w>YXEBzai-O_wqmsvMI5TP*INM*Y*m7_5n6kVtvIxD65~*?m2{AbwJ1&)Ywd7* z1KP^ugcGq~zTe7#XziWe@A=>7d;TvEd3Me^`|Q2;K5MVNroHl<;CyaW>XMt^z5L3y zs#Vj+&p6>db(^ zf3d|lWO&MfFPE0>mm1$}91|GXzTks3MNdRNQoFb&a(%Zy#jdJa_Q`LVt!sitj~bNN z{!-1;`H>s9oD17K?8MrgZ`&_hir*sl%a!bWYs>@#Y|>e=?C!U$?9^ZwPh>;s>OI1m{) zwQlB5S7%+(dHrSXl=Mq4{ppJZ&)jTZd*S43n&yrlAN$kfivGzS-{t?swJB&(&ep0= z%9F&_fQf0YBm1}d7}icu?w-B0`^c#g5&c6PTp!mrF7>(XmAChkSHGKlF2-lE{mr(5 zpS_#EPZyec*gebZHuc{Y7o<;H;rLv`$0IiA`c;QG^*Ho)z$a%jK4b0cTEBfugY<*C zN7}O-&Q^T(LCNm%ms8q5A1hAY@*;xonntAd zT>fs4zdU-~=ZBL$E@v;hyEeo^x697LeuKvZx5KUbL5HK6NZStE_jVU zSG(!9Z>vy~|7!oNif_`-fAg*13r!p1W<47J=Lv5#9(p!+@`NEDfA!??DH*HB*~R{x z+&}oMGlO@k_qZQ;bw*)sM4ww{2N}Q8wHCy@9RK6f8B6z-?RvUSxhQ3^>Bza!H~waS za>M6;oBWA;MSQk@>Xf>m^=sa{_M7g|j`Nbb7w@|$Z_!K=0d{aR$$b7^<|7K9z# z6FTv;7q`#I{&C!6&3pb5Tzz`#`Y+$pUk=r3$7`e``W>J6XyBN$NkGb+N+$-XJKDMS*I(Q{ zM|Zh->~|U8FDVzk82Dv+%6IGDnC>zEkmB~PwGQ}=m>;ASpZYyE|6oy0yO(dr+*u`|9s5rpGb3B*KaWk*_iyc3H~M_rOP^=IsC=(`o8R**c((bSwe>%J?8e$vyrau1 zcQ!53;kmDMF6<{`&MRO3g|Yo-Jbznv%8?!VYy8vc1$L~wdq=6n%biso82`i5qg>gx zNB;c7<4Nq^AD4UY`+xY2>mdx2^Nc-(=lcdRHVxmUD3_p=qbx+3gmOE|X(&HOxfJCY zl&ev;pge@qRbb43vKLDKD8^DzR-#;jQXb7%G0F=lKS!C=kFlRnZb#XU(zQQhL3WG{ zMj3~46Uu2Q524ILDUSgRWfsbEl!n1*3uTxL&)PHg_T!B8Lpg64V<{-p;~1NTGVV#> zk8%kHw-aSK=I$6upRwo{<$jbw4vdwI$8#vJK7&3`&YOb%P})5Y98hk0fw3DXv!>%& zN5-ntfGf)FGcit-uIadk(rymwqFk7X=TN?l@&d}AUd3|~)cZ4VLV4~D^g-pDm=~1& z)&Mt@#VF69T&+M`P8h>_+(T)25A%W2XDh~o@~7>nk8r8+z59^i2(**w=^ z&ky+bK}zO7dhQrLdmd;HWXdk!Qx3S)4PVk+gVT!mV!L-7-j!@{e$VxkC>TfVm%AFP8h8aDNu=Pow*2C#>lH`=8@}3GSy`?_2tj zn0ul2f5QC++{Zr%?f&_q`|Y@Y^&dPR1pXk6{Nv~2a9@u5S=4^#I4%9t`yhU_3HRgZ zzV(mZ2l1y$z-M7yKJ;Csf{BGJ1%nNQ)J6-3C@FhOz{}|?l?pyz;f8vYnfYbVBQ@i#L`mtg_{imQ_ z=?Kgj`gz!V&%^!7c#MPad*FT0ycFWTApuiD}sZOVTu~ zE7W7tT!SZc(i`6QCeIJLy^qLH+=@fJ)oF~i;rqkdnTGpmGcZU0q@9(hxBX@C0&3?W zbg|ufpZ3Rx&QF*3Ncf*Yy~??a4fqHB(!A3?T0I}@#{Cc4?K1DwZa=KoS=snP^V&&o z;G+-lwN%uL%R!YtSO-gRe_^hbZ#_UagjX@{@5lWc)X&4{;eqkeKA)9`_lfc!(OC=b z4_Je`RPSN!b{Q|>5rlP+wGRB=>7Uo9`AI?j-1ji2X1a2}$EIkTv2JF>XO^H|my_U`A~+i`z&0LP{ho!aPb(>;6+;eKTw$Uo+Jzkk1`dAWf5hax$) zn(kZwX#KVWKDZy?)UU1GcP#DFya(aEZ|cu6>3#QqPwyj9Z)Xh0&QaSBv_t*O!u?sX z94n{$56l?IZ+b7`+Y*RIOzxr# znZSJLx>A^amdXy3sXLWvc%4@Tre=KTS=+rjx&|q1rDq2?DiiR0H|z7;0GnyOmIUE< zJnY$`I(qeixsyVf|Em(NnupkGWqiou!rnpBn-fCE4Px zyiRy?mBR@psdHB@=b4eiHCt(~4J~ACU$Lae(ye$%wsS^G z`xbJsI_x%Qmt@2#@eb5Gw$lqhdk*(psLR?)^8 zT4k)Vbq@O6hi43{I4xUI700hQ80YLIHyZNajFa@18zGb~sLy{Rt|^)s8+JR24QShM z3sV~MSH~Ih*TnSkD%k_yK zl5w%w?kdwvz9KE#MfDr-2+wg<3CHB?duE?d^~yP>s^d6KW_FEg0qVb;B~c|XJKfBz zYE?9|*Ob&&79}u27m;178kp^+(snG-ugrE;J$b68=*{e7s*Bm4s)4+nrY`%GY9@2g z+2Of?yrYJpof(YNX}u)4W|}bOri*W1qVLb!Yx2+!HVIu_wzDcR%Sm-D`>4w9)bXN( ztRt#$CTJMy2|1_m9IxAYe4##^*=am;s2`^L1$~#STB_}NEUPU1^jAd#?=I2HvjS8j zv%Xh(GEYrdwv(zJc;y4fF@JUFH<>x> z8qp`Uf3o&a5r_68c_-Zo%vo;Uk+_~{e<0ef!#gPCc(k1#m&|$T24ap2IS)-F>LqjT zx)On_jmfE2)eFArfjJV@_}XJdePt5WoFmJrJxv}r`vVCVs!K-wNIa*>f4Xf&kpDOd z=d4o;liPX*<9qFqBJm6P`sP^97#0*UuBiuSlyFXpczkcrFr#6WlQuhy6&tD?lxDgG zPB-vCI>Ar9nCh(>t9>nzQ?{G(Cz%Ak!ldCUs0~A2O#pS$fwOrj}){omCd|#lkY^-PamoJ;b?Xabo6Y!^LF+r)f3H!eU?itlS{ z$0~NB9E(y-_fTq3Mxu;F{|#k0!f72#({4X81>;D@nC4$+vzc(E~doOw*{wlOV}8)-aaF`g*&N4Ts*pRO1aXs6&v?Rdq5 zW19X4V`?V6Z~BhUiJ6Kll*wxaM_oV++>$0DRoBZYN^RupAdv&lB?X9M-6iQ=_Wnm}V^2(Kyr@ zndMLGUzd<|PUVa>zqhuwD4g*+9=yd9e1>?>Oz^N?r;ZlA41Sf2^>8@bL*>Z}n#$~x z;9K^(h@5k{cF+vW@mI+i(`nuOaqXq?0{;oa+IIu5nt{HEmsDcS(waPlH5+mIcu_dk zCS$yY)_y(O^W-_*7VsYio^-|BkC*Nc`scuV82E%I>J0?%i2(13*>LkX2aiM?otI4JQFb4yer_O-2{0heHb-K1_2F6WoR$=U6zQ29&5ru*#O?+1b#!bWdN1|{r7P^?nwg*}SRi#oQz_V|!tpG_ zx*@vCz&`dBXlhO;O>r9T)Ui&Q%EkNM3Yq0$H023=?$H&ep*<{;^VAKn(iPDn(UvoR zkG5=d1-j7@JrNDrXzD>)Ivv7_NhWJNne%apV~(~vTRABLbl7+x=VSh5$a2DqZQ(1= zk7FzA$N7N{(?M6h@to4&$h4)8$VD5!Qpd!L^`JA_!(74ZXifC*NZ0p$e@WTsj%oU_ zndxP7hEFS-+c81k6467{Jf0|C>JucEK9V3lSbq-cXQF=7pkVO`o;iwV8it05jnSdv zN5Gf(BJsnneDHs1_WygDC4Tv@(5&G+ue^_D!K?l=n(fh6vMNs78#G|ye-29Gd*O5q zIjSE0SY#_7@VCn0Bs*hB!lZ@u3^}#d57l{{E;rnd|R=bbq zYE2I8T2iAa)gXAQq3bAbjDHfk&q(M%iQ=8v3DAq;#g1i%OG&rts#AT*SaHX)FQFq@ z^d_5b7S8`(H-nxOMf#bT!isZwR$eD~N8Nz#v<25;kcnsvH^x&x2Y=VkcJxE{KS13Z z(1{+b3*GDO879-7m+%QscTy(I@=!|lB^VheH@<^s-ovLWp4SCVO?}S*9;=~)kse56 zuR|Z9&6=d{;Y+5ivJ=Sf!(qaU;$?c)w%W z7noDaJlz=2i+){nQR<)c$iMUK+7R?f?`OJstV|7=#ymHeFSEQf2k>`+OEvFZvl_U- z&H!9!?h?>G&0m#y{?Z*%Ecjq92%q%d;rIJzXpXK!rY7B)=9F-fR3t#wmm4uJ&AD(B zd6Q`Y`efR{HF0UYoi>dZ@Zs^{@L}5P*o$rNu(MAePcsg!ko{;p|E!-%==L;!wzk4j zm=Dq3gY9*#(;anaj&EA=r#ZHafycY%)Hfd(iyUK-V2qnF=aP75rGzWqSUS!H&&!Q8 zm$rEbBM$MrwQ2kXFw&l%wI z-9zx9ISI>UN}8W4+^6?lg7=d?zwq>&Jf=*F+1a{$5+|;nf2>vFW@t@+go!lgzn`P~ zY3*TkR-oNEXtyuuel*%$gEpPeW+>;>Oz)ewv$hfBu9P#2UC02uwv1surbPSNj%6NV zN0p##&u7Lvv%SEZx`E!k!Fzl}ZlHxGZwS1a)^-@{>rbS!Z-iCJYeApvw@QOFd=E5m^ z;JTzY8(fNeV*c}O2FFCLX)>#5^u}7w&x_;TTEP|yr?MM(^pg%PX8Y#L!ce)xXH#P^j!7w^=Go2AvfA-4rU#N4Ctu40NrIE?*m=Oh4diZOivdT4?7a+HiMztc|q39 zg}l_l*=rKXmO(lc>^CQ2w;2q5uh;2gu;GvnC75-nD;%%OGwV-wnndV$$&%$;y0J3c(=Bs{~Ts%+ng=Zwa zT~wZ@&lX+j6EDK{rJ2~aTu*w`*LZJ3VVl~M?WTg8URRRkq3VTq;(-3ht|qDdu4qfv zN!XW|<{bJgL4C5FRiW>-%wKaAwkwkJBeK6%_0G0e{fc*a5&EbUHZvpi)Not}X7Q>I zF;=^*gU}fRbdJ!iKV*Tho4MfHPIoxSMYRVw{DQVEcDfVLZ~ZkN;r&rxLYBMgL%hd6 z=nMBXE1?tEBg+l7J<8msqb31;tUz6V;Qun-U&N`ZBD%jF?{5d*UmkSlUU*mb7|XA) z1@^%^vJ>nyQq2GNrw$eYKiy%}hiy*N3-4w&>|hzS zc*msAKZ`X(YsC3W`T7+^C!paI9H$G1&U^**K)T2Yvc*x~s8?BgvMBON7nKG!hG^!Z zse^76iFbJ%^~`!Rc#Q%2a3trZBfc{Ox=|$b8--Pm3FKT9k({$x9~Q0p@RlB|Si3D- z6l1f@wjBxTO1Qw9(Y<|C{eqcN6kce{s7+B60@p$=pe72o9uc;yOVDv7u>D9lH-#JQ zTssH)s4^Q?tj~mf`I4idbuHk9kPCO=xnrE`QP6k!X4rmc?{5%7qgLCo!Nf0NuU9@A z1U?4+DGa=CtH*L}ngi3mL zRO|(lu_sJ|ygCtk_js{AUv9*{p(MFMVrP}jHhC!RfZM%mSF>Dl#k{9~F5b4v4!5T8 z*jHfx$9|X>%*wB0UrE5ebyKj5+6;d~U%T8%krMEG$ZFG>r1^XhOQk*3Z2L!jlE>h8 zh`KEZYAzXab`UEs4FQkFp2G!W9-%`vL3eb+`zJlHKlH^|=#8bEt9m?iz(vsgCO{vQ za9-+#&;=!&hg!mUs!MyY^2Wy#M1w=3NH$5Lv!i(K2%dLopQd-7mtGbfH?1tDeS$t5 zeuFUZ*{|?k!@y7LI791Zj%!|ny|5m()Db-2OmccX=T;zKT_iBig6T|X#y*{@3Mph!VC28iSGkJBLhMIq1HC*(B|Lqo!X4YyW-JiICCi&!FY3< z?r5_bILE+ddIaS-lt)o!pqx+Z0N+p8v)U7Q|6zC2_2GBZ^gZuR)hh#;Y~45}%XMI~ zu)7oVE1a1u{BDxo>+Upto;%>(n2g<>r(fZRD5Sfy^vXw=%vq zPscpHGMUNt!sfc}IVRf;+j1`2e|r*>DW9SHsrtPgBlRVjL4(%4#AIvH{yMb(_KSEP z?dLrP*nEOd(64(H<3an%SAhFm+YOF{clXm9O7zz;K7H2Nt# z%4Ge}5AlwI9{@j1@Kk-_Stg4@`~A>!ryT<1QaoV+!Od}H>j10%8SR%0HB-;mGi#`r|6 z`vk08(m4*9^`2^*y#AA?68>19&g(ddlKcam*SX!4u3fLe8zfz?N4l7KMQ8mp7G7cD zH^1-KRK-C?wHG_!*SIm>L7d^l$`9g0@~9wT<#Q$MT8$%1O=5Cc=vQpf4Ek;-myMAy zWoU=6NRuDhR_VY}Q<6PJW!?_E7$8ne+Scw#>I3{I#6& zW;D@)gLoj6Rm?y*Ea?GTQPSKS^5K74%;0bEQAfd!umXAw$@c`?7b>sl4Ol5k3FjM? z#39`9p}39|Z$@K3vCf&nG2XoA)qBW0_dLs(?yqMZ*W2v=alOs#yv_U0y>Z?DT%;@f z!j8qKC5`)9t2h1F8tGQ~L-o_QTj7#7MoHwxWL!JjF=MnH{5bgTB4NgU*q;jVeX~8= zdkH$hawoR;avzkqzJk4SIwxtC^j&@WIOi5s?VxL=d#h_}TCZ^Zos;g|ZYB6-_^U>s zUNvC!9s5qyaeRlY5OwLh4X67XKWu%gO>sIi=1l8lKXt3tzM(Z{=AqUYbwjHg%sm+^H`UvHxq10|p811!Tag`E*vQrO)jirFnGhh_NDp{t3sp= z?F;oy?P>bP_H=!7`&9icz#qB0R9|{N822XV)k26=jr-#DU}CrV&gw7uSukOg01e8^$o%PVm|EUI}8; zc)B-1UpJk}($GfBFxnf^^i9vxUbYlG9ecfX0xoGqJ zGA0w~xjz%{UZ}5Ijy)H3TPD+pnrz%u>r4N%`N@TLjPcd2ZOeSlY&1CS? z%Fb_QvZhr`*07Dq;=8jUThM-=?rooPO#ZPCXyB|L8*=`qg+=*(Z9`G&Ikx=c8$#|R zf#9E~7ghNJ{&~8dvy*>(2Jl2*z&E882?XDirsq7FvK;VyAHcKxy%T)^&zh>|e3-Hr z@G5V>r+Iqkdjmerb28`8luM|6g2zd`tGWRmCz;FzF=Z;X-wp5}<}Coug)!w|z_xj@ zA#ZpA=Uz52;oOfY&j7y7190Fx(*tnA zc>r(*{JcBhzzUkb4kFN!~8e{{$+YmzBAxo0_POq47fn> z57LUNoB;m-I8Ol1fG0Wup5yN=5IhGsrvhid^Cf`4=;@s(0sKYaJQX-o`;LG=A@R<4 z1pEo$JPkNg`+yG&VcxY4z&Q;#1GdP44VmBooM!=NTwkzfL%e|VUi-G8DD{ZtQQp8l zIgsGM`I;Tzg!4S$4EQ2Dz=88Xf)maQfivKH1;ByxA^~v1c?oa^{2C89aNf%UPBKVAp=-u<_QMdLyDDD}Sl@{ezUwoZb+ zcYl#yv<~!*Qt#^^|M)E69t3|st>`4^8>Qa28&iG)_;}F$?reW=4}xb;)%*G}<-35d z1AXs)!P9#@=pN-{-$15(joJr&?;bAkUI+R{IoUUaDW9SC0oMjI@8e!=Lw$P!Z@@A^ z=VL(kzK;NJTwex#X98y}=o_WpH;O55fwuY+95`PBeWTR-#xUhsz%xPjnZUU}!3pO_ zfivJ*(03+q&IH|O63&kSXTUFkzB7Td7W9pBvhU--nc62faJ~fkMmgE{3E)iagT^y} zb2Q+-3BVb!8qm22y7wIgoN=9k>uBKY0=h@3_e}=Qpe+UHI~q8T0o|k2`;G(7fY*S& zqk*#m^o>&QI|(=g?m}?jTm$-!CY+xE&VWN691;zjT?kG%KL?zteb9F_a2^A?M>*N| zMc_>BgT^C)^BT~-?@PcLut>lppnKm}fHSVupl>JOJO^}-Qtvw#ID^I-LElcmSpoqyEpcZu|55P&@;-_>_*od*r?`NnbB9X(e4#ty9?8x(#y`A|PMHq+1L+H$*U&e* z*cQw(ANgI*bnzF2d$RI8e8$Daiz$QUViNY|tJn{(bu82;_e&HF9qIbmASN4t6E#;m z()0uENEe-|50j9dIzd0cmEcMGfu2lOi|0Tll6a(^wWjiXn<3F6ut z>ekE?$KgM5ZN8*#Hp}xPAnUt!EZ1Kl`JZ!ZzQpx&z5+R4%ehBg#&-{&m8Ta7+E%(g z+3Iz_&aGeX8zYaQ-9QM9>oU^(~Kz=FCNj)EWNg*du zHw)3~&G40`K&Lnced3a^`G-R26YkJiQlL+qfZmeKxoS>8Z)t(t-zY??Vb{|%2z}Lb z4gH`1wn0rH^Z@7su=BZU2p;Lgt`Q7&zXA#8s*u1Y1pT8Rp2@XQ{dh4lOc2B2+p*12 z=X}n(r=Q#Ibu9Y_F};aSwPyb&_)OnWtV?`uLZA2wFgfQ6gsz`6-;dc#HtJ+N) zw(#*r>E`zlV}2iq35;^X zyU4`5xWdIaAIG~u++9?EybGFt+q*NrH(VdXyECj3wDcU#nG7ZxF(o?vLqC1tV{-AW zC*sA8u&t?JThqZt_&Ml1Md+da2{y)?SO;fe+bQIH)wf_{EaZale*M(P{8{;>VNZ!y zW+#cqI5)sN@Ci`QYd4j{_6j?sGd?c(xd&5uK}@1pk_cNcY#yr-({klACQe10OVJ+L zHGR-`I{F!keg~ufDd@MQJ2PI|#))elgDnF#lP!3@9`oEY7T1Zq^_o+L;JPs)K_q?r z#@~I!8#56jIFnb_quhpi+wrW~&$!K7q?OAU*iCHP;VU+L%8a>rZ^Y&1 zy&1O@Z8dnuSJ1pA-7*d7Yg($0G%eIOm&wH_Q@Xz7JYQQX1WWsxpl^8xOCwFt%OZlM zQ6}hVg9r|ND=}C)2fRf+Iao@1R_V-ODd}BeKEc!U>TLuk-H_l@^X+cuZ-}+u5Np37)_w_2{Sut| zB{=m<@Fe|~Dpp&uI9R%KF?84}=(T$2uIEFfn(HCb-+E%MF=m?26GK>W8jdE=o|l2W zN{m1pIM#VXi)mjeVu9!MDwrhpEqRsp;G`B)swh0&HUl=HWzWjAQE*outiVjT$-y9b26`2!TM` zBZi3Te4n=5yfty}VO-?1HDK)x!MM_47nGwdmhNS?19o1^oy~T@&TH6eXkYKVw)zY@ zudQ~#P_${P5@4%vg$+tj-pn8yl)EUmlWVUF_U71@p00AOVHK~fUngj139LL9_ZqQQ zB(AxW!t8l1&NY;$vC82D3maV;C*gt~trsLwWZ$DTb^dWyd=oTlzJ?sre;6y?=fJ!U z@ZK47U~{`Mew;|}tz%h=cr%0SQ-a0c0b6QfhiTs>Gmdt^(G7M<_|6xT@7x1&lPBaS zFW6POiMQe7FvYTphPUKxr7o=e7V$fjWLpV$C7vj#XQC|0$2u(|e(0;l{Jbrh;jG-u z*tHviy*iLvxpDGurVS0T@``G!4Xq7$+w6S?!9S{fu^jU=3H?q){}bS+84o+;SlA)$ z%s6imvbAABCF7uP&Sybe+$HRl52`y%Rvt{T!lCNN(T8CW;b4g!J`dOh%*!w6OD>E! z+lCk;+OK4o6FP4E@VWt=b!Cpss}ifr>*EFOqKjC*cr30re`K*>= z+P7g&E>tn)FL>S{bXWfhd~jT*Sl({3*b(zNtpR((d$&!4OHrTM$7{*AZ?nbf@P26j zGSlS}cQYM!UV|=e@}>Fy=iNHx1@rYeOI#1lbE)|~Q;dWc-m{&ueL*+OuQ%q|2lMTV z_v|NmQEWm%7fY^dw@Fmk3kzMeK??%0@XGHoV)}YdQMkEnF+KKSb(s_qj@QFWp>UhyB z@R9$sGa@HC&xp92&xpjpfBzEtv78Zc!Wj`~oDqR9`P2!-7aTRmJaj!Ha`1O&L=a)Du}m*A`32A?^_)b>N%1jW)4t!2P3O=nyh;e&2MU*>kXkSCT zgPh_Z5bHqaIWjme#AkcxJP?;a@woKvC_Z~9{LpTQSt!B#P8u#zMZwn$*+N4x+7x3z ze#HXVZ_}(X+DG7%v&GVOjm?%LRwW7XDDj9@>F`F39_WSWi|{ql^;UdGAMh2cZ{oV) z?;}O{TGx}0yK%Q=Z?7+6O0p%A-`61YP`BeVy0^E=AlPZ=!S74H;ilb*VlsT$nbxxx zN7`*k%ZagG5mkbE^p-F9)57#b#gD?!_9 z(B@8jE{|Zw>)$;oM%E@NO0gd&)0qhD)#I?Q7NRfmoxM%IKlr<}`XK3A$Tqvq2T9+8 zziZFTAnDuickNvqBvr!aMZR`zevoumQIIqfZS2_=B%P0T_Lc=n7h+%5Ob(KgUpE7L zvsMU_u7i&(1@N(ek*uLf43dt)y(sjx^Lmi9ANtY?fO`i^$?v94ggk?k+RhwL8<{?He4QY`qv0Pu@b;1$sa5NGg$hw3W$1j%@F zPA4fgbDqtv-~;N@cwdm~-So*Q-3sR79W_IK-ONQcwcx!s;{8mAY)oflk}D`mu6N>^{3hf_nQrx?Ovg3Z>PCRxJgk0{lU6^;uTe1GThUHmAas7HDg z$@3>T&nVKV$j3td6Rb5Cn?Hs8DCAEeKZ@C(0$<8nb8L^BX06qig1I!~hWH4xFNN?Y zT?uPXMBIc~hXUS;{1T~>Ya zE$EV@v&@G+Njl4A=rp9axLI|{>70A>Wf}|a9fJ-+-)*`i&Obe%OZIc7HA!Qov9~~X zA-x6X(g%~SNO~jbi6-LL+gNS7q9Tfk zHhs~iE3WCui4>!n&dV!EHUb?@g8iq0Y%?VPlRcH-H^x7Mz42-6k*U}#CnLsr66BGI zkVh;rBPQ^uj%5O34w-TVe4&O!?3<7g0Y8Pkx_tTX+c8x+pzrSJ+g{mT#f-P61Yi#j6lVn5;vCt1agJ*syE)+=&bz1+ zP}*><6C~dCA_steeoZRbR{ zK?bPD{@ok;&Kng(SF3|R>jeNB;+29qx~oxaml1tL8nvS!Y4w) zw6{^R+#_+2#=*GE`zKTdU#1^h#%E(_{*N@>OIM<3e2#!0XC*3dKc7n#xu?H)5{um*ooEf z>DO-~UQ6drywy#+?ZuXD4x(upt4Mb+>-ow9Ja_G@Hq!IQg2qxnYhyrj$=It#gO-z! zm%yU$TlOkm?8s-z>phrph8y+(f%Lpk^FA@}Huiu%a&av7U)uYcV&lc**n`(%|Lq4^ zU@Z3ELfG|ak1d3ZKzlCPc4=>Jfn68&SF`*N$f+y)S zAF=oeG9Dv)zr{Z=?{SN7U;+F>83_bW)6Y$|_y^{VviJuw#t}S8Klhn?{(<>{sQ;YB zKQQ+ti+^CwT#J7o;}wg4VD5a2e<1Tw_%|k@{;Tjky@nW!*U1l%AYShQTa8s_=;S;1 z$pZJ+F$u(Xobi5n<@M*GZ$WnJ+e;cheYYyUr z=Ro$CK;CaejPO{r16yznou7>6Tx$Apt~F$*#rv*^Ia5XQ)*sZd+T|XM-+HjVDWBvzOWfFX;6gED zTYN0CQ$0$WQv=q~*2QFJlBnOm1)CGrlI8qWsQRzCw#18djTIw*#7OZv#farwWWk15 zi+}q)-&+};!*Rk_UF->#@f#WPneH&Iv=z=4{LuO zt!eOrv3Qo&|C|>A!@5jCJDK1GWAU7s2V|o@)_zL%RDC9R!Px91{e3(D>y!M0^T9Xn z;{o&>@c=w$<^g!FD-Xzg{112lo-^|RJZI(sc<#aVpPoZJ;C@=M$p81ly7GnlM-1VJ_lhW(GJo#5*-d9Vr*J}#p3I+Ua{^dw(b zqD8+Unm63E=nU1+86I3u7ok6-BYu4@;@3(4?|SBWK72sLcj(+R@fz|=EF6_6)}UTX zgaA3kRefoM9ZL8UW9`Kn@E77&#ABSWcVeGWyJLTh#J(AY{gL9{n}<2z478(Ijo5d? zs(9_KL^|8gD|zsndX(pJeF3j)j>R%w>qvmhlwqHVXKOcuOOX?-VG8H`IJL`-TxA& zq?|aEKZnj}k}bSD^5~eL4;}Sn#iybyHqj%ylFa(hv4sEChyLsOP!;GJ9Hh;B+=|v;8KR`t!Uq-OYg>Yr33r|pl3@xrsQ3iwz?;D9^`Y% zdGE(2W^WJuJ@K{`wNiuKaa1#!ogR8-FFcj7>he`CsC%4dAb27a}?&eo6CA z{IaV*t~9{HgWD2$CF$;UDC_Y#5B|Gd;6c;f)x3+H*5txfFyzXx@n0UgJMmv0Iy-~U zfcUQjXI&fctS|Vdlip5b@FDmi$HrQ`&juH=HTi+R`k8G_i$U+6h^?UfWKO#+wkFp> z|I1td-{7r&|JQk|WEnHERSw!TH}F=_5YZv=)@iu5@K(#-JQdf>(L&SadR5@9phXGJ zK@)G~aZZNej12KtNgwc6+_Tx0ezQI65#PyQkrL9U!NN!P*!XDYwUv){UR(Jnt!=X% z3cUD1{%qsTozGZ#>~G+)w%9L8p}Z{#aRQJ5&2fpg*d~jt=MP&HWW5^l>j#4G-;?)9 zZlm}ng8(^5VA>UEBV8RY&T*C-{V|SX$XhT5pF-pugzX5re<)(SLe-ShVTF@iyL>CF zSbmoiXCU|5S}(aV1$AfqsdD&B$je60<;|!Z4!znqqkz}Wm{U2N@)yns$sL|?mx*H_ zmy;}R^QARS=ViBG<7iIgp|9io!BaeB^$Ge*V|d8wN&4o=JmTt>>YX7AwoKt=u6Xv+ z^E~4I36Apy89d_ckV9uS-J7a!UO;f1C-^guc)o@Dmc_jJ{6X_F9{M_L2dfC4raun5 zc(a0F=rf<{Owc#2qkHJHh?i-wKU^Nq%UU+@vL+QTYut=Jr+_al=Vf*IBen2bYPVqC z!VtH?Bc{UO2%5p%@rb!LL?C8BV9M9&{1xV!_@QmCsZKfcN^>31<^j|(oVU1;pQ z*6D12c#gB`AY|(>*o&7yK8?sZYWA(KgdKVv>ZaiAG0x8;2O50TutoP{u9~;t_onms zJ>g%c9E>Ajo3=+@rcvZmMjblCe*yW?C+p-y8Gg!_ zNaw5LvuyTtXBG0Ane$3n?CVF(_VpF8rQdH~hrJs%_btHTe*3zMH3uWcfOc*6^#rSZ zJsI;z_H_<8OUP$VK63ctlbFPud(nez_OP!TFvp$t^?bh83-cO_Gu?EapX}?%y9m2E z(_O<{Q5z)NL6_0dneS%I8~IG!YL6Dh!>&#~F4CFk{P$ew#y0yp>?t~%pWR|(KU&n) zzFsQ$BM;gzZGa0z9^& z4YFez^6j)k@0d1>hJB(zcwBu1Hi;HthC63uzi!FO7)`P`IOZQ9rJRy=TajQp;HrIjI(mk>%kR7qaahX;fJ3`EJ z7qoO1Jr`%uOB}Pb2i+OIbK0)F_s;C+AP-K3{nR2GoASxu<_oT7E68&+R*Hop**46YUnC!JikCWQy*~wfk#x#7*nn=Ibyb=&z)OAv9}ooaU^{&5 zwT3~t$jbz|9Qi(+BITmXK-lhN31TeK80caG_}6IY!*iiWFN7Xl06kg(zD4m0I1?p$ zg(r%L=}=#d=EUYfytva$OD^hTc;+~sje#DGyi@A_(4*b)tOUrsR#c$j(r6&W!KL3WXky8OsPoIZPpD)mLr?nP3Qm(Kg!LzFzsa;+`oxu3IB4? zp-qo*#(sGxv&e1GAsP{XWPt9l&c$L= z?wW_fEO(WW-1RKh^Hj)3Q?Txz#=5uo09V^&xsm3)%r>2P56iNgL+-pU?Pj*Q5&bt~ zJ^aJC@_eV-p>mu_2A?qJQ#ud+inT=XclBeK@soU^_I4sORuI036)%YZ|1{U}QIij} z(!owE#=b5-hCPzvq8@_}nqs3y_x4k%2Q3r(gAY*d*3rnDK{*o&@Vy_((fC|~O-+Kh zC2j2EVhiSFXP;qWV}yfPDg?E?gL&TB6X%SdV#XDie{olWSW;!_+ZKOi?jyvK8ZA(C@6w~)W)Jf3Ys9#!Nm z(*1&5s=EcBHvH0t=J4sm$a_P+_(Q7g*>jd)M^w6Ed^D9}9<}li$d^2ZX3Q#!$FY?Vl0$J%p=BN84+flUwxp8J?)uN7r?v*Sr z)sF0MRQpeTRdks7A@_}=uFtWB`VUe6EON{oM*HVrKYs(bEJN<1Zy@)4bn0*s-M@g` zH+PWxhH%&q*2#1+mLh-6upD0X)9FJ+7g?Z=@OKa#kPqje>IcjN;s|xc zD4$v$prZDkTmHR@+Puhm;JI4WRKZ^th`JXs9vc4TGiko=m3j9Xq9U21<+EqRJ)FzY2-M4?ynp(!ipB$S<6hobQOUb1nh+=Fs!vk5!ETNGECpJ~ z?i2JWig3_s1g%^6Hg{q#zEnFw5!=2{UkH4t9%9YZSDXZu7Wr%-Cl-*e)d_JHB=b|8 zec#jL6)lKcyC(3W*Qq3h0XTSI&xeeOXWbRZd!^1rPL=_fFXS5n+^fLzv|Mq;+&(L~ zf<8UnC!D4>DK?V&G@1Rmf$A&PKCVWL6YoSYqmFZrf{)5rzgQ6Khm9A>Z}cl-?c8`L zMPn>@E$0<=C0}lwF0i@nSlblq(Fk2x>$PE{r;P?F{l;A^=6!YhK;O5}2EiQ>J4>*YSfeD5zsWo32AkJ5J#$J`4ISVktj~9l zZ)zrZgCF#OV&s`R41B5nMdpL`wop%N{8OyeeORLx@yvdV@$vx=@eJ1WuUIP=f$O_D zM^wc*PO8;>cTG9w;al{37ChiP@PlIBPva+a*X=)DT?8C7`>@{5VC>)Uj=E>i{|1bY z+9?L!)E3ph#fRvopr2yo+)A*v=LcTq4?dOvd_KWk+~)mtA7YLOzx}7r6rDwz#3QKv zZ_pO;h_h&$ctir`<09{;dj`Cqp84v&p*4;5{Pd}_MIQzQsH(tQDc|&mSj(?q{Q01} zt+A+Ohy$njOLVa5v{-eM`9+jr`lqOZ~aVcdTW_4j9W zS6#$)Irf0PaMX_a5YriR?xTkXDt-FbLdqi;3t%fd2^ZWtgy`s?H5#Y8Jd)qrF zvdU6x&zS4)$L}8O!|x#Mj-Y?Nr0rJ+B(^K?=V+OvjpG}s>{i$qW7vf2b|Ha?kvU- zi8{rnj}}SIZTjgbzm^~PHML1Ro7%hun%M_>7@GaP>J0ji%nrcwp*qP6G`B7q4QS#M z&>xk;@qta`|#(mv3Y;2kyFH)ZR=1<*31==YDEhxMd8>}U)4|2ofHzLfr;RCF>;RA5}k8{KK0^Seiho=}rvQ2c&4^R2x zZ8_ra&kt{h{P2fVlsDd%BcAfZQ=a%IvCi)0i9e#E{M|H0TR!jmb9o1tbHp=@|3As& z?GAjy@&2kQzaeZ#J+Ve9FMJHGSXffwb8j|F{Oa(aKSYC@b^8g$12 zSep_V;CQAE@;%Yt>!1z9s%R)bIQANIE^o@WCxQKh1%;36f&HTt>yL4{!;z1>c;VJj zBH146AZyG)JnD_7pmRcQo{w16SkNH-Zi(32S5^4ByyDUZxpBcLdz>X0t+)n%#7W#c z0l5}7nK7=Au_d@3$ax(_EIMq~UIkvDU*N3vJUtHa?4E$R7ZhSIH_OJ@Qz1{N3$ceU z80COC2iJlY$QaY{TM*daYnncrATETwvySVb&_4C5xDYZ=`s2)a6>?9n0Qntf-nr%~ z@Fcl5hPl_cJ?0BLo4ev_{zUN#a2a@dtU`-%!~Rv1WbdYceXAy3@Kl7KnyBb0FvUR3 z|6jPxfeEML72)8eiTE6`_flM`O;8Yj(n4-_cHk6SJO+twc7j3<8)j*rN5$3l9*Pp& z-+~X>hZew}s2052vbS|kB@^S&@b*E;rcFkr#pP4^>o4E^d+Ut6!*Q2A46Qhq zp}2f9`(sbMZztZV26L+zi0{$J8MO$y4?UClgj}2f*uYyk`h|SF2%BY1`0*UXu(~VU zQEG4I=&#_D1RcZ^b=Zv@_Ze} zx<&>3byp7tuFC0Z?pYwo$)dcYscniS%JI^=kZDK zV&(IZpJ5@3m(4?t2Fjmw4ZaBj=zT77G)zFAD#{-?kWp@iG<}$zC5PYu3FT&(pdaXJ z$sZUSL^&9cX94*HPT~21{*;3OXKDIcb2Eey9626(5gfS|23vA74CqI2#enCg{(CtZ`ejjE73_yg|GgXy(VHwW znE!T;hR-S168R+dTVk;O)f^3xKT)hDVusHBYdIRiJT38L0|y{a#)N+_PXpq=-)6|u za36hj$>nCgzul7C+!DiO$?;&SVpvm_c-$GVw;setZfD6Emq2HN;TsRL+GXJ^sRKRMeQZ8_U3!5Ln%RVSdNHN3)lwztZ5ws)IlJ>$2? z_B?pDcUlY9bF{poq08Ccu50-}J>OgU!1>+;^kax1JpRS=y$`MX2j_cHm*TA>tz-Fj z&-eaXMloOA)sI{=ZFul}@6v~y@1?WQlnXZt>f;~<$h?UR8=O8}xo{<9#vctn!!I;x@(W0n(l4{iWn9 z)(QcDuxALr8$$65c_}c4$8IaSx62I{l z33>D@{6?DrzIo(O*k31bN;UE(7#!WS2lJlPHuT^tns$UB-Y^fbhxu`(`IFknztnIZ zF=N=zE3uz{)tl_*_IPIwW`M>kX|bKVqnLi!sm!s*rI2}SXX_xFX((n_giJx_@F)(Md~XeX{6vBy zu9xHxv+s@aw=~6e7mgYkVeu6WWvrq!hz+4LW#mV) z`Hx=5nTM;<6RrNENf!T6(f|67{_FlD>}CJuSU7_@f!@V5hNpLZIUN5z5_oR*)dk&L%(H+-$*Y` zdow{>vWhiZK%4lcV23;Ng$+LOc(HJ=6j5 zNm|%dd!0tC3~b0015}R~AnGFm=VZ;XK!~>)_`CR@AlQ(9f{hNp#emox9&t_ohrKtC zkE*;E|IeApGBYQuldy?GSR@%pfU*@KWsiT$xsz-}`eW6Alz@d++_de&4V4k9o~AbIy65 z=RBX!^Z9(9&nmX4aC~(3@!vAu{XX79Vrymo5^uYN_YY?sB*(@OzU6FM%6!GAXdCmF zG4W^O*~2AL17ZaCi{3kjz6$AE;*8IN3wQEtmDGTsR;t+Z;;5Y}^PGlFOMHv^SmKN^ zm&;nvcQJiSjgKnUXBT5vsnm$!g!b81r23o^gwSi7;T$rjd9{DNDdcj`+*aFY&MbQ-R1qzs|!wu4suC?;D+k8;!~Ev z`qrbviKTA^n~70(6FW*gK4;ykj{-NVS8zn?atNNfSzo~m$@9{eI+=nujlkkcpRjMo ziTz?Py$UDx@%|y47<%||bd2QuX1;u0eA;LSddfx`=S8(BJ`rSpJf(wFYf(zI$y|?gglfh5H1L;F>L2y&>APPS` zfqxfZF1R4`cunYy=uM#;f)h{iJB}JSiP*%SC;v|Ea;313WO`FX%DAKm7x zbZYQe+xvaScf9|8bevU2JI;R=J*SPf;PhE^vuDta%GjZ?hylXBsCv%f!-Vg70G->$ z8Tcd+4E@B8KP`S@F1`w9wAxR4)8}k_62_`+(c882i@#Tj+R@*{wHMI|`nX?L+xTta ziGCls!SIcuwn!X$Nn%W2vUu(# zep~r%@o^qc_&vO5^9kWM?aHKP?g?z;pH*6mrDpEq%&!wXsp1MhleT3Cm}`DSxZ!7V z+4rOUH~N=|zWc{~8aa1{{7X*1N(}aGLk!r7f63P>mwBd|UG2 zd!F78wbrSTy2@q!9`@W!pW@5%Am8H8GK6pOXDPpRfah-7?a|HucELc;>(;iHKB9l= za|@q(-j!Tm*rxF_K^7BSyaPwEltLHFx-aBVvuAO0w3y2cT^9OHjURf~4KI^R=?+;F}~ z2{eJvn|CkZT7rKk_eLw%`#1AFPHFF-+zXoncv{Tw7pavp9D3p7`2r>CP*Y`;r}ph= z&$&mGz!G3D^;d=|*2cZ$)$4-(em}Ht1ovmr-ll|=No}LBnyjK1l*lsi@p!9xc+n{( zp=`erUUn)~*@Iv1s?wqmVZu zu+{dUzpmI!6R_Dn54{#U_BQT6_gGZPgV?w~e(W&z-)Qd^>Z32iCfx%ck}mjjJF0fZw0D*vXQ3 z?lbJ|J+LziPg%zNo?@Oym00gh_z>)2eqwVUh)=*N=zUw>|21S1Z0UwQe82buum)ly z-w6K^+t~-mFU#;5+KYTM(Aw797Q0&y_@072crP~CJK&2av6V++caOvFK7ci&?iu#! z_>v3ogjaR={l;3)nNTd9@(WBUCV|DQcZt*mz5HuNRqynqjQB7MIPesJ9@ zz7`K*Q-2tKFMWd_UDVE8sLl`6SV@<}?4gUgL$x3pmY$s=$^t}`xh*9({{vdmq<7ccvY|Wb+PO&D7jb{>C z{JA5_>yRyVWZ))bN$R1L+rpzt4kQ1@u)n)tzdVZ`MQogz;Fs7uE3q{d!SiPtwr_j6 zy}D*Yc*m|ewUuh|WU+r@AMMQVI_P~Y_u6|vX?<_XJ&+zRQxuU+S75T#LlXH!nX&SHtHsasoUQ(OWWkf~#IodOjEha6g z%Q+ESk#6Jsa=LBpCkOEFnn+FB6V%w2JWY+ehkLkZb{6liP-A)K>r0=QiA*DW^9=W+ zhw@APwiNDZ+*w0qN@$@`z*F~UR5Jbx;7)>UgQmu501eBVD4S%zF&*eT)t z$U3rCA^nof|Nfh;o*CE!^WB-D*2D~kk_ngAJH;f^c82?4d(JS#Wg_itukvWr0WA%pK%Bgz+W9$U-r z1fJWkILrG%L%QJC)dRY+!Q%9`p^x{VVS_kBjKF8CKW9hrrFxkD7eLP*;a;I#{n^J0 z@QdljJ{I4mSJ>~uv$l~FX#qYmnYY`Z4`Jm~p`StxpesbRiXwCp)M8tP=l;JCe?+?6d8+1o}V41)7A?6`GVFB}i z*Ow21Zi!FmFX-dvJS%=$U*HpJ_;TVO+8>$*-SQ5ARv)uCpC&vEK%gWh(+%l%~_0i9PS~v-iG7>wvvN9 zEBPro!+0Iwv(V8Zo@3v8CqkFSUrB8DlA}s|m9n9!V!IdpT_{JD)C#+VACiLp$Ai{vPD^%_n->55N;W~UByd-}3RQ`m!D<1##xY0sjaI*@v$VOhpm zXuR82f;{p>6S)rGME0zQ28rLslx>c_nsLH~vdOp3`eG ziuNM24O62UPvLhtOo?f%8O)&y71_&NW-w*xfyUcKdD@*JJyu9veB@qmr#2S=Y~U-|)EhKnsvLdp-wkfF|_8MkTW7 z4&(-rV|IZnk~3E1&}GOB{lJY8(2Ksvn>o;lHOLj{VZ5iQmN0$IUFAD zLx$`E|IUD~S0W=xez@oGDgKD~HPJiV1YS>uUi1a8#s7Os2U|%MJejk&w-o#lAE~a) zBb698iQh7GRM3=r!RhYEpi{tabOT1rn&@@JUrYR;w;_{C{F=y{!5ndF`3UyyDE6i3 z(Yn0z=7v4UiXz`_F>=M(OV(TByq_{x8MBZ%-OG4WkyoZM9y%0i@A^wb)+pk4KV-dK z?4{3mZyDnw-d*}EvS`RVhml$EH>96gs?*RZk=G6RL(ba~Uda!80$L(D=0w(B%pU4Z zzb;dr*bHj-hVsOwps$!i?c2VLf!yLnPATurxT8ndN>;I#&Z{wo+>*rpo5=o>eTR;q zWglurUO3r%vhO_XkC4xd_zKHDll}HtZqPRV^`qD?;Tck6Jj6Get#-qHDSA_}S|L zc->K>uCMSi^t;}C@T@EQ9se=oJTvXFM8oHA67MZKs!DJgpR)2v;L;TES@I1>(P!rt zdAOc+pM?*91vEHCY8yk3jehZ)PNQF&#b)Fjmi+zI$o%5}SB1PE^#6#Y^( zU0LJq_{}E6e+3p@SW}S&rYkmdmaGwT6`f$Wg?mdJYMeKDp<06PPkBD;RKS{THT>0i zH`cR&xY*}dUz=*B_VXe1>xsmpqC2Kv8#>+snFD)yGiN*-`>P9dPIQO6IJYH1->mq4 z_vK83{**o3;`_<7&>OE6Izx`h^5+=0lySvg(G}lg(dWj$Q?o(Fn1*g~BKRS6QO>;5 zPXV-0^p~O|m-@zip?8z`-5uD?=63}6GM;{4VBQkmGtP6& zaVv8b{eLF3Zv`^=Jo=B}-fhtTC~!dHdYAFcPWVCwbg`26jYO}#pZ679jbfeN2bO)I z!~2Z=Xz|u^Z42*S&%MYz-oEHziGKyAVdZhmErb3Q&V$dv$87lg?gTgD@r|!weM-R> ziI3hZ`wzGRJA*!VW^V~><62-UdtGp%6#geLwF1+(m|vfFs*M=v5KJq1uMkWpv1g~y zZz+8#z>mEROzkCM!1NaS5}c4VUdFtopT)d~;5IS@KHqk5LGqLnqs+SXWX;^nc?-B8 zGL;Y9SOu;q)&31J7S&r#KdHbo9yq?lTE_uLd}F;c_#gdhxtF!$yy2||hPME#DuHPR zFz0$7^xB7!4<$Y~mGL{XUIL%B;DEs30eHB;^Dy_u!Dl4~C>}n$gn0=M+zuSq^KJr1 zfoC{yi~x??;bCjAQRHKzurl6T$oHbZu(75=7)BZ}#753}ZGQNB+Wb9j{+>2}Pn-X> zX)}7q|1oW*kAI#vw?%Hg*%wcpo6XCAiQGIG+I$ah3vfEBs+)Xt*+u1f&6Edw?vK=*;(W*WHFu(%3C5g|4(J+ki7Me%FNf2w>Zap zC8jC{c}w(|hP;IiqXs#3eNDA-HV(>Ll8c|XxE6U!&Y4%pTlDeI@96~Ot--#Iu?88OrzW?< zCXPHUv5TSHQQ|YEqO(S~fX`TTOYSIqgg6(Qb4Q7PkoaMVzmV7sk(V{0sdCohH_jrr*mYnPNadt!h;Z-?P+(KWIIrm6Djjp`6_y;BN z-cuNFIO`&ML!Gsn&AFnK=fvLZqaU5KyaivmHQ2W8hOeB(+Xp4&@^Pc=WOp=Jm)qLp9o&;;vGd_vYF2m_P^*1ZbDBo8QLH^k{5XQ2hhK6 zMUNqC`5dtNi1+cK|G0<^Q~tY`^VB5v_A>Bo6nfMr!7I^Cv3A}F><3ot2urYo3}D^l zzrL)a!0NdPcEe{7_ureJzn*E3xc`9~rUjORm$@erpEa@X zMBuX~dRd9BETFIFz<)VkPvyO(zbP%c>1C{o_{6Pdt#*PlqHiIu0cYYWd_eFeWWH5O zOu1&v7rh%}h(8EQ=UqyFld&o1)88!MzM4Hj{*3a8+$Z}kgX{9!&Gl4#G2TRf zL9Cxq8*Mf7k#qKDa542ir44NXUbDbC&e>j#aawW23Xbrp2Tz)Y!~yeo1LiS;Bax$9 zab!if2}j7Ycy5E>$T;rL@tk|~dmQ;r<46|%0etGglcpijz&yr)`BLf#)h-{|iX%47 zgd_MLoO@JoMCbl7o^$vld{0Nd!*m2+lsZ23;7QXE2Qb$Rn14l`k=n=+tvGTe9kKe( zO%WU!#r>l_=kS^M9!I{zID&7D_}2vKNF*?~88BZUID(H&$d(tf<4H`S_}W|;GMwCH zBRsJ!_8Se`aL9gh242?<`RaN2tk`dQj`I=s(4dBQ_iha%z+4NRby*?8BlX7W;54_SLP-LG-(#@9)C7^Ic# zF5f}lA=}MnWcW#3>xi>x4i0mv2QV#g8tjmnv17jqMxznodbH$&u6&Scn|W4xj( z7M*fm?laqMurIgTZA6w9d)`Z&J;%`&8?D0G;1Kd{Jm&*hTUihMm5SsXdM#c5WMEtd zoXlrWvE$f~((jr^Hs{xXOML zwA&o|#`9-Z%lT96Hg7Qp$$4?@GpKfj-KG$@o9#9Qz~i5>+uX}q1#7}yw%g2TvD*}Z zBMNy~#BLJ@P99*r4ciSkEw&pK9G853V&{J`2+#5({3rT;!)_z`{sD=|m~mdoG5kP_ zzF%a~6rRK9!rK}7d@VjUFY;S#H+_)XkJKF5AUGS+Cy=AUfMpKX=YlH|Ln6KqWyqjw zi2W!gHYAHViQQ%t<2!(366+Gz0!P_DW;ljyH+`|e#bH+s=@R6=B*qXug6I=c@vFG3 zN3fNMZbA0uUTj7oU4rNjLi&V|9wB6d6J0{k{&w&h_P5J6)u8yZ6TbP36-%`3K>l?ELB#Dqw#UbXlNT>`e7t91$FeKYLrqD!y= zOVK6Bc~NXPKctSdb zv(&oUPV7oZuOP7(JK3K#;C3C~6@0FxM|c~YpM4EILe)3w5vs1zBSfP|kXo77)+30Y z*Wc<9j<)C#V*jolVH-5w2e0@xJ;DQ=$G=&R5cCs`z*qH3J;IR<;v@L?^av;6ZK6kL zg13eA2>1g0Q+fpQLtddrkl&(5Am@~~zD189GDt{|P=TD2X6O;97uupn5dVuS^avrm zz(?rZFk-}dTRi8X1z%Cuq^U#UQ!o!~)VKAP}fctaX~rlKoTS?8|! zpo(lU9)2PGV>oh+3woJ>Y$I}u#McR5SK%Y^@DZ_z7ef1o<1Zqz-G0M|!-~u#@Rhhb z(LGAsoyc<*;_edp4e#V#`@ow-mUE$-tTFhHV%Yn;;PYmM&m`dohn~|bV@Nz=hM{}3 zdP8~H#CK;OV+-&9c0VoZxifaiPwP2&<<)*#n;AdkrzN_jZ}QVBV2#92Yc*>ZO`jn@ zE&Ou+#z$+j$wy1%wyXWKR>SATKWi<|_JVixL9aN2z0wo@Ve6Y%5>33S$QJjD?g-u? z{Jt+Tfao42_gg-{$>mj^0)ANVtF|F4Cc)GCz}w>4kE}PoUF1N;S3~4FiDwjlEb+w| zNgvyIhtBwL)Bu}Ec^$fXA;!Opf7l9?Z*z!8=7e5Y>1#BY{@in%T zOTJO$Wp6juwl6+uNyH!9kfHk!kKEVr73C_42ZAsV%-ZqK_B9>J;eWYC{${ zV#svkfz2V-tuH#|Y~-gj;G-iyp#$`K_#a=o@?OA2eC(jfw{;5 zY1|j`#}WOYz?N77L#~TQH!3on$a8V%NW~YY7?_BCNc?UDmLk`g?L*>=BR)N589lkh zA4lXmk>_MD)o|Xp+8-xQ{NAqNkF$$2R?r_ODAxtyc-bE(B-4fDIg#T+u>3#SJ|w*K z3YqS|VIPvXVY7WmVml;fDf`je1zBz-xDfKm5qVC0C_{cZ_0%(wSlc=+KfU-=(7l<8!|`Yq4HRMi~d3E0JreFDm}3zmit%nY%ly0#opAYYTj62QpNt3TH*7c zAuk%glW_) zlK1KY&DlrHdk<)foxOa*pwW@#a^Bv;JByDR`Mt}RfD?TU`h0MMVw3ZvwOs6f8T4I& z+;J~-C5^M%+!mX!)QXwRSuF+JkoqxQB~JphJ9JjtVvK_yE3g$gOlb6EXp)@OK4NZH z)8`Ys=Mm&F(Vxg!t&l#0^!bS4D=9H2p)_ygWE--BpI&JLFmKyA)vzpj_X8})ag`CwA z%5piYi7iLYYO;5e!2|KPgBQ2%>4T>IEPGkbWWS+q3qJIhbJY;z^7W(pwo42~az|p- z?{yD$-R~Z3TR8Dp&*^+q_b4S=xo-3g6L(L);r89h(c^cM<1S#_H_<(~=iTnXDPIpi z*6Vin;OrY7+wGd*9z5fQ2Y2@z?;gDJhWmH-8Y}(u zaS!hGL-$~vaZ>y9%{a3dXBFd=G0sfJaoCiAabGX@;M8RI;8~25*3CV*h;e##b`SP4 zPHIQ@U_axewUhtv-R)(ZS-WD&v?wLOJ+GyPxd*2y?!l`WXEkHINdM=E-8sw{&#KXl zQN$c%n7A2=GC}g*$Xa#g3?tuPKl)qG zSN8>D6fWIkA->H@{uy#L~#KGTA4RL!}STgt70E(BBD78VBBsE)d&xc>(vYr4PxGB6}|! zJFM6_6@E)Bo8&nW8@brCyMdRI!$fp?A}>#gODvg8-;%dq;`aJN4-1j0q}G#4Obv7q zd%fsd-fYS7B6X#LIbPmmzserYVvmZ=Uh>Ou4!f$xQ(JPpyw6x+hEIs(71_!dA~#7~ zU^daYpdAw8Hb;!%m z9Ff1eqK_8e;X3xO#4oss&)&=&#V%eyMJd+MnMxeP7HGr_GW-TgYdG9yN{qCh;vo%LQ&%pPwX_A&&W6 zj&V`Fn+qkz1-}kCL!p1$!f%Ol5j|We&L!yoA+c1!yw(E$491Y$)*%^9a%ogV#QIXe zfr^M+U&XR${PXU(OP82M?EPMmQv1q zeTfm-$r(@LA^vybT7odWIwqnke93&47JWiUR{Os(u4O!HCcc)pu!bS~h@7L>!?%Uk z3-6F~wCF^hN7k0}wVb5|j^Q$i=J0#kEH!nnu%Z;_Wniml*{r~P;M4^OKFvxTjeeMi59oW&Ffp_=Kt&E zt;(zRG&+rcTHd0Me|}Fpk+&SaY1EUcSf(3sEfoe-A~0`b!2Bq+Zz>|L9oJH^EX;TQw}K;i+<&X*{MPSrPK|d>o%39f<|zaR$tP zcSh()Fs?;xyb{+U_T7qQs*!{D!jQ4VwT$~0i)(31T+934`M8#e*m5MUWgh3yZ;NXQ zojpTwEmxmCgRw1G|?+V&&f^jVZ%MmShn~~TO9Ow~(u`QSN2okqq)+0!4n7~l{Sw)v1ewmWD>n&{4 zqE8S#LNK;PX|dhd$Voe+$Pe<65j&+22%?e(--cuElz#59BrU zgMUA+#rofmYgs^zJ!tYRr-i3y1mjwIb8O39?(cO8-(_6_I3ajZijMOU>dHKVuiy`n z=f0$-%(-E9&kvF59-_w0+1?J%dGKWz_;R5~wvpqyJ-%aSUe%2}*NwNj1CrNT;$6DL z+H!KC#hdYAO~RMXioHJ*zS#|*w>o@~UV`UJKJ2OZHcRf5Da4@MU|Ng_A5$Pn(w z+M$>HeTn$&N<2?JJVgBLhQk{-<1@RIF{Y81amC3&umK8bgUrB8EyYd32b%5Oc( zh?69qiE+f|OW-T{h+l+{Ml*+6d^AU=OFnx426D`LC*fBnK3n3iC3%WNIf=#hHsr4r z^c4u^BCdshG=K}jLn^_CTEQXute|~zRZm+c|W(=Rn8qVcON4HwMg>9 zOI@wQ)a*r$DSMGRN)o3d^&r+zcRD&!si79uA;xa02jOU~579|&--sW$;r}|6T8{Tq zbL%{Qv{Hvl>Oy6AZ&xyt+FMeiX&n8!=yx6Y;iH)EcG@e+9Uo=**2XmAv%cyaIq9FJ z&tCZ0N?!WIQi};c+k4cg#=~l~;~e?vSzpJRz1d~=^L!(p2bd#uy^6|cuc2>=FOKG0 z`hS3LFW-`rUi|pSsmgUT|J~wwLrs`9{UvI7P-9~f^B2EesYQ8?wK~uGp0POmjN`}O z#_wg#@N@UeJ@RbmIedBXmmZF9Zx%HHGV%8npXs*@pXuf-wY7ft=hsW^urQC*^-3mp z{TrRAsijg^iC7BihEA}n?!m+C%DgSq^_1M@_Hd3dakU16d zEpytgTpDzpD-wllAVcm@PP?P~lVbtNHCYFrz#U%a=i92OH{MGzQfl};El-j~dap?l7!<|qz=t%R^+dH{mr(RlrflWTO*QQ&jbwfWq zQ#75vueHXXTkU1??xR_!H!QZs1D`feVEryG{;YXI33G2o9{u{!F!Ix@#h><60%JP6 zJ+A(4Pd0TyXG3q|pgpmCmqH6;EHU0)(7dJr>o!rRgqSn@oCg+f>dJNT87{>i=;EMf zJ2c@hI=6q}rst5|yM|?W!a1KcasQJ3OEyg-Hx$0e-pS;K`iOfwajlqscJ^PoN&Jj6 z`!C+Kl>Qdu^K~EeD{kQWP0&tn7kJ5Y+|wQ25dja7v&Cd+**5;0$@Ap2^4>(BpBjCJ zdG8&#VUyg`hw(n{zkCxlNw8B!m&hE5XY}sxziiVQ`ttMKJaSve|Ff8*Z@`*OlZh8y zhL7`^A&N(6X?MoanO8FNIixteOBfdOB#z z#;+e8?)enId0=Jin{Tb%7wN8P&Wf&?gx~%p_NVyn*ABv`zT@T`)ve4{I&O)vQCnyQ zHF2cI-)O1t$Nm$XYKU|fe+I4$5S%Ko7Jt6L7ElWEhbjdHLzj$E_S6>klYClb_2k=o zig|TX5@xk|%)KF@Vq*vPa6)aC)LOEZmGb;a_`@Y)>Obe1ONCvF1BK4w<~f$Y3Z842 zlNqSps=Qu%EbMjZQ|hw+neQ)ev=!A+bN=RfVzo*}1`^2OcKTVq(Jh_vjtodGgvPBS zjkwx|7e)po7T^|OFLeT3xPLe`WyGgC zlNvLdmk;$hz(vUqZRA=*u82d%kQ^WqD+g7LSr zSWk2OZN2sSYt~7437JHE)5VWmVsKUZjgvL5RBH?wgt?2qcpPgjanItjEBXDD{KZ3~ zSEY>lZZ1ApYqd%BLiEBJIHMDDQ|pw zWT2LHk{V(j>-Cpb!b4B=%TJfuVd8J@Exh4U?U2Rk4TWKWx?zjcSAT@;0$$cLH^IBl zX)ou$&B(h_*Rh_y3gw<5d(#WI^53w%>2=)OP?#Ag<-Me@(@$p_eRU~(b7(EKkfra_ zPlp98g^P#Q<}OZezRUi412vH!u~>?`7FG_eyOn3a>2*y7>FrK5KmBt{SaBh^WQ=8PS0;13j{hIAL=+dE2>sud|J#*C8TZ?Y3kyY- zXKpR`M;P}ziVM3+J#qOzc)!B`zpz9V|Eed6Fd8rqn`^Jw9*YyGHEFtc3|i?xW)2viHNwC4Mjr znLm{4Na+4v=5rB$V#ymMF_$BH@Gi*iU5O=@_;}%8vPb1?V4NqiMh5DMbD6?kjYqcM zQED%Kp7^7W{MJC0IS96a|f*02Ht4!~T%wHeZ2LEb%NeyG($GSvt-k8EV z$vNgE&n;)pq4SF5X#BXno0^*u-nwB+(vf{xtHULSS?`alGmFybCzC!UHl%jQlJwQG zzc{x@e8^Vjvz__Z|JE9ibCQL4$W-nnmsGiob*eHeu#0s)pX3hsSm*kF6+BOVPwMQ* zzLxzh^?mnOk19%Kf0KKM{7DJKWsWS8{hf;MKIa#2f$8j_tI^(V)UnDB?eAG510OSH z=nS%-_BLuc$ywxdp)D|j{e2i*3e~$3T2lufDJ`_reB53MoT{`2&L$}Vfl2c%@S7op z>2<>j+5ZuNH7D8UnKt&g@U-@2E9G~+t$0#tl!5b0`Q32W*w+K_riQG@*EiGW7Cuso zbrIKg2#$LnAztaW)_Od$2LD*R(q$eb{6}(6nfZ^<&wrNx_~1Xnd*X?U6TTCD4ZidL zWlf%cEM6(dYm^pV^S=?VB(Saq593+GD)3P7?#g(jca1Z!;6^ZBDS>#Ugc8A%e>Pr8 z@JDb>@JI0ID`;rBrG1g$ko$!AWV9{&lK!&X7CiX=1YsE zW>}VO*J#c1`lNHs6E5YB^n8xY)v(q5`bl(c2@AJ7_U&nY`3vw)WU@iXQUP$T(-0-l z_EF_^Mb2SX)u%YA4|IKgdgs`sL;Dvf{kJpLU#tl(+ZLtRK1D4)^VjAJ65A)|>5f~K z;)Yx$(2!*iJ*?*wHx@>8|QZR1+yw#XK_?d|_T9jmunWVXnbI#!W? zch7V~=Dd2}NKG_@7mzDuON*=)%9SGW+Lba|7;%34N<@Ye-V_gAoea;CnpU!BLb*~T z)=zwrg>Mx?mkm7@@>Cz<(=*7!Yk4fvkkgdMcn5gN|Hj^_N8YbqNWaG3dHWiB=k4I$ z$+EWWok;dhB(Z+v^1nu`UuM3wSY)(skN0aw?(QMJRQAOda8~xO$SNuPE@hlrWQ@98 zcc44JjWfv*bVA4)Z8@7N)b13#T7k}?6X*09Genmoa#6c7IYadNkiB+n$?K0>ZH*1@ zKigru#paqGp$uB_%ST^Jj!^oetC;6Uzd&uPTkYg?J%hYwOYxK_;ThCyN%vXe!9{Aw zmRkR9s67S#&-uV(z46iw;Ph#0vI}`;%rI4%C(n-Fwc<|W`Guyx(PK$pmVykP z|B+9gFDv}%CF@eRPq#Y!WiOmu0wi$X%VvHr6&jeLuRb$E|G|&wklFp@H0@_Fp{u+R87R`->jH#k)14 zE6L{FZ0+sT`sP2;B|#6%h~sgDy93$(_8>J3ryuhaw!dVzbNzwoyHmcto9i7eIik6q zemB?0AM6-io~<-JX=?k-0cH z=c>b5(;I9#@}4^DA@iH5I{b~$#Tn?yMrV!oE5qw&*Hgc@jQ5mzi+rJQR+ck!9dPLk zd^TI387l9S{6X^o**78&2)>K#aCVpy5c>6VWaAyZANB~%>j&K^qgK1ny?)S(7m*Vr zAJkkvIh?744k*NB3%$$WtZF4TTh6I=WG;!98_s?Yo>SSE$OwH~WQ0s)+wsV`0$0fg z)vfw~kq=6IuK)IodL_L}i4M^_yCEakkr5;>RPbynb!8nTL3-y$?vZDhkf19 zHal?o`s~0Q(T8`<4m7c^8`T8=3HF?(YDLLv2mfldz2B}{i_Z1P4y@q&?5CpxO=>&; z`KHl< znG?1^!^gJ3xkg*y{M)ubliwDoJ!%VFJZ1}=ec#48O4(yYrW&SLje6BxYBGzSXH7@Y zZx(Ip8JFEhJB(VlFDQ{^8)&~(J-q0Y;w;;*gqPivrtHDiv#K;|{5#5zc;U4=w4kXm5$w=OU3QrlPytz zzGM{Vz5S1UP$D+FQYFeemzsDVVJEw3(LQW%VI}t=H#i?tO7@WdA@Q*aqsH%`2G+jhFgmPL6WW)Ej3#lsOQ=U3ap`e%S_$5{Mm>Y@@~PA| z=&>lGWCM8wZd$ZoYCn6WzO&>sTZU}3jlLxBVHM}xI7?XhgN*+?=i~5q-ZE-A?!%^b z44c|o^7D0D6kjrpdEG}It$vGYN|r#MJ|lO|=h*9{_Vvf~yM%ZCh#Weyw)>Hd9%i1B zt7k6rewTTDiq0&Yn$&F`+e`h~L~Mg9wJ;)$oPr8-nfh3K$x%xzb)9Rl-GzJi(dSh9 zf)xX!Ut=w%|5ATs zA3BPM;14eVyQSo_mFuT~-DkkgPyG?eL2@7bf|}&z3Ggtfxjle)ei;3U)E{5K{0$vF z@4bijM^{lk5xV&_?=Jl<7rdj-&w$zI&>ZTEmyhD!jnpjH>E})6eiL%B=qiqJUFvI3 zLr)`i(dp=Cq-Jtf^}8FyM`;D|{Ze~lAp7QR)?y#)qLb?-1s|g@e3sb%E&4}G`C_gu z5qL{Z3VZvK4Cb^3y}s~Q(K`yS_i}$`et2=dQFq&3ZYST2(7#EB-jVv9=qwCcC~`wZ z7(9UdCKVCIa#mageMn#)L$G(&-nAsXq0$zpyJt!I1ITlMSa(4B&*a`(1LwCwGmkF(_ql5R6JKd=boFlzz0kJy z6BW5qo^L1_9mwn~eIrxzQ6d$eqqo}=MLye^5e|P*gytWO&G5yDD8I-;Mc7);Ru?{T z_OBm)a{g(~YO%GSP;b1*hQ0NycXVKOWQ_mJ3!?)^BBK4&Eyo5M-D$YuJRFibec}(XXFa6%nJKe7a$EW_LVe_?jwR#-A!#p>(tdXp_u}-Xc5}!=PR@_#uDRdfJ>gX|e&F`>geQp{(uB=lYtIdE|;%@MU_qQX{tY*{bc(_WLGe5IF}3jL--9FCZ%kj+0Bm?_+Fm&F|xPAGu$RSp|;b zdoZr(C4LKjquX4C{i1A~^kMiSM3<$gj#V>(Wl{9_cR1f%l>A#~+EU+M&GoLlJp`F{<+H(NyqDs>1f#Vh5yRfUGA=q)Y9Mop7KV8nm&yTG{4Z~l|t3+4Gj zp0_H+3yiT;be?L>TvNNAdlwkvh(1)UnIYG#wE0XkwPijtjQ)bx?lJlZ>QL`CweK*s ze`0FiYHE)+wM!ZER%3jtp^wd$YgXEPMw;4LrncMEPB*o0Hnj(t+Wk%KzNU7Xsom4m zPByi>o7!DWZIO?=Gw<3$EAX(^T+cOW*YRm*YA2f7*O}U}rgoI6Z8xM@{XYo7xYV+Vf5AIi~jgruGa| zdzz^|#nhf?YX8*KzSGpc&D5S?YTsgN=a|}KOl|xZT46oH)Xp@uhnd<#P3^&^_CQm+ zpQ+u))J`?EsRiFUZVywto2i{-YTsyT*R$`F1YZlqcg|YeR<22#PlBl(Z)(Sw+M20t zGquA_ZHuYhtX}T_D^r_9j;-Tr8Y`S*P)ZTAuSDM-~{(jT*|6#iJx~ct&slD6O-f3#r z7b?ZOO?`Px*Pb`Ex0>3UO>KF8tLgb)o31@&YHu*L*PGh178^{@uQXj-W@;Cj+WDsT zLQ`A%$~X1(u<6{6HV8CYHHtUYTssR3%u?$JwM)b zZJeo1EKn=%%Dap+J(Fd+<~Fs{P3@aa?Lnq?y;Uu~+0<7b)3sDn+huC^Ftxjx+DWFi zyjM3_Hk1i2dLI(t4-}vtEJ|cY3zfhYx_;@ zN>iINRBKgcjslCb6e%jQQ z{jLRuJX62- znXcVyYU8imI+vfB+IN}Sx0~8OHnsCi?OaoPtf?*Y$TiJlgy~wQsXffp#`n8*PJ#o& zOwSK6UHgHl-P_bg577ENe$TD#n@nvvpQV`k?PR*v(bR5lYPT`9ou+o2sg1vI>v#^@ zA}^E{ieHzrESm8?%l#Q=_Pae_kq?CPq~R}W_VN8JH{9du=Jq7_%J7I!WGXtvG`^*- zL@e!ll<3AdexK~|Y=^PvkoN^1-z|Q+;vf4a_dKg87ftvDSIFizY}>kVIG@$(gX z&=ls7)W2Yp%%=()&b{cH<(kYZmVWB!|5^0!C-|0p&ge~dhtuyA{EfxFc9Jn4mpL-d z8)|Ih$J{rW=cK0B3zr_>Exy1x^eKMA&D^(x_GjGtA-?A`=tt(?tcEwPQz9Hm-3m5| z&u4EXw&-3`(a^MI|%hEG^nk^Coq(OsB_%5Pw-Q$Yd z*q!;w{ADd&P{>kTi;!}(c4L|jbqU#aA z;*d{q!~0Lav+`2WJIR4?+4o5={K2<}H++&(*6>N6;TfJB z-aVJOPv#>&V_B@*4s;{37PGmAZ$eSC8r?|F?xHDN8`o{|rt{p_B`nL63oOJh8heg6 z7rm{t-%#Tk$D_+_!Y(s~>-drvHFaONi8|3<>C?wr%D4DTk3)Yg?LO$Oo7MQnzVy+R zXQM6AqQfb=Mf|S2ufdm`y3_P6e(CZpK7YM=HZ-2VG&qLE=zAyg-etT`9CdGOCDrt` zi@6K#b+W`Xp643%2#V4yG5k+0V(?vJm8b_uWkhP5EJ1%*}JG1DwI->lOb5`nT*Z4m{PwO53=Py6;q05%_dmwV-J55}R zKK=41_k=6Ejy&_nPcBBXXY90p{N*QtpO5o@J$Ut@8r_(x#Jeu?Uxt$EpvIo-;?sg} zagBW}sSatAN7t1~oAr00H`BH=R}XUp|GZ}z=b&o$p66S9+Yd7bnV-zf)=hltsoTJR zt5ipkmaKXt7yY$jQ9fv|mTCcpn{61^#RVKcO4c26Q zoja8maZTRkbWi4NS1w9j8PSPHp?9XeIxN z80NGysd`f%OCQI0HBNKfbP(7o*WHqIjP;8j6TirI{RL}`tN0ITubsEXx|-FndAe1Z zP_Z!L);V`fymYa9)u!GS<+^6oF-u}lj)p7oq5B&D+B_ka{@1B7W14ZNxUg$OhgeID zRu`_^(y3j>EcaK<6O=F|es7|39eTep6X{RsymwQ)5?}U5;y*+OsYEF8SI6cwV|V!a z(P+=tS=Qn&Zi}HFK&+?pNhMd-Ud1o%ikvo zQX9e&mY;VMvM8}MJLMkiPsLq;l_47&_q4%(C$a1Xkynl1=r)DVwX_Wx!e|Hka<<;* zEHmVumiumNeI|IH-8^PkaLlmQXM$UW!*%FYje9_7ai_&tJ43W#S+saYm->!GW9F#B(gE?_`XL>zcXl0Y8fZq^uLT@$i^+}IY{nfAIaW9SLFMA0eh+C-L8Bu z3-}P>`Iz&}R|(YPBWN9m{iR6tb-Se^ z{X`+Y&5;?tlhgySu3k3u-o?v@;%74(8`nDZ@XSE$^L4975OO zCuev2MMZjd#&qLfbTTqOeR9W}a+3I8=~$YR)UkUGF*-R)@|Kv*vC7vX8*iB+>yc1q zA?{`ZzgOJkPFa zlGs0a=g|8q!%xgULCuEDj@@|A6SIf6ykmW2Mfw!}OJYsB@SoCgEANS|)byUv?Uwgs zUc6@q<2}dmo;kc{Zi>9qm%w)IkH-Ja`{plRHZ&i6ntqeg`o1&M)YkX?;}xx?;_%qP6&rZy$XAMc@~$bW z1v{qZmsmx6A0;pYdfbR_Y(b=wAba49RSA?v4)eHGt*D;(hwb8ZSqJ;`C4dRVWsM!9DF zV0g-un=?{$)$Ss;RU>v*(`}2LbAhG()1}1!#cA2MY@e^Gc8ypa*NGuvDcDi97{%hC zUZX=F@TQKv(WT$6>1fKS#AV@X2wk9^mJiU4!qtR^Q>*b5yHF4Jb{X{Rp0Y zf6R!KqwUu^QPe$g6^>|xQ~V$DPb zS=Z~Z9wuvQtGIJ3_w7?G^nX|eXm<2=uMuT$c+i_n}Y z{g3F|REJ}~qB*AAeniJ-!S!kTbxvv#YWvmRj_!FQQ|?p3w0qNz>KoKp$C7)G>NCdt zDsL-eO|?V-AFFoI^}>9c8m^t<-E7SNq;0tqpIGf9V1fUWwqJ2Lmh^wy=zGcSZ|kRc zuLbRkocMca_%3Km)Sisb`#I<{&9CDdqdDy>oZIg8>(sZ_Qhu~JkGeE`d*@ftZ-g4@ znmX`+{x0k8P$PLZ+Oh5S13Iyat}?};ol^Td7N`l19B^V9b6nbCqtlf$DrMz_^?5J% zdRIR^>fh&&03KyZly=y@)`@S0_WZPWfo%luY;y^WR}ZMt#{paXLmcm^Hpl8as&xE? zTo0+Kj@5F1`!&v|EYX5P+F?tg%kzh#y!Uz?(Wmha)bP}HPdlQY1-`k!bhYZ#R!(_& z{%ZQY6})T$o(n8C$CGNLHVXW}|Hst?T$}j)v}J(fH8s)kDbGe(+qz!q@T9ZH&qk-% zZ+$ZF=N5pq_OF?00M=kbAu^p{!t-N58!OIz3RI}hpaSrWBhTlzVE$@>`hTHCuG z?y$i*Xr`XB@};7@-}1i4(~ju}Z+mHefcd}5{^@Ov)xKo?o76<@y=lkvSJ+?DZeonj zE!VsL%KF~P{ErVjqE7%W$L~C%9~|~n-T}sX$a15j4g2=M^}lh>QGet(c>T`#J1nuT z_rRxhmRQY}`d|9Hj;EZqssE)n(9coM8cobW_SD9K$H9|C*OPZ1*AsvN&(U9h=3&#` zwc75%<+QxwE zs{@a+*P9p82kHzKK z$r|IQTxj{`cK-ga>iK{ts?h*T}i%;exfvm-_>b{^oQAB2}**tl4s+l9nv4P z*j)HmXw?Ic=^Md|hrzM9JEh&mwP-{U{Um7bURaU$?w7xt-(QvIVzu0ki=7Glzf(%{ZCcO~zgr5}ffan{$~%&pKflij>`d(Fb{>a;5T6~~j#aZ0rCKrMD!mA=!Gz`lyr zjt+cJ*4goj=#B1>b{p4^h8HkaoVI@O#=P|f&&@}_p{?(@#Q6%aZUFA7>OjX)aO0dB z?TXd+=}pnY_392!@r+fg%-yR`NzUNCJ7_2P9h-Jsj|1M+TGWI;pPPDIk7XZ7I~sU5 zL3iSyn?B&pn6B}|7dvHMO>36s_5R(q`REq39UYfCf5yJw4eSrG?~bq!%fRt-*>CB- z=n?u+_9J{=i_3Xak8@?}_~dHOG3RsaN1>-H6}u*QQ^vl0z<@V<1)Az(+&REohpsZF z>uASiPT?K;lk4+V<#-HSYs%iQyMX(H!wa1raP$cHR&8}SnxaSQqDvSLt~J5qmgZFI z+mf?*hqfC2m%R5Oy^npR^CfuV5&Aqo^^o41eT00Y#SA>ieKz3dbX46T?Kszkj?0}# zdDpc=p3IAR$~%AK@Fl!cjP{c3eV#vJO>^V|@8Fuh&6`qXi`v1-2u&vydv^QnjQSZf=Nb<(Q9wH=m@Ex7g` z@9K2yv~&d5q#fs4KVr3kYv(Vm%S&r~l{Jr{&%^pl?C;T?HaWkbk5uT3;9Hz)tZvKx zgD&fDi@sAAIoYPRhYy5l?HRioe%F9}+#6mgW809AkHW{c(^s^?^Ex`J;X%GTg#X34 z;zs?-So1lH3i4wA^cwPKtTv}pi8I02-;58uk3bW6p8fqt*8DDg9q{%+PvUZZ&wJml z``BOQ#{LGrz&qP&*OD2}18;l)`XxN-bnE_Z<49@Q-%U3@?L_CSolAZq@7$j9`F%$H z+Tdf`!JVP}e^5;Z-ZlsOoUz|$?A!EM&LKii;&MJ<>^m4cLi?>T_5lOlGr={%m$In` z^fka+=*$`5?SnoFymjC$v}Mi>MFwqg&0L+Qf3SJ}_)(jfi|{gmw;jIXazq2~;MmAM z(PIpF`=BRrIe%d6JLxA~`AMkz&cpL9F;63od=>Yz$xwKXyV)!lD+KjjF$Zk|IP{W?`KPY(u2GN{+$!#-%aeZFQ6~NOJt8%0dGI=D!fGYx5$Ap(DT39-|%YT zC9_Kl@?!2Qo8JX~F89s`-lt`)TK0Bu>=yoQ@Di(*Id(6yLx_J{v@XC|c*$I3CVWf{ zULx?8cgyV`gm;%#cw1Zo>-96&=8fO-q5!O8eQe}Y&fwT@1z`;j$3~^y zn{!-WlKd0e*J~&FE$|+X{y@%}A$aF1A$S8X#vQK+yrmuIs)m2dyyo0ike7SprTHOP zFW|ortRI7q2glwYgf)EJ;NQ7d^X~%&FOhSp$h`vZITj1_JcMg@c!{MI*Mxt|*hjnn zIxqK!JLf+G|Ndrp2l;mp-th0-5dV%g_;)M3ksU6>Th4JIcw3<7B0B`>d3C4X81Q~+ z{nEUgoPVGHAMo>UhWCGgYd>p|9pK-&SMqOx^#x!p`}=Bm2lu!0iv9hk7XIBQ;otHu z+_uMn`Fi;GgW#Og&{}{aE;ME4a53bJ3wZ1(6EBJX3=1$EF z^WfOO=e=(?U@qtTb-BR6;NNYuX9Q>9BT?+}Rfg=KX+^;M{uX#Q!b{KrAS(vpjqbX~nW_aAugJ6qu0 zp0WSL*mu)U7-xPN8~P3Jz7pQ(@>rA0@Qy-W3)1sM__yrwKGuKB8~=lH1KxAt-`9rs z9~t|u7JA-+v479lw=;IQ_Ge@4;Qk){jqr}TVt-$Nf6rlFMf>vedLAoBb`V^JmaE>;T?! z_H`IE)y^KXz`uigZ08MYjQw1;b6MV@g8!UtO5BMF-ihq*AiU?oo8jYHY|O^I+~`t6W)hz6 zgq|Pd`RQsu&iGCTeIYAWAS=4{Ip{%-z^`NA-&OE$ALs3z^nWh(nBJSc9mDxm#`aA; zrl+YNjB9tOikuCkt-AJ(Kn7yGb*Io>qlu z%w%?E_I7i7Gn?5xe#B@95G$3$f)rR{z4$9)OrCiODjMSR)g$CWNP>W3MM|Sm1`UEA{%xQRvyv2VLVMfu$Be76rhWrtv(6Z{s+&=E zWAb6Nw~gn9CbW0YD!Oh;e-F=wcpoJB>WVK8ZY+OGmi;Qm^xvYr`ys!%@qLL6qA7vA z(%HV}jh>e4jjzwX2QpYw#Vn%W++Win@ZRa@y@4TYy2}v9N zd>_iid$U-#r|TK%BN)H&o!DgVt?Ybg6;SZ^V}^!z8c48Hc@6T$Pi-iCFQH}K4LFV+BPPXDCHB#wxwiRKlr;6BIt zAm;x^P!$MYJ-UzGj4u?g*c26jJr6J5_p z)0zs6L&rxR7~C=Q$>6f(Si44i8`e@Bw7J0ePO^u@T&zP*Ol(Vk$Pj%;r4FKHm9Z6V zFT@oXSN0nMYaNfK`w(KS2Kzzf%$U)He()spaC2iu8G8@%Ij{32tl>|=I{0MlJ<#>c zbO+|*-$i@f)3|xC>5Dtj_DxvBX-O8b&UUEbeTl7TcdGYR17pb4n~Ys(_j2RxB-T2y zF917bp2NB)p5xHov|iQhK8O1|neIc{i}L=SocL@*5@QM7-;>fac`lGxx_ywygzkqfg z>fI{So)E2xUfh>7b{`Z|(^tzi&C8Ro^&i1n&qq-QtZ&Yzb*stAN3ecQ&+2oW7v%oW zj)rEGhji>uJp#W*Z9WJ4Q+U@deP+V+|GNE4pBuz^^5k)h<jRzUj zV^iPH;H$1lY-+jDxEgvp6DFeEJ;pPlA)Ui`ehllH_~vG^TZrUdtX+@Ie+g~gl-%S{ z2*2NP(AW##gm0B4#~R*&eYj?ne^Bnjo&LRtHeYPzxY^$B!Nuq8=*!TA1j(mW?l4_`f@^;;WnIqUa`*8DVllLcoQdvKof z%^M8t|2E(MryEybFS!qU%Gcv8WiR%fmp^v?*~SMua5E9lcrrVkeh~3&DEAB)r$Q8MZ^LP9J>QAWD@E42*>f>n52yy z$2$^|nmPRI`SU(qYPrdbpI|}F2Y)7M3a8KJ@Xsut;P@;Ko6*2TjVchQIGn)Y+Iv*W zOpfbvCvm))8Iv5><#9E{04t))-O34nd`s1*n-#}9Ad-%5ROR8lX-TY}IK}$o{R&BM zar_FFKOeJ?;`--*r{N$R(Z4Iy8Z7mkz%Mwdd0ib#+S(U)%}-^mvg@RLFBNnwYFpgZ z;k2ggqU8;xR=YvD0KB~;)0XK>&C6FRrSb=^z1C7$WQKfysOXmc(ZF^ywm))h#rKPL z-YR(47K^J#{-YH5x4CvD)nRwGEp&6)Hruw^7I(Ny7A)+ta$VVu_O?!YVVmVR9Ubjm zxz1M6U+{+A-~*}t{$*UMR(sr#y4gf=8n0DH3GXMOFSUrr+f_%@?WfwahHI%gxPZ?W zhc_s@>wXNsDf1cQd^FxG1#A2|AG|9ExsR~1wKWb z&=p0D2xr1%xifKSj;J5?AzD@CS2*6qlY}#HlK;dv6@Di>KFmcVzWphM>vs48;GBYm$@p0umL*!n;|tCW%Y2GgD0~;^gEPuXPaJq9 zs<0#fGUMC26pp!wr0+4lJ*$8n3Kj<#--Ls|L|x4PN5+46gTjw8{}s4TsJ?Su#W=v@ z!Xn1+Eh&7v5)+uXO8zYmDEt7|3*Rb``0oEvIL_lrDluL$6rk_F2N*xs&$tp34>LZ{ zr*NDLmh=?k+XfV{OTpqOLCxKJH?Y>N9%-M@~(|wKl_I)Ip|8>BLe`$=r z!1#t3{&~iG81H6%zAN#m;wby!!;EWxt8s>f^0za@vCnfwIblGCQ$)k1np1_!--ho; zg)4u1p&$M+^ucuE0zdq+)U$?5HgGDxQNva4LhPUikH%@@M9lvmhhR)aDRK?`K|TEX zaqyhPYyRyzF8Dsi``GVkzq*TYhw&~P@*?^<;}3mMwfLh77H1^Rkx=lLaq#oNW3E$5 zO@iO5SFfq#;4>xOB9?V4eb#f?OUB{vX8tke-@*K=7|$_6{h{yB_~F|ONdDdS=p>xq1cKEb$yLmWii z+~L+qTtbnb^~}FxrQ&BdBz7=9ll|>0EOmhK-+x5$|C9}ZZ}3X}_u$|(5xY^5LORv! z?9Hr?3dAzTyKYgyt*qxK7{AU|IR58~q!Qzmq5`yi?q~cIT#}U-DG$hq zOs?P+Oe+Yibuxczq+p{+AH4Xf@e7)ej7XiKaK*}sOgUe!1nNqK!VW4~cc|c*Wj|vJ z)AT*lDcVK9?25T-Gwnc}vTx>LgQ9ENzE`e9n9QP80jHB$KtBuVr-ObL(NCu!`Y906+bLUSxiCb3VY}7ZJ;Xia-e#&M3xQ@*gZ7C45?LyzVJ@IjqDtBsz|4-%LA9}p$okoPGlWvYMr005=LafA{V%5l?ra=K;%jR zZsnY?vVKsxn6^?AG2)KcrFC_9RdTKC=+YxKc3g}@em(J8Th_^Yd@*uValc<48cOzdMkt1=q6 z>|xP77v-UjZ`uDSuWGRvBmYr;HNK1I>G=VAQnWuRKM4OP~c6QhJp=BmT5 zEqOsBkST-0Y7+A>$Vd8l&CGR^Sgf+fwT8(*N9?K#94|E@93QKq!qHUS{R2D&`6F?2 zX-SwnTZni`Wi#?>FpotK3N-YDyT*7;RA1)eO(AK=Y5|&p>U6!Iq(i-*r1?2J9hK`;q?4A{`(-*zjZ?n1AFW%Fd=KZS z_sev6igC)H)>pLtT3+oN2(f_qs*5wcNV9QbRAarat=WfgK^$8DO}uWW!(}>w1>*J} zjmhhM4ILiGJU2{Qe~sOR3o4(dv(Ouo9WmQ{-HL3)_t^}i2^ zR01zURQHJvvpl|s7NNNQUqCADNoje#KXlYq<;Tm5%YPlRRCg_}*AY*!{CX~5+egdm zd>@BwSpPilr{>+aS3d2lgyr>q>{^!3BRx#Ie2x787h!q5UVDt?de(Z^F0Z?N#hpt&JLTH+#Q&S-z3a}7Pki$FuU0R*bNRB)yH<5B>R55t?d|Q$ z@4UV9uC_(@F8$NHihc*oo$bq)-Sr=Xr0LH0YwynAR4@S<)6x52^PBP~RBpTL-p&=v zzy3bemo3+r?_7R&$NLoi=4$ue)wyVCd;48~a(nxtJE7Pex8M2I_h~?2cdb~le8u|# z-FxSX+dJ=EvgqE9+wZ(<(K%F@SbQ!jcip+DW91!Rz3c0XI&NQa?|8zFmE3#Rilw)= zPn^cP?rgjFc4q8PmfhaDa>ZS?_M*1CR*b{{{b59<+wbiBEpUbYen)#_aKF3FWy@FG z{r+S48lzi0ep1KKo`B;bcvy6LANY`j=TKiXT(R_PstiKXERUUB=fw&i!9J>`XQF2DPZrOPHVi`YR+0P@^^ zN4pmDMArCCQ}q6Ie)rVAe?9OAf%j*w@#sw;$T-x;izkz+zR+bSHvj zE6Ee2)1*&0r9EzkEw4~H$yGL48zi#KM0|EaRIk)z!)<)tAH`~%3D&jwH z@<7y8q;H*@VNiYR4LbQBJz$Wab21GU2_jAcY)!b%ZB;mZohwpk6vxy7<*SsYqm+T` zakD|Xf{L}myXE0ok`xD|`F89i`3v9l(?z2ymmCH}|*SUi#+?#tf8QbQq|Ey5T4aKP>2ya{N z)eB>L$$!DXUj)1$1Ycs{k0^gA<*#=IK{b={>Le=BVOeY+ef>-@`6zW2Q{AbiuEv`i znnEST)K|jv^_qcC0B>TiOo`=aMO5(G-DscX2QTU}$_>igoBs(6?+xX@(*+6*?rJ;M zW_K0Uv^MNO*BaPxpjxALpgqbj3{k|{?YSU;#FrxN5#1Cub6YQJE+)k*ijV8 zM|`Ec6Zwjbuxf#uPvmR=GX*s+RZpsdc>bAh5iy*+fvSD0-Gp~4->*!=^|iDqRP+Bt z79$i}d2l*W$+f<0XHf}4D1RHH&@2F|SqN|&0*6j2j^S`Lzxl5Wq}DZ%EV9%2d4Mc- zmiL%tM`WE_MK_C`Gfbhv2Vfza!N5!gEK0_fUyqJD#Vl!yREN?7VcAx?UL_9WC});Qq}~XVdO!A2I0$H|ftVaW>_W1%Q-)a~yyRLx3`W zb^?Hs0zeuj8=6!|y8g{c;LAez3V(JA_^AbeO8@3E01_cU6$}9)HU4Z`DnQlxH@oBU zs`F=8Ou(z&zqxWeUJd^2stI^CO~k9&zqw{SUKxLO?F779{G02>#eg@}ILZ#@Oma{>kq$y>QxQHw~M>j7Rfd1;jE{!rSXTk^eGjGwXJ4PtzzUow0Dcg&LS?Cu}!9_a5r8F9Yp zuwVjJ>>cacA+3GeqA&mP_CTLTU4|AFZ{^>HFAamB-n(B*7>3%Jmxpls&3NrrrU^;pF$;dHpvUg0V6%3%!e|?1E zW=6k@+`u+UfYpn3wLJKs?49n{;uHF0cKnL!{@&Ne*+{^61DUWhy1LTa1p>E%T*a+p z`LB20H2ppASS0UF9{ywj0l(9&7=7$fgT!BMGDrlr+2~^ywZAN&Cd$UmELwWZ&rHCr z(@os)KWL$-vjLiX+Sn!Ec#yPH`i-?FXzXxG8(aC8;a@%fs`!`YU&1M!Jn)ST0O`N( z9nssy)95TjhX27*=!;M%c@_p~dJeI;Fr4b{9ZA~rzoGHK!J$nTbw|zEh7Z~H-jCi; z$8UFCNSVIj--KJ|6}_+bbyr=$sAlc-zA4&xW)4Hr6exT4)DG_oCpHMrv6l@uGIN#* zN8zt|qgCO&j`3mG%B~2!NW0Pjf65?nQWBkH?1hF}R2{*ZIWJwbeuuyx7k$wJFcZrd&Z}z|C zJTR+Df71Gs(4V5-QK#n(gcG&e0jqwe`{azyTe?q{JH3yR{jKxeGj)@k-i^fjZjB&* ztMX6&Bdzy4JyPq{{cCS3cGmZUBxN0aEtG4|Q@tOE?`-Sc@AO^^*if5ktL}W~n}0;i zd942jgHX}=e$MIsJQ-?woiPdW9kgz0_nZKqzFW&FI0o3JvI45Hv!brZ;|1FEz+E*gAyPclTQ4yJg>A=+b2PMG{ zVi{X#Ru^c>{z9;F-SD+vR7;+mkK`~E2&uQJWt&_eo7lZ zA-)$o_UJTgp`fJE)~3zSUOT}QSqEiBn#R@}rKPm5R*6)m{c>c6hn){)NhuV53bH%x(T zv4KojyXWfjn7~QZdq#T9rmu*Oo%QT{&g;&V->}>Hvy{r$xoUU-uBFl*r{_XtZgM3u zq^!SEG%pmiTC(p(DYeaM-Hnj+79w?KiC(MyTcZBT5`RwIpOx_cIO*S?!Uiev?=K^W z`}d~_%KZCXf|P%M1py$H1PTBCDgxKPzsB3@X6f3$zm`~!iPaHXOU&EpYkDt&bg!?Jl(0Q0TJ+tebL2r+6)HbL<2t zxim_HBPkY6(%JarMgBq;l%I{WrKD4qQW@P$4*Mu8^pGmxnJn~^u>CNjX80$V7E#36 zcvPD*kqLrKp-tD>m@A-e8?pnnB+0!o1vKIpEMzVgx@AmQMraYX5GDy15GDv0GM-ju zvW@ky1e&yibcfgJc4CySqCcEF<*a@dKm|3@`E4sqB9s3C5r*9C?at*d1mTUqW*Z|) zPR=$?0>>takW}}p#eMN_W#<-aACSn-jb<00mu;L()ds;{lx;j;;gl>Yjc`)7F_wE} zGS%xOG}Q-(%M^k` z88}o-z~Msy4wq*aUy*H0k6)?1jjY#QlQpo;pq=ud9jWDx3GIA1XvfVi{z$g*qts~^ zEMxhYLdH^|kg-g+V_7nOEFTZXa#b*vN;{Ue@ngAK^%=`G3K`3_;Lth&hpGUF>g?iA zWE-yohlPR#2SZnI_+)^?^%jQ(<8k;@fJ1G7!wnXPmhm`zI>6yG0S+dqRFvn ztPnkCJJ3J8i9*&#h27Hy-HrZ>I?as!h1SOK!O&PGwDxLyp8SF^-)x0nkGq!4-glgy zUT_Uoy~MPfpV&@9T{e;t*Q1l1b>Amr?G05~p$z$1YX7)f6b~)@6ceI;Xa31@3 z@9Ui}cAt#icNi?5?weQa4RjBTcD6E@RA1%{fl(#hzbx*Q7ICZhBYIQLV|AD0eqIuL zuX|hMh8EXdd31UU`i7Foq2Z{)ZgwlhD=r4S-7V|h7QNw_m8bmnOMdM<(U&ag-Zsh0 zi(Fmrtre~QYyrZbT8Zh0ZaC?D<7xKoL$j21mU8|r>U!v7z=!j@aKikufRU+5Iw}II zPNwFYMA06rG}+h{ML0{7)=5!|S3`Ci$RxXWrEO-4%x*F-AhUBC^kh;xoznU${z3P8 zCIj<#xKb0sG%>Xnph*SFOewR%LO0o2>fW)?%)sw4#NodV$Cvh=^kvJ}GZ* z%AaIfC@bGxezN=IC>Cw^yJwtl=Sp(b`@7#Ab=Gfl9y{fo8rfIAue!hMy# z-}hX*bnm@?cXj>J(>oUZYi8+lmwtHOtOy>4i!t-OxzUU3+>24i-kK8cHdzJn(m}5= zK_t;VSmZS(5uT~;eMMxHDPwNRGs>fe^)Sgxbni%;c?x8Ryk?_{LzXns%H)Pw~PiGt4&q(^G$d_SGzR~c4d(EbA%(lCq_0}0N zm~D1%@($Q2<#V)a{X~`IK?npLLkWqaJU7a`2gK2zB1Yof@$Lj z0WVQn1k`4LbP7UWN}XxIt`1>Os+|`1vJm!|O_u@tAz&}3^Hm|D;yCiI2yr-K(`j%h z2Zt+xHP(v=aM+f8IE2+!jk+$d9|2ZYOGnu5Zd+!o7ZIS}rYnG*4(!K)H5QKA-D1nG z3fq0urYnKH8rW-qZ4KLf#Fkwf!s=)P9IAk=2KEzd4ca`mt|=1Nd4rbv8!S*ww$uG2 zgt^{W5y;{yA~P7smLPo*KRf3T=aOFGABEaEFf-p{0b#|XR7AA zJ)=&x))svF@ykuYbX)MelfA+geCF{FnSumKmhU);(TElCHEsXm%LuoRpRa zKrhNx?{sf`{4!JcBuW2a(}FtwkuCk~fen;yT^6h1_f&b4r8x7QZd zKb|5EI8>77R*ovQ_PKGQZa^YN*s^g3HLX#XR&@Nn}n17E48%Ho$d6t0|y#wDJlx#N{L&zdn{ZNE$tA5 z(|fyZcdJq%e1f=zpJCxY@ATdV9DC}u6!rWp1au03I!*?GFF3t_WE&J~a1_`OSv zLCn(l@#_%H}fO^J4{h`x)lf`eWYu#?JO-X9d)E6xf_$@5-hf5>?lK%*x7Vy)O z2ft5Q{Jy7Dh+mYr8eO#r*jt?5T8rDlG2Gx`3vnYJxA}1Dt$1c2+`=N~uePQ48jKo_ zIgf37oY^m$zSD5!a00+jJzh@E@Oeh8fMuK|aa>DcwR_2yG)15$VGn9Aku5eSN8%p9 zpIE@u7Au4vCrMZFp4Xl1zu2Nnw^%Wx^$$L3{kyhg+7>H^vLxwuH6{1klFPOPLg*x& z(C=c^-DFuk0U@G7RcRVMb7Oc>9bRP-a_1KM;RXnsgF3l7cmAp z?JV-1++rjRWlmO}Xv#n8^j>0z+o5tJVNAJW%Rfe!yDb7D3#opk05!tJfc{L&2$z`C zE7{4i?SS>3++u`^0oZN!xZ3Hx(&A$JGJ?aDUt-Izae6;yacNZt zMrN4u5qe~>*MiF<78lpz@^FBQ5f=tj+5u3u#~-!0v>IHDq%Z*ghXts1dOvP)F?|^! zVam<=U+sQ^a|4S@n{YAmf$~+$Y5Y27RyIJO(l!K07?~iLKLDo2>Ak@s&}I-IUc@#c zzUmsp!6yN@-im`ZD-N87lZXNV`~V&(nx6A^4@ZHT+83|r&Q12VSNCJe%do#;iZ^A& zo!)VOv$6VjO|J5e_C>Gi?vLV)+toN}Qg(iEUt<){u6A4A%l^YgSllwNa2&d;;hN|q z?^L$=n)CXi*L3$!)`_W(+zJqZ*F^h`g4aZJDH=BZ5gU!kKVqVzk7`!tSqFAEC%OH@ z+d@GZs@b9I-W?rk5Gd5KLl;`0a77HAVM`tY8Qw?M4Go<(Ern}g=-F{V zp;8^%VS&Q+Ftm9bP^eLd{?-D8i(=@18wV6>)S*AMK;g<5`pP(

    l}VVu8XnF*Iu& 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

    vH!zj zw7q^OUQ1hb6?A9oR$(dY5CC2VXUIRBINhQkv}lzLbgFvV?Z>Q&h1btPn|^jIE%(QM zm~-|%0kxDlX}{UT?(PD*U)B&*oOLVu-%h3$YwUGql6_mYnNCCtNO&?c|4Zu{`?Jzr z6)Qn<-{Tke;%<{97y^O}NE+jW)Us?GTrDP)72s(;Lsj-NKsF*7SV z-D9G#c@2rfT#vxM6FN6+gvH;P_Oob793F*LAi~EtL;&nvA|-usLgoFh#9d09dQ7Iv zO=J$6%~NWbFxG{@e2L-`D)In+V`3>KX@^^}n`Z|58d%SgNZ>+J{3&c!LyClsD@h04 z9GIj)ktiq({**e>7Lk(?E$7qE5JDfjDaO+9+jOamvgf2@giT0-8=KSg6B|bt_X%xC zwjP#;i$P6URNBZs={kcYLx}8k5!e1wx+0A>!71uL-T;C}v+wF2D(ymtW2#=f5rV7i zFAGn{>g_3s&X|7@(0(-Fmxksb5>E5!7VS_#=Lj{;L>0mFJSt5wXUz!=@^IX(zMMZo5CBK5DZU9`xi0^? z&WyB*2)g}}wS<+fg0O!EB(X=ec5T3A4;!h^HVAl7-9It1ipY6CP07gytO_G52mL=> zlIB6AXkYZgA-gaN9@11YO@6?}H6)v{!$0h5hGwK9U}Fb63+(gt3Sw4N+0hPSJa-HV zVC`MqJHB?}KeM~K`^nv_Gh!O8xT@vpBHeEICQ8Y2mU%B?N!BFO454NB#I|7Fa65`< z^~4x;gxUZ>8N_)H^S#Ct!7bpq0x>PtV}SRqAsB7lqfQ(d$NY@nFCtb(&Gm?Tz*#_+ zSp6?ul`a*#HEEgU#kcsa zOBwD5^9CaJp?@f?tA30d98AECtgf(P*Ip}9CS@l`mdrb-{@Njd1K!IlrLv9AU+q(D zpmLB*w0$F&Jdu(zKpE7aI-guCe|R!+)}xt#VQ53cAVdUW-Pa(Ap=pzq-m|C*DmFwKXs>@)FhFzNm{t6iAwh5h=9SUTsBl|60DZm$4(%0O6x zw&4ft#)Aw+1xb15Wuj;R5+65xF}~U7!9!GiQ;n(LWq)*?_KqaU-fozx)En^c;+?Z8 zoZc6G+&j;a5s#C}C!}sSz+S*{Yc@deeZ^Ap5OzBQ+oCnKN+0`Z3^xh@BTbWRmr}~pG+q7A z+FBk?BcG?O{}lP0f)ppD@UcI_I=e%4K8eQJpP+B)#j~jH_H>GfRpup5rUCm&@n^3J zfr4I$H8TJ1dHO33ccFl2LAosGuCDSKdTyc^H0Cz`t3{p?X2kscAS!&~PD@wC0K1&Ox6&HrMJcQHtUPZGmz(4zTr1&eeOt^?W+g7%a+ydU{lovhqmnwQWv zj{X;Hk?mjQNo-0o#`F z^qgT{;dX!Zc*3^Q1fm&pt5+nsH01%Vo%YBa8h|~C_00rIan-7Mu#uLiwAnon2moC&;@@Xj4|R8#wJU7Lp#`V`qe3Gdk&BJdQwV4uaRJIu zgIS$COV)>EIf?5&m}D;SF!G%)qfn*n&8sjL2`13aJbo!eo^xZPNpS8ye35_7ND0Q? zsnpa$4f`ZpcAU3B!bSBJo>0H}u@@XShwCmdfp<>PCJ~}p*e{JhRvDShI?ihJ4N1}Z zx7u9a(QZ;|9GZTbbIzv|Yu*Qsw!1Jw_4i;%vlv+Eqr95j{LVR={-}iSM@8lzs8P6~ zU6x9fRF{NM=h_niAPnf3x{VX}j>-6+TOUe3%l6KT*?<7pT4Z@rcbK5IVPZYEinog` zsH3y?d2t;4mLp$mMda5?_%9JzQh%B|QNQM?I8zTnItKX+fn4xD`cqJi5t5!T2GKcS zs4bxJg!<|-ol4~7GD67KCnzNt$(#Ifqj1~w=9M*#3_UZ-l-u+ro3=>uadU#J>|{R< z>?_M?&WL`&?4UkB>~xELt%lGGj8FnKRb`mmdL@D_@*`h0sC0ea&y>2~g#v*0Hj%rt z29vPqvcP+Z(%qJQmjc2xc;}#vTIKGO9~p#vnWUPwf@5b(8c%h3i6lrkTPYjVG0K=Z-LUIsXiKw#&a zFQ533U8z@PBiDXGwW4L+Snf-}x5AOU8wz8KHdd0uEt3AZJ9=WiI*B^W-#`5RY;rZU zTcvf;Cu_6KU!_)A9z&aJx3W#iKQlg*a!zJF%(nbyLNjO$Ile}`gstSQ|N4Kew4@^C z-5F3alVQ60NT;G4#{W)xV6_{$H-u}bb#3y8S-5HOeL%k?Y7w$17w_Tvh!>>etfJ%Y zj`1GX>h(s%8^LurNl>I!nQN$k$-20?>wY^%s^CHY{d>@N2gb-WBDR2#}eM?JMlL<$*O_XoVKIzU%m;`q(A#>7DD25`lyfDlI~ za#!ia{!Si@OWC+KuvRT3TTPP;m$SXeJjWDMWApke zParH|61jmy2DKlD*V?J;gNbm(WH_hky3~H>MLi`6BCVS!))rx=6Es(5bU&c}{9Mkw zdiX^bY zlU${=UMsN*iYI)wS3afu<=5&!d|bH>GrjT6_8;NgO1^(>$k?lK6Q&guQQ62=9d~=( znj3+o1zzEQz#EgQX~^gAx;d=5hbjB51TZXAefv1E$S+5=B2&>74rvA>8D8z-viY4y zt4c5KN*@%9fAb;M3Ddu>+Dl?NXhW7NDTIAW5erS~`xcHY2_teQ-9s9W z3fDQDS*OkxILTF_CGW-yjQUQH35`}nE~jz-+~n=#Z`HjGLKH z9&~N6tvdj_ILiG;sQ3Zm6lU)9PA+-0Eh;{XR($IJ;icu-ZqTQTlTjxf*+5KMAniWb zN#xASVU@EqbFZyGLlDwj_vx%G`v2fX-rKo7JV^3sZh}>xaoRKF4C){x9>4I*l!EO-JO`SuPexxref_5_94CcwDfhBGTwQ-Qmu^_Jy#1a>6QKf2iCu=|tTBlJde z%guus#&EB4xoP6)89JQbBxmfu(sdJ^j7U*~@E!9vY0?%4cLFvN@;#SiRk_`tc1QJBAe8kXA+c{{Dq$>^CBY`Zx4abbnwplLXN1kaZ zR1gND;ZNC{-%z`mu4?d89-{W>8HBg!p-BfuTg60Ii3PA~#ppo>TgnBCl);D{h?eo; zO}s9}yL(BB+Q$Fup)XPTAc$GafLK0jdg|z-hT#62y|kL1!S+;3L80d8$x4u-=~gc! z4&cbFf9|H2kYkpcZnD8(K7YQYS(^5EXmd249+9*mbrppg1Vn=wEv@+7+0>{nhcuQj z4I*du+mDiVYY?p4XZgS4eVC6sC*^KB%On5u0BIxi++7JH7=7x812hDa9#aj-e5Vsf zMzKjCxCIQ@^|H5R`Fw#hv6JTYh+LT1t*m$x@oe^v;OWMBb`!SDOeP)dE&}2M+dhpt z{lL|=5ocA%^vk7%Cjo_q*Iq{rSso+hiKFF~IlD)Gb~y zE%i_QM8{k(6W9DQeDrI`dmGs?iZtoVSrZ)WD4q5XhtAH|69%u+j_mO*w<(gox~Q%0YlMkVK9bl4m7+0&0Q7$`blH6%JZe%bH%=1^`+rZ1DeIZ<@f1Dr_@gttx=G$s?K z+vq9qv63-*{EF7dput4qml}AtfXi7_z?Sh1P-?KV6$oW${_DM&&!Nr=GPgfUIfjWp zWfwINIXNk>&(Bcx50u750&1bQ%^=zpmNn*x?B)&2YA@m^QumoFG=L6voa$Jl(5+2t zvt3I}=0wbtqk@J-Gc}Q402vL!CQ|vG<}a~07j%pB>2?X>pLMhu-frRq`Rqcn(mQgW zLD)h%4j2`s$)pyfo)~c}GFyXp61k}L0 ztC0*;4H&^oe2tr!;ss&^^`;LJ0nQ?!O-q8Ov$0`BPjxl}tf?Pgd#3`_hly+`(l{G1 zC?>Hw($!Mr$K!tWE!!i<`FQ-BEzLUa9rq{w-@9SN)@a+#+_vgFI8a7Xtn|^BW1X{| z${PCB$aUkM_1>9ES$rsNC|8|7k-&6+P5|ZtZH-MLonUrYIijzX31C)4`J-ggZ(F|Q z9sR*&%$gp5ry*hY(4D&5{J7rBJC1_x4E8f{ubK9%^X--x+A_)Ec(6JK<0)X%hOI92 z>Us4`bnUV)@t5g)c*aAbMhbo{VqQ4>yM)E%V&I%4aS|4#aF(SG0)op@)~hs@`FS_P z3|^m;RB30;9|cYodFuL4j1*JGO?(fB^*!&ED4LXl?<~*E3c>W-z_+3<K{U&|@3Z+-;f4_2_-$yv6#v;P>uRREC(p#j08wa<;lqTjij?IL;v!opjg@ ztBI%ff_U9i4O)~R`?yQ{lx{@Ivs<^YWotp0tlRhvv#Z;=LKVT2;+9MalBEsTDVYby zF=EDm|9_NQ&G~iq zbTzjQEVUGTHR`qL>#fLam=83!J=ki{?oCR9iERP;hL7~J3BM1mg>z}lF6rRsVHJqJ z9zM41dG$(VO7O6X3j(W69mz1noq;!nCoK~Tm#elz%C$F%IA?F#O zEY5wo%{{!duF375Y4JO`vn`#Uy)PX^Ddh2vzksCKub0_&3ZSGHO7k^u4o4t*)Dkj@ zj$AnnD-+m|sZJ1CDcPie`(6i*-n{MpXRK=CQOL>N=C$;B&G`cRQqV7denz}D9`B-; zITS&Xh&G8x<+Y6jSAaIIE{l%1CfgBBlM@lnr2mNui}a-%JLQAdVBPmiL91CoLoIsH z_Vh9R5}Jc)R6do8M1XeAo*x^_;6adLnk5Lh_pZl0z^$DHbZr4?dF5tl4zjgiEs(FA zR{#rbB~?fgQTwxv=@HaJ2|hA?o@n3Y4Q1Ats^TUReU-?80%&uyQ#3d-U&%u&wUkws zA~9CV>uer*tBd5cDpPM)LRI2og&}Aphj4taNhTYU9s7X|!x!~yFq;KJDAlo?cS~x- z)B?yaQKX!E9Ov*BREk596R2O&(2RJokOUH%Qa5_s7w@om759MLUtsxK*iI#>3S5$0HK_ZKiyF zjA}zHxr(b|c%dg2I6S8bWzl{D6PgOd4^{CUKSr!8LIYmZI~km4%s@8(9vcd-ANG0<{@yPPp$%y z=pw}a`K-Co#`#b2-ZfwBq8F;SYdmKT`8A)XF}dZ$-=r9`L1Pn_F5I%%)MR0EjQ^NR zT+XF><-B*dO@iBa?rYUsx(2VG4QNqprtJUriQ#()9pZZ~mBtL8H7B}zjzE-qL52%ju{P zFwc4QQ6!y1rR7p_p1 z&K9vh^V!56andz821=ArWh4flLsMBpEocX+he5QbHn3kK2|Pi4#36q=aP2=HsaRWR z*?hBR$9pG;n%@=H5Xe?il3?<`QiE;2Qu(;Sv zTH3WJZ2%Kd)^on%{zn-hIH>Q6=m2%@9t|bBA^q4pMuzPgu?6Ebt#Lf9-vNi;sEpZAgIIxjsVm;D;iu_O5VW=^gYuDbh&&=nf=i><6=;GA(rj1_8eMu zF;50apSWSMw8r>a#V8)Bu=}R{GY#bp0#p0dIysA`+)s~B8OF8)g@ZH67 z0!@GS=wa$rhLO&<8yJspTF5QHF<{Y;*7I9%fS=vbA?^M|a6s8Ya*^VxU@vQ{sIhf{ z?7`#}a3V7!uiwN`A1Ux61TI1!oS-ceoy98!PPS+o7+F0w4L20l;hodf4zMz=Q4ZDY z8)ce~x;hE=uj5Yt(<3^0UNk(ewr;uOE8XX|Ck<}=X_ty%8WjD0f#6i3QB=1GV?NkK#YLSLh3fBZ> zA!~{=kl6`bLma6n{IPrg;6aRa>;+jo8ss`3z`G00_DDUwJO^JPL;mGg`x@*d<9DBM zXL+8o|MO50@)tOc~jsn()Fyu#V` zn%GQ^L$&|4rM}T~Yw0Ub=T1WOs=Yr192D=rPQ7shKj+;6_C{@ z{;<+TGNuFA?<4s!9lp6?9Z!;e4q+q@OO+yjgua`h+|4 zKjC=zJFOefOX*&~g6;4oy~!O0A;Pg$F90L$m6jq8!D*_UxBcx9cMJoi^nl42ASkaL z{zYv>XgOWI{!!JrS|uYsK^~qcU-NbAaJv2{7(Fw-WuQWQyk&gDxSq1PYYE2bdZ7l? zLIR0xO6QY_={l)9uL$A4HQ~~VGN7Jx9E|?hwh!@^ z4SO1i-0eQ?C7-z1%W6{6^*?j#q z^1#NAeH}8db2INU6ldOk#}E*q+dj6&BWAQN5_*vmZVCDhMS48=mQBsM%X&gD?85@# zT-cx^axD!VszQP`+6)}RXZk?Fkt%69%ZhO{bA(Q=Cc>FUP0f-m9=ut6GPL}aHK|Dy zkmFHaP4gTD<0AI6bdIE5AHJZ``iabYTmosH4MJcwG zKU;bwgQo(rPw(;xx)z#e#PdE{ypxIo6ubU@Ueb*6b)ir8lS~v$SwIFD0(=#6<8va< zLr$Fqlx^Pl1~N$o25&>wHw69a5OgDWGXTb`Of3nEA71`xc+(iG05`eRVcE2KNZ$*p zP+qjFoDG>T^tS^9?^eep-7Q6~_ZBmSX+)&{7>HOCuFzv`tsR&WPFDDg5v z{oV8MgJ^icBcn^5sD}8hU^goOyW1koJGgcy$BREJL=1*Xjn-knLD+L=7&2cGXtrg_ zN~}@_2La5`hGtJvU6DT?n&H2ftE~^YJyAjoLSeR7c=vuz3&7=n{J{|?VPkJGIZVG; z->~^r@(e;QjCNNbbyG$ARHH!5 z<8AKTlmp_3#B8<-oyomG8HIpYz~?(BPB)g3K=AWUuRQlqXvdlo5DY1z>JVsJr~8ND0HmfL3E9p!y^J8}+mMLk}S z?C7_QMTSDMfm&Qz8J35cI^weh(2+i_KvQ5@I5BZz2X9g?^>V|v4x4=d#ntKGv3Ydh zyoHq9$&OfrR8!3UpILhr2aS~Bc^`+uxd#a3-QSDkn40ZeI?@|XS?Vyw^&$XSN{=<; z;i(SmENkPVjoF^B;P3F8yVU&G0T%cpZwQKnxWek`<0Fm(A6Sa}di|jbJiWc(l|Qoh zz9u|oxvCyl%}myOs*b#s?cz zO@W0m<_W-XNt`xVQ?X_;p9rE#=L&PKw`C3JG!>aqWz5t>1=?xJ>oqN8LX%bGpgY&%jb$wR3 zu;s2{xTboO7N?b?$s+eUqg^vvp@jn&H6)BgkjO;k3&xx2fd&?HH4?mDF%IsoWi3|Z zhhF_8et`J}ED)0DRr#4o6}ecUf(P!PJFuSo?H~>5id@ThE;F7yI%%2ZLSldegGQPP zPy<2ZkQ*pJvmH)mM$W{dcH?*d$X0Y6b%rfGY z9b^cFGIW8EQGiTRw^Y_o?BmFkJ5_$~h+NHas#94Yv*X%cv{iXZC!ozO1J0iQ^L97T z;97j!LG#U>N8M*#ES^ckb6dwhuhC3+Wo>SJ{>|pIdD7EPpoOP;PIZY5pi2K(;{i zDZi4v94Daw-iZv=P5I0S*B%<-0na@OuB$k0VWRdXxYtJEEb8E0p?En);Dj?5`$mC9 zMr#jEBW0sB5X&X{j}y+RO5F8XiT4hnO0`hf5sxmgy0GjE{bus$I1(HwY3zdBSFg<( zuQSfIyY^x+1EMlRlGgGtXYiLLmBFmP^n~5{txHOHg`qPrz5xW*d~nm99fynWbTY>S{?Z7k%cEi7SZ*HBn_ov%~c-|gH?GVz8@n$LAhQ~z z>%`!wqAT0BrI^ZA-B4-PAQ5^Imw-r|%}ORbiZV`T`Tw5~|65?1d25gK1>J zxqK2nqEdB-pyzNb6tz(NBonf0EiAiAUQA2A_K z1@X?tj3@t#4F*#3NxL8?G@m!+WugxkQF;8J5u$Dji$`_nC0aX}bz0I%^Cg(JEmzuP+;wyPqYxMvjBhvkGY}f`X5* zL^PIS4{qrmJ$2yiS`K=yaF@gy{?vxR1o+U1F35H_CxA7~a3H-jzJH2p}0Aso8<~Xj2)I%8_=^D4hBm;nr092Tuwf9 zqD@*FDc%y8BI9ryuDH&oq6Cogo<0tRUR1rry%pbX6H zC-!cI`m(Ghz1+SUUJv~Z8R?Z6pWm4#);yf7E_jSE<;*jrs1s&%S@ELmPO8zZgj8v( ziw+5u^p@L7QEzG4W2ySvkH;Q_J?)5lNZjt36Aa3y?dLI+vVrItN8$hk{Qzuu3abo>Zv4Ip5Tix8U7!UGVjvGz+AyoPr50Xi}B1T zPLvxSq%XI6)Kud^s2u3hin-B|mnEPm95y`onZ8b7s=-Vs<=P@$)}aw45+uH-_|5Ug zuXL6^SBQ-t;b=8{_QIqcXNz;PIG0S6Ke?;%Ll-byz2FAeEb1J5qNSIR^J_ye}DvFKjC80Edm zZI`%VVqT3Yu_?u+c!1`d&bw`Xjp7eXLR?%bH8OHsf(18cO^y%6WLC+sSZ(z%`e9H; z$BI?k$UT#6WQk|TZd-LaMg`RaNc}xZy+>zy)q<@tj#*6X(DCDGRM(99gR|8W&jDSTDJ4*(cVwUC$bycU1nd zd9yyFh$*+(QxF)*D?EKdA&Uy35VMjuhV)il^r=vNwp+poBCPW);P z*Ws!A;UyVZ;lm}RcDLAgYLW_thU93D4P^4Wn@F%EVh=T3mD4dgRTy=S$&OaCN%2a{ z{82$APByODlIFk-!>h)s%NS=A?mqTHNOv!h*0o{V zpNCw+Qf5WH<^A^$U-{Zsg}LV3{6Z*#V=@&Cg=6&t6IKn6FIktrzf5v@`@0e;y_Wvb ziZ8_5qpY*dQVtxr$Wf`I17_`yMH`Z^-dJ4tT-p?T^-zwChh6aQRbi*WXZLJQ`r6HY zeiliukcVlrNUaxLRU+d3BBh?9b>>@nx;_7yGNMRL%bVFL_-l`~7+CY_8k-KAC!MS8 zJ#FC9?yj#AI@finwdBim^`xzh8$vUrgOXIgD8rgONiM0B5ML*JxiH?h8Z20QBMWOM5%30AH7SiL@jEXPXA$Hy@x9qqs*Dj=^p1fN){HelG;t)vXisdPZMQ? zNRG3Lir0mG@nVpX$`{1oy0h?Y)XVP1a*VJU682b-p89Y5WawL>Kx-Xo?Mg*+LZ&OIy zw5yPVyV>ahJ+k?OlEWfMNmUcvhivc5gmCd5pHLI@(*Iti75|yoaB_&pDWqMF9=pUO z7t1Q~Q_4y21G76zwoKfWgnWF{?}eR5idJ@PsgqCkm^sSLza-cxv3+#(ds5A(0I}9O zN3J#GMnvtI_2ViNxo00%x6BbRwK|fzIdmQ7e|tv6P37L1`-z(uvpxpMzox;i=+&zD zI9{E|qIQCuGsf~Zo8BUg2@hBAK=>MkCfQX!rEyh0n}|q#j1+?})OL)%0poEO2}cv# zQYqA33TChO)AG$)B=)XpJlyG;eY!1xADmY@w|#W$fJR4ON&*cQIoa(|Mj}G8JjSq* zrYQAiX7SsVrj`#ABHwDsWG%M4ov+kV^V!D_>`gP^s zCi;AzIXQ;47#Vr!m?U)wIyaYo;!HbLBsURqZkjbSB6`A#lO;)PK`3X-_M*d)xY&#|-kVb`BJUax6^0 zX}Y>GHT1lzwB%avYTUy?=Nt4p)f*nmz3bqYK1#XH#8>b+crBX=GD>1bS;@E#W|~n( zc|OIudb7WOr*1akqMGlSX?C-lPDmT0tPSpw!?kxN?T*wq3G@cNcBGKkcvv{jd(im! zjd3fRPTxqZ+pqi1G@bRVTB2$(!#1U`^7HZ8icz0D5h6yfe#M=!v~8{E`{%w^gHi1} zsajmlo7#glUYwZ>x#KCma($0ql4)dUx?->hfg%)`ygCi1h^q-3{t59Mmg3f7?@2=Zb#R ztaY*bK-(nuJ(6cKcX)|tI#0Yysp4{a(YITyE-C2|&9;{G{@eYo0;i}xGO^|DQC!g^ z16lkr7A1xlmk;sd?D&mrX**(v3i)L|QMWDODU{gnVs~7aJQ(zFi+J^EWoY1Z{bh$N z;h2=6bH|=dKFoZxe)~GzgqxRkz__b7{Y7j_OnjuPL)_KxSNo*elpJfnEq@j1&|4wk4X+?MSdtV+h_ z?u}*7DTrq_eym6P%@I>UcfBlv;D~y##Bpq8)kc=%xCTN^{ug>EI3id)2Fb1jR8oHC zXO#TZ=jxfa=CHPV4WkJ|iB(Zm$}^gyf}JMePWsoI(x;u+OZ9jgg9mhN-wU5+5^h&~ zYy8lnovGDp<&bBJZs98i>G<~;74O`bEgyJXeRBM{;-tQxfG0y9)-AtF68hQxESHKp zNU@*AXkAm@9Bra+rgFKh)tq_PbLDpBikDpo^C|oY(}${aO5%KVm?vBZn-4t4FB$(@ zbeivC$F(Zq)0z|(_Afkl}F?F*gV3?ak}M_Uc`RaL>+;)&lj{q&u2gC(hy=7>Z3ZEn)IobiD;XcJ)&s2 zJ~|`9{MwpX$t{euG&A~^8$rQOUyHpLaf;-U>Z?R$Zi)v9lHLtmbC|vF$>NTPCkXUXtMRcOKnwGrEsF z@+@yhl<1H_PgBLrZdtRs3!w-3lhW=Q6{Wn8GopFBlbNTLIob*-a4Kj;W4k{^c3_+! z#b27@Inn#w?xn^1;?m~#TzyX*%cxF?Xf1rP#u#=Ro>mn)eErG;HC4WK%Ddju1ZfH< ziKQm*TybxtmMb4fs`K1Z6VWLBX5H!)9lw;* zb~D!s^ADMNG(Gb4qw!34rMxeu>kxga&cNX$)*flq}3D8W)QO`CPTi+(eOuOzkc|_viIl*$#uXLDcvofv8kymem z{~Ppq*n7KNz0ZpNtbI|$LqbM6eZ1jk^vvk$7S^o^UuIu5?Xpfx-4SQcanF|79`n+B zMNFNiakz;5-5p=1>~y0m-!tFNNe7O5rqx`ql=^V$O8CmerEsi#J@yZx%%Nl}%a#ge zare&!el%+fTpOEHkMG-LVK{jy=ea;vWORR7u3+OpYRfb2x{h%Iy5|k1V|*-;GHZc% zo=Im1RhfM}D_irF*OHGxEL5yeW8wMo1DAk~=C?0g(~n-Go9FK{VGVQV;L18YjQg53 zGySUnOXJ68Tbn_dryf5ueryt8m&pCqxv?ceTh3b{<)i|mVt3O6KdVsh&mm8POC5Hx zhcJrozkYwwlGmvyXaj?lquPDT4_{u}zoGp}7Htb|#Z{s^tQCE&9dZ+*X_2DMIHjK+ zsC-L$?LQC{Wj9xv+grY@Q!Jk26ox}^Tk%Sps9=`wQ4dp9MWv_+QY*(C!l|K1lP3;0 zIW<`{<#SKCb|bBX-I-)&)<2$qDZm<^L@&32Ed8|JhbwMySKi>Up?;*$BhE9u$GX_a z7z`U-++LopEu-#dKgncH+iL65){6BZHhU`X0j*;e>G$;$H>baD-McfMM012|#1x0s zW;kj?a19|pZoEz~eATT5lkr;})<>ba1H+x~#J;sTbh@h4o)Z{&BVlmWjU4Y>xQ!tj=ug^11wdmK|5QIiQ_~e^XYOPb|WfQM6pQ=Mx($e^md^C?EWyo~B zTR=uahKR&uNy9o-DxW@+i8gc7iaI`)e~a_NSaQmx0z%TWbPJ=22c+k!bpN+(|-2UZ*@lj$=IY`Zg&mxp3DkuimtalGIt~MBPVQgv{7tNlTf0 z3rPumO|WJoxom=(vafcAu{*xOIRjOr?TnmpzRR=Xx>9l+G4_hlX}RHfp3maR3r?Czz6KKCj@`!{6^wc@GdIjbCsz{_sa9RjQ$piH zb@x*;>83+g3cZ5!Bo{wtLcU_cg-ZL$^`i%zMHqbyB_<;!j?6#tL<(1ze2U@lL*Q^* zk$0WBqU0m@TwK+2?Z%0xp>zEq)mOEmO26o=5`A@=TJHQ3D?l4;h8W0S84Zh2p1F09 zPyEz|j0aURQS;Y@o4aD(m3?~EHyUScT5StIY{+{Gl)k@FM1^2%vM(z<`YB^^<>sU_ zAETy3-SJyq3aw;VltuMf3-<$dB9+aOTs(NN*&9+YOU`^foZ-IeK0O+t=(4-1LA~g* zw6x_C%3{xK?17_MM=EhbI{V_AwP}Lj^2fsQA0HokL5XX|7Jh!y=deG^0(Xm!Rtmwk zdXCv$;k*7Nr!oTWA1gf^*fKvtD)WWh+5S~B1%E`b#!zA3P{-l0=^$^Zkzf&PP5Vsi z5USTYx7k;m=xYuQtBxFcTVFh#_DS0qo8} z?ezEtE97_H;FR}0sLhX-9b?qy8JG?Ojb7OLKwHZwSp z_24i=n8X>jwiK74x5L~U$~QwEACNi6*{8`!MEnt>$Wobc!G4kC((<__Istr~uj`)@ zs&MBY^(zuq*)!X?U9^mU;q%HfIE1C|>**e*@P@UJOJa_8qOXB!bBi?JNhq`Ygk8j4uS}=~ZYsKmt zUr_9<^2+6ClS1e-jz6<0NR-8HrB*yXvQ|OCFQ!0~BcZ)~Q_MSLW1#)Py>YssgFChB z30Rd)2gIH~Ex7!o-I$J)D13;BD!#**w2WZ>PAT!qtO(Jk1BkO%$jgv-O(TXJ%hQR9 zg_#9ktVYcMHh*$VbcOs}SyzcD5H!tTqPE6d89mn*T zEj0YT#B`R(+(52R_<)owzx&-&sw!>^gP6|ZvRDs8)B29cp3~2uTXQ9%6h9!rD01P9 z#%<>fr5uH8w)ZZNOPsXwUgw{Z@=G(D30bUc(`H3lrG9L-i8W5W#z$xB#D7T>w|R>+ zO7`eU-c?R#7RoP|$vZbl7hm9SOQ@1NikQC(^v>ZdIxBJZrV8RzKc9tSSUAhPmJ%iP zT~F46QQc2LDehB)co7nWn_Q_|#vTn#Bk?H%&v@R&ww}AjoFo6PakBD~hw`QhKjGC> zLgfJDn7jFrc3iS}l1;ui8BT49+e%fUrjeN{{X(XfJWss#jCzF89%^bw6-u6ne}w0f zJL#uuF^TKB?q_-qDjkl9<9N`bCb1dC&T2?@=TJJ48L`W017q{%^TuCQ2VDr)aJ@IS z&1rRV(|e@fP9}@H=&L`qamX0*)jEoUdwbIhmRj_D z>(5M@C5Ym>q{;|-GY2_^At<_{2CSNh1lPODY4~4?9_m_m^sgT&I22nm6&j#uLqJaY zWXI4eT>hY1=-3vn?*H+XiJMD=@)Y2Qt7`r*?I`6P|htV2TI=; zKG>xz_QGlWK*nNgN~!m?`jHcx-JS(Kv@$c)8p>4*Z#g7+*G!oNZO`FTOcmScQzd(1 z+Im)hUCxi7J^!TVvG#3yWVy&!;FHFShVJM&b!0m-emnH^-h~~ArmPDzk z(!41~Hb$=3p^2^+&8M?x_;dtgJ|)n)I%Vk&)P<&y-q1PV=AQU=^*WZ^&Fj+orZ!() zXslvHaJ?s<_KOPS=W2uzbjWLu zx5uAyQH&FQ+v*WleLnU0OR5)PUPiK4omht=5=D$B`s<`4HFj8>oykNCC$@V7>_zz! zro?<-y^lpurg!wzh;lXckghTr7N37U_YM27(R|gLll9@kRXFke?{P_P2OUbcOGqtP z2%R-6*X$!CyvxsbzpsPOB7j)3SfpBY23Z}e&k~3XKHGfZ<$D$l|__$d43a)xcAkHfv42cZ~FbaOzaNl$b=+= zMujsE3+Q?;8l0nu3d^?EGpm}jMCydU$VYT)BosgG{;Y96;;PU@y;CP{L+8<{L)NdC zbGUbCBMl#2ZMx($!_@GY;+UoK<*piS!PZHM`a#vAv`_C!@B5cwUL=;hM5A!Qnmkb{ z&X@}?Ww|ec{oYJSfk-%BAJ(fnPR98_&%w9+v`4PRo7YRzS7#sdcsZ=8N=4Zt$9gN@ zJ0;)qDOWZAwJRc|_p1(_C}J!kSHG%qxmjGk{l+A|PFyPyjR&Wj+KE-7srXM(OBmP9 zTa|kCmlqD+Bpxa$>(~joV(B2=vrs{<Zq(ZJA`?=_*1BD;PqJr<&;b_wU%e=yj(Yxu3TV>)7Sly z67P2}EXi$NZEdDD=1+Q{>T)6;U|@CfXq zg}zJiaTia!d~yk-Iahl(h<(%`<{^KR z`t;qKs;>8EERsvC7CJm`YBvsW-Y}|ad=XYWjP#W0yLg{RPp9#8m64>%2Hsq0!`-0- zFAtqS$!i5m>en{#3oon^Fy$mD+vdJGr6OHnahJw!Y9&o3TDOmY(Dkfw)vEbrq?N_( z2iB~$JC0oWGlbu_^IL*5Q>1p5UUzi8B6F$9@znc;g_PB~{W6gm_+OVB9^7`mc10tqC|J$|V<__ZH&uVp`Uel}!XPIh@$Sy})1mj|q|o{9E=U;bsP-{M{Co8kYI zel#ueU6xN`M-IM7{P51!8C7!?+uI8+w0bR4o8!!>f}M+L5BRz-#LzX&(>+R=Y>89} zBBL91imZ^BcI)dTTv*&@IE@E>#jaA={mILGYu&G=0vqKWu#ChM`0z=V!>>e_D06@8 zBAaMniInH(&%gck{8KUvRtv_n%il+lni`kPF7>TX@XYJ(wyM-+m@L>=stvqYHoA`B zJmk=sQg3vx@B7$lK*gCNhK0FMO$FbikaB^?AI(1@own>bmsUas!b6hXQ}XI+#Fr7i zmp^Kjq?%e{eJj=A&1L+SLw=y+{)Z3oAvJn8sQW1xOi4K(QjPNEDf3%bdY#O-a?o!& z)M!XaRq$1D={Tj^W!1QkEJWdV5^_EqT_SbzD|(AnqhY<$!Wq<|&l=CWBu{li-chW< zFr<+8N{VD{+jZ&l%6Dte#q33eQ6iTYaiuBb?dTN-fHl9J9~Vjce$EF%#L!u%c!1^re9;` zg_FD|W!`=KBpl{5)q!R8C0a#VL}c9q=e3#Ql2EG0siyks8>+`n1~uJrZF<|yv-+7f z?f6BaB97Fysw8rc_qXWXn`)dW%P=}5q}=7sE7%M#3>)+A(or8b3%tbjh0nZ=s{c!I z$~C=M@-)IeqKnts`=6hp;$;?mKzRfIP_YR-AGOEhOXpJ0$p4e zk#_9p0}b`)C$GJC*>UT$`HyJfe;~oip}5eKqU`UEVd}Mhc6r=t2ji-{3bkj$vdP0&4Tp3ydf)dF#Y`&q6k<{3U31%4Hh9_{`Z z!s`mW7fs4c8e`}qveg3TV(uGt3p>8yO}RWSe?eP>^`wB0OQ=T01rLA6_yRwR_WnDV zV>%QyUAeCx9ksL*)*H?h|0FjdMelU$@GM)~IB9E{UAJ2hfAt%Gk?@)_uyQA&HT8ucA8#M^; zJI_Q{&g(q%4i0+M$;Ef@?iS5>+`&9=OkKPXd*-speB%0N51rlUDbkcC+->u^)!?p1 zn6&zhnN#GCPhosvIVJn{uswC#5u*6sdoht?76(?wFO%!f4y%eTTrK=;vDVdGz~DMF zh@W{-?i>GuFB|ix^l&JioQSp{FX#_0Xg*wLg6W3!jHr+*p+LG7agcE_2%pDXNVB9_ zCiT=z8Iwgtmaf589yeZOC1Xi)bZ(2+u~+FKIbR(#UHU1@R_;5KIxwW)dt{sKmwN3b z?XvTBOPn%&^2~6iqm1pR;^Xx%$KItCZG_iMA8hL%%EuizVmwaLfc06#?c1B&StdGb zjGTOnz&44Uhu_FX%}Jj4@C}^AH(AZj;<)haE=Jvpavmac=Hc5}0k0^GTgORs<7MyM zz3Cgo0(@KSF-j5i*MtltBl#E8d#J3A^<3KO@bAQBD480Y^6H#Gu9&m?jpEEXkO4ChCym#yNBr#jW`v*wHc%gcwhu& zyrJgf?NLdzIMNYE5QwaFE}DHvW#{C<^EC8+_6Ie8KC#%NA7Y5g&2`@Og)tf{u)L|J zYxrQ0GZd%k1V0b;}k6h*@7E}~mb58&^>lmg{hL!mY?p#=EotZsuaYbARBHGr=1en6 z`5f6y;o`2Zrkw0$J`}D!%6%=&Pw5h?Sz+az*qz1X6I#Qv4{MTIGj+aqrf;n*96M*e z?W?MmRWPR|%4r1t+girUigDj$JZMt${ljmYuNE?9kR6M#n>3o}*=)iY{3>Yt{y_4r zGE2<*4440XVatQ zAM7^Cty_s8@a1L6xs()IUv*{YuvsE^zy8KUl1jXpHeD4@W3;HAfadFwjfCNYsl$fLelg#-NbE{aF!j&8(Y zDdMD%Z$;Ui3;yMo2sP4*>tDEt z1SgKq$Xoj=e5-3b_QfZj=YBGeLRFoIIh{S-iI>{Vfm}wMIvM8^#XUytho5v+>nBfn zd|Ondz~JU*VqdF#i10*Lly0aJ39AA}UC0?0`AMQ4{ko2Yroy7Xgs%A z`dJI5qA;AqGdz5&>b!jJ_D2#(H3Xy+cBR|~40UR1Fy4ibwYb&BvOZN~(KSD_EnJ9= ze=&4o^x(+X-u&iwgP7YmWydMPbp)@!DdBV765kF^kJ`%h>kA&S>}@l(X%kx}v6^k! zM_Ze6Pu#rpDf2#x;H%^Ny#NM*(8mo?w2E>VBEKA7vl5>jcFezbAN>f+&pY$W>i zQbZ0sdaMHx&pPkjcvb$|sGxo-A#Q0YJv7%)%E6+!M9ZFXZfd4F#k-gp{IedTF*&Z? z3+e~85j$H2WanS=lUUne98MIF)_xb%+n^k}F;&e{)X4LKhJ=eE*WKysMRuzWjX(^F z$n+L$CRWX9Zo~^$W-$!yMkS(SZ_AJ+V)ivzgBT)4L;JaU;L#L`r)JhYZn7u0Ca)J^R@ZG8-?=w!zu;Eu>U&G%Lgo9Q zW5d<@p9k`%=nEn>LX7l%Fjmv}jPx2q9SR&yyuVq43`(;dDaAeh!82Q)vWF?~Yoet} zO?rITWPbWmJU304)^*Y1^(N#wzpgIAva|WQ^>@~6yq8J_X=t96kMja6Z|a_EI9BR)$=IwrB^N@T@IHDKm461ykGWR0 zRm=OdnTI%4rxG#NISM8`ji>Y9Fw0nV9k|_mM*4?RX1EHv&QHxANhp8Skh3Z>HgbtY z;Nd5JEQWqFs&lnz*%9R%W<%%dN?&K5i})@U=^brvSw1S_%n;RH`C-k7=opQ zlS3NUJk~~4ms_HlA1uB-=uWcqsjisP>HAU|xItuQFx)@jeWvcf(;wb*Ds=rrAl=e&T5eld22xjSyQ+ zi{VlA=av;6{kB2JJAGeQ9ivy^9)AAOi>q=@q;w!4`;hVy)mOYB>=oVbqeyd#eW$gK)mHS$gZvEK2;NqrfgM~aDV67J zLh|dnK1ii{+S$Xi_RTLVv?^lhqMzplFx*po5~$TodnW6d0kQCR8r?7hyMhOvpVShV zsg$Z#@6qDCe_s}8cO}p06a_~xqWW?t#(5T7C!M&#vRZ1+cyWIE_5_&_=Qr91yKqR) zMjzKh$XTT<4n7@!MD6!1xWwV5I{jOEKMSHmnYve~E=gXu8PnLgXLY@(C#{n#&dR7W z?XGx{OX8}6@a`8Exhc|>K~AsSmCqbznZ@bu8-l|xoXd;o$demUeC*rVS1DF=+ZF}&g#WEZznThCpw;4$%*v-tUE1Wv@+^TGAXCuQ+1h+xTv)os2uM^2ug;`xP5XpUd|-x?@X&rN3;=U!OKk zJT@6;uc53~lvn?Wv53L(rE`FngTKsXo9;kE6m!ri`B7QC6&=@#wN8Q$_07Ca5u)@G zRdq?D-B}V>lCHA#ZIFotjw~L!hHFY%w7dB-g}jYt!GxByw$E+Zu|xRkcEek3%&xGb zx0WdVQ_dG@%+||1y0;p}Q9*oed?xWmI@PqfC`V%sE5>eTC}o=LL?BTa$vZKs%xdr^ zyv6n_qZ5;4X}ZCva;*KmV@4OaJn*&MR^|OAD%DB!#I}(l1Q#L#%*$8?F4EJ8*00WL zI`k9`V;dYvil<%RC}g?C%RMonheu9~{l$mLqW!r-^0Ta2?PuKLotiV2YTY|Zgk9^F zruvQ|822@GF;3Y8g_HVbX0m2=q9pHX!T*-h zR&~afQu;~|Gz1F4A3KNvONA;rIP`g{NO~;I$Kcw}AvCFCI0q)-QNo}?GmZ{ZX+wjuP9?Vs~ z*HdQq!cOcO%#|(T9LP4C?6v%uXQ)Owd2I$c6l5E?o}fM#`ZRy970JldnVTK zOW(VxsAFl%^L9em6)p9Y=Cdk zGEJhls!P3u_eH0440(O1zEHhA)LP?e7l}u>jR?|N29F`;T(7 z5qHjN%=pULoRyuNe*fjYqcm}}3{m;_1Z{QCocTK!`0_eD9D=C~ImAkvJ4|(0on>~C zGany#5|U(0>^?S(n7kNe`i7e)dBNsRzUB;5Nf@VWH62y|N>d>}`)K5;L(8^rLoXlF zBooTZx@PdXUFm4GnrdA49LDKtLmKiYQ`qz$SK@8niytPH5i8Z{IVAZdJk?D3c-{=& zAoE*VhD?(+Dz?iSg3Lq7qYnz`Tm?+#AIf+S4lS}z7`+P`_clq;n58l2A`c)s`}$B> zL}s|Nw%^w0#jN-&t+c61)iW1uSG3GlHY@B257PDEmor3ltvm0$dMv*9aM48qA)-}J zrg~m0Bb+6BVZx34`4j+W)-e0QUTJBs3_V9+b~(ygmY!HnuEB8uCVEk?Jw6I1$F3Z>e@ zaw2ftUBT}nr}4qdxt9{xE7UE0@HF8ar{QqIkVPBW$A-0w10E(v<#y+~(#9M25IkYH=-FvN3X}PN{iL9mgw}(5h?L6Q4NRbM&{eN9#lHT#>RgL zm*{xsXIH8%9hj0#r9}R@UzhQO;*71kX519re6g zBf&pKcFFEIiX&+;d0X?X{--EyCXM0qtk&2iqz<9ZQi-W)1v0bJS<`CdHS1E{hleSN zns3~lAx~Gd%1a$KZDK8&!Wh!&guDFXV3?=1yZ}CS*k1tcWsWJ~yJU zCUibWsm-Ttm@VO&GiKkrhilYJSS`1&^LvyvUK(rcra3bcFMZ*tf{Sjz=Xz5g16{GA zI_0+}m+zd!797&xXR7NG&3RftQgi)$s1F<0YLCc9UHQ^o0c(W;qsy)(&+?2$A|17E z?7rz!UmnD1kFOjwC?zRV@T4^~8DWeHzQ4FtUY{|BH)64ACOvIV6BVNPrUjpgf3edn zY{2(wwno3mfu+_k<26NJ6}BXS*j(Lb{*DhszB|%TaMf}b?3|i10lyliX>z$@O4W0A zr^kDNl}V#vY)bo^$+d!F=gS+`%^xNn+LYhtCPaQt^ZWQ5$9ypHDsF z@SU0x@{_A*;(2yRIfJHiqJxjip4NIYvqMNnYUQ2bQ7KlsM*PN-82-WlY%B#0r2pAg z)d>@0{4iuR&9Sgf>kDTEiLTd=ck%drc!1o&EZe?#@buM~XV1nPNb<&=-#MLSjuQ*i z5yB=-P2-_$zw=mBHi^YtK%P;?SFzb*(Zldrv$7PYq>^|L>vq(|!TE~qyBQf=$I}A0 zDq{wBTB|hmzZKGmHFez13RWv4pL%s5!kL@J?A&*nYb-AdnDr_w($0GhoD`oeaARtE ze=4f_e&<)_++3Y(Njbi^dPnIs{l1TV_bawJs6;LG_PtwKav4s@qACf_KqSi=$IBoN zd%72PN3@pL3GQkI%TE#r;bW+@TzA;%rhb|3^MU@Ng+GTWEz8sAYPq{r!Mh<}F3nrr zYaL3^yC>>}vHA2X-JvR#qQM7prZk_HVAtU=_Horz11sXiAtU*ve2owK{G1#kpF`rbr2G`F(0d+a&V0_2BB?PP|H#bh zT*D0k*{vy(hCsQDj5Ewov z{{P2cWFVIx02AQ^Rn!j^_?rU&8$ni#frJ_l00u%A3aOs~prC$4z~9gd2zw3$LJ25_ z0DBdnW(0sn@C0VyPXY%Xr~t4>2X55QJ_iG#zfS<_el!dyi`cNJ@o!wTpc*RxTC^L` zCIK)Idix2>K>1S*E=&YM0ssSHvd_ZDLLi6%un^=3BvjskW)C1-5ahK81|&4P00@3K z$T1Eh^KlReYFv0c@bPQ?qPzz==DFj|}pE&lWR-2(Z9 zAZKr+phg3L)(z<5K)HTiJHKIx0*1n`iB`aL2S6W48(_Nv?6n59+W=^-LBgMt%7AYK z02|?)gMr*XFqrHK0Ft4&i&9N;fPh@IOY%>|n7<{$uI!c3g=I=m#GlhN6qwKrW(jOy zYERwo4XnBsHE96qUKf527+UUr0(AZ83cBk@3;QnE2UrhngxZ1m@mJR_Fi8neBTc3Q zr2Y?mzsf0KTLYj~2?k~)%4LiMqI^%?Psj)63zX~U;dcUa3ILqVBe;YJ1U>-N_fyc~ z>`QD*JD!ENF3-{WvK|W!y{OcgX`&9RRcl7hKd2n(yb;d>e4$_jpH2fh_x> z@8_V!*&l-#eAMbt~^q6d~$NQ{5Jp0`CAGOf#C|bk_ggF2>kaQq2_tgCa7)>UD(VsV$ z3Sc&qA`nLq63A$5p?`t>VtOF!5&&B3vcOdT)g=PVOCO5)U!#4%ocz`G3YeCtvOnis6L1ZnSU>ONg5V+&20%NIi@>Y^z(P0` zU}RB)bqD}u6a(e?zEJ~|m;1*4xS-|cpy%dbpylRZpylRZ{3bUOJvS3QHxoTK^LM#v z=(%a=xoPORX}`-&M$b(~&rL?pP5zk+_igd0K>*tmI9Aj&aIAo_e^jY}Q4atvN_f;w z0B93!2t?k2eJ2>+BgiEXTLC~B`}vTeP7afd_FWUe^%(#Qp&N}2l{o+$gwr-68XKzf z0ARvEQ$HFTT1x8K!Wbni^hh&bpY}|`9VX_y#+w^*N{OpHjL~79Q(b$kd48Z(9S)d#wkpZy$PofiJ zG&W>W0kHie6O@I-g8=ORNOq!)#)eD=0Iq+<2IV375WtatmEc4bjSbm{0eJs)251H* zZ~*ZA>m(<#Xl$6l4IucRvOse%i4Q>NKP5V`M`Ob*5s3es37Un8;s9d*IoatBMl?1| zl>w0azoml?z-&E$4jziSYti~<}% zL^J-o49H#p;6OyP{ENYW)O7&%KheRE{CcsWh7K~f0oc&k;2!jQG9)6vo$~Onz%jyx;T{at;D80p8yA^;;UGumaE{qS-;KzvaNV3IH`C zTIe?|!H^CBJU|_%ufE+z&gc>vGwg4dg5dufN7l2Mn0Fplfs08S{2tW+{;E+%w z1e$;@TL6MRcQhXGLHjlU4kB6_nEM+MIB9?GUjC;O4j*KKUCI%*BR@AsYrqwO+7bQy zXbW9Z;4>K(!ugNS=H7tg3-G7(BH)7iO0*4C6)@pG3(W<$T+P3_I)T~!t7{jSlwk9Q zmKX)hIF!o>iU9!d$%PE(AYcMOT@c8&ANu|PoCUljRGJB-k^-Q8=73QfR8$WNI{++% zBL)&GZUFGJ5tOh3Dv$z{cRvFAO``()ZKDkI#$iWMd&ocNV0ZZk9T5jb=>QeaGBG1Wa4ic=`n1PUtvaL|kaKnDNNI$*v+xqfzL7?_{;Tu>O%!vtd}OaZVF z-!Sxk9vgy_GJ2uppM?s+7?l8^&N5V90D!ghBlv^})k*;H zff1VEltQZpfMCz#)Cb(qeg!~`<^xpdY5*Wbb307~K6JhTp!jnD+>)Tb6@dCTF>tNH zP&)wlpa?sJY93V+q=GQG0Ach!0QjKzHw`f}ys`fe61bN^j?_Q#z@b9U#ed?# z+b7_}0)S7Hf73aqP_SPGOvriwaQOGky`A|FF61@*4Hq2jFI>oL1ppsD|I!20PX8A+ zWUl>=4a>rh7Qe6|a~FW~&$Uq-y1()vmyPk)zQDq8%l=n3Wby+1+v~f5M=BE zfEDxaSWfGp8suPsdCmF{JWvwSaN!d04^-5%N=PIC02kr^Y#&7i#Ua-N%sTMc?4SAY z`3EE?1N_?tAUE^BGyuu10383&BhY!+A4u)`FZCgL{eRboOVu_wNw7Yof)A|!et;mE z9pLxcBB2~W=`u(talx0RFcH#7D7jF&6cS2R zlztour433yhJ-Q-rAs2Ae1_5`kWhA_ba5n<^C(>m2_+?%YM2O7B$T2kT?7fGF-kv* zgwhNE3jxjm;>Qm>EqgNuIH5ue_GN& z;Vi~PoIpYe=Po8f0SP6Xv6u*XB$RNTVj|>_P{P@XiI7D?3FjmxLIw%tE0ivcgc8m_ zOoS8?N;vB<5yz2G!nuZtIEI80&M-`bBoazEuQ0*Oc_`s*!bFH8p@ee?6Cs9#63!fW zTA+mU1rs5Hgc42|OvF*-9}@?hf&GbtIs=FwKW71RZ|XSFpr#HytKcaL6sjmy_m6W6 zDEoQSAO@cepuIc)22A*b0L^t9JZQMbi<-Dih&Z4m>>DXSN!vH}i=xr%(dqRFGJAp7YCyZC4_5P{xm0Ps5bM*@5og$hCUO8~IzMGL`1B9I6puK~a_ z0<@?Tc!rM(!%!0dct-H2Ff0JyhQMeG0N54(iQxopt0)Q#w*i1%@oy;LX#?tQ3}kTf zzp170nq=J1_*!#pe~ExJ7+3}XE!CI)-?Z6FP%mCmW92M&I zJA4ff{Lse%0N&@3K{|Xh|04w5q5u>igj#ygV$iPy0A3-&SLJ^W!;smJFqr0l4#Ut5 z09r&e9ypNSFkmzYfDSO=B>W8phVuXz!Ey?F{(BZ=d_p|Mn0dMdD91SQOqf&`t@Y=mG4t3Z?}dk>Btj$LMD{z}tIC z`{#0ya{6DCgPa@aKP2}a-l4FePajlpOSz&~8KkkSwEPuDHvOaknkBeX94`5J;G1X%2T zHw=3{L#)yjHbs97=^rFWAP1m>q`e{CJ2`()V3-wv8byKM8UW|+k1!0uMVJyj zj2a%m*wQNI$1S|~TBQX?=C{{7dC|*m?w5s% z2`X*^g+EF)h9Y~<3kAGofIU1EO(^x}8`D)_uJ1*mAO~X%-bO+p1^`|zvp@-_2lxa5 z1-!Ju=X5Au0YCpyvMIuK>s1-S_9K@MGXQPys+Y{%K%t0-(-3R9FOITo(#4lxlDihzomO zC}Q`#P`pH`dQi0QdG{NKWifyYRTe7lsJICfnJCp5iq1VR6tgH*ABshk`m@&ugup}r z0NVukS^%oV0AQN{O>o4}A_D;1gdZMohM-0Q3<0!1)Bp z(BTCD4&;XuTD|~3D(w#@4RFD312-Nx-2Ef?V*p_1VZVNi5bTgT02b^bRQ?}rZvyA{ zbp8K-X3b z+M;$9`}TXj&UxQE_cNJ9e82yH9**;RoqO)N`+eW{`}28!W`9ew&p!oKF!u-gh?8T+ zIjC3_?iVwwbxf=iNBt~m;%xefmZ-KDB9$2}Rpy)KDoK_H5suGUIJ=#lGD>d(C~+pj z4PEZg$o|Kux{uOlBW$o0KK2n?@{-5NtJ=Okx0gLk_h|At4dKI*dHLzicFJ&7PmX6H ze3mgUXHCiEFW*b&AKbnHHbTMW7?4r(4{j4^$`Iv{_to&|k>`yU8jrJl!d zd4=reAmvhye6A$s-dcd78g-~5YNN_hmVT@0#n$;Z%d<@xs66uTkF2s_dGrj)-{?`MK?vU}pKl))h4q;@F6LCO zMUYj0L{4^R)mGWw`H@-a9%WUwPmyjLN_d|qd2Ne~%EZ^7yPsly-RLHlax97Pk1Hf*=jaFCx56RcA@k4<=#G}`m^YBWWe7r`^VzXD#JUx4$D#Q|;b>nkI zg%7M7pHpk{II!sR=@?!QL^#~^3iAyes>6fex}H`O z1jc(>4QYZu^|b0BQ1-NH(gb(+w5lL*xTlp!i`BaW(_KjR@aHk;8oYb1e2A_`fWq*MTh`-Uw3ht`YcXQc7=Y**a7YMW`uFIyNnaI^uY&avY=8F=<${X}%s* zgPWPQfNF>{(=pKN%+xG(|9V}&J}igR5PG6f`u9lomD!7-Ym6)UA=c(~3|~g0K-+j_ zYLhzBU|H&VgUwQR8f=w%*sXc2_hKx8-tHdJVLWh_etgDtT_qKdTvi^NYj|68pnlPGlVD zZ{ldA2^nKY`hYY2(t^Q0@%|@I5 z0zXH3>5Y*Gc%7DCf;kYbP(2D;h&58qO%WDEEUID=9q|)>Ibl9kEU5(U~=pKRV zka`iuLU=0Dv*2tLqBkLZI!#_*gGKCRbBh)N$nXz@4;TwK?R&Dkf$*ANX2o5`HxYea=uzcP z0#_s1|AX*OVP%@OOeMUJ4DK$G%u4$RS){vk?YBytgYeSh+|lJg5T$>P44apaKBzXBJ&GZ!(Gy{dme`jRH11@1>E zujw1k%Hx~6lqc^;qPM_5A`y7?r-i$~$K91L(phD&1Eca>K zMpbW*rhil9+g3i?v%tGZy*?md7Z&~i=~-~*wCKl3pH35-n=EsXg(|E}Tp7PW`gcuW zla;-m+6?TP#z}-979ph{GN3cnF29zjghok`XuoY>DY6c<6so1CLHf-EOObUb(pMLC z|C)x%k!dkRAIn5n@e$_QX`{k2jYJwVSIqR4tji(#+DHsSiVmGJuZRqsJBf@+Ss58L zcdGVQC9Q_=&5*8fl}rGou7U8)knTLR+bel(gl~q-%Y{Jl7>Dpe{k*)iKgeYRWW@a4 z2q>?O5q6CE1=LO;x6P1|KkQ0id2Wd;^TXb{#gOYykx>igP66_6Mzq&=8BO)N-O^}Z zqvm!GGm~i~e=V)z7a(lL6*FL-c_>O*E<{%O5k+wiIHgvZu0U3<%*YCzXK|KKdH#Tm z_I#`mYWah?l;cK3S2B7;>*|LyDZ@0R=y>}$X#SOx_p1n({NX=XCpo@eIJ2VXA6bs? zBTU;7^Y@h3#|UScxjZ$X8f@!HIem%PWiFc*-ld&>^7$6gFIB{%XhLzW{?yYK= zeCu@;%zoJ7p>4SnK(dSWU$~^|`kI{^`f$bUhh(P3p(83y+e38;&b)4bK7!b_THqZ- zk9>~jxy#K+#eqZKA4hM2>gXY`N+beDM$&Dd^GH1($y)Uav=4X5R-nKVh>jw^>7WOY zikirK+2}1WK9WrU8}q>4+y#z_c@^lxNCf(C-z93y>jS1jY!6p{6C zOX+$Pk@Z-l%TYw8E}E>|Nzd=!z_b;tr7MdWrPvS3FMc}_zX@F*hJ zTae<4_(O*T&Ij_o9r-aw5&3Ir{m7$;vV4vF=%a`-)ou6Vk0Q#`6ZvsR5#?AI`B6s^ zWf+Jo_)$dO8zT#J6p`bmh4T*{Mda9m{P0mkUhT*a9!2D|3-Uup5&7(a{J>E}F8d<$ zKZ?lX0A#*L5jh-%%=;*!)Z>tO9z~RRI@0}7L@75Ta~(xwybI}a6p`sZq~a(d!-GiY zQABJ8(&Z?kjawJP%4=EoRy9n%U5_F^<$9=#X?A?L7LpT>y zg>M1J?N|_jvk^UKxf89t<`rZ2!Z-@yd$>{uBKY!Yr2kueC+=hsDlK&q+3}32Kf$y) zVvm&tc17aze&Icgb5>;m3Qsc5Ig|f{k4EhCLxIUg*k1)MMq(u4V2OkgxXK7myaet* z;>Q5OcUvL_2;66cv#r2`NQ^1`yd@GdwPzPj90*4@sbB2oogsZ7LMKQ~GT1EjJ4D?j z{h*sm#lKw$uqh^HB~R+3v$NdiUi`A3t=%2E7h=64us1?39={5yTD)Kcqf0N!CdSZ$NcPq1TjfBr>?WMD7NZb_~K7MCZ<|4~dm{ zJi-@5yLTXn(oaHo#h`m1eJU-7-ynSNf8I_6lg}9lUyz!&pB@&-=^SLKA95t9{H7pF z|B$a9#>nxv2w&Wse+}eJaQR+>@a3`}_SeHJIbV+O&AoTpe%AHJ)mWJ+TzO|8 zYyEHX>yr#+p4p`Wwo9@I(;F+yTFn{z)Lf6b^n8Qzm0x+EKvL_|56iL$?H!`|WLCym z$ZC4)#2zfLFDzie%J-ZVOy2a9vdPLz6HvrEK4HAt%Cms?R&S%^-=<)S}`Bhxbo zPaR~oPXfi?M>ziGzb~s5*m=;1M~m*Q>NNRs{CyyQ5_cZ9OOfmpd(-ZGDGbR>r9C+9 zAem_~=n|EtouK=fsaMP&?&qAYk?cDrP0$z2 zl#Zdpq5m;c`UI^J`mULHnCAa#p>LQeh5wAwzVZ^Kjv|%Q+(79s%#%9>|Mxb@@42Vc zuiUebw7jze+_NOVWS(WIR}D5x?ckY)NGoHO=~0rEk%OnywxrS}vkb^RbG?Q1JKR-j zq@{L9ZS0Oxa}4qv)&Jd%<5QL=nZCxO-<~#^Ml!*s18+r`ZzGtq_WgPBP4}_8vJv)W zGQB?{!{&$_$!Ct@J0Lw+W@ZrC31Oy=WctTy99I-VD-~PQf$r`TlMlpp1d=^C-3z*3 zrD;d#9+jr?(CsTtt3uZ@Q;XC(m8r`?SN7Cc_(15A?j<#{GPNgkSfxoFc#WCLQa5<2 zl-gyZ7h{(&E^O&(=Iyu_pWGwd@pksD3|Am|--=I-j=G*{5M=lx(o?xHG7zHY{G!uD zw~L;!uZOcsA;)O((Z6yxF4#I5h>j^t8c|H58zc1^P`L0`h{h9_*sh;Yz@A9<4Yb{% z$C;^F>J+4B>0o|+_xtac7#d>6Lz7pFyv{(_Q=~37*fJG04e4pW+*^^io3JWnrC-W> zLM-VI&})!v<50XmA@zLG?V!@oFcbW^@q@4o4R3(|ouz*P{yO9R2)8g&Pj2~-1TSaY zt? zfU3TkX+@~2jOkdGt0o5va!8yc-08>3k!|_+k>Lr;ls1#cp#L>fyVMs*&(fiBEaIp? zkNGw8YW@Hv&un}}zqZsAR$jGxt9ogx?Ci9&ymXen8h8!khnoK;;LVI5LR(tvWhH zqn=iDzDZNV6lp?w*@E_;(-v3wo_JQB->6^MjzM-Sl6V(YNlhb`>)%*frfJ0Dja4I; zoXd-MQsp&27v6#`0(DnRWnE+8Sg)u}g+0t3_9BvXO>ct)wQ23un{pN{h? zW-3c!5a>~6>X5q1FVU}63uyjk`&;h=c;W59irnArUn*^IkWA@7_zz6qAeidO z@G!zP|B7mX-&^j~S@+@gio1S^I?-JxR}0*WFq5Q;RXRDX!pm{K$Md~}nt%_xbEEW~ zmaRof*<_CM;Y3_7^IUhL_Q8dU%`vc^RV)qvUZfxIt{0gNXAjzw)xE}i0}Z$uapsiInaVzmb0x|HQAODP^*C$%)*)bJw%t9S&dwGE~kD8LX; zm0H46rJh3wa89+rOJ;AEDmwI>)S*LD!Kn+XXr}zwCqC-j>7tdWBhu#a2(CBVBxskq z&0txoC}>t}Yw1Re(~#`)7Sk@pe7Pmfbt*as^At-;OE2a+2=fF>N++C{v=`>REoo9* zurWzfc4JFAq-)aBn3uIA{b_`X1J?Jnb0|qHiEg|UQ|;xauZEvr+a>G!Wc>)qcFgZ~7Kqr32W#jK>ikn1kK^_hk{wdy_bh(YN9vEZTGN5x%OcgH#B^RN z>kRn;na=*T^0!LeX!+CT`ZB4nd-PbRJ zb~IDUD31dwy?#-c>Pk%qmpb1Km0259wmCfx{V!tQ01;@IXv=S)bZ>-3CAC;#o`}8$ zG5=U81(Cmf5R`dzzGiSDsV5`(*%f+GrRf>ySBEMNzd>F-iTeY@NMAr>BtrnhB8hd# z^1hJgeW8@)eW8@)eIaHoWqD`kd1vQ&XXklmcb9ioo_AKBcUGQvR?55kA$&H2WaIG_ zU9hv6(v12BQwfuOf@1)}{=x&v8c+|3G47;9dLgWe;(4W5KSb+`n=!w+lVM?m6Ht7t z$z7Q&gAjh6F0&F<#^DGb_GAfqv?}Wegb#bVq>xPsOCucEx+LoEUn$EXeALrTDo@vx zxIDr~J>5I-lvU~1BmB_SJbiflAeV;`UQ6%dMj}NKNy)DumDM3RIwjY0FAPonkvkXYiB7)_ie#Ku}+b%e1V%by|u zt%WewFuGS{9fYyQpojKi>miJFVZlv?4H3q=FzRWnEI&c0aAw6_#?2ANI!n-}7_x4S z&;eai$fksC5yrYpqMlkRr4^xbyGbRx65A1e@T(gKJy}-j4hSFW&BKE*a?tAGM+)ZQ zq|ZC#p&{TSz4>_Y&{R$v|DYqIEvKE4c~=f6IZQ&j?*tr_crG$`2a~9TsYvC3ks#w= zkj_EJD8oMxpDY+ed~1co+18s)RJ&ug{|ts|kIYPE=#>bEva#2rZ!B<(lBJKy(#Ld@ z-jt;`#q?{5Cwq2ncoVwOVYc_5SiSTSY!nC=f)lG(2CN#%+JJG9Yy#LUk{DZo*7ZP> zs|D6aC`d{L(5Bif{^UIV7r@<1Qufj-IueUu04d_D2~ zGzPqcs4*xyzO?b-+yfvCLP>qMhmBtL(*er4BN^^9z1T&u0XrXan(W$REq6rtj$1CGIP9HLv1IGetPd;D}B8%=Q<>TJEN1=WCOrj4K) z_RRDU^vg=qz$5v>=wvH$;2G$F$2pG0EB%dQ-L@v_yDxw**N#)`LiBbPV>{~_9qX)` zJO?bx0qZ8m^r}1uEXx7wCdWAyIbc~1Sj_SC(R^-&&~s9E9wXQhQ~!zSO~k%0B=9W~ zzmX$c!oOZWNuXU1Jjgg#3jPxwhS;@MU~wZ{kOkI4VkF`5mPiKlM0+)H3er`r^s;5;4fj@eher`ta4o|BJ0uOsy{&O>`p2}s`yj`*} zl#{bk@oyyacv&QC)tb<;m8Q+1TUMG5ftQh>GFr8|t?Na9%Y?iw8Bvs*) z>`(h`dpv!Ga5p1$F4B{ubeG%BpJ3kFy<*+hg>F=7S`|9B(zG0O8qsB5$DI5t{pZq$F6C0E9-`$3cRxanAu2)d5~zfFLjo|cBxC;8VkFh5@uRq zWvM3&wn*JTI0_pm{fw2+`Yh^KmcLDEG9nM@C(PU$!_Fqa^A@WtwV}r{y|u@B1@)T2 z4yiF7%k%*jtNGU`Rh}ZO0jjyM^p!|9wCfOIV1jw-*%q?xZNWNBxo1Na zT1}?HQp!Yt2I1JsR8ae zLi#ZGlu~opO{CN!VvUe~(#>(C4<*3y7OPEasHHYbdH$A|pNX&RPnknn&o|J^HzBNN zsjm&TNu5YEb%68~E1+F!Y4T$pB7Ky_YL!w8WtR3LQfqG}*u56F{8s|_T+XVM>N1g3 zHHWb}3Z;U9r=kAfFt&LXg_KXVN=w~kuww?Q*O{_*%s88$UO}=8`OD;a8)0;$IxJ7K zl(PF?t_aFjxwGH-8(Mvul_quH8QSV5&Z>&FIf3+Z5jt4ve1oY`he40^)R*2ZS3qK&Vm zHr9~dXs+p8`d|DGJ>9xRs>t#{$}*euS3RWE>jqP|JO-WRsj>clhW@3}bS?DmO4B9K zE6mg)_4~@yv!NGyY7BcQ^i=nfI=wRWKoH2LEj3PVNR7y> z=NvJYwcgJ`74|i~65F9V43;OMj&OJp>Pm-qq3(6~os`w4yd-L*!?jVHJB;0++Wh~~ z_Ew773F*xT=*7uyO05igAcJ#b`aFcU2uRzfYkK-ngg?Sg+9e2&4*9S+en7z=_J!uGE+5&Bf z@OTMEV3DoQw+dp=SA4|UksekV3?jQC7EWM)ghfe`&_M{{V0?{8WYPr|4#Pygp(HjL z@o*SKPDL!7z=a6mND{gPAsmd_iQIIdg~On~XC!tf;^8oeJcw90fu|6{ktFmtgm5sz ziBw%=;V|eixL9wbhkmI-29ZICz2z#fB;w(OmO(rmjTPDX;yj$#FA=XD;Y1EXtabv& zAcP}H=y-&1Fv5vEdWnU@peOBOPa_@1(L;DG#47MJz>Y?!y}*7*eeuyHuw)Q9WH!B z9Dg9)eI_lJHl7uY=Tc@1s#o8O$AOs>=(7@72(s2 zL&z-rXQXpKco6m%q=+u~0b*2hE>zQs6%2`v0MLiCx`4$D`t z?+`_Y3XWn;S#)N_li=qOtGmG8Es_4Gy24A?@`3B)7m=lr_;X>xYbOV$=lYNd2s0A* z0l($r9mIkQEQ!R95k3a#q2K<}UL1At82Ku5AvJpZsl3xV9fmkqs?O8h(jLHe`6gd?WJ`C~T4O41GE--_d zf}!w4- z5`F^l4Q&LkIk0Z}+u9+Vz!Hf4tqSJ5@Y=>9JkAnc*Epfz!W%_SeT9!SPHAxAV-VXd zdvTGG<-E#52cODmiC2vLD zx%gMO$kvSX=KDzLFcK@PtLZqz+9vQE;?rG7E7zub^pBfE@6InlvQgosjbU(Z%nFN} zMn!toIBg=@HfY>+^JtusPx8i9xX5<;yc(x#`_B<;oIoQxfG;;8Z5$Pii+fW=PsKfI zaNd1c<>Q`Jk)9st`5vZSi^g4)H!gEg@~z&u3K!Y#vc_e{$T$)@X`Ep#U}_6&?;91% zUr5_ljs7Z3^w(atDZ+h*)TOK`Zcisy30#9@Pd;?&n1NWo3Eb}66#I;jHm!;oubu2F zgwRroM(CLardEd52}Ju;#RAjjH4xzzM(PW)a0@bAx+l%gYNiv%M8s+)a54K7Bg(EK z^e3dEX4=Y*LWnG-Xha?&J-9Nm4j-=|7Fpm8wk#skW+8206>~+q+W#Q5SxV7}JWyI^ zjI7Q&gshENWPuq7kw@}Q4M>}tCB=byf$VQuhz_aVmn&L})VACh>6t@Ix|+4j&*D`=JbTkc#~-yBSj2=UvmYC8M;ZD2`S21z);K`&#Cr29X^R&MO#nSr^;WTy&wvAhI`N z*E?3O@P4_2$f1bMV}WlGrVHy@sLz$fbP*V0gbR_taKug{EPCNb5WfhMRb-YKC{wXS zo<*!})J^zx;}HH6{&(b*Abk2&il~NgC=j{845Z2+axr3c;PNXRatD#A2)%>5L~NS5 zh!I$1``;&*5$t8KJ&+#S%k-TIkzXM3k}tepa$qA6ISio~m_+O-a}lE$k;VRyTpFj; ziYuC~0)389{dPZ@kgu11O} z!^ntDGnZnhMD9eaDgu8&d`1X8h7gXNv`pkMRyW}==tfEGcqFw<Qq#?czawAeyOz>$W-gk^)b*zKfhzo3lSSK(h!kZ$#bl3w#c0+iz!0L#pj)~tF zv6c!9LgIai@S;e%sTWxrDW*81{3Pso#C8pVza#O8F5J`RKef>&)Cbat6n9aAOC#2r zF?=Boyg5R6ob`RKD`8U+3okGYNk?|@pAc`~$SJiVw?_v?S@?*QUN08MhB*y@U_W-?hv^HDGI={ItybQVjV270b(6Y1%)?3(mjjF zmeGNYUHCBL5dQlZ{54|H1irUKW)3|p++T~zZUt$e$Y3Py&cdUT16z{Fj!02mEKk5@ zA$Cp@_!nY7PDXQuKQ#`a`odML4BsQi@l89(Mz&Nm{Q%n{)|*Uk;eCulxF-_+m2pDB zg?}A6EfT)YI1PsjPem$@aJo=wLD=|}ihn0y&`PVg^2en&uPc9CiWTYUjVoW8T8&)! z=j2!Z%tgtEQA4i$6)v(JgLL~CRM*pfh;1(dHyEMKrQ%;)V23I)A;WlL6VU()vllQk-aasJ>Je>fZ zN2~(`4zc}&DHc8ACRK6sr_E|%q~hi-JBBGu8(2m9#KzPCadR7z-#kui%qpne?(fu` z4tTGk19B%hyoLq8 zs)NTDNX2cJwz^pe`K6SF{0|s-tunt(8DkI|0D*fDzs?IiYe_8VSe`bysR*H^M$taq z+(@sDWHr+nMB7(I&9tZe6yXj=N?EAcYy+EC=GUR)9>i)Uus$`XW=tg^ZCw?eru}R* zLTD*PBlHXdI!t6$)9K@E#6k;vi4d9xWJ223EGag621dWf$Uj!ftl7s((c1N6CE5SK zx)W-;j?aP-?y97gyk51>zwomO)}zfK-94=Z{nkwFQp3qZ_SnL4m=3bkmT1}m^Kc%qwMl4_aHoYVw?Q=OE8z`0JUg1{3_ zs)N9bPD(-G4JTDW;9V!xL12!PnjrA4liDCqKh-K)7X%h^QXd3{IO!1tmUPk(1Xgg; zGYG8iq*oBw%SrDb@M|ZfAaJCUsvvNplj!f!Oc-2XtAn=xxzCqw4C;fuJmrfQ60@XKKS2YHK-cA+{ z0t21&4+4uh84v`Pbuusrtm0%)5ZKen;2<#3Nht^%?W8IQob04J2%PPtCJ0>Qq&5g# z>7*_Q+~A}>2;AbNM-aHzNkb6$i<6!~;3+4)g23}mdIy2mob(9-|8dec2>jPczaa3n zlZApn?H`M-66ot>;UF;BN&g_Qgp&b5V3d=AL10xUgMz?1P6h{ojh!qK1h#fEBnY%Q zSu_aj;$&zL_@$F!LEs=K!-K%#P8JIS$2(a(2%PR@i6C&klMzAScTScJ0@pZMDhNz- zvUCu*)5*vn@Su}rg1}#$EE@!#ak5+xc-hIQAn+8`$ zU=1gwAg~3}i|>~%{6cB?!p9B^;#(tqJ8k+?Nhe{t0I_XN;BqHbLEu^^)j?polbRrK zmy_Bc@Q{@8`XDgdNsl1#ij#&Q@TQZVLEu9ty@J3OPI?D{s%ciYK0%?TT8U#*tGAsz3>tuKkxWvg~LE!gJ77qe9I$0tJ+~#CN5cso`C4<1D zPL>J+vz#m)1YUG9G6=lkWSJoFu9Ibhz#J#b1%Yp!j0ytv)2-u|4+0B0Ss@4vak63% z*ulx@Ah55KQV^Knq$&s;<)k_YJm{n*2t4hi6a-#!QWXUL>7+Ucyyv7Q2z=_KHVAy@ zq%H{bxY=r59|Rhm^auirI%x<3OF8Ko1Xgs?D+r8n(mM!@chV;aZ0e+M5ZKm9zaX%^ zlZAr7?oJwmz`jlv4gwRL^bZ0@IT;WHPI59Z2%P0)P!Ra7lfgmYS|^JHf$2_4LEtVY zRYBk(C)GjVaVIrFV78OmAn-3IbwS{LC#4|pnUks@@V%4jAkd#v6FWss5E$m96a+>( zsR{x*T;bOFW$z6zY=Ll|lDf@cht$)z*okYT^tfB)QI1EvewaogyyPr(AHvzJQFl43C(sbg98#rjMerOU?J--T=jV9#GS6nIsqQ&kdaT7vr`!+mESYCn>MHjfBE7bG zcEp$`;dv%P)urA?R8Q#(EI^0U#RglXzC-ZnBfYN0N;e44lIb5vcA!23uX7MSagq8M zA#;PY0`TcgtjGj1PD1dMdIiC=R{B3??vOgp1Jp{NWC2>F{#BTz6+4T&C%N{q0A;ED z4Yo-A)H5|mA7q(Yr6w6{mO8>~%#(y2l(=N4}XP3I_ z!LBznD`R!vHmM!Ww^=Isc78-Chr7+8J=R60L(J4B_3i^!>mf0Du{-Ec#10MuYdYbb zD!}?qs)NAMPHKX{nNCVU;6f)=K_ED(4g#+@sR;t_J7ISMeCCAR2{7i)Vy6+<#7QX# zY~!RV2(&w?4g$M6sR;smJE;u<2Ro??0!KKh4+1AR=@A6ZaMBP2E^yK_2wd)@R}gsF zN$()=o|94#_|!>N5ctkXbr9%rSFyngG&-pb0*gAS3j#|ysSg4xI_VJv#yDvR0^^u!xfpL12WFC4<27PL>J+t2tRZ2(0U5 zWDwZI$udD;8z;*Kfp#a$1%X|ij0ysKJ6S#m9PDI;AaI0}6@$QiPDTfT8BR(;;6d-L2?C8yh6I5{oh%vzmU1#Q z2(0L2SP&TFWOxu5?_{wcu&I;9gTS^pp69mq3vTP9et&`<~z!gqL1%d0GEFT2^!hcyI=I)d>&I0BA61B`VtI0$UzWRW1Sos&`!*x5-{ z5cq|Y>L75SlbRrKn3LKdaGaC6AfVF@TR`XAr7vK78R3KTk$e;?coRN+a6VGsw-CMs zQ8FKgozp{p--tei^n&Zd&+8)i!1D18h1 zA0)fwzKffPzaZ34>M?^YQX9|cdV3+?PtBoO>g0!%txc-#VV_0Pdn1^o&NJ8{b*Eb& zK#d`=rku12$?ob@g+p=S6U5g_@>RN#Qt?kUTfsc|P-YdtT289M+JJ2$ISFtoLOG3{ zak5|e_=-5atpP1Dv`oXz)V@d2CVFKiQM{JvKIs5bZ}q%V4;pNidLE(3Auo{Wb%dr# zy@S-04mmameD36!V8GgU$kCw&uy|!>sF`XMdq5dA*`ZX?vObrAyEKd?=v8>OK*bEq6w(O43>{T9b>RX>O4gA z|3dT(!%g80^qUBCPHLe?++_fI5d^c;Xg4=Dp-(m36r|5Ya5)<_#bArny@-u0dWMS~19_dw}-!1IWD;#2gO z2oa^0nrU^ZT^79pf>~<2!n{3tCpSx-UYO5DUu?K3+>QP-LQbi-%sjEryXX(yEH&&g zE2qyA=%o?7rB*7;(vuB01?iIzTuwoqZm>n_4upwzwwpQ6lZtPEPvjuQeV4Os+Y~n4k=A;e5EwMdAhj^YJyv(j&rNj2?krF zt~J;ub(_HssXGj|NNK)P9VtzDiqNcI+~#J7)J6u|rJCI;HNmY?$GKJN1cNP7n)bw% z(!?jO=KecwmFj2HvR!JJ!49d#47NzEZ?IKrTZ0`^N4Qn$RDpC zelzNC4y9f**edmg!4|1nrYvJD)!$%;)L?@xQpF;v?EwGE%pFpP8*G(2(qN0!6$aa+ zZZg;*^(TWZQpIZNqm@!?Gq*!(S%a-oYZ`2q(!!ug2cu3l*dcYkTcs{C*dkRdk0vdR z_s!fYRV;}HErDMmjK>M6Qw+A8ftq5lEOk4gU20zI~%9lx5>K3!MOa0AYtJEBWZBh+3hg+pq zFxV#LE2b>9jagfz_A}Tab*#ZQsVfY&OWk6yRqAl$p6 z+SaX7`?*!>Shq_3-mOx;Ov+M^n6+K%-v(Qydf04jlUmeZtJGMxN^N7XU20#qN*!;o zL+WIMWhpHc#&DeU)n;y!dfZ@#)T?fl`qp5(RHMz|Rw=CrmWQs-9gbrz zu5Z(_{2$bN4yQAHZn2q^J}1+GEj!swwV)kRJ&8p9Mo9PZs8YulX6cjMEH#W0lKnZh?ym`^aPu1sh+1(BW*NnfU!ShIuo(4CkiOtzCF*k zZ-sTyF21WC^TFkQC+&Iv>zgg-kgo+K6_EAZn_)H_a?|!MSou-Z$ zZx&wK2DzP;8f+a`kviK_(~ZG<&`&*sRLL@=IxAJQeIF$uqV0 zEKGhWNR8_>rTR_7>wbh~7h56I?TCuV>UT4yTg)@n?v@=SG{hRHA8sbraS@aa5<3frj(=epVm@JY!Q~lP$Gcxr=x|Cd(JX6VoF!^yV^^8oq8S2tAizLrf@)%5h08Ayzv`&#Z8YNJX0MfWAbBZ8qiKtDk8gui+h($ zmv$B*s8g%Gszi~(y6IELWi^o7jYu{#eh>YNnNqLIq+7-8()uXWPsFK*WO@=&5m^sC zmONASU&7>P=v0JEy6@~VurDXi)R$jk@>6%}G?~6HGG_z(b@EJg?88~u&*`aTnRG+j zrR09eGgVv1`Hhk6iXqb~NYSl=I_byPSA~_MNRDGAx80EJ;IC~ykEV*3HrB?c z#r#t170K@*QZr@x1)_4Zq1YpNrZ!E${e;!p@HN0A(dLT+Cp z*--oq`l*@HP()M3P|U{Xee+ALS0umdO3k$3-2159Y$(1>o~cd4@bde#)WI?>S!B*u z?PAF@mE45M@9a{^GU*vfmy%aYo~dNr0Pc!py(!bSNYPz_^589AUNNOABDzE1{UQvp zH{~WP_XR_utpnR3NVa)IQ$=_F44?hYFE#2&=&@!>jgsj&q)VfYPM)bzXJPVt)-=Cl z(nBF-&Q4k9B+pc`ZfzeyvL2D?Pe{=tg1YOqH%aLbVdW^2W9#MSx4o%icVl`P$vPyO zDmvs|d}fju9|Z^>;ZBN{qa29GN;aw zNe>X>%jv>$>C#zpE1ogLHeQZN#Ztr*oj)A;6qeT!&2Q;X5N=;%re}*}Zky*+DSf9W zl-_(C>Jo?1b@%__+1qUO&capUJ-|`V8YzXd0Mp+nNOV_0BZy$%q7hI?NJ9{q9#aG! z_q?4y6sf$bh~<_0C@+^cr~s-2O;{79Y5WLVCZtlIqqh8kkaPM4-ld(@TmPS4um3-=IRB5$A4*2GnyITeYd&c(rYg>s zmfE7!s~yJF`=L*|NlNY2^OTsZSesSG+v_R5#DdVOsvvNKlj}N5ZJ;=k04MCd*=XYF6{oas-e%A1sL3*vf$-YLAzS!`XApN!B)r0iT z&&X%BAbr2#RfDuQwew+h+bp(IVrCn_7MR{bvZXv8y0>|yfm$BZfo4i0yBMYkW@?E& zxe%rS2vbPv0)&npEq$7YOmzsJQYRvKj+B-+D<*n=K-YYNuvbcbZm>maf@c~i zt&CZw*GN`I!b|P#o+G5?oq0Y%@+|XgmRi+PJEV4UN2$ZC^5s~iXK;MW@+4CnG`?SO zPQNu9k6L`GGVIOuN?LDVys1+KJ+5$%+Z*p5e@7)U{s zpUr!EO}GMI<#E>dckY!ASHs($!tpff!ymIt%}Ae6Od{w0$b))G_lgZ}Bo;c12h)QfL1|(I%dn zp8VEgT*A_urIs?7*8OJ`{w22tTm8Qp_uUDGxg5GbY7O96SQ>Q}zb_ zFR4FNrk)19w9<4Kbez?;EcKkhW~ri$XQVbBjq90~J8eGCzrxl+Uu36|fawk-Go1^) zsM2%-^t4LTp3tKzP3_Q~D@~h2x2-g-3SG}k%~BgyrY;8^TWJ~uecDWADK#|P@P}er z!BSH*uXvpX_=@)ZWGFz8zAfe=1wE zRP^n9Sz;j8Wf6{L`m*12;LA?+cjja17h_UVHqTCho>yr)8hT=-X#(_!N>dy3pi0vg z&~44sBGpovx;}JMPmT2%4PD#4q{daIE(u+|(xhhIV5W5CSQNUvnbL3!rz@Kf&P-D4 z8Ela{^24s3JQAy%7^H#HYa?{eJ~$qPWIa{)Z@yQ6*hx)b5hqnaV1$$EAh5iXnjo;6 zliDEgQzvynpu}fjgWm5(FM_G9(B* z=48@0|cXal(5ifNz}e-U*=YZR>d6I|1}_!h0uxMV#>731Ebi zC4<27PI&JGu$mLzI{~cgg!fJWn>gXU6Tmi3c<%(z?u7SF0J}Qjy%WIRPI&JGaIh2J zI{_Twg!fJWCpZ}$1kP}>QV_Vn$;v_Cawn?@8 zF+pIqlQn|CD^Au70$(~=D+pBor`SgYdON8K0t1~?2Z6<$)C7TLozw<_Rh-lXfw4~N zgTRJPdIW(joiqf2Rwq4!z)ntj1%bVs@G~KR1Dx~;0!KLM8w5^pQVIfRIN>j}0WNS- z9R#j+QWFGja#9KccR1nCh5;UMQXK>yb5auoUUX6$1m18`3IgvssR{yfoKy#aZ=KWx zfu8SJ_tpl1{!U6kV3?DtATZKNbr4v|Nlg$~(@AX**wjf~5ZKm9DF|%uq$&vP?xZ>h z?CYc^2psC9HV7Q+q!a{Bby5`s&UI291TJyHUuFYblSg1~Z4>VrU& zlTr{^+X>$S2W;e|ItXm#q$UXL=%h9X?CGQw1on4Q6$B1-QXK@2cTy7sPIpoY0_Qua z3Ie}#QXK@YaZ(cmra7q%0uMRihcf_=J1GT$*-om0z$;FwgTR|kYJ$LrPHKa|7f$Me zK<#_hiSfP zNnH^5&Pgc<^!UJfv?>TRI;jo=@kU7aZ(Bb)0|WV zfjga42Z0Bj@M9=|C!N#=f#;l*g1|qVR0V;zom2;bkDb&6fv=p@1_Rtv*#q7hzyK%p zL14I(QV>|iNmUS7*-3Q}Sj$OG5ZJ&;Z4lVPNnH?VaZ(=yc68Ds2-;rN$X7OYLv4;~>;I4lhK#=~J;I8V1{sLf!4~Vbr>xShTUy8zVeLliJ&0`$4FS40c?Bdd98Kp}u$6Fo&lk z2o)MDy_4fn(z_w_>v^bI4qrsIern#Mqz`mFM0x_koxId<+&oJ9Za3eL`nSRM4^efW zS&$*p8z8jym#7OJUWJ;8P^mG}HJ=+EDcu9nLqpUe20NryK=5vo-qOr%+o5i7^GNAw zjvJ(BAk_60)awSzQlB9NX_T(F3DYJu6wx=~rN_8g>L`QlQok`+J`eRfgDvsNi6+`D zHl@nBNt4b#Efi3?eQd|)lERveT|S4D+jN9(lG5x{jov^Pvvf)3*jSrxZBjlEN*{m_dJ$!~=8`6os-^u)6G>Q;LNh{GvtnIDSi`Te7uNVMX9M39+R>T_ z#2lds@Ihf8#!&ByU>|r9+829Muw`t6&=m6Zt3|81p!l(4)%C+@2BV#uwC87or2eiq zQ%568YmLbnGbm+@r$&>gUo*;co6@M3@jBEprov@9$V}y!u@zdZ;b__&(<$baDsduI zSD&obGHCUYEWsA)U^g%V@c0J|7oUjZW_X{W?^;7d&|61+unitHLol+ z)H1Zk7|O3pVOHB{s`z4vviVMxvMz&ZQ_GqZmJ;VjgeNQEXqTeoHveOaV6+dl_pWoki1mjUgnibh^C5hFXMA4LdzPY54SuWQgya-Ol*+$ zD@_`THj-~L&omE|;|w!(G?2kBUM;b~SCaCKrB;~kG*hbdAE49CR94DJ;?Ny2h6;Sm zQd6M{`MH@=D`k2Xu~rHwJ$^+P%LmxL@nk8r zI9sJ_L3K*Z7G0;QCC1nukNrKPRN0FdBds%GRvCF7fpqzb(N36j?97VU6}qpPQnxAg zBr~;3wR$n5r1!F7QrDeI^6$*EMQSrrIo8iKpju@$lIx$4E;Tv>lSfEF&&G5Kl4X|1 zwPq?yX}M9(1F>I9w_<$S(o!Yi9CNk&Bxt6{}1OnW-#Qlr<}rH5{X^v)Q1?q$oBe1(Y7op~80{UCyC$I~!sC zNe%nd`sfJ*dqT4AT#58G%(Y!gHDWani8WI8t1P)=aWeXeFmNse@0~{*kQ>u|KcE_fCa%mzDk=jEFKthgg&xCn4DuwLA0#Go@xn z6O|mPq?0{aYRqR=_mR?PBiU`UhWHBeOna_!tYuzpQa>@6iuo<6cUp!tjxyB?S>t0Jv6?hT)o|#gqGOc74NlWHsd6+3xM43MGj8a8W<6=?r z)(JGLXEaq@s%r2#)BM_F*51%1%+&HT)Fg*7by4V&W@?pEx$HAf#N^Ux7=LH!sX;OY zGqp&~G1wM!sPt#e)E-UBf4!N?QbpTF#$=tMyS7)hzaloD_;WDAy25Htv>sG<^;ry=bTgQ(CS}rX zLAE-Zlc`N9dsU{M4%Pib7FMRK5SB-y^wpj$rJGEdrDvJBBi8RM=)Go2%~pWl|L^xPa1ahvQ57 z!g^4q9WMLMzT9Nas@)U1oSB+qVamL+naXRS#vAO2sZCJ7|4miV!;#w%j=&mfFlt#se7 zEuK^>BD3_lZkC!|n5Ew^b85&FRBnKk+$J@ws!9RU`g)q=`>m{|@FaSDi_{dhK|fI7 zr_k-+sNkk>4BBIK-kB=KCy3J5rHpN?xYh$ummo4rUvB0Wshi9^vGH+ARH-b;ttdo= z0-r#sOyIf{7mMBlydOem{SI{xqR>yFXBGHk^w$L*{w?PO#A=1!5@C|;gF3G;OJ8W_ zveeaPp4hbdciguj%J~fXlL8O=o@Yad>>H!Y2s1%yhr%3Zl)7V-wYODjjKK~m@0|A2 zfM=SuZ3;>qLgk)8{T*S121>tT=C*fGCF`cPMNpd=Y?a!|V0l|qyThNMc6PWg>PUm_ zC!kJpD0PX!R;i-t&K>T84THH=7|jY_-JP=l>f#jr{J3?ak_>75Zm z?29_mVEYNElN?H2Vz5=J7;dST5JHTReib3ae^6gLtYLIlK(I<_elQ=hsc|5d32xO~ zJBC}u38mS?^=*btAx$5=N210UY?Jay)NumvB(t`kj?%=z z_X*Uq2(>r;yqU{yqP{iQrdhQ$f^#eCe1}pO8EpSO>RN}_qaHHY`Z`LJka|jeZm{E9 z)b|Ekr8GO$E2xznjzRexEo*-6WZPe8+=H zX@{_$jOmLogNNB|Rv`t4-#UEj-#%E!KPVW=*4uY>_ zdDAu+O%(?s?a-UKpHxwW6h=#RTf~kLjr?Uf@UckxJB1?36dhvu(UI|rrd;`N%A;tU@)Y*whV{Cqk6p=8* zTyiTSrP**FHXVtwo|36>8xgbWidopwaD9%gmtCk@q;#gqx<{#f&6K)Fbg-MGig+Vq z8AGuxjuhP^_)COF`3s*S%EOGzUig$-5ot(_v?8`ukfM78b%ykgX8DQ~k+P1KTM;RB z^muGKC1%|tQ{k3+QKx~zmbz>bw$nVTl+Jls_bByDGo|hk^Xsuve%R>yGZO%X0Y zQdbvdX`KX#DOHp{Ja&Q38J8n*t^q$s=z>u;*F=rzXZwnMTjTr?G95Hqh|6h**v9p4c8 z`ZH}>HC!@!RbDotsp4=@k56BOdc|HS4TX=kyr~;x(qY_&M_?($PN-ZEh2>u{&E?c3 zh;9UrMzSNTj`CY0Hq9SkN{bwhG}zxYmPJghOD?gV(KQ?U9r4`-u{qx~rB=9@^I9`l zV&<5Vw_A6mDlH2r(}9RJl@Hd0&qOMkDkmAU0qb&8TZ~RqEM501*CAF<_BmnQw6Hc+ zPb^}(b@8V<7(^5%W{IIbec*zLGzXtfPk@A$|AB67Z&w>j*@2r7&2YS)j@F}%Ie@AQ&c?Y18vU+?8 z_|8aHiQTBgZ;)(7?GHWJOl?xr5T@=Z>6_ggTc8m=-b@`*MQ4qR$+|VyJ-HqPNf+tq zf}`8^8A#j=qS`lT64l!_a%%3M}_*pis+Wj%qdEWJbO5QFVfzcW~ty2)UR)a`DK?H7Hm(zHC?u^Ga5u%tFe=$)~L zpbxKhJRN;Ml1*vlS_5HrNNr=VMQY_54SxReryRy19MxvUij>yIp!n7*fpe{Zwo6be z5h6Pr$n}@*S``FT1a(Z026)g*UY*4J* zELU0TQ-iI_HPUjWnQ$((y}(+_EEKp1VHR@pCv+Q9U*bhp{u92_INKdu_-W(pC;TTo z+c;-?xbWM?`5c1(gzKn?{l2F_gAulUfj)>`!^tVUlqEt0mN7z^0?Q-zD=)+pUc(Y0 z0&5$gEn5P%HbORm?P5wC)R(D`4^-2L5RDpJ^%zU~YgDP|W0d!N>bT5NPTizx5Sc`c zA*MSiO6tsSBjf|$8eOyV!P$hl(Q1^=x8o?V*=p7y^`gNRsqcGqoz6eO>b~t#hna7) zRP^n9mw9So)rK8AH2<+gbM-W)Dueo)8*&ca zOI^BF*It+J=H}2L)nc$k>Q{(w=ZbZkC3HxAjW8=_RtfCT&-y{?d<6TgRRZf%k~s;e z*z7c+f)t(f*Zv=4UjiOQv3A`(Gfff_l8}u+0y8XuAb~6d2>T{GTr!hn!Ub7G#9dhw zgzJI`f(S|!1#wAaQ&3s1pnzLMKva~Vpn#xJKtM(D3W|!}|D3maCKIOa_xwKAoKvUX zuI25j>ZK};Npd>^rhUS4rOz_YB9nNP$t-gb$fiK#J&=zAk$}faaokeLrjW)gF|;?Z z32#WUpTK04J}day2l{D;q!$wCD>yfY_`Z?}AK5aoO38$awoIf?;6_3^TEI+*ZUhVh zLN{9`_7vGmD70l_k;tWliMC9ViGI5&7rG%etnRs5wgx8W)CdBOs z$b`^H`qS+>#B>ClFG4F@CSIXrLOWX~s=goG7Qo&$RL)Eh;lBvzh;vL5OU^+NArqbz zouq?!yO2;M)JN#6JRDE-i--M$1GY^3Ok`gZxN@p^)kiprfPNWC{6=Ii;iU3vB(ae= z#7{VbKx^Vfk$r@n%1@ER-O5j?4RAAyfLaoorm6#p83^b`1V@^ZiB}+?@`S5|`UvaO zl?8D#0!{&8LSrQpCnDg$b%6CkO9_peC<|h51XvJ`+cNQt$R&i49%W5jjDY$PJ`!3) z$Y`c4h;0y15yIEDOgt{Kzg2TsAkYG^41qo)ZWq~47}r9{#EA&#M1)T>luYc^QYu3D z3W1rFwZhDXfLVpmKU2xXfe4W20Ui?SB^a&6B8%7z0d64duw~*NkxK}j+9+${3kYz- zUs>pUZ6#~MRs>Wei@06nlHUM-3iT4Ev=fUK#AOKR0fZ~Fl}sFnfc6rm<|vuC2LUA# z4&^GDcme^{Cd|rHGI2HnT>L)ZBcVP*^Y&tqPVA2Wj}Sh$W#TcBO9+?pl{K+X2eBqZ zV5p*z>4EDBr~B7pnOs8X9w+0m!X)X7fJzhk#oIc`i;2{Wegia>ky1qXx6l$o5{3l| zNh02kfJ_J{h58A%t3i`QoGF9GN9fj29Z2kf04LPJNU1A>rigGY03Xrsnb z3^7;6l8>+kqlMPQ*JJ?s2#GQ}N(mF)%7S<^0!k!!JW3`uLx6k60LBaT5so1s>nx(t zloo!%vj~)lt3)m&Oi*Jft2u^8zKj$fVWH3>!bvq~vWVZypz#rwsX>!PT#kT>d=B_R zsFzTv#!nJ)3Id!>h{YH}MUsd~GOP*-_haBtCcY+P$xk>Zw3IO53S~hYhJbEH_`{Zo zmqhk<#W3nAL#c?c6#-di5|4`PC(ObqqfDHG01p#>!FZxf94}+3l<;h}l8I{&&>BKl z3>;b$yCb04{{q~rC}BSWEr{nuE+YIPw2<(S8hDw+CNivw2)ht?AhD5*A3vc2fim%} ze3n>5s1)k2YY!!!b^AZwA$^X3su5nnXu_3kzDe>r0x}?!#@RZ_KM^1iUJd9Z+eP;g z@E(x$h#@vWKsJOWwoF_uatYyy`pTO45(4T+cvq;8@MMCrAg)Bf=^$h$Dw&vzfU`ao zFkMl?b_7<0__@e_LQjl$%EW#MIFQg0*GkI7O$g|>gxgY-O#FvT2PK3v2(%{tF0!9+ zkD4W7h_loz@gCqqp+$r_YQjh*z918Zk1$uw5~;+8WR@r*Tu`$_DzT254hUm}`U$UM zNS*8O&;U`-r{w%VuE#`n+nGXDf3IvqsA-*YcDPfYDB|OC2 zWtJ!+99FZ0huBNz03Ttgx`uj)&&V~@OYo{Wz(XvOIl%V_;4z_of=kT-9%56O1BwVo zY?=6_$c2Qy82hX%u^0ipmGEz&rG)0$%7VBG0p*?od@r<+&^O1<19&Y0EC?5EnRrQL zFQH|gvL=p3z-c1P6zU_aX|F7Z>k&{VLQcMtiFpX<&vyat5$YrCQ!3#{p?<h^q8AZz;%uEHPYrd#0HIz&R)Q*o z*bf0sA#Ao~;;SN;I1LZj3Eg|&wNL4+=0SM^bgsm8z?2^RRYB&<+;|fig_^@2GeT436IC_XZWjOlp z0n8TaCH#(n12c(fG93McZ3vW!Z;M<=$W+5IllV9Sy5|oVj{i|3lkl7xnVH0uGBS&* z0Vjld38OF!k#!{TZZ$Fqjnxp0BsP~JSV~x?uFjFfwd(3DpoX9c7}HMWN1T8FM-j3y z_E-!t7Xk7efQ{`*OMV9YBGgCdnJ;Z2Ocd%P{D6QgS`g2P>?NdiR5I}@1Y}3JwUd&G zcOalI1cr<|79$%0y^yd50Yhe|DI`uzoqz`rP+mH5p^^!!;+0I?gn*V1b_*>byp6%c z1Br)ZeEA8z)j&!o_LYHDIu|fcXbIt(L}ph?@FuD16Hg+b`h=I0l}vmE0fvODFiPke z;ur*2uLsnT5mQ8Ht_BZb6#|Wk>qIUgEL9i57R0S`5%dvG*)q{3W6Dn$iK`zoAvTb~ zQ&I#dRpW^80Rk*CiKj#^B|L?}M49-UjIUBctQts}#OVl_mkCWVm}vbuaIp-elD&W` zp?<;uHDY3j6A*A9p`jWvF~r6)VoC|K)O9U}cuKBoK0-GP6%-Rg>?5PcPx#fAi5Ero zVy8b;_Zw1lu90fi?KKNs0csFSN?;z$H|gfJ~n$;7)5kToF|kT9c@vL?<#2)VHJ zjKy0y1dLKbMVyS%RVK*_1l0cpz$Qfr9|$cXoEGXM?7)cRDI)HXLFy%ptgmF^RR}0% zIpA5LKEf#k9!PX0(85Q!4S_Q84v`B9w2%`zay=|17#OIuCf1R$>mzKnW#V>` zy}twg5?Vx`hO9>t|(&LFOWTY1n9#SJcp7^wkbT8q&&>}*S zx@5)^|EVsSgb0jwwuTrb6M%03V2IEXLL~w%h{r@OB`m>wK$*B40sbQ#&sH)qB}ZgJ z2ce||f3C71UWI^@N~pGF;x{6fw#&mkA_6Q33lLZ$@nt0w2DYa~DdF~fWkGxc0fiB^ zV}$cS;!XtgR>ET)l}v2jNs0+vnu}slHw5HMXn^sHOY>%v#Df5xFj}aOFg#u|izHr; zfHDY&ZJGFml3Ufsq=kSy2n&Sz2}XkC;UU&RKqnylZp*}U8OJ`tqX=k~hnSKi`4MIz zP$te+@_s;Oveb!?g#iqUOkxfKs!GUJgEy1d4FO&!JSwz^FjQTGGl?S*&;mkTj8x`F zjFG`xG6*nCXenU_0xXh##4!k{HldCh$Em~^8ONoBnd(BGN_vM{7`WORE8s}WG^bmE61mlAGJgFc;jn+*Cw!cjHo z(}`zg(EABP)aWLxQkV2};yMJJJi=%-=+lW~WzZKr4X6-WN~o_!cRI0yjBY>Suq_k6 z61k9YOSY;uaUB8%7-4IUl8HMJa1IFLa+ORRkAO-&1t=HlCH#y4H>469<%tDh69Q%8 z7Lf}HXWA>7SdcHJ6MA4Q)0%iC0)`D?k1Z2F5V@pzM>JAKdT`IuI1KOcGSdA7-g~3= zm)(MM%?C{l%nmof=x#Ce5eDMQhuPt2lSJM2`U%4^WT00H87;%ePxu0tMA1pA)n$_4 zZe;5uZ4l7I3GIXy&O+yWRQjo(@VC%X!lUSk$nXatPfG7BA?yt3B>P48`Pv2U=={8~ z+lv6-bt9fdKr0F75Rl^mA!BidrM@KN5kl^c*#0dDsA|AFTeEfwhJvH zqP}C4`Y`0?j9mlL@qhum@d_ z)YgZ{xJ2%W{Dl5$ddw#dl#DOuy*=njJ zR@SxA5GhY zcol6vDkMgEl<+))=pp zfB6W9mA|Tld?Wtybw-2LmB>$c7XfwLD`cNI!$%m4i;d_cOVtI4uw1A&2Mt!Ux1X>A z0oI3vtQTka34Jg@i%v2~CT%ZaQa~rUTXf&*oWP`5$hmQ)a#EF$SCo?oTa><2$X3yV z>kxC{i**R-3xV!ffhg}GLVDWzEG~Y+~1OXMS7IISQgqv_XC_2dsxkW6=K@-*9Brjnt0!)qy z*&)sM5(eWIN_3KGa$8kIxL;`D&1mjyX>uuH0&Y5By+_Dwxe@UZ<{+R&S;ToF2R(Eg z4dx<5Nbib8G+rbxf%ozu&gzV)TCpf0^o1v+NRnB~Erk1p7CO;dwItvr+>OAB5FbQ9 zzJ&VfrC}Dak-Tj16Z+aRak!ERKB3-fxJSK+_YpM}#Q!As z$sn23GeI{hctwwaMNPa>h?y1-Y zVj~1ph_D{+p-g;LT;(Nf6Y8sr7OLH7KEiASG~v9EvFa)F1e&I{XZZ-%p*1kMBxI&E zt%%^lQ<&%^`Rd7x&|7HXYBX8xbn+1%Qmx-9WKHeXzlz5ECG85f{%b^k6DfF4S~n^1 zcEHP*1V5>+a$ZP(X?_u5v`|0cVKiA9NAiTUzmV{xP~V$qyL$BY6FQ>xus$HG9E@d)TlgjTjpyh7yQ-9-+Zb`?TMw;P5i-?W6>$=->mdQj_8-s|8W_5RmSs78QwrI1D9pCZC$p(TV$p?<=< zLJNnW-B(N7O9`I~Eg_7;gT8p4WSl(w`w5EzI>~a;z3bsC^}^9hSgQO}KwKmK2~Nh9 zXzr)tjG)VQAi7heA_8CChs<5SB04x(yhoU(Ty;sv-O5#jp>PRmdr8O$@gF`b9Q7%S?+$p?)sM^`?BWzPo-3Nrcr=GeATa||n z2zgU^h>)*5bU;XN<(3c8XtiV9OBjyEq3#!jjF*;r310?ul5}}F;U~C-7Op_E)jn)L zAx*XPypZ$K(h`AeHYeD^gDI$!R6FR0(~wd{3eHF6h;9@qc;Iu0a*svGcyeKy;=5<~ zI&jr*i)hHcCAHlmnC(`iek2D3v)zs;r@N4BKZTdnBXqEe-$CL|=MbxDh^lQH!Mq-W z#5bNH_34b;ey$OPoY3Bg4i_nS-~mKkaxWXaqxl&U7l}hkTnY>RsX<6yD-hi%QZTO^ z+`RDCFXY-b1W|4l38~l5jLMZfc!&NwBuk`VUJDW3RoiMUqTE{RJAVNptMH_sYC{% z+yWYs*L#R^lXys8`w%@QQm|fE<7s&TLP%bBAE#~p4LgpdQX5am9dkTzB!%8hR!c^yLZ zTaki!-HcnH#}PvEnujPit%l^)2A6p5We*t&?Gf!QQZTO%5#`-dh;zP$#5dj{c`bwm z7Y0MDmLR%9q+njnFrSS^2&q?3M7dueTudCkRC$VI1+N~}PX zyNp5_GzzmM_tb~f>pDcaWiO<}9f_C*S?n4f~2T|@{2&wK;M7ii0;tgjWUP~ZAB3yxh%Wn*EfXKlr zH$#-0AVNxg7SR>Titr8s4<>%9m zJJEmcXZW|zDGc12+ImcO9&e}%RwGuH9|<;c+eR+$VaG>gGvd2KQ%VXhyNCf%XR8x=)iQvluB$)`Xi+Rk|6RfW!;p+h;{Z$e^ z&@l>ZtR&$p10>^B52=x()g?b5B3k~)|W_$)g{w|y(QJE6DD^tR?LVbigg?b5(D>YCj=0*Ra z8+ZcR{fPe`CyL20N-n_*hDLe@7Uc+X9!OS71Yc($d0ry$4GA-oGfDEAMBw;$K;8?a zd)5qD+%H)NLv`L=!r}BBlin=n)+aT8}h3 zx(8@%ve~L3{v`)XjN{`_)%q>*lc4Iw?9(A8hE&sHHItH22#-vzF{GYS6UCZZJG3~V zPOsFZeHyAp@Q75)a5PX+*0Uj^sWs6?`L&{Hjm_LdW-=oBpV6hLa5~L%aa?1|NRK0F z!XrrBAPq=7EPaVX+mN!G>D+$iV3Q=;CfFp2X0e)*y+qrFw9sM;+o56gSo>_Ilr%ug zMbBYlYNEOA&>MJuS~c|Gs5}ejlu=foeMps=Q$Ct4p1{A5VIPJ@3`*pI9qj|9GM#EN zWv66%0UH{~xO2_XOzUE&$+2Cd;lyqsB?qdR$@Z~yuN;eL?To-%hG$`6E zX@KuYhx9KwM?*TvI2sxpspuTTf+N-9Nd1STS@0;*hKHmfS}21R#LGS){u9?4pCs}! z!2eumFu&FG3<3YWtU%3)_*cV>P6*a8%SqkIZ(X^1QyGe%Ne=uA&{=g#0h_H}5i!VW zF4KA&5l?~Rmff)WxFQ-L{ZI0~t0D#l_?0gi)?ygL?S?Bk(&dVaXaM>gBv*Zuv<4(< z6MpLA$qUE6fuCEzoEee5oXsNeSZ5rDXbqt=Qj0jh~K7hyw3wM6T9|(0?L{`*EidYBw zPez*>5gUM$$eXz$_5c@>H^)3U21M#D1@)5Oc*FV^8;&H_0)8Z{tbtu;&#+KnH z0Ua!Ag7X>BB(^N>9k95MYX7hvaXejyb2n&=3kOA-&QHKy6cXD&kOJPe3rHRcg}v4q zph`@>5kfSA)zNZpMS_c6Gx`32+SPJaLQP%{ArGNmq&hC@N?Ne<1kS08y)$_`&Gp^gzl9L^dGAwRQ2l zW02T!x8*EGQ4MmOSS*2P7XKF)o%nspS0M5MKD-sb-*Vmsi{$Kp@QLNT8$#+BJR$#v z2`7GE6{djHJVZai2kPSY(bEl`Ws9AUVD!cB<9Tf4EZb<_pN44FyAHg=nv9>xC=&n7 zt`UF8N_Qc-oZodyca|MB=72Qz@as)Y9A)wRP?(!f=&M1}+TbXDf~h@^+-#+r-u8$o z{WzG1`gS`86nR7l${>rHOt&E6yqt`kwa zNjD+>zZ`r3Y0{+Ap%tjri<;evs(gvi-1MRMHaES_vLy~fWOl-!?6?D8nx!$j9Mx&~ z^#)aTuh94tw$=2Y`d(etuW+n|QM1GqYTg_tikXUeO%2#Xf^x8|Rkm7F1LnJdL4sJ*uoMoX46*um(JrI6S;{6LB7brPWk|rza=}D{;bB zYq##~<*E_I$zSGWZq{v&`R)uSz@?V+9?W+k$-RsQ{2bacOsHmYCa1u&HS^_9mh&x6 zkBeK`)8kp09@``8OrR;RMyWR;I-m35Sx%1`Es?q8W z6~TG(kZzuQ1NjE$$^JM}H&1SZ?g>sI$T4J|Y#(L!@L%lG{>MDo7j`me&xhD~s!)9B zpygyU9+om7e+{YsWdo8gO@jmSJ{%A_$9#);&48?3-QnmZG9Z5osYdM?&&aq9M!eMH zDr9^26205fGm~fFFJ2+#ibT5~=$F4kYMSnx<|)@)k$wyH^nEx|=jk7y|1VFE!b6Ev z{lEXa>M}oU#_0<7YG>ITdotmf3d+IG&htXGrn7U3;YalXBaQ=$=LA+(*`dp(jjuy9 zttpFc4lir0t=5#qy!o}h@EV*7&7me^Iw3scn{2gq#Y)qc`B68NwqA^f&NG)OsW0U#a*~Tt==ycc^m`LmcVvAia&VtlD~@ z9^&y1-X$Tv*t`wTMK$q_)|6WDS=K?E!a%yC%rhpcCh9D!a&2l98lUClLqx#bS$58O z7PCi9ywdr4?c>eOJidOQIu)+%HSsL}O@{GFP4QU=Z^l=O*&J2#yhl6aIlMK z^}8L-XZb4Lc0zxAo*fR%qBh78kJ)9hS$;EA_a%60I!WA(c&;L82C|5x1IRLxfgmSI zMuDs(nG3R>WCO@Hk`o|1N#an~eI$KBj(`|a{GZpr5Rup+j(GP6NRmR&fJmX2K%~$( zG))R^1|o%a0FgqAK%~%#AX4ZY5Giyih!na5L=`#*{x+}0zkAL?|KX^In+H$%B8a>N zwaT9aGuqN<0*s1jG#o~*vRQ#N_W;9q6KQae5$kpEHlWHZ&xERS$Omg@_QJ1`J#>d* z%!+}X-;v;6ehW&4;C>n8R+3LaW{||)Y8Z1!27)|7@*&7_k~1KyNiKnGB#FBXA3Y~& z2C|!^1IT`ofgndoMuD6HF|yf|3Ra;=s#@s`G`7m68Y`9DN{doQf@dna%n0VN7&%C7 zSAs}w-v^P}{sAIYsyE55c7G75_WK}G$)g}r$)7-^k`Cl7l}rYaN@jvc8;d}swmGcr zA=YKA!^-{z^@!wXyxL)TI!wVo6bQlN28nzZ!~{tKac{-p9+EFXvOtXN&iF0hp<|@g z6|V9=P}({E!PK_Q*g(fz3y2*bIEBnTJ*EtQRurG(X~l0iGxsJ*0VN^c$jI?Di8os` zEoX5}>Pt$fEQL$<-y-|z%>Gu%ewMSG*{dEgf)$&L{yqdP5J!#y5!XHfBF^3dBHr2q zBL4dVL_GQ;!5}h_rDGSwqU1Z#JElVBAoh#~kufak zg-oAm*UTQ|I2CG;v%Ndfl^yiMzhD$uwucwPOx12SMw;zZW0@_T&;0H}dAo6LrKR%& z6?+9ln*1?{H2DmOG}#4XX|fwcn%o6Mnp^@RO`ZfIO@0wXntT>SO<6o)+c1oJv7&dQ zbmLCLkpApa{h0>8!=Rc5_rRdZWd`i})p}~D2DN5zU%DOu&sYqqjJ94d=3i=2Qf77yl~3v#MJ z*39D`k$tYRczM8aPOHMR9}`|e52QV-$co}UPj9%)$%h2%+GM;C!u^bSr8Nn3IB9lF zH$X(B^DZdXJp4S3c>R<*cLS2@$3$EMtb|-YR=tGdi>~_dkr6jQ=d(ur#Fz+v6JL08 zyb;B>UGmfuX*l^xE_XdrBO91`y9Li7ue|q#{sC&ZF5uV6*Iq8Z&}$FL=!#$#zn_9W z!{|W}cM?c7NZNkbUx7${1gof?r!VjXbIQLG$vhOVpQ2SxX7Qy2ShY%h*uo4OLCQi> zXClfsidHK&$LR1e>JxL1$=e#U<2e<17`YkF$MEZ#3)a3DeprlI+#EFBQRd19y8V#4 zfHb`wmRBNzJ0`=rF3RY19{E_q=@&B(D?#9VXeekxT1Xjx_zfP@+qBEhFvfejF=%N-;;KEi+r%T3^rZ6yvs<5DOELG%s6)sq}cOjp4Dwgovgv;%2{7!;5`$NUSrlCBWigLI`(FX<{)qiaDC z`Du|$Yv?G_GtZ%9)N~Vno(6X<#34>T4&;u7LF{1L5re-C)HZf7Yn#U!#17`+l7H-w zVE(Z~New5f-+2bi5^i$YPP)le57!*!q?=q)w(~G-bIV|scv6*>c#@tJrzf5io6c*P z%ZxxSGh8*Up5ZD&j)rpteqGF}b0sVGj6;N@OY)-CKTh@Pk;9sd?~{O;Ru2>X|HE4x?sy@<+K zn8afX*bA-O*w=b+;PXFgYO?1kpp5_NAi?pUfk8$ij{l{|TgJbU_5-vxA*1$&bq}sf z{tL8f8iDfO1wnlc>s~9(gZM%4M8;=FdA)_bth2{Gow==)MFW$~P zj&!tB@>@Wu?OFV?9Wzn$n5#^y-K=r& zvQ(=)LyTB6EY2IlY4ky@n&BM{Yo@FNRdd)?yJ$((GFrfQU!v-4y>%PRS^qjSLDEK} z048@ua?B4=(&&lMdQHJk+gv+!DGH8#R&MX&%eyeSKYmpD>o|HD)60==;Wcb#h=qE> zTaVt=nRQP!fli@hu7HYsky$&+3XEoNwo)fgirRy}d3ZDv^8(I` z2o<c>cuToZQV!gS@aUu68(MknQ(FRC(LNQD375YTCwDYqyFQ zIu=CLE}xApQpV1*JyIU)-?fKfObOeX4wtQ~-6&CQL z5gWz1bn;%qepVz4c~&&i{@j8?|7jSlnB7av&Qs*KXI^6q3Z?Mwx z;jOnusz-+Cw;Eycz?xuhh)skI12fX1-^PvPDEvcs%UB;#FXI-VDtBKkYgXeQ*W#r?sLGBD<8{hqXrQai#pf7| ze$>xsHR(RQEX8zV7WZ#}PLXG}-ZR&J^O|SMo7Z)S%YA2_X}@`$<=`zFYq!Sc@`lh)|K`kMAnu069tv@OXk^5o5c>*{Vhay(MR{0n3ub^nQzEEZAWJ#%4yn;{){N6 zX*=5GLHzseHPL4g-Nq>Pxgx8t5Ph{K>RDhIuhc|uMs#CM^hHGX)I?(+;w=QSdO))3 zgeVuj66P{$w5md-TOw{2&qNzySDLMtz(QVutW?*dafr+HXl3wvWU(v2_8lC8t}(}w z>(k1>^=X;w<9MX64qTrq4Otls#?LurWzddejLXVgFuBSh3x&b>IrC7h>?$05#}Sgf z^GL1qO4qSk@x^9!t@vp}RvuOU^1OQyPVmDUu`lqV=jX$2x>>RjAkVxx^D&Z{jQcb?y&)G=S-SfJ$@mK#BX*0)l|x*huMf|Tvz*n$aVD^5V@{S1Ci_M5)iqrJ`W<-)lWdw8}SMK4dW{G2yUT^eGSF) z>L;b2gpHJLEwW2*4kB0ejv!L{AP_12DiA4sCWw^22t-PM5kyLV3q(pk3ZhEq)o&dd z2mc$f+tf8AxB>__gxmnjO5%3d;{7>oTf$N2%)k;H7FN_1j8~;B)Epi)Vz-M`g(F~v zr+j6_o1A@*;Pla|(ySl2$uZ=PfGae?c(x}Q*MB`PV~V`1i!E9g&XQBC># z5gW;zKQ^c0a9Z%J+EvV9qYIhEKGTx?mZ?Y^Pb%_L+0bSfD%gwJR7o=y2OR@;xnmZ= zwi9jlixXiX`N*~MOZb9U;Id_MpNZ?Sy5sGM(;mFCs+aNeTA~8*afn=nEfSP@nj{yz z)8XAJ^@!0p$8fgj=Wq?C@P0t3fCV4)PlynBpr2-6*Dom*58dkVpDPNyvM0iMEWY-G za*I%vs|~7B*D2Xm7IWEJz;u=ocE@=-|z5@Yr+4(9me5Q5YJXLNbtiuXsN(e#gcA%TC8Ryk;*$bpkG-8P<9OXcGZJIVvLs&3c<&tiLQRlTbS zbb|d_^+=e?e7_A-*UpjDmsYKVb6GQN0%s^rtEOtzrdst1t=c|Jr5}2Rsci8STdmz6{-sstXw^kp z^$D$7u2o;qs++XxcCGrZR^6*r4{FsfwdyIYdQPkUu2mf`sWV^OztLJXNvk&2sx7r@ zc9_aD-!)9-nZMmuYmd#lwdw;}^%1SQOshVpRo7|NSG4LIT6LFJ{aCAhu2rkG>KU#2 zAFcYQR&~9soBQf%)fBDj)~cCWHCL;4(W-s5>QJp(qE*Le)$6qCB&|9_tIpP{4{6mU zTJ;&Nx<;#R(5hRt>N{HX1Fib0Rz0d!Pioa4wd!wSDo3|-y{?}PvelaF8*Q%=HS`S( zXM)GIIXtUXpVz7zwdyvlx$#Xw_S^>NKr-uU4I}Rm-&Ma;>^jtG=XFw`kS3wCa0WwMwfV z)~erV)$g_Hd9C`FR;{y9*ZbnMYHFCu(VZEla&+IQRi|pzyTVlF`$(9|eD`bBBU<&i zR{cS%UeKz4Yt@KNI-kXB)rMNNnO1G1Rr9rKcdgoAs}9$yBed$(TJ=V)I#sLQrB&x@ z)rYm}(lC|%;rTF?{b8e4-KJG{Xw?t3>VYtobvO~GvJPjp>aSY$zhNr#P58I2N2O`i z7GWxL$g@?s^18|*mteiHRTb7A?!{xgS-c8wCt@FUwC-asXn=D^S?d&gK?8BVm~G=I z%i)XP*vHhLL^#Tfn`)wMx!a}Pvv|M7w@OcPqpP1AUhsY}N9}A8i`N4d%ei+1f88TC zX0hyjX?7iMTccsYHwtArhQyht#F1~G@9SU}#Q<)YvbRVM;Eu>VZoZ2gz|9@9V=!_c zEsWehU~OfYd9s-?i<=qqWFupiBzNnDHyd~x4-YIzfZ;>3EercVWgFH*vJEQ+$H-=@ zh1~Jiy*qxm$G}=dTiJV6fDEjK%{+(U3fX(L4kWnuYB7pPp#}C{jl#id?^Ta;J@7`4 z@}fM?@34>PiIo92(i1>r)8@Z%U~5=J4vzBNXCIi>1gXJH1xq;+*C$ZBWhc*;iSp)iS=f*ovkD8ikU9cL&mJ3HG~ zBdhCSY8Kb)jWwCgIIJPb5|9=k?h7DYNFtqB83mD6w25NnQ2uhulZFIoep>Th_>cfH zjAzQz$=DH{4aI$cS%ApqP^RO5*&LeIA8JEn6+@wdJ!?1=95)JJ^fgO+Bhlz|H(UAy z&y3yDC)iTi@M%54Q?B;SEe-Y)YZ;A=ZiP5pb%d4d2&<^3wnKg8T(4p--CspidcqnW z-u*8`WkcR-=?QES{bQ|7_FRJ`X;2>!HmEmuyUt=NcDl;BU&hEfw`V#mE}<`Y7J*17 z_zEQ030^|I8o`vEU<$gO-FtWnaP2Xy7o$CCkmXEt29Yx{6oeLKiwxM zYB!SkZks1+E{;xW02~Dvxhvq{=;`)u+UeY8W3)eql$juA@n?O|kYzadOAyI* zcwIZ!jh1I?AlI~8ksODVE-ddA>`R&EDxU_8m=9jwK5=#%Ntjee8xtMYG# z4V2bTEzbEGlP97BTYvpBVdb2(Au zrm!uI%sgpyBWZMwNYbW$i($k?7qj>tw&@^R5HBbGpxvG%T3ZL%)*k8oXo=|OmM0z# zZGpJw916__k#4Zdu1!*tdY*2u2#laY{!Nw9rvP~+*XL_SD=GF3-hWUdWS6vrwbM6k4{hckIj3 zYYSOw?ZT}Iu^FVte&fl_4kEr&Av~zW_Og8>-*Fu`&{mrvCf)#DS|Twz>DpK(zjg;xIxhR z3AbqY&v_40tq1Yb7;03%$X-!><+Cf?6Bvb#T=SP5y^L<>&;`a|VmFJQWmo%?)#v_i zhxE5UrN3eSw?hj4lLaI7v|}yjoj>g_di>z1kSIHd>_L2%(Mw~It@OVPTus^2tp8db z-T_GeYs~oFE|*1(@-6Jpw?r65CCPA*4?!{})>G39 z_D|=04#CKH2Z|GQ;D%wx2}s;RZ2kn2b_qW}BY6_+k{fYfFEV!Zm&MEqM|qrL7tQiU zVEBh?@VhitEo3LVxsDC<_7IU{mD!WTQ5HD_=$?i8l!C~b?&~-P4K!lgV(HRZ7AcFh z>Q7qVMbc^}wX>6CVR}1`mWAn$KxA3G8blVRe*uw&={m?!)}tGO$a-`Zh^$8s2HDA4 zj0TbQ=t&@IJ^E+p*T>;477NWbW6+2yv-~fpQnSbb(ukZyU=OY|=fLTS%~|anwZ_c) z%gSpSS8$(4R;ZDY*i4zo?k>qPWc?QDM%!VqJ_PGLL@W!fHA_k$DJPBt%Lt_M)ZGjL zt8Lu*I0Yw2-CoP;57tHVhhS@psMsFG9oO6dsEn(Wv08J*Y96ea$C-e95!;O+H&tta zPs96iIRAzVtD@Xw#YdnQm2R&QO6Ghj;d!jR0>#zf9cYxQpW4HGOybDxTtLPIKNwxw z=-+FzVH|)%&Ekd_pb33s7`HzDn!Smpj|}(Lsap-T^Qe!>p@e^E{Z;e=TsF<(b~r5d zG)H6VwXl*+DyKQvQ#&Inlj&(rFBpyIti8AsQ^slE@5kK>a@l}k6?>+xXBDh}gXSp% zaeN{@c%xNMk*%&&5^O4O4oqV&xC_VPuFr_YM^~I>1%cfLTkSs!?vV{c*hD6-Lcw<71v`HEDUk0~ER2~80AJn=( z1ChVJjoxYh^=%Un`J>yxApA32{@3)2br>=z9Oui3JsTxs?MlRp82=HUGnXBT(pksh z+_3*$wxB&(|tCokU%=g7GmHD34s=tP*%)x=q72dWhZMC+~hG|v5RvoKV zuh*)Rwdzc*dcRg(s8t`=s?Ub0^uxL^m7e^;R%`c%3tIJWts1dS`L}is@mjT^R&AzL z+i2B%t;)Y&<2kNfhyGf1xKQPqwa2`%T{l{yv}%G@P1C9^v}#+e+EJ_a)T#rus#mLy)T-BL)tj~I9a{AstvXMu zF4n3~YSk55^+m0^S*yOORd;LEeOmR9R{dJ5ey3G`(W;lUs`a|A_r+?}23pmlRa>65s}^b1tF-F1TJ=_~I$f*I(y9+?)kn4JQ(ASER()BkzN%H<)~b87>VBJwVET&upIRX1tX?OOF+t-4pM9@MH|YSmL(^_*7yU8_3qBpm+a!as`*SNVsr z;c8>8+ES}#Yt@12+!&Da0xqQ>X7NW2@FwV>ywcgZ)_xImkngO!pF~t% zHGjsJ%H1y_DzBSWGzD)6>8FLM91`A*%t1@GVyt{uNU~k~tEVhI1_K z+4w%=ASY+2LS^Y9LrRjRiwu4%NiAJuJcA?h?h6_lPQI${ypWlW47`FLY4QN|*_M&& z>nH>Hr!BiIp1iGmJ6>14#(MzA$?NgDCfnG0Fyh-9N;

    9gFw|6=%V%Kfya$d4FEl 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 literal 0 HcmV?d00001 diff --git a/example/android/third_party/secp256k1/i686/libsecp256k1.so b/example/android/third_party/secp256k1/i686/libsecp256k1.so new file mode 100644 index 0000000000000000000000000000000000000000..e245a72429a002fcf9040ab800137f725deb0779 GIT binary patch literal 386152 zcmb@r1yr5M(k{Glg1fti1b2eFySr`N-5r9vdywGn?jZ>d3GM`k;BNnBCYdwmocZo| z*Ij?JYSsI6Nmo}(HQ*;IBL)Tr2Ke0|01$xRh!xb?vI_Nwh!sErfCJC~hyVltXi(3K z>^BL33|G!z5<=`N-JRmqAFXT_^0pS;Vk-z9FZ8@9#r+)$Xf5ol< zl3$>L0e%xG6u=Ap9!C)*2f6vL_Q&|3-WNS*P`tk>4TN9lrT-;1SP%t+=p|2rwkD2t z7A61^(6=Kqn-PfpKQ~S;77i9Jmj7q_|1^Aw?{`B3eSntcul9lo|3U!33-0(2-2Wf= z^WQKk=zIKc_{DzqKQQ>;0(g-Ny(I5fd%?>u-@;%3a}YxVAOMCz`T}BL0NYe#y~6c5w}0 zfE&=pd9hap`8D7M17QC0U+{v3zyO)Q@F2+EKNJi=`fEHH5KjW_@jv530+52@LlFT3 zc>mJZ00|~4!2l4T{ulpTAp13UFhJlhIXFnZ76k@S`sI%S)K3B$|J^US4~YAN@Zzud z{Xl-!K>m$?$?ZV?NI;#&zvlB1gnNR)08PKfBLVprNB{#c{?dQ*GT*<&3k2!Kf&9t* zk|%@w_^W^cz>)uqcMpWuKuXcS{PTeP)ue&}nnC zAUhOsFn}H?t`~ht5Ef7Xt?#e+R6zaq9$)~fU;ZOOI4%H`-(UKhAYKy*!oT!iPVayJ zfPv2O|Gz&rpgjFPYsQEm02DfR8j}!6fB*{sB@hKHE*J#`9E`$%Hdp`v`Pk| zL;@me5WN9W)Q3@FxsR9DF+#N!eQgRkU_Z(d=Tk=xiB`l`tu@&gO}F;Q#SqLIvdC+5 zIhWt3cJ{0ph}l7g^%NYJ>Qo{uOb210BwxzJ^n%Wk3j#S|KDb80(5eAwEHJ> zTf3Ls7~9#{|AUYJ*~|&(tZ!j$4Ky>f);9)C(8$pEpVI!K2AZ&)<3A}m89N#}8=LDp z*&7-I^?zmSU(53E;{Of>XsmDVVq^vM(6={qbo%=O{7d2lbhP+$$AIz&3g&Nf1R9$- z8G;tr%+}D^#S!?Y6MfL~{I5DM$uczlKl%D=*#E`fzx4ihpSE_6pq=#ZJNM5yxPm5W z`uDZ{*VO)PF8ZL{zNG6P^nYjazZT&om5vs!FJ`u&#s0T_{;xFuqv)5Jvm4ORO5f1L zUYzK-T6u>`kuD^%(ZwdKZ=zr_CwX+4CD^nL+V`mFHTYX1U zV|FeMuK!uV1ZZmLV(kpDwlFfLcd`S>ND2wR02AvM1p4^vY`)+>-t8}MTx(FRf8ox* zxc@I6_KUx~1zzMYZ-MlyNfphD#g;xM3^?Eb<*70&yG zgKD+^3nvA=tzY;{DSY9ex*7GtL2sD27Y=fm^uj@fH0_1Mfd=?n>o|Eves}`W^FNd4 z(=+zn^S|i%`5EHx1oj`zZ2OgENR?T;9^f)ZuuV#0`w?{frf&FhkFH!jD(2ryO@xW@{-7@%E$mD zZCyc^kqL>ZwV|04fY#2%+1|z38fZ(x$4f#(^G7cU6^XK_umY$KOEc+<$q0%o>kCP$ z=nKosDkzC6D@)4Dy?$}WNWxFT!s0^0O~TIR@*1H1_kE^I0xFY0M^Mox0i6q{ml|(t z>_K8|4!X!lObsopfhOD}lumE}8z(as=D&jb<5Kwx{inx2s}_l&qnV2h(AN1+2mfQp zDw+zS`m%z`(yvK)dH-ude@Oo}BLL{qu(17WXbW3VR{lbyf1MwFQ=q#F$OQOR0Rf zU5?KBWNOQA9tP8Utazk z=r8!!RsL7cA1m{>VSl^$O923Al!k1R*c!W^uwH>B_6kr_5^E&w(K^UDt zN*xkK027+(MKXvT=Bp`$p@%{};NQd!aD)3N@i<7u*&8sY|`M zs`ie*;1IDzHeI7dQ#?4{48N{8#5H}lellf%{rQ2l0CUfI_G4qr5-J843&X&~EKRy6 zWQ}Oua7k7bLt_f66UAIHhW@*mcg! z`e=J-Wz6h%4q6&1n;{U3?qxoF1qku;tfNPLwHE|-q1 z$s!Gx*B%N&c{DUgQd<(xSAj$bre&yI)m?fS_}%SpEb1SO^AOLQiW%h)?r0(BEtH^h zFw>i=I$Ge{&dv;i=<&qTGapq1DU;J9Z4}7k12YTR<6K7teGF9Pc_EY=cp#s4_@yDA zA64W^$C_5RtTPY08f&AbTqix#8 zr=4Dcf2@oi6;C(2nUfxD&_nGd152+FTb(2650f{Z>hb4C7}89H>Qkp=gMzjcZ(9x! zl$Rn(neCv%?{luwp7NUq3t?8qws0v{0wP}neL@nKdDWa?7By-+6bn%mcyF$NXq1>4#qXm&?AYDrpbd}>)^5u;=XmLs?UF$P6-_CR<92-Lptj||rba8q{9}YKA zr+&met3;@t7>5WNEVT?kOlm=Co#TY&M@)N0 z+$ZszL{Sfr2g*7f0$=sdPz~qyz?6Gj^o}twaJ1B2j}jah1>;l3jUd3_Oco>v_vGUg z{`|q>(|=EGvZ6{DUfiH+#sICG`3W#JFB^mmNoKGlOfELWjVGav!CIB*Yk?0gb9cp; z1dFhPM<~$$)h=4|A%5R5hiUq#O{#?^otRB}ZA~uhw>sEv?(1*YJi|7`@ zs8bn6!|j}gmjAdFW54_Z@oa3R_>Tv<_#AI%Y8rC8gZ?|6ulecNpHwfLemKHC*8tIk zl9*9N4&JZG-}kV89IUXVJDChCnqQQdpgfndpN%mHhR;g%J$Stz-&y+=Y_oO~Yra>P z(uO4Cn?E%$Si(Q70CjE~Kka=Mvm5|w`NX!8#Vwu2%ea2*vj6LXpKGc9F{uT`7kE2j zk5o?GhgStob?m!6sd`72I1%>32=P=Yi4xd_>y6+}l0&a{;2jqYD~}J9@|Og{AN3fo zvTc=nsr*e*{rFAv$Opdr>7#v$3>jo6>YA-tUz21Vjr?@A`?lxjtoAk`Daw5*h(4 zbEIbd#^s9KnhN||3p|2&JRaT58!_(k8Fg#&pDCMcb-qPnQx~e!!3_A#5cLp?pS=Ql zTbs{1f8gCfeNu6qu2a{v#?tD+;Gx11;_~;s&kTGqG%~Xfz2X1os$`yO@`*~lC?T4y^aOenl zZF^_lT6vPHk#+6`W}&AnN~k1$Lbs(UBeu)B@Pe^?T^JFEc_J+OwfhK~Gq|4~yyNgA zutAN-X~LAs2OU`<$w5<0uo35^ro9{L9!j3N=C=0i{Kx(zm&MzvR=VwYGv8|9VZZc! zHqHm*qhz{?w#Og1b+bnP+S*fZU6k&WZl&Ty$&=-#QAo-4DZ!UbTXKg=W-G>CogvVM zxYBw>uFvC1^XGK!Uc?+5(fLj!qm*Ne%R?2bqDQQiVQ4KEGp&qcm?G+&^11U0`uHgP zl&3@4ZD9cJ`_}Y6#{;%vd0Yc9$w)z*mH0hN{&;C{*)RBvruPfs-Xrg+ofHA7bjxsC zXTj$JcwoD}Kq`GT0q4rKT)HtLd8CgA%3CWVTY_=gNtm`fW7=3`Ddp#3`rFYlIqOJG z?WbD@_01V-opE!M!5cem?>J+hV&2%b(5^;RoG-4(vMN`al99ewED{?*o@)jsAR!s# zV|E|I4b|z;^D`#g=z%5i@33p#jmd^I7;`?Q=EWgT5UwV-BD)?ICMSQ>3%Faa(r$X) z#x0WH+*^FCa~tczIexKQG_~SrPJ5966OV7uD=3Sr)FWu?smb%a+MU!PO#N7nMeds* zS>ezAeb+(dOEQhQWO~=q$0}U^`BWM-b?e~*fZFley;nj1lNqln@3GY~eWEXUj&=Xh zJX9@0|7t~q7WzHmCT{}9vi9DxqU;!nyYm+}3Up*~ry+4iuij??D>kxw1A}!3e$={n z?%*&d-?}$6g~f&}1s5vz^yYRPN)E&B+5gPNQ19I433RW<;v__4Ds<}v2yyj_Z5){pP38+M)8upmEQ%*#{q{| zNQ{msWOyA@9!m&hnDr}jfgx4LX)PrhZV>94TJ4PX;bb~*&AMpjdG1sfNz`ye%%VwZ zN}>~kCs!JkL%#CT%bi$tv9^T2-hm0Wz3lZN^H12mW^PWeyp4qi+@!u3@k;1L}7M3 z5lZR8*B5&J3ta8x{)lg<1o!j8x~F1I74+($*9<%zGO1EhaV2imocRO{xS3i~1SPwZ znF#73hDK>Ub_$DA%jw8|tkc6-Vkjz=CEj)KZK@GKSWB<|$LwpWa3toW-ExTF&uL?* zZoaKPKVnsp2@e@$=VU^K{wSVJ?1>dzE zK=ZLi_^4gDJtsb)XpS2%Ud>te(--^X-Vg-jS?Oi(8o7jiOBX$hs4izdA zm_-z+s%ah?2&u({bDHoXh_AE?uq84z-pMw<2)wT_NE@Oh)X0VyYjEdh+T<%<0uRIxZ)M-?e%NeYjuw7(Z2^?>*|- z_Z1my%EPQ{^3LpwWa1CyXsWz*8brIpc0YTR#tK?i2E8Ij_+WUopHmTXx5h=Srsk*@E z6ZPd6!Zwl%0{uvOyC?1hirzjBnaQf1Vgd-~(F9mrOuxyT zCl$LML_ay7rf|1CwY^sUy^Ff;*XJ*wYuhP&3hfKR7e9iy_^*J&o zOt~T_TF)to@y$8GjnGrrZUr3W@WyUmFVQ|^MivDxy2~s%x{JuTRicz-&YFe?t28&C zuf}#j%K&GsZ`2mb#vR|DdkRJvo2cN~jd!V@qAGqJwz0tG7d7Rh$i^WiWQ&kJ0KAd3 zIIRRGxcVSimaDgNwZxM`y{Vna32|66{&CJNhC{sNhe$-83eGQ_DkLu6_(NK@!AZ|4 zquKWo?0xG^!GO|2<%-)a)wX)IHrJW5_IE11F-=aGdVwmmZUIfO^&$Q8GxcjEc!|jIk;O<$ILZMi5Fd;s!MhtD!QZW#q(q{VIpqf(%ZD$xW%(y5 zFANO8kufV=r_)t_xyye0DD1vB%`joX+%Yg33MXt%Eb;#F0ah+}gdalkhCwkCVt^4P zD!;I0G_;Ux3f$Mr`Hz+P@3Io1Tlc48bU$oD(Ouh0XL z+@vX!&Ko#nJ_v7!aC(cc-$n{-=}&UMa<{tw0CpptBH9mIrC zu}#9B2yoIsKKzxZi6ur;C4R-XOP37!konLvKHd;8%h4sT)V=JDr#4BIm_UUu)E2oM zhT}2hmXe$CBxgm+8V*vvkoNg#SQj_yf!dWyhl@%^4ew{Q+AMGN@S{tS$$l=Gsgonb zc6D8@4li8?O%vs$3$voK+gJm3>5`0Sgj{76qG7S5@zI5gYm4@J7<37HvqO1(>I-V7 zs|^(Flm*)R+`euusR^>Odzhpr++6qI%|8Q$A)1t>`t2^Y*Y?(O7{7PcBD2oIEC$)* zs+lWU)qB--b=G0_31@+Nsfpf25)O=a9=y3d`xyic^en3+`CuWizO#I7mdd+C#_0im-$jhyj;aFP zKO00`@cSmn)5ejW#G*f=xA$Eyp?Y#KWlop!<%zAGt1|u+LA@3;@Li03-J5JAog#ke zQLqz&Zp}WxeXYqXxZKbk(9Q};b&qoDLyoJT7R$78$KQNk&(MM`ZbI|1c%vhcOX8ZO zf2RX&$wKZN=_=>L-0`{)p|=dz3LABT$#d@14l04RFkG|g8Qi-B1D+wul(LZkUz!b6 z_3zjn!HUZ>7E~(4$!C#dBYmAyB&`irP8gIdWG%p}PUPB1g{s&EjkY8T~@ zlY?J)Vpb1V`;0Z{W(XQG{iLdQ$9P0C>oGg zz>1uIY6ARzD5x)gZmU%p7Ca<7%Y6IweM6EY3^6O;@EeyKWKM)9gSwDUfN|eyaA4cu zX2Ui@Sb2)pdGYiYDK8;ExerdEEMFXz1tY_a-jH$(NKA@xHPfouY=+&a$C`4Fv_`)wh23D< zSvs?h!`BGSXYxsKBhmT0g6a>PCiZ9@D|Yi8lbAjXCcdxu@O<*k5LD>Z><>NKtvGP( z2R;tELl#?wj9{$JXdL6j{&BfWiP}vOv-ttJZFcCv7~khM-v%KS!vfb9!7?8b-jg5- zi{(l5usZvjCa%M+TSJ-q4u*Ks9|**!u7q&(i-E6o9o;HUL2HXZmqB_hktqzfra9{)wvOBpuq>a8k2)$7yDEjLbh%(YEYe79n}VmeV~g zeccs?;}(0OG8@{{f%FDWSe6zniS-dztm9jUP5d5L2F9D~LD?xp+Ci>DsmHw(FOBRE z^xhBlfno-EjT%i(q{=f2g7KmYegxkFRpiT3Q*}BzSuZVbp$_{S>m!k9V8~ zRNIaoS1v!WifFo?Lv0+x&WwkAG|hAEPPwU_aGFe2m}GnKLx$o7LQv2vGyzy8Z?EWF zrL$*xb46%@-*D|RV-fXb;a>Yf>wF!fm1V$(vR3ajaShT6!QZ%k&DZ^igKQzPq}a?q z0KA>{=Z(XXYR#v242GYVedm%xJaYUcp?)A%>D8|H&*`80*QUX|kCyLYP1=* z>ATIOC~YYany}1MyT8=2&ph-KzZ3oOE(f7^$Y(pol$x;#w^t~1?u3=qz;3h!F;CgV zIPa|%*vtS$u`4WW9l9kyn&1_(7iYwlG}}}5_qt92KE^KWvlXmRCK=R~vl7;Q=@#VE zKAE;lz&k#eZ+lS_GA;LF?hmF@jz6<1+h0>_X6ex^Tu%n$`Zxn9j7uIFX5j^mf|P{G zzjrcMlsJ%nqHhQg?Z_N4eYc$@mj1e9BiY?g@Fpkfx{J+%3qWiu0HcNXF;GyG^m~y$ zb_A4N;4z9GUPB^M^QWUDv$%*$=v^X>bsZCj_bT+KpM_rWocEcU$7cqRBWy+%m1`$M z+_I)GjpasX>{D-1%oO$mCgJsyhNO>ZVD3$Ir{*mt?;?jd+0jo?0w6>6qBtXmD%cT> z``2(Rv=+U>ZjHhhpu=f12`dA8f4b>*Z-8AndrvlnspJ04OMJI&IJvl8;Z}TyEjw-1 zHZ__6ol0;TKfbO1XksvN{871sr3Qtsj;4+(am}Mr%_LQZh_N3{{rZV}j6={K61GV6 zK)HEjqvjnpo;dCa?M=`pE7vV~McuWN8-_I7j6>=-RZBwr9fc@Ab`N{2*UjfN ztTr55&@fuy6SCfQ#9RXlbJGH7m9a}--PjB;_n2w_UHzWSWy#h)tnlRFl)dA&*kQUhP zl81Nr-#J)XA!II|igAm-M<{^@4^iQMGKMF@ivDp|mi8!LFJRG4|MoQmx%}4{pEkRC z$1!!Ojt|!`B8U_6Z8q!ORP0(6H1j6@_kvi;mIW$aEYLX0*CWg>YbysE<%QTcN`ok& zCag@zSxr3MLwuh4h`e6qpKnZowcHubZcz^oI!6QrT3j4C#gO5x2UrC7_e(2zV-0== z#nrxm31F?r!xTiTmpvh8LHY+Xd+YaTDqC5lO6v0bvEa80iZil{Z2_53vK#?a5PQwD zYsIXPr?|A6DaE#4Hmt?SI&U5a25m+N3B)osM6{?yBW~UxE|#F1$zvN}5q0i7PPEOg z@N5$droF;Pys_$&e}(!Kp3tBb_7+wUK7=_HFUk-4^*h6f61{po`E;=c3%6M@eCkdb zqPpmxBrz>>%@biXRAh3yls9rj#)VImCIpe3@$oT1TQ1Hj<5205W3!pa%d9NY%VH|! zA~S~70$oT3MHxxkJCZOsQfqg-g(DZ0pVB(3SL|EdDJ4R`Geq=Y*_k?T_=qT#W;FAs zC=>N~5hKz7P<{8mH3z0H;;eS~jNZOo57LZl7`Rx2{1nM_o(N&#;A*&mTUOMMpNCq4 zk>x_rT}`f^d7#Az;g%`zO?)2Rq@f+JU%@(6+$s1&5R_xZQJ^84CppGA_ z?i{hllf5ts1F7(Uq7BL^>eBU!9Z#yEgxjZu%rb95q9CeI)|hV;TIrwhN+EJ5bXaHb zdC811m`!lo=7xw=Z6l5z@87l#j)mt=eU)57_Cm?;tluKO`Jt?EpWEF z$_yNTB@$2xlRHG#G{VMw`#U+2-18J6TE1<~veXERf%=IC_iYNhoiGxmMt%+cCf zRIY?{Zk!rxD_Q?Jm|(&NM1U|AbMl7~JA%YdUglADz#k%cKfHlSSE|bZTVFSsYuy;| zb?f!c9O|Z>)`c0Fq=UPlCyd3fL0|?UsASFg{cP1w+qM{GTP%F^>fNE@tnf%pR7xoC zC{t|8d4;cpUvGrE`b3aBsiGs=FCrLn-u}o!0uH|uu=*yMjOasIi%;xY{}cYI4N&%! z=ujoe?3nR}wTCnhLyNVdrGQsKTDsxQr{#6h8U=ZX_=SAbhvV6?iKGGVY3WntE+`+h)I zdsT2Feone z%-b|`$y6sdkM{M)R_P8HtLAxGCsN8eLTlEC0dA30KvA-7>~-rsI;zgWJz?k;{~DD&_Gf zj$<2X_G^abRvc=|4MMAP%%`~ObJEaJQ=g;vBo6iv(U$vFwQG-)fy!MoryJGn>mvHM3rI7 zfMBWBsTiiiGAlIH?SACL@n9Pb<%je>)W|w4)Ze$2u_de?OC<5C&0@Pc-8=TgS=U1;ZYPmlajXb# z!nD+1Fa@5qg8?rrc&Rk_<08J1r03>ih`UYngdodzyCb>f@}>R4ZU142T7UL%K2>u( zr%7pwSLw!tvWJ=nZ-m3YecaA&cD3UYDz#h`ntns6Hi(~;+9Wi-&V6y{y~6rAe#pR= z6wc%c+A->9&iY(z7dCqRnEVKIjrxa;XJ#yHdkGiA>2l)Z8rL_N9^+!Np9=9%gpzW# z`3@OMtn$V_p<9hFQf@NAeyIN<@?By0OW^3GQ@wC~a_g5*OP<)oep9iTI_|g?xN%tb z1eqoEy?x&Mw0WTb+)f9#!N!AP+I=DuwC@Ba`B{!KxAL2z{8t~uxS@M&q8aZZo_SW~1>*`MTn zrz&9ruTm@k@y&RznpTrH*%HX`U0d}~{jSY=u?1F)SZi*FXX{9z#6SAUQJjXgjEYZQa~GT4OctXZ;f8<(#w_5p(# z^*WrV!M&Vyyz9bz46F^`$%|IbEzT*CiV2f{^(4*Wfb|fPw-t_$T+9rqPNS&9S)&AQ zEC;9R+8p((j34WA)O&+Y8{zX@Z;E~5KAeRM@o#LL1X6+meO>slN%1U<9~_7>=SaYx zE%~;vXDdHm5$Ef!Lg#*#Skj^BE51{WMZdeGRT=5Dlq8*=eZm&oWu*}ftVq};naB&j z)S|h9Y$N`Vbw&qpmtFM}3>0Y(@d4J?NyDnxzTd{?v@7#ylI90Wa zz^e#03}!6BuUiYyc`x2xGBL#bTqi^}$x6iqtwgkYoUC-_`TTC(kxl;`sKa2>{`icG z6GpDlAQ^LqfOw5*=-?p?BpH7*6kZXwe)1+$Y>8eFYtfDDAZqE_u-f#UB)aDf(Tuav z+RnWV@*+mVXb^PFVkEbRb^>Llv=VeIFhR(+JuEHSkfQCAe$@1Ac}|#V=ThdJ@})la z78ioXr&I{`;?cLny}*z5OD$7FrzA*<6`};n%r@;@!BtFprQts&+no;vS5CL{bA%|L zGJ$ba>(_vLB4ve*_f2iiLj!#6UQUOIxL3%Dvnu#=gVoPy$Otxza9Pb;EGVS`ugP4y zzM4>M7bhd->`?@nwDglOG%cD>kFp+KV$0y#ldjktIY~6?c&{@-NR8pB4WB}!5qxlN zjB8rm`6Y?P<)K9(~gGE35-K&aBB`T$>EPwF;oRe?Wp)#9dT;!d-1(VhJ!vPpkNhX$V z_cw5eZtx6591cx~@@TwkOrL0NHWUY;bZ3!otH!;#22&t|g*|>2FKbBY1V;*`X>4%t zq?GLW2)9ROM{JaWuh7rH*H_n^Y8HJ(b#}|bFn4Eqztz~+(iy0xU^$j8l-im=KH^St zjKO`KJI>ulDU|%9zkDEnRlrns|5m5;Xv|d+cF?d`2%!<8k;wyer!)Eb7a%#X3h`T;)4 z1N7LwzQX2IgIwg|DpLmK<_(65_unfWJ~KWhv5nOD#cZy8(1!0}E(8A-e+IJ!i4*N3 zh||lr%KDW7vaGJEpkWGOn8z5nFZS$}>c6w5wg<)BE?Vt-PrD_ShmLO|s(M6WdHbax zI1m@9Qo$hm2tx8X8DUhn7uz%;UCl~RcGHjY$$6MLpIo5>LBoQb%>j= zNg^WB&8HeH8Brxh8{6+E#&rivyw$wVa8bJ@=^quvdASXvjPtJcXeW~~&KOlXP}!FA zr9Txpf~BizGSjIsV7b>$*I8gNWJ_O!#4Ou(fNH{%a>*Vx|E<^jTBgvBa%UMt{{A66<;caF2quoB>y7a za$XC=ek8p{G{vO>q0QGD1H}i}b)sf3)UTGD?h4VN3+0F^k0S<4U2L_xHK>tt-qyIj z9utxt>K@)WYPM*UFa&k%@um=Zf6qc7M{wwj9>PD5{eG z)el#5gNnw{*-CEfld1dgkp|~`uX4TDXo}Xt4pwW6rmkiQ&XvR-K8iFKi0SKsRb9`H zZDe|MSce}uNG1~}e3mjiKhM=LXCbdG1q~i(feWSe&IO=b67k}Wz#fGKRh_j9hI&1s z_~l+8am{P^r4R|rN@v7tuze|0wQ(Si*3QqN1)cc&`6dyz8b|M26k*NxZ67ReO%O0UYBz5 z&id5N$!jmb{g{(sIirehTK$EQ?)#WDMKgMayXo;PmaUXSW=j{KeXQB(l{Vm*^vDpk z&c?Mx(53;rLzr|Q87t)7p*rtLHP=|!(Xcw5-iC!Jx<|_Pj1T%S+OSW#o;9%zQcd5Z zmT!HNy7ITJ$(Cw!YqtDp(eSSw!SFh}d=25P-9-_8H_3!&FdiB?vt%+Zwcaw)5dqnS0lt!+~@XIdSiOdI%x15R#I1WE5 zrrO+)Y>Fu)xUB2I=O$NGOf)o(Nu~Zc97MPjmSjR`S^;l2;0MC8zNXe+a9I7u#v@{? zJuZ@>_@qRXyLH}1O`^Gq1szS_WkXXRcJ>upb9km0O(hzy+L5aL+xrtZyyN%t^Va2B zy{%r@zGS;1qtwaJVV)yUglH~Dd!=J~@rUhiiE-}}lu+q0!KpH(7YE-6HFCi6(>_^F z7XA1_dF`K%B2#;n0(m&;a+YwCN*icevWoTW$Va`*s5f0O9c!6=WpXsMWeLgDiz9M^ z1}9*~2q$g-iq@#1ql2%(l?oo=I*%`Ub&`lexx1M#L+Mz@VZtZ#Q|m|ZPq8saDxQPM z--zh7MWLXalcyq#H$$uD#O1>(djw8(h^{5|Hd1Jb#$q!<`|w!xou_9DwI=6K(l0q) zQ3a}(M8D@mBrS*8E{_#4Ol#Vo+etGwST1`O_o`K6PP{u1cXD6OD46!yoWiS2xg|mEUe6Y-Bzt)^XwXWP+!d^aB9J&~0+L~hiov(6hbDxe|TuRW-Dj=L? zq+k1l{;i^HM5uFqzNcAnD`tWyZ5LQUITG??mrjCsQ z{aMnpsq8-KzS$5{EOD0$h1DPeO%u`kj;Y~x{}Io%A12+tenoC3TN)iRepjVu;So%P z?fzApAwu1)FI``ta#6vN(4Nc;Uz5Icnzc36RD@IYo;$Z!`UN?vg~1QXyDHyOl3TKJ zpJpXM9cmK3U4V)b`C0ZUTyZG}!kZSPbXBdqH2e$d8OgN+G%;AS#ynJY_OB>?Qa4LsB4D}5T=Qw1uphj8q$zf(!5wMF-~{Ggi6C1(R5RUkg?p{nC~ zr4e-b=#NEX`cid~~d_NUpdwdka#@!MiUmr-SCH0z*qa z*};mbK7Sn0kTyd%9=Wv}Ko&m=_NJInn#`*MXQqjoBRzQNd&JlB&pc&;@b%kULaQCN@2y9`DR^ z7-ZuO=&PzTQA9Ih@HCXOHTV+ZEt$?O3VmKe3({ z8W?r{UF&(j!Z4GrJx$cdCmoA^RNN$l74$TxXIn6pyqmZENp6YWY4>- zNknlQ``QKe)t`^zkE(FgX>o5T8nA8aDP1j!x0sveU+=F8C?{1cp=im|zzON|WpKoXPT zVS}*TXB5h`jwvNmQDr3(cP}A;h%IAG`IU7MFOn5E9!dHsyz(hs*JusxE9;nWEfRb) z$@kyFbIl73SKq17Ey4TBk9JFC&~F8Jz3yjBT&F2;#j4zHuh7tnKp1Hn=4o|IXrSl!E_cHW||F8gsO&l=`M+0N)K!x_Yjqa7fw1P#1+g^-ts zQC*b|JDF{^v{72>?qKTU+UEKUgGOnn#YzG-#^4Ic>RD0?zNnmR4dvKZ@eYa6+}s^! z%p?~6R@!lHZ())3_X39{(zIYhH0vRJ7-0;}eU_fzZv~-s(ng}{^@(oL-f#09dmLHl z4rThglW=1)Z$iErOeliV-DHJdk9hv9ORX*CNE0-iGZn^)M(q{Qtt7Kzi<*ziWS+^b zaZ~DWkzyYyVeAZ7)-aY)^$rrRGH8^^ubJm{Gd1+O3p?n~7q~5WgoAkmSOqZD~d7P2U!@tjZa-HiCemSzTIX)vmsG&J`ZRuykVXZ-e>$_8lXvE zo0jtK+^r+?etz-X(q_ROfsGg2rNyYiwoowev;{91C~wbf^~IDcg>$1boOjdfO7!g^ z)n2BduVwU)fgIiX1q~Bmg5PJAgOF-yzQ9oJ>54`!Cua^=)@>j$E_8X>#8%LKxk9Av z?rL&cr}Kpg(Z!}IxnHEVuz$DL>{qSERl(6I!l<@6vBmVAxWS@hC-)UE*IeCWgL%^a zSDft*o*2QQ2rFwstje9XdwK*!I=UuX(eFq;XdWyrI06bMxn>gsKQJbaQ|S`S9K0%< ztI;YiELW7;z#eW|?uqhILN=7Yr(;d^6x|5gh=luKB?Qewca66{_a!!mCE>`l{QZsX z%=a)^v1_7Jmg2!%2P{;5tw%-G-Mc5X%x%a<#+4+quQDG?>mImK;P~c9jo=4WG-5iJ z=Aef?V4b8oO{b)dVS$O7nu)8EwVUo+XbEwWgXY)($M;$%idsR0QouqY-k-HQlp)qi zV~YFH(2BCuh89(s{abPIHE!*iWBOnvsi_tvkSG}o%&SSY3KTz2KFObcEHqxoF|JCW zY1M1=8i&R$edkUUr1boj$TnTr*@S6*PH#`1h*`qbwq|R3u#WR{&Sn|7;3H3NxLW&| z;5P)Zh}97)V3%l)C)x~cvq}^xm?$-;4NXVZax0n*p*F)=pTI*YzN~o646^|0X%21R z8q_$MZnC$HSVLp8_3+qacK{-SaUL|x``PL2s4ZOBrSdO@^EyJ8TJE7!$ZCkoY$}^w zUm04gSVkH1Cj#TOs^>Vdk2>>B!f__ zG+!;yz|(c&VCpA_SF?xF0;T&8h9(%VVTkP!r+tgwwdHa;GPj4foRAOAi7~)Ud}1eX zK|oGX`flllV+^_5l;B1tN3=eVO%iY`*iitBVWrJlW~#KRNfg)L@ocf=T;AA+)t}qN z`S^M6^%LagUbuq8E~+`K3e$dJPUM*pFi|KhL>VB0bkm;~!@}^jzIJwj{ktcZ;%Kj} zqe#xa_C>>Rp?f_Pa3uP4IbCW@Vu$!$LdjfD=XW)Oijuy(MfRb}id9%0m=PnmG*2pOB07GP?Lyva>wGDo=5 z`!bQ+9Ebb%OK;i3iQygk&Kzn|)Dy;Aht&WP(+E|C+2-rW8|K`~H8H=Ck`v2yS!U@J zi>19HfBWE0`A+a`B{se~$~7(i<^j~h-r21!XFkv5tz0UL909haL}A}+s=(Is@?>p6 z949~_zX9uG>QGeIA>!vIc9ZZhy}q_)7HPB0ee$|~ru7MQyQ5AkKFCn@L)l?kIcoS7 zlL5(YFTwx?RakC-)yyKT!p20dNtQf=F}^^Ckr65BcLKJG$>*iFeAntjH6(d9N&=*X z_iF_`TfS%<&5h%x8O6c|(!5_)o$T6eN-Oe^%#Ft`^+#t9uk4D$X|G^| zADPgcX3}(^wt&rL9;M%!g$8uu4k^;d8|$5N_bhu2frs3^_ABH_^`7*gcM>KeEVg~X zS?Z5-d~i*hZAMG;cxsrRwBAp%VI;0f)1_Z-yCm@NJp(5xp_ph)7v9AYtOUq!5}SM+ zx_?vdy|Lb=vLw7XU_YR?dXE(Bu6VW+X@c2>_;f3{fei0G?{lVTQ$`v1!zr#W4xF@d zsFG_D8toHSMN>@Pr92YZN6b0oE^NavB8fIjc@!%X&0LDMj?gz7c?<({{S(kRB#s5l z(wNYddQUTT=~U@sVWKi~yOtuz|qRn@Hr zpZAGIO&44oxL>&&toa(U!k#qNi&HGr9Sgm^T2Fb!vHR+c@?g%Q1!vQ@<8HaPs$4}? zgM$87qs}`PYabSrLJMT$V4M!Vql&;_McD-myt8jarE!|!XCGI(*9_XQQ>8BwDFg@&5rY zK+wN3MK!JzWe^23SiWpILl7xw4y+`}&jc}kFP|lWTePYa21Vik!AMoc!F#dq>7f@K zAPpm~NQ+JehO3}!Nvl11^Fx3{n5L9$U0hH`t{!NicSbd{!-;e~dKVM_l#mB2n)jBVTPnBsD5zM9$(RLvb%a~$x3 zpUhlFveAQTsfSx(Ty%%oEr6-f=?uBHu{BzTb9yYF?Cjs(rdSP&%;}7E<~9cbxZB=g zd8*F!>{liUr;DO&U5vcbztLO;6l+Tb0qBodazW zX~rI^`dTSw-f$*p+uG1id0n)M+>|kjoPmW81Z44xbAwk}{(V1Z2Dr6(4ebZ_kk!EW=Wk^+(u)w)!7 zhGgFJM4~F2Q@^DIdp%52!)FgGxrpr%uavHtB+IrhFN}|7ecp)i_~g=4Z^X^vH4Wer#;J)HI_)K%_+Qx5PIWhs%$> z;X_?G+A~sR_k06Fi9p7?>9G2XEk6r6?}v%^nPC|<0_ivNG2!*07CAwy9CnetZSsz? z5Aeg&CIy$b=e-dy{TGGWWi>z?>G$7q0`Z&<8>_iY;4R%&F>@GSYf;)Nj@r@)6N{?) zwVdYkYYOA^r#n#|Xp|hQdywjr;ESi?eJl-0G%575#47#hOSm<4$(((Rcm-0&AKTB! zAJ&qfe61JJ8UZ%x3>gg%C`}R}{HBM>-n=7j3et?KrzIy<)2te@vn{Z{{mASW3i1i( znD6Kd!}ODi41kJ`Qvy#%V)#+Sh{)H29ml-v5B$%Q(2P1qdZJ7~o;*$D$8OD4uqKFD z(TA;vYc+9_fIhw2F|zr&#Vppt(~1(+4)|e7*1;vdJHCZV9`p@sbi;Q`msNu8pc&wC zCAlH{Jp+0FCn*3_;<0Iy zbmdNWeL%}$!otfqAf(L>s3Z48Oh1BXdL|ABs`*mt9!x5D*S9AxyY-XpNm z!v$bc@FXlY!OX~ObE~Z@X={lAmwfU2diLl)L(d<K93 z0!>CGL!@^JgTuy#yzu5b7764irhezg8K8p}v%^VB1P6tv~Rrv%wm0XitYIAJ)*B`-A^-4XwbVXyXXdVK(tQ~_Spi132XRRUdHOl~ETIL4sJYT; z%Q-49TzZ5MFj9LyojfL*Oc**bD`$W|A}4aO;t;e9G35V19{?JOH52)g-b;Hlf>IGU zBj`o>6GZA6HwW^7Xjg}dbTLaj*u}8~Ny2mn{f(4V$uM;c zE(p0H?C^)rOk$II=hovZCdz7xe0sO-y`~BI-BsFW4_G=Q2(?g`7Cx^0RvVni$STV5 z0dO1Vq~_YPVWS{$FLII9J#*;8>DaLtKh-=KOg<$RY%Ik@OEGo%QdA`E3~`yGeSf92 z0;M+$Kv@H+XDVyK;m2+D-f4hI4!mqYdMaNJBxlhnPJw}^yG!O>K09ej$H5JO>4+67 zi}D=-Iya8*;@7564RHsvv%gbW1}DKSw3*5LKFg-GXlGx-(U82r8YAQunZvFzNt-rI zIY^=6D#}pyR~3zjH~pr4~<{6eoBjvg0Z09 z&7ZJ#CD+6uT6n1tVR*s8buJyy0&_(>@-79^&$reM(tb*4AXFVR*y7TI z<(3p6%P^sN&Ax7e*{Ksi`X{f*)Q-XsF1XkUnozHwaR^cVFUqTy)$`i8j zH?=(~Dw>Ll8tlx-F5h>~!i+)?Vhzg@DlVATav&@B;A=yw8c}Oh{I3fTz9zVh5r|pi z=2yvX?uYqNdc|}t`y50+P7z~j5Zuz0Pv2v4x!X0}?p7wW zI;+gr1hdueN_FZX7a(GGv`Ipi+cLnSpy%o==nY+wioONHIIyQI9sA+SY64tgPyW z%Hr^Vv@WDi1YT`FR>^*bh02eTcqw*Rlab?F#X1Z9wHn#Q{WgF5+WO4uK1Z?gW`MU> zSeX{NpF4&4mNTbstR^22+I>{6kprnLrm6uMgHc}M9b-@iiVWXUPjH&*#y>(q@R3BD za?U*J+VQhS5=kk5ri-X36 z?Sz+sUYB9!S3C%4MxgH(yq#s&=XE}#aOOi8o1LCH-wVCfCT7!+H8YI^;qH9=K+#2X zA4=zQUf-K7v@ca?9xDcDEr!H2HaQ^>5Xn$Th*}Dmz7Z3I8g;*+fE_%At6U57WUPuJ z6K%K`F4teI_ zJ7%yjt_9KQ(k>CfnPbjIfC27^?rI=i)>Hd)8N1bs#Ny=suC1kW0#66jHvg}e|CFs? z6+{jDE^R|^cmnag9~-f3?ZiHk&2$vbiXip@6_Ps<60x<-HCBr_vOb{5VjgyTd<(qF zsUv3L4=XXQ1@pTeKh`JUnj_F|Rd@&rYCFx_I)>)c6&=Ee2E0txeQv( zL2Y3qc%#*`_)`mMC!Wf1emWvN&mVR%z(dQ`cl#1-m8r>MLHmQbj_d#MRHjX3;UnGJ zk<)e!I-+9}fB1g`Dsp_DYExJsSwrW7Py8t&IsgiT95J2z;AX=3!7smE8>%Gu%z6wK z?DSPej$AYNxms)XIc^1?4C*R@+~9FW0Bo!C*Z6i5hNXJ_aG`CM@_jY@>ttQP|I4>5 z=en4t7f;}%7>X`~x`=VBw$tMm zXH8?&CiK>}O-id8R+VY_GWLp0l?ts=*D!^|38$d)ZyJ}RO{SsHnvwzdDt}%lPS+OWiSbpz@x$~w^)oSOBC8>V+^mK+P zG(tONab&F-jr#3v6{NXZ$|R%^l|Ne)S8N#XJXuNr1zr!Ww8zTgcMA#4ckEF-Gnj$r zF4`!O3FWslE|dyBptWFVpeS9TtLR8lR}v*4EPNSikvP0ZNhd=mBB}>dOlc{staR>VqB(wxLE6gH7^S?CVmxczM0CTPLF%69*Rp z7fPz)eV66`+o~dGiXa?LQUkXC;(Y=y**6f?9=AZ|6%6pkY0qn%a?@Z{F_sUGw;BW- z=QSZdcpcWZ?hb3R2(rMzWJH(Z3Q>|nWs#(Rt#TiDOsz`CtAs~w=!w;ebDCAH1z{%V zPl|^m=)+S&d17~~T;pYZ6@C-~cWb>PL?Z-MFYrk_qvYa~q)9afT_dy6$U-#aAT!0R z<6A1Tk~ZgVLv07Gg|f?GpJrYE=@?mun9hJ*JbMlstT@iXVXR-Tue`+&K3c#61IZLm z7OL70Cj{MbkzvjPsyd+_P~9H3-=AHetVk`?q!}@iFPAd=5~!tFOwxO1VTHgMx*!6T z39?c>o~0N~!=@3{Y)#Rlo!lZU>vZlmb|oh4FVxVLnqsQ7ek>rilTl}Mjx=mli{W^)P9VoWB>|56&Wt{L& zJ+GPWDuw#e#&>W+^NU>Y>&RE9`4Ti(P2}XNk_d)(;ETKf;oFGEd}wKG;|a2dtC99S z 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 z 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%0AYoY0EIuLzl$tLY8Oh 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�UQ%;_1k<~lQK>Q9O!O4n4@HCE1= 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 + +/* These rules specify the order of arguments in API calls: + * + * 1. Context pointers go first, followed by output arguments, combined + * output/input arguments, and finally input-only arguments. + * 2. Array lengths always immediately the follow the argument whose length + * they describe, even if this violates rule 1. + * 3. Within the OUT/OUTIN/IN groups, pointers to data that is typically generated + * later go first. This means: signatures, public nonces, private nonces, + * messages, public keys, secret keys, tweaks. + * 4. Arguments that are not data pointers go last, from more complex to less + * complex: function pointers, algorithm names, messages, void pointers, + * counts, flags, booleans. + * 5. Opaque data pointers follow the function pointer they are to be passed to. + */ + +/** Opaque data structure that holds context information (precomputed tables etc.). + * + * The purpose of context structures is to cache large precomputed data tables + * that are expensive to construct, and also to maintain the randomization data + * for blinding. + * + * Do not create a new context object for each operation, as construction is + * far slower than all other API calls (~100 times slower than an ECDSA + * verification). + * + * A constructed context can safely be used from multiple threads + * simultaneously, but API calls that take a non-const pointer to a context + * need exclusive access to it. In particular this is the case for + * secp256k1_context_destroy, secp256k1_context_preallocated_destroy, + * and secp256k1_context_randomize. + * + * Regarding randomization, either do it once at creation time (in which case + * you do not need any locking for the other calls), or use a read-write lock. + */ +typedef struct secp256k1_context_struct secp256k1_context; + +/** Opaque data structure that holds rewriteable "scratch space" + * + * The purpose of this structure is to replace dynamic memory allocations, + * because we target architectures where this may not be available. It is + * essentially a resizable (within specified parameters) block of bytes, + * which is initially created either by memory allocation or TODO as a pointer + * into some fixed rewritable space. + * + * Unlike the context object, this cannot safely be shared between threads + * without additional synchronization logic. + */ +typedef struct secp256k1_scratch_space_struct secp256k1_scratch_space; + +/** Opaque data structure that holds a parsed and valid public key. + * + * The exact representation of data inside is implementation defined and not + * guaranteed to be portable between different platforms or versions. It is + * however guaranteed to be 64 bytes in size, and can be safely copied/moved. + * If you need to convert to a format suitable for storage, transmission, or + * comparison, use secp256k1_ec_pubkey_serialize and secp256k1_ec_pubkey_parse. + */ +typedef struct { + unsigned char data[64]; +} secp256k1_pubkey; + +/** Opaque data structured that holds a parsed ECDSA signature. + * + * The exact representation of data inside is implementation defined and not + * guaranteed to be portable between different platforms or versions. It is + * however guaranteed to be 64 bytes in size, and can be safely copied/moved. + * If you need to convert to a format suitable for storage, transmission, or + * comparison, use the secp256k1_ecdsa_signature_serialize_* and + * secp256k1_ecdsa_signature_parse_* functions. + */ +typedef struct { + unsigned char data[64]; +} secp256k1_ecdsa_signature; + +/** A pointer to a function to deterministically generate a nonce. + * + * Returns: 1 if a nonce was successfully generated. 0 will cause signing to fail. + * Out: nonce32: pointer to a 32-byte array to be filled by the function. + * In: msg32: the 32-byte message hash being verified (will not be NULL) + * key32: pointer to a 32-byte secret key (will not be NULL) + * algo16: pointer to a 16-byte array describing the signature + * algorithm (will be NULL for ECDSA for compatibility). + * data: Arbitrary data pointer that is passed through. + * attempt: how many iterations we have tried to find a nonce. + * This will almost always be 0, but different attempt values + * are required to result in a different nonce. + * + * Except for test cases, this function should compute some cryptographic hash of + * the message, the algorithm, the key and the attempt. + */ +typedef int (*secp256k1_nonce_function)( + unsigned char *nonce32, + const unsigned char *msg32, + const unsigned char *key32, + const unsigned char *algo16, + void *data, + unsigned int attempt +); + +# if !defined(SECP256K1_GNUC_PREREQ) +# if defined(__GNUC__)&&defined(__GNUC_MINOR__) +# define SECP256K1_GNUC_PREREQ(_maj,_min) \ + ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min)) +# else +# define SECP256K1_GNUC_PREREQ(_maj,_min) 0 +# endif +# endif + +# if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) ) +# if SECP256K1_GNUC_PREREQ(2,7) +# define SECP256K1_INLINE __inline__ +# elif (defined(_MSC_VER)) +# define SECP256K1_INLINE __inline +# else +# define SECP256K1_INLINE +# endif +# else +# define SECP256K1_INLINE inline +# endif + +#ifndef SECP256K1_API +# if defined(_WIN32) +# ifdef SECP256K1_BUILD +# define SECP256K1_API __declspec(dllexport) +# else +# define SECP256K1_API +# endif +# elif defined(__GNUC__) && defined(SECP256K1_BUILD) +# define SECP256K1_API __attribute__ ((visibility ("default"))) +# else +# define SECP256K1_API +# endif +#endif + +/**Warning attributes + * NONNULL is not used if SECP256K1_BUILD is set to avoid the compiler optimizing out + * some paranoid null checks. */ +# if defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4) +# define SECP256K1_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__)) +# else +# define SECP256K1_WARN_UNUSED_RESULT +# endif +# if !defined(SECP256K1_BUILD) && defined(__GNUC__) && SECP256K1_GNUC_PREREQ(3, 4) +# define SECP256K1_ARG_NONNULL(_x) __attribute__ ((__nonnull__(_x))) +# else +# define SECP256K1_ARG_NONNULL(_x) +# endif + +/** All flags' lower 8 bits indicate what they're for. Do not use directly. */ +#define SECP256K1_FLAGS_TYPE_MASK ((1 << 8) - 1) +#define SECP256K1_FLAGS_TYPE_CONTEXT (1 << 0) +#define SECP256K1_FLAGS_TYPE_COMPRESSION (1 << 1) +/** The higher bits contain the actual data. Do not use directly. */ +#define SECP256K1_FLAGS_BIT_CONTEXT_VERIFY (1 << 8) +#define SECP256K1_FLAGS_BIT_CONTEXT_SIGN (1 << 9) +#define SECP256K1_FLAGS_BIT_COMPRESSION (1 << 8) + +/** Flags to pass to secp256k1_context_create, secp256k1_context_preallocated_size, and + * secp256k1_context_preallocated_create. */ +#define SECP256K1_CONTEXT_VERIFY (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_VERIFY) +#define SECP256K1_CONTEXT_SIGN (SECP256K1_FLAGS_TYPE_CONTEXT | SECP256K1_FLAGS_BIT_CONTEXT_SIGN) +#define SECP256K1_CONTEXT_NONE (SECP256K1_FLAGS_TYPE_CONTEXT) + +/** Flag to pass to secp256k1_ec_pubkey_serialize. */ +#define SECP256K1_EC_COMPRESSED (SECP256K1_FLAGS_TYPE_COMPRESSION | SECP256K1_FLAGS_BIT_COMPRESSION) +#define SECP256K1_EC_UNCOMPRESSED (SECP256K1_FLAGS_TYPE_COMPRESSION) + +/** Prefix byte used to tag various encoded curvepoints for specific purposes */ +#define SECP256K1_TAG_PUBKEY_EVEN 0x02 +#define SECP256K1_TAG_PUBKEY_ODD 0x03 +#define SECP256K1_TAG_PUBKEY_UNCOMPRESSED 0x04 +#define SECP256K1_TAG_PUBKEY_HYBRID_EVEN 0x06 +#define SECP256K1_TAG_PUBKEY_HYBRID_ODD 0x07 + +/** A simple secp256k1 context object with no precomputed tables. These are useful for + * type serialization/parsing functions which require a context object to maintain + * API consistency, but currently do not require expensive precomputations or dynamic + * allocations. + */ +SECP256K1_API extern const secp256k1_context *secp256k1_context_no_precomp; + +/** Create a secp256k1 context object (in dynamically allocated memory). + * + * This function uses malloc to allocate memory. It is guaranteed that malloc is + * called at most once for every call of this function. If you need to avoid dynamic + * memory allocation entirely, see the functions in secp256k1_preallocated.h. + * + * Returns: a newly created context object. + * In: flags: which parts of the context to initialize. + * + * See also secp256k1_context_randomize. + */ +SECP256K1_API secp256k1_context* secp256k1_context_create( + unsigned int flags +) SECP256K1_WARN_UNUSED_RESULT; + +/** Copy a secp256k1 context object (into dynamically allocated memory). + * + * This function uses malloc to allocate memory. It is guaranteed that malloc is + * called at most once for every call of this function. If you need to avoid dynamic + * memory allocation entirely, see the functions in secp256k1_preallocated.h. + * + * Returns: a newly created context object. + * Args: ctx: an existing context to copy (cannot be NULL) + */ +SECP256K1_API secp256k1_context* secp256k1_context_clone( + const secp256k1_context* ctx +) SECP256K1_ARG_NONNULL(1) SECP256K1_WARN_UNUSED_RESULT; + +/** Destroy a secp256k1 context object (created in dynamically allocated memory). + * + * The context pointer may not be used afterwards. + * + * The context to destroy must have been created using secp256k1_context_create + * or secp256k1_context_clone. If the context has instead been created using + * secp256k1_context_preallocated_create or secp256k1_context_preallocated_clone, the + * behaviour is undefined. In that case, secp256k1_context_preallocated_destroy must + * be used instead. + * + * Args: ctx: an existing context to destroy, constructed using + * secp256k1_context_create or secp256k1_context_clone + */ +SECP256K1_API void secp256k1_context_destroy( + secp256k1_context* ctx +); + +/** Set a callback function to be called when an illegal argument is passed to + * an API call. It will only trigger for violations that are mentioned + * explicitly in the header. + * + * The philosophy is that these shouldn't be dealt with through a + * specific return value, as calling code should not have branches to deal with + * the case that this code itself is broken. + * + * On the other hand, during debug stage, one would want to be informed about + * such mistakes, and the default (crashing) may be inadvisable. + * When this callback is triggered, the API function called is guaranteed not + * to cause a crash, though its return value and output arguments are + * undefined. + * + * When this function has not been called (or called with fn==NULL), then the + * default handler will be used. The library provides a default handler which + * writes the message to stderr and calls abort. This default handler can be + * replaced at link time if the preprocessor macro + * USE_EXTERNAL_DEFAULT_CALLBACKS is defined, which is the case if the build + * has been configured with --enable-external-default-callbacks. Then the + * following two symbols must be provided to link against: + * - void secp256k1_default_illegal_callback_fn(const char* message, void* data); + * - void secp256k1_default_error_callback_fn(const char* message, void* data); + * The library can call these default handlers even before a proper callback data + * pointer could have been set using secp256k1_context_set_illegal_callback or + * secp256k1_context_set_error_callback, e.g., when the creation of a context + * fails. In this case, the corresponding default handler will be called with + * the data pointer argument set to NULL. + * + * Args: ctx: an existing context object (cannot be NULL) + * In: fun: a pointer to a function to call when an illegal argument is + * passed to the API, taking a message and an opaque pointer. + * (NULL restores the default handler.) + * data: the opaque pointer to pass to fun above. + * + * See also secp256k1_context_set_error_callback. + */ +SECP256K1_API void secp256k1_context_set_illegal_callback( + secp256k1_context* ctx, + void (*fun)(const char* message, void* data), + const void* data +) SECP256K1_ARG_NONNULL(1); + +/** Set a callback function to be called when an internal consistency check + * fails. The default is crashing. + * + * This can only trigger in case of a hardware failure, miscompilation, + * memory corruption, serious bug in the library, or other error would can + * otherwise result in undefined behaviour. It will not trigger due to mere + * incorrect usage of the API (see secp256k1_context_set_illegal_callback + * for that). After this callback returns, anything may happen, including + * crashing. + * + * Args: ctx: an existing context object (cannot be NULL) + * In: fun: a pointer to a function to call when an internal error occurs, + * taking a message and an opaque pointer (NULL restores the + * default handler, see secp256k1_context_set_illegal_callback + * for details). + * data: the opaque pointer to pass to fun above. + * + * See also secp256k1_context_set_illegal_callback. + */ +SECP256K1_API void secp256k1_context_set_error_callback( + secp256k1_context* ctx, + void (*fun)(const char* message, void* data), + const void* data +) SECP256K1_ARG_NONNULL(1); + +/** Create a secp256k1 scratch space object. + * + * Returns: a newly created scratch space. + * Args: ctx: an existing context object (cannot be NULL) + * In: size: amount of memory to be available as scratch space. Some extra + * (<100 bytes) will be allocated for extra accounting. + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT secp256k1_scratch_space* secp256k1_scratch_space_create( + const secp256k1_context* ctx, + size_t size +) SECP256K1_ARG_NONNULL(1); + +/** Destroy a secp256k1 scratch space. + * + * The pointer may not be used afterwards. + * Args: ctx: a secp256k1 context object. + * scratch: space to destroy + */ +SECP256K1_API void secp256k1_scratch_space_destroy( + const secp256k1_context* ctx, + secp256k1_scratch_space* scratch +) SECP256K1_ARG_NONNULL(1); + +/** Parse a variable-length public key into the pubkey object. + * + * Returns: 1 if the public key was fully valid. + * 0 if the public key could not be parsed or is invalid. + * Args: ctx: a secp256k1 context object. + * Out: pubkey: pointer to a pubkey object. If 1 is returned, it is set to a + * parsed version of input. If not, its value is undefined. + * In: input: pointer to a serialized public key + * inputlen: length of the array pointed to by input + * + * This function supports parsing compressed (33 bytes, header byte 0x02 or + * 0x03), uncompressed (65 bytes, header byte 0x04), or hybrid (65 bytes, header + * byte 0x06 or 0x07) format public keys. + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_parse( + const secp256k1_context* ctx, + secp256k1_pubkey* pubkey, + const unsigned char *input, + size_t inputlen +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Serialize a pubkey object into a serialized byte sequence. + * + * Returns: 1 always. + * Args: ctx: a secp256k1 context object. + * Out: output: a pointer to a 65-byte (if compressed==0) or 33-byte (if + * compressed==1) byte array to place the serialized key + * in. + * In/Out: outputlen: a pointer to an integer which is initially set to the + * size of output, and is overwritten with the written + * size. + * In: pubkey: a pointer to a secp256k1_pubkey containing an + * initialized public key. + * flags: SECP256K1_EC_COMPRESSED if serialization should be in + * compressed format, otherwise SECP256K1_EC_UNCOMPRESSED. + */ +SECP256K1_API int secp256k1_ec_pubkey_serialize( + const secp256k1_context* ctx, + unsigned char *output, + size_t *outputlen, + const secp256k1_pubkey* pubkey, + unsigned int flags +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); + +/** Parse an ECDSA signature in compact (64 bytes) format. + * + * Returns: 1 when the signature could be parsed, 0 otherwise. + * Args: ctx: a secp256k1 context object + * Out: sig: a pointer to a signature object + * In: input64: a pointer to the 64-byte array to parse + * + * The signature must consist of a 32-byte big endian R value, followed by a + * 32-byte big endian S value. If R or S fall outside of [0..order-1], the + * encoding is invalid. R and S with value 0 are allowed in the encoding. + * + * After the call, sig will always be initialized. If parsing failed or R or + * S are zero, the resulting sig value is guaranteed to fail validation for any + * message and public key. + */ +SECP256K1_API int secp256k1_ecdsa_signature_parse_compact( + const secp256k1_context* ctx, + secp256k1_ecdsa_signature* sig, + const unsigned char *input64 +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Parse a DER ECDSA signature. + * + * Returns: 1 when the signature could be parsed, 0 otherwise. + * Args: ctx: a secp256k1 context object + * Out: sig: a pointer to a signature object + * In: input: a pointer to the signature to be parsed + * inputlen: the length of the array pointed to be input + * + * This function will accept any valid DER encoded signature, even if the + * encoded numbers are out of range. + * + * After the call, sig will always be initialized. If parsing failed or the + * encoded numbers are out of range, signature validation with it is + * guaranteed to fail for every message and public key. + */ +SECP256K1_API int secp256k1_ecdsa_signature_parse_der( + const secp256k1_context* ctx, + secp256k1_ecdsa_signature* sig, + const unsigned char *input, + size_t inputlen +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Serialize an ECDSA signature in DER format. + * + * Returns: 1 if enough space was available to serialize, 0 otherwise + * Args: ctx: a secp256k1 context object + * Out: output: a pointer to an array to store the DER serialization + * In/Out: outputlen: a pointer to a length integer. Initially, this integer + * should be set to the length of output. After the call + * it will be set to the length of the serialization (even + * if 0 was returned). + * In: sig: a pointer to an initialized signature object + */ +SECP256K1_API int secp256k1_ecdsa_signature_serialize_der( + const secp256k1_context* ctx, + unsigned char *output, + size_t *outputlen, + const secp256k1_ecdsa_signature* sig +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); + +/** Serialize an ECDSA signature in compact (64 byte) format. + * + * Returns: 1 + * Args: ctx: a secp256k1 context object + * Out: output64: a pointer to a 64-byte array to store the compact serialization + * In: sig: a pointer to an initialized signature object + * + * See secp256k1_ecdsa_signature_parse_compact for details about the encoding. + */ +SECP256K1_API int secp256k1_ecdsa_signature_serialize_compact( + const secp256k1_context* ctx, + unsigned char *output64, + const secp256k1_ecdsa_signature* sig +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Verify an ECDSA signature. + * + * Returns: 1: correct signature + * 0: incorrect or unparseable signature + * Args: ctx: a secp256k1 context object, initialized for verification. + * In: sig: the signature being verified (cannot be NULL) + * msg32: the 32-byte message hash being verified (cannot be NULL) + * pubkey: pointer to an initialized public key to verify with (cannot be NULL) + * + * To avoid accepting malleable signatures, only ECDSA signatures in lower-S + * form are accepted. + * + * If you need to accept ECDSA signatures from sources that do not obey this + * rule, apply secp256k1_ecdsa_signature_normalize to the signature prior to + * validation, but be aware that doing so results in malleable signatures. + * + * For details, see the comments for that function. + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_verify( + const secp256k1_context* ctx, + const secp256k1_ecdsa_signature *sig, + const unsigned char *msg32, + const secp256k1_pubkey *pubkey +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); + +/** Convert a signature to a normalized lower-S form. + * + * Returns: 1 if sigin was not normalized, 0 if it already was. + * Args: ctx: a secp256k1 context object + * Out: sigout: a pointer to a signature to fill with the normalized form, + * or copy if the input was already normalized. (can be NULL if + * you're only interested in whether the input was already + * normalized). + * In: sigin: a pointer to a signature to check/normalize (cannot be NULL, + * can be identical to sigout) + * + * With ECDSA a third-party can forge a second distinct signature of the same + * message, given a single initial signature, but without knowing the key. This + * is done by negating the S value modulo the order of the curve, 'flipping' + * the sign of the random point R which is not included in the signature. + * + * Forgery of the same message isn't universally problematic, but in systems + * where message malleability or uniqueness of signatures is important this can + * cause issues. This forgery can be blocked by all verifiers forcing signers + * to use a normalized form. + * + * The lower-S form reduces the size of signatures slightly on average when + * variable length encodings (such as DER) are used and is cheap to verify, + * making it a good choice. Security of always using lower-S is assured because + * anyone can trivially modify a signature after the fact to enforce this + * property anyway. + * + * The lower S value is always between 0x1 and + * 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, + * inclusive. + * + * No other forms of ECDSA malleability are known and none seem likely, but + * there is no formal proof that ECDSA, even with this additional restriction, + * is free of other malleability. Commonly used serialization schemes will also + * accept various non-unique encodings, so care should be taken when this + * property is required for an application. + * + * The secp256k1_ecdsa_sign function will by default create signatures in the + * lower-S form, and secp256k1_ecdsa_verify will not accept others. In case + * signatures come from a system that cannot enforce this property, + * secp256k1_ecdsa_signature_normalize must be called before verification. + */ +SECP256K1_API int secp256k1_ecdsa_signature_normalize( + const secp256k1_context* ctx, + secp256k1_ecdsa_signature *sigout, + const secp256k1_ecdsa_signature *sigin +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(3); + +/** An implementation of RFC6979 (using HMAC-SHA256) as nonce generation function. + * If a data pointer is passed, it is assumed to be a pointer to 32 bytes of + * extra entropy. + */ +SECP256K1_API extern const secp256k1_nonce_function secp256k1_nonce_function_rfc6979; + +/** A default safe nonce generation function (currently equal to secp256k1_nonce_function_rfc6979). */ +SECP256K1_API extern const secp256k1_nonce_function secp256k1_nonce_function_default; + +/** Create an ECDSA signature. + * + * Returns: 1: signature created + * 0: the nonce generation function failed, or the private key was invalid. + * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL) + * Out: sig: pointer to an array where the signature will be placed (cannot be NULL) + * In: msg32: the 32-byte message hash being signed (cannot be NULL) + * seckey: pointer to a 32-byte secret key (cannot be NULL) + * noncefp:pointer to a nonce generation function. If NULL, secp256k1_nonce_function_default is used + * ndata: pointer to arbitrary data used by the nonce generation function (can be NULL) + * + * The created signature is always in lower-S form. See + * secp256k1_ecdsa_signature_normalize for more details. + */ +SECP256K1_API int secp256k1_ecdsa_sign( + const secp256k1_context* ctx, + secp256k1_ecdsa_signature *sig, + const unsigned char *msg32, + const unsigned char *seckey, + secp256k1_nonce_function noncefp, + const void *ndata +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); + +/** Verify an ECDSA secret key. + * + * Returns: 1: secret key is valid + * 0: secret key is invalid + * Args: ctx: pointer to a context object (cannot be NULL) + * In: seckey: pointer to a 32-byte secret key (cannot be NULL) + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify( + const secp256k1_context* ctx, + const unsigned char *seckey +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2); + +/** Compute the public key for a secret key. + * + * Returns: 1: secret was valid, public key stores + * 0: secret was invalid, try again + * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL) + * Out: pubkey: pointer to the created public key (cannot be NULL) + * In: seckey: pointer to a 32-byte private key (cannot be NULL) + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create( + const secp256k1_context* ctx, + secp256k1_pubkey *pubkey, + const unsigned char *seckey +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Negates a private key in place. + * + * Returns: 1 always + * Args: ctx: pointer to a context object + * In/Out: seckey: pointer to the 32-byte private key to be negated (cannot be NULL) + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_negate( + const secp256k1_context* ctx, + unsigned char *seckey +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2); + +/** Negates a public key in place. + * + * Returns: 1 always + * Args: ctx: pointer to a context object + * In/Out: pubkey: pointer to the public key to be negated (cannot be NULL) + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_negate( + const secp256k1_context* ctx, + secp256k1_pubkey *pubkey +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2); + +/** Tweak a private key by adding tweak to it. + * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for + * uniformly random 32-byte arrays, or if the resulting private key + * would be invalid (only when the tweak is the complement of the + * private key). 1 otherwise. + * Args: ctx: pointer to a context object (cannot be NULL). + * In/Out: seckey: pointer to a 32-byte private key. + * In: tweak: pointer to a 32-byte tweak. + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_add( + const secp256k1_context* ctx, + unsigned char *seckey, + const unsigned char *tweak +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Tweak a public key by adding tweak times the generator to it. + * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for + * uniformly random 32-byte arrays, or if the resulting public key + * would be invalid (only when the tweak is the complement of the + * corresponding private key). 1 otherwise. + * Args: ctx: pointer to a context object initialized for validation + * (cannot be NULL). + * In/Out: pubkey: pointer to a public key object. + * In: tweak: pointer to a 32-byte tweak. + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_add( + const secp256k1_context* ctx, + secp256k1_pubkey *pubkey, + const unsigned char *tweak +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Tweak a private key by multiplying it by a tweak. + * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for + * uniformly random 32-byte arrays, or equal to zero. 1 otherwise. + * Args: ctx: pointer to a context object (cannot be NULL). + * In/Out: seckey: pointer to a 32-byte private key. + * In: tweak: pointer to a 32-byte tweak. + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_privkey_tweak_mul( + const secp256k1_context* ctx, + unsigned char *seckey, + const unsigned char *tweak +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Tweak a public key by multiplying it by a tweak value. + * Returns: 0 if the tweak was out of range (chance of around 1 in 2^128 for + * uniformly random 32-byte arrays, or equal to zero. 1 otherwise. + * Args: ctx: pointer to a context object initialized for validation + * (cannot be NULL). + * In/Out: pubkey: pointer to a public key object. + * In: tweak: pointer to a 32-byte tweak. + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_tweak_mul( + const secp256k1_context* ctx, + secp256k1_pubkey *pubkey, + const unsigned char *tweak +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Updates the context randomization to protect against side-channel leakage. + * Returns: 1: randomization successfully updated or nothing to randomize + * 0: error + * Args: ctx: pointer to a context object (cannot be NULL) + * In: seed32: pointer to a 32-byte random seed (NULL resets to initial state) + * + * While secp256k1 code is written to be constant-time no matter what secret + * values are, it's possible that a future compiler may output code which isn't, + * and also that the CPU may not emit the same radio frequencies or draw the same + * amount power for all values. + * + * This function provides a seed which is combined into the blinding value: that + * blinding value is added before each multiplication (and removed afterwards) so + * that it does not affect function results, but shields against attacks which + * rely on any input-dependent behaviour. + * + * This function has currently an effect only on contexts initialized for signing + * because randomization is currently used only for signing. However, this is not + * guaranteed and may change in the future. It is safe to call this function on + * contexts not initialized for signing; then it will have no effect and return 1. + * + * You should call this after secp256k1_context_create or + * secp256k1_context_clone (and secp256k1_context_preallocated_create or + * secp256k1_context_clone, resp.), and you may call this repeatedly afterwards. + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_context_randomize( + secp256k1_context* ctx, + const unsigned char *seed32 +) SECP256K1_ARG_NONNULL(1); + +/** Add a number of public keys together. + * Returns: 1: the sum of the public keys is valid. + * 0: the sum of the public keys is not valid. + * Args: ctx: pointer to a context object + * Out: out: pointer to a public key object for placing the resulting public key + * (cannot be NULL) + * In: ins: pointer to array of pointers to public keys (cannot be NULL) + * n: the number of public keys to add together (must be at least 1) + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_combine( + const secp256k1_context* ctx, + secp256k1_pubkey *out, + const secp256k1_pubkey * const * ins, + size_t n +) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +#ifdef __cplusplus +} +#endif + +#endif /* SECP256K1_H */ diff --git a/example/android/third_party/secp256k1/include/secp256k1_ecdh.h b/example/android/third_party/secp256k1/include/secp256k1_ecdh.h new file mode 100644 index 00000000..df5fde23 --- /dev/null +++ b/example/android/third_party/secp256k1/include/secp256k1_ecdh.h @@ -0,0 +1,55 @@ +#ifndef SECP256K1_ECDH_H +#define SECP256K1_ECDH_H + +#include "secp256k1.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** A pointer to a function that applies hash function to a point + * + * Returns: 1 if a point was successfully hashed. 0 will cause ecdh to fail + * Out: output: pointer to an array to be filled by the function + * In: x: pointer to a 32-byte x coordinate + * y: pointer to a 32-byte y coordinate + * data: Arbitrary data pointer that is passed through + */ +typedef int (*secp256k1_ecdh_hash_function)( + unsigned char *output, + const unsigned char *x, + const unsigned char *y, + void *data +); + +/** An implementation of SHA256 hash function that applies to compressed public key. */ +SECP256K1_API extern const secp256k1_ecdh_hash_function secp256k1_ecdh_hash_function_sha256; + +/** A default ecdh hash function (currently equal to secp256k1_ecdh_hash_function_sha256). */ +SECP256K1_API extern const secp256k1_ecdh_hash_function secp256k1_ecdh_hash_function_default; + +/** Compute an EC Diffie-Hellman secret in constant time + * Returns: 1: exponentiation was successful + * 0: scalar was invalid (zero or overflow) + * Args: ctx: pointer to a context object (cannot be NULL) + * Out: output: pointer to an array to be filled by the function + * In: pubkey: a pointer to a secp256k1_pubkey containing an + * initialized public key + * privkey: a 32-byte scalar with which to multiply the point + * hashfp: pointer to a hash function. If NULL, secp256k1_ecdh_hash_function_sha256 is used + * data: Arbitrary data pointer that is passed through + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdh( + const secp256k1_context* ctx, + unsigned char *output, + const secp256k1_pubkey *pubkey, + const unsigned char *privkey, + secp256k1_ecdh_hash_function hashfp, + void *data +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); + +#ifdef __cplusplus +} +#endif + +#endif /* SECP256K1_ECDH_H */ diff --git a/example/android/third_party/secp256k1/include/secp256k1_preallocated.h b/example/android/third_party/secp256k1/include/secp256k1_preallocated.h new file mode 100644 index 00000000..a9ae15d5 --- /dev/null +++ b/example/android/third_party/secp256k1/include/secp256k1_preallocated.h @@ -0,0 +1,128 @@ +#ifndef SECP256K1_PREALLOCATED_H +#define SECP256K1_PREALLOCATED_H + +#include "secp256k1.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* The module provided by this header file is intended for settings in which it + * is not possible or desirable to rely on dynamic memory allocation. It provides + * functions for creating, cloning, and destroying secp256k1 context objects in a + * contiguous fixed-size block of memory provided by the caller. + * + * Context objects created by functions in this module can be used like contexts + * objects created by functions in secp256k1.h, i.e., they can be passed to any + * API function that expects a context object (see secp256k1.h for details). The + * only exception is that context objects created by functions in this module + * must be destroyed using secp256k1_context_preallocated_destroy (in this + * module) instead of secp256k1_context_destroy (in secp256k1.h). + * + * It is guaranteed that functions in this module will not call malloc or its + * friends realloc, calloc, and free. + */ + +/** Determine the memory size of a secp256k1 context object to be created in + * caller-provided memory. + * + * The purpose of this function is to determine how much memory must be provided + * to secp256k1_context_preallocated_create. + * + * Returns: the required size of the caller-provided memory block + * In: flags: which parts of the context to initialize. + */ +SECP256K1_API size_t secp256k1_context_preallocated_size( + unsigned int flags +) SECP256K1_WARN_UNUSED_RESULT; + +/** Create a secp256k1 context object in caller-provided memory. + * + * The caller must provide a pointer to a rewritable contiguous block of memory + * of size at least secp256k1_context_preallocated_size(flags) bytes, suitably + * aligned to hold an object of any type. + * + * The block of memory is exclusively owned by the created context object during + * the lifetime of this context object, which begins with the call to this + * function and ends when a call to secp256k1_context_preallocated_destroy + * (which destroys the context object again) returns. During the lifetime of the + * context object, the caller is obligated not to access this block of memory, + * i.e., the caller may not read or write the memory, e.g., by copying the memory + * contents to a different location or trying to create a second context object + * in the memory. In simpler words, the prealloc pointer (or any pointer derived + * from it) should not be used during the lifetime of the context object. + * + * Returns: a newly created context object. + * In: prealloc: a pointer to a rewritable contiguous block of memory of + * size at least secp256k1_context_preallocated_size(flags) + * bytes, as detailed above (cannot be NULL) + * flags: which parts of the context to initialize. + * + * See also secp256k1_context_randomize (in secp256k1.h) + * and secp256k1_context_preallocated_destroy. + */ +SECP256K1_API secp256k1_context* secp256k1_context_preallocated_create( + void* prealloc, + unsigned int flags +) SECP256K1_ARG_NONNULL(1) SECP256K1_WARN_UNUSED_RESULT; + +/** Determine the memory size of a secp256k1 context object to be copied into + * caller-provided memory. + * + * Returns: the required size of the caller-provided memory block. + * In: ctx: an existing context to copy (cannot be NULL) + */ +SECP256K1_API size_t secp256k1_context_preallocated_clone_size( + const secp256k1_context* ctx +) SECP256K1_ARG_NONNULL(1) SECP256K1_WARN_UNUSED_RESULT; + +/** Copy a secp256k1 context object into caller-provided memory. + * + * The caller must provide a pointer to a rewritable contiguous block of memory + * of size at least secp256k1_context_preallocated_size(flags) bytes, suitably + * aligned to hold an object of any type. + * + * The block of memory is exclusively owned by the created context object during + * the lifetime of this context object, see the description of + * secp256k1_context_preallocated_create for details. + * + * Returns: a newly created context object. + * Args: ctx: an existing context to copy (cannot be NULL) + * In: prealloc: a pointer to a rewritable contiguous block of memory of + * size at least secp256k1_context_preallocated_size(flags) + * bytes, as detailed above (cannot be NULL) + */ +SECP256K1_API secp256k1_context* secp256k1_context_preallocated_clone( + const secp256k1_context* ctx, + void* prealloc +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_WARN_UNUSED_RESULT; + +/** Destroy a secp256k1 context object that has been created in + * caller-provided memory. + * + * The context pointer may not be used afterwards. + * + * The context to destroy must have been created using + * secp256k1_context_preallocated_create or secp256k1_context_preallocated_clone. + * If the context has instead been created using secp256k1_context_create or + * secp256k1_context_clone, the behaviour is undefined. In that case, + * secp256k1_context_destroy must be used instead. + * + * If required, it is the responsibility of the caller to deallocate the block + * of memory properly after this function returns, e.g., by calling free on the + * preallocated pointer given to secp256k1_context_preallocated_create or + * secp256k1_context_preallocated_clone. + * + * Args: ctx: an existing context to destroy, constructed using + * secp256k1_context_preallocated_create or + * secp256k1_context_preallocated_clone (cannot be NULL) + */ +SECP256K1_API void secp256k1_context_preallocated_destroy( + secp256k1_context* ctx +); + +#ifdef __cplusplus +} +#endif + +#endif /* SECP256K1_PREALLOCATED_H */ diff --git a/example/android/third_party/secp256k1/include/secp256k1_recovery.h b/example/android/third_party/secp256k1/include/secp256k1_recovery.h new file mode 100644 index 00000000..cf6c5ed7 --- /dev/null +++ b/example/android/third_party/secp256k1/include/secp256k1_recovery.h @@ -0,0 +1,110 @@ +#ifndef SECP256K1_RECOVERY_H +#define SECP256K1_RECOVERY_H + +#include "secp256k1.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** Opaque data structured that holds a parsed ECDSA signature, + * supporting pubkey recovery. + * + * The exact representation of data inside is implementation defined and not + * guaranteed to be portable between different platforms or versions. It is + * however guaranteed to be 65 bytes in size, and can be safely copied/moved. + * If you need to convert to a format suitable for storage or transmission, use + * the secp256k1_ecdsa_signature_serialize_* and + * secp256k1_ecdsa_signature_parse_* functions. + * + * Furthermore, it is guaranteed that identical signatures (including their + * recoverability) will have identical representation, so they can be + * memcmp'ed. + */ +typedef struct { + unsigned char data[65]; +} secp256k1_ecdsa_recoverable_signature; + +/** Parse a compact ECDSA signature (64 bytes + recovery id). + * + * Returns: 1 when the signature could be parsed, 0 otherwise + * Args: ctx: a secp256k1 context object + * Out: sig: a pointer to a signature object + * In: input64: a pointer to a 64-byte compact signature + * recid: the recovery id (0, 1, 2 or 3) + */ +SECP256K1_API int secp256k1_ecdsa_recoverable_signature_parse_compact( + const secp256k1_context* ctx, + secp256k1_ecdsa_recoverable_signature* sig, + const unsigned char *input64, + int recid +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Convert a recoverable signature into a normal signature. + * + * Returns: 1 + * Out: sig: a pointer to a normal signature (cannot be NULL). + * In: sigin: a pointer to a recoverable signature (cannot be NULL). + */ +SECP256K1_API int secp256k1_ecdsa_recoverable_signature_convert( + const secp256k1_context* ctx, + secp256k1_ecdsa_signature* sig, + const secp256k1_ecdsa_recoverable_signature* sigin +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3); + +/** Serialize an ECDSA signature in compact format (64 bytes + recovery id). + * + * Returns: 1 + * Args: ctx: a secp256k1 context object + * Out: output64: a pointer to a 64-byte array of the compact signature (cannot be NULL) + * recid: a pointer to an integer to hold the recovery id (can be NULL). + * In: sig: a pointer to an initialized signature object (cannot be NULL) + */ +SECP256K1_API int secp256k1_ecdsa_recoverable_signature_serialize_compact( + const secp256k1_context* ctx, + unsigned char *output64, + int *recid, + const secp256k1_ecdsa_recoverable_signature* sig +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); + +/** Create a recoverable ECDSA signature. + * + * Returns: 1: signature created + * 0: the nonce generation function failed, or the private key was invalid. + * Args: ctx: pointer to a context object, initialized for signing (cannot be NULL) + * Out: sig: pointer to an array where the signature will be placed (cannot be NULL) + * In: msg32: the 32-byte message hash being signed (cannot be NULL) + * seckey: pointer to a 32-byte secret key (cannot be NULL) + * noncefp:pointer to a nonce generation function. If NULL, secp256k1_nonce_function_default is used + * ndata: pointer to arbitrary data used by the nonce generation function (can be NULL) + */ +SECP256K1_API int secp256k1_ecdsa_sign_recoverable( + const secp256k1_context* ctx, + secp256k1_ecdsa_recoverable_signature *sig, + const unsigned char *msg32, + const unsigned char *seckey, + secp256k1_nonce_function noncefp, + const void *ndata +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); + +/** Recover an ECDSA public key from a signature. + * + * Returns: 1: public key successfully recovered (which guarantees a correct signature). + * 0: otherwise. + * Args: ctx: pointer to a context object, initialized for verification (cannot be NULL) + * Out: pubkey: pointer to the recovered public key (cannot be NULL) + * In: sig: pointer to initialized signature that supports pubkey recovery (cannot be NULL) + * msg32: the 32-byte message hash assumed to be signed (cannot be NULL) + */ +SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ecdsa_recover( + const secp256k1_context* ctx, + secp256k1_pubkey *pubkey, + const secp256k1_ecdsa_recoverable_signature *sig, + const unsigned char *msg32 +) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4); + +#ifdef __cplusplus +} +#endif + +#endif /* SECP256K1_RECOVERY_H */ diff --git a/example/android/third_party/secp256k1/libsecp256k1.a b/example/android/third_party/secp256k1/libsecp256k1.a new file mode 100644 index 0000000000000000000000000000000000000000..0b3daaab76d1ed1d64a95f9ad42489a32ccde1df GIT binary patch literal 698458 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 z zKkcK<-gtW+yVNDvjsy2r$%tQTTj2V`qw~Y_;84}~K@vS9Bb~-ncM39aie`-$*2 zaqXdSjwB2V&!m971PKKg#u3FNgt$RiVa`y5q>wm_@BlA-z*@vL*gvz-J4{@Y4R!(1 zd*V7Y1As*gnD`VNAO=ia7YD@fP8Oev1F{4#4F{A7Ko18d5r94p=n{Yd4j2-EAr6=k zfDsPZ62MFxm`?!4B79&1dJ=$%kT3w25P%t8>mUL!$AK^cu;3gAnh;3<)&gHZXC@H9 z9Ns|yBoTlOy9A)NiU90*Cjej_0XTDO00J2Vus~D`q--MqSMlip*i8U#cy)>iz?}xC zLpcF>aKMRvf&e`6y44bZ7yB$gppFc-;jb_!NEe3D%5Xqot(4#t z0Ff*pOyH;wg{FcKj_ANZ6hwsK&>F%Bd|FCo^1!ebAGbgX_|;w5i0=*%CyT#eTM%J$Pyq!98^V_`%qaEcldDf~EK zj3`6umH-LwAU2{PDFGHv5TyX)wUni~g21nKAR^7j14E#*AQL2jAfAbp$RsVy;tHY^ zV7!*BwBlay3o|M4zz{vtF%ZNvvCuOqvt)uO1sJa-JBIr{_|;y7jNzeY!rMKDm!%#e z!9=b3GCZPy-L)eT8D0Tc7NQ-6$nfDoWxQ=NMB8kM5@ZBex?yIRNh?7{%!8g;d^ocN zky(2sA|r_h2_}+}!uu$aPDh$W8Dv#}`LzsX(o8!oGxKstFGL_}Die$Zl<<^2ef@Yc!lOCh+_Q-+jb za0wy|Q}M2n6=r!1!U|9q`GI6aR#ccUsMrx<*nh&XAN*koA1l{cl-&;?T0!tKN`qm< z0RmT0yy*xl4mF^-nqg-}l;I4D0%&+G2ay1XEX#ERWv^n;X+(u;ARWh*A;?WsunvUT z@d9q4f+_&ua|{Yano*U@AS{L`Kw`qMPle%F3QvL{EJXMen3oDo5afq1*fqkP07a`< zPDlzUSG+Uidh%!_ZFrGesI9$Mh zd5N;*`B|Jmlvbm>=q>O|P!JP=XbeCa0!!%V;w)tl-B@0Rg9b_uN91J%VF=L$BKn#w{YKV00>dLS^V))K=pbMJzf zYLpc51Vq%3BD9Rgit%yKdvC0`APj@bLNh}a1o2)lBzj@21WO-io&t=Y2eHN(!ii=J zKv^iei5Jv4$Sn9$l%nuJ5$+2S@aScDvUiku7t+ya9Y zlZEvm8qMYg!zK`CKBR=#bT0_aM*<;|;#>;%G#KFDkKwss7(BJ0C*XtT-sD9P3Gc8- zfT06THO4ar2Ke_|!*s?&k4tL)Ic^WE9pm8*M)(g1K+(jK*%rqeg76>2d6^}%HkLOO zK;n?IL0T;DGK9aBo|X`Y4+}rIKZrpH{L(Jp8HONdF+cp}m=PCf$2}4jLe0acB!LMS z89e;QFkx51t`Rs1bevbQ`0NuEpet|w zG*M_7uw-V$6GCw#z5r%amZk+p?B_>}9>t#}GZ##LbT%1_X|z{@%;0x02p?c&{<=(Fg;@a(`TKNNV}<_--8ESM zAJJvvBv~NuhPf27p4|w-6h0H6dRWOoB_G62UAV66*pFv#o1$m`An#JM{zTxXMI zr4+sX{GPNR5d;yy8J|f=49itu1K#UG5t!%PF@l=mb+|sBtmtiW>=hCK)@)C-hO0?0B^2WU$_1rrlTyBs(RxS#C#)XE4{*UKMhs0FUl7p? z>I!ExS)~BkKBO5Q0vwo5SQv4T5Ve2GaG^x6@rPl_usVVy{f5#=0A2%DX;KX9coHB& zo)Uy6VM)_q9^fDPfnM+mj2A5P1zL;1BW8 z>k*E{0eysKkW$dqWFU$R1d@S;B!C#HTo40B$`>mk0v^~gJW#t3J4eJsuwDlN#-k{A zn-K(#Pdvz#K*0nYK{OgkN<){DfrVtioDArb0d*2U)NeJ20Sg0HEE5l8EWmQ{K*Dm? z5)v|NB^fwN2CkEV`y_yiJQMhaS_Skw(X7`fH@E@m2j1s8HZX)aLV)WvI{6OFbb*Y< z{xctPDNtyfk^u47%*b92cXa3v5#lnYU|V3WGo&Qyd=d*2Gn(@P76{RNNGSwgEGNZ) zjU+}^&Wo4;L>>tVnedg~Yj!~Lv-Xj@@X1|91dsHATBcstr-@iOG-l3$bdWv zz`I6zHi(h7gD*Gu@&m6S0hZ{F3oyV=?tp=bAGnSJj?4^_D5npl2Zdi;8kByNoK!*v zc98&t{pYTR-FqC8_}%VZ4Kw}S?j<*n-o2o9eZSGbAzcyP1>AmMrU6;W+?7xcfCU0D zB^C^KI?MZCW5T}Y5+U^>Q8PGI73lMoD}X{f3kpN0kZd5zS!D>~RK58b_eoCXK%XW()^{PBH=kbjC2g(=rs11%iD@MF5YP%Ma+< z!|1s_C}KrNClp3JQHcb%Ne+O+P~G7^x&)*JAdBka)3SCUy|Q>;CisH27PKtkL!FNO z$d3FGSgIT#=R`_DElB_&r#(On7_H@)KM{zay(4k#Fj0n_<&4C}$^x<+q|QYLNm+(^ zTA$w2uz9ct!D4XaA!XQXoKe^&Ncs;)lrT^55yiXZpGsSaA+Ue`ury-mhRpk4wM`H- z8$O)TSkRxB#*$e~NGA9L-8UrRb#xl@ga&C;vaTb>gFlk{C@h~zy$x}$EwHn0fn+#^ zabFUXe_#*{^*eeh^dA8UnGrucq1nMC6_=+obL|2+*tnMoD?pt!B!=O%kDgz?EaM6s9vCz`(#dx7bB?dqa1T zC4FhKJ03cwwNiHjK5D;lu<>(2Mdq;5ImvJ#1qRf0uRkKR%Y;o{#-Io z5c6N(AMS-Q9(r8V_2Dr>2;R{z{gF=$7;aVINJaP!7;e@0k(k05t5XDx{cpBu)O5!pN)Nm74Rdapl&1pValY0=jJ!TCW6ra$i%cuGF;}+v^2!l zLIQt%S{h-G{u8=0F&!`uf4{!W)18>GY&?if5G$`7WXF4&172|&1Xi(ht z^QMC0Ub1e18bOKStim;d5`Cucjwdz%l$lflr~=R`-}xK))_G zkk*pfFa*3-5P26q--(=D+~_ly6F)k@We2$k=HyzUNYBX?3qwRst~F3k5T$UP#P!2u zNOB8>%s~poECU|vjhYA|1u0XvP^OU?6gV`1O}d3*M?RLoh>V8W7>`sS#7o1CF?!rM zKZLrKf}ikVU>SSv^|2%<{vZoGx~3qK?VyXZa_%GA+JLqP6z)sas@3=w*P{k{kU zE)nv&j+hO@l?2r*q|kEU%wSsNv4@k^{PZbQM8R@30Ad@<}*d9Cp zrp?d30nR0u7Vy^mhCcvbLgI%-{%M8ohwXu+|8Rv)Y)23)bjT3@RGL4=2m9m?OC!7w z_{KR{-Ttz)A%8#smhk7Lv1GP@LmOZn4u9-$-^!5N<fV!}g4-V1ASuq8( z0pfi0Cx1Y7XwrZN^NEfjy!;Zp`oJ~hgr6b7T|kJiC&-W2F^s8>|d0|&>{a&njoXJ0L%&Y`k$%LACwy0 z*%*==45dcsblA1SX=Yn-g$G256ZAb33Ln0~hEsVA*d&4T9b_0u3$CJYJ5B{P9`*Uz z^0;4UK_F%E2WY`5km4U|K~QC=*@;60>_00(C}8p-{ohu6OvLCyD4K%3`D?^tD3~4) z)4yM{Aq5B5$_oLBp|vtRW&!3N6ud*;WCYsiYv@?Sd?2i@&>v5*;u^)BNu!w2Wf+=! z(14*)+$jb>YZP~i9ochAs6uy2AX%dj%E5!7LTcj#;gM6SCnKUQj?gI!N75-?44ra1 zZY1^KPr>5!Kxd9pJ#b0p(B~i14?~$#{U~BMc zM`0|1ey|R4#xP-G47njwi_Mt97$zf`S|%fzS|&f6THybn65onp*Z0>khCh-N)EmTJex9ChjB9N4XdXa&-B!Dor zR)QEP&apLkpfQH&Bp@;Hf-|x8GXUMuSwn>I`Uh)>MmE%jIhlU26cL<-U4bS3+GwNw zZ!d$O3GF*1z~p40j$neBW6zBM-rq67wiyCaqc_0_neb~9tPhg=Gc$$QyC(Q?q7GV%bitMDaJUx*DO?g`1}%8eL8l z?n{uF{;JV+5K{a@qYJOMBXO37$xI^HhYBQ(@GL<7x77v{F@k%k))dU^uMwL=!OH%K z7?a+)14#U=cYd_FzS6M>rGg(?qKs^FsWYjTTDlNIbC;PiREzpZHkbNHHkbNHHrFJE zE=h)=9)Z`a?xZcm;MoLE`18t3zXkz^#s=@lE?>KLw|~haYm?m6fqMM zK(360h8B_E7j_mYhIJ1Kpgtx6EO_-;+=NHS%x=Ho z&Jn^31;S68g5|;f`E5@8Cj(B0f_?cT!c2@b22Aju8L9sV1I~zyHL?NcK}R8YEo{V< zjVu$FtsmmDGD`-R$x^2Nyt0v{*phu^1iQ#FvkUZ<$ukVNwm7C;D7s8kq;S482P46> z1;VsBLf#J<+J)i+dFZ=P;8RrcE)<<^JME?!AUnE~v4jH-?n3Q?nf|+7C@MYy|NSnM zCG4_4+=T+$yhJVj?Jm?1p+DP&Vp^`!M@@->sab%gjn>3IMA~a2IEXr)Ld%CFE|8MY zQzSryd{h~iF$m{EY_!L)N3=vHP-td=TSjk*{Oa@R36RPkS|2RL=hN`3doaGg5L82B zHWv7QU}3*40hu=l@Fk!ilLRp%R0P<`H??L+5W$gl@&ze#$i5Lm0}C-Ua7H{k`QsnD z)gw;9)>wgR|CO(Q=(_CZuYcId2e{}{Q-Xq>f+hd@1lKRRd`RhtP%t6TBfsC}#LNbR z3YYCu0f`~qz?%6b4t_fe4!VypF8$zK?C@hqGz5&xaeKzN^rIt4_I{K}vJ*b5esmex zXC)W}&Q1)V^s^JdWd$Vtca(AMLo6|tgD8Dhq%nqAyCV$4se!&tf->t1uAh%w!1^=% z!c8qgO-eY*Ms5FXrCCtR+!WwCFoQpy$wFQWO zXW?pR14xa2;Yuv`e!Xx#0?Ga1Qj)PKhTeQAYW{gcTn_fbAC^Y!g5W2?|5s^@Il>u$ zW&U|-;Ddc)Lmd9t;mdNmG((UP7O^931#nYn4tAiqqh6JQ-J+j2#DV)?2U7V%U4ZXi zfPMWoxD02KOLQRsqKD)X3k5p}%ld6qz(jZiD;w|^21L!@CrqVa?tes>Ns_JxB!(pE z&=x@hX^X(?Ft`eljuj5?D!`pKU>^Z&1dSkX-!jSD47%_@b9)^a^7idW^7bw2z$996 z?|%;=JHaOfYWRloJK`EI4M>#QO8_jHr{n)gTzy8xeL(Td;_9CU?gNTd!%V+DBbfTP z1CSv1uOq$%b2@&ct~<-rbw`I(m60=}>&~K@KQBVgq7LMbH3(I877Zo$CnGX_q{wpe z)gTPa3*@^&1Va$&Iff$Z0h$ehjAQKdt(xjlQR(ys(jn~NYs$}M#0P7tuX1XG|1Wx5pP7t=tDPM+F|$}DyIaT+j< zRt88O8ZBa;gEi$3w}M=vBN6I_5Xw*;{KKsvZih(S0k!PSzQO zQyzXF696fUQfVlXNzkp_-}xqnNs0{X6^3A>g5GDH532LqQiO@{aAyxGtV<~7_MZ^G zjAE7l3E?X!#tS6b?{@_gi)sQA!z>E=scN=Vx#3I zgsD2*c)h5HP*(E=f1x_W>Vx__)!`!d&M*^=qjwm!9A)qL8&xCh z;Z*RUxE{ztVVC{ETEg$cghPwphq)XX54()I10BN>3L^R7t)>9dgRDJ;o-_xhFaR%T z+wd**0Y=IWbOp|G!tgyAB5z=l8uYyc;4tuB$gsjTpxR_BObUKGLfwEafEbL2VEYZ| zik}6<26PKNN6L5vgAr=Vkk=p%np&w0Qz`-2RuE)-M-?Zy456kmQfuRwPEZc@B!eaRiDIk&6T+KN?BO2~9-5}mk%t17fearC-tZfCctVYQ=^{LzHja)%-YX>wj_dgd z;>3hQSOrkT*n^E|xPKn{JPC91*&Ps#i{)9Q{H3Iz2 zlzpW8T1R5ac$AaJ8x;L}Oi5lRfKj7AO7vgqYLxaE68(cU1F>9!Ylb{X;a~K~Z><@A z_UXg6v@#l$gmQa;$@gpj{wOc@B2@p+7kmBF(jo@MPQdbiTgow3J;ZktxHk1?;w}S1 zxC3oE)0e?r{;0*z+~tqDlMQo1#rmV`f8?$J26y$~nlgaFU0~y61V#!*F_FcfVSkU2 zntlG=wE2;d{?|1VOdB$EUJgMqE7+o6Z^$s^;>V{LH5A2?{&%i_nj(QH)(R>7_7wRi z!pl)i3rvmQCp^O3b7z`+K?FO1xhEFDn0xN1$LVL~oOv7#lQwSR9y`a*L5LXQ2`gsj-d=nr6i<3Xw~$~EW* zs?bSFLR-ne4Ki?^1mM;g_722=wQfB24G)yZvtmWVrLgjm0ZB5TL;^{O% zvBUof;YBFM0l4S)Ys}2m!up^aaJ6F2#M-iSs{mZ)zl_1!=FF^3FswPc_-CWd98DlE z(xB01!Qf)TXtQ8&G2=v>C9~0{0f&cb#c*7Yd?L;nrLisreK5*ZGn03eXdiVRO1lh6 z{3}amJ)|&7E?{y8(QUuqvUGm_=mvJx&`h>LF?ldzzdtXSSY+5H93pIsV$pv@c!+D^ z>Ld@480Jm5{=h#JW5PMlj3Z0OVV=17oSn)vXNONBK=YRP9&;-5LW7vIQ%728OhseJ zbC%FiQ_&5OK^PC5$kP}TIRjsPOk+&s@_2S*lDwo3tszQ_Sq_FHf|P^?kO5CJ;6ws& z;mx{=6vLWM0;rB9jA{Y;c#vl|O$!zlOHK(U13n~xpue6J!@89Oko-uwpjc->7z`Y| zTW$C=Hn5R1By}MYj!@2w0KRM^JHP1tVvN#iU{(Kwb?GFGP}=GsK;jQrm+lY&ixgu> z;r}k{3e$&?Y5>;%usVNB2@MgRj$%51BYvMSGs}&K6{V`9+$glW_;4ScI%*2VKObNW zb#xKD*M$$*XzFM@4AQ-bav;Ysm;=9kMGl<}4Mdnj4t0h1xxgH9XfP3kjz2kcD{chh zJkG(yfT0;39}F?uy6wa*3b@Y~UPn68 z8CWrt_6FERzk3E&2;><)154h_qvA~k$4plO=g(-lMudEdmcFCdP8;P3TEce^Ptdl( zBLC_MT5u~5>2?*mNO*zSz%KiL{S55s9LB5!LYWvfag_Jg3UJT(JCKAvBc-GF$iOuc zK#L}I(D3AioDCnri2{CrBAQCV8s2=6c0iFtkPNjw*|!MebLjE$BqdV|u2MTrk0&nq z1i6MLJWL(78$dp0lYZD<5yqER)5Ur{^!bM7!rNi+i}k4AbjhxTF+?sK^5+8dIHrwd zdfZB~A;$~kc|ZMFX+r!+1`2{=o{^x>MkkmN_U|OVp>rGsyCC>Kcu{~PH@LZ$@t`bZ;43K)LM3xE zfiEbfI$r;4FylrLxM7Vhd>R{wInPo69Dj7Ahr_^WW-6AfB-xBJ|;rI za!x?8i?GO1pE-qO;Z8ml0{y2ef(GLwQ2=K~d){xpL?~JFCn?a~(UIi=(QuuW%hD7;epe~>&2cnK7;1hsa zz?TmhKRAD9S_ z14BYoDUan;r{F`dbT(A-X7vW&aUjW<4MShl~1}8-;t6Vg#TK#XGmJ4~Vyf|13zC2doy} zj=}%4Eix9zxzFVYeo+lDaqz1nsrU7up1?ERp93=ywC?*uJKt0S;6Wmf2_m{Y;7Z62 z5%|Ald7?l_9EK1Ce6WQeci;;?M#K;Bbjt!ML};TsKmR{D>K!+j&UjQ^wlRXFnU3hw zBdK>WG?ava`jUWOT)~UC1mqVO!%YJv{dy?DLXvpEJSP96LTg4m{HLXmci=7O;4-cw z;57}VQ5z-5ZCDKBz=P&~OJKCTk?De4Lccb;{~zYQ15S!!`G012dbwpUaVLlfN)i=G z2MA)$fDw*61q2DAhzcS{&Zy4_%88=l38FzPvBJ3t}t*j6Lbl=E#Z?vFpwH4sj>ag1ZY3V&+!M!J~ zKy1t)Y5jpgQ$Z}*6x^7asyplRx8m%q)dC0=gaQ*An+&Ryb=ko{K_o_8JV-j}p zJbw&-x?E#R89zVE-of0#UWp6}W>=jg_JTTyl-ST$%(AS$q$xG;aZSY;u03weDd!t` zA3roz-p7wimG|*Eb&>ap`pCP+$a}CaZ_5jeylcAI^2R8_JfgSQL-B?Hx*e^U4C-y7 zQ^r>3C~letpwe-$JOg9>Ys}prB1kLxSJARG3M+Q9vrwsv+pXz%k;&u=Ue+=B;@hcX zE1TM>xPge>8oDeu_V8kp1fyQ|#%^!?BPruWD@LmETNb2=ebXIBJF(I6@U|@E$Zj%Z z+!MQF_s1^;`5oG1EFg+@lTkt+jcsJImedCOqY!E;Rv{_kRsIGi&opaDXIhcG4G1(L zHJc~Op4goUw~qyN53~ZJt_lm{4YvZJH*qr7jV)E@`~`W)ZV)0OK#m)E9jbyi8}-*& zaAIHh{iexKY`MCL$VWDrTp;khg%-}DF3-g~Z6}K@D2pv9YfbFNs6aHdB&SadtQy`~fuTRfEZBe!DzwQSFYe46Guv3IF5mxrp%<%EpKt-0tDeF;_U z^8M{KMyVe2OL*iV$WB9EGF=d=MzK$G*t*T~TDI-7_g=2kq_ol8xx<^a z*)Xpqa^hEJD%Yv_r@r5xIQRox8gA(U*4U6?T#$zdJZ=p&h0@WEJ(TRrJQ{X#sX>vB4ahr@@plZp)Z1oLg zVx|@2#EPsjpEj_GyAQk!L+2wAPhx&o337E&xRT5U5T2lwz6mLH1%(ROjEzGXUjA%_I6M#G5Z^R(sJdmQq$%`q8xSj359#%lqaU>vEz?iQ3u?H99+G}f4 znG?sWmJ2{P>!mf>Bg_{|rMtK5M0Gxq%W>_?97mwH_jq@c_GYjX)R(z)z=yp>*|gIc z*GzAj3Nf>UWp}?jXaJVe}<&Vu7sCI}G!PFaOc_CMwhRRt%S%*WH46 zhuDE*>_DX*7;Xp7wgZ!_00il5ec4WixA~97qgO(ZK2}W0K@P+%?7rDfrL>PUz2tMWksf z^Eaq_b7z599MdoYkRRv?orvSKFVFmj>{&P6+gnFd4nsFpiN)vt zBR*phGM(K`RWgXB_w0Qr(GGpj9(w6PqhOQ>wkG_I7-fE45K^+v(tqNmSLa@iGA5UU zEL^Yc9yG9fZna6qZ{y>LTlOX?O~y>54H;xW+En5E@8Tcko{^*`gZO3m7_Av>=QnZV z$6u4X=A`MCD-~xGJNs=?kUhlklfSbYuOW6>zD~-s8z32E<~PG}7}$NiS~3XxOiP)Ic;h-C2G{G@4|LoA`zMyG!VozJsATfbh zC$$0;+z+jok~a|WRo@PEi)K1y=nd>efpWZrsI-og9Zhvm7!)=R?NV&5YmZy=;!S#&A~5<=z&!k#1i;~>W%C%|)O5hbTm~A| zU_O`*__hti?n0LDQ~F$9q}nMR=@d3`OB=>{KryFu!g!}}XLIA)LOLv6*wpNFTs^CF zoKv`q+3~zi?prHF<4kJBJwY?m+)!57!c~{t2s6*>hO%`t_2;{`%?ynTQ5bme`L1to z0IBRdVd>>3BW-8|Ax#v%Zc-h?D&thL2I zh3(zF9wX|Z9ZC7=zvQrsPFdK&Rh3JTD2C56n8*FKyA{}G1@z|}w$1b_9(~SXe-NN< zUzRO+tm9R$!k4T3-phQ@K{hAO0;BE8)!9{ludiGiLUQr+nf7|5NF}ork}9vpx*l1| ztgwr#c3K7v-EKuWdEId!!#oCTJf!z#h3k9Mc*s1vk*9DyA5utyoo{!T8jtBD;XP{O6`kf3Zt(lj zqAK*1uj`9Rmyar%REA))_b_wCvMqvL5!_9JTSgU4MKAki3GFn(lERdIShBbDt*3KO zFB*^NO(u9o=o@If0O=II6W@9>Y$jAqLm$a8lEd1yxA2{Pn%)rD_EN z$x@+er${Bu{2Xu%eHcYIe;=uvNs#PboVZ*9+j(&k8}KHhv7@+4S#K;K&|cDv;NrhQRwSe~Kf`X#PtjK6)|_}dT63^DV}E;2)QowYF@R#tBklGX zq5Guwp~%9~db(0Gr)a_mr|?YOXfL0`*(@9*VrV*{bCuer#>eNQyWUafDnr|EpbQf6 z%J}=lA-nB2zO~Ty8z=NdB_T&7WnVT(FN!yZmTLK;5{geA>dFrTF4YG!%0+#TR@Wq7 zuG*Liu`Q)4EE9X6ci9DWEUvI@AAkN`Savj(kXUQkh@j-VvdRlbqLb`ax+e+UgNPL` z_m_JnpbF6A)(pkahWqp4JY3$z%ZC$H^AwGAif_`L@amaGqY=DW_oEwT6;(OK zx9CoH!%Q}f;uYE!Hq0)fs{xBww$V2O&XV|BwdvfY@oy{L8SJ9f+h)gJM^!eD*h%r7 z@el8S$X{DA?nhQ2&t5ncu@iAuy-10&TrBllX1!saFRu<+lwcG;7;kwe$Yy6zPK;VL z^N6qbv64!n(9CLa-6AXC#O;H2S$ zzXT!UomohnVO<_O+WAS$kEqXxc5d_aNY!4nf=w=8*qMo)c@2?E2^_<^;#q^A@TCFP=y3o|3eB=dj2h(> z&o-X`nca%azj#hFIsjBOdK^0Vxw^k!H=BoZ#q&a+NN+gCDLy|8ISUXTv~W#=6MB8F z?dsb2!}p@ZvwM9mS*6$K7gM4vU!P0mODsdXl{tkIJKA2eW08w5E&h%8jJ0Ci5q98Y zE8xWLeB0y{iG;#61>5dJV7(plj2(E$3giv4HWTT*u864RL}8W{%7 zA}+=qNHGOf6HbGF9#;Y$B^943qi5PhDm2bKiDQLE3mk>>V_GnE9!nRu7))@S+Cp&( z>MjK?btXb&m*ZKGy-7rskLx!Yq1`E_0WLxVDBv`vaV{rSIB<6vKm{ECPmV4)chW>h z{d2TG*Hr)HIov)>@!u_%06%zx+xuJuxninsc7KD$P5VjcHx3n!J9mnselMt?#Lixw zATy=sS*7E&A>Q10sP%s1@v@%1;Ev#@(JZiJ>nmAsCIT3}wMYLvBT(ySa66#! zMB)v*l2|YR8P==UlX6f*Zzk0nNzl;YE#2>KR8t;=*=N~ThA4Miw9T_`Mp0?Y%= z;Zg6ZpVvT!C+wK}?7(eSpvfK2nB>ra5O`X->n*7Jv>jMu1*G1-Z$a9Bp#$q6g7>8r z6Pkob6;_wUSCXVzPC`UFh*fEEJ^zRvmU3hkdM^7$Le4q zc0;I3;6n$r|MAp*jMTalIe64o)$xfWU6#<8z_rH$ z(rf@d)D{N=IW)-h0w)8n66OS6pQ&ZZyxffAkMunGJ59B>|DUU2PeT4|+yAt+`_pxx zQ19A(C#Ym$A`6LGt|s!|s@;2#4s)s9M<8KPyQ?zRZp0*6jI^x;ZcGjy^`%-*a%5N2 zGg%D2Xh@3_=xCjIYHvV%4j~7R`bs_Y6!>Mdo$U-822ASS<#-l{Owm<36>W zMca7axddgtJ8S;A0{0r=^E6dGcZB61=)Y`K&+}Usr!h^+B-v91?kj$>rw$F0J#`Ar z@Pyn`XY$NWQrueLQa2+pw;n|)cn7JvmEQ!wI7mXh=%2C(0yaqTyvnf=sD_jC-A zdAhWivK^&t(PO4lvhijXfn>s6=1;gM?M+ZveNE>#F}bdCR9RQ@nP)fhsIsHFTd;;B z9M!du#5YgFk$^M}K~4jtbqE3lcI^;?VCvnqM+kBTAcuw^Si0zXObBu&AQd6VlrE0y z78Ynq89*grtgZkx34^);)GQ3@4$y94(7phL^D?CeK<&ar!c4&KwZP2 zG7>+mhbd(w{{cyOl!35zrj$_*j!MF#EQED7rHt}$qK(HRh-03|oum`NYhPu@HJk`m zVUUbCrW^bosrX@#;NM~Jd#2)tL4yCD!QU?xKMWH5hA(LOd!^!sL4v=(!QVd>KMWH5 zvkd+LsrX@#;4d-w2d3hOL4yC1!9OS!KMWH5Ukv`isrX@#;J1HK>*tVE{4hxH2OIoD zQ}M$f!N1JlAC`(A1_}Pd2LJF>{4hxHzc%h4F2({_+gOXzhv-FNW~9>1pgO<-3I1S%-#-;U z3=;gy41Rekei$V94;%aesrX@#;D2rKD^l^pAi;0;s?Kj^Dt;Iw_{SLhlT-1-AiCm6+a9T{QV97kW~CINbt`x_(N0i z!yv(5V(?E*#Seo7|0RPzEEPWt68v8b{_s@%Fi7y*uh;q+k%}J%3I1S%KQa|R3=;gy z4E|}U_+gMU#0(afY0q;e?WokWVUY0p!Qh{siXR3Ee!C4i?`Ndqhe3jWlEFVS6+a9T z{EH0!m{j~QNbnyt_-Cc!he3k>xxqg>6+a9T{3fsK{GOAF9|i?w@q{jma+7v!YT7VJ zc%5(X$ED(jL4tp;!9O<@KMWH5PYnL}RQxbV@Jrs%c|R`|KMWH5!wvp~RQxbV@Fy7j zs#N?iNbqkq_!Cp{!yv(b!{AR!#Seo7KZ5BPkJ~4w;)g+U41jT`q~eA_Sh%5CK;yx1 zWU}41z@_c!G97Ju08K~b;|}@fMhe^y5XB#NKQR%O4*p{TOsQPDk4FA|>CzFA)qF=r@ei$qc=lm?-6RWF`S;^l5cTYMY%HQzKU*MLROf7Iv;EYUh0IeiwM-;>r zawb%yx>8Fra?C{B4IlxDskQ@GNdOXIKS2J?F3Ti%w@APg13uU2KI0d|`R>saa2hLL z_}MJ{7e2~t_XIxbvo~jL0+Q2BTE(>YB7cJ0k7?273j`)vh<$)a_lb$|_7Og!jy`TV zZL#P$`Yb2EuN;pRQIEl93ar3L;8>RrYVRkZN|)DNOfC)sb-E2ps2}DY#kt@Lm49P_ z+w*O#~jjFE*L-IbofUw6t;BZ3^Jv{QTWaQZ(!zCp8RFJ4@&!+l1Ueihk(l& zrEogTj5>><8qoPX3p2oO$|~Zt(9)Ri1X2sC7`$T%+LMGsU?Q=18s7jZCE1N=j_8&JN_Jyp zUpn7S$!?5PP%`IWLQh=fFIioveQpiy9d3?9S49pWUgl|z#8*Yi=}eh<_L%A<7DZUM zK4=<&8k7FalSc>Y%p<_Brnu%{g;vjR9Y zX-mTFoWykz^%rFL|5_6Jx~hh(oW%7J^$1B~-&f`GeN{$z?d(*IB-IjZ4a=ND+rq`L z1=`d_ws3KzD>vCy@)u$k1(7l$U>>rIf=FL7 zZu2xBNuc4jsZ>#1qA0RE)gas)ncY)Lk`;?&IAt}X6lVz$=BkP-@euAx;bvrRIDR!_ zk1CGe%{IT%D#mFoI16W%PNXF5B)ASi4(~1DZ8Px^bVPTQ;Bq?kk6;%GZkUDdsUz4; zg7|0KOrCHfJ2o7$p&@;93g?Sju%+14BFTr4SN*B5K?F z*mF%g@ZCSHZG-*-_kl2Ydfy>C@A29NCxxv_q^n=wNb%SYU}_7jD5-weS`hDMJ8-uh zSZfEKwgazO0WeS9sh&6{qFyKFIqpzLG1Fdu*}^*~Lk5qH6rZs9|2%_*Ty%-!BID6>T3^$ohGmzCojrIjiQr3xn5f%FoT(Ulm;S(mMWjK#f%sD_!JwBqQ5%v1z zL9>+G)k3#lX+u0AQt($|llk_mP%54E6C(wmZ6}p|yhz%zME{7|>m%^W@_13mbT#Ah zh`N$U41oOme|yym9wowN;=i4=u;`xg;tb1 z%?gBh>0W18M3rr+o!3gMq0ziXMAUpr^`aH!K5hr@vjWnzY_cFNKIK3`%oDu0d z*flOXm6&a3WBT9Xeo07lmL(U}|2Poffv&DedU9vDuFs7r~@j_)H|NFSMJ*J0frPKc-{ zh-sE}Sey66i29yV)zV(1X%DL+YQL>Wm2G=yf9gn&N2W&9I3iIC<1{5WEu!9}RJm0b zJ+$HDIoeF}Q#Gk83jZXgL{#I?z%Wa#>iRG}qK>6hwPeoLDryy;#Egi#f>LFx)l|_F zvm)x5?TBlq(&EmJs9&~|Dov%I7g3d;V?;@nzAg>8Ck;5~8BV(P#lhMGB!=Is&t%O|qiK zv!>}~m;!Bbt!WdcNt;|=<)CR3Pop-uyUR2NQzV*3ZF1X47;_|=LTz&QlrZKiuLqjZHchiznLyP9UU_NYQn zNq%(OJwuE#cf1(}KlI+>!@C=JD z=nh@hqr1<%NW00zBA50~lZaz&fJkI6#L(FK8Q{{=_AKit0DVFC0}V&N<>M3ldx6t! zHfaarxA-mIa(^&R4I&N3Z*lic9*p1O9-llIzr`J855}9*3qvHGM6dkJQ_6$ym1Zx{d!^f6sOiD?N>{(X(1Y)l zW-zV?-z!}`7?;8KN;4M6h}!-%lD6JeZv4XUP)s}UVv&4%%;*<`!?PJEE^)V8@Eozs zJZ=mvkOdU{CAs@u)%tr-$hrYW!%IUT7*}`z9ndb-MVfffRaX)1+^Vxb*y0g14YoqH zIpF7aCTm^g{g5+198*EY{9zY&Fd>e?V8(Ah*1CIF)t4jlmAjL-^Oc0eL#}#?*yYle z=rQ9%Zo8j|MCP_6)ST;754-I;{a9?_>GNet#cbaLF6(Ue!3CU zbFM1>38}I+c0FQ}!A9y*bK-ed4X+bHJ;SB9yculEuiG!U>UE->TkXN&tQq`vjI3HF zprI+XRG-8vuG;tKoSEp+5+7QZPj+RU$-tpqGF@c=Sd7grU1i``%%i)m?x{4o z>xdI#iT!0z*AYj<;O9M09VcRKbAPuf4aYi8>`s1OWtE+ViMG61?*ZZg!foCCY53T2 z8q)8fX-!4?J!HwV<7wpOy)8O?y_^8{7xA*`l>K@HV zM{*8-tjSg zf;jy57xQj8AsF%HQ?X!svYY=7O2mEKigNF_0=!<-;srorcFQdaFKVMAlsa=O5wn{o znNSzCR!35zEL*20RL#sIty59ke0Q4#Wf{F+EQqJ@QpG%8u^rge4z#laWp>~|JJ8z- z5LGi=wvJ#YzAJF^TwMMKyZw$gtrftgzw5)3wziZg@ul24w!g;uvMYZF2X)~~-WpeM zF7Dh*eA$odjilHtDdy@Fo6Ag!&3&l$6i!90_)xZPCjR?DLF;ctDMAL zrg4}Zs=-0A@1@Zbk2HEO0(;A?2II9aU4Vcs6Z}hCY53|S`vbFj^7?o|Q)nZHuV`+W ztv@ika8BGFA^Saz(^(83d!^JXQSit(`tC-X^2`%A9zT6#4Q?E*v{2k*tbiJhK(zY0 z*=j6%md{qx*|Q2$$B>q_IH2ED^S}o=5A<@@GR9BTPVzvTHJy>4KQlg2-Bk~Ma_=U$ z%N~|=F_7wD4-kX=6`TC!{6S8AVKA?$@i@^MDo}6G1x7<_O*4|;<4SEj4+8~YQ0+ah zJJ)|yn)8mP`dT=>tCN@@^?y3*{{*i8x^|B$aPQISMs+diMjh^_J3UBux}EOS0(XN> zcWMWd?$jf!c5JY;O8+1%$TGMW$BDER1uoSLlD48Vr$+l$aWvKE0&Lf=7|JzUaE~c) z>01DVdkpUxCu+y=%2xq4)hCV_#f= z0C^uD7`nZFDj+A*sS5Mp-g56V|62N@agO(S>9H71(Ui4lEJ95rgloztI^GxNGb6KN z7o8kbGVys|sR0dO{e~0&%$uKpwn* zs|9&ro87lg^an-O&GJi*K65ew1V~RjlGC$i46uAXn(s!*tuK?oHNK^1Ac~LY_vPL; z^&|=PjfLgJ?GG*nX*y{OLYnJ~*qJh8HbAVk18=_(zv9n!G(cODThPJF1P3`JhyAPsn`1eoqiU5QpoG0Wx>Y{Chd!$mSr1)y%5y0ES!zc5tSjVg;`Bu zh~8&U&3tz3W~;`^djanlbwdIc^@tVYuC@YPvDI^c&?VM>A-6!4n1h5tmB5VDH&{~{ ziDTNh4B{NG9@!z{EVIS& zw~41~EaYWWM*SS8&}C)YY}KNlPN0&kAB?b4ip&2BPWs|HQN6!I#CgINhu`|?g~1eo z%%}+k7HZ;y;Zi%YEj-={YJ6eVx-uUJ4D6ZAs1gJMHOVW&bfp%kX?sHTQ>v(*LVX<) z%3m2yQI#c>UCRSawGl-*Ub(uIgvwas(^vL!NaHI<-g(zuhFy#d15~28?lNq%Wr$3u z)q*n=O>-kbg}Rv}sMChg|T@?xBNn0Sp)!{qUriNMyq#Y90u8UyI?u3dX7{2?(F*5#4 zt#YIevX$#{FwVuSurFPtxBtdFR zWsMoPR~To;`!}ggj`W4m18D*!r0d`V5z-aLS!xS$t#{pcCP@xzs?wQ8AWhoBI7bcH zxi%%#QZo)k!rC=q8N&7oV_f{hTIEPz7*B^pNSFOUgmi^5UX5+KBMPHGs06Bznvu>l z0%_6~#su{hiIYpscr{6adew}H@w0cSO^)=1(GO_?C8W!KV2h#gRnSoGW`+@ymD4Qi zf=NFf|13$IOntc}ls&rA8{h2CbVmGq5-MZyq*u#mq^YM`S{k*?QoHP0PqqA!Bo6nf zI9FYp!GtPrno-7__zfgh9ThVdY3ivM-(KdaF3szyn8qMri$nG@Crw|Q!Cum+<%0OV zBvc*Ma&3|vwHA!MED}^B-(LQr`nIU2S~`J1l3L{4SIV$7d&OKFf0@LpqheMkNm3uh zT&hOyR!_zB27wgCq@BNIub9i@TS=@sD(1x`N$R7R1!~6b^;FDo5ZKX*xibDciB(6% ze3B$d4vO(xm}+%Z%X%ti3J4@Ark*X#qWDg&>aLcbljNw6TCP#IlLXlfXVZ7oSAf8d zRm-*UeOlLDEyYM<%aMax{D${>^%O}^AGO?;Bo24fbXcSw4et%{BiqznF?%D;j#A8x z>V1-+K8jhFB+iZ)!7PgpZCiK69F8>gRE*!g+@$_P64XaAZzqXU{}IeB@rirXT`hx< zrk-l?E7D4pXjf0QY)cY{?S&4+Wm}PgftA0Ib6b1?iB-q`XadsgD8<~a+Txq&^|F^Z z2-xD(xgw=e%$@ODNvt|5=JF&-YAu@dV_v@^-K`G5Eo${rOiK_*QcOKN>c7SxBcbZ3 zmYb90sE=CyrpouOr&@Y~Kt0rw##-)+ZzQ4WsFsJ4Z6#4)P?)hQ!!&eAVo3tYZq6{ zNs`nmLHg-H3r8OBU3FaddMc(21X2`}b{j&ljViqJly{JOZ3^5=Kngp^y*3AsZy%D; z>(KH>_^s`=A?b@p67(!XYNjT2Fv%MI+TRg|F*rYN z%}9`H4yIp6I+NEt%^}j)k>l;{vrc1@M<^ZPQyS@0dQ($6B9+n+VM@41J99&*FryTiMDFD=I)-ZGZd;QbPpg^x|NifLiYrl&>myEIMGIK zA<1u^J;s(1tRxKUO0XtjST}+-3&Xk-Y_~9MUxKv`!+H>`T?jTFvXmsrG9I#&B*`)! zvXmsrG9I#&B*`)!vXmsra+(t@4YSDmsF$xi-rEmzI5g6BG_>b#v!Zy%fcJ|9@nZW2 zDIKTX-Bz4LfRJ)uu)&X80in3jf}jZ6QZYnp^DI))MAbFybLwnL=w#vnXqcieb zgG1f4-o&;6Lub#r6~9*504X^V3=Lv*KsTfA0j#_NROSI=0>xKIX+rUpw&ITx#gkY> z<*437g%5c}k2?7YXo`yJXgftONl^lmq+;k*8CcBzfyEqPTTG{RL@9c-PSR-zB@rf_ z&Y>vnpGSV3y}c#Pbe(4JfkB$R&kWM+J&V(b^|jtDT0{8ANbA0=j>+&1vM_etEqcGk z*p;&?_EYqkZ$DefDDk*8A0EtS8j3#al5~c#=(FDTfkhl7D*DPkNL2Kde~_q>NELl8 zpC;(^+n;~_@n@0qCqJ2f9qHAI{+-mT;q+3`_x|an!U?FNML)2Xi%xTje&j<^bRki! z#Q@TxJmM?*NfjOlQ*Cd>NSn~zf_R76fn)4Ir5zY<2hO$wldJ&tu-nIxv>?Bz%SezN zd~8bg3)yFqLcFC!i+)w=pd{Y^jpI^&N0@)TPdY^#dTyqpPV4%)&JkcjBSU}O=eNUj z)M>PimCdQ-rXF=#pmAhpSh}N5e}d1Q8cP-svCqxtL&wdZ*0GbV15X)FKNVf>w-l{Q zbRDbt@_1<}F7J@sQe1vSsHMQkrlR?}rq1P)O-1wlt8?jOQ_+0?gCj*#dm(5pq@|Nh zWeDqUjjW@SO+?JUIJanO_wERHklVVJ&%(i|{Seky++s>|y}PPUcLP9~?NtBE(k=peInzDKV)$qe}&zsR9al?VKu#M7nozxXLSR@m(%qP2-~LX z8xVe)4r{Y-2+-q~)vCu)Ip^K0UaP+*!oN6*v7D|h-JS;Sk8dEJ|05cBQ0;egJv6Xd zYk+^D0cc|T8hAMV2J!qK(ZHi>|K9b`z$&c){)GmhiHsWPU~0j-_(tMcR}Gl-JGd4+ zr4H;<4-LTT`Gyt#g$AIB?Q7t<_$K1{Kcayb)WLmspa$3mLL(sEyS);Bk@#fHb*Oh+ z2-M8I+dav#eq(960Mp%~Fzlu;=mN~;FGa7Z1CGf#`?$E7?$nka6#s^7ihpDLE#jC_ z5gEFH|563mqyQ z5t?MA=!5tI;*e4JkPTM=HM0#*NRG`m z4x(`YwvuayB(J+j0(GJ!*yTtb-&M6)O91aSUZ zFW*=bd0k#Wm;k>#(p;YaExLP*Xg%Q`Y~*{wtt75O>j`%Vt@KOsbvCVau1)J+vQ!q8kMX>81ebCPBhGGeE~32Hsl0Y6wX8)DnKRdyo;Z+O1%< z2+<3HL^lo+(uM9}2I)e#58tXMNL4_hwI)KUat}2~Rqn||sdy|wPi1_5#YN4beqbK_ zxHYtfgjZaME4v*)yy8Lzk8{~>47S{)8EL^cX|}_%5;1Jyb~X%KxV`Tof`?OrNJB;& zNN6C{(A}4Xff^dR$B`FbC66TJTi)^>B=YBO(HTI8!AAZ(goqM~qfyvQBR`6nUaQf5 zJc@NCasQGyx*nZK{EIK?!s>qH-}1(fm(U|ycZ<@B7%FsRE9;YRw~9K2&LdLo=`&V@ z^$6Qe;lwUZJ#n}5bhBW?hz2~5fJX-%ic>;fyMs9g6pcgJL>8s z;DM?G{~`1`9MuEfa(bD}Es?von@Ad${gN-5Od|hRL{% zm^8)F(+n&cF$W0)G7^w!?|`Ryc)ir!m08mjwK~k)qt$Com<5PbAG)(i7hIebKiywC zKHnGUypvg=_~|`pKZAK7Q2g{0D9$|1#sYGN4Z+1(@iRgzvPGkv_~@d^NCg3L`;-$u zQ-`peJK2ek(V>NNimJvr@w1Bl^zc@$de!X0(FmT+!PxYH0aIZfzbIaF5(X3NtQhw` zJ8-KVxZV!Tw*owxZSg7~listyy*||eZ>t6MzOe%B|ImRd$l?8I#RThE%W>~Mjh@UF zVOn1ze>sm!t>xPrm*9eD&>>`5JmuF%J6Ab*E!*a`Y}c*re(deC4>pfCDGkV>mof~h7;l4R`XAopp4O{GTHVv^YS zI`b+7%2~vLd2_UINdvLQC(}lkS5S=fu8sGoc+$|sI~KU>07GSsckIf$W?)ktkD(rj zr*ZL)gXz6!AzkJg?<97_?MJ*tfm;Ft0P50|87fk3w;%oR|Uo8a_Miaah z6R6_LaPh)-qEj$2K{%RnZ=t*tlnYK9=@j(t^CpZ?i1i*o1SC-(NyMdFu=8$FdiTc( zc0TzXKf%u9mLm@iE5E^LDwKa1i5raGbs*xHaD&kYu7rP})0w&g^PHyFsoa{rgV9ph zm&}H)pVc?cuAZaUTi4Fv_12X3vNLsH=5e*xt$CG*e{My2+w8!vb|7Yn=QXke&F#RR zcA(4(IGydQyJu)&+?pd#feiND-QJG!28mQX+q7td8Bnvm&M(& z7StVK2P&-q?%%SL3n6t?Ey+tHd1w106^HtREV>faZT-6u2V=vIcEJ8*g`zJF;yX&S z6@6_mTD@+zqAw28otKKgI#|7YPKIwnn})Q&zvxm#(>P8Kc>Yd89py zw^PMLyq6W@cC-Vntbm^hn(=+FGr{vpp6(S?Ig_2{ZCd8jHqK_w@rD&)BfI!4bS0`M zeS$V-_hNz;-z$DDNs?Vh=(ol+rv%Z2nWWBgT3b`v>9D;kK$Vou?JHj%pQQ7n-!_8c z;|EfpSVQ~yOb9d7igL%;fr(Z?%|?LcsOl2-Y@4aBX3vIM-f|1CWB>w3**!6TZXMk7 z&s1lh;W{PM;g(PrTtc04HXrvjQ)Aja(w|jpe~?3pJAZ=eN4e=03yRv2JGQEsl)q@DYxZ(V&}k1MM#>B<&&5wde#jk;vs()#c7=*$YWkJ@l$p z7c0Q#HCN(9^=al*!(*q`U=%Y6e>Q z^VB*j@Z2}%|)L}DxftP3;=f48J151b>2ip zp`T!;k$*O%`@)KHzqJE@Sb_EpX)_d_j%T@!Dnfvox=;fmjX`Wne9;(?&8`7)ntWo_ zOvzvDD5=$fMXJWaV73G#%0jHgvO5{u|!-~K@Rsp3+mo! z1seIdZl!hREX5@9-!h13;{5iuax4UEZbi90tbjTW0UF4 zRv?cKub4**c#m7$fXb$q9o5kew6Ow*7%fG+7MGA(N=O|gqK0-Rl32(9FMkDIe`cw^ z;Cl11%-mgQ;2#sUIcHQWF^r=_MlZe`H7tq2@XpQa>u2 z|2;!`R%*NSpKvjX1lRzNkt3J*0;eZK*;Wz1eolD4rj%FAL?Y&5%WYk_bvr~<xSTPY?J6loi0aic_MF1neIcf}h(D6;OqC*BI zU8q{B%Bw&!qk*OBEB%UPGf)YwScXhPGrKJQ=Y;IFmTY@^qaUrE<+z^dgft+{t-4WF zkW%Zdf##r+g$7(=mZjbNH#A@yw#NphZc&TtAXL&&y~zW{N*(7_smQR?X|s{bHdd6| z*$y0F1=gtWVfj_t}BltU%N#i-ZZpHZrzYCJwIKi?m2yTb16i~qOl!ElIGgj%BvN6JCSR5Z@6xU=N={ z11srFWI(lcmPZ3B^JE@W`9q4^X6}gcITuv2u<{CGmaCQTfby{|RBLysx}CIJZwoyS zRI<>(NyO~`p9VsfEn^@Is?r=uDqtH_!M|@wqiuTnV1LSW#{pJJ8Vz#OO2a<`G}wtA?wt0D($7=2$BrHEtLn z7ywRFXR&A7G&PAmINfHy?bS55s8i>FX7=wA#N4S-kI^*)<`J_^e3l<05u+yrG49V6 znuu6{Xj~04T{UIT+!?A3dsfd-o!GNwhU�ya_pqJ?mzw{_Me9o}uhnK1+>Z&xToQ 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 z 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̧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%0A)!aPDDdkAVKYtK%N@Jij#X~3ZN_>-f^#5T# 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 Ta``C#MH5{A_(2YXs=ogRf>?mB literal 0 HcmV?d00001 diff --git a/example/android/third_party/secp256k1/x86-64/libsecp256k1.a b/example/android/third_party/secp256k1/x86-64/libsecp256k1.a new file mode 100644 index 0000000000000000000000000000000000000000..9f1a28d817d9db8347714261b1bc5f83a5d1501b GIT binary patch literal 763762 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%0D9RAIr7x5V2Ax~m-*Kh!RpAU zuUgo~)BI_oiU#WPHya|V2UARGDXgq??qs4lev3ic%G4O8yv}`(--m5subN!flZ~4d zGm&-LcO?)n>5>)xhOtCD@{%(<#G>bokI(`a#*0)pu0_>~EB&FR=j4>KmP+ghyNZCj zoCA!HdWt?|QyQlFRgJtU3J{VnA|_*twqfzop?T@f&Ix#Vy|G&-qZ<&q98OXLw*TUN0x#J&5Y-;HK;{(;@WyG+Yn*b^U{x`e501AQ1RUozAwGB= z*0$~rYqAKkz`(W9N*A}s54?lyKMChX()wO&bIVW8IA2v4=@k~*7PqlUUoU&Q@7iL4zcwz=$E*CJ({@J~IjneHlu z`qIXCa68*OvWKgY_C4c`(M!jC z;78hstK9E$VP9gnh^?|u7O@eE+^MW(Ju;jcP)augr>vkYcsf-ZVlrIO7oH0FJkP+QCF5QS*}&f#PSP^Q`AlgTih$Eo;r^}Hh> ztf&oZSjiveL~YbJ;TP9gvY49FNp-3g0wOS(=lu>?cD*F!nwDl7XqD{loG47VYjxPL zL|98i1GjB69gX}`4z+Zv{UduwbKAsZh<}^SWfgqY!}iLl8spinN2j^YOK}cE?+6&R z=@uqCI0VZh_ho13U}r!p?>nHf7j*DPTyXMAQKcTLs=c)4(0Y>W;#NvQx$J`Y4YW|K zp+&?A0EvHfcCd+Gw?6=sP6_Xu4lz7bjvEsBv$iSMqd}Os|?#^gGH`+gyx%o(aYG^urXmgMuK4S68 zNO>EZ)Xz=_Lc5~JY^i54cPVh7N3e4jJ{LMu;tA}P@_W;qt64GlJGtLmKBet5)`n3q zR_H={;xSGmdp9B7um1MkVB%q`H7?q1_liu#3!$jvPQrP>d_%CCoeiWXsL=j|DB6Ym$YB6XxYA`fX+CXT&gI=RB6znK&O8TzF%demuQDZ~KuBJ|9Zd)3 zUxO99?FjK=jA~WpnCHCLpoewx$|ngoB-!VR4d44Q1|ar5ad!a{8IU4JxMbacey}H`{YG6{ggiG@pwe_$yub9gQ7lOZo)LmTsQ)z3j}SQ)UBf*ElDbV zj%MA5wZw=gO`LrKIXn5+f_8Q;QMCEB0`_T?oWorKy{ZJl3B>7AAwr|g!}W6~YE~_1 zGpBZYPzJ!jMKISJgb&DBcoMVwc1`qO)86L*v$qB`EO#1S1;fzISeDTc;Xu`xkCC$$ zb1gb|>?vYLn~m(k2lTn}_pC+n4#u~}Jb2|39#*I0wc&3?5Y1U10+LhW=B=h_0?O8Q z9`vt#CUyPKMavZ>tTVY8W@<3l-XGpf3BJ-NIQS`ANQt#Zp3G6AQ4kHX&*^J}EDi*P zj$(||hv(r)4h(Z8Lo@=g*_y-@Vn8qPO~Dyz>;fb&|Dh8{wi!q1t_^tivo^(V+72RY zQXjrp)+Z%cc@v@m2P4gq2A(fr2M~-fQ|&kEwv3nQg4vC#nexPt7;V07tI22r=+~yy#n1g6y zUgVuOJ{VY2D0j62!P)t)$QwZ2L!*DMjoa$Th%lx#+oc{G0A>j~)dt2dna4D`$@lw2grZ4tKHrsUK}nF8WC=Ww}9*QnAt74~%FG zFc6E+rld#Ax-5NM_ixn&mzWzMghMD8aET=3Lx!E-#a0N(EZ2RN{M#;Xi4lK4#eg7I z_McCT3XTu~_ab`d4j8;^5f}yZt9a-T&h_}PA4a?Bs(k7!mZ{dHc`eanr+6}(7i12?fYWJy1?tfnk6J1KjBO8DMD6}r@@=msLp zG=>0r$Fv5I6(qIxc=8ymuUh)6%3O^Q~!EaN zL3ru~`7)U1$KZUlHVl~auLAjQ zbN}wK0jjD%0-iSi8%YiQ5sVwR*ELc|&E{Msq!XcQ!F5_RzaD&UR^{?}mAa6lu2H`? zXvMV~3lk@kiH-Vi;F&3liV|_Ex&D+DNIaSOAsu<0MSm9|*{|ED`H<*0Cs@^`oTeB# z2o*aw*H8l8Z|UeB%&jt8^#dnv57U4?%s;-5fRm!P4o8jvdv;W9)f{i~S&vAZ0`ZQ^ zqIej6tc`~|O+b$`Eao06dDh*0=uqn-G=X^(;4#($M)~M$q~@)t4r!W5C5f*_{LUPo z5Fj@2Vv5_xBsQ#iX-VqOtX!Y(D}#+6?K*`QsUX*=QEZ1JC7n-LEPA&bi=h*kg3ZSSbMANyrD}M>zrSl zKCRipNkSJ(#30AV)AQBFO6%!R?Sq<(`_*@IZBDrp?o={o@Xs*dCulITGnKF-U&6|s zhn99wA5Nul720%(ZB2vuq+G(E$|htHuymwJE`WzeX;7#KZ*U!P5_&k6Xz)R$UNiyO zB)Cjkq%-u$2gt}fSFQD(&8?xSD`X55038H$6|qgq<8FZf@Enw=<V4H6t^)0d*a(-&0 zfE_ZAs-01_! zwLqnp76$3v&!9%PJ`OKO{@WXX#3?BzH1e8Jj}F=QhY#CB6E}^9>GLw@T03RT0Mqb* zsZIk)vu$>vw(NYlHbtLS72l~1>DeRXXs*MIqgsdsU*CJat=p!FoOa<;1Nf$*b4qfzVuOB zeHyJw+tQZG{Dec`Vm!BL-d*xD4 z%j?(;L}mE?#l2i?9nn{-;>&k)!Lbb5w{?-U544(+a`DzlmE=~SRAE&siX#abDi-uK zZxK>jM44BKF?jQh$($1R+t#@*e`xrW;~6eOn2-4nD$1>~?-rSSs8EEk79W@6?m3h7 zCC@1bcVyj|*j*@)F)cXtirFdhIr$~67rZc8Z=lE?7E{4h`f( zxGrDyfEVDhTKYiD6I;j1JfzP8u??|n+x;&K^SAmC(&Z&IA5aU{6V<-m3I7rmlyXJS zMx-d-a(rfWsmHbbNk><*Lw=RJ^SKjrB_oRi&YnNU>>wvIM?TjUggv1SBaoH<0m=0~ zbzqf!?(7gE%%19gGG`Igl|MI@k_FoqzT(6{Ou~wu}7V7j|kx}l$Iz>8Z2&u1Hro-C#AG`e8o;S2kNngRwoQIMU`LQfn zFLx~&z5^A5r(vT-lI5+G-MreHV1uJM83?$*;z`nK0;Um_6P_(!%}xr+EuO^3l_dPZS{C6onCNqy~nez;?#Rhe}rHM=>$Y7+i<>do*;n; zw=MixbyoPb1^WgZ!lQk80-uafM}oEYxK%njZghO{V z8lO**~CymTzYQ$D33M{@jd7Q}BjfDbL zh0#G_<&>7(q%7Ub^M9(fuRd+z1(Wuj=={QCFOM~y)0%E|^AODgtdalGw=;bnE0P8% zc8aS*=vTrYXotJux&hhV(5kdxxbFS2(X)sp)GU*%H^r~0pwB2h)Wp;d6kTva636G( z>9j|;2Xb9>_e3<#u|;@(z# zn?gT9+;=7~#1^%1NxMLyzS!wB1-cwN2cM3{D0&c7CKQzr+Ihq+w#|As>Z!1p5Rm^` z<(sCdD0ci)9xVI0y;hi9Gt{S1vEoHSzpY`1O#EZx@a+r>lDJIGp$B!xojGUaZ=V2O zQ1*}^ZMaj1KbfW}M#7=CTMmX$(e$jNwwUPFvC5YU7DM3w2-9n&wBe)vLW1g&8vT;NX; zy>!0?u)jQx^bG=c}Z3v3J^{SbkKXM3@8i1S?2 zc%#4d{K{~+SMzPY?{_u+6!2~3(nSBu=ep|EEmk*}5sF&re$#nGx``o)&PK?^=MeP~ z*Xu;kPHKQ6Xq5`PtHD|1`p4BL&e-Xwq_w0@$d!rUSQv@FFVkl(gr*LHfMZ` z#;RvS%*$ghXW%l#`dt9df@7LBQGKrtXmVZO!FK&ErixiR^2`-xfjSrgwZ2xQ^tJCu zK8~W)(!Pkma<)#|5XZiwHiZ`LriyegiAd_kTvlTMs3=%N!0T0R0%?wUtD%k;iSW33 z&zKc?-##W{lvi}a15(AZOLoj5r~oiFBmp}apF322I?EXQCSz|S;;hyGZ))^s^WFPD z)fs)z#*JKXA#(jzvvt&ckukTK{!8y;zR5Mg6LP!(HG}n^MJ1z(R7{%_-(x33?|+Vk z7Z5rzpYUxlLZ{(_MCbKBoCCEM)^^-l<<5+Bsm4EvIn;`z(rdu~wTtYwM99+PL-Is{ z!Dc}QN?URMf9q-~36$Y6i20}HZJl0HwnN_UVwm?igdsJcAB$}1O4*zx;UYRH;S6fe zF4p0z1?;hIjYaLM4L{`7E_$Q-c}Ffobh5-3#2JbSIO~D{^*`XZ317A)zbCVGeFiWe zGILL$#k9`FSmdP3ISM0XhrZ1{0+Xuk@3jL+~qV$_v`#k~egkt<63bLmF9gB{~-mKO`t zE00Tgug#8IeP-{D9hA}+Ub@Z2BcDw6t`D$jVVAETZQfYs#a^so2An3D;dQ3#GzJQnJtrw*ZIlQq$0IhB2&2N1fB-w5_FNdd& zyzBjj8}GXcz?XZ>sfo*i($$Rz7&yG9Sb{y~vFN$_S8do7We<&=hfCq!K==AK(t zWA+R|!+9FKe7%e|WGRDGywoJQvrDiWIq;WZ@G@G_-h234&{h!JLFp-(139XoK=zMo z{Pk27m7y*nMz{iJYB96mL(pd19H^h5O^4r(2zx{Y9JOHP%AUpt123hJl41_85t z5CevJPm~28zbG#{yCNRL^RD>4&!+SiGEqpsKcB_B0c1q!q{3KHh#p#tx=8b2r76Xd z3nW;nHl#zjLTOL=T5?x|vx`-JB^RyE>?w~{m1o?8;q2H?ZebQk5 zJOLpX_Agf_D7J100s0ePceR2W>e6z0VZb8O|1%KRNHSZC<<)dF<@_S<2^A>mg7mWkOpspG$k6mI|&P;8;H&GXS#_^2&VO{nC&!V&nnt8 zLC8L#!^m3LsYfij-9|E3ILjBa`W^}pOi2lYtMbyTUCD{5kETNMsg)BfYmVN3=^(-~ z;EU=hZP^N$E!FxM%SB>tTLWKAN6X1=Ldv|J=BIG0QG2ah;RK=`q27c1rf!c{f@_lV ziCb!X4LipwGAsHdRl>&h@poER2MexizxG79Mip|EB*t=$A7E<{$i3Fl-PsGmK))=4 z?GrCIQyYRtI%O<~G~Wau-llvF7gXQ8><{x@|K$A?7Rjibsh{! zN9L&FW&gCmsW6gLqy(0#3Y}(sv9Y+*pQJy=sF9wjb1kxBHn69B_%pPCoZo7t6_MhG ze>=>0)0o<>-{L&J_}DnD2U5lvfSJ8~r+3flg(5Tzyv}I1D@~T@{|Qn`(Vh*8Z|Qw` z4QujVJuv^<44p_6@lD~bm97s0Th!N@x+>Y0$8xn6r25sFD`wK)PsbCfAdVKlGRk5& zoLNVehS&r3%R_tMbPC6bOH%sA`9Lr^Q;%x?quGp*krL|?N$2qqZ3f+73g@T?pmT^6 z4SPu@RZ#X=D4QKTGBi{+>Qz%@VMobeVW7siB=7?i%vyZ83?avc&)}kYD0g5OWKuFO za0{sWB6FTw^A8tk3|=@!H&HgKPFe+Q`p^kOFwAEcDJuX; z-J}$zO*WY*0+Cn8X%3>q!~3@RaAi@kW}Wl$#BP*bRE3DJ-Jzu&7MT0&YGXk`JootQ zTWr`6_i(dD0LkM{2);i{NGaVAAp&-}8L4u5%NR=2|KCeZ%NKEu4?83TBNOGb$~OQH zv{jr@4=zx)g!3#suzJr?*Hj6;U=4;JyL8y;oMpt^g~s*idku~I!A!M_@B3gdu!$C! z!j6bx%z*_(MjL$)@PW?@pdD7A zOQqf(&K@KHnm9T{IF_9(?F9uL$dEe0Q&V{l$eh+yOBk*ckj9k+lr-B;Y@8)1Zl8G#vGxgKq!g!(B?nQU-)vr!)8|N9@K8& zxNq;qdqeY={$7xt-?bv_{C+N9OFfmdwnHuI{o`cF~?q64_o>gi- z>{izj0_x~GcEHd#VRKrwUPUPQ3)Wu~#x>eH^8*dz;m6-*1QC+~v)cHrsk982l8vEfE{z`@vYfOlCN4w?#+V$W88<^F^d zaHTsAEKl-F;|LZPEBCI0bU${Xpl>-cde_5BxGtQ^58mEJ9gv=W0x3P1(4)#K&ZHs3 zy8r(2cv2>@)j6ejhBGHugB}OYQ93AqxhUHZL@)cbF+9$2Yqi9P;!jtOr)_`nXpEUv%3o@viRrjp2r@vi8D9#l-HX}ml2a7B$sUD0%SnyJ( zvys7m*88(t+y?3gT8#iu(&0v5nqcsjxj)1CWY-4qy_nU@=*U- z1g9dtKqS7%G$|x}+bfZBb}duSi2SlskP9<|;8y*HO|G=PvATL{MMiMhu|T*R=cuUP z4~^rfcx62oXX~Gf;`7?Y-_#{b3@ZaTghsk;e+%*)fQtw&)RyJf(zOzYoCD*{YN&@p zgsX^4QY*+odX}+Na;F*uJ;{9xZpJW&XxcIsiy_cX{GPi<`Ciw*b_gx%fd! zyl+oQ6?vSNMZaymBg8IJmLrcyPpcH^Jr;oZr#PG(d9zzaVAp}p1%}*sMpUek^fxr| z1%DmZ@M{21pi+XKa`JjLqXb4It4ihW_1^Ddo(}NmX?RbPt=q`Q%SKc;rqAcd3bmsK zTU8k5>==#k*lu7(1{adi*PWneFK`9wEL53;b0h|X+v`^eks}?cMo^0_`I-^w(SW}K zj`ArrbwkI~*qBQlW5yQZC5M3{vGw2p(~E7kQ3TjpiGdiFwI&dJKX=^@sXv*xU~zGO zNK&OKlnHpnvLuYxV2q*BfJgnZ;2mYf1IBrPOJ-O9vXJlCUD1Uqz{%WcoAgMi%m1fU zz-4Vv>lg-pZE`lP$6RP|ng4r3E5>d=1aQE2;rowH9R{G=61KpryRvc;kfkP5grQR8 zB3v`%d8KkPEs8!vJ%B}A3A@)uK(K0&d{$!6x9B4})8SX&bx$bU&+lO^mT@*J5(}7eX zRZ9@ekm0_xZH`J+$F@PU;^2-Ta=Bc9dT1svXn3JyVTO=^$y32ZEvN5U&J~FT_*! zh^|aUHW}JuLdH-6Neums3_QG+Rv>O+KH8Kivb75Bl2zk>q*s|2pxE|4;Yx*{l$nq% zO5<1R(kaqZQkwvmTP_bdtG0xd*&rO_W@P&6k43*C$?;8qek$;x3YoxbGxNZ>aF%m? zuXDrtCX6a)HBq-NcA^39v)U9-!uq9Wj{id;eml=E{pZp1Y;j5KY|w-H?IO5YFslOj zw72iHkzXfh%vjJsz@K4ai^gz#i6KV%096_o;clO+wERhRJAH^f5Ju=mB8`xznnhp+ z)?HT|jL>crYOM{;95Vt}rdj&%=6L}CFg-ut#47oBJz%n7YFaanuCl1gnn$Ie=SqoiYQ{J z1rsn=j0~jlqH+$@akQE*Dh3o*5&ln$M#3Avf)JrNG|Dba5=auy$w)vjM_(O0&Uz|? zM$ayXcgLhhQ}+oYaF4wyU$S*>Ilwr|`*zDy~dx-=q8x6C}# zrL*~R^%UTF_W}X)$cc;RXxf((;mo;DhK&yVKHRLKh0~i-=15ddl4tkaq~5_|{Zl#e zzi-(Mi>t&3UF7oCqz1R>{EAATDAj5mAd8OXCqIav0Q1!vxp`^so2+N6g3Rst5-{dl zFexSUmq7Mo75(gG39s7e?ru9$v*WOpm?eF&MtrL6`85#Cbzl9S&yD~*%F^_5HC&4f zZ3JyVcPO0~at~{{-ZcD=61(X<0I9BarlAfXOrAS;#XUL%4o#bmryJXoH|uQRR8ppp zE(+JuS+ii%wn;KzGNJ5hoh`#9PnVmu$_4Fhm99ss1p_?TfZ$*Oz=OJujh{ZRQ3;;d zK%-P+R}Z#hJFMm%^(DI51hd@Vmq;LEk+mU!UURy-a95fAl!2LF+4&BQ$kL3F^@X~AzKr)4)YLk^Et)SZ1Nqi9N6 z$GQC}E=T`1xW0-kWa4mgB#S22n>@q6txlI#2c(LT>-;Kr{*FqvF@@Z>`dT$>xgoE8HBk>?c! zWU6YFR7OxbomEF*cEsZR^J5@{f})}uw;ldM&$JpOmoI={RtfT{|Lkn zHQROLGs$IJiW!j(X^|n_Hw;%TGKY(9-y1ao=^kIO*th;d>`UTc^%CEYaP!6p@V|tl-$)hau1mHe43A4Oz=%I99jY$ z_?SJw4_lBNrbI~mutdT+lncXSlIi_|;sF<7muk@>+EOt7;7V(rEf}CVzCUL{DNaqZ z^Z~e1LgEMo^oAz2@jRv)j0(h5nH1c4uYkej&T)V_4Dv|RB@ZyDu!9oT_WB+ zkO~7A0#<0t8?5mXk2osv>qMW>{FxxXr?QQh=$tkF zM!+I)pz2hJfA^9W?G$N;;Jk&u{iOG5Z9G7C1fEVCSSOpF{#DeuT4RMj~tFuJ8I>Qqt zKYs!Bq^a@1p+EDN1Xa0?Y}ine05@5G*9LF@O)YW;XyKxYAyh;U9gBQ?b6~vGg>pT zd&IqFaQK7vXspT&AnsuYowF;;^W%3GA4E-~!VZRI>!(yYzOcC;Xe9jv^|$$EWl>A$ z`<+RweNU!5N&&f=fOg>S`Ynbf);BEGnF8rI#%Y1IO;$}Byzw^>z%rv-vRVU>xJ?jnq7 zl&?cb3pOb=rZmsU=WWYt2kWLu2?osBQ}qD3%<1KHwoK)k`)LaRk;_A3C^F!jUN&Gn z5Rx1QdupT}xUeZ5guKcwJ?m`1yWr=0D7@(rp)E&eQG1(5F`^ALeQY>A|IcJG*`Aus z`E3k~9E37=>j$>UM~WJL0f;>bx@^TdvT(;bR%bICDr0*s_{qW(9yySheq_0w0J8=O zxVO)Z7c_OnI|)81&@y49aRqscRS4LvE!;`0<1eFJblrSZ_fI9VUgXFq&Z215&-KrH z@IqHpdH?j%HrUV*tBS-WxZO&^X$IVPq>WAX5$Acl2P7l#P2yP~M{lWM4kURW{nB4X zpe(1Z_TF~GHxyRpqr;!ha$9W%ylNUVnqKJ5jZZMycGy53REV?wNI>)KyeTKvXc}DF9T_6XX|F^wFW1KuxSX zk!72x?Slh)4G{?j+f~(6yz(&fVuQ1^d=gp{Q6Po<9Xwyz9HL9_YPc|gwJ9&)-Cj+ua?b{IFDxDdqrorLham9wD3K$u2i%j&YhVo1zP{Jq?% zOl8Ni9ZPNIg`|Sn+c?Si+ay+*`XqdX%ebmtgz(l-zE{|DA�)uhTEm3TnrX4wque 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`sXe0+f<2W8) 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 literal 0 HcmV?d00001 diff --git a/example/android/third_party/secp256k1/x86-64/libsecp256k1.so b/example/android/third_party/secp256k1/x86-64/libsecp256k1.so new file mode 100644 index 0000000000000000000000000000000000000000..077f47acc40b59c1cc5ac77bc49092bb476310b1 GIT binary patch literal 657040 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

    AXSca&o?&i?~_+%SbU-o*Bc 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�)uhTEm3TnrX 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�ojdV+2>0(i|Rxzs;nXBlCC?)+di>sg=okfKv+Y5 z1cX0Ymp~h4{Jn;MT{>Ul_-Ne-$=QJ%(wONh9U4<-79*22W((xn8gsimJCd@M#!Pi- z%rAw71W;+rRENf_lwP$`xrvYIJ{x_yV&!e2o=w6133wuXkmj|QK}Zy4W%CGN6twkB zRLBPJG$0-5J8NxURsF3(!SQEu)Yh|^zO%+fj0VCVTq_ecq~(Kah&YDdWaUp%UnYEm zskjkT9DZ+-ze?@luTlrdnLmKm#*bCo=BY@7%Z@A`_KFMtpzXr@4ys1dcVd+be^`Z< z6Q^RBLoU3NOG9VOMrC5O!s6Koi)NeGCY@vPXe9+~^5!s=9S_`NYem?$0ihx}O3P zs@uuVbuU6L*L^M!u6r{OuKOc2g6lp36s|i3h@;=RvZ? zcPFF5rrOECvh8r)zZSI;(!->i)OYk=6aj_(j#`sMaW?%uJ^C^o9-w8y-g$#K^S_0j za69uKOB>lEAa{|TC0{;QRx3P$rGgs6tI*B(2@a270_$d0=o3hx8)r2LGaZ?FroM## ztraofM}Y4JgC{v!DMgcpOza+++4za-BaG_9m=u}sDus+kA@TT17#UjriA+Ky44taO&6_g{oUW zu<{(o)y30;*R_0$JAp zg?kbU@plm{r=1oXYS@^mJk)mKoirB(eX$#-rWvQC4#ON^C z*}^YWVw8;C5{uCSPP2voMH<5vzFI8&vahM3@-e ztI?vz7Cseg%vu5q|1g@etsGmQZ-B6cPhKk)e#TK%Ia~NVP(z=kT`4)*!Y{hUVc~UV zG1|=*ehPAJ3;&fo`v(@j|A(sL7?g0lg?~(Xr7iqW-Djgux9@O!i+Wa%yMm3VHW>t# z;z5M);nPT9P=hRO1DKGwX87y^}d%!AuFS6BlSdVuL&OVHd{zt0oUi3X4A0s0zJ{9yZ%fHkt1qq#a z-M0J_}&xqMJ`*w9YELu9st4?up1jVAYMR6d~td`XS~pmYR==yrW2@ikd{BLS-QWnKkw!nU6Z?cjz@DJmjI&akp|SY;ge{J70vdXa z>frQ7>EJcW;;cdX+~%Cm=NRX2#*P)$gMZ#B9;4T4r0IeR()lQp?~P5uxLNDHWZaNG zV0=Uac&&<)#cz?@ee0N?J(qXds@AaQvJvLvj@z8(<7;R3^~io9EZZNio@VQ^Nn4lG z=;hSQq?>S^4NKiZ-|5**Z>e^mw^Y|jHi9?wwkj@Z@AP1kr(RfP^OS@pSzEo)iL20T zHcu0Puz7k62#4q=Ta2 zDI_yuU)lV6bRsBR}a*Ij{J zu6sNXu6qLzuKO?=!F5N0!gcoo;;8$(6CM4Ay0##^tghcjBe>raK?&9EWaql~fQ{?k z1cdAE1%9qO6%?*}3J|V)ArObU_R7kE^f}cv@7L-jZwT_Nzd-zgC{|8e;DGa%&B?>! zBU?5)>+LIY!#glO>s8nB_*Nc8S!W6ZAFwopxTiR-VNjIzQfY^H*Ssm)>7@eN%EC5= z@5It+b+dA^`PAfQQgiC=!!6NJGXwd;gF^WlghJOLtCd3e?t?=4_QW0h82z+htG_V% z40^9nBg3NSmg^&$*chUdJJh!i}^J zs3!qee(%9}CUm^U>oL-)dkG!+{D?HZpmbp{p(71|VQvJQbu<234+pSA2mkO6?VHi{ z>-$0K0Gky3G6e2~9^f5roH2=h+XR2qBhS<)pdJ!>P%-T{J*f12LXV-yZhyiq+zh8y z^q^L>zX{2;&@~A?$f~s;z8gKFCh)U#H-nqmlXfyl#c@kH)%^{y(iS73H&xSpBJ4Nq zFcNxEGKoUd9fqkUHAB4#r&&x(b<+AM+Gr;&+3Jvuh8>dboJP;~r{jP^P}w`JP)OY7 zT0%TCRsyI^-WGX?TnlwqTXuO8>fIG7pAY|gN;4pkgKhL&L5;NK(9#Jp>QZ+?3=O85 z!x#=0@W?2X2QY^2e5(15DFSMkG%jW-&?uVNGiFM`4`7fyQ>W7$1bD($VkF7)NC@zR zy@cc)Br5?rrfYxU!!knws-XRYNb+mHL(Ngp9;k2 zux=50Axv=~B#Z*n6xzb8yoZLXqA7}>FdEyCVA5vJ#cZ^YYK=3J1e=e?JX5>D`$)*- zG4t$^G0WsJ%S4h#CG%(ah3&T^c^?g7CJhqgSPjZJ-k-C8E0ia0JQc`;Q6aVQP~rDO zj-nVg#hhF39E?fM!AO%F)Mz9iK;k(^jluJ1%bAjQGUee@=$ z+Z#`yQg~|#iz%XoJ6U`AC4ht)Ug>y8i{AkVC6{{W*ean`a`zha3P31%nBM?U$?gMD zGV6t<)aLFRkz~EFgp-?|6!ER2WD;Fhc|y923XFt$r4pVPg;wE@Rfo{tbJCV6zTcg+ z<%-sMwBy+o7H_mCj8rt*&Lmtx?*ZUtM&4+jTp?LMQx^R;6}<Ez#l!t)BKKr z!D_Eg@&{2qJ}f9|50!W}v)+rs%&_898n3OihITuo@euH$`w%9&rxLl3Fu$(D_; zSMW;!qovo~JkyBC+rPsA*#6P$atQoxQGwsR00<7_MFmNxRJOr%(_c`EyCqEJkRILd7b+_UE@EIdY3D4Gkb$F6WWqGs zpYdJIgz0ogVBl*A6(w9i+oFL7NqjD3P4fy-6?#3yNl?B7c@gunDw;v9G}6w16^@-J zo4I-Rb%uHN4blp(mT!uUvS%)j(LgJRl8cw`V2? z1VvAA_9v3fYHa4Isy9mckb(7$QNwcvW+EX^P7L`BJkWNDVJxLy7Pm;e?gca)=`II> zoDRh3KyNs%l>raXpp}T~qIbiM0L2-1($n*J!zpn_jAhhjI)~&y<6-2hK;wbq&L8Jv zsk9!e8poQEf5mU7wYd%%=mlnH6)>X%oiCguj2BWbDyc%~NcjdA9+8j6|6qlV7|hV^ zfBooGJgScvOm)P7##;Jg-FTJ{8Jg|ahYTI)KGTv+)xt&^fS^>&H=4K!e5t7q9tmA) z(hu~)19Yj$wgsvuoyVyHgVd8MDsY4E_?|!@zeKkoJ_qcc=trmgaZm6p_heG2CxJDP zr8x2m7Vun|n>T`hstl?qrFEA=4p_T^bTBZ-506((ZH=zP;z`fBeoz5glK}8- z%@>6w6`ZjPsqmHRCqWYDqxMk1*U2Uk1n_YLVI%k?g3wEjdQ;^+q727d#J`hEf zO;&Yt0HNASOnqMJZVrU&KJqt5-A;C{djoR0?g}7W_oG0#ZXXb?`xGEt_e3C$x=%Y# z)y;vE#a7~}Se_g}@B`txgFr(4cCvHbN6|#C`*9##_eAh>-RFbCbyox7x*LJ0x_R{u zi^ZhYgx(!8I?$!8gITIULogW$yBwD^511-!;A9~A^*By?wJL-CRu}dl<6RHVzY#DP~OJ@gsJ-u$B&MLo^S`B-;@E9y169> z=-m0jqoQ1adc?QEli1T}`=g{^b!+hi}r`oGQApWpR=n?eo)lVILs-(l-N29AxO z^s~AOHHPQ5z{})4?K0Z*q{s%}S#8rZR7RV$P#J=bgk=$Q6-pMgKZHZjDKOiDu1pA_ zyP!6N`Ud8zCMZR11f@4S+N4t}jp0wD*KHD1i|K`wHVM>Bej!Dn1L+rd z+jO878^h1S|E<2axm$ft+(yQ3@Wi}pDF@QZejo1&_uycrJod!ImEa2Pn`7UwdT}mgdg#AYwIyiy*~!{ zCn_5B)d|2qRXDx167#Xb-=TVsDx6+liTQ}}L8o@2jP@K(HwK+b!Sw#Z-oTvBtLCqxaPrE!{0ih+AnYychcKRD zcg`~#dgC7V_;WqRP+D*|ss`30oeXsmbCcb`++-|y{9(lzF*nl>V{-%Xf~K>9yV`q< z%Y`$AIPc`&Pkahwa2{YV=}iFqWlYAHwEGlCe*CNMpL#zejl*x?eab&BZe(16QEIo^ zR2Tk%P{cMR}vUC(k_FRh`ZI3 zeg|eM?$&+@2vO1v*0@{WpcVE8ba33Qv{VLeMI++=GHNjbPxKdcY|)HFX&v#! z8qMfuP97kglK>Zdv=^ zr+Ew>uVqwb`*G7f{39rF%jog;N06jt6t|3u=-zOF$H=DVmQ(WN94YWz6xjWr$m>TF zu!{0JeAdllTqF5O$d6kcotSx{$DkkQO>70^Hy~X;pW!j0PXgk_o6v0tX_$q4LR#eG zM^y+ZD1c=nWNi`lvV`=UgK!NYQ%XI?`Gi!Id5j!FZYal3z!S1>uE$tFNc#$pQBTP1 zN{_LckRw5lv4N1J`5xmYLdGue7SP4dV8MRMmQn zqlDaD=P|w{0k-vXpR z)3*@)<#}+Xi2f~*2~0ms^pnx>=|mp`B%kR?r-I&yepC?sF(9=}pG5RSRUYFqqW=nH z9n+T*-9#^MBzg}ZJD9$c=tI!y-9*m;@)Xk#6TJvy@G{Xa2l6)4<4yy;4ny)O(YFHm zmg&QYet0o{Q?EPdCWfj75F>Lg(K}(lIuLy*knT+1Li9NpzjUHs31l$S4-ow?7|u+h zKL_MIrW<`g|6!@em__uC80J!@rxJZcy~n5~dI69XOrJ~iRYqSpcWmFW#c--={& z_!3>71k#qAip;n)&_6=58_}CD$4^Hyy@BX`kUX8}lYop;{OO=qA~~7p>w#Rv^rb}K zg(Uq9aF@4$R4M+xp#P3!J<+?ZfTT0Mf#{=JNImOFYK=L_ZzK=S)99^ox-EiRep#SUp+J2Y`MPlC6;J@-&dn zO#hPTpCEY((PJ)!{4;&#K+sc=Jd@~?flOffmqf2ZayrpB0Lf?i%nZ;ULb8JB?*OS~ z`eCAbRzm)Xeln1COrJCe^f5@@Nc7o2b};<_(N`n6o9H`%JjL{3r-S}?Bwr@_cR=1| z`d*?Ztb+U#Jpklerl+0(dNz{YUZB?lX#vE@+)4CXknBM8eL%W1Jt+YCXGo?KJ@zul zKhw7mJq^iBqE7*G9@FCngT4UCSwz1MNGa1Bi2ewY)kHrGWCha=Y-+ohmqY%E-UG-D zOkYa$u}E$sdI^yGnI1P3^sA73oapxed7kN8i2f>)hlu_IkfTgDhJoJk3dldvhXDDN z>2rymgJkpGpf3l~7Ko8~fatd&*^TJ?f%IYeu;HM8j^yb?k6R7-XZjYR_eF9t(a#5R z5!2(&1bq>bvx&Y5NEOrP5`7Pn^+bOk$ZDn^Cc1ScClr-o@pl+_YB3{1Dm_yn>TRb;`SjVGDB_5iFh5|t> z*8d1#m!2T(1ERRUB<|^Q*l5?I3<(%iOL7?Cq zPX@;@@Ea2JV7m;}FN!hLQnoiPiSu#CnDVa=un*ixKHf%hvK*e27cWYpnQ>{JbaKJs(psH@ zvYx|!EH14b(1GNN#-)?zHIOz#f>LZjP};@`IuwqZpflk22|5$rvY@ox5%l5~K>KpJ zFHvm@9Zn@E^d90>=qxHhp(AaEZM11s)X!)*6#9jYPQ>wnP=B=_yOo?X#oL>Dq0p@u zH$nHrgwXs@#e)V?oFcA2H<<36C=@O*(+AjeMm2q)O=ncoGi*Aenm)*;GpgyQ+jK@X z{S2GVsHO*OI-{CC*rqe8=|gNfqnbX{rZcMP!)!XEnm*j7Gpgxl+H^)WeS}SCRMSV> zbVfCOj7?`$(?{BLMm7B`o6e}FkG1KHYI>$kXB2dv>~T!zsb*C3kGJ_5)%+7|envI_ zM4O*c&40Gd~~Wb-qs`OmTW8P)ugZGJ{I|G73lqndw;&CjUjKhNf8RP#@@`5D#x zSvEhTntz(j~~Zu2v$`7f~f8P)t3+Wd@a{)=pWMm7Hoo1an5pKbFqs`+Qy{ETY; z9Gjm}%|FZLXH@g&+Wd@a{ydwXQO%!k^E0aX3v7NyHGh%K�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 literal 0 HcmV?d00001 diff --git a/flake.nix b/flake.nix index 36849ddf..cb70b5bb 100644 --- a/flake.nix +++ b/flake.nix @@ -31,13 +31,16 @@ openssl_1_1 zlib libmicrohttpd - ] else [ + libsodium + secp256k1 + ] else + [ (openssl_1_1.override { static = true; }).dev (zlib.override { shared = false; }).dev ] - ++ optionals (!stdenv.isDarwin) [ pkgsStatic.libmicrohttpd.dev ] + ++ optionals (!stdenv.isDarwin) [ pkgsStatic.libmicrohttpd.dev pkgsStatic.libsodium.dev secp256k1 ] ++ optionals stdenv.isDarwin [ (libiconv.override { enableStatic = true; enableShared = false; }) ] - ++ optionals stdenv.isDarwin (forEach [ libmicrohttpd.dev gmp.dev nettle.dev (gnutls.override { withP11-kit = false; }).dev libtasn1.dev libidn2.dev libunistring.dev gettext ] (x: x.overrideAttrs(oldAttrs: rec { configureFlags = (oldAttrs.configureFlags or []) ++ [ "--enable-static" "--disable-shared" ]; dontDisableStatic = true; }))) + ++ optionals stdenv.isDarwin (forEach [ libmicrohttpd.dev libsodium.dev secp256k1 gmp.dev nettle.dev (gnutls.override { withP11-kit = false; }).dev libtasn1.dev libidn2.dev libunistring.dev gettext ] (x: x.overrideAttrs(oldAttrs: rec { configureFlags = (oldAttrs.configureFlags or []) ++ [ "--enable-static" "--disable-shared" ]; dontDisableStatic = true; }))) ++ optionals staticGlibc [ glibc.static ]; dontAddStaticConfigureFlags = stdenv.isDarwin; diff --git a/test/regression-tests.ans b/test/regression-tests.ans index 61191ea4..e2057210 100644 --- a/test/regression-tests.ans +++ b/test/regression-tests.ans @@ -6,16 +6,23 @@ Test_Fift_bug_div_default 1ac42861ce96b2896001c587f65e9afe1617db48859f19c2f4e306 Test_Fift_bug_newlize_default e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 Test_Fift_bug_ufits_default 51bf5a9f1ed7633a193f6fdd17a7a3af8e032dfe72a9669c85e8639aa8a7c195 Test_Fift_contfrac_default 09ebce5c91bcb70696c6fb6981d82dc3b9e3444dab608a7a1b044c0ddd778a96 +Test_Fift_test_adddiv_default 8516934b6fe143062864a90c76271c1d6b9b83bcb07cd09c43ac5d3e41997e6b Test_Fift_test_asm_nested_program_default 2a19decac67adb719c444ab42879a5d894447d450d1998848c469605531076ad +Test_Fift_test_bls_default 362b67d27e3081f75a59d3d2ca5891fd000cbc061d741764924362aae4235737 +Test_Fift_test_bls_ops_default fb0a81d4f247ab806318b051d12158f7f1aacc5513db5f8cb0fdca21dbb4f9f4 +Test_Fift_test_deep_stack_ops_default df812efbadfffa8a3f553416f68c8c4435bac07266f84562cf98fe5f0dd62a52 Test_Fift_test_default 4e44b3382963ec89f7b5c8f2ebd85da3bc8aebad5b49f5b11b14075061477b4d Test_Fift_test_dict_default a9c8cbcfdece5573185022cea07f59f1bc404e5d879e5157a5745757f8ee0525 Test_Fift_test_disasm_default dacaa555f5f217b2373e01e3bcd59634e480f5759dcc43edbdef35273ae38492 Test_Fift_test_fiftext_default 2b0db5d4d4bfbc705b959cc787540d7b3a21a71469eac54756e76953f0d9afca Test_Fift_test_fixed_default 278a19d56b773102caf5c1fe2997ea6c8d0d9e720eff8503feede6398a197eec +Test_Fift_test_hash_ext_default 686fc5680feca5b3bb207768215b27f6872a95128762dee0d7f2c88bc492d62d Test_Fift_test_hmap_default c269246882039824bb5822e896c3e6e82ef8e1251b6b251f5af8ea9fb8d05067 Test_Fift_test_namespaces_default e6419619c51332fb5e8bf22043ef415db686c47fe24f03061e5ad831014e7c6c +Test_Fift_test_rist255_default f4d7558f200a656934f986145c19b1dedbe2ad029292a5a975576d6891e25fc4 Test_Fift_test_sort2_default 9b57d47e6a10e7d1bbb565db35400debf2f963031f434742a702ec76555a5d3a Test_Fift_test_sort_default 9b57d47e6a10e7d1bbb565db35400debf2f963031f434742a702ec76555a5d3a +Test_Fift_test_tvm_runvm_default ff3d2a4031b543c18d6b555f0a1f1a891c7825e6d1e2e9beb4bf13b37441450b Test_Fift_testvm2_default 8a6e35fc0224398be9d2de39d31c86ea96965ef1eca2aa9e0af2303150ed4a7b Test_Fift_testvm3_default 3c1b77471c5fd914ed8b5f528b9faed618e278693f5030b953ff150e543864ae Test_Fift_testvm4_default 8a6e35fc0224398be9d2de39d31c86ea96965ef1eca2aa9e0af2303150ed4a7b diff --git a/third-party/blst b/third-party/blst new file mode 160000 index 00000000..e9dfc5ee --- /dev/null +++ b/third-party/blst @@ -0,0 +1 @@ +Subproject commit e9dfc5ee724b5b25d50a3b6226bee8c2c9d5e65d diff --git a/tonlib/CMakeLists.txt b/tonlib/CMakeLists.txt index ae5bbe86..72c59c4d 100644 --- a/tonlib/CMakeLists.txt +++ b/tonlib/CMakeLists.txt @@ -62,7 +62,7 @@ target_include_directories(tonlib PUBLIC $/.. $ ) -target_link_libraries(tonlib PRIVATE tdactor adnllite tl_lite_api tl-lite-utils ton_crypto ton_block lite-client-common smc-envelope emulator_static) +target_link_libraries(tonlib PRIVATE tdactor adnllite tl_lite_api tl-lite-utils ton_crypto ton_crypto_core ton_block lite-client-common smc-envelope emulator_static) target_link_libraries(tonlib PUBLIC tdutils tl_tonlib_api) if (TONLIB_ENABLE_JNI AND NOT ANDROID) # jni is available by default on Android @@ -133,7 +133,7 @@ if (NOT TON_USE_ABSEIL) if (WIN32) set(WINGETOPT_TARGET wingetopt) endif() -install(TARGETS tdnet keys crc32c tdactor adnllite tl_api tl-utils tl_lite_api tl-lite-utils ton_crypto ton_block smc-envelope ${WINGETOPT_TARGET} +install(TARGETS tdnet keys crc32c tdactor adnllite tl_api tl-utils tl_lite_api tl-lite-utils ton_crypto ton_crypto_core ton_block smc-envelope ${WINGETOPT_TARGET} tdutils tl_tonlib_api tonlib lite-client-common tddb_utils emulator_static Tonlib EXPORT Tonlib LIBRARY DESTINATION lib ARCHIVE DESTINATION lib diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index e29d0b08..cd1ad938 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -847,8 +847,9 @@ class Query { return td::Status::Error("estimate_fee: action_set_code unsupported"); case block::gen::OutAction::action_send_msg: { block::gen::OutAction::Record_action_send_msg act_rec; - // mode: +128 = attach all remaining balance, +64 = attach all remaining balance of the inbound message, +1 = pay message fees, +2 = skip if message cannot be sent - if (!tlb::unpack_exact(cs, act_rec) || (act_rec.mode & ~0xe3) || (act_rec.mode & 0xc0) == 0xc0) { + // mode: +128 = attach all remaining balance, +64 = attach all remaining balance of the inbound message, + // +1 = pay message fees, +2 = skip if message cannot be sent, +16 = bounce if action fails + if (!tlb::unpack_exact(cs, act_rec) || (act_rec.mode & ~0xf3) || (act_rec.mode & 0xc0) == 0xc0) { return td::Status::Error("estimate_fee: can't parse send_msg"); } block::gen::MessageRelaxed::Record msg; @@ -1874,12 +1875,12 @@ class RunEmulator : public td::actor::Actor { return; } - auto r_config = block::Config::extract_from_state(mc_state_root_, 0b11'11111111); + auto r_config = block::ConfigInfo::extract_config(mc_state_root_, 0b11'11111111); if (r_config.is_error()) { check(r_config.move_as_error()); return; } - std::unique_ptr config = r_config.move_as_ok(); + std::unique_ptr config = r_config.move_as_ok(); block::gen::ShardStateUnsplit::Record shard_state; if (!tlb::unpack_cell(mc_state_root_, shard_state)) { @@ -1904,7 +1905,13 @@ class RunEmulator : public td::actor::Actor { return; } + auto prev_blocks_info = config->get_prev_blocks_info(); + if (prev_blocks_info.is_error()) { + check(prev_blocks_info.move_as_error()); + return; + } emulator::TransactionEmulator trans_emulator(std::move(*config)); + trans_emulator.set_prev_blocks_info(prev_blocks_info.move_as_ok()); trans_emulator.set_libs(std::move(libraries)); trans_emulator.set_rand_seed(block_id_.rand_seed); td::Result emulation_result = trans_emulator.emulate_transactions_chain(std::move(account), std::move(transactions_)); diff --git a/utils/opcode-timing.cpp b/utils/opcode-timing.cpp index dc6ac75f..f50d7041 100644 --- a/utils/opcode-timing.cpp +++ b/utils/opcode-timing.cpp @@ -8,16 +8,22 @@ #include "common/bigint.hpp" #include "td/utils/base64.h" -#include "td/utils/tests.h" #include "td/utils/ScopeGuard.h" #include "td/utils/StringBuilder.h" +#include "td/utils/Timer.h" -td::Ref to_cell(const unsigned char *buff, int bits) { +td::Ref to_cell(td::Slice s) { + if (s.size() >= 4 && s.substr(0, 4) == "boc:") { + s.remove_prefix(4); + auto boc = td::base64_decode(s).move_as_ok(); + return vm::std_boc_deserialize(boc).move_as_ok(); + } + unsigned char buff[128]; + const int bits = (int)td::bitstring::parse_bitstring_hex_literal(buff, sizeof(buff), s.begin(), s.end()); + CHECK(bits >= 0); return vm::CellBuilder().store_bits(buff, bits, 0).finalize(); } -long double timingBaseline; - typedef struct { long double mean; long double stddev; @@ -56,56 +62,60 @@ typedef struct { bool errored; } runtimeStats; -runInfo time_run_vm(td::Slice command) { - unsigned char buff[128]; - const int bits = (int)td::bitstring::parse_bitstring_hex_literal(buff, sizeof(buff), command.begin(), command.end()); - CHECK(bits >= 0); - - const auto cell = to_cell(buff, bits); - +vm::Stack prepare_stack(td::Slice command) { + const auto cell = to_cell(command); vm::init_op_cp0(); vm::DictionaryBase::get_empty_dictionary(); - - class Logger : public td::LogInterface { - public: - void append(td::CSlice slice) override { - res.append(slice.data(), slice.size()); - } - std::string res; - }; - static Logger logger; - logger.res = ""; - td::set_log_fatal_error_callback([](td::CSlice message) { td::default_log_interface->append(logger.res); }); - vm::VmLog log{&logger, td::LogOptions::plain()}; - log.log_options.level = 4; - log.log_options.fix_newlines = true; - log.log_mask |= vm::VmLog::DumpStack; - vm::Stack stack; try { - vm::GasLimits gas_limit(10000, 10000); - - std::clock_t cStart = std::clock(); + vm::GasLimits gas_limit; int ret = vm::run_vm_code(vm::load_cell_slice_ref(cell), stack, 0 /*flags*/, nullptr /*data*/, - std::move(log) /*VmLog*/, nullptr, &gas_limit); + vm::VmLog{}, nullptr, &gas_limit, {}, {}, nullptr, 4); + CHECK(ret == 0); + } catch (...) { + LOG(FATAL) << "catch unhandled exception"; + } + return stack; +} + +runInfo time_run_vm(td::Slice command, td::Ref stack) { + const auto cell = to_cell(command); + vm::init_op_cp0(); + vm::DictionaryBase::get_empty_dictionary(); + CHECK(stack.is_unique()); + try { + vm::GasLimits gas_limit; + vm::VmState vm{vm::load_cell_slice_ref(cell), std::move(stack), gas_limit, 0, {}, vm::VmLog{}, {}, {}}; + vm.set_global_version(4); + std::clock_t cStart = std::clock(); + int ret = ~vm.run(); std::clock_t cEnd = std::clock(); - const auto time = (1000.0 * static_cast(cEnd - cStart) / CLOCKS_PER_SEC) - timingBaseline; - return {time >= 0 ? time : 0, gas_limit.gas_consumed(), ret}; + const auto time = (1000.0 * static_cast(cEnd - cStart) / CLOCKS_PER_SEC); + return {time >= 0 ? time : 0, vm.gas_consumed(), ret}; } catch (...) { LOG(FATAL) << "catch unhandled exception"; return {-1, -1, 1}; } } -runtimeStats averageRuntime(td::Slice command) { - const size_t samples = 5000; +runtimeStats averageRuntime(td::Slice command, const vm::Stack& stack) { + size_t samples = 100000; runInfo total; std::vector values; values.reserve(samples); - for(size_t i=0; i(true, stack)); + const auto value_code = time_run_vm(command, td::Ref(true, stack)); + runInfo value{value_code.runtime - value_empty.runtime, value_code.gasUsage - value_empty.gasUsage, + value_code.vmReturnCode}; values.push_back(value); total += value; + if (t0.elapsed() > 2.0 && i + 1 >= 20) { + samples = i + 1; + values.resize(samples); + break; + } } const auto runtimeMean = total.runtime / static_cast(samples); const auto gasMean = static_cast(total.gasUsage) / static_cast(samples); @@ -120,42 +130,39 @@ runtimeStats averageRuntime(td::Slice command) { errored = errored || value.errored(); } return { - {runtimeMean, sqrt(runtimeDiffSum / static_cast(samples))}, - {gasMean, sqrt(gasDiffSum / static_cast(samples))}, + {runtimeMean, sqrtl(runtimeDiffSum / static_cast(samples))}, + {gasMean, sqrtl(gasDiffSum / static_cast(samples))}, errored }; } runtimeStats timeInstruction(const std::string& setupCode, const std::string& toMeasure) { - const auto setupCodeTime = averageRuntime(setupCode); - const auto totalCodeTime = averageRuntime(setupCode + toMeasure); - return { - {totalCodeTime.runtime.mean - setupCodeTime.runtime.mean, totalCodeTime.runtime.stddev}, - {totalCodeTime.gasUsage.mean - setupCodeTime.gasUsage.mean, totalCodeTime.gasUsage.stddev}, - false - }; + vm::Stack stack = prepare_stack(setupCode); + return averageRuntime(toMeasure, stack); } int main(int argc, char** argv) { + SET_VERBOSITY_LEVEL(verbosity_ERROR); if(argc != 2 && argc != 3) { std::cerr << "This utility compares the timing of VM execution against the gas used.\n" "It can be used to discover opcodes or opcode sequences that consume an " "inordinate amount of computational resources relative to their gas cost.\n" "\n" - "The utility expects two command line arguments, each a hex string: \n" + "The utility expects two command line arguments: \n" "The TVM code used to set up the stack and VM state followed by the TVM code to measure.\n" "For example, to test the DIVMODC opcode:\n" "\t$ " << argv[0] << " 80FF801C A90E 2>/dev/null\n" "\tOPCODE,runtime mean,runtime stddev,gas mean,gas stddev\n" "\tA90E,0.0066416,0.00233496,26,0\n" "\n" - "Usage: " << argv[0] << - " [TVM_SETUP_BYTECODE_HEX] TVM_BYTECODE_HEX" << std::endl << std::endl; + "Usage: " << argv[0] << " [TVM_SETUP_BYTECODE] TVM_BYTECODE\n" + "\tBYTECODE is either:\n" + "\t1. hex-encoded string (e.g. A90E for DIVMODC)\n" + "\t2. boc: (e.g. boc:te6ccgEBAgEABwABAogBAAJ7)" << std::endl << std::endl; return 1; } - std::cout << "OPCODE,runtime mean,runtime stddev,gas mean,gas stddev" << std::endl; - timingBaseline = averageRuntime("").runtime.mean; + std::cout << "OPCODE,runtime mean,runtime stddev,gas mean,gas stddev,error" << std::endl; std::string setup, code; if(argc == 2) { setup = ""; @@ -165,7 +172,7 @@ int main(int argc, char** argv) { code = argv[2]; } const auto time = timeInstruction(setup, code); - std::cout << code << "," << time.runtime.mean << "," << time.runtime.stddev << "," << - time.gasUsage.mean << "," << time.gasUsage.stddev << std::endl; + std::cout << std::fixed << std::setprecision(9) << code << "," << time.runtime.mean << "," << time.runtime.stddev + << "," << time.gasUsage.mean << "," << time.gasUsage.stddev << "," << (int)time.errored << std::endl; return 0; } diff --git a/validator/impl/collator-impl.h b/validator/impl/collator-impl.h index 7b136953..93cab81a 100644 --- a/validator/impl/collator-impl.h +++ b/validator/impl/collator-impl.h @@ -32,6 +32,7 @@ #include "vm/cells/MerkleUpdate.h" #include #include +#include "common/global-version.h" namespace ton { @@ -40,7 +41,7 @@ using td::Ref; class Collator final : public td::actor::Actor { static constexpr int supported_version() { - return 3; + return SUPPORTED_VERSION; } static constexpr long long supported_capabilities() { return ton::capCreateStatsEnabled | ton::capBounceMsgBody | ton::capReportVersion | ton::capShortDequeue; diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index db86cef1..54941f21 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -530,6 +530,7 @@ bool Collator::unpack_last_mc_state() { mc_state_root, block::ConfigInfo::needShardHashes | block::ConfigInfo::needLibraries | block::ConfigInfo::needValidatorSet | block::ConfigInfo::needWorkchainInfo | block::ConfigInfo::needCapabilities | + block::ConfigInfo::needPrevBlocks | (is_masterchain() ? block::ConfigInfo::needAccountsRoot | block::ConfigInfo::needSpecialSmc : 0)); if (res.is_error()) { td::Status err = res.move_as_error(); @@ -2288,7 +2289,8 @@ td::Result> Collator::impl_crea return td::Status::Error( -669, "cannot create action phase of a new transaction for smart contract "s + acc->addr.to_hex()); } - if (trans->bounce_enabled && (!trans->compute_phase->success || trans->action_phase->state_exceeds_limits) && + if (trans->bounce_enabled && + (!trans->compute_phase->success || trans->action_phase->state_exceeds_limits || trans->action_phase->bounce) && !trans->prepare_bounce_phase(*action_phase_cfg)) { return td::Status::Error( -669, "cannot create bounce phase of a new transaction for smart contract "s + acc->addr.to_hex()); diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index 69861ba3..1a4f8085 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -1192,6 +1192,7 @@ void LiteQuery::finish_getAccountState(td::BufferSlice shard_proof) { return; } auto rconfig = config.move_as_ok(); + rconfig->set_block_id_ext(mc_state_->get_block_id()); acc_state_promise_.set_value(std::make_tuple( std::move(acc_csr), sstate.gen_utime, sstate.gen_lt, std::move(rconfig) )); diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index 7a5934b4..41955897 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -679,7 +679,7 @@ bool ValidateQuery::try_unpack_mc_state() { mc_state_root_, block::ConfigInfo::needShardHashes | block::ConfigInfo::needLibraries | block::ConfigInfo::needValidatorSet | block::ConfigInfo::needWorkchainInfo | block::ConfigInfo::needStateExtraRoot | - block::ConfigInfo::needCapabilities | + block::ConfigInfo::needCapabilities | block::ConfigInfo::needPrevBlocks | (is_masterchain() ? block::ConfigInfo::needAccountsRoot | block::ConfigInfo::needSpecialSmc : 0)); if (res.is_error()) { return fatal_error(-666, "cannot extract configuration from reference masterchain state "s + mc_blkid_.to_str() + @@ -782,10 +782,20 @@ bool ValidateQuery::fetch_config_params() { storage_phase_cfg_.delete_due_limit)) { return fatal_error("cannot unpack current gas prices and limits from masterchain configuration"); } + storage_phase_cfg_.enable_due_payment = config_->get_global_version() >= 4; compute_phase_cfg_.block_rand_seed = rand_seed_; compute_phase_cfg_.libraries = std::make_unique(config_->get_libraries_root(), 256); compute_phase_cfg_.max_vm_data_depth = size_limits.max_vm_data_depth; compute_phase_cfg_.global_config = config_->get_root_cell(); + compute_phase_cfg_.global_version = config_->get_global_version(); + if (compute_phase_cfg_.global_version >= 4) { + auto prev_blocks_info = config_->get_prev_blocks_info(); + if (prev_blocks_info.is_error()) { + return fatal_error(prev_blocks_info.move_as_error_prefix( + "cannot fetch prev blocks info from masterchain configuration: ")); + } + compute_phase_cfg_.prev_blocks_info = prev_blocks_info.move_as_ok(); + } compute_phase_cfg_.suspended_addresses = config_->get_suspended_addresses(now_); } { @@ -808,6 +818,8 @@ bool ValidateQuery::fetch_config_params() { action_phase_cfg_.workchains = &config_->get_workchain_list(); action_phase_cfg_.bounce_msg_body = (config_->has_capability(ton::capBounceMsgBody) ? 256 : 0); action_phase_cfg_.size_limits = size_limits; + action_phase_cfg_.action_fine_enabled = config_->get_global_version() >= 4; + action_phase_cfg_.bounce_on_fail_enabled = config_->get_global_version() >= 4; action_phase_cfg_.mc_blackhole_addr = config_->get_burning_config().blackhole_addr; } { @@ -4507,7 +4519,8 @@ bool ValidateQuery::check_one_transaction(block::Account& account, ton::LogicalT return reject_query(PSTRING() << "cannot re-create action phase of transaction " << lt << " for smart contract " << addr.to_hex()); } - if (trs->bounce_enabled && (!trs->compute_phase->success || trs->action_phase->state_exceeds_limits) && + if (trs->bounce_enabled && + (!trs->compute_phase->success || trs->action_phase->state_exceeds_limits || trs->action_phase->bounce) && !trs->prepare_bounce_phase(action_phase_cfg_)) { return reject_query(PSTRING() << "cannot re-create bounce phase of transaction " << lt << " for smart contract " << addr.to_hex()); diff --git a/validator/impl/validate-query.hpp b/validator/impl/validate-query.hpp index 13a05ec4..7d15dcfe 100644 --- a/validator/impl/validate-query.hpp +++ b/validator/impl/validate-query.hpp @@ -28,6 +28,7 @@ #include #include #include +#include "common/global-version.h" namespace ton { @@ -108,7 +109,7 @@ inline ErrorCtxSet ErrorCtx::set_guard(std::vector str_list) { class ValidateQuery : public td::actor::Actor { static constexpr int supported_version() { - return 3; + return SUPPORTED_VERSION; } static constexpr long long supported_capabilities() { return ton::capCreateStatsEnabled | ton::capBounceMsgBody | ton::capReportVersion | ton::capShortDequeue; From 049ed0c73735d014572a6016f45afc1625b88524 Mon Sep 17 00:00:00 2001 From: neodiX42 Date: Thu, 25 May 2023 01:16:02 -0500 Subject: [PATCH 006/351] Update win-2019-compile.yml (#708) --- .github/workflows/win-2019-compile.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/win-2019-compile.yml b/.github/workflows/win-2019-compile.yml index 190c03e1..11ba7565 100644 --- a/.github/workflows/win-2019-compile.yml +++ b/.github/workflows/win-2019-compile.yml @@ -51,8 +51,8 @@ jobs: - name: Install pre-compiled OpenSSL Win64 run: | - curl -Lo openssl-1.1.1o.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/openssl-1.1.1o.zip - jar xf openssl-1.1.1o.zip + curl -Lo openssl-1.1.1j.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/openssl-1.1.1j.zip + jar xf openssl-1.1.1j.zip - name: Install pre-compiled libmicrohttpd Win64 run: | @@ -72,7 +72,7 @@ jobs: echo %SODIUM_DIR% mkdir build cd build - cmake -DCMAKE_BUILD_TYPE=Release -DSODIUM_USE_STATIC_LIBS=1 -DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include -DSECP256K1_LIBRARY=%root%\secp256k1\bin\x64\Release\v142\static\secp256k1.lib -DREADLINE_INCLUDE_DIR=%root%\readline-5.0-1-lib\include\readline -DREADLINE_LIBRARY=%root%\readline-5.0-1-lib\lib\readline.lib -DPORTABLE=1 -DZLIB_FOUND=1 -DMHD_FOUND=1 -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.75-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.75-w32-bin\x86_64\VS2019\Release-static -DZLIB_INCLUDE_DIR=%root%\zlib -DZLIB_LIBRARY=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=%root%/openssl-1.1/x64/include -DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-1.1/x64/lib/libcrypto.lib -DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj /W0" .. + cmake -DCMAKE_BUILD_TYPE=Release -DSODIUM_USE_STATIC_LIBS=1 -DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include -DSECP256K1_LIBRARY=%root%\secp256k1\bin\x64\Release\v142\static\secp256k1.lib -DREADLINE_INCLUDE_DIR=%root%\readline-5.0-1-lib\include\readline -DREADLINE_LIBRARY=%root%\readline-5.0-1-lib\lib\readline.lib -DPORTABLE=1 -DZLIB_FOUND=1 -DMHD_FOUND=1 -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.75-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.75-w32-bin\x86_64\VS2019\Release-static -DZLIB_INCLUDE_DIR=%root%\zlib -DZLIB_LIBRARY=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=%root%/openssl-1.1.1j/include -DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-1.1.1j/lib/libcrypto_static.lib -DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj /W0" .. cmake --build . --target storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator --config Release - name: Show executables From 6b941dcceb287f12100215095e3f7cfcc3ddebb8 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Sat, 27 May 2023 21:22:31 +0300 Subject: [PATCH 007/351] Fix returning config from LS, add extra c7 elements in getmethods (#713) Co-authored-by: SpyCheese --- crypto/smc-envelope/SmartContract.cpp | 49 ++++++++++++++++----------- crypto/smc-envelope/SmartContract.h | 11 +++++- emulator/emulator-extern.cpp | 27 +++++++++++++++ emulator/emulator-extern.h | 8 +++++ emulator/emulator_export_list | 1 + emulator/tvm-emulator.hpp | 4 +++ tonlib/tonlib/LastConfig.cpp | 6 ++-- tonlib/tonlib/LastConfig.h | 1 + tonlib/tonlib/TonlibClient.cpp | 11 ++++-- validator/impl/liteserver.cpp | 25 ++++++++++---- 10 files changed, 111 insertions(+), 32 deletions(-) diff --git a/crypto/smc-envelope/SmartContract.cpp b/crypto/smc-envelope/SmartContract.cpp index 4103096c..8e95670a 100644 --- a/crypto/smc-envelope/SmartContract.cpp +++ b/crypto/smc-envelope/SmartContract.cpp @@ -120,7 +120,7 @@ td::Ref prepare_vm_stack(td::RefInt256 amount, td::Ref return stack_ref; } -td::Ref prepare_vm_c7(SmartContract::Args args) { +td::Ref prepare_vm_c7(SmartContract::Args args, td::Ref code) { td::BitArray<256> rand_seed; if (args.rand_seed) { rand_seed = args.rand_seed.unwrap(); @@ -139,10 +139,7 @@ td::Ref prepare_vm_c7(SmartContract::Args args) { if (args.address) { td::BigInt256 dest_addr; dest_addr.import_bits((*args.address).addr.as_bitslice()); - cb.store_ones(1) - .store_zeroes(2) - .store_long((*args.address).workchain, 8) - .store_int256(dest_addr, 256); + cb.store_ones(1).store_zeroes(2).store_long((*args.address).workchain, 8).store_int256(dest_addr, 256); } auto address = cb.finalize(); auto config = td::Ref(); @@ -151,20 +148,32 @@ td::Ref prepare_vm_c7(SmartContract::Args args) { config = (*args.config)->get_root_cell(); } - auto tuple = vm::make_tuple_ref( - td::make_refint(0x076ef1ea), // [ magic:0x076ef1ea - td::make_refint(0), // actions:Integer - td::make_refint(0), // msgs_sent:Integer - td::make_refint(now), // unixtime:Integer - td::make_refint(0), //TODO: // block_lt:Integer - td::make_refint(0), //TODO: // trans_lt:Integer - std::move(rand_seed_int), // rand_seed:Integer - block::CurrencyCollection(args.balance).as_vm_tuple(), // balance_remaining:[Integer (Maybe Cell)] - vm::load_cell_slice_ref(address), // myself:MsgAddressInt - vm::StackEntry::maybe(config) //vm::StackEntry::maybe(td::Ref()) - ); // global_config:(Maybe Cell) ] = SmartContractInfo; + std::vector tuple = { + td::make_refint(0x076ef1ea), // [ magic:0x076ef1ea + td::make_refint(0), // actions:Integer + td::make_refint(0), // msgs_sent:Integer + td::make_refint(now), // unixtime:Integer + td::make_refint(0), //TODO: // block_lt:Integer + td::make_refint(0), //TODO: // trans_lt:Integer + std::move(rand_seed_int), // rand_seed:Integer + block::CurrencyCollection(args.balance).as_vm_tuple(), // balance_remaining:[Integer (Maybe Cell)] + vm::load_cell_slice_ref(address), // myself:MsgAddressInt + vm::StackEntry::maybe(config) //vm::StackEntry::maybe(td::Ref()) + }; + if (args.config && args.config.value()->get_global_version() >= 4) { + tuple.push_back(code.not_null() ? code : vm::StackEntry{}); // code:Cell + tuple.push_back(block::CurrencyCollection::zero().as_vm_tuple()); // in_msg_value:[Integer (Maybe Cell)] + tuple.push_back(td::zero_refint()); // storage_fees:Integer + + // See crypto/block/mc-config.cpp#2115 (get_prev_blocks_info) + // [ wc:Integer shard:Integer seqno:Integer root_hash:Integer file_hash:Integer] = BlockId; + // [ last_mc_blocks:[BlockId...] + // prev_key_block:BlockId ] : PrevBlocksInfo + tuple.push_back(args.prev_blocks_info ? args.prev_blocks_info.value() : vm::StackEntry{}); // prev_block_info + } + auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); //LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple).to_string(); - return vm::make_tuple_ref(std::move(tuple)); + return vm::make_tuple_ref(std::move(tuple_ref)); } SmartContract::Answer run_smartcont(SmartContract::State state, td::Ref stack, td::Ref c7, @@ -282,7 +291,7 @@ td::Ref SmartContract::get_init_state() const { SmartContract::Answer SmartContract::run_method(Args args) { if (!args.c7) { - args.c7 = prepare_vm_c7(args); + args.c7 = prepare_vm_c7(args, state_.code); } if (!args.limits) { bool is_internal = args.get_method_id().ok() == 0; @@ -302,7 +311,7 @@ SmartContract::Answer SmartContract::run_method(Args args) { SmartContract::Answer SmartContract::run_get_method(Args args) const { if (!args.c7) { - args.c7 = prepare_vm_c7(args); + args.c7 = prepare_vm_c7(args, state_.code); } if (!args.limits) { args.limits = vm::GasLimits{1000000, 1000000}; diff --git a/crypto/smc-envelope/SmartContract.h b/crypto/smc-envelope/SmartContract.h index ce349de3..dd299220 100644 --- a/crypto/smc-envelope/SmartContract.h +++ b/crypto/smc-envelope/SmartContract.h @@ -70,6 +70,7 @@ class SmartContract : public td::CntObject { td::optional address; td::optional> config; td::optional libraries; + td::optional> prev_blocks_info; Args() { } @@ -124,7 +125,7 @@ class SmartContract : public td::CntObject { this->address = address; return std::move(*this); } - Args&& set_config(std::shared_ptr& config) { + Args&& set_config(const std::shared_ptr& config) { this->config = config; return std::move(*this); } @@ -132,6 +133,14 @@ class SmartContract : public td::CntObject { this->libraries = libraries; return std::move(*this); } + Args&& set_prev_blocks_info(td::Ref tuple) { + if (tuple.is_null()) { + this->prev_blocks_info = {}; + } else { + this->prev_blocks_info = std::move(tuple); + } + return std::move(*this); + } Args&& set_vm_verbosity_level(int vm_log_verbosity_level) { this->vm_log_verbosity_level = vm_log_verbosity_level; return std::move(*this); diff --git a/emulator/emulator-extern.cpp b/emulator/emulator-extern.cpp index 0ffc316a..971cdcdb 100644 --- a/emulator/emulator-extern.cpp +++ b/emulator/emulator-extern.cpp @@ -448,6 +448,33 @@ bool tvm_emulator_set_c7(void *tvm_emulator, const char *address, uint32_t unixt return true; } +bool tvm_emulator_set_prev_blocks_info(void *tvm_emulator, const char* info_boc) { + auto emulator = static_cast(tvm_emulator); + + if (info_boc != nullptr) { + auto info_cell = boc_b64_to_cell(info_boc); + if (info_cell.is_error()) { + LOG(ERROR) << "Can't deserialize previous blocks boc: " << info_cell.move_as_error(); + return false; + } + vm::StackEntry info_value; + if (!info_value.deserialize(info_cell.move_as_ok())) { + LOG(ERROR) << "Can't deserialize previous blocks tuple"; + return false; + } + if (info_value.is_null()) { + emulator->set_prev_blocks_info({}); + } else if (info_value.is_tuple()) { + emulator->set_prev_blocks_info(info_value.as_tuple()); + } else { + LOG(ERROR) << "Can't set previous blocks tuple: not a tuple"; + return false; + } + } + + return true; +} + bool tvm_emulator_set_gas_limit(void *tvm_emulator, int64_t gas_limit) { auto emulator = static_cast(tvm_emulator); emulator->set_gas_limit(gas_limit); diff --git a/emulator/emulator-extern.h b/emulator/emulator-extern.h index 4409608f..ce920f98 100644 --- a/emulator/emulator-extern.h +++ b/emulator/emulator-extern.h @@ -167,6 +167,14 @@ EMULATOR_EXPORT bool tvm_emulator_set_libraries(void *tvm_emulator, const char * */ EMULATOR_EXPORT bool tvm_emulator_set_c7(void *tvm_emulator, const char *address, uint32_t unixtime, uint64_t balance, const char *rand_seed_hex, const char *config); +/** + * @brief Set tuple of previous blocks (13th element of c7) + * @param tvm_emulator Pointer to TVM emulator + * @param info_boc Base64 encoded BoC serialized TVM tuple (VmStackValue). + * @return true in case of success, false in case of error + */ +EMULATOR_EXPORT bool tvm_emulator_set_prev_blocks_info(void *tvm_emulator, const char* info_boc); + /** * @brief Set TVM gas limit * @param tvm_emulator Pointer to TVM emulator diff --git a/emulator/emulator_export_list b/emulator/emulator_export_list index acd79df8..e70166e7 100644 --- a/emulator/emulator_export_list +++ b/emulator/emulator_export_list @@ -14,6 +14,7 @@ _emulator_set_verbosity_level _tvm_emulator_create _tvm_emulator_set_libraries _tvm_emulator_set_c7 +_tvm_emulator_set_prev_blocks_info _tvm_emulator_set_gas_limit _tvm_emulator_set_debug_enabled _tvm_emulator_run_get_method diff --git a/emulator/tvm-emulator.hpp b/emulator/tvm-emulator.hpp index 46e2538d..dafa2a5f 100644 --- a/emulator/tvm-emulator.hpp +++ b/emulator/tvm-emulator.hpp @@ -33,6 +33,10 @@ public: } } + void set_prev_blocks_info(td::Ref tuple) { + args_.set_prev_blocks_info(std::move(tuple)); + } + void set_debug_enabled(bool debug_enabled) { args_.set_debug_enabled(debug_enabled); } diff --git a/tonlib/tonlib/LastConfig.cpp b/tonlib/tonlib/LastConfig.cpp index 960d5994..bcc3c081 100644 --- a/tonlib/tonlib/LastConfig.cpp +++ b/tonlib/tonlib/LastConfig.cpp @@ -62,7 +62,8 @@ void LastConfig::with_last_block(td::Result r_last_block) { } auto last_block = r_last_block.move_as_ok(); - client_.send_query(ton::lite_api::liteServer_getConfigAll(0, create_tl_lite_block_id(last_block.last_block_id)), + client_.send_query(ton::lite_api::liteServer_getConfigAll(block::ConfigInfo::needPrevBlocks, + create_tl_lite_block_id(last_block.last_block_id)), [this](auto r_config) { this->on_config(std::move(r_config)); }); } @@ -92,7 +93,7 @@ td::Status LastConfig::process_config_proof(ton::ton_api::object_ptrstate_proof_.as_slice(), raw_config->config_proof_.as_slice())); - TRY_RESULT(config, block::Config::extract_from_state(std::move(state), 0)); + TRY_RESULT(config, block::ConfigInfo::extract_config(std::move(state), block::ConfigInfo::needPrevBlocks)); for (auto i : params_) { VLOG(last_config) << "ConfigParam(" << i << ") = "; @@ -109,6 +110,7 @@ td::Status LastConfig::process_config_proof(ton::ton_api::object_ptrget_prev_blocks_info()); state_.config.reset(config.release()); return td::Status::OK(); } diff --git a/tonlib/tonlib/LastConfig.h b/tonlib/tonlib/LastConfig.h index 514b4a59..901733dc 100644 --- a/tonlib/tonlib/LastConfig.h +++ b/tonlib/tonlib/LastConfig.h @@ -30,6 +30,7 @@ namespace tonlib { struct LastConfigState { std::shared_ptr config; + td::Ref prev_blocks_info; }; td::StringBuilder& operator<<(td::StringBuilder& sb, const LastConfigState& state); diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index cd1ad938..b49587c5 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -890,8 +890,10 @@ class Query { } return res; } - td::Result>> estimate_fees(bool ignore_chksig, std::shared_ptr& cfg, vm::Dictionary& libraries) { + td::Result>> estimate_fees(bool ignore_chksig, const LastConfigState& state, + vm::Dictionary& libraries) { // gas fees + const auto& cfg = state.config; bool is_masterchain = raw_.source->get_address().workchain == ton::masterchainId; TRY_RESULT(gas_limits_prices, cfg->get_gas_limits_prices(is_masterchain)); TRY_RESULT(storage_prices, cfg->get_storage_prices()); @@ -919,7 +921,9 @@ class Query { .set_now(raw_.source->get_sync_time()) .set_ignore_chksig(ignore_chksig) .set_address(raw_.source->get_address()) - .set_config(cfg).set_libraries(libraries)); + .set_config(cfg) + .set_prev_blocks_info(state.prev_blocks_info) + .set_libraries(libraries)); td::int64 fwd_fee = 0; if (res.success) { LOG(DEBUG) << "output actions:\n" @@ -4109,7 +4113,7 @@ void TonlibClient::query_estimate_fees(td::int64 id, bool ignore_chksig, td::Res return; } TRY_RESULT_PROMISE(promise, state, std::move(r_state)); - TRY_RESULT_PROMISE_PREFIX(promise, fees, TRY_VM(it->second->estimate_fees(ignore_chksig, state.config, libraries)), + TRY_RESULT_PROMISE_PREFIX(promise, fees, TRY_VM(it->second->estimate_fees(ignore_chksig, state, libraries)), TonlibError::Internal()); promise.set_value(tonlib_api::make_object( fees.first.to_tonlib_api(), td::transform(fees.second, [](auto& x) { return x.to_tonlib_api(); }))); @@ -4474,6 +4478,7 @@ td::Status TonlibClient::do_request(const tonlib_api::smc_runGetMethod& request, ](td::Result r_state) mutable { TRY_RESULT_PROMISE(promise, state, std::move(r_state)); args.set_config(state.config); + args.set_prev_blocks_info(state.prev_blocks_info); auto code = smc->get_state().code; if (code.not_null()) { diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index 1a4f8085..9c7a0456 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -1688,13 +1688,23 @@ void LiteQuery::continue_getConfigParams(int mode, std::vector param_list) } } - auto res = keyblk ? block::Config::extract_from_key_block(mpb.root(), mode) - : block::Config::extract_from_state(mpb.root(), mode); - if (res.is_error()) { - fatal_error(res.move_as_error()); - return; + std::unique_ptr cfg; + if (keyblk || !(mode & block::ConfigInfo::needPrevBlocks)) { + auto res = keyblk ? block::Config::extract_from_key_block(mpb.root(), mode) + : block::Config::extract_from_state(mpb.root(), mode); + if (res.is_error()) { + fatal_error(res.move_as_error()); + return; + } + cfg = res.move_as_ok(); + } else { + auto res = block::ConfigInfo::extract_config(mpb.root(), mode); + if (res.is_error()) { + fatal_error(res.move_as_error()); + return; + } + cfg = res.move_as_ok(); } - auto cfg = res.move_as_ok(); if (!cfg) { fatal_error("cannot extract configuration from last mc state"); return; @@ -1707,6 +1717,9 @@ void LiteQuery::continue_getConfigParams(int mode, std::vector param_list) visit(cfg->get_config_param(i)); } } + if (!keyblk && mode & block::ConfigInfo::needPrevBlocks) { + ((block::ConfigInfo*)cfg.get())->get_prev_blocks_info(); + } } catch (vm::VmError& err) { fatal_error("error while traversing required configuration parameters: "s + err.get_msg()); return; From 961d870ece87aa4e7df328080dd54811a826fcc8 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 29 May 2023 11:27:54 +0300 Subject: [PATCH 008/351] Patch getmethod for tvm upgrade (#714) * Fix TVM version in emulator * Add prev_blocks_info to emulator-emscripten.cpp --------- Co-authored-by: SpyCheese --- crypto/smc-envelope/SmartContract.cpp | 17 ++++++++++++++--- emulator/emulator-emscripten.cpp | 16 ++++++++++++---- emulator/emulator-extern.cpp | 4 +++- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/crypto/smc-envelope/SmartContract.cpp b/crypto/smc-envelope/SmartContract.cpp index 8e95670a..7dbb65e7 100644 --- a/crypto/smc-envelope/SmartContract.cpp +++ b/crypto/smc-envelope/SmartContract.cpp @@ -177,7 +177,9 @@ td::Ref prepare_vm_c7(SmartContract::Args args, td::Ref cod } SmartContract::Answer run_smartcont(SmartContract::State state, td::Ref stack, td::Ref c7, - vm::GasLimits gas, bool ignore_chksig, td::Ref libraries, int vm_log_verbosity, bool debug_enabled) { + vm::GasLimits gas, bool ignore_chksig, td::Ref libraries, + int vm_log_verbosity, bool debug_enabled, + std::shared_ptr config) { auto gas_credit = gas.gas_credit; vm::init_op_cp0(debug_enabled); vm::DictionaryBase::get_empty_dictionary(); @@ -216,6 +218,13 @@ SmartContract::Answer run_smartcont(SmartContract::State state, td::Refget_global_version()); + auto r_limits = config->get_size_limits_config(); + if (r_limits.is_ok()) { + vm.set_max_data_depth(r_limits.ok().max_vm_data_depth); + } + } try { res.code = ~vm.run(); } catch (...) { @@ -304,7 +313,8 @@ SmartContract::Answer SmartContract::run_method(Args args) { args.stack.value().write().push_smallint(args.method_id.unwrap()); auto res = run_smartcont(get_state(), args.stack.unwrap(), args.c7.unwrap(), args.limits.unwrap(), args.ignore_chksig, - args.libraries ? args.libraries.unwrap().get_root_cell() : td::Ref{}, args.vm_log_verbosity_level, args.debug_enabled); + args.libraries ? args.libraries.unwrap().get_root_cell() : td::Ref{}, + args.vm_log_verbosity_level, args.debug_enabled, args.config ? args.config.value() : nullptr); state_ = res.new_state; return res; } @@ -322,7 +332,8 @@ SmartContract::Answer SmartContract::run_get_method(Args args) const { CHECK(args.method_id); args.stack.value().write().push_smallint(args.method_id.unwrap()); return run_smartcont(get_state(), args.stack.unwrap(), args.c7.unwrap(), args.limits.unwrap(), args.ignore_chksig, - args.libraries ? args.libraries.unwrap().get_root_cell() : td::Ref{}, args.vm_log_verbosity_level, args.debug_enabled); + args.libraries ? args.libraries.unwrap().get_root_cell() : td::Ref{}, + args.vm_log_verbosity_level, args.debug_enabled, args.config ? args.config.value() : nullptr); } SmartContract::Answer SmartContract::run_get_method(td::Slice method, Args args) const { diff --git a/emulator/emulator-emscripten.cpp b/emulator/emulator-emscripten.cpp index 66e97f35..dbd1c0d5 100644 --- a/emulator/emulator-emscripten.cpp +++ b/emulator/emulator-emscripten.cpp @@ -61,6 +61,7 @@ struct GetMethodParams { std::string data; int verbosity; td::optional libs; + td::optional prev_blocks_info; std::string address; uint32_t unixtime; uint64_t balance; @@ -91,6 +92,11 @@ td::Result decode_get_method_params(const char* json) { params.libs = libs; } + TRY_RESULT(prev_blocks_info, td::get_json_object_string_field(obj, "prev_blocks_info", true)); + if (prev_blocks_info.size() > 0) { + params.prev_blocks_info = prev_blocks_info; + } + TRY_RESULT(address, td::get_json_object_string_field(obj, "address", false)); params.address = address; @@ -187,12 +193,14 @@ const char *run_get_method(const char *params, const char* stack, const char* co auto tvm = tvm_emulator_create(decoded_params.code.c_str(), decoded_params.data.c_str(), decoded_params.verbosity); if ((decoded_params.libs && !tvm_emulator_set_libraries(tvm, decoded_params.libs.value().c_str())) || - !tvm_emulator_set_c7(tvm, decoded_params.address.c_str(), decoded_params.unixtime, - decoded_params.balance, decoded_params.rand_seed_hex.c_str(), config) || + !tvm_emulator_set_c7(tvm, decoded_params.address.c_str(), decoded_params.unixtime, decoded_params.balance, + decoded_params.rand_seed_hex.c_str(), config) || + (decoded_params.prev_blocks_info && + !tvm_emulator_set_prev_blocks_info(tvm, decoded_params.prev_blocks_info.value().c_str())) || (decoded_params.gas_limit > 0 && !tvm_emulator_set_gas_limit(tvm, decoded_params.gas_limit)) || !tvm_emulator_set_debug_enabled(tvm, decoded_params.debug_enabled)) { - tvm_emulator_destroy(tvm); - return strdup(R"({"fail":true,"message":"Can't set params"})"); + tvm_emulator_destroy(tvm); + return strdup(R"({"fail":true,"message":"Can't set params"})"); } auto res = tvm_emulator_run_get_method(tvm, decoded_params.method_id, stack); diff --git a/emulator/emulator-extern.cpp b/emulator/emulator-extern.cpp index 971cdcdb..885286d5 100644 --- a/emulator/emulator-extern.cpp +++ b/emulator/emulator-extern.cpp @@ -422,7 +422,9 @@ bool tvm_emulator_set_c7(void *tvm_emulator, const char *address, uint32_t unixt LOG(ERROR) << "Can't deserialize config params boc: " << config_params_cell.move_as_error(); return false; } - global_config = std::make_shared(config_params_cell.move_as_ok(), td::Bits256::zero(), block::Config::needWorkchainInfo | block::Config::needSpecialSmc); + global_config = std::make_shared( + config_params_cell.move_as_ok(), td::Bits256::zero(), + block::Config::needWorkchainInfo | block::Config::needSpecialSmc | block::Config::needCapabilities); auto unpack_res = global_config->unpack(); if (unpack_res.is_error()) { LOG(ERROR) << "Can't unpack config params"; From b4f4aa3ca7208fada8330c4a4f8023a220eef843 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Mon, 5 Jun 2023 17:22:13 +0300 Subject: [PATCH 009/351] Fix typo in BurningConfig (#721) --- crypto/block/block.tlb | 2 +- crypto/block/mc-config.cpp | 2 +- crypto/block/mc-config.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/crypto/block/block.tlb b/crypto/block/block.tlb index 7fa7f750..1b6f72a3 100644 --- a/crypto/block/block.tlb +++ b/crypto/block/block.tlb @@ -610,7 +610,7 @@ _ dns_root_addr:bits256 = ConfigParam 4; // root TON DNS resolver burning_config#01 blackhole_addr:(Maybe bits256) - fee_burn_nom:# fee_burn_denom:# { fee_burn_nom <= fee_burn_denom } { fee_burn_denom >= 1 } = BurningConfig; + fee_burn_num:# fee_burn_denom:# { fee_burn_num <= fee_burn_denom } { fee_burn_denom >= 1 } = BurningConfig; _ BurningConfig = ConfigParam 5; _ mint_new_price:Grams mint_add_price:Grams = ConfigParam 6; diff --git a/crypto/block/mc-config.cpp b/crypto/block/mc-config.cpp index 2cf8b1d9..02c6e45b 100644 --- a/crypto/block/mc-config.cpp +++ b/crypto/block/mc-config.cpp @@ -1963,7 +1963,7 @@ BurningConfig Config::get_burning_config() const { return {}; } BurningConfig c; - c.fee_burn_nom = rec.fee_burn_nom; + c.fee_burn_num = rec.fee_burn_num; c.fee_burn_denom = rec.fee_burn_denom; vm::CellSlice& addr = rec.blackhole_addr.write(); if (addr.fetch_long(1)) { diff --git a/crypto/block/mc-config.h b/crypto/block/mc-config.h index 799bf6bf..b29e3792 100644 --- a/crypto/block/mc-config.h +++ b/crypto/block/mc-config.h @@ -506,13 +506,13 @@ class ShardConfig { struct BurningConfig { td::optional blackhole_addr; - td::uint32 fee_burn_nom = 0, fee_burn_denom = 1; + td::uint32 fee_burn_num = 0, fee_burn_denom = 1; td::RefInt256 calculate_burned_fees(const td::RefInt256& x) const { if (x.is_null()) { return x; } - return x * fee_burn_nom / td::make_refint(fee_burn_denom); + return x * fee_burn_num / td::make_refint(fee_burn_denom); } CurrencyCollection calculate_burned_fees(const CurrencyCollection& x) const { From 34303ee8de976ee451ef085fff07b25ef667d780 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Wed, 7 Jun 2023 12:18:02 +0300 Subject: [PATCH 010/351] Process VmVirtError in RunEmulator --- tonlib/tonlib/TonlibClient.cpp | 122 +++++++++++++++++---------------- 1 file changed, 64 insertions(+), 58 deletions(-) diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index b49587c5..0d649b01 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -1875,72 +1875,78 @@ class RunEmulator : public td::actor::Actor { } void inc() { - if (stopped_ || ++count_ != 4) { // 4 -- block_id + mc_state_root + account_state + transactions + if (stopped_ || ++count_ != 4) { // 4 -- block_id + mc_state_root + account_state + transactions return; } - auto r_config = block::ConfigInfo::extract_config(mc_state_root_, 0b11'11111111); - if (r_config.is_error()) { - check(r_config.move_as_error()); - return; - } - std::unique_ptr config = r_config.move_as_ok(); + try { + auto r_config = block::ConfigInfo::extract_config(mc_state_root_, 0b11'11111111); + if (r_config.is_error()) { + check(r_config.move_as_error()); + return; + } + std::unique_ptr config = r_config.move_as_ok(); - block::gen::ShardStateUnsplit::Record shard_state; - if (!tlb::unpack_cell(mc_state_root_, shard_state)) { - check(td::Status::Error("Failed to unpack masterchain state")); - return; - } - vm::Dictionary libraries(shard_state.r1.libraries->prefetch_ref(), 256); + block::gen::ShardStateUnsplit::Record shard_state; + if (!tlb::unpack_cell(mc_state_root_, shard_state)) { + check(td::Status::Error("Failed to unpack masterchain state")); + return; + } + vm::Dictionary libraries(shard_state.r1.libraries->prefetch_ref(), 256); - auto r_shard_account = account_state_->to_shardAccountCellSlice(); - if (r_shard_account.is_error()) { - check(r_shard_account.move_as_error()); - return; - } - td::Ref shard_account = r_shard_account.move_as_ok(); + auto r_shard_account = account_state_->to_shardAccountCellSlice(); + if (r_shard_account.is_error()) { + check(r_shard_account.move_as_error()); + return; + } + td::Ref shard_account = r_shard_account.move_as_ok(); - const block::StdAddress& address = account_state_->get_address(); - ton::UnixTime now = account_state_->get_sync_time(); - bool is_special = address.workchain == ton::masterchainId && config->is_special_smartcontract(address.addr); - block::Account account(address.workchain, address.addr.bits()); - if (!account.unpack(std::move(shard_account), td::Ref(), now, is_special)) { - check(td::Status::Error("Can't unpack shard account")); - return; - } - - auto prev_blocks_info = config->get_prev_blocks_info(); - if (prev_blocks_info.is_error()) { - check(prev_blocks_info.move_as_error()); - return; - } - emulator::TransactionEmulator trans_emulator(std::move(*config)); - trans_emulator.set_prev_blocks_info(prev_blocks_info.move_as_ok()); - trans_emulator.set_libs(std::move(libraries)); - trans_emulator.set_rand_seed(block_id_.rand_seed); - td::Result emulation_result = trans_emulator.emulate_transactions_chain(std::move(account), std::move(transactions_)); - - if (emulation_result.is_error()) { - promise_.set_error(emulation_result.move_as_error()); - } else { - account = std::move(emulation_result.move_as_ok().account); - RawAccountState raw = std::move(account_state_->raw()); - raw.block_id = block_id_.id; - raw.balance = account.get_balance().grams->to_long(); - raw.storage_last_paid = std::move(account.last_paid); - raw.storage_stat = std::move(account.storage_stat); - raw.code = std::move(account.code); - raw.data = std::move(account.data); - raw.state = std::move(account.total_state); - raw.info.last_trans_lt = account.last_trans_lt_; - raw.info.last_trans_hash = account.last_trans_hash_; - raw.info.gen_utime = account.now_; - - if (account.status == block::Account::acc_frozen) { - raw.frozen_hash = (char*)account.state_hash.data(); + const block::StdAddress& address = account_state_->get_address(); + ton::UnixTime now = account_state_->get_sync_time(); + bool is_special = address.workchain == ton::masterchainId && config->is_special_smartcontract(address.addr); + block::Account account(address.workchain, address.addr.bits()); + if (!account.unpack(std::move(shard_account), td::Ref(), now, is_special)) { + check(td::Status::Error("Can't unpack shard account")); + return; } - promise_.set_value(td::make_unique(address, std::move(raw), 0)); + auto prev_blocks_info = config->get_prev_blocks_info(); + if (prev_blocks_info.is_error()) { + check(prev_blocks_info.move_as_error()); + return; + } + emulator::TransactionEmulator trans_emulator(std::move(*config)); + trans_emulator.set_prev_blocks_info(prev_blocks_info.move_as_ok()); + trans_emulator.set_libs(std::move(libraries)); + trans_emulator.set_rand_seed(block_id_.rand_seed); + td::Result emulation_result = + trans_emulator.emulate_transactions_chain(std::move(account), std::move(transactions_)); + + if (emulation_result.is_error()) { + promise_.set_error(emulation_result.move_as_error()); + } else { + account = std::move(emulation_result.move_as_ok().account); + RawAccountState raw = std::move(account_state_->raw()); + raw.block_id = block_id_.id; + raw.balance = account.get_balance().grams->to_long(); + raw.storage_last_paid = std::move(account.last_paid); + raw.storage_stat = std::move(account.storage_stat); + raw.code = std::move(account.code); + raw.data = std::move(account.data); + raw.state = std::move(account.total_state); + raw.info.last_trans_lt = account.last_trans_lt_; + raw.info.last_trans_hash = account.last_trans_hash_; + raw.info.gen_utime = account.now_; + + if (account.status == block::Account::acc_frozen) { + raw.frozen_hash = (char*)account.state_hash.data(); + } + + promise_.set_value(td::make_unique(address, std::move(raw), 0)); + } + } catch (vm::VmVirtError& err) { + check(td::Status::Error(PSLICE() << "virtualization error while emulating transaction: " << err.get_msg())); + return; } stopped_ = true; try_stop(); From 80d9be4cec3497b6983ef173c827551434768979 Mon Sep 17 00:00:00 2001 From: neodiX Date: Thu, 8 Jun 2023 18:17:17 +0200 Subject: [PATCH 011/351] Remove TON arm64 compilation with Docker; Fix windows build; --- .github/workflows/docker-compile-ubuntu.yml | 57 --------------------- .github/workflows/win-2019-compile.yml | 6 +-- 2 files changed, 3 insertions(+), 60 deletions(-) delete mode 100644 .github/workflows/docker-compile-ubuntu.yml diff --git a/.github/workflows/docker-compile-ubuntu.yml b/.github/workflows/docker-compile-ubuntu.yml deleted file mode 100644 index 41fbb8e0..00000000 --- a/.github/workflows/docker-compile-ubuntu.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Docker Ubuntu Compile arm64 - -on: [push,workflow_dispatch,workflow_call] - -jobs: - build: - strategy: - fail-fast: false - max-parallel: 3 - matrix: - arch: [arm64] - ver: [22.04, 20.04 ] - - runs-on: ubuntu-22.04 - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Set output - id: vars - run: echo ::set-output name=short_ref::${GITHUB_REF#refs/*/} - - - name: Check output - run: echo branch ${{ steps.vars.outputs.short_ref }} - - - name: Build with docker buildx - run: | - mkdir build-${{matrix.ver}}-${{matrix.arch}} - - docker buildx build --build-arg REPO=${{ github.repository }} --build-arg BRANCH=${{ steps.vars.outputs.short_ref }} --platform=linux/${{matrix.arch}} --progress=plain --load . -t build-${{matrix.ver}}-${{matrix.arch}} -f .github/script/${{matrix.arch}}-${{matrix.ver}}.Dockerfile - container_id=$(docker create --platform=linux/${{matrix.arch}} build-${{matrix.ver}}-${{matrix.arch}}) - docker cp $container_id:/ton/build/dht-server/dht-server build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/validator-engine/validator-engine build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/validator-engine-console/validator-engine-console build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/storage/storage-daemon/storage-daemon build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/storage/storage-daemon/storage-daemon-cli build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/crypto/fift build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/crypto/func build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/crypto/create-state build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/blockchain-explorer/blockchain-explorer build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/lite-client/lite-client build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/utils/generate-random-id build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/build/tonlib/libtonlibjson.so.0.5 build-${{matrix.ver}}-${{matrix.arch}}/tonlibjson.so - docker cp -a $container_id:/ton/crypto/smartcont build-${{matrix.ver}}-${{matrix.arch}}/ - docker cp -a $container_id:/ton/crypto/fift/lib build-${{matrix.ver}}-${{matrix.arch}}/ - - - name: Upload artifacts - uses: actions/upload-artifact@v1 - with: - name: ton-ubuntu-${{matrix.ver}}-${{matrix.arch}} - path: build-${{matrix.ver}}-${{matrix.arch}} diff --git a/.github/workflows/win-2019-compile.yml b/.github/workflows/win-2019-compile.yml index 11ba7565..1edcb0e1 100644 --- a/.github/workflows/win-2019-compile.yml +++ b/.github/workflows/win-2019-compile.yml @@ -56,8 +56,8 @@ jobs: - name: Install pre-compiled libmicrohttpd Win64 run: | - curl -Lo libmicrohttpd-latest-w32-bin.zip https://ftpmirror.gnu.org/libmicrohttpd/libmicrohttpd-latest-w32-bin.zip - unzip libmicrohttpd-latest-w32-bin.zip + curl -Lo libmicrohttpd-0.9.77-w32-bin.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/libmicrohttpd-0.9.77-w32-bin.zip + unzip libmicrohttpd-0.9.77-w32-bin.zip - name: Install pre-compiled Readline Win64 run: | @@ -72,7 +72,7 @@ jobs: echo %SODIUM_DIR% mkdir build cd build - cmake -DCMAKE_BUILD_TYPE=Release -DSODIUM_USE_STATIC_LIBS=1 -DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include -DSECP256K1_LIBRARY=%root%\secp256k1\bin\x64\Release\v142\static\secp256k1.lib -DREADLINE_INCLUDE_DIR=%root%\readline-5.0-1-lib\include\readline -DREADLINE_LIBRARY=%root%\readline-5.0-1-lib\lib\readline.lib -DPORTABLE=1 -DZLIB_FOUND=1 -DMHD_FOUND=1 -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.75-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.75-w32-bin\x86_64\VS2019\Release-static -DZLIB_INCLUDE_DIR=%root%\zlib -DZLIB_LIBRARY=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=%root%/openssl-1.1.1j/include -DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-1.1.1j/lib/libcrypto_static.lib -DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj /W0" .. + cmake -DCMAKE_BUILD_TYPE=Release -DSODIUM_USE_STATIC_LIBS=1 -DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include -DSECP256K1_LIBRARY=%root%\secp256k1\bin\x64\Release\v142\static\secp256k1.lib -DREADLINE_INCLUDE_DIR=%root%\readline-5.0-1-lib\include\readline -DREADLINE_LIBRARY=%root%\readline-5.0-1-lib\lib\readline.lib -DPORTABLE=1 -DZLIB_FOUND=1 -DMHD_FOUND=1 -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static -DZLIB_INCLUDE_DIR=%root%\zlib -DZLIB_LIBRARY=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=%root%/openssl-1.1.1j/include -DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-1.1.1j/lib/libcrypto_static.lib -DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj /W0" .. cmake --build . --target storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator --config Release - name: Show executables From a20810386110c78d86624cded5249e9190d9871f Mon Sep 17 00:00:00 2001 From: neodiX Date: Thu, 8 Jun 2023 18:31:46 +0200 Subject: [PATCH 012/351] Remove TON arm64 compilation with Docker; Fix windows build; Sync create release with master. --- .github/workflows/create-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 85560080..cb665122 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -359,7 +359,7 @@ jobs: uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: artifacts/ton-x86_64-linux-binaries/libtonlibjson.so + file: artifacts/ton-x86_64-linux-binaries/libtonlibjson.so.0.5 asset_name: tonlibjson-linux-x86_64.so tag: ${{ steps.tag.outputs.TAG }} From 954bebbaf8f4cfedd04bcbad3b4bddef9bfd35fa Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Fri, 9 Jun 2023 14:49:18 +0300 Subject: [PATCH 013/351] Re-enable encryption in tonlib (#727) --- tonlib/tonlib/TonlibClient.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index 0d649b01..069ba576 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -3940,9 +3940,9 @@ class GenericCreateSendGrams : public TonlibQueryActor { } } -// if (!o_public_key) { // todo: (tolya-yanot) temporary disable msg comment encryption (The exchanges/payment services needs to read the comment of incoming messages). This will be uncommented when a general standard is developed. - return TonlibError::MessageEncryption("Get public key (in destination)"); -// } + if (!o_public_key) { + return TonlibError::MessageEncryption("Cannot get public key of destination (possibly unknown wallet type)"); + } auto addr = source_->get_address(); addr.bounceable = true; From 961b895622aa4cd3ea0b70495debab773fc0f05e Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Tue, 27 Jun 2023 09:22:09 +0300 Subject: [PATCH 014/351] New tag for encrypted messages --- crypto/smc-envelope/WalletInterface.cpp | 2 +- tonlib/tonlib/TonlibClient.cpp | 42 +++++++++++++------------ 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/crypto/smc-envelope/WalletInterface.cpp b/crypto/smc-envelope/WalletInterface.cpp index 4c2feca9..418bc4a4 100644 --- a/crypto/smc-envelope/WalletInterface.cpp +++ b/crypto/smc-envelope/WalletInterface.cpp @@ -68,7 +68,7 @@ void WalletInterface::store_gift_message(vm::CellBuilder &cb, const Gift &gift) } if (gift.is_encrypted) { - cb.store_long(1, 32); + cb.store_long(0x2167da4b, 32); } else { cb.store_long(0, 32); } diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index 069ba576..1e7ef384 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -2888,29 +2888,31 @@ struct ToRawTransactions { auto get_data = [body = std::move(body), body_cell = std::move(body_cell), init_state_cell = std::move(init_state_cell), this](td::Slice salt) mutable { tonlib_api::object_ptr data; - if (try_decode_messages_ && body->size() >= 32 && static_cast(body->prefetch_long(32)) <= 1) { - auto type = body.write().fetch_long(32); - td::Status status; + if (try_decode_messages_ && body->size() >= 32) { + auto type = static_cast(body.write().fetch_long(32)); + if (type == 0 || type == 0x2167da4b) { + td::Status status; - auto r_body_message = vm::CellString::load(body.write()); - LOG_IF(WARNING, r_body_message.is_error()) << "Failed to parse a message: " << r_body_message.error(); + auto r_body_message = vm::CellString::load(body.write()); + LOG_IF(WARNING, r_body_message.is_error()) << "Failed to parse a message: " << r_body_message.error(); - if (r_body_message.is_ok()) { - if (type == 0) { - data = tonlib_api::make_object(r_body_message.move_as_ok()); - } else { - auto encrypted_message = r_body_message.move_as_ok(); - auto r_decrypted_message = [&]() -> td::Result { - if (!private_key_) { - return TonlibError::EmptyField("private_key"); - } - TRY_RESULT(decrypted, SimpleEncryptionV2::decrypt_data(encrypted_message, private_key_.value(), salt)); - return decrypted.data.as_slice().str(); - }(); - if (r_decrypted_message.is_ok()) { - data = tonlib_api::make_object(r_decrypted_message.move_as_ok()); + if (r_body_message.is_ok()) { + if (type == 0) { + data = tonlib_api::make_object(r_body_message.move_as_ok()); } else { - data = tonlib_api::make_object(encrypted_message); + auto encrypted_message = r_body_message.move_as_ok(); + auto r_decrypted_message = [&]() -> td::Result { + if (!private_key_) { + return TonlibError::EmptyField("private_key"); + } + TRY_RESULT(decrypted, SimpleEncryptionV2::decrypt_data(encrypted_message, private_key_.value(), salt)); + return decrypted.data.as_slice().str(); + }(); + if (r_decrypted_message.is_ok()) { + data = tonlib_api::make_object(r_decrypted_message.move_as_ok()); + } else { + data = tonlib_api::make_object(encrypted_message); + } } } } From d94e31960b587f463030fddd4e4d89e2a9c3c393 Mon Sep 17 00:00:00 2001 From: neodiX Date: Wed, 28 Jun 2023 08:45:18 +0200 Subject: [PATCH 015/351] Fix "Could not set environment: 150: Operation not permitted while System Integrity Protection is engaged" in macOS x86-64 GH action --- .github/workflows/ton-x86-64-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ton-x86-64-macos.yml b/.github/workflows/ton-x86-64-macos.yml index 44c2d2aa..9713005a 100644 --- a/.github/workflows/ton-x86-64-macos.yml +++ b/.github/workflows/ton-x86-64-macos.yml @@ -11,7 +11,7 @@ jobs: with: submodules: 'recursive' - - uses: cachix/install-nix-action@v18 + - uses: cachix/install-nix-action@v20 with: extra_nix_config: | access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} From 020606295c011b0971a187c3bbfd007703782fb3 Mon Sep 17 00:00:00 2001 From: neodiX Date: Wed, 28 Jun 2023 09:22:30 +0200 Subject: [PATCH 016/351] Fix "Could not set environment: 150: Operation not permitted while System Integrity Protection is engaged" in macOS x86-64 GH action --- .github/workflows/ton-x86-64-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ton-x86-64-macos.yml b/.github/workflows/ton-x86-64-macos.yml index 9713005a..b9e9cf9b 100644 --- a/.github/workflows/ton-x86-64-macos.yml +++ b/.github/workflows/ton-x86-64-macos.yml @@ -11,7 +11,7 @@ jobs: with: submodules: 'recursive' - - uses: cachix/install-nix-action@v20 + - uses: cachix/install-nix-action@v22 with: extra_nix_config: | access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} From edb80d5d6aca8690d29a417b533caee7e04ebacc Mon Sep 17 00:00:00 2001 From: neodiX Date: Wed, 28 Jun 2023 09:49:00 +0200 Subject: [PATCH 017/351] Fix "Could not set environment: 150: Operation not permitted while System Integrity Protection is engaged" in macOS x86-64 GH action; Fix windows build & remove arm64 ubuntu gh action. --- .github/workflows/create-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index cb665122..85560080 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -359,7 +359,7 @@ jobs: uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: artifacts/ton-x86_64-linux-binaries/libtonlibjson.so.0.5 + file: artifacts/ton-x86_64-linux-binaries/libtonlibjson.so asset_name: tonlibjson-linux-x86_64.so tag: ${{ steps.tag.outputs.TAG }} From 75534db189c282783278bb2060585751ab8a8d05 Mon Sep 17 00:00:00 2001 From: neodiX Date: Wed, 28 Jun 2023 09:53:22 +0200 Subject: [PATCH 018/351] Fix "Could not set environment: 150: Operation not permitted while System Integrity Protection is engaged" in macOS x86-64 GH action; Fix windows build & remove arm64 ubuntu gh action. Add missing storage-daemon artifacts --- .github/workflows/create-release.yml | 72 ++++++++++------------------ 1 file changed, 24 insertions(+), 48 deletions(-) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 85560080..10c20ac0 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -27,22 +27,6 @@ jobs: workflow_conclusion: success skip_unpack: false - # - name: Download Linux arm64 artifacts - # uses: dawidd6/action-download-artifact@v2 - # with: - # workflow: ton-aarch64-linux.yml - # path: artifacts - # workflow_conclusion: success - # skip_unpack: true - # - # - name: Download and unzip Linux arm64 artifacts - # uses: dawidd6/action-download-artifact@v2 - # with: - # workflow: ton-aarch64-linux.yml - # path: artifacts - # workflow_conclusion: success - # skip_unpack: false - - name: Download Mac x86-64 artifacts uses: dawidd6/action-download-artifact@v2 with: @@ -59,22 +43,6 @@ jobs: workflow_conclusion: success skip_unpack: false - # - name: Download Mac arm64 artifacts - # uses: dawidd6/action-download-artifact@v2 - # with: - # workflow: ton-aarch64-macos.yml - # path: artifacts - # workflow_conclusion: success - # skip_unpack: true - # - # - name: Download and unzip Mac arm64 artifacts - # uses: dawidd6/action-download-artifact@v2 - # with: - # workflow: ton-aarch64-macos.yml - # path: artifacts - # workflow_conclusion: success - # skip_unpack: false - - name: Download Windows artifacts uses: dawidd6/action-download-artifact@v2 with: @@ -207,6 +175,14 @@ jobs: asset_name: storage-daemon-cli.exe tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Windows 2019 single artifact - storage-daemon + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: artifacts/ton-win-binaries/storage-daemon.exe + asset_name: storage-daemon.exe + tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Windows 2019 single artifact - tonlibjson uses: svenstaro/upload-release-action@v2 with: @@ -281,6 +257,14 @@ jobs: asset_name: storage-daemon-cli-mac-x86-64 tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Mac x86-64 single artifact - storage-daemon + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: artifacts/ton-x86_64-macos-binaries/storage-daemon + asset_name: storage-daemon-mac-x86-64 + tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Mac x86-64 single artifact - tonlibjson uses: svenstaro/upload-release-action@v2 with: @@ -355,6 +339,14 @@ jobs: asset_name: storage-daemon-cli-linux-x86_64 tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Linux x86-64 single artifact - storage-daemon + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: artifacts/ton-x86_64-linux-binaries/storage-daemon + asset_name: storage-daemon-linux-x86_64 + tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Linux x86-64 single artifact - tonlibjson uses: svenstaro/upload-release-action@v2 with: @@ -371,22 +363,6 @@ jobs: asset_name: tonlib-cli-linux-x86_64 tag: ${{ steps.tag.outputs.TAG }} - # - name: Upload Linux arm64 artifacts - # uses: svenstaro/upload-release-action@v2 - # with: - # repo_token: ${{ secrets.GITHUB_TOKEN }} - # file: artifacts/ton-aarch64-linux-binaries.zip - # asset_name: ton-linux-arm64.zip - # tag: ${{ steps.tag.outputs.TAG }} - # - # - name: Upload Mac arm64 artifacts - # uses: svenstaro/upload-release-action@v2 - # with: - # repo_token: ${{ secrets.GITHUB_TOKEN }} - # file: artifacts/ton-aarch64-macos-binaries - # asset_name: ton-mac-arm64.zip - # tag: ${{ steps.tag.outputs.TAG }} - - name: Upload WASM artifacts uses: svenstaro/upload-release-action@v2 with: From 4b8e90f8fe01bbe62ebe966f6edd46dc6e65806e Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 5 Jul 2023 14:03:19 +0300 Subject: [PATCH 019/351] Adjust BLS gas prices (#738) Co-authored-by: SpyCheese --- crypto/vm/vm.h | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/crypto/vm/vm.h b/crypto/vm/vm.h index c8649477..6fd1797c 100644 --- a/crypto/vm/vm.h +++ b/crypto/vm/vm.h @@ -128,25 +128,25 @@ class VmState final : public VmStateInterface { chksgn_gas_price = 4000, p256_chksgn_gas_price = 3500, - bls_verify_gas_price = 61300, - bls_aggregate_base_gas_price = -2645, - bls_aggregate_element_gas_price = 4355, - bls_fast_aggregate_verify_base_gas_price = 58400, - bls_fast_aggregate_verify_element_gas_price = 2990, - bls_aggregate_verify_base_gas_price = 37275, - bls_aggregate_verify_element_gas_price = 22290, + bls_verify_gas_price = 61000, + bls_aggregate_base_gas_price = -2650, + bls_aggregate_element_gas_price = 4350, + bls_fast_aggregate_verify_base_gas_price = 58000, + bls_fast_aggregate_verify_element_gas_price = 3000, + bls_aggregate_verify_base_gas_price = 38500, + bls_aggregate_verify_element_gas_price = 22500, - bls_g1_add_sub_gas_price = 3925, - bls_g1_neg_gas_price = 765, - bls_g1_mul_gas_price = 5180, - bls_map_to_g1_gas_price = 2330, - bls_g1_in_group_gas_price = 2930, + bls_g1_add_sub_gas_price = 3900, + bls_g1_neg_gas_price = 750, + bls_g1_mul_gas_price = 5200, + bls_map_to_g1_gas_price = 2350, + bls_g1_in_group_gas_price = 2950, bls_g2_add_sub_gas_price = 6100, bls_g2_neg_gas_price = 1550, - bls_g2_mul_gas_price = 10530, - bls_map_to_g2_gas_price = 7970, - bls_g2_in_group_gas_price = 4255, + bls_g2_mul_gas_price = 10550, + bls_map_to_g2_gas_price = 7950, + bls_g2_in_group_gas_price = 4250, // multiexp gas = base + n * coef1 + n/floor(max(log2(n), 4)) * coef2 bls_g1_multiexp_base_gas_price = 11375, @@ -157,7 +157,7 @@ class VmState final : public VmStateInterface { bls_g2_multiexp_coef2_gas_price = 22840, bls_pairing_base_gas_price = 20000, - bls_pairing_element_gas_price = 11770 + bls_pairing_element_gas_price = 11800 }; VmState(); VmState(Ref _code); From 119f5a3ccca02ebd3e4f2bcbbbb59b006270ec47 Mon Sep 17 00:00:00 2001 From: neodiX42 Date: Fri, 14 Jul 2023 13:49:02 +0200 Subject: [PATCH 020/351] fix wasm and repetitive builds (#735) --- crypto/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index cdd5d57b..13e4c5bd 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -373,10 +373,10 @@ add_library(src_parser ${PARSER_SOURCE}) target_include_directories(src_parser PUBLIC $) target_link_libraries(src_parser PUBLIC ton_crypto_core) -add_library(ton_block ${BLOCK_SOURCE}) +add_library(ton_block STATIC ${BLOCK_SOURCE}) target_include_directories(ton_block PUBLIC $ $ $) -target_link_libraries(ton_block PUBLIC ton_crypto_core tdutils tdactor tl_api) +target_link_libraries(ton_block PUBLIC ton_crypto tdutils tdactor tl_api) add_executable(func func/func-main.cpp ${FUNC_LIB_SOURCE}) target_include_directories(func PUBLIC $) From 08cfc4c6eea53b2b0e10dfa4659fb2933a6dd6fc Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 14 Jul 2023 14:50:03 +0300 Subject: [PATCH 021/351] Initialize random seed properly (#742) Co-authored-by: SpyCheese --- validator/impl/collator-impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validator/impl/collator-impl.h b/validator/impl/collator-impl.h index 93cab81a..abbe904c 100644 --- a/validator/impl/collator-impl.h +++ b/validator/impl/collator-impl.h @@ -129,7 +129,7 @@ class Collator final : public td::actor::Actor { BlockIdExt mc_block_id_; Ref mc_state_root; Ref mc_block_root; - td::BitArray<256> rand_seed_; + td::BitArray<256> rand_seed_ = td::Bits256::zero(); std::unique_ptr config_; std::unique_ptr shard_conf_; std::map> aux_mc_states_; From 9b34217bf0c95c3b9a256ab63564830532801caa Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 14 Jul 2023 15:23:22 +0300 Subject: [PATCH 022/351] Tonlib fix (#743) * Fix building messages with long body (#709) * Fix returning slice in tonlib (#734) --------- Co-authored-by: SpyCheese --- crypto/smc-envelope/WalletInterface.cpp | 9 ++++++--- crypto/smc-envelope/WalletInterface.h | 2 ++ tonlib/tonlib/TonlibClient.cpp | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/crypto/smc-envelope/WalletInterface.cpp b/crypto/smc-envelope/WalletInterface.cpp index 418bc4a4..c76ac4a2 100644 --- a/crypto/smc-envelope/WalletInterface.cpp +++ b/crypto/smc-envelope/WalletInterface.cpp @@ -55,18 +55,21 @@ td::Ref WalletInterface::create_int_message(const Gift &gift) { } else { cbi.store_zeroes(1); } - cbi.store_zeroes(1); store_gift_message(cbi, gift); return cbi.finalize(); } void WalletInterface::store_gift_message(vm::CellBuilder &cb, const Gift &gift) { if (gift.body.not_null()) { auto body = vm::load_cell_slice(gift.body); - //TODO: handle error - CHECK(cb.append_cellslice_bool(body)); + if (cb.can_extend_by(1 + body.size(), body.size_refs())) { + CHECK(cb.store_zeroes_bool(1) && cb.append_cellslice_bool(body)); + } else { + CHECK(cb.store_ones_bool(1) && cb.store_ref_bool(gift.body)); + } return; } + cb.store_zeroes(1); if (gift.is_encrypted) { cb.store_long(0x2167da4b, 32); } else { diff --git a/crypto/smc-envelope/WalletInterface.h b/crypto/smc-envelope/WalletInterface.h index 20141f5c..b7f80630 100644 --- a/crypto/smc-envelope/WalletInterface.h +++ b/crypto/smc-envelope/WalletInterface.h @@ -73,6 +73,8 @@ class WalletInterface : public SmartContract { td::uint32 valid_until = std::numeric_limits::max()) const; static td::Ref create_int_message(const Gift &gift); + + private: static void store_gift_message(vm::CellBuilder &cb, const Gift &gift); }; diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index 1e7ef384..816c6868 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -4290,7 +4290,7 @@ auto to_tonlib_api(const vm::StackEntry& entry, int& limit) -> td::Result( tonlib_api::make_object(dec_string(entry.as_int()))); case vm::StackEntry::Type::t_slice: - return tonlib_api::make_object(tonlib_api::make_object( + return tonlib_api::make_object(tonlib_api::make_object( to_bytes(vm::CellBuilder().append_cellslice(entry.as_slice()).finalize()))); case vm::StackEntry::Type::t_cell: return tonlib_api::make_object( From ef306dd36e3aaf5b3c7d9900e58ed430d35815e8 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 14 Jul 2023 15:25:07 +0300 Subject: [PATCH 023/351] Patch/fix ub (#724) * Fix input validation in storage-manager and bitstring * Fix potentially dangling pointer missing_library --------- Co-authored-by: SpyCheese --- crypto/common/bitstring.cpp | 8 +++--- crypto/smc-envelope/SmartContract.cpp | 10 +++---- crypto/smc-envelope/SmartContract.h | 2 +- crypto/vm/cells/CellString.cpp | 39 +++++++++++++++++++++++---- crypto/vm/cells/CellString.h | 2 +- crypto/vm/vm.cpp | 2 +- crypto/vm/vm.h | 5 ++-- emulator/emulator-extern.cpp | 12 ++++----- storage/TorrentHeader.hpp | 18 ++++++++++--- tonlib/tonlib/TonlibClient.cpp | 8 +++--- 10 files changed, 73 insertions(+), 33 deletions(-) diff --git a/crypto/common/bitstring.cpp b/crypto/common/bitstring.cpp index aabc6984..c10a4ff3 100644 --- a/crypto/common/bitstring.cpp +++ b/crypto/common/bitstring.cpp @@ -596,7 +596,7 @@ long parse_bitstring_hex_literal(unsigned char* buff, std::size_t buff_size, con unsigned char* ptr = buff; const char* rptr = str; while (rptr < str_end) { - int c = *rptr++; + char c = *rptr++; if (c == ' ' || c == '\t') { continue; } @@ -627,14 +627,14 @@ long parse_bitstring_hex_literal(unsigned char* buff, std::size_t buff_size, con if (cmpl && bits) { int t = (hex_digits_count & 1) ? (0x100 + *ptr) >> 4 : (0x100 + *--ptr); while (bits > 0) { + if (t == 1) { + t = 0x100 + *--ptr; + } --bits; if (t & 1) { break; } t >>= 1; - if (t == 1) { - t = 0x100 + *--ptr; - } } } return bits; diff --git a/crypto/smc-envelope/SmartContract.cpp b/crypto/smc-envelope/SmartContract.cpp index 7dbb65e7..64e26944 100644 --- a/crypto/smc-envelope/SmartContract.cpp +++ b/crypto/smc-envelope/SmartContract.cpp @@ -246,10 +246,10 @@ SmartContract::Answer run_smartcont(SmartContract::State state, td::Ref actions; td::int32 code; td::int64 gas_used; - td::ConstBitPtr missing_library{0}; + td::optional missing_library; std::string vm_log; static int output_actions_count(td::Ref list); }; diff --git a/crypto/vm/cells/CellString.cpp b/crypto/vm/cells/CellString.cpp index b4738f88..474bc797 100644 --- a/crypto/vm/cells/CellString.cpp +++ b/crypto/vm/cells/CellString.cpp @@ -142,28 +142,57 @@ td::Ref CellText::do_store(td::BitSlice slice) { } template -void CellText::for_each(F &&f, CellSlice cs) { +td::Status CellText::for_each(F &&f, CellSlice cs) { + if (!cs.have(8)) { + return td::Status::Error("Cell underflow"); + } auto depth = cs.fetch_ulong(8); + if (depth > max_chain_length) { + return td::Status::Error("Too deep string"); + } for (td::uint32 i = 0; i < depth; i++) { - auto size = cs.fetch_ulong(8); - f(cs.fetch_bits(td::narrow_cast(size) * 8)); + if (!cs.have(8)) { + return td::Status::Error("Cell underflow"); + } + auto size = td::narrow_cast(cs.fetch_ulong(8)); + if (!cs.have(size * 8)) { + return td::Status::Error("Cell underflow"); + } + TRY_STATUS(f(cs.fetch_bits(size * 8))); if (i + 1 < depth) { + if (!cs.have_refs()) { + return td::Status::Error("Cell underflow"); + } cs = vm::load_cell_slice(cs.prefetch_ref()); } } + return td::Status::OK(); } td::Result CellText::load(CellSlice &cs) { unsigned int size = 0; - for_each([&](auto slice) { size += slice.size(); }, cs); + TRY_STATUS(for_each( + [&](auto slice) { + size += slice.size(); + if (size > max_bytes * 8) { + return td::Status::Error("String is too long"); + } + return td::Status::OK(); + }, + cs)); if (size % 8 != 0) { return td::Status::Error("Size is not divisible by 8"); } std::string res(size / 8, 0); td::BitPtr to(td::MutableSlice(res).ubegin()); - for_each([&](auto slice) { to.concat(slice); }, cs); + TRY_STATUS(for_each( + [&](auto slice) { + to.concat(slice); + return td::Status::OK(); + }, + cs)); CHECK(to.offs == (int)size); return res; } diff --git a/crypto/vm/cells/CellString.h b/crypto/vm/cells/CellString.h index 78b63f35..10bd89aa 100644 --- a/crypto/vm/cells/CellString.h +++ b/crypto/vm/cells/CellString.h @@ -52,7 +52,7 @@ class CellText { private: template - static void for_each(F &&f, CellSlice cs); + static td::Status for_each(F &&f, CellSlice cs); static td::Ref do_store(td::BitSlice slice); }; diff --git a/crypto/vm/vm.cpp b/crypto/vm/vm.cpp index 630f4991..4d3e67af 100644 --- a/crypto/vm/vm.cpp +++ b/crypto/vm/vm.cpp @@ -633,7 +633,7 @@ Ref VmState::load_library(td::ConstBitPtr hash) { return lib; } } - missing_library = hash; + missing_library = td::Bits256{hash}; return {}; } diff --git a/crypto/vm/vm.h b/crypto/vm/vm.h index 6fd1797c..e3fda318 100644 --- a/crypto/vm/vm.h +++ b/crypto/vm/vm.h @@ -25,6 +25,7 @@ #include "vm/log.h" #include "vm/continuation.h" #include "td/utils/HashSet.h" +#include "td/utils/optional.h" namespace vm { @@ -97,7 +98,7 @@ class VmState final : public VmStateInterface { td::HashSet loaded_cells; int stack_trace{0}, debug_off{0}; bool chksig_always_succeed{false}; - td::ConstBitPtr missing_library{0}; + td::optional missing_library; td::uint16 max_data_depth = 512; // Default value int global_version{0}; size_t chksgn_counter = 0; @@ -383,7 +384,7 @@ class VmState final : public VmStateInterface { Ref ref_to_cont(Ref cell) const { return td::make_ref(load_cell_slice_ref(std::move(cell)), get_cp()); } - td::ConstBitPtr get_missing_library() const { + td::optional get_missing_library() const { return missing_library; } void set_max_data_depth(td::uint16 depth) { diff --git a/emulator/emulator-extern.cpp b/emulator/emulator-extern.cpp index 885286d5..3a439831 100644 --- a/emulator/emulator-extern.cpp +++ b/emulator/emulator-extern.cpp @@ -522,10 +522,10 @@ const char *tvm_emulator_run_get_method(void *tvm_emulator, int method_id, const json_obj("gas_used", std::to_string(result.gas_used)); json_obj("vm_exit_code", result.code); json_obj("vm_log", result.vm_log); - if (result.missing_library.is_null()) { + if (!result.missing_library) { json_obj("missing_library", td::JsonNull()); } else { - json_obj("missing_library", td::Bits256(result.missing_library).to_hex()); + json_obj("missing_library", result.missing_library.value().to_hex()); } json_obj.leave(); @@ -548,10 +548,10 @@ const char *tvm_emulator_send_external_message(void *tvm_emulator, const char *m json_obj("vm_exit_code", result.code); json_obj("accepted", td::JsonBool(result.accepted)); json_obj("vm_log", result.vm_log); - if (result.missing_library.is_null()) { + if (!result.missing_library) { json_obj("missing_library", td::JsonNull()); } else { - json_obj("missing_library", td::Bits256(result.missing_library).to_hex()); + json_obj("missing_library", result.missing_library.value().to_hex()); } if (result.actions.is_null()) { json_obj("actions", td::JsonNull()); @@ -581,10 +581,10 @@ const char *tvm_emulator_send_internal_message(void *tvm_emulator, const char *m json_obj("vm_exit_code", result.code); json_obj("accepted", td::JsonBool(result.accepted)); json_obj("vm_log", result.vm_log); - if (result.missing_library.is_null()) { + if (!result.missing_library) { json_obj("missing_library", td::JsonNull()); } else { - json_obj("missing_library", td::Bits256(result.missing_library).to_hex()); + json_obj("missing_library", result.missing_library.value().to_hex()); } if (result.actions.is_null()) { json_obj("actions", td::JsonNull()); diff --git a/storage/TorrentHeader.hpp b/storage/TorrentHeader.hpp index d8f8f719..15b2d8b9 100644 --- a/storage/TorrentHeader.hpp +++ b/storage/TorrentHeader.hpp @@ -68,13 +68,23 @@ void TorrentHeader::parse(ParserT &parser) { parser.set_error("Unknown fec type"); return; } - name_index.resize(files_count); - for (auto &x : name_index) { + name_index.clear(); + for (size_t i = 0; i < files_count; ++i) { + td::uint64 x; parse(x, parser); + if (parser.get_error()) { + return; + } + name_index.push_back(x); } - data_index.resize(files_count); - for (auto &x : data_index) { + data_index.clear(); + for (size_t i = 0; i < files_count; ++i) { + td::uint64 x; parse(x, parser); + if (parser.get_error()) { + return; + } + data_index.push_back(x); } names = parser.template fetch_string_raw(tot_names_size); } diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index 816c6868..c571cf65 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -4552,12 +4552,12 @@ void TonlibClient::perform_smc_execution(td::Ref smc, ton::S } auto res_stack = R.move_as_ok(); - if (res.missing_library.not_null()) { - td::Bits256 hash = res.missing_library; + if (res.missing_library) { + td::Bits256 hash = res.missing_library.value(); LOG(DEBUG) << "Requesting missing library: " << hash.to_hex(); - std::vector req = {std::move(hash)}; + std::vector req = {hash}; client_.send_query(ton::lite_api::liteServer_getLibraries(std::move(req)), - [self = this, res = std::move(res), res_stack = std::move(res_stack), hash = std::move(hash), + [self = this, res = std::move(res), res_stack = std::move(res_stack), hash, smc = std::move(smc), args = std::move(args), promise = std::move(promise)] (td::Result> r_libraries) mutable { From f923b96a2f85ca3d9b8e96ff2623ec5089a17608 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 14 Jul 2023 15:38:21 +0300 Subject: [PATCH 024/351] Add Tonlib emulator libs (#744) * Use global libraries in RunEmulator * Tonlib method smc.getLibrariesExt * Process missing transaction in getStateByTransaction --------- Co-authored-by: SpyCheese --- tl/generate/scheme/tonlib_api.tl | 5 + tl/generate/scheme/tonlib_api.tlo | Bin 32296 -> 32948 bytes tonlib/tonlib/TonlibClient.cpp | 196 +++++++++++++++++++++++------- tonlib/tonlib/TonlibClient.h | 8 ++ 4 files changed, 164 insertions(+), 45 deletions(-) diff --git a/tl/generate/scheme/tonlib_api.tl b/tl/generate/scheme/tonlib_api.tl index bcfc625d..af08cbd7 100644 --- a/tl/generate/scheme/tonlib_api.tl +++ b/tl/generate/scheme/tonlib_api.tl @@ -184,6 +184,10 @@ smc.runResult gas_used:int53 stack:vector exit_code:int32 = smc. smc.libraryEntry hash:int256 data:bytes = smc.LibraryEntry; smc.libraryResult result:(vector smc.libraryEntry) = smc.LibraryResult; +smc.libraryQueryExt.one hash:int256 = smc.LibraryQueryExt; +smc.libraryQueryExt.scanBoc boc:bytes max_libs:int32 = smc.LibraryQueryExt; +smc.libraryResultExt dict_boc:bytes libs_ok:(vector int256) libs_not_found:(vector int256) = smc.LibraryResultExt; + updateSendLiteServerQuery id:int64 data:bytes = Update; updateSyncState sync_state:SyncState = Update; @@ -306,6 +310,7 @@ smc.getState id:int53 = tvm.Cell; smc.runGetMethod id:int53 method:smc.MethodId stack:vector = smc.RunResult; smc.getLibraries library_list:(vector int256) = smc.LibraryResult; +smc.getLibrariesExt list:(vector smc.LibraryQueryExt) = smc.LibraryResultExt; dns.resolve account_address:accountAddress name:string category:int256 ttl:int32 = dns.Resolved; diff --git a/tl/generate/scheme/tonlib_api.tlo b/tl/generate/scheme/tonlib_api.tlo index 023a4953e5fdbe655e9c6e28499ca757b344c5ce..6644d118ca6b8efa6a9ae2fd60439bea157bc17a 100644 GIT binary patch delta 431 zcmZ4ShjB|I6Yrzh`c@23ki3z1IiDn(U%_tS;@o6CpUkA9#G=Z;($u0#*NPIRi66x$ zZ{ahLEP8uyiwKf}pw!~hoD!gl$&O6I6B{@-KjAB3WbE47jvY27=zX&-Nkh;kVfipH;+YW*h JEY_%I1^`nToT2~# delta 61 zcmdne$h6`QBk!Zx`c@23khqa|Ip5?bd using lite_api_ptr = ton::lite_api::object_ptr; @@ -101,6 +102,11 @@ struct RemoteRunSmcMethodReturnType { // libs }; +struct ScanAndLoadGlobalLibs { + td::Ref root; + using ReturnType = vm::Dictionary; +}; + struct GetPrivateKey { KeyStorage::InputKey input_key; using ReturnType = KeyStorage::PrivateKey; @@ -1668,11 +1674,11 @@ class GetShardBlockProof : public td::actor::Actor { auto to_lite_api(const tonlib_api::ton_blockIdExt& blk) -> td::Result>; auto to_tonlib_api(const ton::lite_api::liteServer_transactionId& txid) -> tonlib_api_ptr; -class RunEmulator : public td::actor::Actor { +class RunEmulator : public TonlibQueryActor { public: RunEmulator(ExtClientRef ext_client_ref, int_api::GetAccountStateByTransaction request, - td::actor::ActorShared<> parent, td::Promise>&& promise) - : request_(std::move(request)), parent_(std::move(parent)), promise_(std::move(promise)) { + td::actor::ActorShared parent, td::Promise>&& promise) + : TonlibQueryActor(std::move(parent)), request_(std::move(request)), promise_(std::move(promise)) { client_.set_client(ext_client_ref); } @@ -1686,7 +1692,6 @@ class RunEmulator : public td::actor::Actor { ExtClient client_; int_api::GetAccountStateByTransaction request_; - td::actor::ActorShared<> parent_; td::Promise> promise_; std::map> actors_; @@ -1695,6 +1700,7 @@ class RunEmulator : public td::actor::Actor { FullBlockId block_id_; td::Ref mc_state_root_; // ^ShardStateUnsplit td::unique_ptr account_state_; + vm::Dictionary global_libraries_{256}; std::vector> transactions_; // std::vector<^Transaction> size_t count_{0}; @@ -1805,6 +1811,8 @@ class RunEmulator : public td::actor::Actor { if (bTxes->incomplete_) { self->check(self->get_transactions(last_lt)); + } else { + self->check(td::Status::Error("Transaction not found")); } }); return td::Status::OK(); @@ -1854,6 +1862,16 @@ class RunEmulator : public td::actor::Actor { check(account_state.move_as_error()); } else { account_state_ = account_state.move_as_ok(); + send_query(int_api::ScanAndLoadGlobalLibs{account_state_->get_raw_state()}, + [self = this](td::Result R) { self->set_global_libraries(std::move(R)); }); + } + } + + void set_global_libraries(td::Result R) { + if (R.is_error()) { + check(R.move_as_error()); + } else { + global_libraries_ = R.move_as_ok(); inc(); } } @@ -1887,13 +1905,6 @@ class RunEmulator : public td::actor::Actor { } std::unique_ptr config = r_config.move_as_ok(); - block::gen::ShardStateUnsplit::Record shard_state; - if (!tlb::unpack_cell(mc_state_root_, shard_state)) { - check(td::Status::Error("Failed to unpack masterchain state")); - return; - } - vm::Dictionary libraries(shard_state.r1.libraries->prefetch_ref(), 256); - auto r_shard_account = account_state_->to_shardAccountCellSlice(); if (r_shard_account.is_error()) { check(r_shard_account.move_as_error()); @@ -1915,6 +1926,7 @@ class RunEmulator : public td::actor::Actor { check(prev_blocks_info.move_as_error()); return; } + vm::Dictionary libraries = global_libraries_; emulator::TransactionEmulator trans_emulator(std::move(*config)); trans_emulator.set_prev_blocks_info(prev_blocks_info.move_as_ok()); trans_emulator.set_libs(std::move(libraries)); @@ -4376,8 +4388,8 @@ td::Result from_tonlib_api(tonlib_api::tvm_StackEntry& entry) { } void deep_library_search(std::set& set, std::set& visited, - vm::Dictionary& libs, td::Ref cell, int depth) { - if (depth <= 0 || set.size() >= 16 || visited.size() >= 256) { + vm::Dictionary& libs, td::Ref cell, int depth, size_t max_libs = 16) { + if (depth <= 0 || set.size() >= max_libs || visited.size() >= 256) { return; } auto ins = visited.insert(cell->get_hash()); @@ -4403,7 +4415,7 @@ void deep_library_search(std::set& set, std::set& v return; } for (unsigned int i=0; iget_refs_cnt(); i++) { - deep_library_search(set, visited, libs, loaded_cell.data_cell->get_ref(i), depth - 1); + deep_library_search(set, visited, libs, loaded_cell.data_cell->get_ref(i), depth - 1, max_libs); } } @@ -4459,6 +4471,72 @@ td::Status TonlibClient::do_request(const tonlib_api::smc_getLibraries& request, return td::Status::OK(); } +td::Status TonlibClient::do_request(const tonlib_api::smc_getLibrariesExt& request, + td::Promise>&& promise) { + std::set request_libs; + for (auto& x : request.list_) { + td::Status status = td::Status::OK(); + downcast_call(*x, td::overloaded([&](tonlib_api::smc_libraryQueryExt_one& one) { request_libs.insert(one.hash_); }, + [&](tonlib_api::smc_libraryQueryExt_scanBoc& scan) { + std::set visited; + vm::Dictionary empty{256}; + td::Result> r_cell = vm::std_boc_deserialize(scan.boc_); + if (r_cell.is_error()) { + status = r_cell.move_as_error(); + return; + } + size_t max_libs = scan.max_libs_ < 0 ? (1 << 30) : (size_t)scan.max_libs_; + std::set new_libs; + deep_library_search(new_libs, visited, empty, r_cell.move_as_ok(), 1024, + max_libs); + request_libs.insert(new_libs.begin(), new_libs.end()); + })); + TRY_STATUS(std::move(status)); + } + std::vector not_cached; + for (const td::Bits256& h : request_libs) { + if (libraries.lookup(h).is_null()) { + not_cached.push_back(h); + } + } + td::MultiPromise mp; + auto ig = mp.init_guard(); + LOG(DEBUG) << "Requesting " << not_cached.size() << " libraries"; + for (size_t i = 0; i < not_cached.size(); i += 16) { + size_t r = std::min(i + 16, not_cached.size()); + client_.send_query( + ton::lite_api::liteServer_getLibraries( + std::vector(not_cached.begin() + i, not_cached.begin() + r)), + [self = this, promise = ig.get_promise()]( + td::Result> r_libraries) mutable { + self->process_new_libraries(std::move(r_libraries)); + promise.set_result(td::Unit()); + }); + } + + ig.add_promise(promise.wrap([self = this, libs = std::move(request_libs)](td::Unit&&) { + vm::Dictionary dict{256}; + std::vector libs_ok, libs_not_found; + for (const auto& h : libs) { + auto lib = self->libraries.lookup_ref(h); + if (lib.is_null()) { + libs_not_found.push_back(h); + } else { + libs_ok.push_back(h); + dict.set_ref(h, lib); + } + } + td::BufferSlice dict_boc; + if (!dict.is_empty()) { + dict_boc = vm::std_boc_serialize(dict.get_root_cell()).move_as_ok(); + } + return ton::create_tl_object(dict_boc.as_slice().str(), std::move(libs_ok), + std::move(libs_not_found)); + })); + + return td::Status::OK(); +} + td::Status TonlibClient::do_request(const tonlib_api::smc_runGetMethod& request, td::Promise>&& promise) { auto it = smcs_.find(request.id_); @@ -4496,37 +4574,14 @@ td::Status TonlibClient::do_request(const tonlib_api::smc_runGetMethod& request, std::vector libraryList{librarySet.begin(), librarySet.end()}; if (libraryList.size() > 0) { LOG(DEBUG) << "Requesting found libraries in code (" << libraryList.size() << ")"; - self->client_.send_query(ton::lite_api::liteServer_getLibraries(std::move(libraryList)), - [self, smc = std::move(smc), args = std::move(args), promise = std::move(promise)] - (td::Result> r_libraries) mutable - { - if (r_libraries.is_error()) { - LOG(WARNING) << "cannot obtain found libraries: " << r_libraries.move_as_error().to_string(); - } else { - auto libraries = r_libraries.move_as_ok(); - bool updated = false; - for (auto& lr : libraries->result_) { - auto contents = vm::std_boc_deserialize(lr->data_); - if (contents.is_ok() && contents.ok().not_null()) { - if (contents.ok()->get_hash().bits().compare(lr->hash_.cbits(), 256)) { - LOG(WARNING) << "hash mismatch for library " << lr->hash_.to_hex(); - continue; - } - self->libraries.set_ref(lr->hash_, contents.move_as_ok()); - updated = true; - LOG(DEBUG) << "registered library " << lr->hash_.to_hex(); - } else { - LOG(WARNING) << "failed to deserialize library: " << lr->hash_.to_hex(); - } - } - if (updated) { - self->store_libs_to_disk(); - } - } - self->perform_smc_execution(std::move(smc), std::move(args), std::move(promise)); - }); - } - else { + self->client_.send_query( + ton::lite_api::liteServer_getLibraries(std::move(libraryList)), + [self, smc = std::move(smc), args = std::move(args), promise = std::move(promise)]( + td::Result> r_libraries) mutable { + self->process_new_libraries(std::move(r_libraries)); + self->perform_smc_execution(std::move(smc), std::move(args), std::move(promise)); + }); + } else { self->perform_smc_execution(std::move(smc), std::move(args), std::move(promise)); } } @@ -4537,6 +4592,33 @@ td::Status TonlibClient::do_request(const tonlib_api::smc_runGetMethod& request, return td::Status::OK(); } +void TonlibClient::process_new_libraries( + td::Result> r_libraries) { + if (r_libraries.is_error()) { + LOG(WARNING) << "cannot obtain found libraries: " << r_libraries.move_as_error().to_string(); + } else { + auto new_libraries = r_libraries.move_as_ok(); + bool updated = false; + for (auto& lr : new_libraries->result_) { + auto contents = vm::std_boc_deserialize(lr->data_); + if (contents.is_ok() && contents.ok().not_null()) { + if (contents.ok()->get_hash().bits().compare(lr->hash_.cbits(), 256)) { + LOG(WARNING) << "hash mismatch for library " << lr->hash_.to_hex(); + continue; + } + libraries.set_ref(lr->hash_, contents.move_as_ok()); + updated = true; + LOG(DEBUG) << "registered library " << lr->hash_.to_hex(); + } else { + LOG(WARNING) << "failed to deserialize library: " << lr->hash_.to_hex(); + } + } + if (updated) { + store_libs_to_disk(); + } + } +} + void TonlibClient::perform_smc_execution(td::Ref smc, ton::SmartContract::Args args, td::Promise>&& promise) { @@ -5622,6 +5704,30 @@ void TonlibClient::store_libs_to_disk() { // NB: Dictionary.get_root_cell does LOG(DEBUG) << "stored libraries to disk cache"; } +td::Status TonlibClient::do_request(const int_api::ScanAndLoadGlobalLibs& request, td::Promise promise) { + if (request.root.is_null()) { + promise.set_value(vm::Dictionary{256}); + return td::Status::OK(); + } + std::set to_load; + std::set visited; + deep_library_search(to_load, visited, libraries, request.root, 24); + if (to_load.empty()) { + promise.set_result(libraries); + return td::Status::OK(); + } + std::vector to_load_list(to_load.begin(), to_load.end()); + LOG(DEBUG) << "Requesting found libraries in account state (" << to_load_list.size() << ")"; + client_.send_query( + ton::lite_api::liteServer_getLibraries(std::move(to_load_list)), + [self = this, promise = std::move(promise)]( + td::Result> r_libraries) mutable { + self->process_new_libraries(std::move(r_libraries)); + promise.set_result(self->libraries); + }); + return td::Status::OK(); +} + template td::Status TonlibClient::do_request(const tonlib_api::runTests& request, P&&) { UNREACHABLE(); diff --git a/tonlib/tonlib/TonlibClient.h b/tonlib/tonlib/TonlibClient.h index ed81760f..f4651b9d 100644 --- a/tonlib/tonlib/TonlibClient.h +++ b/tonlib/tonlib/TonlibClient.h @@ -45,6 +45,7 @@ struct GetDnsResolver; struct SendMessage; struct RemoteRunSmcMethod; struct RemoteRunSmcMethodReturnType; +struct ScanAndLoadGlobalLibs; inline std::string to_string(const int_api::SendMessage&) { return "Send message"; @@ -330,6 +331,9 @@ class TonlibClient : public td::actor::Actor { td::Status do_request(const tonlib_api::smc_getLibraries& request, td::Promise>&& promise); + td::Status do_request(const tonlib_api::smc_getLibrariesExt& request, + td::Promise>&& promise); + td::Status do_request(const tonlib_api::dns_resolve& request, td::Promise>&& promise); @@ -341,6 +345,8 @@ class TonlibClient : public td::actor::Actor { td::Status do_request(tonlib_api::pchan_unpackPromise& request, td::Promise>&& promise); + void process_new_libraries( + td::Result> r_libraries); void perform_smc_execution(td::Ref smc, ton::SmartContract::Args args, td::Promise>&& promise); @@ -408,5 +414,7 @@ class TonlibClient : public td::actor::Actor { td::Status guess_revisions(std::vector targets, td::Promise>&& promise); + + td::Status do_request(const int_api::ScanAndLoadGlobalLibs& request, td::Promise promise); }; } // namespace tonlib From afb630bf41e58c896ea5446023698ae14168c544 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 14 Jul 2023 15:39:03 +0300 Subject: [PATCH 025/351] --shutdown-at parameter for validator-engine (#745) Co-authored-by: SpyCheese --- validator-engine/validator-engine.cpp | 18 ++++++++++++++++++ validator-engine/validator-engine.hpp | 1 + 2 files changed, 19 insertions(+) diff --git a/validator-engine/validator-engine.cpp b/validator-engine/validator-engine.cpp index 65b93df7..aaa4f849 100644 --- a/validator-engine/validator-engine.cpp +++ b/validator-engine/validator-engine.cpp @@ -71,6 +71,7 @@ #include "git.h" #include "block-auto.h" #include "block-parse.h" +#include "common/delay.h" Config::Config() { out_port = 3278; @@ -1174,6 +1175,18 @@ void ValidatorEngine::set_global_config(std::string str) { void ValidatorEngine::set_db_root(std::string db_root) { db_root_ = db_root; } +void ValidatorEngine::schedule_shutdown(double at) { + td::Timestamp ts = td::Timestamp::at_unix(at); + if (ts.is_in_past()) { + LOG(DEBUG) << "Scheduled shutdown is in past (" << at << ")"; + } else { + LOG(INFO) << "Schedule shutdown for " << at << " (in " << ts.in() << "s)"; + ton::delay_action([]() { + LOG(WARNING) << "Shutting down as scheduled"; + std::_Exit(0); + }, ts); + } +} void ValidatorEngine::start_up() { alarm_timestamp() = td::Timestamp::in(1.0 + td::Random::fast(0, 100) * 0.01); } @@ -3743,6 +3756,11 @@ int main(int argc, char *argv[]) { return td::Status::OK(); }); p.add_checked_option('u', "user", "change user", [&](td::Slice user) { return td::change_user(user.str()); }); + p.add_checked_option('\0', "shutdown-at", "stop validator at the given time (unix timestamp)", [&](td::Slice arg) { + TRY_RESULT(at, td::to_integer_safe(arg)); + acts.push_back([&x, at]() { td::actor::send_closure(x, &ValidatorEngine::schedule_shutdown, (double)at); }); + return td::Status::OK(); + }); auto S = p.run(argc, argv); if (S.is_error()) { LOG(ERROR) << "failed to parse options: " << S.move_as_error(); diff --git a/validator-engine/validator-engine.hpp b/validator-engine/validator-engine.hpp index e2367419..2d966351 100644 --- a/validator-engine/validator-engine.hpp +++ b/validator-engine/validator-engine.hpp @@ -256,6 +256,7 @@ class ValidatorEngine : public td::actor::Actor { void add_key_to_set(ton::PublicKey key) { keys_[key.compute_short_id()] = key; } + void schedule_shutdown(double at); void start_up() override; ValidatorEngine() { } From 50d2361394e8fcd60827e919ec2f87112001d952 Mon Sep 17 00:00:00 2001 From: neodiX42 Date: Fri, 14 Jul 2023 15:27:59 +0200 Subject: [PATCH 026/351] On MacOS, writing more than 0x7fffffff bytes will fail with errno 22 (#737) --- validator/db/files-async.hpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/validator/db/files-async.hpp b/validator/db/files-async.hpp index 2da534bf..bcb7fa8b 100644 --- a/validator/db/files-async.hpp +++ b/validator/db/files-async.hpp @@ -82,10 +82,9 @@ class WriteFile : public td::actor::Actor { : tmp_dir_(tmp_dir), new_name_(new_name), promise_(std::move(promise)) { write_data_ = [data_ptr = std::make_shared(std::move(data))] (td::FileFd& fd) { auto data = std::move(*data_ptr); - td::uint64 offset = 0; while (data.size() > 0) { - TRY_RESULT(s, fd.pwrite(data.as_slice(), offset)); - offset += s; + auto piece_size = std::min(data.size(), 1 << 30); + TRY_RESULT(s, fd.write(data.as_slice().substr(0, piece_size))); data.confirm_read(s); } return td::Status::OK(); From 6074702d059fee2b9456e47c294693447ca222ef Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 17 Jul 2023 17:20:01 +0300 Subject: [PATCH 027/351] Fix extracting version from config in tonlib (#748) Co-authored-by: SpyCheese --- tonlib/tonlib/LastConfig.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tonlib/tonlib/LastConfig.cpp b/tonlib/tonlib/LastConfig.cpp index bcc3c081..e972d84e 100644 --- a/tonlib/tonlib/LastConfig.cpp +++ b/tonlib/tonlib/LastConfig.cpp @@ -93,7 +93,8 @@ td::Status LastConfig::process_config_proof(ton::ton_api::object_ptrstate_proof_.as_slice(), raw_config->config_proof_.as_slice())); - TRY_RESULT(config, block::ConfigInfo::extract_config(std::move(state), block::ConfigInfo::needPrevBlocks)); + TRY_RESULT(config, block::ConfigInfo::extract_config( + std::move(state), block::ConfigInfo::needPrevBlocks | block::ConfigInfo::needCapabilities)); for (auto i : params_) { VLOG(last_config) << "ConfigParam(" << i << ") = "; From 6e5145305694debad7a95a838cb7e6b4bba0f7e3 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Mon, 7 Aug 2023 19:48:33 +0300 Subject: [PATCH 028/351] Fix parsing dict of public libraries (#762) --- validator/impl/validate-query.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index 41955897..4e4100f5 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -4796,27 +4796,27 @@ bool ValidateQuery::check_one_library_update(td::ConstBitPtr key, Ref old_publishers, new_publishers; if (new_value.not_null()) { - if (!block::gen::t_LibDescr.validate_csr(new_value)) { - return reject_query("LibDescr with key "s + key.to_hex(256) + - " in the libraries dictionary of the new state failed to pass automatic validity tests"); + block::gen::LibDescr::Record rec; + if (!block::gen::csr_unpack(std::move(new_value), rec)) { + return reject_query("failed to unpack LibDescr with key "s + key.to_hex(256) + + " in the libraries dictionary of the new state"); } - auto lib_ref = new_value->prefetch_ref(); - CHECK(lib_ref.not_null()); - if (lib_ref->get_hash().as_bitslice() != key) { + if (rec.lib->get_hash().as_bitslice() != key) { return reject_query("LibDescr with key "s + key.to_hex(256) + " in the libraries dictionary of the new state contains a library with different root hash " + - lib_ref->get_hash().to_hex()); + rec.lib->get_hash().to_hex()); } - CHECK(new_value.write().advance_ext(2, 1)); - new_publishers = std::make_unique(vm::DictNonEmpty(), std::move(new_value), 256); + new_publishers = std::make_unique(vm::DictNonEmpty(), std::move(rec.publishers), 256); } else { new_publishers = std::make_unique(256); } - if (old_value.not_null() && !block::gen::t_LibDescr.validate_csr(old_value)) { - return reject_query("LibDescr with key "s + key.to_hex(256) + - " in the libraries dictionary of the old state failed to pass automatic validity tests"); - CHECK(old_value.write().advance_ext(2, 1)); - old_publishers = std::make_unique(vm::DictNonEmpty(), std::move(old_value), 256); + if (old_value.not_null()) { + block::gen::LibDescr::Record rec; + if (!block::gen::csr_unpack(std::move(old_value), rec)) { + return reject_query("failed to unpack LibDescr with key "s + key.to_hex(256) + + " in the libraries dictionary of the old state"); + } + old_publishers = std::make_unique(vm::DictNonEmpty(), std::move(rec.publishers), 256); } else { old_publishers = std::make_unique(256); } From 41ed354b9fab9fa7d99a499b2a57eaeb635e32db Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Thu, 12 Oct 2023 14:53:54 +0300 Subject: [PATCH 029/351] Explicitly handle special cells in action list (#777) --- crypto/block/transaction.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 92a5bfe2..298cf4a0 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -962,7 +962,12 @@ int output_actions_count(Ref list) { int i = -1; do { ++i; - list = load_cell_slice(std::move(list)).prefetch_ref(); + bool special = true; + auto cs = load_cell_slice_special(std::move(list), special); + if (special) { + break; + } + list = cs.prefetch_ref(); } while (list.not_null()); return i; } @@ -1148,7 +1153,8 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { int out_act_num = output_actions_count(cp.actions); if (verbosity > 2) { std::cerr << "new smart contract data: "; - load_cell_slice(cp.new_data).print_rec(std::cerr); + bool can_be_special = true; + load_cell_slice_special(cp.new_data, can_be_special).print_rec(std::cerr); std::cerr << "output actions: "; block::gen::OutList{out_act_num}.print_ref(std::cerr, cp.actions); } @@ -1219,7 +1225,15 @@ bool Transaction::prepare_action_phase(const ActionPhaseConfig& cfg) { int n = 0; while (true) { ap.action_list.push_back(list); - auto cs = load_cell_slice(std::move(list)); + bool special = true; + auto cs = load_cell_slice_special(std::move(list), special); + if (special) { + ap.result_code = 32; // action list invalid + ap.result_arg = n; + ap.action_list_invalid = true; + LOG(DEBUG) << "action list invalid: special cell"; + return true; + } if (!cs.size_ext()) { break; } From cdf96a21d02bc9eabbaab9ccff84511692d86c2d Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Thu, 12 Oct 2023 14:54:14 +0300 Subject: [PATCH 030/351] Do not retranslate external messages with wrong initstate (#778) --- crypto/block/transaction.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 298cf4a0..0c77317f 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1084,6 +1084,11 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { } else if (in_msg_state.not_null()) { unpack_msg_state(true); // use only libraries } + if (in_msg_extern && in_msg_state.not_null() && account.addr != in_msg_state->get_hash().bits()) { + LOG(DEBUG) << "in_msg_state hash mismatch in external message"; + cp.skip_reason = ComputePhase::sk_bad_state; + return true; + } // initialize VM Ref stack = prepare_vm_stack(cp); if (stack.is_null()) { From ddd3d44d5bbf643f8d1817ba52c6c4fa1f547f38 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Thu, 12 Oct 2023 14:54:38 +0300 Subject: [PATCH 031/351] Check peers prior to saving it to local db (#779) --- overlay/overlay.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/overlay/overlay.cpp b/overlay/overlay.cpp index a562beb6..fcf766fe 100644 --- a/overlay/overlay.cpp +++ b/overlay/overlay.cpp @@ -291,7 +291,11 @@ void OverlayImpl::alarm() { if (peers_.size() > 0) { std::vector vec; for (td::uint32 i = 0; i < 20; i++) { - vec.push_back(get_random_peer()->get()); + auto P = get_random_peer(); + if (!P) { + break; + } + vec.push_back(P->get()); } td::actor::send_closure(manager_, &OverlayManager::save_to_db, local_id_, overlay_id_, std::move(vec)); } From b2a09eda17da7ba6700bd020ae7c6d92f634dca2 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Thu, 12 Oct 2023 14:55:26 +0300 Subject: [PATCH 032/351] Human-readable timestamps in explorer (#776) --- .../blockchain-explorer-http.cpp | 40 ++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/blockchain-explorer/blockchain-explorer-http.cpp b/blockchain-explorer/blockchain-explorer-http.cpp index 8642e900..e2322ff7 100644 --- a/blockchain-explorer/blockchain-explorer-http.cpp +++ b/blockchain-explorer/blockchain-explorer-http.cpp @@ -35,9 +35,38 @@ #include "vm/cells/MerkleProof.h" #include "block/mc-config.h" #include "ton/ton-shard.h" +#include "td/utils/date.h" bool local_scripts{false}; +static std::string time_to_human(unsigned ts) { + td::StringBuilder sb; + sb << date::format("%F %T", + std::chrono::time_point{std::chrono::seconds(ts)}) + << ", "; + auto now = (unsigned)td::Clocks::system(); + bool past = now >= ts; + unsigned x = past ? now - ts : ts - now; + if (!past) { + sb << "in "; + } + if (x < 60) { + sb << x << "s"; + } else if (x < 3600) { + sb << x / 60 << "m " << x % 60 << "s"; + } else if (x < 3600 * 24) { + x /= 60; + sb << x / 60 << "h " << x % 60 << "m"; + } else { + x /= 3600; + sb << x / 24 << "d " << x % 24 << "h"; + } + if (past) { + sb << " ago"; + } + return sb.as_cslice().str(); +} + HttpAnswer& HttpAnswer::operator<<(AddressCell addr_c) { ton::WorkchainId wc; ton::StdSmcAddress addr; @@ -84,7 +113,7 @@ HttpAnswer& HttpAnswer::operator<<(MessageCell msg) { << "source" << AddressCell{info.src} << "\n" << "destinationNONE\n" << "lt" << info.created_lt << "\n" - << "time" << info.created_at << "\n"; + << "time" << info.created_at << " (" << time_to_human(info.created_at) << ")\n"; break; } case block::gen::CommonMsgInfo::int_msg_info: { @@ -103,7 +132,7 @@ HttpAnswer& HttpAnswer::operator<<(MessageCell msg) { << "source" << AddressCell{info.src} << "\n" << "destination" << AddressCell{info.dest} << "\n" << "lt" << info.created_lt << "\n" - << "time" << info.created_at << "\n" + << "time" << info.created_at << " (" << time_to_human(info.created_at) << ")\n" << "value" << value << "\n"; break; } @@ -277,7 +306,7 @@ HttpAnswer& HttpAnswer::operator<<(TransactionCell trans_c) { << "account" << trans_c.addr.rserialize(true) << "" << "hash" << trans_c.root->get_hash().to_hex() << "\n" << "lt" << trans.lt << "\n" - << "time" << trans.now << "\n" + << "time" << trans.now << " (" << time_to_human(trans.now) << ")\n" << "out messages"; vm::Dictionary dict{trans.r1.out_msgs, 15}; for (td::int32 i = 0; i < trans.outmsg_cnt; i++) { @@ -456,7 +485,7 @@ HttpAnswer& HttpAnswer::operator<<(BlockHeaderCell head_c) { << "block" << block_id.id.to_str() << "\n" << "roothash" << block_id.root_hash.to_hex() << "\n" << "filehash" << block_id.file_hash.to_hex() << "\n" - << "time" << info.gen_utime << "\n" + << "time" << info.gen_utime << " (" << time_to_human(info.gen_utime) << ")\n" << "lt" << info.start_lt << " .. " << info.end_lt << "\n" << "global_id" << blk.global_id << "\n" << "version" << info.version << "\n" @@ -543,7 +572,8 @@ HttpAnswer& HttpAnswer::operator<<(BlockShardsCell shards_c) { ton::ShardIdFull shard{id.workchain, id.shard}; if (ref.not_null()) { *this << "" << shard.to_str() << "top_block_id()} - << "\">" << ref->top_block_id().id.seqno << "" << ref->created_at() << "" + << "\">" << ref->top_block_id().id.seqno << "created_at()) << "\">" << ref->created_at() << "" << "" << ref->want_split_ << "" << "" << ref->want_merge_ << "" << "" << ref->before_split_ << "" From 7f815fc3bda2335e6ecfbeeecfbc40ab766e5b1f Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Tue, 17 Oct 2023 15:19:58 +0300 Subject: [PATCH 033/351] Add "getconfig" to tonlib-cli (#780) --- tonlib/tonlib/tonlib-cli.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tonlib/tonlib/tonlib-cli.cpp b/tonlib/tonlib/tonlib-cli.cpp index ba476599..fee07496 100644 --- a/tonlib/tonlib/tonlib-cli.cpp +++ b/tonlib/tonlib/tonlib-cli.cpp @@ -390,6 +390,7 @@ class TonlibCli : public td::actor::Actor { " with specified parameters\n"; td::TerminalIO::out() << "getstate \tget state of wallet with requested key\n"; td::TerminalIO::out() << "getstatebytransaction \tget state of wallet with requested key after transaction with local time and hash (base64url)\n"; + td::TerminalIO::out() << "getconfig \tshow specified configuration parameter from the latest masterchain state\n"; td::TerminalIO::out() << "guessrevision \tsearch of existing accounts corresponding to the given key\n"; td::TerminalIO::out() << "guessaccount \tsearch of existing accounts corresponding to the given key\n"; td::TerminalIO::out() << "getaddress \tget address of wallet with requested key\n"; @@ -492,6 +493,8 @@ class TonlibCli : public td::actor::Actor { get_state(parser.read_word(), std::move(cmd_promise)); } else if (cmd == "getstatebytransaction") { get_state_by_transaction(parser, std::move(cmd_promise)); + } else if (cmd == "getconfig") { + get_config_param(parser, std::move(cmd_promise)); } else if (cmd == "getaddress") { get_address(parser.read_word(), std::move(cmd_promise)); } else if (cmd == "importkeypem") { @@ -2094,6 +2097,26 @@ class TonlibCli : public td::actor::Actor { })); } + void get_config_param(td::ConstParser& parser, td::Promise promise) { + TRY_RESULT_PROMISE(promise, param, td::to_integer_safe(parser.read_word())); + send_query(make_object(0, param), + promise.wrap([param](auto&& result) -> td::Result { + TRY_RESULT(cell, vm::std_boc_deserialize(result->config_->bytes_, true)); + if (cell.is_null()) { + td::TerminalIO::out() << "ConfigParam(" << param << ") = (null)\n"; + return td::Unit(); + } + std::ostringstream os; + if (param >= 0) { + block::gen::ConfigParam{param}.print_ref(4096, os, cell); + os << "\n"; + } + vm::load_cell_slice(cell).print_rec(4096, os); + td::TerminalIO::out() << "ConfigParam(" << param << ") = " << os.str() << "\n"; + return td::Unit(); + })); + } + void get_address(td::Slice key, td::Promise promise) { TRY_RESULT_PROMISE(promise, address, to_account_address(key, false)); promise.set_value(td::Unit()); From 2bfa6240dd5bf156e4756623c6e079000f3e53b8 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Wed, 25 Oct 2023 12:20:23 +0300 Subject: [PATCH 034/351] Support wallet-v4 in tonlib (#785) --- crypto/CMakeLists.txt | 2 + crypto/smc-envelope/GenericAccount.cpp | 2 +- crypto/smc-envelope/SmartContractCode.cpp | 23 ++++++- crypto/smc-envelope/SmartContractCode.h | 11 +++- crypto/smc-envelope/WalletV4.cpp | 71 +++++++++++++++++++++ crypto/smc-envelope/WalletV4.h | 46 ++++++++++++++ crypto/test/test-smartcont.cpp | 2 + tl/generate/scheme/tonlib_api.tl | 2 + tl/generate/scheme/tonlib_api.tlo | Bin 32948 -> 33224 bytes tonlib/tonlib/TonlibClient.cpp | 73 +++++++++++++++++++++- 10 files changed, 226 insertions(+), 6 deletions(-) create mode 100644 crypto/smc-envelope/WalletV4.cpp create mode 100644 crypto/smc-envelope/WalletV4.h diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 13e4c5bd..9f7a0a5a 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -236,6 +236,7 @@ set(SMC_ENVELOPE_SOURCE smc-envelope/SmartContractCode.cpp smc-envelope/WalletInterface.cpp smc-envelope/WalletV3.cpp + smc-envelope/WalletV4.cpp smc-envelope/GenericAccount.h smc-envelope/HighloadWallet.h @@ -246,6 +247,7 @@ set(SMC_ENVELOPE_SOURCE smc-envelope/SmartContractCode.h smc-envelope/WalletInterface.h smc-envelope/WalletV3.h + smc-envelope/WalletV4.h ) set(ED25519_TEST_SOURCE diff --git a/crypto/smc-envelope/GenericAccount.cpp b/crypto/smc-envelope/GenericAccount.cpp index 4cd6bf3f..04249699 100644 --- a/crypto/smc-envelope/GenericAccount.cpp +++ b/crypto/smc-envelope/GenericAccount.cpp @@ -155,7 +155,7 @@ td::Result GenericAccount::get_wallet_id(const SmartContract& sc) { return TRY_VM([&]() -> td::Result { auto answer = sc.run_get_method("wallet_id"); if (!answer.success) { - return td::Status::Error("seqno get method failed"); + return td::Status::Error("wallet_id get method failed"); } return static_cast(answer.stack.write().pop_long_range(std::numeric_limits::max())); }()); diff --git a/crypto/smc-envelope/SmartContractCode.cpp b/crypto/smc-envelope/SmartContractCode.cpp index d10c4b5c..585450f6 100644 --- a/crypto/smc-envelope/SmartContractCode.cpp +++ b/crypto/smc-envelope/SmartContractCode.cpp @@ -28,6 +28,7 @@ namespace { // WALLET_REVISION = 2; // WALLET2_REVISION = 2; // WALLET3_REVISION = 2; +// WALLET4_REVISION = 2; // HIGHLOAD_WALLET_REVISION = 2; // HIGHLOAD_WALLET2_REVISION = 2; // DNS_REVISION = 1; @@ -92,6 +93,20 @@ const auto& get_map() { "AAXrc52omhpn5jrhf/AABesePaiaGmPmOuFj8ABDbbYHwR7Z5AOAQm1B1tnkA4BTu1E0IEBQNch0x/" "0BNEC2zz4J28QAoAg9HtvpTGX+gAwoXC2CZEw4g8AOiGOETGA8/gzIG6SMHCU0NcLH+IB3yGSAaGSW3/iAAzTB9QC+wAAHssfFMsfEsv/yx/" "0AMntVA=="); + with_tvm_code( + "wallet-v4-r2", + "te6cckECFAEAAtQAART/APSkE/S88sgLAQIBIAIDAgFIBAUE+PKDCNcYINMf0x/THwL4I7vyZO1E0NMf0x/T//" + "QE0VFDuvKhUVG68qIF+QFUEGT5EPKj+AAkpMjLH1JAyx9SMMv/" + "UhD0AMntVPgPAdMHIcAAn2xRkyDXSpbTB9QC+wDoMOAhwAHjACHAAuMAAcADkTDjDQOkyMsfEssfy/" + "8QERITAubQAdDTAyFxsJJfBOAi10nBIJJfBOAC0x8hghBwbHVnvSKCEGRzdHK9sJJfBeAD+kAwIPpEAcjKB8v/" + "ydDtRNCBAUDXIfQEMFyBAQj0Cm+hMbOSXwfgBdM/" + "yCWCEHBsdWe6kjgw4w0DghBkc3RyupJfBuMNBgcCASAICQB4AfoA9AQw+CdvIjBQCqEhvvLgUIIQcGx1Z4MesXCAGFAEywUmzxZY+" + "gIZ9ADLaRfLH1Jgyz8gyYBA+wAGAIpQBIEBCPRZMO1E0IEBQNcgyAHPFvQAye1UAXKwjiOCEGRzdHKDHrFwgBhQBcsFUAPPFiP6AhPLassfyz/" + "JgED7AJJfA+ICASAKCwBZvSQrb2omhAgKBrkPoCGEcNQICEekk30pkQzmkD6f+YN4EoAbeBAUiYcVnzGEAgFYDA0AEbjJftRNDXCx+" + "AA9sp37UTQgQFA1yH0BDACyMoHy//J0AGBAQj0Cm+hMYAIBIA4PABmtznaiaEAga5Drhf/AABmvHfaiaEAQa5DrhY/AAG7SB/" + "oA1NQi+QAFyMoHFcv/ydB3dIAYyMsFywIizxZQBfoCFMtrEszMyXP7AMhAFIEBCPRR8qcCAHCBAQjXGPoA0z/" + "IVCBHgQEI9FHyp4IQbm90ZXB0gBjIywXLAlAGzxZQBPoCFMtqEssfyz/Jc/sAAgBsgQEI1xj6ANM/" + "MFIkgQEI9Fnyp4IQZHN0cnB0gBjIywXLAlAFzxZQA/oCE8tqyx8Syz/Jc/sAAAr0AMntVGliJeU="); return map; }(); return map; @@ -137,9 +152,12 @@ td::Span SmartContractCode::get_revisions(Type type) { static int res[] = {1}; return res; } + case Type::WalletV4: { + static int res[] = {2}; + return res; + } } UNREACHABLE(); - return {}; } td::Result SmartContractCode::validate_revision(Type type, int revision) { @@ -179,9 +197,10 @@ td::Ref SmartContractCode::get_code(Type type, int ext_revision) { return "payment-channel"; case Type::RestrictedWallet: return "restricted-wallet3"; + case Type::WalletV4: + return "wallet-v4"; } UNREACHABLE(); - return ""; }(type); if (revision == -1) { return load(basename).move_as_ok(); diff --git a/crypto/smc-envelope/SmartContractCode.h b/crypto/smc-envelope/SmartContractCode.h index 85be3531..be50d2a1 100644 --- a/crypto/smc-envelope/SmartContractCode.h +++ b/crypto/smc-envelope/SmartContractCode.h @@ -26,7 +26,16 @@ class SmartContractCode { public: static td::Result> load(td::Slice name); - enum Type { WalletV3 = 4, HighloadWalletV1, HighloadWalletV2, ManualDns, Multisig, PaymentChannel, RestrictedWallet }; + enum Type { + WalletV3 = 4, + HighloadWalletV1, + HighloadWalletV2, + ManualDns, + Multisig, + PaymentChannel, + RestrictedWallet, + WalletV4 + }; static td::Span get_revisions(Type type); static td::Result validate_revision(Type type, int revision); static td::Ref get_code(Type type, int revision = 0); diff --git a/crypto/smc-envelope/WalletV4.cpp b/crypto/smc-envelope/WalletV4.cpp new file mode 100644 index 00000000..738fa9c7 --- /dev/null +++ b/crypto/smc-envelope/WalletV4.cpp @@ -0,0 +1,71 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#include "WalletV4.h" +#include "GenericAccount.h" +#include "SmartContractCode.h" + +#include "vm/boc.h" +#include "vm/cells/CellString.h" +#include "td/utils/base64.h" + +#include + +namespace ton { +td::Result> WalletV4::make_a_gift_message(const td::Ed25519::PrivateKey& private_key, + td::uint32 valid_until, td::Span gifts) const { + CHECK(gifts.size() <= get_max_gifts_size()); + TRY_RESULT(seqno, get_seqno()); + TRY_RESULT(wallet_id, get_wallet_id()); + vm::CellBuilder cb; + cb.store_long(wallet_id, 32).store_long(valid_until, 32).store_long(seqno, 32); + cb.store_long(0, 8); // The only difference with wallet-v3 + + for (auto& gift : gifts) { + td::int32 send_mode = 3; + if (gift.gramms == -1) { + send_mode += 128; + } + if (gift.send_mode > -1) { + send_mode = gift.send_mode; + } + cb.store_long(send_mode, 8).store_ref(create_int_message(gift)); + } + + auto message_outer = cb.finalize(); + auto signature = private_key.sign(message_outer->get_hash().as_slice()).move_as_ok(); + return vm::CellBuilder().store_bytes(signature).append_cellslice(vm::load_cell_slice(message_outer)).finalize(); +} + +td::Ref WalletV4::get_init_data(const InitData& init_data) noexcept { + return vm::CellBuilder() + .store_long(init_data.seqno, 32) + .store_long(init_data.wallet_id, 32) + .store_bytes(init_data.public_key) + .store_zeroes(1) // plugins dict + .finalize(); +} + +td::Result WalletV4::get_wallet_id() const { + return TRY_VM([&]() -> td::Result { + auto answer = run_get_method("get_subwallet_id"); + if (!answer.success) { + return td::Status::Error("get_subwallet_id get method failed"); + } + return static_cast(answer.stack.write().pop_long_range(std::numeric_limits::max())); + }()); +} +} // namespace ton diff --git a/crypto/smc-envelope/WalletV4.h b/crypto/smc-envelope/WalletV4.h new file mode 100644 index 00000000..721e8103 --- /dev/null +++ b/crypto/smc-envelope/WalletV4.h @@ -0,0 +1,46 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once + +#include "smc-envelope/SmartContract.h" +#include "smc-envelope/WalletInterface.h" +#include "vm/cells.h" +#include "Ed25519.h" +#include "block/block.h" +#include "vm/cells/CellString.h" + +namespace ton { + +struct WalletV4Traits { + using InitData = WalletInterface::DefaultInitData; + + static constexpr unsigned max_message_size = vm::CellString::max_bytes; + static constexpr unsigned max_gifts_size = 4; + static constexpr auto code_type = SmartContractCode::WalletV4; +}; + +class WalletV4 : public WalletBase { + public: + explicit WalletV4(State state) : WalletBase(std::move(state)) { + } + td::Result> make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 valid_until, + td::Span gifts) const override; + static td::Ref get_init_data(const InitData& init_data) noexcept; + + td::Result get_wallet_id() const override; +}; +} // namespace ton \ No newline at end of file diff --git a/crypto/test/test-smartcont.cpp b/crypto/test/test-smartcont.cpp index 673bb758..d3f18813 100644 --- a/crypto/test/test-smartcont.cpp +++ b/crypto/test/test-smartcont.cpp @@ -35,6 +35,7 @@ #include "smc-envelope/SmartContract.h" #include "smc-envelope/SmartContractCode.h" #include "smc-envelope/WalletV3.h" +#include "smc-envelope/WalletV4.h" #include "smc-envelope/HighloadWallet.h" #include "smc-envelope/HighloadWalletV2.h" #include "smc-envelope/PaymentChannel.h" @@ -526,6 +527,7 @@ void do_test_wallet() { TEST(Tonlib, Wallet) { do_test_wallet(); + do_test_wallet(); do_test_wallet(); do_test_wallet(); do_test_wallet(); diff --git a/tl/generate/scheme/tonlib_api.tl b/tl/generate/scheme/tonlib_api.tl index af08cbd7..a6172376 100644 --- a/tl/generate/scheme/tonlib_api.tl +++ b/tl/generate/scheme/tonlib_api.tl @@ -61,6 +61,7 @@ pchan.config alice_public_key:string alice_address:accountAddress bob_public_key raw.initialAccountState code:bytes data:bytes = InitialAccountState; wallet.v3.initialAccountState public_key:string wallet_id:int64 = InitialAccountState; +wallet.v4.initialAccountState public_key:string wallet_id:int64 = InitialAccountState; wallet.highload.v1.initialAccountState public_key:string wallet_id:int64 = InitialAccountState; wallet.highload.v2.initialAccountState public_key:string wallet_id:int64 = InitialAccountState; @@ -73,6 +74,7 @@ pchan.initialAccountState config:pchan.config = InitialAccountState; raw.accountState code:bytes data:bytes frozen_hash:bytes = AccountState; wallet.v3.accountState wallet_id:int64 seqno:int32 = AccountState; +wallet.v4.accountState wallet_id:int64 seqno:int32 = AccountState; wallet.highload.v1.accountState wallet_id:int64 seqno:int32 = AccountState; wallet.highload.v2.accountState wallet_id:int64 = AccountState; dns.accountState wallet_id:int64 = AccountState; diff --git a/tl/generate/scheme/tonlib_api.tlo b/tl/generate/scheme/tonlib_api.tlo index 6644d118ca6b8efa6a9ae2fd60439bea157bc17a..7657852eabd565bb5432eb13eeae0c48166cd309 100644 GIT binary patch delta 512 zcmdne$aJEaX~GWC@Xfm~@Hi$X=a=S{1eYY1q%trta8CRvzVXQ#CP}B6Ck_aE=4F;- zCgvck;Q%Vwe1Q26595T*dj;YdSwN;tRuC$IFlGp8Ko|kSAqF5RpqXHBRgNpBY`WeR zvGT;6oYWG%G84T-WUIl(05w5$%Lp65je#&$z(no{n?OWFL{uOQxJZcz)ba%)3m{T1 zqEIzCqEH7u5rwJ|5QCVr*+Z;{1ETtd+yoYozbEI&2S6AHWIkQCH63?T0u zJ@oQ|EW$gPn1RK>05%S&8DdI+f(6_-2;&8YNQ0sdL~4U#1B79sq=BYuj}lbP8zqSQ oHY+HFZX0t+43JXMajJ(d|0#TODJJLK@SwSvin7lU4e6vkXk0=0WdV=5p diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index 74b427db..521f961a 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -31,6 +31,7 @@ #include "smc-envelope/GenericAccount.h" #include "smc-envelope/ManualDns.h" #include "smc-envelope/WalletV3.h" +#include "smc-envelope/WalletV4.h" #include "smc-envelope/HighloadWallet.h" #include "smc-envelope/HighloadWalletV2.h" #include "smc-envelope/PaymentChannel.h" @@ -228,6 +229,14 @@ td::Result to_init_data(const tonlib_api::wallet_v3_ini return std::move(init_data); } +td::Result to_init_data(const tonlib_api::wallet_v4_initialAccountState& wallet_state) { + TRY_RESULT(key_bytes, get_public_key(wallet_state.public_key_)); + ton::WalletV4::InitData init_data; + init_data.public_key = td::SecureString(key_bytes.key); + init_data.wallet_id = static_cast(wallet_state.wallet_id_); + return std::move(init_data); +} + td::Result to_init_data(const tonlib_api::rwallet_initialAccountState& rwallet_state) { TRY_RESULT(init_key_bytes, get_public_key(rwallet_state.init_public_key_)); TRY_RESULT(key_bytes, get_public_key(rwallet_state.public_key_)); @@ -319,6 +328,16 @@ class AccountState { return tonlib_api::make_object(static_cast(wallet_id), static_cast(seqno)); } + td::Result> to_wallet_v4_accountState() const { + if (wallet_type_ != WalletV4) { + return TonlibError::AccountTypeUnexpected("WalletV4"); + } + auto wallet = ton::WalletV4(get_smc_state()); + TRY_RESULT(seqno, wallet.get_seqno()); + TRY_RESULT(wallet_id, wallet.get_wallet_id()); + return tonlib_api::make_object(static_cast(wallet_id), + static_cast(seqno)); + } td::Result> to_wallet_highload_v1_accountState() const { if (wallet_type_ != HighloadWalletV1) { @@ -420,6 +439,8 @@ class AccountState { return f(to_dns_accountState()); case PaymentChannel: return f(to_payment_channel_accountState()); + case WalletV4: + return f(to_wallet_v4_accountState()); } UNREACHABLE(); } @@ -458,7 +479,8 @@ class AccountState { HighloadWalletV2, ManualDns, PaymentChannel, - RestrictedWallet + RestrictedWallet, + WalletV4 }; WalletType get_wallet_type() const { return wallet_type_; @@ -477,6 +499,7 @@ class AccountState { case AccountState::HighloadWalletV1: case AccountState::HighloadWalletV2: case AccountState::RestrictedWallet: + case AccountState::WalletV4: return true; } UNREACHABLE(); @@ -497,6 +520,8 @@ class AccountState { return td::make_unique(get_smc_state()); case AccountState::RestrictedWallet: return td::make_unique(get_smc_state()); + case AccountState::WalletV4: + return td::make_unique(get_smc_state()); } UNREACHABLE(); return {}; @@ -554,6 +579,23 @@ class AccountState { break; } }, + [&](tonlib_api::wallet_v4_initialAccountState& v4wallet) { + for (auto revision : ton::SmartContractCode::get_revisions(ton::SmartContractCode::WalletV4)) { + auto init_data = to_init_data(v4wallet); + if (init_data.is_error()) { + continue; + } + auto wallet = ton::WalletV4::create(init_data.move_as_ok(), revision); + if (!(wallet->get_address(ton::masterchainId) == address_ || + wallet->get_address(ton::basechainId) == address_)) { + continue; + } + wallet_type_ = WalletType::WalletV4; + wallet_revision_ = revision; + set_new_state(wallet->get_state()); + break; + } + }, [&](tonlib_api::rwallet_initialAccountState& rwallet) { for (auto revision : ton::SmartContractCode::get_revisions(ton::SmartContractCode::RestrictedWallet)) { auto r_init_data = to_init_data(rwallet); @@ -597,7 +639,7 @@ class AccountState { return wallet_type_; } auto wallet_id = static_cast(address_.workchain + wallet_id_); - ton::WalletV3::InitData init_data{key.as_octet_string(), wallet_id}; + ton::WalletInterface::DefaultInitData init_data{key.as_octet_string(), wallet_id}; auto o_revision = ton::WalletV3::guess_revision(address_, init_data); if (o_revision) { wallet_type_ = WalletType::WalletV3; @@ -605,6 +647,13 @@ class AccountState { set_new_state(ton::WalletV3::get_init_state(wallet_revision_, init_data)); return wallet_type_; } + o_revision = ton::WalletV4::guess_revision(address_, init_data); + if (o_revision) { + wallet_type_ = WalletType::WalletV4; + wallet_revision_ = o_revision.value(); + set_new_state(ton::WalletV4::get_init_state(wallet_revision_, init_data)); + return wallet_type_; + } o_revision = ton::HighloadWalletV2::guess_revision(address_, init_data); if (o_revision) { wallet_type_ = WalletType::HighloadWalletV2; @@ -682,6 +731,12 @@ class AccountState { wallet_revision_ = o_revision.value(); return wallet_type_; } + o_revision = ton::WalletV4::guess_revision(code_hash); + if (o_revision) { + wallet_type_ = WalletType::WalletV4; + wallet_revision_ = o_revision.value(); + return wallet_type_; + } o_revision = ton::HighloadWalletV2::guess_revision(code_hash); if (o_revision) { wallet_type_ = WalletType::HighloadWalletV2; @@ -2256,6 +2311,13 @@ td::Result get_account_address(const tonlib_api::wallet_v3_in ->get_address(workchain_id); } +td::Result get_account_address(const tonlib_api::wallet_v4_initialAccountState& test_wallet_state, + td::int32 revision, ton::WorkchainId workchain_id) { + TRY_RESULT(key_bytes, get_public_key(test_wallet_state.public_key_)); + return ton::WalletV4::create({key_bytes.key, static_cast(test_wallet_state.wallet_id_)}, revision) + ->get_address(workchain_id); +} + td::Result get_account_address( const tonlib_api::wallet_highload_v1_initialAccountState& test_wallet_state, td::int32 revision, ton::WorkchainId workchain_id) { @@ -2303,6 +2365,7 @@ static td::optional get_wallet_type(tonlib_api::In td::overloaded( [](const tonlib_api::raw_initialAccountState&) { return td::optional(); }, [](const tonlib_api::wallet_v3_initialAccountState&) { return ton::SmartContractCode::WalletV3; }, + [](const tonlib_api::wallet_v4_initialAccountState&) { return ton::SmartContractCode::WalletV4; }, [](const tonlib_api::wallet_highload_v1_initialAccountState&) { return ton::SmartContractCode::HighloadWalletV1; }, @@ -2392,6 +2455,12 @@ td::Status TonlibClient::do_request(tonlib_api::guessAccount& request, sources.push_back(Source{tonlib_api::make_object( request.public_key_, wallet_id_ + ton::basechainId), ton::basechainId}); + sources.push_back(Source{tonlib_api::make_object( + request.public_key_, wallet_id_ + ton::masterchainId), + ton::masterchainId}); + sources.push_back(Source{tonlib_api::make_object( + request.public_key_, wallet_id_ + ton::basechainId), + ton::basechainId}); for (Source& source : sources) { auto o_type = get_wallet_type(*source.init_state); if (!o_type) { From 6a0d14f8edce6cd631f353de0b6389f128dcea8b Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Thu, 26 Oct 2023 14:25:37 +0200 Subject: [PATCH 035/351] [tonlib] Handle special cell in msg body (#789) --- tonlib/tonlib/TonlibClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index 521f961a..0eabe142 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -2974,7 +2974,7 @@ struct ToRawTransactions { if (type == 0 || type == 0x2167da4b) { td::Status status; - auto r_body_message = vm::CellString::load(body.write()); + auto r_body_message = TRY_VM(vm::CellString::load(body.write())); LOG_IF(WARNING, r_body_message.is_error()) << "Failed to parse a message: " << r_body_message.error(); if (r_body_message.is_ok()) { From 06e22bdb2e1750f1b98aa9cab1b73e6604997cdd Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Sat, 28 Oct 2023 19:05:00 +0300 Subject: [PATCH 036/351] Add "showtransactions" to tonlib-cli (#790) Co-authored-by: SpyCheese --- tonlib/tonlib/tonlib-cli.cpp | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/tonlib/tonlib/tonlib-cli.cpp b/tonlib/tonlib/tonlib-cli.cpp index fee07496..1107a5d0 100644 --- a/tonlib/tonlib/tonlib-cli.cpp +++ b/tonlib/tonlib/tonlib-cli.cpp @@ -423,6 +423,8 @@ class TonlibCli : public td::actor::Actor { td::TerminalIO::out() << "exportkeypem [] - export key\n"; td::TerminalIO::out() << "gethistory - get history fo simple wallet with requested key (last 10 transactions)\n"; + td::TerminalIO::out() << "showtransactions [] - show transaction on account " + "with given and (in base64) and previous transactions (up to ).\n"; td::TerminalIO::out() << "init - init simple wallet with requested key\n"; td::TerminalIO::out() << "transfer[f][F][e][k][c] ( |) - " "make transfer from \n" @@ -520,6 +522,8 @@ class TonlibCli : public td::actor::Actor { } else if (cmd == "getmasterchainsignatures") { auto seqno = parser.read_word(); run_get_masterchain_block_signatures(seqno, std::move(cmd_promise)); + } else if (cmd == "showtransactions") { + run_show_transactions(parser, std::move(cmd_promise)); } else { cmd_promise.set_error(td::Status::Error(PSLICE() << "Unkwnown query `" << cmd << "`")); } @@ -2162,6 +2166,45 @@ class TonlibCli : public td::actor::Actor { })); } + void run_show_transactions(td::ConstParser& parser, td::Promise promise) { + TRY_RESULT_PROMISE(promise, address, to_account_address(parser.read_word(), false)); + TRY_RESULT_PROMISE(promise, lt, td::to_integer_safe(parser.read_word())); + TRY_RESULT_PROMISE(promise, hash, td::base64_decode(parser.read_word())); + int count = 1; + if (!parser.empty()) { + TRY_RESULT_PROMISE_ASSIGN(promise, count, td::to_integer_safe(parser.read_word())); + } + auto id = make_object(lt, hash); + send_query(make_object( + nullptr, ton::move_tl_object_as(std::move(address.address)), + std::move(id), count, false), + promise.wrap([](ton::tl_object_ptr&& result) -> td::Result { + td::TerminalIO::out() << "Found " << result->transactions_.size() << " transactions\n"; + for (size_t i = 0; i < result->transactions_.size(); ++i) { + td::TerminalIO::out() << "Transaction #" << i << "\n"; + auto& tr = result->transactions_[i]; + TRY_RESULT(root, vm::std_boc_deserialize(tr->data_)); + block::gen::Transaction::Record trans; + if (!tlb::unpack_cell(root, trans)) { + return td::Status::Error("cannot unpack transaction"); + } + td::TerminalIO::out() << "Transaction Account: " << tr->address_->account_address_ << "\n"; + td::TerminalIO::out() << "Transaction LT: " << tr->transaction_id_->lt_ << "\n"; + td::TerminalIO::out() << "Transaction Hash: " << td::base64_encode(tr->transaction_id_->hash_) + << "\n"; + td::TerminalIO::out() << "Transaction Timestamp: " << tr->utime_ << "\n"; + td::TerminalIO::out() << "Transaction Out messages: " << tr->out_msgs_.size() << "\n"; + td::TerminalIO::out() << "Previous transaction LT: " << trans.prev_trans_lt << "\n"; + td::TerminalIO::out() << "Previous transaction Hash: " + << td::base64_encode(trans.prev_trans_hash.as_slice()) << "\n"; + std::ostringstream ss; + block::gen::t_Transaction.print_ref(2048, ss, root); + td::TerminalIO::out() << "Transaction dump: " << ss.str() << "\n"; + } + return td::Unit(); + })); + } + void get_history2(td::Slice key, td::Result> r_state, td::Promise promise) { TRY_RESULT_PROMISE(promise, state, std::move(r_state)); From 89700cb2aa96cf5561f5aa028e46f928cf90ec38 Mon Sep 17 00:00:00 2001 From: neodiX42 Date: Mon, 30 Oct 2023 09:52:00 +0100 Subject: [PATCH 037/351] CI: fix macOS and tonlib Android GitHub actions in testnet (#786) * fix macOS github actions * fix android tonlib GH action; * fixing wasm GH action * strip binaries * fix randomly failing ubuntu and wasm GH actions * fix randomly failing ubuntu and wasm GH actions * revert some changes --- .github/script/fift-func-wasm-build-ubuntu.sh | 33 ++++++++++++++++--- .github/workflows/macos-11.7-compile.yml | 27 +++++++++++++-- .github/workflows/macos-12.6-compile.yml | 27 ++++++++++++--- .github/workflows/ton-wasm-emscripten.yml | 8 ++++- .github/workflows/tonlib-android-jni.yml | 6 ++-- .github/workflows/ubuntu-22.04-compile.yml | 8 +++-- .github/workflows/ubuntu-compile.yml | 6 +++- .github/workflows/win-2019-compile.yml | 2 +- example/android/build.sh | 4 +-- 9 files changed, 99 insertions(+), 22 deletions(-) diff --git a/.github/script/fift-func-wasm-build-ubuntu.sh b/.github/script/fift-func-wasm-build-ubuntu.sh index 95de71f9..259377cc 100755 --- a/.github/script/fift-func-wasm-build-ubuntu.sh +++ b/.github/script/fift-func-wasm-build-ubuntu.sh @@ -3,8 +3,8 @@ # dependencies: #sudo apt-get install -y build-essential git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev python3-pip nodejs libevent-dev -export CC=$(which clang) -export CXX=$(which clang++) +export CC=$(which clang-16) +export CXX=$(which clang++-16) export CCACHE_DISABLE=1 cd ../.. @@ -37,7 +37,15 @@ cd .. mkdir build cd build -cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.so -DZLIB_INCLUDE_DIR=$ZLIB_DIR -DOPENSSL_ROOT_DIR=$OPENSSL_DIR -DOPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include -DOPENSSL_CRYPTO_LIBRARY=$OPENSSL_DIR/libcrypto.so -DOPENSSL_SSL_LIBRARY=$OPENSSL_DIR/libssl.so -DTON_USE_ABSEIL=OFF .. +cmake -GNinja -DCMAKE_BUILD_TYPE=Release \ +-DCMAKE_CXX_STANDARD=17 \ +-DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.so \ +-DZLIB_INCLUDE_DIR=$ZLIB_DIR \ +-DOPENSSL_ROOT_DIR=$OPENSSL_DIR \ +-DOPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include \ +-DOPENSSL_CRYPTO_LIBRARY=$OPENSSL_DIR/libcrypto.so \ +-DOPENSSL_SSL_LIBRARY=$OPENSSL_DIR/libssl.so \ +-DTON_USE_ABSEIL=OFF .. test $? -eq 0 || { echo "Can't configure TON build"; exit 1; } @@ -92,8 +100,23 @@ test $? -eq 0 || { echo "Can't compile libsodium with emmake "; exit 1; } cd ../build -emcmake cmake -DUSE_EMSCRIPTEN=ON -DCMAKE_BUILD_TYPE=Release -DZLIB_LIBRARY=$ZLIB_DIR/libz.a -DZLIB_INCLUDE_DIR=$ZLIB_DIR -DOPENSSL_ROOT_DIR=$OPENSSL_DIR -DOPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include -DOPENSSL_CRYPTO_LIBRARY=$OPENSSL_DIR/libcrypto.a -DOPENSSL_SSL_LIBRARY=$OPENSSL_DIR/libssl.a -DCMAKE_TOOLCHAIN_FILE=$EMSDK_DIR/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_CXX_FLAGS="-sUSE_ZLIB=1" -DSECP256K1_INCLUDE_DIR=$SECP256K1_DIR/include -DSECP256K1_LIBRARY=$SECP256K1_DIR/.libs/libsecp256k1.a -DSODIUM_INCLUDE_DIR=$SODIUM_DIR/src/libsodium/include -DSODIUM_LIBRARY_RELEASE=$SODIUM_DIR/src/libsodium/.libs/libsodium.a -DSODIUM_LIBRARY_DEBUG=$SODIUM_DIR/src/libsodium/.libs/libsodium.a -DSODIUM_USE_STATIC_LIBS=ON .. -test $? -eq 0 || { echo "Can't configure TON with with emmake "; exit 1; } +emcmake cmake -DUSE_EMSCRIPTEN=ON -DCMAKE_BUILD_TYPE=Release \ +-DZLIB_LIBRARY=$ZLIB_DIR/libz.a \ +-DZLIB_INCLUDE_DIR=$ZLIB_DIR \ +-DOPENSSL_ROOT_DIR=$OPENSSL_DIR \ +-DOPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include \ +-DOPENSSL_CRYPTO_LIBRARY=$OPENSSL_DIR/libcrypto.a \ +-DOPENSSL_SSL_LIBRARY=$OPENSSL_DIR/libssl.a \ +-DCMAKE_TOOLCHAIN_FILE=$EMSDK_DIR/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \ +-DCMAKE_CXX_FLAGS="-sUSE_ZLIB=1" \ +-DSECP256K1_INCLUDE_DIR=$SECP256K1_DIR/include \ +-DSECP256K1_LIBRARY=$SECP256K1_DIR/.libs/libsecp256k1.a \ +-DSODIUM_INCLUDE_DIR=$SODIUM_DIR/src/libsodium/include \ +-DSODIUM_LIBRARY_RELEASE=$SODIUM_DIR/src/libsodium/.libs/libsodium.a \ +-DSODIUM_LIBRARY_DEBUG=$SODIUM_DIR/src/libsodium/.libs/libsodium.a \ +-DSODIUM_USE_STATIC_LIBS=ON .. + +test $? -eq 0 || { echo "Can't configure TON with emmake "; exit 1; } cp -R ../crypto/smartcont ../crypto/fift/lib crypto emmake make -j16 funcfiftlib func fift tlbc emulator-emscripten diff --git a/.github/workflows/macos-11.7-compile.yml b/.github/workflows/macos-11.7-compile.yml index 910b16fc..100d51c8 100644 --- a/.github/workflows/macos-11.7-compile.yml +++ b/.github/workflows/macos-11.7-compile.yml @@ -14,22 +14,43 @@ jobs: submodules: 'recursive' - name: Compile OpenSSL run: | + export NONINTERACTIVE=1 + brew install ninja secp256k1 libsodium libmicrohttpd pkg-config automake libtool git clone https://github.com/openssl/openssl openssl_1_1_1 cd openssl_1_1_1 git checkout OpenSSL_1_1_1-stable - ./Configure --prefix=/usr/local/macos darwin64-x86_64-cc -static -mmacosx-version-min=11.7 + ./Configure darwin64-x86_64-cc -static -mmacosx-version-min=11.7 make build_libs -j4 - name: Build all run: | - export NONINTERACTIVE=1 - brew install ninja secp256k1 libsodium libmicrohttpd pkg-config + brew unlink openssl@3 rootPath=`pwd` mkdir build cd build cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_1_1_1/libcrypto.a -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=11.7 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release .. ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator + - name: Strip binaries + run: | + strip build/storage/storage-daemon/storage-daemon + strip build/storage/storage-daemon/storage-daemon-cli + strip build/blockchain-explorer/blockchain-explorer + strip build/crypto/fift + strip build/crypto/func + strip build/crypto/create-state + strip build/crypto/tlbc + strip build/validator-engine-console/validator-engine-console + strip build/tonlib/tonlib-cli + strip build/http/http-proxy + strip build/rldp-http-proxy/rldp-http-proxy + strip build/dht-server/dht-server + strip build/lite-client/lite-client + strip build/validator-engine/validator-engine + strip build/utils/generate-random-id + strip build/utils/json2tlo + strip build/adnl/adnl-proxy + - name: Find & copy binaries run: | mkdir artifacts diff --git a/.github/workflows/macos-12.6-compile.yml b/.github/workflows/macos-12.6-compile.yml index 368abf02..8660a10b 100644 --- a/.github/workflows/macos-12.6-compile.yml +++ b/.github/workflows/macos-12.6-compile.yml @@ -15,11 +15,11 @@ jobs: - name: Compile OpenSSL run: | export NONINTERACTIVE=1 - brew install ninja libsodium automake + brew install ninja secp256k1 libsodium libmicrohttpd pkg-config automake libtool git clone https://github.com/openssl/openssl openssl_1_1_1 cd openssl_1_1_1 git checkout OpenSSL_1_1_1-stable - ./Configure --prefix=/usr/local/macos darwin64-x86_64-cc -static -mmacosx-version-min=12.6 + ./Configure darwin64-x86_64-cc -static -mmacosx-version-min=12.6 make build_libs -j4 - name: Compile Secp256k1 @@ -33,14 +33,33 @@ jobs: - name: Build all run: | - export NONINTERACTIVE=1 - brew install ninja libmicrohttpd pkg-config + brew unlink openssl@3 rootPath=`pwd` mkdir build cd build cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_1_1_1/libcrypto.a -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=12.6 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release .. ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator + - name: Strip binaries + run: | + strip build/storage/storage-daemon/storage-daemon + strip build/storage/storage-daemon/storage-daemon-cli + strip build/blockchain-explorer/blockchain-explorer + strip build/crypto/fift + strip build/crypto/func + strip build/crypto/create-state + strip build/crypto/tlbc + strip build/validator-engine-console/validator-engine-console + strip build/tonlib/tonlib-cli + strip build/http/http-proxy + strip build/rldp-http-proxy/rldp-http-proxy + strip build/dht-server/dht-server + strip build/lite-client/lite-client + strip build/validator-engine/validator-engine + strip build/utils/generate-random-id + strip build/utils/json2tlo + strip build/adnl/adnl-proxy + - name: Find & copy binaries run: | mkdir artifacts diff --git a/.github/workflows/ton-wasm-emscripten.yml b/.github/workflows/ton-wasm-emscripten.yml index 40a65818..a3167800 100644 --- a/.github/workflows/ton-wasm-emscripten.yml +++ b/.github/workflows/ton-wasm-emscripten.yml @@ -15,7 +15,13 @@ jobs: - name: Install libraries run: | sudo apt update - sudo apt install -y build-essential git make cmake ninja-build clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev python3-pip nodejs libsecp256k1-dev libsodium-dev + sudo apt install -y build-essential git make cmake ninja-build clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev python3-pip nodejs libsecp256k1-dev libsodium-dev automake libtool + + - name: Setup compiler + run: | + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 16 all - name: Configure & Build run: | diff --git a/.github/workflows/tonlib-android-jni.yml b/.github/workflows/tonlib-android-jni.yml index cdf410b4..6e04f8b7 100644 --- a/.github/workflows/tonlib-android-jni.yml +++ b/.github/workflows/tonlib-android-jni.yml @@ -19,9 +19,9 @@ jobs: sudo apt install -y build-essential git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev ninja-build - name: Configure & Build - run: | - wget https://dl.google.com/android/repository/android-ndk-r25b-linux.zip - unzip android-ndk-r25b-linux.zip + run: | + wget -q https://dl.google.com/android/repository/android-ndk-r25b-linux.zip + unzip -q android-ndk-r25b-linux.zip export JAVA_AWT_LIBRARY=NotNeeded export JAVA_JVM_LIBRARY=NotNeeded export JAVA_INCLUDE_PATH=${JAVA_HOME}/include diff --git a/.github/workflows/ubuntu-22.04-compile.yml b/.github/workflows/ubuntu-22.04-compile.yml index 397116ff..b5d4d571 100644 --- a/.github/workflows/ubuntu-22.04-compile.yml +++ b/.github/workflows/ubuntu-22.04-compile.yml @@ -39,13 +39,17 @@ jobs: mkdir build cd build - cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_1_1_1/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= -DCMAKE_CXX_FLAGS="-mavx2" .. + cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_1_1_1/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= .. ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state emulator + - name: Strip binaries + run: | + strip -g build/storage/storage-daemon/storage-daemon build/storage/storage-daemon/storage-daemon-cli build/crypto/fift build/crypto/tlbc build/crypto/func build/crypto/create-state build/validator-engine-console/validator-engine-console build/tonlib/tonlib-cli build/tonlib/libtonlibjson.so.0.5 build/http/http-proxy build/rldp-http-proxy/rldp-http-proxy build/dht-server/dht-server build/lite-client/lite-client build/validator-engine/validator-engine build/utils/generate-random-id build/utils/json2tlo build/adnl/adnl-proxy build/emulator/libemulator.* + - name: Find & copy binaries run: | mkdir artifacts - cp build/storage/storage-daemon/storage-daemon build/storage/storage-daemon/storage-daemon-cli build/crypto/fift build/crypto/tlbc build/crypto/func build/crypto/create-state build/validator-engine-console/validator-engine-console build/tonlib/tonlib-cli build/tonlib/libtonlibjson.so.0.5 build/http/http-proxy build/rldp-http-proxy/rldp-http-proxy build/dht-server/dht-server build/lite-client/lite-client build/validator-engine/validator-engine build/utils/generate-random-id build/utils/json2tlo build/adnl/adnl-proxy build/emulator/libemulator.* artifacts + cp build/storage/storage-daemon/storage-daemon build/storage/storage-daemon/storage-daemon-cli build/crypto/fift build/crypto/tlbc build/crypto/func build/crypto/create-state build/validator-engine-console/validator-engine-console build/tonlib/tonlib-cli build/tonlib/libtonlibjson.so.0.5 build/http/http-proxy build/rldp-http-proxy/rldp-http-proxy build/dht-server/dht-server build/lite-client/lite-client build/validator-engine/validator-engine build/utils/generate-random-id build/utils/json2tlo build/adnl/adnl-proxy build/emulator/libemulator.* artifacts chmod +x artifacts/* cp -R crypto/smartcont artifacts/ cp -R crypto/fift/lib artifacts/ diff --git a/.github/workflows/ubuntu-compile.yml b/.github/workflows/ubuntu-compile.yml index 171ba46d..be3878f5 100644 --- a/.github/workflows/ubuntu-compile.yml +++ b/.github/workflows/ubuntu-compile.yml @@ -43,9 +43,13 @@ jobs: cd .. buildPath=`pwd` - cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$buildPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$buildPath/openssl_1_1_1/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= -DCMAKE_CXX_FLAGS="-mavx2" .. + cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$buildPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$buildPath/openssl_1_1_1/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= .. ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator + - name: Strip binaries + run: | + strip -g build-${{ matrix.os }}/storage/storage-daemon/storage-daemon build-${{ matrix.os }}/storage/storage-daemon/storage-daemon-cli build-${{ matrix.os }}/crypto/fift build-${{ matrix.os }}/crypto/tlbc build-${{ matrix.os }}/crypto/func build-${{ matrix.os }}/crypto/create-state build-${{ matrix.os }}/validator-engine-console/validator-engine-console build-${{ matrix.os }}/tonlib/tonlib-cli build-${{ matrix.os }}/tonlib/libtonlibjson.so.0.5 build-${{ matrix.os }}/http/http-proxy build-${{ matrix.os }}/rldp-http-proxy/rldp-http-proxy build-${{ matrix.os }}/dht-server/dht-server build-${{ matrix.os }}/lite-client/lite-client build-${{ matrix.os }}/validator-engine/validator-engine build-${{ matrix.os }}/utils/generate-random-id build-${{ matrix.os }}/utils/json2tlo build-${{ matrix.os }}/adnl/adnl-proxy build-${{ matrix.os }}/emulator/libemulator.* + - name: Find & copy binaries run: | mkdir artifacts-${{ matrix.os }} diff --git a/.github/workflows/win-2019-compile.yml b/.github/workflows/win-2019-compile.yml index 1edcb0e1..9b4d3bef 100644 --- a/.github/workflows/win-2019-compile.yml +++ b/.github/workflows/win-2019-compile.yml @@ -92,7 +92,7 @@ jobs: mkdir artifacts\smartcont mkdir artifacts\lib - for %%I in (build\storage\storage-daemon\Release\storage-daemon.exe build\storage\storage-daemon\Release\storage-daemon-cli.exe build\blockchain-explorer\blockchain-explorer.exe build\crypto\Release\fift.exe build\crypto\Release\tlbc.exe build\crypto\Release\func.exe build\crypto\Release\create-state.exe build\validator-engine-console\Release\validator-engine-console.exe build\tonlib\Release\tonlib-cli.exe build\tonlib\Release\tonlibjson.dll build\http\Release\http-proxy.exe build\rldp-http-proxy\Release\rldp-http-proxy.exe build\dht-server\Release\dht-server.exe build\lite-client\Release\lite-client.exe build\validator-engine\Release\validator-engine.exe build\utils\Release\generate-random-id.exe build\utils\Release\json2tlo.exe build\adnl\Release\adnl-proxy.exe build\emulator\Release\emulator.dll) do copy %%I artifacts\ + for %%I in (build\storage\storage-daemon\Release\storage-daemon.exe build\storage\storage-daemon\Release\storage-daemon-cli.exe build\blockchain-explorer\blockchain-explorer.exe build\crypto\Release\fift.exe build\crypto\Release\tlbc.exe build\crypto\Release\func.exe build\crypto\Release\create-state.exe build\validator-engine-console\Release\validator-engine-console.exe build\tonlib\Release\tonlib-cli.exe build\tonlib\Release\tonlibjson.dll build\http\Release\http-proxy.exe build\rldp-http-proxy\Release\rldp-http-proxy.exe build\dht-server\Release\dht-server.exe build\lite-client\Release\lite-client.exe build\validator-engine\Release\validator-engine.exe build\utils\Release\generate-random-id.exe build\utils\Release\json2tlo.exe build\adnl\Release\adnl-proxy.exe build\emulator\Release\emulator.dll) do (strip -g %%I & copy %%I artifacts\) xcopy /e /k /h /i crypto\smartcont artifacts\smartcont xcopy /e /k /h /i crypto\fift\lib artifacts\lib diff --git a/example/android/build.sh b/example/android/build.sh index 8cecfa41..7f170dbc 100755 --- a/example/android/build.sh +++ b/example/android/build.sh @@ -36,7 +36,7 @@ then BLST_LIBRARY=$(pwd)/third_party/blst/armv8/libblst.a fi - +ORIG_ARCH=$ARCH ARCH=$ABI mkdir -p build-$ARCH @@ -46,7 +46,7 @@ cmake .. -GNinja -DPORTABLE=1 \ -DANDROID_ABI=x86 -DANDROID_PLATFORM=android-32 -DANDROID_NDK=${ANDROID_NDK_ROOT} \ -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake \ -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=${ABI} \ --DOPENSSL_ROOT_DIR=${OPENSSL_DIR}/${ARCH} -DTON_ARCH="" \ +-DOPENSSL_ROOT_DIR=${OPENSSL_DIR}/${ORIG_ARCH} -DTON_ARCH="" \ -DTON_ONLY_TONLIB=ON \ -DSECP256K1_INCLUDE_DIR=${SECP256K1_INCLUDE_DIR} -DSECP256K1_LIBRARY=${SECP256K1_LIBRARY} \ -DSODIUM_INCLUDE_DIR=${SODIUM_INCLUDE_DIR} -DSODIUM_LIBRARY_RELEASE=${SODIUM_LIBRARY_RELEASE} \ From 5847897b3758bc9ea85af38e7be8fc867e4c133a Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Fri, 3 Nov 2023 14:43:34 +0300 Subject: [PATCH 038/351] Various changes in TVM, github builds and tests (#793) * Bugfixes in TVM and node * Upgrade to C++17 * Improve GitHub builds * Fix existing tests and partially integrate them into builds --------- Co-authored-by: neodiX42 Co-authored-by: EmelyanenkoK --- .clang_complete | 2 +- .github/script/fift-func-wasm-build-ubuntu.sh | 2 +- .github/workflows/macos-11.7-compile.yml | 32 +- .github/workflows/macos-12.6-compile.yml | 29 +- .github/workflows/ton-x86-64-linux.yml | 2 +- .github/workflows/ton-x86-64-macos.yml | 2 +- .github/workflows/ubuntu-22.04-compile.yml | 20 +- .github/workflows/ubuntu-compile.yml | 21 +- .github/workflows/win-2019-compile.yml | 15 +- CMakeLists.txt | 67 +- README.md | 5 + adnl/CMakeLists.txt | 2 +- blockchain-explorer/CMakeLists.txt | 2 +- blockchain-explorer/blockchain-explorer.cpp | 4 +- catchain/CMakeLists.txt | 2 +- common/CMakeLists.txt | 2 +- create-hardfork/CMakeLists.txt | 2 +- create-hardfork/create-hardfork.cpp | 4 +- crypto/CMakeLists.txt | 2 +- crypto/block/transaction.cpp | 663 +++++- crypto/block/transaction.h | 4 +- crypto/common/bitstring.cpp | 4 +- crypto/fift/lib/Asm.fif | 94 +- crypto/fift/words.cpp | 2 +- crypto/func/auto-tests/legacy_tester.py | 118 +- crypto/func/auto-tests/run_tests.py | 36 +- crypto/openssl/bignum.cpp | 12 +- crypto/openssl/bignum.h | 2 +- crypto/parser/lexer.cpp | 1 - crypto/smc-envelope/ManualDns.h | 4 +- crypto/smc-envelope/SmartContract.cpp | 2 +- crypto/test/fift.cpp | 2 +- crypto/test/fift/rist255.fif | 3 + crypto/test/modbigint.cpp | 6 +- crypto/test/test-bigint.cpp | 6 +- crypto/test/test-db.cpp | 8 +- crypto/test/test-smartcont.cpp | 13 +- crypto/test/vm.cpp | 2 +- crypto/tl/tlbc-gen-cpp.cpp | 1 - crypto/tl/tlbc.cpp | 2 - crypto/vm/arithops.cpp | 44 +- crypto/vm/tonops.cpp | 37 +- crypto/vm/vm.cpp | 13 + crypto/vm/vm.h | 2 + dht-server/CMakeLists.txt | 2 +- dht/CMakeLists.txt | 2 +- emulator/CMakeLists.txt | 2 +- emulator/emulator-extern.cpp | 4 +- emulator/transaction-emulator.cpp | 4 +- fec/CMakeLists.txt | 2 +- fec/fec.cpp | 2 +- flake.lock | 6 +- flake.nix | 8 +- http/CMakeLists.txt | 2 +- keyring/CMakeLists.txt | 2 +- keys/CMakeLists.txt | 2 +- lite-client/CMakeLists.txt | 2 +- lite-client/lite-client.cpp | 2 +- memprof/CMakeLists.txt | 2 +- overlay/CMakeLists.txt | 2 +- rldp-http-proxy/CMakeLists.txt | 2 +- rldp/CMakeLists.txt | 2 +- rldp2/CMakeLists.txt | 2 +- storage/CMakeLists.txt | 2 +- storage/storage-daemon/CMakeLists.txt | 2 +- storage/test/storage.cpp | 3 - tdactor/CMakeLists.txt | 2 +- tdactor/benchmark/CMakeLists.txt | 2 +- tdactor/test/actors_core.cpp | 4 +- tdactor/test/actors_promise.cpp | 2 +- tddb/CMakeLists.txt | 2 +- tddb/td/db/utils/BlobView.cpp | 1 + tdfec/CMakeLists.txt | 2 +- tdfec/benchmark/CMakeLists.txt | 2 +- tdfec/td/fec/raptorq/Rfc.h | 2 +- tdnet/CMakeLists.txt | 2 +- tdtl/CMakeLists.txt | 2 +- tdutils/CMakeLists.txt | 4 +- tdutils/generate/CMakeLists.txt | 2 +- tdutils/td/utils/BigNum.cpp | 4 + tdutils/td/utils/BufferedUdp.h | 1 + tdutils/td/utils/crypto.cpp | 50 +- tdutils/td/utils/crypto.h | 2 +- tdutils/td/utils/port/stacktrace.cpp | 45 +- tdutils/test/MpmcWaiter.cpp | 6 +- terminal/CMakeLists.txt | 2 +- test/ed25519_crypto.cpp | 2053 ----------------- test/regression-tests.ans | 68 +- test/test-adnl.cpp | 2 +- test/test-catchain.cpp | 8 +- test/test-dht.cpp | 2 +- test/test-ext-client.cpp | 220 -- test/test-ext-server.cpp | 221 -- test/test-node.cpp | 376 --- test/test-rldp.cpp | 2 +- test/test-rldp2.cpp | 2 +- test/test-ton-collator.cpp | 4 +- test/test-validator-session-state.cpp | 1 + test/test-validator-session.cpp | 356 --- test/test-validator.cpp | 356 --- third-party/blst | 2 +- third-party/rocksdb | 2 +- tl-utils/CMakeLists.txt | 2 +- tl/CMakeLists.txt | 2 +- tl/generate/CMakeLists.txt | 2 +- tl/tl/tl_json.h | 3 +- tonlib/CMakeLists.txt | 2 +- tonlib/test/offline.cpp | 25 +- tonlib/tonlib/TonlibClient.cpp | 2 +- utils/CMakeLists.txt | 2 +- utils/opcode-timing.cpp | 3 +- validator-engine-console/CMakeLists.txt | 2 +- validator-engine/CMakeLists.txt | 2 +- validator-engine/validator-engine.cpp | 4 +- validator-session/CMakeLists.txt | 2 +- validator/CMakeLists.txt | 2 +- validator/impl/CMakeLists.txt | 2 +- validator/impl/collator-impl.h | 8 +- validator/impl/collator.cpp | 962 +++++++- validator/impl/external-message.cpp | 2 +- validator/impl/validate-query.cpp | 786 ++++++- validator/impl/validate-query.hpp | 3 +- 122 files changed, 2889 insertions(+), 4100 deletions(-) delete mode 100644 test/ed25519_crypto.cpp delete mode 100644 test/test-ext-client.cpp delete mode 100644 test/test-ext-server.cpp delete mode 100644 test/test-node.cpp delete mode 100644 test/test-validator-session.cpp delete mode 100644 test/test-validator.cpp diff --git a/.clang_complete b/.clang_complete index d7cda0ff..e88dbc7b 100644 --- a/.clang_complete +++ b/.clang_complete @@ -1,5 +1,5 @@ -xc++ --std=c++14 +-std=c++17 -iquote . -iquote tdtl/ -iquote tl/ diff --git a/.github/script/fift-func-wasm-build-ubuntu.sh b/.github/script/fift-func-wasm-build-ubuntu.sh index 259377cc..feac19e3 100755 --- a/.github/script/fift-func-wasm-build-ubuntu.sh +++ b/.github/script/fift-func-wasm-build-ubuntu.sh @@ -13,7 +13,7 @@ echo `pwd` git clone https://github.com/openssl/openssl.git cd openssl -git checkout OpenSSL_1_1_1j +git checkout checkout openssl-3.1.4 ./config make -j16 OPENSSL_DIR=`pwd` diff --git a/.github/workflows/macos-11.7-compile.yml b/.github/workflows/macos-11.7-compile.yml index 100d51c8..eb12db1b 100644 --- a/.github/workflows/macos-11.7-compile.yml +++ b/.github/workflows/macos-11.7-compile.yml @@ -12,24 +12,33 @@ jobs: uses: actions/checkout@v3 with: submodules: 'recursive' - - name: Compile OpenSSL + + - name: Compile Secp256k1 run: | export NONINTERACTIVE=1 brew install ninja secp256k1 libsodium libmicrohttpd pkg-config automake libtool - git clone https://github.com/openssl/openssl openssl_1_1_1 - cd openssl_1_1_1 - git checkout OpenSSL_1_1_1-stable - ./Configure darwin64-x86_64-cc -static -mmacosx-version-min=11.7 - make build_libs -j4 + git clone https://github.com/libbitcoin/secp256k1.git + cd secp256k1 + ./autogen.sh + ./configure --enable-module-recovery + make + make install - name: Build all run: | - brew unlink openssl@3 + brew unlink openssl@1.1 + brew install openssl@3 + brew unlink openssl@3 && brew link --overwrite openssl@3 rootPath=`pwd` mkdir build cd build - cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_1_1_1/libcrypto.a -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=11.7 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release .. - ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator + cmake -GNinja -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=11.7 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release .. + + ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine \ + lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server \ + http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator \ + test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor \ + test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state - name: Strip binaries run: | @@ -51,6 +60,11 @@ jobs: strip build/utils/json2tlo strip build/adnl/adnl-proxy + - name: Run tests + run: | + cd build + ctest --output-on-failure -E "test-catchain|test-actors" + - name: Find & copy binaries run: | mkdir artifacts diff --git a/.github/workflows/macos-12.6-compile.yml b/.github/workflows/macos-12.6-compile.yml index 8660a10b..f41efc66 100644 --- a/.github/workflows/macos-12.6-compile.yml +++ b/.github/workflows/macos-12.6-compile.yml @@ -12,18 +12,11 @@ jobs: uses: actions/checkout@v3 with: submodules: 'recursive' - - name: Compile OpenSSL - run: | - export NONINTERACTIVE=1 - brew install ninja secp256k1 libsodium libmicrohttpd pkg-config automake libtool - git clone https://github.com/openssl/openssl openssl_1_1_1 - cd openssl_1_1_1 - git checkout OpenSSL_1_1_1-stable - ./Configure darwin64-x86_64-cc -static -mmacosx-version-min=12.6 - make build_libs -j4 - name: Compile Secp256k1 run: | + export NONINTERACTIVE=1 + brew install ninja secp256k1 libsodium libmicrohttpd pkg-config automake libtool git clone https://github.com/libbitcoin/secp256k1.git cd secp256k1 ./autogen.sh @@ -33,12 +26,19 @@ jobs: - name: Build all run: | - brew unlink openssl@3 + brew unlink openssl@1.1 + brew install openssl@3 + brew unlink openssl@3 && brew link --overwrite openssl@3 rootPath=`pwd` mkdir build cd build - cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_1_1_1/libcrypto.a -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=12.6 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release .. - ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator + cmake -GNinja -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=12.6 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release .. + + ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli \ + validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server \ + http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator \ + test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor \ + test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state - name: Strip binaries run: | @@ -60,6 +60,11 @@ jobs: strip build/utils/json2tlo strip build/adnl/adnl-proxy + - name: Run tests + run: | + cd build + ctest --output-on-failure -E "test-catchain|test-actors" + - name: Find & copy binaries run: | mkdir artifacts diff --git a/.github/workflows/ton-x86-64-linux.yml b/.github/workflows/ton-x86-64-linux.yml index e939f22f..a4760dc4 100644 --- a/.github/workflows/ton-x86-64-linux.yml +++ b/.github/workflows/ton-x86-64-linux.yml @@ -15,7 +15,7 @@ jobs: with: submodules: 'recursive' - - uses: cachix/install-nix-action@v18 + - uses: cachix/install-nix-action@v23 with: extra_nix_config: | access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ton-x86-64-macos.yml b/.github/workflows/ton-x86-64-macos.yml index b9e9cf9b..cea2937a 100644 --- a/.github/workflows/ton-x86-64-macos.yml +++ b/.github/workflows/ton-x86-64-macos.yml @@ -11,7 +11,7 @@ jobs: with: submodules: 'recursive' - - uses: cachix/install-nix-action@v22 + - uses: cachix/install-nix-action@v23 with: extra_nix_config: | access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ubuntu-22.04-compile.yml b/.github/workflows/ubuntu-22.04-compile.yml index b5d4d571..af8943a1 100644 --- a/.github/workflows/ubuntu-22.04-compile.yml +++ b/.github/workflows/ubuntu-22.04-compile.yml @@ -28,9 +28,9 @@ jobs: export CXX=$(which clang++) export CCACHE_DISABLE=1 - git clone https://github.com/openssl/openssl openssl_1_1_1 - cd openssl_1_1_1 - git checkout OpenSSL_1_1_1-stable + git clone https://github.com/openssl/openssl openssl_3 + cd openssl_3 + git checkout openssl-3.1.4 ./config make build_libs -j4 @@ -39,13 +39,23 @@ jobs: mkdir build cd build - cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_1_1_1/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= .. - ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state emulator + cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_3/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_3/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= .. + + ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client \ + pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy \ + adnl-proxy create-state emulator \ + test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor \ + test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state - name: Strip binaries run: | strip -g build/storage/storage-daemon/storage-daemon build/storage/storage-daemon/storage-daemon-cli build/crypto/fift build/crypto/tlbc build/crypto/func build/crypto/create-state build/validator-engine-console/validator-engine-console build/tonlib/tonlib-cli build/tonlib/libtonlibjson.so.0.5 build/http/http-proxy build/rldp-http-proxy/rldp-http-proxy build/dht-server/dht-server build/lite-client/lite-client build/validator-engine/validator-engine build/utils/generate-random-id build/utils/json2tlo build/adnl/adnl-proxy build/emulator/libemulator.* + - name: Run tests + run: | + cd build + ctest --output-on-failure -E "test-catchain|test-actors" + - name: Find & copy binaries run: | mkdir artifacts diff --git a/.github/workflows/ubuntu-compile.yml b/.github/workflows/ubuntu-compile.yml index be3878f5..3c1e7bad 100644 --- a/.github/workflows/ubuntu-compile.yml +++ b/.github/workflows/ubuntu-compile.yml @@ -34,22 +34,31 @@ jobs: mkdir build-${{ matrix.os }} cd build-${{ matrix.os }} - git clone https://github.com/openssl/openssl openssl_1_1_1 - cd openssl_1_1_1 - git checkout OpenSSL_1_1_1-stable + git clone https://github.com/openssl/openssl openssl_3 + cd openssl_3 + git checkout openssl-3.1.4 ./config make build_libs -j4 cd .. - buildPath=`pwd` + rootPath=`pwd` - cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$buildPath/openssl_1_1_1/include -DOPENSSL_CRYPTO_LIBRARY=$buildPath/openssl_1_1_1/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= .. - ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator + cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_3/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_3/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= .. + ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client \ + pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy \ + create-state create-hardfork emulator \ + test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor \ + test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state - name: Strip binaries run: | strip -g build-${{ matrix.os }}/storage/storage-daemon/storage-daemon build-${{ matrix.os }}/storage/storage-daemon/storage-daemon-cli build-${{ matrix.os }}/crypto/fift build-${{ matrix.os }}/crypto/tlbc build-${{ matrix.os }}/crypto/func build-${{ matrix.os }}/crypto/create-state build-${{ matrix.os }}/validator-engine-console/validator-engine-console build-${{ matrix.os }}/tonlib/tonlib-cli build-${{ matrix.os }}/tonlib/libtonlibjson.so.0.5 build-${{ matrix.os }}/http/http-proxy build-${{ matrix.os }}/rldp-http-proxy/rldp-http-proxy build-${{ matrix.os }}/dht-server/dht-server build-${{ matrix.os }}/lite-client/lite-client build-${{ matrix.os }}/validator-engine/validator-engine build-${{ matrix.os }}/utils/generate-random-id build-${{ matrix.os }}/utils/json2tlo build-${{ matrix.os }}/adnl/adnl-proxy build-${{ matrix.os }}/emulator/libemulator.* + - name: Run tests + run: | + cd build-${{ matrix.os }} + ctest --output-on-failure -E "test-catchain|test-actors" + - name: Find & copy binaries run: | mkdir artifacts-${{ matrix.os }} diff --git a/.github/workflows/win-2019-compile.yml b/.github/workflows/win-2019-compile.yml index 9b4d3bef..e94655f7 100644 --- a/.github/workflows/win-2019-compile.yml +++ b/.github/workflows/win-2019-compile.yml @@ -49,10 +49,10 @@ jobs: curl -Lo libsodium-1.0.18-stable-msvc.zip https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable-msvc.zip unzip libsodium-1.0.18-stable-msvc.zip - - name: Install pre-compiled OpenSSL Win64 + - name: Install pre-compiled OpenSSL 3 Win64 run: | - curl -Lo openssl-1.1.1j.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/openssl-1.1.1j.zip - jar xf openssl-1.1.1j.zip + curl -Lo openssl-3.1.4.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/openssl-3.1.4.zip + unzip openssl-3.1.4.zip - name: Install pre-compiled libmicrohttpd Win64 run: | @@ -72,8 +72,13 @@ jobs: echo %SODIUM_DIR% mkdir build cd build - cmake -DCMAKE_BUILD_TYPE=Release -DSODIUM_USE_STATIC_LIBS=1 -DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include -DSECP256K1_LIBRARY=%root%\secp256k1\bin\x64\Release\v142\static\secp256k1.lib -DREADLINE_INCLUDE_DIR=%root%\readline-5.0-1-lib\include\readline -DREADLINE_LIBRARY=%root%\readline-5.0-1-lib\lib\readline.lib -DPORTABLE=1 -DZLIB_FOUND=1 -DMHD_FOUND=1 -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static -DZLIB_INCLUDE_DIR=%root%\zlib -DZLIB_LIBRARY=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=%root%/openssl-1.1.1j/include -DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-1.1.1j/lib/libcrypto_static.lib -DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj /W0" .. - cmake --build . --target storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator --config Release + cmake -DSODIUM_USE_STATIC_LIBS=1 -DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include -DSECP256K1_LIBRARY=%root%\secp256k1\bin\x64\Release\v142\static\secp256k1.lib -DREADLINE_INCLUDE_DIR=%root%\readline-5.0-1-lib\include\readline -DREADLINE_LIBRARY=%root%\readline-5.0-1-lib\lib\readline.lib -DPORTABLE=1 -DZLIB_FOUND=1 -DMHD_FOUND=1 -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static -DZLIB_INCLUDE_DIR=%root%\zlib -DZLIB_LIBRARY=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=%root%/openssl-3.1.4/x64/include -DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-3.1.4/x64/lib/libcrypto_static.lib -DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj /W0" .. + cmake --build . --config Release --target storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state + + - name: Run tests + run: | + cd build + ctest -C Release --output-on-failure -E "test-catchain|test-actors|test-validator-session-state" - name: Show executables run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b6f0dc9..c6d7ed87 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(TON VERSION 0.5 LANGUAGES C CXX) set(CMAKE_POSITION_INDEPENDENT_CODE ON) @@ -79,7 +79,7 @@ else() set(HAVE_SSE42 FALSE) endif() -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) set(CMAKE_CXX_EXTENSIONS FALSE) @@ -255,6 +255,9 @@ if (MSVC) add_definitions(-D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /W4 /wd4100 /wd4127 /wd4324 /wd4456 /wd4457 /wd4458 /wd4505 /wd4702") elseif (CLANG OR GCC) + if (GCC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstrong-eval-order=some") + endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer") if (APPLE) #use "-Wl,-exported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/export_list" for exported symbols @@ -447,6 +450,10 @@ target_link_libraries(test-smartcont PRIVATE smc-envelope fift-lib ton_db) add_executable(test-bigint ${BIGINT_TEST_SOURCE}) target_link_libraries(test-bigint PRIVATE ton_crypto) +if (WINGETOPT_FOUND) + target_link_libraries_system(test-bigint wingetopt) +endif() + add_executable(test-cells test/test-td-main.cpp ${CELLS_TEST_SOURCE}) target_link_libraries(test-cells PRIVATE ton_crypto) @@ -513,26 +520,12 @@ target_link_libraries(test-rldp2 adnl adnltest dht rldp2 tl_api) add_executable(test-validator-session-state test/test-validator-session-state.cpp) target_link_libraries(test-validator-session-state adnl dht rldp validatorsession tl_api) -#add_executable(test-node test/test-node.cpp) -#target_link_libraries(test-node overlay tdutils tdactor adnl tl_api dht -# catchain validatorsession) - add_executable(test-catchain test/test-catchain.cpp) target_link_libraries(test-catchain overlay tdutils tdactor adnl adnltest rldp tl_api dht catchain ) -#add_executable(test-validator-session test/test-validator-session.cpp) -#target_link_libraries(test-validator-session overlay tdutils tdactor adnl tl_api dht -# catchain validatorsession) add_executable(test-ton-collator test/test-ton-collator.cpp) target_link_libraries(test-ton-collator overlay tdutils tdactor adnl tl_api dht catchain validatorsession validator-disk ton_validator validator-disk ) -#add_executable(test-validator test/test-validator.cpp) -#target_link_libraries(test-validator overlay tdutils tdactor adnl tl_api dht -# rldp catchain validatorsession ton-node validator ton_validator validator memprof ${JEMALLOC_LIBRARIES}) -#add_executable(test-ext-server test/test-ext-server.cpp) -#target_link_libraries(test-ext-server tdutils tdactor adnl tl_api dht ) -#add_executable(test-ext-client test/test-ext-client.cpp) -#target_link_libraries(test-ext-client tdutils tdactor adnl tl_api tl-lite-utils) add_executable(test-http test/test-http.cpp) target_link_libraries(test-http PRIVATE tonhttp) @@ -574,13 +567,53 @@ add_test(test-tdutils test-tdutils) add_test(test-tonlib-offline test-tonlib-offline) #END tonlib +# FunC tests +if (NOT NIX) + if (MSVC) + set(PYTHON_VER "python") + else() + set(PYTHON_VER "python3") + endif() + add_test( + NAME test-func + COMMAND ${PYTHON_VER} run_tests.py tests/ + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/crypto/func/auto-tests) + if (WIN32) + set_property(TEST test-func PROPERTY ENVIRONMENT + "FUNC_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/Release/func.exe" + "FIFT_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/Release/fift.exe" + "FIFTPATH=${CMAKE_CURRENT_SOURCE_DIR}/crypto/fift/lib/") + else() + set_property(TEST test-func PROPERTY ENVIRONMENT + "FUNC_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/func" + "FIFT_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/fift" + "FIFTPATH=${CMAKE_CURRENT_SOURCE_DIR}/crypto/fift/lib/") + endif() + + add_test( + NAME test-func-legacy + COMMAND ${PYTHON_VER} legacy_tester.py + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/crypto/func/auto-tests) + if (WIN32) + set_property(TEST test-func-legacy PROPERTY ENVIRONMENT + "FUNC_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/Release/func.exe" + "FIFT_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/Release/fift.exe" + "FIFTPATH=${CMAKE_CURRENT_SOURCE_DIR}/crypto/fift/lib/") + else() + set_property(TEST test-func-legacy PROPERTY ENVIRONMENT + "FUNC_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/func" + "FIFT_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/fift" + "FIFTPATH=${CMAKE_CURRENT_SOURCE_DIR}/crypto/fift/lib/") + endif() +endif() + #BEGIN internal if (NOT TON_ONLY_TONLIB) add_test(test-adnl test-adnl) add_test(test-dht test-dht) add_test(test-rldp test-rldp) add_test(test-rldp2 test-rldp2) -#add_test(test-validator-session-state test-validator-session-state) +add_test(test-validator-session-state test-validator-session-state) add_test(test-catchain test-catchain) add_test(test-fec test-fec) diff --git a/README.md b/README.md index 6bc3b1f5..12d05190 100644 --- a/README.md +++ b/README.md @@ -66,3 +66,8 @@ If a CI workflow fails not because of your changes but workflow issues, try to f * **C/C++ CI (ccpp-linux.yml)**: TBD * **C/C++ CI Win64 Compile (ccpp-win64.yml)**: TBD + + +## Running tests + +Tests are executed by running `ctest` in the build directory. \ No newline at end of file diff --git a/adnl/CMakeLists.txt b/adnl/CMakeLists.txt index b287cba0..217a9624 100644 --- a/adnl/CMakeLists.txt +++ b/adnl/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) #BEGIN internal if (NOT TON_ONLY_TONLIB) diff --git a/blockchain-explorer/CMakeLists.txt b/blockchain-explorer/CMakeLists.txt index 11328a7a..fc94e709 100644 --- a/blockchain-explorer/CMakeLists.txt +++ b/blockchain-explorer/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) option(NIX "Use \"ON\" for a static build." OFF) diff --git a/blockchain-explorer/blockchain-explorer.cpp b/blockchain-explorer/blockchain-explorer.cpp index 035b84ea..bf41b31f 100644 --- a/blockchain-explorer/blockchain-explorer.cpp +++ b/blockchain-explorer/blockchain-explorer.cpp @@ -52,7 +52,7 @@ #include "vm/boc.h" #include "vm/cellops.h" #include "vm/cells/MerkleProof.h" -#include "vm/cp0.h" +#include "vm/vm.h" #include "auto/tl/lite_api.h" #include "ton/lite-tl.hpp" @@ -654,7 +654,7 @@ int main(int argc, char* argv[]) { }); #endif - vm::init_op_cp0(); + vm::init_vm().ensure(); td::actor::Scheduler scheduler({2}); scheduler_ptr = &scheduler; diff --git a/catchain/CMakeLists.txt b/catchain/CMakeLists.txt index a57d3788..8ab9525d 100644 --- a/catchain/CMakeLists.txt +++ b/catchain/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 96d92371..88a3671b 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) set(COMMON_SOURCE checksum.h diff --git a/create-hardfork/CMakeLists.txt b/create-hardfork/CMakeLists.txt index 3d78c118..41b94b52 100644 --- a/create-hardfork/CMakeLists.txt +++ b/create-hardfork/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/create-hardfork/create-hardfork.cpp b/create-hardfork/create-hardfork.cpp index 15533768..5f0b93be 100644 --- a/create-hardfork/create-hardfork.cpp +++ b/create-hardfork/create-hardfork.cpp @@ -49,7 +49,7 @@ #include "validator/fabric.h" #include "validator/impl/collator.h" -#include "crypto/vm/cp0.h" +#include "crypto/vm/vm.h" #include "crypto/block/block-db.h" #include "common/errorlog.h" @@ -307,7 +307,7 @@ int main(int argc, char *argv[]) { SET_VERBOSITY_LEVEL(verbosity_INFO); td::set_default_failure_signal_handler().ensure(); - CHECK(vm::init_op_cp0()); + vm::init_vm().ensure(); td::actor::ActorOwn x; diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 9f7a0a5a..62b0d216 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 0c77317f..9df5be13 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -28,9 +28,20 @@ #include "td/utils/Timer.h" namespace { +/** + * Logger that stores the tail of log messages. + * + * @param max_size The size of the buffer. Default is 256. + */ class StringLoggerTail : public td::LogInterface { public: explicit StringLoggerTail(size_t max_size = 256) : buf(max_size, '\0') {} + + /** + * Appends a slice of data to the buffer. + * + * @param slice The slice of data to be appended. + */ void append(td::CSlice slice) override { if (slice.size() > buf.size()) { slice.remove_prefix(slice.size() - buf.size()); @@ -46,6 +57,12 @@ class StringLoggerTail : public td::LogInterface { slice.remove_prefix(s); } } + + /** + * Retrieves the tail of the log. + * + * @returns The log as std::string. + */ std::string get_log() const { if (truncated) { std::string res = buf; @@ -55,6 +72,7 @@ class StringLoggerTail : public td::LogInterface { return buf.substr(0, pos); } } + private: std::string buf; size_t pos = 0; @@ -65,6 +83,13 @@ class StringLoggerTail : public td::LogInterface { namespace block { using td::Ref; +/** + * Looks up a library among public libraries. + * + * @param key A constant bit pointer representing the key of the library to lookup. + * + * @returns A reference to the library cell if found, null otherwise. + */ Ref ComputePhaseConfig::lookup_library(td::ConstBitPtr key) const { return libraries ? vm::lookup_library_in(key, libraries->get_root_cell()) : Ref{}; } @@ -75,12 +100,27 @@ Ref ComputePhaseConfig::lookup_library(td::ConstBitPtr key) const { * */ +/** + * Sets the address of the account. + * + * @param wc The workchain ID of the account. + * @param new_addr The new address of the account. + * + * @returns True if the address was successfully set, false otherwise. + */ bool Account::set_address(ton::WorkchainId wc, td::ConstBitPtr new_addr) { workchain = wc; addr = new_addr; return true; } +/** + * Sets the split depth of the account. + * + * @param new_split_depth The new split depth value to be set. + * + * @returns True if the split depth was successfully set, False otherwise. + */ bool Account::set_split_depth(int new_split_depth) { if (new_split_depth < 0 || new_split_depth > 30) { return false; // invalid value for split_depth @@ -94,11 +134,26 @@ bool Account::set_split_depth(int new_split_depth) { } } +/** + * Checks if the given split depth is valid for the Account. + * + * @param split_depth The split depth to be checked. + * + * @returns True if the split depth is valid, False otherwise. + */ bool Account::check_split_depth(int split_depth) const { return split_depth_set_ ? (split_depth == split_depth_) : (split_depth >= 0 && split_depth <= 30); } -// initializes split_depth and addr_rewrite +/** + * Parses anycast data of the account address. + * + * Initializes split_depth and addr_rewrite. + * + * @param cs The cell slice containing partially-parsed account addressa. + * + * @returns True if parsing was successful, false otherwise. + */ bool Account::parse_maybe_anycast(vm::CellSlice& cs) { int t = (int)cs.fetch_ulong(1); if (t < 0) { @@ -113,6 +168,13 @@ bool Account::parse_maybe_anycast(vm::CellSlice& cs) { && set_split_depth(depth); } +/** + * Stores the anycast information to a serialized account address. + * + * @param cb The vm::CellBuilder object to store the information in. + * + * @returns True if the anycast information was successfully stored, false otherwise. + */ bool Account::store_maybe_anycast(vm::CellBuilder& cb) const { if (!split_depth_set_ || !split_depth_) { return cb.store_bool_bool(false); @@ -122,6 +184,13 @@ bool Account::store_maybe_anycast(vm::CellBuilder& cb) const { && cb.store_bits_bool(addr_rewrite.cbits(), split_depth_); // rewrite_pfx:(bits depth) } +/** + * Unpacks the address from a given CellSlice. + * + * @param addr_cs The CellSlice containing the address. + * + * @returns True if the address was successfully unpacked, False otherwise. + */ bool Account::unpack_address(vm::CellSlice& addr_cs) { int addr_tag = block::gen::t_MsgAddressInt.get_tag(addr_cs); int new_wc = ton::workchainInvalid; @@ -172,6 +241,15 @@ bool Account::unpack_address(vm::CellSlice& addr_cs) { return true; } +/** + * Unpacks storage information from a CellSlice. + * + * Storage information is serialized using StorageInfo TLB-scheme. + * + * @param cs The CellSlice containing the storage information. + * + * @returns True if the unpacking is successful, false otherwise. + */ bool Account::unpack_storage_info(vm::CellSlice& cs) { block::gen::StorageInfo::Record info; block::gen::StorageUsed::Record used; @@ -198,7 +276,16 @@ bool Account::unpack_storage_info(vm::CellSlice& cs) { return (u != std::numeric_limits::max()); } -// initializes split_depth (from account state - StateInit) +/** + * Unpacks the state of an Account from a CellSlice. + * + * State is serialized using StateInit TLB-scheme. + * Initializes split_depth (from account state - StateInit) + * + * @param cs The CellSlice containing the serialized state. + * + * @returns True if the state was successfully unpacked, False otherwise. + */ bool Account::unpack_state(vm::CellSlice& cs) { block::gen::StateInit::Record state; if (!tlb::unpack_exact(cs, state)) { @@ -226,6 +313,13 @@ bool Account::unpack_state(vm::CellSlice& cs) { return true; } +/** + * Computes the address of the account. + * + * @param force If set to true, the address will be recomputed even if it already exists. + * + * @returns True if the address was successfully computed, false otherwise. + */ bool Account::compute_my_addr(bool force) { if (!force && my_addr.not_null() && my_addr_exact.not_null()) { return true; @@ -266,6 +360,15 @@ bool Account::compute_my_addr(bool force) { return true; } +/** + * Computes the address of the Account. + * + * @param tmp_addr A reference to the CellSlice for the result. + * @param split_depth The split depth for the address. + * @param orig_addr_rewrite Address prefox of length split_depth. + * + * @returns True if the address was successfully computed, false otherwise. + */ bool Account::recompute_tmp_addr(Ref& tmp_addr, int split_depth, td::ConstBitPtr orig_addr_rewrite) const { if (!split_depth && my_addr_exact.not_null()) { @@ -307,6 +410,14 @@ bool Account::recompute_tmp_addr(Ref& tmp_addr, int split_depth, (tmp_addr = vm::load_cell_slice_ref(std::move(cell))).not_null(); } +/** + * Sets address rewriting info for a newly-activated account. + * + * @param split_depth The split depth for the account address. + * @param orig_addr_rewrite Address frepix of length split_depth. + * + * @returns True if the rewriting info was successfully set, false otherwise. + */ bool Account::init_rewrite_addr(int split_depth, td::ConstBitPtr orig_addr_rewrite) { if (split_depth_set_ || !set_split_depth(split_depth)) { return false; @@ -317,8 +428,18 @@ bool Account::init_rewrite_addr(int split_depth, td::ConstBitPtr orig_addr_rewri return compute_my_addr(true); } -// used to unpack previously existing accounts -bool Account::unpack(Ref shard_account, Ref extra, ton::UnixTime now, bool special) { +/** + * Unpacks the account information from the provided CellSlice. + * + * Used to unpack previously existing accounts. + * + * @param shard_account The ShardAccount to unpack. + * @param now The current Unix time. + * @param special Flag indicating if the account is special. + * + * @returns True if the unpacking is successful, false otherwise. + */ +bool Account::unpack(Ref shard_account, ton::UnixTime now, bool special) { LOG(DEBUG) << "unpacking " << (special ? "special " : "") << "account " << addr.to_hex(); if (shard_account.is_null()) { LOG(ERROR) << "account " << addr.to_hex() << " does not have a valid ShardAccount to unpack"; @@ -386,7 +507,13 @@ bool Account::unpack(Ref shard_account, Ref extra, return true; } -// used to initialize new accounts +/** + * Initializes a new Account object. + * + * @param now The current Unix time. + * + * @returns True if the initialization is successful, false otherwise. + */ bool Account::init_new(ton::UnixTime now) { // only workchain and addr are initialized at this point if (workchain == ton::workchainInvalid) { @@ -429,6 +556,11 @@ bool Account::init_new(ton::UnixTime now) { return true; } +/** + * Resets the split depth of the account. + * + * @returns True if the split depth was successfully reset, false otherwise. + */ bool Account::forget_split_depth() { split_depth_set_ = false; split_depth_ = 0; @@ -438,6 +570,11 @@ bool Account::forget_split_depth() { return true; } +/** + * Deactivates the account. + * + * @returns True if the account was successfully deactivated, false otherwise. + */ bool Account::deactivate() { if (status == acc_active) { return false; @@ -461,10 +598,26 @@ bool Account::deactivate() { return true; } +/** + * Checks if the account belongs to a specific shard. + * + * @param shard The shard to check against. + * + * @returns True if the account belongs to the shard, False otherwise. + */ bool Account::belongs_to_shard(ton::ShardIdFull shard) const { return workchain == shard.workchain && ton::shard_is_ancestor(shard.shard, addr); } +/** + * Adds the partial storage payment to the total sum. + * + * @param payment The total sum to be updated. + * @param delta The time delta for which the payment is calculated. + * @param prices The storage prices. + * @param storage Account storage statistics. + * @param is_mc A flag indicating whether the account is in the masterchain. + */ void add_partial_storage_payment(td::BigInt256& payment, ton::UnixTime delta, const block::StoragePrices& prices, const vm::CellStorageStat& storage, bool is_mc) { td::BigInt256 c{(long long)storage.cells}, b{(long long)storage.bits}; @@ -483,6 +636,18 @@ void add_partial_storage_payment(td::BigInt256& payment, ton::UnixTime delta, co payment += b; } +/** + * Computes the storage fees based on the given parameters. + * + * @param now The current Unix time. + * @param pricing The vector of storage prices. + * @param storage_stat Account storage statistics. + * @param last_paid The Unix time when the last payment was made. + * @param is_special A flag indicating if the account is special. + * @param is_masterchain A flag indicating if the account is in the masterchain. + * + * @returns The computed storage fees as RefInt256. + */ td::RefInt256 StoragePrices::compute_storage_fees(ton::UnixTime now, const std::vector& pricing, const vm::CellStorageStat& storage_stat, ton::UnixTime last_paid, bool is_special, bool is_masterchain) { @@ -509,11 +674,30 @@ td::RefInt256 StoragePrices::compute_storage_fees(ton::UnixTime now, const std:: return td::rshift(total, 16, 1); // divide by 2^16 with ceil rounding to obtain nanograms } +/** + * Computes the storage fees for the account. + * + * @param now The current Unix time. + * @param pricing The vector of storage prices. + * + * @returns The computed storage fees as RefInt256. + */ td::RefInt256 Account::compute_storage_fees(ton::UnixTime now, const std::vector& pricing) const { return StoragePrices::compute_storage_fees(now, pricing, storage_stat, last_paid, is_special, is_masterchain()); } namespace transaction { +/** + * Constructs a new Transaction object. + * + * @param _account The Account object. + * @param ttype The type of the transaction (see transaction.cpp#309). + * @param req_start_lt The minimal logical time of the transaction. + * @param _now The current Unix time. + * @param _inmsg The input message that caused the transaction. + * + * @returns None + */ Transaction::Transaction(const Account& _account, int ttype, ton::LogicalTime req_start_lt, ton::UnixTime _now, Ref _inmsg) : trans_type(ttype) @@ -540,6 +724,14 @@ Transaction::Transaction(const Account& _account, int ttype, ton::LogicalTime re } } +/** + * Unpacks the input message of a transaction. + * + * @param ihr_delivered A boolean indicating whether the message was delivered using IHR (Instant Hypercube Routing). + * @param cfg Action phase configuration. + * + * @returns A boolean indicating whether the unpacking was successful. + */ bool Transaction::unpack_input_msg(bool ihr_delivered, const ActionPhaseConfig* cfg) { if (in_msg.is_null() || in_msg_type) { return false; @@ -680,6 +872,15 @@ bool Transaction::unpack_input_msg(bool ihr_delivered, const ActionPhaseConfig* return true; } +/** + * Prepares the storage phase of a transaction. + * + * @param cfg The configuration for the storage phase. + * @param force_collect Flag indicating whether to collect fees for frozen accounts. + * @param adjust_msg_value Flag indicating whether to adjust the message value if the account balance becomes less than the message balance. + * + * @returns True if the storage phase was successfully prepared, false otherwise. + */ bool Transaction::prepare_storage_phase(const StoragePhaseConfig& cfg, bool force_collect, bool adjust_msg_value) { if (now < account.last_paid) { return false; @@ -743,12 +944,21 @@ bool Transaction::prepare_storage_phase(const StoragePhaseConfig& cfg, bool forc return true; } +/** + * Prepares the credit phase of a transaction. + * + * This function creates a CreditPhase object and performs the necessary calculations + * to determine the amount to be credited in the credit phase. It updates the due payment, + * credit, balance, and total fees accordingly. + * + * @returns True if the credit phase is prepared successfully, false otherwise. + */ bool Transaction::prepare_credit_phase() { credit_phase = std::make_unique(); - auto collected = std::min(msg_balance_remaining.grams, due_payment); - credit_phase->due_fees_collected = collected; - due_payment -= collected; - credit_phase->credit = msg_balance_remaining -= collected; + // auto collected = std::min(msg_balance_remaining.grams, due_payment); + // credit_phase->due_fees_collected = collected; + // due_payment -= collected; + // credit_phase->credit = msg_balance_remaining -= collected; if (!msg_balance_remaining.is_valid()) { LOG(ERROR) << "cannot compute the amount to be credited in the credit phase of transaction"; return false; @@ -759,17 +969,35 @@ bool Transaction::prepare_credit_phase() { LOG(ERROR) << "cannot credit currency collection to account"; return false; } - total_fees += std::move(collected); + // total_fees += std::move(collected); return true; } } // namespace transaction +/** + * Parses the gas limits and prices from a given cell. + * + * @param cell The cell containing the gas limits and prices serialized using GasLimitsPricing TLB-scheme. + * @param freeze_due_limit Reference to store the freeze due limit. + * @param delete_due_limit Reference to store the delete due limit. + * + * @returns True if the parsing is successful, false otherwise. + */ bool ComputePhaseConfig::parse_GasLimitsPrices(Ref cell, td::RefInt256& freeze_due_limit, td::RefInt256& delete_due_limit) { return cell.not_null() && parse_GasLimitsPrices(vm::load_cell_slice_ref(std::move(cell)), freeze_due_limit, delete_due_limit); } +/** + * Parses the gas limits and prices from a given cell slice. + * + * @param cs The cell slice containing the gas limits and prices serialized using GasLimitsPricing TLB-scheme. + * @param freeze_due_limit Reference to store the freeze due limit. + * @param delete_due_limit Reference to store the delete due limit. + * + * @returns True if the parsing is successful, false otherwise. + */ bool ComputePhaseConfig::parse_GasLimitsPrices(Ref cs, td::RefInt256& freeze_due_limit, td::RefInt256& delete_due_limit) { if (cs.is_null()) { @@ -784,6 +1012,17 @@ bool ComputePhaseConfig::parse_GasLimitsPrices(Ref cs, td::RefInt } } +/** + * Parses the gas limits and prices from a gas limits and prices record. + * + * @param cs The cell slice containing the gas limits and prices serialized using GasLimitsPricing TLB-scheme. + * @param freeze_due_limit A reference to store the freeze due limit. + * @param delete_due_limit A reference to store the delete due limit. + * @param _flat_gas_limit The flat gas limit. + * @param _flat_gas_price The flat gas price. + * + * @returns True if the parsing is successful, false otherwise. + */ bool ComputePhaseConfig::parse_GasLimitsPrices_internal(Ref cs, td::RefInt256& freeze_due_limit, td::RefInt256& delete_due_limit, td::uint64 _flat_gas_limit, td::uint64 _flat_gas_price) { @@ -812,6 +1051,14 @@ bool ComputePhaseConfig::parse_GasLimitsPrices_internal(Ref cs, t return true; } +/** + * Checks if an address is suspended according to the ConfigParam(44). + * + * @param wc The workchain ID. + * @param addr The account address address. + * + * @returns True if the address is suspended, False otherwise. + */ bool ComputePhaseConfig::is_address_suspended(ton::WorkchainId wc, td::Bits256 addr) const { if (!suspended_addresses) { return false; @@ -826,6 +1073,11 @@ bool ComputePhaseConfig::is_address_suspended(ton::WorkchainId wc, td::Bits256 a } } +/** + * Computes the maximum for gas fee based on the gas prices and limits. + * + * Updates max_gas_threshold. + */ void ComputePhaseConfig::compute_threshold() { gas_price256 = td::make_refint(gas_price); if (gas_limit > flat_gas_limit) { @@ -836,6 +1088,13 @@ void ComputePhaseConfig::compute_threshold() { } } +/** + * Computes the amount of gas that can be bought for a given amount of nanograms. + * + * @param nanograms The amount of nanograms to compute gas for. + * + * @returns The amount of gas. + */ td::uint64 ComputePhaseConfig::gas_bought_for(td::RefInt256 nanograms) const { if (nanograms.is_null() || sgn(nanograms) < 0) { return 0; @@ -850,12 +1109,27 @@ td::uint64 ComputePhaseConfig::gas_bought_for(td::RefInt256 nanograms) const { return res->to_long() + flat_gas_limit; } +/** + * Computes the gas price. + * + * @param gas_used The amount of gas used. + * + * @returns The computed gas price. + */ td::RefInt256 ComputePhaseConfig::compute_gas_price(td::uint64 gas_used) const { return gas_used <= flat_gas_limit ? td::make_refint(flat_gas_price) : td::rshift(gas_price256 * (gas_used - flat_gas_limit), 16, 1) + flat_gas_price; } namespace transaction { +/** + * Computes the gas limits for a transaction. + * + * @param cp The ComputePhase object to store the computed gas limits. + * @param cfg The compute phase configuration. + * + * @returns True if the gas limits were successfully computed, false otherwise. + */ bool Transaction::compute_gas_limits(ComputePhase& cp, const ComputePhaseConfig& cfg) { // Compute gas limits if (account.is_special) { @@ -880,6 +1154,14 @@ bool Transaction::compute_gas_limits(ComputePhase& cp, const ComputePhaseConfig& return true; } +/** + * Prepares a TVM stack for a transaction. + * + * @param cp The compute phase object. + * + * @returns A reference to the prepared virtual machine stack. + * Returns an empty reference if the transaction type is invalid. + */ Ref Transaction::prepare_vm_stack(ComputePhase& cp) { Ref stack_ref{true}; td::RefInt256 acc_addr{true}; @@ -906,6 +1188,14 @@ Ref Transaction::prepare_vm_stack(ComputePhase& cp) { } } +/** + * Prepares a random seed for a transaction. + * + * @param rand_seed The output random seed. + * @param cfg The configuration for the compute phase. + * + * @returns True if the random seed was successfully prepared, false otherwise. + */ bool Transaction::prepare_rand_seed(td::BitArray<256>& rand_seed, const ComputePhaseConfig& cfg) const { // we might use SHA256(block_rand_seed . addr . trans_lt) // instead, we use SHA256(block_rand_seed . addr) @@ -918,6 +1208,15 @@ bool Transaction::prepare_rand_seed(td::BitArray<256>& rand_seed, const ComputeP return true; } +/** + * Prepares the c7 tuple (virtual machine context) for a compute phase of a transaction. + * + * @param cfg The configuration for the compute phase. + * + * @returns A reference to a Tuple object. + * + * @throws CollatorError if the rand_seed cannot be computed for the transaction. + */ Ref Transaction::prepare_vm_c7(const ComputePhaseConfig& cfg) const { td::BitArray<256> rand_seed; td::RefInt256 rand_seed_int{true}; @@ -947,10 +1246,15 @@ Ref Transaction::prepare_vm_c7(const ComputePhaseConfig& cfg) const { } tuple.push_back(storage_phase->fees_collected); // storage_fees:Integer - // See crypto/block/mc-config.cpp#2115 (get_prev_blocks_info) + // See crypto/block/mc-config.cpp#2223 (get_prev_blocks_info) // [ wc:Integer shard:Integer seqno:Integer root_hash:Integer file_hash:Integer] = BlockId; // [ last_mc_blocks:[BlockId...] // prev_key_block:BlockId ] : PrevBlocksInfo + // The only context where PrevBlocksInfo (13 parameter of c7) is null is inside emulator + // where it need to be set via transaction_emulator_set_prev_blocks_info (see emulator/emulator-extern.cpp) + // Inside validator, collator and liteserver checking external message contexts + // prev_blocks_info is always not null, since get_prev_blocks_info() + // may only return tuple or raise Error (See crypto/block/mc-config.cpp#2223) tuple.push_back(cfg.prev_blocks_info.not_null() ? vm::StackEntry(cfg.prev_blocks_info) : vm::StackEntry()); } auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); @@ -958,6 +1262,13 @@ Ref Transaction::prepare_vm_c7(const ComputePhaseConfig& cfg) const { return vm::make_tuple_ref(std::move(tuple_ref)); } +/** + * Computes the number of output actions in a list. + * + * @param list c5 cell. + * + * @returns The number of output actions. + */ int output_actions_count(Ref list) { int i = -1; do { @@ -972,6 +1283,13 @@ int output_actions_count(Ref list) { return i; } +/** + * Unpacks the message StateInit. + * + * @param lib_only If true, only unpack libraries from the state. + * + * @returns True if the unpacking is successful, false otherwise. + */ bool Transaction::unpack_msg_state(bool lib_only) { block::gen::StateInit::Record state; if (in_msg_state.is_null() || !tlb::unpack_cell(in_msg_state, state)) { @@ -1002,6 +1320,13 @@ bool Transaction::unpack_msg_state(bool lib_only) { return true; } +/** + * Computes the set of libraries to be used during TVM execution. + * + * @param cfg The configuration for the compute phase. + * + * @returns A vector of hashmaps with libraries. + */ std::vector> Transaction::compute_vm_libraries(const ComputePhaseConfig& cfg) { std::vector> lib_set; if (in_msg_library.not_null()) { @@ -1017,6 +1342,11 @@ std::vector> Transaction::compute_vm_libraries(const ComputePhaseC return lib_set; } +/** + * Checks if the input message StateInit hash corresponds to the account address. + * + * @returns True if the input message state hash is valid, False otherwise. + */ bool Transaction::check_in_msg_state_hash() { CHECK(in_msg_state.not_null()); CHECK(new_split_depth >= 0 && new_split_depth < 32); @@ -1030,6 +1360,13 @@ bool Transaction::check_in_msg_state_hash() { return account.recompute_tmp_addr(my_addr, d, orig_addr_rewrite.bits()); } +/** + * Prepares the compute phase of a transaction, which includes running TVM. + * + * @param cfg The configuration for the compute phase. + * + * @returns True if the compute phase was successfully prepared and executed, false otherwise. + */ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { // TODO: add more skip verifications + sometimes use state from in_msg to re-activate // ... @@ -1188,6 +1525,13 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { return true; } +/** + * Prepares the action phase of a transaction. + * + * @param cfg The configuration for the action phase. + * + * @returns True if the action phase was prepared successfully, false otherwise. + */ bool Transaction::prepare_action_phase(const ActionPhaseConfig& cfg) { if (!compute_phase || !compute_phase->success) { return false; @@ -1358,6 +1702,15 @@ bool Transaction::prepare_action_phase(const ActionPhaseConfig& cfg) { return true; } +/** + * Tries to set the code for an account. + * + * @param cs The CellSlice containing the action data serialized as action_set_code TLB-scheme. + * @param ap The action phase object. + * @param cfg The action phase configuration. + * + * @returns 0 if the code was successfully set, -1 otherwise. + */ int Transaction::try_action_set_code(vm::CellSlice& cs, ActionPhase& ap, const ActionPhaseConfig& cfg) { block::gen::OutAction::Record_action_set_code rec; if (!tlb::unpack_exact(cs, rec)) { @@ -1369,6 +1722,19 @@ int Transaction::try_action_set_code(vm::CellSlice& cs, ActionPhase& ap, const A return 0; } +/** + * Tries to change the library in the transaction. + * + * @param cs The cell slice containing the action data serialized as action_change_library TLB-scheme. + * @param ap The action phase object. + * @param cfg The action phase configuration. + * + * @returns 0 if the action was successfully performed, + * -1 if there was an error unpacking the data or the mode is invalid, + * 41 if the library reference is required but is null, + * 43 if the number of cells in the library exceeds the limit, + * 42 if there was a VM error during the operation. + */ int Transaction::try_action_change_library(vm::CellSlice& cs, ActionPhase& ap, const ActionPhaseConfig& cfg) { block::gen::OutAction::Record_action_change_library rec; if (!tlb::unpack_exact(cs, rec)) { @@ -1435,9 +1801,18 @@ int Transaction::try_action_change_library(vm::CellSlice& cs, ActionPhase& ap, c } } // namespace transaction -// msg_fwd_fees = (lump_price + ceil((bit_price * msg.bits + cell_price * msg.cells)/2^16)) nanograms -// ihr_fwd_fees = ceil((msg_fwd_fees * ihr_price_factor)/2^16) nanograms -// bits in the root cell of a message are not included in msg.bits (lump_price pays for them) +/** + * Computes the forward fees for a message based on the number of cells and bits. + * + * msg_fwd_fees = (lump_price + ceil((bit_price * msg.bits + cell_price * msg.cells)/2^16)) nanograms + * ihr_fwd_fees = ceil((msg_fwd_fees * ihr_price_factor)/2^16) nanograms + * bits in the root cell of a message are not included in msg.bits (lump_price pays for them) + * + * @param cells The number of cells in the message. + * @param bits The number of bits in the message. + * + * @returns The computed forward fees for the message. + */ td::uint64 MsgPrices::compute_fwd_fees(td::uint64 cells, td::uint64 bits) const { return lump_price + td::uint128(bit_price) .mult(bits) @@ -1447,6 +1822,15 @@ td::uint64 MsgPrices::compute_fwd_fees(td::uint64 cells, td::uint64 bits) const .lo(); } +/** + * Computes the forward fees and IHR fees for a message with the given number of cells and bits. + * + * @param cells The number of cells. + * @param bits The number of bits. + * @param ihr_disabled Flag indicating whether IHR is disabled. + * + * @returns A pair of values representing the forward fees and IHR fees. + */ std::pair MsgPrices::compute_fwd_ihr_fees(td::uint64 cells, td::uint64 bits, bool ihr_disabled) const { td::uint64 fwd = compute_fwd_fees(cells, bits); @@ -1456,19 +1840,47 @@ std::pair MsgPrices::compute_fwd_ihr_fees(td::uint64 cel return std::pair(fwd, td::uint128(fwd).mult(ihr_factor).shr(16).lo()); } +/** + * Computes the part of the fees that go to the total fees of the current block. + * + * @param total The amount of fees. + * + * @returns The the part of the fees that go to the total fees of the current block. + */ td::RefInt256 MsgPrices::get_first_part(td::RefInt256 total) const { return (std::move(total) * first_frac) >> 16; } +/** + * Computes the part of the fees that go to the total fees of the current block. + * + * @param total The amount of fees. + * + * @returns The the part of the fees that go to the total fees of the current block. + */ td::uint64 MsgPrices::get_first_part(td::uint64 total) const { return td::uint128(total).mult(first_frac).shr(16).lo(); } +/** + * Computes the part of the fees that go to the total fees of the transit block. + * + * @param total The amount of fees. + * + * @returns The the part of the fees that go to the total fees of the transit block. + */ td::RefInt256 MsgPrices::get_next_part(td::RefInt256 total) const { return (std::move(total) * next_frac) >> 16; } namespace transaction { +/** + * Checks if the source address is addr_none and replaces is with the account address. + * + * @param src_addr A reference to the source address of the message. + * + * @returns True if the source address is addr_none or is equal to the account address. + */ bool Transaction::check_replace_src_addr(Ref& src_addr) const { int t = (int)src_addr->prefetch_ulong(2); if (!t && src_addr->size_ext() == 2) { @@ -1489,6 +1901,15 @@ bool Transaction::check_replace_src_addr(Ref& src_addr) const { return false; } +/** + * Checks the destination address of a message, rewrites it if it is an anycast address. + * + * @param dest_addr A reference to the destination address of the transaction. + * @param cfg The configuration for the action phase. + * @param is_mc A pointer to a boolean where it will be stored whether the destination is in the masterchain. + * + * @returns True if the destination address is valid, false otherwise. + */ bool Transaction::check_rewrite_dest_addr(Ref& dest_addr, const ActionPhaseConfig& cfg, bool* is_mc) const { if (!dest_addr->prefetch_ulong(1)) { @@ -1595,6 +2016,17 @@ bool Transaction::check_rewrite_dest_addr(Ref& dest_addr, const A return true; } +/** + * Tries to send a message. + * + * @param cs0 The cell slice containing the action data serialized as action_send_msg TLB-scheme. + * @param ap The action phase. + * @param cfg The action phase configuration. + * @param redoing The index of the attempt, starting from 0. On later attempts tries to move message body and StateInit to separate cells. + * + * @returns 0 if the message is successfully sent or if the error may be ignored, error code otherwise. + * Returns -2 if the action should be attempted again. + */ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, const ActionPhaseConfig& cfg, int redoing) { block::gen::OutAction::Record_action_send_msg act_rec; @@ -1990,6 +2422,15 @@ int Transaction::try_action_send_msg(const vm::CellSlice& cs0, ActionPhase& ap, return 0; } +/** + * Tries to reserve a currency an action phase. + * + * @param cs The cell slice containing the action data serialized as action_reserve_currency TLB-scheme. + * @param ap The action phase. + * @param cfg The action phase configuration. + * + * @returns 0 if the currency is successfully reserved, error code otherwise. + */ int Transaction::try_action_reserve_currency(vm::CellSlice& cs, ActionPhase& ap, const ActionPhaseConfig& cfg) { block::gen::OutAction::Record_action_reserve_currency rec; if (!tlb::unpack_exact(cs, rec)) { @@ -2060,6 +2501,15 @@ int Transaction::try_action_reserve_currency(vm::CellSlice& cs, ActionPhase& ap, return 0; } +/** + * Checks that the new account state fits in the limits. + * + * @param cfg The configuration for the action phase. + * + * @returns A `td::Status` indicating the result of the check. + * - If the state limits are within the allowed range, returns OK. + * - If the state limits exceed the maximum allowed range, returns an error. + */ td::Status Transaction::check_state_limits(const ActionPhaseConfig& cfg) { auto cell_equal = [](const td::Ref& a, const td::Ref& b) -> bool { if (a.is_null()) { @@ -2104,6 +2554,13 @@ td::Status Transaction::check_state_limits(const ActionPhaseConfig& cfg) { : td::Status::Error("state too big"); } +/** + * Prepares the bounce phase of a transaction. + * + * @param cfg The configuration for the action phase. + * + * @returns True if the bounce phase was successfully prepared, false otherwise. + */ bool Transaction::prepare_bounce_phase(const ActionPhaseConfig& cfg) { if (in_msg.is_null() || !bounce_enabled) { return false; @@ -2209,6 +2666,14 @@ bool Transaction::prepare_bounce_phase(const ActionPhaseConfig& cfg) { * */ +/** + * Stores the account status in a CellBuilder object. + * + * @param cb The CellBuilder object to store the account status in. + * @param acc_status The account status to store. + * + * @returns True if the account status was successfully stored, false otherwise. + */ bool Account::store_acc_status(vm::CellBuilder& cb, int acc_status) const { int v; switch (acc_status) { @@ -2231,6 +2696,17 @@ bool Account::store_acc_status(vm::CellBuilder& cb, int acc_status) const { return cb.store_long_bool(v, 2); } +/** + * Tries to update the storage statistics based on the old storage statistics and old account state without fully recomputing it. + * + * It succeeds if only root cell of AccountStorage is changed. + * + * @param old_stat The old storage statistics. + * @param old_cs The old AccountStorage. + * @param new_cell The new AccountStorage. + * + * @returns An optional value of type vm::CellStorageStat. If the update is successful, it returns the new storage statistics. Otherwise, it returns an empty optional. + */ static td::optional try_update_storage_stat(const vm::CellStorageStat& old_stat, td::Ref old_cs, td::Ref new_cell) { @@ -2258,6 +2734,11 @@ static td::optional try_update_storage_stat(const vm::CellS } namespace transaction { +/** + * Computes the new state of the account. + * + * @returns True if the state computation is successful, false otherwise. + */ bool Transaction::compute_state() { if (new_total_state.not_null()) { return true; @@ -2360,6 +2841,13 @@ bool Transaction::compute_state() { return true; } +/** + * Serializes the transaction object using Transaction TLB-scheme. + * + * Updates root. + * + * @returns True if the serialization is successful, False otherwise. + */ bool Transaction::serialize() { if (root.not_null()) { return true; @@ -2462,6 +2950,13 @@ bool Transaction::serialize() { return true; } +/** + * Serializes the storage phase of a transaction. + * + * @param cb The CellBuilder to store the serialized data. + * + * @returns True if the serialization is successful, false otherwise. + */ bool Transaction::serialize_storage_phase(vm::CellBuilder& cb) { if (!storage_phase) { return false; @@ -2485,6 +2980,13 @@ bool Transaction::serialize_storage_phase(vm::CellBuilder& cb) { return ok; } +/** + * Serializes the credit phase of a transaction. + * + * @param cb The CellBuilder to store the serialized data. + * + * @returns True if the credit phase was successfully serialized, false otherwise. + */ bool Transaction::serialize_credit_phase(vm::CellBuilder& cb) { if (!credit_phase) { return false; @@ -2494,6 +2996,13 @@ bool Transaction::serialize_credit_phase(vm::CellBuilder& cb) { return block::store_Maybe_Grams_nz(cb, cp.due_fees_collected) && cp.credit.store(cb); } +/** + * Serializes the compute phase of a transaction. + * + * @param cb The CellBuilder to store the serialized data. + * + * @returns True if the serialization was successful, false otherwise. + */ bool Transaction::serialize_compute_phase(vm::CellBuilder& cb) { if (!compute_phase) { return false; @@ -2536,6 +3045,13 @@ bool Transaction::serialize_compute_phase(vm::CellBuilder& cb) { return ok; } +/** + * Serializes the action phase of a transaction. + * + * @param cb The CellBuilder to store the serialized data. + * + * @returns True if the serialization is successful, false otherwise. + */ bool Transaction::serialize_action_phase(vm::CellBuilder& cb) { if (!action_phase) { return false; @@ -2560,6 +3076,13 @@ bool Transaction::serialize_action_phase(vm::CellBuilder& cb) { return ok; } +/** + * Serializes the bounce phase of a transaction. + * + * @param cb The CellBuilder to store the serialized data. + * + * @returns True if the bounce phase was successfully serialized, false otherwise. + */ bool Transaction::serialize_bounce_phase(vm::CellBuilder& cb) { if (!bounce_phase) { return false; @@ -2580,6 +3103,15 @@ bool Transaction::serialize_bounce_phase(vm::CellBuilder& cb) { } } +/** + * Estimates the block storage profile increment if the transaction is added to the block. + * + * @param store_stat The current storage statistics of the block. + * @param usage_tree The usage tree of the block. + * + * @returns The estimated block storage profile increment. + * Returns Error if the transaction is not serialized or if its new state is not computed. + */ td::Result Transaction::estimate_block_storage_profile_incr( const vm::NewCellStorageStat& store_stat, const vm::CellUsageTree* usage_tree) const { if (root.is_null()) { @@ -2591,26 +3123,14 @@ td::Result Transaction::estimate_block_storage_pro return store_stat.tentative_add_proof(new_total_state, usage_tree) + store_stat.tentative_add_cell(root); } -bool Transaction::update_block_storage_profile(vm::NewCellStorageStat& store_stat, - const vm::CellUsageTree* usage_tree) const { - if (root.is_null() || new_total_state.is_null()) { - return false; - } - store_stat.add_proof(new_total_state, usage_tree); - store_stat.add_cell(root); - return true; -} - -bool Transaction::would_fit(unsigned cls, const block::BlockLimitStatus& blimst) const { - auto res = estimate_block_storage_profile_incr(blimst.st_stat, blimst.limits.usage_tree); - if (res.is_error()) { - LOG(ERROR) << res.move_as_error(); - return false; - } - auto extra = res.move_as_ok(); - return blimst.would_fit(cls, end_lt, gas_used(), &extra); -} - +/** + * Updates the limits status of a block. + * + * @param blimst The block limit status object to update. + * @param with_size Flag indicating whether to update the size limits. + * + * @returns True if the limits were successfully updated, False otherwise. + */ bool Transaction::update_limits(block::BlockLimitStatus& blimst, bool with_size) const { if (!(blimst.update_lt(end_lt) && blimst.update_gas(gas_used()))) { return false; @@ -2628,6 +3148,13 @@ bool Transaction::update_limits(block::BlockLimitStatus& blimst, bool with_size) * */ +/** + * Commits a transaction for a given account. + * + * @param acc The account to commit the transaction for. + * + * @returns A reference to the root cell of the serialized transaction. + */ Ref Transaction::commit(Account& acc) { CHECK(account.last_trans_end_lt_ <= start_lt && start_lt < end_lt); CHECK(root.not_null()); @@ -2672,14 +3199,33 @@ Ref Transaction::commit(Account& acc) { return root; } +/** + * Extracts the output message at the specified index from the transaction. + * + * @param i The index of the output message to extract. + * + * @returns A pair of the logical time and the extracted output message. + */ LtCellRef Transaction::extract_out_msg(unsigned i) { return {start_lt + i + 1, std::move(out_msgs.at(i))}; } +/** + * Extracts the output message at index i from the transaction. + * + * @param i The index of the output message to extract. + * + * @returns A triple of the logical time, the extracted output message and the transaction root. + */ NewOutMsg Transaction::extract_out_msg_ext(unsigned i) { return {start_lt + i + 1, std::move(out_msgs.at(i)), root}; } +/** + * Extracts the outgoing messages from the transaction and adds them to the given list. + * + * @param list The list to which the outgoing messages will be added. + */ void Transaction::extract_out_msgs(std::vector& list) { for (unsigned i = 0; i < out_msgs.size(); i++) { list.emplace_back(start_lt + i + 1, std::move(out_msgs[i])); @@ -2687,10 +3233,23 @@ void Transaction::extract_out_msgs(std::vector& list) { } } // namespace transaction +/** + * Adds a transaction to the account's transaction list. + * + * @param trans_root The root of the transaction cell. + * @param trans_lt The logical time of the transaction. + */ void Account::push_transaction(Ref trans_root, ton::LogicalTime trans_lt) { transactions.emplace_back(trans_lt, std::move(trans_root)); } +/** + * Serializes an account block for the account using AccountBlock TLB-scheme. + * + * @param cb The CellBuilder used to store the serialized data. + * + * @returns True if the account block was successfully created, false otherwise. + */ bool Account::create_account_block(vm::CellBuilder& cb) { if (transactions.empty()) { return false; @@ -2719,6 +3278,11 @@ bool Account::create_account_block(vm::CellBuilder& cb) { && cb.store_ref_bool(cb2.finalize()); // state_update:^(HASH_UPDATE Account) } +/** + * Checks if the libraries stored in the account object have changed. + * + * @returns True if the libraries have changed, False otherwise. + */ bool Account::libraries_changed() const { bool s = orig_library.not_null(); bool t = library.not_null(); @@ -2729,6 +3293,21 @@ bool Account::libraries_changed() const { } } +/** + * Fetches and initializes various configuration parameters from masterchain config for transaction processing. + * + * @param config The masterchain configuration. + * @param old_mparams Pointer to store a dictionary of mandatory parameters (ConfigParam 9). + * @param storage_prices Pointer to store the storage prices. + * @param storage_phase_cfg Pointer to store the storage phase configuration. + * @param rand_seed Pointer to the random seed. Generates a new seed if the value is `td::Bits256::zero()`. + * @param compute_phase_cfg Pointer to store the compute phase configuration. + * @param action_phase_cfg Pointer to store the action phase configuration. + * @param masterchain_create_fee Pointer to store the masterchain create fee. + * @param basechain_create_fee Pointer to store the basechain create fee. + * @param wc The workchain ID. + * @param now The current Unix time. + */ td::Status FetchConfigParams::fetch_config_params( const block::ConfigInfo& config, Ref* old_mparams, std::vector* storage_prices, StoragePhaseConfig* storage_phase_cfg, td::BitArray<256>* rand_seed, ComputePhaseConfig* compute_phase_cfg, @@ -2744,6 +3323,22 @@ td::Status FetchConfigParams::fetch_config_params( basechain_create_fee, wc, now); } +/** + * Fetches and initializes various configuration parameters from masterchain config for transaction processing. + * + * @param config The masterchain configuration. + * @param prev_blocks_info The tuple with information about previous blocks. + * @param old_mparams Pointer to store a dictionary of mandatory parameters (ConfigParam 9). + * @param storage_prices Pointer to store the storage prices. + * @param storage_phase_cfg Pointer to store the storage phase configuration. + * @param rand_seed Pointer to the random seed. Generates a new seed if the value is `td::Bits256::zero()`. + * @param compute_phase_cfg Pointer to store the compute phase configuration. + * @param action_phase_cfg Pointer to store the action phase configuration. + * @param masterchain_create_fee Pointer to store the masterchain create fee. + * @param basechain_create_fee Pointer to store the basechain create fee. + * @param wc The workchain ID. + * @param now The current Unix time. + */ td::Status FetchConfigParams::fetch_config_params( const block::Config& config, td::Ref prev_blocks_info, Ref* old_mparams, std::vector* storage_prices, StoragePhaseConfig* storage_phase_cfg, diff --git a/crypto/block/transaction.h b/crypto/block/transaction.h index 3ae8cdf8..6bb47fd9 100644 --- a/crypto/block/transaction.h +++ b/crypto/block/transaction.h @@ -270,7 +270,7 @@ struct Account { return balance; } bool set_address(ton::WorkchainId wc, td::ConstBitPtr new_addr); - bool unpack(Ref account, Ref extra, ton::UnixTime now, bool special = false); + bool unpack(Ref account, ton::UnixTime now, bool special); bool init_new(ton::UnixTime now); bool deactivate(); bool recompute_tmp_addr(Ref& tmp_addr, int split_depth, td::ConstBitPtr orig_addr_rewrite) const; @@ -382,8 +382,6 @@ struct Transaction { td::Result estimate_block_storage_profile_incr( const vm::NewCellStorageStat& store_stat, const vm::CellUsageTree* usage_tree) const; - bool update_block_storage_profile(vm::NewCellStorageStat& store_stat, const vm::CellUsageTree* usage_tree) const; - bool would_fit(unsigned cls, const block::BlockLimitStatus& blk_lim_st) const; bool update_limits(block::BlockLimitStatus& blk_lim_st, bool with_size = true) const; Ref commit(Account& _account); // _account should point to the same account diff --git a/crypto/common/bitstring.cpp b/crypto/common/bitstring.cpp index c10a4ff3..5135cdf0 100644 --- a/crypto/common/bitstring.cpp +++ b/crypto/common/bitstring.cpp @@ -130,7 +130,7 @@ void bits_memcpy(unsigned char* to, int to_offs, const unsigned char* from, int from_offs &= 7; to_offs &= 7; //fprintf(stderr, "bits_memcpy: from=%p (%02x) to=%p (%02x) from_offs=%d to_offs=%d count=%lu\n", from, *from, to, *to, from_offs, to_offs, bit_count); - int sz = (int)bit_count; + int sz = static_cast(bit_count); bit_count += from_offs; if (from_offs == to_offs) { if (bit_count < 8) { @@ -206,7 +206,7 @@ void bits_memset(unsigned char* to, int to_offs, bool val, std::size_t bit_count } to += (to_offs >> 3); to_offs &= 7; - int sz = (int)bit_count; + int sz = static_cast(bit_count); bit_count += to_offs; int c = *to; if (bit_count <= 8) { diff --git a/crypto/fift/lib/Asm.fif b/crypto/fift/lib/Asm.fif index d9cee5d8..a0bfe642 100644 --- a/crypto/fift/lib/Asm.fif +++ b/crypto/fift/lib/Asm.fif @@ -461,19 +461,109 @@ x{B7A3} @Defop QNEGATE x{B7A4} @Defop QINC x{B7A5} @Defop QDEC x{B7A8} @Defop QMUL + x{B7A904} @Defop QDIV x{B7A905} @Defop QDIVR x{B7A906} @Defop QDIVC x{B7A908} @Defop QMOD +x{B7A909} @Defop QMODR +x{B7A90A} @Defop QMODC x{B7A90C} @Defop QDIVMOD x{B7A90D} @Defop QDIVMODR x{B7A90E} @Defop QDIVMODC x{B7A900} @Defop QADDDIVMOD x{B7A901} @Defop QADDDIVMODR x{B7A902} @Defop QADDDIVMODC + +x{B7A925} @Defop QRSHIFTR +x{B7A926} @Defop QRSHIFTC +x{B7A928} @Defop QMODPOW2 +x{B7A929} @Defop QMODPOW2R +x{B7A92A} @Defop QMODPOW2C +x{B7A92C} @Defop QRSHIFTMOD +x{B7A92D} @Defop QRSHIFTMODR +x{B7A92E} @Defop QRSHIFTMODC +x{B7A920} @Defop QADDRSHIFTMOD +x{B7A921} @Defop QADDRSHIFTMODR +x{B7A922} @Defop QADDRSHIFTMODC + +x{B7A935} @Defop(8u+1) QRSHIFTR# +x{B7A936} @Defop(8u+1) QRSHIFTC# +x{B7A938} @Defop(8u+1) QMODPOW2# +x{B7A939} @Defop(8u+1) QMODPOW2R# +x{B7A93A} @Defop(8u+1) QMODPOW2C# +x{B7A93C} @Defop(8u+1) QRSHIFT#MOD +x{B7A93D} @Defop(8u+1) QRSHIFTR#MOD +x{B7A93E} @Defop(8u+1) QRSHIFTC#MOD +x{B7A930} @Defop(8u+1) QADDRSHIFT#MOD +x{B7A931} @Defop(8u+1) QADDRSHIFTR#MOD +x{B7A932} @Defop(8u+1) QADDRSHIFTC#MOD + +x{B7A984} @Defop QMULDIV x{B7A985} @Defop QMULDIVR +x{B7A986} @Defop QMULDIVC +x{B7A988} @Defop QMULMOD +x{B7A989} @Defop QMULMODR +x{B7A98A} @Defop QMULMODC x{B7A98C} @Defop QMULDIVMOD -x{B7A980} @Defop QADDMULDIVMOD +x{B7A98D} @Defop QMULDIVMODR +x{B7A98E} @Defop QMULDIVMODC +x{B7A980} @Defop QMULADDDIVMOD +x{B7A981} @Defop QMULADDDIVMODR +x{B7A982} @Defop QMULADDDIVMODC + +x{B7A9A4} @Defop QMULRSHIFT +x{B7A9A5} @Defop QMULRSHIFTR +x{B7A9A6} @Defop QMULRSHIFTC +x{B7A9A8} @Defop QMULMODPOW2 +x{B7A9A9} @Defop QMULMODPOW2R +x{B7A9AA} @Defop QMULMODPOW2C +x{B7A9AC} @Defop QMULRSHIFTMOD +x{B7A9AD} @Defop QMULRSHIFTRMOD +x{B7A9AE} @Defop QMULRSHIFTCMOD +x{B7A9A0} @Defop QMULADDRSHIFTMOD +x{B7A9A1} @Defop QMULADDRSHIFTRMOD +x{B7A9A2} @Defop QMULADDRSHIFTCMOD + +x{B7A9B4} @Defop(8u+1) QMULRSHIFT# +x{B7A9B5} @Defop(8u+1) QMULRSHIFTR# +x{B7A9B6} @Defop(8u+1) QMULRSHIFTC# +x{B7A9B8} @Defop(8u+1) QMULMODPOW2# +x{B7A9B9} @Defop(8u+1) QMULMODPOW2R# +x{B7A9BA} @Defop(8u+1) QMULMODPOW2C# +x{B7A9BC} @Defop(8u+1) QMULRSHIFT#MOD +x{B7A9BD} @Defop(8u+1) QMULRSHIFTR#MOD +x{B7A9BE} @Defop(8u+1) QMULRSHIFTC#MOD +x{B7A9B0} @Defop(8u+1) QMULADDRSHIFT#MOD +x{B7A9B1} @Defop(8u+1) QMULADDRSHIFTR#MOD +x{B7A9B2} @Defop(8u+1) QMULADDRSHIFTC#MOD + +x{B7A9C4} @Defop QLSHIFTDIV +x{B7A9C5} @Defop QLSHIFTDIVR +x{B7A9C6} @Defop QLSHIFTDIVC +x{B7A9C8} @Defop QLSHIFTMOD +x{B7A9C9} @Defop QLSHIFTMODR +x{B7A9CA} @Defop QLSHIFTMODC +x{B7A9CC} @Defop QLSHIFTDIVMOD +x{B7A9CD} @Defop QLSHIFTDIVMODR +x{B7A9CE} @Defop QLSHIFTDIVMODC +x{B7A9C0} @Defop QLSHIFTADDDIVMOD +x{B7A9C1} @Defop QLSHIFTADDDIVMODR +x{B7A9C2} @Defop QLSHIFTADDDIVMODC + +x{B7A9D4} @Defop(8u+1) QLSHIFT#DIV +x{B7A9D5} @Defop(8u+1) QLSHIFT#DIVR +x{B7A9D6} @Defop(8u+1) QLSHIFT#DIVC +x{B7A9D8} @Defop(8u+1) QLSHIFT#MOD +x{B7A9D9} @Defop(8u+1) QLSHIFT#MODR +x{B7A9DA} @Defop(8u+1) QLSHIFT#MODC +x{B7A9DC} @Defop(8u+1) QLSHIFT#DIVMOD +x{B7A9DD} @Defop(8u+1) QLSHIFT#DIVMODR +x{B7A9DE} @Defop(8u+1) QLSHIFT#DIVMODC +x{B7A9D0} @Defop(8u+1) QLSHIFT#ADDDIVMOD +x{B7A9D1} @Defop(8u+1) QLSHIFT#ADDDIVMODR +x{B7A9D2} @Defop(8u+1) QLSHIFT#ADDDIVMODC + x{B7AC} @Defop QLSHIFT x{B7AD} @Defop QRSHIFT x{B7AE} @Defop QPOW2 @@ -1185,7 +1275,7 @@ x{F4BF} @Defop DICTUGETEXECZ x{F800} @Defop ACCEPT x{F801} @Defop SETGASLIMIT -x{F802} @Defop GASCONSUMED +x{F806} @Defop GASCONSUMED x{F80F} @Defop COMMIT x{F810} @Defop RANDU256 diff --git a/crypto/fift/words.cpp b/crypto/fift/words.cpp index 56dd4de2..8d652afc 100644 --- a/crypto/fift/words.cpp +++ b/crypto/fift/words.cpp @@ -3512,7 +3512,7 @@ void init_words_ton(Dictionary& d) { void init_words_vm(Dictionary& d, bool enable_debug) { using namespace std::placeholders; - vm::init_op_cp0(enable_debug); + vm::init_vm(enable_debug).ensure(); // vm run d.def_word("vmlibs ", LitCont::literal(vm_libraries)); // d.def_ctx_word("runvmcode ", std::bind(interpret_run_vm, _1, 0x40)); diff --git a/crypto/func/auto-tests/legacy_tester.py b/crypto/func/auto-tests/legacy_tester.py index e852a043..9a990501 100644 --- a/crypto/func/auto-tests/legacy_tester.py +++ b/crypto/func/auto-tests/legacy_tester.py @@ -8,37 +8,37 @@ import shutil add_pragmas = [] #["allow-post-modification", "compute-asm-ltr"]; tests = [ - # note, that deployed version of elector,config and multisig differ since it is compilled with func-0.1.0. - # Newer compillators optimize arithmetic and logic expression that can be calculated at the compile time - ["elector/elector-code.fc", 115226404411715505328583639896096915745686314074575650766750648324043316883483], - ["config/config-code.fc", 10913070768607625342121305745084703121685937915388357634624451844356456145601], - ["eth-bridge-multisig/multisig-code.fc", 101509909129354488841890823627011033360100627957439967918234053299675481277954], + # note, that deployed version of elector,config and multisig differ since it is compilled with func-0.1.0. + # Newer compillators optimize arithmetic and logic expression that can be calculated at the compile time + ["elector/elector-code.fc", 115226404411715505328583639896096915745686314074575650766750648324043316883483], + ["config/config-code.fc", 10913070768607625342121305745084703121685937915388357634624451844356456145601], + ["eth-bridge-multisig/multisig-code.fc", 101509909129354488841890823627011033360100627957439967918234053299675481277954], - ["bsc-bridge-collector/votes-collector.fc", 62190447221288642706570413295807615918589884489514159926097051017036969900417], - ["uni-lock-wallet/uni-lockup-wallet.fc", 61959738324779104851267145467044677651344601417998258530238254441977103654381], - ["nft-collection/nft-collection-editable.fc", 45561997735512210616567774035540357815786262097548276229169737015839077731274], - ["dns-collection/nft-collection.fc", 107999822699841936063083742021519765435859194241091312445235370766165379261859], + ["bsc-bridge-collector/votes-collector.fc", 62190447221288642706570413295807615918589884489514159926097051017036969900417], + ["uni-lock-wallet/uni-lockup-wallet.fc", 61959738324779104851267145467044677651344601417998258530238254441977103654381], + ["nft-collection/nft-collection-editable.fc", 45561997735512210616567774035540357815786262097548276229169737015839077731274], + ["dns-collection/nft-collection.fc", 107999822699841936063083742021519765435859194241091312445235370766165379261859], - # note, that deployed version of tele-nft-item differs since it is compilled with func-0.3.0. - # After introducing of try/catch construction, c2 register is not always the default one. - # Thus it is necessary to save it upon jumps, differences of deployed and below compilled is that - # "c2 SAVE" is added to the beginning of recv_internal. It does not change behavior. - ["tele-nft-item/nft-item.fc", 69777543125381987786450436977742010705076866061362104025338034583422166453344], + # note, that deployed version of tele-nft-item differs since it is compilled with func-0.3.0. + # After introducing of try/catch construction, c2 register is not always the default one. + # Thus it is necessary to save it upon jumps, differences of deployed and below compilled is that + # "c2 SAVE" is added to the beginning of recv_internal. It does not change behavior. + ["tele-nft-item/nft-item.fc", 69777543125381987786450436977742010705076866061362104025338034583422166453344], - ["storage/storage-contract.fc", 91377830060355733016937375216020277778264560226873154627574229667513068328151], - ["storage/storage-provider.fc", 13618336676213331164384407184540461509022654507176709588621016553953760588122], - ["nominator-pool/pool.fc", 69767057279163099864792356875696330339149706521019810113334238732928422055375], - ["jetton-minter/jetton-minter.fc", 9028309926287301331466371999814928201427184114165428257502393474125007156494], - ["gg-marketplace/nft-marketplace-v2.fc", 92199806964112524639740773542356508485601908152150843819273107618799016205930], - ["jetton-wallet/jetton-wallet.fc", 86251125787443633057458168028617933212663498001665054651523310772884328206542], - ["whales-nominators/nominators.fc", 8941364499854379927692172316865293429893094891593442801401542636695127885153], + ["storage/storage-contract.fc", 91377830060355733016937375216020277778264560226873154627574229667513068328151], + ["storage/storage-provider.fc", 13618336676213331164384407184540461509022654507176709588621016553953760588122], + ["nominator-pool/pool.fc", 69767057279163099864792356875696330339149706521019810113334238732928422055375], + ["jetton-minter/jetton-minter.fc", 9028309926287301331466371999814928201427184114165428257502393474125007156494], + ["gg-marketplace/nft-marketplace-v2.fc", 92199806964112524639740773542356508485601908152150843819273107618799016205930], + ["jetton-wallet/jetton-wallet.fc", 86251125787443633057458168028617933212663498001665054651523310772884328206542], + ["whales-nominators/nominators.fc", 8941364499854379927692172316865293429893094891593442801401542636695127885153], - ["tact-examples/treasure_Treasure.code.fc", 13962538639825790677138656603323869918938565499584297120566680287245364723897], - ["tact-examples/jetton_SampleJetton.code.fc", 94076762218493729104783735200107713211245710256802265203823917715299139499110], - ["tact-examples/jetton_JettonDefaultWallet.code.fc", 29421313492520031238091587108198906058157443241743283101866538036369069620563], - ["tact-examples/maps_MapTestContract.code.fc", 22556550222249123835909180266811414538971143565993192846012583552876721649744], + ["tact-examples/treasure_Treasure.code.fc", 13962538639825790677138656603323869918938565499584297120566680287245364723897], + ["tact-examples/jetton_SampleJetton.code.fc", 94076762218493729104783735200107713211245710256802265203823917715299139499110], + ["tact-examples/jetton_JettonDefaultWallet.code.fc", 29421313492520031238091587108198906058157443241743283101866538036369069620563], + ["tact-examples/maps_MapTestContract.code.fc", 22556550222249123835909180266811414538971143565993192846012583552876721649744], ] def getenv(name, default=None): @@ -51,7 +51,6 @@ def getenv(name, default=None): FUNC_EXECUTABLE = getenv("FUNC_EXECUTABLE", "func") FIFT_EXECUTABLE = getenv("FIFT_EXECUTABLE", "fift") -FIFT_LIBS = getenv("FIFTPATH") TMP_DIR = tempfile.mkdtemp() COMPILED_FIF = os.path.join(TMP_DIR, "compiled.fif") @@ -63,49 +62,49 @@ class ExecutionError(Exception): pass def pre_process_func(f): - shutil.copyfile(f, f+"_backup") - with open(f, "r") as src: - sources = src.read() - with open(f, "w") as src: - for pragma in add_pragmas: - src.write("#pragma %s;\n"%pragma) - src.write(sources) + shutil.copyfile(f, f+"_backup") + with open(f, "r") as src: + sources = src.read() + with open(f, "w") as src: + for pragma in add_pragmas: + src.write("#pragma %s;\n"%pragma) + src.write(sources) def post_process_func(f): - shutil.move(f+"_backup", f) + shutil.move(f+"_backup", f) def compile_func(f): res = None try: pre_process_func(f) if "storage-provider.fc" in f : - # This contract requires building of storage-contract to include it as ref - with open(f, "r") as src: - sources = src.read() + # This contract requires building of storage-contract to include it as ref + with open(f, "r") as src: + sources = src.read() + COMPILED_ST_BOC = os.path.join(TMP_DIR, "storage-contract-code.boc") + sources = sources.replace("storage-contract-code.boc", COMPILED_ST_BOC) + with open(f, "w") as src: + src.write(sources) + COMPILED_ST_FIF = os.path.join(TMP_DIR, "storage-contract.fif") COMPILED_ST_BOC = os.path.join(TMP_DIR, "storage-contract-code.boc") - sources = sources.replace("storage-contract-code.boc", COMPILED_ST_BOC) - with open(f, "w") as src: - src.write(sources) - COMPILED_ST_FIF = os.path.join(TMP_DIR, "storage-contract.fif") - COMPILED_ST_BOC = os.path.join(TMP_DIR, "storage-contract-code.boc") - COMPILED_BUILD_BOC = os.path.join(TMP_DIR, "build-boc.fif") - res = subprocess.run([FUNC_EXECUTABLE, "-o", COMPILED_ST_FIF, "-SPA", f.replace("storage-provider.fc","storage-contract.fc")], capture_output=False, timeout=10) - with open(COMPILED_BUILD_BOC, "w") as scr: - scr.write("\"%s\" include boc>B \"%s\" B>file "%(COMPILED_ST_FIF, COMPILED_ST_BOC)) - res = subprocess.run([FIFT_EXECUTABLE, COMPILED_BUILD_BOC ], capture_output=True, timeout=10) - - + COMPILED_BUILD_BOC = os.path.join(TMP_DIR, "build-boc.fif") + res = subprocess.run([FUNC_EXECUTABLE, "-o", COMPILED_ST_FIF, "-SPA", f.replace("storage-provider.fc","storage-contract.fc")], capture_output=False, timeout=10) + with open(COMPILED_BUILD_BOC, "w") as scr: + scr.write("\"%s\" include boc>B \"%s\" B>file "%(COMPILED_ST_FIF, COMPILED_ST_BOC)) + res = subprocess.run([FIFT_EXECUTABLE, COMPILED_BUILD_BOC ], capture_output=True, timeout=10) + + res = subprocess.run([FUNC_EXECUTABLE, "-o", COMPILED_FIF, "-SPA", f], capture_output=True, timeout=10) except Exception as e: - post_process_func(f) - raise e + post_process_func(f) + raise e else: - post_process_func(f) + post_process_func(f) if res.returncode != 0: raise ExecutionError(str(res.stderr, "utf-8")) def run_runner(): - res = subprocess.run([FIFT_EXECUTABLE, "-I", FIFT_LIBS, RUNNER_FIF], capture_output=True, timeout=10) + res = subprocess.run([FIFT_EXECUTABLE, RUNNER_FIF], capture_output=True, timeout=10) if res.returncode != 0: raise ExecutionError(str(res.stderr, "utf-8")) s = str(res.stdout, "utf-8") @@ -138,16 +137,15 @@ for ti, t in enumerate(tests): try: func_out = run_runner() if func_out != th: - raise ExecutionError("Error : expected '%d', found '%d'" % (th, func_out)) + raise ExecutionError("Error : expected '%d', found '%d'" % (th, func_out)) success += 1 except ExecutionError as e: print(e, file=sys.stderr) - #print("Compiled:", file=sys.stderr) - #with open(COMPILED_FIF, "r") as f: - # print(f.read(), file=sys.stderr) - #exit(2) + print("Compiled:", file=sys.stderr) + with open(COMPILED_FIF, "r") as f: + print(f.read(), file=sys.stderr) + exit(2) print(" OK ", file=sys.stderr) print(get_version()) -print("Done: Success %d, Error: %d"%(success, len(tests)-success), file=sys.stderr) - +print("Done: Success %d, Error: %d"%(success, len(tests)-success), file=sys.stderr) \ No newline at end of file diff --git a/crypto/func/auto-tests/run_tests.py b/crypto/func/auto-tests/run_tests.py index 0f12332d..158e871b 100644 --- a/crypto/func/auto-tests/run_tests.py +++ b/crypto/func/auto-tests/run_tests.py @@ -4,6 +4,7 @@ import subprocess import sys import tempfile + def getenv(name, default=None): if name in os.environ: return os.environ[name] @@ -12,10 +13,9 @@ def getenv(name, default=None): exit(1) return default + FUNC_EXECUTABLE = getenv("FUNC_EXECUTABLE", "func") FIFT_EXECUTABLE = getenv("FIFT_EXECUTABLE", "fift") -#FUNC_STDLIB = getenv("FUNC_STDLIB") -FIFT_LIBS = getenv("FIFT_LIBS") TMP_DIR = tempfile.mkdtemp() COMPILED_FIF = os.path.join(TMP_DIR, "compiled.fif") RUNNER_FIF = os.path.join(TMP_DIR, "runner.fif") @@ -25,22 +25,26 @@ if len(sys.argv) != 2: exit(1) TESTS_DIR = sys.argv[1] + class ExecutionError(Exception): pass + def compile_func(f): res = subprocess.run([FUNC_EXECUTABLE, "-o", COMPILED_FIF, "-SPA", f], capture_output=True, timeout=10) if res.returncode != 0: raise ExecutionError(str(res.stderr, "utf-8")) + def run_runner(): - res = subprocess.run([FIFT_EXECUTABLE, "-I", FIFT_LIBS, RUNNER_FIF], capture_output=True, timeout=10) + res = subprocess.run([FIFT_EXECUTABLE, RUNNER_FIF], capture_output=True, timeout=10) if res.returncode != 0: raise ExecutionError(str(res.stderr, "utf-8")) s = str(res.stdout, "utf-8") s = [x.strip() for x in s.split("\n")] return [x for x in s if x != ""] + tests = [s for s in os.listdir(TESTS_DIR) if s.endswith(".fc")] tests.sort() print("Found", len(tests), "tests", file=sys.stderr) @@ -68,18 +72,18 @@ for ti, tf in enumerate(tests): # preprocess arithmetics in input for i in range(len(cases)): - inputs = cases[i][1].split(" ") - processed_inputs = "" - for in_arg in inputs: - if "x{" in in_arg: - processed_inputs += in_arg - continue - # filter and execute - # is it safe enough? - filtered_in = "".join(filter(lambda x: x in "0x123456789()+-*/<>", in_arg)) - if(filtered_in): - processed_inputs += str(eval(filtered_in)) + " "; - cases[i][1] = processed_inputs.strip() + inputs = cases[i][1].split(" ") + processed_inputs = "" + for in_arg in inputs: + if "x{" in in_arg: + processed_inputs += in_arg + continue + # filter and execute + # is it safe enough? + filtered_in = "".join(filter(lambda x: x in "0x123456789()+-*/<>", in_arg)) + if filtered_in: + processed_inputs += str(eval(filtered_in)) + " " + cases[i][1] = processed_inputs.strip() with open(RUNNER_FIF, "w") as f: print("\"%s\" include >(std::istream& is, Bignum& x) { return is; } -bool is_prime(const Bignum& p, int nchecks, bool trial_div) { - return BN_is_prime_fasttest_ex(p.bn_ptr(), BN_prime_checks, get_ctx(), trial_div, 0); +bool is_prime(const Bignum& p) { +#if OPENSSL_VERSION_MAJOR >= 3 + int result = BN_check_prime(p.bn_ptr(), get_ctx(), nullptr); + LOG_IF(FATAL, result == -1); + return result; +#else + return BN_is_prime_fasttest_ex(p.bn_ptr(), BN_prime_checks, get_ctx(), true, 0); +#endif } } // namespace arith diff --git a/crypto/openssl/bignum.h b/crypto/openssl/bignum.h index 2a8dd8a0..032dbb02 100644 --- a/crypto/openssl/bignum.h +++ b/crypto/openssl/bignum.h @@ -335,7 +335,7 @@ const Bignum sqr(const Bignum& x); std::ostream& operator<<(std::ostream& os, const Bignum& x); std::istream& operator>>(std::istream& is, Bignum& x); -bool is_prime(const Bignum& p, int nchecks = 64, bool trial_div = true); +bool is_prime(const Bignum& p); inline int cmp(const Bignum& x, const Bignum& y) { return BN_cmp(x.bn_ptr(), y.bn_ptr()); diff --git a/crypto/parser/lexer.cpp b/crypto/parser/lexer.cpp index 624d8dd2..117f1df5 100644 --- a/crypto/parser/lexer.cpp +++ b/crypto/parser/lexer.cpp @@ -250,7 +250,6 @@ const Lexem& Lexer::next() { } if (is_multiline_quote(src.get_ptr(), src.get_end_ptr())) { src.advance(multiline_quote.size()); - const char* begin = src.get_ptr(); const char* end = nullptr; SrcLocation here = src.here(); std::string body; diff --git a/crypto/smc-envelope/ManualDns.h b/crypto/smc-envelope/ManualDns.h index b5dee59a..d24cd023 100644 --- a/crypto/smc-envelope/ManualDns.h +++ b/crypto/smc-envelope/ManualDns.h @@ -305,7 +305,7 @@ class ManualDns : public ton::SmartContract, public DnsInterface { if (!info.known_category.insert(action.category).second) { continue; } - if (action.category == 0) { + if (action.category.is_zero()) { info.closed = true; auto old_actions = std::move(info.actions); bool is_empty = true; @@ -327,7 +327,7 @@ class ManualDns : public ton::SmartContract, public DnsInterface { if (info.closed) { CombinedActions ca; ca.name = it.first; - ca.category = 0; + ca.category = td::Bits256::zero(); if (!info.actions.empty() || info.non_empty) { ca.actions = std::move(info.actions); } diff --git a/crypto/smc-envelope/SmartContract.cpp b/crypto/smc-envelope/SmartContract.cpp index 64e26944..b56810b0 100644 --- a/crypto/smc-envelope/SmartContract.cpp +++ b/crypto/smc-envelope/SmartContract.cpp @@ -181,7 +181,7 @@ SmartContract::Answer run_smartcont(SmartContract::State state, td::Ref config) { auto gas_credit = gas.gas_credit; - vm::init_op_cp0(debug_enabled); + vm::init_vm(debug_enabled).ensure(); vm::DictionaryBase::get_empty_dictionary(); class Logger : public td::LogInterface { diff --git a/crypto/test/fift.cpp b/crypto/test/fift.cpp index 049507fd..2b1ed54e 100644 --- a/crypto/test/fift.cpp +++ b/crypto/test/fift.cpp @@ -33,7 +33,7 @@ std::string load_test(std::string name) { return td::read_file_str(current_dir() + "fift/" + name).move_as_ok(); } -td::Status run_fift(std::string name, bool expect_error = false, bool preload_fift = true) { +td::Status run_fift(std::string name, bool expect_error = false) { auto res = fift::mem_run_fift(load_test(name)); if (expect_error) { res.ensure_error(); diff --git a/crypto/test/fift/rist255.fif b/crypto/test/fift/rist255.fif index 630eebb1..ddd9b619 100644 --- a/crypto/test/fift/rist255.fif +++ b/crypto/test/fift/rist255.fif @@ -9,6 +9,9 @@ [[ <{ RIST255_MULBASE DUP RIST255_VALIDATE }>s ]] 0 runvmx abort"Exitcode != 0" @' n . dup (x.) type cr @' ans <> abort"Invalid result" + @' n + [[ <{ 1 INT RIST255_MULBASE SWAP RIST255_MUL DUP RIST255_VALIDATE }>s ]] 0 runvmx abort"Exitcode != 0" + @' ans <> abort"Invalid result" } : test-basepoint 0 0x0000000000000000000000000000000000000000000000000000000000000000 test-basepoint diff --git a/crypto/test/modbigint.cpp b/crypto/test/modbigint.cpp index b34411f3..75051fa6 100644 --- a/crypto/test/modbigint.cpp +++ b/crypto/test/modbigint.cpp @@ -180,7 +180,7 @@ struct MixedRadix { template const MixedRadix& as_shorter() const { - static_assert(M <= N); + static_assert(M <= N,"error"); return *reinterpret_cast*>(this); } @@ -458,7 +458,7 @@ struct ModArray { } template ModArray(const ModArray& other) { - static_assert(M >= N); + static_assert(M >= N,"error"); std::copy(other.a, other.a + N, a); } ModArray(const int* p) : a(p) { @@ -819,7 +819,7 @@ struct ModArray { template const ModArray& as_shorter() const { - static_assert(M <= N); + static_assert(M <= N,"error"); return *reinterpret_cast*>(this); } diff --git a/crypto/test/test-bigint.cpp b/crypto/test/test-bigint.cpp index 7525c83a..a6f6e8d6 100644 --- a/crypto/test/test-bigint.cpp +++ b/crypto/test/test-bigint.cpp @@ -16,12 +16,12 @@ */ #include #include -#include #include #include #include #include #include +#include #include "common/refcnt.hpp" #include "common/bigint.hpp" #include "common/refint.h" @@ -211,7 +211,7 @@ bool coin() { // returns 0 with probability 1/2, 1 with prob. 1/4, ..., k with prob. 1/2^(k+1) int randexp(int max = 63, int min = 0) { - return min + __builtin_clzll(Random() | (1ULL << (63 - max + min))); + return min + td::count_leading_zeroes64(Random() | (1ULL << (63 - max + min))); } void bin_add_small(unsigned char bin[64], long long val, int shift = 0) { @@ -363,7 +363,7 @@ void check_one_int_repr(td::RefInt256 x, int mode, int in_range, const BInt* val if (is_small) { // special check for small (64-bit) values CHECK(x->to_long() == xval); - CHECK((long long)__builtin_bswap64(*(long long*)(bytes + 64 - 8)) == xval); + CHECK((long long)td::bswap64(*(long long*)(bytes + 64 - 8)) == xval); CHECK(in_range); // check sign CHECK(x->sgn() == (xval > 0 ? 1 : (xval < 0 ? -1 : 0))); diff --git a/crypto/test/test-db.cpp b/crypto/test/test-db.cpp index 413d774f..35727ee3 100644 --- a/crypto/test/test-db.cpp +++ b/crypto/test/test-db.cpp @@ -127,12 +127,12 @@ class BenchSha256Low : public td::Benchmark { void run(int n) override { int res = 0; - SHA256_CTX ctx; + td::Sha256State ctx; for (int i = 0; i < n; i++) { - SHA256_Init(&ctx); - SHA256_Update(&ctx, "abcd", 4); + ctx.init(); + ctx.feed("abcd"); unsigned char buf[32]; - SHA256_Final(buf, &ctx); + ctx.extract(td::MutableSlice{buf, 32}); res += buf[0]; } td::do_not_optimize_away(res); diff --git a/crypto/test/test-smartcont.cpp b/crypto/test/test-smartcont.cpp index d3f18813..98534bc5 100644 --- a/crypto/test/test-smartcont.cpp +++ b/crypto/test/test-smartcont.cpp @@ -958,7 +958,7 @@ class MapDns { } return; } - if (!actions.category.is_zero()) { + if (actions.category.is_zero()) { entries_.erase(actions.name); LOG(ERROR) << "CLEAR " << actions.name; if (!actions.actions) { @@ -1003,7 +1003,7 @@ class CheckedDns { explicit CheckedDns(bool check_smc = true, bool check_combine = true) { if (check_smc) { key_ = td::Ed25519::generate_private_key().move_as_ok(); - dns_ = ManualDns::create(ManualDns::create_init_data_fast(key_.value().get_public_key().move_as_ok(), 123)); + dns_ = ManualDns::create(ManualDns::create_init_data_fast(key_.value().get_public_key().move_as_ok(), 123), -1); } if (check_combine) { combined_map_dns_ = MapDns(); @@ -1094,9 +1094,10 @@ class CheckedDns { } }; -static td::Bits256 intToCat(int x) { - td::Bits256 cat = td::Bits256::zero(); - cat.as_slice().copy_from(td::Slice((char*)&x, sizeof(x))); +static td::Bits256 intToCat(td::uint32 x) { + auto y = td::make_refint(x); + td::Bits256 cat; + y->export_bytes(cat.data(), 32, false); return cat; } @@ -1182,7 +1183,7 @@ TEST(Smartcont, DnsManual) { auto key = td::Ed25519::generate_private_key().move_as_ok(); - auto manual = ManualDns::create(ManualDns::create_init_data_fast(key.get_public_key().move_as_ok(), 123)); + auto manual = ManualDns::create(ManualDns::create_init_data_fast(key.get_public_key().move_as_ok(), 123), -1); CHECK(manual->get_wallet_id().move_as_ok() == 123); auto init_query = manual->create_init_query(key).move_as_ok(); LOG(ERROR) << "A"; diff --git a/crypto/test/vm.cpp b/crypto/test/vm.cpp index 3227f8fa..0f1b0442 100644 --- a/crypto/test/vm.cpp +++ b/crypto/test/vm.cpp @@ -28,7 +28,7 @@ #include "td/utils/StringBuilder.h" std::string run_vm(td::Ref cell) { - vm::init_op_cp0(); + vm::init_vm().ensure(); vm::DictionaryBase::get_empty_dictionary(); class Logger : public td::LogInterface { diff --git a/crypto/tl/tlbc-gen-cpp.cpp b/crypto/tl/tlbc-gen-cpp.cpp index dedec15d..6edd0a12 100644 --- a/crypto/tl/tlbc-gen-cpp.cpp +++ b/crypto/tl/tlbc-gen-cpp.cpp @@ -159,7 +159,6 @@ std::string CppIdentSet::compute_cpp_ident(std::string orig_ident, int count) { } if (!cnt) { os << '_'; - prev_skip = true; } if (count) { os << count; diff --git a/crypto/tl/tlbc.cpp b/crypto/tl/tlbc.cpp index 409ac538..b48bc472 100644 --- a/crypto/tl/tlbc.cpp +++ b/crypto/tl/tlbc.cpp @@ -2252,11 +2252,9 @@ TypeExpr* parse_expr10(Lexer& lex, Constructor& cs, int mode) { } if (op == '>') { std::swap(expr, expr2); - op = '<'; op_name = Less_name; } else if (op == src::_Geq) { std::swap(expr, expr2); - op = src::_Leq; op_name = Leq_name; } auto sym_def = sym::lookup_symbol(op_name, 2); diff --git a/crypto/vm/arithops.cpp b/crypto/vm/arithops.cpp index 7da53567..1d3111b2 100644 --- a/crypto/vm/arithops.cpp +++ b/crypto/vm/arithops.cpp @@ -285,8 +285,11 @@ int exec_divmod(VmState* st, unsigned args, int quiet) { typename td::BigInt256::DoubleInt tmp{*x}, quot; tmp += *w; tmp.mod_div(*y, quot, round_mode); - stack.push_int_quiet(td::make_refint(quot), quiet); - stack.push_int_quiet(td::make_refint(tmp), quiet); + auto q = td::make_refint(quot), r = td::make_refint(tmp); + q.write().normalize(); + r.write().normalize(); + stack.push_int_quiet(std::move(q), quiet); + stack.push_int_quiet(std::move(r), quiet); } else { switch (d) { case 1: @@ -399,6 +402,7 @@ std::string dump_shrmod(CellSlice&, unsigned args, int mode) { if (mode & 1) { os << 'Q'; } + std::string end; switch (args & 12) { case 4: os << "RSHIFT"; @@ -407,17 +411,22 @@ std::string dump_shrmod(CellSlice&, unsigned args, int mode) { os << "MODPOW2"; break; case 12: - os << "RSHIFTMOD"; + os << "RSHIFT"; + end = "MOD"; break; case 0: - os << "ADDRSHIFTMOD"; + os << "ADDRSHIFT"; + end = "MOD"; break; } + if (!(mode & 2)) { + os << end; + } if (round_mode) { os << "FRC"[round_mode]; } if (mode & 2) { - os << ' ' << y; + os << "#" << end << ' ' << y; } return os.str(); } @@ -519,7 +528,7 @@ int exec_mulshrmod(VmState* st, unsigned args, int mode) { if (add) { tmp = *w; } - tmp.add_mul(*x, *y); + tmp.add_mul(*x, *y).normalize(); switch (d) { case 1: tmp.rshift(z, round_mode).normalize(); @@ -553,6 +562,7 @@ std::string dump_mulshrmod(CellSlice&, unsigned args, int mode) { if (mode & 1) { os << 'Q'; } + std::string end; switch (args & 12) { case 4: os << "MULRSHIFT"; @@ -561,15 +571,21 @@ std::string dump_mulshrmod(CellSlice&, unsigned args, int mode) { os << "MULMODPOW2"; break; case 12: - os << "MULRSHIFTMOD"; + os << "MULRSHIFT"; + end = "MOD"; break; case 0: - os << "MULADDRSHIFTMOD"; + os << "MULADDRSHIFT"; + end = "MOD"; break; } if (round_mode) { os << "FRC"[round_mode]; } + if (mode & 2) { + os << "#"; + } + os << end; if (mode & 2) { os << ' ' << y; } @@ -644,18 +660,22 @@ std::string dump_shldivmod(CellSlice&, unsigned args, int mode) { if (mode & 1) { os << "Q"; } + os << "LSHIFT"; + if (mode & 2) { + os << "#"; + } switch (args & 12) { case 4: - os << "LSHIFTDIV"; + os << "DIV"; break; case 8: - os << "LSHIFTMOD"; + os << "MOD"; break; case 12: - os << "LSHIFTDIVMOD"; + os << "DIVMOD"; break; case 0: - os << "LSHIFTADDDIVMOD"; + os << "ADDDIVMOD"; break; } if (round_mode) { diff --git a/crypto/vm/tonops.cpp b/crypto/vm/tonops.cpp index 0dd15d80..f491d252 100644 --- a/crypto/vm/tonops.cpp +++ b/crypto/vm/tonops.cpp @@ -101,7 +101,7 @@ void register_basic_gas_ops(OpcodeTable& cp0) { using namespace std::placeholders; cp0.insert(OpcodeInstr::mksimple(0xf800, 16, "ACCEPT", exec_accept)) .insert(OpcodeInstr::mksimple(0xf801, 16, "SETGASLIMIT", exec_set_gas_limit)) - .insert(OpcodeInstr::mksimple(0xf802, 16, "GASCONSUMED", exec_gas_consumed)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf806, 16, "GASCONSUMED", exec_gas_consumed)->require_version(4)) .insert(OpcodeInstr::mksimple(0xf80f, 16, "COMMIT", exec_commit)); } @@ -620,7 +620,6 @@ int exec_ristretto255_from_hash(VmState* st) { if (!x2->export_bytes(xb + 32, 32, false)) { throw VmError{Excno::range_chk, "x2 must fit in an unsigned 256-bit integer"}; } - CHECK(sodium_init() >= 0); crypto_core_ristretto255_from_hash(rb, xb); td::RefInt256 r{true}; CHECK(r.write().import_bytes(rb, 32, false)); @@ -633,8 +632,7 @@ int exec_ristretto255_validate(VmState* st, bool quiet) { Stack& stack = st->get_stack(); auto x = stack.pop_int(); st->consume_gas(VmState::rist255_validate_gas_price); - unsigned char xb[64]; - CHECK(sodium_init() >= 0); + unsigned char xb[32]; if (!x->export_bytes(xb, 32, false) || !crypto_core_ristretto255_is_valid_point(xb)) { if (quiet) { stack.push_bool(false); @@ -656,7 +654,6 @@ int exec_ristretto255_add(VmState* st, bool quiet) { auto x = stack.pop_int(); st->consume_gas(VmState::rist255_add_gas_price); unsigned char xb[32], yb[32], rb[32]; - CHECK(sodium_init() >= 0); if (!x->export_bytes(xb, 32, false) || !y->export_bytes(yb, 32, false) || crypto_core_ristretto255_add(rb, xb, yb)) { if (quiet) { stack.push_bool(false); @@ -681,7 +678,6 @@ int exec_ristretto255_sub(VmState* st, bool quiet) { auto x = stack.pop_int(); st->consume_gas(VmState::rist255_add_gas_price); unsigned char xb[32], yb[32], rb[32]; - CHECK(sodium_init() >= 0); if (!x->export_bytes(xb, 32, false) || !y->export_bytes(yb, 32, false) || crypto_core_ristretto255_sub(rb, xb, yb)) { if (quiet) { stack.push_bool(false); @@ -719,17 +715,20 @@ int exec_ristretto255_mul(VmState* st, bool quiet) { auto n = stack.pop_int() % get_ristretto256_l(); auto x = stack.pop_int(); st->consume_gas(VmState::rist255_mul_gas_price); - unsigned char xb[32], nb[32], rb[32]; - memset(rb, 255, sizeof(rb)); - CHECK(sodium_init() >= 0); - if (!x->export_bytes(xb, 32, false) || !export_bytes_little(n, nb) || crypto_scalarmult_ristretto255(rb, nb, xb)) { - if (std::all_of(rb, rb + 32, [](unsigned char c) { return c == 255; })) { - if (quiet) { - stack.push_bool(false); - return 0; - } - throw VmError{Excno::range_chk, "invalid x or n"}; + if (n->sgn() == 0) { + stack.push_smallint(0); + if (quiet) { + stack.push_bool(true); } + return 0; + } + unsigned char xb[32], nb[32], rb[32]; + if (!x->export_bytes(xb, 32, false) || !export_bytes_little(n, nb) || crypto_scalarmult_ristretto255(rb, nb, xb)) { + if (quiet) { + stack.push_bool(false); + return 0; + } + throw VmError{Excno::range_chk, "invalid x or n"}; } td::RefInt256 r{true}; CHECK(r.write().import_bytes(rb, 32, false)); @@ -747,7 +746,6 @@ int exec_ristretto255_mul_base(VmState* st, bool quiet) { st->consume_gas(VmState::rist255_mulbase_gas_price); unsigned char nb[32], rb[32]; memset(rb, 255, sizeof(rb)); - CHECK(sodium_init() >= 0); if (!export_bytes_little(n, nb) || crypto_scalarmult_ristretto255_base(rb, nb)) { if (std::all_of(rb, rb + 32, [](unsigned char c) { return c == 255; })) { if (quiet) { @@ -833,7 +831,7 @@ int exec_bls_verify(VmState* st) { VM_LOG(st) << "execute BLS_VERIFY"; Stack& stack = st->get_stack(); stack.check_underflow(3); - st->consume_gas(st->bls_verify_gas_price); + st->consume_gas(VmState::bls_verify_gas_price); bls::P2 sig = slice_to_bls_p2(*stack.pop_cellslice()); td::BufferSlice msg = slice_to_bls_msg(*stack.pop_cellslice()); bls::P1 pub = slice_to_bls_p1(*stack.pop_cellslice()); @@ -845,8 +843,7 @@ int exec_bls_aggregate(VmState* st) { VM_LOG(st) << "execute BLS_AGGREGATE"; Stack& stack = st->get_stack(); int n = stack.pop_smallint_range(stack.depth() - 1, 1); - st->consume_gas( - std::max(0LL, VmState::bls_aggregate_base_gas_price + (long long)n * VmState::bls_aggregate_element_gas_price)); + st->consume_gas(VmState::bls_aggregate_base_gas_price + (long long)n * VmState::bls_aggregate_element_gas_price); std::vector sigs(n); for (int i = n - 1; i >= 0; --i) { sigs[i] = slice_to_bls_p2(*stack.pop_cellslice()); diff --git a/crypto/vm/vm.cpp b/crypto/vm/vm.cpp index 4d3e67af..3f595a00 100644 --- a/crypto/vm/vm.cpp +++ b/crypto/vm/vm.cpp @@ -21,6 +21,8 @@ #include "vm/dict.h" #include "vm/log.h" #include "vm/vm.h" +#include "cp0.h" +#include namespace vm { @@ -770,4 +772,15 @@ void VmState::restore_parent_vm(int res) { } } +td::Status init_vm(bool enable_debug) { + if (!init_op_cp0(enable_debug)) { + return td::Status::Error("Failed to init TVM: failed to init cp0"); + } + auto code = sodium_init(); + if (code < 0) { + return td::Status::Error(PSTRING() << "Failed to init TVM: sodium_init, code=" << code); + } + return td::Status::OK(); +} + } // namespace vm diff --git a/crypto/vm/vm.h b/crypto/vm/vm.h index e3fda318..2066db4c 100644 --- a/crypto/vm/vm.h +++ b/crypto/vm/vm.h @@ -423,4 +423,6 @@ int run_vm_code(Ref _code, Stack& _stack, int flags = 0, Ref* d Ref lookup_library_in(td::ConstBitPtr key, Ref lib_root); +td::Status init_vm(bool enable_debug = false); + } // namespace vm diff --git a/dht-server/CMakeLists.txt b/dht-server/CMakeLists.txt index 889b3f30..6daac033 100644 --- a/dht-server/CMakeLists.txt +++ b/dht-server/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/dht/CMakeLists.txt b/dht/CMakeLists.txt index e50a7497..95ee7069 100644 --- a/dht/CMakeLists.txt +++ b/dht/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/emulator/CMakeLists.txt b/emulator/CMakeLists.txt index c23f071c..969f9a88 100644 --- a/emulator/CMakeLists.txt +++ b/emulator/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) option(BUILD_SHARED_LIBS "Use \"OFF\" for a static build." ON) diff --git a/emulator/emulator-extern.cpp b/emulator/emulator-extern.cpp index 3a439831..4b65dd06 100644 --- a/emulator/emulator-extern.cpp +++ b/emulator/emulator-extern.cpp @@ -139,7 +139,7 @@ const char *transaction_emulator_emulate_transaction(void *transaction_emulator, now = (unsigned)std::time(nullptr); } bool is_special = wc == ton::masterchainId && emulator->get_config().is_special_smartcontract(addr); - if (!account.unpack(vm::load_cell_slice_ref(shard_account_cell.move_as_ok()), td::Ref(), now, is_special)) { + if (!account.unpack(vm::load_cell_slice_ref(shard_account_cell.move_as_ok()), now, is_special)) { ERROR_RESPONSE(PSTRING() << "Can't unpack shard account"); } @@ -217,7 +217,7 @@ const char *transaction_emulator_emulate_tick_tock_transaction(void *transaction now = (unsigned)std::time(nullptr); } bool is_special = wc == ton::masterchainId && emulator->get_config().is_special_smartcontract(addr); - if (!account.unpack(vm::load_cell_slice_ref(shard_account_cell.move_as_ok()), td::Ref(), now, is_special)) { + if (!account.unpack(vm::load_cell_slice_ref(shard_account_cell.move_as_ok()), now, is_special)) { ERROR_RESPONSE(PSTRING() << "Can't unpack shard account"); } diff --git a/emulator/transaction-emulator.cpp b/emulator/transaction-emulator.cpp index 505c0c37..81cf2e9f 100644 --- a/emulator/transaction-emulator.cpp +++ b/emulator/transaction-emulator.cpp @@ -1,7 +1,7 @@ #include #include "transaction-emulator.h" #include "crypto/common/refcnt.hpp" -#include "vm/cp0.h" +#include "vm/vm.h" #include "tdutils/td/utils/Time.h" using td::Ref; @@ -34,7 +34,7 @@ td::Result> TransactionEmu return fetch_res.move_as_error_prefix("cannot fetch config params "); } - vm::init_op_cp0(debug_enabled_); + TRY_STATUS(vm::init_vm(debug_enabled_)); if (!lt) { lt = lt_; diff --git a/fec/CMakeLists.txt b/fec/CMakeLists.txt index b1ac37b1..2a305607 100644 --- a/fec/CMakeLists.txt +++ b/fec/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/fec/fec.cpp b/fec/fec.cpp index 102df038..f6379fd7 100644 --- a/fec/fec.cpp +++ b/fec/fec.cpp @@ -99,7 +99,7 @@ td::uint32 FecType::symbol_size() const { } td::Result FecType::create(tl_object_ptr obj) { - td::int32 data_size_int, symbol_size_int, symbols_count_int; + td::int32 data_size_int = 0, symbol_size_int = 0, symbols_count_int = 0; ton_api::downcast_call(*obj, td::overloaded([&](const auto &obj) { data_size_int = obj.data_size_; symbol_size_int = obj.symbol_size_; diff --git a/flake.lock b/flake.lock index ca44d4c0..d22f15d3 100644 --- a/flake.lock +++ b/flake.lock @@ -36,8 +36,8 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1682600000, - "narHash": "sha256-ha4BehR1dh8EnXSoE1m/wyyYVvHI9txjW4w5/oxsW5Y=", + "lastModified": 1698846319, + "narHash": "sha256-4jyW/dqFBVpWFnhl0nvP6EN4lP7/ZqPxYRjl6var0Oc=", "owner": "nixos", "repo": "nixpkgs", "rev": "50fc86b75d2744e1ab3837ef74b53f103a9b55a0", @@ -45,7 +45,7 @@ }, "original": { "owner": "nixos", - "ref": "nixos-22.05", + "ref": "nixos-23.05", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index cb70b5bb..4e993ac5 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,6 @@ { inputs = { - nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-22.05"; + nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-23.05"; nixpkgs-trunk.url = "github:nixos/nixpkgs"; flake-compat = { url = "github:edolstra/flake-compat"; @@ -28,14 +28,14 @@ # then we can skip these manual overrides # and switch between pkgsStatic and pkgsStatic.pkgsMusl for static glibc and musl builds if !staticExternalDeps then [ - openssl_1_1 + openssl zlib libmicrohttpd libsodium secp256k1 ] else [ - (openssl_1_1.override { static = true; }).dev + (openssl.override { static = true; }).dev (zlib.override { shared = false; }).dev ] ++ optionals (!stdenv.isDarwin) [ pkgsStatic.libmicrohttpd.dev pkgsStatic.libsodium.dev secp256k1 ] @@ -50,6 +50,8 @@ ] ++ optionals (staticGlibc || staticMusl) [ "-DCMAKE_LINK_SEARCH_START_STATIC=ON" "-DCMAKE_LINK_SEARCH_END_STATIC=ON" + ] ++ optionals (stdenv.isDarwin) [ + "-DCMAKE_CXX_FLAGS=-stdlib=libc++" "-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=11.7" ]; LDFLAGS = optional staticExternalDeps (concatStringsSep " " [ diff --git a/http/CMakeLists.txt b/http/CMakeLists.txt index dbc57ec2..4a3fccf8 100644 --- a/http/CMakeLists.txt +++ b/http/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) set(HTTP_SOURCE http.h diff --git a/keyring/CMakeLists.txt b/keyring/CMakeLists.txt index 29e48ee9..f8f610f2 100644 --- a/keyring/CMakeLists.txt +++ b/keyring/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) set(KEYRING_SOURCE keyring.h diff --git a/keys/CMakeLists.txt b/keys/CMakeLists.txt index 486119de..e80436b7 100644 --- a/keys/CMakeLists.txt +++ b/keys/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) set(KEYS_SOURCE keys.cpp diff --git a/lite-client/CMakeLists.txt b/lite-client/CMakeLists.txt index b8449516..53e09d77 100644 --- a/lite-client/CMakeLists.txt +++ b/lite-client/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) add_library(lite-client-common lite-client-common.cpp lite-client-common.h) target_link_libraries(lite-client-common PUBLIC tdutils tdactor adnllite tl_api tl_lite_api tl-lite-utils ton_crypto ton_block) diff --git a/lite-client/lite-client.cpp b/lite-client/lite-client.cpp index feedbe40..dd6df40f 100644 --- a/lite-client/lite-client.cpp +++ b/lite-client/lite-client.cpp @@ -4307,7 +4307,7 @@ int main(int argc, char* argv[]) { }); #endif - vm::init_op_cp0(true); // enable vm debug + vm::init_vm(true).ensure(); // enable vm debug td::actor::Scheduler scheduler({2}); diff --git a/memprof/CMakeLists.txt b/memprof/CMakeLists.txt index 8559c4d9..2ccf11df 100644 --- a/memprof/CMakeLists.txt +++ b/memprof/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) set(MEMPROF_SOURCE memprof/memprof.cpp diff --git a/overlay/CMakeLists.txt b/overlay/CMakeLists.txt index 7adc0584..ab9722a6 100644 --- a/overlay/CMakeLists.txt +++ b/overlay/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/rldp-http-proxy/CMakeLists.txt b/rldp-http-proxy/CMakeLists.txt index 92cb01ac..f7e30c80 100644 --- a/rldp-http-proxy/CMakeLists.txt +++ b/rldp-http-proxy/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) add_executable(rldp-http-proxy rldp-http-proxy.cpp DNSResolver.h DNSResolver.cpp) target_include_directories(rldp-http-proxy PUBLIC $) diff --git a/rldp/CMakeLists.txt b/rldp/CMakeLists.txt index 813d346d..39e0d3ca 100644 --- a/rldp/CMakeLists.txt +++ b/rldp/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/rldp2/CMakeLists.txt b/rldp2/CMakeLists.txt index 1bfeb0bb..c144ec01 100644 --- a/rldp2/CMakeLists.txt +++ b/rldp2/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/storage/CMakeLists.txt b/storage/CMakeLists.txt index a5f36ff2..0208a33d 100644 --- a/storage/CMakeLists.txt +++ b/storage/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/storage/storage-daemon/CMakeLists.txt b/storage/storage-daemon/CMakeLists.txt index 4880eece..c987858f 100644 --- a/storage/storage-daemon/CMakeLists.txt +++ b/storage/storage-daemon/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) add_executable(embed-provider-code smartcont/embed-provider-code.cpp) diff --git a/storage/test/storage.cpp b/storage/test/storage.cpp index e7a97352..ff5a4831 100644 --- a/storage/test/storage.cpp +++ b/storage/test/storage.cpp @@ -400,7 +400,6 @@ class NetChannel : public td::actor::Actor { break; } else if (l > alive_end - eps) { alive_begin += alive_step + sleep_step; - alive_end = alive_begin + alive_step; } else { double new_l = td::min(alive_end, r); res += (new_l - l) * speed; @@ -516,9 +515,7 @@ class NetChannel : public td::actor::Actor { queue_ = {}; } - bool ok = false; while (!queue_.empty() && (double)queue_.front().size < got_) { - ok = true; auto query = queue_.pop(); got_ -= (double)query.size; total_size_ -= (double)query.size; diff --git a/tdactor/CMakeLists.txt b/tdactor/CMakeLists.txt index 3490eb17..46dd0335 100644 --- a/tdactor/CMakeLists.txt +++ b/tdactor/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) #SOURCE SETS set(TDACTOR_SOURCE diff --git a/tdactor/benchmark/CMakeLists.txt b/tdactor/benchmark/CMakeLists.txt index e01d33dc..c4ff79a1 100644 --- a/tdactor/benchmark/CMakeLists.txt +++ b/tdactor/benchmark/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) set(BENCHMARK_SOURCE benchmark.cpp diff --git a/tdactor/test/actors_core.cpp b/tdactor/test/actors_core.cpp index ae10eb9b..96cd6239 100644 --- a/tdactor/test/actors_core.cpp +++ b/tdactor/test/actors_core.cpp @@ -720,7 +720,7 @@ TEST(Actor2, actor_function_result) { } TEST(Actor2, actor_ping_pong) { - Scheduler scheduler{{3}, Scheduler::Paused}; + Scheduler scheduler{{3}, false, Scheduler::Paused}; sb.clear(); scheduler.start(); @@ -799,7 +799,7 @@ TEST(Actor2, Schedulers) { for (auto run_count : {0, 1, 2}) { for (auto stop_count : {0, 1, 2}) { for (size_t threads : {0, 1}) { - Scheduler scheduler({threads}, mode); + Scheduler scheduler({threads}, false, mode); for (int i = 0; i < start_count; i++) { scheduler.start(); } diff --git a/tdactor/test/actors_promise.cpp b/tdactor/test/actors_promise.cpp index f1d57069..5717b394 100644 --- a/tdactor/test/actors_promise.cpp +++ b/tdactor/test/actors_promise.cpp @@ -210,7 +210,7 @@ TEST(Actor, promise_future) { TEST(Actor2, actor_lost_promise) { using namespace td::actor; using namespace td; - Scheduler scheduler({1}, Scheduler::Paused); + Scheduler scheduler({1}, false, Scheduler::Paused); auto watcher = td::create_shared_destructor([] { LOG(ERROR) << "STOP"; diff --git a/tddb/CMakeLists.txt b/tddb/CMakeLists.txt index 1acd5420..89730b95 100644 --- a/tddb/CMakeLists.txt +++ b/tddb/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) #SOURCE SETS set(TDDB_UTILS_SOURCE diff --git a/tddb/td/db/utils/BlobView.cpp b/tddb/td/db/utils/BlobView.cpp index 7011a00e..ebfbc6d5 100644 --- a/tddb/td/db/utils/BlobView.cpp +++ b/tddb/td/db/utils/BlobView.cpp @@ -311,6 +311,7 @@ td::Result FileMemoryMappingBlobView::create(td::CSlice file_path, td: class CyclicBlobViewImpl : public BlobViewImpl { public: CyclicBlobViewImpl(td::BufferSlice data, td::uint64 total_size) : data_(std::move(data)), total_size_(total_size) { + CHECK(!data_.empty()); } td::Result view_impl(td::MutableSlice slice, td::uint64 offset) override { auto res = slice; diff --git a/tdfec/CMakeLists.txt b/tdfec/CMakeLists.txt index adfe2fdb..828ff90d 100644 --- a/tdfec/CMakeLists.txt +++ b/tdfec/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) set(TDFEC_SOURCE td/fec/raptorq/Rfc.cpp diff --git a/tdfec/benchmark/CMakeLists.txt b/tdfec/benchmark/CMakeLists.txt index 93ec575d..ee8f72cb 100644 --- a/tdfec/benchmark/CMakeLists.txt +++ b/tdfec/benchmark/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) add_executable(benchmark-fec benchmark.cpp ) target_include_directories(benchmark-fec PUBLIC $) diff --git a/tdfec/td/fec/raptorq/Rfc.h b/tdfec/td/fec/raptorq/Rfc.h index 1f5c27f0..e3a33131 100644 --- a/tdfec/td/fec/raptorq/Rfc.h +++ b/tdfec/td/fec/raptorq/Rfc.h @@ -61,7 +61,7 @@ class Rfc { template void encoding_row_for_each(EncodingRow t, F &&f) const { f(t.b); - for (uint16 j = 1; j < t.d; ++j) { + for (uint32 j = 1; j < t.d; ++j) { t.b = (t.b + t.a) % W; f(t.b); } diff --git a/tdnet/CMakeLists.txt b/tdnet/CMakeLists.txt index d5ae7086..bc00a676 100644 --- a/tdnet/CMakeLists.txt +++ b/tdnet/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) set(TDNET_SOURCE td/net/FdListener.cpp diff --git a/tdtl/CMakeLists.txt b/tdtl/CMakeLists.txt index b0f83cd9..482bd0f7 100644 --- a/tdtl/CMakeLists.txt +++ b/tdtl/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) #SOURCE SETS set(TDTL_SOURCE diff --git a/tdutils/CMakeLists.txt b/tdutils/CMakeLists.txt index 7b577e4f..f1e4b1ea 100644 --- a/tdutils/CMakeLists.txt +++ b/tdutils/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) option(TDUTILS_MIME_TYPE "Generate mime types conversion (gperf is required)" ON) @@ -314,7 +314,7 @@ if (WIN32) # find_library(WS2_32_LIBRARY ws2_32) # find_library(MSWSOCK_LIBRARY Mswsock) # target_link_libraries(tdutils PRIVATE ${WS2_32_LIBRARY} ${MSWSOCK_LIBRARY}) - target_link_libraries(tdutils PRIVATE ws2_32 Mswsock Normaliz psapi) + target_link_libraries(tdutils PRIVATE ws2_32 Mswsock Normaliz psapi DbgHelp) endif() if (NOT CMAKE_CROSSCOMPILING AND TDUTILS_MIME_TYPE) add_dependencies(tdutils tdmime_auto) diff --git a/tdutils/generate/CMakeLists.txt b/tdutils/generate/CMakeLists.txt index 07353e51..194fda39 100644 --- a/tdutils/generate/CMakeLists.txt +++ b/tdutils/generate/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) # Generates files for MIME type <-> extension conversions # DEPENDS ON: gperf grep bash/powershell diff --git a/tdutils/td/utils/BigNum.cpp b/tdutils/td/utils/BigNum.cpp index 36dde064..9de11fca 100644 --- a/tdutils/td/utils/BigNum.cpp +++ b/tdutils/td/utils/BigNum.cpp @@ -159,7 +159,11 @@ bool BigNum::is_bit_set(int num) const { } bool BigNum::is_prime(BigNumContext &context) const { +#if OPENSSL_VERSION_MAJOR >= 3 + int result = BN_check_prime(impl_->big_num, context.impl_->big_num_context, nullptr); +#else int result = BN_is_prime_ex(impl_->big_num, BN_prime_checks, context.impl_->big_num_context, nullptr); +#endif LOG_IF(FATAL, result == -1); return result == 1; } diff --git a/tdutils/td/utils/BufferedUdp.h b/tdutils/td/utils/BufferedUdp.h index bf4aa1b8..3fa93e9d 100644 --- a/tdutils/td/utils/BufferedUdp.h +++ b/tdutils/td/utils/BufferedUdp.h @@ -106,6 +106,7 @@ class UdpReader { } if (status.is_error() && !UdpSocketFd::is_critical_read_error(status)) { queue.push(UdpMessage{{}, {}, std::move(status)}); + return td::Status::OK(); } return status; } diff --git a/tdutils/td/utils/crypto.cpp b/tdutils/td/utils/crypto.cpp index 27313cf3..ea1efbe7 100644 --- a/tdutils/td/utils/crypto.cpp +++ b/tdutils/td/utils/crypto.cpp @@ -25,7 +25,6 @@ #include "td/utils/logging.h" #include "td/utils/misc.h" #include "td/utils/port/RwMutex.h" -#include "td/utils/port/thread_local.h" #include "td/utils/Random.h" #include "td/utils/ScopeGuard.h" #include "td/utils/SharedSlice.h" @@ -598,16 +597,23 @@ void aes_ige_decrypt(Slice aes_key, MutableSlice aes_iv, Slice from, MutableSlic static void aes_cbc_xcrypt(Slice aes_key, MutableSlice aes_iv, Slice from, MutableSlice to, bool encrypt_flag) { CHECK(aes_key.size() == 32); CHECK(aes_iv.size() == 16); - AES_KEY key; - int err; - if (encrypt_flag) { - err = AES_set_encrypt_key(aes_key.ubegin(), 256, &key); - } else { - err = AES_set_decrypt_key(aes_key.ubegin(), 256, &key); - } - LOG_IF(FATAL, err != 0); CHECK(from.size() <= to.size()); - AES_cbc_encrypt(from.ubegin(), to.ubegin(), from.size(), &key, aes_iv.ubegin(), encrypt_flag); + CHECK(from.size() % 16 == 0); + int out_len = 0; + EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); + CHECK(ctx); + if (encrypt_flag) { + CHECK(EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), nullptr, aes_key.ubegin(), aes_iv.ubegin()) == 1); + CHECK(EVP_CIPHER_CTX_set_padding(ctx, 0) == 1); + CHECK(EVP_EncryptUpdate(ctx, to.ubegin(), &out_len, from.ubegin(), td::narrow_cast(from.size())) == 1); + CHECK(EVP_EncryptFinal_ex(ctx, to.ubegin() + out_len, &out_len) == 1); + } else { + CHECK(EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), nullptr, aes_key.ubegin(), aes_iv.ubegin()) == 1); + CHECK(EVP_CIPHER_CTX_set_padding(ctx, 0) == 1); + CHECK(EVP_DecryptUpdate(ctx, to.ubegin(), &out_len, from.ubegin(), td::narrow_cast(from.size())) == 1); + CHECK(EVP_DecryptFinal_ex(ctx, to.ubegin() + out_len, &out_len) == 1); + } + EVP_CIPHER_CTX_free(ctx); } void aes_cbc_encrypt(Slice aes_key, MutableSlice aes_iv, Slice from, MutableSlice to) { @@ -723,7 +729,18 @@ string sha512(Slice data) { class Sha256State::Impl { public: - SHA256_CTX ctx_; + EVP_MD_CTX *ctx_ = nullptr; + + Impl() { + ctx_ = EVP_MD_CTX_new(); + CHECK(ctx_); + } + + ~Impl() { + if (ctx_) { + EVP_MD_CTX_free(ctx_); + } + } }; Sha256State::Sha256State() = default; @@ -755,24 +772,23 @@ void Sha256State::init() { impl_ = make_unique(); } CHECK(!is_inited_); - int err = SHA256_Init(&impl_->ctx_); - LOG_IF(FATAL, err != 1); + CHECK(EVP_DigestInit_ex(impl_->ctx_, EVP_sha256(), nullptr) == 1); is_inited_ = true; } void Sha256State::feed(Slice data) { CHECK(impl_); CHECK(is_inited_); - int err = SHA256_Update(&impl_->ctx_, data.ubegin(), data.size()); - LOG_IF(FATAL, err != 1); + CHECK(EVP_DigestUpdate(impl_->ctx_, data.ubegin(), data.size()) == 1); } void Sha256State::extract(MutableSlice output, bool destroy) { CHECK(output.size() >= 32); CHECK(impl_); CHECK(is_inited_); - int err = SHA256_Final(output.ubegin(), &impl_->ctx_); - LOG_IF(FATAL, err != 1); + unsigned size; + CHECK(EVP_DigestFinal_ex(impl_->ctx_, output.ubegin(), &size) == 1); + CHECK(size == 32); is_inited_ = false; if (destroy) { impl_.reset(); diff --git a/tdutils/td/utils/crypto.h b/tdutils/td/utils/crypto.h index 592a8a00..4494ef48 100644 --- a/tdutils/td/utils/crypto.h +++ b/tdutils/td/utils/crypto.h @@ -151,7 +151,7 @@ class Sha256State { bool is_inited_ = false; }; -void md5(Slice input, MutableSlice output); +[[deprecated("MD5 is not cryptographically secure")]] void md5(Slice input, MutableSlice output); void pbkdf2_sha256(Slice password, Slice salt, int iteration_count, MutableSlice dest); void pbkdf2_sha512(Slice password, Slice salt, int iteration_count, MutableSlice dest); diff --git a/tdutils/td/utils/port/stacktrace.cpp b/tdutils/td/utils/port/stacktrace.cpp index 2c025d2e..e89daec6 100644 --- a/tdutils/td/utils/port/stacktrace.cpp +++ b/tdutils/td/utils/port/stacktrace.cpp @@ -20,9 +20,13 @@ #include "td/utils/port/signals.h" -#if __GLIBC__ +#if TD_WINDOWS +#include +#else +#if TD_DARWIN || __GLIBC__ #include #endif +#endif #if TD_LINUX || TD_FREEBSD #include @@ -39,13 +43,48 @@ namespace td { namespace { void print_backtrace(void) { -#if __GLIBC__ +#if TD_WINDOWS + void *stack[100]; + HANDLE process = GetCurrentProcess(); + SymInitialize(process, nullptr, 1); + unsigned frames = CaptureStackBackTrace(0, 100, stack, nullptr); + signal_safe_write("------- Stack Backtrace -------\n", false); + for (unsigned i = 0; i < frames; i++) { + td::uint8 symbol_buf[sizeof(SYMBOL_INFO) + 256]; + auto symbol = (SYMBOL_INFO *)symbol_buf; + memset(symbol_buf, 0, sizeof(symbol_buf)); + symbol->MaxNameLen = 255; + symbol->SizeOfStruct = sizeof(SYMBOL_INFO); + SymFromAddr(process, (DWORD64)(stack[i]), nullptr, symbol); + // Don't use sprintf here because it is not signal-safe + char buf[256 + 32]; + char* buf_ptr = buf; + if (frames - i - 1 < 10) { + strcpy(buf_ptr, " "); + buf_ptr += strlen(buf_ptr); + } + _itoa(frames - i - 1, buf_ptr, 10); + buf_ptr += strlen(buf_ptr); + strcpy(buf_ptr, ": ["); + buf_ptr += strlen(buf_ptr); + _ui64toa(td::uint64(symbol->Address), buf_ptr, 16); + buf_ptr += strlen(buf_ptr); + strcpy(buf_ptr, "] "); + buf_ptr += strlen(buf_ptr); + strcpy(buf_ptr, symbol->Name); + buf_ptr += strlen(buf_ptr); + strcpy(buf_ptr, "\n"); + signal_safe_write(td::Slice{buf, strlen(buf)}, false); + } +#else +#if TD_DARWIN || __GLIBC__ void *buffer[128]; int nptrs = backtrace(buffer, 128); signal_safe_write("------- Stack Backtrace -------\n", false); backtrace_symbols_fd(buffer, nptrs, 2); signal_safe_write("-------------------------------\n", false); #endif +#endif } void print_backtrace_gdb(void) { @@ -129,7 +168,7 @@ void Stacktrace::print_to_stderr(const PrintOptions &options) { } void Stacktrace::init() { -#if __GLIBC__ +#if TD_DARWIN || __GLIBC__ // backtrace needs to be called once to ensure that next calls are async-signal-safe void *buffer[1]; backtrace(buffer, 1); diff --git a/tdutils/test/MpmcWaiter.cpp b/tdutils/test/MpmcWaiter.cpp index 9cb5b363..d0a9fc84 100644 --- a/tdutils/test/MpmcWaiter.cpp +++ b/tdutils/test/MpmcWaiter.cpp @@ -75,9 +75,9 @@ void test_waiter_stress_one_one() { TEST(MpmcEagerWaiter, stress_one_one) { test_waiter_stress_one_one(); } -TEST(MpmcSleepyWaiter, stress_one_one) { - test_waiter_stress_one_one(); -} +// TEST(MpmcSleepyWaiter, stress_one_one) { +// test_waiter_stress_one_one(); +// } template void test_waiter_stress() { diff --git a/terminal/CMakeLists.txt b/terminal/CMakeLists.txt index ae8c70bd..af51153f 100644 --- a/terminal/CMakeLists.txt +++ b/terminal/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/test/ed25519_crypto.cpp b/test/ed25519_crypto.cpp deleted file mode 100644 index 371b7247..00000000 --- a/test/ed25519_crypto.cpp +++ /dev/null @@ -1,2053 +0,0 @@ -/* - This file is part of TON Blockchain source code. - - TON Blockchain is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - TON Blockchain is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with TON Blockchain. If not, see . - - In addition, as a special exception, the copyright holders give permission - to link the code of portions of this program with the OpenSSL library. - You must obey the GNU General Public License in all respects for all - of the code used other than OpenSSL. If you modify file(s) with this - exception, you may extend this exception to your version of the file(s), - but you are not obligated to do so. If you do not wish to do so, delete this - exception statement from your version. If you delete this exception statement - from all source files in the program, then also delete it here. - - Copyright 2017-2020 Telegram Systems LLP -*/ -#include -#include -#include -#include -#include - -// ****************************************************** - -namespace openssl { -#include -} - -namespace arith { -struct dec_string { - std::string str; - explicit dec_string(const std::string& s) : str(s) { - } -}; - -struct hex_string { - std::string str; - explicit hex_string(const std::string& s) : str(s) { - } -}; -} // namespace arith - -namespace arith { - -using namespace openssl; - -inline void bn_assert(int cond); -BN_CTX* get_ctx(); - -class BignumBitref { - BIGNUM* ptr; - int n; - - public: - BignumBitref(BIGNUM& x, int _n) : ptr(&x), n(_n){}; - operator bool() const { - return BN_is_bit_set(ptr, n); - } - BignumBitref& operator=(bool val); -}; - -class Bignum { - BIGNUM val; - - public: - class bignum_error {}; - Bignum() { - BN_init(&val); - } - Bignum(long x) { - BN_init(&val); - set_long(x); - } - ~Bignum() { - BN_free(&val); - } - Bignum(const dec_string& ds) { - BN_init(&val); - set_dec_str(ds.str); - } - Bignum(const hex_string& hs) { - BN_init(&val); - set_hex_str(hs.str); - } - Bignum(const Bignum& x) { - BN_init(&val); - BN_copy(&val, &x.val); - } - //Bignum (Bignum&& x) { val = x.val; } - void clear() { - BN_clear(&val); - } // use this for sensitive data - Bignum& operator=(const Bignum& x) { - BN_copy(&val, &x.val); - return *this; - } - Bignum& operator=(Bignum&& x) { - swap(x); - return *this; - } - Bignum& operator=(long x) { - return set_long(x); - } - Bignum& operator=(const dec_string& ds) { - return set_dec_str(ds.str); - } - Bignum& operator=(const hex_string& hs) { - return set_hex_str(hs.str); - } - Bignum& swap(Bignum& x) { - BN_swap(&val, &x.val); - return *this; - } - BIGNUM* bn_ptr() { - return &val; - } - const BIGNUM* bn_ptr() const { - return &val; - } - bool is_zero() const { - return BN_is_zero(&val); - } - int sign() const { - return BN_is_zero(&val) ? 0 : (BN_is_negative(&val) ? -1 : 1); - } - bool odd() const { - return BN_is_odd(&val); - } - int num_bits() const { - return BN_num_bits(&val); - } - int num_bytes() const { - return BN_num_bytes(&val); - } - bool operator[](int n) const { - return BN_is_bit_set(&val, n); - } - BignumBitref operator[](int n) { - return BignumBitref(val, n); - } - void export_msb(unsigned char* buffer, std::size_t size) const; - Bignum& import_msb(const unsigned char* buffer, std::size_t size); - Bignum& import_msb(const std::string& s) { - return import_msb((const unsigned char*)s.c_str(), s.size()); - } - void export_lsb(unsigned char* buffer, std::size_t size) const; - Bignum& import_lsb(const unsigned char* buffer, std::size_t size); - Bignum& import_lsb(const std::string& s) { - return import_lsb((const unsigned char*)s.c_str(), s.size()); - } - - Bignum& set_dec_str(std::string s) { - BIGNUM* tmp = &val; - bn_assert(BN_dec2bn(&tmp, s.c_str())); - return *this; - } - - Bignum& set_hex_str(std::string s) { - BIGNUM* tmp = &val; - bn_assert(BN_hex2bn(&tmp, s.c_str())); - return *this; - } - - Bignum& set_ulong(unsigned long x) { - bn_assert(BN_set_word(&val, x)); - return *this; - } - - Bignum& set_long(long x) { - set_ulong(std::abs(x)); - return x < 0 ? negate() : *this; - } - - Bignum& negate() { - BN_set_negative(&val, !BN_is_negative(&val)); - return *this; - } - - Bignum& operator+=(const Bignum& y) { - bn_assert(BN_add(&val, &val, &y.val)); - return *this; - } - - Bignum& operator+=(long y) { - bn_assert((y >= 0 ? BN_add_word : BN_sub_word)(&val, std::abs(y))); - return *this; - } - - Bignum& operator-=(long y) { - bn_assert((y >= 0 ? BN_sub_word : BN_add_word)(&val, std::abs(y))); - return *this; - } - - Bignum& operator*=(const Bignum& y) { - bn_assert(BN_mul(&val, &val, &y.val, get_ctx())); - return *this; - } - - Bignum& operator*=(long y) { - if (y < 0) { - negate(); - } - bn_assert(BN_mul_word(&val, std::abs(y))); - return *this; - } - - Bignum& operator<<=(int r) { - bn_assert(BN_lshift(&val, &val, r)); - return *this; - } - - Bignum& operator>>=(int r) { - bn_assert(BN_rshift(&val, &val, r)); - return *this; - } - - Bignum& operator/=(const Bignum& y) { - Bignum w; - bn_assert(BN_div(&val, &w.val, &val, &y.val, get_ctx())); - return *this; - } - - Bignum& operator/=(long y) { - bn_assert(BN_div_word(&val, std::abs(y)) != (BN_ULONG)(-1)); - return y < 0 ? negate() : *this; - } - - Bignum& operator%=(const Bignum& y) { - bn_assert(BN_mod(&val, &val, &y.val, get_ctx())); - return *this; - } - - Bignum& operator%=(long y) { - BN_ULONG rem = BN_mod_word(&val, std::abs(y)); - bn_assert(rem != (BN_ULONG)(-1)); - return set_long(y < 0 ? -rem : rem); - } - - unsigned long divmod(unsigned long y) { - BN_ULONG rem = BN_div_word(&val, y); - bn_assert(rem != (BN_ULONG)(-1)); - return rem; - } - - const Bignum divmod(const Bignum& y); - - std::string to_str() const; - std::string to_hex() const; -}; - -inline void bn_assert(int cond) { - if (!cond) { - throw Bignum::bignum_error(); - } -} - -BN_CTX* get_ctx(void) { - static BN_CTX* ctx = BN_CTX_new(); - return ctx; -} - -BignumBitref& BignumBitref::operator=(bool val) { - if (val) { - BN_set_bit(ptr, n); - } else { - BN_clear_bit(ptr, n); - } - return *this; -} - -const Bignum operator+(const Bignum& x, const Bignum& y) { - Bignum z; - bn_assert(BN_add(z.bn_ptr(), x.bn_ptr(), y.bn_ptr())); - return z; -} - -const Bignum operator+(const Bignum& x, long y) { - if (y > 0) { - Bignum z(x); - bn_assert(BN_add_word(z.bn_ptr(), y)); - return z; - } else if (y < 0) { - Bignum z(x); - bn_assert(BN_sub_word(z.bn_ptr(), -y)); - return z; - } else { - return x; - } -} - -/* - const Bignum operator+ (Bignum&& x, long y) { - if (y > 0) { - bn_assert (BN_add_word (x.bn_ptr(), y)); - } else if (y < 0) { - bn_assert (BN_sub_word (x.bn_ptr(), -y)); - } - return std::move (x); - } - */ - -const Bignum operator+(long y, const Bignum& x) { - return x + y; -} - -/* - const Bignum operator+ (long y, Bignum&& x) { - return x + y; - } - */ - -const Bignum operator-(const Bignum& x, const Bignum& y) { - Bignum z; - bn_assert(BN_sub(z.bn_ptr(), x.bn_ptr(), y.bn_ptr())); - return z; -} - -const Bignum operator-(const Bignum& x, long y) { - return x + (-y); -} - -/* - const Bignum operator- (Bignum&& x, long y) { - return x + (-y); - } - */ - -const Bignum operator*(const Bignum& x, const Bignum& y) { - Bignum z; - bn_assert(BN_mul(z.bn_ptr(), x.bn_ptr(), y.bn_ptr(), get_ctx())); - return z; -} - -const Bignum operator*(const Bignum& x, long y) { - if (y > 0) { - Bignum z(x); - bn_assert(BN_mul_word(z.bn_ptr(), y)); - return z; - } else if (y < 0) { - Bignum z(x); - z.negate(); - bn_assert(BN_mul_word(z.bn_ptr(), -y)); - return z; - } else { - Bignum z(0); - return z; - } -} - -/* - const Bignum operator* (Bignum&& x, long y) { - if (y > 0) { - bn_assert (BN_mul_word (x.bn_ptr(), y)); - } else if (y < 0) { - x.negate(); - bn_assert (BN_mul_word (x.bn_ptr(), -y)); - } else { - x = 0; - } - return std::move (x); - } - */ - -const Bignum operator*(long y, const Bignum& x) { - return x * y; -} - -const Bignum operator/(const Bignum& x, const Bignum& y) { - Bignum z, w; - bn_assert(BN_div(z.bn_ptr(), w.bn_ptr(), x.bn_ptr(), y.bn_ptr(), get_ctx())); - return z; -} - -const Bignum Bignum::divmod(const Bignum& y) { - Bignum w; - bn_assert(BN_div(&val, w.bn_ptr(), &val, y.bn_ptr(), get_ctx())); - return w; -} - -const Bignum operator%(const Bignum& x, const Bignum& y) { - Bignum z; - bn_assert(BN_mod(z.bn_ptr(), x.bn_ptr(), y.bn_ptr(), get_ctx())); - return z; -} - -unsigned long operator%(const Bignum& x, unsigned long y) { - BN_ULONG rem = BN_mod_word(x.bn_ptr(), y); - bn_assert(rem != (BN_ULONG)(-1)); - return rem; -} - -const Bignum operator<<(const Bignum& x, int r) { - Bignum z; - bn_assert(BN_lshift(z.bn_ptr(), x.bn_ptr(), r)); - return z; -} - -const Bignum operator>>(const Bignum& x, int r) { - Bignum z; - bn_assert(BN_rshift(z.bn_ptr(), x.bn_ptr(), r)); - return z; -} - -const Bignum abs(const Bignum& x) { - Bignum T(x); - if (T.sign() < 0) { - T.negate(); - } - return T; -} - -const Bignum sqr(const Bignum& x) { - Bignum z; - bn_assert(BN_sqr(z.bn_ptr(), x.bn_ptr(), get_ctx())); - return z; -} - -void Bignum::export_msb(unsigned char* buffer, std::size_t size) const { - bn_assert(size >= 0 && size <= (1 << 20)); - bn_assert(sign() >= 0); - int n = BN_num_bytes(&val); - bn_assert(n >= 0 && (unsigned)n <= size); - bn_assert(BN_bn2bin(&val, buffer + size - n) == n); - std::memset(buffer, 0, size - n); -} - -Bignum& Bignum::import_msb(const unsigned char* buffer, std::size_t size) { - bn_assert(size >= 0 && size <= (1 << 20)); - std::size_t i = 0; - while (i < size && !buffer[i]) { - i++; - } - bn_assert(BN_bin2bn(buffer + i, size - i, &val) == &val); - return *this; -} - -void Bignum::export_lsb(unsigned char* buffer, std::size_t size) const { - bn_assert(size >= 0 && size <= (1 << 20)); - bn_assert(sign() >= 0); - std::size_t n = BN_num_bytes(&val); - bn_assert(n >= 0 && (unsigned)n <= size); - bn_assert(BN_bn2bin(&val, buffer) == (int)n); - std::memset(buffer + n, 0, size - n); - for (std::size_t i = 0; 2 * i + 1 < n; i++) { - std::swap(buffer[i], buffer[n - 1 - i]); - } -} - -Bignum& Bignum::import_lsb(const unsigned char* buffer, std::size_t size) { - bn_assert(size >= 0 && size <= (1 << 20)); - while (size > 0 && !buffer[size - 1]) { - size--; - } - if (!size) { - bn_assert(BN_zero(&val)); - return *this; - } - unsigned char tmp[size], *ptr = tmp + size; - for (std::size_t i = 0; i < size; i++) { - *--ptr = buffer[i]; - } - bn_assert(BN_bin2bn(tmp, size, &val) == &val); - return *this; -} - -int cmp(const Bignum& x, const Bignum& y) { - return BN_cmp(x.bn_ptr(), y.bn_ptr()); -} - -bool operator==(const Bignum& x, const Bignum& y) { - return cmp(x, y) == 0; -} - -bool operator!=(const Bignum& x, const Bignum& y) { - return cmp(x, y) != 0; -} - -bool operator<(const Bignum& x, const Bignum& y) { - return cmp(x, y) < 0; -} - -bool operator<=(const Bignum& x, const Bignum& y) { - return cmp(x, y) <= 0; -} - -bool operator>(const Bignum& x, const Bignum& y) { - return cmp(x, y) > 0; -} - -bool operator>=(const Bignum& x, const Bignum& y) { - return cmp(x, y) >= 0; -} - -bool operator==(const Bignum& x, long y) { - if (y >= 0) { - return BN_is_word(x.bn_ptr(), y); - } else { - return x == Bignum(y); - } -} - -bool operator!=(const Bignum& x, long y) { - if (y >= 0) { - return !BN_is_word(x.bn_ptr(), y); - } else { - return x != Bignum(y); - } -} - -std::string Bignum::to_str() const { - char* ptr = BN_bn2dec(&val); - std::string z(ptr); - OPENSSL_free(ptr); - return z; -} - -std::string Bignum::to_hex() const { - char* ptr = BN_bn2hex(&val); - std::string z(ptr); - OPENSSL_free(ptr); - return z; -} - -std::ostream& operator<<(std::ostream& os, const Bignum& x) { - return os << x.to_str(); -} - -std::istream& operator>>(std::istream& is, Bignum& x) { - std::string word; - is >> word; - x = dec_string(word); - return is; -} - -bool is_prime(const Bignum& p, int nchecks = 64, bool trial_div = true) { - return BN_is_prime_fasttest_ex(p.bn_ptr(), BN_prime_checks, get_ctx(), trial_div, 0); -} -} // namespace arith - -namespace arith { -using namespace openssl; - -class Residue; -class ResidueRing; - -class ResidueRing { - public: - struct bad_modulus {}; - struct elem_cnt_mismatch { - int cnt; - elem_cnt_mismatch(int x) : cnt(x) { - } - }; - - private: - const Bignum modulus; - mutable int cnt; - bool prime; - void cnt_assert(bool b) { - if (!b) { - throw elem_cnt_mismatch(cnt); - } - } - Residue* Zero; - Residue* One; - Residue* Img_i; - void init(); - - public: - typedef Residue element; - explicit ResidueRing(Bignum mod) : modulus(mod), cnt(0), prime(arith::is_prime(mod)), Zero(0), One(0) { - init(); - } - ~ResidueRing(); - int incr_count() { - return ++cnt; - } - int decr_count() { - --cnt; - cnt_assert(cnt >= 0); - return cnt; - } - const Bignum& get_modulus() const { - return modulus; - } - bool is_prime() const { - return prime; - } - const Residue& zero() const { - return *Zero; - } - const Residue& one() const { - return *One; - } - const Residue& img_i(); - Residue frac(long num, long denom = 1); - Residue convert(long num); - Residue convert(const Bignum& x); - - Bignum reduce(const Bignum& x) { - Bignum r = x % modulus; - if (r.sign() < 0) { - r += modulus; - } - return r; - } - - Bignum& do_reduce(Bignum& x) { - x %= modulus; - if (x.sign() < 0) { - x += modulus; - } - return x; - } -}; - -class Residue { - public: - struct not_same_ring {}; - - private: - ResidueRing* ring; - mutable Bignum val; - Residue& reduce() { - ring->do_reduce(val); - return *this; - } - - public: - explicit Residue(ResidueRing& R) : ring(&R) { - R.incr_count(); - } - Residue(const Bignum& x, ResidueRing& R) : ring(&R), val(R.reduce(x)) { - R.incr_count(); - } - ~Residue() { - ring->decr_count(); - ring = 0; - } - Residue(const Residue& x) : ring(x.ring), val(x.val) { - ring->incr_count(); - } - Bignum extract() const { - return val; - } - const Bignum& extract_raw() const { - return val; - } - const Bignum& modulus() const { - return ring->get_modulus(); - } - void same_ring(const Residue& y) const { - if (ring != y.ring) { - throw not_same_ring(); - } - } - ResidueRing& ring_of() const { - return *ring; - } - bool is_zero() const { - return (val == 0); - } - Residue& operator=(const Residue& x) { - same_ring(x); - val = x.val; - return *this; - } - Residue& operator=(const Bignum& x) { - val = ring->reduce(x); - return *this; - } - Residue& operator+=(const Residue& y); - Residue& operator-=(const Residue& y); - Residue& operator*=(const Residue& y); - Residue& operator+=(long y) { - val += y; - return reduce(); - } - Residue& operator-=(long y) { - val -= y; - return reduce(); - } - Residue& operator*=(long y) { - val *= y; - return reduce(); - } - Residue& negate() { - val.negate(); - return reduce(); - } - friend const Residue operator+(const Residue& x, const Residue& y); - friend const Residue operator-(const Residue& x, const Residue& y); - friend const Residue operator*(const Residue& x, const Residue& y); - friend const Residue operator-(const Residue& x); - friend Residue sqr(const Residue& x); - friend Residue power(const Residue& x, const Bignum& y); - friend Residue inverse(const Residue& x); - std::string to_str() const; -}; - -void ResidueRing::init() { - Zero = new Residue(0, *this); - One = new Residue(1, *this); -} - -ResidueRing::~ResidueRing() { - delete Zero; - delete One; - Zero = One = 0; - cnt_assert(!cnt); -} - -const Residue operator+(const Residue& x, const Residue& y) { - x.same_ring(y); - Residue z(x.ring_of()); - bn_assert(BN_mod_add(z.val.bn_ptr(), x.val.bn_ptr(), y.val.bn_ptr(), x.modulus().bn_ptr(), get_ctx())); - return z; -} - -const Residue operator-(const Residue& x, const Residue& y) { - x.same_ring(y); - Residue z(x.ring_of()); - bn_assert(BN_mod_sub(z.val.bn_ptr(), x.val.bn_ptr(), y.val.bn_ptr(), x.modulus().bn_ptr(), get_ctx())); - return z; -} - -const Residue operator*(const Residue& x, const Residue& y) { - x.same_ring(y); - Residue z(x.ring_of()); - bn_assert(BN_mod_mul(z.val.bn_ptr(), x.val.bn_ptr(), y.val.bn_ptr(), x.modulus().bn_ptr(), get_ctx())); - return z; -} - -const Residue operator-(const Residue& x) { - Residue z(x); - z.val.negate(); - return z.reduce(); -} - -Residue& Residue::operator+=(const Residue& y) { - same_ring(y); - bn_assert(BN_mod_add(val.bn_ptr(), val.bn_ptr(), y.val.bn_ptr(), modulus().bn_ptr(), get_ctx())); - return *this; -} - -Residue& Residue::operator-=(const Residue& y) { - same_ring(y); - bn_assert(BN_mod_sub(val.bn_ptr(), val.bn_ptr(), y.val.bn_ptr(), modulus().bn_ptr(), get_ctx())); - return *this; -} - -Residue& Residue::operator*=(const Residue& y) { - same_ring(y); - bn_assert(BN_mod_mul(val.bn_ptr(), val.bn_ptr(), y.val.bn_ptr(), modulus().bn_ptr(), get_ctx())); - return *this; -} - -bool operator==(const Residue& x, const Residue& y) { - x.same_ring(y); - return x.extract() == y.extract(); -} - -bool operator!=(const Residue& x, const Residue& y) { - x.same_ring(y); - return x.extract() != y.extract(); -} - -Residue sqr(const Residue& x) { - Residue z(x.ring_of()); - bn_assert(BN_mod_sqr(z.val.bn_ptr(), x.val.bn_ptr(), x.modulus().bn_ptr(), get_ctx())); - return z; -} - -Residue power(const Residue& x, const Bignum& y) { - Residue z(x.ring_of()); - bn_assert(BN_mod_exp(z.val.bn_ptr(), x.val.bn_ptr(), y.bn_ptr(), x.modulus().bn_ptr(), get_ctx())); - return z; -} - -Residue inverse(const Residue& x) { - assert(x.ring_of().is_prime()); - return power(x, x.ring_of().get_modulus() - 2); -} - -const Residue& ResidueRing::img_i() { - if (!Img_i) { - assert(is_prime()); - assert(modulus % 4 == 1); - int g = 2; - Bignum n = (modulus - 1) / 4; - while (true) { - Residue t = power(frac(g), n); - if (t != one() && t != frac(-1)) { - Img_i = new Residue(t); - break; - } - } - } - return *Img_i; -} - -Residue sqrt(const Residue& x) { - assert(x.ring_of().is_prime()); - ResidueRing& R = x.ring_of(); - const Bignum& p = R.get_modulus(); - if (x.is_zero() || !p.odd()) { - return x; - } - if (p[1]) { // p=3 (mod 4) - return power(x, (p + 1) >> 2); - } else if (p[2]) { - // p=5 (mod 8) - Residue t = power(x, (p + 3) >> 3); - return (sqr(t) == x) ? t : R.img_i() * t; - } else { - assert(p[2]); - return R.zero(); - } -} - -Residue ResidueRing::frac(long num, long denom) { - assert(denom); - if (denom < 0) { - num = -num; - denom = -denom; - } - if (!(num % denom)) { - return Residue(num / denom, *this); - } else { - return Residue(num, *this) * inverse(Residue(denom, *this)); - } -} - -inline Residue ResidueRing::convert(long x) { - return Residue(x, *this); -} - -inline Residue ResidueRing::convert(const Bignum& x) { - return Residue(x, *this); -} - -std::string Residue::to_str() const { - return "Mod(" + val.to_str() + "," + modulus().to_str() + ")"; -} - -std::ostream& operator<<(std::ostream& os, const Residue& x) { - return os << x.to_str(); -} - -std::istream& operator>>(std::istream& is, Residue& x) { - std::string word; - is >> word; - x = dec_string(word); - return is; -} -} // namespace arith - -// ****************************************************** - -namespace ellcurve { -using namespace arith; - -const Bignum& P25519() { - static Bignum P25519 = (Bignum(1) << 255) - 19; - return P25519; -} - -ResidueRing& Fp25519() { - static ResidueRing Fp25519(P25519()); - return Fp25519; -} -} // namespace ellcurve - -// ****************************************************** - -namespace ellcurve { -using namespace arith; - -class MontgomeryCurve { - ResidueRing& ring; - int A_short; // v^2 = u^2 + Au + 1 - int Gu_short; // u(G) - int a_short; // (A+2)/4 - Residue A; - Residue Gu; - Bignum P; - Bignum L; - Bignum Order; - Bignum cofactor; - int cofactor_short; - - void init(); - - public: - MontgomeryCurve(int _A, int _Gu, ResidueRing& _R) - : ring(_R) - , A_short(_A) - , Gu_short(_Gu) - , a_short((_A + 2) / 4) - , A(_A, _R) - , Gu(_Gu, _R) - , P(_R.get_modulus()) - , cofactor_short(0) { - init(); - } - - const Residue& get_gen_u() const { - return Gu; - } - const Bignum& get_ell() const { - return L; - } - const Bignum& get_order() const { - return Order; - } - ResidueRing& get_base_ring() const { - return ring; - } - const Bignum& get_p() const { - return P; - } - - void set_order_cofactor(const Bignum& order, int cof); - - struct PointXZ { - Residue X, Z; - PointXZ(Residue x, Residue z) : X(x), Z(z) { - x.same_ring(z); - } - PointXZ(ResidueRing& r) : X(r.one()), Z(r.zero()) { - } - explicit PointXZ(Residue u) : X(u), Z(u.ring_of().one()) { - } - explicit PointXZ(Residue y, bool) : X(y.ring_of().one() - y), Z(y + y.ring_of().one()) { - } - PointXZ(const PointXZ& P) : X(P.X), Z(P.Z) { - } - PointXZ& operator=(const PointXZ& P) { - X = P.X; - Z = P.Z; - return *this; - } - Residue get_u() const { - return X * inverse(Z); - } - Residue get_v(bool sign_v = false) const; - bool is_infty() const { - return Z.is_zero(); - } - Residue get_y() const { - return (X - Z) * inverse(X + Z); - } - bool export_point_y(unsigned char buffer[32]) const; - bool export_point_u(unsigned char buffer[32]) const; - void zeroize() { - X = Z = Z.ring_of().zero(); - } - }; - - PointXZ power_gen_xz(const Bignum& n) const; - PointXZ power_xz(const Residue& u, const Bignum& n) const; - PointXZ power_xz(const PointXZ& P, const Bignum& n) const; - PointXZ add_xz(const PointXZ& P, const PointXZ& Q) const; - PointXZ double_xz(const PointXZ& P) const; - - PointXZ import_point_u(const unsigned char point[32]) const; - PointXZ import_point_y(const unsigned char point[32]) const; -}; - -void MontgomeryCurve::init() { - assert(!((a_short + 2) & 3) && a_short >= 0); -} - -void MontgomeryCurve::set_order_cofactor(const Bignum& order, int cof) { - assert(order > 0); - assert(cof >= 0); - assert(cof == 0 || (order % cof) == 0); - Order = order; - cofactor = cofactor_short = cof; - if (cof > 0) { - L = order / cof; - assert(is_prime(L)); - } - assert(!power_gen_xz(1).is_infty()); - assert(power_gen_xz(Order).is_infty()); -} - -// computes u(P+Q)*u(P-Q) as X/Z -MontgomeryCurve::PointXZ MontgomeryCurve::add_xz(const MontgomeryCurve::PointXZ& P, - const MontgomeryCurve::PointXZ& Q) const { - Residue u = (P.X + P.Z) * (Q.X - Q.Z); - Residue v = (P.X - P.Z) * (Q.X + Q.Z); - return MontgomeryCurve::PointXZ(sqr(u + v), sqr(u - v)); -} - -// computes u(2P) as X/Z -MontgomeryCurve::PointXZ MontgomeryCurve::double_xz(const MontgomeryCurve::PointXZ& P) const { - Residue u = sqr(P.X + P.Z); - Residue v = sqr(P.X - P.Z); - Residue w = u - v; - return PointXZ(u * v, w * (v + Residue(a_short, ring) * w)); -} - -MontgomeryCurve::PointXZ MontgomeryCurve::power_gen_xz(const Bignum& n) const { - return power_xz(Gu, n); -} - -MontgomeryCurve::PointXZ MontgomeryCurve::power_xz(const Residue& u, const Bignum& n) const { - return power_xz(PointXZ(u), n); -} - -// computes u([n]P) in form X/Z -MontgomeryCurve::PointXZ MontgomeryCurve::power_xz(const PointXZ& A, const Bignum& n) const { - assert(n >= 0); - if (n == 0) { - return PointXZ(ring); - } - - int k = n.num_bits(); - PointXZ P(A); - PointXZ Q(double_xz(P)); - for (int i = k - 2; i >= 0; --i) { - PointXZ PQ(add_xz(P, Q)); - PQ.X *= A.Z; - PQ.Z *= A.X; - if (n[i]) { - P = PQ; - Q = double_xz(Q); - } else { - Q = PQ; - P = double_xz(P); - } - } - return P; -} - -bool MontgomeryCurve::PointXZ::export_point_y(unsigned char buffer[32]) const { - if ((X + Z).is_zero()) { - std::memset(buffer, 0xff, 32); - return false; - } else { - get_y().extract().export_lsb(buffer, 32); - return true; - } -} - -bool MontgomeryCurve::PointXZ::export_point_u(unsigned char buffer[32]) const { - if (Z.is_zero()) { - std::memset(buffer, 0xff, 32); - return false; - } else { - get_u().extract().export_lsb(buffer, 32); - return true; - } -} - -MontgomeryCurve::PointXZ MontgomeryCurve::import_point_u(const unsigned char point[32]) const { - Bignum u; - u.import_lsb(point, 32); - u[255] = 0; - return PointXZ(Residue(u, ring)); -} - -MontgomeryCurve::PointXZ MontgomeryCurve::import_point_y(const unsigned char point[32]) const { - Bignum y; - y.import_lsb(point, 32); - y[255] = 0; - return PointXZ(Residue(y, ring), true); -} - -MontgomeryCurve& Curve25519() { - static MontgomeryCurve Curve25519(486662, 9, Fp25519()); - static bool init = false; - if (!init) { - Curve25519.set_order_cofactor(hex_string{"80000000000000000000000000000000a6f7cef517bce6b2c09318d2e7ae9f68"}, 8); - init = true; - } - return Curve25519; -} -} // namespace ellcurve - -// ****************************************************** - -namespace ellcurve { -using namespace arith; - -class TwEdwardsCurve; - -class TwEdwardsCurve { - public: - struct SegrePoint { - Residue XY, X, Y, Z; // if x=X/Z and y=Y/T, stores (xy,x,y,1)*Z*T - SegrePoint(ResidueRing& R) : XY(R), X(R), Y(R), Z(R) { - } - SegrePoint(const Residue& x, const Residue& y) : XY(x * y), X(x), Y(y), Z(y.ring_of().one()) { - } - SegrePoint(const TwEdwardsCurve& E, const Residue& y, bool x_sign); - SegrePoint(const SegrePoint& P) : XY(P.XY), X(P.X), Y(P.Y), Z(P.Z) { - } - SegrePoint& operator=(const SegrePoint& P) { - XY = P.XY; - X = P.X; - Y = P.Y; - Z = P.Z; - return *this; - } - bool is_zero() const { - return X.is_zero() && (Y == Z); - } - bool is_valid() const { - return (XY * Z == X * Y) && !(XY.is_zero() && X.is_zero() && Y.is_zero() && Z.is_zero()); - } - bool is_finite() const { - return !Z.is_zero(); - } - bool is_normalized() const { - return Z == Z.ring_of().one(); - } - SegrePoint& normalize() { - auto f = inverse(Z); - XY *= f; - X *= f; - Y *= f; - Z = Z.ring_of().one(); - return *this; - } - SegrePoint& zeroize() { - XY = X = Y = Z = Z.ring_of().zero(); - return *this; - } - bool export_point(unsigned char buffer[32], bool need_x = true) const; - bool export_point_y(unsigned char buffer[32]) const { - return export_point(buffer, false); - } - bool export_point_u(unsigned char buffer[32]) const; - Residue get_y() const { - return Y * inverse(Z); - } - Residue get_x() const { - return X * inverse(Z); - } - Residue get_u() const { - return (Z + Y) * inverse(Z - Y); - } - void negate() { - XY.negate(); - X.negate(); - } - }; - - private: - ResidueRing& ring; - Residue D; - Residue D2; - Residue Gy; - Bignum P; - Bignum L; - Bignum Order; - Bignum cofactor; - int cofactor_short; - SegrePoint G; - SegrePoint O; - void init(); - - public: - TwEdwardsCurve(const Residue& _D, const Residue& _Gy, ResidueRing& _R) - : ring(_R), D(_D), D2(_D + _D), Gy(_Gy), P(_R.get_modulus()), cofactor_short(0), G(_R), O(_R) { - init(); - } - - const Residue& get_gen_y() const { - return Gy; - } - const Bignum& get_ell() const { - return L; - } - const Bignum& get_order() const { - return Order; - } - ResidueRing& get_base_ring() const { - return ring; - } - const Bignum& get_p() const { - return P; - } - const SegrePoint& get_base_point() const { - return G; - } - - void set_order_cofactor(const Bignum& order, int cof); - bool recover_x(Residue& x, const Residue& y, bool x_sign) const; - - void add_points(SegrePoint& R, const SegrePoint& P, const SegrePoint& Q) const; - SegrePoint add_points(const SegrePoint& P, const SegrePoint& Q) const; - void double_point(SegrePoint& R, const SegrePoint& P) const; - SegrePoint double_point(const SegrePoint& P) const; - SegrePoint power_point(const SegrePoint& A, const Bignum& n) const; - SegrePoint power_gen(const Bignum& n) const; - - SegrePoint import_point(const unsigned char point[32], bool& ok) const; -}; - -std::ostream& operator<<(std::ostream& os, const TwEdwardsCurve::SegrePoint& P) { - return os << "[" << P.XY << ":" << P.X << ":" << P.Y << ":" << P.Z << "]"; -} - -void TwEdwardsCurve::init() { - assert(D != ring.zero() && D != ring.convert(-1)); - O.X = O.Z = ring.one(); - G = SegrePoint(*this, Gy, 0); - assert(!G.XY.is_zero()); -} - -void TwEdwardsCurve::set_order_cofactor(const Bignum& order, int cof) { - assert(order > 0); - assert(cof >= 0); - assert(cof == 0 || (order % cof) == 0); - Order = order; - cofactor = cofactor_short = cof; - if (cof > 0) { - L = order / cof; - assert(is_prime(L)); - assert(!power_gen(1).is_zero()); - assert(power_gen(L).is_zero()); - } -} - -TwEdwardsCurve::SegrePoint::SegrePoint(const TwEdwardsCurve& E, const Residue& y, bool x_sign) - : XY(y), X(E.get_base_ring()), Y(y), Z(E.get_base_ring().one()) { - Residue x(y.ring_of()); - if (E.recover_x(x, y, x_sign)) { - XY *= x; - X = x; - } else { - XY = Y = Z = E.get_base_ring().zero(); - } -} - -bool TwEdwardsCurve::recover_x(Residue& x, const Residue& y, bool x_sign) const { - // recovers x from equation -x^2+y^2 = 1+d*x^2*y^2 - Residue z = inverse(ring.one() + D * sqr(y)); - if (z.is_zero()) { - return false; - } - z *= sqr(y) - ring.one(); - Residue t = sqrt(z); - if (sqr(t) == z) { - x = (t.extract().odd() == x_sign) ? t : -t; - //std::cout << "x=" << x << ", y=" << y << std::endl; - return true; - } else { - return false; - } -} - -void TwEdwardsCurve::add_points(SegrePoint& Res, const SegrePoint& P, const SegrePoint& Q) const { - Residue a((P.X + P.Y) * (Q.X + Q.Y)); - Residue b((P.X - P.Y) * (Q.X - Q.Y)); - Residue c(P.Z * Q.Z * ring.convert(2)); - Residue d(P.XY * Q.XY * D2); - Residue x_num(a - b); // 2(x1y2+x2y1) - Residue y_num(a + b); // 2(x1x2+y1y2) - Residue x_den(c + d); // 2(1+dx1x2y1y2) - Residue y_den(c - d); // 2(1-dx1x2y1y2) - Res.X = x_num * y_den; // x = x_num/x_den, y = y_num/y_den - Res.Y = y_num * x_den; - Res.XY = x_num * y_num; - Res.Z = x_den * y_den; -} - -TwEdwardsCurve::SegrePoint TwEdwardsCurve::add_points(const SegrePoint& P, const SegrePoint& Q) const { - SegrePoint Res(ring); - add_points(Res, P, Q); - return Res; -} - -void TwEdwardsCurve::double_point(SegrePoint& Res, const SegrePoint& P) const { - add_points(Res, P, P); -} - -TwEdwardsCurve::SegrePoint TwEdwardsCurve::double_point(const SegrePoint& P) const { - SegrePoint Res(ring); - double_point(Res, P); - return Res; -} - -// computes u([n]P) in form (xy,x,y,1)*Z -TwEdwardsCurve::SegrePoint TwEdwardsCurve::power_point(const SegrePoint& A, const Bignum& n) const { - assert(n >= 0); - if (n == 0) { - return O; - } - - int k = n.num_bits(); - SegrePoint P(A); - SegrePoint Q(double_point(A)); - for (int i = k - 2; i >= 0; --i) { - if (n[i]) { - add_points(P, P, Q); - double_point(Q, Q); - } else { - // we do more operations than necessary for uniformicity - add_points(Q, P, Q); - double_point(P, P); - } - } - return P; -} - -TwEdwardsCurve::SegrePoint TwEdwardsCurve::power_gen(const Bignum& n) const { - return power_point(G, n); -} - -bool TwEdwardsCurve::SegrePoint::export_point(unsigned char buffer[32], bool need_x) const { - if (!is_normalized()) { - if (Z.is_zero()) { - std::memset(buffer, 0xff, 32); - return false; - } - Residue f(inverse(Z)); - Bignum y((Y * f).extract()); - assert(!y[255]); - if (need_x) { - y[255] = (X * f).extract().odd(); - } - y.export_lsb(buffer, 32); - } else { - Bignum y(Y.extract()); - assert(!y[255]); - if (need_x) { - y[255] = X.extract().odd(); - } - y.export_lsb(buffer, 32); - } - return true; -} - -bool TwEdwardsCurve::SegrePoint::export_point_u(unsigned char buffer[32]) const { - if (Z == Y) { - std::memset(buffer, 0xff, 32); - return false; - } - Residue f(inverse(Z - Y)); - ((Z + Y) * f).extract().export_lsb(buffer, 32); - assert(!(buffer[31] & 0x80)); - return true; -} - -TwEdwardsCurve::SegrePoint TwEdwardsCurve::import_point(const unsigned char point[32], bool& ok) const { - Bignum y; - y.import_lsb(point, 32); - bool x_sign = y[255]; - y[255] = 0; - Residue yr(y, ring); - Residue xr(ring); - ok = recover_x(xr, yr, x_sign); - return ok ? SegrePoint(xr, yr) : SegrePoint(ring); -} - -TwEdwardsCurve& Ed25519() { - static TwEdwardsCurve Ed25519(Fp25519().frac(-121665, 121666), Fp25519().frac(4, 5), Fp25519()); - static bool init = false; - if (!init) { - Ed25519.set_order_cofactor(hex_string{"80000000000000000000000000000000a6f7cef517bce6b2c09318d2e7ae9f68"}, 8); - init = true; - } - return Ed25519; -} -} // namespace ellcurve - -// ****************************************************** - -namespace openssl { -#include -} - -namespace digest { -using namespace openssl; - -struct OpensslEVP_SHA1 { - enum { digest_bytes = 20 }; - static const EVP_MD* get_evp() { - return EVP_sha1(); - } -}; - -struct OpensslEVP_SHA256 { - enum { digest_bytes = 32 }; - static const EVP_MD* get_evp() { - return EVP_sha256(); - } -}; - -struct OpensslEVP_SHA512 { - enum { digest_bytes = 64 }; - static const EVP_MD* get_evp() { - return EVP_sha512(); - } -}; - -template -class HashCtx { - EVP_MD_CTX ctx; - void init(); - void clear(); - - public: - enum { digest_bytes = H::digest_bytes }; - HashCtx() { - init(); - } - HashCtx(const void* data, std::size_t len) { - init(); - feed(data, len); - } - ~HashCtx() { - clear(); - } - void feed(const void* data, std::size_t len); - std::size_t extract(unsigned char buffer[digest_bytes]); - std::string extract(); -}; - -template -void HashCtx::init() { - EVP_MD_CTX_init(&ctx); - EVP_DigestInit_ex(&ctx, H::get_evp(), 0); -} - -template -void HashCtx::clear() { - EVP_MD_CTX_cleanup(&ctx); -} - -template -void HashCtx::feed(const void* data, std::size_t len) { - EVP_DigestUpdate(&ctx, data, len); -} - -template -std::size_t HashCtx::extract(unsigned char buffer[digest_bytes]) { - unsigned olen = 0; - EVP_DigestFinal_ex(&ctx, buffer, &olen); - assert(olen == digest_bytes); - return olen; -} - -template -std::string HashCtx::extract() { - unsigned char buffer[digest_bytes]; - unsigned olen = 0; - EVP_DigestFinal_ex(&ctx, buffer, &olen); - assert(olen == digest_bytes); - return std::string((char*)buffer, olen); -} - -typedef HashCtx SHA1; -typedef HashCtx SHA256; -typedef HashCtx SHA512; - -template -std::size_t hash_str(unsigned char buffer[T::digest_bytes], const void* data, std::size_t size) { - T hasher(data, size); - return hasher.extract(buffer); -} - -template -std::size_t hash_two_str(unsigned char buffer[T::digest_bytes], const void* data1, std::size_t size1, const void* data2, - std::size_t size2) { - T hasher(data1, size1); - hasher.feed(data2, size2); - return hasher.extract(buffer); -} - -template -std::string hash_str(const void* data, std::size_t size) { - T hasher(data, size); - return hasher.extract(); -} - -template -std::string hash_two_str(const void* data1, std::size_t size1, const void* data2, std::size_t size2) { - T hasher(data1, size1); - hasher.feed(data2, size2); - return hasher.extract(); -} -} // namespace digest - -// ****************************************************** - -namespace openssl { -#include -} - -#include -#include - -namespace prng { - -int os_get_random_bytes(void* buf, int n) { - using namespace std; - int r = 0, h = open("/dev/random", O_RDONLY | O_NONBLOCK); - if (h >= 0) { - r = read(h, buf, n); - if (r > 0) { - //std::cerr << "added " << r << " bytes of real entropy to secure random numbers seed" << std::endl; - } else { - r = 0; - } - close(h); - } - - if (r < n) { - h = open("/dev/urandom", O_RDONLY); - if (h < 0) { - return r; - } - int s = read(h, (char*)buf + r, n - r); - close(h); - if (s < 0) { - return r; - } - r += s; - } - - if (r >= 8) { - *(long*)buf ^= lrand48(); - srand48(*(long*)buf); - } - - return r; -} -} // namespace prng - -namespace prng { -using namespace openssl; - -class RandomGen { - public: - struct rand_error {}; - void randomize(bool force = true); - void seed_add(const void* data, std::size_t size, double entropy = 0); - bool ok() const { - return RAND_status(); - } - RandomGen() { - randomize(false); - } - RandomGen(const void* seed, std::size_t size) { - seed_add(seed, size); - randomize(false); - } - bool rand_bytes(void* data, std::size_t size, bool strong = false); - bool strong_rand_bytes(void* data, std::size_t size) { - return rand_bytes(data, size, true); - } - template - bool rand_obj(T& obj) { - return rand_bytes(&obj, sizeof(T)); - } - template - bool rand_objs(T* ptr, std::size_t count) { - return rand_bytes(ptr, sizeof(T) * count); - } - std::string rand_string(std::size_t size, bool strong = false); -}; - -void RandomGen::seed_add(const void* data, std::size_t size, double entropy) { - RAND_add(data, size, entropy > 0 ? entropy : size); -} - -void RandomGen::randomize(bool force) { - if (!force && ok()) { - return; - } - unsigned char buffer[128]; - int n = os_get_random_bytes(buffer, 128); - seed_add(buffer, n); - assert(ok()); -} - -bool RandomGen::rand_bytes(void* data, std::size_t size, bool strong) { - int res = (strong ? RAND_bytes : RAND_pseudo_bytes)((unsigned char*)data, size); - if (res != 0 && res != 1) { - throw rand_error(); - } - return res; -} - -std::string RandomGen::rand_string(std::size_t size, bool strong) { - char buffer[size]; - if (!rand_bytes(buffer, size, strong)) { - throw rand_error(); - } - return std::string(buffer, size); -} - -RandomGen& rand_gen() { - static RandomGen MainPRNG; - return MainPRNG; -} - -} // namespace prng - -// ****************************************************** - -namespace crypto { -namespace Ed25519 { - -const int privkey_bytes = 32; -const int pubkey_bytes = 32; -const int sign_bytes = 64; -const int shared_secret_bytes = 32; - -bool all_bytes_same(const unsigned char* str, std::size_t size) { - unsigned char c = str[0]; - for (std::size_t i = 0; i < size; i++) { - if (str[i] != c) { - return false; - } - } - return true; -} - -class PublicKey { - enum { pk_empty, pk_xz, pk_init } inited; - unsigned char pubkey[pubkey_bytes]; - ellcurve::TwEdwardsCurve::SegrePoint PubKey; - ellcurve::MontgomeryCurve::PointXZ PubKey_xz; - - public: - PublicKey() : inited(pk_empty), PubKey(ellcurve::Fp25519()), PubKey_xz(ellcurve::Fp25519()) { - } - PublicKey(const unsigned char pub_key[pubkey_bytes]); - PublicKey(const ellcurve::TwEdwardsCurve::SegrePoint& Pub_Key); - - bool import_public_key(const unsigned char pub_key[pubkey_bytes]); - bool import_public_key(const ellcurve::TwEdwardsCurve::SegrePoint& Pub_Key); - bool export_public_key(unsigned char pubkey_buffer[pubkey_bytes]) const; - bool check_message_signature(unsigned char signature[sign_bytes], const unsigned char* message, std::size_t msg_size); - - void clear(); - bool ok() const { - return inited == pk_init; - } - - const unsigned char* get_pubkey_ptr() const { - return inited == pk_init ? pubkey : 0; - } - const ellcurve::TwEdwardsCurve::SegrePoint& get_point() const { - return PubKey; - } - const ellcurve::MontgomeryCurve::PointXZ& get_point_xz() const { - return PubKey_xz; - } -}; - -void PublicKey::clear(void) { - if (inited != pk_empty) { - std::memset(pubkey, 0, pubkey_bytes); - PubKey.zeroize(); - PubKey_xz.zeroize(); - } - inited = pk_empty; -} - -PublicKey::PublicKey(const unsigned char pub_key[pubkey_bytes]) - : inited(pk_empty), PubKey(ellcurve::Fp25519()), PubKey_xz(ellcurve::Fp25519()) { - import_public_key(pub_key); -} - -PublicKey::PublicKey(const ellcurve::TwEdwardsCurve::SegrePoint& Pub_Key) - : inited(pk_empty), PubKey(ellcurve::Fp25519()), PubKey_xz(ellcurve::Fp25519()) { - import_public_key(Pub_Key); -} - -bool PublicKey::import_public_key(const unsigned char pub_key[pubkey_bytes]) { - clear(); - if (all_bytes_same(pub_key, pubkey_bytes)) { - return false; - } - bool ok = false; - PubKey = ellcurve::Ed25519().import_point(pub_key, ok); - if (!ok) { - clear(); - return false; - } - std::memcpy(pubkey, pub_key, pubkey_bytes); - PubKey_xz.X = PubKey.Z + PubKey.Y; - PubKey_xz.Z = PubKey.Z - PubKey.Y; - inited = pk_init; - return true; -} - -bool PublicKey::import_public_key(const ellcurve::TwEdwardsCurve::SegrePoint& Pub_Key) { - clear(); - if (!Pub_Key.is_valid()) { - return false; - } - PubKey = Pub_Key; - PubKey_xz.X = PubKey.Z + PubKey.Y; - PubKey_xz.Z = PubKey.Z - PubKey.Y; - inited = pk_init; - - if (!PubKey.export_point(pubkey)) { - clear(); - return false; - } - return true; -} - -bool PublicKey::export_public_key(unsigned char pubkey_buffer[pubkey_bytes]) const { - if (inited != pk_init) { - std::memset(pubkey_buffer, 0, pubkey_bytes); - return false; - } else { - std::memcpy(pubkey_buffer, pubkey, pubkey_bytes); - return true; - } -} - -bool PublicKey::check_message_signature(unsigned char signature[sign_bytes], const unsigned char* message, - std::size_t msg_size) { - if (inited != pk_init) { - return false; - } - unsigned char hash[64]; - { - digest::SHA512 hasher(signature, 32); - hasher.feed(pubkey, 32); - hasher.feed(message, msg_size); - hasher.extract(hash); - } - auto& E = ellcurve::Ed25519(); - const arith::Bignum& L = E.get_ell(); - arith::Bignum H, S; - S.import_lsb(signature + 32, 32); - H.import_lsb(hash, 64); - H %= L; - H = L - H; - auto sG = E.power_gen(S); - auto hA = E.power_point(PubKey, H); - auto pR1 = E.add_points(sG, hA); - unsigned char pR1_bytes[32]; - if (!pR1.export_point(pR1_bytes)) { - return false; - } - return !std::memcmp(pR1_bytes, signature, 32); -} - -class PrivateKey { - public: - struct priv_key_no_copy {}; - PrivateKey() : inited(false) { - std::memset(privkey, 0, privkey_bytes); - } - PrivateKey(const unsigned char pk[privkey_bytes]) : inited(false) { - std::memset(privkey, 0, privkey_bytes); - import_private_key(pk); - } - ~PrivateKey() { - clear(); - } - bool random_private_key(bool strong = false); - bool import_private_key(const unsigned char pk[privkey_bytes]); - bool export_private_key(unsigned char pk[privkey_bytes]) const; // careful! - bool export_public_key(unsigned char pubk[pubkey_bytes]) const { - return PubKey.export_public_key(pubk); - } - void clear(); - bool ok() const { - return inited; - } - - // used for EdDSA (sign) - bool sign_message(unsigned char signature[sign_bytes], const unsigned char* message, std::size_t msg_size); - // used for ECDH (encrypt / decrypt) - bool compute_shared_secret(unsigned char secret[shared_secret_bytes], const PublicKey& Pub); - // used for EC asymmetric decryption - bool compute_temp_shared_secret(unsigned char secret[shared_secret_bytes], - const unsigned char temp_pub_key[pubkey_bytes]); - - const PublicKey& get_public_key() const { - return PubKey; - } - - private: - bool inited; - unsigned char privkey[privkey_bytes]; - unsigned char priv_salt[32]; - arith::Bignum priv_exp; - PublicKey PubKey; - - bool process_private_key(); - PrivateKey(const PrivateKey&) { - throw priv_key_no_copy(); - } - PrivateKey& operator=(const PrivateKey&) { - throw priv_key_no_copy(); - } -}; - -bool PrivateKey::random_private_key(bool strong) { - inited = false; - if (!prng::rand_gen().rand_bytes(privkey, privkey_bytes, strong)) { - clear(); - return false; - } - return process_private_key(); -} - -void PrivateKey::clear(void) { - std::memset(privkey, 0, privkey_bytes); - std::memset(priv_salt, 0, sizeof(priv_salt)); - priv_exp.clear(); - PubKey.clear(); - inited = false; -} - -bool PrivateKey::import_private_key(const unsigned char pk[privkey_bytes]) { - clear(); - if (all_bytes_same(pk, privkey_bytes)) { - return false; - } - std::memcpy(privkey, pk, privkey_bytes); - return process_private_key(); -} - -bool PrivateKey::export_private_key(unsigned char pk[privkey_bytes]) const { // careful! - if (!inited) { - std::memset(pk, 0, privkey_bytes); - return false; - } else { - std::memcpy(pk, privkey, privkey_bytes); - return true; - } -} - -bool PrivateKey::process_private_key() { - unsigned char buff[64]; - digest::hash_str(buff, privkey, privkey_bytes); - std::memcpy(priv_salt, buff + 32, 32); - buff[0] &= -8; - buff[31] = ((buff[31] | 0x40) & ~0x80); - priv_exp.import_lsb(buff, 32); - PubKey = ellcurve::Ed25519().power_gen(priv_exp); - inited = PubKey.ok(); - if (!inited) { - clear(); - } - return inited; -} - -bool PrivateKey::compute_shared_secret(unsigned char secret[shared_secret_bytes], const PublicKey& Pub) { - if (!inited || !Pub.ok()) { - std::memset(secret, 0, shared_secret_bytes); - *(long*)secret = lrand48(); - return false; - } - auto P = ellcurve::Curve25519().power_xz(Pub.get_point_xz(), priv_exp); - if (P.is_infty()) { - std::memset(secret, 0, shared_secret_bytes); - *(long*)secret = lrand48(); - return false; - } - P.export_point_y(secret); - return true; -} - -bool PrivateKey::compute_temp_shared_secret(unsigned char secret[shared_secret_bytes], - const unsigned char temp_pub_key[pubkey_bytes]) { - PublicKey tempPubkey(temp_pub_key); - if (!tempPubkey.ok()) { - return false; - } - return compute_shared_secret(secret, tempPubkey); -} - -bool PrivateKey::sign_message(unsigned char signature[sign_bytes], const unsigned char* message, std::size_t msg_size) { - if (!inited) { - std::memset(signature, 0, sign_bytes); - return false; - } - unsigned char r_bytes[64]; - digest::hash_two_str(r_bytes, priv_salt, 32, message, msg_size); - const arith::Bignum& L = ellcurve::Ed25519().get_ell(); - arith::Bignum eR; - eR.import_lsb(r_bytes, 64); - eR %= L; - - auto pR = ellcurve::Ed25519().power_gen(eR); - - assert(pR.export_point(signature, 32)); - { - digest::SHA512 hasher(signature, 32); - hasher.feed(PubKey.get_pubkey_ptr(), 32); - hasher.feed(message, msg_size); - hasher.extract(r_bytes); - } - arith::Bignum S; - S.import_lsb(r_bytes, 64); - S %= L; - S *= priv_exp; - S += eR; - S %= L; - S.export_lsb(signature + 32, 32); - return true; -} - -// use one TempKeyGenerator object a lot of times -class TempKeyGenerator { - enum { salt_size = 64 }; - unsigned char random_salt[salt_size]; - unsigned char buffer[privkey_bytes]; - - public: - TempKeyGenerator() { - prng::rand_gen().strong_rand_bytes(random_salt, salt_size); - } - ~TempKeyGenerator() { - std::memset(random_salt, 0, salt_size); - std::memset(buffer, 0, privkey_bytes); - } - - unsigned char* get_temp_private_key(unsigned char* to, const unsigned char* message, std::size_t size, - const unsigned char* rand = 0, std::size_t rand_size = 0); // rand may be 0 - void create_temp_private_key(PrivateKey& pk, const unsigned char* message, std::size_t size, - const unsigned char* rand = 0, std::size_t rand_size = 0); - - // sets temp_pub_key and shared_secret for one-time asymmetric encryption of message - bool create_temp_shared_secret(unsigned char temp_pub_key[pubkey_bytes], unsigned char secret[shared_secret_bytes], - const PublicKey& recipientPubKey, const unsigned char* message, std::size_t size, - const unsigned char* rand = 0, std::size_t rand_size = 0); -}; - -unsigned char* TempKeyGenerator::get_temp_private_key(unsigned char* to, const unsigned char* message, std::size_t size, - const unsigned char* rand, - std::size_t rand_size) { // rand may be 0 - digest::SHA256 hasher(message, size); - hasher.feed(random_salt, salt_size); - if (rand && rand_size) { - hasher.feed(rand, rand_size); - } - if (!to) { - to = buffer; - } - hasher.extract(to); - //++ *((long *)random_salt); - return to; -} - -void TempKeyGenerator::create_temp_private_key(PrivateKey& pk, const unsigned char* message, std::size_t size, - const unsigned char* rand, std::size_t rand_size) { - pk.import_private_key(get_temp_private_key(buffer, message, size, rand, rand_size)); - std::memset(buffer, 0, privkey_bytes); -} - -bool TempKeyGenerator::create_temp_shared_secret(unsigned char temp_pub_key[pubkey_bytes], - unsigned char shared_secret[shared_secret_bytes], - const PublicKey& recipientPubKey, const unsigned char* message, - std::size_t size, const unsigned char* rand, std::size_t rand_size) { - PrivateKey tmpPk; - create_temp_private_key(tmpPk, message, size, rand, rand_size); - return tmpPk.export_public_key(temp_pub_key) && tmpPk.compute_shared_secret(shared_secret, recipientPubKey); -} - -} // namespace Ed25519 -} // namespace crypto - -// ****************************************************** - -void print_buffer(const unsigned char buffer[32]) { - for (int i = 0; i < 32; i++) { - char buff[4]; - sprintf(buff, "%02x", buffer[i]); - std::cout << buff; - } -} - -std::string buffer_to_hex(const unsigned char* buffer, std::size_t size = 32) { - char str[2 * size + 1]; - for (std::size_t i = 0; i < size; i++) { - sprintf(str + 2 * i, "%02x", buffer[i]); - } - return str; -} - -int main(void) { - arith::Bignum x = (3506824292LL << 31); - x = (2948877059LL << 31); - arith::Bignum L = (((36 * x + 36) * x + 18) * x + 6) * x + 1; - arith::Bignum P = L + 6 * sqr(x); - std::cout << "x= " << x << "; l= " << L << "; p= " << P << std::endl; - std::cout << "x= " << x.to_hex() << "; l= " << L.to_hex() << "; p= " << P.to_hex() << std::endl; - std::cout << "x mod 3=" << x % 3 << "; p mod 9=" << P % 9 << "; x/2^31=" << (x >> 31).to_hex() << "=" << (x >> 31) - << std::endl; - - crypto::Ed25519::PrivateKey PK1, PK2, PK3; - PK1.random_private_key(); - PK2.random_private_key(); - unsigned char priv2_export[32]; - bool ok = PK2.export_private_key(priv2_export); - std::cout << "PK2 = " << ok << " " << buffer_to_hex(priv2_export) << std::endl; - PK3.import_private_key(priv2_export); - std::cout << "PK3 = " << PK3.ok() << std::endl; - - unsigned char pub_export[32]; - ok = PK1.export_public_key(pub_export); - std::cout << "PubK1 = " << ok << " " << buffer_to_hex(pub_export) << std::endl; - crypto::Ed25519::PublicKey PubK1(pub_export); - ok = PK2.export_public_key(pub_export); - std::cout << "PubK2 = " << ok << " " << buffer_to_hex(pub_export) << std::endl; - crypto::Ed25519::PublicKey PubK2(pub_export); - ok = PK3.export_public_key(pub_export); - std::cout << "PubK3 = " << ok << " " << buffer_to_hex(pub_export) << std::endl; - crypto::Ed25519::PublicKey PubK3(pub_export); - ok = PubK1.export_public_key(pub_export); - std::cout << "PubK1 = " << ok << " " << buffer_to_hex(pub_export) << std::endl; - - unsigned char secret12[32], secret21[32]; - ok = PK1.compute_shared_secret(secret12, PK3.get_public_key()); - std::cout << "secret(PK1,PubK2)=" << ok << " " << buffer_to_hex(secret12) << std::endl; - ok = PK2.compute_shared_secret(secret21, PubK1); - std::cout << "secret(PK2,PubK1)=" << ok << " " << buffer_to_hex(secret21) << std::endl; - - unsigned char signature[64]; - ok = PK1.sign_message(signature, (const unsigned char*)"abc", 3); - std::cout << "PK1.signature=" << ok << " " << buffer_to_hex(signature) << std::endl; - - // signature[63] ^= 1; - ok = PubK1.check_message_signature(signature, (const unsigned char*)"abc", 3); - std::cout << "PubK1.check_signature=" << ok << std::endl; - - unsigned char temp_pubkey[32]; - crypto::Ed25519::TempKeyGenerator TKG; // use one generator a lot of times - - TKG.create_temp_shared_secret(temp_pubkey, secret12, PubK1, (const unsigned char*)"abc", 3); - std::cout << "secret12=" << buffer_to_hex(secret12) << "; temp_pubkey=" << buffer_to_hex(temp_pubkey) << std::endl; - - PK1.compute_temp_shared_secret(secret21, temp_pubkey); - std::cout << "secret21=" << buffer_to_hex(secret21) << std::endl; -} diff --git a/test/regression-tests.ans b/test/regression-tests.ans index e2057210..0e07e3d6 100644 --- a/test/regression-tests.ans +++ b/test/regression-tests.ans @@ -13,7 +13,7 @@ Test_Fift_test_bls_ops_default fb0a81d4f247ab806318b051d12158f7f1aacc5513db5f8cb Test_Fift_test_deep_stack_ops_default df812efbadfffa8a3f553416f68c8c4435bac07266f84562cf98fe5f0dd62a52 Test_Fift_test_default 4e44b3382963ec89f7b5c8f2ebd85da3bc8aebad5b49f5b11b14075061477b4d Test_Fift_test_dict_default a9c8cbcfdece5573185022cea07f59f1bc404e5d879e5157a5745757f8ee0525 -Test_Fift_test_disasm_default dacaa555f5f217b2373e01e3bcd59634e480f5759dcc43edbdef35273ae38492 +Test_Fift_test_disasm_default 412cf37d37c5d9d81f44dbf4e3d3e7cda173c23b890614eb8a3bc5f2b92f13e6 Test_Fift_test_fiftext_default 2b0db5d4d4bfbc705b959cc787540d7b3a21a71469eac54756e76953f0d9afca Test_Fift_test_fixed_default 278a19d56b773102caf5c1fe2997ea6c8d0d9e720eff8503feede6398a197eec Test_Fift_test_hash_ext_default 686fc5680feca5b3bb207768215b27f6872a95128762dee0d7f2c88bc492d62d @@ -37,40 +37,40 @@ Test_Fift_testvm8_default 17c9e2205ccecfd8549328b4a501d07dde0336899a7a496e747e10 Test_Fift_testvm_default ee4cbfec76c050b6de7877cfc39817d594cd1e175b6265b76fb642e30b940437 Test_Fift_testvmprog_default e5d0b2c68ee568280877c8495be558bfd0054ca5d99a99eebb525bbeca8a65af Test_RefInt_main_default 768493e0aef8e09a401a6d369edd1ef503a9215fb09dc460f52b27a8bde767cb -Test_VM_assert_code_not_null_default 05bc07e129181c972b976442f200de9487dee8bfb5ac53dd36ff61c5d4d4291d -Test_VM_assert_extract_minmax_key_default c352309c61bdf62ba7a0ba7280d303c88b0696fe7efa550c05feb2c662275297 -Test_VM_assert_lookup_prefix_default c5b45999b46d324e4008c07e5ce671bbcd833f4e15fb21a4a5136f7b980ca6fc -Test_VM_assert_pfx_dict_lookup_default fa6e3f96b31cf2ed9a9dac6b279ec05acfedf13b8ed7b815789f167d1ed7352f +Test_VM_assert_code_not_null_default 09f75cb845e0df27f3ec92405ccb4018484711a79813fd47fe8e158762c1cb93 +Test_VM_assert_extract_minmax_key_default 756337c2b2ce489243956a6608d6934ba9f76124a9435f045fc3a3b65c113d41 +Test_VM_assert_lookup_prefix_default f7683f9d2010bca53b1ef20c0e82427fb04ed62fa5fea1ee986f005ecfc9a27a +Test_VM_assert_pfx_dict_lookup_default 6d7c80d94dbc6d3ae4bafa216667b95ede4f2cbd44a59384abace84270417ef8 Test_VM_bigint_default feeb473a4ac51133989e1c145d0f49defa77117d2ae8b66bd7d12e3579e91b9f -Test_VM_bug_div_short_any_default f69aca6873f75d53dd37b6952151a2d858407a04589330762827dbc96d8b7c04 -Test_VM_bug_exec_dict_getnear_default db314c2e25b49c1f7f044d271e225f36da546c66242a8ab12f6afae37628a81e -Test_VM_bug_stack_overflow_default 7e0e3e96ca438ac96648d569c55213aa82154cf004e80265b1c481b1c4219719 -Test_VM_infinity_loop_1_default 670beda76229922806805e558d50d8f320017c642c3e7e34a7e1f2b7edb83cee -Test_VM_infinity_loop_2_default 22d9bd8cb41ff7b6cced5825e4ab73275b2fc07b1e3cd4588de815e2e6df2963 -Test_VM_memory_leak_default e10dc118f3538720a16bcbd39be9a68c3ea07f76b3d2ed5719a5e866d91f0ab3 -Test_VM_memory_leak_new_default fd2eec0a1d5ae49fb5ff8ba4b938fd9d0fe330be4a07b2b8be12bab249b00d90 -Test_VM_memory_leak_old_default f3076ae38d14000c021597b824d2f0e51de4f00601429ec3e23cca1b32dba844 -Test_VM_oom_1_default 90862ddf3270840fbc9263c003c628ddd4a8bf6548b9bd3d53eb35a5c34bc325 -Test_VM_report3_1_default 7bc6a8e66f9a0e40cd131e9829ff36fed16b464170d27c0b365a3f549df57282 -Test_VM_report3_2_default 2231bc352cf431e72a84abad2261969bd5b0ee3d9051bb7a53b69fd8ea05f951 -Test_VM_report3_3_default 9416187eb0600ed247795837ca820bccaffb39841bd9d2ff625816bfbba35d6d -Test_VM_report3_4_default 11661eb00ea37c68e3483a8e048f922f73070c6da8219247663e3d6471c5c0cc -Test_VM_report3_6_default 1d7be98a8b07f803e80168247459e620ce4b91df634ad896e878d21a3ed757c0 -Test_VM_report3_int_overflow_1_default a0c2414ca2c9672d54409ee375a6aad6e2233306eaa3dfd33a82de3c90bba3ba -Test_VM_report3_int_overflow_2_default 01cd461802e532a6830705ad50eaa1760278737ff7beeb654e3c59ceb4aa8e2e -Test_VM_report3_loop_1_default b28b35d057a1b4fa2282d6f422ecd822b18cc4344733d923ef7b002f64bc4d72 -Test_VM_report3_loop_2_default 9f8236535902b04e403d412fcf1f79e64d0f2eb25b3cc014b7d61b2d7a34b9ef -Test_VM_report3_loop_3_default 7ee05ea553c48a2476035817b9d860f614a355927c9e011b2f824dc6e5f7b0cf -Test_VM_report3_loop_4_default 4b6c2f65fda3c9e9c6660b6cbbcb1b2103c5b52870cb5daa8876bbed0ca9bbc9 -Test_VM_report3_loop_5_default 0d5d504884172ef8513757d7f6b2a3870dbd28efd5960857441c032e1c67d836 -Test_VM_report3_loop_6_default 5c35b92144debdb61b2020d690669bffbdd96f75ecde827fd0c75c05da22b5a0 -Test_VM_report3_qnot_default dc280444c7e3886cc3412f96f44c803c45287a07fcb9c638643e21bcdfe3905d -Test_VM_simple_default f6733549069427c2beb1a85ee25635540e27aa68cb8ad101d8435e19afeae862 -Test_VM_unhandled_exception_1_default 0abe2740dd3b6a6b91eb67fee573f638086fecc72653d2d81c956782186b5d78 -Test_VM_unhandled_exception_2_default 5ca67db5a0e957cc106bb47b744177ca959632a352f3629df376c34cbf03d51b -Test_VM_unhandled_exception_3_default b354e897e35a1177fd66d2c6ad7d77ae33a4e18f8678a518d79fea1388853307 -Test_VM_unhandled_exception_4_default 412cbfe13745fde55cdcc5e41d7b15ba4d09f0e723f8e4421ae0b7066ca07b8f -Test_VM_unhandled_exception_5_default d760e540cd9c200c207f71c540cdaf06d11c96e32ec19860b9c1046cb1e38855 +Test_VM_bug_div_short_any_default 49c9588b2b25b08979016f8b7ca42ae9fa4904a1dc6a2093a7dae6dce0cdf42f +Test_VM_bug_exec_dict_getnear_default 0b0cb6c1fef773f8b5a4aab8d575ba941f3b85dd449f85051296954028e59781 +Test_VM_bug_stack_overflow_default 31950eb2ed62bd1ce1c18e0031a81390ff3a3feee61ff23a09181995917137d0 +Test_VM_infinity_loop_1_default 6b8cc0ff85efa6882ffdf6e9e4333967976a29c4ce32a25b42c4c53370ad3024 +Test_VM_infinity_loop_2_default 4be08957dc86dfde3dfadd8c2f961ef2f1fa839788bbf7affea754115cee9e18 +Test_VM_memory_leak_default da588f89f3bc3ef7496bbab61e2d993f0c84bba80bb28d9c20c6eac0f7f57dd3 +Test_VM_memory_leak_new_default d25e8602c88c454ded6271d0f7afbc556820cc9942c56de9e0bd95b329f8783e +Test_VM_memory_leak_old_default 563f5a02130f231823099985c77d09913db07d2d8782edf431822f6afe4911b8 +Test_VM_oom_1_default 354934173c82e4f7bca5063846abd35cb47c4fcf1c3ba8c2fd04a4b186fcbf18 +Test_VM_report3_1_default 26bb43b5100e94791911a66226ec6545422749e0ea9e6279983b00ef4b506601 +Test_VM_report3_2_default 07a84726217f362fd71b3ceab96112ffc7aa40ed44636cf0128205d85798c66c +Test_VM_report3_3_default 0d9a92491c88ada92283691debd123724db2b7c1bd345200a53c057032e9cc07 +Test_VM_report3_4_default eb23c8e1219aed91b1b4f519efcac87018a5cf8e0ce473cfa641f8221f3c5d20 +Test_VM_report3_6_default 769ce8f9bb6fb9b8619afdb8e9d621b6199466f07c37eeea8edf3c21bf05a101 +Test_VM_report3_int_overflow_1_default 7aaf32ec7ace54b93d6b55f3ac9642572f348ebd64412afdda24849f8e4eb1dc +Test_VM_report3_int_overflow_2_default 572d197681654c94951280448ea3cf448613391633383c2424d719b03b6ec939 +Test_VM_report3_loop_1_default c9b00b32a024c65e0a8019c86e94ee365a823ff26e2420e1797902841abab57c +Test_VM_report3_loop_2_default 3654949987ddb44d8e11e84fe907d43707eaed910b9d0ad15dd68b531df1444a +Test_VM_report3_loop_3_default c1fc7e0d160b334fe8a4735a2a9d36c3b10530edaad5c1859df88382ff82a2d9 +Test_VM_report3_loop_4_default 5ad7cc51a6e553ee3d4a427229908a51692e117624838190311c7023df7a5e5b +Test_VM_report3_loop_5_default 068f81caecc344132a601259d9f73eea7089b1399793661ba1954483e0d5682c +Test_VM_report3_loop_6_default bf2e45709fceeed0192ec34af618cba3b85b90f71071e018afba686167618a90 +Test_VM_report3_qnot_default 7fcbda7e3fc4853a36e6b02e9d346f039690b1879d40850f561ea4123452d3ec +Test_VM_simple_default c96d70ea853828c89cd38fcf22543289335f3086a53301a1d0f186753ba9975b +Test_VM_unhandled_exception_1_default 80fe0e4c2ae19ae73e67e4355548d0afa59ea286be2d75a91db4529618dba008 +Test_VM_unhandled_exception_2_default 1362ba3a6ddbf5a30aba07ad58e8c24b0f85bdc53525e3eaa27af7248c62525a +Test_VM_unhandled_exception_3_default e381ce751cbd0e2994d7f60df7746b9ed7783198cfbcb31dccf02fafe68b6733 +Test_VM_unhandled_exception_4_default 51dd501ec0514f3b388145761b252f09d6ef3e831ea450605ae30511688dd708 +Test_VM_unhandled_exception_5_default 8231cfe1fb6ce6107b592f2c8f6a4eae0d123fc399163c81e8e0d5228b68bc91 Test_base64_main_default e90d541bd810871c4a81e162f1fffb555024b72807cb895414d16bc11494b789 Test_bigexp_main_default 45a1f51fb2abcc1ebf8569e1a57bebee04c334a15e03535ff5869bc9a9db8956 Test_bits256_scan_main_default 3ec7434e1cabc8e08eb2e79064e67747ffbfed177473c7873b88c144a7ed6f42 diff --git a/test/test-adnl.cpp b/test/test-adnl.cpp index d9ae4abe..85e965a4 100644 --- a/test/test-adnl.cpp +++ b/test/test-adnl.cpp @@ -52,7 +52,7 @@ int main() { td::to_integer_safe("0").ensure(); - std::string db_root_ = "tmp-ee"; + std::string db_root_ = "tmp-dir-test-adnl"; td::rmrf(db_root_).ignore(); td::mkdir(db_root_).ensure(); diff --git a/test/test-catchain.cpp b/test/test-catchain.cpp index 53b32924..149ea3e3 100644 --- a/test/test-catchain.cpp +++ b/test/test-catchain.cpp @@ -219,7 +219,7 @@ int main(int argc, char *argv[]) { SET_VERBOSITY_LEVEL(verbosity_INFO); td::set_default_failure_signal_handler().ensure(); - std::string db_root_ = "tmp-ee"; + std::string db_root_ = "tmp-dir-test-catchain"; td::rmrf(db_root_).ignore(); td::mkdir(db_root_).ensure(); @@ -274,8 +274,6 @@ int main(int argc, char *argv[]) { } }); - auto t = td::Timestamp::in(1.0); - ton::catchain::CatChainSessionId unique_id; td::Random::secure_bytes(unique_id.as_slice()); @@ -287,7 +285,7 @@ int main(int argc, char *argv[]) { } }); - t = td::Timestamp::in(10.0); + auto t = td::Timestamp::in(10.0); while (scheduler.run(1)) { if (t.is_in_past()) { break; @@ -300,7 +298,7 @@ int main(int argc, char *argv[]) { scheduler.run_in_context([&] { td::actor::send_closure(inst[0], &CatChainInst::create_fork); }); - t = td::Timestamp::in(10.0); + t = td::Timestamp::in(1.0); while (scheduler.run(1)) { if (t.is_in_past()) { break; diff --git a/test/test-dht.cpp b/test/test-dht.cpp index 2391fd9c..8d814f6e 100644 --- a/test/test-dht.cpp +++ b/test/test-dht.cpp @@ -41,7 +41,7 @@ int main() { SET_VERBOSITY_LEVEL(verbosity_INFO); - std::string db_root_ = "tmp-ee"; + std::string db_root_ = "tmp-dir-test-dht"; td::rmrf(db_root_).ignore(); td::mkdir(db_root_).ensure(); diff --git a/test/test-ext-client.cpp b/test/test-ext-client.cpp deleted file mode 100644 index a1187d78..00000000 --- a/test/test-ext-client.cpp +++ /dev/null @@ -1,220 +0,0 @@ -/* - This file is part of TON Blockchain source code. - - TON Blockchain is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - TON Blockchain is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with TON Blockchain. If not, see . - - In addition, as a special exception, the copyright holders give permission - to link the code of portions of this program with the OpenSSL library. - You must obey the GNU General Public License in all respects for all - of the code used other than OpenSSL. If you modify file(s) with this - exception, you may extend this exception to your version of the file(s), - but you are not obligated to do so. If you do not wish to do so, delete this - exception statement from your version. If you delete this exception statement - from all source files in the program, then also delete it here. - - Copyright 2017-2020 Telegram Systems LLP -*/ -#include "adnl/adnl.h" -#include "adnl/utils.hpp" -#include "auto/tl/ton_api_json.h" -#include "dht/dht.h" -#include "overlay/overlays.h" -#include "td/utils/OptionParser.h" -#include "td/utils/Time.h" -#include "td/utils/filesystem.h" -#include "td/utils/format.h" -#include "td/utils/Random.h" -#include "td/utils/port/signals.h" -#include "td/utils/port/FileFd.h" -#include "adnl/adnl-ext-client.h" - -#if TD_DARWIN || TD_LINUX -#include -#endif -#include -#include - -template -std::ostream &operator<<(std::ostream &stream, const td::UInt &x) { - for (size_t i = 0; i < size / 8; i++) { - stream << td::format::hex_digit((x.raw[i] >> 4) & 15) << td::format::hex_digit(x.raw[i] & 15); - } - - return stream; -} - -class TestNode : public td::actor::Actor { - private: - std::string local_config_ = "ton-local.config"; - std::string global_config_ = "ton-global.config"; - - td::actor::ActorOwn client_; - - std::unique_ptr make_callback() { - class Callback : public ton::adnl::AdnlExtClient::Callback { - public: - void on_ready() override { - td::actor::send_closure(id_, &TestNode::conn_ready); - } - void on_stop_ready() override { - td::actor::send_closure(id_, &TestNode::conn_closed); - } - Callback(td::actor::ActorId id) : id_(std::move(id)) { - } - - private: - td::actor::ActorId id_; - }; - - return std::make_unique(actor_id(this)); - } - - bool ready_ = false; - std::string db_root_; - - public: - void conn_ready() { - LOG(ERROR) << "conn ready"; - ready_ = true; - } - void conn_closed() { - ready_ = false; - } - void set_local_config(std::string str) { - local_config_ = str; - } - void set_global_config(std::string str) { - global_config_ = str; - } - void set_db_root(std::string db_root) { - db_root_ = db_root; - } - void start_up() override { - } - void alarm() override { - if (ready_ && !client_.empty()) { - LOG(ERROR) << "sending query"; - auto P = td::PromiseCreator::lambda([](td::Result R) { - if (R.is_error()) { - LOG(ERROR) << "failed query: " << R.move_as_error(); - return; - } - auto F = ton::fetch_tl_object(R.move_as_ok(), true); - if (F.is_error()) { - LOG(ERROR) << "failed to pasrse answer: " << F.move_as_error(); - return; - } - auto obj = F.move_as_ok(); - LOG(ERROR) << "got answer: " << ton::ton_api::to_string(obj); - }); - td::BufferSlice b = ton::serialize_tl_object(ton::create_tl_object(), true); - td::actor::send_closure(client_, &ton::adnl::AdnlExtClient::send_query, "query", std::move(b), - td::Timestamp::in(10.0), std::move(P)); - } - alarm_timestamp() = td::Timestamp::in(2.0); - } - TestNode() { - } - void run() { - auto L = td::read_file(local_config_).move_as_ok(); - auto lc_j = td::json_decode(L.as_slice()).move_as_ok(); - ton::ton_api::config_local lc; - ton::ton_api::from_json(lc, lc_j.get_object()).ensure(); - - auto G = td::read_file(global_config_).move_as_ok(); - auto gc_j = td::json_decode(G.as_slice()).move_as_ok(); - ton::ton_api::config_global gc; - ton::ton_api::from_json(gc, gc_j.get_object()).ensure(); - - CHECK(gc.liteclients_.size() > 0); - auto &cli = gc.liteclients_[0]; - td::IPAddress addr; - addr.init_host_port(td::IPAddress::ipv4_to_str(cli->ip_), cli->port_).ensure(); - - client_ = ton::adnl::AdnlExtClient::create(ton::adnl::AdnlNodeIdFull::create(cli->id_).move_as_ok(), addr, - make_callback()); - alarm_timestamp() = td::Timestamp::in(2.0); - } -}; - -td::Result get_uint256(std::string str) { - if (str.size() != 64) { - return td::Status::Error("uint256 must have 64 bytes"); - } - td::UInt256 res; - for (size_t i = 0; i < 32; i++) { - res.raw[i] = static_cast(td::hex_to_int(str[2 * i]) * 16 + td::hex_to_int(str[2 * i + 1])); - } - return res; -} - -int main(int argc, char *argv[]) { - SET_VERBOSITY_LEVEL(verbosity_DEBUG); - td::set_default_failure_signal_handler().ensure(); - - td::actor::ActorOwn x; - - td::OptionParser p; - p.set_description("test basic adnl functionality"); - p.add_option('h', "help", "prints_help", [&]() { - char b[10240]; - td::StringBuilder sb(td::MutableSlice{b, 10000}); - sb << p; - std::cout << sb.as_cslice().c_str(); - std::exit(2); - return td::Status::OK(); - }); - p.add_option('C', "global-config", "file to read global config", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_global_config, fname.str()); - return td::Status::OK(); - }); - p.add_option('c', "local-config", "file to read local config", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_local_config, fname.str()); - return td::Status::OK(); - }); - p.add_option('D', "db", "root for dbs", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_db_root, fname.str()); - return td::Status::OK(); - }); - p.add_option('d', "daemonize", "set SIGHUP", [&]() { - td::set_signal_handler(td::SignalType::HangUp, [](int sig) { -#if TD_DARWIN || TD_LINUX - close(0); - setsid(); -#endif - }).ensure(); - return td::Status::OK(); - }); -#if TD_DARWIN || TD_LINUX - p.add_option('l', "logname", "log to file", [&](td::Slice fname) { - auto FileLog = td::FileFd::open(td::CSlice(fname.str().c_str()), - td::FileFd::Flags::Create | td::FileFd::Flags::Append | td::FileFd::Flags::Write) - .move_as_ok(); - - dup2(FileLog.get_native_fd().fd(), 1); - dup2(FileLog.get_native_fd().fd(), 2); - return td::Status::OK(); - }); -#endif - - td::actor::Scheduler scheduler({2}); - - scheduler.run_in_context([&] { x = td::actor::create_actor("testnode"); }); - - scheduler.run_in_context([&] { p.run(argc, argv).ensure(); }); - scheduler.run_in_context([&] { td::actor::send_closure(x, &TestNode::run); }); - scheduler.run(); - - return 0; -} diff --git a/test/test-ext-server.cpp b/test/test-ext-server.cpp deleted file mode 100644 index b4b78728..00000000 --- a/test/test-ext-server.cpp +++ /dev/null @@ -1,221 +0,0 @@ -/* - This file is part of TON Blockchain source code. - - TON Blockchain is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - TON Blockchain is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with TON Blockchain. If not, see . - - In addition, as a special exception, the copyright holders give permission - to link the code of portions of this program with the OpenSSL library. - You must obey the GNU General Public License in all respects for all - of the code used other than OpenSSL. If you modify file(s) with this - exception, you may extend this exception to your version of the file(s), - but you are not obligated to do so. If you do not wish to do so, delete this - exception statement from your version. If you delete this exception statement - from all source files in the program, then also delete it here. - - Copyright 2017-2020 Telegram Systems LLP -*/ -#include "adnl/adnl.h" -#include "adnl/utils.hpp" -#include "auto/tl/ton_api_json.h" -#include "dht/dht.h" -#include "overlay/overlays.h" -#include "td/utils/OptionParser.h" -#include "td/utils/Time.h" -#include "td/utils/filesystem.h" -#include "td/utils/format.h" -#include "td/utils/Random.h" -#include "td/utils/port/signals.h" -#include "td/utils/port/FileFd.h" - -#if TD_DARWIN || TD_LINUX -#include -#endif -#include -#include - -template -std::ostream &operator<<(std::ostream &stream, const td::UInt &x) { - for (size_t i = 0; i < size / 8; i++) { - stream << td::format::hex_digit((x.raw[i] >> 4) & 15) << td::format::hex_digit(x.raw[i] & 15); - } - - return stream; -} - -class TestNode : public td::actor::Actor { - private: - td::actor::ActorOwn keyring_; - td::actor::ActorOwn adnl_; - - std::string local_config_ = "ton-local.config"; - std::string global_config_ = "ton-global.config"; - - std::unique_ptr make_callback() { - class Callback : public ton::adnl::Adnl::Callback { - public: - void receive_message(ton::adnl::AdnlNodeIdShort src, ton::adnl::AdnlNodeIdShort dst, - td::BufferSlice data) override { - td::actor::send_closure(id_, &TestNode::adnl_receive_message, src, dst, std::move(data)); - } - void receive_query(ton::adnl::AdnlNodeIdShort src, ton::adnl::AdnlNodeIdShort dst, td::BufferSlice data, - td::Promise promise) override { - td::actor::send_closure(id_, &TestNode::adnl_receive_query, src, dst, std::move(data), std::move(promise)); - } - Callback(td::actor::ActorId id) : id_(std::move(id)) { - } - - private: - td::actor::ActorId id_; - }; - - return std::make_unique(actor_id(this)); - } - - std::string db_root_; - - public: - void adnl_receive_message(ton::adnl::AdnlNodeIdShort src, ton::adnl::AdnlNodeIdShort dst, td::BufferSlice data) { - LOG(ERROR) << "ADNL MESSAGE FROM " << src << ": size=" << data.size() << "\n"; - } - - void adnl_receive_query(ton::adnl::AdnlNodeIdShort src, ton::adnl::AdnlNodeIdShort dst, td::BufferSlice data, - td::Promise promise) { - LOG(ERROR) << "ADNL QUERY FROM " << src << ": size=" << data.size() << "\n"; - promise.set_value(ton::serialize_tl_object(ton::create_tl_object("xxx"), true)); - } - void set_local_config(std::string str) { - local_config_ = str; - } - void set_global_config(std::string str) { - global_config_ = str; - } - void set_db_root(std::string db_root) { - db_root_ = db_root; - } - void start_up() override { - } - void alarm() override { - } - TestNode() { - } - void run() { - keyring_ = ton::keyring::Keyring::create(db_root_ + "/keyring/"); - adnl_ = ton::adnl::Adnl::create(db_root_, keyring_.get()); - - auto L = td::read_file(local_config_).move_as_ok(); - auto lc_j = td::json_decode(L.as_slice()).move_as_ok(); - ton::ton_api::config_local lc; - ton::ton_api::from_json(lc, lc_j.get_object()).ensure(); - - auto G = td::read_file(global_config_).move_as_ok(); - auto gc_j = td::json_decode(G.as_slice()).move_as_ok(); - ton::ton_api::config_global gc; - ton::ton_api::from_json(gc, gc_j.get_object()).ensure(); - - for (auto &port : lc.udp_ports_) { - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_listening_udp_port, "0.0.0.0", - static_cast(port)); - } - - //td::actor::send_closure(network_manager_, &ton::adnl::AdnlNetworkManager::load_local_config, std::move(lc.net_)); - //td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_ids_from_config, std::move(lc.local_ids_)); - if (gc.adnl_) { - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_static_nodes_from_config, - std::move(gc.adnl_->static_nodes_)); - } - for (auto &x : lc.liteservers_) { - auto pk = ton::PrivateKey{x->id_}; - auto pub_k = ton::adnl::AdnlNodeIdFull{pk.compute_public_key()}; - auto id = pub_k.compute_short_id(); - - td::actor::send_closure(keyring_, &ton::keyring::Keyring::add_key, std::move(pk), false); - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_id, pub_k, ton::adnl::AdnlAddressList{}); - td::actor::send_closure(adnl_, &ton::adnl::Adnl::subscribe, id, - ton::adnl::Adnl::int_to_bytestring(ton::ton_api::getTestObject::ID), make_callback()); - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_ext_local_id, id); - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_ext_tcp_port, static_cast(x->port_)); - } - } -}; - -td::Result get_uint256(std::string str) { - if (str.size() != 64) { - return td::Status::Error("uint256 must have 64 bytes"); - } - td::UInt256 res; - for (size_t i = 0; i < 32; i++) { - res.raw[i] = static_cast(td::hex_to_int(str[2 * i]) * 16 + td::hex_to_int(str[2 * i + 1])); - } - return res; -} - -int main(int argc, char *argv[]) { - SET_VERBOSITY_LEVEL(verbosity_DEBUG); - td::set_default_failure_signal_handler().ensure(); - - td::actor::ActorOwn x; - - td::OptionParser p; - p.set_description("test basic adnl functionality"); - p.add_option('h', "help", "prints_help", [&]() { - char b[10240]; - td::StringBuilder sb(td::MutableSlice{b, 10000}); - sb << p; - std::cout << sb.as_cslice().c_str(); - std::exit(2); - return td::Status::OK(); - }); - p.add_option('C', "global-config", "file to read global config", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_global_config, fname.str()); - return td::Status::OK(); - }); - p.add_option('c', "local-config", "file to read local config", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_local_config, fname.str()); - return td::Status::OK(); - }); - p.add_option('D', "db", "root for dbs", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_db_root, fname.str()); - return td::Status::OK(); - }); - p.add_option('d', "daemonize", "set SIGHUP", [&]() { - td::set_signal_handler(td::SignalType::HangUp, [](int sig) { -#if TD_DARWIN || TD_LINUX - close(0); - setsid(); -#endif - }).ensure(); - return td::Status::OK(); - }); -#if TD_DARWIN || TD_LINUX - p.add_option('l', "logname", "log to file", [&](td::Slice fname) { - auto FileLog = td::FileFd::open(td::CSlice(fname.str().c_str()), - td::FileFd::Flags::Create | td::FileFd::Flags::Append | td::FileFd::Flags::Write) - .move_as_ok(); - - dup2(FileLog.get_native_fd().fd(), 1); - dup2(FileLog.get_native_fd().fd(), 2); - return td::Status::OK(); - }); -#endif - - td::actor::Scheduler scheduler({2}); - - scheduler.run_in_context([&] { x = td::actor::create_actor("testnode"); }); - - scheduler.run_in_context([&] { p.run(argc, argv).ensure(); }); - scheduler.run_in_context([&] { td::actor::send_closure(x, &TestNode::run); }); - scheduler.run(); - - return 0; -} diff --git a/test/test-node.cpp b/test/test-node.cpp deleted file mode 100644 index d771d3ae..00000000 --- a/test/test-node.cpp +++ /dev/null @@ -1,376 +0,0 @@ -/* - This file is part of TON Blockchain source code. - - TON Blockchain is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - TON Blockchain is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with TON Blockchain. If not, see . - - In addition, as a special exception, the copyright holders give permission - to link the code of portions of this program with the OpenSSL library. - You must obey the GNU General Public License in all respects for all - of the code used other than OpenSSL. If you modify file(s) with this - exception, you may extend this exception to your version of the file(s), - but you are not obligated to do so. If you do not wish to do so, delete this - exception statement from your version. If you delete this exception statement - from all source files in the program, then also delete it here. - - Copyright 2017-2020 Telegram Systems LLP -*/ -#include "adnl/adnl.h" -#include "adnl/utils.hpp" -#include "auto/tl/ton_api_json.h" -#include "dht/dht.h" -#include "overlay/overlays.h" -#include "td/utils/OptionParser.h" -#include "td/utils/Time.h" -#include "td/utils/filesystem.h" -#include "td/utils/format.h" -#include "td/utils/Random.h" -#include "td/utils/port/signals.h" -#include "td/utils/port/FileFd.h" -#include "catchain/catchain.h" - -#include "crypto/common/refvector.hpp" - -#if TD_DARWIN || TD_LINUX -#include -#endif -#include -#include - -template -std::ostream &operator<<(std::ostream &stream, const td::UInt &x) { - for (size_t i = 0; i < size / 8; i++) { - stream << td::format::hex_digit((x.raw[i] >> 4) & 15) << td::format::hex_digit(x.raw[i] & 15); - } - - return stream; -} - -class TestNode : public td::actor::Actor { - private: - std::vector ping_ids_; - td::Timestamp next_dht_dump_; - - td::actor::ActorOwn adnl_; - std::vector> dht_nodes_; - td::actor::ActorOwn overlay_manager_; - std::vector> overlays_; - std::vector> catchains_; - - std::string local_config_ = "ton-local.config"; - std::string global_config_ = "ton-global.config"; - - td::int32 broadcast_size_ = 100; - - void receive_message(td::UInt256 src, td::UInt256 dst, td::BufferSlice data) { - LOG(ERROR) << "MESSAGE FROM " << src << " to " << dst << " of size " << std::to_string(data.size()) << "\n"; - } - - void receive_broadcast(td::UInt256 overlay_id, td::BufferSlice data) { - LOG(ERROR) << "BROADCAST IN " << overlay_id << " hash=" << td::sha256(data.as_slice()) << "\n"; - } - - void receive_query(td::UInt256 src, td::UInt256 dst, td::BufferSlice data, td::Promise promise) { - auto Q = ton::fetch_tl_object(std::move(data), true); - CHECK(Q.is_ok()); - auto R = Q.move_as_ok(); - LOG(ERROR) << "QUERY " - << " FROM " << src << " to " << dst << ": " << ton::ton_api::to_string(R) << "\n"; - promise.set_value(serialize_tl_object(ton::create_tl_object(), true)); - } - - void catchain_new_block(td::UInt256 src, td::uint64 height, td::BufferSlice data) { - LOG(ERROR) << "CATCHAIN BLOCK: " << src << "@" << height << ": " << td::sha256_uint256(data.as_slice()) << "\n"; - } - void catchain_bad_block(td::UInt256 src) { - LOG(ERROR) << "CATCHAIN BAD BLOCK\n"; - } - void catchain_broadcast(td::BufferSlice data) { - LOG(ERROR) << "CATCHAIN BROADCAST " << td::sha256_uint256(data.as_slice()) << "\n"; - } - - std::unique_ptr make_callback() { - class Callback : public ton::adnl::Adnl::Callback { - public: - void receive_message(td::UInt256 src, td::UInt256 dst, td::BufferSlice data) override { - td::actor::send_closure(id_, &TestNode::receive_message, src, dst, std::move(data)); - } - void receive_query(td::UInt256 src, td::UInt256 dst, td::BufferSlice data, - td::Promise promise) override { - td::actor::send_closure(id_, &TestNode::receive_query, src, dst, std::move(data), std::move(promise)); - } - Callback(td::actor::ActorId id) : id_(std::move(id)) { - } - - private: - td::actor::ActorId id_; - }; - - return std::make_unique(actor_id(this)); - } - - std::unique_ptr make_catchain_callback() { - class Callback : public ton::CatChainActor::Callback { - public: - void new_block(td::UInt256 src, td::uint64 height, td::BufferSlice data) override { - td::actor::send_closure(id_, &TestNode::catchain_new_block, src, height, std::move(data)); - } - void bad_block(td::UInt256 src) override { - td::actor::send_closure(id_, &TestNode::catchain_bad_block, src); - } - void broadcast(td::BufferSlice data) override { - td::actor::send_closure(id_, &TestNode::catchain_broadcast, std::move(data)); - } - Callback(td::actor::ActorId id) : id_(std::move(id)) { - } - - private: - td::actor::ActorId id_; - }; - - return std::make_unique(actor_id(this)); - } - - std::unique_ptr make_overlay_callback() { - class Callback : public ton::overlay::Overlays::Callback { - public: - void receive_message(td::UInt256 src, td::UInt256 overlay_id, td::BufferSlice data) override { - } - void receive_query(td::UInt256 src, td::uint64 query_id, td::UInt256 overlay_id, td::BufferSlice data) override { - } - - void receive_broadcast(td::UInt256 overlay_id, td::BufferSlice data) override { - td::actor::send_closure(id_, &TestNode::receive_broadcast, overlay_id, std::move(data)); - } - Callback(td::actor::ActorId id) : id_(std::move(id)) { - } - - private: - td::actor::ActorId id_; - }; - - return std::make_unique(actor_id(this)); - } - - public: - void set_broadcast_size(td::int32 size) { - broadcast_size_ = size; - } - void set_local_config(std::string str) { - local_config_ = str; - } - void set_global_config(std::string str) { - global_config_ = str; - } - void start_up() override { - alarm_timestamp() = td::Timestamp::in(1); - } - void alarm() override { - /*if (overlays_.size() > 0 && broadcast_size_ > 0) { - td::BufferSlice s(broadcast_size_); - td::Random::secure_bytes(s.as_slice()); - - td::actor::send_closure(overlay_manager_, &ton::overlay::OverlayManager::send_broadcast_fer, overlays_[0].first, - overlays_[0].second, ton::create_tl_object(s.as_slice().str())); - }*/ - for (auto &chain : catchains_) { - td::BufferSlice s(broadcast_size_); - td::Random::secure_bytes(s.as_slice()); - - td::actor::send_closure(chain, &ton::CatChainActor::add_event, std::move(s)); - } - alarm_timestamp() = td::Timestamp::in(1.0); - if (next_dht_dump_.is_in_past()) { - /*for (auto &node : dht_nodes_) { - char b[10240]; - td::StringBuilder sb({b, 10000}); - node->get_actor_unsafe().dump(sb); - LOG(DEBUG) << sb.as_cslice().c_str(); - }*/ - next_dht_dump_ = td::Timestamp::in(60.0); - } - } - TestNode() { - adnl_ = ton::adnl::Adnl::create("/var/ton-work/db.adnl"); - } - void run() { - auto L = td::read_file(local_config_).move_as_ok(); - auto lc_j = td::json_decode(L.as_slice()).move_as_ok(); - ton::ton_api::config_local lc; - ton::ton_api::from_json(lc, lc_j.get_object()).ensure(); - - auto G = td::read_file(global_config_).move_as_ok(); - auto gc_j = td::json_decode(G.as_slice()).move_as_ok(); - ton::ton_api::config_global gc; - ton::ton_api::from_json(gc, gc_j.get_object()).ensure(); - - for (auto &port : lc.udp_ports_) { - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_listening_udp_port, "0.0.0.0", - static_cast(port)); - } - /*if (!lc.net_) { - LOG(FATAL) << "local config does not contain NET section"; - }*/ - - //td::actor::send_closure(network_manager_, &ton::adnl::AdnlNetworkManager::load_local_config, std::move(lc.net_)); - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_ids_from_config, std::move(lc.local_ids_)); - if (gc.adnl_) { - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_static_nodes_from_config, - std::move(gc.adnl_->static_nodes_)); - } - if (!gc.dht_) { - LOG(FATAL) << "global config does not contain dht section"; - } - - for (auto &it : lc.dht_) { - if (it->get_id() == ton::ton_api::dht_config_local::ID) { - auto R = ton::dht::Dht::create_from_json( - ton::clone_tl_object(gc.dht_), ton::move_tl_object_as(it), adnl_.get()); - if (R.is_error()) { - LOG(FATAL) << "fail creating dht node: " << R.move_as_error(); - } - dht_nodes_.push_back(R.move_as_ok()); - } else { - auto I = ton::move_tl_object_as(it); - for (int i = 0; i < I->cnt_; i++) { - auto R = ton::dht::Dht::create_random(ton::clone_tl_object(gc.dht_), ton::clone_tl_object(I->addr_list_), - adnl_.get()); - if (R.is_error()) { - LOG(FATAL) << "fail creating dht node: " << R.move_as_error(); - } - dht_nodes_.push_back(R.move_as_ok()); - } - } - } - - CHECK(dht_nodes_.size() > 0); - - td::actor::send_closure(adnl_, &ton::adnl::Adnl::register_dht_node, dht_nodes_[0].get()); - //td::actor::send_closure(overlay_manager_, &ton::overlay::Overlays::register_dht_node, dht_nodes_[0].get()); - - overlay_manager_ = ton::overlay::Overlays::create(adnl_.get(), dht_nodes_[0].get()); - - for (auto &it : lc.public_overlays_) { - if (it->get_id() == ton::ton_api::overlay_config_local::ID) { - auto X = ton::move_tl_object_as(it); - auto id = ton::create_tl_object(X->name_.clone()); - auto Id = ton::move_tl_object_as(id); - auto sid = ton::adnl_short_id(Id); - overlays_.emplace_back(X->id_->id_, sid); - td::actor::send_closure(overlay_manager_, &ton::overlay::Overlays::create_public_overlay, X->id_->id_, - std::move(Id), make_overlay_callback()); - } else { - auto X = ton::move_tl_object_as(it); - for (int i = 0; i < X->cnt_; i++) { - auto pk = ton::adnl_generate_random_pk(); - auto local_id = ton::adnl_short_id(ton::get_public_key(pk)); - - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_id, std::move(pk), ton::clone_tl_object(X->addr_list_)); - - auto id = ton::create_tl_object(X->name_.clone()); - auto Id = ton::move_tl_object_as(id); - auto sid = ton::adnl_short_id(Id); - overlays_.emplace_back(local_id, sid); - td::actor::send_closure(overlay_manager_, &ton::overlay::Overlays::create_public_overlay, local_id, - std::move(Id), make_overlay_callback()); - } - } - } - - //auto C = ton::CatChainActor::create(nullptr, adnl_.get(), overlay_manager_.get(), - // std::vector>()); - - for (auto &it : lc.catchains_) { - auto tag = it->tag_; - for (auto &V : gc.catchains_) { - if (V->tag_ == tag) { - auto v = std::move(clone_tl_object(V)->nodes_); - auto C = ton::CatChainActor::create(make_catchain_callback(), adnl_.get(), overlay_manager_.get(), - std::move(v), it->id_->id_, tag); - catchains_.push_back(std::move(C)); - } - } - } - } -}; - -td::Result get_uint256(std::string str) { - if (str.size() != 64) { - return td::Status::Error("uint256 must have 64 bytes"); - } - td::UInt256 res; - for (size_t i = 0; i < 32; i++) { - res.raw[i] = static_cast(td::hex_to_int(str[2 * i]) * 16 + td::hex_to_int(str[2 * i + 1])); - } - return res; -} - -int main(int argc, char *argv[]) { - SET_VERBOSITY_LEVEL(verbosity_DEBUG); - td::set_default_failure_signal_handler().ensure(); - - td::actor::ActorOwn x; - - td::OptionParser p; - p.set_description("test basic adnl functionality"); - p.add_option('h', "help", "prints_help", [&]() { - char b[10240]; - td::StringBuilder sb({b, 10000}); - sb << p; - std::cout << sb.as_cslice().c_str(); - std::exit(2); - return td::Status::OK(); - }); - p.add_option('C', "global-config", "file to read global config", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_global_config, fname.str()); - return td::Status::OK(); - }); - p.add_option('c', "local-config", "file to read local config", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_local_config, fname.str()); - return td::Status::OK(); - }); - p.add_option('s', "broadcast-size", "size of broadcast", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_broadcast_size, std::atoi(fname.str().c_str())); - return td::Status::OK(); - }); - p.add_option('d', "daemonize", "set SIGHUP", [&]() { - td::set_signal_handler(td::SignalType::HangUp, [](int sig) { -#if TD_DARWIN || TD_LINUX - close(0); - setsid(); -#endif - }).ensure(); - return td::Status::OK(); - }); -#if TD_DARWIN || TD_LINUX - p.add_option('l', "logname", "log to file", [&](td::Slice fname) { - auto FileLog = td::FileFd::open(td::CSlice(fname.str().c_str()), - td::FileFd::Flags::Create | td::FileFd::Flags::Append | td::FileFd::Flags::Write) - .move_as_ok(); - - dup2(FileLog.get_native_fd().fd(), 1); - dup2(FileLog.get_native_fd().fd(), 2); - return td::Status::OK(); - }); -#endif - - td::actor::Scheduler scheduler({2}); - - scheduler.run_in_context([&] { x = td::actor::create_actor("testnode"); }); - - scheduler.run_in_context([&] { p.run(argc, argv).ensure(); }); - scheduler.run_in_context([&] { td::actor::send_closure(x, &TestNode::run); }); - scheduler.run(); - - return 0; -} diff --git a/test/test-rldp.cpp b/test/test-rldp.cpp index 11344c55..b07f5f7d 100644 --- a/test/test-rldp.cpp +++ b/test/test-rldp.cpp @@ -40,7 +40,7 @@ int main() { SET_VERBOSITY_LEVEL(verbosity_INFO); - std::string db_root_ = "tmp-ee"; + std::string db_root_ = "tmp-dir-test-rldp"; td::rmrf(db_root_).ignore(); td::mkdir(db_root_).ensure(); diff --git a/test/test-rldp2.cpp b/test/test-rldp2.cpp index 5367ffd3..646b27d5 100644 --- a/test/test-rldp2.cpp +++ b/test/test-rldp2.cpp @@ -40,7 +40,7 @@ int main() { SET_VERBOSITY_LEVEL(verbosity_INFO); - std::string db_root_ = "tmp-ee"; + std::string db_root_ = "tmp-dir-test-rldp2"; td::rmrf(db_root_).ignore(); td::mkdir(db_root_).ensure(); diff --git a/test/test-ton-collator.cpp b/test/test-ton-collator.cpp index 9ed5c781..b76dd5eb 100644 --- a/test/test-ton-collator.cpp +++ b/test/test-ton-collator.cpp @@ -50,7 +50,7 @@ #include "validator/fabric.h" #include "validator/impl/collator.h" -#include "crypto/vm/cp0.h" +#include "crypto/vm/vm.h" #include "crypto/block/block-db.h" #include "common/errorlog.h" @@ -408,7 +408,7 @@ int main(int argc, char *argv[]) { SET_VERBOSITY_LEVEL(verbosity_INFO); td::set_default_failure_signal_handler().ensure(); - CHECK(vm::init_op_cp0()); + vm::init_vm().ensure(); td::actor::ActorOwn x; diff --git a/test/test-validator-session-state.cpp b/test/test-validator-session-state.cpp index 819c1cc2..5ed08add 100644 --- a/test/test-validator-session-state.cpp +++ b/test/test-validator-session-state.cpp @@ -48,6 +48,7 @@ class Description : public ton::validatorsession::ValidatorSessionDescription { return 0; } void *alloc(size_t size, size_t align, bool temp) override { + size = (size + 15) / 16 * 16; td::uint32 idx = temp ? 1 : 0; auto s = pdata_cur_[idx].fetch_add(size); CHECK(s + size <= pdata_size_[idx]); diff --git a/test/test-validator-session.cpp b/test/test-validator-session.cpp deleted file mode 100644 index e986795a..00000000 --- a/test/test-validator-session.cpp +++ /dev/null @@ -1,356 +0,0 @@ -/* - This file is part of TON Blockchain source code. - - TON Blockchain is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - TON Blockchain is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with TON Blockchain. If not, see . - - In addition, as a special exception, the copyright holders give permission - to link the code of portions of this program with the OpenSSL library. - You must obey the GNU General Public License in all respects for all - of the code used other than OpenSSL. If you modify file(s) with this - exception, you may extend this exception to your version of the file(s), - but you are not obligated to do so. If you do not wish to do so, delete this - exception statement from your version. If you delete this exception statement - from all source files in the program, then also delete it here. - - Copyright 2017-2020 Telegram Systems LLP -*/ -#include "adnl/adnl.h" -#include "rldp/rldp.h" -#include "adnl/utils.hpp" -#include "auto/tl/ton_api_json.h" -#include "dht/dht.h" -#include "overlay/overlays.h" -#include "td/utils/OptionParser.h" -#include "td/utils/Time.h" -#include "td/utils/filesystem.h" -#include "td/utils/format.h" -#include "td/utils/Random.h" -#include "td/utils/port/signals.h" -#include "td/utils/port/FileFd.h" -#include "td/utils/overloaded.h" -#include "catchain/catchain.h" -#include "validator-session/validator-session.h" - -#if TD_DARWIN || TD_LINUX -#include -#endif -#include -#include - -class TestNode : public td::actor::Actor { - private: - td::actor::ActorOwn keyring_; - td::actor::ActorOwn adnl_; - td::actor::ActorOwn rldp_; - std::vector> dht_nodes_; - td::actor::ActorOwn overlay_manager_; - std::vector> validator_sessions_; - - std::string local_config_ = "ton-local.config"; - std::string global_config_ = "ton-global.config"; - - std::unique_ptr make_vs_callback() { - class Callback : public ton::validatorsession::ValidatorSession::Callback { - public: - void on_candidate(td::uint32 round, ton::PublicKeyHash source, - ton::validatorsession::ValidatorSessionRootHash root_hash, td::BufferSlice data, - td::BufferSlice extra, - td::Promise promise) override { - td::actor::send_closure(id_, &TestNode::on_candidate, round, source, root_hash, std::move(data), - std::move(extra), std::move(promise)); - } - void on_generate_slot(td::uint32 round, td::Promise promise) override { - td::actor::send_closure(id_, &TestNode::on_generate_slot, round, std::move(promise)); - } - void on_block_committed(td::uint32 round, ton::PublicKeyHash src, - ton::validatorsession::ValidatorSessionRootHash root_hash, - ton::validatorsession::ValidatorSessionFileHash file_hash, td::BufferSlice data, - std::vector> signatures, - ton::validatorsession::ValidatorSessionStats stats) override { - td::actor::send_closure(id_, &TestNode::on_block_committed, round, root_hash, std::move(data), - std::move(signatures)); - } - /*void on_missing_block_committed( - td::uint32 round, ton::validatorsession::ValidatorSessionRootHash root_hash, ton::validatorsession::ValidatorSessionFileHash file_hash, - td::BufferSlice data, std::vector> signatures) override { - td::actor::send_closure(id_, &TestNode::on_block_committed_abscent, round, root_hash, file_hash, - std::move(data), std::move(signatures)); - }*/ - void on_block_skipped(td::uint32 round) override { - td::actor::send_closure(id_, &TestNode::on_block_skipped, round); - } - void get_approved_candidate(ton::validatorsession::ValidatorSessionRootHash root_hash, - ton::validatorsession::ValidatorSessionFileHash file_hash, - ton::validatorsession::ValidatorSessionFileHash collated_data_file_hash, - td::Promise promise) override { - UNREACHABLE(); - } - - Callback(td::actor::ActorId id) : id_(std::move(id)) { - } - - private: - td::actor::ActorId id_; - }; - - return std::make_unique(actor_id(this)); - } - - td::uint64 height_ = 0; - - public: - void on_candidate(td::uint32 round, ton::PublicKeyHash source, - ton::validatorsession::ValidatorSessionRootHash root_hash, td::BufferSlice data, - td::BufferSlice collated, - td::Promise promise) { - auto sh = sha256_bits256(data.as_slice()); - auto B = ton::fetch_tl_object(std::move(data), true); - if (B.is_error()) { - promise.set_result( - ton::validatorsession::ValidatorSession::CandidateDecision{B.move_as_error().to_string(), td::BufferSlice()}); - return; - } - if (collated.size() != 32) { - promise.set_result( - ton::validatorsession::ValidatorSession::CandidateDecision{"bad collated data length", td::BufferSlice()}); - return; - } - td::Bits256 x; - x.as_slice().copy_from(collated.as_slice().truncate(32)); - if (x != sh) { - promise.set_result( - ton::validatorsession::ValidatorSession::CandidateDecision{"bad block hash", td::BufferSlice()}); - return; - } - auto block = B.move_as_ok(); - if (block->root_hash_ != root_hash) { - promise.set_result( - ton::validatorsession::ValidatorSession::CandidateDecision{"bad root hash", td::BufferSlice()}); - return; - } - if (block->root_hash_ != sha256_bits256(block->data_.as_slice())) { - promise.set_result( - ton::validatorsession::ValidatorSession::CandidateDecision{"bad root hash (2)", td::BufferSlice()}); - return; - } - if (block->height_ != static_cast(height_) + 1) { - promise.set_result( - ton::validatorsession::ValidatorSession::CandidateDecision{"bad root height", td::BufferSlice()}); - return; - } - promise.set_result(ton::validatorsession::ValidatorSession::CandidateDecision{0}); - } - void on_generate_slot(td::uint32 round, td::Promise promise) { - auto data = td::BufferSlice{10000}; - td::Random::secure_bytes(data.as_slice()); - auto root_hash = sha256_bits256(data.as_slice()); - auto block = - ton::create_tl_object(root_hash, height_ + 1, std::move(data)); - - auto B = ton::serialize_tl_object(block, true); - auto hash = sha256_bits256(B.as_slice()); - auto collated = td::BufferSlice{32}; - collated.as_slice().copy_from(as_slice(hash)); - - /*BlockId id; - BlockStatus status; - RootHash root_hash; - FileHash file_hash; - FileHash collated_file_hash; - td::BufferSlice data; - td::BufferSlice collated_data;*/ - auto collated_file_hash = td::sha256_bits256(collated.as_slice()); - ton::BlockCandidate candidate{ton::BlockIdExt{ton::BlockId{0, 0, 0}, root_hash, td::sha256_bits256(B.as_slice())}, - collated_file_hash, std::move(B), std::move(collated)}; - promise.set_result(std::move(candidate)); - } - void on_block_committed(td::uint32 round, ton::validatorsession::ValidatorSessionRootHash root_hash, - td::BufferSlice data, - std::vector> signatures) { - LOG(ERROR) << "COMITTED BLOCK: ROUND=" << round << " ROOT_HASH=" << root_hash - << " DATA_HASH=" << sha256_bits256(data.as_slice()) << " SIGNED BY " << signatures.size(); - } - void on_block_skipped(td::uint32 round) { - LOG(ERROR) << "SKIPPED ROUND=" << round; - } - - void set_local_config(std::string str) { - local_config_ = str; - } - void set_global_config(std::string str) { - global_config_ = str; - } - void start_up() override { - } - void alarm() override { - } - TestNode() { - } - void run() { - keyring_ = ton::keyring::Keyring::create("/var/ton-work/db.keyring"); - adnl_ = ton::adnl::Adnl::create("/var/ton-work/db.adnl", keyring_.get()); - rldp_ = ton::rldp::Rldp::create(adnl_.get()); - - auto L = td::read_file(local_config_).move_as_ok(); - auto lc_j = td::json_decode(L.as_slice()).move_as_ok(); - ton::ton_api::config_local lc; - ton::ton_api::from_json(lc, lc_j.get_object()).ensure(); - - auto G = td::read_file(global_config_).move_as_ok(); - auto gc_j = td::json_decode(G.as_slice()).move_as_ok(); - ton::ton_api::config_global gc; - ton::ton_api::from_json(gc, gc_j.get_object()).ensure(); - - for (auto &port : lc.udp_ports_) { - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_listening_udp_port, "0.0.0.0", - static_cast(port)); - } - /*if (!lc.net_) { - LOG(FATAL) << "local config does not contain NET section"; - }*/ - - //td::actor::send_closure(network_manager_, &ton::adnl::AdnlNetworkManager::load_local_config, std::move(lc.net_)); - //td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_ids_from_config, std::move(lc.local_ids_)); - if (gc.adnl_) { - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_static_nodes_from_config, - std::move(gc.adnl_->static_nodes_)); - } - if (!gc.dht_) { - LOG(FATAL) << "global config does not contain dht section"; - } - auto dhtR = ton::dht::Dht::create_global_config(std::move(gc.dht_)); - if (dhtR.is_error()) { - LOG(FATAL) << "bad dht config: " << dhtR.move_as_error(); - } - auto dht = dhtR.move_as_ok(); - - for (auto &it : lc.dht_) { - std::vector adnl_ids; - ton::ton_api::downcast_call( - *it.get(), td::overloaded( - [&](ton::ton_api::dht_config_local &obj) { - adnl_ids.push_back(ton::adnl::AdnlNodeIdShort{obj.id_->id_}); - }, - [&](ton::ton_api::dht_config_random_local &obj) { - auto addrR = ton::adnl::AdnlAddressList::create(std::move(obj.addr_list_)); - addrR.ensure(); - auto addr = addrR.move_as_ok(); - for (td::int32 i = 0; i < obj.cnt_; i++) { - auto pk = ton::PrivateKey{ton::privkeys::Ed25519::random()}; - auto pub = pk.compute_public_key(); - td::actor::send_closure(keyring_, &ton::keyring::Keyring::add_key, std::move(pk), false); - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_id, ton::adnl::AdnlNodeIdFull{pub}, - addr); - auto adnl_id = ton::adnl::AdnlNodeIdShort{pub.compute_short_id()}; - adnl_ids.push_back(adnl_id); - } - })); - for (auto &id : adnl_ids) { - auto R = ton::dht::Dht::create(id, "/var/ton-work/db/", dht, keyring_.get(), adnl_.get()); - R.ensure(); - dht_nodes_.push_back(R.move_as_ok()); - } - } - - CHECK(dht_nodes_.size() > 0); - - td::actor::send_closure(adnl_, &ton::adnl::Adnl::register_dht_node, dht_nodes_[0].get()); - //td::actor::send_closure(overlay_manager_, &ton::overlay::Overlays::register_dht_node, dht_nodes_[0].get()); - - overlay_manager_ = - ton::overlay::Overlays::create("/var/ton-work/db.overlays", keyring_.get(), adnl_.get(), dht_nodes_[0].get()); - - //auto C = ton::CatChainActor::create(nullptr, adnl_.get(), overlay_manager_.get(), - // std::vector>()); - - for (auto &it : lc.catchains_) { - auto tag = it->tag_; - for (auto &V : gc.catchains_) { - if (V->tag_ == tag) { - auto v = std::move(clone_tl_object(V)->nodes_); - - std::vector w; - w.resize(v.size()); - for (size_t i = 0; i < w.size(); i++) { - w[i].pub_key = ton::PublicKey{v[i]}; - w[i].adnl_id = ton::adnl::AdnlNodeIdShort{w[i].pub_key.compute_short_id()}; - w[i].weight = 1; - } - - auto C = ton::validatorsession::ValidatorSession::create( - tag, ton::PublicKeyHash{it->id_->id_}, std::move(w), make_vs_callback(), keyring_.get(), adnl_.get(), - rldp_.get(), overlay_manager_.get(), "/var/ton-work/db/"); - td::actor::send_closure(C, &ton::validatorsession::ValidatorSession::start); - validator_sessions_.emplace_back(std::move(C)); - } - } - } - } -}; - -int main(int argc, char *argv[]) { - SET_VERBOSITY_LEVEL(verbosity_INFO); - td::set_default_failure_signal_handler().ensure(); - - td::actor::ActorOwn x; - - td::OptionParser p; - p.set_description("test basic adnl functionality"); - p.add_option('h', "help", "prints_help", [&]() { - char b[10240]; - td::StringBuilder sb(td::MutableSlice{b, 10000}); - sb << p; - std::cout << sb.as_cslice().c_str(); - std::exit(2); - return td::Status::OK(); - }); - p.add_option('C', "global-config", "file to read global config", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_global_config, fname.str()); - return td::Status::OK(); - }); - p.add_option('c', "local-config", "file to read local config", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_local_config, fname.str()); - return td::Status::OK(); - }); - p.add_option('d', "daemonize", "set SIGHUP", [&]() { - td::set_signal_handler(td::SignalType::HangUp, [](int sig) { -#if TD_DARWIN || TD_LINUX - close(0); - setsid(); -#endif - }).ensure(); - return td::Status::OK(); - }); -#if TD_DARWIN || TD_LINUX - p.add_option('l', "logname", "log to file", [&](td::Slice fname) { - auto FileLog = td::FileFd::open(td::CSlice(fname.str().c_str()), - td::FileFd::Flags::Create | td::FileFd::Flags::Append | td::FileFd::Flags::Write) - .move_as_ok(); - - dup2(FileLog.get_native_fd().fd(), 1); - dup2(FileLog.get_native_fd().fd(), 2); - return td::Status::OK(); - }); -#endif - - td::actor::Scheduler scheduler({7}); - - scheduler.run_in_context([&] { x = td::actor::create_actor("testnode"); }); - - scheduler.run_in_context([&] { p.run(argc, argv).ensure(); }); - scheduler.run_in_context([&] { td::actor::send_closure(x, &TestNode::run); }); - scheduler.run(); - - return 0; -} diff --git a/test/test-validator.cpp b/test/test-validator.cpp deleted file mode 100644 index 7bc018f7..00000000 --- a/test/test-validator.cpp +++ /dev/null @@ -1,356 +0,0 @@ -/* - This file is part of TON Blockchain source code. - - TON Blockchain is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - TON Blockchain is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with TON Blockchain. If not, see . - - In addition, as a special exception, the copyright holders give permission - to link the code of portions of this program with the OpenSSL library. - You must obey the GNU General Public License in all respects for all - of the code used other than OpenSSL. If you modify file(s) with this - exception, you may extend this exception to your version of the file(s), - but you are not obligated to do so. If you do not wish to do so, delete this - exception statement from your version. If you delete this exception statement - from all source files in the program, then also delete it here. - - Copyright 2017-2020 Telegram Systems LLP -*/ -#include "adnl/adnl.h" -#include "rldp/rldp.h" -#include "adnl/utils.hpp" -#include "auto/tl/ton_api_json.h" -#include "auto/tl/ton_api.hpp" -#include "dht/dht.h" -#include "overlay/overlays.h" -#include "td/utils/OptionParser.h" -#include "td/utils/Time.h" -#include "td/utils/TsFileLog.h" -#include "td/utils/filesystem.h" -#include "td/utils/format.h" -#include "td/utils/Random.h" -#include "td/utils/port/signals.h" -#include "td/utils/port/FileFd.h" -#include "catchain/catchain.h" -#include "validator-session/validator-session.h" -#include "ton-node/ton-node.h" -#include "validator/manager.h" -#include "td/utils/filesystem.h" -#include "td/utils/ThreadSafeCounter.h" -#include "td/utils/port/path.h" -#include "crypto/vm/cp0.h" -#include "td/utils/overloaded.h" - -#include "memprof/memprof.h" - -#if TD_DARWIN || TD_LINUX -#include -#endif -#include -#include -#include - -class TestNode : public td::actor::Actor { - private: - td::actor::ActorOwn keyring_; - td::actor::ActorOwn adnl_; - td::actor::ActorOwn rldp_; - std::vector> dht_nodes_; - td::actor::ActorOwn overlay_manager_; - td::actor::ActorOwn validator_manager_; - td::actor::ActorOwn ton_node_; - - std::string local_config_ = "ton-local.config"; - std::string global_config_ = "ton-global.config"; - - std::string db_root_ = "/var/ton-work/db/"; - std::string zero_state_ = ""; - - public: - void set_local_config(std::string str) { - local_config_ = str; - } - void set_global_config(std::string str) { - global_config_ = str; - } - void set_db_root(std::string db_root) { - db_root_ = db_root; - } - void set_zero_state(std::string zero_state) { - zero_state_ = zero_state; - } - void start_up() override { - } - void alarm() override { - } - TestNode() { - } - void run() { - td::mkdir(db_root_).ensure(); - - keyring_ = ton::keyring::Keyring::create(db_root_ + "/keyring"); - adnl_ = ton::adnl::Adnl::create(db_root_, keyring_.get()); - rldp_ = ton::rldp::Rldp::create(adnl_.get()); - - auto L = td::read_file(local_config_).move_as_ok(); - auto lc_j = td::json_decode(L.as_slice()).move_as_ok(); - ton::ton_api::config_local lc; - ton::ton_api::from_json(lc, lc_j.get_object()).ensure(); - - auto G = td::read_file(global_config_).move_as_ok(); - auto gc_j = td::json_decode(G.as_slice()).move_as_ok(); - ton::ton_api::config_global gc; - ton::ton_api::from_json(gc, gc_j.get_object()).ensure(); - - for (auto &port : lc.udp_ports_) { - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_listening_udp_port, "0.0.0.0", - static_cast(port)); - } - /*if (!lc.net_) { - LOG(FATAL) << "local config does not contain NET section"; - }*/ - - //td::actor::send_closure(network_manager_, &ton::adnl::AdnlNetworkManager::load_local_config, std::move(lc.net_)); - //td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_ids_from_config, std::move(lc.local_ids_)); - for (auto &local_id : lc.local_ids_) { - auto pk = ton::PrivateKey{local_id->id_}; - auto pub = pk.compute_public_key(); - auto addr_list = ton::adnl::AdnlAddressList::create(local_id->addr_list_); - addr_list.ensure(); - td::actor::send_closure(keyring_, &ton::keyring::Keyring::add_key, std::move(pk), false); - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_id, ton::adnl::AdnlNodeIdFull{pub}, addr_list.move_as_ok()); - } - if (gc.adnl_) { - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_static_nodes_from_config, - std::move(gc.adnl_->static_nodes_)); - } - if (!gc.dht_) { - LOG(FATAL) << "global config does not contain dht section"; - } - - auto dhtR = ton::dht::Dht::create_global_config(std::move(gc.dht_)); - if (dhtR.is_error()) { - LOG(FATAL) << "bad dht config: " << dhtR.move_as_error(); - } - auto dht = dhtR.move_as_ok(); - - for (auto &it : lc.dht_) { - std::vector adnl_ids; - ton::ton_api::downcast_call( - *it.get(), td::overloaded( - [&](ton::ton_api::dht_config_local &obj) { - adnl_ids.push_back(ton::adnl::AdnlNodeIdShort{obj.id_->id_}); - }, - [&](ton::ton_api::dht_config_random_local &obj) { - auto addrR = ton::adnl::AdnlAddressList::create(std::move(obj.addr_list_)); - addrR.ensure(); - auto addr = addrR.move_as_ok(); - for (td::int32 i = 0; i < obj.cnt_; i++) { - auto pk = ton::PrivateKey{ton::privkeys::Ed25519::random()}; - auto pub = pk.compute_public_key(); - td::actor::send_closure(keyring_, &ton::keyring::Keyring::add_key, std::move(pk), false); - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_id, ton::adnl::AdnlNodeIdFull{pub}, - addr); - auto adnl_id = ton::adnl::AdnlNodeIdShort{pub.compute_short_id()}; - adnl_ids.push_back(adnl_id); - } - })); - for (auto &id : adnl_ids) { - auto R = ton::dht::Dht::create(id, db_root_, dht, keyring_.get(), adnl_.get()); - R.ensure(); - dht_nodes_.push_back(R.move_as_ok()); - } - } - - CHECK(dht_nodes_.size() > 0); - - td::actor::send_closure(adnl_, &ton::adnl::Adnl::register_dht_node, dht_nodes_[0].get()); - overlay_manager_ = ton::overlay::Overlays::create(db_root_, keyring_.get(), adnl_.get(), dht_nodes_[0].get()); - - CHECK(lc.validators_.size() <= 1); - CHECK(gc.validators_.size() <= 1); - - bool is_validator = false; - if (lc.validators_.size() == 1) { - CHECK(gc.validators_.size() == 1); - auto zero_state_id = - ton::BlockIdExt{ton::masterchainId, ton::shardIdAll, 0, gc.validators_[0]->zero_state_root_hash_, - gc.validators_[0]->zero_state_file_hash_}; - ton::PublicKeyHash id; - ton::adnl::AdnlNodeIdShort adnl_id; - ton::ton_api::downcast_call(*lc.validators_[0].get(), - td::overloaded( - [&](ton::ton_api::validator_config_local &cfg) { - id = ton::PublicKeyHash{cfg.id_->id_}; - adnl_id = ton::adnl::AdnlNodeIdShort{id}; - is_validator = true; - }, - [&](ton::ton_api::validator_config_random_local &cfg) { - auto privkey = ton::PrivateKey{ton::privkeys::Ed25519::random()}; - auto pubkey = ton::adnl::AdnlNodeIdFull{privkey.compute_public_key()}; - auto addrR = ton::adnl::AdnlAddressList::create(std::move(cfg.addr_list_)); - addrR.ensure(); - auto addr = addrR.move_as_ok(); - id = privkey.compute_short_id(); - td::actor::send_closure(keyring_, &ton::keyring::Keyring::add_key, - std::move(privkey), false); - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_id, pubkey, addr); - adnl_id = ton::adnl::AdnlNodeIdShort{id}; - })); - - auto opts = ton::ValidatorManagerOptions::create( - zero_state_id, std::vector{ton::ShardIdFull{ton::basechainId, ton::shardIdAll}}); - CHECK(!opts.is_null()); - opts.write().set_allow_blockchain_init(is_validator); - validator_manager_ = - ton::ValidatorManagerFactory::create(is_validator ? id : ton::PublicKeyHash::zero(), opts, db_root_, - keyring_.get(), adnl_.get(), rldp_.get(), overlay_manager_.get()); - ton_node_ = - ton::TonNodeManager::create(adnl_id, gc.validators_[0]->zero_state_file_hash_, adnl_.get(), rldp_.get(), - dht_nodes_[0].get(), overlay_manager_.get(), validator_manager_.get(), db_root_); - - for (auto &x : lc.liteservers_) { - auto pk = ton::PrivateKey{x->id_}; - auto pub_k = ton::adnl::AdnlNodeIdFull{pk.compute_public_key()}; - auto id = pub_k.compute_short_id(); - - td::actor::send_closure(keyring_, &ton::keyring::Keyring::add_key, std::move(pk), false); - td::actor::send_closure(adnl_, &ton::adnl::Adnl::add_id, pub_k, ton::adnl::AdnlAddressList{}); - td::actor::send_closure(validator_manager_, &ton::ValidatorManager::add_ext_server_id, id); - td::actor::send_closure(validator_manager_, &ton::ValidatorManager::add_ext_server_port, - static_cast(x->port_)); - } - } - } -}; - -td::Result get_uint256(std::string str) { - if (str.size() != 64) { - return td::Status::Error("uint256 must have 64 bytes"); - } - td::UInt256 res; - for (size_t i = 0; i < 32; i++) { - res.raw[i] = static_cast(td::hex_to_int(str[2 * i]) * 16 + td::hex_to_int(str[2 * i + 1])); - } - return res; -} - -std::atomic need_stats_flag{false}; -void need_stats(int sig) { - need_stats_flag.store(true); -} -void dump_memory_stats() { - if (!is_memprof_on()) { - return; - } - LOG(WARNING) << "memory_dump"; - std::vector v; - dump_alloc([&](const AllocInfo &info) { v.push_back(info); }); - std::sort(v.begin(), v.end(), [](const AllocInfo &a, const AllocInfo &b) { return a.size > b.size; }); - size_t total_size = 0; - size_t other_size = 0; - int cnt = 0; - for (auto &info : v) { - if (cnt++ < 50) { - LOG(WARNING) << td::format::as_size(info.size) << td::format::as_array(info.backtrace); - } else { - other_size += info.size; - } - total_size += info.size; - } - LOG(WARNING) << td::tag("other", td::format::as_size(other_size)); - LOG(WARNING) << td::tag("total", td::format::as_size(total_size)); - LOG(WARNING) << td::tag("total traces", get_ht_size()); - LOG(WARNING) << td::tag("fast_backtrace_success_rate", get_fast_backtrace_success_rate()); -} -void dump_stats() { - dump_memory_stats(); - LOG(WARNING) << td::NamedThreadSafeCounter::get_default(); -} - -int main(int argc, char *argv[]) { - SET_VERBOSITY_LEVEL(verbosity_INFO); - - td::set_default_failure_signal_handler().ensure(); - - CHECK(vm::init_op_cp0()); - - td::actor::ActorOwn x; - td::unique_ptr logger_; - SCOPE_EXIT { - td::log_interface = td::default_log_interface; - }; - - td::OptionParser p; - p.set_description("test basic adnl functionality"); - p.add_option('v', "verbosity", "set verbosity level", [&](td::Slice arg) { - int v = VERBOSITY_NAME(FATAL) + (td::to_integer(arg)); - SET_VERBOSITY_LEVEL(v); - return td::Status::OK(); - }); - p.add_option('h', "help", "prints_help", [&]() { - char b[10240]; - td::StringBuilder sb(td::MutableSlice{b, 10000}); - sb << p; - std::cout << sb.as_cslice().c_str(); - std::exit(2); - return td::Status::OK(); - }); - p.add_option('C', "global-config", "file to read global config", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_global_config, fname.str()); - return td::Status::OK(); - }); - p.add_option('c', "local-config", "file to read local config", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_local_config, fname.str()); - return td::Status::OK(); - }); - p.add_option('i', "id", "id of instance", [&](td::Slice fname) { return td::Status::OK(); }); - p.add_option('D', "db", "root for dbs", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_db_root, fname.str()); - return td::Status::OK(); - }); - p.add_option('z', "zero-state", "file with serialized zero state", [&](td::Slice fname) { - td::actor::send_closure(x, &TestNode::set_zero_state, fname.str()); - return td::Status::OK(); - }); - p.add_option('d', "daemonize", "set SIGHUP", [&]() { - td::set_signal_handler(td::SignalType::HangUp, [](int sig) { -#if TD_DARWIN || TD_LINUX - close(0); - setsid(); -#endif - }).ensure(); - return td::Status::OK(); - }); -#if TD_DARWIN || TD_LINUX - p.add_option('l', "logname", "log to file", [&](td::Slice fname) { - logger_ = td::TsFileLog::create(fname.str()).move_as_ok(); - td::log_interface = logger_.get(); - return td::Status::OK(); - }); -#endif - td::set_runtime_signal_handler(1, need_stats).ensure(); - - td::actor::Scheduler scheduler({7}); - - scheduler.run_in_context([&] { x = td::actor::create_actor("testnode"); }); - - scheduler.run_in_context([&] { p.run(argc, argv).ensure(); }); - scheduler.run_in_context([&] { td::actor::send_closure(x, &TestNode::run); }); - while (scheduler.run(1)) { - if (need_stats_flag.exchange(false)) { - dump_stats(); - } - } - - return 0; -} diff --git a/third-party/blst b/third-party/blst index e9dfc5ee..3dd0f804 160000 --- a/third-party/blst +++ b/third-party/blst @@ -1 +1 @@ -Subproject commit e9dfc5ee724b5b25d50a3b6226bee8c2c9d5e65d +Subproject commit 3dd0f804b1819e5d03fb22ca2e6fac105932043a diff --git a/third-party/rocksdb b/third-party/rocksdb index fcf3d75f..cb7a5e02 160000 --- a/third-party/rocksdb +++ b/third-party/rocksdb @@ -1 +1 @@ -Subproject commit fcf3d75f3f022a6a55ff1222d6b06f8518d38c7c +Subproject commit cb7a5e02edeb883193eb5b4901d5943f58e9add9 diff --git a/tl-utils/CMakeLists.txt b/tl-utils/CMakeLists.txt index b17b7dc9..d5c52d48 100644 --- a/tl-utils/CMakeLists.txt +++ b/tl-utils/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) set(TL_UTILS_SOURCE common-utils.hpp diff --git a/tl/CMakeLists.txt b/tl/CMakeLists.txt index 8adabeda..d0760a34 100644 --- a/tl/CMakeLists.txt +++ b/tl/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) add_subdirectory(generate) set_source_files_properties(${TL_TON_API} PROPERTIES GENERATED TRUE) diff --git a/tl/generate/CMakeLists.txt b/tl/generate/CMakeLists.txt index 61d66c93..083d3973 100644 --- a/tl/generate/CMakeLists.txt +++ b/tl/generate/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) file(MAKE_DIRECTORY auto/tl) diff --git a/tl/tl/tl_json.h b/tl/tl/tl_json.h index 489bd6e8..8eee3aad 100644 --- a/tl/tl/tl_json.h +++ b/tl/tl/tl_json.h @@ -108,12 +108,13 @@ inline Status from_json(std::int32_t &to, JsonValue from) { inline Status from_json(bool &to, JsonValue from) { if (from.type() != JsonValue::Type::Boolean) { int32 x; + auto type = from.type(); auto status = from_json(x, std::move(from)); if (status.is_ok()) { to = x != 0; return Status::OK(); } - return Status::Error(PSLICE() << "Expected bool, got " << from.type()); + return Status::Error(PSLICE() << "Expected bool, got " << type); } to = from.get_boolean(); return Status::OK(); diff --git a/tonlib/CMakeLists.txt b/tonlib/CMakeLists.txt index 72c59c4d..dc3e9030 100644 --- a/tonlib/CMakeLists.txt +++ b/tonlib/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) option(BUILD_SHARED_LIBS "Use \"OFF\" for a static build." ON) diff --git a/tonlib/test/offline.cpp b/tonlib/test/offline.cpp index a1e5a0f6..35a95f5b 100644 --- a/tonlib/test/offline.cpp +++ b/tonlib/test/offline.cpp @@ -609,7 +609,30 @@ TEST(Tonlib, ConfigCache) { "seqno": 0, "root_hash": "gj+B8wb/AmlPk1z1AhVI484rhrUpgSr2oSFIh56VoSg=", "file_hash": "Z+IKwYS54DmmJmesw/nAD5DzWadnOCMzee+kdgSYDOg=" - } + }, + "hardforks": [ + { + "file_hash": "jF3RTD+OyOoP+OI9oIjdV6M8EaOh9E+8+c3m5JkPYdg=", + "seqno": 5141579, + "root_hash": "6JSqIYIkW7y8IorxfbQBoXiuY3kXjcoYgQOxTJpjXXA=", + "workchain": -1, + "shard": -9223372036854775808 + }, + { + "file_hash": "WrNoMrn5UIVPDV/ug/VPjYatvde8TPvz5v1VYHCLPh8=", + "seqno": 5172980, + "root_hash": "054VCNNtUEwYGoRe1zjH+9b1q21/MeM+3fOo76Vcjes=", + "workchain": -1, + "shard": -9223372036854775808 + }, + { + "file_hash": "xRaxgUwgTXYFb16YnR+Q+VVsczLl6jmYwvzhQ/ncrh4=", + "seqno": 5176527, + "root_hash": "SoPLqMe9Dz26YJPOGDOHApTSe5i0kXFtRmRh/zPMGuI=", + "workchain": -1, + "shard": -9223372036854775808 + } + ] } })abc"; auto custom = R"abc({ diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index 0eabe142..9ec664bb 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -1971,7 +1971,7 @@ class RunEmulator : public TonlibQueryActor { ton::UnixTime now = account_state_->get_sync_time(); bool is_special = address.workchain == ton::masterchainId && config->is_special_smartcontract(address.addr); block::Account account(address.workchain, address.addr.bits()); - if (!account.unpack(std::move(shard_account), td::Ref(), now, is_special)) { + if (!account.unpack(std::move(shard_account), now, is_special)) { check(td::Status::Error("Can't unpack shard account")); return; } diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 3d029c93..0149e06e 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/utils/opcode-timing.cpp b/utils/opcode-timing.cpp index f50d7041..4f5c8ab4 100644 --- a/utils/opcode-timing.cpp +++ b/utils/opcode-timing.cpp @@ -64,7 +64,6 @@ typedef struct { vm::Stack prepare_stack(td::Slice command) { const auto cell = to_cell(command); - vm::init_op_cp0(); vm::DictionaryBase::get_empty_dictionary(); vm::Stack stack; try { @@ -80,7 +79,6 @@ vm::Stack prepare_stack(td::Slice command) { runInfo time_run_vm(td::Slice command, td::Ref stack) { const auto cell = to_cell(command); - vm::init_op_cp0(); vm::DictionaryBase::get_empty_dictionary(); CHECK(stack.is_unique()); try { @@ -171,6 +169,7 @@ int main(int argc, char** argv) { setup = argv[1]; code = argv[2]; } + vm::init_vm().ensure(); const auto time = timeInstruction(setup, code); std::cout << std::fixed << std::setprecision(9) << code << "," << time.runtime.mean << "," << time.runtime.stddev << "," << time.gasUsage.mean << "," << time.gasUsage.stddev << "," << (int)time.errored << std::endl; diff --git a/validator-engine-console/CMakeLists.txt b/validator-engine-console/CMakeLists.txt index 48716960..634a5b8b 100644 --- a/validator-engine-console/CMakeLists.txt +++ b/validator-engine-console/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) add_executable (validator-engine-console validator-engine-console.cpp validator-engine-console.h validator-engine-console-query.cpp diff --git a/validator-engine/CMakeLists.txt b/validator-engine/CMakeLists.txt index d369a2c3..5df720fe 100644 --- a/validator-engine/CMakeLists.txt +++ b/validator-engine/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/validator-engine/validator-engine.cpp b/validator-engine/validator-engine.cpp index aaa4f849..23cc9347 100644 --- a/validator-engine/validator-engine.cpp +++ b/validator-engine/validator-engine.cpp @@ -38,7 +38,7 @@ #include "common/errorlog.h" -#include "crypto/vm/cp0.h" +#include "crypto/vm/vm.h" #include "crypto/fift/utils.h" #include "td/utils/filesystem.h" @@ -3774,7 +3774,7 @@ int main(int argc, char *argv[]) { td::actor::Scheduler scheduler({threads}); scheduler.run_in_context([&] { - CHECK(vm::init_op_cp0()); + vm::init_vm().ensure(); x = td::actor::create_actor("validator-engine"); for (auto &act : acts) { act(); diff --git a/validator-session/CMakeLists.txt b/validator-session/CMakeLists.txt index 4931e464..c769f4d8 100644 --- a/validator-session/CMakeLists.txt +++ b/validator-session/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/validator/CMakeLists.txt b/validator/CMakeLists.txt index 573cd8e5..068569de 100644 --- a/validator/CMakeLists.txt +++ b/validator/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/validator/impl/CMakeLists.txt b/validator/impl/CMakeLists.txt index 459e7724..f4b967a8 100644 --- a/validator/impl/CMakeLists.txt +++ b/validator/impl/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) if (NOT OPENSSL_FOUND) find_package(OpenSSL REQUIRED) diff --git a/validator/impl/collator-impl.h b/validator/impl/collator-impl.h index abbe904c..c2088f47 100644 --- a/validator/impl/collator-impl.h +++ b/validator/impl/collator-impl.h @@ -202,7 +202,7 @@ class Collator final : public td::actor::Actor { // block::Account* lookup_account(td::ConstBitPtr addr) const; std::unique_ptr make_account_from(td::ConstBitPtr addr, Ref account, - Ref extra, bool force_create = false); + bool force_create); td::Result make_account(td::ConstBitPtr addr, bool force_create = false); td::actor::ActorId get_self() { return actor_id(this); @@ -269,10 +269,6 @@ class Collator final : public td::actor::Actor { void after_get_external_messages(td::Result>> res); td::Result register_external_message_cell(Ref ext_msg, const ExtMessage::Hash& ext_hash); // td::Result register_external_message(td::Slice ext_msg_boc); - td::Result register_ihr_message_cell(Ref ihr_msg); - td::Result register_ihr_message(td::Slice ihr_msg_boc); - td::Result register_shard_signatures_cell(Ref shard_blk_signatures); - td::Result register_shard_signatures(td::Slice shard_blk_signatures_boc); void register_new_msg(block::NewOutMsg msg); void register_new_msgs(block::transaction::Transaction& trans); bool process_new_messages(bool enqueue_only = false); @@ -285,7 +281,7 @@ class Collator final : public td::actor::Actor { bool enqueue_message(block::NewOutMsg msg, td::RefInt256 fwd_fees_remaining, ton::LogicalTime enqueued_lt); bool enqueue_transit_message(Ref msg, Ref old_msg_env, ton::AccountIdPrefixFull prev_prefix, ton::AccountIdPrefixFull cur_prefix, ton::AccountIdPrefixFull dest_prefix, - td::RefInt256 fwd_fee_remaining, ton::LogicalTime enqueued_lt); + td::RefInt256 fwd_fee_remaining); bool delete_out_msg_queue_msg(td::ConstBitPtr key); bool insert_in_msg(Ref in_msg); bool insert_out_msg(Ref out_msg); diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index 54941f21..d133278f 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -54,6 +54,20 @@ static inline bool dbg(int c) { return true; } +/** + * Constructs a Collator object. + * + * @param shard The shard of the new block. + * @param is_hardfork A boolean indicating whether the new block is a hardfork. + * @param min_ts The minimum UnixTime for the new block. + * @param min_masterchain_block_id The the minimum reference masterchain block. + * @param prev A vector of BlockIdExt representing the previous blocks. + * @param validator_set A reference to the ValidatorSet. + * @param collator_id The public key of the block creator. + * @param manager The ActorId of the ValidatorManager. + * @param timeout The timeout for the collator. + * @param promise The promise to return the result. + */ Collator::Collator(ShardIdFull shard, bool is_hardfork, UnixTime min_ts, BlockIdExt min_masterchain_block_id, std::vector prev, td::Ref validator_set, Ed25519_PublicKey collator_id, td::actor::ActorId manager, td::Timestamp timeout, @@ -77,6 +91,14 @@ Collator::Collator(ShardIdFull shard, bool is_hardfork, UnixTime min_ts, BlockId }) { } +/** + * Starts the Collator. + * + * This function initializes the Collator by performing various checks and queries to the ValidatorManager. + * It checks the validity of the shard, the previous blocks, and the workchain. + * If all checks pass, it proceeds to query the ValidatorManager for the top masterchain state block, shard states, block data, external messages, and shard blocks. + * The results of these queries are handled by corresponding callback functions. + */ void Collator::start_up() { LOG(DEBUG) << "Collator for shard " << shard_.to_str() << " started"; LOG(DEBUG) << "Previous block #1 is " << prev_blocks.at(0).to_str(); @@ -250,10 +272,21 @@ void Collator::start_up() { CHECK(pending); } +/** + * Raises an error when timeout is reached. + */ void Collator::alarm() { fatal_error(ErrorCode::timeout, "timeout"); } +/** + * Generates a string representation of a shard. + * + * @param workchain The workchain ID of the shard. + * @param shard The shard ID. + * + * @returns A string representation of the shard. + */ std::string show_shard(ton::WorkchainId workchain, ton::ShardId shard) { char tmp[128]; char* ptr = tmp + snprintf(tmp, 31, "%d:", workchain); @@ -268,14 +301,35 @@ std::string show_shard(ton::WorkchainId workchain, ton::ShardId shard) { return {tmp, ptr}; } +/** + * Returns a string representation of the shard of the given block. + * + * @param blk_id The BlockId object. + * + * @returns A string representation of the shard. + */ std::string show_shard(const ton::BlockId blk_id) { return show_shard(blk_id.workchain, blk_id.shard); } +/** + * Converts a `ShardIdFull` object to a string representation. + * + * @param blk_id The `ShardIdFull` object to convert. + * + * @returns The string representation of the `ShardIdFull` object. + */ std::string show_shard(const ton::ShardIdFull blk_id) { return show_shard(blk_id.workchain, blk_id.shard); } +/** + * Handles a fatal error encountered during block candidate generation. + * + * @param error The error encountered. + * + * @returns False to indicate that a fatal error occurred. + */ bool Collator::fatal_error(td::Status error) { error.ensure_error(); LOG(ERROR) << "cannot generate block candidate for " << show_shard(shard_) << " : " << error.to_string(); @@ -287,14 +341,39 @@ bool Collator::fatal_error(td::Status error) { return false; } +/** + * Handles a fatal error encountered during block candidate generation. + * + * @param err_code The error code. + * @param err_msg The error message. + * + * @returns False to indicate that a fatal error occurred. + */ bool Collator::fatal_error(int err_code, std::string err_msg) { return fatal_error(td::Status::Error(err_code, err_msg)); } +/** + * Handles a fatal error encountered during block candidate generation. + * + * @param err_msg The error message. + * @param err_code The error code. + * + * @returns False to indicate that a fatal error occurred. + */ bool Collator::fatal_error(std::string err_msg, int err_code) { return fatal_error(td::Status::Error(err_code, err_msg)); } +/** + * Checks if there are any pending tasks. + * + * If there are no pending tasks, it continues collation. + * If collation fails, it raises a fatal error. + * If an exception is caught during collation, it raises a fatal error with the corresponding error message. + * + * @returns None + */ void Collator::check_pending() { // LOG(DEBUG) << "pending = " << pending; if (!pending) { @@ -309,6 +388,13 @@ void Collator::check_pending() { } } +/** + * Registers a masterchain state. + * + * @param other_mc_state The masterchain state to register. + * + * @returns True if the registration is successful, false otherwise. + */ bool Collator::register_mc_state(Ref other_mc_state) { if (other_mc_state.is_null() || mc_state_.is_null()) { return false; @@ -334,6 +420,14 @@ bool Collator::register_mc_state(Ref other_mc_state) { return true; } +/** + * Requests the auxiliary masterchain state. + * + * @param seqno The seqno of the block. + * @param state A reference to the auxiliary masterchain state. + * + * @returns True if the auxiliary masterchain state is successfully requested, false otherwise. + */ bool Collator::request_aux_mc_state(BlockSeqno seqno, Ref& state) { if (mc_state_.is_null()) { return fatal_error(PSTRING() << "cannot find masterchain block with seqno " << seqno @@ -366,6 +460,13 @@ bool Collator::request_aux_mc_state(BlockSeqno seqno, Ref& st return true; } +/** + * Retrieves the auxiliary masterchain state for a given block sequence number. + * + * @param seqno The sequence number of the block. + * + * @returns A reference to the auxiliary masterchain state if found, otherwise an empty reference. + */ Ref Collator::get_aux_mc_state(BlockSeqno seqno) const { auto it = aux_mc_states_.find(seqno); if (it != aux_mc_states_.end()) { @@ -375,6 +476,13 @@ Ref Collator::get_aux_mc_state(BlockSeqno seqno) const { } } +/** + * Callback function called after retrieving the auxiliary shard state. + * Handles the retrieved shard state and performs necessary checks and registrations. + * + * @param blkid The BlockIdExt of the shard state. + * @param res The result of retrieving the shard state. + */ void Collator::after_get_aux_shard_state(ton::BlockIdExt blkid, td::Result> res) { LOG(DEBUG) << "in Collator::after_get_aux_shard_state(" << blkid.to_str() << ")"; --pending; @@ -400,6 +508,14 @@ void Collator::after_get_aux_shard_state(ton::BlockIdExt blkid, td::Result, BlockIdExt>> res) { LOG(DEBUG) << "in Collator::after_get_mc_state()"; --pending; @@ -455,6 +576,12 @@ void Collator::after_get_mc_state(td::Result, Bl check_pending(); } +/** + * Callback function called after retrieving the shard state for a previous block. + * + * @param idx The index of the previous shard block (0 or 1). + * @param res The retrieved shard state. + */ void Collator::after_get_shard_state(int idx, td::Result> res) { LOG(DEBUG) << "in Collator::after_get_shard_state(" << idx << ")"; --pending; @@ -482,6 +609,12 @@ void Collator::after_get_shard_state(int idx, td::Result> res) { check_pending(); } +/** + * Callback function called after retrieving block data for a previous block. + * + * @param idx The index of the previous block (0 or 1). + * @param res The retreived block data. + */ void Collator::after_get_block_data(int idx, td::Result> res) { LOG(DEBUG) << "in Collator::after_get_block_data(" << idx << ")"; --pending; @@ -513,6 +646,11 @@ void Collator::after_get_block_data(int idx, td::Result> res) { check_pending(); } +/** + * Callback function called after retrieving shard block descriptions for masterchain. + * + * @param res The retrieved shard block descriptions. + */ void Collator::after_get_shard_blocks(td::Result>> res) { --pending; if (res.is_error()) { @@ -525,6 +663,11 @@ void Collator::after_get_shard_blocks(td::Resultget_neighbor_shard_hash_ids(shard_); @@ -634,6 +787,12 @@ bool Collator::request_neighbor_msg_queues() { return true; } +/** + * Handles the result of obtaining the outbound queue for a neighbor. + * + * @param i The index of the neighbor. + * @param res The obtained outbound queue. + */ void Collator::got_neighbor_out_queue(int i, td::Result> res) { LOG(DEBUG) << "obtained outbound queue for neighbor #" << i; --pending; @@ -692,6 +851,12 @@ void Collator::got_neighbor_out_queue(int i, td::Result> res) check_pending(); } +/** + * Unpacks and merges the states of two previous blocks. + * Used if the block is after_merge. + * + * @returns True if the unpacking and merging was successful, false otherwise. + */ bool Collator::unpack_merge_last_state() { LOG(DEBUG) << "unpack/merge last states"; // 0. mechanically merge two ShardStateUnsplit into split_state constructor @@ -730,6 +895,12 @@ bool Collator::unpack_merge_last_state() { return import_shard_state_data(ss0); } +/** + * Unpacks the state of the previous block. + * Used if the block is not after_merge. + * + * @returns True if the unpacking is successful, false otherwise. + */ bool Collator::unpack_last_state() { if (after_merge_) { if (!unpack_merge_last_state()) { @@ -749,6 +920,15 @@ bool Collator::unpack_last_state() { import_shard_state_data(ss); } +/** + * Unpacks the state of a previous block and performs necessary checks. + * + * @param ss The ShardState object to unpack the state into. + * @param blkid The BlockIdExt of the previous block. + * @param prev_state_root The root of the state. + * + * @returns True if the unpacking and checks are successful, false otherwise. + */ bool Collator::unpack_one_last_state(block::ShardState& ss, BlockIdExt blkid, Ref prev_state_root) { auto res = ss.unpack_state_ext(blkid, std::move(prev_state_root), global_id_, prev_mc_block_seqno, after_split_, after_split_ | after_merge_, [self = this](ton::BlockSeqno mc_seqno) { @@ -767,6 +947,14 @@ bool Collator::unpack_one_last_state(block::ShardState& ss, BlockIdExt blkid, Re return true; } +/** + * Splits the state of previous block. + * Used if the block is after_split. + * + * @param ss The ShardState object representing the previous state. The result is stored here. + * + * @returns True if the split operation is successful, false otherwise. + */ bool Collator::split_last_state(block::ShardState& ss) { LOG(INFO) << "Splitting previous state " << ss.id_.to_str() << " to subshard " << shard_.to_str(); CHECK(after_split_); @@ -788,11 +976,19 @@ bool Collator::split_last_state(block::ShardState& ss) { return true; } -// SETS: account_dict, shard_libraries_, mc_state_extra -// total_balance_ = old_total_balance_, total_validator_fees_ -// SETS: overload_history_, underload_history_ -// SETS: prev_state_utime_, prev_state_lt_, prev_vert_seqno_ -// SETS: out_msg_queue, processed_upto_, ihr_pending +/** + * Imports the shard state data into the Collator object. + * + * SETS: account_dict, shard_libraries_, mc_state_extra + * total_balance_ = old_total_balance_, total_validator_fees_ + * SETS: overload_history_, underload_history_ + * SETS: prev_state_utime_, prev_state_lt_, prev_vert_seqno_ + * SETS: out_msg_queue, processed_upto_, ihr_pending + * + * @param ss The ShardState object containing the shard state data. + * + * @returns True if the import was successful, False otherwise. + */ bool Collator::import_shard_state_data(block::ShardState& ss) { account_dict = std::move(ss.account_dict_); shard_libraries_ = std::move(ss.shard_libraries_); @@ -813,6 +1009,12 @@ bool Collator::import_shard_state_data(block::ShardState& ss) { return true; } +/** + * Adds trivials neighbor after merging two shards. + * Trivial neighbors are the two previous blocks. + * + * @returns True if the operation is successful, false otherwise. + */ bool Collator::add_trivial_neighbor_after_merge() { LOG(DEBUG) << "in add_trivial_neighbor_after_merge()"; CHECK(prev_blocks.size() == 2); @@ -847,6 +1049,12 @@ bool Collator::add_trivial_neighbor_after_merge() { return true; } +/** + * Adds a trivial neighbor. + * A trivial neighbor is the previous block. + * + * @returns True if the operation is successful, false otherwise. + */ bool Collator::add_trivial_neighbor() { LOG(DEBUG) << "in add_trivial_neighbor()"; if (after_merge_) { @@ -982,6 +1190,15 @@ bool Collator::add_trivial_neighbor() { return true; } +/** + * Checks the previous block against the block registered in the masterchain. + * + * @param listed The BlockIdExt of the top block of this shard registered in the masterchain. + * @param prev The BlockIdExt of the previous block. + * @param chk_chain_len Flag indicating whether to check the chain length. + * + * @returns True if the previous block is valid, false otherwise. + */ bool Collator::check_prev_block(const BlockIdExt& listed, const BlockIdExt& prev, bool chk_chain_len) { if (listed.seqno() > prev.seqno()) { return fatal_error(PSTRING() << "cannot generate a shardchain block after previous block " << prev.to_str() @@ -1001,6 +1218,14 @@ bool Collator::check_prev_block(const BlockIdExt& listed, const BlockIdExt& prev return true; } +/** + * Checks the previous block against the block registered in the masterchain. + * + * @param listed The BlockIdExt of the top block of this shard registered in the masterchain. + * @param prev The BlockIdExt of the previous block. + * + * @returns True if the previous block is equal to the one registered in the masterchain, false otherwise. + */ bool Collator::check_prev_block_exact(const BlockIdExt& listed, const BlockIdExt& prev) { if (listed != prev) { return fatal_error(PSTRING() << "cannot generate shardchain block for shard " << shard_.to_str() @@ -1011,6 +1236,11 @@ bool Collator::check_prev_block_exact(const BlockIdExt& listed, const BlockIdExt return true; } +/** + * Checks the validity of the shard configuration of the current shard. + * + * @returns True if the shard configuration is valid, false otherwise. + */ bool Collator::check_this_shard_mc_info() { wc_info_ = config_->get_workchain_info(workchain()); if (wc_info_.is_null()) { @@ -1145,6 +1375,11 @@ bool Collator::check_this_shard_mc_info() { return true; } +/** + * Initializes the block limits for the collator. + * + * @returns True if the block limits were successfully initialized, false otherwise. + */ bool Collator::init_block_limits() { CHECK(block_limits_); CHECK(state_usage_tree_); @@ -1153,6 +1388,11 @@ bool Collator::init_block_limits() { return true; } +/** + * Performs pre-initialization steps for the Collator. + * + * @returns True if pre-initialization is successful, false otherwise. + */ bool Collator::do_preinit() { CHECK(prev_blocks.size() == 1U + after_merge_); last_block_seqno = prev_blocks[0].seqno(); @@ -1209,6 +1449,12 @@ bool Collator::do_preinit() { return true; } +/** + * Adjusts the shard configuration by adding new workchains to the shard configuration in the masterchain state. + * Used in masterchain collator. + * + * @returns True if the shard configuration was successfully adjusted, false otherwise. + */ bool Collator::adjust_shard_config() { CHECK(is_masterchain() && config_ && shard_conf_); const block::WorkchainSet& wset = config_->get_workchain_list(); @@ -1237,12 +1483,30 @@ bool Collator::adjust_shard_config() { return true; } +/** + * Compares two ShardTopBlockDescription references based on their block IDs. + * + * @param a The first ShardTopBlockDescription reference. + * @param b The second ShardTopBlockDescription reference. + * + * @returns True if a is considered less than b, false otherwise. + */ static bool cmp_shard_block_descr_ref(const Ref& a, const Ref& b) { BlockId x = a->block_id().id, y = b->block_id().id; return x.workchain < y.workchain || (x.workchain == y.workchain && (x.shard < y.shard || (x.shard == y.shard && x.seqno > y.seqno))); } +/** + * Stores the fees imported from a shard blocks to `fees_import_dict_`. + * Used in masterchain collator. + * + * @param shard The shard identifier. + * @param fees The fees imported from the block. + * @param created The fee for creating shard blocks. + * + * @returns True if the fees were successfully stored, false otherwise. + */ bool Collator::store_shard_fees(ShardIdFull shard, const block::CurrencyCollection& fees, const block::CurrencyCollection& created) { if (shard.is_valid() && fees.is_valid()) { @@ -1258,6 +1522,14 @@ bool Collator::store_shard_fees(ShardIdFull shard, const block::CurrencyCollecti } } +/** + * Stores the fees imported from a shard blocks to `fees_import_dict_`. + * Used in masterchain collator. + * + * @param descr A reference to the McShardHash object containing the shard information. + * + * @returns True if the shard fees and funds created were successfully stored, false otherwise. + */ bool Collator::store_shard_fees(Ref descr) { CHECK(descr.not_null()); CHECK(descr->fees_collected_.is_valid()); @@ -1266,6 +1538,11 @@ bool Collator::store_shard_fees(Ref descr) { return true; } +/** + * Imports new top shard blocks and updates the shard configuration. + * + * @returns True if the import was successful, false otherwise. + */ bool Collator::import_new_shard_top_blocks() { if (shard_block_descr_.empty()) { return true; @@ -1404,6 +1681,13 @@ bool Collator::import_new_shard_top_blocks() { return true; } +/** + * Registers the shard block creators to block_create_count_ + * + * @param creator_list A vector of Bits256 representing the shard block creators. + * + * @returns True if the registration was successful, False otherwise. + */ bool Collator::register_shard_block_creators(std::vector creator_list) { for (const auto& x : creator_list) { LOG(DEBUG) << "registering block creator " << x.to_hex(); @@ -1418,6 +1702,11 @@ bool Collator::register_shard_block_creators(std::vector creator_li return true; } +/** + * Performs pre-initialization and collates the new block. + * + * @returns True if collation is successful, false otherwise. + */ bool Collator::try_collate() { if (!preinit_complete) { LOG(DEBUG) << "running do_preinit()"; @@ -1477,6 +1766,14 @@ bool Collator::try_collate() { return do_collate(); } +/** + * Adjusts one entry from the processed up to information using the masterchain state that is referenced in the entry. + * + * @param proc The MsgProcessedUpto object. + * @param owner The shard that the MsgProcessesUpto information is taken from. + * + * @returns True if the processed up to information was successfully adjusted, false otherwise. + */ bool Collator::fix_one_processed_upto(block::MsgProcessedUpto& proc, const ton::ShardIdFull& owner) { if (proc.compute_shard_end_lt) { return true; @@ -1493,6 +1790,13 @@ bool Collator::fix_one_processed_upto(block::MsgProcessedUpto& proc, const ton:: return (bool)proc.compute_shard_end_lt; } +/** + * Adjusts the processed up to collection using the using the auxilliary masterchain states. + * + * @param upto The MsgProcessedUptoCollection to be adjusted. + * + * @returns True if all entries were successfully adjusted, False otherwise. + */ bool Collator::fix_processed_upto(block::MsgProcessedUptoCollection& upto) { for (auto& entry : upto.list) { if (!fix_one_processed_upto(entry, upto.owner)) { @@ -1502,6 +1806,14 @@ bool Collator::fix_processed_upto(block::MsgProcessedUptoCollection& upto) { return true; } +/** + * Initializes the unix time for the new block. + * + * Unix time is set based on the current time, and the timestamps of the previous blocks. + * If the previous block has a timestamp too far in the past then skipping importing external messages and new shard blocks is allowed. + * + * @returns True if the initialization is successful, false otherwise. + */ bool Collator::init_utime() { CHECK(config_); // consider unixtime and lt from previous block(s) of the same shardchain @@ -1547,6 +1859,9 @@ bool Collator::init_utime() { return true; } +/** + * Initializes the logical time of the new block. + */ bool Collator::init_lt() { CHECK(config_); start_lt = config_->lt; @@ -1569,6 +1884,11 @@ bool Collator::init_lt() { return true; } +/** + * Fetches and initializes the configuration parameters using the masterchain configuration. + * + * @returns True if the configuration parameters were successfully fetched and initialized, false otherwise. + */ bool Collator::fetch_config_params() { auto res = block::FetchConfigParams::fetch_config_params(*config_, &old_mparams_, &storage_prices_, &storage_phase_cfg_, @@ -1583,6 +1903,13 @@ bool Collator::fetch_config_params() { return true; } +/** + * Computes the amount of extra currencies to be minted. + * + * @param to_mint A reference to the CurrencyCollection object to store the minted amount. + * + * @returns True if the computation is successful, false otherwise. + */ bool Collator::compute_minted_amount(block::CurrencyCollection& to_mint) { if (!is_masterchain()) { return to_mint.set_zero(); @@ -1633,6 +1960,11 @@ bool Collator::compute_minted_amount(block::CurrencyCollection& to_mint) { return true; } +/** + * Initializes value_flow_ and computes fees for creating the new block. + * + * @returns True if the initialization is successful, false otherwise. + */ bool Collator::init_value_create() { value_flow_.created.set_zero(); value_flow_.minted.set_zero(); @@ -1663,6 +1995,9 @@ bool Collator::init_value_create() { return true; } +/** + * Performs the collation of the new block. + */ bool Collator::do_collate() { // After do_collate started it will not be interrupted by timeout alarm_timestamp() = td::Timestamp::never(); @@ -1786,6 +2121,14 @@ bool Collator::do_collate() { return true; } +/** + * Dequeues an outbound message from the message queue of this shard. + * + * @param msg_envelope The message envelope to dequeue. + * @param delivered_lt The logical time at which the message was delivered. + * + * @returns True if the message was successfully dequeued, false otherwise. + */ bool Collator::dequeue_message(Ref msg_envelope, ton::LogicalTime delivered_lt) { LOG(DEBUG) << "dequeueing outbound message"; vm::CellBuilder cb; @@ -1805,6 +2148,13 @@ bool Collator::dequeue_message(Ref msg_envelope, ton::LogicalTime deli } } +/** + * Cleans up the outbound message queue by removing messages that have already been imported by neighbors. + * + * Cleanup may be interrupted early if it takes too long. + * + * @returns True if the cleanup operation was successful, false otherwise. + */ bool Collator::out_msg_queue_cleanup() { LOG(INFO) << "cleaning outbound queue from messages already imported by neighbors"; if (verbosity >= 2) { @@ -1884,8 +2234,17 @@ bool Collator::out_msg_queue_cleanup() { return register_out_msg_queue_op(true); } +/** + * Creates a new Account object from the given address and serialized account data. + * + * @param addr A pointer to the 256-bit address of the account. + * @param account A cell slice with an account serialized using ShardAccount TLB-scheme. + * @param force_create A flag indicating whether to force the creation of a new account if `account` is null. + * + * @returns A unique pointer to the created Account object, or nullptr if the creation failed. + */ std::unique_ptr Collator::make_account_from(td::ConstBitPtr addr, Ref account, - Ref extra, bool force_create) { + bool force_create) { if (account.is_null() && !force_create) { return nullptr; } @@ -1894,19 +2253,35 @@ std::unique_ptr Collator::make_account_from(td::ConstBitPtr addr if (!ptr->init_new(now_)) { return nullptr; } - } else if (!ptr->unpack(std::move(account), std::move(extra), now_, - is_masterchain() && config_->is_special_smartcontract(addr))) { + } else if (!ptr->unpack(std::move(account), now_, is_masterchain() && config_->is_special_smartcontract(addr))) { return nullptr; } ptr->block_lt = start_lt; return ptr; } +/** + * Looks up an account in the Collator's account map. + * + * @param addr A pointer to the 256-bit address of the account to be looked up. + * + * @returns A pointer to the Account object if found, otherwise returns nullptr. + */ block::Account* Collator::lookup_account(td::ConstBitPtr addr) const { auto found = accounts.find(addr); return found != accounts.end() ? found->second.get() : nullptr; } +/** + * Retreives an Account object from the data in the shard state. + * Accounts are cached in the Collator's map. + * + * @param addr The 256-bit address of the account. + * @param force_create Flag indicating whether to create a new account if it does not exist. + * + * @returns A Result object containing a pointer to the account if found or created successfully, or an error status. + * Returns nullptr if account does not exist and not force_create. + */ td::Result Collator::make_account(td::ConstBitPtr addr, bool force_create) { auto found = lookup_account(addr); if (found) { @@ -1918,7 +2293,7 @@ td::Result Collator::make_account(td::ConstBitPtr addr, bool fo return nullptr; } } - auto new_acc = make_account_from(addr, std::move(dict_entry.first), std::move(dict_entry.second), force_create); + auto new_acc = make_account_from(addr, std::move(dict_entry.first), force_create); if (!new_acc) { return td::Status::Error(PSTRING() << "cannot load account " << addr.to_hex(256) << " from previous state"); } @@ -1934,6 +2309,11 @@ td::Result Collator::make_account(td::ConstBitPtr addr, bool fo return ins.first->second.get(); } +/** + * Combines account transactions and updates the ShardAccountBlocks and ShardAccounts. + * + * @returns True if the operation is successful, false otherwise. + */ bool Collator::combine_account_transactions() { vm::AugmentedDictionary dict{256, block::tlb::aug_ShardAccountBlocks}; for (auto& z : accounts) { @@ -2046,6 +2426,15 @@ bool Collator::combine_account_transactions() { return true; } +/** + * Creates a special transaction to recover a specified amount of currency to a destination address. + * + * @param amount The amount of currency to recover. + * @param dest_addr_cell The cell containing the destination address. + * @param in_msg The reference to the input message. + * + * @returns True if the special transaction was created successfully, false otherwise. + */ bool Collator::create_special_transaction(block::CurrencyCollection amount, Ref dest_addr_cell, Ref& in_msg) { if (amount.is_zero()) { @@ -2086,12 +2475,27 @@ bool Collator::create_special_transaction(block::CurrencyCollection amount, Ref< return true; } +/** + * Creates special transactions for retreiving fees and minted currencies. + * Used in masterchain collator. + * + * @returns True if both special transactions were + */ bool Collator::create_special_transactions() { CHECK(is_masterchain()); return create_special_transaction(value_flow_.recovered, config_->get_config_param(3, 1), recover_create_msg_) && create_special_transaction(value_flow_.minted, config_->get_config_param(2, 0), mint_msg_); } +/** + * Creates a tick-tock transaction for a given smart contract. + * + * @param smc_addr The address of the smart contract. + * @param req_start_lt The requested start logical time for the transaction. + * @param mask The value indicating wheter the thansaction is tick (mask == 2) or tock (mask == 1). + * + * @returns True if the transaction was created successfully, false otherwise. + */ bool Collator::create_ticktock_transaction(const ton::StdSmcAddress& smc_addr, ton::LogicalTime req_start_lt, int mask) { auto acc_res = make_account(smc_addr.cbits(), false); @@ -2145,6 +2549,13 @@ bool Collator::create_ticktock_transaction(const ton::StdSmcAddress& smc_addr, t return true; } +/** + * Creates an ordinary transaction using a given message. + * + * @param msg_root The root of the message to be processed serialized using Message TLB-scheme. + * + * @returns The root of the serialized transaction, or an empty reference if the transaction creation fails. + */ Ref Collator::create_ordinary_transaction(Ref msg_root) { ton::StdSmcAddress addr; auto cs = vm::load_cell_slice(msg_root); @@ -2219,8 +2630,23 @@ Ref Collator::create_ordinary_transaction(Ref msg_root) { return trans_root; } -// If td::status::error_code == 669 - Fatal Error block can not be produced -// if td::status::error_code == 701 - Transaction can not be included into block, but it's ok (external or too early internal) +/** + * Creates an ordinary transaction using given parameters. + * + * @param msg_root The root of the message to be processed serialized using Message TLB-scheme. + * @param acc The account for which the transaction is being created. + * @param utime The Unix time of the transaction. + * @param lt The minimal logical time of the transaction. + * @param storage_phase_cfg The configuration for the storage phase of the transaction. + * @param compute_phase_cfg The configuration for the compute phase of the transaction. + * @param action_phase_cfg The configuration for the action phase of the transaction. + * @param external Flag indicating if the message is external. + * @param after_lt The logical time after which the transaction should occur. Used only for external messages. + * + * @returns A Result object containing the created transaction. + * Returns error_code == 669 if the error is fatal and the block can not be produced. + * Returns error_code == 701 if the transaction can not be included into block, but it's ok (external or too early internal). + */ td::Result> Collator::impl_create_ordinary_transaction(Ref msg_root, block::Account* acc, UnixTime utime, LogicalTime lt, @@ -2301,6 +2727,11 @@ td::Result> Collator::impl_crea return std::move(trans); } +/** + * Updates the maximum logical time if the given logical time is greater than the current maximum logical time. + * + * @param lt The logical time to be compared. + */ void Collator::update_max_lt(ton::LogicalTime lt) { CHECK(lt >= start_lt); if (lt > max_lt) { @@ -2308,6 +2739,13 @@ void Collator::update_max_lt(ton::LogicalTime lt) { } } +/** + * Updates information on the last processed internal message with a new logical time and hash. + * + * @param new_lt_hash The new logical time and hash pair. + * + * @returns True if the last processed internal message was successfully updated, false otherwise. + */ bool Collator::update_last_proc_int_msg(const std::pair& new_lt_hash) { if (last_proc_int_msg_ < new_lt_hash) { last_proc_int_msg_ = new_lt_hash; @@ -2322,6 +2760,14 @@ bool Collator::update_last_proc_int_msg(const std::pair addr_ref) const { return is_our_address(block::tlb::t_MsgAddressInt.get_prefix(std::move(addr_ref))); } +/** + * Checks if the given account ID prefix belongs to the current shard. + * + * @param addr_pfx The account ID prefix to check. + * + * @returns True if the account ID prefix belongs to the current shard, False otherwise. + */ bool Collator::is_our_address(ton::AccountIdPrefixFull addr_pfx) const { return ton::shard_contains(shard_, addr_pfx); } +/** + * Checks if the given address belongs to the current shard. + * + * @param addr The address to check. + * + * @returns True if the address belongs to the current shard, False otherwise. + */ bool Collator::is_our_address(const ton::StdSmcAddress& addr) const { return ton::shard_contains(get_shard(), addr); } -// 1 = processed, 0 = enqueued, 3 = processed, all future messages must be enqueued +/** + * Processes a message generated in this block. + * + * @param msg The new message to be processed. + * @param enqueue_only Flag indicating whether the message should only be enqueued. + * @param is_special New message if creating a special transaction, nullptr otherwise. + * + * @returns Returns: + * 0 - message was enqueued. + * 1 - message was processed. + * 3 - message was processed, all future messages must be enqueued. + * -1 - error occured. + */ int Collator::process_one_new_message(block::NewOutMsg msg, bool enqueue_only, Ref* is_special) { Ref src, dest; bool enqueue, external; @@ -2460,11 +2939,22 @@ int Collator::process_one_new_message(block::NewOutMsg msg, bool enqueue_only, R return 1; } -// very similar to enqueue_message(), but for transit messages +/** + * Enqueues a transit message. + * Very similar to enqueue_message(), but for transit messages. + * + * @param msg The message to be enqueued. + * @param old_msg_env The previous message envelope. + * @param prev_prefix The account ID prefix for this shard. + * @param cur_prefix The account ID prefix for the next hop. + * @param dest_prefix The prefix of the destination account ID. + * @param fwd_fee_remaining The remaining forward fee. + * + * @returns True if the transit message is successfully enqueued, false otherwise. + */ bool Collator::enqueue_transit_message(Ref msg, Ref old_msg_env, ton::AccountIdPrefixFull prev_prefix, ton::AccountIdPrefixFull cur_prefix, - ton::AccountIdPrefixFull dest_prefix, td::RefInt256 fwd_fee_remaining, - ton::LogicalTime enqueued_lt) { + ton::AccountIdPrefixFull dest_prefix, td::RefInt256 fwd_fee_remaining) { LOG(DEBUG) << "enqueueing transit message " << msg->get_hash().bits().to_hex(256); bool requeue = is_our_address(prev_prefix); // 1. perform hypercube routing @@ -2535,6 +3025,13 @@ bool Collator::enqueue_transit_message(Ref msg, Ref old_msg_ return register_out_msg_queue_op(); } +/** + * Deletes a message from the outbound message queue. + * + * @param key The key of the message to be deleted. + * + * @returns True if the message was successfully deleted, false otherwise. + */ bool Collator::delete_out_msg_queue_msg(td::ConstBitPtr key) { Ref queue_rec; try { @@ -2550,6 +3047,17 @@ bool Collator::delete_out_msg_queue_msg(td::ConstBitPtr key) { return register_out_msg_queue_op(); } +/** + * Processes an inbound message from a neighbor's outbound queue. + * The message may create a transaction or be enqueued. + * + * @param enq_msg The inbound message serialized using EnqueuedMsg TLB-scheme. + * @param lt The logical time of the message. + * @param key The 32+64+256-bit key of the message. + * @param src_nb The description of the source neighbor shard. + * + * @returns True if the message was processed successfully, false otherwise. + */ bool Collator::process_inbound_message(Ref enq_msg, ton::LogicalTime lt, td::ConstBitPtr key, const block::McShardDescr& src_nb) { ton::LogicalTime enqueued_lt = 0; @@ -2676,7 +3184,7 @@ bool Collator::process_inbound_message(Ref enq_msg, ton::LogicalT // destination is outside our shard, relay transit message // (very similar to enqueue_message()) if (!enqueue_transit_message(std::move(env.msg), std::move(msg_env), cur_prefix, next_prefix, dest_prefix, - std::move(env.fwd_fee_remaining), max_lt)) { + std::move(env.fwd_fee_remaining))) { return fatal_error("cannot enqueue transit internal message with key "s + key.to_hex(352)); } return !our || delete_out_msg_queue_msg(key); @@ -2718,6 +3226,12 @@ bool Collator::process_inbound_message(Ref enq_msg, ton::LogicalT return true; } +/** + * Processes inbound internal messages from message queues of the neighbors. + * Messages are processed until the normal limit is reached, soft timeout is reached or there are no more messages. + * + * @returns True if the processing was successful, false otherwise. + */ bool Collator::process_inbound_internal_messages() { while (!block_full_ && !nb_out_msgs_->is_eof()) { block_full_ = !block_limit_status_->fits(block::ParamLimits::cl_normal); @@ -2752,6 +3266,12 @@ bool Collator::process_inbound_internal_messages() { return true; } +/** + * Processes inbound external messages. + * Messages are processed until the soft limit is reached, medium timeout is reached or there are no more messages. + * + * @returns True if the processing was successful, false otherwise. + */ bool Collator::process_inbound_external_messages() { if (skip_extmsg_) { LOG(INFO) << "skipping processing of inbound external messages"; @@ -2790,7 +3310,17 @@ bool Collator::process_inbound_external_messages() { return true; } -// 1 = processed, 0 = skipped, 3 = processed, all future messages must be skipped (block overflown) +/** + * Processes an external message. + * + * @param msg The message to be processed serialized as Message TLB-scheme. + * + * @returns The result of processing the message: + * -1 if a fatal error occurred. + * 0 if the message is rejected. + * 1 if the message was processed. + * 3 if the message was processed and all future messages must be skipped (block overflown). + */ int Collator::process_external_message(Ref msg) { auto cs = load_cell_slice(msg); td::RefInt256 fwd_fees; @@ -2827,7 +3357,13 @@ int Collator::process_external_message(Ref msg) { return 1; } -// inserts an InMsg into InMsgDescr +/** + * Inserts an InMsg into the block's InMsgDescr. + * + * @param in_msg The input message to be inserted. + * + * @returns True if the insertion is successful, false otherwise. + */ bool Collator::insert_in_msg(Ref in_msg) { if (verbosity > 2) { std::cerr << "InMsg being inserted into InMsgDescr: "; @@ -2862,7 +3398,13 @@ bool Collator::insert_in_msg(Ref in_msg) { ((in_descr_cnt_ & 63) || block_limit_status_->add_cell(in_msg_dict->get_root_cell())); } -// inserts an OutMsg into OutMsgDescr +/** + * Inserts an OutMsg into the block's OutMsgDescr. + * + * @param out_msg The outgoing message to be inserted. + * + * @returns True if the insertion was successful, false otherwise. + */ bool Collator::insert_out_msg(Ref out_msg) { if (verbosity > 2) { std::cerr << "OutMsg being inserted into OutMsgDescr: "; @@ -2885,6 +3427,14 @@ bool Collator::insert_out_msg(Ref out_msg) { return insert_out_msg(std::move(out_msg), msg->get_hash().bits()); } +/** + * Inserts an outgoing message into the block's OutMsgDescr dictionary. + * + * @param out_msg The outgoing message to be inserted. + * @param msg_hash The 256-bit hash of the outgoing message. + * + * @returns True if the insertion was successful, false otherwise. + */ bool Collator::insert_out_msg(Ref out_msg, td::ConstBitPtr msg_hash) { bool ok; try { @@ -2901,7 +3451,15 @@ bool Collator::insert_out_msg(Ref out_msg, td::ConstBitPtr msg_hash) { ((out_descr_cnt_ & 63) || block_limit_status_->add_cell(out_msg_dict->get_root_cell())); } -// enqueues a new Message into OutMsgDescr and OutMsgQueue +/** + * Enqueues a new message into the block's outbound message queue and OutMsgDescr. + * + * @param msg The new outbound message to enqueue. + * @param fwd_fees_remaining The remaining forward fees for the message. + * @param enqueued_lt The logical time at which the message is enqueued. + * + * @returns True if the message was successfully enqueued, false otherwise. + */ bool Collator::enqueue_message(block::NewOutMsg msg, td::RefInt256 fwd_fees_remaining, ton::LogicalTime enqueued_lt) { // 0. unpack src_addr and dest_addr block::gen::CommonMsgInfo::Record_int_msg_info info; @@ -2966,6 +3524,13 @@ bool Collator::enqueue_message(block::NewOutMsg msg, td::RefInt256 fwd_fees_rema return register_out_msg_queue_op(); } +/** + * Processes new messages that were generated in this block. + * + * @param enqueue_only If true, only enqueue the new messages without creating transactions. + * + * @returns True if all new messages were processed successfully, false otherwise. + */ bool Collator::process_new_messages(bool enqueue_only) { while (!new_msgs.empty()) { block::NewOutMsg msg = new_msgs.top(); @@ -2987,6 +3552,11 @@ bool Collator::process_new_messages(bool enqueue_only) { return true; } +/** + * Registers a new output message. + * + * @param new_msg The new output message to be registered. + */ void Collator::register_new_msg(block::NewOutMsg new_msg) { if (new_msg.lt < min_new_msg_lt) { min_new_msg_lt = new_msg.lt; @@ -2995,6 +3565,11 @@ void Collator::register_new_msg(block::NewOutMsg new_msg) { block_limit_status_->extra_out_msgs++; } +/** + * Registers new messages that were created in the transaction. + * + * @param trans The transaction containing the messages. + */ void Collator::register_new_msgs(block::transaction::Transaction& trans) { CHECK(trans.root.not_null()); for (unsigned i = 0; i < trans.out_msgs.size(); i++) { @@ -3008,6 +3583,15 @@ void Collator::register_new_msgs(block::transaction::Transaction& trans) { * */ +/** + * Stores an external block reference to a CellBuilder object. + * + * @param cb The CellBuilder object to store the reference in. + * @param id_ext The block ID. + * @param end_lt The end logical time of the block. + * + * @returns True if the reference was successfully stored, false otherwise. + */ bool store_ext_blk_ref_to(vm::CellBuilder& cb, const ton::BlockIdExt& id_ext, ton::LogicalTime end_lt) { return cb.store_long_bool(end_lt, 64) // end_lt:uint64 && cb.store_long_bool(id_ext.seqno(), 32) // seq_no:uint32 @@ -3015,6 +3599,15 @@ bool store_ext_blk_ref_to(vm::CellBuilder& cb, const ton::BlockIdExt& id_ext, to && cb.store_bits_bool(id_ext.file_hash); // file_hash:bits256 } +/** + * Stores an external block reference to a CellBuilder. + * + * @param cb The CellBuilder to store the reference in. + * @param id_ext The block ID. + * @param blk_root The root of the block. + * + * @returns True if the reference was successfully stored, false otherwise. + */ bool store_ext_blk_ref_to(vm::CellBuilder& cb, const ton::BlockIdExt& id_ext, Ref blk_root) { block::gen::Block::Record rec; block::gen::BlockInfo::Record info; @@ -3029,6 +3622,19 @@ bool store_ext_blk_ref_to(vm::CellBuilder& cb, const ton::BlockIdExt& id_ext, Re && store_ext_blk_ref_to(cb, id_ext, info.end_lt); // store } +/** + * Updates one shard description in the masterchain shard configuration. + * Used in masterchain collator. + * + * @param info The shard information to be updated. + * @param sibling The sibling shard information. + * @param wc_info The workchain information. + * @param now The current Unix time. + * @param ccvc The Catchain validators configuration. + * @param update_cc Flag indicating whether to update the Catchain seqno. + * + * @returns A boolean value indicating whether the shard description has changed. + */ static int update_one_shard(block::McShardHash& info, const block::McShardHash* sibling, const block::WorkchainInfo* wc_info, ton::UnixTime now, const block::CatchainValidatorsConfig& ccvc, bool update_cc) { @@ -3081,6 +3687,16 @@ static int update_one_shard(block::McShardHash& info, const block::McShardHash* return changed; } +/** + * Updates the shard configuration in the masterchain. + * Used in masterchain collator. + * + * @param wc_set The set of workchains. + * @param ccvc The Catchain validators configuration. + * @param update_cc A boolean indicating whether to update the Catchain seqno. + * + * @returns True if the shard configuration was successfully updated, false otherwise. + */ bool Collator::update_shard_config(const block::WorkchainSet& wc_set, const block::CatchainValidatorsConfig& ccvc, bool update_cc) { LOG(DEBUG) << "updating shard configuration (update_cc=" << update_cc << ")"; @@ -3107,6 +3723,12 @@ bool Collator::update_shard_config(const block::WorkchainSet& wc_set, const bloc }); } +/** + * Creates McStateExtra. + * Used in masterchain collator. + * + * @returns True if the creation is successful, false otherwise. + */ bool Collator::create_mc_state_extra() { if (!is_masterchain()) { CHECK(mc_state_extra_.is_null()); @@ -3325,6 +3947,16 @@ bool Collator::create_mc_state_extra() { return true; } +/** + * Updates the `block_creator_stats_` for a given key. + * Used in masterchain collator. + * + * @param key The 256-bit key of the creator. + * @param shard_incr The increment value for the shardchain block counter. + * @param mc_incr The increment value for the masterchain block counter. + * + * @returns True if the block creator count was successfully updated, false otherwise. + */ bool Collator::update_block_creator_count(td::ConstBitPtr key, unsigned shard_incr, unsigned mc_incr) { LOG(DEBUG) << "increasing CreatorStats for " << key.to_hex(256) << " by (" << mc_incr << ", " << shard_incr << ")"; block::DiscountedCounter mc_cnt, shard_cnt; @@ -3351,6 +3983,17 @@ bool Collator::update_block_creator_count(td::ConstBitPtr key, unsigned shard_in return true; } +/** + * Determines if the creator count is outdated for a given key. + * Used in masterchain collator. + * + * @param key The key of the creator. + * @param cs The CellSlice containing the CreatorStats. + * + * @returns -1 if there was a fatal error. + * 0 if the CreatorStats should be removed as they are stale, + * 1 if the CreatorStats are still valid. + */ int Collator::creator_count_outdated(td::ConstBitPtr key, vm::CellSlice& cs) { block::DiscountedCounter mc_cnt, shard_cnt; if (!(block::fetch_CreatorStats(cs, mc_cnt, shard_cnt) && cs.empty_ext())) { @@ -3369,6 +4012,11 @@ int Collator::creator_count_outdated(td::ConstBitPtr key, vm::CellSlice& cs) { } } +/** + * Updates `block_create_stats_` using information about creators of all new blocks. + * + * @returns True if the update was successful, false otherwise. + */ bool Collator::update_block_creator_stats() { if (!create_stats_enabled_) { return true; @@ -3419,10 +4067,25 @@ bool Collator::update_block_creator_stats() { return cnt >= 0; } +/** + * Retrieves the global masterchain config from the config contract. + * + * @param cfg_addr The address of the configuration smart contract. + * + * @returns A Result object containing a reference to the configuration data. + */ td::Result> Collator::get_config_data_from_smc(const ton::StdSmcAddress& cfg_addr) { return block::get_config_data_from_smc(account_dict->lookup_ref(cfg_addr)); } +/** + * Fetches and validates a new configuration from the configuration smart contract. + * + * @param cfg_addr The address of the configuration smart contract. + * @param new_config A reference to a vm::Cell object to store the new configuration. + * + * @returns True if the new configuration was successfully fetched, false otherwise. + */ bool Collator::try_fetch_new_config(const ton::StdSmcAddress& cfg_addr, Ref& new_config) { auto cfg_res = get_config_data_from_smc(cfg_addr); if (cfg_res.is_error()) { @@ -3440,11 +4103,24 @@ bool Collator::try_fetch_new_config(const ton::StdSmcAddress& cfg_addr, Reflookup(key, 256); @@ -3527,6 +4213,17 @@ bool Collator::remove_public_library(td::ConstBitPtr key, td::ConstBitPtr addr) return true; } +/** + * Processes adding a library to the collection of public libraries of an account. + * Updates the global collection of public libraries. + * Used in masterchain collator. + * + * @param key The key of the public library. + * @param addr The address of the account where the library is added. + * @param library The root cell of the library. + * + * @returns True if the public library was successfully added, false otherwise. + */ bool Collator::add_public_library(td::ConstBitPtr key, td::ConstBitPtr addr, Ref library) { LOG(INFO) << "Adding public library " << key.to_hex(256) << " of account " << addr.to_hex(256); CHECK(library.not_null() && !library->get_hash().bits().compare(key, 256)); @@ -3565,6 +4262,17 @@ bool Collator::add_public_library(td::ConstBitPtr key, td::ConstBitPtr addr, Ref return true; } +/** + * Processes changes in libraries of an account. + * Updates the global collection of public libraries. + * Used in masterchain collator. + * + * @param orig_libs The original libraries of the account. + * @param final_libs The final libraries of the account. + * @param addr The address associated with the account. + * + * @returns True if the update was successful, false otherwise. + */ bool Collator::update_account_public_libraries(Ref orig_libs, Ref final_libs, const td::Bits256& addr) { vm::Dictionary dict1{std::move(orig_libs), 256}, dict2{std::move(final_libs), 256}; @@ -3582,6 +4290,13 @@ bool Collator::update_account_public_libraries(Ref orig_libs, Ref msg_q_info; vm::CellBuilder cb, cb2; @@ -3676,11 +4411,20 @@ bool Collator::create_shard_state() { return true; } -// stores BlkMasterInfo (for non-masterchain blocks) +/** + * Stores BlkMasterInfo (for non-masterchain blocks) in the provided CellBuilder. + * + * @param cb The CellBuilder to store the reference in. + * + * @returns True if the reference is successfully stored, false otherwise. + */ bool Collator::store_master_ref(vm::CellBuilder& cb) { return mc_block_root.not_null() && store_ext_blk_ref_to(cb, mc_block_id_, mc_block_root); } +/** + * Updates the processed_upto information for the new block based on the information on the last processed inbound message. + */ bool Collator::update_processed_upto() { auto ref_mc_seqno = is_masterchain() ? new_block_seqno : prev_mc_block_seqno; update_min_mc_seqno(ref_mc_seqno); @@ -3695,6 +4439,13 @@ bool Collator::update_processed_upto() { return processed_upto_->compactify(); } +/** + * Computes the outbound message queue. + * + * @param out_msg_queue_info A reference to a vm::Cell object to store the computed queue. + * + * @returns True if the computation is successful, False otherwise. + */ bool Collator::compute_out_msg_queue_info(Ref& out_msg_queue_info) { if (verbosity >= 2) { auto rt = out_msg_queue_->get_root(); @@ -3709,6 +4460,11 @@ bool Collator::compute_out_msg_queue_info(Ref& out_msg_queue_info) { && cb.finalize_to(out_msg_queue_info); } +/** + * Computes the total balance of the shard state. + * + * @returns True if the total balance computation is successful, false otherwise. + */ bool Collator::compute_total_balance() { // 1. compute total_balance_ from the augmentation value of ShardAccounts auto accounts_extra = account_dict->get_root_extra(); @@ -3759,6 +4515,13 @@ bool Collator::compute_total_balance() { return true; } +/** + * Creates BlockInfo of the new block. + * + * @param block_info A reference to the cell to put the serialized info to. + * + * @returns True if the block info cell was successfully created, false otherwise. + */ bool Collator::create_block_info(Ref& block_info) { vm::CellBuilder cb, cb2; bool mc = is_masterchain(); @@ -3796,10 +4559,24 @@ bool Collator::create_block_info(Ref& block_info) { && cb.finalize_to(block_info); } +/** + * Stores the version information in a CellBuilder. + * + * @param cb The CellBuilder object to store the version information. + * + * @returns True if the version information was successfully stored, false otherwise. + */ bool Collator::store_version(vm::CellBuilder& cb) const { return block::gen::t_GlobalVersion.pack_capabilities(cb, supported_version(), supported_capabilities()); } +/** + * Stores the zero state reference in the given CellBuilder. + * + * @param cb The CellBuilder to store the zero state reference in. + * + * @returns True if the zero state reference is successfully stored, false otherwise. + */ bool Collator::store_zero_state_ref(vm::CellBuilder& cb) { CHECK(prev_state_root_.not_null()); RootHash root_hash = prev_state_root_->get_hash().bits(); @@ -3812,6 +4589,14 @@ bool Collator::store_zero_state_ref(vm::CellBuilder& cb) { && cb.store_bits_bool(prev_blocks[0].file_hash); // file_hash:bits256 } +/** + * Stores the previous block references to the given CellBuilder. + * + * @param cb The CellBuilder object to store the references. + * @param is_after_merge A boolean indicating whether the new block after a merge. + * + * @returns True if the references are successfully stored, false otherwise. + */ bool Collator::store_prev_blk_ref(vm::CellBuilder& cb, bool is_after_merge) { if (is_after_merge) { auto root2 = prev_block_data.at(1)->root_cell(); @@ -3829,6 +4614,11 @@ bool Collator::store_prev_blk_ref(vm::CellBuilder& cb, bool is_after_merge) { } } +/** + * Validates the value flow of the block. + * + * @returns True if the value flow is correct, false otherwise. + */ bool Collator::check_value_flow() { if (!value_flow_.validate()) { LOG(ERROR) << "incorrect value flow in new block : " << value_flow_.to_str(); @@ -3838,6 +4628,13 @@ bool Collator::check_value_flow() { return true; } +/** + * Creates the BlockExtra of the new block. + * + * @param block_extra A reference to the cell to put the serialized info to. + * + * @returns True if the block extra data was successfully created, false otherwise. + */ bool Collator::create_block_extra(Ref& block_extra) { bool mc = is_masterchain(); Ref mc_block_extra; @@ -3853,6 +4650,14 @@ bool Collator::create_block_extra(Ref& block_extra) { && cb.finalize_to(block_extra); // = BlockExtra; } +/** + * Creates the McBlockExtra of the new masterchain block. + * Used in masterchain collator. + * + * @param mc_block_extra A reference to the cell to put the serialized info to. + * + * @returns True if the extra data was successfully created, false otherwise. + */ bool Collator::create_mc_block_extra(Ref& mc_block_extra) { if (!is_masterchain()) { return false; @@ -3870,6 +4675,18 @@ bool Collator::create_mc_block_extra(Ref& mc_block_extra) { && cb.finalize_to(mc_block_extra); // = McBlockExtra } +/** + * Serialized the new block. + * + * This function performs the following steps: + * 1. Creates a BlockInfo for the new block. + * 2. Checks the value flow for the new block. + * 3. Creates a BlockExtra for the new block. + * 4. Builds a new block using the created BlockInfo, value flow, state update, and BlockExtra. + * 5. Verifies the new block if the verification is enabled. + * + * @returns True if the new block is successfully created, false otherwise. + */ bool Collator::create_block() { Ref block_info, extra; if (!create_block_info(block_info)) { @@ -3908,6 +4725,15 @@ bool Collator::create_block() { return true; } +/** + * Collates the shard block description set. + * Used in masterchain collator. + * + * This function creates a dictionary and populates it with the shard block descriptions. + * + * @returns A `Ref` containing the serialized `TopBlockDescrSet` record. + * If serialization fails, an empty `Ref` is returned. + */ Ref Collator::collate_shard_block_descr_set() { vm::Dictionary dict{96}; for (const auto& descr : used_shard_block_descr_) { @@ -3932,6 +4758,11 @@ Ref Collator::collate_shard_block_descr_set() { return cell; } +/** + * Creates collated data for the block. + * + * @returns True if the collated data was successfully created, false otherwise. + */ bool Collator::create_collated_data() { // TODO: store something into collated_roots_ // 1. store the set of used shard block descriptions @@ -3947,6 +4778,18 @@ bool Collator::create_collated_data() { return true; } +/** + * Creates a block candidate for the Collator. + * + * This function serializes the new block and collated data, and creates a BlockCandidate object + * with the necessary information. It then checks if the size of the block candidate exceeds the + * limits specified in the consensus configuration. + * + * Finally, the block candidate is saved to the disk. + * If there are any bad external messages or delayed external messages, the ValidatorManager is called to handle them. + * + * @returns True if the block candidate was created successfully, false otherwise. + */ bool Collator::create_block_candidate() { // 1. serialize block LOG(INFO) << "serializing new Block"; @@ -4021,6 +4864,11 @@ bool Collator::create_block_candidate() { return true; } +/** + * Returns a block candidate to the Promise. + * + * @param saved The result of saving the block candidate to the disk. + */ void Collator::return_block_candidate(td::Result saved) { // 6. return data to the original "caller" if (saved.is_error()) { @@ -4042,6 +4890,18 @@ void Collator::return_block_candidate(td::Result saved) { * */ +/** + * Registers an external message to the list of external messages in the Collator. + * + * @param ext_msg The reference to the external message cell. + * @param ext_hash The hash of the external message. + * + * @returns Result indicating the success or failure of the registration. + * - If the external message is invalid, returns an error. + * - If the external message has been previously rejected, returns an error + * - If the external message has been previuosly registered and accepted, returns false. + * - Otherwise returns true. + */ td::Result Collator::register_external_message_cell(Ref ext_msg, const ExtMessage::Hash& ext_hash) { if (ext_msg->get_level() != 0) { return td::Status::Error("external message must have zero level"); @@ -4090,23 +4950,11 @@ td::Result Collator::register_external_message_cell(Ref ext_msg, return true; } -/* -td::Result Collator::register_external_message(td::Slice ext_msg_boc) { - if (ext_msg_boc.size() > max_ext_msg_size) { - return td::Status::Error("external message too large, rejecting"); - } - vm::BagOfCells boc; - auto res = boc.deserialize(ext_msg_boc); - if (res.is_error()) { - return res.move_as_error(); - } - if (boc.get_root_count() != 1) { - return td::Status::Error("external message is not a valid bag of cells"); // not a valid bag-of-Cells - } - return register_external_message_cell(boc.get_root_cell(0)); -} -*/ - +/** + * Callback function called after retrieving external messages. + * + * @param res The result of the external message retrieval operation. + */ void Collator::after_get_external_messages(td::Result>> res) { --pending; if (res.is_error()) { @@ -4130,44 +4978,6 @@ void Collator::after_get_external_messages(td::Result Collator::register_ihr_message_cell(Ref ihr_msg) { - return false; -} - -td::Result Collator::register_ihr_message(td::Slice ihr_msg_boc) { - if (ihr_msg_boc.size() > max_ihr_msg_size) { - return td::Status::Error("IHR message too large, rejecting"); - } - vm::BagOfCells boc; - auto res = boc.deserialize(ihr_msg_boc); - if (res.is_error()) { - return res.move_as_error(); - } - if (boc.get_root_count() != 1) { - return td::Status::Error("IHR message is not a valid bag of cells"); // not a valid bag-of-Cells - } - return register_ihr_message_cell(boc.get_root_cell(0)); -} - -td::Result Collator::register_shard_signatures_cell(Ref signatures) { - return false; -} - -td::Result Collator::register_shard_signatures(td::Slice signatures_boc) { - if (signatures_boc.size() > max_blk_sign_size) { - return td::Status::Error("Shardchain signatures block too large, rejecting"); - } - vm::BagOfCells boc; - auto res = boc.deserialize(signatures_boc); - if (res.is_error()) { - return res.move_as_error(); - } - if (boc.get_root_count() != 1) { - return td::Status::Error("Shardchain signatures block is not a valid bag of cells"); // not a valid bag-of-Cells - } - return register_shard_signatures_cell(boc.get_root_cell(0)); -} - } // namespace validator } // namespace ton diff --git a/validator/impl/external-message.cpp b/validator/impl/external-message.cpp index 9383e734..5c1848aa 100644 --- a/validator/impl/external-message.cpp +++ b/validator/impl/external-message.cpp @@ -114,7 +114,7 @@ void ExtMessageQ::run_message(td::BufferSlice data, block::SizeLimitsConfig::Ext auto utime = std::get<1>(tuple); auto lt = std::get<2>(tuple); auto config = std::move(std::get<3>(tuple)); - if (!acc.unpack(shard_acc, {}, utime, false)) { + if (!acc.unpack(shard_acc, utime, false)) { promise.set_error(td::Status::Error(PSLICE() << "Failed to unpack account state")); } else { auto status = run_message_on_account(wc, &acc, utime, lt + 1, msg_root, std::move(config)); diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index 4e4100f5..b134e1b3 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -39,6 +39,11 @@ namespace validator { using td::Ref; using namespace std::literals::string_literals; +/** + * Converts the error context to a string representation to show it in case of validation error. + * + * @returns The error context as a string. + */ std::string ErrorCtx::as_string() const { std::string a; for (const auto& s : entries_) { @@ -48,6 +53,20 @@ std::string ErrorCtx::as_string() const { return a; } +/** + * Constructs a ValidateQuery object. + * + * @param shard The shard of the block being validated. + * @param min_ts The minimum allowed UnixTime for the block. + * @param min_masterchain_block_id The minimum allowed masterchain block reference for the block. + * @param prev A vector of BlockIdExt representing the previous blocks. + * @param candidate The BlockCandidate to be validated. + * @param validator_set A reference to the ValidatorSet. + * @param manager The ActorId of the ValidatorManager. + * @param timeout The timeout for the validation. + * @param promise The Promise to return the ValidateCandidateResult to. + * @param is_fake A boolean indicating if the validation is fake (performed when creating a hardfork). + */ ValidateQuery::ValidateQuery(ShardIdFull shard, UnixTime min_ts, BlockIdExt min_masterchain_block_id, std::vector prev, BlockCandidate candidate, Ref validator_set, td::actor::ActorId manager, td::Timestamp timeout, @@ -71,14 +90,30 @@ ValidateQuery::ValidateQuery(ShardIdFull shard, UnixTime min_ts, BlockIdExt min_ proc_hash_.zero(); } +/** + * Raises an error when timeout is reached. + */ void ValidateQuery::alarm() { abort_query(td::Status::Error(ErrorCode::timeout, "timeout")); } +/** + * Aborts the validation with the given error. + * + * @param error The error encountered. + */ void ValidateQuery::abort_query(td::Status error) { (void)fatal_error(std::move(error)); } +/** + * Rejects the validation and logs an error message. + * + * @param error The error message to be logged. + * @param reason The reason for rejecting the validation. + * + * @returns False indicating that the validation failed. + */ bool ValidateQuery::reject_query(std::string error, td::BufferSlice reason) { error = error_ctx() + error; LOG(ERROR) << "REJECT: aborting validation of block candidate for " << shard_.to_str() << " : " << error; @@ -94,11 +129,28 @@ bool ValidateQuery::reject_query(std::string error, td::BufferSlice reason) { return false; } +/** + * Rejects the validation and logs an error message. + * + * @param err_msg The error message to be displayed. + * @param error The error status. + * @param reason The reason for rejecting the query. + * + * @returns False indicating that the validation failed. + */ bool ValidateQuery::reject_query(std::string err_msg, td::Status error, td::BufferSlice reason) { error.ensure_error(); return reject_query(err_msg + " : " + error.to_string(), std::move(reason)); } +/** + * Rejects the validation and logs an error message. + * + * @param error The error message to be logged. + * @param reason The reason for rejecting the validation. + * + * @returns False indicating that the validation failed. + */ bool ValidateQuery::soft_reject_query(std::string error, td::BufferSlice reason) { error = error_ctx() + error; LOG(ERROR) << "SOFT REJECT: aborting validation of block candidate for " << shard_.to_str() << " : " << error; @@ -114,6 +166,13 @@ bool ValidateQuery::soft_reject_query(std::string error, td::BufferSlice reason) return false; } +/** + * Handles a fatal error during validation. + * + * @param error The error status. + * + * @returns False indicating that the validation failed. + */ bool ValidateQuery::fatal_error(td::Status error) { error.ensure_error(); LOG(ERROR) << "aborting validation of block candidate for " << shard_.to_str() << " : " << error.to_string(); @@ -132,19 +191,47 @@ bool ValidateQuery::fatal_error(td::Status error) { return false; } +/** + * Handles a fatal error during validation. + * + * @param err_code Error code. + * @param error Error message. + * + * @returns False indicating that the validation failed. + */ bool ValidateQuery::fatal_error(int err_code, std::string err_msg) { return fatal_error(td::Status::Error(err_code, error_ctx() + err_msg)); } +/** + * Handles a fatal error during validation. + * + * @param err_code Error code. + * @param err_msg Error message. + * @param error Error status. + * + * @returns False indicating that the validation failed. + */ bool ValidateQuery::fatal_error(int err_code, std::string err_msg, td::Status error) { error.ensure_error(); return fatal_error(err_code, err_msg + " : " + error.to_string()); } +/** + * Handles a fatal error during validation. + * + * @param error Error message. + * @param err_code Error code. + * + * @returns False indicating that the validation failed. + */ bool ValidateQuery::fatal_error(std::string err_msg, int err_code) { return fatal_error(td::Status::Error(err_code, error_ctx() + err_msg)); } +/** + * Finishes the query and sends the result to the promise. + */ void ValidateQuery::finish_query() { if (main_promise) { main_promise.set_result(now_); @@ -158,6 +245,12 @@ void ValidateQuery::finish_query() { * */ +/** + * Starts the validation process. + * + * This function performs various checks on the validation parameters and the block candidate. + * Then the function also sends requests to the ValidatorManager to fetch blocks and shard stated. + */ void ValidateQuery::start_up() { LOG(INFO) << "validate query for " << block_candidate.id.to_str() << " started"; alarm_timestamp() = timeout; @@ -307,7 +400,16 @@ void ValidateQuery::start_up() { CHECK(pending); } -// unpack block candidate, and check root hash and file hash +/** + * Unpacks and validates a block candidate. + * + * This function unpacks the block candidate data and performs various validation checks to ensure its integrity. + * It checks the file hash and root hash of the block candidate against the expected values. + * It then parses the block header and checks its validity. + * Finally, it deserializes the collated data and extracts the collated roots. + * + * @returns True if the block candidate was successfully unpacked, false otherwise. + */ bool ValidateQuery::unpack_block_candidate() { vm::BagOfCells boc1, boc2; // 1. deserialize block itself @@ -359,6 +461,11 @@ bool ValidateQuery::unpack_block_candidate() { return extract_collated_data(); } +/** + * Initializes the validation by parsing and checking the block header. + * + * @returns True if the initialization is successful, false otherwise. + */ bool ValidateQuery::init_parse() { CHECK(block_root_.not_null()); std::vector prev_blks; @@ -486,6 +593,14 @@ bool ValidateQuery::init_parse() { return true; } +/** + * Extracts collated data from a cell. + * + * @param croot The root cell containing the collated data. + * @param idx The index of the root. + * + * @returns True if the extraction is successful, false otherwise. + */ bool ValidateQuery::extract_collated_data_from(Ref croot, int idx) { bool is_special = false; auto cs = vm::load_cell_slice_special(croot, is_special); @@ -523,7 +638,11 @@ bool ValidateQuery::extract_collated_data_from(Ref croot, int idx) { return true; } -// processes further and sorts data in collated_roots_ +/** + * Extracts collated data from a list of collated roots. + * + * @returns True if the extraction is successful, False otherwise. + */ bool ValidateQuery::extract_collated_data() { int i = -1; for (auto croot : collated_roots_) { @@ -542,6 +661,11 @@ bool ValidateQuery::extract_collated_data() { return true; } +/** + * Callback function called after retrieving the latest masterchain state. + * + * @param res The result of the retrieval of the latest masterchain state. + */ void ValidateQuery::after_get_latest_mc_state(td::Result, BlockIdExt>> res) { LOG(DEBUG) << "in ValidateQuery::after_get_latest_mc_state()"; --pending; @@ -578,6 +702,11 @@ void ValidateQuery::after_get_latest_mc_state(td::Result> res) { LOG(DEBUG) << "in ValidateQuery::after_get_mc_state() for " << mc_blkid_.to_str(); --pending; @@ -596,6 +725,11 @@ void ValidateQuery::after_get_mc_state(td::Result> res) { } } +/** + * Callback function for handling the result of retrieving a masterchain block handle referenced in the block. + * + * @param res The result of retrieving the masterchain block handle. + */ void ValidateQuery::got_mc_handle(td::Result res) { LOG(DEBUG) << "in ValidateQuery::got_mc_handle() for " << mc_blkid_.to_str(); --pending; @@ -611,6 +745,12 @@ void ValidateQuery::got_mc_handle(td::Result res) { } } +/** + * Callback function called after retrieving the shard state for a previous block. + * + * @param idx The index of the previous block (0 or 1). + * @param res The result of the shard state retrieval. + */ void ValidateQuery::after_get_shard_state(int idx, td::Result> res) { LOG(DEBUG) << "in ValidateQuery::after_get_shard_state(" << idx << ")"; --pending; @@ -643,6 +783,13 @@ void ValidateQuery::after_get_shard_state(int idx, td::Result> r } } +/** + * Processes the retreived masterchain state. + * + * @param mc_state The reference to the masterchain state. + * + * @returns True if the masterchain state is successfully processed, false otherwise. + */ bool ValidateQuery::process_mc_state(Ref mc_state) { if (mc_state.is_null()) { return fatal_error("could not obtain reference masterchain state "s + mc_blkid_.to_str()); @@ -664,6 +811,11 @@ bool ValidateQuery::process_mc_state(Ref mc_state) { return register_mc_state(mc_state_); } +/** + * Tries to unpack the masterchain state and perform necessary checks. + * + * @returns True if the unpacking and checks are successful, false otherwise. + */ bool ValidateQuery::try_unpack_mc_state() { LOG(DEBUG) << "unpacking reference masterchain state"; auto guard = error_ctx_add_guard("unpack last mc state"); @@ -750,7 +902,12 @@ bool ValidateQuery::try_unpack_mc_state() { return true; } -// almost the same as in Collator +/** + * Fetches and validates configuration parameters from the masterchain configuration. + * Almost the same as in Collator. + * + * @returns True if all configuration parameters were successfully fetched and validated, false otherwise. + */ bool ValidateQuery::fetch_config_params() { old_mparams_ = config_->get_config_param(9); { @@ -839,7 +996,16 @@ bool ValidateQuery::fetch_config_params() { return true; } -// almost the same as in Collator +/** + * Checks the previous block against the block registered in the masterchain. + * Almost the same as in Collator. + * + * @param listed The BlockIdExt of the top block of this shard registered in the masterchain. + * @param prev The BlockIdExt of the previous block. + * @param chk_chain_len Flag indicating whether to check the chain length. + * + * @returns True if the previous block is valid, false otherwise. + */ bool ValidateQuery::check_prev_block(const BlockIdExt& listed, const BlockIdExt& prev, bool chk_chain_len) { if (listed.seqno() > prev.seqno()) { return reject_query(PSTRING() << "cannot generate a shardchain block after previous block " << prev.to_str() @@ -859,7 +1025,15 @@ bool ValidateQuery::check_prev_block(const BlockIdExt& listed, const BlockIdExt& return true; } -// almost the same as in Collator +/** + * Checks the previous block against the block registered in the masterchain. + * Almost the same as in Collator + * + * @param listed The BlockIdExt of the top block of this shard registered in the masterchain. + * @param prev The BlockIdExt of the previous block. + * + * @returns True if the previous block is equal to the one registered in the masterchain, false otherwise. + */ bool ValidateQuery::check_prev_block_exact(const BlockIdExt& listed, const BlockIdExt& prev) { if (listed != prev) { return reject_query(PSTRING() << "cannot generate shardchain block for shard " << shard_.to_str() @@ -870,8 +1044,12 @@ bool ValidateQuery::check_prev_block_exact(const BlockIdExt& listed, const Block return true; } -// almost the same as in Collator -// (main change: fatal_error -> reject_query) +/** + * Checks the validity of the shard configuration of the current shard. + * Almost the same as in Collator (main change: fatal_error -> reject_query). + * + * @returns True if the shard's configuration is valid, False otherwise. + */ bool ValidateQuery::check_this_shard_mc_info() { wc_info_ = config_->get_workchain_info(workchain()); if (wc_info_.is_null()) { @@ -1016,6 +1194,11 @@ bool ValidateQuery::check_this_shard_mc_info() { * */ +/** + * Computes the previous shard state. + * + * @returns True if the previous state is computed successfully, false otherwise. + */ bool ValidateQuery::compute_prev_state() { CHECK(prev_states.size() == 1u + after_merge_); // Extend validator timeout if previous block is too old @@ -1045,6 +1228,9 @@ bool ValidateQuery::compute_prev_state() { return true; } +/** + * Computes the next shard state using the previous state and the block's Merkle update. + */ bool ValidateQuery::compute_next_state() { LOG(DEBUG) << "computing next state"; auto res = vm::MerkleUpdate::validate(state_update_); @@ -1120,7 +1306,13 @@ bool ValidateQuery::compute_next_state() { return true; } -// similar to Collator::unpack_merge_last_state() +/** + * Unpacks and merges the states of two previous blocks. + * Used if the block is after_merge. + * Similar to Collator::unpack_merge_last_state() + * + * @returns True if the unpacking and merging was successful, false otherwise. + */ bool ValidateQuery::unpack_merge_prev_state() { LOG(DEBUG) << "unpack/merge previous states"; CHECK(prev_states.size() == 2); @@ -1148,7 +1340,13 @@ bool ValidateQuery::unpack_merge_prev_state() { return true; } -// similar to Collator::unpack_last_state() +/** + * Unpacks the state of the previous block. + * Used if the block is not after_merge. + * Similar to Collator::unpack_last_state() + * + * @returns True if the unpacking is successful, false otherwise. + */ bool ValidateQuery::unpack_prev_state() { LOG(DEBUG) << "unpacking previous state(s)"; CHECK(prev_state_root_.not_null()); @@ -1163,7 +1361,16 @@ bool ValidateQuery::unpack_prev_state() { return unpack_one_prev_state(ps_, prev_blocks.at(0), prev_state_root_) && (!after_split_ || split_prev_state(ps_)); } -// similar to Collator::unpack_one_last_state() +/** + * Unpacks the state of a previous block and performs necessary checks. + * Similar to Collator::unpack_one_last_state() + * + * @param ss The ShardState object to unpack the state into. + * @param blkid The BlockIdExt of the previous block. + * @param prev_state_root The root of the state. + * + * @returns True if the unpacking and checks are successful, false otherwise. + */ bool ValidateQuery::unpack_one_prev_state(block::ShardState& ss, BlockIdExt blkid, Ref prev_state_root) { auto res = ss.unpack_state_ext(blkid, std::move(prev_state_root), global_id_, mc_seqno_, after_split_, after_split_ | after_merge_, [this](ton::BlockSeqno mc_seqno) { @@ -1180,7 +1387,15 @@ bool ValidateQuery::unpack_one_prev_state(block::ShardState& ss, BlockIdExt blki return true; } -// similar to Collator::split_last_state() +/** + * Splits the state of previous block. + * Used if the block is after_split. + * Similar to Collator::split_last_state() + * + * @param ss The ShardState object representing the previous state. The result is stored here. + * + * @returns True if the split operation is successful, false otherwise. + */ bool ValidateQuery::split_prev_state(block::ShardState& ss) { LOG(INFO) << "Splitting previous state " << ss.id_.to_str() << " to subshard " << shard_.to_str(); CHECK(after_split_); @@ -1202,6 +1417,11 @@ bool ValidateQuery::split_prev_state(block::ShardState& ss) { return true; } +/** + * Unpacks the next state (obtained by applying the Merkle update) and performs checks. + * + * @returns True if the next state is successfully unpacked and passes all checks, false otherwise. + */ bool ValidateQuery::unpack_next_state() { LOG(DEBUG) << "unpacking new state"; CHECK(state_root_.not_null()); @@ -1231,7 +1451,12 @@ bool ValidateQuery::unpack_next_state() { return true; } -// almost the same as in Collator +/** + * Requests the message queues of neighboring shards. + * Almost the same as in Collator. + * + * @returns True if the request for neighbor message queues was successful, false otherwise. + */ bool ValidateQuery::request_neighbor_queues() { CHECK(new_shard_conf_); auto neighbor_list = new_shard_conf_->get_neighbor_shard_hash_ids(shard_); @@ -1261,7 +1486,13 @@ bool ValidateQuery::request_neighbor_queues() { return true; } -// almost the same as in Collator +/** + * Handles the result of obtaining the outbound queue for a neighbor. + * Almost the same as in Collator. + * + * @param i The index of the neighbor. + * @param res The obtained outbound queue. + */ void ValidateQuery::got_neighbor_out_queue(int i, td::Result> res) { LOG(DEBUG) << "obtained outbound queue for neighbor #" << i; --pending; @@ -1323,7 +1554,14 @@ void ValidateQuery::got_neighbor_out_queue(int i, td::Result> } } -// almost the same as in Collator +/** + * Registers a masterchain state. + * Almost the same as in Collator. + * + * @param other_mc_state The masterchain state to register. + * + * @returns True if the registration is successful, false otherwise. + */ bool ValidateQuery::register_mc_state(Ref other_mc_state) { if (other_mc_state.is_null() || mc_state_.is_null()) { return false; @@ -1349,7 +1587,15 @@ bool ValidateQuery::register_mc_state(Ref other_mc_state) { return true; } -// almost the same as in Collator +/** + * Requests the auxiliary masterchain state. + * Almost the same as in Collator + * + * @param seqno The seqno of the block. + * @param state A reference to the auxiliary masterchain state. + * + * @returns True if the auxiliary masterchain state is successfully requested, false otherwise. + */ bool ValidateQuery::request_aux_mc_state(BlockSeqno seqno, Ref& state) { if (mc_state_.is_null()) { return fatal_error(PSTRING() << "cannot find masterchain block with seqno " << seqno @@ -1383,7 +1629,14 @@ bool ValidateQuery::request_aux_mc_state(BlockSeqno seqno, Ref ValidateQuery::get_aux_mc_state(BlockSeqno seqno) const { auto it = aux_mc_states_.find(seqno); if (it != aux_mc_states_.end()) { @@ -1393,7 +1646,14 @@ Ref ValidateQuery::get_aux_mc_state(BlockSeqno seqno) const { } } -// almost the same as in Collator +/** + * Callback function called after retrieving the auxiliary shard state. + * Handles the retrieved shard state and performs necessary checks and registrations. + * Almost the same as in Collator. + * + * @param blkid The BlockIdExt of the shard state. + * @param res The result of retrieving the shard state. + */ void ValidateQuery::after_get_aux_shard_state(ton::BlockIdExt blkid, td::Result> res) { LOG(DEBUG) << "in ValidateQuery::after_get_aux_shard_state(" << blkid.to_str() << ")"; --pending; @@ -1420,6 +1680,17 @@ void ValidateQuery::after_get_aux_shard_state(ton::BlockIdExt blkid, td::Result< } // similar to Collator::update_one_shard() +/** + * Checks one shard description in the masterchain shard configuration. + * Used in masterchain validation. + * + * @param info The shard information to be updated. + * @param sibling The sibling shard information. + * @param wc_info The workchain information. + * @param ccvc The Catchain validators configuration. + * + * @returns True if the validation wasa successful, false othewise. + */ bool ValidateQuery::check_one_shard(const block::McShardHash& info, const block::McShardHash* sibling, const block::WorkchainInfo* wc_info, const block::CatchainValidatorsConfig& ccvc) { auto shard = info.shard(); @@ -1706,8 +1977,14 @@ bool ValidateQuery::check_one_shard(const block::McShardHash& info, const block: return true; } -// checks old_shard_conf_ -> new_shard_conf_ transition using top_shard_descr_dict_ from collated data -// similar to Collator::update_shard_config() +/** + * Checks the shard configuration in the masterchain. + * Used in masterchain collator. + * Checks old_shard_conf_ -> new_shard_conf_ transition using top_shard_descr_dict_ from collated data. + * Similar to Collator::update_shard_config() + * + * @returns True if the shard layout is valid, false otherwise. + */ bool ValidateQuery::check_shard_layout() { prev_now_ = config_->utime; if (prev_now_ > now_) { @@ -1761,7 +2038,14 @@ bool ValidateQuery::check_shard_layout() { return check_mc_validator_info(is_key_block_ || (now_ / ccvc.mc_cc_lifetime > prev_now_ / ccvc.mc_cc_lifetime)); } -// similar to Collator::register_shard_block_creators +/** + * Registers the shard block creators to block_create_count_ + * Similar to Collator::register_shard_block_creators + * + * @param creator_list A vector of Bits256 representing the shard block creators. + * + * @returns True if the registration was successful, False otherwise. + */ bool ValidateQuery::register_shard_block_creators(std::vector creator_list) { for (const auto& x : creator_list) { LOG(DEBUG) << "registering block creator " << x.to_hex(); @@ -1776,7 +2060,12 @@ bool ValidateQuery::register_shard_block_creators(std::vector creat return true; } -// similar to Collator::check_cur_validator_set() +/** + * Checks that the current validator set is entitled to create blocks in this shard and has a correct catchain seqno. + * Similar to Collator::check_cur_validator_set() + * + * @returns True if the current validator set is valid, false otherwise. + */ bool ValidateQuery::check_cur_validator_set() { CatchainSeqno cc_seqno = 0; auto nodes = config_->compute_validator_set_cc(shard_, now_, &cc_seqno); @@ -1799,8 +2088,14 @@ bool ValidateQuery::check_cur_validator_set() { return true; } -// parallel to 4. of Collator::create_mc_state_extra() -// checks validator_info in mc_state_extra +/** + * Checks validator_info in mc_state_extra. + * NB: could be run in parallel to 4. of Collator::create_mc_state_extra() + * + * @param update_mc_cc Flag indicating whether the masterchain catchain seqno should be updated. + * + * @returns True if the validator information is valid, false otherwise. + */ bool ValidateQuery::check_mc_validator_info(bool update_mc_cc) { block::gen::McStateExtra::Record old_state_extra; block::gen::ValidatorInfo::Record old_val_info; @@ -1842,6 +2137,11 @@ bool ValidateQuery::check_mc_validator_info(bool update_mc_cc) { return true; } +/** + * Checks if the Unix time and logical time of the block are valid. + * + * @returns True if the utime and logical time pass checks, False otherwise. + */ bool ValidateQuery::check_utime_lt() { if (start_lt_ <= ps_.lt_) { return reject_query(PSTRING() << "block has start_lt " << start_lt_ << " less than or equal to lt " << ps_.lt_ @@ -1888,8 +2188,16 @@ bool ValidateQuery::check_utime_lt() { * */ -// almost the same as in Collator -// (but it can take into account the new state of the masterchain) +/** + * Adjusts one entry from the processed up to information using the masterchain state that is referenced in the entry. + * Almost the same as in Collator (but it can take into account the new state of the masterchain). + * + * @param proc The MsgProcessedUpto object. + * @param owner The shard that the MsgProcessesUpto information is taken from. + * @param allow_cur Allow using the new state of the msaterchain. + * + * @returns True if the processed up to information was successfully adjusted, false otherwise. + */ bool ValidateQuery::fix_one_processed_upto(block::MsgProcessedUpto& proc, ton::ShardIdFull owner, bool allow_cur) { if (proc.compute_shard_end_lt) { return true; @@ -1912,7 +2220,15 @@ bool ValidateQuery::fix_one_processed_upto(block::MsgProcessedUpto& proc, ton::S return (bool)proc.compute_shard_end_lt; } -// almost the same as in Collator +/** + * Adjusts the processed up to collection using the using the auxilliary masterchain states. + * Almost the same as in Collator. + * + * @param upto The MsgProcessedUptoCollection to be adjusted. + * @param allow_cur Allow using the new state of the msaterchain. + * + * @returns True if all entries were successfully adjusted, False otherwise. + */ bool ValidateQuery::fix_processed_upto(block::MsgProcessedUptoCollection& upto, bool allow_cur) { for (auto& entry : upto.list) { if (!fix_one_processed_upto(entry, upto.owner, allow_cur)) { @@ -1922,6 +2238,11 @@ bool ValidateQuery::fix_processed_upto(block::MsgProcessedUptoCollection& upto, return true; } +/** + * Adjusts the processed_upto values for all shard states, including neighbors. + * + * @returns True if all processed_upto values were successfully adjusted, false otherwise. + */ bool ValidateQuery::fix_all_processed_upto() { CHECK(ps_.processed_upto_); if (!fix_processed_upto(*ps_.processed_upto_)) { @@ -1942,7 +2263,13 @@ bool ValidateQuery::fix_all_processed_upto() { return true; } -// almost the same as in Collator +/** + * Adds trivials neighbor after merging two shards. + * Trivial neighbors are the two previous blocks. + * Almost the same as in Collator. + * + * @returns True if the operation is successful, false otherwise. + */ bool ValidateQuery::add_trivial_neighbor_after_merge() { LOG(DEBUG) << "in add_trivial_neighbor_after_merge()"; CHECK(prev_blocks.size() == 2); @@ -1977,7 +2304,13 @@ bool ValidateQuery::add_trivial_neighbor_after_merge() { return true; } -// almost the same as in Collator +/** + * Adds a trivial neighbor. + * A trivial neighbor is the previous block. + * Almost the same as in Collator. + * + * @returns True if the operation is successful, false otherwise. + */ bool ValidateQuery::add_trivial_neighbor() { LOG(DEBUG) << "in add_trivial_neighbor()"; if (after_merge_) { @@ -2113,6 +2446,11 @@ bool ValidateQuery::add_trivial_neighbor() { return true; } +/** + * Unpacks block data and performs validation checks. + * + * @returns True if the block data is successfully unpacked and passes all validation checks, false otherwise. + */ bool ValidateQuery::unpack_block_data() { LOG(DEBUG) << "unpacking block structures"; block::gen::Block::Record blk; @@ -2152,6 +2490,13 @@ bool ValidateQuery::unpack_block_data() { return unpack_precheck_value_flow(std::move(blk.value_flow)); } +/** + * Validates and unpacks the value flow of a new block. + * + * @param value_flow_root The root of the value flow to be unpacked and validated. + * + * @returns True if the value flow is valid and unpacked successfully, false otherwise. + */ bool ValidateQuery::unpack_precheck_value_flow(Ref value_flow_root) { vm::CellSlice cs{vm::NoVmOrd(), value_flow_root}; if (!(cs.is_valid() && value_flow_.fetch(cs) && cs.empty_ext())) { @@ -2269,7 +2614,14 @@ bool ValidateQuery::unpack_precheck_value_flow(Ref value_flow_root) { return true; } -// similar to Collator::compute_minted_amount() +/** + * Computes the amount of extra currencies to be minted. + * Similar to Collator::compute_minted_amount() + * + * @param to_mint A reference to the CurrencyCollection object to store the minted amount. + * + * @returns True if the computation is successful, false otherwise. + */ bool ValidateQuery::compute_minted_amount(block::CurrencyCollection& to_mint) { if (!is_masterchain()) { return to_mint.set_zero(); @@ -2321,6 +2673,15 @@ bool ValidateQuery::compute_minted_amount(block::CurrencyCollection& to_mint) { return true; } +/** + * Pre-validates the update of an account in a query. + * + * @param acc_id The 256-bit account address. + * @param old_value The old value of the account serialized as ShardAccount. Can be null. + * @param new_value The new value of the account serialized as ShardAccount. Can be null. + * + * @returns True if the accounts passes preliminary checks, false otherwise. + */ bool ValidateQuery::precheck_one_account_update(td::ConstBitPtr acc_id, Ref old_value, Ref new_value) { LOG(DEBUG) << "checking update of account " << acc_id.to_hex(256); @@ -2380,6 +2741,11 @@ bool ValidateQuery::precheck_one_account_update(td::ConstBitPtr acc_id, Ref trans_csr, ton::Bits256& prev_trans_hash, ton::LogicalTime& prev_trans_lt, unsigned& prev_trans_lt_len, @@ -2467,6 +2846,14 @@ bool ValidateQuery::precheck_one_transaction(td::ConstBitPtr acc_id, ton::Logica } // NB: could be run in parallel for different accounts +/** + * Pre-validates an AccountBlock and all transactions in it. + * + * @param acc_id The 256-bit account address. + * @param acc_blk_root The root of the AccountBlock. + * + * @returns True if the AccountBlock passes pre-checks, false otherwise. + */ bool ValidateQuery::precheck_one_account_block(td::ConstBitPtr acc_id, Ref acc_blk_root) { LOG(DEBUG) << "checking AccountBlock for " << acc_id.to_hex(256); if (!acc_id.equals(shard_pfx_.bits(), shard_pfx_len_)) { @@ -2548,6 +2935,11 @@ bool ValidateQuery::precheck_one_account_block(td::ConstBitPtr acc_id, Ref ValidateQuery::lookup_transaction(const ton::StdSmcAddress& addr, ton::LogicalTime lt) const { CHECK(account_blocks_dict_); block::gen::AccountBlock::Record ab_rec; @@ -2578,7 +2978,13 @@ Ref ValidateQuery::lookup_transaction(const ton::StdSmcAddress& addr, return trans_dict.lookup_ref(td::BitArray<64>{(long long)lt}); } -// checks that a ^Transaction refers to a transaction present in the ShardAccountBlocks +/** + * Checks that a Transaction cell refers to a transaction present in the ShardAccountBlocks. + * + * @param trans_ref The reference to the serialized transaction root. + * + * @returns True if the transaction reference is valid, False otherwise. + */ bool ValidateQuery::is_valid_transaction_ref(Ref trans_ref) const { ton::StdSmcAddress addr; ton::LogicalTime lt; @@ -2598,8 +3004,16 @@ bool ValidateQuery::is_valid_transaction_ref(Ref trans_ref) const { return true; } -// checks that any change in OutMsgQueue in the state is accompanied by an OutMsgDescr record in the block -// also checks that the keys are correct +/** + * Checks that any change in OutMsgQueue in the state is accompanied by an OutMsgDescr record in the block. + * Also checks that the keys are correct. + * + * @param out_msg_id The 32+64+256-bit ID of the outbound message. + * @param old_value The old value of the message queue entry. + * @param new_value The new value of the message queue entry. + * + * @returns True if the update is valid, false otherwise. + */ bool ValidateQuery::precheck_one_message_queue_update(td::ConstBitPtr out_msg_id, Ref old_value, Ref new_value) { LOG(DEBUG) << "checking update of enqueued outbound message " << out_msg_id.get_int(32) << ":" @@ -2765,6 +3179,11 @@ bool ValidateQuery::precheck_one_message_queue_update(td::ConstBitPtr out_msg_id return true; } +/** + * Performs a pre-check on the difference between the old and new outbound message queues. + * + * @returns True if the pre-check is successful, false otherwise. + */ bool ValidateQuery::precheck_message_queue_update() { LOG(INFO) << "pre-checking the difference between the old and the new outbound message queues"; try { @@ -2787,6 +3206,14 @@ bool ValidateQuery::precheck_message_queue_update() { return true; } +/** + * Updates the maximum processed logical time and hash value. + * + * @param lt The logical time to compare against the current maximum processed logical time. + * @param hash The hash value to compare against the current maximum processed hash value. + * + * @returns True if the update was successful, false otherwise. + */ bool ValidateQuery::update_max_processed_lt_hash(ton::LogicalTime lt, const ton::Bits256& hash) { if (proc_lt_ < lt || (proc_lt_ == lt && proc_hash_ < hash)) { proc_lt_ = lt; @@ -2795,6 +3222,14 @@ bool ValidateQuery::update_max_processed_lt_hash(ton::LogicalTime lt, const ton: return true; } +/** + * Updates the minimum enqueued logical time and hash values. + * + * @param lt The logical time to compare. + * @param hash The hash value to compare. + * + * @returns True if the update was successful, false otherwise. + */ bool ValidateQuery::update_min_enqueued_lt_hash(ton::LogicalTime lt, const ton::Bits256& hash) { if (lt < min_enq_lt_ || (lt == min_enq_lt_ && hash < min_enq_hash_)) { min_enq_lt_ = lt; @@ -2803,7 +3238,13 @@ bool ValidateQuery::update_min_enqueued_lt_hash(ton::LogicalTime lt, const ton:: return true; } -// check that the enveloped message (MsgEnvelope) was present in the output queue of a neighbor, and that it has not been processed before +/** + * Checks that the MsgEnvelope was present in the output queue of a neighbor, and that it has not been processed before. + * + * @param msg_env The message envelope of the imported message. + * + * @returns True if the imported internal message passes checks, false otherwise. + */ bool ValidateQuery::check_imported_message(Ref msg_env) { block::tlb::MsgEnvelope::Record_std env; block::gen::CommonMsgInfo::Record_int_msg_info info; @@ -2863,11 +3304,27 @@ bool ValidateQuery::check_imported_message(Ref msg_env) { " has previous address not belonging to any neighbor"); } +/** + * Checks if the given input message is a special message. + * A message is considered special if it recovers fees or mints extra currencies. + * + * @param in_msg The input message to be checked. + * + * @returns True if the input message is special, False otherwise. + */ bool ValidateQuery::is_special_in_msg(const vm::CellSlice& in_msg) const { return (recover_create_msg_.not_null() && vm::load_cell_slice(recover_create_msg_).contents_equal(in_msg)) || (mint_msg_.not_null() && vm::load_cell_slice(mint_msg_).contents_equal(in_msg)); } +/** + * Checks the validity of an inbound message listed in InMsgDescr. + * + * @param key The 256-bit key of the inbound message. + * @param in_msg The inbound message to be checked serialized using InMsg TLB-scheme. + * + * @returns True if the inbound message is valid, false otherwise. + */ bool ValidateQuery::check_in_msg(td::ConstBitPtr key, Ref in_msg) { LOG(DEBUG) << "checking InMsg with key " << key.to_hex(256); CHECK(in_msg.not_null()); @@ -3274,6 +3731,11 @@ bool ValidateQuery::check_in_msg(td::ConstBitPtr key, Ref in_msg) return true; } +/** + * Checks the validity of the inbound messages listed in the InMsgDescr dictionary. + * + * @returns True if the inbound messages dictionary is valid, false otherwise. + */ bool ValidateQuery::check_in_msg_descr() { LOG(INFO) << "checking inbound messages listed in InMsgDescr"; try { @@ -3293,6 +3755,14 @@ bool ValidateQuery::check_in_msg_descr() { return true; } +/** + * Checks the validity of an outbound message listed in OutMsgDescr. + * + * @param key The 256-bit key of the outbound message. + * @param in_msg The outbound message to be checked serialized using OutMsg TLB-scheme. + * + * @returns True if the outbound message is valid, false otherwise. + */ bool ValidateQuery::check_out_msg(td::ConstBitPtr key, Ref out_msg) { LOG(DEBUG) << "checking OutMsg with key " << key.to_hex(256); CHECK(out_msg.not_null()); @@ -3810,6 +4280,11 @@ bool ValidateQuery::check_out_msg(td::ConstBitPtr key, Ref out_ms return true; } +/** + * Checks the validity of the outbound messages listed in the OutMsgDescr dictionary. + * + * @returns True if the outbound messages dictionary is valid, false otherwise. + */ bool ValidateQuery::check_out_msg_descr() { LOG(INFO) << "checking outbound messages listed in OutMsgDescr"; try { @@ -3828,7 +4303,12 @@ bool ValidateQuery::check_out_msg_descr() { return true; } -// compare to Collator::update_processed_upto() +/** + * Checks if the processed up to information is valid and consistent. + * Compare to Collator::update_processed_upto() + * + * @returns True if the processed up to information is valid and consistent, false otherwise. + */ bool ValidateQuery::check_processed_upto() { LOG(INFO) << "checking ProcessedInfo"; CHECK(ps_.processed_upto_); @@ -3884,7 +4364,18 @@ bool ValidateQuery::check_processed_upto() { return true; } -// similar to Collator::process_inbound_message +/** + * Checks the validity of an outbound message in the neighbor's queue. + * Similar to Collator::process_inbound_message. + * + * @param enq_msg The enqueued message to validate. + * @param lt The logical time of the message. + * @param key The 32+64+256-bit key of the message. + * @param nb The neighbor's description. + * @param unprocessed A boolean flag that will be set to true if the message is unprocessed, false otherwise. + * + * @returns True if the message is valid, false otherwise. + */ bool ValidateQuery::check_neighbor_outbound_message(Ref enq_msg, ton::LogicalTime lt, td::ConstBitPtr key, const block::McShardDescr& nb, bool& unprocessed) { @@ -4023,6 +4514,11 @@ bool ValidateQuery::check_neighbor_outbound_message(Ref enq_msg, return true; } +/** + * Checks messages from the outbound queues of the neighbors. + * + * @returns True if the messages are valid, false otherwise. + */ bool ValidateQuery::check_in_queue() { block::OutputQueueMerger nb_out_msgs(shard_, neighbors_); while (!nb_out_msgs.is_eof()) { @@ -4054,9 +4550,12 @@ bool ValidateQuery::check_in_queue() { return true; } -// checks that all messages imported from our outbound queue into neighbor shards have been dequeued -// similar to Collator::out_msg_queue_cleanup() -// (but scans new outbound queue instead of the old) +/** + * Checks that all messages imported from our outbound queue into neighbor shards have been dequeued + * Similar to Collator::out_msg_queue_cleanup() (but scans the new outbound queue instead of the old). + * + * @returns True if the delivery status of all messages has been checked successfully, false otherwise. + */ bool ValidateQuery::check_delivered_dequeued() { LOG(INFO) << "scanning new outbound queue and checking delivery status of all messages"; bool ok = false; @@ -4103,26 +4602,42 @@ bool ValidateQuery::check_delivered_dequeued() { }) || ok; } -// similar to Collator::make_account_from() -std::unique_ptr ValidateQuery::make_account_from(td::ConstBitPtr addr, Ref account, - Ref extra) { +/** + * Creates a new Account object from the given address and serialized account data. + * Creates a new Account if not found. + * Similar to Collator::make_account_from() + * + * @param addr A pointer to the 256-bit address of the account. + * @param account A cell slice with an account serialized using ShardAccount TLB-scheme. + * + * @returns A unique pointer to the created Account object, or nullptr if the creation failed. + */ +std::unique_ptr ValidateQuery::make_account_from(td::ConstBitPtr addr, Ref account) { auto ptr = std::make_unique(workchain(), addr); if (account.is_null()) { if (!ptr->init_new(now_)) { return nullptr; } - } else if (!ptr->unpack(std::move(account), std::move(extra), now_, - is_masterchain() && config_->is_special_smartcontract(addr))) { + } else if (!ptr->unpack(std::move(account), now_, is_masterchain() && config_->is_special_smartcontract(addr))) { return nullptr; } ptr->block_lt = start_lt_; return ptr; } -// similar to Collator::make_account() +/** + * Retreives an Account object from the data in the shard state. + * Accounts are cached in the ValidatorQuery's map. + * Similar to Collator::make_account() + * + * @param addr The 256-bit address of the account. + * + * @returns Pointer to the account if found or created successfully. + * Returns nullptr if an error occured. + */ std::unique_ptr ValidateQuery::unpack_account(td::ConstBitPtr addr) { auto dict_entry = ps_.account_dict_->lookup_extra(addr, 256); - auto new_acc = make_account_from(addr, std::move(dict_entry.first), std::move(dict_entry.second)); + auto new_acc = make_account_from(addr, std::move(dict_entry.first)); if (!new_acc) { reject_query("cannot load state of account "s + addr.to_hex(256) + " from previous shardchain state"); return {}; @@ -4135,6 +4650,18 @@ std::unique_ptr ValidateQuery::unpack_account(td::ConstBitPtr ad return new_acc; } +/** + * Checks the validity of a single transaction for a given account. + * Performs transaction execution. + * + * @param account The account of the transaction. + * @param lt The logical time of the transaction. + * @param trans_root The root of the transaction. + * @param is_first Flag indicating if this is the first transaction of the account. + * @param is_last Flag indicating if this is the last transaction of the account. + * + * @returns True if the transaction is valid, false otherwise. + */ bool ValidateQuery::check_one_transaction(block::Account& account, ton::LogicalTime lt, Ref trans_root, bool is_first, bool is_last) { if (!check_timeout()) { @@ -4598,7 +5125,15 @@ bool ValidateQuery::check_one_transaction(block::Account& account, ton::LogicalT return true; } -// NB: may be run in parallel for different accounts +/** + * Checks the validity of transactions for a given account block. + * NB: may be run in parallel for different accounts + * + * @param acc_addr The address of the account. + * @param acc_blk_root The root of the AccountBlock. + * + * @returns True if the account transactions are valid, false otherwise. + */ bool ValidateQuery::check_account_transactions(const StdSmcAddress& acc_addr, Ref acc_blk_root) { block::gen::AccountBlock::Record acc_blk; CHECK(tlb::csr_unpack(std::move(acc_blk_root), acc_blk) && acc_blk.account_addr == acc_addr); @@ -4630,6 +5165,11 @@ bool ValidateQuery::check_account_transactions(const StdSmcAddress& acc_addr, Re } } +/** + * Checks all transactions in the account blocks. + * + * @returns True if all transactions pass the check, False otherwise. + */ bool ValidateQuery::check_transactions() { LOG(INFO) << "checking all transactions"; return account_blocks_dict_->check_for_each_extra( @@ -4639,7 +5179,17 @@ bool ValidateQuery::check_transactions() { }); } -// similar to Collator::update_account_public_libraries() +/** + * Processes changes in libraries of an account. + * Used in masterchain validation. + * Similar to Collator::update_account_public_libraries() + * + * @param orig_libs The original libraries of the account. + * @param final_libs The final libraries of the account. + * @param addr The address of the account. + * + * @returns True if the update was successful, false otherwise. + */ bool ValidateQuery::scan_account_libraries(Ref orig_libs, Ref final_libs, const td::Bits256& addr) { vm::Dictionary dict1{std::move(orig_libs), 256}, dict2{std::move(final_libs), 256}; return dict1.scan_diff( @@ -4657,6 +5207,12 @@ bool ValidateQuery::scan_account_libraries(Ref orig_libs, Ref in_msg_root, const block::CurrencyCollection& amount, Ref addr_cell) { if (in_msg_root.is_null()) { @@ -4786,11 +5357,28 @@ bool ValidateQuery::check_special_message(Ref in_msg_root, const block return true; } +/** + * Checks if all necessary special messages are valid and exist in the incoming messages dictionary. + * Used in masterchain validation. + * + * @returns True if special messages are valid, false otherwise. + */ bool ValidateQuery::check_special_messages() { return check_special_message(recover_create_msg_, value_flow_.recovered, config_->get_config_param(3, 1)) && check_special_message(mint_msg_, value_flow_.minted, config_->get_config_param(2, 0)); } +/** + * Checks if an update of LibDescr of as single library update is valid. + * Compares updates in LibDescr against updates of account states. + * Used in masterchain validation. + * + * @param key The 256-bit key of the library. + * @param old_value The old value of the LibDescr + * @param new_value The new value of the LibDescr. + * + * @returns True if the library update is valid, false otherwise. + */ bool ValidateQuery::check_one_library_update(td::ConstBitPtr key, Ref old_value, Ref new_value) { // shared_lib_descr$00 lib:^Cell publishers:(Hashmap 256 True) = LibDescr; @@ -4841,6 +5429,12 @@ bool ValidateQuery::check_one_library_update(td::ConstBitPtr key, Refscan_diff( @@ -4861,6 +5455,11 @@ bool ValidateQuery::check_shard_libraries() { return true; } +/** + * Checks the validity of the new shard state. + * + * @returns True if the new state is valid, false otherwise. + */ bool ValidateQuery::check_new_state() { LOG(INFO) << "checking header of the new shardchain state"; block::gen::ShardStateUnsplit::Record info; @@ -4955,6 +5554,15 @@ bool ValidateQuery::check_new_state() { return true; } +/** + * Checks if a masterchain configuration update is valid. + * Used in masterchain validation. + * + * @param old_conf_params The old configuration parameters. + * @param new_conf_params The new configuration parameters. + * + * @returns True if the update is valid, false otherwise. + */ bool ValidateQuery::check_config_update(Ref old_conf_params, Ref new_conf_params) { if (!block::gen::t_ConfigParams.validate_csr(10000, new_conf_params)) { return reject_query("new configuration failed to pass automated validity checks"); @@ -5059,6 +5667,16 @@ bool ValidateQuery::check_config_update(Ref old_conf_params, Ref< "reason (the suggested configuration appears to be valid)"); } +/** + * Checks if a single entry in the dictionary of previous masterchain blocks is valid and consistent. + * Used in masterchain validation. + * + * @param seqno The sequence number of the entry. + * @param old_val_extra The old value of the entry. + * @param new_val_extra The new value of the entry. + * + * @returns True if the update is valid and consistent, false otherwise. + */ bool ValidateQuery::check_one_prev_dict_update(ton::BlockSeqno seqno, Ref old_val_extra, Ref new_val_extra) { if (old_val_extra.not_null() && new_val_extra.is_null()) { @@ -5113,7 +5731,13 @@ bool ValidateQuery::check_one_prev_dict_update(ton::BlockSeqno seqno, Ref old_val, Ref new_val) { LOG(DEBUG) << "checking update of CreatorStats for "s + key.to_hex(256); @@ -5365,7 +6009,13 @@ bool ValidateQuery::check_one_block_creator_update(td::ConstBitPtr key, Refget_shard_hash(shard); @@ -5433,6 +6093,12 @@ bool ValidateQuery::check_one_shard_fee(ShardIdFull shard, const block::Currency return true; } +/** + * Checks the validity of the McBlockExtra in a masterchain block. + * Used in masterchain validation. + * + * @returns True if the data is valid, false otherwise. + */ bool ValidateQuery::check_mc_block_extra() { if (!is_masterchain()) { return true; @@ -5484,6 +6150,11 @@ bool ValidateQuery::check_mc_block_extra() { return true; } +/** + * Validates the value flow of a block. + * + * @returns True if the value flow is valid, False otherwise. + */ bool ValidateQuery::postcheck_value_flow() { auto expected_fees = value_flow_.fees_imported + value_flow_.created + transaction_fees_ + import_fees_ - fees_burned_; @@ -5504,13 +6175,11 @@ bool ValidateQuery::postcheck_value_flow() { return true; } -/* - * - * MAIN VALIDATOR FUNCTION - * (invokes other methods in a suitable order) +/** + * MAIN VALIDATOR FUNCTION (invokes other methods in a suitable order). * + * @returns True if the validation is successful, False otherwise. */ - bool ValidateQuery::try_validate() { if (pending) { return true; @@ -5616,6 +6285,11 @@ bool ValidateQuery::try_validate() { return save_candidate(); } +/** + * Saves the candidate to disk. + * + * @returns True. + */ bool ValidateQuery::save_candidate() { auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result R) { if (R.is_error()) { @@ -5629,6 +6303,10 @@ bool ValidateQuery::save_candidate() { return true; } +/** + * Callback function called after saving block candidate. + * Finishes validation. + */ void ValidateQuery::written_candidate() { finish_query(); } diff --git a/validator/impl/validate-query.hpp b/validator/impl/validate-query.hpp index 7d15dcfe..ff8cc83c 100644 --- a/validator/impl/validate-query.hpp +++ b/validator/impl/validate-query.hpp @@ -342,8 +342,7 @@ class ValidateQuery : public td::actor::Actor { const block::McShardDescr& src_nb, bool& unprocessed); bool check_in_queue(); bool check_delivered_dequeued(); - std::unique_ptr make_account_from(td::ConstBitPtr addr, Ref account, - Ref extra); + std::unique_ptr make_account_from(td::ConstBitPtr addr, Ref account); std::unique_ptr unpack_account(td::ConstBitPtr addr); bool check_one_transaction(block::Account& account, LogicalTime lt, Ref trans_root, bool is_first, bool is_last); From 030ebaf772bf95807ccc07520018f9477c241414 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Fri, 3 Nov 2023 15:25:58 +0300 Subject: [PATCH 039/351] Change GASCONSUMED opcode to f807 --- crypto/fift/lib/Asm.fif | 2 +- crypto/vm/tonops.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crypto/fift/lib/Asm.fif b/crypto/fift/lib/Asm.fif index a0bfe642..0a4c7074 100644 --- a/crypto/fift/lib/Asm.fif +++ b/crypto/fift/lib/Asm.fif @@ -1275,7 +1275,7 @@ x{F4BF} @Defop DICTUGETEXECZ x{F800} @Defop ACCEPT x{F801} @Defop SETGASLIMIT -x{F806} @Defop GASCONSUMED +x{F807} @Defop GASCONSUMED x{F80F} @Defop COMMIT x{F810} @Defop RANDU256 diff --git a/crypto/vm/tonops.cpp b/crypto/vm/tonops.cpp index f491d252..d150f30b 100644 --- a/crypto/vm/tonops.cpp +++ b/crypto/vm/tonops.cpp @@ -101,7 +101,7 @@ void register_basic_gas_ops(OpcodeTable& cp0) { using namespace std::placeholders; cp0.insert(OpcodeInstr::mksimple(0xf800, 16, "ACCEPT", exec_accept)) .insert(OpcodeInstr::mksimple(0xf801, 16, "SETGASLIMIT", exec_set_gas_limit)) - .insert(OpcodeInstr::mksimple(0xf806, 16, "GASCONSUMED", exec_gas_consumed)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf807, 16, "GASCONSUMED", exec_gas_consumed)->require_version(4)) .insert(OpcodeInstr::mksimple(0xf80f, 16, "COMMIT", exec_commit)); } From 79ed14cba950f267aa37d532c80e674a36a739a8 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 3 Nov 2023 15:53:11 +0300 Subject: [PATCH 040/351] Add information on running tests (#796) Co-authored-by: SpyCheese --- README.md | 2 +- doc/Tests.md | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 doc/Tests.md diff --git a/README.md b/README.md index 88e02711..7e78bb04 100644 --- a/README.md +++ b/README.md @@ -70,4 +70,4 @@ If a CI workflow fails not because of your changes but workflow issues, try to f ## Running tests -Tests are executed by running `ctest` in the build directory. \ No newline at end of file +Tests are executed by running `ctest` in the build directory. See `doc/Tests.md` for more information. \ No newline at end of file diff --git a/doc/Tests.md b/doc/Tests.md new file mode 100644 index 00000000..c883731a --- /dev/null +++ b/doc/Tests.md @@ -0,0 +1,24 @@ +# Tests execution +TON contains multiple unit-tests, that facilitate detection of erroneous blockchain behaviour on each commit. +## Build tests +Go inside the build directory and, if you use ninja, build the tests using the following command: + +```ninja test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state``` + +For more details on how to build TON artifacts, please refer to any of Github actions. + +For cmake use: + +```cmake --build . --target test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state``` + +## Run tests +Go inside the build directory and with ninja execute: + +```ninja test``` + +with ctest: + +```ctest``` + +## Integration of tests into CI +Most relevant GitHub actions include the step ```Run tests``` that executes the tests. If any of tests fails, the action will be interrupted and no artifacts will be provided. \ No newline at end of file From ba03657617a015166dc1e74d15549db8846a53fe Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 3 Nov 2023 17:05:43 +0300 Subject: [PATCH 041/351] Fix transaction credit phase (#797) Co-authored-by: SpyCheese --- crypto/block/transaction.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 9df5be13..dba3ce90 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -955,10 +955,14 @@ bool Transaction::prepare_storage_phase(const StoragePhaseConfig& cfg, bool forc */ bool Transaction::prepare_credit_phase() { credit_phase = std::make_unique(); + // Due payment is only collected in storage phase. + // For messages with bounce flag, contract always receives the amount specified in message // auto collected = std::min(msg_balance_remaining.grams, due_payment); // credit_phase->due_fees_collected = collected; // due_payment -= collected; // credit_phase->credit = msg_balance_remaining -= collected; + credit_phase->due_fees_collected = td::zero_refint(); + credit_phase->credit = msg_balance_remaining; if (!msg_balance_remaining.is_valid()) { LOG(ERROR) << "cannot compute the amount to be credited in the credit phase of transaction"; return false; From 909e7dbdfc48a3c3e0774b422b99ff4b3d375504 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Wed, 22 Nov 2023 10:25:53 +0300 Subject: [PATCH 042/351] Allow anycast destination address in masterchain (#807) --- crypto/block/transaction.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index dba3ce90..49c853a9 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1976,11 +1976,6 @@ bool Transaction::check_rewrite_dest_addr(Ref& dest_addr, const A } if (rec.anycast->size() > 1) { // destination address is an anycast - if (rec.workchain_id == ton::masterchainId) { - // anycast addresses disabled in masterchain - LOG(DEBUG) << "masterchain destination address has an anycast field"; - return false; - } vm::CellSlice cs{*rec.anycast}; int d = (int)cs.fetch_ulong(6) - 32; if (d <= 0 || d > 30) { From 31263fb4754025c3c5db1504c825e96ecf010653 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Wed, 22 Nov 2023 10:27:39 +0300 Subject: [PATCH 043/351] Limit max number of public libraries on contracts (#808) --- crypto/block/block.cpp | 2 +- crypto/block/block.h | 2 ++ crypto/block/block.tlb | 3 ++- crypto/block/mc-config.cpp | 1 + crypto/block/mc-config.h | 1 + crypto/block/transaction.cpp | 42 ++++++++++++++++++++++++++++++------ validator/impl/collator.cpp | 2 +- 7 files changed, 44 insertions(+), 9 deletions(-) diff --git a/crypto/block/block.cpp b/crypto/block/block.cpp index 1131213c..9a3dba60 100644 --- a/crypto/block/block.cpp +++ b/crypto/block/block.cpp @@ -715,7 +715,7 @@ td::uint64 BlockLimitStatus::estimate_block_size(const vm::NewCellStorageStat::S sum += *extra; } return 2000 + (sum.bits >> 3) + sum.cells * 12 + sum.internal_refs * 3 + sum.external_refs * 40 + accounts * 200 + - transactions * 200 + (extra ? 200 : 0) + extra_out_msgs * 300; + transactions * 200 + (extra ? 200 : 0) + extra_out_msgs * 300 + extra_library_diff * 700; } int BlockLimitStatus::classify() const { diff --git a/crypto/block/block.h b/crypto/block/block.h index 19d99e6a..09169429 100644 --- a/crypto/block/block.h +++ b/crypto/block/block.h @@ -262,6 +262,7 @@ struct BlockLimitStatus { td::uint64 gas_used{}; vm::NewCellStorageStat st_stat; unsigned accounts{}, transactions{}, extra_out_msgs{}; + unsigned extra_library_diff{}; // Number of public libraries in deleted/frozen accounts BlockLimitStatus(const BlockLimits& limits_, ton::LogicalTime lt = 0) : limits(limits_), cur_lt(std::max(limits_.start_lt, lt)) { } @@ -271,6 +272,7 @@ struct BlockLimitStatus { transactions = accounts = 0; gas_used = 0; extra_out_msgs = 0; + extra_library_diff = 0; } td::uint64 estimate_block_size(const vm::NewCellStorageStat::Stat* extra = nullptr) const; int classify() const; diff --git a/crypto/block/block.tlb b/crypto/block/block.tlb index 1b6f72a3..4b36f13b 100644 --- a/crypto/block/block.tlb +++ b/crypto/block/block.tlb @@ -780,7 +780,8 @@ _ MisbehaviourPunishmentConfig = ConfigParam 40; size_limits_config#01 max_msg_bits:uint32 max_msg_cells:uint32 max_library_cells:uint32 max_vm_data_depth:uint16 max_ext_msg_size:uint32 max_ext_msg_depth:uint16 = SizeLimitsConfig; size_limits_config_v2#02 max_msg_bits:uint32 max_msg_cells:uint32 max_library_cells:uint32 max_vm_data_depth:uint16 - max_ext_msg_size:uint32 max_ext_msg_depth:uint16 max_acc_state_cells:uint32 max_acc_state_bits:uint32 = SizeLimitsConfig; + max_ext_msg_size:uint32 max_ext_msg_depth:uint16 max_acc_state_cells:uint32 max_acc_state_bits:uint32 + max_acc_public_libraries:uint32 = SizeLimitsConfig; _ SizeLimitsConfig = ConfigParam 43; // key is [ wc:int32 addr:uint256 ] diff --git a/crypto/block/mc-config.cpp b/crypto/block/mc-config.cpp index 02c6e45b..08be5c88 100644 --- a/crypto/block/mc-config.cpp +++ b/crypto/block/mc-config.cpp @@ -1934,6 +1934,7 @@ td::Result Config::get_size_limits_config() const { unpack_v1(rec); limits.max_acc_state_bits = rec.max_acc_state_bits; limits.max_acc_state_cells = rec.max_acc_state_cells; + limits.max_acc_public_libraries = rec.max_acc_public_libraries; }; gen::SizeLimitsConfig::Record_size_limits_config rec_v1; gen::SizeLimitsConfig::Record_size_limits_config_v2 rec_v2; diff --git a/crypto/block/mc-config.h b/crypto/block/mc-config.h index b29e3792..caab93f3 100644 --- a/crypto/block/mc-config.h +++ b/crypto/block/mc-config.h @@ -389,6 +389,7 @@ struct SizeLimitsConfig { ExtMsgLimits ext_msg_limits; td::uint32 max_acc_state_cells = 1 << 16; td::uint32 max_acc_state_bits = (1 << 16) * 1023; + td::uint32 max_acc_public_libraries = 256; }; struct CatchainValidatorsConfig { diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 49c853a9..05df6371 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -2500,8 +2500,28 @@ int Transaction::try_action_reserve_currency(vm::CellSlice& cs, ActionPhase& ap, return 0; } +/** + * Calculates the number of public libraries in the dictionary. + * + * @param libraries The dictionary of account libraries. + * + * @returns The number of public libraries in the dictionary. + */ +static td::uint32 get_public_libraries_count(const td::Ref& libraries) { + td::uint32 count = 0; + vm::Dictionary dict{libraries, 256}; + dict.check_for_each([&](td::Ref value, td::ConstBitPtr key, int) { + if (block::is_public_library(key, std::move(value))) { + ++count; + } + return true; + }); + return count; +} + /** * Checks that the new account state fits in the limits. + * This function is not called for special accounts. * * @param cfg The configuration for the action phase. * @@ -2547,10 +2567,15 @@ td::Status Transaction::check_state_limits(const ActionPhaseConfig& cfg) { } else { new_storage_stat.clear(); } - return new_storage_stat.cells <= cfg.size_limits.max_acc_state_cells && - new_storage_stat.bits <= cfg.size_limits.max_acc_state_bits - ? td::Status::OK() - : td::Status::Error("state too big"); + if (new_storage_stat.cells > cfg.size_limits.max_acc_state_cells || + new_storage_stat.bits > cfg.size_limits.max_acc_state_bits) { + return td::Status::Error("account state is too big"); + } + if (account.is_masterchain() && !cell_equal(account.library, new_library) && + get_public_libraries_count(new_library) > cfg.size_limits.max_acc_public_libraries) { + return td::Status::Error("too many public libraries"); + } + return td::Status::OK(); } /** @@ -3135,8 +3160,13 @@ bool Transaction::update_limits(block::BlockLimitStatus& blimst, bool with_size) return false; } if (with_size) { - return blimst.add_proof(new_total_state) && blimst.add_cell(root) && blimst.add_transaction() && - blimst.add_account(is_first); + if (!(blimst.add_proof(new_total_state) && blimst.add_cell(root) && blimst.add_transaction() && + blimst.add_account(is_first))) { + return false; + } + if (account.is_masterchain() && (was_frozen || was_deleted)) { + blimst.extra_library_diff += get_public_libraries_count(account.orig_library); + } } return true; } diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index d133278f..b72292bb 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -4310,7 +4310,7 @@ bool Collator::update_public_libraries() { } } } - if (libraries_changed_ && verbosity >= 2 * 0) { + if (libraries_changed_ && verbosity >= 2) { std::cerr << "New public libraries: "; block::gen::t_HashmapE_256_LibDescr.print(std::cerr, shard_libraries_->get_root()); shard_libraries_->get_root()->print_rec(std::cerr); From 1cffca0b407dfd0e47a2f95e8e1f757f6c4f177c Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Wed, 22 Nov 2023 10:27:58 +0300 Subject: [PATCH 044/351] Fix due payment reimbursement (#809) --- crypto/block/transaction.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 05df6371..23de6e29 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -885,7 +885,7 @@ bool Transaction::prepare_storage_phase(const StoragePhaseConfig& cfg, bool forc if (now < account.last_paid) { return false; } - auto to_pay = account.compute_storage_fees(now, *(cfg.pricing)); + auto to_pay = account.compute_storage_fees(now, *(cfg.pricing)) + due_payment; if (to_pay.not_null() && sgn(to_pay) < 0) { return false; } @@ -898,7 +898,7 @@ bool Transaction::prepare_storage_phase(const StoragePhaseConfig& cfg, bool forc res->fees_collected = to_pay; res->fees_due = td::zero_refint(); balance -= std::move(to_pay); - } else if (acc_status == Account::acc_frozen && !force_collect && to_pay + due_payment < cfg.delete_due_limit) { + } else if (acc_status == Account::acc_frozen && !force_collect && to_pay < cfg.delete_due_limit) { // do not collect fee res->last_paid_updated = (res->is_special ? 0 : account.last_paid); res->fees_collected = res->fees_due = td::zero_refint(); @@ -907,7 +907,7 @@ bool Transaction::prepare_storage_phase(const StoragePhaseConfig& cfg, bool forc res->fees_due = std::move(to_pay) - std::move(balance.grams); balance.grams = td::zero_refint(); if (!res->is_special) { - auto total_due = res->fees_due + due_payment; + auto total_due = res->fees_due; switch (acc_status) { case Account::acc_uninit: case Account::acc_frozen: From 6b8994e45645b073139e2bf49fec49ae9fb67c5d Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 22 Nov 2023 15:41:02 +0300 Subject: [PATCH 045/351] Return zero instead of null in compute_storage_fees (#810) Co-authored-by: SpyCheese --- crypto/block/transaction.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 23de6e29..33f1c778 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -652,7 +652,7 @@ td::RefInt256 StoragePrices::compute_storage_fees(ton::UnixTime now, const std:: const vm::CellStorageStat& storage_stat, ton::UnixTime last_paid, bool is_special, bool is_masterchain) { if (now <= last_paid || !last_paid || is_special || pricing.empty() || now <= pricing[0].valid_since) { - return {}; + return td::zero_refint(); } std::size_t n = pricing.size(), i = n; while (i && pricing[i - 1].valid_since > last_paid) { From d9580eab1bd1499ce90d801b19f164b4e85653bc Mon Sep 17 00:00:00 2001 From: "aleksej.paschenko" Date: Thu, 23 Nov 2023 14:01:45 +0300 Subject: [PATCH 046/351] Increase emulator capability to (de)serialize data (#811) --- emulator/emulator-extern.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emulator/emulator-extern.cpp b/emulator/emulator-extern.cpp index 4b65dd06..9f06964e 100644 --- a/emulator/emulator-extern.cpp +++ b/emulator/emulator-extern.cpp @@ -503,7 +503,7 @@ const char *tvm_emulator_run_get_method(void *tvm_emulator, int method_id, const auto emulator = static_cast(tvm_emulator); auto result = emulator->run_get_method(method_id, stack); - vm::FakeVmStateLimits fstate(1000); // limit recursive (de)serialization calls + vm::FakeVmStateLimits fstate(3500); // limit recursive (de)serialization calls vm::VmStateInterface::Guard guard(&fstate); vm::CellBuilder stack_cb; From 7262a66d210b843502353d6aa79406faa5eb9ccf Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Thu, 23 Nov 2023 18:17:44 +0300 Subject: [PATCH 047/351] Don't allow deploying a contract with public libs (#812) * Check account size limits in unpack_msg_state * Don't allow deploying a contract with public libs --------- Co-authored-by: SpyCheese --- crypto/block/transaction.cpp | 62 +++++++++++++++++++++---------- crypto/block/transaction.h | 5 ++- validator/impl/validate-query.cpp | 1 + 3 files changed, 47 insertions(+), 21 deletions(-) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 33f1c778..62a48cab 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1290,11 +1290,13 @@ int output_actions_count(Ref list) { /** * Unpacks the message StateInit. * + * @param cfg The configuration for the compute phase. * @param lib_only If true, only unpack libraries from the state. + * @param forbid_public_libs Don't allow public libraries in initstate. * * @returns True if the unpacking is successful, false otherwise. */ -bool Transaction::unpack_msg_state(bool lib_only) { +bool Transaction::unpack_msg_state(const ComputePhaseConfig& cfg, bool lib_only, bool forbid_public_libs) { block::gen::StateInit::Record state; if (in_msg_state.is_null() || !tlb::unpack_cell(in_msg_state, state)) { LOG(ERROR) << "cannot unpack StateInit from an inbound message"; @@ -1318,9 +1320,22 @@ bool Transaction::unpack_msg_state(bool lib_only) { new_tock = z & 1; LOG(DEBUG) << "tick=" << new_tick << ", tock=" << new_tock; } + td::Ref old_code = new_code, old_data = new_data, old_library = new_library; new_code = state.code->prefetch_ref(); new_data = state.data->prefetch_ref(); new_library = state.library->prefetch_ref(); + auto size_limits = cfg.size_limits; + if (forbid_public_libs) { + size_limits.max_acc_public_libraries = 0; + } + auto S = check_state_limits(size_limits, false); + if (S.is_error()) { + LOG(DEBUG) << "Cannot unpack msg state: " << S.move_as_error(); + new_code = old_code; + new_data = old_data; + new_library = old_library; + return false; + } return true; } @@ -1408,7 +1423,9 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { return true; } use_msg_state = true; - if (!(unpack_msg_state() && account.check_split_depth(new_split_depth))) { + bool forbid_public_libs = + acc_status == Account::acc_uninit && account.is_masterchain(); // Forbid for deploying, allow for unfreezing + if (!(unpack_msg_state(cfg, false, forbid_public_libs) && account.check_split_depth(new_split_depth))) { LOG(DEBUG) << "cannot unpack in_msg_state, or it has bad split_depth; cannot init account state"; cp.skip_reason = ComputePhase::sk_bad_state; return true; @@ -1423,7 +1440,7 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { cp.skip_reason = in_msg_state.not_null() ? ComputePhase::sk_bad_state : ComputePhase::sk_no_state; return true; } else if (in_msg_state.not_null()) { - unpack_msg_state(true); // use only libraries + unpack_msg_state(cfg, true); // use only libraries } if (in_msg_extern && in_msg_state.not_null() && account.addr != in_msg_state->get_hash().bits()) { LOG(DEBUG) << "in_msg_state hash mismatch in external message"; @@ -1560,7 +1577,7 @@ bool Transaction::prepare_action_phase(const ActionPhaseConfig& cfg) { if (account.is_special) { return true; } - auto S = check_state_limits(cfg); + auto S = check_state_limits(cfg.size_limits); if (S.is_error()) { // Rollback changes to state, fail action phase LOG(INFO) << "Account state size exceeded limits: " << S.move_as_error(); @@ -2523,13 +2540,14 @@ static td::uint32 get_public_libraries_count(const td::Ref& libraries) * Checks that the new account state fits in the limits. * This function is not called for special accounts. * - * @param cfg The configuration for the action phase. + * @param size_limits The size limits configuration. + * @param update_storage_stat Store storage stat in the Transaction's CellStorageStat. * * @returns A `td::Status` indicating the result of the check. * - If the state limits are within the allowed range, returns OK. * - If the state limits exceed the maximum allowed range, returns an error. */ -td::Status Transaction::check_state_limits(const ActionPhaseConfig& cfg) { +td::Status Transaction::check_state_limits(const SizeLimitsConfig& size_limits, bool update_storage_stat) { auto cell_equal = [](const td::Ref& a, const td::Ref& b) -> bool { if (a.is_null()) { return b.is_null(); @@ -2543,13 +2561,13 @@ td::Status Transaction::check_state_limits(const ActionPhaseConfig& cfg) { cell_equal(account.library, new_library)) { return td::Status::OK(); } - // new_storage_stat is used here beause these stats will be reused in compute_state() - new_storage_stat.limit_cells = cfg.size_limits.max_acc_state_cells; - new_storage_stat.limit_bits = cfg.size_limits.max_acc_state_bits; + vm::CellStorageStat storage_stat; + storage_stat.limit_cells = size_limits.max_acc_state_cells; + storage_stat.limit_bits = size_limits.max_acc_state_bits; td::Timer timer; auto add_used_storage = [&](const td::Ref& cell) -> td::Status { if (cell.not_null()) { - TRY_RESULT(res, new_storage_stat.add_used_storage(cell)); + TRY_RESULT(res, storage_stat.add_used_storage(cell)); if (res.max_merkle_depth > max_allowed_merkle_depth) { return td::Status::Error("too big merkle depth"); } @@ -2563,19 +2581,24 @@ td::Status Transaction::check_state_limits(const ActionPhaseConfig& cfg) { LOG(INFO) << "Compute used storage took " << timer.elapsed() << "s"; } if (acc_status == Account::acc_active) { - new_storage_stat.clear_limit(); + storage_stat.clear_limit(); } else { - new_storage_stat.clear(); + storage_stat.clear(); } - if (new_storage_stat.cells > cfg.size_limits.max_acc_state_cells || - new_storage_stat.bits > cfg.size_limits.max_acc_state_bits) { - return td::Status::Error("account state is too big"); + td::Status res; + if (storage_stat.cells > size_limits.max_acc_state_cells || storage_stat.bits > size_limits.max_acc_state_bits) { + res = td::Status::Error(PSTRING() << "account state is too big"); + } else if (account.is_masterchain() && !cell_equal(account.library, new_library) && + get_public_libraries_count(new_library) > size_limits.max_acc_public_libraries) { + res = td::Status::Error("too many public libraries"); + } else { + res = td::Status::OK(); } - if (account.is_masterchain() && !cell_equal(account.library, new_library) && - get_public_libraries_count(new_library) > cfg.size_limits.max_acc_public_libraries) { - return td::Status::Error("too many public libraries"); + if (update_storage_stat) { + // storage_stat will be reused in compute_state() + new_storage_stat = std::move(storage_stat); } - return td::Status::OK(); + return res; } /** @@ -3407,6 +3430,7 @@ td::Status FetchConfigParams::fetch_config_params( compute_phase_cfg->prev_blocks_info = std::move(prev_blocks_info); } compute_phase_cfg->suspended_addresses = config.get_suspended_addresses(now); + compute_phase_cfg->size_limits = size_limits; } { // compute action_phase_cfg diff --git a/crypto/block/transaction.h b/crypto/block/transaction.h index 6bb47fd9..d7cb95d1 100644 --- a/crypto/block/transaction.h +++ b/crypto/block/transaction.h @@ -116,6 +116,7 @@ struct ComputePhaseConfig { int global_version = 0; Ref prev_blocks_info; std::unique_ptr suspended_addresses; + SizeLimitsConfig size_limits; int vm_log_verbosity = 0; ComputePhaseConfig(td::uint64 _gas_price = 0, td::uint64 _gas_limit = 0, td::uint64 _gas_credit = 0) @@ -372,7 +373,7 @@ struct Transaction { std::vector> compute_vm_libraries(const ComputePhaseConfig& cfg); bool prepare_compute_phase(const ComputePhaseConfig& cfg); bool prepare_action_phase(const ActionPhaseConfig& cfg); - td::Status check_state_limits(const ActionPhaseConfig& cfg); + td::Status check_state_limits(const SizeLimitsConfig& size_limits, bool update_storage_stat = true); bool prepare_bounce_phase(const ActionPhaseConfig& cfg); bool compute_state(); bool serialize(); @@ -404,7 +405,7 @@ struct Transaction { bool serialize_compute_phase(vm::CellBuilder& cb); bool serialize_action_phase(vm::CellBuilder& cb); bool serialize_bounce_phase(vm::CellBuilder& cb); - bool unpack_msg_state(bool lib_only = false); + bool unpack_msg_state(const ComputePhaseConfig& cfg, bool lib_only = false, bool forbid_public_libs = false); }; } // namespace transaction diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index b134e1b3..d9d03207 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -954,6 +954,7 @@ bool ValidateQuery::fetch_config_params() { compute_phase_cfg_.prev_blocks_info = prev_blocks_info.move_as_ok(); } compute_phase_cfg_.suspended_addresses = config_->get_suspended_addresses(now_); + compute_phase_cfg_.size_limits = size_limits; } { // compute action_phase_cfg From 51d5113395fe0f765592c844ced5ef1ac4d99f4c Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 27 Nov 2023 11:30:46 +0300 Subject: [PATCH 048/351] Add 2023.11 Update changelogs --- Changelog.md | 11 +++++++++++ recent_changelog.md | 13 +++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Changelog.md b/Changelog.md index fba3c5c5..440866c2 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,14 @@ +##2023.11 Update + +1. New TVM Functionality. (Disabled by default) +2. A series of emulator improvements: libraries support, higher max stack size, etc +3. A series of tonlib and tonlib-cli improvements: wallet-v4 support, getconfig, showtransactions, etc +4. Changes to public libraries: now contract can not publish more than 256 libraries (config parameter) and contracts can not be deployed with public libraries in initstate (instead contracts need explicitly publish all libraries) +5. Changes to storage due payment: now due payment is collected in Storage Phase, however for bouncable messages fee amount can not exceed balance of account prior to message. + + +Besides the work of the core team, this update is based on the efforts of @aleksej-paschenko (emulator improvements), @akifoq (security improvements), Trail of Bits auditor as well as all participants of [TEP-88 discussion](https://github.com/ton-blockchain/TEPs/pull/88). + ## 2023.10 Update 1. A series of additional security checks in node: special cells in action list, init state in external messages, peers data prior to saving to disk. 2. Human-readable timestamps in explorer diff --git a/recent_changelog.md b/recent_changelog.md index fe2c34b2..5de7aed7 100644 --- a/recent_changelog.md +++ b/recent_changelog.md @@ -1,5 +1,10 @@ -## 2023.06 Update -1. (disabled by default) New deflation mechanisms: partial fee burning and blackhole address -2. Storage-contract improvement +##2023.11 Update -Besides the work of the core team, this update is based on the efforts of @DearJohnDoe from Tonbyte (Storage-contract improvement). +1. New TVM Functionality. (Disabled by default) +2. A series of emulator improvements: libraries support, higher max stack size, etc +3. A series of tonlib and tonlib-cli improvements: wallet-v4 support, getconfig, showtransactions, etc +4. Changes to public libraries: now contract can not publish more than 256 libraries (config parameter) and contracts can not be deployed with public libraries in initstate (instead contracts need explicitly publish all libraries) +5. Changes to storage due payment: now due payment is collected in Storage Phase, however for bouncable messages fee amount can not exceed balance of account prior to message. + + +Besides the work of the core team, this update is based on the efforts of @aleksej-paschenko (emulator improvements), @akifoq (security improvements), Trail of Bits auditor as well as all participants of [TEP-88 discussion](https://github.com/ton-blockchain/TEPs/pull/88). From 7fcf26771748338038aec4e9ec543dc69afeb1fa Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 6 Dec 2023 19:34:01 +0300 Subject: [PATCH 049/351] Improve large OutMsgQueue clearance (#822) * Improve Collator::opt_msg_queue_cleanup, increase collator timeout * Disable importing ext msgs if queue is too big * Extend timeout in collator if previous block is too old --------- Co-authored-by: SpyCheese --- crypto/vm/dict.cpp | 20 +++++++----- crypto/vm/dict.h | 4 +-- tdutils/td/utils/Time.h | 6 ++++ validator/impl/collator.cpp | 58 +++++++++++++++++++++++++++++------ validator/validator-group.cpp | 33 ++++++++++++++++---- validator/validator-group.hpp | 9 ++++++ 6 files changed, 105 insertions(+), 25 deletions(-) diff --git a/crypto/vm/dict.cpp b/crypto/vm/dict.cpp index ac32b38f..c79924d0 100644 --- a/crypto/vm/dict.cpp +++ b/crypto/vm/dict.cpp @@ -21,6 +21,7 @@ #include "vm/cellslice.h" #include "vm/stack.hpp" #include "common/bitstring.h" +#include "td/utils/Random.h" #include "td/utils/bits.h" @@ -2007,7 +2008,7 @@ bool DictionaryFixed::combine_with(DictionaryFixed& dict2) { bool DictionaryFixed::dict_check_for_each(Ref dict, td::BitPtr key_buffer, int n, int total_key_len, const DictionaryFixed::foreach_func_t& foreach_func, - bool invert_first) const { + bool invert_first, bool shuffle) const { if (dict.is_null()) { return true; } @@ -2026,26 +2027,29 @@ bool DictionaryFixed::dict_check_for_each(Ref dict, td::BitPtr key_buffer, key_buffer += l + 1; if (l) { invert_first = false; - } else if (invert_first) { + } + bool invert = shuffle ? td::Random::fast(0, 1) == 1: invert_first; + if (invert) { std::swap(c1, c2); } - key_buffer[-1] = invert_first; + key_buffer[-1] = invert; // recursive check_foreach applied to both children - if (!dict_check_for_each(std::move(c1), key_buffer, n - l - 1, total_key_len, foreach_func)) { + if (!dict_check_for_each(std::move(c1), key_buffer, n - l - 1, total_key_len, foreach_func, false, shuffle)) { return false; } - key_buffer[-1] = !invert_first; - return dict_check_for_each(std::move(c2), key_buffer, n - l - 1, total_key_len, foreach_func); + key_buffer[-1] = !invert; + return dict_check_for_each(std::move(c2), key_buffer, n - l - 1, total_key_len, foreach_func, false, shuffle); } -bool DictionaryFixed::check_for_each(const foreach_func_t& foreach_func, bool invert_first) { +bool DictionaryFixed::check_for_each(const foreach_func_t& foreach_func, bool invert_first, bool shuffle) { force_validate(); if (is_empty()) { return true; } int key_len = get_key_bits(); unsigned char key_buffer[max_key_bytes]; - return dict_check_for_each(get_root_cell(), td::BitPtr{key_buffer}, key_len, key_len, foreach_func, invert_first); + return dict_check_for_each(get_root_cell(), td::BitPtr{key_buffer}, key_len, key_len, foreach_func, invert_first, + shuffle); } static inline bool set_bit(td::BitPtr ptr, bool value = true) { diff --git a/crypto/vm/dict.h b/crypto/vm/dict.h index 978f4d53..c4044963 100644 --- a/crypto/vm/dict.h +++ b/crypto/vm/dict.h @@ -223,7 +223,7 @@ class DictionaryFixed : public DictionaryBase { int get_common_prefix(td::BitPtr buffer, unsigned buffer_len); bool cut_prefix_subdict(td::ConstBitPtr prefix, int prefix_len, bool remove_prefix = false); Ref extract_prefix_subdict_root(td::ConstBitPtr prefix, int prefix_len, bool remove_prefix = false); - bool check_for_each(const foreach_func_t& foreach_func, bool invert_first = false); + bool check_for_each(const foreach_func_t& foreach_func, bool invert_first = false, bool shuffle = false); int filter(filter_func_t check); bool combine_with(DictionaryFixed& dict2, const combine_func_t& combine_func, int mode = 0); bool combine_with(DictionaryFixed& dict2, const simple_combine_func_t& simple_combine_func, int mode = 0); @@ -292,7 +292,7 @@ class DictionaryFixed : public DictionaryBase { std::pair, bool> extract_prefix_subdict_internal(Ref dict, td::ConstBitPtr prefix, int prefix_len, bool remove_prefix = false) const; bool dict_check_for_each(Ref dict, td::BitPtr key_buffer, int n, int total_key_len, - const foreach_func_t& foreach_func, bool invert_first = false) const; + const foreach_func_t& foreach_func, bool invert_first = false, bool shuffle = false) const; std::pair, int> dict_filter(Ref dict, td::BitPtr key, int n, const filter_func_t& check_leaf, int& skip_rest) const; Ref dict_combine_with(Ref dict1, Ref dict2, td::BitPtr key_buffer, int n, int total_key_len, diff --git a/tdutils/td/utils/Time.h b/tdutils/td/utils/Time.h index 5151b818..ece822d4 100644 --- a/tdutils/td/utils/Time.h +++ b/tdutils/td/utils/Time.h @@ -110,6 +110,7 @@ class Timestamp { } friend bool operator==(Timestamp a, Timestamp b); + friend Timestamp &operator+=(Timestamp &a, double b); private: double at_{0}; @@ -122,6 +123,11 @@ inline bool operator<(const Timestamp &a, const Timestamp &b) { return a.at() < b.at(); } +inline Timestamp &operator+=(Timestamp &a, double b) { + a.at_ += b; + return a; +} + template void store(const Timestamp ×tamp, StorerT &storer) { storer.store_binary(timestamp.at() - Time::now() + Clocks::system()); diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index b72292bb..2030b345 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -703,6 +703,11 @@ bool Collator::unpack_last_mc_state() { return fatal_error(limits.move_as_error()); } block_limits_ = limits.move_as_ok(); + if (!is_masterchain()) { + // block_limits_->bytes = {131072 / 3, 524288 / 3, 1048576 / 3}; + // block_limits_->gas = {2000000 / 3, 10000000 / 3, 20000000 / 3}; + block_limits_->lt_delta = {20, 180, 200}; + } LOG(DEBUG) << "block limits: bytes [" << block_limits_->bytes.underload() << ", " << block_limits_->bytes.soft() << ", " << block_limits_->bytes.hard() << "]"; LOG(DEBUG) << "block limits: gas [" << block_limits_->gas.underload() << ", " << block_limits_->gas.soft() << ", " @@ -1818,6 +1823,17 @@ bool Collator::init_utime() { CHECK(config_); // consider unixtime and lt from previous block(s) of the same shardchain prev_now_ = prev_state_utime_; + // Extend collator timeout if previous block is too old + td::Timestamp new_timeout = td::Timestamp::in(std::min(30.0, (td::Clocks::system() - (double)prev_now_) / 2)); + if (timeout < new_timeout) { + double add = new_timeout.at() - timeout.at(); + timeout = new_timeout; + queue_cleanup_timeout_ += add; + soft_timeout_ += add; + medium_timeout_ += add; + alarm_timestamp() = timeout; + } + auto prev = std::max(config_->utime, prev_now_); now_ = std::max(prev + 1, (unsigned)std::time(nullptr)); if (now_ > now_upper_limit_) { @@ -2170,18 +2186,30 @@ bool Collator::out_msg_queue_cleanup() { } } - auto res = out_msg_queue_->filter([&](vm::CellSlice& cs, td::ConstBitPtr key, int n) -> int { + auto queue_root = out_msg_queue_->get_root_cell(); + if (queue_root.is_null()) { + LOG(DEBUG) << "out_msg_queue is empty"; + return true; + } + auto old_out_msg_queue = std::make_unique(queue_root, 352, block::tlb::aug_OutMsgQueue); + + int deleted = 0; + int total = 0; + bool fail = false; + old_out_msg_queue->check_for_each([&](Ref value, td::ConstBitPtr key, int n) -> bool { + ++total; assert(n == 352); + vm::CellSlice& cs = value.write(); // LOG(DEBUG) << "key is " << key.to_hex(n); if (queue_cleanup_timeout_.is_in_past(td::Timestamp::now())) { LOG(WARNING) << "cleaning up outbound queue takes too long, ending"; outq_cleanup_partial_ = true; - return (1 << 30) + 1; // retain all remaining outbound queue entries including this one without processing + return false; // retain all remaining outbound queue entries including this one without processing } if (block_full_) { LOG(WARNING) << "BLOCK FULL while cleaning up outbound queue, cleanup completed only partially"; outq_cleanup_partial_ = true; - return (1 << 30) + 1; // retain all remaining outbound queue entries including this one without processing + return false; // retain all remaining outbound queue entries including this one without processing } block::EnqueuedMsgDescr enq_msg_descr; unsigned long long created_lt; @@ -2190,7 +2218,8 @@ bool Collator::out_msg_queue_cleanup() { && enq_msg_descr.check_key(key) // check key && enq_msg_descr.lt_ == created_lt)) { LOG(ERROR) << "cannot unpack EnqueuedMsg with key " << key.to_hex(n); - return -1; + fail = true; + return false; } LOG(DEBUG) << "scanning outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," << enq_msg_descr.hash_.to_hex() << ") enqueued_lt=" << enq_msg_descr.enqueued_lt_; @@ -2208,22 +2237,29 @@ bool Collator::out_msg_queue_cleanup() { if (delivered) { LOG(DEBUG) << "outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," << enq_msg_descr.hash_.to_hex() << ") enqueued_lt=" << enq_msg_descr.enqueued_lt_ << " has been already delivered, dequeueing"; + ++deleted; + out_msg_queue_->lookup_delete_with_extra(key, n); if (!dequeue_message(std::move(enq_msg_descr.msg_env_), deliver_lt)) { fatal_error(PSTRING() << "cannot dequeue outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," << enq_msg_descr.hash_.to_hex() << ") by inserting a msg_export_deq record"); - return -1; + fail = true; + return false; } register_out_msg_queue_op(); if (!block_limit_status_->fits(block::ParamLimits::cl_normal)) { block_full_ = true; } } - return !delivered; - }); - LOG(DEBUG) << "deleted " << res << " messages from out_msg_queue"; - if (res < 0) { + return true; + }, false, true /* random order */); + LOG(INFO) << "deleted " << deleted << " messages from out_msg_queue, processed " << total << " messages in total"; + if (fail) { return fatal_error("error scanning/updating OutMsgQueue"); } + if (outq_cleanup_partial_ || total > 8000) { + LOG(INFO) << "out_msg_queue too big, skipping importing external messages"; + skip_extmsg_ = true; + } auto rt = out_msg_queue_->get_root(); if (verbosity >= 2) { std::cerr << "new out_msg_queue is "; @@ -3277,6 +3313,10 @@ bool Collator::process_inbound_external_messages() { LOG(INFO) << "skipping processing of inbound external messages"; return true; } + if (out_msg_queue_->get_root_cell().not_null() && out_msg_queue_->get_root_cell()->get_depth() > 12) { + LOG(INFO) << "skipping processing of inbound external messages: out msg queue is too big"; + return true; + } bool full = !block_limit_status_->fits(block::ParamLimits::cl_soft); for (auto& ext_msg_pair : ext_msg_list_) { if (full) { diff --git a/validator/validator-group.cpp b/validator/validator-group.cpp index b4c38e51..c1f4f38a 100644 --- a/validator/validator-group.cpp +++ b/validator/validator-group.cpp @@ -78,6 +78,17 @@ void ValidatorGroup::validate_block_candidate(td::uint32 round_id, BlockCandidat promise.set_error(td::Status::Error(ErrorCode::notready, "too old")); return; } + + auto next_block_id = create_next_block_id(block.id.root_hash, block.id.file_hash); + block.id = next_block_id; + + CacheKey cache_key = block_to_cache_key(block); + auto it = approved_candidates_cache_.find(cache_key); + if (it != approved_candidates_cache_.end()) { + promise.set_result(it->second); + return; + } + auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), round_id, block = block.clone(), promise = std::move(promise)](td::Result R) mutable { if (R.is_error()) { @@ -93,24 +104,32 @@ void ValidatorGroup::validate_block_candidate(td::uint32 round_id, BlockCandidat td::Timestamp::in(0.1)); } else { auto v = R.move_as_ok(); - v.visit(td::overloaded([&](UnixTime ts) { promise.set_result(ts); }, - [&](CandidateReject reject) { - promise.set_error(td::Status::Error(ErrorCode::protoviolation, - PSTRING() << "bad candidate: " << reject.reason)); - })); + v.visit(td::overloaded( + [&](UnixTime ts) { + td::actor::send_closure(SelfId, &ValidatorGroup::update_approve_cache, block_to_cache_key(block), + ts); + promise.set_result(ts); + }, + [&](CandidateReject reject) { + promise.set_error( + td::Status::Error(ErrorCode::protoviolation, PSTRING() << "bad candidate: " << reject.reason)); + })); } }); if (!started_) { P.set_error(td::Status::Error(ErrorCode::notready, "validator group not started")); return; } - auto next_block_id = create_next_block_id(block.id.root_hash, block.id.file_hash); VLOG(VALIDATOR_DEBUG) << "validating block candidate " << next_block_id; block.id = next_block_id; run_validate_query(shard_, min_ts_, min_masterchain_block_id_, prev_block_ids_, std::move(block), validator_set_, manager_, td::Timestamp::in(15.0), std::move(P)); } +void ValidatorGroup::update_approve_cache(CacheKey key, UnixTime value) { + approved_candidates_cache_[key] = value; +} + void ValidatorGroup::accept_block_candidate(td::uint32 round_id, PublicKeyHash src, td::BufferSlice block_data, RootHash root_hash, FileHash file_hash, std::vector signatures, @@ -155,6 +174,7 @@ void ValidatorGroup::accept_block_candidate(td::uint32 round_id, PublicKeyHash s std::move(approve_sig_set), src == local_id_, manager_, std::move(P)); prev_block_ids_ = std::vector{next_block_id}; cached_collated_block_ = nullptr; + approved_candidates_cache_.clear(); } void ValidatorGroup::retry_accept_block_query(BlockIdExt block_id, td::Ref block, @@ -310,6 +330,7 @@ void ValidatorGroup::start(std::vector prev, BlockIdExt min_masterch min_masterchain_block_id_ = min_masterchain_block_id; min_ts_ = min_ts; cached_collated_block_ = nullptr; + approved_candidates_cache_.clear(); started_ = true; if (init_) { diff --git a/validator/validator-group.hpp b/validator/validator-group.hpp index da9193ba..a158bc43 100644 --- a/validator/validator-group.hpp +++ b/validator/validator-group.hpp @@ -126,6 +126,15 @@ class ValidatorGroup : public td::actor::Actor { std::shared_ptr cached_collated_block_; void generated_block_candidate(std::shared_ptr cache, td::Result R); + + typedef std::tuple CacheKey; + std::map approved_candidates_cache_; + + void update_approve_cache(CacheKey key, UnixTime value); + + static CacheKey block_to_cache_key(const BlockCandidate& block) { + return std::make_tuple(block.pubkey.as_bits256(), block.id, sha256_bits256(block.data), block.collated_file_hash); + } }; } // namespace validator From 9b6d699c21a190be0cea7a38effe97f831035723 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 8 Dec 2023 14:20:17 +0300 Subject: [PATCH 050/351] Cache recent block states and adjust timeouts (#823) * Add parameter --celldb-compress-depth to speed up celldb * Fix collator timeout * Add block_state_cache * Adjust state cache ttl * Don't merge shards when queue is too big * Decrease lt limit if previous block is too old --------- Co-authored-by: SpyCheese --- crypto/vm/db/CellStorage.cpp | 43 +++++++++++--- crypto/vm/db/CellStorage.h | 6 +- crypto/vm/db/DynamicBagOfCellsDb.cpp | 12 +++- crypto/vm/db/DynamicBagOfCellsDb.h | 3 + validator-engine/validator-engine.cpp | 6 ++ validator-engine/validator-engine.hpp | 4 ++ validator/db/celldb.cpp | 82 +++++++++++++++++++++++++-- validator/db/celldb.hpp | 21 ++++++- validator/db/rootdb.cpp | 2 +- validator/db/rootdb.hpp | 7 ++- validator/fabric.h | 4 +- validator/impl/collator-impl.h | 1 + validator/impl/collator.cpp | 16 +++--- validator/impl/fabric.cpp | 5 +- validator/manager-disk.cpp | 2 +- validator/manager-hardfork.cpp | 2 +- validator/manager.cpp | 36 +++++++++++- validator/manager.hpp | 6 ++ validator/validator-options.hpp | 7 +++ validator/validator.h | 2 + 20 files changed, 230 insertions(+), 37 deletions(-) diff --git a/crypto/vm/db/CellStorage.cpp b/crypto/vm/db/CellStorage.cpp index a1b7365b..acc55898 100644 --- a/crypto/vm/db/CellStorage.cpp +++ b/crypto/vm/db/CellStorage.cpp @@ -27,16 +27,25 @@ namespace vm { namespace { class RefcntCellStorer { public: - RefcntCellStorer(td::int32 refcnt, const DataCell &cell) : refcnt_(refcnt), cell_(cell) { + RefcntCellStorer(td::int32 refcnt, const td::Ref &cell, bool as_boc) + : refcnt_(refcnt), cell_(cell), as_boc_(as_boc) { } template void store(StorerT &storer) const { using td::store; + if (as_boc_) { + td::int32 tag = -1; + store(tag, storer); + store(refcnt_, storer); + td::BufferSlice data = vm::std_boc_serialize(cell_).move_as_ok(); + storer.store_slice(data); + return; + } store(refcnt_, storer); - store(cell_, storer); - for (unsigned i = 0; i < cell_.size_refs(); i++) { - auto cell = cell_.get_ref(i); + store(*cell_, storer); + for (unsigned i = 0; i < cell_->size_refs(); i++) { + auto cell = cell_->get_ref(i); auto level_mask = cell->get_level_mask(); auto level = level_mask.get_level(); td::uint8 x = static_cast(level_mask.get_mask()); @@ -60,7 +69,8 @@ class RefcntCellStorer { private: td::int32 refcnt_; - const DataCell &cell_; + td::Ref cell_; + bool as_boc_; }; class RefcntCellParser { @@ -69,11 +79,17 @@ class RefcntCellParser { } td::int32 refcnt; Ref cell; + bool stored_boc_; template void parse(ParserT &parser, ExtCellCreator &ext_cell_creator) { using ::td::parse; parse(refcnt, parser); + stored_boc_ = false; + if (refcnt == -1) { + stored_boc_ = true; + parse(refcnt, parser); + } if (!need_data_) { return; } @@ -81,6 +97,12 @@ class RefcntCellParser { TRY_STATUS(parser.get_status()); auto size = parser.get_left_len(); td::Slice data = parser.template fetch_string_raw(size); + if (stored_boc_) { + TRY_RESULT(boc, vm::std_boc_deserialize(data)); + TRY_RESULT(loaded_cell, boc->load_cell()); + cell = std::move(loaded_cell.data_cell); + return td::Status::OK(); + } CellSerializationInfo info; auto cell_data = data; TRY_STATUS(info.init(cell_data, 0 /*ref_byte_size*/)); @@ -122,7 +144,8 @@ class RefcntCellParser { }; } // namespace -CellLoader::CellLoader(std::shared_ptr reader) : reader_(std::move(reader)) { +CellLoader::CellLoader(std::shared_ptr reader, std::function on_load_callback) + : reader_(std::move(reader)), on_load_callback_(std::move(on_load_callback)) { CHECK(reader_); } @@ -145,7 +168,11 @@ td::Result CellLoader::load(td::Slice hash, bool need_da res.refcnt_ = refcnt_cell.refcnt; res.cell_ = std::move(refcnt_cell.cell); + res.stored_boc_ = refcnt_cell.stored_boc_; //CHECK(res.cell_->get_hash() == hash); + if (on_load_callback_) { + on_load_callback_(res); + } return res; } @@ -157,7 +184,7 @@ td::Status CellStorer::erase(td::Slice hash) { return kv_.erase(hash); } -td::Status CellStorer::set(td::int32 refcnt, const DataCell &cell) { - return kv_.set(cell.get_hash().as_slice(), td::serialize(RefcntCellStorer(refcnt, cell))); +td::Status CellStorer::set(td::int32 refcnt, const td::Ref &cell, bool as_boc) { + return kv_.set(cell->get_hash().as_slice(), td::serialize(RefcntCellStorer(refcnt, cell, as_boc))); } } // namespace vm diff --git a/crypto/vm/db/CellStorage.h b/crypto/vm/db/CellStorage.h index b705b531..3106ee16 100644 --- a/crypto/vm/db/CellStorage.h +++ b/crypto/vm/db/CellStorage.h @@ -45,19 +45,21 @@ class CellLoader { Ref cell_; td::int32 refcnt_{0}; + bool stored_boc_{false}; }; - CellLoader(std::shared_ptr reader); + CellLoader(std::shared_ptr reader, std::function on_load_callback = {}); td::Result load(td::Slice hash, bool need_data, ExtCellCreator &ext_cell_creator); private: std::shared_ptr reader_; + std::function on_load_callback_; }; class CellStorer { public: CellStorer(KeyValue &kv); td::Status erase(td::Slice hash); - td::Status set(td::int32 refcnt, const DataCell &cell); + td::Status set(td::int32 refcnt, const td::Ref &cell, bool as_boc); private: KeyValue &kv_; diff --git a/crypto/vm/db/DynamicBagOfCellsDb.cpp b/crypto/vm/db/DynamicBagOfCellsDb.cpp index 0d1d099f..1aa4e0f5 100644 --- a/crypto/vm/db/DynamicBagOfCellsDb.cpp +++ b/crypto/vm/db/DynamicBagOfCellsDb.cpp @@ -210,6 +210,14 @@ class DynamicBagOfCellsDbImpl : public DynamicBagOfCellsDb, private ExtCellCreat return td::Status::OK(); } + void set_celldb_compress_depth(td::uint32 value) override { + celldb_compress_depth_ = value; + } + + vm::ExtCellCreator& as_ext_cell_creator() override { + return *this; + } + private: std::unique_ptr loader_; std::vector> to_inc_; @@ -217,6 +225,7 @@ class DynamicBagOfCellsDbImpl : public DynamicBagOfCellsDb, private ExtCellCreat CellHashTable hash_table_; std::vector visited_; Stats stats_diff_; + td::uint32 celldb_compress_depth_{0}; static td::NamedThreadSafeCounter::CounterRef get_thread_safe_counter() { static auto res = td::NamedThreadSafeCounter::get_default().get_counter("DynamicBagOfCellsDb"); @@ -443,7 +452,8 @@ class DynamicBagOfCellsDbImpl : public DynamicBagOfCellsDb, private ExtCellCreat guard.dismiss(); } else { auto loaded_cell = info.cell->load_cell().move_as_ok(); - storer.set(info.db_refcnt, *loaded_cell.data_cell); + storer.set(info.db_refcnt, loaded_cell.data_cell, + loaded_cell.data_cell->get_depth() == celldb_compress_depth_ && celldb_compress_depth_ != 0); info.in_db = true; } } diff --git a/crypto/vm/db/DynamicBagOfCellsDb.h b/crypto/vm/db/DynamicBagOfCellsDb.h index 3569208c..fa2b44d2 100644 --- a/crypto/vm/db/DynamicBagOfCellsDb.h +++ b/crypto/vm/db/DynamicBagOfCellsDb.h @@ -64,6 +64,9 @@ class DynamicBagOfCellsDb { // restart with new loader will also reset stats_diff virtual td::Status set_loader(std::unique_ptr loader) = 0; + virtual void set_celldb_compress_depth(td::uint32 value) = 0; + virtual vm::ExtCellCreator& as_ext_cell_creator() = 0; + static std::unique_ptr create(); class AsyncExecutor { diff --git a/validator-engine/validator-engine.cpp b/validator-engine/validator-engine.cpp index 23cc9347..27327493 100644 --- a/validator-engine/validator-engine.cpp +++ b/validator-engine/validator-engine.cpp @@ -1363,6 +1363,7 @@ td::Status ValidatorEngine::load_global_config() { if (!session_logs_file_.empty()) { validator_options_.write().set_session_logs_file(session_logs_file_); } + validator_options_.write().set_celldb_compress_depth(celldb_compress_depth_); std::vector h; for (auto &x : conf.validator_->hardforks_) { @@ -3761,6 +3762,11 @@ int main(int argc, char *argv[]) { acts.push_back([&x, at]() { td::actor::send_closure(x, &ValidatorEngine::schedule_shutdown, (double)at); }); return td::Status::OK(); }); + p.add_checked_option('\0', "celldb-compress-depth", "(default: 0)", [&](td::Slice arg) { + TRY_RESULT(value, td::to_integer_safe(arg)); + acts.push_back([&x, value]() { td::actor::send_closure(x, &ValidatorEngine::set_celldb_compress_depth, value); }); + return td::Status::OK(); + }); auto S = p.run(argc, argv); if (S.is_error()) { LOG(ERROR) << "failed to parse options: " << S.move_as_error(); diff --git a/validator-engine/validator-engine.hpp b/validator-engine/validator-engine.hpp index 2d966351..ebcd60c6 100644 --- a/validator-engine/validator-engine.hpp +++ b/validator-engine/validator-engine.hpp @@ -200,6 +200,7 @@ class ValidatorEngine : public td::actor::Actor { double sync_ttl_ = 0; double archive_ttl_ = 0; double key_proof_ttl_ = 0; + td::uint32 celldb_compress_depth_ = 0; bool read_config_ = false; bool started_keyring_ = false; bool started_ = false; @@ -257,6 +258,9 @@ class ValidatorEngine : public td::actor::Actor { keys_[key.compute_short_id()] = key; } void schedule_shutdown(double at); + void set_celldb_compress_depth(td::uint32 value) { + celldb_compress_depth_ = value; + } void start_up() override; ValidatorEngine() { } diff --git a/validator/db/celldb.cpp b/validator/db/celldb.cpp index 3b2a34f3..6a2b4699 100644 --- a/validator/db/celldb.cpp +++ b/validator/db/celldb.cpp @@ -62,16 +62,29 @@ void CellDbBase::execute_sync(std::function f) { f(); } -CellDbIn::CellDbIn(td::actor::ActorId root_db, td::actor::ActorId parent, std::string path) - : root_db_(root_db), parent_(parent), path_(std::move(path)) { +CellDbIn::CellDbIn(td::actor::ActorId root_db, td::actor::ActorId parent, std::string path, + td::Ref opts) + : root_db_(root_db), parent_(parent), path_(std::move(path)), opts_(opts) { } void CellDbIn::start_up() { + on_load_callback_ = [db = actor_id(this), + compress_depth = opts_->get_celldb_compress_depth()](const vm::CellLoader::LoadResult& res) { + if (res.cell_.is_null()) { + return; + } + bool expected_stored_boc = res.cell_->get_depth() == compress_depth && compress_depth != 0; + if (expected_stored_boc != res.stored_boc_) { + td::actor::send_closure(db, &CellDbIn::migrate_cell, td::Bits256{res.cell_->get_hash().bits()}); + } + }; + CellDbBase::start_up(); cell_db_ = std::make_shared(td::RocksDb::open(path_).move_as_ok()); boc_ = vm::DynamicBagOfCellsDb::create(); - boc_->set_loader(std::make_unique(cell_db_->snapshot())).ensure(); + boc_->set_celldb_compress_depth(opts_->get_celldb_compress_depth()); + boc_->set_loader(std::make_unique(cell_db_->snapshot(), on_load_callback_)).ensure(); td::actor::send_closure(parent_, &CellDb::update_snapshot, cell_db_->snapshot()); alarm_timestamp() = td::Timestamp::in(10.0); @@ -129,7 +142,7 @@ void CellDbIn::store_cell(BlockIdExt block_id, td::Ref cell, td::Promi set_block(key_hash, std::move(D)); cell_db_->commit_write_batch().ensure(); - boc_->set_loader(std::make_unique(cell_db_->snapshot())).ensure(); + boc_->set_loader(std::make_unique(cell_db_->snapshot(), on_load_callback_)).ensure(); td::actor::send_closure(parent_, &CellDb::update_snapshot, cell_db_->snapshot()); promise.set_result(boc_->load_cell(cell->get_hash().as_slice())); @@ -140,6 +153,9 @@ void CellDbIn::get_cell_db_reader(td::Promise> } void CellDbIn::alarm() { + if (migrate_after_ && migrate_after_.is_in_past()) { + migrate_cells(); + } auto E = get_block(get_empty_key_hash()).move_as_ok(); auto N = get_block(E.next).move_as_ok(); if (N.is_empty()) { @@ -220,7 +236,7 @@ void CellDbIn::gc_cont2(BlockHandle handle) { cell_db_->commit_write_batch().ensure(); alarm_timestamp() = td::Timestamp::now(); - boc_->set_loader(std::make_unique(cell_db_->snapshot())).ensure(); + boc_->set_loader(std::make_unique(cell_db_->snapshot(), on_load_callback_)).ensure(); td::actor::send_closure(parent_, &CellDb::update_snapshot, cell_db_->snapshot()); DCHECK(get_block(key_hash).is_error()); @@ -273,6 +289,49 @@ void CellDbIn::set_block(KeyHash key_hash, DbEntry e) { cell_db_->set(td::as_slice(key), e.release()).ensure(); } +void CellDbIn::migrate_cell(td::Bits256 hash) { + cells_to_migrate_.insert(hash); + if (cells_to_migrate_.size() >= 32) { + migrate_cells(); + } else if (!migrate_after_) { + migrate_after_ = td::Timestamp::in(1.0); + } +} + +void CellDbIn::migrate_cells() { + if (cells_to_migrate_.empty()) { + return; + } + vm::CellStorer stor{*cell_db_}; + auto loader = std::make_unique(cell_db_->snapshot()); + boc_->set_loader(std::make_unique(*loader)).ensure(); + cell_db_->begin_write_batch().ensure(); + td::uint32 cnt = 0; + for (const auto& hash : cells_to_migrate_) { + auto R = loader->load(hash.as_slice(), true, boc_->as_ext_cell_creator()); + if (R.is_error()) { + continue; + } + if (R.ok().status == vm::CellLoader::LoadResult::NotFound) { + continue; + } + bool expected_stored_boc = + R.ok().cell_->get_depth() == opts_->get_celldb_compress_depth() && opts_->get_celldb_compress_depth() != 0; + if (expected_stored_boc != R.ok().stored_boc_) { + ++cnt; + stor.set(R.ok().refcnt(), R.ok().cell_, expected_stored_boc).ensure(); + } + } + cells_to_migrate_.clear(); + if (cnt > 0) { + LOG(DEBUG) << "Migrated " << cnt << " cells"; + } + cell_db_->commit_write_batch().ensure(); + boc_->set_loader(std::make_unique(cell_db_->snapshot(), on_load_callback_)).ensure(); + td::actor::send_closure(parent_, &CellDb::update_snapshot, cell_db_->snapshot()); + migrate_after_ = td::Timestamp::never(); +} + void CellDb::load_cell(RootHash hash, td::Promise> promise) { if (!started_) { td::actor::send_closure(cell_db_, &CellDbIn::load_cell, hash, std::move(promise)); @@ -300,7 +359,18 @@ void CellDb::get_cell_db_reader(td::Promise> p void CellDb::start_up() { CellDbBase::start_up(); boc_ = vm::DynamicBagOfCellsDb::create(); - cell_db_ = td::actor::create_actor("celldbin", root_db_, actor_id(this), path_); + boc_->set_celldb_compress_depth(opts_->get_celldb_compress_depth()); + cell_db_ = td::actor::create_actor("celldbin", root_db_, actor_id(this), path_, opts_); + on_load_callback_ = [db = cell_db_.get(), + compress_depth = opts_->get_celldb_compress_depth()](const vm::CellLoader::LoadResult& res) { + if (res.cell_.is_null()) { + return; + } + bool expected_stored_boc = res.cell_->get_depth() == compress_depth && compress_depth != 0; + if (expected_stored_boc != res.stored_boc_) { + td::actor::send_closure(db, &CellDbIn::migrate_cell, td::Bits256{res.cell_->get_hash().bits()}); + } + }; } CellDbIn::DbEntry::DbEntry(tl_object_ptr entry) diff --git a/validator/db/celldb.hpp b/validator/db/celldb.hpp index a05e9ddb..6545d597 100644 --- a/validator/db/celldb.hpp +++ b/validator/db/celldb.hpp @@ -25,6 +25,7 @@ #include "ton/ton-types.h" #include "interfaces/block-handle.h" #include "auto/tl/ton_api.h" +#include "validator.h" namespace ton { @@ -53,7 +54,10 @@ class CellDbIn : public CellDbBase { void store_cell(BlockIdExt block_id, td::Ref cell, td::Promise> promise); void get_cell_db_reader(td::Promise> promise); - CellDbIn(td::actor::ActorId root_db, td::actor::ActorId parent, std::string path); + void migrate_cell(td::Bits256 hash); + + CellDbIn(td::actor::ActorId root_db, td::actor::ActorId parent, std::string path, + td::Ref opts); void start_up() override; void alarm() override; @@ -89,13 +93,20 @@ class CellDbIn : public CellDbBase { void gc_cont2(BlockHandle handle); void skip_gc(); + void migrate_cells(); + td::actor::ActorId root_db_; td::actor::ActorId parent_; std::string path_; + td::Ref opts_; std::unique_ptr boc_; std::shared_ptr cell_db_; + + std::function on_load_callback_; + std::set cells_to_migrate_; + td::Timestamp migrate_after_ = td::Timestamp::never(); }; class CellDb : public CellDbBase { @@ -104,11 +115,12 @@ class CellDb : public CellDbBase { void store_cell(BlockIdExt block_id, td::Ref cell, td::Promise> promise); void update_snapshot(std::unique_ptr snapshot) { started_ = true; - boc_->set_loader(std::make_unique(std::move(snapshot))).ensure(); + boc_->set_loader(std::make_unique(std::move(snapshot), on_load_callback_)).ensure(); } void get_cell_db_reader(td::Promise> promise); - CellDb(td::actor::ActorId root_db, std::string path) : root_db_(root_db), path_(path) { + CellDb(td::actor::ActorId root_db, std::string path, td::Ref opts) + : root_db_(root_db), path_(path), opts_(opts) { } void start_up() override; @@ -116,11 +128,14 @@ class CellDb : public CellDbBase { private: td::actor::ActorId root_db_; std::string path_; + td::Ref opts_; td::actor::ActorOwn cell_db_; std::unique_ptr boc_; bool started_ = false; + + std::function on_load_callback_; }; } // namespace validator diff --git a/validator/db/rootdb.cpp b/validator/db/rootdb.cpp index a7a1becf..601b07c1 100644 --- a/validator/db/rootdb.cpp +++ b/validator/db/rootdb.cpp @@ -397,7 +397,7 @@ void RootDb::get_hardforks(td::Promise> promise) { } void RootDb::start_up() { - cell_db_ = td::actor::create_actor("celldb", actor_id(this), root_path_ + "/celldb/"); + cell_db_ = td::actor::create_actor("celldb", actor_id(this), root_path_ + "/celldb/", opts_); state_db_ = td::actor::create_actor("statedb", actor_id(this), root_path_ + "/state/"); static_files_db_ = td::actor::create_actor("staticfilesdb", actor_id(this), root_path_ + "/static/"); archive_db_ = td::actor::create_actor("archive", actor_id(this), root_path_); diff --git a/validator/db/rootdb.hpp b/validator/db/rootdb.hpp index 9b0d52a6..598defcb 100644 --- a/validator/db/rootdb.hpp +++ b/validator/db/rootdb.hpp @@ -26,6 +26,7 @@ #include "statedb.hpp" #include "staticfilesdb.hpp" #include "archive-manager.hpp" +#include "validator.h" namespace ton { @@ -34,8 +35,9 @@ namespace validator { class RootDb : public Db { public: enum class Flags : td::uint32 { f_started = 1, f_ready = 2, f_switched = 4, f_archived = 8 }; - RootDb(td::actor::ActorId validator_manager, std::string root_path) - : validator_manager_(validator_manager), root_path_(std::move(root_path)) { + RootDb(td::actor::ActorId validator_manager, std::string root_path, + td::Ref opts) + : validator_manager_(validator_manager), root_path_(std::move(root_path)), opts_(opts) { } void start_up() override; @@ -138,6 +140,7 @@ class RootDb : public Db { td::actor::ActorId validator_manager_; std::string root_path_; + td::Ref opts_; td::actor::ActorOwn cell_db_; td::actor::ActorOwn state_db_; diff --git a/validator/fabric.h b/validator/fabric.h index 58f0647b..326b17ae 100644 --- a/validator/fabric.h +++ b/validator/fabric.h @@ -20,12 +20,14 @@ #include "interfaces/validator-manager.h" #include "interfaces/db.h" +#include "validator.h" namespace ton { namespace validator { -td::actor::ActorOwn create_db_actor(td::actor::ActorId manager, std::string db_root_); +td::actor::ActorOwn create_db_actor(td::actor::ActorId manager, std::string db_root_, + td::Ref opts); td::actor::ActorOwn create_liteserver_cache_actor(td::actor::ActorId manager, std::string db_root); diff --git a/validator/impl/collator-impl.h b/validator/impl/collator-impl.h index c2088f47..b3063993 100644 --- a/validator/impl/collator-impl.h +++ b/validator/impl/collator-impl.h @@ -159,6 +159,7 @@ class Collator final : public td::actor::Actor { bool report_version_{false}; bool skip_topmsgdescr_{false}; bool skip_extmsg_{false}; + bool queue_too_big_{false}; bool short_dequeue_records_{false}; td::uint64 overload_history_{0}, underload_history_{0}; td::uint64 block_size_estimate_{}; diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index 2030b345..2e4dfa1d 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -703,9 +703,7 @@ bool Collator::unpack_last_mc_state() { return fatal_error(limits.move_as_error()); } block_limits_ = limits.move_as_ok(); - if (!is_masterchain()) { - // block_limits_->bytes = {131072 / 3, 524288 / 3, 1048576 / 3}; - // block_limits_->gas = {2000000 / 3, 10000000 / 3, 20000000 / 3}; + if (now_ > prev_now_ + 15 && block_limits_->lt_delta.hard() > 200) { block_limits_->lt_delta = {20, 180, 200}; } LOG(DEBUG) << "block limits: bytes [" << block_limits_->bytes.underload() << ", " << block_limits_->bytes.soft() @@ -1828,9 +1826,6 @@ bool Collator::init_utime() { if (timeout < new_timeout) { double add = new_timeout.at() - timeout.at(); timeout = new_timeout; - queue_cleanup_timeout_ += add; - soft_timeout_ += add; - medium_timeout_ += add; alarm_timestamp() = timeout; } @@ -2259,6 +2254,7 @@ bool Collator::out_msg_queue_cleanup() { if (outq_cleanup_partial_ || total > 8000) { LOG(INFO) << "out_msg_queue too big, skipping importing external messages"; skip_extmsg_ = true; + queue_too_big_ = true; } auto rt = out_msg_queue_->get_root(); if (verbosity >= 2) { @@ -4170,8 +4166,12 @@ bool Collator::check_block_overload() { << " size_estimate=" << block_size_estimate_; auto cl = block_limit_status_->classify(); if (cl <= block::ParamLimits::cl_underload) { - underload_history_ |= 1; - LOG(INFO) << "block is underloaded"; + if (queue_too_big_) { + LOG(INFO) << "block is underloaded, but don't set underload history because out msg queue is big"; + } else { + underload_history_ |= 1; + LOG(INFO) << "block is underloaded"; + } } else if (cl >= block::ParamLimits::cl_soft) { overload_history_ |= 1; LOG(INFO) << "block is overloaded (category " << cl << ")"; diff --git a/validator/impl/fabric.cpp b/validator/impl/fabric.cpp index 0131fff7..23a03482 100644 --- a/validator/impl/fabric.cpp +++ b/validator/impl/fabric.cpp @@ -39,8 +39,9 @@ namespace ton { namespace validator { -td::actor::ActorOwn create_db_actor(td::actor::ActorId manager, std::string db_root_) { - return td::actor::create_actor("db", manager, db_root_); +td::actor::ActorOwn create_db_actor(td::actor::ActorId manager, std::string db_root_, + td::Ref opts) { + return td::actor::create_actor("db", manager, db_root_, opts); } td::actor::ActorOwn create_liteserver_cache_actor(td::actor::ActorId manager, diff --git a/validator/manager-disk.cpp b/validator/manager-disk.cpp index 8818c86a..3717d7b0 100644 --- a/validator/manager-disk.cpp +++ b/validator/manager-disk.cpp @@ -901,7 +901,7 @@ void ValidatorManagerImpl::send_top_shard_block_description(td::Ref R) { R.ensure(); diff --git a/validator/manager-hardfork.cpp b/validator/manager-hardfork.cpp index 80a64d25..e290f635 100644 --- a/validator/manager-hardfork.cpp +++ b/validator/manager-hardfork.cpp @@ -549,7 +549,7 @@ void ValidatorManagerImpl::register_block_handle(BlockHandle handle, td::Promise } void ValidatorManagerImpl::start_up() { - db_ = create_db_actor(actor_id(this), db_root_); + db_ = create_db_actor(actor_id(this), db_root_, opts_); } void ValidatorManagerImpl::try_get_static_file(FileHash file_hash, td::Promise promise) { diff --git a/validator/manager.cpp b/validator/manager.cpp index e22616ea..8caed0f6 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -585,6 +585,12 @@ void ValidatorManagerImpl::run_ext_query(td::BufferSlice data, td::Promise> promise) { + auto it0 = block_state_cache_.find(handle->id()); + if (it0 != block_state_cache_.end()) { + it0->second.ttl_ = td::Timestamp::in(30.0); + promise.set_result(it0->second.state_); + return; + } auto it = wait_state_.find(handle->id()); if (it == wait_state_.end()) { auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), handle](td::Result> R) { @@ -988,6 +994,9 @@ void ValidatorManagerImpl::get_block_by_seqno_from_db(AccountIdPrefixFull accoun } void ValidatorManagerImpl::finished_wait_state(BlockHandle handle, td::Result> R) { + if (R.is_ok()) { + block_state_cache_[handle->id()] = {R.ok(), td::Timestamp::in(30.0)}; + } auto it = wait_state_.find(handle->id()); if (it != wait_state_.end()) { if (R.is_error()) { @@ -1441,7 +1450,7 @@ void ValidatorManagerImpl::send_block_broadcast(BlockBroadcast broadcast) { } void ValidatorManagerImpl::start_up() { - db_ = create_db_actor(actor_id(this), db_root_); + db_ = create_db_actor(actor_id(this), db_root_, opts_); lite_server_cache_ = create_liteserver_cache_actor(actor_id(this), db_root_); token_manager_ = td::actor::create_actor("tokenmanager"); td::mkdir(db_root_ + "/tmp/").ensure(); @@ -2373,6 +2382,31 @@ void ValidatorManagerImpl::alarm() { for (auto &w : shard_client_waiters_) { w.second.check_timers(); } + for (auto it = block_state_cache_.begin(); it != block_state_cache_.end();) { + bool del = it->second.ttl_.is_in_past(); + if (del) { + auto block_id = it->first; + if (block_id.is_masterchain()) { + if (block_id.seqno() == last_masterchain_seqno_) { + it->second.ttl_ = td::Timestamp::in(30.0); + del = false; + } + } else if (last_masterchain_state_.not_null()) { + auto shard = last_masterchain_state_->get_shard_from_config(block_id.shard_full()); + if (shard.not_null()) { + if (block_id.seqno() == shard->top_block_id().seqno()) { + it->second.ttl_ = td::Timestamp::in(30.0); + del = false; + } + } + } + } + if (del) { + it = block_state_cache_.erase(it); + } else { + ++it; + } + } } alarm_timestamp().relax(check_waiters_at_); if (check_shard_clients_.is_in_past()) { diff --git a/validator/manager.hpp b/validator/manager.hpp index d133f83b..ccd85423 100644 --- a/validator/manager.hpp +++ b/validator/manager.hpp @@ -183,6 +183,12 @@ class ValidatorManagerImpl : public ValidatorManager { std::map>> wait_state_; std::map>> wait_block_data_; + struct CachedBlockState { + td::Ref state_; + td::Timestamp ttl_; + }; + std::map block_state_cache_; + struct WaitBlockHandle { std::vector> waiting_; }; diff --git a/validator/validator-options.hpp b/validator/validator-options.hpp index d23d8cc9..3a7e5ba7 100644 --- a/validator/validator-options.hpp +++ b/validator/validator-options.hpp @@ -114,6 +114,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { std::string get_session_logs_file() const override { return session_logs_file_; } + td::uint32 get_celldb_compress_depth() const override { + return celldb_compress_depth_; + } void set_zero_block_id(BlockIdExt block_id) override { zero_block_id_ = block_id; @@ -167,6 +170,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { void set_session_logs_file(std::string f) override { session_logs_file_ = std::move(f); } + void set_celldb_compress_depth(td::uint32 value) override { + celldb_compress_depth_ = value; + } ValidatorManagerOptionsImpl *make_copy() const override { return new ValidatorManagerOptionsImpl(*this); @@ -209,6 +215,7 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { BlockSeqno truncate_{0}; BlockSeqno sync_upto_{0}; std::string session_logs_file_; + td::uint32 celldb_compress_depth_{0}; }; } // namespace validator diff --git a/validator/validator.h b/validator/validator.h index 0687b160..7cdea805 100644 --- a/validator/validator.h +++ b/validator/validator.h @@ -81,6 +81,7 @@ struct ValidatorManagerOptions : public td::CntObject { virtual BlockSeqno get_truncate_seqno() const = 0; virtual BlockSeqno sync_upto() const = 0; virtual std::string get_session_logs_file() const = 0; + virtual td::uint32 get_celldb_compress_depth() const = 0; virtual void set_zero_block_id(BlockIdExt block_id) = 0; virtual void set_init_block_id(BlockIdExt block_id) = 0; @@ -100,6 +101,7 @@ struct ValidatorManagerOptions : public td::CntObject { virtual void truncate_db(BlockSeqno seqno) = 0; virtual void set_sync_upto(BlockSeqno seqno) = 0; virtual void set_session_logs_file(std::string f) = 0; + virtual void set_celldb_compress_depth(td::uint32 value) = 0; static td::Ref create( BlockIdExt zero_block_id, BlockIdExt init_block_id, From 5e6b67ae96d31a8608375ee12835b11c7721a6d3 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 13 Dec 2023 12:57:34 +0300 Subject: [PATCH 051/351] Improve handling outbound message queues (#825) * Improve handling outbound message queues * Cleanup queue faster * Calculate queue sizes in background * Force or limit split/merge depending on queue size * Increase validate_ref limit for transaction * Add all changes of public libraries to block size estimation * Don't crash on timeout in GC * Don't import external messages when queue is too big --------- Co-authored-by: SpyCheese --- crypto/block/block.cpp | 26 ++- crypto/block/block.h | 12 +- crypto/block/output-queue-merger.cpp | 20 +- crypto/block/output-queue-merger.h | 12 +- crypto/block/transaction.cpp | 37 +++- validator-engine/validator-engine.cpp | 13 ++ validator/CMakeLists.txt | 2 + validator/impl/collator-impl.h | 5 +- validator/impl/collator.cpp | 284 +++++++++++++++++------- validator/manager-disk.hpp | 9 + validator/manager-hardfork.hpp | 9 + validator/manager.cpp | 10 +- validator/manager.hpp | 14 ++ validator/queue-size-counter.cpp | 301 ++++++++++++++++++++++++++ validator/queue-size-counter.hpp | 82 +++++++ validator/validator.h | 2 + 16 files changed, 727 insertions(+), 111 deletions(-) create mode 100644 validator/queue-size-counter.cpp create mode 100644 validator/queue-size-counter.hpp diff --git a/crypto/block/block.cpp b/crypto/block/block.cpp index 9a3dba60..a22fd1e5 100644 --- a/crypto/block/block.cpp +++ b/crypto/block/block.cpp @@ -715,7 +715,7 @@ td::uint64 BlockLimitStatus::estimate_block_size(const vm::NewCellStorageStat::S sum += *extra; } return 2000 + (sum.bits >> 3) + sum.cells * 12 + sum.internal_refs * 3 + sum.external_refs * 40 + accounts * 200 + - transactions * 200 + (extra ? 200 : 0) + extra_out_msgs * 300 + extra_library_diff * 700; + transactions * 200 + (extra ? 200 : 0) + extra_out_msgs * 300 + public_library_diff * 700; } int BlockLimitStatus::classify() const { @@ -1009,8 +1009,8 @@ td::Status ShardState::merge_with(ShardState& sib) { return td::Status::OK(); } -td::Result> ShardState::compute_split_out_msg_queue( - ton::ShardIdFull subshard) { +td::Result> ShardState::compute_split_out_msg_queue(ton::ShardIdFull subshard, + td::uint32* queue_size) { auto shard = id_.shard_full(); if (!ton::shard_is_parent(shard, subshard)) { return td::Status::Error(-666, "cannot split subshard "s + subshard.to_str() + " from state of " + id_.to_str() + @@ -1018,7 +1018,7 @@ td::Result> ShardState::compute_split_o } CHECK(out_msg_queue_); auto subqueue = std::make_unique(*out_msg_queue_); - int res = block::filter_out_msg_queue(*subqueue, shard, subshard); + int res = block::filter_out_msg_queue(*subqueue, shard, subshard, queue_size); if (res < 0) { return td::Status::Error(-666, "error splitting OutMsgQueue of "s + id_.to_str()); } @@ -1040,7 +1040,7 @@ td::Result> ShardState::compu return std::move(sub_processed_upto); } -td::Status ShardState::split(ton::ShardIdFull subshard) { +td::Status ShardState::split(ton::ShardIdFull subshard, td::uint32* queue_size) { if (!ton::shard_is_parent(id_.shard_full(), subshard)) { return td::Status::Error(-666, "cannot split subshard "s + subshard.to_str() + " from state of " + id_.to_str() + " because it is not a parent"); @@ -1058,7 +1058,7 @@ td::Status ShardState::split(ton::ShardIdFull subshard) { auto shard1 = id_.shard_full(); CHECK(ton::shard_is_parent(shard1, subshard)); CHECK(out_msg_queue_); - int res1 = block::filter_out_msg_queue(*out_msg_queue_, shard1, subshard); + int res1 = block::filter_out_msg_queue(*out_msg_queue_, shard1, subshard, queue_size); if (res1 < 0) { return td::Status::Error(-666, "error splitting OutMsgQueue of "s + id_.to_str()); } @@ -1098,8 +1098,12 @@ td::Status ShardState::split(ton::ShardIdFull subshard) { return td::Status::OK(); } -int filter_out_msg_queue(vm::AugmentedDictionary& out_queue, ton::ShardIdFull old_shard, ton::ShardIdFull subshard) { - return out_queue.filter([subshard, old_shard](vm::CellSlice& cs, td::ConstBitPtr key, int key_len) -> int { +int filter_out_msg_queue(vm::AugmentedDictionary& out_queue, ton::ShardIdFull old_shard, ton::ShardIdFull subshard, + td::uint32* queue_size) { + if (queue_size) { + *queue_size = 0; + } + return out_queue.filter([=](vm::CellSlice& cs, td::ConstBitPtr key, int key_len) -> int { CHECK(key_len == 352); LOG(DEBUG) << "scanning OutMsgQueue entry with key " << key.to_hex(key_len); block::tlb::MsgEnvelope::Record_std env; @@ -1122,7 +1126,11 @@ int filter_out_msg_queue(vm::AugmentedDictionary& out_queue, ton::ShardIdFull ol << " does not contain current address belonging to shard " << old_shard.to_str(); return -1; } - return ton::shard_contains(subshard, cur_prefix); + bool res = ton::shard_contains(subshard, cur_prefix); + if (res && queue_size) { + ++*queue_size; + } + return res; }); } diff --git a/crypto/block/block.h b/crypto/block/block.h index 09169429..c54949f4 100644 --- a/crypto/block/block.h +++ b/crypto/block/block.h @@ -262,7 +262,7 @@ struct BlockLimitStatus { td::uint64 gas_used{}; vm::NewCellStorageStat st_stat; unsigned accounts{}, transactions{}, extra_out_msgs{}; - unsigned extra_library_diff{}; // Number of public libraries in deleted/frozen accounts + unsigned public_library_diff{}; BlockLimitStatus(const BlockLimits& limits_, ton::LogicalTime lt = 0) : limits(limits_), cur_lt(std::max(limits_.start_lt, lt)) { } @@ -272,7 +272,7 @@ struct BlockLimitStatus { transactions = accounts = 0; gas_used = 0; extra_out_msgs = 0; - extra_library_diff = 0; + public_library_diff = 0; } td::uint64 estimate_block_size(const vm::NewCellStorageStat::Stat* extra = nullptr) const; int classify() const; @@ -433,10 +433,11 @@ struct ShardState { ton::BlockSeqno prev_mc_block_seqno, bool after_split, bool clear_history, std::function for_each_mcseqno); td::Status merge_with(ShardState& sib); - td::Result> compute_split_out_msg_queue(ton::ShardIdFull subshard); + td::Result> compute_split_out_msg_queue(ton::ShardIdFull subshard, + td::uint32* queue_size = nullptr); td::Result> compute_split_processed_upto( ton::ShardIdFull subshard); - td::Status split(ton::ShardIdFull subshard); + td::Status split(ton::ShardIdFull subshard, td::uint32* queue_size = nullptr); td::Status unpack_out_msg_queue_info(Ref out_msg_queue_info); bool clear_load_history() { overload_history_ = underload_history_ = 0; @@ -656,7 +657,8 @@ class MtCarloComputeShare { void gen_vset(); }; -int filter_out_msg_queue(vm::AugmentedDictionary& out_queue, ton::ShardIdFull old_shard, ton::ShardIdFull subshard); +int filter_out_msg_queue(vm::AugmentedDictionary& out_queue, ton::ShardIdFull old_shard, ton::ShardIdFull subshard, + td::uint32* queue_size = nullptr); std::ostream& operator<<(std::ostream& os, const ShardId& shard_id); diff --git a/crypto/block/output-queue-merger.cpp b/crypto/block/output-queue-merger.cpp index 1084bb1a..aa425f6b 100644 --- a/crypto/block/output-queue-merger.cpp +++ b/crypto/block/output-queue-merger.cpp @@ -146,22 +146,30 @@ bool OutputQueueMerger::add_root(int src, Ref outmsg_root) { return true; } -OutputQueueMerger::OutputQueueMerger(ton::ShardIdFull _queue_for, std::vector _neighbors) +OutputQueueMerger::OutputQueueMerger(ton::ShardIdFull _queue_for, std::vector _neighbors) : queue_for(_queue_for), neighbors(std::move(_neighbors)), eof(false), failed(false) { init(); } +OutputQueueMerger::OutputQueueMerger(ton::ShardIdFull _queue_for, std::vector _neighbors) + : queue_for(_queue_for), eof(false), failed(false) { + for (auto& nb : _neighbors) { + neighbors.emplace_back(nb.top_block_id(), nb.outmsg_root, nb.is_disabled()); + } + init(); +} + void OutputQueueMerger::init() { common_pfx.bits().store_int(queue_for.workchain, 32); int l = queue_for.pfx_len(); td::bitstring::bits_store_long_top(common_pfx.bits() + 32, queue_for.shard, l); common_pfx_len = 32 + l; int i = 0; - for (block::McShardDescr& neighbor : neighbors) { - if (!neighbor.is_disabled()) { - LOG(DEBUG) << "adding " << (neighbor.outmsg_root.is_null() ? "" : "non-") << "empty output queue for neighbor #" - << i << " (" << neighbor.blk_.to_str() << ")"; - add_root(i++, neighbor.outmsg_root); + for (Neighbor& neighbor : neighbors) { + if (!neighbor.disabled_) { + LOG(DEBUG) << "adding " << (neighbor.outmsg_root_.is_null() ? "" : "non-") << "empty output queue for neighbor #" + << i << " (" << neighbor.block_id_.to_str() << ")"; + add_root(i++, neighbor.outmsg_root_); } else { LOG(DEBUG) << "skipping output queue for disabled neighbor #" << i; i++; diff --git a/crypto/block/output-queue-merger.h b/crypto/block/output-queue-merger.h index bf3d8586..07533f24 100644 --- a/crypto/block/output-queue-merger.h +++ b/crypto/block/output-queue-merger.h @@ -51,12 +51,22 @@ struct OutputQueueMerger { bool unpack_node(td::ConstBitPtr key_pfx, int key_pfx_len, Ref node); bool split(MsgKeyValue& second); }; + struct Neighbor { + ton::BlockIdExt block_id_; + td::Ref outmsg_root_; + bool disabled_; + Neighbor() = default; + Neighbor(ton::BlockIdExt block_id, td::Ref outmsg_root, bool disabled = false) + : block_id_(block_id), outmsg_root_(std::move(outmsg_root)), disabled_(disabled) { + } + }; // ton::ShardIdFull queue_for; std::vector> msg_list; - std::vector neighbors; + std::vector neighbors; public: + OutputQueueMerger(ton::ShardIdFull _queue_for, std::vector _neighbors); OutputQueueMerger(ton::ShardIdFull _queue_for, std::vector _neighbors); bool is_eof() const { return eof; diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 62a48cab..7a907337 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -2536,6 +2536,31 @@ static td::uint32 get_public_libraries_count(const td::Ref& libraries) return count; } +/** + * Calculates the number of changes of public libraries in the dictionary. + * + * @param old_libraries The dictionary of account libraries before the transaction. + * @param new_libraries The dictionary of account libraries after the transaction. + * + * @returns The number of changed public libraries. + */ +static td::uint32 get_public_libraries_diff_count(const td::Ref& old_libraries, + const td::Ref& new_libraries) { + td::uint32 count = 0; + vm::Dictionary dict1{old_libraries, 256}; + vm::Dictionary dict2{new_libraries, 256}; + dict1.scan_diff(dict2, [&](td::ConstBitPtr key, int n, Ref val1, Ref val2) -> bool { + CHECK(n == 256); + bool is_public1 = val1.not_null() && block::is_public_library(key, val1); + bool is_public2 = val2.not_null() && block::is_public_library(key, val2); + if (is_public1 != is_public2) { + ++count; + } + return true; + }); + return count; +} + /** * Checks that the new account state fits in the limits. * This function is not called for special accounts. @@ -2979,14 +3004,14 @@ bool Transaction::serialize() { vm::load_cell_slice(root).print_rec(std::cerr); } - if (!block::gen::t_Transaction.validate_ref(root)) { + if (!block::gen::t_Transaction.validate_ref(4096, root)) { LOG(ERROR) << "newly-generated transaction failed to pass automated validation:"; vm::load_cell_slice(root).print_rec(std::cerr); block::gen::t_Transaction.print_ref(std::cerr, root); root.clear(); return false; } - if (!block::tlb::t_Transaction.validate_ref(root)) { + if (!block::tlb::t_Transaction.validate_ref(4096, root)) { LOG(ERROR) << "newly-generated transaction failed to pass hand-written validation:"; vm::load_cell_slice(root).print_rec(std::cerr); block::gen::t_Transaction.print_ref(std::cerr, root); @@ -3187,8 +3212,12 @@ bool Transaction::update_limits(block::BlockLimitStatus& blimst, bool with_size) blimst.add_account(is_first))) { return false; } - if (account.is_masterchain() && (was_frozen || was_deleted)) { - blimst.extra_library_diff += get_public_libraries_count(account.orig_library); + if (account.is_masterchain()) { + if (was_frozen || was_deleted) { + blimst.public_library_diff += get_public_libraries_count(account.orig_library); + } else { + blimst.public_library_diff += get_public_libraries_diff_count(account.orig_library, new_library); + } } } return true; diff --git a/validator-engine/validator-engine.cpp b/validator-engine/validator-engine.cpp index 27327493..d98c296c 100644 --- a/validator-engine/validator-engine.cpp +++ b/validator-engine/validator-engine.cpp @@ -3397,6 +3397,19 @@ void ValidatorEngine::run_control_query(ton::ton_api::engine_validator_getShardO promise.set_value(create_control_query_error(td::Status::Error(ton::ErrorCode::notready, "no such block"))); return; } + if (!dest) { + td::actor::send_closure( + manager, &ton::validator::ValidatorManagerInterface::get_out_msg_queue_size, handle->id(), + [promise = std::move(promise)](td::Result R) mutable { + if (R.is_error()) { + promise.set_value(create_control_query_error(R.move_as_error_prefix("failed to get queue size: "))); + } else { + promise.set_value(ton::create_serialize_tl_object( + R.move_as_ok())); + } + }); + return; + } td::actor::send_closure( manager, &ton::validator::ValidatorManagerInterface::get_shard_state_from_db, handle, [=, promise = std::move(promise)](td::Result> R) mutable { diff --git a/validator/CMakeLists.txt b/validator/CMakeLists.txt index 068569de..f858e6ff 100644 --- a/validator/CMakeLists.txt +++ b/validator/CMakeLists.txt @@ -52,6 +52,7 @@ set(VALIDATOR_HEADERS invariants.hpp import-db-slice.hpp + queue-size-counter.hpp manager-disk.h manager-disk.hpp @@ -77,6 +78,7 @@ set(VALIDATOR_SOURCE validator-full-id.cpp validator-group.cpp validator-options.cpp + queue-size-counter.cpp downloaders/wait-block-data.cpp downloaders/wait-block-state.cpp diff --git a/validator/impl/collator-impl.h b/validator/impl/collator-impl.h index b3063993..fe931cd6 100644 --- a/validator/impl/collator-impl.h +++ b/validator/impl/collator-impl.h @@ -60,7 +60,6 @@ class Collator final : public td::actor::Actor { bool preinit_complete{false}; bool is_key_block_{false}; bool block_full_{false}; - bool outq_cleanup_partial_{false}; bool inbound_queues_empty_{false}; bool libraries_changed_{false}; bool prev_key_block_exists_{false}; @@ -159,7 +158,6 @@ class Collator final : public td::actor::Actor { bool report_version_{false}; bool skip_topmsgdescr_{false}; bool skip_extmsg_{false}; - bool queue_too_big_{false}; bool short_dequeue_records_{false}; td::uint64 overload_history_{0}, underload_history_{0}; td::uint64 block_size_estimate_{}; @@ -189,6 +187,7 @@ class Collator final : public td::actor::Actor { std::priority_queue, std::greater> new_msgs; std::pair last_proc_int_msg_, first_unproc_int_msg_; std::unique_ptr in_msg_dict, out_msg_dict, out_msg_queue_, sibling_out_msg_queue_; + td::uint32 out_msg_queue_size_ = 0; std::unique_ptr ihr_pending; std::shared_ptr processed_upto_, sibling_processed_upto_; std::unique_ptr block_create_stats_; @@ -227,6 +226,7 @@ class Collator final : public td::actor::Actor { bool fix_one_processed_upto(block::MsgProcessedUpto& proc, const ton::ShardIdFull& owner); bool fix_processed_upto(block::MsgProcessedUptoCollection& upto); void got_neighbor_out_queue(int i, td::Result> res); + void got_out_queue_size(size_t i, td::Result res); bool adjust_shard_config(); bool store_shard_fees(ShardIdFull shard, const block::CurrencyCollection& fees, const block::CurrencyCollection& created); @@ -260,6 +260,7 @@ class Collator final : public td::actor::Actor { bool check_prev_block_exact(const BlockIdExt& listed, const BlockIdExt& prev); bool check_this_shard_mc_info(); bool request_neighbor_msg_queues(); + bool request_out_msg_queue_size(); void update_max_lt(ton::LogicalTime lt); bool is_masterchain() const { return shard_.is_masterchain(); diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index 2e4dfa1d..2f4a002a 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -44,6 +44,12 @@ namespace validator { using td::Ref; using namespace std::literals::string_literals; +// Don't increase MERGE_MAX_QUEUE_LIMIT too much: merging requires cleaning the whole queue in out_msg_queue_cleanup +static const td::uint32 FORCE_SPLIT_QUEUE_SIZE = 4096; +static const td::uint32 SPLIT_MAX_QUEUE_SIZE = 100000; +static const td::uint32 MERGE_MAX_QUEUE_SIZE = 2047; +static const td::uint32 SKIP_EXTERNALS_QUEUE_SIZE = 8000; + #define DBG(__n) dbg(__n)&& #define DSTART int __dcnt = 0; #define DEB DBG(++__dcnt) @@ -790,6 +796,26 @@ bool Collator::request_neighbor_msg_queues() { return true; } +/** + * Requests the size of the outbound message queue from the previous state(s). + * +* @returns True if the request was successful, false otherwise. + */ +bool Collator::request_out_msg_queue_size() { + if (after_split_) { + // If block is after split, the size is calculated during split (see Collator::split_last_state) + return true; + } + for (size_t i = 0; i < prev_blocks.size(); ++i) { + ++pending; + send_closure_later(manager, &ValidatorManager::get_out_msg_queue_size, prev_blocks[i], + [self = get_self(), i](td::Result res) { + td::actor::send_closure(std::move(self), &Collator::got_out_queue_size, i, std::move(res)); + }); + } + return true; +} + /** * Handles the result of obtaining the outbound queue for a neighbor. * @@ -854,6 +880,27 @@ void Collator::got_neighbor_out_queue(int i, td::Result> res) check_pending(); } +/** + * Handles the result of obtaining the size of the outbound message queue. + * + * If the block is after merge then the two sizes are added. + * + * @param i The index of the previous block (0 or 1). + * @param res The result object containing the size of the queue. + */ +void Collator::got_out_queue_size(size_t i, td::Result res) { + --pending; + if (res.is_error()) { + fatal_error( + res.move_as_error_prefix(PSTRING() << "failed to get message queue size from prev block #" << i << ": ")); + return; + } + td::uint32 size = res.move_as_ok(); + LOG(DEBUG) << "got outbound queue size from prev block #" << i << ": " << size; + out_msg_queue_size_ += size; + check_pending(); +} + /** * Unpacks and merges the states of two previous blocks. * Used if the block is after_merge. @@ -972,7 +1019,7 @@ bool Collator::split_last_state(block::ShardState& ss) { return fatal_error(res2.move_as_error()); } sibling_processed_upto_ = res2.move_as_ok(); - auto res3 = ss.split(shard_); + auto res3 = ss.split(shard_, &out_msg_queue_size_); if (res3.is_error()) { return fatal_error(std::move(res3)); } @@ -1449,6 +1496,9 @@ bool Collator::do_preinit() { if (!request_neighbor_msg_queues()) { return false; } + if (!request_out_msg_queue_size()) { + return false; + } return true; } @@ -1824,7 +1874,6 @@ bool Collator::init_utime() { // Extend collator timeout if previous block is too old td::Timestamp new_timeout = td::Timestamp::in(std::min(30.0, (td::Clocks::system() - (double)prev_now_) / 2)); if (timeout < new_timeout) { - double add = new_timeout.at() - timeout.at(); timeout = new_timeout; alarm_timestamp() = timeout; } @@ -2174,95 +2223,144 @@ bool Collator::out_msg_queue_cleanup() { block::gen::t_OutMsgQueue.print(std::cerr, *rt); rt->print_rec(std::cerr); } - for (const auto& nb : neighbors_) { - if (!nb.is_disabled() && (!nb.processed_upto || !nb.processed_upto->can_check_processed())) { - return fatal_error(-667, PSTRING() << "internal error: no info for checking processed messages from neighbor " - << nb.blk_.to_str()); - } - } - auto queue_root = out_msg_queue_->get_root_cell(); - if (queue_root.is_null()) { - LOG(DEBUG) << "out_msg_queue is empty"; - return true; - } - auto old_out_msg_queue = std::make_unique(queue_root, 352, block::tlb::aug_OutMsgQueue); + if (after_merge_) { + // We need to clean the whole queue after merge + // Queue is not too big, see const MERGE_MAX_QUEUE_SIZE + for (const auto& nb : neighbors_) { + if (!nb.is_disabled() && (!nb.processed_upto || !nb.processed_upto->can_check_processed())) { + return fatal_error(-667, PSTRING() << "internal error: no info for checking processed messages from neighbor " + << nb.blk_.to_str()); + } + } + td::uint32 deleted = 0; + auto res = out_msg_queue_->filter([&](vm::CellSlice& cs, td::ConstBitPtr key, int n) -> int { + assert(n == 352); + block::EnqueuedMsgDescr enq_msg_descr; + unsigned long long created_lt; + if (!(cs.fetch_ulong_bool(64, created_lt) // augmentation + && enq_msg_descr.unpack(cs) // unpack EnqueuedMsg + && enq_msg_descr.check_key(key) // check key + && enq_msg_descr.lt_ == created_lt)) { + LOG(ERROR) << "cannot unpack EnqueuedMsg with key " << key.to_hex(n); + return -1; + } + LOG(DEBUG) << "scanning outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," + << enq_msg_descr.hash_.to_hex() << ") enqueued_lt=" << enq_msg_descr.enqueued_lt_; + bool delivered = false; + ton::LogicalTime deliver_lt = 0; + for (const auto& neighbor : neighbors_) { + // could look up neighbor with shard containing enq_msg_descr.next_prefix more efficiently + // (instead of checking all neighbors) + if (!neighbor.is_disabled() && neighbor.processed_upto->already_processed(enq_msg_descr)) { + delivered = true; + deliver_lt = neighbor.end_lt(); + break; + } + } + if (delivered) { + ++deleted; + CHECK(out_msg_queue_size_ > 0); + --out_msg_queue_size_; + LOG(DEBUG) << "outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," << enq_msg_descr.hash_.to_hex() + << ") enqueued_lt=" << enq_msg_descr.enqueued_lt_ << " has been already delivered, dequeueing"; + if (!dequeue_message(std::move(enq_msg_descr.msg_env_), deliver_lt)) { + fatal_error(PSTRING() << "cannot dequeue outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," + << enq_msg_descr.hash_.to_hex() << ") by inserting a msg_export_deq record"); + return -1; + } + register_out_msg_queue_op(); + if (!block_limit_status_->fits(block::ParamLimits::cl_normal)) { + block_full_ = true; + } + } + return !delivered; + }); + LOG(INFO) << "deleted " << deleted << " messages from out_msg_queue after merge, remaining queue size is " + << out_msg_queue_size_; + if (res < 0) { + return fatal_error("error scanning/updating OutMsgQueue"); + } + } else { + std::vector> queue_parts; - int deleted = 0; - int total = 0; - bool fail = false; - old_out_msg_queue->check_for_each([&](Ref value, td::ConstBitPtr key, int n) -> bool { - ++total; - assert(n == 352); - vm::CellSlice& cs = value.write(); - // LOG(DEBUG) << "key is " << key.to_hex(n); - if (queue_cleanup_timeout_.is_in_past(td::Timestamp::now())) { - LOG(WARNING) << "cleaning up outbound queue takes too long, ending"; - outq_cleanup_partial_ = true; - return false; // retain all remaining outbound queue entries including this one without processing + block::OutputQueueMerger::Neighbor this_queue{BlockIdExt{new_id} /* block id is only used for logs */, + out_msg_queue_->get_root_cell()}; + for (const auto& nb : neighbors_) { + if (nb.is_disabled()) { + continue; + } + if (!nb.processed_upto || !nb.processed_upto->can_check_processed()) { + return fatal_error(-667, PSTRING() << "internal error: no info for checking processed messages from neighbor " + << nb.blk_.to_str()); + } + queue_parts.emplace_back(block::OutputQueueMerger{nb.shard(), {this_queue}}, &nb); } - if (block_full_) { - LOG(WARNING) << "BLOCK FULL while cleaning up outbound queue, cleanup completed only partially"; - outq_cleanup_partial_ = true; - return false; // retain all remaining outbound queue entries including this one without processing - } - block::EnqueuedMsgDescr enq_msg_descr; - unsigned long long created_lt; - if (!(cs.fetch_ulong_bool(64, created_lt) // augmentation - && enq_msg_descr.unpack(cs) // unpack EnqueuedMsg - && enq_msg_descr.check_key(key) // check key - && enq_msg_descr.lt_ == created_lt)) { - LOG(ERROR) << "cannot unpack EnqueuedMsg with key " << key.to_hex(n); - fail = true; - return false; - } - LOG(DEBUG) << "scanning outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," - << enq_msg_descr.hash_.to_hex() << ") enqueued_lt=" << enq_msg_descr.enqueued_lt_; - bool delivered = false; - ton::LogicalTime deliver_lt = 0; - for (const auto& neighbor : neighbors_) { - // could look up neighbor with shard containing enq_msg_descr.next_prefix more efficiently - // (instead of checking all neighbors) - if (!neighbor.is_disabled() && neighbor.processed_upto->already_processed(enq_msg_descr)) { - delivered = true; - deliver_lt = neighbor.end_lt(); + + size_t i = 0; + td::uint32 deleted = 0; + while (!queue_parts.empty()) { + if (block_full_) { + LOG(WARNING) << "BLOCK FULL while cleaning up outbound queue, cleanup completed only partially"; break; } - } - if (delivered) { - LOG(DEBUG) << "outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," << enq_msg_descr.hash_.to_hex() - << ") enqueued_lt=" << enq_msg_descr.enqueued_lt_ << " has been already delivered, dequeueing"; - ++deleted; - out_msg_queue_->lookup_delete_with_extra(key, n); - if (!dequeue_message(std::move(enq_msg_descr.msg_env_), deliver_lt)) { - fatal_error(PSTRING() << "cannot dequeue outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," - << enq_msg_descr.hash_.to_hex() << ") by inserting a msg_export_deq record"); - fail = true; - return false; + if (queue_cleanup_timeout_.is_in_past(td::Timestamp::now())) { + LOG(WARNING) << "cleaning up outbound queue takes too long, ending"; + break; } - register_out_msg_queue_op(); - if (!block_limit_status_->fits(block::ParamLimits::cl_normal)) { - block_full_ = true; + if (i == queue_parts.size()) { + i = 0; } + auto& queue = queue_parts.at(i).first; + auto nb = queue_parts.at(i).second; + auto kv = queue.extract_cur(); + if (kv) { + block::EnqueuedMsgDescr enq_msg_descr; + if (!(enq_msg_descr.unpack(kv->msg.write()) // unpack EnqueuedMsg + && enq_msg_descr.check_key(kv->key.cbits()) // check key + )) { + return fatal_error(PSTRING() << "error scanning/updating OutMsgQueue: cannot unpack EnqueuedMsg with key " + << kv->key.to_hex()); + } + if (nb->processed_upto->already_processed(enq_msg_descr)) { + LOG(DEBUG) << "scanning outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," + << enq_msg_descr.hash_.to_hex() << ") enqueued_lt=" << enq_msg_descr.enqueued_lt_ + << ": message has been already delivered, dequeueing"; + ++deleted; + CHECK(out_msg_queue_size_ > 0); + --out_msg_queue_size_; + out_msg_queue_->lookup_delete_with_extra(kv->key.cbits(), kv->key_len); + if (!dequeue_message(std::move(enq_msg_descr.msg_env_), nb->end_lt())) { + return fatal_error(PSTRING() << "cannot dequeue outbound message with (lt,hash)=(" << enq_msg_descr.lt_ + << "," << enq_msg_descr.hash_.to_hex() + << ") by inserting a msg_export_deq record"); + } + register_out_msg_queue_op(); + if (!block_limit_status_->fits(block::ParamLimits::cl_normal)) { + block_full_ = true; + } + queue.next(); + ++i; + continue; + } else { + LOG(DEBUG) << "scanning outbound message with (lt,hash)=(" << enq_msg_descr.lt_ << "," + << enq_msg_descr.hash_.to_hex() << ") enqueued_lt=" << enq_msg_descr.enqueued_lt_ + << ": message has not been delivered"; + } + } + LOG(DEBUG) << "no more unprocessed messages to shard " << nb->shard().to_str(); + std::swap(queue_parts[i], queue_parts.back()); + queue_parts.pop_back(); } - return true; - }, false, true /* random order */); - LOG(INFO) << "deleted " << deleted << " messages from out_msg_queue, processed " << total << " messages in total"; - if (fail) { - return fatal_error("error scanning/updating OutMsgQueue"); + LOG(INFO) << "deleted " << deleted << " messages from out_msg_queue, remaining queue size is " + << out_msg_queue_size_; } - if (outq_cleanup_partial_ || total > 8000) { - LOG(INFO) << "out_msg_queue too big, skipping importing external messages"; - skip_extmsg_ = true; - queue_too_big_ = true; - } - auto rt = out_msg_queue_->get_root(); if (verbosity >= 2) { + auto rt = out_msg_queue_->get_root(); std::cerr << "new out_msg_queue is "; block::gen::t_OutMsgQueue.print(std::cerr, *rt); rt->print_rec(std::cerr); } - // CHECK(block::gen::t_OutMsgQueue.validate_upto(100000, *rt)); // DEBUG, comment later if SLOW return register_out_msg_queue_op(true); } @@ -3047,6 +3145,7 @@ bool Collator::enqueue_transit_message(Ref msg, Ref old_msg_ try { LOG(DEBUG) << "inserting into outbound queue message with (lt,key)=(" << start_lt << "," << key.to_hex() << ")"; ok = out_msg_queue_->set_builder(key.bits(), 352, cb, vm::Dictionary::SetMode::Add); + ++out_msg_queue_size_; } catch (vm::VmError) { ok = false; } @@ -3069,6 +3168,8 @@ bool Collator::delete_out_msg_queue_msg(td::ConstBitPtr key) { try { LOG(DEBUG) << "deleting from outbound queue message with key=" << key.to_hex(352); queue_rec = out_msg_queue_->lookup_delete(key, 352); + CHECK(out_msg_queue_size_ > 0); + --out_msg_queue_size_; } catch (vm::VmError err) { LOG(ERROR) << "error deleting from out_msg_queue dictionary: " << err.get_msg(); } @@ -3309,8 +3410,9 @@ bool Collator::process_inbound_external_messages() { LOG(INFO) << "skipping processing of inbound external messages"; return true; } - if (out_msg_queue_->get_root_cell().not_null() && out_msg_queue_->get_root_cell()->get_depth() > 12) { - LOG(INFO) << "skipping processing of inbound external messages: out msg queue is too big"; + if (out_msg_queue_size_ > SKIP_EXTERNALS_QUEUE_SIZE) { + LOG(INFO) << "skipping processing of inbound external messages because out_msg_queue is too big (" + << out_msg_queue_size_ << " > " << SKIP_EXTERNALS_QUEUE_SIZE << ")"; return true; } bool full = !block_limit_status_->fits(block::ParamLimits::cl_soft); @@ -3550,6 +3652,7 @@ bool Collator::enqueue_message(block::NewOutMsg msg, td::RefInt256 fwd_fees_rema LOG(DEBUG) << "inserting into outbound queue a new message with (lt,key)=(" << start_lt << "," << key.to_hex() << ")"; ok = out_msg_queue_->set_builder(key.bits(), 352, cb, vm::Dictionary::SetMode::Add); + ++out_msg_queue_size_; } catch (vm::VmError) { ok = false; } @@ -4158,6 +4261,7 @@ static int history_weight(td::uint64 history) { * @returns True if the check is successful. */ bool Collator::check_block_overload() { + LOG(INFO) << "final out_msg_queue size is " << out_msg_queue_size_; overload_history_ <<= 1; underload_history_ <<= 1; block_size_estimate_ = block_limit_status_->estimate_block_size(); @@ -4166,18 +4270,32 @@ bool Collator::check_block_overload() { << " size_estimate=" << block_size_estimate_; auto cl = block_limit_status_->classify(); if (cl <= block::ParamLimits::cl_underload) { - if (queue_too_big_) { - LOG(INFO) << "block is underloaded, but don't set underload history because out msg queue is big"; + if (out_msg_queue_size_ > MERGE_MAX_QUEUE_SIZE) { + LOG(INFO) + << "block is underloaded, but don't set underload history because out_msg_queue size is too big to merge (" + << out_msg_queue_size_ << " > " << MERGE_MAX_QUEUE_SIZE << ")"; } else { underload_history_ |= 1; LOG(INFO) << "block is underloaded"; } } else if (cl >= block::ParamLimits::cl_soft) { - overload_history_ |= 1; - LOG(INFO) << "block is overloaded (category " << cl << ")"; + if (out_msg_queue_size_ > SPLIT_MAX_QUEUE_SIZE) { + LOG(INFO) << "block is overloaded (category " << cl + << "), but don't set overload history because out_msg_queue size is too big to split (" + << out_msg_queue_size_ << " > " << SPLIT_MAX_QUEUE_SIZE << ")"; + } else { + overload_history_ |= 1; + LOG(INFO) << "block is overloaded (category " << cl << ")"; + } } else { LOG(INFO) << "block is loaded normally"; } + if (!(overload_history_ & 1) && out_msg_queue_size_ >= FORCE_SPLIT_QUEUE_SIZE && + out_msg_queue_size_ <= SPLIT_MAX_QUEUE_SIZE) { + overload_history_ |= 1; + LOG(INFO) << "setting overload history because out_msg_queue reached force split limit (" << out_msg_queue_size_ + << " >= " << FORCE_SPLIT_QUEUE_SIZE << ")"; + } if (collator_settings & 1) { LOG(INFO) << "want_split manually set"; want_split_ = true; diff --git a/validator/manager-disk.hpp b/validator/manager-disk.hpp index 2745e02e..1c3f4f5b 100644 --- a/validator/manager-disk.hpp +++ b/validator/manager-disk.hpp @@ -23,6 +23,7 @@ #include "validator-group.hpp" #include "manager-init.h" #include "manager-disk.h" +#include "queue-size-counter.hpp" #include #include @@ -376,6 +377,13 @@ class ValidatorManagerImpl : public ValidatorManager { void log_validator_session_stats(BlockIdExt block_id, validatorsession::ValidatorSessionStats stats) override { UNREACHABLE(); } + void get_out_msg_queue_size(BlockIdExt block_id, td::Promise promise) override { + if (queue_size_counter_.empty()) { + queue_size_counter_ = + td::actor::create_actor("queuesizecounter", td::Ref{}, actor_id(this)); + } + td::actor::send_closure(queue_size_counter_, &QueueSizeCounter::get_queue_size, block_id, std::move(promise)); + } private: PublicKeyHash local_id_; @@ -393,6 +401,7 @@ class ValidatorManagerImpl : public ValidatorManager { int pending_new_shard_block_descr_{0}; std::vector>>> waiting_new_shard_block_descr_; + td::actor::ActorOwn queue_size_counter_; void update_shards(); void update_shard_blocks(); diff --git a/validator/manager-hardfork.hpp b/validator/manager-hardfork.hpp index 6a145191..675c2304 100644 --- a/validator/manager-hardfork.hpp +++ b/validator/manager-hardfork.hpp @@ -23,6 +23,7 @@ #include "validator-group.hpp" #include "manager-init.h" #include "manager-hardfork.h" +#include "queue-size-counter.hpp" #include #include @@ -437,6 +438,13 @@ class ValidatorManagerImpl : public ValidatorManager { void log_validator_session_stats(BlockIdExt block_id, validatorsession::ValidatorSessionStats stats) override { UNREACHABLE(); } + void get_out_msg_queue_size(BlockIdExt block_id, td::Promise promise) override { + if (queue_size_counter_.empty()) { + queue_size_counter_ = + td::actor::create_actor("queuesizecounter", td::Ref{}, actor_id(this)); + } + td::actor::send_closure(queue_size_counter_, &QueueSizeCounter::get_queue_size, block_id, std::move(promise)); + } private: td::Ref opts_; @@ -445,6 +453,7 @@ class ValidatorManagerImpl : public ValidatorManager { std::string db_root_; ShardIdFull shard_to_generate_; BlockIdExt block_to_generate_; + td::actor::ActorOwn queue_size_counter_; }; } // namespace validator diff --git a/validator/manager.cpp b/validator/manager.cpp index 8caed0f6..54d272bc 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -2277,7 +2277,15 @@ void ValidatorManagerImpl::allow_block_info_gc(BlockIdExt block_id, td::Promise< void ValidatorManagerImpl::got_next_gc_masterchain_handle(BlockHandle handle) { CHECK(gc_advancing_); auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), handle](td::Result> R) { - R.ensure(); + if (R.is_error()) { + if (R.error().code() == ErrorCode::timeout) { + LOG(ERROR) << "Failed to get gc masterchain state, retrying: " << R.move_as_error(); + td::actor::send_closure(SelfId, &ValidatorManagerImpl::got_next_gc_masterchain_handle, std::move(handle)); + } else { + LOG(FATAL) << "Failed to get gc masterchain state: " << R.move_as_error(); + } + return; + } td::actor::send_closure(SelfId, &ValidatorManagerImpl::got_next_gc_masterchain_state, std::move(handle), td::Ref{R.move_as_ok()}); }); diff --git a/validator/manager.hpp b/validator/manager.hpp index ccd85423..9f51cc27 100644 --- a/validator/manager.hpp +++ b/validator/manager.hpp @@ -28,6 +28,7 @@ #include "state-serializer.hpp" #include "rldp/rldp.h" #include "token-manager.h" +#include "queue-size-counter.hpp" #include #include @@ -548,6 +549,18 @@ class ValidatorManagerImpl : public ValidatorManager { void log_validator_session_stats(BlockIdExt block_id, validatorsession::ValidatorSessionStats stats) override; + void get_out_msg_queue_size(BlockIdExt block_id, td::Promise promise) override { + if (queue_size_counter_.empty()) { + if (last_masterchain_state_.is_null()) { + promise.set_error(td::Status::Error(ErrorCode::notready, "not ready")); + return; + } + queue_size_counter_ = td::actor::create_actor("queuesizecounter", + last_masterchain_state_, actor_id(this)); + } + td::actor::send_closure(queue_size_counter_, &QueueSizeCounter::get_queue_size, block_id, std::move(promise)); + } + private: td::Timestamp resend_shard_blocks_at_; td::Timestamp check_waiters_at_; @@ -612,6 +625,7 @@ class ValidatorManagerImpl : public ValidatorManager { private: std::map> shard_client_waiters_; + td::actor::ActorOwn queue_size_counter_; }; } // namespace validator diff --git a/validator/queue-size-counter.cpp b/validator/queue-size-counter.cpp new file mode 100644 index 00000000..4780f202 --- /dev/null +++ b/validator/queue-size-counter.cpp @@ -0,0 +1,301 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#include "queue-size-counter.hpp" +#include "block/block-auto.h" +#include "block/block-parse.h" +#include "common/delay.h" +#include "td/actor/MultiPromise.h" +#include "td/utils/Random.h" + +namespace ton::validator { + +static td::Result calc_queue_size(const td::Ref &state) { + td::uint32 size = 0; + TRY_RESULT(outq_descr, state->message_queue()); + block::gen::OutMsgQueueInfo::Record qinfo; + if (!tlb::unpack_cell(outq_descr->root_cell(), qinfo)) { + return td::Status::Error("invalid message queue"); + } + vm::AugmentedDictionary queue{qinfo.out_queue->prefetch_ref(0), 352, block::tlb::aug_OutMsgQueue}; + bool ok = queue.check_for_each([&](td::Ref, td::ConstBitPtr, int) -> bool { + ++size; + return true; + }); + if (!ok) { + return td::Status::Error("invalid message queue dict"); + } + return size; +} + +static td::Result recalc_queue_size(const td::Ref &state, const td::Ref &prev_state, + td::uint32 prev_size) { + TRY_RESULT(outq_descr, state->message_queue()); + block::gen::OutMsgQueueInfo::Record qinfo; + if (!tlb::unpack_cell(outq_descr->root_cell(), qinfo)) { + return td::Status::Error("invalid message queue"); + } + vm::AugmentedDictionary queue{qinfo.out_queue->prefetch_ref(0), 352, block::tlb::aug_OutMsgQueue}; + + TRY_RESULT(prev_outq_descr, prev_state->message_queue()); + block::gen::OutMsgQueueInfo::Record prev_qinfo; + if (!tlb::unpack_cell(prev_outq_descr->root_cell(), prev_qinfo)) { + return td::Status::Error("invalid message queue"); + } + vm::AugmentedDictionary prev_queue{prev_qinfo.out_queue->prefetch_ref(0), 352, block::tlb::aug_OutMsgQueue}; + td::uint32 add = 0, rem = 0; + bool ok = prev_queue.scan_diff( + queue, [&](td::ConstBitPtr, int, td::Ref prev_val, td::Ref new_val) -> bool { + if (prev_val.not_null()) { + ++rem; + } + if (new_val.not_null()) { + ++add; + } + return true; + }); + if (!ok) { + return td::Status::Error("invalid message queue dict"); + } + if (prev_size + add < rem) { + return td::Status::Error("negative value"); + } + return prev_size + add - rem; +} + +void QueueSizeCounter::start_up() { + if (init_masterchain_state_.is_null()) { + // Used in manager-hardfork or manager-disk + simple_mode_ = true; + return; + } + current_seqno_ = init_masterchain_state_->get_seqno(); + process_top_shard_blocks_cont(init_masterchain_state_, true); + init_masterchain_state_ = {}; + alarm(); +} + +void QueueSizeCounter::get_queue_size(BlockIdExt block_id, td::Promise promise) { + get_queue_size_ex(block_id, simple_mode_ || is_block_too_old(block_id), std::move(promise)); +} + +void QueueSizeCounter::get_queue_size_ex(ton::BlockIdExt block_id, bool calc_whole, td::Promise promise) { + Entry &entry = results_[block_id]; + if (entry.done_) { + promise.set_result(entry.queue_size_); + return; + } + entry.promises_.push_back(std::move(promise)); + if (entry.started_) { + return; + } + entry.started_ = true; + entry.calc_whole_ = calc_whole; + td::actor::send_closure(manager_, &ValidatorManager::get_block_handle, block_id, true, + [SelfId = actor_id(this), block_id, manager = manager_](td::Result R) mutable { + if (R.is_error()) { + td::actor::send_closure(SelfId, &QueueSizeCounter::on_error, block_id, R.move_as_error()); + return; + } + BlockHandle handle = R.move_as_ok(); + td::actor::send_closure( + manager, &ValidatorManager::wait_block_state, handle, 0, td::Timestamp::in(10.0), + [SelfId, handle](td::Result> R) mutable { + if (R.is_error()) { + td::actor::send_closure(SelfId, &QueueSizeCounter::on_error, handle->id(), + R.move_as_error()); + return; + } + td::actor::send_closure(SelfId, &QueueSizeCounter::get_queue_size_cont, + std::move(handle), R.move_as_ok()); + }); + }); +} + +void QueueSizeCounter::get_queue_size_cont(BlockHandle handle, td::Ref state) { + Entry &entry = results_[handle->id()]; + CHECK(entry.started_); + bool calc_whole = entry.calc_whole_ || handle->id().seqno() == 0; + if (!calc_whole) { + CHECK(handle->inited_prev()); + auto prev_blocks = handle->prev(); + bool after_split = prev_blocks.size() == 1 && handle->id().shard_full() != prev_blocks[0].shard_full(); + bool after_merge = prev_blocks.size() == 2; + calc_whole = after_split || after_merge; + } + if (calc_whole) { + auto r_size = calc_queue_size(state); + if (r_size.is_error()) { + on_error(handle->id(), r_size.move_as_error()); + return; + } + entry.done_ = true; + entry.queue_size_ = r_size.move_as_ok(); + for (auto &promise : entry.promises_) { + promise.set_result(entry.queue_size_); + } + entry.promises_.clear(); + return; + } + + auto prev_block_id = handle->one_prev(true); + get_queue_size(prev_block_id, [=, SelfId = actor_id(this), manager = manager_](td::Result R) { + if (R.is_error()) { + td::actor::send_closure(SelfId, &QueueSizeCounter::on_error, state->get_block_id(), R.move_as_error()); + return; + } + td::uint32 prev_size = R.move_as_ok(); + td::actor::send_closure( + manager, &ValidatorManager::wait_block_state_short, prev_block_id, 0, td::Timestamp::in(10.0), + [=](td::Result> R) { + if (R.is_error()) { + td::actor::send_closure(SelfId, &QueueSizeCounter::on_error, state->get_block_id(), R.move_as_error()); + return; + } + td::actor::send_closure(SelfId, &QueueSizeCounter::get_queue_size_cont2, state, R.move_as_ok(), prev_size); + }); + }); +} + +void QueueSizeCounter::get_queue_size_cont2(td::Ref state, td::Ref prev_state, + td::uint32 prev_size) { + BlockIdExt block_id = state->get_block_id(); + Entry &entry = results_[block_id]; + CHECK(entry.started_); + auto r_size = recalc_queue_size(state, prev_state, prev_size); + if (r_size.is_error()) { + on_error(block_id, r_size.move_as_error()); + return; + } + entry.done_ = true; + entry.queue_size_ = r_size.move_as_ok(); + for (auto &promise : entry.promises_) { + promise.set_result(entry.queue_size_); + } + entry.promises_.clear(); +} + +void QueueSizeCounter::on_error(ton::BlockIdExt block_id, td::Status error) { + auto it = results_.find(block_id); + if (it == results_.end()) { + return; + } + Entry &entry = it->second; + CHECK(!entry.done_); + for (auto &promise : entry.promises_) { + promise.set_error(error.clone()); + } + results_.erase(it); +} + +void QueueSizeCounter::process_top_shard_blocks() { + LOG(DEBUG) << "QueueSizeCounter::process_top_shard_blocks seqno=" << current_seqno_; + td::actor::send_closure( + manager_, &ValidatorManager::get_block_by_seqno_from_db, AccountIdPrefixFull{masterchainId, 0}, current_seqno_, + [SelfId = actor_id(this), manager = manager_](td::Result R) { + if (R.is_error()) { + LOG(WARNING) << "Failed to get masterchain block id: " << R.move_as_error(); + delay_action([=]() { td::actor::send_closure(SelfId, &QueueSizeCounter::process_top_shard_blocks); }, + td::Timestamp::in(5.0)); + return; + } + td::actor::send_closure( + manager, &ValidatorManager::wait_block_state_short, R.ok()->id(), 0, td::Timestamp::in(10.0), + [=](td::Result> R) { + if (R.is_error()) { + LOG(WARNING) << "Failed to get masterchain state: " << R.move_as_error(); + delay_action([=]() { td::actor::send_closure(SelfId, &QueueSizeCounter::process_top_shard_blocks); }, + td::Timestamp::in(5.0)); + return; + } + td::actor::send_closure(SelfId, &QueueSizeCounter::process_top_shard_blocks_cont, + td::Ref(R.move_as_ok()), false); + }); + }); +} + +void QueueSizeCounter::process_top_shard_blocks_cont(td::Ref state, bool init) { + LOG(DEBUG) << "QueueSizeCounter::process_top_shard_blocks_cont seqno=" << current_seqno_ << " init=" << init; + td::MultiPromise mp; + auto ig = mp.init_guard(); + last_top_blocks_.clear(); + last_top_blocks_.push_back(state->get_block_id()); + for (auto &shard : state->get_shards()) { + last_top_blocks_.push_back(shard->top_block_id()); + } + for (const BlockIdExt &block_id : last_top_blocks_) { + get_queue_size_ex_retry(block_id, init, ig.get_promise()); + } + ig.add_promise([SelfId = actor_id(this)](td::Result R) { + if (R.is_error()) { + return; + } + td::actor::send_closure(SelfId, &QueueSizeCounter::process_top_shard_blocks_finish); + }); + if (init) { + init_top_blocks_ = last_top_blocks_; + } +} + +void QueueSizeCounter::get_queue_size_ex_retry(BlockIdExt block_id, bool calc_whole, td::Promise promise) { + get_queue_size_ex(block_id, calc_whole, + [=, promise = std::move(promise), SelfId = actor_id(this)](td::Result R) mutable { + if (R.is_error()) { + LOG(WARNING) << "Failed to calculate queue size for block " << block_id.to_str() << ": " + << R.move_as_error(); + delay_action( + [=, promise = std::move(promise)]() mutable { + td::actor::send_closure(SelfId, &QueueSizeCounter::get_queue_size_ex_retry, block_id, + calc_whole, std::move(promise)); + }, + td::Timestamp::in(5.0)); + return; + } + promise.set_result(td::Unit()); + }); +} + +void QueueSizeCounter::process_top_shard_blocks_finish() { + ++current_seqno_; + wait_shard_client(); +} + +void QueueSizeCounter::wait_shard_client() { + LOG(DEBUG) << "QueueSizeCounter::wait_shard_client seqno=" << current_seqno_; + td::actor::send_closure( + manager_, &ValidatorManager::wait_shard_client_state, current_seqno_, td::Timestamp::in(60.0), + [SelfId = actor_id(this)](td::Result R) { + if (R.is_error()) { + delay_action([=]() mutable { td::actor::send_closure(SelfId, &QueueSizeCounter::wait_shard_client); }, + td::Timestamp::in(5.0)); + return; + } + td::actor::send_closure(SelfId, &QueueSizeCounter::process_top_shard_blocks); + }); +} + +void QueueSizeCounter::alarm() { + for (auto it = results_.begin(); it != results_.end();) { + if (it->second.done_ && is_block_too_old(it->first)) { + it = results_.erase(it); + } else { + ++it; + } + } + alarm_timestamp() = td::Timestamp::in(td::Random::fast(20.0, 40.0)); +} + +} // namespace ton::validator \ No newline at end of file diff --git a/validator/queue-size-counter.hpp b/validator/queue-size-counter.hpp new file mode 100644 index 00000000..fabb0cec --- /dev/null +++ b/validator/queue-size-counter.hpp @@ -0,0 +1,82 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once +#include "interfaces/validator-manager.h" + +namespace ton::validator { + +class QueueSizeCounter : public td::actor::Actor { + public: + QueueSizeCounter(td::Ref last_masterchain_state, td::actor::ActorId manager) + : init_masterchain_state_(last_masterchain_state), manager_(std::move(manager)) { + } + + void start_up() override; + void get_queue_size(BlockIdExt block_id, td::Promise promise); + void alarm() override; + + private: + td::Ref init_masterchain_state_; + td::actor::ActorId manager_; + bool simple_mode_ = false; + + BlockSeqno current_seqno_ = 0; + std::vector init_top_blocks_; + std::vector last_top_blocks_; + + struct Entry { + bool started_ = false; + bool done_ = false; + bool calc_whole_ = false; + td::uint32 queue_size_ = 0; + std::vector> promises_; + }; + std::map results_; + + void get_queue_size_ex(BlockIdExt block_id, bool calc_whole, td::Promise promise); + void get_queue_size_cont(BlockHandle handle, td::Ref state); + void get_queue_size_cont2(td::Ref state, td::Ref prev_state, td::uint32 prev_size); + void on_error(BlockIdExt block_id, td::Status error); + + void process_top_shard_blocks(); + void process_top_shard_blocks_cont(td::Ref state, bool init = false); + void get_queue_size_ex_retry(BlockIdExt block_id, bool calc_whole, td::Promise promise); + void process_top_shard_blocks_finish(); + void wait_shard_client(); + + bool is_block_too_old(const BlockIdExt& block_id) const { + for (const BlockIdExt& top_block : last_top_blocks_) { + if (shard_intersects(block_id.shard_full(), top_block.shard_full())) { + if (block_id.seqno() + 100 < top_block.seqno()) { + return true; + } + break; + } + } + for (const BlockIdExt& init_top_block : init_top_blocks_) { + if (shard_intersects(block_id.shard_full(), init_top_block.shard_full())) { + if (block_id.seqno() < init_top_block.seqno()) { + return true; + } + break; + } + } + return false; + } +}; + +} // namespace ton::validator diff --git a/validator/validator.h b/validator/validator.h index 7cdea805..2fefb064 100644 --- a/validator/validator.h +++ b/validator/validator.h @@ -228,6 +228,8 @@ class ValidatorManagerInterface : public td::actor::Actor { virtual void prepare_perf_timer_stats(td::Promise> promise) = 0; virtual void add_perf_timer_stat(std::string name, double duration) = 0; + virtual void get_out_msg_queue_size(BlockIdExt block_id, td::Promise promise) = 0; + }; } // namespace validator From 7a457ca2781bc2f69a90ac5e191942668c3170f7 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 13 Dec 2023 15:12:58 +0300 Subject: [PATCH 052/351] Fix linking error (#827) * Fix linking error --------- Co-authored-by: SpyCheese --- validator/CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/validator/CMakeLists.txt b/validator/CMakeLists.txt index f858e6ff..4ecc865c 100644 --- a/validator/CMakeLists.txt +++ b/validator/CMakeLists.txt @@ -100,7 +100,8 @@ set(DISK_VALIDATOR_SOURCE validator-full-id.cpp validator-group.cpp validator-options.cpp - + queue-size-counter.cpp + downloaders/wait-block-data-disk.cpp downloaders/wait-block-state.cpp downloaders/wait-block-state-merge.cpp @@ -119,7 +120,8 @@ set(HARDFORK_VALIDATOR_SOURCE validator-full-id.cpp validator-group.cpp validator-options.cpp - + queue-size-counter.cpp + downloaders/wait-block-data-disk.cpp downloaders/wait-block-state.cpp downloaders/wait-block-state-merge.cpp From 1fc4a0faed069f6c68c84fa41288bdd2d8665128 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 13 Dec 2023 21:33:54 +0300 Subject: [PATCH 053/351] Move low blockrate lt_limits to appropriate place (#828) * Fix setting lt_delta limits --------- Co-authored-by: SpyCheese --- validator/impl/collator.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index 2f4a002a..86ee1cf4 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -709,9 +709,6 @@ bool Collator::unpack_last_mc_state() { return fatal_error(limits.move_as_error()); } block_limits_ = limits.move_as_ok(); - if (now_ > prev_now_ + 15 && block_limits_->lt_delta.hard() > 200) { - block_limits_->lt_delta = {20, 180, 200}; - } LOG(DEBUG) << "block limits: bytes [" << block_limits_->bytes.underload() << ", " << block_limits_->bytes.soft() << ", " << block_limits_->bytes.hard() << "]"; LOG(DEBUG) << "block limits: gas [" << block_limits_->gas.underload() << ", " << block_limits_->gas.soft() << ", " @@ -1433,6 +1430,9 @@ bool Collator::check_this_shard_mc_info() { bool Collator::init_block_limits() { CHECK(block_limits_); CHECK(state_usage_tree_); + if (now_ > prev_now_ + 15 && block_limits_->lt_delta.hard() > 200) { + block_limits_->lt_delta = {20, 180, 200}; + } block_limits_->usage_tree = state_usage_tree_.get(); block_limit_status_ = std::make_unique(*block_limits_); return true; From ace934ff35fd095296da9108d84f52cffca62473 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 19 Dec 2023 10:39:25 +0300 Subject: [PATCH 054/351] Adjust allowed time lag for last_liteserver_state + more verbose logs (#836) * Add logs to collator and validator * More logs to get_ext_messages, decrease verbosity level * Adjust allowed time lag for last_liteserver_state * Change verbosity of STATUS message --------- Co-authored-by: SpyCheese --- validator/impl/collator.cpp | 26 +++++++++++---------- validator/impl/fabric.cpp | 10 ++++---- validator/impl/validate-query.cpp | 13 +++++++---- validator/manager.cpp | 38 +++++++++++++++++++++++-------- validator/validator-group.cpp | 3 ++- 5 files changed, 58 insertions(+), 32 deletions(-) diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index 86ee1cf4..1d277048 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -106,7 +106,7 @@ Collator::Collator(ShardIdFull shard, bool is_hardfork, UnixTime min_ts, BlockId * The results of these queries are handled by corresponding callback functions. */ void Collator::start_up() { - LOG(DEBUG) << "Collator for shard " << shard_.to_str() << " started"; + LOG(WARNING) << "Collator for shard " << shard_.to_str() << " started"; LOG(DEBUG) << "Previous block #1 is " << prev_blocks.at(0).to_str(); if (prev_blocks.size() > 1) { LOG(DEBUG) << "Previous block #2 is " << prev_blocks.at(1).to_str(); @@ -554,7 +554,7 @@ bool Collator::preprocess_prev_mc_state() { * @param res The retreived masterchain state. */ void Collator::after_get_mc_state(td::Result, BlockIdExt>> res) { - LOG(DEBUG) << "in Collator::after_get_mc_state()"; + LOG(WARNING) << "in Collator::after_get_mc_state()"; --pending; if (res.is_error()) { fatal_error(res.move_as_error()); @@ -589,7 +589,7 @@ void Collator::after_get_mc_state(td::Result, Bl * @param res The retrieved shard state. */ void Collator::after_get_shard_state(int idx, td::Result> res) { - LOG(DEBUG) << "in Collator::after_get_shard_state(" << idx << ")"; + LOG(WARNING) << "in Collator::after_get_shard_state(" << idx << ")"; --pending; if (res.is_error()) { fatal_error(res.move_as_error()); @@ -820,7 +820,6 @@ bool Collator::request_out_msg_queue_size() { * @param res The obtained outbound queue. */ void Collator::got_neighbor_out_queue(int i, td::Result> res) { - LOG(DEBUG) << "obtained outbound queue for neighbor #" << i; --pending; if (res.is_error()) { fatal_error(res.move_as_error()); @@ -828,6 +827,7 @@ void Collator::got_neighbor_out_queue(int i, td::Result> res) } Ref outq_descr = res.move_as_ok(); block::McShardDescr& descr = neighbors_.at(i); + LOG(WARNING) << "obtained outbound queue for neighbor #" << i << " : " << descr.shard().to_str(); if (outq_descr->get_block_id() != descr.blk_) { LOG(DEBUG) << "outq_descr->id = " << outq_descr->get_block_id().to_str() << " ; descr.id = " << descr.blk_.to_str(); fatal_error( @@ -893,7 +893,7 @@ void Collator::got_out_queue_size(size_t i, td::Result res) { return; } td::uint32 size = res.move_as_ok(); - LOG(DEBUG) << "got outbound queue size from prev block #" << i << ": " << size; + LOG(WARNING) << "got outbound queue size from prev block #" << i << ": " << size; out_msg_queue_size_ += size; check_pending(); } @@ -1762,7 +1762,7 @@ bool Collator::register_shard_block_creators(std::vector creator_li */ bool Collator::try_collate() { if (!preinit_complete) { - LOG(DEBUG) << "running do_preinit()"; + LOG(WARNING) << "running do_preinit()"; if (!do_preinit()) { return fatal_error(-667, "error preinitializing data required by collator"); } @@ -2062,7 +2062,7 @@ bool Collator::do_collate() { // After do_collate started it will not be interrupted by timeout alarm_timestamp() = td::Timestamp::never(); - LOG(DEBUG) << "do_collate() : start"; + LOG(WARNING) << "do_collate() : start"; if (!fetch_config_params()) { return fatal_error("cannot fetch required configuration parameters from masterchain state"); } @@ -2276,8 +2276,8 @@ bool Collator::out_msg_queue_cleanup() { } return !delivered; }); - LOG(INFO) << "deleted " << deleted << " messages from out_msg_queue after merge, remaining queue size is " - << out_msg_queue_size_; + LOG(WARNING) << "deleted " << deleted << " messages from out_msg_queue after merge, remaining queue size is " + << out_msg_queue_size_; if (res < 0) { return fatal_error("error scanning/updating OutMsgQueue"); } @@ -2352,8 +2352,8 @@ bool Collator::out_msg_queue_cleanup() { std::swap(queue_parts[i], queue_parts.back()); queue_parts.pop_back(); } - LOG(INFO) << "deleted " << deleted << " messages from out_msg_queue, remaining queue size is " - << out_msg_queue_size_; + LOG(WARNING) << "deleted " << deleted << " messages from out_msg_queue, remaining queue size is " + << out_msg_queue_size_; } if (verbosity >= 2) { auto rt = out_msg_queue_->get_root(); @@ -5035,7 +5035,7 @@ void Collator::return_block_candidate(td::Result saved) { fatal_error(std::move(err)); } else { CHECK(block_candidate); - LOG(INFO) << "sending new BlockCandidate to Promise"; + LOG(WARNING) << "sending new BlockCandidate to Promise"; main_promise(block_candidate->clone()); busy_ = false; stop(); @@ -5133,6 +5133,8 @@ void Collator::after_get_external_messages(td::Resulthash()); } } + LOG(WARNING) << "got " << vect.size() << " external messages from mempool, " << bad_ext_msgs_.size() + << " bad messages"; check_pending(); } diff --git a/validator/impl/fabric.cpp b/validator/impl/fabric.cpp index 23a03482..ede8d36d 100644 --- a/validator/impl/fabric.cpp +++ b/validator/impl/fabric.cpp @@ -202,10 +202,12 @@ void run_validate_query(ShardIdFull shard, UnixTime min_ts, BlockIdExt min_maste seqno = p.seqno(); } } - td::actor::create_actor( - PSTRING() << (is_fake ? "fakevalidate" : "validateblock") << shard.to_str() << ":" << (seqno + 1), shard, min_ts, - min_masterchain_block_id, std::move(prev), std::move(candidate), std::move(validator_set), std::move(manager), - timeout, std::move(promise), is_fake) + static std::atomic idx; + td::actor::create_actor(PSTRING() << (is_fake ? "fakevalidate" : "validateblock") << shard.to_str() + << ":" << (seqno + 1) << "#" << idx.fetch_add(1), + shard, min_ts, min_masterchain_block_id, std::move(prev), std::move(candidate), + std::move(validator_set), std::move(manager), timeout, std::move(promise), + is_fake) .release(); } diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index d9d03207..d5f489a3 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -234,6 +234,7 @@ bool ValidateQuery::fatal_error(std::string err_msg, int err_code) { */ void ValidateQuery::finish_query() { if (main_promise) { + LOG(WARNING) << "validate query done"; main_promise.set_result(now_); } stop(); @@ -252,7 +253,7 @@ void ValidateQuery::finish_query() { * Then the function also sends requests to the ValidatorManager to fetch blocks and shard stated. */ void ValidateQuery::start_up() { - LOG(INFO) << "validate query for " << block_candidate.id.to_str() << " started"; + LOG(WARNING) << "validate query for " << block_candidate.id.to_str() << " started"; alarm_timestamp() = timeout; rand_seed_.set_zero(); created_by_ = block_candidate.pubkey; @@ -667,7 +668,7 @@ bool ValidateQuery::extract_collated_data() { * @param res The result of the retrieval of the latest masterchain state. */ void ValidateQuery::after_get_latest_mc_state(td::Result, BlockIdExt>> res) { - LOG(DEBUG) << "in ValidateQuery::after_get_latest_mc_state()"; + LOG(WARNING) << "in ValidateQuery::after_get_latest_mc_state()"; --pending; if (res.is_error()) { fatal_error(res.move_as_error()); @@ -708,7 +709,7 @@ void ValidateQuery::after_get_latest_mc_state(td::Result> res) { - LOG(DEBUG) << "in ValidateQuery::after_get_mc_state() for " << mc_blkid_.to_str(); + LOG(WARNING) << "in ValidateQuery::after_get_mc_state() for " << mc_blkid_.to_str(); --pending; if (res.is_error()) { fatal_error(res.move_as_error()); @@ -752,7 +753,7 @@ void ValidateQuery::got_mc_handle(td::Result res) { * @param res The result of the shard state retrieval. */ void ValidateQuery::after_get_shard_state(int idx, td::Result> res) { - LOG(DEBUG) << "in ValidateQuery::after_get_shard_state(" << idx << ")"; + LOG(WARNING) << "in ValidateQuery::after_get_shard_state(" << idx << ")"; --pending; if (res.is_error()) { fatal_error(res.move_as_error()); @@ -1495,7 +1496,6 @@ bool ValidateQuery::request_neighbor_queues() { * @param res The obtained outbound queue. */ void ValidateQuery::got_neighbor_out_queue(int i, td::Result> res) { - LOG(DEBUG) << "obtained outbound queue for neighbor #" << i; --pending; if (res.is_error()) { fatal_error(res.move_as_error()); @@ -1503,6 +1503,7 @@ void ValidateQuery::got_neighbor_out_queue(int i, td::Result> } Ref outq_descr = res.move_as_ok(); block::McShardDescr& descr = neighbors_.at(i); + LOG(WARNING) << "obtained outbound queue for neighbor #" << i << " : " << descr.shard().to_str(); if (outq_descr->get_block_id() != descr.blk_) { LOG(DEBUG) << "outq_descr->id = " << outq_descr->get_block_id().to_str() << " ; descr.id = " << descr.blk_.to_str(); fatal_error( @@ -6187,6 +6188,7 @@ bool ValidateQuery::try_validate() { } try { if (!stage_) { + LOG(WARNING) << "try_validate stage 0"; if (!compute_prev_state()) { return fatal_error(-666, "cannot compute previous state"); } @@ -6216,6 +6218,7 @@ bool ValidateQuery::try_validate() { return true; } } + LOG(WARNING) << "try_validate stage 1"; LOG(INFO) << "running automated validity checks for block candidate " << id_.to_str(); if (!block::gen::t_Block.validate_ref(10000000, block_root_)) { return reject_query("block "s + id_.to_str() + " failed to pass automated validity checks"); diff --git a/validator/manager.cpp b/validator/manager.cpp index 54d272bc..4bac4a74 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -784,6 +784,8 @@ void ValidatorManagerImpl::wait_block_message_queue_short(BlockIdExt block_id, t void ValidatorManagerImpl::get_external_messages(ShardIdFull shard, td::Promise>> promise) { + td::Timer t; + size_t processed = 0, deleted = 0; std::vector> res; MessageId left{AccountIdPrefixFull{shard.workchain, shard.shard & (shard.shard - 1)}, Bits256::zero()}; auto it = ext_messages_.lower_bound(left); @@ -792,10 +794,12 @@ void ValidatorManagerImpl::get_external_messages(ShardIdFull shard, if (!shard_contains(shard, s.dst)) { break; } + ++processed; if (it->second->expired()) { ext_addr_messages_[it->second->address()].erase(it->first.hash); ext_messages_hashes_.erase(it->first.hash); it = ext_messages_.erase(it); + ++deleted; continue; } if (it->second->is_active()) { @@ -803,6 +807,9 @@ void ValidatorManagerImpl::get_external_messages(ShardIdFull shard, } it++; } + LOG(WARNING) << "get_external_messages to shard " << shard.to_str() << " : time=" << t.elapsed() + << " result_size=" << res.size() << " processed=" << processed << " expired=" << deleted + << " total_size=" << ext_messages_.size(); promise.set_value(std::move(res)); } @@ -1356,7 +1363,18 @@ td::Ref ValidatorManagerImpl::do_get_last_liteserver_state() { if (last_masterchain_state_.is_null()) { return {}; } - if (last_liteserver_state_.is_null() || last_liteserver_state_->get_unix_time() < td::Clocks::system() - 30) { + if (last_liteserver_state_.is_null()) { + last_liteserver_state_ = last_masterchain_state_; + return last_liteserver_state_; + } + if (last_liteserver_state_->get_seqno() == last_masterchain_state_->get_seqno()) { + return last_liteserver_state_; + } + // If liteserver seqno (i.e. shard client) lags then use last masterchain state for liteserver + // Allowed lag depends on the block rate + double time_per_block = double(last_masterchain_state_->get_unix_time() - last_liteserver_state_->get_unix_time()) / + double(last_masterchain_state_->get_seqno() - last_liteserver_state_->get_seqno()); + if (td::Clocks::system() - double(last_liteserver_state_->get_unix_time()) > std::min(time_per_block * 8, 180.0)) { last_liteserver_state_ = last_masterchain_state_; } return last_liteserver_state_; @@ -2356,15 +2374,15 @@ void ValidatorManagerImpl::alarm() { } if (log_status_at_.is_in_past()) { if (last_masterchain_block_handle_) { - LOG(INFO) << "STATUS: last_masterchain_block_ago=" - << td::format::as_time(td::Clocks::system() - last_masterchain_block_handle_->unix_time()) - << " last_known_key_block_ago=" - << td::format::as_time(td::Clocks::system() - (last_known_key_block_handle_->inited_unix_time() - ? last_known_key_block_handle_->unix_time() - : 0)) - << " shard_client_ago=" - << td::format::as_time(td::Clocks::system() - - (shard_client_handle_ ? shard_client_handle_->unix_time() : 0)); + LOG(ERROR) << "STATUS: last_masterchain_block_ago=" + << td::format::as_time(td::Clocks::system() - last_masterchain_block_handle_->unix_time()) + << " last_known_key_block_ago=" + << td::format::as_time(td::Clocks::system() - (last_known_key_block_handle_->inited_unix_time() + ? last_known_key_block_handle_->unix_time() + : 0)) + << " shard_client_ago=" + << td::format::as_time(td::Clocks::system() - + (shard_client_handle_ ? shard_client_handle_->unix_time() : 0)); } log_status_at_ = td::Timestamp::in(60.0); } diff --git a/validator/validator-group.cpp b/validator/validator-group.cpp index c1f4f38a..7baf0f05 100644 --- a/validator/validator-group.cpp +++ b/validator/validator-group.cpp @@ -136,7 +136,7 @@ void ValidatorGroup::accept_block_candidate(td::uint32 round_id, PublicKeyHash s std::vector approve_signatures, validatorsession::ValidatorSessionStats stats, td::Promise promise) { - if (round_id >= last_known_round_id_) { + if (round_id >= last_known_round_id_) { last_known_round_id_ = round_id + 1; } auto sig_set = create_signature_set(std::move(signatures)); @@ -150,6 +150,7 @@ void ValidatorGroup::accept_block_candidate(td::uint32 round_id, PublicKeyHash s return; } auto next_block_id = create_next_block_id(root_hash, file_hash); + LOG(WARNING) << "Accepted block " << next_block_id; td::actor::send_closure(manager_, &ValidatorManager::log_validator_session_stats, next_block_id, std::move(stats)); auto block = block_data.size() > 0 ? create_block(next_block_id, std::move(block_data)).move_as_ok() : td::Ref{}; From 83efcebad0adcc63a330eb9716c5e8d884679143 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 19 Dec 2023 10:39:35 +0300 Subject: [PATCH 055/351] Improve CellDb migration (#835) * Fix deserializing cells * Use proxy actor * Add delays * Print stats every minute Co-authored-by: SpyCheese --- crypto/vm/boc.cpp | 4 +- crypto/vm/boc.h | 2 +- crypto/vm/db/CellStorage.cpp | 2 +- validator-engine/validator-engine.cpp | 14 +++--- validator/db/celldb.cpp | 61 ++++++++++++++++++++------- validator/db/celldb.hpp | 24 +++++++++++ 6 files changed, 82 insertions(+), 25 deletions(-) diff --git a/crypto/vm/boc.cpp b/crypto/vm/boc.cpp index 11583ede..bd334cbf 100644 --- a/crypto/vm/boc.cpp +++ b/crypto/vm/boc.cpp @@ -930,7 +930,7 @@ unsigned long long BagOfCells::get_idx_entry_raw(int index) { * */ -td::Result> std_boc_deserialize(td::Slice data, bool can_be_empty) { +td::Result> std_boc_deserialize(td::Slice data, bool can_be_empty, bool allow_nonzero_level) { if (data.empty() && can_be_empty) { return Ref(); } @@ -946,7 +946,7 @@ td::Result> std_boc_deserialize(td::Slice data, bool can_be_empty) { if (root.is_null()) { return td::Status::Error("bag of cells has null root cell (?)"); } - if (root->get_level() != 0) { + if (!allow_nonzero_level && root->get_level() != 0) { return td::Status::Error("bag of cells has a root with non-zero level"); } return std::move(root); diff --git a/crypto/vm/boc.h b/crypto/vm/boc.h index c7a1810d..1bff5b25 100644 --- a/crypto/vm/boc.h +++ b/crypto/vm/boc.h @@ -323,7 +323,7 @@ class BagOfCells { std::vector* cell_should_cache); }; -td::Result> std_boc_deserialize(td::Slice data, bool can_be_empty = false); +td::Result> std_boc_deserialize(td::Slice data, bool can_be_empty = false, bool allow_nonzero_level = false); td::Result std_boc_serialize(Ref root, int mode = 0); td::Result>> std_boc_deserialize_multi(td::Slice data, diff --git a/crypto/vm/db/CellStorage.cpp b/crypto/vm/db/CellStorage.cpp index acc55898..303d4650 100644 --- a/crypto/vm/db/CellStorage.cpp +++ b/crypto/vm/db/CellStorage.cpp @@ -98,7 +98,7 @@ class RefcntCellParser { auto size = parser.get_left_len(); td::Slice data = parser.template fetch_string_raw(size); if (stored_boc_) { - TRY_RESULT(boc, vm::std_boc_deserialize(data)); + TRY_RESULT(boc, vm::std_boc_deserialize(data, false, true)); TRY_RESULT(loaded_cell, boc->load_cell()); cell = std::move(loaded_cell.data_cell); return td::Status::OK(); diff --git a/validator-engine/validator-engine.cpp b/validator-engine/validator-engine.cpp index d98c296c..1d9223f2 100644 --- a/validator-engine/validator-engine.cpp +++ b/validator-engine/validator-engine.cpp @@ -3775,11 +3775,15 @@ int main(int argc, char *argv[]) { acts.push_back([&x, at]() { td::actor::send_closure(x, &ValidatorEngine::schedule_shutdown, (double)at); }); return td::Status::OK(); }); - p.add_checked_option('\0', "celldb-compress-depth", "(default: 0)", [&](td::Slice arg) { - TRY_RESULT(value, td::to_integer_safe(arg)); - acts.push_back([&x, value]() { td::actor::send_closure(x, &ValidatorEngine::set_celldb_compress_depth, value); }); - return td::Status::OK(); - }); + p.add_checked_option('\0', "celldb-compress-depth", + "optimize celldb by storing cells of depth X with whole subtrees (experimental, default: 0)", + [&](td::Slice arg) { + TRY_RESULT(value, td::to_integer_safe(arg)); + acts.push_back([&x, value]() { + td::actor::send_closure(x, &ValidatorEngine::set_celldb_compress_depth, value); + }); + return td::Status::OK(); + }); auto S = p.run(argc, argv); if (S.is_error()) { LOG(ERROR) << "failed to parse options: " << S.move_as_error(); diff --git a/validator/db/celldb.cpp b/validator/db/celldb.cpp index 6a2b4699..d29126ce 100644 --- a/validator/db/celldb.cpp +++ b/validator/db/celldb.cpp @@ -23,6 +23,7 @@ #include "ton/ton-tl.hpp" #include "ton/ton-io.hpp" +#include "common/delay.h" namespace ton { @@ -68,14 +69,16 @@ CellDbIn::CellDbIn(td::actor::ActorId root_db, td::actor::ActorId>( + td::actor::create_actor("celldbmigration", actor_id(this))), compress_depth = opts_->get_celldb_compress_depth()](const vm::CellLoader::LoadResult& res) { if (res.cell_.is_null()) { return; } bool expected_stored_boc = res.cell_->get_depth() == compress_depth && compress_depth != 0; if (expected_stored_boc != res.stored_boc_) { - td::actor::send_closure(db, &CellDbIn::migrate_cell, td::Bits256{res.cell_->get_hash().bits()}); + td::actor::send_closure(*actor, &CellDbIn::MigrationProxy::migrate_cell, + td::Bits256{res.cell_->get_hash().bits()}); } }; @@ -156,6 +159,13 @@ void CellDbIn::alarm() { if (migrate_after_ && migrate_after_.is_in_past()) { migrate_cells(); } + if (migration_stats_ && migration_stats_->end_at_.is_in_past()) { + LOG(INFO) << "CellDb migration, " << migration_stats_->start_.elapsed() + << "s stats: batches=" << migration_stats_->batches_ << " migrated=" << migration_stats_->migrated_cells_ + << " checked=" << migration_stats_->checked_cells_ << " time=" << migration_stats_->total_time_ + << " queue_size=" << cells_to_migrate_.size(); + migration_stats_ = {}; + } auto E = get_block(get_empty_key_hash()).move_as_ok(); auto N = get_block(E.next).move_as_ok(); if (N.is_empty()) { @@ -291,23 +301,31 @@ void CellDbIn::set_block(KeyHash key_hash, DbEntry e) { void CellDbIn::migrate_cell(td::Bits256 hash) { cells_to_migrate_.insert(hash); - if (cells_to_migrate_.size() >= 32) { - migrate_cells(); - } else if (!migrate_after_) { - migrate_after_ = td::Timestamp::in(1.0); + if (!migration_active_) { + migration_active_ = true; + migrate_after_ = td::Timestamp::in(10.0); } } void CellDbIn::migrate_cells() { + migrate_after_ = td::Timestamp::never(); if (cells_to_migrate_.empty()) { + migration_active_ = false; return; } + td::Timer timer; + if (!migration_stats_) { + migration_stats_ = std::make_unique(); + } vm::CellStorer stor{*cell_db_}; auto loader = std::make_unique(cell_db_->snapshot()); boc_->set_loader(std::make_unique(*loader)).ensure(); cell_db_->begin_write_batch().ensure(); - td::uint32 cnt = 0; - for (const auto& hash : cells_to_migrate_) { + td::uint32 checked = 0, migrated = 0; + for (auto it = cells_to_migrate_.begin(); it != cells_to_migrate_.end() && checked < 128; ) { + ++checked; + td::Bits256 hash = *it; + it = cells_to_migrate_.erase(it); auto R = loader->load(hash.as_slice(), true, boc_->as_ext_cell_creator()); if (R.is_error()) { continue; @@ -318,18 +336,27 @@ void CellDbIn::migrate_cells() { bool expected_stored_boc = R.ok().cell_->get_depth() == opts_->get_celldb_compress_depth() && opts_->get_celldb_compress_depth() != 0; if (expected_stored_boc != R.ok().stored_boc_) { - ++cnt; + ++migrated; stor.set(R.ok().refcnt(), R.ok().cell_, expected_stored_boc).ensure(); } } - cells_to_migrate_.clear(); - if (cnt > 0) { - LOG(DEBUG) << "Migrated " << cnt << " cells"; - } cell_db_->commit_write_batch().ensure(); boc_->set_loader(std::make_unique(cell_db_->snapshot(), on_load_callback_)).ensure(); td::actor::send_closure(parent_, &CellDb::update_snapshot, cell_db_->snapshot()); - migrate_after_ = td::Timestamp::never(); + + double time = timer.elapsed(); + LOG(DEBUG) << "CellDb migration: migrated=" << migrated << " checked=" << checked << " time=" << time; + ++migration_stats_->batches_; + migration_stats_->migrated_cells_ += migrated; + migration_stats_->checked_cells_ += checked; + migration_stats_->total_time_ += time; + + if (cells_to_migrate_.empty()) { + migration_active_ = false; + } else { + delay_action([SelfId = actor_id(this)] { td::actor::send_closure(SelfId, &CellDbIn::migrate_cells); }, + td::Timestamp::in(time * 2)); + } } void CellDb::load_cell(RootHash hash, td::Promise> promise) { @@ -361,14 +388,16 @@ void CellDb::start_up() { boc_ = vm::DynamicBagOfCellsDb::create(); boc_->set_celldb_compress_depth(opts_->get_celldb_compress_depth()); cell_db_ = td::actor::create_actor("celldbin", root_db_, actor_id(this), path_, opts_); - on_load_callback_ = [db = cell_db_.get(), + on_load_callback_ = [actor = std::make_shared>( + td::actor::create_actor("celldbmigration", cell_db_.get())), compress_depth = opts_->get_celldb_compress_depth()](const vm::CellLoader::LoadResult& res) { if (res.cell_.is_null()) { return; } bool expected_stored_boc = res.cell_->get_depth() == compress_depth && compress_depth != 0; if (expected_stored_boc != res.stored_boc_) { - td::actor::send_closure(db, &CellDbIn::migrate_cell, td::Bits256{res.cell_->get_hash().bits()}); + td::actor::send_closure(*actor, &CellDbIn::MigrationProxy::migrate_cell, + td::Bits256{res.cell_->get_hash().bits()}); } }; } diff --git a/validator/db/celldb.hpp b/validator/db/celldb.hpp index 6545d597..a2a84ab4 100644 --- a/validator/db/celldb.hpp +++ b/validator/db/celldb.hpp @@ -107,6 +107,30 @@ class CellDbIn : public CellDbBase { std::function on_load_callback_; std::set cells_to_migrate_; td::Timestamp migrate_after_ = td::Timestamp::never(); + bool migration_active_ = false; + + struct MigrationStats { + td::Timer start_; + td::Timestamp end_at_ = td::Timestamp::in(60.0); + size_t batches_ = 0; + size_t migrated_cells_ = 0; + size_t checked_cells_ = 0; + double total_time_ = 0.0; + }; + std::unique_ptr migration_stats_; + + public: + class MigrationProxy : public td::actor::Actor { + public: + explicit MigrationProxy(td::actor::ActorId cell_db) : cell_db_(cell_db) { + } + void migrate_cell(td::Bits256 hash) { + td::actor::send_closure(cell_db_, &CellDbIn::migrate_cell, hash); + } + + private: + td::actor::ActorId cell_db_; + }; }; class CellDb : public CellDbBase { From b3be4283ff80e8b7290a6a35b503672c8823e839 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 25 Dec 2023 09:30:51 +0300 Subject: [PATCH 056/351] Better error messages from LS for missing blocks (#837) Co-authored-by: SpyCheese --- validator/impl/liteserver.cpp | 37 ++---- validator/interfaces/validator-manager.h | 8 ++ validator/manager-disk.hpp | 15 +++ validator/manager-hardfork.hpp | 15 +++ validator/manager.cpp | 144 ++++++++++++++++++++++- validator/manager.hpp | 14 +++ 6 files changed, 202 insertions(+), 31 deletions(-) diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index 9c7a0456..86fc690a 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -505,20 +505,7 @@ void LiteQuery::perform_sendMessage(td::BufferSlice data) { } void LiteQuery::get_block_handle_checked(BlockIdExt blkid, td::Promise promise) { - auto P = td::PromiseCreator::lambda( - [promise = std::move(promise)](td::Result R) mutable { - if (R.is_error()) { - promise.set_error(R.move_as_error()); - } else { - auto handle = R.move_as_ok(); - if (handle->is_applied()) { - promise.set_result(std::move(handle)); - } else { - promise.set_error(td::Status::Error(ErrorCode::notready, "block is not applied")); - } - } - }); - td::actor::send_closure(manager_, &ValidatorManager::get_block_handle, blkid, false, std::move(P)); + td::actor::send_closure(manager_, &ValidatorManager::get_block_handle_for_litequery, blkid, std::move(promise)); } bool LiteQuery::request_mc_block_data(BlockIdExt blkid) { @@ -1497,17 +1484,12 @@ void LiteQuery::continue_getTransactions(unsigned remaining, bool exact) { LOG(DEBUG) << "sending get_block_by_lt_from_db() query to manager for " << acc_workchain_ << ":" << acc_addr_.to_hex() << " " << trans_lt_; td::actor::send_closure_later( - manager_, &ValidatorManager::get_block_by_lt_from_db, ton::extract_addr_prefix(acc_workchain_, acc_addr_), + manager_, &ValidatorManager::get_block_by_lt_from_db_for_litequery, ton::extract_addr_prefix(acc_workchain_, acc_addr_), trans_lt_, [Self = actor_id(this), remaining, manager = manager_](td::Result res) { if (res.is_error()) { td::actor::send_closure(Self, &LiteQuery::abort_getTransactions, res.move_as_error(), ton::BlockIdExt{}); } else { auto handle = res.move_as_ok(); - if (!handle->is_applied()) { - td::actor::send_closure(Self, &LiteQuery::abort_getTransactions, td::Status::Error(ErrorCode::notready, "block is not applied"), - ton::BlockIdExt{}); - return; - } LOG(DEBUG) << "requesting data for block " << handle->id().to_str(); td::actor::send_closure_later(manager, &ValidatorManager::get_block_data_from_db, handle, [Self, blkid = handle->id(), remaining](td::Result> res) { @@ -1846,10 +1828,6 @@ void LiteQuery::perform_lookupBlock(BlockId blkid, int mode, LogicalTime lt, Uni td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); } else { auto handle = res.move_as_ok(); - if (!handle->is_applied()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, td::Status::Error(ErrorCode::notready, "block is not applied")); - return; - } LOG(DEBUG) << "requesting data for block " << handle->id().to_str(); td::actor::send_closure_later(manager, &ValidatorManager::get_block_data_from_db, handle, [Self, blkid = handle->id(), mode](td::Result> res) { @@ -1865,13 +1843,14 @@ void LiteQuery::perform_lookupBlock(BlockId blkid, int mode, LogicalTime lt, Uni ton::AccountIdPrefixFull pfx{blkid.workchain, blkid.shard}; if (mode & 2) { - td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_lt_from_db, pfx, lt, std::move(P)); + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_lt_from_db_for_litequery, pfx, lt, + std::move(P)); } else if (mode & 4) { - td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_unix_time_from_db, pfx, utime, + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_unix_time_from_db_for_litequery, pfx, utime, std::move(P)); } else { - td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_seqno_from_db, pfx, blkid.seqno, - std::move(P)); + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_seqno_from_db_for_litequery, pfx, + blkid.seqno, std::move(P)); } } @@ -2629,7 +2608,7 @@ void LiteQuery::perform_getShardBlockProof(BlockIdExt blkid) { } AccountIdPrefixFull pfx{masterchainId, shardIdAll}; td::actor::send_closure_later( - manager, &ValidatorManager::get_block_by_seqno_from_db, pfx, handle->masterchain_ref_block(), + manager, &ValidatorManager::get_block_by_seqno_from_db_for_litequery, pfx, handle->masterchain_ref_block(), [Self, manager](td::Result R) { if (R.is_error()) { td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); diff --git a/validator/interfaces/validator-manager.h b/validator/interfaces/validator-manager.h index ae15ed4c..6b375bac 100644 --- a/validator/interfaces/validator-manager.h +++ b/validator/interfaces/validator-manager.h @@ -170,6 +170,14 @@ class ValidatorManager : public ValidatorManagerInterface { virtual void log_validator_session_stats(BlockIdExt block_id, validatorsession::ValidatorSessionStats stats) = 0; + virtual void get_block_handle_for_litequery(BlockIdExt block_id, td::Promise promise) = 0; + virtual void get_block_by_lt_from_db_for_litequery(AccountIdPrefixFull account, LogicalTime lt, + td::Promise promise) = 0; + virtual void get_block_by_unix_time_from_db_for_litequery(AccountIdPrefixFull account, UnixTime ts, + td::Promise promise) = 0; + virtual void get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, + td::Promise promise) = 0; + static bool is_persistent_state(UnixTime ts, UnixTime prev_ts) { return ts / (1 << 17) != prev_ts / (1 << 17); } diff --git a/validator/manager-disk.hpp b/validator/manager-disk.hpp index 1c3f4f5b..4812d60a 100644 --- a/validator/manager-disk.hpp +++ b/validator/manager-disk.hpp @@ -384,6 +384,21 @@ class ValidatorManagerImpl : public ValidatorManager { } td::actor::send_closure(queue_size_counter_, &QueueSizeCounter::get_queue_size, block_id, std::move(promise)); } + void get_block_handle_for_litequery(BlockIdExt block_id, td::Promise promise) override { + get_block_handle(block_id, false, promise.wrap([](BlockHandle &&handle) -> ConstBlockHandle { return handle; })); + } + void get_block_by_lt_from_db_for_litequery(AccountIdPrefixFull account, LogicalTime lt, + td::Promise promise) override { + get_block_by_lt_from_db(account, lt, std::move(promise)); + } + void get_block_by_unix_time_from_db_for_litequery(AccountIdPrefixFull account, UnixTime ts, + td::Promise promise) override { + get_block_by_unix_time_from_db(account, ts, std::move(promise)); + } + void get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, + td::Promise promise) override { + get_block_by_seqno_from_db(account, seqno, std::move(promise)); + } private: PublicKeyHash local_id_; diff --git a/validator/manager-hardfork.hpp b/validator/manager-hardfork.hpp index 675c2304..c34ae5c7 100644 --- a/validator/manager-hardfork.hpp +++ b/validator/manager-hardfork.hpp @@ -445,6 +445,21 @@ class ValidatorManagerImpl : public ValidatorManager { } td::actor::send_closure(queue_size_counter_, &QueueSizeCounter::get_queue_size, block_id, std::move(promise)); } + void get_block_handle_for_litequery(BlockIdExt block_id, td::Promise promise) override { + get_block_handle(block_id, false, promise.wrap([](BlockHandle &&handle) -> ConstBlockHandle { return handle; })); + } + void get_block_by_lt_from_db_for_litequery(AccountIdPrefixFull account, LogicalTime lt, + td::Promise promise) override { + get_block_by_lt_from_db(account, lt, std::move(promise)); + } + void get_block_by_unix_time_from_db_for_litequery(AccountIdPrefixFull account, UnixTime ts, + td::Promise promise) override { + get_block_by_unix_time_from_db(account, ts, std::move(promise)); + } + void get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, + td::Promise promise) override { + get_block_by_seqno_from_db(account, seqno, std::move(promise)); + } private: td::Ref opts_; diff --git a/validator/manager.cpp b/validator/manager.cpp index 4bac4a74..dcda7b6e 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -2334,8 +2334,11 @@ void ValidatorManagerImpl::update_shard_client_block_handle(BlockHandle handle, td::Promise promise) { shard_client_handle_ = std::move(handle); auto seqno = shard_client_handle_->id().seqno(); - if (last_liteserver_state_.is_null() || last_liteserver_state_->get_block_id().seqno() < seqno) { - last_liteserver_state_ = std::move(state); + if (state.not_null()) { + shard_client_shards_ = state->get_shards(); + if (last_liteserver_state_.is_null() || last_liteserver_state_->get_block_id().seqno() < seqno) { + last_liteserver_state_ = std::move(state); + } } shard_client_update(seqno); promise.set_value(td::Unit()); @@ -2662,6 +2665,143 @@ void ValidatorManagerImpl::log_validator_session_stats(BlockIdExt block_id, LOG(INFO) << "Writing validator session stats for " << block_id.id; } +void ValidatorManagerImpl::get_block_handle_for_litequery(BlockIdExt block_id, td::Promise promise) { + get_block_handle( + block_id, false, + [SelfId = actor_id(this), block_id, promise = std::move(promise)](td::Result R) mutable { + if (R.is_ok() && R.ok()->is_applied()) { + promise.set_value(R.move_as_ok()); + } else { + td::actor::send_closure(SelfId, &ValidatorManagerImpl::process_block_handle_for_litequery_error, block_id, + std::move(R), std::move(promise)); + } + }); +} + +void ValidatorManagerImpl::get_block_by_lt_from_db_for_litequery(AccountIdPrefixFull account, LogicalTime lt, + td::Promise promise) { + get_block_by_lt_from_db( + account, lt, [=, SelfId = actor_id(this), promise = std::move(promise)](td::Result R) mutable { + if (R.is_ok() && R.ok()->is_applied()) { + promise.set_value(R.move_as_ok()); + } else { + td::actor::send_closure(SelfId, &ValidatorManagerImpl::process_lookup_block_for_litequery_error, account, 0, + lt, std::move(R), std::move(promise)); + } + }); +} + +void ValidatorManagerImpl::get_block_by_unix_time_from_db_for_litequery(AccountIdPrefixFull account, UnixTime ts, + td::Promise promise) { + get_block_by_unix_time_from_db( + account, ts, [=, SelfId = actor_id(this), promise = std::move(promise)](td::Result R) mutable { + if (R.is_ok() && R.ok()->is_applied()) { + promise.set_value(R.move_as_ok()); + } else { + td::actor::send_closure(SelfId, &ValidatorManagerImpl::process_lookup_block_for_litequery_error, account, 1, + ts, std::move(R), std::move(promise)); + } + }); +} + +void ValidatorManagerImpl::get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, + td::Promise promise) { + get_block_by_seqno_from_db( + account, seqno, + [=, SelfId = actor_id(this), promise = std::move(promise)](td::Result R) mutable { + if (R.is_ok() && R.ok()->is_applied()) { + promise.set_value(R.move_as_ok()); + } else { + td::actor::send_closure(SelfId, &ValidatorManagerImpl::process_lookup_block_for_litequery_error, account, 2, + seqno, std::move(R), std::move(promise)); + } + }); +} + +void ValidatorManagerImpl::process_block_handle_for_litequery_error(BlockIdExt block_id, + td::Result r_handle, + td::Promise promise) { + td::Status err; + if (r_handle.is_error()) { + err = r_handle.move_as_error(); + } else { + auto handle = r_handle.move_as_ok(); + if (handle->is_applied()) { + promise.set_value(std::move(handle)); + return; + } + if (!handle->received() || !handle->received_state()) { + err = td::Status::Error(ErrorCode::notready, PSTRING() << "block " << block_id.id.to_str() << " is not in db"); + } else { + err = td::Status::Error(ErrorCode::notready, PSTRING() << "block " << block_id.id.to_str() << " is not applied"); + } + } + if (block_id.is_masterchain()) { + if (block_id.seqno() > last_masterchain_seqno_) { + err = err.move_as_error_suffix(PSTRING() << " (last known masterchain block: " << last_masterchain_seqno_ << ")"); + } + } else { + for (auto &shard : shard_client_shards_) { + if (shard_intersects(shard->shard(), block_id.shard_full())) { + if (block_id.seqno() > shard->top_block_id().seqno()) { + err = err.move_as_error_suffix( + PSTRING() << " (possibly out of sync: shard_client_seqno=" + << (shard_client_handle_ ? shard_client_handle_->id().seqno() : 0) << " ls_seqno=" + << (last_liteserver_state_.not_null() ? last_liteserver_state_->get_seqno() : 0) << ")"); + } + break; + } + } + } + promise.set_error(std::move(err)); +} + +void ValidatorManagerImpl::process_lookup_block_for_litequery_error(AccountIdPrefixFull account, int type, + td::uint64 value, + td::Result r_handle, + td::Promise promise) { + td::Status err; + if (r_handle.is_error()) { + err = r_handle.move_as_error(); + } else { + auto handle = r_handle.move_as_ok(); + if (handle->is_applied()) { + promise.set_value(std::move(handle)); + return; + } + if (!handle->received() || !handle->received_state()) { + err = td::Status::Error(ErrorCode::notready, PSTRING() << "block " << handle->id().to_str() << " is not in db"); + } else { + err = td::Status::Error(ErrorCode::notready, PSTRING() << "block " << handle->id().to_str() << " is not applied"); + } + } + if (account.is_masterchain()) { + if (value > (type == 0 + ? last_masterchain_state_->get_logical_time() + : (type == 1 ? last_masterchain_state_->get_unix_time() : last_masterchain_state_->get_seqno()))) { + err = err.move_as_error_suffix(PSTRING() << " (last known masterchain block: " << last_masterchain_seqno_ << ")"); + } + } else { + for (auto &shard : shard_client_shards_) { + if (shard_intersects(shard->shard(), account.as_leaf_shard())) { + if (value > (type == 0 ? shard->end_lt() + : (type == 1 ? (shard_client_handle_ ? shard_client_handle_->unix_time() : 0) + : shard->top_block_id().seqno()))) { + err = err.move_as_error_suffix( + PSTRING() << " (possibly out of sync: shard_client_seqno=" + << (shard_client_handle_ ? shard_client_handle_->id().seqno() : 0) << " ls_seqno=" + << (last_liteserver_state_.not_null() ? last_liteserver_state_->get_seqno() : 0) << ")"); + } + break; + } + } + } + static std::string names[3] = {"lt", "utime", "seqno"}; + err = err.move_as_error_prefix(PSTRING() << "cannot find block " << account.to_str() << " " << names[type] << "=" + << value << ": "); + promise.set_error(std::move(err)); +} + td::actor::ActorOwn ValidatorManagerFactory::create( td::Ref opts, std::string db_root, td::actor::ActorId keyring, td::actor::ActorId adnl, td::actor::ActorId rldp, diff --git a/validator/manager.hpp b/validator/manager.hpp index 9f51cc27..bdf0155e 100644 --- a/validator/manager.hpp +++ b/validator/manager.hpp @@ -252,6 +252,7 @@ class ValidatorManagerImpl : public ValidatorManager { BlockHandle last_key_block_handle_; BlockHandle last_known_key_block_handle_; BlockHandle shard_client_handle_; + std::vector> shard_client_shards_; td::Ref last_liteserver_state_; td::Ref do_get_last_liteserver_state(); @@ -561,6 +562,19 @@ class ValidatorManagerImpl : public ValidatorManager { td::actor::send_closure(queue_size_counter_, &QueueSizeCounter::get_queue_size, block_id, std::move(promise)); } + void get_block_handle_for_litequery(BlockIdExt block_id, td::Promise promise) override; + void get_block_by_lt_from_db_for_litequery(AccountIdPrefixFull account, LogicalTime lt, + td::Promise promise) override; + void get_block_by_unix_time_from_db_for_litequery(AccountIdPrefixFull account, UnixTime ts, + td::Promise promise) override; + void get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, + td::Promise promise) override; + void process_block_handle_for_litequery_error(BlockIdExt block_id, td::Result r_handle, + td::Promise promise); + void process_lookup_block_for_litequery_error(AccountIdPrefixFull account, int type, td::uint64 value, + td::Result r_handle, + td::Promise promise); + private: td::Timestamp resend_shard_blocks_at_; td::Timestamp check_waiters_at_; From c8918f0c02a800d32bee8f5f633575e7fde7a8af Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 27 Dec 2023 15:50:09 +0300 Subject: [PATCH 057/351] Write config.json using temp file (#839) Co-authored-by: SpyCheese --- dht-server/dht-server.cpp | 17 +++++++++++++---- dht-server/dht-server.hpp | 3 +++ validator-engine/validator-engine.cpp | 17 +++++++++++++---- validator-engine/validator-engine.hpp | 5 ++++- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/dht-server/dht-server.cpp b/dht-server/dht-server.cpp index f729105f..37a158eb 100644 --- a/dht-server/dht-server.cpp +++ b/dht-server/dht-server.cpp @@ -572,6 +572,12 @@ void DhtServer::load_config(td::Promise promise) { config_file_ = db_root_ + "/config.json"; } auto conf_data_R = td::read_file(config_file_); + if (conf_data_R.is_error()) { + conf_data_R = td::read_file(temp_config_file()); + if (conf_data_R.is_ok()) { + td::rename(temp_config_file(), config_file_).ensure(); + } + } if (conf_data_R.is_error()) { auto P = td::PromiseCreator::lambda( [name = local_config_, new_name = config_file_, promise = std::move(promise)](td::Result R) { @@ -620,12 +626,15 @@ void DhtServer::load_config(td::Promise promise) { void DhtServer::write_config(td::Promise promise) { auto s = td::json_encode(td::ToJson(*config_.tl().get()), true); - auto S = td::write_file(config_file_, s); - if (S.is_ok()) { - promise.set_value(td::Unit()); - } else { + auto S = td::write_file(temp_config_file(), s); + if (S.is_error()) { + td::unlink(temp_config_file()).ignore(); promise.set_error(std::move(S)); + return; } + td::unlink(config_file_).ignore(); + TRY_STATUS_PROMISE(promise, td::rename(temp_config_file(), config_file_)); + promise.set_value(td::Unit()); } td::Promise DhtServer::get_key_promise(td::MultiPromise::InitGuard &ig) { diff --git a/dht-server/dht-server.hpp b/dht-server/dht-server.hpp index bf24d621..5b81875b 100644 --- a/dht-server/dht-server.hpp +++ b/dht-server/dht-server.hpp @@ -109,6 +109,9 @@ class DhtServer : public td::actor::Actor { std::string local_config_ = ""; std::string global_config_ = "ton-global.config"; std::string config_file_; + std::string temp_config_file() const { + return config_file_ + ".tmp"; + } std::string db_root_ = "/var/ton-work/db/"; diff --git a/validator-engine/validator-engine.cpp b/validator-engine/validator-engine.cpp index 1d9223f2..e488504f 100644 --- a/validator-engine/validator-engine.cpp +++ b/validator-engine/validator-engine.cpp @@ -1595,6 +1595,12 @@ void ValidatorEngine::load_config(td::Promise promise) { config_file_ = db_root_ + "/config.json"; } auto conf_data_R = td::read_file(config_file_); + if (conf_data_R.is_error()) { + conf_data_R = td::read_file(temp_config_file()); + if (conf_data_R.is_ok()) { + td::rename(temp_config_file(), config_file_).ensure(); + } + } if (conf_data_R.is_error()) { auto P = td::PromiseCreator::lambda( [name = local_config_, new_name = config_file_, promise = std::move(promise)](td::Result R) { @@ -1643,12 +1649,15 @@ void ValidatorEngine::load_config(td::Promise promise) { void ValidatorEngine::write_config(td::Promise promise) { auto s = td::json_encode(td::ToJson(*config_.tl().get()), true); - auto S = td::write_file(config_file_, s); - if (S.is_ok()) { - promise.set_value(td::Unit()); - } else { + auto S = td::write_file(temp_config_file(), s); + if (S.is_error()) { + td::unlink(temp_config_file()).ignore(); promise.set_error(std::move(S)); + return; } + td::unlink(config_file_).ignore(); + TRY_STATUS_PROMISE(promise, td::rename(temp_config_file(), config_file_)); + promise.set_value(td::Unit()); } td::Promise ValidatorEngine::get_key_promise(td::MultiPromise::InitGuard &ig) { diff --git a/validator-engine/validator-engine.hpp b/validator-engine/validator-engine.hpp index ebcd60c6..e59bb418 100644 --- a/validator-engine/validator-engine.hpp +++ b/validator-engine/validator-engine.hpp @@ -1,4 +1,4 @@ -/* +/* This file is part of TON Blockchain source code. TON Blockchain is free software; you can redistribute it and/or @@ -152,6 +152,9 @@ class ValidatorEngine : public td::actor::Actor { std::string local_config_ = ""; std::string global_config_ = "ton-global.config"; std::string config_file_; + std::string temp_config_file() const { + return config_file_ + ".tmp"; + } std::string fift_dir_ = ""; From 550c28d7dbc23a52ca8c6e6d9e4a2de14822db90 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Thu, 28 Dec 2023 09:43:10 +0300 Subject: [PATCH 058/351] Improve DHT store/load, pinging overlay peers (#840) * Improve DHT store/load, pinging overlay peers * Fix speed limits in storage * Use keyStoreTypeDirectory in rldp-http-proxy and storage-daemon Mainly for caching synced block in tonlib. --------- Co-authored-by: SpyCheese --- dht/dht-in.hpp | 5 +- dht/dht-query.cpp | 87 +++++++++++++---------- dht/dht-query.hpp | 16 +++-- dht/dht.cpp | 22 +++--- dht/dht.hpp | 2 +- overlay/overlay-manager.cpp | 6 +- overlay/overlay-manager.h | 2 +- overlay/overlay.cpp | 23 ++++-- overlay/overlay.h | 2 +- overlay/overlay.hpp | 24 ++++++- overlay/overlays.h | 7 +- rldp-http-proxy/rldp-http-proxy.cpp | 16 ++++- storage/PeerActor.cpp | 24 +++++-- storage/PeerManager.h | 6 +- storage/SpeedLimiter.cpp | 5 +- storage/storage-daemon/storage-daemon.cpp | 4 +- 16 files changed, 162 insertions(+), 89 deletions(-) diff --git a/dht/dht-in.hpp b/dht/dht-in.hpp index 59ce2184..c2d20455 100644 --- a/dht/dht-in.hpp +++ b/dht/dht-in.hpp @@ -155,10 +155,7 @@ class DhtMemberImpl : public DhtMember { } } - void add_full_node(DhtKeyId id, DhtNode node) override { - add_full_node_impl(id, std::move(node)); - } - void add_full_node_impl(DhtKeyId id, DhtNode node, bool set_active = false); + void add_full_node(DhtKeyId id, DhtNode node, bool set_active) override; adnl::AdnlNodeIdShort get_id() const override { return id_; diff --git a/dht/dht-query.cpp b/dht/dht-query.cpp index bc61242d..b84ef8c3 100644 --- a/dht/dht-query.cpp +++ b/dht/dht-query.cpp @@ -34,24 +34,33 @@ namespace ton { namespace dht { void DhtQuery::send_queries() { + while (pending_queries_.size() > k_ * 2) { + pending_queries_.erase(--pending_queries_.end()); + } VLOG(DHT_EXTRA_DEBUG) << this << ": sending new queries. active=" << active_queries_ << " max_active=" << a_; - while (pending_ids_.size() > 0 && active_queries_ < a_) { + while (pending_queries_.size() > 0 && active_queries_ < a_) { + auto id_xor = *pending_queries_.begin(); + if (result_list_.size() == k_ && *result_list_.rbegin() < id_xor) { + break; + } active_queries_++; - auto id_xor = *pending_ids_.begin(); auto id = id_xor ^ key_; VLOG(DHT_EXTRA_DEBUG) << this << ": sending " << get_name() << " query to " << id; - pending_ids_.erase(id_xor); + pending_queries_.erase(id_xor); - auto it = list_.find(id_xor); - CHECK(it != list_.end()); - td::actor::send_closure(adnl_, &adnl::Adnl::add_peer, get_src(), it->second.adnl_id(), it->second.addr_list()); + auto it = nodes_.find(id_xor); + CHECK(it != nodes_.end()); + td::actor::send_closure(adnl_, &adnl::Adnl::add_peer, get_src(), it->second.node.adnl_id(), + it->second.node.addr_list()); send_one_query(id.to_adnl()); } if (active_queries_ == 0) { - CHECK(pending_ids_.size() == 0); + pending_queries_.clear(); DhtNodesList list; - for (auto &node : list_) { - list.push_back(std::move(node.second)); + for (auto id_xor : result_list_) { + auto it = nodes_.find(id_xor); + CHECK(it != nodes_.end()); + list.push_back(it->second.node.clone()); } CHECK(list.size() <= k_); VLOG(DHT_EXTRA_DEBUG) << this << ": finalizing " << get_name() << " query. List size=" << list.size(); @@ -65,30 +74,32 @@ void DhtQuery::add_nodes(DhtNodesList list) { for (auto &node : list.list()) { auto id = node.get_key(); auto id_xor = key_ ^ id; - if (list_.find(id_xor) != list_.end()) { + if (nodes_.find(id_xor) != nodes_.end()) { continue; } - td::actor::send_closure(node_, &DhtMember::add_full_node, id, node.clone()); + VLOG(DHT_EXTRA_DEBUG) << this << ": " << get_name() << " query: adding " << id << " key"; + td::actor::send_closure(node_, &DhtMember::add_full_node, id, node.clone(), false); + nodes_[id_xor].node = std::move(node); + pending_queries_.insert(id_xor); + } +} - DhtKeyId last_id_xor; - if (list_.size() > 0) { - last_id_xor = list_.rbegin()->first; +void DhtQuery::finish_query(adnl::AdnlNodeIdShort id, bool success) { + active_queries_--; + CHECK(active_queries_ <= k_); + auto id_xor = key_ ^ DhtKeyId(id); + if (success) { + result_list_.insert(id_xor); + if (result_list_.size() > k_) { + result_list_.erase(--result_list_.end()); } - - if (list_.size() < k_ || id_xor < last_id_xor) { - list_[id_xor] = std::move(node); - pending_ids_.insert(id_xor); - if (list_.size() > k_) { - CHECK(id_xor != last_id_xor); - VLOG(DHT_EXTRA_DEBUG) << this << ": " << get_name() << " query: replacing " << (last_id_xor ^ key_) - << " key with " << id; - pending_ids_.erase(last_id_xor); - list_.erase(last_id_xor); - } else { - VLOG(DHT_EXTRA_DEBUG) << this << ": " << get_name() << " query: adding " << id << " key"; - } + } else { + NodeInfo &info = nodes_[id_xor]; + if (++info.failed_attempts < MAX_ATTEMPTS) { + pending_queries_.insert(id_xor); } } + send_queries(); } void DhtQueryFindNodes::send_one_query(adnl::AdnlNodeIdShort id) { @@ -111,7 +122,7 @@ void DhtQueryFindNodes::send_one_query(adnl::AdnlNodeIdShort id) { void DhtQueryFindNodes::on_result(td::Result R, adnl::AdnlNodeIdShort dst) { if (R.is_error()) { VLOG(DHT_INFO) << this << ": failed find nodes query " << get_src() << "->" << dst << ": " << R.move_as_error(); - finish_query(); + finish_query(dst, false); return; } @@ -122,7 +133,7 @@ void DhtQueryFindNodes::on_result(td::Result R, adnl::AdnlNodeI } else { add_nodes(DhtNodesList{Res.move_as_ok(), our_network_id()}); } - finish_query(); + finish_query(dst); } void DhtQueryFindNodes::finish(DhtNodesList list) { @@ -166,14 +177,14 @@ void DhtQueryFindValue::send_one_query_nodes(adnl::AdnlNodeIdShort id) { void DhtQueryFindValue::on_result(td::Result R, adnl::AdnlNodeIdShort dst) { if (R.is_error()) { VLOG(DHT_INFO) << this << ": failed find value query " << get_src() << "->" << dst << ": " << R.move_as_error(); - finish_query(); + finish_query(dst, false); return; } auto Res = fetch_tl_object(R.move_as_ok(), true); if (Res.is_error()) { VLOG(DHT_WARNING) << this << ": dropping incorrect answer on dht.findValue query from " << dst << ": " << Res.move_as_error(); - finish_query(); + finish_query(dst, false); return; } @@ -210,26 +221,26 @@ void DhtQueryFindValue::on_result(td::Result R, adnl::AdnlNodeI } else if (send_get_nodes) { send_one_query_nodes(dst); } else { - finish_query(); + finish_query(dst); } } void DhtQueryFindValue::on_result_nodes(td::Result R, adnl::AdnlNodeIdShort dst) { if (R.is_error()) { VLOG(DHT_INFO) << this << ": failed find nodes query " << get_src() << "->" << dst << ": " << R.move_as_error(); - finish_query(); + finish_query(dst, false); return; } auto Res = fetch_tl_object(R.move_as_ok(), true); if (Res.is_error()) { VLOG(DHT_WARNING) << this << ": dropping incorrect answer on dht.findNodes query from " << dst << ": " << Res.move_as_error(); - finish_query(); + finish_query(dst, false); return; } auto r = Res.move_as_ok(); add_nodes(DhtNodesList{create_tl_object(std::move(r->nodes_)), our_network_id()}); - finish_query(); + finish_query(dst); } void DhtQueryFindValue::finish(DhtNodesList list) { @@ -422,14 +433,14 @@ void DhtQueryRequestReversePing::send_one_query(adnl::AdnlNodeIdShort id) { void DhtQueryRequestReversePing::on_result(td::Result R, adnl::AdnlNodeIdShort dst) { if (R.is_error()) { VLOG(DHT_INFO) << this << ": failed reverse ping query " << get_src() << "->" << dst << ": " << R.move_as_error(); - finish_query(); + finish_query(dst, false); return; } auto Res = fetch_tl_object(R.move_as_ok(), true); if (Res.is_error()) { VLOG(DHT_WARNING) << this << ": dropping incorrect answer on dht.requestReversePing query from " << dst << ": " << Res.move_as_error(); - finish_query(); + finish_query(dst, false); return; } @@ -441,7 +452,7 @@ void DhtQueryRequestReversePing::on_result(td::Result R, adnl:: }, [&](ton_api::dht_clientNotFound &v) { add_nodes(DhtNodesList{std::move(v.nodes_), our_network_id()}); - finish_query(); + finish_query(dst); })); } diff --git a/dht/dht-query.hpp b/dht/dht-query.hpp index c1db0a0e..e4740361 100644 --- a/dht/dht-query.hpp +++ b/dht/dht-query.hpp @@ -63,11 +63,7 @@ class DhtQuery : public td::actor::Actor { } void send_queries(); void add_nodes(DhtNodesList list); - void finish_query() { - active_queries_--; - CHECK(active_queries_ <= k_); - send_queries(); - } + void finish_query(adnl::AdnlNodeIdShort id, bool success = true); DhtKeyId get_key() const { return key_; } @@ -88,16 +84,22 @@ class DhtQuery : public td::actor::Actor { virtual std::string get_name() const = 0; private: + struct NodeInfo { + DhtNode node; + int failed_attempts = 0; + }; DhtMember::PrintId print_id_; adnl::AdnlNodeIdShort src_; - std::map list_; - std::set pending_ids_; + std::map nodes_; + std::set result_list_, pending_queries_; td::uint32 k_; td::uint32 a_; td::int32 our_network_id_; td::actor::ActorId node_; td::uint32 active_queries_ = 0; + static const int MAX_ATTEMPTS = 1; + protected: td::actor::ActorId adnl_; }; diff --git a/dht/dht.cpp b/dht/dht.cpp index e1e20d45..8d7b02b7 100644 --- a/dht/dht.cpp +++ b/dht/dht.cpp @@ -57,7 +57,7 @@ td::Result> Dht::create(adnl::AdnlNodeIdShort id, std:: for (auto &node : nodes.list()) { auto key = node.get_key(); - td::actor::send_closure(D, &DhtMember::add_full_node, key, node.clone()); + td::actor::send_closure(D, &DhtMember::add_full_node, key, node.clone(), true); } return std::move(D); } @@ -74,7 +74,7 @@ td::Result> Dht::create_client(adnl::AdnlNodeIdShort id for (auto &node : nodes.list()) { auto key = node.get_key(); - td::actor::send_closure(D, &DhtMember::add_full_node, key, node.clone()); + td::actor::send_closure(D, &DhtMember::add_full_node, key, node.clone(), true); } return std::move(D); } @@ -368,7 +368,7 @@ void DhtMemberImpl::receive_query(adnl::AdnlNodeIdShort src, td::BufferSlice dat auto node = N.move_as_ok(); if (node.adnl_id().compute_short_id() == src) { auto key = node.get_key(); - add_full_node_impl(key, std::move(node), true); + add_full_node(key, std::move(node), true); } else { VLOG(DHT_WARNING) << this << ": dropping bad node: unexpected adnl id"; } @@ -398,7 +398,7 @@ void DhtMemberImpl::receive_query(adnl::AdnlNodeIdShort src, td::BufferSlice dat ton_api::downcast_call(*Q, [&](auto &object) { this->process_query(src, object, std::move(promise)); }); } -void DhtMemberImpl::add_full_node_impl(DhtKeyId key, DhtNode node, bool set_active) { +void DhtMemberImpl::add_full_node(DhtKeyId key, DhtNode node, bool set_active) { VLOG(DHT_EXTRA_DEBUG) << this << ": adding full node " << key; auto eid = key ^ key_; @@ -466,7 +466,7 @@ void DhtMemberImpl::set_value(DhtValue value, td::Promise promise) { void DhtMemberImpl::get_value_in(DhtKeyId key, td::Promise result) { auto P = td::PromiseCreator::lambda([key, promise = std::move(result), SelfId = actor_id(this), print_id = print_id(), - adnl = adnl_, list = get_nearest_nodes(key, k_), k = k_, a = a_, + adnl = adnl_, list = get_nearest_nodes(key, k_ * 2), k = k_, a = a_, network_id = network_id_, id = id_, client_only = client_only_](td::Result R) mutable { R.ensure(); @@ -485,7 +485,7 @@ void DhtMemberImpl::register_reverse_connection(adnl::AdnlNodeIdFull client, td: auto key_id = get_reverse_connection_key(client_short).compute_key_id(); td::actor::send_closure(keyring_, &keyring::Keyring::sign_message, client_short.pubkey_hash(), register_reverse_connection_to_sign(client_short, id_, ttl), - [=, print_id = print_id(), list = get_nearest_nodes(key_id, k_), SelfId = actor_id(this), + [=, print_id = print_id(), list = get_nearest_nodes(key_id, k_ * 2), SelfId = actor_id(this), promise = std::move(promise)](td::Result R) mutable { TRY_RESULT_PROMISE_PREFIX(promise, signature, std::move(R), "Failed to sign: "); td::actor::send_closure(SelfId, &DhtMemberImpl::get_self_node, @@ -532,7 +532,7 @@ void DhtMemberImpl::request_reverse_ping_cont(adnl::AdnlNode target, td::BufferS } auto key_id = get_reverse_connection_key(client).compute_key_id(); get_self_node([=, target = std::move(target), signature = std::move(signature), promise = std::move(promise), - SelfId = actor_id(this), print_id = print_id(), list = get_nearest_nodes(key_id, k_), + SelfId = actor_id(this), print_id = print_id(), list = get_nearest_nodes(key_id, k_ * 2), client_only = client_only_](td::Result R) mutable { R.ensure(); td::actor::create_actor( @@ -651,8 +651,8 @@ void DhtMemberImpl::check() { DhtKeyId key{x}; auto P = td::PromiseCreator::lambda([key, promise = std::move(promise), SelfId = actor_id(this), - print_id = print_id(), adnl = adnl_, list = get_nearest_nodes(key, k_), k = k_, - a = a_, network_id = network_id_, id = id_, + print_id = print_id(), adnl = adnl_, list = get_nearest_nodes(key, k_ * 2), + k = k_, a = a_, network_id = network_id_, id = id_, client_only = client_only_](td::Result R) mutable { R.ensure(); td::actor::create_actor("FindNodesQuery", key, print_id, id, std::move(list), k, a, network_id, @@ -677,8 +677,8 @@ void DhtMemberImpl::send_store(DhtValue value, td::Promise promise) { auto key_id = value.key_id(); auto P = td::PromiseCreator::lambda([value = std::move(value), print_id = print_id(), id = id_, - client_only = client_only_, list = get_nearest_nodes(key_id, k_), k = k_, a = a_, - network_id = network_id_, SelfId = actor_id(this), adnl = adnl_, + client_only = client_only_, list = get_nearest_nodes(key_id, k_ * 2), k = k_, + a = a_, network_id = network_id_, SelfId = actor_id(this), adnl = adnl_, promise = std::move(promise)](td::Result R) mutable { R.ensure(); td::actor::create_actor("StoreQuery", std::move(value), print_id, id, std::move(list), k, a, diff --git a/dht/dht.hpp b/dht/dht.hpp index 0b46d635..9fb05e08 100644 --- a/dht/dht.hpp +++ b/dht/dht.hpp @@ -95,7 +95,7 @@ class DhtMember : public Dht { //virtual void update_addr_list(tl_object_ptr addr_list) = 0; //virtual void add_node(adnl::AdnlNodeIdShort id) = 0; - virtual void add_full_node(DhtKeyId id, DhtNode node) = 0; + virtual void add_full_node(DhtKeyId id, DhtNode node, bool set_active) = 0; virtual void receive_ping(DhtKeyId id, DhtNode result) = 0; diff --git a/overlay/overlay-manager.cpp b/overlay/overlay-manager.cpp index 43192190..3c5f5eab 100644 --- a/overlay/overlay-manager.cpp +++ b/overlay/overlay-manager.cpp @@ -93,17 +93,17 @@ void OverlayManager::create_public_overlay(adnl::AdnlNodeIdShort local_id, Overl std::unique_ptr callback, OverlayPrivacyRules rules, td::string scope) { create_public_overlay_ex(local_id, std::move(overlay_id), std::move(callback), std::move(rules), std::move(scope), - true); + {}); } void OverlayManager::create_public_overlay_ex(adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id, std::unique_ptr callback, OverlayPrivacyRules rules, - td::string scope, bool announce_self) { + td::string scope, OverlayOptions opts) { CHECK(!dht_node_.empty()); auto id = overlay_id.compute_short_id(); register_overlay(local_id, id, Overlay::create(keyring_, adnl_, actor_id(this), dht_node_, local_id, std::move(overlay_id), - std::move(callback), std::move(rules), scope, announce_self)); + std::move(callback), std::move(rules), scope, std::move(opts))); } void OverlayManager::create_private_overlay(adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id, diff --git a/overlay/overlay-manager.h b/overlay/overlay-manager.h index fe1166ac..035ef3e8 100644 --- a/overlay/overlay-manager.h +++ b/overlay/overlay-manager.h @@ -54,7 +54,7 @@ class OverlayManager : public Overlays { std::unique_ptr callback, OverlayPrivacyRules rules, td::string scope) override; void create_public_overlay_ex(adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id, std::unique_ptr callback, OverlayPrivacyRules rules, td::string scope, - bool announce_self) override; + OverlayOptions opts) override; void create_private_overlay(adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id, std::vector nodes, std::unique_ptr callback, OverlayPrivacyRules rules) override; diff --git a/overlay/overlay.cpp b/overlay/overlay.cpp index fcf766fe..af01e045 100644 --- a/overlay/overlay.cpp +++ b/overlay/overlay.cpp @@ -37,10 +37,10 @@ td::actor::ActorOwn Overlay::create(td::actor::ActorId manager, td::actor::ActorId dht_node, adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id, std::unique_ptr callback, - OverlayPrivacyRules rules, td::string scope, bool announce_self) { + OverlayPrivacyRules rules, td::string scope, OverlayOptions opts) { auto R = td::actor::create_actor("overlay", keyring, adnl, manager, dht_node, local_id, std::move(overlay_id), true, std::vector(), - std::move(callback), std::move(rules), scope, announce_self); + std::move(callback), std::move(rules), scope, opts); return td::actor::ActorOwn(std::move(R)); } @@ -60,7 +60,7 @@ OverlayImpl::OverlayImpl(td::actor::ActorId keyring, td::actor td::actor::ActorId manager, td::actor::ActorId dht_node, adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id, bool pub, std::vector nodes, std::unique_ptr callback, - OverlayPrivacyRules rules, td::string scope, bool announce_self) + OverlayPrivacyRules rules, td::string scope, OverlayOptions opts) : keyring_(keyring) , adnl_(adnl) , manager_(manager) @@ -71,7 +71,8 @@ OverlayImpl::OverlayImpl(td::actor::ActorId keyring, td::actor , public_(pub) , rules_(std::move(rules)) , scope_(scope) - , announce_self_(announce_self) { + , announce_self_(opts.announce_self_) + , frequent_dht_lookup_(opts.frequent_dht_lookup_) { overlay_id_ = id_full_.compute_short_id(); VLOG(OVERLAY_INFO) << this << ": creating " << (public_ ? "public" : "private"); @@ -279,13 +280,13 @@ void OverlayImpl::alarm() { send_random_peers(P->get_id(), {}); } } - if (next_dht_query_.is_in_past()) { + if (next_dht_query_ && next_dht_query_.is_in_past()) { + next_dht_query_ = td::Timestamp::never(); auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result res) { td::actor::send_closure(SelfId, &OverlayImpl::receive_dht_nodes, std::move(res), true); }); td::actor::send_closure(dht_node_, &dht::Dht::get_value, dht::DhtKey{overlay_id_.pubkey_hash(), "nodes", 0}, std::move(P)); - next_dht_query_ = td::Timestamp::in(td::Random::fast(60.0, 100.0)); } if (update_db_at_.is_in_past()) { if (peers_.size() > 0) { @@ -333,7 +334,13 @@ void OverlayImpl::receive_dht_nodes(td::Result res, bool dummy) { VLOG(OVERLAY_NOTICE) << this << ": can not get value from DHT: " << res.move_as_error(); } + if (!(next_dht_store_query_ && next_dht_store_query_.is_in_past())) { + finish_dht_query(); + return; + } + next_dht_store_query_ = td::Timestamp::never(); if (!announce_self_) { + finish_dht_query(); return; } @@ -341,6 +348,7 @@ void OverlayImpl::receive_dht_nodes(td::Result res, bool dummy) { auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), oid = print_id()](td::Result R) { if (R.is_error()) { LOG(ERROR) << oid << "cannot get self node"; + td::actor::send_closure(SelfId, &OverlayImpl::finish_dht_query); return; } td::actor::send_closure(SelfId, &OverlayImpl::update_dht_nodes, R.move_as_ok()); @@ -365,10 +373,11 @@ void OverlayImpl::update_dht_nodes(OverlayNode node) { static_cast(td::Clocks::system() + 3600), td::BufferSlice()}; value.check().ensure(); - auto P = td::PromiseCreator::lambda([oid = print_id()](td::Result res) { + auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), oid = print_id()](td::Result res) { if (res.is_error()) { VLOG(OVERLAY_NOTICE) << oid << ": error storing to DHT: " << res.move_as_error(); } + td::actor::send_closure(SelfId, &OverlayImpl::finish_dht_query); }); td::actor::send_closure(dht_node_, &dht::Dht::set_value, std::move(value), std::move(P)); diff --git a/overlay/overlay.h b/overlay/overlay.h index a5f7b3a4..da41a247 100644 --- a/overlay/overlay.h +++ b/overlay/overlay.h @@ -42,7 +42,7 @@ class Overlay : public td::actor::Actor { td::actor::ActorId manager, td::actor::ActorId dht_node, adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id, std::unique_ptr callback, - OverlayPrivacyRules rules, td::string scope, bool announce_self = true); + OverlayPrivacyRules rules, td::string scope, OverlayOptions opts = {}); static td::actor::ActorOwn create(td::actor::ActorId keyring, td::actor::ActorId adnl, td::actor::ActorId manager, diff --git a/overlay/overlay.hpp b/overlay/overlay.hpp index 86d37d5b..90fcc43d 100644 --- a/overlay/overlay.hpp +++ b/overlay/overlay.hpp @@ -82,12 +82,17 @@ class OverlayPeer { void on_ping_result(bool success) { if (success) { missed_pings_ = 0; + last_ping_at_ = td::Timestamp::now(); + is_alive_ = true; } else { ++missed_pings_; + if (missed_pings_ >= 3 && last_ping_at_.is_in_past(td::Timestamp::in(-15.0))) { + is_alive_ = false; + } } } bool is_alive() const { - return missed_pings_ < 3; + return is_alive_; } td::uint32 throughput_out_bytes = 0; @@ -116,6 +121,8 @@ class OverlayPeer { bool is_neighbour_ = false; size_t missed_pings_ = 0; + bool is_alive_ = true; + td::Timestamp last_ping_at_ = td::Timestamp::now(); }; class OverlayImpl : public Overlay { @@ -124,7 +131,7 @@ class OverlayImpl : public Overlay { td::actor::ActorId manager, td::actor::ActorId dht_node, adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id, bool pub, std::vector nodes, std::unique_ptr callback, - OverlayPrivacyRules rules, td::string scope = "{ \"type\": \"undefined\" }", bool announce_self = true); + OverlayPrivacyRules rules, td::string scope = "{ \"type\": \"undefined\" }", OverlayOptions opts = {}); void update_dht_node(td::actor::ActorId dht) override { dht_node_ = dht; } @@ -295,6 +302,17 @@ class OverlayImpl : public Overlay { void del_peer(adnl::AdnlNodeIdShort id); OverlayPeer *get_random_peer(bool only_alive = false); + void finish_dht_query() { + if (!next_dht_store_query_) { + next_dht_store_query_ = td::Timestamp::in(td::Random::fast(60.0, 100.0)); + } + if (frequent_dht_lookup_ && peers_.size() == bad_peers_.size()) { + next_dht_query_ = td::Timestamp::in(td::Random::fast(6.0, 10.0)); + } else { + next_dht_query_ = next_dht_store_query_; + } + } + td::actor::ActorId keyring_; td::actor::ActorId adnl_; td::actor::ActorId manager_; @@ -305,6 +323,7 @@ class OverlayImpl : public Overlay { td::DecTree peers_; td::Timestamp next_dht_query_ = td::Timestamp::in(1.0); + td::Timestamp next_dht_store_query_ = td::Timestamp::in(1.0); td::Timestamp update_db_at_; td::Timestamp update_throughput_at_; td::Timestamp last_throughput_update_; @@ -367,6 +386,7 @@ class OverlayImpl : public Overlay { OverlayPrivacyRules rules_; td::string scope_; bool announce_self_ = true; + bool frequent_dht_lookup_ = false; std::map> certs_; class CachedEncryptor : public td::ListNode { diff --git a/overlay/overlays.h b/overlay/overlays.h index e12bbbdb..79551e05 100644 --- a/overlay/overlays.h +++ b/overlay/overlays.h @@ -158,6 +158,11 @@ class Certificate { td::SharedSlice signature_; }; +struct OverlayOptions { + bool announce_self_ = true; + bool frequent_dht_lookup_ = false; +}; + class Overlays : public td::actor::Actor { public: class Callback { @@ -197,7 +202,7 @@ class Overlays : public td::actor::Actor { td::string scope) = 0; virtual void create_public_overlay_ex(adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id, std::unique_ptr callback, OverlayPrivacyRules rules, - td::string scope, bool announce_self) = 0; + td::string scope, OverlayOptions opts) = 0; virtual void create_private_overlay(adnl::AdnlNodeIdShort local_id, OverlayIdFull overlay_id, std::vector nodes, std::unique_ptr callback, OverlayPrivacyRules rules) = 0; diff --git a/rldp-http-proxy/rldp-http-proxy.cpp b/rldp-http-proxy/rldp-http-proxy.cpp index e9186822..0d518d6d 100644 --- a/rldp-http-proxy/rldp-http-proxy.cpp +++ b/rldp-http-proxy/rldp-http-proxy.cpp @@ -54,6 +54,7 @@ #include "git.h" #include "td/utils/BufferedFd.h" #include "common/delay.h" +#include "td/utils/port/path.h" #include "tonlib/tonlib/TonlibClientWrapper.h" #include "DNSResolver.h" @@ -920,6 +921,12 @@ class RldpHttpProxy : public td::actor::Actor { } void run() { + if (!db_root_.empty()) { + td::mkpath(db_root_ + "/").ensure(); + } else if (!is_client_) { + LOG(ERROR) << "DB root is required for server proxy"; + std::_Exit(2); + } keyring_ = ton::keyring::Keyring::create(is_client_ ? std::string("") : (db_root_ + "/keyring")); { auto S = load_global_config(); @@ -955,9 +962,16 @@ class RldpHttpProxy : public td::actor::Actor { auto conf_dataR = td::read_file(global_config_); conf_dataR.ensure(); + ton::tl_object_ptr key_store; + if (db_root_.empty()) { + key_store = tonlib_api::make_object(); + } else { + td::mkpath(db_root_ + "/tonlib-cache/").ensure(); + key_store = tonlib_api::make_object(db_root_ + "/tonlib-cache/"); + } auto tonlib_options = tonlib_api::make_object( tonlib_api::make_object(conf_dataR.move_as_ok().as_slice().str(), "", false, false), - tonlib_api::make_object()); + std::move(key_store)); tonlib_client_ = td::actor::create_actor("tonlibclient", std::move(tonlib_options)); dns_resolver_ = td::actor::create_actor("dnsresolver", tonlib_client_.get()); } diff --git a/storage/PeerActor.cpp b/storage/PeerActor.cpp index 0cb21c0a..48d45626 100644 --- a/storage/PeerActor.cpp +++ b/storage/PeerActor.cpp @@ -25,6 +25,7 @@ #include "td/utils/overloaded.h" #include "td/utils/Random.h" #include "vm/boc.h" +#include "common/delay.h" namespace ton { @@ -119,9 +120,9 @@ void PeerActor::on_get_piece_result(PartId piece_id, td::Result return std::move(res); }(); if (res.is_error()) { - LOG(DEBUG) << "getPiece " << piece_id << "query: " << res.error(); + LOG(DEBUG) << "getPiece " << piece_id << " query: " << res.error(); } else { - LOG(DEBUG) << "getPiece " << piece_id << "query: OK"; + LOG(DEBUG) << "getPiece " << piece_id << " query: OK"; } state_->node_queries_results_.add_element(std::make_pair(piece_id, std::move(res))); notify_node(); @@ -343,11 +344,20 @@ void PeerActor::loop_node_get_piece() { } auto piece_size = std::min(torrent_info_->piece_size, torrent_info_->file_size - part * torrent_info_->piece_size); - td::actor::send_closure(state_->speed_limiters_.download, &SpeedLimiter::enqueue, (double)piece_size, - td::Timestamp::in(3.0), [part, SelfId = actor_id(this)](td::Result R) { - td::actor::send_closure(SelfId, &PeerActor::node_get_piece_query_ready, part, - std::move(R)); - }); + td::Timestamp timeout = td::Timestamp::in(3.0); + td::actor::send_closure( + state_->speed_limiters_.download, &SpeedLimiter::enqueue, (double)piece_size, timeout, + [=, SelfId = actor_id(this)](td::Result R) { + if (R.is_ok()) { + td::actor::send_closure(SelfId, &PeerActor::node_get_piece_query_ready, part, std::move(R)); + } else { + delay_action( + [=, R = std::move(R)]() mutable { + td::actor::send_closure(SelfId, &PeerActor::node_get_piece_query_ready, part, std::move(R)); + }, + timeout); + } + }); } } diff --git a/storage/PeerManager.h b/storage/PeerManager.h index 52297ac5..38d1494b 100644 --- a/storage/PeerManager.h +++ b/storage/PeerManager.h @@ -143,9 +143,11 @@ class PeerManager : public td::actor::Actor { td::actor::ActorId peer_manager_; ton::adnl::AdnlNodeIdShort dst_; }; + ton::overlay::OverlayOptions opts; + opts.announce_self_ = !client_mode_; + opts.frequent_dht_lookup_ = true; send_closure(overlays_, &ton::overlay::Overlays::create_public_overlay_ex, src_id, overlay_id_.clone(), - std::make_unique(actor_id(this), src_id), rules, R"({ "type": "storage" })", - !client_mode_); + std::make_unique(actor_id(this), src_id), rules, R"({ "type": "storage" })", opts); } promise.set_value({}); } diff --git a/storage/SpeedLimiter.cpp b/storage/SpeedLimiter.cpp index 952005fe..704c7402 100644 --- a/storage/SpeedLimiter.cpp +++ b/storage/SpeedLimiter.cpp @@ -16,6 +16,7 @@ */ #include "SpeedLimiter.h" +#include "common/errorcode.h" namespace ton { @@ -41,11 +42,11 @@ void SpeedLimiter::enqueue(double size, td::Timestamp timeout, td::Promise( tonlib_api::make_object(r_conf_data.move_as_ok().as_slice().str(), "", false, false), - tonlib_api::make_object()); + tonlib_api::make_object(key_store)); tonlib_client_ = td::actor::create_actor("tonlibclient", std::move(tonlib_options)); } From 6c615a105a29f272f0f5b6ab5c51d8b10fd54264 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Thu, 28 Dec 2023 17:40:54 +0300 Subject: [PATCH 059/351] Fix generating block header proof (#841) Co-authored-by: SpyCheese --- validator/impl/liteserver.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index 86fc690a..34b9f1f1 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -1034,7 +1034,8 @@ bool LiteQuery::make_state_root_proof(Ref& proof, Ref state_ vm::MerkleProofBuilder pb{std::move(block_root)}; block::gen::Block::Record blk; block::gen::BlockInfo::Record info; - if (!(tlb::unpack_cell(pb.root(), blk) && tlb::unpack_cell(blk.info, info))) { + if (!(tlb::unpack_cell(pb.root(), blk) && tlb::unpack_cell(blk.info, info) && + block::gen::BlkPrevInfo(info.after_merge).validate_ref(info.prev_ref))) { return fatal_error("cannot unpack block header"); } vm::CellSlice upd_cs{vm::NoVmSpec(), blk.state_update}; From a52045bd91004bccabf10fd159371ffbbf60ffad Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Thu, 28 Dec 2023 21:54:55 +0300 Subject: [PATCH 060/351] Add special overlay for validators for block broadcasting (#842) * Private overlay for broadcasting blocks --------- Co-authored-by: SpyCheese --- adnl/adnl-peer-table.hpp | 4 + adnl/adnl.h | 2 + tl/generate/scheme/ton_api.tl | 2 + tl/generate/scheme/ton_api.tlo | Bin 86116 -> 86348 bytes ton/ton-types.h | 8 ++ validator/CMakeLists.txt | 4 +- validator/full-node-private-overlay.cpp | 175 ++++++++++++++++++++++++ validator/full-node-private-overlay.hpp | 86 ++++++++++++ validator/full-node.cpp | 51 +++++++ validator/full-node.hpp | 7 + 10 files changed, 338 insertions(+), 1 deletion(-) create mode 100644 validator/full-node-private-overlay.cpp create mode 100644 validator/full-node-private-overlay.hpp diff --git a/adnl/adnl-peer-table.hpp b/adnl/adnl-peer-table.hpp index 2a27a802..1c30b84c 100644 --- a/adnl/adnl-peer-table.hpp +++ b/adnl/adnl-peer-table.hpp @@ -77,6 +77,10 @@ class AdnlPeerTableImpl : public AdnlPeerTable { td::actor::ActorId channel) override; void unregister_channel(AdnlChannelIdShort id) override; + void check_id_exists(AdnlNodeIdShort id, td::Promise promise) override { + promise.set_value(local_ids_.count(id)); + } + void write_new_addr_list_to_db(AdnlNodeIdShort local_id, AdnlNodeIdShort peer_id, AdnlDbItem node, td::Promise promise) override; void get_addr_list_from_db(AdnlNodeIdShort local_id, AdnlNodeIdShort peer_id, diff --git a/adnl/adnl.h b/adnl/adnl.h index b7dad216..a1c39d5e 100644 --- a/adnl/adnl.h +++ b/adnl/adnl.h @@ -97,6 +97,8 @@ class Adnl : public AdnlSenderInterface { virtual void add_id_ex(AdnlNodeIdFull id, AdnlAddressList addr_list, td::uint8 cat, td::uint32 mode) = 0; virtual void del_id(AdnlNodeIdShort id, td::Promise promise) = 0; + virtual void check_id_exists(AdnlNodeIdShort id, td::Promise promise) = 0; + // subscribe to (some) messages(+queries) to this local id virtual void subscribe(AdnlNodeIdShort dst, std::string prefix, std::unique_ptr callback) = 0; virtual void unsubscribe(AdnlNodeIdShort dst, std::string prefix) = 0; diff --git a/tl/generate/scheme/ton_api.tl b/tl/generate/scheme/ton_api.tl index 346d9152..7c9d9d5d 100644 --- a/tl/generate/scheme/ton_api.tl +++ b/tl/generate/scheme/ton_api.tl @@ -394,6 +394,8 @@ tonNode.newShardBlockBroadcast block:tonNode.newShardBlock = tonNode.Broadcast; tonNode.shardPublicOverlayId workchain:int shard:long zero_state_file_hash:int256 = tonNode.ShardPublicOverlayId; +tonNode.privateBlockOverlayId zero_state_file_hash:int256 nodes:(vector int256) = tonNode.PrivateBlockOverlayId; + tonNode.keyBlocks blocks:(vector tonNode.blockIdExt) incomplete:Bool error:Bool = tonNode.KeyBlocks; ton.blockId root_cell_hash:int256 file_hash:int256 = ton.BlockId; diff --git a/tl/generate/scheme/ton_api.tlo b/tl/generate/scheme/ton_api.tlo index 5b8e1c725e39ceff4097e4a654c796c9f84ff73e..34f31816487195f10af67445b0923d8f5474c3f3 100644 GIT binary patch delta 139 zcmaE|fc4BGR^CUm^{p77;QvNmXI-VF8()^mmgML8<)@_T1r%kLC6=T*<>V)4`mrcA!aEVVg6*M)_#cJoxj?R#}mv=m^|!oUDhbMu&x57Xq<55|)(MA@)_L^eCT HS4ji_gWEXS delta 41 scmX@Ji1o<=R^CUm^{p77;NM1GXWh*`x-Kk?HJdLQZr{7v new_signatures; + for (const BlockSignature& s : signatures) { + new_signatures.emplace_back(s.node, s.signature.clone()); + } + return {block_id, std::move(new_signatures), catchain_seqno, validator_set_hash, data.clone(), proof.clone()}; + } }; struct Ed25519_PrivateKey { diff --git a/validator/CMakeLists.txt b/validator/CMakeLists.txt index 4ecc865c..8de60081 100644 --- a/validator/CMakeLists.txt +++ b/validator/CMakeLists.txt @@ -143,7 +143,9 @@ set(FULL_NODE_SOURCE full-node-master.h full-node-master.hpp full-node-master.cpp - + full-node-private-overlay.hpp + full-node-private-overlay.cpp + net/download-block.hpp net/download-block.cpp net/download-block-new.hpp diff --git a/validator/full-node-private-overlay.cpp b/validator/full-node-private-overlay.cpp new file mode 100644 index 00000000..ea72230b --- /dev/null +++ b/validator/full-node-private-overlay.cpp @@ -0,0 +1,175 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once + +#include "full-node-private-overlay.hpp" +#include "ton/ton-tl.hpp" +#include "common/delay.h" + +namespace ton { + +namespace validator { + +namespace fullnode { + +void FullNodePrivateOverlay::process_broadcast(PublicKeyHash, ton_api::tonNode_blockBroadcast &query) { + std::vector signatures; + for (auto &sig : query.signatures_) { + signatures.emplace_back(BlockSignature{sig->who_, std::move(sig->signature_)}); + } + + BlockIdExt block_id = create_block_id(query.id_); + BlockBroadcast B{block_id, + std::move(signatures), + static_cast(query.catchain_seqno_), + static_cast(query.validator_set_hash_), + std::move(query.data_), + std::move(query.proof_)}; + + auto P = td::PromiseCreator::lambda([](td::Result R) { + if (R.is_error()) { + if (R.error().code() == ErrorCode::notready) { + LOG(DEBUG) << "dropped broadcast: " << R.move_as_error(); + } else { + LOG(INFO) << "dropped broadcast: " << R.move_as_error(); + } + } + }); + td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::prevalidate_block, std::move(B), + std::move(P)); +} + +void FullNodePrivateOverlay::process_broadcast(PublicKeyHash, ton_api::tonNode_newShardBlockBroadcast &query) { + td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::new_shard_block, + create_block_id(query.block_->block_), query.block_->cc_seqno_, + std::move(query.block_->data_)); +} + +void FullNodePrivateOverlay::receive_broadcast(PublicKeyHash src, td::BufferSlice broadcast) { + auto B = fetch_tl_object(std::move(broadcast), true); + if (B.is_error()) { + return; + } + + ton_api::downcast_call(*B.move_as_ok(), [src, Self = this](auto &obj) { Self->process_broadcast(src, obj); }); +} + +void FullNodePrivateOverlay::send_shard_block_info(BlockIdExt block_id, CatchainSeqno cc_seqno, td::BufferSlice data) { + if (!inited_) { + return; + } + auto B = create_serialize_tl_object( + create_tl_object(create_tl_block_id(block_id), cc_seqno, std::move(data))); + if (B.size() <= overlay::Overlays::max_simple_broadcast_size()) { + td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_ex, local_id_, overlay_id_, + local_id_.pubkey_hash(), 0, std::move(B)); + } else { + td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_fec_ex, local_id_, overlay_id_, + local_id_.pubkey_hash(), overlay::Overlays::BroadcastFlagAnySender(), std::move(B)); + } +} + +void FullNodePrivateOverlay::send_broadcast(BlockBroadcast broadcast) { + if (!inited_) { + return; + } + std::vector> sigs; + for (auto &sig : broadcast.signatures) { + sigs.emplace_back(create_tl_object(sig.node, sig.signature.clone())); + } + auto B = create_serialize_tl_object( + create_tl_block_id(broadcast.block_id), broadcast.catchain_seqno, broadcast.validator_set_hash, std::move(sigs), + broadcast.proof.clone(), broadcast.data.clone()); + td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_fec_ex, local_id_, overlay_id_, + local_id_.pubkey_hash(), overlay::Overlays::BroadcastFlagAnySender(), std::move(B)); +} + +void FullNodePrivateOverlay::start_up() { + std::sort(nodes_.begin(), nodes_.end()); + nodes_.erase(std::unique(nodes_.begin(), nodes_.end()), nodes_.end()); + + std::vector nodes; + for (const adnl::AdnlNodeIdShort &id : nodes_) { + nodes.push_back(id.bits256_value()); + } + auto X = create_hash_tl_object(zero_state_file_hash_, std::move(nodes)); + td::BufferSlice b{32}; + b.as_slice().copy_from(as_slice(X)); + overlay_id_full_ = overlay::OverlayIdFull{std::move(b)}; + overlay_id_ = overlay_id_full_.compute_short_id(); + + try_init(); +} + +void FullNodePrivateOverlay::try_init() { + // Sometimes adnl id is added to validator engine later (or not at all) + td::actor::send_closure( + adnl_, &adnl::Adnl::check_id_exists, local_id_, [SelfId = actor_id(this)](td::Result R) { + if (R.is_ok() && R.ok()) { + td::actor::send_closure(SelfId, &FullNodePrivateOverlay::init); + } else { + delay_action([SelfId]() { td::actor::send_closure(SelfId, &FullNodePrivateOverlay::try_init); }, + td::Timestamp::in(30.0)); + } + }); +} + +void FullNodePrivateOverlay::init() { + LOG(FULL_NODE_INFO) << "Creating private block overlay for adnl id " << local_id_ << " : " << nodes_.size() + << " nodes"; + class Callback : public overlay::Overlays::Callback { + public: + void receive_message(adnl::AdnlNodeIdShort src, overlay::OverlayIdShort overlay_id, td::BufferSlice data) override { + } + void receive_query(adnl::AdnlNodeIdShort src, overlay::OverlayIdShort overlay_id, td::BufferSlice data, + td::Promise promise) override { + } + void receive_broadcast(PublicKeyHash src, overlay::OverlayIdShort overlay_id, td::BufferSlice data) override { + td::actor::send_closure(node_, &FullNodePrivateOverlay::receive_broadcast, src, std::move(data)); + } + void check_broadcast(PublicKeyHash src, overlay::OverlayIdShort overlay_id, td::BufferSlice data, + td::Promise promise) override { + } + Callback(td::actor::ActorId node) : node_(node) { + } + + private: + td::actor::ActorId node_; + }; + + overlay::OverlayPrivacyRules rules{overlay::Overlays::max_fec_broadcast_size(), + overlay::CertificateFlags::AllowFec | overlay::CertificateFlags::Trusted, + {}}; + td::actor::send_closure(overlays_, &overlay::Overlays::create_private_overlay, local_id_, overlay_id_full_.clone(), + nodes_, std::make_unique(actor_id(this)), rules); + + td::actor::send_closure(rldp_, &rldp::Rldp::add_id, local_id_); + td::actor::send_closure(rldp2_, &rldp2::Rldp::add_id, local_id_); + inited_ = true; +} + +void FullNodePrivateOverlay::tear_down() { + if (inited_) { + td::actor::send_closure(overlays_, &ton::overlay::Overlays::delete_overlay, local_id_, overlay_id_); + } +} + +} // namespace fullnode + +} // namespace validator + +} // namespace ton diff --git a/validator/full-node-private-overlay.hpp b/validator/full-node-private-overlay.hpp new file mode 100644 index 00000000..6463fda2 --- /dev/null +++ b/validator/full-node-private-overlay.hpp @@ -0,0 +1,86 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once + +#include "full-node.h" + +namespace ton { + +namespace validator { + +namespace fullnode { + +class FullNodePrivateOverlay : public td::actor::Actor { + public: + void process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcast &query); + void process_broadcast(PublicKeyHash src, ton_api::tonNode_newShardBlockBroadcast &query); + template + void process_broadcast(PublicKeyHash, T &) { + VLOG(FULL_NODE_WARNING) << "dropping unknown broadcast"; + } + void receive_broadcast(PublicKeyHash src, td::BufferSlice query); + + void send_shard_block_info(BlockIdExt block_id, CatchainSeqno cc_seqno, td::BufferSlice data); + void send_broadcast(BlockBroadcast broadcast); + + void start_up() override; + void tear_down() override; + + FullNodePrivateOverlay(adnl::AdnlNodeIdShort local_id, std::vector nodes, + FileHash zero_state_file_hash, FullNodeConfig config, + td::actor::ActorId keyring, td::actor::ActorId adnl, + td::actor::ActorId rldp, td::actor::ActorId rldp2, + td::actor::ActorId overlays, + td::actor::ActorId validator_manager) + : local_id_(local_id) + , nodes_(std::move(nodes)) + , zero_state_file_hash_(zero_state_file_hash) + , config_(config) + , keyring_(keyring) + , adnl_(adnl) + , rldp_(rldp) + , rldp2_(rldp2) + , overlays_(overlays) + , validator_manager_(validator_manager) { + } + + private: + adnl::AdnlNodeIdShort local_id_; + std::vector nodes_; + FileHash zero_state_file_hash_; + FullNodeConfig config_; + + td::actor::ActorId keyring_; + td::actor::ActorId adnl_; + td::actor::ActorId rldp_; + td::actor::ActorId rldp2_; + td::actor::ActorId overlays_; + td::actor::ActorId validator_manager_; + + bool inited_ = false; + overlay::OverlayIdFull overlay_id_full_; + overlay::OverlayIdShort overlay_id_; + + void try_init(); + void init(); +}; + +} // namespace fullnode + +} // namespace validator + +} // namespace ton diff --git a/validator/full-node.cpp b/validator/full-node.cpp index ebba50a0..5a822b26 100644 --- a/validator/full-node.cpp +++ b/validator/full-node.cpp @@ -50,6 +50,7 @@ void FullNodeImpl::add_permanent_key(PublicKeyHash key, td::Promise pr for (auto &shard : shards_) { td::actor::send_closure(shard.second, &FullNodeShard::update_validators, all_validators_, sign_cert_by_); } + create_private_block_overlay(key); promise.set_value(td::Unit()); } @@ -74,6 +75,7 @@ void FullNodeImpl::del_permanent_key(PublicKeyHash key, td::Promise pr for (auto &shard : shards_) { td::actor::send_closure(shard.second, &FullNodeShard::update_validators, all_validators_, sign_cert_by_); } + private_block_overlays_.erase(key); promise.set_value(td::Unit()); } @@ -179,6 +181,10 @@ void FullNodeImpl::send_shard_block_info(BlockIdExt block_id, CatchainSeqno cc_s VLOG(FULL_NODE_WARNING) << "dropping OUT shard block info message to unknown shard"; return; } + if (!private_block_overlays_.empty()) { + td::actor::send_closure(private_block_overlays_.begin()->second, &FullNodePrivateOverlay::send_shard_block_info, + block_id, cc_seqno, data.clone()); + } td::actor::send_closure(shard, &FullNodeShard::send_shard_block_info, block_id, cc_seqno, std::move(data)); } @@ -188,6 +194,10 @@ void FullNodeImpl::send_broadcast(BlockBroadcast broadcast) { VLOG(FULL_NODE_WARNING) << "dropping OUT broadcast to unknown shard"; return; } + if (!private_block_overlays_.empty()) { + td::actor::send_closure(private_block_overlays_.begin()->second, &FullNodePrivateOverlay::send_broadcast, + broadcast.clone()); + } td::actor::send_closure(shard, &FullNodeShard::send_broadcast, std::move(broadcast)); } @@ -289,6 +299,7 @@ void FullNodeImpl::got_key_block_proof(td::Ref proof) { PublicKeyHash l = PublicKeyHash::zero(); std::vector keys; + std::map current_validators; for (td::int32 i = -1; i <= 1; i++) { auto r = config->get_total_validator_set(i < 0 ? i : 1 - i); if (r.not_null()) { @@ -299,10 +310,18 @@ void FullNodeImpl::got_key_block_proof(td::Ref proof) { if (local_keys_.count(key)) { l = key; } + if (i == 1) { + current_validators[key] = adnl::AdnlNodeIdShort{el.addr.is_zero() ? key.bits256_value() : el.addr}; + } } } } + if (current_validators != current_validators_) { + current_validators_ = std::move(current_validators); + update_private_block_overlays(); + } + if (keys == all_validators_) { return; } @@ -321,6 +340,7 @@ void FullNodeImpl::got_zero_block_state(td::Ref state) { PublicKeyHash l = PublicKeyHash::zero(); std::vector keys; + std::map current_validators; for (td::int32 i = -1; i <= 1; i++) { auto r = m->get_total_validator_set(i < 0 ? i : 1 - i); if (r.not_null()) { @@ -331,10 +351,18 @@ void FullNodeImpl::got_zero_block_state(td::Ref state) { if (local_keys_.count(key)) { l = key; } + if (i == 1) { + current_validators[key] = adnl::AdnlNodeIdShort{el.addr.is_zero() ? key.bits256_value() : el.addr}; + } } } } + if (current_validators != current_validators_) { + current_validators_ = std::move(current_validators); + update_private_block_overlays(); + } + if (keys == all_validators_) { return; } @@ -456,6 +484,29 @@ void FullNodeImpl::start_up() { std::make_unique(actor_id(this)), std::move(P)); } +void FullNodeImpl::update_private_block_overlays() { + private_block_overlays_.clear(); + if (local_keys_.empty()) { + return; + } + for (const auto &key : local_keys_) { + create_private_block_overlay(key); + } +} + +void FullNodeImpl::create_private_block_overlay(PublicKeyHash key) { + CHECK(local_keys_.count(key)); + if (current_validators_.count(key)) { + std::vector nodes; + for (const auto &p : current_validators_) { + nodes.push_back(p.second); + } + private_block_overlays_[key] = td::actor::create_actor( + "BlocksPrivateOverlay", current_validators_[key], std::move(nodes), zero_state_file_hash_, config_, keyring_, + adnl_, rldp_, rldp2_, overlays_, validator_manager_); + } +} + FullNodeImpl::FullNodeImpl(PublicKeyHash local_id, adnl::AdnlNodeIdShort adnl_id, FileHash zero_state_file_hash, FullNodeConfig config, td::actor::ActorId keyring, td::actor::ActorId adnl, td::actor::ActorId rldp, diff --git a/validator/full-node.hpp b/validator/full-node.hpp index fc2dd75c..838700b5 100644 --- a/validator/full-node.hpp +++ b/validator/full-node.hpp @@ -23,6 +23,7 @@ //#include "ton-node-slave.h" #include "interfaces/proof.h" #include "interfaces/shard.h" +#include "full-node-private-overlay.hpp" #include #include @@ -111,9 +112,15 @@ class FullNodeImpl : public FullNode { PublicKeyHash sign_cert_by_; std::vector all_validators_; + std::map current_validators_; std::set local_keys_; FullNodeConfig config_; + + std::map> private_block_overlays_; + + void update_private_block_overlays(); + void create_private_block_overlay(PublicKeyHash key); }; } // namespace fullnode From cf83bd18933143da31a37c1e0d1d67f999d5f9ec Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 9 Jan 2024 15:49:42 +0300 Subject: [PATCH 061/351] Add note on highload wallet pecularities --- crypto/smartcont/highload-wallet-v2-code.fc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/crypto/smartcont/highload-wallet-v2-code.fc b/crypto/smartcont/highload-wallet-v2-code.fc index 7dd65f9e..b7626bbe 100644 --- a/crypto/smartcont/highload-wallet-v2-code.fc +++ b/crypto/smartcont/highload-wallet-v2-code.fc @@ -3,6 +3,22 @@ ;; this version does not use seqno for replay protection; instead, it remembers all recent query_ids ;; in this way several external messages with different query_id can be sent in parallel + +;; Note, when dealing with highload-wallet the following limits need to be checked and taken into account: +;; 1) Storage size limit. Currently, size of contract storage should be less than 65535 cells. If size of +;; old_queries will grow above this limit, exception in ActionPhase will be thrown and transaction will fail. +;; Failed transaction may be replayed. +;; 2) Gas limit. Currently, gas limit is 1'000'000 gas units, that means that there is a limit of how much +;; old queries may be cleaned in one tx. If number of expired queries will be higher, contract will stuck. + +;; That means that it is not recommended to set too high expiration date: +;; number of queries during expiration timespan should not exceed 1000. +;; Also, number of expired queries cleaned in one transaction should be below 100. + +;; Such precautions are not easy to follow, so it is recommended to use highload contract +;; only when strictly necessary and the developer understands the above details. + + () recv_internal(slice in_msg) impure { ;; do nothing for internal messages } From bc7ea2af2da5a35867e726090c423f60f6e51463 Mon Sep 17 00:00:00 2001 From: Andrey Kravchenko Date: Wed, 10 Jan 2024 16:27:06 +0300 Subject: [PATCH 062/351] Fix pass the selected neighbor to the download proof (#854) * Fix pass the selected neighbor to the download proof. * Fix GetNextKeyBlocks as well Previously, the neighbor was choosed, but it was not passed to the DownloadProof class, as a result, in got_download_token we always get a random one from overlay, but after failure, bad statistics are recorded for the previously selected neighbor, which did not participate in this operation. --- validator/full-node-shard.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/validator/full-node-shard.cpp b/validator/full-node-shard.cpp index 0f495077..7c59a79c 100644 --- a/validator/full-node-shard.cpp +++ b/validator/full-node-shard.cpp @@ -795,7 +795,7 @@ void FullNodeShardImpl::download_block_proof_link(BlockIdExt block_id, td::uint3 td::Promise promise) { auto &b = choose_neighbour(); td::actor::create_actor("downloadproofreq", block_id, true, false, adnl_id_, overlay_id_, - adnl::AdnlNodeIdShort::zero(), priority, timeout, validator_manager_, rldp_, + b.adnl_id, priority, timeout, validator_manager_, rldp_, overlays_, adnl_, client_, create_neighbour_promise(b, std::move(promise))) .release(); } @@ -803,7 +803,7 @@ void FullNodeShardImpl::download_block_proof_link(BlockIdExt block_id, td::uint3 void FullNodeShardImpl::get_next_key_blocks(BlockIdExt block_id, td::Timestamp timeout, td::Promise> promise) { auto &b = choose_neighbour(); - td::actor::create_actor("next", block_id, 16, adnl_id_, overlay_id_, adnl::AdnlNodeIdShort::zero(), + td::actor::create_actor("next", block_id, 16, adnl_id_, overlay_id_, b.adnl_id, 1, timeout, validator_manager_, rldp_, overlays_, adnl_, client_, create_neighbour_promise(b, std::move(promise))) .release(); From 3a5f3fcaddc000a11edf6887fdc03c3f2580450e Mon Sep 17 00:00:00 2001 From: neodix42 Date: Thu, 11 Jan 2024 20:42:57 +0100 Subject: [PATCH 063/351] Update Docker build (#816) * Update create-release.yml minor test * Update Dockerfile * Update Dockerfile * Adjust Docker build for openssl-3 * clone recursively inside the action --- .github/workflows/docker-ubuntu-image.yml | 10 +++++---- docker/Dockerfile => Dockerfile | 27 +++++++++++++---------- 2 files changed, 21 insertions(+), 16 deletions(-) rename docker/Dockerfile => Dockerfile (65%) diff --git a/.github/workflows/docker-ubuntu-image.yml b/.github/workflows/docker-ubuntu-image.yml index ca754078..449711d8 100644 --- a/.github/workflows/docker-ubuntu-image.yml +++ b/.github/workflows/docker-ubuntu-image.yml @@ -1,4 +1,4 @@ -name: Docker Ubuntu 20.04 image +name: Docker Ubuntu 22.04 image on: workflow_dispatch: @@ -12,10 +12,12 @@ env: jobs: build-and-push: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - - name: Checkout + - name: Check out repository uses: actions/checkout@v3 + with: + submodules: 'recursive' - name: Set up QEMU uses: docker/setup-qemu-action@v1 @@ -35,5 +37,5 @@ jobs: uses: docker/build-push-action@v2 with: push: true - context: ./docker + context: ./ tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest diff --git a/docker/Dockerfile b/Dockerfile similarity index 65% rename from docker/Dockerfile rename to Dockerfile index 595b4d87..e3cd7b26 100644 --- a/docker/Dockerfile +++ b/Dockerfile @@ -1,26 +1,29 @@ -FROM ubuntu:20.04 as builder +FROM ubuntu:22.04 as builder RUN apt-get update && \ - DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential cmake clang-6.0 openssl libssl-dev zlib1g-dev gperf wget git ninja-build libsecp256k1-dev libsodium-dev libmicrohttpd-dev pkg-config && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential cmake clang openssl libssl-dev zlib1g-dev gperf wget git ninja-build libsecp256k1-dev libsodium-dev libmicrohttpd-dev pkg-config autoconf automake libtool && \ rm -rf /var/lib/apt/lists/* -ENV CC clang-6.0 -ENV CXX clang++-6.0 +ENV CC clang +ENV CXX clang++ ENV CCACHE_DISABLE 1 + WORKDIR / -RUN git clone --recursive https://github.com/ton-blockchain/ton +RUN mkdir ton WORKDIR /ton +COPY ./ ./ + RUN mkdir build && \ cd build && \ - cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= -DCMAKE_CXX_FLAGS="-mavx2" .. && \ + cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= .. && \ ninja storage-daemon storage-daemon-cli tonlibjson fift func validator-engine validator-engine-console generate-random-id dht-server lite-client -FROM ubuntu:20.04 +FROM ubuntu:22.04 RUN apt-get update && \ - apt-get install -y openssl wget libatomic1 && \ - rm -rf /var/lib/apt/lists/* + apt-get install -y wget libatomic1 openssl libsecp256k1-dev libsodium-dev libmicrohttpd-dev && \ + rm -rf /var/lib/apt/lists/* RUN mkdir -p /var/ton-work/db && \ - mkdir -p /var/ton-work/db/static + mkdir -p /var/ton-work/db/static COPY --from=builder /ton/build/storage/storage-daemon/storage-daemon /usr/local/bin/ COPY --from=builder /ton/build/storage/storage-daemon/storage-daemon-cli /usr/local/bin/ @@ -30,7 +33,7 @@ COPY --from=builder /ton/build/validator-engine-console/validator-engine-console COPY --from=builder /ton/build/utils/generate-random-id /usr/local/bin/ WORKDIR /var/ton-work/db -COPY init.sh control.template ./ +COPY ./docker/init.sh ./docker/control.template ./ RUN chmod +x init.sh -ENTRYPOINT ["/var/ton-work/db/init.sh"] +ENTRYPOINT ["/var/ton-work/db/init.sh"] \ No newline at end of file From ff40c1f2a0584408c45b2972e1a0ba99398af2f5 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 12 Jan 2024 12:34:28 +0300 Subject: [PATCH 064/351] Do not count gas on special accounts in block gas limits (enabled by config) (#856) * Set higher gas limit for special accounts, don't add gas from special accounts to block total * Make removing special accounts from block gas limits enabled by config --------- Co-authored-by: SpyCheese --- crypto/block/block.tlb | 5 +++++ crypto/block/mc-config.cpp | 7 ++++++- crypto/block/mc-config.h | 1 + crypto/block/transaction.cpp | 10 +++++++--- crypto/block/transaction.h | 10 +++------- validator/impl/collator.cpp | 6 ++++-- validator/impl/validate-query.cpp | 18 ++++++++++-------- 7 files changed, 36 insertions(+), 21 deletions(-) diff --git a/crypto/block/block.tlb b/crypto/block/block.tlb index 4b36f13b..eb1f8b94 100644 --- a/crypto/block/block.tlb +++ b/crypto/block/block.tlb @@ -696,6 +696,11 @@ gas_prices_ext#de gas_price:uint64 gas_limit:uint64 special_gas_limit:uint64 gas block_gas_limit:uint64 freeze_due_limit:uint64 delete_due_limit:uint64 = GasLimitsPrices; +// same fields as gas_prices_ext; behavior differs +gas_prices_v3#df gas_price:uint64 gas_limit:uint64 special_gas_limit:uint64 gas_credit:uint64 + block_gas_limit:uint64 freeze_due_limit:uint64 delete_due_limit:uint64 + = GasLimitsPrices; + gas_flat_pfx#d1 flat_gas_limit:uint64 flat_gas_price:uint64 other:GasLimitsPrices = GasLimitsPrices; diff --git a/crypto/block/mc-config.cpp b/crypto/block/mc-config.cpp index 08be5c88..51402142 100644 --- a/crypto/block/mc-config.cpp +++ b/crypto/block/mc-config.cpp @@ -654,11 +654,16 @@ td::Result Config::do_get_gas_limits_prices(td::Ref c res.delete_due_limit = r.delete_due_limit; }; block::gen::GasLimitsPrices::Record_gas_prices_ext rec; + block::gen::GasLimitsPrices::Record_gas_prices_v3 rec_v3; + vm::CellSlice cs0 = cs; if (tlb::unpack(cs, rec)) { f(rec, rec.special_gas_limit); + } else if (tlb::unpack(cs = cs0, rec_v3)) { + f(rec_v3, rec_v3.special_gas_limit); + res.special_full_limit = true; } else { block::gen::GasLimitsPrices::Record_gas_prices rec0; - if (tlb::unpack(cs, rec0)) { + if (tlb::unpack(cs = cs0, rec0)) { f(rec0, rec0.gas_limit); } else { return td::Status::Error(PSLICE() << "configuration parameter " << id diff --git a/crypto/block/mc-config.h b/crypto/block/mc-config.h index caab93f3..dcc48b4b 100644 --- a/crypto/block/mc-config.h +++ b/crypto/block/mc-config.h @@ -349,6 +349,7 @@ struct GasLimitsPrices { td::uint64 block_gas_limit{0}; td::uint64 freeze_due_limit{0}; td::uint64 delete_due_limit{0}; + bool special_full_limit{false}; td::RefInt256 compute_gas_price(td::uint64 gas_used) const; }; diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 7a907337..5955dd6e 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1039,8 +1039,12 @@ bool ComputePhaseConfig::parse_GasLimitsPrices_internal(Ref cs, t delete_due_limit = td::make_refint(r.delete_due_limit); }; block::gen::GasLimitsPrices::Record_gas_prices_ext rec; + block::gen::GasLimitsPrices::Record_gas_prices_v3 rec_v3; if (tlb::csr_unpack(cs, rec)) { f(rec, rec.special_gas_limit); + } else if (tlb::csr_unpack(cs, rec_v3)) { + f(rec_v3, rec_v3.special_gas_limit); + special_gas_full = true; } else { block::gen::GasLimitsPrices::Record_gas_prices rec0; if (tlb::csr_unpack(std::move(cs), rec0)) { @@ -1142,7 +1146,7 @@ bool Transaction::compute_gas_limits(ComputePhase& cp, const ComputePhaseConfig& cp.gas_max = cfg.gas_bought_for(balance.grams); } cp.gas_credit = 0; - if (trans_type != tr_ord) { + if (trans_type != tr_ord || (account.is_special && cfg.special_gas_full)) { // may use all gas that can be bought using remaining balance cp.gas_limit = cp.gas_max; } else { @@ -3203,8 +3207,8 @@ td::Result Transaction::estimate_block_storage_pro * * @returns True if the limits were successfully updated, False otherwise. */ -bool Transaction::update_limits(block::BlockLimitStatus& blimst, bool with_size) const { - if (!(blimst.update_lt(end_lt) && blimst.update_gas(gas_used()))) { +bool Transaction::update_limits(block::BlockLimitStatus& blimst, bool with_gas, bool with_size) const { + if (!(blimst.update_lt(end_lt) && blimst.update_gas(with_gas ? gas_used() : 0))) { return false; } if (with_size) { diff --git a/crypto/block/transaction.h b/crypto/block/transaction.h index d7cb95d1..deb71a40 100644 --- a/crypto/block/transaction.h +++ b/crypto/block/transaction.h @@ -104,6 +104,7 @@ struct ComputePhaseConfig { td::uint64 gas_credit; td::uint64 flat_gas_limit = 0; td::uint64 flat_gas_price = 0; + bool special_gas_full = false; static constexpr td::uint64 gas_infty = (1ULL << 63) - 1; td::RefInt256 gas_price256; td::RefInt256 max_gas_threshold; @@ -119,12 +120,7 @@ struct ComputePhaseConfig { SizeLimitsConfig size_limits; int vm_log_verbosity = 0; - ComputePhaseConfig(td::uint64 _gas_price = 0, td::uint64 _gas_limit = 0, td::uint64 _gas_credit = 0) - : gas_price(_gas_price), gas_limit(_gas_limit), special_gas_limit(_gas_limit), gas_credit(_gas_credit) { - compute_threshold(); - } - ComputePhaseConfig(td::uint64 _gas_price, td::uint64 _gas_limit, td::uint64 _spec_gas_limit, td::uint64 _gas_credit) - : gas_price(_gas_price), gas_limit(_gas_limit), special_gas_limit(_spec_gas_limit), gas_credit(_gas_credit) { + ComputePhaseConfig() : gas_price(0), gas_limit(0), special_gas_limit(0), gas_credit(0) { compute_threshold(); } void compute_threshold(); @@ -383,7 +379,7 @@ struct Transaction { td::Result estimate_block_storage_profile_incr( const vm::NewCellStorageStat& store_stat, const vm::CellUsageTree* usage_tree) const; - bool update_limits(block::BlockLimitStatus& blk_lim_st, bool with_size = true) const; + bool update_limits(block::BlockLimitStatus& blk_lim_st, bool with_gas = true, bool with_size = true) const; Ref commit(Account& _account); // _account should point to the same account LtCellRef extract_out_msg(unsigned i); diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index 1d277048..1b7991f6 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -2667,7 +2667,8 @@ bool Collator::create_ticktock_transaction(const ton::StdSmcAddress& smc_addr, t return fatal_error(td::Status::Error( -666, std::string{"cannot serialize new transaction for smart contract "} + smc_addr.to_hex())); } - if (!trans->update_limits(*block_limit_status_)) { + if (!trans->update_limits(*block_limit_status_, + /* with_gas = */ !(acc->is_special && compute_phase_cfg_.special_gas_full))) { return fatal_error(-666, "cannot update block limit status to include the new transaction"); } if (trans->commit(*acc).is_null()) { @@ -2744,7 +2745,8 @@ Ref Collator::create_ordinary_transaction(Ref msg_root) { } std::unique_ptr trans = res.move_as_ok(); - if (!trans->update_limits(*block_limit_status_)) { + if (!trans->update_limits(*block_limit_status_, + /* with_gas = */ !(acc->is_special && compute_phase_cfg_.special_gas_full))) { fatal_error("cannot update block limit status to include the new transaction"); return {}; } diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index d5f489a3..0a22fa14 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -4904,13 +4904,6 @@ bool ValidateQuery::check_one_transaction(block::Account& account, ton::LogicalT int trans_type = block::transaction::Transaction::tr_none; switch (tag) { case block::gen::TransactionDescr::trans_ord: { - if (!block_limit_status_->fits(block::ParamLimits::cl_medium)) { - return reject_query(PSTRING() << "cannod add ordinary transaction because hard block limits are exceeded: " - << "gas_used=" << block_limit_status_->gas_used - << "(limit=" << block_limits_->gas.hard() << "), " - << "lt_delta=" << block_limit_status_->cur_lt - block_limits_->start_lt - << "(limit=" << block_limits_->lt_delta.hard() << ")"); - } trans_type = block::transaction::Transaction::tr_ord; if (in_msg_root.is_null()) { return reject_query(PSTRING() << "ordinary transaction " << lt << " of account " << addr.to_hex() @@ -5058,10 +5051,19 @@ bool ValidateQuery::check_one_transaction(block::Account& account, ton::LogicalT return reject_query(PSTRING() << "cannot re-create the serialization of transaction " << lt << " for smart contract " << addr.to_hex()); } - if (!trs->update_limits(*block_limit_status_, false)) { + if (!trs->update_limits(*block_limit_status_, + /* with_gas = */ !account.is_special, + /* with_size = */ false)) { return fatal_error(PSTRING() << "cannot update block limit status to include transaction " << lt << " of account " << addr.to_hex()); } + if (block_limit_status_->gas_used > block_limits_->gas.hard() + compute_phase_cfg_.gas_limit) { + // Note that block_limit_status_->gas_used does not include transactions in special accounts + return reject_query(PSTRING() << "gas block limits are exceeded: total_gas_used > gas_limit_hard + trx_gas_limit (" + << "total_gas_used=" << block_limit_status_->gas_used + << ", gas_limit_hard=" << block_limits_->gas.hard() + << ", trx_gas_limit=" << compute_phase_cfg_.gas_limit << ")"); + } auto trans_root2 = trs->commit(account); if (trans_root2.is_null()) { return reject_query(PSTRING() << "the re-created transaction " << lt << " for smart contract " << addr.to_hex() From 062b7b4a92dd67e32d963cf3f04b8bc97d8b7ed5 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 15 Jan 2024 11:39:43 +0300 Subject: [PATCH 065/351] Make 2023.12 release (#857) * Update recent_changelog.md for 2023.12 * Update Changelog.md for 2023.12 --- Changelog.md | 13 ++++++++++++- recent_changelog.md | 16 ++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Changelog.md b/Changelog.md index 440866c2..3310d6a2 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,4 +1,15 @@ -##2023.11 Update +## 2023.12 Update + +1. Optimized message queue handling, now queue cleaning speed doesn't depend on total queue size + * Cleaning delivered messages using lt augmentation instead of random search / consequtive walk + * Keeping root cell of queue message in memory until outdated (caching) +2. Changes to block collation/validation limits +3. Stop accepting new external message if message queue is overloaded +4. Introducing conditions for shard split/merge based on queue size + +Read [more](https://blog.ton.org/technical-report-december-5-inscriptions-launch-on-ton) on that update. + +## 2023.11 Update 1. New TVM Functionality. (Disabled by default) 2. A series of emulator improvements: libraries support, higher max stack size, etc diff --git a/recent_changelog.md b/recent_changelog.md index 5de7aed7..5e122454 100644 --- a/recent_changelog.md +++ b/recent_changelog.md @@ -1,10 +1,10 @@ -##2023.11 Update +## 2023.12 Update -1. New TVM Functionality. (Disabled by default) -2. A series of emulator improvements: libraries support, higher max stack size, etc -3. A series of tonlib and tonlib-cli improvements: wallet-v4 support, getconfig, showtransactions, etc -4. Changes to public libraries: now contract can not publish more than 256 libraries (config parameter) and contracts can not be deployed with public libraries in initstate (instead contracts need explicitly publish all libraries) -5. Changes to storage due payment: now due payment is collected in Storage Phase, however for bouncable messages fee amount can not exceed balance of account prior to message. +1. Optimized message queue handling, now queue cleaning speed doesn't depend on total queue size + * Cleaning delivered messages using lt augmentation instead of random search / consequtive walk + * Keeping root cell of queue message in memory until outdated (caching) +2. Changes to block collation/validation limits +3. Stop accepting new external message if message queue is overloaded +4. Introducing conditions for shard split/merge based on queue size - -Besides the work of the core team, this update is based on the efforts of @aleksej-paschenko (emulator improvements), @akifoq (security improvements), Trail of Bits auditor as well as all participants of [TEP-88 discussion](https://github.com/ton-blockchain/TEPs/pull/88). +Read [more](https://blog.ton.org/technical-report-december-5-inscriptions-launch-on-ton) on that update. From 388c8a6d862da5df6e4a89fad135becb45d283ca Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Mon, 15 Jan 2024 23:43:11 +0300 Subject: [PATCH 066/351] Increase gas limit for a specific wallet (enabled by config) (#859) --- crypto/block/transaction.cpp | 94 ++++++++++++++++++++++++++++--- crypto/block/transaction.h | 3 + validator/impl/validate-query.cpp | 7 ++- 3 files changed, 95 insertions(+), 9 deletions(-) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index 5955dd6e..b4bd648b 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1081,6 +1081,25 @@ bool ComputePhaseConfig::is_address_suspended(ton::WorkchainId wc, td::Bits256 a } } +/** + * Computes the maximum gas fee based on the gas prices and limits. + * + * @param gas_price256 The gas price from config as RefInt256 + * @param gas_limit The gas limit from config + * @param flat_gas_limit The flat gas limit from config + * @param flat_gas_price The flat gas price from config + * + * @returns The maximum gas fee. + */ +static td::RefInt256 compute_max_gas_threshold(const td::RefInt256& gas_price256, td::uint64 gas_limit, + td::uint64 flat_gas_limit, td::uint64 flat_gas_price) { + if (gas_limit > flat_gas_limit) { + return td::rshift(gas_price256 * (gas_limit - flat_gas_limit), 16, 1) + td::make_bigint(flat_gas_price); + } else { + return td::make_refint(flat_gas_price); + } +} + /** * Computes the maximum for gas fee based on the gas prices and limits. * @@ -1088,12 +1107,7 @@ bool ComputePhaseConfig::is_address_suspended(ton::WorkchainId wc, td::Bits256 a */ void ComputePhaseConfig::compute_threshold() { gas_price256 = td::make_refint(gas_price); - if (gas_limit > flat_gas_limit) { - max_gas_threshold = - td::rshift(gas_price256 * (gas_limit - flat_gas_limit), 16, 1) + td::make_bigint(flat_gas_price); - } else { - max_gas_threshold = td::make_refint(flat_gas_price); - } + max_gas_threshold = compute_max_gas_threshold(gas_price256, gas_limit, flat_gas_limit, flat_gas_price); } /** @@ -1130,6 +1144,67 @@ td::RefInt256 ComputePhaseConfig::compute_gas_price(td::uint64 gas_used) const { } namespace transaction { + +/** + * Checks if it is required to increase gas_limit (from GasLimitsPrices config) to special_gas_limit * 2 + * from masterchain GasLimitsPrices config for the transaction. + * + * In January 2024 a highload wallet of @wallet Telegram bot in mainnet was stuck because current gas limit (1M) is + * not enough to clean up old queires, thus locking funds inside. + * See comment in crypto/smartcont/highload-wallet-v2-code.fc for details on why this happened. + * Account address: EQD_v9j1rlsuHHw2FIhcsCFFSD367ldfDdCKcsNmNpIRzUlu + * It was proposed to validators to increase gas limit for this account for a limited amount of time (until 2024-02-16). + * It is activated by setting gas_prices_v3 in ConfigParam 20 (config_mc_gas_prices). + * This config change also activates new behavior for special accounts in masterchain. + * + * @param cfg The compute phase configuration. + * @param now The Unix time of the transaction. + * @param account The account of the transaction. + * + * @returns True if gas_limit override is required, false otherwise + */ +static bool override_gas_limit(const ComputePhaseConfig& cfg, ton::UnixTime now, const Account& account) { + if (!cfg.mc_gas_prices.special_full_limit) { + return false; + } + ton::UnixTime until = 1708041600; // 2024-02-16 00:00:00 UTC + ton::WorkchainId wc = 0; + const char* addr_hex = "FFBFD8F5AE5B2E1C7C3614885CB02145483DFAEE575F0DD08A72C366369211CD"; + return now < until && account.workchain == wc && account.addr.to_hex() == addr_hex; +} + +/** + * Computes the amount of gas that can be bought for a given amount of nanograms. + * Usually equal to `cfg.gas_bought_for(nanograms)` + * However, it overrides gas_limit from config in special cases. + * + * @param cfg The compute phase configuration. + * @param nanograms The amount of nanograms to compute gas for. + * + * @returns The amount of gas. + */ +td::uint64 Transaction::gas_bought_for(const ComputePhaseConfig& cfg, td::RefInt256 nanograms) { + if (override_gas_limit(cfg, now, account)) { + gas_limit_overridden = true; + // Same as ComputePhaseConfig::gas_bought for, but with other gas_limit and max_gas_threshold + auto gas_limit = cfg.mc_gas_prices.special_gas_limit * 2; + auto max_gas_threshold = + compute_max_gas_threshold(cfg.gas_price256, gas_limit, cfg.flat_gas_limit, cfg.flat_gas_price); + if (nanograms.is_null() || sgn(nanograms) < 0) { + return 0; + } + if (nanograms >= max_gas_threshold) { + return gas_limit; + } + if (nanograms < cfg.flat_gas_price) { + return 0; + } + auto res = td::div((std::move(nanograms) - cfg.flat_gas_price) << 16, cfg.gas_price256); + return res->to_long() + cfg.flat_gas_limit; + } + return cfg.gas_bought_for(nanograms); +} + /** * Computes the gas limits for a transaction. * @@ -1143,7 +1218,7 @@ bool Transaction::compute_gas_limits(ComputePhase& cp, const ComputePhaseConfig& if (account.is_special) { cp.gas_max = cfg.special_gas_limit; } else { - cp.gas_max = cfg.gas_bought_for(balance.grams); + cp.gas_max = gas_bought_for(cfg, balance.grams); } cp.gas_credit = 0; if (trans_type != tr_ord || (account.is_special && cfg.special_gas_full)) { @@ -1152,7 +1227,7 @@ bool Transaction::compute_gas_limits(ComputePhase& cp, const ComputePhaseConfig& } else { // originally use only gas bought using remaining message balance // if the message is "accepted" by the smart contract, the gas limit will be set to gas_max - cp.gas_limit = std::min(cfg.gas_bought_for(msg_balance_remaining.grams), cp.gas_max); + cp.gas_limit = std::min(gas_bought_for(cfg, msg_balance_remaining.grams), cp.gas_max); if (!block::tlb::t_Message.is_internal(in_msg)) { // external messages carry no balance, give them some credit to check whether they are accepted cp.gas_credit = std::min(cfg.gas_credit, cp.gas_max); @@ -3454,6 +3529,9 @@ td::Status FetchConfigParams::fetch_config_params( storage_phase_cfg->delete_due_limit)) { return td::Status::Error(-668, "cannot unpack current gas prices and limits from masterchain configuration"); } + TRY_RESULT_PREFIX(mc_gas_prices, config.get_gas_limits_prices(true), + "cannot unpack masterchain gas prices and limits: "); + compute_phase_cfg->mc_gas_prices = std::move(mc_gas_prices); storage_phase_cfg->enable_due_payment = config.get_global_version() >= 4; compute_phase_cfg->block_rand_seed = *rand_seed; compute_phase_cfg->max_vm_data_depth = size_limits.max_vm_data_depth; diff --git a/crypto/block/transaction.h b/crypto/block/transaction.h index deb71a40..7539efe0 100644 --- a/crypto/block/transaction.h +++ b/crypto/block/transaction.h @@ -105,6 +105,7 @@ struct ComputePhaseConfig { td::uint64 flat_gas_limit = 0; td::uint64 flat_gas_price = 0; bool special_gas_full = false; + block::GasLimitsPrices mc_gas_prices; static constexpr td::uint64 gas_infty = (1ULL << 63) - 1; td::RefInt256 gas_price256; td::RefInt256 max_gas_threshold; @@ -358,12 +359,14 @@ struct Transaction { std::unique_ptr action_phase; std::unique_ptr bounce_phase; vm::CellStorageStat new_storage_stat; + bool gas_limit_overridden{false}; Transaction(const Account& _account, int ttype, ton::LogicalTime req_start_lt, ton::UnixTime _now, Ref _inmsg = {}); bool unpack_input_msg(bool ihr_delivered, const ActionPhaseConfig* cfg); bool check_in_msg_state_hash(); bool prepare_storage_phase(const StoragePhaseConfig& cfg, bool force_collect = true, bool adjust_msg_value = false); bool prepare_credit_phase(); + td::uint64 gas_bought_for(const ComputePhaseConfig& cfg, td::RefInt256 nanograms); bool compute_gas_limits(ComputePhase& cp, const ComputePhaseConfig& cfg); Ref prepare_vm_stack(ComputePhase& cp); std::vector> compute_vm_libraries(const ComputePhaseConfig& cfg); diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index 0a22fa14..94eded6c 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -940,6 +940,11 @@ bool ValidateQuery::fetch_config_params() { storage_phase_cfg_.delete_due_limit)) { return fatal_error("cannot unpack current gas prices and limits from masterchain configuration"); } + auto mc_gas_prices = config_->get_gas_limits_prices(true); + if (mc_gas_prices.is_error()) { + return fatal_error(mc_gas_prices.move_as_error_prefix("cannot unpack masterchain gas prices and limits: ")); + } + compute_phase_cfg_.mc_gas_prices = mc_gas_prices.move_as_ok(); storage_phase_cfg_.enable_due_payment = config_->get_global_version() >= 4; compute_phase_cfg_.block_rand_seed = rand_seed_; compute_phase_cfg_.libraries = std::make_unique(config_->get_libraries_root(), 256); @@ -5052,7 +5057,7 @@ bool ValidateQuery::check_one_transaction(block::Account& account, ton::LogicalT << " for smart contract " << addr.to_hex()); } if (!trs->update_limits(*block_limit_status_, - /* with_gas = */ !account.is_special, + /* with_gas = */ !account.is_special && !trs->gas_limit_overridden, /* with_size = */ false)) { return fatal_error(PSTRING() << "cannot update block limit status to include transaction " << lt << " of account " << addr.to_hex()); From e0a320f715a50a37ce177592e324e6044440d033 Mon Sep 17 00:00:00 2001 From: neodix42 Date: Mon, 15 Jan 2024 21:48:04 +0100 Subject: [PATCH 067/351] Improve TON build scripts and some tests (#855) * fix macOS github actions * fix android tonlib GH action; * fixing wasm GH action * strip binaries * fix randomly failing ubuntu and wasm GH actions * fix randomly failing ubuntu and wasm GH actions * revert some changes * adding more nix scripts and automated native build scripts; debug static ton compilation * minor fix * do not use pkg_config if path specified * move wasm script, run with sudo action script * weird, fixing - cp: missing destination file operand after 'assembly/native/build-ubuntu-20.04-shared.sh' * weird, fixing - cp: missing destination file operand after 'assembly/native/build-ubuntu-20.04-shared.sh' * ok * some adjustments for android and win builds * some adjustments for android and win builds * moving stripping inside the build script * access rights handling; adding simple binaries' tests * make lite-client-common, fift-lib and smc-envelope deliberately static; add -a (artifacts) flag to build scripts; * minor wasm build fix; create separate tonlib android build script; remove outdated __has_trivial_copy(T) * add windows build - WIP * adjust android build; improve win build; * adjust sodium paths for android build; use proper compiler for windows build; * add github windows build auxiliary file * adjust wasm build * add portable ubuntu build * exclude some unstable tests for some time * compile portable binaries on ubuntu-20.04 * exclude some unstable tests * include static gsl * restart builds * restart builds * restart builds * remove libreadline, gsl and blas dependencies in linux build * add macos build script * install missing autoconf in macos builds * enable all tests and see what fails * enable win tests and restart others * enable win tests and fix test-smartcont.cpp * enable win tests * use clang-16 on mac builds, add blockchain-explorer for ubuntu builds, add portable macos build * move sudo part outside a build scripts * move sudo part outside a build scripts * run llvm install with sudo * remove libgnutls28-dev before ubuntu static compilation, include blockchain-explorer into artifacts; remove warning: definition of implicit copy constructor for 'Stat' is deprecated because it has a user-declared copy assignment operator [-Wdeprecated-copy] * rework wrong decision, put back system gnutls, but compile libmicrohttpd with --disable-https * add jenkins pipeline sceleton * WIP jenkins pipeline sceleton * WIP jenkins pipeline changes * WIP jenkins pipeline: add stage timout, zip and group artifacts * WIP jenkins pipeline: macos portable build fix * WIP jenkins pipeline: wording * WIP jenkins pipeline: add android tonlib * WIP jenkins pipeline: add was binaries * WIP jenkins pipeline: add TOTAL_MEMORY 1.5gb to funcfiftlib wasm linking * WIP jenkins pipeline: add nix build on linux aarch64 * WIP jenkins pipeline: funcfiftlib compilation fails that 16mb mem is not enough, increase to 32mb * WIP jenkins pipeline: enable test in nix build * WIP jenkins pipeline: add linux x86-64 nix build * WIP jenkins pipeline: include libs in nix build * WIP jenkins pipeline: include libs in nix build * WIP jenkins pipeline: include mac nix build * WIP jenkins pipeline: include mac nix build * WIP jenkins pipeline: include mac nix build * WIP jenkins pipeline: include mac nix build * WIP jenkins pipeline: include mac nix build * WIP jenkins pipeline: include mac nix build * WIP jenkins pipeline: nix linux arm64 with openssl 1.1 for now * WIP jenkins pipeline: working ubuntu arm64 libtonjson * WIP jenkins pipeline: working ubuntu arm64 libtonjson + minor fix * WIP jenkins pipeline: working ubuntu arm64 libtonjson + minor fix 2 * WIP jenkins pipeline: merry christmas * WIP jenkins pipeline: merry christmas 2 * WIP jenkins pipeline: remove native static builds * WIP jenkins pipeline: enable more tests * WIP jenkins pipeline: zip artifacts better * WIP jenkins pipeline: get rid of path in the final zip * WIP jenkins pipeline: minor fix, include lib and smartcont folders * WIP jenkins pipeline: minor fix, include lib and smartcont folders into nix artifacts also * WIP jenkins pipeline: minor fix * WIP jenkins pipeline: minor fix * adjust github actions for new nix builds * cleanup * cleanup * cleanup * cleanup * rename libtonlibjson.so.0.5 to libtonlibjson.so * Add TON build instructions to README.md * simplify * fix test-tonlib-offline * set timeout per test of 300 sec * set timeout per test of 600 sec for non nix builds * increase test timeout to 900 sec; minor changes * use MS VS 2022 for win TON compilation; update README.md * use MS VS 2022 for win TON compilation; update README.md * change path to MSVC in github workflow * change path to MSVC in groovy pipeline * compile ton on win, with msvc 2022 community and enterprise versions * minor fixes * improve network tests * remove TON compilation against macos-11 github runner * add `choco feature enable -n allowEmptyChecksums` since pkg-config-lite-0.28-1 does not have a checksum * abort win compilation if 3pp can't be downloaded * increase test timeout to 30 min * improving test-catchain --- .../build-ton-linux-android-tonlib.yml | 32 +++ .../build-ton-linux-x86-64-shared.yml | 40 +++ .../build-ton-macos-x86-64-shared.yml | 25 ++ .../workflows/build-ton-wasm-emscripten.yml | 30 +++ .github/workflows/create-release.yml | 6 +- .github/workflows/macos-11.7-compile.yml | 106 -------- .github/workflows/macos-12.6-compile.yml | 106 -------- .github/workflows/ton-aarch64-linux.yml | 50 ---- .github/workflows/ton-aarch64-macos.yml | 47 ---- .github/workflows/ton-ccpcheck.yml | 3 +- .github/workflows/ton-wasm-emscripten.yml | 46 ---- .github/workflows/ton-x86-64-linux.yml | 18 +- .github/workflows/ton-x86-64-macos.yml | 18 +- .github/workflows/ton-x86-64-windows.yml | 34 +++ .github/workflows/tonlib-android-jni.yml | 61 ----- .github/workflows/ubuntu-22.04-compile.yml | 78 ------ .github/workflows/ubuntu-compile.yml | 81 ------ .github/workflows/win-2019-compile.yml | 108 -------- .gitignore | 12 +- CMake/FindMHD.cmake | 29 ++- CMake/FindSecp256k1.cmake | 27 +- CMake/FindSodium.cmake | 1 + CMakeLists.txt | 19 +- README.md | 88 ++++++- assembly/android/build-android-tonlib.sh | 55 ++++ assembly/cicd/jenkins/test-builds.groovy | 236 ++++++++++++++++++ assembly/native/build-macos-portable.sh | 207 +++++++++++++++ assembly/native/build-macos-shared.sh | 136 ++++++++++ assembly/native/build-ubuntu-portable.sh | 198 +++++++++++++++ assembly/native/build-ubuntu-shared.sh | 122 +++++++++ assembly/native/build-windows-github.bat | 2 + assembly/native/build-windows.bat | 193 ++++++++++++++ assembly/nix/build-linux-arm64-nix.sh | 20 ++ assembly/nix/build-linux-x86-64-nix.sh | 20 ++ assembly/nix/build-macos-nix.sh | 17 ++ flake.lock => assembly/nix/flakes/flake.lock | 0 flake.nix => assembly/nix/flakes/flake.nix | 0 shell.nix => assembly/nix/flakes/shell.nix | 0 assembly/nix/linux-arm64-static.nix | 45 ++++ assembly/nix/linux-arm64-tonlib.nix | 44 ++++ assembly/nix/linux-x86-64-static.nix | 45 ++++ assembly/nix/linux-x86-64-tonlib.nix | 54 ++++ assembly/nix/macos-static.nix | 65 +++++ assembly/nix/macos-tonlib.nix | 55 ++++ assembly/nix/microhttpd.nix | 28 +++ assembly/nix/openssl.nix | 30 +++ .../wasm}/fift-func-wasm-build-ubuntu.sh | 53 +++- blockchain-explorer/CMakeLists.txt | 27 +- catchain/catchain-receiver.cpp | 4 +- crypto/CMakeLists.txt | 24 +- crypto/test/test-smartcont.cpp | 5 +- crypto/vm/boc.h | 1 + example/android/README.md | 24 +- example/android/build-all.sh | 2 + example/android/build.sh | 22 +- lite-client/CMakeLists.txt | 2 +- tdnet/td/net/TcpListener.cpp | 8 +- tdnet/test/net-test.cpp | 6 +- tdutils/td/utils/as.h | 5 - test/test-catchain.cpp | 9 +- tonlib/test/offline.cpp | 19 +- tonlib/tonlib/TonlibClient.cpp | 2 + 62 files changed, 2019 insertions(+), 831 deletions(-) create mode 100644 .github/workflows/build-ton-linux-android-tonlib.yml create mode 100644 .github/workflows/build-ton-linux-x86-64-shared.yml create mode 100644 .github/workflows/build-ton-macos-x86-64-shared.yml create mode 100644 .github/workflows/build-ton-wasm-emscripten.yml delete mode 100644 .github/workflows/macos-11.7-compile.yml delete mode 100644 .github/workflows/macos-12.6-compile.yml delete mode 100644 .github/workflows/ton-aarch64-linux.yml delete mode 100644 .github/workflows/ton-aarch64-macos.yml delete mode 100644 .github/workflows/ton-wasm-emscripten.yml create mode 100644 .github/workflows/ton-x86-64-windows.yml delete mode 100644 .github/workflows/tonlib-android-jni.yml delete mode 100644 .github/workflows/ubuntu-22.04-compile.yml delete mode 100644 .github/workflows/ubuntu-compile.yml delete mode 100644 .github/workflows/win-2019-compile.yml create mode 100644 assembly/android/build-android-tonlib.sh create mode 100644 assembly/cicd/jenkins/test-builds.groovy create mode 100644 assembly/native/build-macos-portable.sh create mode 100644 assembly/native/build-macos-shared.sh create mode 100644 assembly/native/build-ubuntu-portable.sh create mode 100644 assembly/native/build-ubuntu-shared.sh create mode 100644 assembly/native/build-windows-github.bat create mode 100644 assembly/native/build-windows.bat create mode 100644 assembly/nix/build-linux-arm64-nix.sh create mode 100644 assembly/nix/build-linux-x86-64-nix.sh create mode 100644 assembly/nix/build-macos-nix.sh rename flake.lock => assembly/nix/flakes/flake.lock (100%) rename flake.nix => assembly/nix/flakes/flake.nix (100%) rename shell.nix => assembly/nix/flakes/shell.nix (100%) create mode 100644 assembly/nix/linux-arm64-static.nix create mode 100644 assembly/nix/linux-arm64-tonlib.nix create mode 100644 assembly/nix/linux-x86-64-static.nix create mode 100644 assembly/nix/linux-x86-64-tonlib.nix create mode 100644 assembly/nix/macos-static.nix create mode 100644 assembly/nix/macos-tonlib.nix create mode 100644 assembly/nix/microhttpd.nix create mode 100644 assembly/nix/openssl.nix rename {.github/script => assembly/wasm}/fift-func-wasm-build-ubuntu.sh (71%) mode change 100755 => 100644 diff --git a/.github/workflows/build-ton-linux-android-tonlib.yml b/.github/workflows/build-ton-linux-android-tonlib.yml new file mode 100644 index 00000000..ae1be22f --- /dev/null +++ b/.github/workflows/build-ton-linux-android-tonlib.yml @@ -0,0 +1,32 @@ +name: Tonlib Android + +on: [push,workflow_dispatch,workflow_call] + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - name: Check out repository + uses: actions/checkout@v3 + with: + submodules: 'recursive' + + - name: Install system libraries + run: | + sudo apt-get update + sudo apt-get install -y build-essential git cmake ninja-build automake libtool texinfo autoconf libgflags-dev \ + zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev \ + libtool autoconf libsodium-dev libsecp256k1-dev + + - name: Build TON + run: | + cp assembly/android/build-android-tonlib.sh . + chmod +x build-android-tonlib.sh + ./build-android-tonlib.sh -a + + - name: Upload artifacts + uses: actions/upload-artifact@master + with: + name: tonlib-android + path: artifacts \ No newline at end of file diff --git a/.github/workflows/build-ton-linux-x86-64-shared.yml b/.github/workflows/build-ton-linux-x86-64-shared.yml new file mode 100644 index 00000000..166de660 --- /dev/null +++ b/.github/workflows/build-ton-linux-x86-64-shared.yml @@ -0,0 +1,40 @@ +name: Ubuntu TON build (shared, x86-64) + +on: [push,workflow_dispatch,workflow_call] + +jobs: + build: + strategy: + fail-fast: false + matrix: + os: [ubuntu-20.04, ubuntu-22.04] + runs-on: ${{ matrix.os }} + + steps: + - name: Check out repository + uses: actions/checkout@v3 + with: + submodules: 'recursive' + + - name: Install system libraries + run: | + sudo apt-get update + sudo apt-get install -y build-essential git cmake ninja-build zlib1g-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev + + - name: Install clang-16 + run: | + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 16 all + + - name: Build TON + run: | + cp assembly/native/build-ubuntu-shared.sh . + chmod +x build-ubuntu-shared.sh + ./build-ubuntu-shared.sh -t -a + + - name: Upload artifacts + uses: actions/upload-artifact@master + with: + name: ton-binaries-${{ matrix.os }} + path: artifacts diff --git a/.github/workflows/build-ton-macos-x86-64-shared.yml b/.github/workflows/build-ton-macos-x86-64-shared.yml new file mode 100644 index 00000000..c9331e3b --- /dev/null +++ b/.github/workflows/build-ton-macos-x86-64-shared.yml @@ -0,0 +1,25 @@ +name: MacOS TON build (shared, x86-64) + +on: [push,workflow_dispatch,workflow_call] + +jobs: + build: + runs-on: macos-12 + + steps: + - name: Check out repository + uses: actions/checkout@v3 + with: + submodules: 'recursive' + + - name: Build TON + run: | + cp assembly/native/build-macos-shared.sh . + chmod +x build-macos-shared.sh + ./build-macos-shared.sh -t -a + + - name: Upload artifacts + uses: actions/upload-artifact@master + with: + name: ton-binaries-macos-12 + path: artifacts diff --git a/.github/workflows/build-ton-wasm-emscripten.yml b/.github/workflows/build-ton-wasm-emscripten.yml new file mode 100644 index 00000000..16156b07 --- /dev/null +++ b/.github/workflows/build-ton-wasm-emscripten.yml @@ -0,0 +1,30 @@ +name: Emscripten TON build (wasm) + +on: [push,workflow_dispatch,workflow_call] + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - name: Check out repository + uses: actions/checkout@v3 + with: + submodules: 'recursive' + + - name: Install system libraries + run: | + sudo apt-get update + sudo apt-get install -y build-essential git openssl cmake ninja-build zlib1g-dev libssl-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev + + - name: Build TON WASM artifacts + run: | + cd assembly/wasm + chmod +x fift-func-wasm-build-ubuntu.sh + ./fift-func-wasm-build-ubuntu.sh -a + + - name: Upload artifacts + uses: actions/upload-artifact@master + with: + name: ton-wasm-binaries + path: artifacts \ No newline at end of file diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 10c20ac0..3d248cfe 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -46,7 +46,7 @@ jobs: - name: Download Windows artifacts uses: dawidd6/action-download-artifact@v2 with: - workflow: win-2019-compile.yml + workflow: ton-x86-64-windows.yml path: artifacts workflow_conclusion: success skip_unpack: true @@ -54,7 +54,7 @@ jobs: - name: Download and unzip Windows artifacts uses: dawidd6/action-download-artifact@v2 with: - workflow: win-2019-compile.yml + workflow: ton-x86-64-windows.yml path: artifacts workflow_conclusion: success skip_unpack: false @@ -62,7 +62,7 @@ jobs: - name: Download WASM artifacts uses: dawidd6/action-download-artifact@v2 with: - workflow: ton-wasm-emscripten.yml + workflow: build-ton-wasm-emscripten.yml path: artifacts workflow_conclusion: success skip_unpack: true diff --git a/.github/workflows/macos-11.7-compile.yml b/.github/workflows/macos-11.7-compile.yml deleted file mode 100644 index eb12db1b..00000000 --- a/.github/workflows/macos-11.7-compile.yml +++ /dev/null @@ -1,106 +0,0 @@ -name: MacOS 11.7 Big Sur x86-64 Compile - -on: [push,workflow_dispatch,workflow_call] - -jobs: - build: - - runs-on: macos-11 - - steps: - - name: Check out repository - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - - name: Compile Secp256k1 - run: | - export NONINTERACTIVE=1 - brew install ninja secp256k1 libsodium libmicrohttpd pkg-config automake libtool - git clone https://github.com/libbitcoin/secp256k1.git - cd secp256k1 - ./autogen.sh - ./configure --enable-module-recovery - make - make install - - - name: Build all - run: | - brew unlink openssl@1.1 - brew install openssl@3 - brew unlink openssl@3 && brew link --overwrite openssl@3 - rootPath=`pwd` - mkdir build - cd build - cmake -GNinja -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=11.7 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release .. - - ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine \ - lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server \ - http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator \ - test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor \ - test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state - - - name: Strip binaries - run: | - strip build/storage/storage-daemon/storage-daemon - strip build/storage/storage-daemon/storage-daemon-cli - strip build/blockchain-explorer/blockchain-explorer - strip build/crypto/fift - strip build/crypto/func - strip build/crypto/create-state - strip build/crypto/tlbc - strip build/validator-engine-console/validator-engine-console - strip build/tonlib/tonlib-cli - strip build/http/http-proxy - strip build/rldp-http-proxy/rldp-http-proxy - strip build/dht-server/dht-server - strip build/lite-client/lite-client - strip build/validator-engine/validator-engine - strip build/utils/generate-random-id - strip build/utils/json2tlo - strip build/adnl/adnl-proxy - - - name: Run tests - run: | - cd build - ctest --output-on-failure -E "test-catchain|test-actors" - - - name: Find & copy binaries - run: | - mkdir artifacts - cp build/storage/storage-daemon/storage-daemon artifacts/ - cp build/storage/storage-daemon/storage-daemon-cli artifacts/ - cp build/blockchain-explorer/blockchain-explorer artifacts/ - cp build/crypto/fift artifacts/ - cp build/crypto/func artifacts/ - cp build/crypto/create-state artifacts/ - cp build/crypto/tlbc artifacts/ - cp build/validator-engine-console/validator-engine-console artifacts/ - cp build/tonlib/tonlib-cli artifacts/ - cp build/tonlib/libtonlibjson.0.5.dylib artifacts/libtonlibjson.dylib - cp build/http/http-proxy artifacts/ - cp build/rldp-http-proxy/rldp-http-proxy artifacts/ - cp build/dht-server/dht-server artifacts/ - cp build/lite-client/lite-client artifacts/ - cp build/validator-engine/validator-engine artifacts/ - cp build/utils/generate-random-id artifacts/ - cp build/utils/json2tlo artifacts/ - cp build/adnl/adnl-proxy artifacts/ - cp build/emulator/*emulator.* artifacts/ - chmod +x artifacts/* - rsync -r crypto/smartcont artifacts/ - rsync -r crypto/fift/lib artifacts/ - ls -laRt artifacts - - - name: Simple binaries test - run: | - artifacts/validator-engine -V - artifacts/lite-client -V - artifacts/fift -V - artifacts/func -V - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: ton-macos-11.7 - path: artifacts diff --git a/.github/workflows/macos-12.6-compile.yml b/.github/workflows/macos-12.6-compile.yml deleted file mode 100644 index f41efc66..00000000 --- a/.github/workflows/macos-12.6-compile.yml +++ /dev/null @@ -1,106 +0,0 @@ -name: MacOS 12.6 Monterey x86-64 Compile - -on: [push,workflow_dispatch,workflow_call] - -jobs: - build: - - runs-on: macos-12 - - steps: - - name: Check out repository - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - - name: Compile Secp256k1 - run: | - export NONINTERACTIVE=1 - brew install ninja secp256k1 libsodium libmicrohttpd pkg-config automake libtool - git clone https://github.com/libbitcoin/secp256k1.git - cd secp256k1 - ./autogen.sh - ./configure --enable-module-recovery - make - make install - - - name: Build all - run: | - brew unlink openssl@1.1 - brew install openssl@3 - brew unlink openssl@3 && brew link --overwrite openssl@3 - rootPath=`pwd` - mkdir build - cd build - cmake -GNinja -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=12.6 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DCMAKE_BUILD_TYPE=Release .. - - ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli \ - validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server \ - http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator \ - test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor \ - test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state - - - name: Strip binaries - run: | - strip build/storage/storage-daemon/storage-daemon - strip build/storage/storage-daemon/storage-daemon-cli - strip build/blockchain-explorer/blockchain-explorer - strip build/crypto/fift - strip build/crypto/func - strip build/crypto/create-state - strip build/crypto/tlbc - strip build/validator-engine-console/validator-engine-console - strip build/tonlib/tonlib-cli - strip build/http/http-proxy - strip build/rldp-http-proxy/rldp-http-proxy - strip build/dht-server/dht-server - strip build/lite-client/lite-client - strip build/validator-engine/validator-engine - strip build/utils/generate-random-id - strip build/utils/json2tlo - strip build/adnl/adnl-proxy - - - name: Run tests - run: | - cd build - ctest --output-on-failure -E "test-catchain|test-actors" - - - name: Find & copy binaries - run: | - mkdir artifacts - cp build/storage/storage-daemon/storage-daemon artifacts/ - cp build/storage/storage-daemon/storage-daemon-cli artifacts/ - cp build/blockchain-explorer/blockchain-explorer artifacts/ - cp build/crypto/fift artifacts/ - cp build/crypto/func artifacts/ - cp build/crypto/create-state artifacts/ - cp build/crypto/tlbc artifacts/ - cp build/validator-engine-console/validator-engine-console artifacts/ - cp build/tonlib/tonlib-cli artifacts/ - cp build/tonlib/libtonlibjson.0.5.dylib artifacts/libtonlibjson.dylib - cp build/http/http-proxy artifacts/ - cp build/rldp-http-proxy/rldp-http-proxy artifacts/ - cp build/dht-server/dht-server artifacts/ - cp build/lite-client/lite-client artifacts/ - cp build/validator-engine/validator-engine artifacts/ - cp build/utils/generate-random-id artifacts/ - cp build/utils/json2tlo artifacts/ - cp build/adnl/adnl-proxy artifacts/ - cp build/emulator/*emulator.* artifacts/ - chmod +x artifacts/* - rsync -r crypto/smartcont artifacts/ - rsync -r crypto/fift/lib artifacts/ - ls -laRt artifacts - - - name: Simple binaries test - run: | - artifacts/validator-engine -V - artifacts/lite-client -V - artifacts/fift -V - artifacts/func -V - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: ton-macos-12.6 - path: artifacts diff --git a/.github/workflows/ton-aarch64-linux.yml b/.github/workflows/ton-aarch64-linux.yml deleted file mode 100644 index 3c600bee..00000000 --- a/.github/workflows/ton-aarch64-linux.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: "TON aarch64 Linux binaries" - -on: [workflow_dispatch,workflow_call] - -jobs: - build: - runs-on: ubuntu-22.04 - - steps: - - run: | - sudo apt update - sudo apt install -y apt-utils - sudo apt install -q -y qemu-system-aarch64 qemu-efi binfmt-support qemu-user-static - - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - - uses: cachix/install-nix-action@v18 - with: - extra_nix_config: | - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} - - - name: Compile - run: nix build .?submodules=1#packages.aarch64-linux.ton-oldglibc_staticbinaries --print-build-logs --system aarch64-linux -o result-aarch64 - - - name: Copy binaries - run: | - ls -lart - mkdir artifacts - cp $PWD/result-aarch64-linux/bin/* artifacts/ - chmod +x artifacts/* - cp $PWD/result-aarch64-linux/lib/libtonlibjson.so.0.5 artifacts/libtonlibjson.so - cp $PWD/result-aarch64-linux/lib/libemulator.so artifacts/ - cp -R crypto/smartcont artifacts/ - cp -R crypto/fift/lib artifacts/ - - - name: Simple binaries test - run: | - sudo mv /nix/store /nix/store2 - artifacts/validator-engine -V - artifacts/lite-client -V - artifacts/fift -V - artifacts/func -V - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: ton-aarch64-linux-binaries - path: artifacts \ No newline at end of file diff --git a/.github/workflows/ton-aarch64-macos.yml b/.github/workflows/ton-aarch64-macos.yml deleted file mode 100644 index 75fcec78..00000000 --- a/.github/workflows/ton-aarch64-macos.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: "TON aarch64 macOS binaries" - -on: [workflow_dispatch,workflow_call] - -jobs: - build: - runs-on: macos-12 - - steps: - - run: brew install qemu - - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - - uses: cachix/install-nix-action@v18 - with: - extra_nix_config: | - access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} - - - name: Compile - run: nix build .?submodules=1#packages.aarch64-darwin.ton-staticbin-dylib --print-build-logs -o result-aarch64-darwin - - - name: Copy binaries - run: | - ls -lart - mkdir artifacts - cp $PWD/result-aarch64-darwin/bin/* artifacts/ - chmod +x artifacts/* - cp $PWD/result-aarch64-darwin/lib/libtonlibjson* artifacts/ - cp $PWD/result-aarch64-darwin/lib/libemulator* artifacts/ - cp -R crypto/smartcont artifacts/ - cp -R crypto/fift/lib artifacts/ - - - name: Simple binaries test - run: | - sudo mv /nix/store /nix/store2 - artifacts/validator-engine -V - artifacts/lite-client -V - artifacts/fift -V - artifacts/func -V - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: ton-aarch64-macos-binaries - path: artifacts diff --git a/.github/workflows/ton-ccpcheck.yml b/.github/workflows/ton-ccpcheck.yml index 8e9d6ad2..d2d8cf70 100644 --- a/.github/workflows/ton-ccpcheck.yml +++ b/.github/workflows/ton-ccpcheck.yml @@ -1,10 +1,9 @@ -name: TON Ccpcheck +name: TON Static Code Analysis on: [push,workflow_dispatch,workflow_call] jobs: build: - runs-on: ubuntu-22.04 steps: diff --git a/.github/workflows/ton-wasm-emscripten.yml b/.github/workflows/ton-wasm-emscripten.yml deleted file mode 100644 index a3167800..00000000 --- a/.github/workflows/ton-wasm-emscripten.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: TON WASM Compile - -on: [push,workflow_dispatch,workflow_call] - -jobs: - build: - runs-on: ubuntu-22.04 - - steps: - - name: Check out repository - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - - name: Install libraries - run: | - sudo apt update - sudo apt install -y build-essential git make cmake ninja-build clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev python3-pip nodejs libsecp256k1-dev libsodium-dev automake libtool - - - name: Setup compiler - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh 16 all - - - name: Configure & Build - run: | - cd .github/script - ./fift-func-wasm-build-ubuntu.sh - - - name: Find & copy binaries - run: | - mkdir artifacts - ls build/crypto - cp build/crypto/fift* artifacts - cp build/crypto/func* artifacts - cp build/crypto/tlbc* artifacts - cp build/emulator/emulator-emscripten* artifacts - cp -R crypto/smartcont artifacts - cp -R crypto/fift/lib artifacts - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: ton-wasm-binaries - path: artifacts \ No newline at end of file diff --git a/.github/workflows/ton-x86-64-linux.yml b/.github/workflows/ton-x86-64-linux.yml index a4760dc4..fdd91000 100644 --- a/.github/workflows/ton-x86-64-linux.yml +++ b/.github/workflows/ton-x86-64-linux.yml @@ -1,4 +1,4 @@ -name: "TON x86_64 Linux binaries" +name: Ubuntu TON build (portable, x86-64) on: [push,workflow_dispatch,workflow_call] @@ -20,19 +20,11 @@ jobs: extra_nix_config: | access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} - - name: Compile - run: nix build .?submodules=1#packages.x86_64-linux.ton-oldglibc_staticbinaries --print-build-logs --system x86_64-linux -o result-x86_64 - - - name: Copy binaries + - name: Build TON run: | - ls -lart - mkdir artifacts - cp $PWD/result-x86_64/bin/* artifacts/ - chmod +x artifacts/* - cp $PWD/result-x86_64/lib/libtonlibjson.so.0.5 artifacts/libtonlibjson.so - cp $PWD/result-x86_64/lib/libemulator.so artifacts/ - cp -R crypto/smartcont artifacts/ - cp -R crypto/fift/lib artifacts/ + cp assembly/nix/build-linux-x86-64-nix.sh . + chmod +x build-linux-x86-64-nix.sh + ./build-linux-x86-64-nix.sh - name: Simple binaries test run: | diff --git a/.github/workflows/ton-x86-64-macos.yml b/.github/workflows/ton-x86-64-macos.yml index cea2937a..c0f90718 100644 --- a/.github/workflows/ton-x86-64-macos.yml +++ b/.github/workflows/ton-x86-64-macos.yml @@ -1,4 +1,4 @@ -name: "TON x86_64 macOS binaries" +name: MacOS TON build (portable, x86-64) on: [push,workflow_dispatch,workflow_call] @@ -16,19 +16,11 @@ jobs: extra_nix_config: | access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} - - name: Compile - run: nix build .?submodules=1#packages.x86_64-darwin.ton-staticbin-dylib --print-build-logs -o result-x86_64-darwin - - - name: Copy binaries + - name: Build TON run: | - ls -lart - mkdir artifacts - cp $PWD/result-x86_64-darwin/bin/* artifacts/ - chmod +x artifacts/* - cp $PWD/result-x86_64-darwin/lib/libtonlibjson.dylib artifacts/ - cp $PWD/result-x86_64-darwin/lib/libemulator.dylib artifacts/ - cp -R crypto/smartcont artifacts/ - cp -R crypto/fift/lib artifacts/ + cp assembly/nix/build-macos-nix.sh . + chmod +x build-macos-nix.sh + ./build-macos-nix.sh - name: Simple binaries test run: | diff --git a/.github/workflows/ton-x86-64-windows.yml b/.github/workflows/ton-x86-64-windows.yml new file mode 100644 index 00000000..67026183 --- /dev/null +++ b/.github/workflows/ton-x86-64-windows.yml @@ -0,0 +1,34 @@ +name: Windows TON build (portable, x86-64) + +on: [push,workflow_dispatch,workflow_call] + +defaults: + run: + shell: cmd + +jobs: + build: + + runs-on: windows-2022 + + steps: + - name: Get Current OS version + run: | + systeminfo | findstr /B /C:"OS Name" /C:"OS Version" + + - name: Check out current repository + uses: actions/checkout@v3 + with: + submodules: 'recursive' + + - name: Build TON + run: | + copy assembly\native\build-windows-github.bat . + copy assembly\native\build-windows.bat . + build-windows-github.bat Enterprise + + - name: Upload artifacts + uses: actions/upload-artifact@master + with: + name: ton-win-binaries + path: artifacts diff --git a/.github/workflows/tonlib-android-jni.yml b/.github/workflows/tonlib-android-jni.yml deleted file mode 100644 index 6e04f8b7..00000000 --- a/.github/workflows/tonlib-android-jni.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: Tonlib Android JNI - -on: [push,workflow_dispatch,workflow_call] - -jobs: - build: - - runs-on: ubuntu-22.04 - - steps: - - name: Check out repository - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - - name: Install libraries - run: | - sudo apt update - sudo apt install -y build-essential git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev ninja-build - - - name: Configure & Build - run: | - wget -q https://dl.google.com/android/repository/android-ndk-r25b-linux.zip - unzip -q android-ndk-r25b-linux.zip - export JAVA_AWT_LIBRARY=NotNeeded - export JAVA_JVM_LIBRARY=NotNeeded - export JAVA_INCLUDE_PATH=${JAVA_HOME}/include - export JAVA_AWT_INCLUDE_PATH=${JAVA_HOME}/include - export JAVA_INCLUDE_PATH2=${JAVA_HOME}/include/linux - - export ANDROID_NDK_ROOT=$(pwd)/android-ndk-r25b - export NDK_PLATFORM="android-21" - export ANDROID_PLATFORM="android-21" - export OPENSSL_DIR=$(pwd)/example/android/third_party/crypto - - rm -rf example/android/src/drinkless/org/ton/TonApi.java - cd example/android/ - - sudo apt install -y libtool autoconf libsodium-dev libsecp256k1-dev - - cmake -GNinja -DTON_ONLY_TONLIB=ON . - - ninja prepare_cross_compiling - - sudo apt remove -y libsodium-dev libsecp256k1-dev - - rm CMakeCache.txt - ./build-all.sh - find . -name "*.debug" -type f -delete - - - name: Find & copy binaries - run: | - mkdir -p artifacts/tonlib-android-jni - cp example/android/src/drinkless/org/ton/TonApi.java artifacts/tonlib-android-jni/ - cp -R example/android/libs/* artifacts/tonlib-android-jni/ - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: tonlib-android-jni - path: artifacts \ No newline at end of file diff --git a/.github/workflows/ubuntu-22.04-compile.yml b/.github/workflows/ubuntu-22.04-compile.yml deleted file mode 100644 index af8943a1..00000000 --- a/.github/workflows/ubuntu-22.04-compile.yml +++ /dev/null @@ -1,78 +0,0 @@ -name: Ubuntu 22.04 Compile - -on: [push,workflow_dispatch,workflow_call] - -jobs: - build: - - runs-on: ubuntu-22.04 - - steps: - - name: Check out repository - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - - name: Install libraries - run: | - sudo apt update - sudo apt install -y build-essential git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev ninja-build libsecp256k1-dev libsodium-dev - - - name: Show CPU flags - run: | - cat /proc/cpuinfo - - - name: Configure & Build - run: | - export CC=$(which clang) - export CXX=$(which clang++) - export CCACHE_DISABLE=1 - - git clone https://github.com/openssl/openssl openssl_3 - cd openssl_3 - git checkout openssl-3.1.4 - ./config - make build_libs -j4 - - cd .. - rootPath=`pwd` - mkdir build - cd build - - cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_3/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_3/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= .. - - ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client \ - pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy \ - adnl-proxy create-state emulator \ - test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor \ - test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state - - - name: Strip binaries - run: | - strip -g build/storage/storage-daemon/storage-daemon build/storage/storage-daemon/storage-daemon-cli build/crypto/fift build/crypto/tlbc build/crypto/func build/crypto/create-state build/validator-engine-console/validator-engine-console build/tonlib/tonlib-cli build/tonlib/libtonlibjson.so.0.5 build/http/http-proxy build/rldp-http-proxy/rldp-http-proxy build/dht-server/dht-server build/lite-client/lite-client build/validator-engine/validator-engine build/utils/generate-random-id build/utils/json2tlo build/adnl/adnl-proxy build/emulator/libemulator.* - - - name: Run tests - run: | - cd build - ctest --output-on-failure -E "test-catchain|test-actors" - - - name: Find & copy binaries - run: | - mkdir artifacts - cp build/storage/storage-daemon/storage-daemon build/storage/storage-daemon/storage-daemon-cli build/crypto/fift build/crypto/tlbc build/crypto/func build/crypto/create-state build/validator-engine-console/validator-engine-console build/tonlib/tonlib-cli build/tonlib/libtonlibjson.so.0.5 build/http/http-proxy build/rldp-http-proxy/rldp-http-proxy build/dht-server/dht-server build/lite-client/lite-client build/validator-engine/validator-engine build/utils/generate-random-id build/utils/json2tlo build/adnl/adnl-proxy build/emulator/libemulator.* artifacts - chmod +x artifacts/* - cp -R crypto/smartcont artifacts/ - cp -R crypto/fift/lib artifacts/ - - - name: Simple binaries test - run: | - artifacts/validator-engine -V - artifacts/lite-client -V - artifacts/fift -V - artifacts/func -V - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: ton-ubuntu-binaries - path: artifacts diff --git a/.github/workflows/ubuntu-compile.yml b/.github/workflows/ubuntu-compile.yml deleted file mode 100644 index 3c1e7bad..00000000 --- a/.github/workflows/ubuntu-compile.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: Ubuntu Compile x86-64 - -on: [push,workflow_dispatch,workflow_call] - -jobs: - build: - strategy: - fail-fast: false - matrix: - os: [ubuntu-20.04, ubuntu-22.04] - runs-on: ${{ matrix.os }} - - steps: - - name: Check out repository - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - - name: Install libraries - run: | - sudo apt update - sudo apt install -y build-essential git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev ninja-build libsecp256k1-dev libsodium-dev - - - name: Show CPU flags - run: | - cat /proc/cpuinfo - - - name: Configure & Build - run: | - export CC=$(which clang) - export CXX=$(which clang++) - export CCACHE_DISABLE=1 - - mkdir build-${{ matrix.os }} - cd build-${{ matrix.os }} - - git clone https://github.com/openssl/openssl openssl_3 - cd openssl_3 - git checkout openssl-3.1.4 - ./config - make build_libs -j4 - - cd .. - rootPath=`pwd` - - cmake -GNinja -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=$rootPath/openssl_3/include -DOPENSSL_CRYPTO_LIBRARY=$rootPath/openssl_3/libcrypto.a -DCMAKE_BUILD_TYPE=Release -DPORTABLE=1 -DTON_ARCH= .. - ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli validator-engine lite-client \ - pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy \ - create-state create-hardfork emulator \ - test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor \ - test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state - - - name: Strip binaries - run: | - strip -g build-${{ matrix.os }}/storage/storage-daemon/storage-daemon build-${{ matrix.os }}/storage/storage-daemon/storage-daemon-cli build-${{ matrix.os }}/crypto/fift build-${{ matrix.os }}/crypto/tlbc build-${{ matrix.os }}/crypto/func build-${{ matrix.os }}/crypto/create-state build-${{ matrix.os }}/validator-engine-console/validator-engine-console build-${{ matrix.os }}/tonlib/tonlib-cli build-${{ matrix.os }}/tonlib/libtonlibjson.so.0.5 build-${{ matrix.os }}/http/http-proxy build-${{ matrix.os }}/rldp-http-proxy/rldp-http-proxy build-${{ matrix.os }}/dht-server/dht-server build-${{ matrix.os }}/lite-client/lite-client build-${{ matrix.os }}/validator-engine/validator-engine build-${{ matrix.os }}/utils/generate-random-id build-${{ matrix.os }}/utils/json2tlo build-${{ matrix.os }}/adnl/adnl-proxy build-${{ matrix.os }}/emulator/libemulator.* - - - name: Run tests - run: | - cd build-${{ matrix.os }} - ctest --output-on-failure -E "test-catchain|test-actors" - - - name: Find & copy binaries - run: | - mkdir artifacts-${{ matrix.os }} - cp build-${{ matrix.os }}/storage/storage-daemon/storage-daemon build-${{ matrix.os }}/storage/storage-daemon/storage-daemon-cli build-${{ matrix.os }}/crypto/fift build-${{ matrix.os }}/crypto/tlbc build-${{ matrix.os }}/crypto/func build-${{ matrix.os }}/crypto/create-state build-${{ matrix.os }}/validator-engine-console/validator-engine-console build-${{ matrix.os }}/tonlib/tonlib-cli build-${{ matrix.os }}/tonlib/libtonlibjson.so.0.5 build-${{ matrix.os }}/http/http-proxy build-${{ matrix.os }}/rldp-http-proxy/rldp-http-proxy build-${{ matrix.os }}/dht-server/dht-server build-${{ matrix.os }}/lite-client/lite-client build-${{ matrix.os }}/validator-engine/validator-engine build-${{ matrix.os }}/utils/generate-random-id build-${{ matrix.os }}/utils/json2tlo build-${{ matrix.os }}/adnl/adnl-proxy build-${{ matrix.os }}/emulator/libemulator.* artifacts-${{ matrix.os }} - chmod +x artifacts-${{ matrix.os }}/* - cp -R crypto/smartcont artifacts-${{ matrix.os }} - cp -R crypto/fift/lib artifacts-${{ matrix.os }} - - - name: Simple binaries test - run: | - artifacts-${{ matrix.os }}/validator-engine -V - artifacts-${{ matrix.os }}/lite-client -V - artifacts-${{ matrix.os }}/fift -V - artifacts-${{ matrix.os }}/func -V - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: ton-binaries-${{ matrix.os }} - path: artifacts-${{ matrix.os }} diff --git a/.github/workflows/win-2019-compile.yml b/.github/workflows/win-2019-compile.yml deleted file mode 100644 index e94655f7..00000000 --- a/.github/workflows/win-2019-compile.yml +++ /dev/null @@ -1,108 +0,0 @@ -name: Windows Server 2019 x64 Compile - -on: [push,workflow_dispatch,workflow_call] - -defaults: - run: - shell: cmd - -jobs: - build: - - runs-on: windows-2019 - - steps: - - name: Get Current OS version - run: | - systeminfo | findstr /B /C:"OS Name" /C:"OS Version" - - - name: Check out current repository - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - - name: Check out zlib repository - uses: actions/checkout@v3 - with: - repository: desktop-app/zlib - path: zlib - - - name: Setup msbuild.exe - uses: microsoft/setup-msbuild@v1.1 - - - name: Install Pkg-config Lite - run: choco install pkgconfiglite - - - name: Compile zlib Win64 - run: | - cd zlib\contrib\vstudio\vc14 - msbuild zlibstat.vcxproj /p:Configuration=ReleaseWithoutAsm /p:platform=x64 -p:PlatformToolset=v142 - - - name: Compile secp256k1 Win64 - run: | - git clone https://github.com/libbitcoin/secp256k1.git - cd secp256k1\builds\msvc\vs2017 - msbuild /p:Configuration=StaticRelease -p:PlatformToolset=v142 -p:Platform=x64 - - - name: Install pre-compiled libsodium Win64 - run: | - curl -Lo libsodium-1.0.18-stable-msvc.zip https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable-msvc.zip - unzip libsodium-1.0.18-stable-msvc.zip - - - name: Install pre-compiled OpenSSL 3 Win64 - run: | - curl -Lo openssl-3.1.4.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/openssl-3.1.4.zip - unzip openssl-3.1.4.zip - - - name: Install pre-compiled libmicrohttpd Win64 - run: | - curl -Lo libmicrohttpd-0.9.77-w32-bin.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/libmicrohttpd-0.9.77-w32-bin.zip - unzip libmicrohttpd-0.9.77-w32-bin.zip - - - name: Install pre-compiled Readline Win64 - run: | - curl -Lo readline-5.0-1-lib.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/readline-5.0-1-lib.zip - unzip readline-5.0-1-lib.zip - - - name: Compile - run: | - set root=%cd% - set SODIUM_DIR=%root%\libsodium - echo %root% - echo %SODIUM_DIR% - mkdir build - cd build - cmake -DSODIUM_USE_STATIC_LIBS=1 -DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include -DSECP256K1_LIBRARY=%root%\secp256k1\bin\x64\Release\v142\static\secp256k1.lib -DREADLINE_INCLUDE_DIR=%root%\readline-5.0-1-lib\include\readline -DREADLINE_LIBRARY=%root%\readline-5.0-1-lib\lib\readline.lib -DPORTABLE=1 -DZLIB_FOUND=1 -DMHD_FOUND=1 -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static -DZLIB_INCLUDE_DIR=%root%\zlib -DZLIB_LIBRARY=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=%root%/openssl-3.1.4/x64/include -DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-3.1.4/x64/lib/libcrypto_static.lib -DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj /W0" .. - cmake --build . --config Release --target storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net test-tdactor test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state - - - name: Run tests - run: | - cd build - ctest -C Release --output-on-failure -E "test-catchain|test-actors|test-validator-session-state" - - - name: Show executables - run: | - cd build - del Release\test-* - dir *.exe /a-D /S /B - dir *.dll /a-D /S /B - - - name: Check if validator-engine.exe exists - run: | - copy %cd%\build\validator-engine\Release\validator-engine.exe test - - - name: Find & copy binaries - run: | - mkdir artifacts - mkdir artifacts\smartcont - mkdir artifacts\lib - - for %%I in (build\storage\storage-daemon\Release\storage-daemon.exe build\storage\storage-daemon\Release\storage-daemon-cli.exe build\blockchain-explorer\blockchain-explorer.exe build\crypto\Release\fift.exe build\crypto\Release\tlbc.exe build\crypto\Release\func.exe build\crypto\Release\create-state.exe build\validator-engine-console\Release\validator-engine-console.exe build\tonlib\Release\tonlib-cli.exe build\tonlib\Release\tonlibjson.dll build\http\Release\http-proxy.exe build\rldp-http-proxy\Release\rldp-http-proxy.exe build\dht-server\Release\dht-server.exe build\lite-client\Release\lite-client.exe build\validator-engine\Release\validator-engine.exe build\utils\Release\generate-random-id.exe build\utils\Release\json2tlo.exe build\adnl\Release\adnl-proxy.exe build\emulator\Release\emulator.dll) do (strip -g %%I & copy %%I artifacts\) - xcopy /e /k /h /i crypto\smartcont artifacts\smartcont - xcopy /e /k /h /i crypto\fift\lib artifacts\lib - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: ton-win-binaries - path: artifacts diff --git a/.gitignore b/.gitignore index 54d9ffc7..536918ab 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,14 @@ test/regression-tests.cache/ *.swp **/*build*/ .idea -.vscode \ No newline at end of file +.vscode +zlib/ +libsodium/ +libmicrohttpd-0.9.77-w32-bin/ +readline-5.0-1-lib/ +secp256k1/ +openssl-3.1.4/ +libsodium-1.0.18-stable-msvc.zip +libmicrohttpd-0.9.77-w32-bin.zip +openssl-3.1.4.zip +readline-5.0-1-lib.zip diff --git a/CMake/FindMHD.cmake b/CMake/FindMHD.cmake index c4b94c0e..7d6dd5fd 100644 --- a/CMake/FindMHD.cmake +++ b/CMake/FindMHD.cmake @@ -2,23 +2,26 @@ # Once done this will define # # MHD_FOUND - system has MHD -# MHD_INCLUDE_DIRS - the MHD include directory +# MHD_INCLUDE_DIR - the MHD include directory # MHD_LIBRARY - Link these to use MHD -find_path( - MHD_INCLUDE_DIR - NAMES microhttpd.h - DOC "microhttpd include dir" -) +if (NOT MHD_LIBRARY) + find_path( + MHD_INCLUDE_DIR + NAMES microhttpd.h + DOC "microhttpd include dir" + ) -find_library( - MHD_LIBRARY - NAMES microhttpd microhttpd-10 libmicrohttpd libmicrohttpd-dll - DOC "microhttpd library" -) + find_library( + MHD_LIBRARY + NAMES microhttpd microhttpd-10 libmicrohttpd libmicrohttpd-dll + DOC "microhttpd library" + ) +endif() -set(MHD_INCLUDE_DIRS ${MHD_INCLUDE_DIR}) -set(MHD_LIBRARIES ${MHD_LIBRARY}) +if (MHD_LIBRARY) + message(STATUS "Found MHD: ${MHD_LIBRARY}") +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MHD DEFAULT_MSG MHD_INCLUDE_DIR MHD_LIBRARY) diff --git a/CMake/FindSecp256k1.cmake b/CMake/FindSecp256k1.cmake index 11603f15..68a37c71 100644 --- a/CMake/FindSecp256k1.cmake +++ b/CMake/FindSecp256k1.cmake @@ -2,28 +2,27 @@ # Once done this will define # # SECP256K1_FOUND - system has SECP256K1 -# SECP256K1_INCLUDE_DIRS - the SECP256K1 include directory +# SECP256K1_INCLUDE_DIR - the SECP256K1 include directory # SECP256K1_LIBRARY - Link these to use SECP256K1 -find_path( - SECP256K1_INCLUDE_DIR - NAMES secp256k1_recovery.h - DOC "secp256k1_recovery.h include dir" -) +if (NOT SECP256K1_LIBRARY) + find_path( + SECP256K1_INCLUDE_DIR + NAMES secp256k1_recovery.h + DOC "secp256k1_recovery.h include dir" + ) -find_library( - SECP256K1_LIBRARY - NAMES secp256k1 libsecp256k1 - DOC "secp256k1 library" -) + find_library( + SECP256K1_LIBRARY + NAMES secp256k1 libsecp256k1 + DOC "secp256k1 library" + ) +endif() if (SECP256K1_LIBRARY) message(STATUS "Found Secp256k1: ${SECP256K1_LIBRARY}") endif() -set(SECP256K1_INCLUDE_DIRS ${SECP256K1_INCLUDE_DIR}) -set(SECP256K1_LIBRARIES ${SECP256K1_LIBRARY}) - include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Secp256k1 DEFAULT_MSG SECP256K1_INCLUDE_DIR SECP256K1_LIBRARY) mark_as_advanced(SECP256K1_INCLUDE_DIR SECP256K1_LIBRARY) diff --git a/CMake/FindSodium.cmake b/CMake/FindSodium.cmake index 0053ac54..85194ee2 100644 --- a/CMake/FindSodium.cmake +++ b/CMake/FindSodium.cmake @@ -26,6 +26,7 @@ # Furthermore an imported "sodium" target is created. # + if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") set(_GCC_COMPATIBLE 1) diff --git a/CMakeLists.txt b/CMakeLists.txt index c6d7ed87..89be3238 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -211,7 +211,13 @@ set(CMAKE_THREAD_PREFER_PTHREAD ON) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) find_package(PkgConfig REQUIRED) -find_package(ZLIB REQUIRED) + +if (NOT ZLIB_FOUND) + find_package(ZLIB REQUIRED) +else() + message(STATUS "Using zlib ${ZLIB_LIBRARIES}") +endif() + if (TON_ARCH AND NOT MSVC) CHECK_CXX_COMPILER_FLAG( "-march=${TON_ARCH}" COMPILER_OPT_ARCH_SUPPORTED ) @@ -371,6 +377,9 @@ if (LATEX_FOUND) add_latex_document(doc/fiftbase.tex TARGET_NAME fift_basic_description) add_latex_document(doc/catchain.tex TARGET_NAME catchain_consensus_description) endif() +if (NOT LATEX_FOUND) + message(STATUS "Could NOT find LATEX (this is NOT an error)") +endif() #END internal function(target_link_libraries_system target) @@ -580,8 +589,8 @@ if (NOT NIX) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/crypto/func/auto-tests) if (WIN32) set_property(TEST test-func PROPERTY ENVIRONMENT - "FUNC_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/Release/func.exe" - "FIFT_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/Release/fift.exe" + "FUNC_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/func.exe" + "FIFT_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/fift.exe" "FIFTPATH=${CMAKE_CURRENT_SOURCE_DIR}/crypto/fift/lib/") else() set_property(TEST test-func PROPERTY ENVIRONMENT @@ -596,8 +605,8 @@ if (NOT NIX) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/crypto/func/auto-tests) if (WIN32) set_property(TEST test-func-legacy PROPERTY ENVIRONMENT - "FUNC_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/Release/func.exe" - "FIFT_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/Release/fift.exe" + "FUNC_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/func.exe" + "FIFT_EXECUTABLE=${CMAKE_CURRENT_BINARY_DIR}/crypto/fift.exe" "FIFTPATH=${CMAKE_CURRENT_SOURCE_DIR}/crypto/fift/lib/") else() set_property(TEST test-func-legacy PROPERTY ENVIRONMENT diff --git a/README.md b/README.md index 7e78bb04..653f2f83 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ __The Open Network (TON)__ is a fast, secure, scalable blockchain focused on han - To work on TON check [wallets](https://ton.app/wallets), [explorers](https://ton.app/explorers), [DEXes](https://ton.app/dex) and [utilities](https://ton.app/utilities) - To interact with TON check [APIs](https://ton.org/docs/develop/dapps/apis/) -## Updates flow: +## Updates flow * **master branch** - mainnet is running on this stable branch. @@ -61,12 +61,90 @@ Usually, the response to your pull request will indicate which section it falls * Thou shall not merge your own PRs, at least one person should review the PR and merge it (4-eyes rule) * Thou shall make sure that workflows are cleanly completed for your PR before considering merge -## Workflows responsibility -If a CI workflow fails not because of your changes but workflow issues, try to fix it yourself or contact one of the persons listed below via Telegram messenger: +## Build TON blockchain -* **C/C++ CI (ccpp-linux.yml)**: TBD -* **C/C++ CI Win64 Compile (ccpp-win64.yml)**: TBD +### Ubuntu 20.4, 22.04 (x86-64, aarch64) +Install additional system libraries +```bash + sudo apt-get update + sudo apt-get install -y build-essential git cmake ninja-build zlib1g-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev + + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 16 all +``` +Compile TON binaries +```bash + cp assembly/native/build-ubuntu-shared.sh . + chmod +x build-ubuntu-shared.sh + ./build-ubuntu-shared.sh +``` +### MacOS 11, 12 (x86-64, aarch64) +```bash + cp assembly/native/build-macos-shared.sh . + chmod +x build-macos-shared.sh + ./build-macos-shared.sh +``` + +### Windows 10, 11, Server (x86-64) +You need to install `MS Visual Studio 2022` first. +Go to https://www.visualstudio.com/downloads/ and download `MS Visual Studio 2022 Community`. + +Launch installer and select `Desktop development with C++`. +After installation, also make sure that `cmake` is globally available by adding +`C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin` to the system `PATH` (adjust the path per your needs). + +Open an elevated (Run as Administrator) `x86-64 Native Tools Command Prompt for VS 2022`, go to the root folder and execute: +```bash + copy assembly\native\build-windows.bat . + build-windows.bat +``` + +### Building TON to WebAssembly +Install additional system libraries on Ubuntu +```bash + sudo apt-get update + sudo apt-get install -y build-essential git cmake ninja-build zlib1g-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev + + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 16 all +``` +Compile TON binaries with emscripten +```bash + cd assembly/wasm + chmod +x fift-func-wasm-build-ubuntu.sh + ./fift-func-wasm-build-ubuntu.sh +``` + +### Building TON tonlib library for Android (arm64-v8a, armeabi-v7a, x86, x86-64) +Install additional system libraries on Ubuntu +```bash + sudo apt-get update + sudo apt-get install -y build-essential git cmake ninja-build automake libtool texinfo autoconf libgflags-dev \ + zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev \ + libtool autoconf libsodium-dev libsecp256k1-dev +``` +Compile TON tonlib library +```bash + cp assembly/android/build-android-tonlib.sh . + chmod +x build-android-tonlib.sh + ./build-android-tonlib.sh +``` + +### Build TON portable binaries with Nix package manager +You need to install Nix first. +```bash + sh <(curl -L https://nixos.org/nix/install) --daemon +``` +Then compile TON with Nix by executing below command from the root folder: +```bash + cp -r assembly/nix/* . + export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz + nix-build linux-x86-64-static.nix +``` +More examples for other platforms can be found under `assembly/nix`. ## Running tests diff --git a/assembly/android/build-android-tonlib.sh b/assembly/android/build-android-tonlib.sh new file mode 100644 index 00000000..e470f602 --- /dev/null +++ b/assembly/android/build-android-tonlib.sh @@ -0,0 +1,55 @@ +with_artifacts=false + +while getopts 'a' flag; do + case "${flag}" in + a) with_artifacts=true ;; + *) break + ;; + esac +done + +if [ ! -d android-ndk-r25b ]; then + rm android-ndk-r25b-linux.zip + wget -q https://dl.google.com/android/repository/android-ndk-r25b-linux.zip + unzip -q android-ndk-r25b-linux.zip + test $? -eq 0 || { echo "Can't unzip android-ndk-r25b-linux.zip"; exit 1; } + echo Android NDK extracted +else + echo Using extracted Android NDK +fi + +export JAVA_AWT_LIBRARY=NotNeeded +export JAVA_JVM_LIBRARY=NotNeeded +export JAVA_INCLUDE_PATH=${JAVA_HOME}/include +export JAVA_AWT_INCLUDE_PATH=${JAVA_HOME}/include +export JAVA_INCLUDE_PATH2=${JAVA_HOME}/include/linux + +export ANDROID_NDK_ROOT=$(pwd)/android-ndk-r25b +export NDK_PLATFORM="android-21" +export ANDROID_PLATFORM="android-21" +export OPENSSL_DIR=$(pwd)/example/android/third_party/crypto + +rm -rf example/android/src/drinkless/org/ton/TonApi.java +cd example/android/ + +rm CMakeCache.txt .ninja_* +cmake -GNinja -DTON_ONLY_TONLIB=ON . + +test $? -eq 0 || { echo "Can't configure TON"; exit 1; } + +ninja prepare_cross_compiling + +test $? -eq 0 || { echo "Can't compile prepare_cross_compiling"; exit 1; } + +rm CMakeCache.txt .ninja_* + +. ./build-all.sh + +find . -name "*.debug" -type f -delete + +if [ "$with_artifacts" = true ]; then + cd ../.. + mkdir -p artifacts/tonlib-android-jni + cp example/android/src/drinkless/org/ton/TonApi.java artifacts/tonlib-android-jni/ + cp -R example/android/libs/* artifacts/tonlib-android-jni/ +fi diff --git a/assembly/cicd/jenkins/test-builds.groovy b/assembly/cicd/jenkins/test-builds.groovy new file mode 100644 index 00000000..380efedd --- /dev/null +++ b/assembly/cicd/jenkins/test-builds.groovy @@ -0,0 +1,236 @@ +pipeline { + agent none + stages { + stage('Run Builds') { + parallel { + stage('Ubuntu 20.04 x86-64 (shared)') { + agent { + label 'Ubuntu_x86-64' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cp assembly/native/build-ubuntu-shared.sh . + chmod +x build-ubuntu-shared.sh + ./build-ubuntu-shared.sh -t -a + ''' + sh ''' + cd artifacts + zip -9r ton-x86_64-linux-shared ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-x86_64-linux-shared.zip' + } + } + } + stage('Ubuntu 20.04 x86-64 (portable)') { + agent { + label 'Ubuntu_x86-64' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cp assembly/nix/build-linux-x86-64-nix.sh . + chmod +x build-linux-x86-64-nix.sh + ./build-linux-x86-64-nix.sh + ''' + sh ''' + cd artifacts + zip -9r ton-x86-64-linux-portable ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-x86-64-linux-portable.zip' + } + } + } + stage('Ubuntu 20.04 aarch64 (shared)') { + agent { + label 'Ubuntu_arm64' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cp assembly/native/build-ubuntu-shared.sh . + chmod +x build-ubuntu-shared.sh + ./build-ubuntu-shared.sh -t -a + ''' + sh ''' + cd artifacts + zip -9r ton-arm64-linux-shared ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-arm64-linux-shared.zip' + } + } + } + stage('Ubuntu 20.04 aarch64 (portable)') { + agent { + label 'Ubuntu_arm64' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cp assembly/nix/build-linux-arm64-nix.sh . + chmod +x build-linux-arm64-nix.sh + ./build-linux-arm64-nix.sh + ''' + sh ''' + cd artifacts + zip -9r ton-arm64-linux-portable ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-arm64-linux-portable.zip' + } + } + } + stage('macOS 12.7 x86-64 (shared)') { + agent { + label 'macOS_12.7_x86-64' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cp assembly/native/build-macos-shared.sh . + chmod +x build-macos-shared.sh + ./build-macos-shared.sh -t -a + ''' + sh ''' + cd artifacts + zip -9r ton-x86-64-macos-shared ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-x86-64-macos-shared.zip' + } + } + } + stage('macOS 12.7 x86-64 (portable)') { + agent { + label 'macOS_12.7_x86-64' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cp assembly/nix/build-macos-nix.sh . + chmod +x build-macos-nix.sh + ./build-macos-nix.sh + ''' + sh ''' + cd artifacts + zip -9r ton-x86-64-macos-portable ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-x86-64-macos-portable.zip' + } + } + } + stage('macOS 12.6 aarch64 (shared)') { + agent { + label 'macOS_12.6-arm64-m1' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cp assembly/native/build-macos-shared.sh . + chmod +x build-macos-shared.sh + ./build-macos-shared.sh -t -a + ''' + sh ''' + cd artifacts + zip -9r ton-arm64-macos-m1-shared ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-arm64-macos-m1-shared.zip' + } + } + } + stage('macOS 12.6 aarch64 (portable)') { + agent { + label 'macOS_12.6-arm64-m1' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cp assembly/nix/build-macos-nix.sh . + chmod +x build-macos-nix.sh + ./build-macos-nix.sh + ''' + sh ''' + cd artifacts + zip -9r ton-arm64-macos-portable ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-arm64-macos-portable.zip' + } + } + } + stage('macOS 13.2 aarch64 (shared)') { + agent { + label 'macOS_13.2-arm64-m2' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cp assembly/native/build-macos-shared.sh . + chmod +x build-macos-shared.sh + ./build-macos-shared.sh -t -a + ''' + sh ''' + cd artifacts + zip -9r ton-arm64-macos-m2-shared ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-arm64-macos-m2-shared.zip' + } + } + } + stage('Windows Server 2022 x86-64') { + agent { + label 'Windows_x86-64' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + bat ''' + copy assembly\\native\\build-windows.bat . + build-windows.bat + ''' + bat ''' + cd artifacts + zip -9r ton-x86-64-windows ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-x86-64-windows.zip' + } + } + } + stage('Android Tonlib') { + agent { + label 'Ubuntu_x86-64' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cp assembly/android/build-android-tonlib.sh . + chmod +x build-android-tonlib.sh + ./build-android-tonlib.sh -a + ''' + sh ''' + cd artifacts/tonlib-android-jni + zip -9r ton-android-tonlib ./* + ''' + archiveArtifacts artifacts: 'artifacts/tonlib-android-jni/ton-android-tonlib.zip' + } + } + } + stage('WASM fift func emulator') { + agent { + label 'Ubuntu_x86-64' + } + steps { + timeout(time: 90, unit: 'MINUTES') { + sh ''' + cd assembly/wasm + chmod +x fift-func-wasm-build-ubuntu.sh + ./fift-func-wasm-build-ubuntu.sh -a + ''' + sh ''' + cd artifacts + zip -9r ton-wasm-binaries ./* + ''' + archiveArtifacts artifacts: 'artifacts/ton-wasm-binaries.zip' + } + } + } + } + } + } +} \ No newline at end of file diff --git a/assembly/native/build-macos-portable.sh b/assembly/native/build-macos-portable.sh new file mode 100644 index 00000000..a4187d4c --- /dev/null +++ b/assembly/native/build-macos-portable.sh @@ -0,0 +1,207 @@ +#/bin/bash + +with_tests=false +with_artifacts=false +OSX_TARGET=10.15 + + +while getopts 'tao:' flag; do + case "${flag}" in + t) with_tests=true ;; + a) with_artifacts=true ;; + o) OSX_TARGET=${OPTARG} ;; + *) break + ;; + esac +done + +if [ ! -d "build" ]; then + mkdir build + cd build +else + cd build + rm -rf .ninja* CMakeCache.txt +fi + +export NONINTERACTIVE=1 +brew install ninja pkg-config automake libtool autoconf +brew install llvm@16 + + +if [ -f /opt/homebrew/opt/llvm@16/bin/clang ]; then + export CC=/opt/homebrew/opt/llvm@16/bin/clang + export CXX=/opt/homebrew/opt/llvm@16/bin/clang++ +else + export CC=/usr/local/opt/llvm@16/bin/clang + export CXX=/usr/local/opt/llvm@16/bin/clang++ +fi +export CCACHE_DISABLE=1 + +if [ ! -d "secp256k1" ]; then +git clone https://github.com/bitcoin-core/secp256k1.git +cd secp256k1 +secp256k1Path=`pwd` +git checkout v0.3.2 +./autogen.sh +./configure --enable-module-recovery --enable-static --disable-tests --disable-benchmark --with-pic +make -j12 +test $? -eq 0 || { echo "Can't compile secp256k1"; exit 1; } +cd .. +else + secp256k1Path=$(pwd)/secp256k1 + echo "Using compiled secp256k1" +fi + +if [ ! -d "libsodium" ]; then + export LIBSODIUM_FULL_BUILD=1 + git clone https://github.com/jedisct1/libsodium.git + cd libsodium + sodiumPath=`pwd` + git checkout 1.0.18 + ./autogen.sh + ./configure --with-pic --enable-static + make -j12 + test $? -eq 0 || { echo "Can't compile libsodium"; exit 1; } + cd .. +else + sodiumPath=$(pwd)/libsodium + echo "Using compiled libsodium" +fi + +if [ ! -d "openssl_3" ]; then + git clone https://github.com/openssl/openssl openssl_3 + cd openssl_3 + opensslPath=`pwd` + git checkout openssl-3.1.4 + ./config -static + make build_libs -j12 + test $? -eq 0 || { echo "Can't compile openssl_3"; exit 1; } + cd .. +else + opensslPath=$(pwd)/openssl_3 + echo "Using compiled openssl_3" +fi + +if [ ! -d "zlib" ]; then + git clone https://github.com/madler/zlib.git + cd zlib + zlibPath=`pwd` + ./configure --static + make -j12 + test $? -eq 0 || { echo "Can't compile zlib"; exit 1; } + cd .. +else + zlibPath=$(pwd)/zlib + echo "Using compiled zlib" +fi + +if [ ! -d "libmicrohttpd" ]; then + git clone https://git.gnunet.org/libmicrohttpd.git + cd libmicrohttpd + libmicrohttpdPath=`pwd` + ./autogen.sh + ./configure --enable-static --disable-tests --disable-benchmark --disable-shared --disable-https --with-pic + make -j12 + test $? -eq 0 || { echo "Can't compile libmicrohttpd"; exit 1; } + cd .. +else + libmicrohttpdPath=$(pwd)/libmicrohttpd + echo "Using compiled libmicrohttpd" +fi + +cmake -GNinja .. \ +-DPORTABLE=1 \ +-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=$OSX_TARGET \ +-DCMAKE_CXX_FLAGS="-stdlib=libc++" \ +-DCMAKE_BUILD_TYPE=Release \ +-DOPENSSL_FOUND=1 \ +-DOPENSSL_INCLUDE_DIR=$opensslPath/include \ +-DOPENSSL_CRYPTO_LIBRARY=$opensslPath/libcrypto.a \ +-DZLIB_FOUND=1 \ +-DZLIB_INCLUDE_DIR=$zlibPath \ +-DZLIB_LIBRARIES=$zlibPath/libz.a \ +-DSECP256K1_FOUND=1 \ +-DSECP256K1_INCLUDE_DIR=$secp256k1Path/include \ +-DSECP256K1_LIBRARY=$secp256k1Path/.libs/libsecp256k1.a \ +-DSODIUM_FOUND=1 \ +-DSODIUM_INCLUDE_DIR=$sodiumPath/src/libsodium/include \ +-DSODIUM_LIBRARY_RELEASE=$sodiumPath/src/libsodium/.libs/libsodium.a \ +-DMHD_FOUND=1 \ +-DMHD_INCLUDE_DIR=$libmicrohttpdPath/src/include \ +-DMHD_LIBRARY=$libmicrohttpdPath/src/microhttpd/.libs/libmicrohttpd.a + + +test $? -eq 0 || { echo "Can't configure ton"; exit 1; } + +if [ "$with_tests" = true ]; then + ninja storage-daemon storage-daemon-cli blockchain-explorer \ + tonlib tonlibjson tonlib-cli validator-engine func fift \ + lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server \ + http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator \ + test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont \ + test-net test-tdactor test-tdutils test-tonlib-offline test-adnl test-dht test-rldp \ + test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state + test $? -eq 0 || { echo "Can't compile ton"; exit 1; } +else + ninja storage-daemon storage-daemon-cli blockchain-explorer \ + tonlib tonlibjson tonlib-cli validator-engine func fift \ + lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server \ + http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator + test $? -eq 0 || { echo "Can't compile ton"; exit 1; } +fi + +strip storage/storage-daemon/storage-daemon +strip storage/storage-daemon/storage-daemon-cli +strip blockchain-explorer/blockchain-explorer +strip crypto/fift +strip crypto/func +strip crypto/create-state +strip crypto/tlbc +strip validator-engine-console/validator-engine-console +strip tonlib/tonlib-cli +strip http/http-proxy +strip rldp-http-proxy/rldp-http-proxy +strip dht-server/dht-server +strip lite-client/lite-client +strip validator-engine/validator-engine +strip utils/generate-random-id +strip utils/json2tlo +strip adnl/adnl-proxy + +cd .. + +if [ "$with_artifacts" = true ]; then + echo Creating artifacts... + rm -rf artifacts + mkdir artifacts + cp crypto/fift/lib artifacts/ + cp -R crypto/smartcont/ artifacts/ + cp build/storage/storage-daemon/storage-daemon artifacts/ + cp build/storage/storage-daemon/storage-daemon-cli artifacts/ + cp build/blockchain-explorer/blockchain-explorer artifacts/ + cp build/crypto/fift artifacts/ + cp build/crypto/func artifacts/ + cp build/crypto/create-state artifacts/ + cp build/crypto/tlbc artifacts/ + cp build/validator-engine-console/validator-engine-console artifacts/ + cp build/tonlib/tonlib-cli artifacts/ + cp build/tonlib/libtonlibjson.0.5.dylib artifacts/libtonlibjson.dylib + cp build/http/http-proxy artifacts/ + cp build/rldp-http-proxy/rldp-http-proxy artifacts/ + cp build/dht-server/dht-server artifacts/ + cp build/lite-client/lite-client artifacts/ + cp build/validator-engine/validator-engine artifacts/ + cp build/utils/generate-random-id artifacts/ + cp build/utils/json2tlo artifacts/ + cp build/adnl/adnl-proxy artifacts/ + cp build/emulator/libemulator.dylib artifacts/ + chmod +x artifacts/* + rsync -r crypto/smartcont artifacts/ + rsync -r crypto/fift/lib artifacts/ +fi + +if [ "$with_tests" = true ]; then + cd build +# ctest --output-on-failure -E "test-catchain|test-actors" + ctest --output-on-failure +fi diff --git a/assembly/native/build-macos-shared.sh b/assembly/native/build-macos-shared.sh new file mode 100644 index 00000000..7b4f90ee --- /dev/null +++ b/assembly/native/build-macos-shared.sh @@ -0,0 +1,136 @@ +#/bin/bash + +with_tests=false +with_artifacts=false +OSX_TARGET=10.15 + + +while getopts 'tao:' flag; do + case "${flag}" in + t) with_tests=true ;; + a) with_artifacts=true ;; + o) OSX_TARGET=${OPTARG} ;; + *) break + ;; + esac +done + +if [ ! -d "build" ]; then + mkdir build + cd build +else + cd build + rm -rf .ninja* CMakeCache.txt +fi + +export NONINTERACTIVE=1 +brew install ninja libsodium libmicrohttpd pkg-config automake libtool autoconf gnutls +brew install llvm@16 + +if [ -f /opt/homebrew/opt/llvm@16/bin/clang ]; then + export CC=/opt/homebrew/opt/llvm@16/bin/clang + export CXX=/opt/homebrew/opt/llvm@16/bin/clang++ +else + export CC=/usr/local/opt/llvm@16/bin/clang + export CXX=/usr/local/opt/llvm@16/bin/clang++ +fi +export CCACHE_DISABLE=1 + +if [ ! -d "secp256k1" ]; then + git clone https://github.com/bitcoin-core/secp256k1.git + cd secp256k1 + secp256k1Path=`pwd` + git checkout v0.3.2 + ./autogen.sh + ./configure --enable-module-recovery --enable-static --disable-tests --disable-benchmark + make -j12 + test $? -eq 0 || { echo "Can't compile secp256k1"; exit 1; } + cd .. +else + secp256k1Path=$(pwd)/secp256k1 + echo "Using compiled secp256k1" +fi + +brew unlink openssl@1.1 +brew install openssl@3 +brew unlink openssl@3 && brew link --overwrite openssl@3 + +cmake -GNinja -DCMAKE_BUILD_TYPE=Release .. \ +-DCMAKE_CXX_FLAGS="-stdlib=libc++" \ +-DSECP256K1_FOUND=1 \ +-DSECP256K1_INCLUDE_DIR=$secp256k1Path/include \ +-DSECP256K1_LIBRARY=$secp256k1Path/.libs/libsecp256k1.a + +test $? -eq 0 || { echo "Can't configure ton"; exit 1; } + +if [ "$with_tests" = true ]; then + ninja storage-daemon storage-daemon-cli blockchain-explorer \ + tonlib tonlibjson tonlib-cli validator-engine func fift \ + lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server \ + http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator \ + test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont \ + test-net test-tdactor test-tdutils test-tonlib-offline test-adnl test-dht test-rldp \ + test-rldp2 test-catchain test-fec test-tddb test-db test-validator-session-state + test $? -eq 0 || { echo "Can't compile ton"; exit 1; } +else + ninja storage-daemon storage-daemon-cli blockchain-explorer \ + tonlib tonlibjson tonlib-cli validator-engine func fift \ + lite-client pow-miner validator-engine-console generate-random-id json2tlo dht-server \ + http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork tlbc emulator + test $? -eq 0 || { echo "Can't compile ton"; exit 1; } +fi + + +strip storage/storage-daemon/storage-daemon +strip storage/storage-daemon/storage-daemon-cli +strip blockchain-explorer/blockchain-explorer +strip crypto/fift +strip crypto/func +strip crypto/create-state +strip crypto/tlbc +strip validator-engine-console/validator-engine-console +strip tonlib/tonlib-cli +strip http/http-proxy +strip rldp-http-proxy/rldp-http-proxy +strip dht-server/dht-server +strip lite-client/lite-client +strip validator-engine/validator-engine +strip utils/generate-random-id +strip utils/json2tlo +strip adnl/adnl-proxy + +cd .. + +if [ "$with_artifacts" = true ]; then + echo Creating artifacts... + rm -rf artifacts + mkdir artifacts + cp build/storage/storage-daemon/storage-daemon artifacts/ + cp build/storage/storage-daemon/storage-daemon-cli artifacts/ + cp build/blockchain-explorer/blockchain-explorer artifacts/ + cp build/crypto/fift artifacts/ + cp build/crypto/func artifacts/ + cp build/crypto/create-state artifacts/ + cp build/crypto/tlbc artifacts/ + cp build/validator-engine-console/validator-engine-console artifacts/ + cp build/tonlib/tonlib-cli artifacts/ + cp build/tonlib/libtonlibjson.0.5.dylib artifacts/libtonlibjson.dylib + cp build/http/http-proxy artifacts/ + cp build/rldp-http-proxy/rldp-http-proxy artifacts/ + cp build/dht-server/dht-server artifacts/ + cp build/lite-client/lite-client artifacts/ + cp build/validator-engine/validator-engine artifacts/ + cp build/utils/generate-random-id artifacts/ + cp build/utils/json2tlo artifacts/ + cp build/adnl/adnl-proxy artifacts/ + cp build/emulator/libemulator.dylib artifacts/ + chmod +x artifacts/* + rsync -r crypto/smartcont artifacts/ + rsync -r crypto/fift/lib artifacts/ +fi + +if [ "$with_tests" = true ]; then + cd build +# ctest --output-on-failure -E "test-catchain|test-actors" + ctest --output-on-failure --timeout 1800 +fi diff --git a/assembly/native/build-ubuntu-portable.sh b/assembly/native/build-ubuntu-portable.sh new file mode 100644 index 00000000..81dbe710 --- /dev/null +++ b/assembly/native/build-ubuntu-portable.sh @@ -0,0 +1,198 @@ +#/bin/bash + +#sudo apt-get update +#sudo apt-get install -y build-essential git cmake ninja-build automake libtool texinfo autoconf + +with_tests=false +with_artifacts=false + + +while getopts 'ta' flag; do + case "${flag}" in + t) with_tests=true ;; + a) with_artifacts=true ;; + *) break + ;; + esac +done + +if [ ! -d "build" ]; then + mkdir build + cd build +else + cd build + rm -rf .ninja* CMakeCache.txt +fi + +export CC=$(which clang-16) +export CXX=$(which clang++-16) +export CCACHE_DISABLE=1 + + +if [ ! -d "secp256k1" ]; then +git clone https://github.com/bitcoin-core/secp256k1.git +cd secp256k1 +secp256k1Path=`pwd` +git checkout v0.3.2 +./autogen.sh +./configure --enable-module-recovery --enable-static --disable-tests --disable-benchmark --with-pic +make -j12 +test $? -eq 0 || { echo "Can't compile secp256k1"; exit 1; } +cd .. +# ./.libs/libsecp256k1.a +# ./include +else + secp256k1Path=$(pwd)/secp256k1 + echo "Using compiled secp256k1" +fi + +if [ ! -d "libsodium" ]; then + export LIBSODIUM_FULL_BUILD=1 + git clone https://github.com/jedisct1/libsodium.git + cd libsodium + sodiumPath=`pwd` + git checkout 1.0.18 + ./autogen.sh + ./configure --with-pic --enable-static + make -j12 + test $? -eq 0 || { echo "Can't compile libsodium"; exit 1; } + cd .. +else + sodiumPath=$(pwd)/libsodium + echo "Using compiled libsodium" +fi + +if [ ! -d "openssl_3" ]; then + git clone https://github.com/openssl/openssl openssl_3 + cd openssl_3 + opensslPath=`pwd` + git checkout openssl-3.1.4 + ./config -static + make build_libs -j12 + test $? -eq 0 || { echo "Can't compile openssl_3"; exit 1; } + cd .. +else + opensslPath=$(pwd)/openssl_3 + echo "Using compiled openssl_3" +fi + +if [ ! -d "zlib" ]; then + git clone https://github.com/madler/zlib.git + cd zlib + zlibPath=`pwd` + ./configure --static + make -j12 + test $? -eq 0 || { echo "Can't compile zlib"; exit 1; } + cd .. +else + zlibPath=$(pwd)/zlib + echo "Using compiled zlib" +fi + +if [ ! -d "libmicrohttpd" ]; then + git clone https://git.gnunet.org/libmicrohttpd.git + cd libmicrohttpd + libmicrohttpdPath=`pwd` + ./autogen.sh + ./configure --enable-static --disable-tests --disable-benchmark --disable-shared --disable-https --with-pic + make -j12 + test $? -eq 0 || { echo "Can't compile libmicrohttpd"; exit 1; } + cd .. +else + libmicrohttpdPath=$(pwd)/libmicrohttpd + echo "Using compiled libmicrohttpd" +fi + +cmake -GNinja .. \ +-DPORTABLE=1 \ +-DCMAKE_BUILD_TYPE=Release \ +-DOPENSSL_FOUND=1 \ +-DOPENSSL_INCLUDE_DIR=$opensslPath/include \ +-DOPENSSL_CRYPTO_LIBRARY=$opensslPath/libcrypto.a \ +-DZLIB_FOUND=1 \ +-DZLIB_INCLUDE_DIR=$zlibPath \ +-DZLIB_LIBRARIES=$zlibPath/libz.a \ +-DSECP256K1_FOUND=1 \ +-DSECP256K1_INCLUDE_DIR=$secp256k1Path/include \ +-DSECP256K1_LIBRARY=$secp256k1Path/.libs/libsecp256k1.a \ +-DSODIUM_FOUND=1 \ +-DSODIUM_INCLUDE_DIR=$sodiumPath/src/libsodium/include \ +-DSODIUM_LIBRARY_RELEASE=$sodiumPath/src/libsodium/.libs/libsodium.a \ +-DMHD_FOUND=1 \ +-DMHD_INCLUDE_DIR=$libmicrohttpdPath/src/include \ +-DMHD_LIBRARY=$libmicrohttpdPath/src/microhttpd/.libs/libmicrohttpd.a + + +test $? -eq 0 || { echo "Can't configure ton"; exit 1; } + +if [ "$with_tests" = true ]; then +ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli \ + validator-engine lite-client pow-miner validator-engine-console blockchain-explorer \ + generate-random-id json2tlo dht-server http-proxy rldp-http-proxy \ + adnl-proxy create-state emulator test-ed25519 test-ed25519-crypto test-bigint \ + test-vm test-fift test-cells test-smartcont test-net test-tdactor test-tdutils \ + test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain \ + test-fec test-tddb test-db test-validator-session-state + test $? -eq 0 || { echo "Can't compile ton"; exit 1; } +else +ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli \ + validator-engine lite-client pow-miner validator-engine-console blockchain-explorer \ + generate-random-id json2tlo dht-server http-proxy rldp-http-proxy \ + adnl-proxy create-state emulator + test $? -eq 0 || { echo "Can't compile ton"; exit 1; } +fi + +strip -g storage/storage-daemon/storage-daemon \ + storage/storage-daemon/storage-daemon-cli \ + blockchain-explorer/blockchain-explorer \ + crypto/fift \ + crypto/tlbc \ + crypto/func \ + crypto/create-state \ + validator-engine-console/validator-engine-console \ + tonlib/tonlib-cli \ + tonlib/libtonlibjson.so.0.5 \ + http/http-proxy \ + rldp-http-proxy/rldp-http-proxy \ + dht-server/dht-server \ + lite-client/lite-client \ + validator-engine/validator-engine \ + utils/generate-random-id \ + utils/json2tlo \ + adnl/adnl-proxy \ + emulator/libemulator.* + +test $? -eq 0 || { echo "Can't strip final binaries"; exit 1; } + +# simple binaries' test +./storage/storage-daemon/storage-daemon -V || exit 1 +./validator-engine/validator-engine -V || exit 1 +./lite-client/lite-client -V || exit 1 +./crypto/fift -V || exit 1 + +cd .. + +if [ "$with_artifacts" = true ]; then + rm -rf artifacts + mkdir artifacts + cp crypto/fift/lib artifacts/ + cp -R crypto/smartcont/ artifacts/ + mv build/tonlib/libtonlibjson.so.0.5 build/tonlib/libtonlibjson.so + cp build/storage/storage-daemon/storage-daemon build/storage/storage-daemon/storage-daemon-cli \ + build/crypto/fift build/crypto/tlbc build/crypto/func build/crypto/create-state build/blockchain-explorer/blockchain-explorer \ + build/validator-engine-console/validator-engine-console build/tonlib/tonlib-cli \ + build/tonlib/libtonlibjson.so build/http/http-proxy build/rldp-http-proxy/rldp-http-proxy \ + build/dht-server/dht-server build/lite-client/lite-client build/validator-engine/validator-engine \ + build/utils/generate-random-id build/utils/json2tlo build/adnl/adnl-proxy build/emulator/libemulator.so \ + artifacts + test $? -eq 0 || { echo "Can't copy final binaries"; exit 1; } + chmod +x artifacts/* + cp -R crypto/smartcont artifacts + cp -R crypto/fift/lib artifacts +fi + +if [ "$with_tests" = true ]; then + cd build +# ctest --output-on-failure -E "test-catchain|test-actors|test-smartcont|test-adnl|test-validator-session-state|test-dht|test-rldp" + ctest --output-on-failure -E "test-adnl" +fi diff --git a/assembly/native/build-ubuntu-shared.sh b/assembly/native/build-ubuntu-shared.sh new file mode 100644 index 00000000..12c819cd --- /dev/null +++ b/assembly/native/build-ubuntu-shared.sh @@ -0,0 +1,122 @@ +#/bin/bash + +#sudo apt-get update +#sudo apt-get install -y build-essential git cmake ninja-build zlib1g-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev + +with_tests=false +with_artifacts=false + + +while getopts 'ta' flag; do + case "${flag}" in + t) with_tests=true ;; + a) with_artifacts=true ;; + *) break + ;; + esac +done + +if [ ! -d "build" ]; then + mkdir build + cd build +else + cd build + rm -rf .ninja* CMakeCache.txt +fi + +export CC=$(which clang-16) +export CXX=$(which clang++-16) +export CCACHE_DISABLE=1 + +if [ ! -d "openssl_3" ]; then + git clone https://github.com/openssl/openssl openssl_3 + cd openssl_3 + opensslPath=`pwd` + git checkout openssl-3.1.4 + ./config + make build_libs -j12 + test $? -eq 0 || { echo "Can't compile openssl_3"; exit 1; } + cd .. +else + opensslPath=$(pwd)/openssl_3 + echo "Using compiled openssl_3" +fi + +cmake -GNinja .. \ +-DCMAKE_BUILD_TYPE=Release \ +-DOPENSSL_ROOT_DIR=$opensslPath \ +-DOPENSSL_INCLUDE_DIR=$opensslPath/include \ +-DOPENSSL_CRYPTO_LIBRARY=$opensslPath/libcrypto.so + + +test $? -eq 0 || { echo "Can't configure ton"; exit 1; } + +if [ "$with_tests" = true ]; then +ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli \ + validator-engine lite-client pow-miner validator-engine-console blockchain-explorer \ + generate-random-id json2tlo dht-server http-proxy rldp-http-proxy \ + adnl-proxy create-state emulator test-ed25519 test-ed25519-crypto test-bigint \ + test-vm test-fift test-cells test-smartcont test-net test-tdactor test-tdutils \ + test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain \ + test-fec test-tddb test-db test-validator-session-state + test $? -eq 0 || { echo "Can't compile ton"; exit 1; } +else +ninja storage-daemon storage-daemon-cli fift func tonlib tonlibjson tonlib-cli \ + validator-engine lite-client pow-miner validator-engine-console blockchain-explorer \ + generate-random-id json2tlo dht-server http-proxy rldp-http-proxy \ + adnl-proxy create-state emulator + test $? -eq 0 || { echo "Can't compile ton"; exit 1; } +fi + +strip -g storage/storage-daemon/storage-daemon \ + storage/storage-daemon/storage-daemon-cli \ + blockchain-explorer/blockchain-explorer \ + crypto/fift \ + crypto/tlbc \ + crypto/func \ + crypto/create-state \ + validator-engine-console/validator-engine-console \ + tonlib/tonlib-cli \ + tonlib/libtonlibjson.so.0.5 \ + http/http-proxy \ + rldp-http-proxy/rldp-http-proxy \ + dht-server/dht-server \ + lite-client/lite-client \ + validator-engine/validator-engine \ + utils/generate-random-id \ + utils/json2tlo \ + adnl/adnl-proxy \ + emulator/libemulator.* + +test $? -eq 0 || { echo "Can't strip final binaries"; exit 1; } + +# simple binaries' test +./storage/storage-daemon/storage-daemon -V || exit 1 +./validator-engine/validator-engine -V || exit 1 +./lite-client/lite-client -V || exit 1 +./crypto/fift -V || exit 1 + +cd .. + +if [ "$with_artifacts" = true ]; then + rm -rf artifacts + mkdir artifacts + mv build/tonlib/libtonlibjson.so.0.5 build/tonlib/libtonlibjson.so + cp build/storage/storage-daemon/storage-daemon build/storage/storage-daemon/storage-daemon-cli \ + build/crypto/fift build/crypto/tlbc build/crypto/func build/crypto/create-state build/blockchain-explorer/blockchain-explorer \ + build/validator-engine-console/validator-engine-console build/tonlib/tonlib-cli \ + build/tonlib/libtonlibjson.so build/http/http-proxy build/rldp-http-proxy/rldp-http-proxy \ + build/dht-server/dht-server build/lite-client/lite-client build/validator-engine/validator-engine \ + build/utils/generate-random-id build/utils/json2tlo build/adnl/adnl-proxy build/emulator/libemulator.so \ + artifacts + test $? -eq 0 || { echo "Can't copy final binaries"; exit 1; } + chmod +x artifacts/* + cp -R crypto/smartcont artifacts + cp -R crypto/fift/lib artifacts +fi + +if [ "$with_tests" = true ]; then + cd build +# ctest --output-on-failure -E "test-catchain|test-actors|test-smartcont|test-adnl|test-validator-session-state|test-dht|test-rldp" + ctest --output-on-failure --timeout 1800 +fi \ No newline at end of file diff --git a/assembly/native/build-windows-github.bat b/assembly/native/build-windows-github.bat new file mode 100644 index 00000000..7cad8c7e --- /dev/null +++ b/assembly/native/build-windows-github.bat @@ -0,0 +1,2 @@ +call "C:\Program Files\Microsoft Visual Studio\2022\%1\VC\Auxiliary\Build\vcvars64.bat" +call build-windows.bat -t \ No newline at end of file diff --git a/assembly/native/build-windows.bat b/assembly/native/build-windows.bat new file mode 100644 index 00000000..2e3f2082 --- /dev/null +++ b/assembly/native/build-windows.bat @@ -0,0 +1,193 @@ +REM execute this script inside elevated (Run as Administrator) console "x64 Native Tools Command Prompt for VS 2022" + +echo off + +echo Installing chocolatey windows package manager... +@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" +choco -? +IF %errorlevel% NEQ 0 ( + echo Can't install chocolatey + exit /b %errorlevel% +) + +choco feature enable -n allowEmptyChecksums + +echo Installing pkgconfiglite... +choco install -y pkgconfiglite +IF errorlevel 1 ( + echo Can't install pkgconfiglite + exit /b %errorlevel% +) + +echo Installing ninja... +choco install -y ninja +IF errorlevel 1 ( + echo Can't install ninja + exit /b %errorlevel% +) + +if not exist "zlib" ( +git clone https://github.com/madler/zlib.git +cd zlib\contrib\vstudio\vc14 +msbuild zlibstat.vcxproj /p:Configuration=ReleaseWithoutAsm /p:platform=x64 -p:PlatformToolset=v143 + +IF errorlevel 1 ( + echo Can't install zlib + exit /b %errorlevel% +) +cd ..\..\..\.. +) else ( +echo Using zlib... +) + +if not exist "secp256k1" ( +git clone https://github.com/libbitcoin/secp256k1.git +cd secp256k1\builds\msvc\vs2017 +msbuild /p:Configuration=StaticRelease -p:PlatformToolset=v143 -p:Platform=x64 +IF errorlevel 1 ( + echo Can't install secp256k1 + exit /b %errorlevel% +) +cd ..\..\..\.. +) else ( +echo Using secp256k1... +) + + +if not exist "libsodium" ( +curl -Lo libsodium-1.0.18-stable-msvc.zip https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable-msvc.zip +IF errorlevel 1 ( + echo Can't download libsodium + exit /b %errorlevel% +) +unzip libsodium-1.0.18-stable-msvc.zip +) else ( +echo Using libsodium... +) + +if not exist "openssl-3.1.4" ( +curl -Lo openssl-3.1.4.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/openssl-3.1.4.zip +IF errorlevel 1 ( + echo Can't download OpenSSL + exit /b %errorlevel% +) +unzip -q openssl-3.1.4.zip +) else ( +echo Using openssl... +) + +if not exist "libmicrohttpd-0.9.77-w32-bin" ( +curl -Lo libmicrohttpd-0.9.77-w32-bin.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/libmicrohttpd-0.9.77-w32-bin.zip +IF errorlevel 1 ( + echo Can't download libmicrohttpd + exit /b %errorlevel% +) +unzip -q libmicrohttpd-0.9.77-w32-bin.zip +) else ( +echo Using libmicrohttpd... +) + +if not exist "readline-5.0-1-lib" ( +curl -Lo readline-5.0-1-lib.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/readline-5.0-1-lib.zip +IF errorlevel 1 ( + echo Can't download readline + exit /b %errorlevel% +) +unzip -q -d readline-5.0-1-lib readline-5.0-1-lib.zip +) else ( +echo Using readline... +) + + +set root=%cd% +echo %root% +set SODIUM_DIR=%root%\libsodium + +mkdir build +cd build +cmake -GNinja -DCMAKE_BUILD_TYPE=Release ^ +-DPORTABLE=1 ^ +-DSODIUM_USE_STATIC_LIBS=1 ^ +-DSECP256K1_FOUND=1 ^ +-DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include ^ +-DSECP256K1_LIBRARY=%root%\secp256k1\bin\x64\Release\v143\static\secp256k1.lib ^ +-DMHD_FOUND=1 ^ +-DMHD_LIBRARY=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib ^ +-DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static ^ +-DZLIB_FOUND=1 ^ +-DZLIB_INCLUDE_DIR=%root%\zlib ^ +-DZLIB_LIBRARIES=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib ^ +-DOPENSSL_FOUND=1 ^ +-DOPENSSL_INCLUDE_DIR=%root%/openssl-3.1.4/x64/include ^ +-DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-3.1.4/x64/lib/libcrypto_static.lib ^ +-DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj" .. +IF errorlevel 1 ( + echo Can't configure TON + exit /b %errorlevel% +) + +IF "%1"=="-t" ( +ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson ^ +tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id ^ +json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator ^ +test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net ^ +test-tdactor test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain ^ +test-fec test-tddb test-db test-validator-session-state +IF errorlevel 1 ( + echo Can't compile TON + exit /b %errorlevel% +) +) else ( +ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson ^ +tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id ^ +json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator +IF errorlevel 1 ( + echo Can't compile TON + exit /b %errorlevel% +) +) + +copy validator-engine\validator-engine.exe test +IF errorlevel 1 ( + echo validator-engine.exe does not exist + exit /b %errorlevel% +) + +IF "%1"=="-t" ( + echo Running tests... +REM ctest -C Release --output-on-failure -E "test-catchain|test-actors|test-validator-session-state" + ctest -C Release --output-on-failure --timeout 1800 + IF errorlevel 1 ( + echo Some tests failed + exit /b %errorlevel% + ) +) + + +echo Creating artifacts... +cd .. +mkdir artifacts +mkdir artifacts\smartcont +mkdir artifacts\lib + +for %%I in (build\storage\storage-daemon\storage-daemon.exe ^ +build\storage\storage-daemon\storage-daemon-cli.exe ^ +build\blockchain-explorer\blockchain-explorer.exe ^ +build\crypto\fift.exe ^ +build\crypto\tlbc.exe ^ +build\crypto\func.exe ^ +build\crypto\create-state.exe ^ +build\validator-engine-console\validator-engine-console.exe ^ +build\tonlib\tonlib-cli.exe ^ +build\tonlib\tonlibjson.dll ^ +build\http\http-proxy.exe ^ +build\rldp-http-proxy\rldp-http-proxy.exe ^ +build\dht-server\dht-server.exe ^ +build\lite-client\lite-client.exe ^ +build\validator-engine\validator-engine.exe ^ +build\utils\generate-random-id.exe ^ +build\utils\json2tlo.exe ^ +build\adnl\adnl-proxy.exe ^ +build\emulator\emulator.dll) do (strip -g %%I & copy %%I artifacts\) +xcopy /e /k /h /i crypto\smartcont artifacts\smartcont +xcopy /e /k /h /i crypto\fift\lib artifacts\lib diff --git a/assembly/nix/build-linux-arm64-nix.sh b/assembly/nix/build-linux-arm64-nix.sh new file mode 100644 index 00000000..bb859141 --- /dev/null +++ b/assembly/nix/build-linux-arm64-nix.sh @@ -0,0 +1,20 @@ +#/bin/bash + +nix-build --version +test $? -eq 0 || { echo "Nix is not installed!"; exit 1; } + +cp assembly/nix/linux-arm64* . +cp assembly/nix/microhttpd.nix . +cp assembly/nix/openssl.nix . +export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz + +nix-build linux-arm64-static.nix +mkdir artifacts +cp ./result/bin/* artifacts/ +chmod +x artifacts/* +rm -rf result +nix-build linux-arm64-tonlib.nix +cp ./result/lib/libtonlibjson.so.0.5 artifacts/libtonlibjson.so +cp ./result/lib/libemulator.so artifacts/ +cp -r crypto/fift/lib artifacts/ +cp -r crypto/smartcont artifacts/ \ No newline at end of file diff --git a/assembly/nix/build-linux-x86-64-nix.sh b/assembly/nix/build-linux-x86-64-nix.sh new file mode 100644 index 00000000..eca6fe58 --- /dev/null +++ b/assembly/nix/build-linux-x86-64-nix.sh @@ -0,0 +1,20 @@ +#/bin/bash + +nix-build --version +test $? -eq 0 || { echo "Nix is not installed!"; exit 1; } + +cp assembly/nix/linux-x86-64* . +cp assembly/nix/microhttpd.nix . +cp assembly/nix/openssl.nix . +export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz + +nix-build linux-x86-64-static.nix +mkdir artifacts +cp ./result/bin/* artifacts/ +chmod +x artifacts/* +rm -rf result +nix-build linux-x86-64-tonlib.nix +cp ./result/lib/libtonlibjson.so.0.5 artifacts/libtonlibjson.so +cp ./result/lib/libemulator.so artifacts/ +cp -r crypto/fift/lib artifacts/ +cp -r crypto/smartcont artifacts/ \ No newline at end of file diff --git a/assembly/nix/build-macos-nix.sh b/assembly/nix/build-macos-nix.sh new file mode 100644 index 00000000..fdf674a6 --- /dev/null +++ b/assembly/nix/build-macos-nix.sh @@ -0,0 +1,17 @@ +#/bin/bash + +nix-build --version +test $? -eq 0 || { echo "Nix is not installed!"; exit 1; } + +cp assembly/nix/macos-* . +export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz +nix-build macos-static.nix +mkdir artifacts +cp ./result-bin/bin/* artifacts/ +chmod +x artifacts/* +rm -rf result-bin +nix-build macos-tonlib.nix +cp ./result/lib/libtonlibjson.dylib artifacts/ +cp ./result/lib/libemulator.dylib artifacts/ +cp -r crypto/fift/lib artifacts/ +cp -r crypto/smartcont artifacts/ \ No newline at end of file diff --git a/flake.lock b/assembly/nix/flakes/flake.lock similarity index 100% rename from flake.lock rename to assembly/nix/flakes/flake.lock diff --git a/flake.nix b/assembly/nix/flakes/flake.nix similarity index 100% rename from flake.nix rename to assembly/nix/flakes/flake.nix diff --git a/shell.nix b/assembly/nix/flakes/shell.nix similarity index 100% rename from shell.nix rename to assembly/nix/flakes/shell.nix diff --git a/assembly/nix/linux-arm64-static.nix b/assembly/nix/linux-arm64-static.nix new file mode 100644 index 00000000..616dfba5 --- /dev/null +++ b/assembly/nix/linux-arm64-static.nix @@ -0,0 +1,45 @@ +# export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz + +{ pkgs ? import { system = builtins.currentSystem; } +, lib ? pkgs.lib +, stdenv ? pkgs.stdenv +}: +let + microhttpdmy = (import ./microhttpd.nix) {}; +in +with import microhttpdmy; +stdenv.mkDerivation { + pname = "ton"; + version = "dev-bin"; + + src = ./.; + + nativeBuildInputs = with pkgs; + [ + cmake ninja git pkg-config + ]; + + buildInputs = with pkgs; + [ + pkgsStatic.openssl microhttpdmy pkgsStatic.zlib pkgsStatic.libsodium.dev pkgsStatic.secp256k1 glibc.static + ]; + + makeStatic = true; + doCheck = true; + + cmakeFlags = [ + "-DTON_USE_ABSEIL=OFF" + "-DNIX=ON" + "-DBUILD_SHARED_LIBS=OFF" + "-DCMAKE_LINK_SEARCH_START_STATIC=ON" + "-DCMAKE_LINK_SEARCH_END_STATIC=ON" + "-DMHD_FOUND=1" + "-DMHD_INCLUDE_DIR=${microhttpdmy}/usr/local/include" + "-DMHD_LIBRARY=${microhttpdmy}/usr/local/lib/libmicrohttpd.a" + "-DCMAKE_CTEST_ARGUMENTS=--timeout;1800" + ]; + + LDFLAGS = [ + "-static-libgcc" "-static-libstdc++" "-static" + ]; +} diff --git a/assembly/nix/linux-arm64-tonlib.nix b/assembly/nix/linux-arm64-tonlib.nix new file mode 100644 index 00000000..a753423b --- /dev/null +++ b/assembly/nix/linux-arm64-tonlib.nix @@ -0,0 +1,44 @@ +# export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz +{ + pkgs ? import { system = builtins.currentSystem; } +, lib ? pkgs.lib +, stdenv ? pkgs.stdenv +}: +let + microhttpdmy = (import ./microhttpd.nix) {}; +in +with import microhttpdmy; +pkgs.llvmPackages_16.stdenv.mkDerivation { + pname = "ton"; + version = "dev-lib"; + + src = ./.; + + nativeBuildInputs = with pkgs; + [ + cmake ninja git pkg-config + ]; + + buildInputs = with pkgs; + [ + pkgsStatic.openssl microhttpdmy pkgsStatic.zlib pkgsStatic.libsodium.dev pkgsStatic.secp256k1 + ]; + + dontAddStaticConfigureFlags = false; + + cmakeFlags = [ + "-DTON_USE_ABSEIL=OFF" + "-DNIX=ON" + "-DMHD_FOUND=1" + "-DMHD_INCLUDE_DIR=${microhttpdmy}/usr/local/include" + "-DMHD_LIBRARY=${microhttpdmy}/usr/local/lib/libmicrohttpd.a" + ]; + + LDFLAGS = [ + "-static-libgcc" "-static-libstdc++" "-fPIC" "-fcommon" + ]; + + ninjaFlags = [ + "tonlibjson" "emulator" + ]; +} diff --git a/assembly/nix/linux-x86-64-static.nix b/assembly/nix/linux-x86-64-static.nix new file mode 100644 index 00000000..616dfba5 --- /dev/null +++ b/assembly/nix/linux-x86-64-static.nix @@ -0,0 +1,45 @@ +# export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz + +{ pkgs ? import { system = builtins.currentSystem; } +, lib ? pkgs.lib +, stdenv ? pkgs.stdenv +}: +let + microhttpdmy = (import ./microhttpd.nix) {}; +in +with import microhttpdmy; +stdenv.mkDerivation { + pname = "ton"; + version = "dev-bin"; + + src = ./.; + + nativeBuildInputs = with pkgs; + [ + cmake ninja git pkg-config + ]; + + buildInputs = with pkgs; + [ + pkgsStatic.openssl microhttpdmy pkgsStatic.zlib pkgsStatic.libsodium.dev pkgsStatic.secp256k1 glibc.static + ]; + + makeStatic = true; + doCheck = true; + + cmakeFlags = [ + "-DTON_USE_ABSEIL=OFF" + "-DNIX=ON" + "-DBUILD_SHARED_LIBS=OFF" + "-DCMAKE_LINK_SEARCH_START_STATIC=ON" + "-DCMAKE_LINK_SEARCH_END_STATIC=ON" + "-DMHD_FOUND=1" + "-DMHD_INCLUDE_DIR=${microhttpdmy}/usr/local/include" + "-DMHD_LIBRARY=${microhttpdmy}/usr/local/lib/libmicrohttpd.a" + "-DCMAKE_CTEST_ARGUMENTS=--timeout;1800" + ]; + + LDFLAGS = [ + "-static-libgcc" "-static-libstdc++" "-static" + ]; +} diff --git a/assembly/nix/linux-x86-64-tonlib.nix b/assembly/nix/linux-x86-64-tonlib.nix new file mode 100644 index 00000000..ac183d2b --- /dev/null +++ b/assembly/nix/linux-x86-64-tonlib.nix @@ -0,0 +1,54 @@ +# export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.11.tar.gz +# copy linux-x86-64-tonlib.nix to git root directory and execute: +# nix-build linux-x86-64-tonlib.nix +{ + pkgs ? import { system = builtins.currentSystem; } +, lib ? pkgs.lib +, stdenv ? pkgs.stdenv +}: +let + system = builtins.currentSystem; + + nixos1909 = (import (builtins.fetchTarball { + url = "https://channels.nixos.org/nixos-19.09/nixexprs.tar.xz"; + sha256 = "1vp1h2gkkrckp8dzkqnpcc6xx5lph5d2z46sg2cwzccpr8ay58zy"; + }) { inherit system; }); + glibc227 = nixos1909.glibc // { pname = "glibc"; }; + stdenv227 = let + cc = pkgs.wrapCCWith { + cc = nixos1909.buildPackages.gcc-unwrapped; + libc = glibc227; + bintools = pkgs.binutils.override { libc = glibc227; }; + }; + in (pkgs.overrideCC pkgs.stdenv cc); + +in +stdenv227.mkDerivation { + pname = "ton"; + version = "dev-lib"; + + src = ./.; + + nativeBuildInputs = with pkgs; + [ cmake ninja git pkg-config ]; + + buildInputs = with pkgs; + [ + pkgsStatic.openssl pkgsStatic.zlib pkgsStatic.libmicrohttpd.dev pkgsStatic.libsodium.dev pkgsStatic.secp256k1 + ]; + + dontAddStaticConfigureFlags = false; + + cmakeFlags = [ + "-DTON_USE_ABSEIL=OFF" + "-DNIX=ON" + ]; + + LDFLAGS = [ + "-static-libgcc" "-static-libstdc++" "-fPIC" + ]; + + ninjaFlags = [ + "tonlibjson" "emulator" + ]; +} diff --git a/assembly/nix/macos-static.nix b/assembly/nix/macos-static.nix new file mode 100644 index 00000000..e65ec1a8 --- /dev/null +++ b/assembly/nix/macos-static.nix @@ -0,0 +1,65 @@ +# export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz + +{ pkgs ? import { system = builtins.currentSystem; } +, lib ? pkgs.lib +, stdenv ? pkgs.stdenv +}: + +pkgs.llvmPackages_14.stdenv.mkDerivation { + pname = "ton"; + version = "dev-bin"; + + src = ./.; + + nativeBuildInputs = with pkgs; + [ cmake ninja git pkg-config ]; + + buildInputs = with pkgs; + lib.forEach [ + secp256k1 libsodium.dev libmicrohttpd.dev gmp.dev nettle.dev libtasn1.dev libidn2.dev libunistring.dev gettext (gnutls.override { withP11-kit = false; }).dev + ] + (x: x.overrideAttrs(oldAttrs: rec { configureFlags = (oldAttrs.configureFlags or []) ++ [ "--enable-static" "--disable-shared" "--disable-tests" ]; dontDisableStatic = true; })) + ++ [ + darwin.apple_sdk.frameworks.CoreFoundation + (openssl.override { static = true; }).dev + (zlib.override { shared = false; }).dev + (libiconv.override { enableStatic = true; enableShared = false; }) + ]; + + + dontAddStaticConfigureFlags = true; + makeStatic = true; + doCheck = true; + + configureFlags = []; + + cmakeFlags = [ + "-DTON_USE_ABSEIL=OFF" + "-DNIX=ON" + "-DCMAKE_CROSSCOMPILING=OFF" + "-DCMAKE_LINK_SEARCH_START_STATIC=ON" + "-DCMAKE_LINK_SEARCH_END_STATIC=ON" + "-DBUILD_SHARED_LIBS=OFF" + "-DCMAKE_CXX_FLAGS=-stdlib=libc++" + "-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=11.3" + "-DCMAKE_CTEST_ARGUMENTS=--timeout;1800" + ]; + + LDFLAGS = [ + "-static-libstdc++" + "-framework CoreFoundation" + ]; + + postInstall = '' + moveToOutput bin "$bin" + ''; + + preFixup = '' + for fn in "$bin"/bin/* "$out"/lib/*.dylib; do + echo Fixing libc++ in "$fn" + install_name_tool -change "$(otool -L "$fn" | grep libc++.1 | cut -d' ' -f1 | xargs)" libc++.1.dylib "$fn" + install_name_tool -change "$(otool -L "$fn" | grep libc++abi.1 | cut -d' ' -f1 | xargs)" libc++abi.dylib "$fn" + done + ''; + outputs = [ "bin" "out" ]; +} \ No newline at end of file diff --git a/assembly/nix/macos-tonlib.nix b/assembly/nix/macos-tonlib.nix new file mode 100644 index 00000000..c362de4e --- /dev/null +++ b/assembly/nix/macos-tonlib.nix @@ -0,0 +1,55 @@ +# export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz + +{ pkgs ? import { system = builtins.currentSystem; } +, lib ? pkgs.lib +, stdenv ? pkgs.stdenv +}: + +pkgs.llvmPackages_14.stdenv.mkDerivation { + pname = "ton"; + version = "dev-lib"; + + src = ./.; + + nativeBuildInputs = with pkgs; + [ cmake ninja git pkg-config ]; + + buildInputs = with pkgs; + lib.forEach [ + secp256k1 libsodium.dev libmicrohttpd.dev gmp.dev nettle.dev libtasn1.dev libidn2.dev libunistring.dev gettext (gnutls.override { withP11-kit = false; }).dev + ] (x: x.overrideAttrs(oldAttrs: rec { configureFlags = (oldAttrs.configureFlags or []) ++ [ "--enable-static" "--disable-shared" "--disable-tests" ]; dontDisableStatic = true; })) + ++ [ + darwin.apple_sdk.frameworks.CoreFoundation + (openssl.override { static = true; }).dev + (zlib.override { shared = false; }).dev + (libiconv.override { enableStatic = true; enableShared = false; }) + ]; + + dontAddStaticConfigureFlags = true; + + configureFlags = []; + + cmakeFlags = [ + "-DTON_USE_ABSEIL=OFF" + "-DNIX=ON" + "-DCMAKE_CXX_FLAGS=-stdlib=libc++" + "-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=11.3" + ]; + + LDFLAGS = [ + "-static-libstdc++" + "-framework CoreFoundation" + ]; + + ninjaFlags = [ + "tonlibjson" "emulator" + ]; + + preFixup = '' + for fn in $out/bin/* $out/lib/*.dylib; do + echo Fixing libc++ in "$fn" + install_name_tool -change "$(otool -L "$fn" | grep libc++.1 | cut -d' ' -f1 | xargs)" libc++.1.dylib "$fn" + install_name_tool -change "$(otool -L "$fn" | grep libc++abi.1 | cut -d' ' -f1 | xargs)" libc++abi.dylib "$fn" + done + ''; +} \ No newline at end of file diff --git a/assembly/nix/microhttpd.nix b/assembly/nix/microhttpd.nix new file mode 100644 index 00000000..4f871425 --- /dev/null +++ b/assembly/nix/microhttpd.nix @@ -0,0 +1,28 @@ +{ pkgs ? import { system = builtins.currentSystem; } +, stdenv ? pkgs.stdenv +, fetchgit ? pkgs.fetchgit +}: + +stdenv.mkDerivation rec { + name = "microhttpdmy"; + + + src = fetchgit { + url = "https://git.gnunet.org/libmicrohttpd.git"; + rev = "refs/tags/v0.9.77"; + sha256 = "sha256-x+nfB07PbZwBlFc6kZZFYiRpk0a3QN/ByHB+hC8na/o="; + }; + + nativeBuildInputs = with pkgs; [ automake libtool autoconf texinfo ]; + + buildInputs = with pkgs; [ ]; + + configurePhase = '' + ./autogen.sh + ./configure --enable-static --disable-tests --disable-benchmark --disable-shared --disable-https --with-pic + ''; + + installPhase = '' + make install DESTDIR=$out + ''; +} diff --git a/assembly/nix/openssl.nix b/assembly/nix/openssl.nix new file mode 100644 index 00000000..8d30aa50 --- /dev/null +++ b/assembly/nix/openssl.nix @@ -0,0 +1,30 @@ +{ pkgs ? import { system = builtins.currentSystem; } +, stdenv ? pkgs.stdenv +, fetchFromGitHub ? pkgs.fetchFromGitHub +}: + +stdenv.mkDerivation rec { + name = "opensslmy"; + + src = fetchFromGitHub { + owner = "openssl"; + repo = "openssl"; + rev = "refs/tags/openssl-3.1.4"; + sha256 = "sha256-Vvf1wiNb4ikg1lIS9U137aodZ2JzM711tSWMJFYWtWI="; + }; + + nativeBuildInputs = with pkgs; [ perl ]; + + buildInputs = with pkgs; [ ]; + + postPatch = '' + patchShebangs Configure + ''; + + configurePhase = '' + ./Configure no-shared + ''; + installPhase = '' + make install DESTDIR=$out + ''; +} diff --git a/.github/script/fift-func-wasm-build-ubuntu.sh b/assembly/wasm/fift-func-wasm-build-ubuntu.sh old mode 100755 new mode 100644 similarity index 71% rename from .github/script/fift-func-wasm-build-ubuntu.sh rename to assembly/wasm/fift-func-wasm-build-ubuntu.sh index feac19e3..9ca23cc0 --- a/.github/script/fift-func-wasm-build-ubuntu.sh +++ b/assembly/wasm/fift-func-wasm-build-ubuntu.sh @@ -1,7 +1,24 @@ # The script builds funcfift compiler to WASM -# dependencies: -#sudo apt-get install -y build-essential git make cmake clang libgflags-dev zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev python3-pip nodejs libevent-dev +# Execute these prerequisites first +# sudo apt update +# sudo apt install -y build-essential git make cmake ninja-build clang libgflags-dev zlib1g-dev libssl-dev \ +# libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev python3-pip \ +# nodejs libsecp256k1-dev libsodium-dev automake libtool + +# wget https://apt.llvm.org/llvm.sh +# chmod +x llvm.sh +# sudo ./llvm.sh 16 all + +with_artifacts=false + +while getopts 'a' flag; do + case "${flag}" in + a) with_artifacts=true ;; + *) break + ;; + esac +done export CC=$(which clang-16) export CXX=$(which clang++-16) @@ -39,8 +56,7 @@ mkdir build cd build cmake -GNinja -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_STANDARD=17 \ --DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.so \ --DZLIB_INCLUDE_DIR=$ZLIB_DIR \ +-DOPENSSL_FOUND=1 \ -DOPENSSL_ROOT_DIR=$OPENSSL_DIR \ -DOPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include \ -DOPENSSL_CRYPTO_LIBRARY=$OPENSSL_DIR/libcrypto.so \ @@ -62,8 +78,9 @@ cd emsdk ./emsdk install 3.1.19 ./emsdk activate 3.1.19 EMSDK_DIR=`pwd` +ls $EMSDK_DIR -source $EMSDK_DIR/emsdk_env.sh +. $EMSDK_DIR/emsdk_env.sh export CC=$(which emcc) export CXX=$(which em++) export CCACHE_DISABLE=1 @@ -71,7 +88,7 @@ export CCACHE_DISABLE=1 cd ../openssl make clean -emconfigure ./Configure linux-generic32 no-shared no-dso no-engine no-unit-test no-ui +emconfigure ./Configure linux-generic32 no-shared no-dso no-engine no-unit-test sed -i 's/CROSS_COMPILE=.*/CROSS_COMPILE=/g' Makefile sed -i 's/-ldl//g' Makefile sed -i 's/-O3/-Os/g' Makefile @@ -101,22 +118,42 @@ test $? -eq 0 || { echo "Can't compile libsodium with emmake "; exit 1; } cd ../build emcmake cmake -DUSE_EMSCRIPTEN=ON -DCMAKE_BUILD_TYPE=Release \ --DZLIB_LIBRARY=$ZLIB_DIR/libz.a \ +-DZLIB_FOUND=1 \ +-DZLIB_LIBRARIES=$ZLIB_DIR/libz.a \ -DZLIB_INCLUDE_DIR=$ZLIB_DIR \ +-DOPENSSL_FOUND=1 \ -DOPENSSL_ROOT_DIR=$OPENSSL_DIR \ -DOPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include \ -DOPENSSL_CRYPTO_LIBRARY=$OPENSSL_DIR/libcrypto.a \ -DOPENSSL_SSL_LIBRARY=$OPENSSL_DIR/libssl.a \ -DCMAKE_TOOLCHAIN_FILE=$EMSDK_DIR/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \ -DCMAKE_CXX_FLAGS="-sUSE_ZLIB=1" \ +-DSECP256K1_FOUND=1 \ -DSECP256K1_INCLUDE_DIR=$SECP256K1_DIR/include \ -DSECP256K1_LIBRARY=$SECP256K1_DIR/.libs/libsecp256k1.a \ -DSODIUM_INCLUDE_DIR=$SODIUM_DIR/src/libsodium/include \ -DSODIUM_LIBRARY_RELEASE=$SODIUM_DIR/src/libsodium/.libs/libsodium.a \ --DSODIUM_LIBRARY_DEBUG=$SODIUM_DIR/src/libsodium/.libs/libsodium.a \ -DSODIUM_USE_STATIC_LIBS=ON .. test $? -eq 0 || { echo "Can't configure TON with emmake "; exit 1; } cp -R ../crypto/smartcont ../crypto/fift/lib crypto emmake make -j16 funcfiftlib func fift tlbc emulator-emscripten + +test $? -eq 0 || { echo "Can't compile TON with emmake "; exit 1; } + +if [ "$with_artifacts" = true ]; then + echo "Creating artifacts..." + cd .. + rm -rf artifacts + mkdir artifacts + ls build/crypto + cp build/crypto/fift* artifacts + cp build/crypto/func* artifacts + cp build/crypto/tlbc* artifacts + cp build/emulator/emulator-emscripten* artifacts + cp -R crypto/smartcont artifacts + cp -R crypto/fift/lib artifacts +fi + + diff --git a/blockchain-explorer/CMakeLists.txt b/blockchain-explorer/CMakeLists.txt index fc94e709..8aae8805 100644 --- a/blockchain-explorer/CMakeLists.txt +++ b/blockchain-explorer/CMakeLists.txt @@ -14,15 +14,28 @@ set(BLOCHAIN_EXPLORER_SOURCE add_executable(blockchain-explorer ${BLOCHAIN_EXPLORER_SOURCE}) if (NIX) - find_package(PkgConfig REQUIRED) - pkg_check_modules(MHD libmicrohttpd) - target_include_directories(blockchain-explorer PUBLIC ${MHD_INCLUDE_DIRS} ${MHD_STATIC_INCLUDE_DIRS}) - target_link_libraries(blockchain-explorer tdutils tdactor adnllite tl_lite_api tl-lite-utils ton_crypto ton_block ${MHD_LIBRARIES} ${MHD_STATIC_LIBRARIES}) + if (MHD_FOUND) + target_include_directories(blockchain-explorer PUBLIC ${MHD_INCLUDE_DIR}) + target_link_libraries(blockchain-explorer tdutils tdactor adnllite tl_lite_api tl-lite-utils ton_crypto ton_block ${MHD_LIBRARY}) + else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(MHD libmicrohttpd) + target_include_directories(blockchain-explorer PUBLIC ${MHD_INCLUDE_DIR} ${MHD_STATIC_INCLUDE_DIRS}) + target_link_libraries(blockchain-explorer tdutils tdactor adnllite tl_lite_api tl-lite-utils ton_crypto ton_block ${MHD_LIBRARIES} ${MHD_STATIC_LIBRARIES}) + endif() else() - find_package(MHD) - target_include_directories(blockchain-explorer PUBLIC ${MHD_INCLUDE_DIRS}) - target_link_libraries(blockchain-explorer tdutils tdactor adnllite tl_lite_api tl-lite-utils ton_crypto ton_block ${MHD_LIBRARIES}) + if (MHD_FOUND) + target_include_directories(blockchain-explorer PUBLIC ${MHD_INCLUDE_DIR}) + target_link_libraries(blockchain-explorer tdutils tdactor adnllite tl_lite_api tl-lite-utils ton_crypto ton_block ${MHD_LIBRARY}) + else() + find_package(MHD) + target_include_directories(blockchain-explorer PUBLIC ${MHD_INCLUDE_DIR}) + target_link_libraries(blockchain-explorer tdutils tdactor adnllite tl_lite_api tl-lite-utils ton_crypto ton_block ${MHD_LIBRARY}) + endif() endif() +target_include_directories(blockchain-explorer PUBLIC ${MHD_INCLUDE_DIR}) +target_link_libraries(blockchain-explorer tdutils tdactor adnllite tl_lite_api tl-lite-utils ton_crypto ton_block ${MHD_LIBRARY}) + install(TARGETS blockchain-explorer RUNTIME DESTINATION bin) diff --git a/catchain/catchain-receiver.cpp b/catchain/catchain-receiver.cpp index 482cfb43..c8206de9 100644 --- a/catchain/catchain-receiver.cpp +++ b/catchain/catchain-receiver.cpp @@ -287,7 +287,9 @@ void CatChainReceiverImpl::add_block_cont_3(tl_object_ptrdelivered()); + LOG_CHECK(last_sent_block_->delivered()) + << "source=" << last_sent_block_->get_source_id() << " ill=" << last_sent_block_->is_ill() + << " height=" << last_sent_block_->get_height(); } active_send_ = false; diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 62b0d216..0871d250 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -325,23 +325,20 @@ endif() if (MSVC) find_package(Sodium REQUIRED) target_compile_definitions(ton_crypto PUBLIC SODIUM_STATIC) - target_include_directories(ton_crypto_core PUBLIC $) - target_link_libraries(ton_crypto PUBLIC ${SECP256K1_LIBRARIES}) -elseif (ANDROID) + target_include_directories(ton_crypto_core PUBLIC $) + target_link_libraries(ton_crypto PUBLIC ${SECP256K1_LIBRARY}) +elseif (ANDROID OR EMSCRIPTEN) target_include_directories(ton_crypto_core PUBLIC $) target_link_libraries(ton_crypto PUBLIC $) else() - if (NOT USE_EMSCRIPTEN) + if (NOT SODIUM_FOUND) find_package(Sodium REQUIRED) - target_include_directories(ton_crypto_core PUBLIC $) - target_link_libraries(ton_crypto PUBLIC ${SECP256K1_LIBRARIES}) else() - target_include_directories(ton_crypto_core PUBLIC $) - target_link_libraries(ton_crypto PUBLIC ${SECP256K1_LIBRARY}) - endif() - if (NOT APPLE AND NOT USE_EMSCRIPTEN) - target_link_libraries(ton_crypto_core PUBLIC secp256k1) + message(STATUS "Using Sodium ${SODIUM_LIBRARY_RELEASE}") endif() + target_compile_definitions(ton_crypto PUBLIC SODIUM_STATIC) + target_include_directories(ton_crypto_core PUBLIC $) + target_link_libraries(ton_crypto PUBLIC ${SECP256K1_LIBRARY}) endif() target_include_directories(ton_crypto_core PUBLIC $) @@ -356,7 +353,7 @@ add_executable(test-ed25519-crypto test/test-ed25519-crypto.cpp) target_include_directories(test-ed25519-crypto PUBLIC $) target_link_libraries(test-ed25519-crypto PUBLIC ton_crypto) -add_library(fift-lib ${FIFT_SOURCE}) +add_library(fift-lib STATIC ${FIFT_SOURCE}) target_include_directories(fift-lib PUBLIC $) target_link_libraries(fift-lib PUBLIC ton_crypto ton_db tdutils ton_block) if (USE_EMSCRIPTEN) @@ -400,6 +397,7 @@ if (USE_EMSCRIPTEN) target_link_options(funcfiftlib PRIVATE -sIGNORE_MISSING_MAIN=1) target_link_options(funcfiftlib PRIVATE -sAUTO_NATIVE_LIBRARIES=0) target_link_options(funcfiftlib PRIVATE -sMODULARIZE=1) + target_link_options(funcfiftlib PRIVATE -sTOTAL_MEMORY=33554432) target_link_options(funcfiftlib PRIVATE -sALLOW_MEMORY_GROWTH=1) target_link_options(funcfiftlib PRIVATE -sALLOW_TABLE_GROWTH=1) target_link_options(funcfiftlib PRIVATE --embed-file ${CMAKE_CURRENT_SOURCE_DIR}/fift/lib@/fiftlib) @@ -506,7 +504,7 @@ if (NOT CMAKE_CROSSCOMPILING OR USE_EMSCRIPTEN) GenFif(DEST smartcont/auto/simple-wallet-ext-code SOURCE smartcont/simple-wallet-ext-code.fc NAME simple-wallet-ext) endif() -add_library(smc-envelope ${SMC_ENVELOPE_SOURCE}) +add_library(smc-envelope STATIC ${SMC_ENVELOPE_SOURCE}) target_include_directories(smc-envelope PUBLIC $) target_link_libraries(smc-envelope PUBLIC ton_crypto PRIVATE tdutils ton_block) if (NOT CMAKE_CROSSCOMPILING) diff --git a/crypto/test/test-smartcont.cpp b/crypto/test/test-smartcont.cpp index 98534bc5..7f512cea 100644 --- a/crypto/test/test-smartcont.cpp +++ b/crypto/test/test-smartcont.cpp @@ -489,7 +489,7 @@ void do_test_wallet(int revision) { auto address = std::move(res.address); auto iwallet = std::move(res.wallet); auto public_key = priv_key.get_public_key().move_as_ok().as_octet_string(); - ; + check_wallet_state(iwallet, 1, 123, public_key); // lets send a lot of messages @@ -1026,7 +1026,7 @@ class CheckedDns { } return action; }); - auto query = dns_->create_update_query(key_.value(), smc_actions).move_as_ok(); + auto query = dns_->create_update_query(key_.value(), smc_actions, query_id_++).move_as_ok(); CHECK(dns_.write().send_external_message(std::move(query)).code == 0); } map_dns_.update(entries); @@ -1081,6 +1081,7 @@ class CheckedDns { using ManualDns = ton::ManualDns; td::optional key_; td::Ref dns_; + td::uint32 query_id_ = 1; // Query id serve as "valid until", but in tests now() == 0 MapDns map_dns_; td::optional combined_map_dns_; diff --git a/crypto/vm/boc.h b/crypto/vm/boc.h index 1bff5b25..09ae1b66 100644 --- a/crypto/vm/boc.h +++ b/crypto/vm/boc.h @@ -52,6 +52,7 @@ class NewCellStorageStat { bool operator==(const Stat& other) const { return key() == other.key(); } + Stat(const Stat& other) = default; Stat& operator=(const Stat& other) = default; Stat& operator+=(const Stat& other) { cells += other.cells; diff --git a/example/android/README.md b/example/android/README.md index f17ba9d2..cf12ba30 100644 --- a/example/android/README.md +++ b/example/android/README.md @@ -6,27 +6,9 @@ Prerequisite: installed Java and set environment variable JAVA_HOME. ```bash git clone --recursive https://github.com/ton-blockchain/ton.git cd ton -wget https://dl.google.com/android/repository/android-ndk-r25b-linux.zip -unzip android-ndk-r25b-linux.zip -export JAVA_AWT_LIBRARY=NotNeeded -export JAVA_JVM_LIBRARY=NotNeeded -export JAVA_INCLUDE_PATH=${JAVA_HOME}/include -export JAVA_AWT_INCLUDE_PATH=${JAVA_HOME}/include -export JAVA_INCLUDE_PATH2=${JAVA_HOME}/include/linux - -export ANDROID_NDK_ROOT=$(pwd)/android-ndk-r25b -export OPENSSL_DIR=$(pwd)/example/android/third_party/crypto -export SECP256K1_INCLUDE_DIR=$(pwd)/example/android/third_party/secp256k1/include -export SECP256K1_LIBRARY=$(pwd)/example/android/third_party/secp256k1/.libs/libsecp256k1.a -export SODIUM_INCLUDE_DIR=$(pwd)/example/android/third_party/libsodium/libsodium-android-westmere/include -export SODIUM_LIBRARY=$(pwd)/example/android/third_party/libsodium/libsodium-android-westmere/lib/libsodium.a - -rm -rf example/android/src/drinkless/org/ton/TonApi.java -cd example/android/ -cmake -GNinja -DTON_ONLY_TONLIB=ON . -ninja prepare_cross_compiling -rm CMakeCache.txt -./build-all.sh +cp assembly/android/build-android-tonlib.sh . +chmod +x build-android-tonlib.sh +sudo -E ./build-android-tonlib.sh ``` # Generation of Tonlib libraries for iOS in Xcode diff --git a/example/android/build-all.sh b/example/android/build-all.sh index f436e361..6f97dec0 100755 --- a/example/android/build-all.sh +++ b/example/android/build-all.sh @@ -1,4 +1,6 @@ #!/bin/bash +echo ANDROID_NDK_ROOT = $ANDROID_NDK_ROOT + echo Building tonlib for x86... echo ARCH="x86" ./build.sh || exit 1 diff --git a/example/android/build.sh b/example/android/build.sh index 7f170dbc..06217255 100755 --- a/example/android/build.sh +++ b/example/android/build.sh @@ -42,14 +42,22 @@ ARCH=$ABI mkdir -p build-$ARCH cd build-$ARCH -cmake .. -GNinja -DPORTABLE=1 \ --DANDROID_ABI=x86 -DANDROID_PLATFORM=android-32 -DANDROID_NDK=${ANDROID_NDK_ROOT} \ --DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake \ --DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=${ABI} \ --DOPENSSL_ROOT_DIR=${OPENSSL_DIR}/${ORIG_ARCH} -DTON_ARCH="" \ +cmake .. -GNinja \ +-DPORTABLE=1 \ -DTON_ONLY_TONLIB=ON \ --DSECP256K1_INCLUDE_DIR=${SECP256K1_INCLUDE_DIR} -DSECP256K1_LIBRARY=${SECP256K1_LIBRARY} \ --DSODIUM_INCLUDE_DIR=${SODIUM_INCLUDE_DIR} -DSODIUM_LIBRARY_RELEASE=${SODIUM_LIBRARY_RELEASE} \ +-DTON_ARCH="" \ +-DANDROID_ABI=x86 \ +-DANDROID_PLATFORM=android-32 \ +-DANDROID_NDK=${ANDROID_NDK_ROOT} \ +-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake \ +-DCMAKE_BUILD_TYPE=Release \ +-DANDROID_ABI=${ABI} \ +-DOPENSSL_ROOT_DIR=${OPENSSL_DIR}/${ORIG_ARCH} \ +-DSECP256K1_FOUND=1 \ +-DSECP256K1_INCLUDE_DIR=${SECP256K1_INCLUDE_DIR} \ +-DSECP256K1_LIBRARY=${SECP256K1_LIBRARY} \ +-DSODIUM_INCLUDE_DIR=${SODIUM_INCLUDE_DIR} \ +-DSODIUM_LIBRARY_RELEASE=${SODIUM_LIBRARY_RELEASE} \ -DSODIUM_USE_STATIC_LIBS=1 \ -DBLST_LIB=${BLST_LIBRARY} || exit 1 diff --git a/lite-client/CMakeLists.txt b/lite-client/CMakeLists.txt index 53e09d77..598a8d28 100644 --- a/lite-client/CMakeLists.txt +++ b/lite-client/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.5 FATAL_ERROR) -add_library(lite-client-common lite-client-common.cpp lite-client-common.h) +add_library(lite-client-common STATIC lite-client-common.cpp lite-client-common.h) target_link_libraries(lite-client-common PUBLIC tdutils tdactor adnllite tl_api tl_lite_api tl-lite-utils ton_crypto ton_block) add_executable(lite-client lite-client.cpp lite-client.h) diff --git a/tdnet/td/net/TcpListener.cpp b/tdnet/td/net/TcpListener.cpp index 7b7364ba..e711cbbd 100644 --- a/tdnet/td/net/TcpListener.cpp +++ b/tdnet/td/net/TcpListener.cpp @@ -46,9 +46,11 @@ void TcpListener::start_up() { } void TcpListener::tear_down() { - // unsubscribe from socket updates - // nb: interface will be changed - td::actor::SchedulerContext::get()->get_poll().unsubscribe(server_socket_fd_.get_poll_info().get_pollable_fd_ref()); + if (!server_socket_fd_.empty()) { + // unsubscribe from socket updates + // nb: interface will be changed + td::actor::SchedulerContext::get()->get_poll().unsubscribe(server_socket_fd_.get_poll_info().get_pollable_fd_ref()); + } } void TcpListener::loop() { diff --git a/tdnet/test/net-test.cpp b/tdnet/test/net-test.cpp index bb084a67..d20be504 100644 --- a/tdnet/test/net-test.cpp +++ b/tdnet/test/net-test.cpp @@ -158,9 +158,11 @@ void run_server(int from_port, int to_port, bool is_first, bool use_tcp) { TEST(Net, PingPong) { SET_VERBOSITY_LEVEL(VERBOSITY_NAME(ERROR)); + int port1 = td::Random::fast(10000, 10999); + int port2 = td::Random::fast(11000, 11999); for (auto use_tcp : {false, true}) { - auto a = td::thread([use_tcp] { run_server(8091, 8092, true, use_tcp); }); - auto b = td::thread([use_tcp] { run_server(8092, 8091, false, use_tcp); }); + auto a = td::thread([=] { run_server(port1, port2, true, use_tcp); }); + auto b = td::thread([=] { run_server(port2, port1, false, use_tcp); }); a.join(); b.join(); } diff --git a/tdutils/td/utils/as.h b/tdutils/td/utils/as.h index c60c74e2..6015af29 100644 --- a/tdutils/td/utils/as.h +++ b/tdutils/td/utils/as.h @@ -76,12 +76,7 @@ class ConstAs { } // namespace detail -// no std::is_trivially_copyable in libstdc++ before 5.0 -#if __GLIBCXX__ -#define TD_IS_TRIVIALLY_COPYABLE(T) __has_trivial_copy(T) -#else #define TD_IS_TRIVIALLY_COPYABLE(T) std::is_trivially_copyable::value -#endif template = 0> diff --git a/test/test-catchain.cpp b/test/test-catchain.cpp index 149ea3e3..3131c2b9 100644 --- a/test/test-catchain.cpp +++ b/test/test-catchain.cpp @@ -186,6 +186,7 @@ class CatChainInst : public td::actor::Actor { void create_fork() { auto height = height_ - 1; //td::Random::fast(0, height_ - 1); + LOG(WARNING) << "Creating fork, source_id=" << idx_ << ", height=" << height; auto sum = prev_values_[height] + 1; td::uint64 x[2]; @@ -241,7 +242,8 @@ int main(int argc, char *argv[]) { td::actor::send_closure(adnl, &ton::adnl::Adnl::register_network_manager, network_manager.get()); }); - for (td::uint32 att = 0; att < 10; att++) { + for (td::uint32 att = 0; att < 20; att++) { + LOG(WARNING) << "Test #" << att; nodes.resize(total_nodes); scheduler.run_in_context([&] { @@ -296,7 +298,10 @@ int main(int argc, char *argv[]) { std::cout << "value=" << n.get_actor_unsafe().value() << std::endl; } - scheduler.run_in_context([&] { td::actor::send_closure(inst[0], &CatChainInst::create_fork); }); + td::uint32 fork_cnt = att < 10 ? 1 : (att - 10) / 5 + 2; + for (td::uint32 idx = 0; idx < fork_cnt; ++idx) { + scheduler.run_in_context([&] { td::actor::send_closure(inst[idx], &CatChainInst::create_fork); }); + } t = td::Timestamp::in(1.0); while (scheduler.run(1)) { diff --git a/tonlib/test/offline.cpp b/tonlib/test/offline.cpp index 35a95f5b..0fedc865 100644 --- a/tonlib/test/offline.cpp +++ b/tonlib/test/offline.cpp @@ -467,15 +467,20 @@ TEST(Tonlib, KeysApi) { make_object(make_object(key->public_key_, key->secret_.copy()))) .move_as_ok(); - auto err1 = sync_send(client, make_object( - new_local_password.copy(), td::SecureString("wrong password"), - make_object(copy_word_list()))) - .move_as_error(); + auto err1 = sync_send( + client, make_object(new_local_password.copy(), td::SecureString("wrong password"), + make_object(copy_word_list()))); + if (err1.is_ok()) { + if (err1.ok()->public_key_ != key->public_key_) { + err1 = td::Status::Error("imported key successfully, but the public key is different"); + } + } + err1.ensure_error(); auto err2 = sync_send(client, make_object(new_local_password.copy(), td::SecureString(), - make_object(copy_word_list()))) - .move_as_error(); - LOG(INFO) << err1 << " | " << err2; + make_object(copy_word_list()))); + err2.ensure_error(); + LOG(INFO) << err1.move_as_error() << " | " << err2.move_as_error(); auto imported_key = sync_send(client, make_object(new_local_password.copy(), mnemonic_password.copy(), make_object(copy_word_list()))) diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index 9ec664bb..bee7ef40 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -4995,6 +4995,8 @@ td::Status TonlibClient::do_request(const tonlib_api::importKey& request, if (!request.exported_key_) { return TonlibError::EmptyField("exported_key"); } + // Note: the mnemonic is considered valid if a certain hash starts with zero byte (see Mnemonic::is_basic_seed()) + // Therefore, importKey with invalid password has 1/256 chance to return OK TRY_RESULT(key, key_storage_.import_key(std::move(request.local_password_), std::move(request.mnemonic_password_), KeyStorage::ExportedKey{std::move(request.exported_key_->word_list_)})); TRY_RESULT(key_bytes, public_key_from_bytes(key.public_key.as_slice())); From edb0d0f0aab98ee8a08d6b100f43dec205b5aa5a Mon Sep 17 00:00:00 2001 From: Andrey Pfau Date: Tue, 16 Jan 2024 10:59:47 +0400 Subject: [PATCH 068/351] Add Editorconfig (#800) * editorconfig * indent 2 * .editorconfig update --- .editorconfig | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..78c6ddee --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 +indent_style = space +indent_size = 2 From 4303e49c93939eeeb51913195f54dc525f50e84c Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 16 Jan 2024 10:59:16 +0300 Subject: [PATCH 069/351] Postpone addition of overlay for block broadcasting (#842) This reverts commit a52045bd91004bccabf10fd159371ffbbf60ffad. --- adnl/adnl-peer-table.hpp | 4 - adnl/adnl.h | 2 - tl/generate/scheme/ton_api.tl | 2 - tl/generate/scheme/ton_api.tlo | Bin 86348 -> 86116 bytes ton/ton-types.h | 8 -- validator/CMakeLists.txt | 4 +- validator/full-node-private-overlay.cpp | 175 ------------------------ validator/full-node-private-overlay.hpp | 86 ------------ validator/full-node.cpp | 51 ------- validator/full-node.hpp | 7 - 10 files changed, 1 insertion(+), 338 deletions(-) delete mode 100644 validator/full-node-private-overlay.cpp delete mode 100644 validator/full-node-private-overlay.hpp diff --git a/adnl/adnl-peer-table.hpp b/adnl/adnl-peer-table.hpp index 1c30b84c..2a27a802 100644 --- a/adnl/adnl-peer-table.hpp +++ b/adnl/adnl-peer-table.hpp @@ -77,10 +77,6 @@ class AdnlPeerTableImpl : public AdnlPeerTable { td::actor::ActorId channel) override; void unregister_channel(AdnlChannelIdShort id) override; - void check_id_exists(AdnlNodeIdShort id, td::Promise promise) override { - promise.set_value(local_ids_.count(id)); - } - void write_new_addr_list_to_db(AdnlNodeIdShort local_id, AdnlNodeIdShort peer_id, AdnlDbItem node, td::Promise promise) override; void get_addr_list_from_db(AdnlNodeIdShort local_id, AdnlNodeIdShort peer_id, diff --git a/adnl/adnl.h b/adnl/adnl.h index a1c39d5e..b7dad216 100644 --- a/adnl/adnl.h +++ b/adnl/adnl.h @@ -97,8 +97,6 @@ class Adnl : public AdnlSenderInterface { virtual void add_id_ex(AdnlNodeIdFull id, AdnlAddressList addr_list, td::uint8 cat, td::uint32 mode) = 0; virtual void del_id(AdnlNodeIdShort id, td::Promise promise) = 0; - virtual void check_id_exists(AdnlNodeIdShort id, td::Promise promise) = 0; - // subscribe to (some) messages(+queries) to this local id virtual void subscribe(AdnlNodeIdShort dst, std::string prefix, std::unique_ptr callback) = 0; virtual void unsubscribe(AdnlNodeIdShort dst, std::string prefix) = 0; diff --git a/tl/generate/scheme/ton_api.tl b/tl/generate/scheme/ton_api.tl index 7c9d9d5d..346d9152 100644 --- a/tl/generate/scheme/ton_api.tl +++ b/tl/generate/scheme/ton_api.tl @@ -394,8 +394,6 @@ tonNode.newShardBlockBroadcast block:tonNode.newShardBlock = tonNode.Broadcast; tonNode.shardPublicOverlayId workchain:int shard:long zero_state_file_hash:int256 = tonNode.ShardPublicOverlayId; -tonNode.privateBlockOverlayId zero_state_file_hash:int256 nodes:(vector int256) = tonNode.PrivateBlockOverlayId; - tonNode.keyBlocks blocks:(vector tonNode.blockIdExt) incomplete:Bool error:Bool = tonNode.KeyBlocks; ton.blockId root_cell_hash:int256 file_hash:int256 = ton.BlockId; diff --git a/tl/generate/scheme/ton_api.tlo b/tl/generate/scheme/ton_api.tlo index 34f31816487195f10af67445b0923d8f5474c3f3..5b8e1c725e39ceff4097e4a654c796c9f84ff73e 100644 GIT binary patch delta 41 scmX@Ji1o<=R^CUm^{p77;NM1GXWh*`x-Kk?HJdLQZr{7vV)4`mrcA!aEVVg6*M)_#cJoxj?R#}mv=m^|!oUDhbMu&x57Xq<55|)(MA@)_L^eCT HS4ji_gWEXS diff --git a/ton/ton-types.h b/ton/ton-types.h index 24d54259..867584fa 100644 --- a/ton/ton-types.h +++ b/ton/ton-types.h @@ -353,14 +353,6 @@ struct BlockBroadcast { td::uint32 validator_set_hash; td::BufferSlice data; td::BufferSlice proof; - - BlockBroadcast clone() const { - std::vector new_signatures; - for (const BlockSignature& s : signatures) { - new_signatures.emplace_back(s.node, s.signature.clone()); - } - return {block_id, std::move(new_signatures), catchain_seqno, validator_set_hash, data.clone(), proof.clone()}; - } }; struct Ed25519_PrivateKey { diff --git a/validator/CMakeLists.txt b/validator/CMakeLists.txt index 8de60081..4ecc865c 100644 --- a/validator/CMakeLists.txt +++ b/validator/CMakeLists.txt @@ -143,9 +143,7 @@ set(FULL_NODE_SOURCE full-node-master.h full-node-master.hpp full-node-master.cpp - full-node-private-overlay.hpp - full-node-private-overlay.cpp - + net/download-block.hpp net/download-block.cpp net/download-block-new.hpp diff --git a/validator/full-node-private-overlay.cpp b/validator/full-node-private-overlay.cpp deleted file mode 100644 index ea72230b..00000000 --- a/validator/full-node-private-overlay.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . -*/ -#pragma once - -#include "full-node-private-overlay.hpp" -#include "ton/ton-tl.hpp" -#include "common/delay.h" - -namespace ton { - -namespace validator { - -namespace fullnode { - -void FullNodePrivateOverlay::process_broadcast(PublicKeyHash, ton_api::tonNode_blockBroadcast &query) { - std::vector signatures; - for (auto &sig : query.signatures_) { - signatures.emplace_back(BlockSignature{sig->who_, std::move(sig->signature_)}); - } - - BlockIdExt block_id = create_block_id(query.id_); - BlockBroadcast B{block_id, - std::move(signatures), - static_cast(query.catchain_seqno_), - static_cast(query.validator_set_hash_), - std::move(query.data_), - std::move(query.proof_)}; - - auto P = td::PromiseCreator::lambda([](td::Result R) { - if (R.is_error()) { - if (R.error().code() == ErrorCode::notready) { - LOG(DEBUG) << "dropped broadcast: " << R.move_as_error(); - } else { - LOG(INFO) << "dropped broadcast: " << R.move_as_error(); - } - } - }); - td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::prevalidate_block, std::move(B), - std::move(P)); -} - -void FullNodePrivateOverlay::process_broadcast(PublicKeyHash, ton_api::tonNode_newShardBlockBroadcast &query) { - td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::new_shard_block, - create_block_id(query.block_->block_), query.block_->cc_seqno_, - std::move(query.block_->data_)); -} - -void FullNodePrivateOverlay::receive_broadcast(PublicKeyHash src, td::BufferSlice broadcast) { - auto B = fetch_tl_object(std::move(broadcast), true); - if (B.is_error()) { - return; - } - - ton_api::downcast_call(*B.move_as_ok(), [src, Self = this](auto &obj) { Self->process_broadcast(src, obj); }); -} - -void FullNodePrivateOverlay::send_shard_block_info(BlockIdExt block_id, CatchainSeqno cc_seqno, td::BufferSlice data) { - if (!inited_) { - return; - } - auto B = create_serialize_tl_object( - create_tl_object(create_tl_block_id(block_id), cc_seqno, std::move(data))); - if (B.size() <= overlay::Overlays::max_simple_broadcast_size()) { - td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_ex, local_id_, overlay_id_, - local_id_.pubkey_hash(), 0, std::move(B)); - } else { - td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_fec_ex, local_id_, overlay_id_, - local_id_.pubkey_hash(), overlay::Overlays::BroadcastFlagAnySender(), std::move(B)); - } -} - -void FullNodePrivateOverlay::send_broadcast(BlockBroadcast broadcast) { - if (!inited_) { - return; - } - std::vector> sigs; - for (auto &sig : broadcast.signatures) { - sigs.emplace_back(create_tl_object(sig.node, sig.signature.clone())); - } - auto B = create_serialize_tl_object( - create_tl_block_id(broadcast.block_id), broadcast.catchain_seqno, broadcast.validator_set_hash, std::move(sigs), - broadcast.proof.clone(), broadcast.data.clone()); - td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_fec_ex, local_id_, overlay_id_, - local_id_.pubkey_hash(), overlay::Overlays::BroadcastFlagAnySender(), std::move(B)); -} - -void FullNodePrivateOverlay::start_up() { - std::sort(nodes_.begin(), nodes_.end()); - nodes_.erase(std::unique(nodes_.begin(), nodes_.end()), nodes_.end()); - - std::vector nodes; - for (const adnl::AdnlNodeIdShort &id : nodes_) { - nodes.push_back(id.bits256_value()); - } - auto X = create_hash_tl_object(zero_state_file_hash_, std::move(nodes)); - td::BufferSlice b{32}; - b.as_slice().copy_from(as_slice(X)); - overlay_id_full_ = overlay::OverlayIdFull{std::move(b)}; - overlay_id_ = overlay_id_full_.compute_short_id(); - - try_init(); -} - -void FullNodePrivateOverlay::try_init() { - // Sometimes adnl id is added to validator engine later (or not at all) - td::actor::send_closure( - adnl_, &adnl::Adnl::check_id_exists, local_id_, [SelfId = actor_id(this)](td::Result R) { - if (R.is_ok() && R.ok()) { - td::actor::send_closure(SelfId, &FullNodePrivateOverlay::init); - } else { - delay_action([SelfId]() { td::actor::send_closure(SelfId, &FullNodePrivateOverlay::try_init); }, - td::Timestamp::in(30.0)); - } - }); -} - -void FullNodePrivateOverlay::init() { - LOG(FULL_NODE_INFO) << "Creating private block overlay for adnl id " << local_id_ << " : " << nodes_.size() - << " nodes"; - class Callback : public overlay::Overlays::Callback { - public: - void receive_message(adnl::AdnlNodeIdShort src, overlay::OverlayIdShort overlay_id, td::BufferSlice data) override { - } - void receive_query(adnl::AdnlNodeIdShort src, overlay::OverlayIdShort overlay_id, td::BufferSlice data, - td::Promise promise) override { - } - void receive_broadcast(PublicKeyHash src, overlay::OverlayIdShort overlay_id, td::BufferSlice data) override { - td::actor::send_closure(node_, &FullNodePrivateOverlay::receive_broadcast, src, std::move(data)); - } - void check_broadcast(PublicKeyHash src, overlay::OverlayIdShort overlay_id, td::BufferSlice data, - td::Promise promise) override { - } - Callback(td::actor::ActorId node) : node_(node) { - } - - private: - td::actor::ActorId node_; - }; - - overlay::OverlayPrivacyRules rules{overlay::Overlays::max_fec_broadcast_size(), - overlay::CertificateFlags::AllowFec | overlay::CertificateFlags::Trusted, - {}}; - td::actor::send_closure(overlays_, &overlay::Overlays::create_private_overlay, local_id_, overlay_id_full_.clone(), - nodes_, std::make_unique(actor_id(this)), rules); - - td::actor::send_closure(rldp_, &rldp::Rldp::add_id, local_id_); - td::actor::send_closure(rldp2_, &rldp2::Rldp::add_id, local_id_); - inited_ = true; -} - -void FullNodePrivateOverlay::tear_down() { - if (inited_) { - td::actor::send_closure(overlays_, &ton::overlay::Overlays::delete_overlay, local_id_, overlay_id_); - } -} - -} // namespace fullnode - -} // namespace validator - -} // namespace ton diff --git a/validator/full-node-private-overlay.hpp b/validator/full-node-private-overlay.hpp deleted file mode 100644 index 6463fda2..00000000 --- a/validator/full-node-private-overlay.hpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . -*/ -#pragma once - -#include "full-node.h" - -namespace ton { - -namespace validator { - -namespace fullnode { - -class FullNodePrivateOverlay : public td::actor::Actor { - public: - void process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcast &query); - void process_broadcast(PublicKeyHash src, ton_api::tonNode_newShardBlockBroadcast &query); - template - void process_broadcast(PublicKeyHash, T &) { - VLOG(FULL_NODE_WARNING) << "dropping unknown broadcast"; - } - void receive_broadcast(PublicKeyHash src, td::BufferSlice query); - - void send_shard_block_info(BlockIdExt block_id, CatchainSeqno cc_seqno, td::BufferSlice data); - void send_broadcast(BlockBroadcast broadcast); - - void start_up() override; - void tear_down() override; - - FullNodePrivateOverlay(adnl::AdnlNodeIdShort local_id, std::vector nodes, - FileHash zero_state_file_hash, FullNodeConfig config, - td::actor::ActorId keyring, td::actor::ActorId adnl, - td::actor::ActorId rldp, td::actor::ActorId rldp2, - td::actor::ActorId overlays, - td::actor::ActorId validator_manager) - : local_id_(local_id) - , nodes_(std::move(nodes)) - , zero_state_file_hash_(zero_state_file_hash) - , config_(config) - , keyring_(keyring) - , adnl_(adnl) - , rldp_(rldp) - , rldp2_(rldp2) - , overlays_(overlays) - , validator_manager_(validator_manager) { - } - - private: - adnl::AdnlNodeIdShort local_id_; - std::vector nodes_; - FileHash zero_state_file_hash_; - FullNodeConfig config_; - - td::actor::ActorId keyring_; - td::actor::ActorId adnl_; - td::actor::ActorId rldp_; - td::actor::ActorId rldp2_; - td::actor::ActorId overlays_; - td::actor::ActorId validator_manager_; - - bool inited_ = false; - overlay::OverlayIdFull overlay_id_full_; - overlay::OverlayIdShort overlay_id_; - - void try_init(); - void init(); -}; - -} // namespace fullnode - -} // namespace validator - -} // namespace ton diff --git a/validator/full-node.cpp b/validator/full-node.cpp index 5a822b26..ebba50a0 100644 --- a/validator/full-node.cpp +++ b/validator/full-node.cpp @@ -50,7 +50,6 @@ void FullNodeImpl::add_permanent_key(PublicKeyHash key, td::Promise pr for (auto &shard : shards_) { td::actor::send_closure(shard.second, &FullNodeShard::update_validators, all_validators_, sign_cert_by_); } - create_private_block_overlay(key); promise.set_value(td::Unit()); } @@ -75,7 +74,6 @@ void FullNodeImpl::del_permanent_key(PublicKeyHash key, td::Promise pr for (auto &shard : shards_) { td::actor::send_closure(shard.second, &FullNodeShard::update_validators, all_validators_, sign_cert_by_); } - private_block_overlays_.erase(key); promise.set_value(td::Unit()); } @@ -181,10 +179,6 @@ void FullNodeImpl::send_shard_block_info(BlockIdExt block_id, CatchainSeqno cc_s VLOG(FULL_NODE_WARNING) << "dropping OUT shard block info message to unknown shard"; return; } - if (!private_block_overlays_.empty()) { - td::actor::send_closure(private_block_overlays_.begin()->second, &FullNodePrivateOverlay::send_shard_block_info, - block_id, cc_seqno, data.clone()); - } td::actor::send_closure(shard, &FullNodeShard::send_shard_block_info, block_id, cc_seqno, std::move(data)); } @@ -194,10 +188,6 @@ void FullNodeImpl::send_broadcast(BlockBroadcast broadcast) { VLOG(FULL_NODE_WARNING) << "dropping OUT broadcast to unknown shard"; return; } - if (!private_block_overlays_.empty()) { - td::actor::send_closure(private_block_overlays_.begin()->second, &FullNodePrivateOverlay::send_broadcast, - broadcast.clone()); - } td::actor::send_closure(shard, &FullNodeShard::send_broadcast, std::move(broadcast)); } @@ -299,7 +289,6 @@ void FullNodeImpl::got_key_block_proof(td::Ref proof) { PublicKeyHash l = PublicKeyHash::zero(); std::vector keys; - std::map current_validators; for (td::int32 i = -1; i <= 1; i++) { auto r = config->get_total_validator_set(i < 0 ? i : 1 - i); if (r.not_null()) { @@ -310,18 +299,10 @@ void FullNodeImpl::got_key_block_proof(td::Ref proof) { if (local_keys_.count(key)) { l = key; } - if (i == 1) { - current_validators[key] = adnl::AdnlNodeIdShort{el.addr.is_zero() ? key.bits256_value() : el.addr}; - } } } } - if (current_validators != current_validators_) { - current_validators_ = std::move(current_validators); - update_private_block_overlays(); - } - if (keys == all_validators_) { return; } @@ -340,7 +321,6 @@ void FullNodeImpl::got_zero_block_state(td::Ref state) { PublicKeyHash l = PublicKeyHash::zero(); std::vector keys; - std::map current_validators; for (td::int32 i = -1; i <= 1; i++) { auto r = m->get_total_validator_set(i < 0 ? i : 1 - i); if (r.not_null()) { @@ -351,18 +331,10 @@ void FullNodeImpl::got_zero_block_state(td::Ref state) { if (local_keys_.count(key)) { l = key; } - if (i == 1) { - current_validators[key] = adnl::AdnlNodeIdShort{el.addr.is_zero() ? key.bits256_value() : el.addr}; - } } } } - if (current_validators != current_validators_) { - current_validators_ = std::move(current_validators); - update_private_block_overlays(); - } - if (keys == all_validators_) { return; } @@ -484,29 +456,6 @@ void FullNodeImpl::start_up() { std::make_unique(actor_id(this)), std::move(P)); } -void FullNodeImpl::update_private_block_overlays() { - private_block_overlays_.clear(); - if (local_keys_.empty()) { - return; - } - for (const auto &key : local_keys_) { - create_private_block_overlay(key); - } -} - -void FullNodeImpl::create_private_block_overlay(PublicKeyHash key) { - CHECK(local_keys_.count(key)); - if (current_validators_.count(key)) { - std::vector nodes; - for (const auto &p : current_validators_) { - nodes.push_back(p.second); - } - private_block_overlays_[key] = td::actor::create_actor( - "BlocksPrivateOverlay", current_validators_[key], std::move(nodes), zero_state_file_hash_, config_, keyring_, - adnl_, rldp_, rldp2_, overlays_, validator_manager_); - } -} - FullNodeImpl::FullNodeImpl(PublicKeyHash local_id, adnl::AdnlNodeIdShort adnl_id, FileHash zero_state_file_hash, FullNodeConfig config, td::actor::ActorId keyring, td::actor::ActorId adnl, td::actor::ActorId rldp, diff --git a/validator/full-node.hpp b/validator/full-node.hpp index 838700b5..fc2dd75c 100644 --- a/validator/full-node.hpp +++ b/validator/full-node.hpp @@ -23,7 +23,6 @@ //#include "ton-node-slave.h" #include "interfaces/proof.h" #include "interfaces/shard.h" -#include "full-node-private-overlay.hpp" #include #include @@ -112,15 +111,9 @@ class FullNodeImpl : public FullNode { PublicKeyHash sign_cert_by_; std::vector all_validators_; - std::map current_validators_; std::set local_keys_; FullNodeConfig config_; - - std::map> private_block_overlays_; - - void update_private_block_overlays(); - void create_private_block_overlay(PublicKeyHash key); }; } // namespace fullnode From be9498234881ee025ca7669b7ee7712f30aa153e Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Tue, 16 Jan 2024 10:18:54 +0100 Subject: [PATCH 070/351] [emulator] Fix emulating on account_none and set account block_lt (#815) * fix acc_deleted emulation case * set account.block_lt --- emulator/emulator-extern.cpp | 17 ++++++++++++++--- emulator/transaction-emulator.cpp | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/emulator/emulator-extern.cpp b/emulator/emulator-extern.cpp index 9f06964e..f8e2f724 100644 --- a/emulator/emulator-extern.cpp +++ b/emulator/emulator-extern.cpp @@ -103,6 +103,7 @@ const char *transaction_emulator_emulate_transaction(void *transaction_emulator, td::Ref addr_slice; auto account_slice = vm::load_cell_slice(shard_account.account); + bool account_exists = block::gen::t_Account.get_tag(account_slice) == block::gen::Account::account; if (block::gen::t_Account.get_tag(account_slice) == block::gen::Account::account_none) { if (msg_tag == block::gen::CommonMsgInfo::ext_in_msg_info) { block::gen::CommonMsgInfo::Record_ext_in_msg_info info; @@ -120,12 +121,14 @@ const char *transaction_emulator_emulate_transaction(void *transaction_emulator, } else { ERROR_RESPONSE(PSTRING() << "Only ext in and int message are supported"); } - } else { + } else if (block::gen::t_Account.get_tag(account_slice) == block::gen::Account::account) { block::gen::Account::Record_account account_record; if (!tlb::unpack(account_slice, account_record)) { ERROR_RESPONSE(PSTRING() << "Can't unpack account cell"); } addr_slice = std::move(account_record.addr); + } else { + ERROR_RESPONSE(PSTRING() << "Can't parse account cell"); } ton::WorkchainId wc; ton::StdSmcAddress addr; @@ -139,8 +142,16 @@ const char *transaction_emulator_emulate_transaction(void *transaction_emulator, now = (unsigned)std::time(nullptr); } bool is_special = wc == ton::masterchainId && emulator->get_config().is_special_smartcontract(addr); - if (!account.unpack(vm::load_cell_slice_ref(shard_account_cell.move_as_ok()), now, is_special)) { - ERROR_RESPONSE(PSTRING() << "Can't unpack shard account"); + if (account_exists) { + if (!account.unpack(vm::load_cell_slice_ref(shard_account_cell.move_as_ok()), now, is_special)) { + ERROR_RESPONSE(PSTRING() << "Can't unpack shard account"); + } + } else { + if (!account.init_new(now)) { + ERROR_RESPONSE(PSTRING() << "Can't init new account"); + } + account.last_trans_lt_ = shard_account.last_trans_lt; + account.last_trans_hash_ = shard_account.last_trans_hash; } auto result = emulator->emulate_transaction(std::move(account), message_cell, now, 0, block::transaction::Transaction::tr_ord); diff --git a/emulator/transaction-emulator.cpp b/emulator/transaction-emulator.cpp index 81cf2e9f..2e8ba037 100644 --- a/emulator/transaction-emulator.cpp +++ b/emulator/transaction-emulator.cpp @@ -42,6 +42,7 @@ td::Result> TransactionEmu if (!lt) { lt = (account.last_trans_lt_ / block::ConfigInfo::get_lt_align() + 1) * block::ConfigInfo::get_lt_align(); // next block after account_.last_trans_lt_ } + account.block_lt = lt - lt % block::ConfigInfo::get_lt_align(); compute_phase_cfg.libraries = std::make_unique(libraries_); compute_phase_cfg.ignore_chksig = ignore_chksig_; From a68b5cbe627d4b68da68f05079e0cfc75aacd59f Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Tue, 16 Jan 2024 14:24:46 +0300 Subject: [PATCH 071/351] Improve validator session stats (#861) --- tl/generate/scheme/ton_api.tl | 5 +-- tl/generate/scheme/ton_api.tlo | Bin 86116 -> 86292 bytes validator-session/validator-session-types.h | 5 +++ validator-session/validator-session.cpp | 34 ++++++++++++++------ validator-session/validator-session.h | 1 + validator-session/validator-session.hpp | 4 ++- validator/manager.cpp | 11 ++++--- validator/validator-group.cpp | 16 ++++++++- 8 files changed, 58 insertions(+), 18 deletions(-) diff --git a/tl/generate/scheme/ton_api.tl b/tl/generate/scheme/ton_api.tl index 346d9152..21e8318f 100644 --- a/tl/generate/scheme/ton_api.tl +++ b/tl/generate/scheme/ton_api.tl @@ -742,11 +742,12 @@ http.server.config dhs:(vector http.server.dnsEntry) local_hosts:(vector http.se ---types--- -validatorSession.statsProducer id:int256 block_status:int block_timestamp:long = validatorSession.StatsProducer; +validatorSession.statsProducer id:int256 candidate_id:int256 block_status:int block_timestamp:long comment:string = validatorSession.StatsProducer; validatorSession.statsRound timestamp:long producers:(vector validatorSession.statsProducer) = validatorSession.StatsRound; -validatorSession.stats id:tonNode.blockId timestamp:long self:int256 creator:int256 total_validators:int total_weight:long +validatorSession.stats success:Bool id:tonNode.blockIdExt timestamp:long self:int256 session_id:int256 cc_seqno:int + creator:int256 total_validators:int total_weight:long signatures:int signatures_weight:long approve_signatures:int approve_signatures_weight:long first_round:int rounds:(vector validatorSession.statsRound) = validatorSession.Stats; diff --git a/tl/generate/scheme/ton_api.tlo b/tl/generate/scheme/ton_api.tlo index 5b8e1c725e39ceff4097e4a654c796c9f84ff73e..9b74f1c3bbef41b10dba639833177fe7f6b6df74 100644 GIT binary patch delta 201 zcmaE|fOX0u)(s8@Ebn*lHBWXiFkm?$`9XJcg@M2&u+a1#CPoPfkmSu{LO%Qq3=GoG z?rX9amnJ8t78g%`U@kE^BTZ&{2P>n>^e;?|3e!968AT@NbO=q}^TDy crnj&%`b=J6%mESl!^+qJW^M0aW9;z)069x8RsaA1 diff --git a/validator-session/validator-session-types.h b/validator-session/validator-session-types.h index 57957478..bcbaa8f7 100644 --- a/validator-session/validator-session-types.h +++ b/validator-session/validator-session-types.h @@ -74,8 +74,10 @@ struct ValidatorSessionStats { struct Producer { PublicKeyHash id = PublicKeyHash::zero(); + ValidatorSessionCandidateId candidate_id = ValidatorSessionCandidateId::zero(); int block_status = status_none; td::uint64 block_timestamp = 0; + std::string comment; }; struct Round { td::uint64 timestamp = 0; @@ -85,6 +87,9 @@ struct ValidatorSessionStats { td::uint32 first_round; std::vector rounds; + bool success = false; + ValidatorSessionId session_id = ValidatorSessionId::zero(); + CatchainSeqno cc_seqno = 0; td::uint64 timestamp = 0; PublicKeyHash self = PublicKeyHash::zero(); PublicKeyHash creator = PublicKeyHash::zero(); diff --git a/validator-session/validator-session.cpp b/validator-session/validator-session.cpp index e08d8a7e..88de0fa5 100644 --- a/validator-session/validator-session.cpp +++ b/validator-session/validator-session.cpp @@ -288,7 +288,7 @@ void ValidatorSessionImpl::process_broadcast(PublicKeyHash src, td::BufferSlice CHECK(!pending_reject_.count(block_id)); CHECK(!rejected_.count(block_id)); - stats_set_candidate_status(cur_round_, src, ValidatorSessionStats::status_received); + stats_set_candidate_status(cur_round_, src, block_id, ValidatorSessionStats::status_received); auto v = virtual_state_->choose_blocks_to_approve(description(), local_idx()); for (auto &b : v) { if (b && SentBlock::get_block_id(b) == block_id) { @@ -361,7 +361,8 @@ void ValidatorSessionImpl::process_query(PublicKeyHash src, td::BufferSlice data void ValidatorSessionImpl::candidate_decision_fail(td::uint32 round, ValidatorSessionCandidateId hash, std::string result, td::uint32 src, td::BufferSlice proof) { - stats_set_candidate_status(round, description().get_source_id(src), ValidatorSessionStats::status_rejected); + stats_set_candidate_status(round, description().get_source_id(src), hash, ValidatorSessionStats::status_rejected, + result); if (round != cur_round_) { return; } @@ -376,7 +377,8 @@ void ValidatorSessionImpl::candidate_decision_fail(td::uint32 round, ValidatorSe void ValidatorSessionImpl::candidate_decision_ok(td::uint32 round, ValidatorSessionCandidateId hash, RootHash root_hash, FileHash file_hash, td::uint32 src, td::uint32 ok_from) { - stats_set_candidate_status(round, description().get_source_id(src), ValidatorSessionStats::status_approved); + stats_set_candidate_status(round, description().get_source_id(src), hash, ValidatorSessionStats::status_approved, + PSTRING() << "ts=" << ok_from); if (round != cur_round_) { return; } @@ -812,15 +814,13 @@ void ValidatorSessionImpl::on_new_round(td::uint32 round) { if (!have_block) { callback_->on_block_skipped(cur_round_); } else { + cur_stats_.success = true; cur_stats_.timestamp = (td::uint64)td::Clocks::system(); - cur_stats_.total_validators = description().get_total_nodes(); - cur_stats_.total_weight = description().get_total_weight(); cur_stats_.signatures = (td::uint32)export_sigs.size(); cur_stats_.signatures_weight = signatures_weight; cur_stats_.approve_signatures = (td::uint32)export_approve_sigs.size(); cur_stats_.approve_signatures_weight = approve_signatures_weight; cur_stats_.creator = description().get_source_id(block->get_src_idx()); - cur_stats_.self = description().get_source_id(local_idx()); if (it == blocks_.end()) { callback_->on_block_committed(cur_round_, description().get_source_public_key(block->get_src_idx()), @@ -923,6 +923,12 @@ void ValidatorSessionImpl::destroy() { stop(); } +void ValidatorSessionImpl::get_current_stats(td::Promise promise) { + ValidatorSessionStats stats = cur_stats_; + stats.timestamp = (td::uint64)td::Clocks::system(); + promise.set_result(std::move(stats)); +} + void ValidatorSessionImpl::start_up() { CHECK(!rldp_.empty()); cur_round_ = 0; @@ -941,6 +947,10 @@ void ValidatorSessionImpl::start_up() { void ValidatorSessionImpl::stats_init() { cur_stats_ = ValidatorSessionStats(); cur_stats_.first_round = cur_round_; + cur_stats_.session_id = unique_hash_; + cur_stats_.total_validators = description().get_total_nodes(); + cur_stats_.total_weight = description().get_total_weight(); + cur_stats_.self = description().get_source_id(local_idx()); stats_add_round(); } @@ -961,20 +971,26 @@ void ValidatorSessionImpl::stats_add_round() { } } -void ValidatorSessionImpl::stats_set_candidate_status(td::uint32 round, PublicKeyHash src, int status) { +void ValidatorSessionImpl::stats_set_candidate_status(td::uint32 round, PublicKeyHash src, + ValidatorSessionCandidateId candidate_id, int status, + std::string comment) { if (round < cur_stats_.first_round || round - cur_stats_.first_round >= cur_stats_.rounds.size()) { return; } - auto& stats_round = cur_stats_.rounds[round - cur_stats_.first_round]; + auto &stats_round = cur_stats_.rounds[round - cur_stats_.first_round]; auto it = std::find_if(stats_round.producers.begin(), stats_round.producers.end(), - [&](const ValidatorSessionStats::Producer& p) { return p.id == src; }); + [&](const ValidatorSessionStats::Producer &p) { return p.id == src; }); if (it == stats_round.producers.end()) { return; } + it->candidate_id = candidate_id; if (it->block_status == ValidatorSessionStats::status_none) { it->block_timestamp = (td::uint64)td::Clocks::system(); } it->block_status = status; + if (!comment.empty()) { + it->comment = std::move(comment); + } } td::actor::ActorOwn ValidatorSession::create( diff --git a/validator-session/validator-session.h b/validator-session/validator-session.h index 376cac45..3f3b7ab9 100644 --- a/validator-session/validator-session.h +++ b/validator-session/validator-session.h @@ -91,6 +91,7 @@ class ValidatorSession : public td::actor::Actor { virtual void start() = 0; virtual void destroy() = 0; + virtual void get_current_stats(td::Promise promise) = 0; static td::actor::ActorOwn create( catchain::CatChainSessionId session_id, ValidatorSessionOptions opts, PublicKeyHash local_id, diff --git a/validator-session/validator-session.hpp b/validator-session/validator-session.hpp index 1717c99f..2dcbb46c 100644 --- a/validator-session/validator-session.hpp +++ b/validator-session/validator-session.hpp @@ -160,7 +160,8 @@ class ValidatorSessionImpl : public ValidatorSession { ValidatorSessionStats cur_stats_; void stats_init(); void stats_add_round(); - void stats_set_candidate_status(td::uint32 round, PublicKeyHash src, int status); + void stats_set_candidate_status(td::uint32 round, PublicKeyHash src, ValidatorSessionCandidateId candidate_id, + int status, std::string comment = ""); public: ValidatorSessionImpl(catchain::CatChainSessionId session_id, ValidatorSessionOptions opts, PublicKeyHash local_id, @@ -173,6 +174,7 @@ class ValidatorSessionImpl : public ValidatorSession { void start() override; void destroy() override; + void get_current_stats(td::Promise promise) override; void process_blocks(std::vector blocks); void finished_processing(); diff --git a/validator/manager.cpp b/validator/manager.cpp index dcda7b6e..21fa5887 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -2640,18 +2640,19 @@ void ValidatorManagerImpl::log_validator_session_stats(BlockIdExt block_id, } std::vector> rounds; - for (const auto& round : stats.rounds) { + for (const auto &round : stats.rounds) { std::vector> producers; - for (const auto& producer : round.producers) { + for (const auto &producer : round.producers) { producers.push_back(create_tl_object( - producer.id.bits256_value(), producer.block_status, producer.block_timestamp)); + producer.id.bits256_value(), producer.candidate_id, producer.block_status, producer.block_timestamp, + producer.comment)); } rounds.push_back(create_tl_object(round.timestamp, std::move(producers))); } auto obj = create_tl_object( - create_tl_block_id_simple(block_id.id), stats.timestamp, stats.self.bits256_value(), - stats.creator.bits256_value(), stats.total_validators, stats.total_weight, stats.signatures, + stats.success, create_tl_block_id(block_id), stats.timestamp, stats.self.bits256_value(), stats.session_id, + stats.cc_seqno, stats.creator.bits256_value(), stats.total_validators, stats.total_weight, stats.signatures, stats.signatures_weight, stats.approve_signatures, stats.approve_signatures_weight, stats.first_round, std::move(rounds)); std::string s = td::json_encode(td::ToJson(*obj.get()), false); diff --git a/validator/validator-group.cpp b/validator/validator-group.cpp index 7baf0f05..51217bf9 100644 --- a/validator/validator-group.cpp +++ b/validator/validator-group.cpp @@ -136,7 +136,8 @@ void ValidatorGroup::accept_block_candidate(td::uint32 round_id, PublicKeyHash s std::vector approve_signatures, validatorsession::ValidatorSessionStats stats, td::Promise promise) { - if (round_id >= last_known_round_id_) { + stats.cc_seqno = validator_set_->get_catchain_seqno(); + if (round_id >= last_known_round_id_) { last_known_round_id_ = round_id + 1; } auto sig_set = create_signature_set(std::move(signatures)); @@ -354,6 +355,19 @@ void ValidatorGroup::start(std::vector prev, BlockIdExt min_masterch void ValidatorGroup::destroy() { if (!session_.empty()) { + td::actor::send_closure(session_, &validatorsession::ValidatorSession::get_current_stats, + [manager = manager_, cc_seqno = validator_set_->get_catchain_seqno(), + block_id = create_next_block_id(RootHash::zero(), FileHash::zero())]( + td::Result R) { + if (R.is_error()) { + LOG(WARNING) << "Failed to get validator session stats: " << R.move_as_error(); + return; + } + auto stats = R.move_as_ok(); + stats.cc_seqno = cc_seqno; + td::actor::send_closure(manager, &ValidatorManager::log_validator_session_stats, block_id, + std::move(stats)); + }); auto ses = session_.release(); delay_action([ses]() mutable { td::actor::send_closure(ses, &validatorsession::ValidatorSession::destroy); }, td::Timestamp::in(10.0)); From 6f277b40bfaa4b429ab23c4c9576bebb1f18bef2 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 17 Jan 2024 09:57:31 +0300 Subject: [PATCH 072/351] Add changelog --- Changelog.md | 12 ++++++++++++ recent_changelog.md | 17 +++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/Changelog.md b/Changelog.md index 3310d6a2..9fec686d 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,15 @@ +## 2024.01 Update + +1. Fixes in how gas in transactions on special accounts is accounted in block limit. Previously, gas was counted as usual, so to conduct elections that costs >30m gas block limit in masterchain was set to 37m gas. To lower the limit for safety reasons it is proposed to not count gas on special accounts. Besides `gas_max` is set to `special_gas_limit` for all types of transactions on special accounts. New behavior is activated through setting `gas_prices_v3` in `ConfigParam 20;`. + * Besides update of config temporally increases gas limit on `EQD_v9j1rlsuHHw2FIhcsCFFSD367ldfDdCKcsNmNpIRzUlu` to `special_gas_limit`, see [details](https://t.me/tonstatus/88). +2. Improvements in LS behavior + * Improved detection of the state with all shards applied to decrease rate of `Block is not applied` error + * Better error logs: `block not in db` and `block is not applied` separation + * Fix error in proof generation for blocks after merge +3. Improvements in DHT work and storage, CellDb, config.json ammendment, peer misbehavior detection, validator session stats collection, emulator. + +Besides the work of the core team, this update is based on the efforts of @XaBbl4 (peer misbehavior detection). + ## 2023.12 Update 1. Optimized message queue handling, now queue cleaning speed doesn't depend on total queue size diff --git a/recent_changelog.md b/recent_changelog.md index 5e122454..637f416c 100644 --- a/recent_changelog.md +++ b/recent_changelog.md @@ -1,10 +1,11 @@ -## 2023.12 Update +## 2024.01 Update -1. Optimized message queue handling, now queue cleaning speed doesn't depend on total queue size - * Cleaning delivered messages using lt augmentation instead of random search / consequtive walk - * Keeping root cell of queue message in memory until outdated (caching) -2. Changes to block collation/validation limits -3. Stop accepting new external message if message queue is overloaded -4. Introducing conditions for shard split/merge based on queue size +1. Fixes in how gas in transactions on special accounts is accounted in block limit. Previously, gas was counted as usual, so to conduct elections that costs >30m gas block limit in masterchain was set to 37m gas. To lower the limit for safety reasons it is proposed to not count gas on special accounts. Besides `gas_max` is set to `special_gas_limit` for all types of transactions on special accounts. New behavior is activated through setting `gas_prices_v3` in `ConfigParam 20;`. + * Besides update of config temporally increases gas limit on `EQD_v9j1rlsuHHw2FIhcsCFFSD367ldfDdCKcsNmNpIRzUlu` to `special_gas_limit`, see [details](https://t.me/tonstatus/88). +2. Improvements in LS behavior + * Improved detection of the state with all shards applied to decrease rate of `Block is not applied` error + * Better error logs: `block not in db` and `block is not applied` separation + * Fix error in proof generation for blocks after merge +3. Improvements in DHT work and storage, CellDb, config.json ammendment, peer misbehavior detection, validator session stats collection, emulator. -Read [more](https://blog.ton.org/technical-report-december-5-inscriptions-launch-on-ton) on that update. +Besides the work of the core team, this update is based on the efforts of @XaBbl4 (peer misbehavior detection). From b1f2160510a5afd2c29c8a67cfc351013ff1028a Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 17 Jan 2024 12:01:34 +0300 Subject: [PATCH 073/351] Fix setting gas limits in transaction.cpp (#864) Co-authored-by: SpyCheese --- crypto/block/transaction.cpp | 11 ++++++----- validator/impl/external-message.cpp | 5 +++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index b4bd648b..ae50a710 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1220,7 +1220,6 @@ bool Transaction::compute_gas_limits(ComputePhase& cp, const ComputePhaseConfig& } else { cp.gas_max = gas_bought_for(cfg, balance.grams); } - cp.gas_credit = 0; if (trans_type != tr_ord || (account.is_special && cfg.special_gas_full)) { // may use all gas that can be bought using remaining balance cp.gas_limit = cp.gas_max; @@ -1228,10 +1227,12 @@ bool Transaction::compute_gas_limits(ComputePhase& cp, const ComputePhaseConfig& // originally use only gas bought using remaining message balance // if the message is "accepted" by the smart contract, the gas limit will be set to gas_max cp.gas_limit = std::min(gas_bought_for(cfg, msg_balance_remaining.grams), cp.gas_max); - if (!block::tlb::t_Message.is_internal(in_msg)) { - // external messages carry no balance, give them some credit to check whether they are accepted - cp.gas_credit = std::min(cfg.gas_credit, cp.gas_max); - } + } + if (trans_type == tr_ord && !block::tlb::t_Message.is_internal(in_msg)) { + // external messages carry no balance, give them some credit to check whether they are accepted + cp.gas_credit = std::min(cfg.gas_credit, cp.gas_max); + } else { + cp.gas_credit = 0; } LOG(DEBUG) << "gas limits: max=" << cp.gas_max << ", limit=" << cp.gas_limit << ", credit=" << cp.gas_credit; return true; diff --git a/validator/impl/external-message.cpp b/validator/impl/external-message.cpp index 5c1848aa..e7665afc 100644 --- a/validator/impl/external-message.cpp +++ b/validator/impl/external-message.cpp @@ -102,7 +102,7 @@ void ExtMessageQ::run_message(td::BufferSlice data, block::SizeLimitsConfig::Ext run_fetch_account_state( wc, addr, manager, - [promise = std::move(promise), msg_root = root, wc, + [promise = std::move(promise), msg_root = root, wc, addr, M](td::Result, UnixTime, LogicalTime, std::unique_ptr>> res) mutable { if (res.is_error()) { @@ -114,7 +114,8 @@ void ExtMessageQ::run_message(td::BufferSlice data, block::SizeLimitsConfig::Ext auto utime = std::get<1>(tuple); auto lt = std::get<2>(tuple); auto config = std::move(std::get<3>(tuple)); - if (!acc.unpack(shard_acc, utime, false)) { + bool special = wc == masterchainId && config->is_special_smartcontract(addr); + if (!acc.unpack(shard_acc, utime, special)) { promise.set_error(td::Status::Error(PSLICE() << "Failed to unpack account state")); } else { auto status = run_message_on_account(wc, &acc, utime, lt + 1, msg_root, std::move(config)); From 128a85bee568e84146f1e985a92ea85011d1e380 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Sun, 21 Jan 2024 12:59:59 +0300 Subject: [PATCH 074/351] Use Config 8 to activate new gas limit behavior instead of new GasLimitsPrices constructor (#867) * Remove gas_prices_v3, enable new gas limits by GlobalVersion = 5 * Change final date for higher gas limit --------- Co-authored-by: SpyCheese --- common/global-version.h | 2 +- crypto/block/block.tlb | 5 ----- crypto/block/mc-config.cpp | 4 ---- crypto/block/mc-config.h | 1 - crypto/block/transaction.cpp | 13 +++++-------- doc/GlobalVersions.md | 12 +++++++++++- validator/impl/validate-query.cpp | 1 + 7 files changed, 18 insertions(+), 20 deletions(-) diff --git a/common/global-version.h b/common/global-version.h index 01c1795d..9b23d46d 100644 --- a/common/global-version.h +++ b/common/global-version.h @@ -19,6 +19,6 @@ namespace ton { // See doc/GlobalVersions.md -const int SUPPORTED_VERSION = 4; +const int SUPPORTED_VERSION = 5; } diff --git a/crypto/block/block.tlb b/crypto/block/block.tlb index eb1f8b94..4b36f13b 100644 --- a/crypto/block/block.tlb +++ b/crypto/block/block.tlb @@ -696,11 +696,6 @@ gas_prices_ext#de gas_price:uint64 gas_limit:uint64 special_gas_limit:uint64 gas block_gas_limit:uint64 freeze_due_limit:uint64 delete_due_limit:uint64 = GasLimitsPrices; -// same fields as gas_prices_ext; behavior differs -gas_prices_v3#df gas_price:uint64 gas_limit:uint64 special_gas_limit:uint64 gas_credit:uint64 - block_gas_limit:uint64 freeze_due_limit:uint64 delete_due_limit:uint64 - = GasLimitsPrices; - gas_flat_pfx#d1 flat_gas_limit:uint64 flat_gas_price:uint64 other:GasLimitsPrices = GasLimitsPrices; diff --git a/crypto/block/mc-config.cpp b/crypto/block/mc-config.cpp index 51402142..0cef7322 100644 --- a/crypto/block/mc-config.cpp +++ b/crypto/block/mc-config.cpp @@ -654,13 +654,9 @@ td::Result Config::do_get_gas_limits_prices(td::Ref c res.delete_due_limit = r.delete_due_limit; }; block::gen::GasLimitsPrices::Record_gas_prices_ext rec; - block::gen::GasLimitsPrices::Record_gas_prices_v3 rec_v3; vm::CellSlice cs0 = cs; if (tlb::unpack(cs, rec)) { f(rec, rec.special_gas_limit); - } else if (tlb::unpack(cs = cs0, rec_v3)) { - f(rec_v3, rec_v3.special_gas_limit); - res.special_full_limit = true; } else { block::gen::GasLimitsPrices::Record_gas_prices rec0; if (tlb::unpack(cs = cs0, rec0)) { diff --git a/crypto/block/mc-config.h b/crypto/block/mc-config.h index dcc48b4b..caab93f3 100644 --- a/crypto/block/mc-config.h +++ b/crypto/block/mc-config.h @@ -349,7 +349,6 @@ struct GasLimitsPrices { td::uint64 block_gas_limit{0}; td::uint64 freeze_due_limit{0}; td::uint64 delete_due_limit{0}; - bool special_full_limit{false}; td::RefInt256 compute_gas_price(td::uint64 gas_used) const; }; diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index ae50a710..ec93e11c 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1039,12 +1039,8 @@ bool ComputePhaseConfig::parse_GasLimitsPrices_internal(Ref cs, t delete_due_limit = td::make_refint(r.delete_due_limit); }; block::gen::GasLimitsPrices::Record_gas_prices_ext rec; - block::gen::GasLimitsPrices::Record_gas_prices_v3 rec_v3; if (tlb::csr_unpack(cs, rec)) { f(rec, rec.special_gas_limit); - } else if (tlb::csr_unpack(cs, rec_v3)) { - f(rec_v3, rec_v3.special_gas_limit); - special_gas_full = true; } else { block::gen::GasLimitsPrices::Record_gas_prices rec0; if (tlb::csr_unpack(std::move(cs), rec0)) { @@ -1153,8 +1149,8 @@ namespace transaction { * not enough to clean up old queires, thus locking funds inside. * See comment in crypto/smartcont/highload-wallet-v2-code.fc for details on why this happened. * Account address: EQD_v9j1rlsuHHw2FIhcsCFFSD367ldfDdCKcsNmNpIRzUlu - * It was proposed to validators to increase gas limit for this account for a limited amount of time (until 2024-02-16). - * It is activated by setting gas_prices_v3 in ConfigParam 20 (config_mc_gas_prices). + * It was proposed to validators to increase gas limit for this account for a limited amount of time (until 2024-02-29). + * It is activated by setting global version to 5 in ConfigParam 8. * This config change also activates new behavior for special accounts in masterchain. * * @param cfg The compute phase configuration. @@ -1164,10 +1160,10 @@ namespace transaction { * @returns True if gas_limit override is required, false otherwise */ static bool override_gas_limit(const ComputePhaseConfig& cfg, ton::UnixTime now, const Account& account) { - if (!cfg.mc_gas_prices.special_full_limit) { + if (!cfg.special_gas_full) { return false; } - ton::UnixTime until = 1708041600; // 2024-02-16 00:00:00 UTC + ton::UnixTime until = 1709164800; // 2024-02-29 00:00:00 UTC ton::WorkchainId wc = 0; const char* addr_hex = "FFBFD8F5AE5B2E1C7C3614885CB02145483DFAEE575F0DD08A72C366369211CD"; return now < until && account.workchain == wc && account.addr.to_hex() == addr_hex; @@ -3533,6 +3529,7 @@ td::Status FetchConfigParams::fetch_config_params( TRY_RESULT_PREFIX(mc_gas_prices, config.get_gas_limits_prices(true), "cannot unpack masterchain gas prices and limits: "); compute_phase_cfg->mc_gas_prices = std::move(mc_gas_prices); + compute_phase_cfg->special_gas_full = config.get_global_version() >= 5; storage_phase_cfg->enable_due_payment = config.get_global_version() >= 4; compute_phase_cfg->block_rand_seed = *rand_seed; compute_phase_cfg->max_vm_data_depth = size_limits.max_vm_data_depth; diff --git a/doc/GlobalVersions.md b/doc/GlobalVersions.md index ccfca940..7d9729f8 100644 --- a/doc/GlobalVersions.md +++ b/doc/GlobalVersions.md @@ -36,4 +36,14 @@ intermediate value before division (e.g. `(xy+w)/z`). * Flag +16 in actions "Send message", "Reserve", "Change library" causes bounce if action fails. ### Storage phase -* Unpaid storage fee is now saved to `due_payment` \ No newline at end of file +* Unpaid storage fee is now saved to `due_payment` + +## Version 5 +Version 5 enables higher gas limits for special contracts. + +* Gas limit for all transactions on special contracts is set to `special_gas_limit` from `ConfigParam 20` (which is 35M at the moment of writing). +Previously only ticktock transactions had this limit, while ordinary transactions could use up to `gas_limit` gas (1M). +* Gas usage of special contracts is not taken into account when checking block limits. This allows keeping masterchain block limits low +while having high gas limits for elector. +* Gas limit on `EQD_v9j1rlsuHHw2FIhcsCFFSD367ldfDdCKcsNmNpIRzUlu` is increased to `special_gas_limit * 2` until 2024-02-29. +See [this post](https://t.me/tonstatus/88) for details. \ No newline at end of file diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index 94eded6c..f5dc28e2 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -945,6 +945,7 @@ bool ValidateQuery::fetch_config_params() { return fatal_error(mc_gas_prices.move_as_error_prefix("cannot unpack masterchain gas prices and limits: ")); } compute_phase_cfg_.mc_gas_prices = mc_gas_prices.move_as_ok(); + compute_phase_cfg_.special_gas_full = config_->get_global_version() >= 5; storage_phase_cfg_.enable_due_payment = config_->get_global_version() >= 4; compute_phase_cfg_.block_rand_seed = rand_seed_; compute_phase_cfg_.libraries = std::make_unique(config_->get_libraries_root(), 256); From 42d4c051efa4f4b4c1337dfe4681e080c1267cf2 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 22 Jan 2024 12:34:49 +0300 Subject: [PATCH 075/351] Disallow recursive library cells (#868) * Disallow recursive library cells * Stop emulation of external messages on accept --------- Co-authored-by: SpyCheese --- crypto/block/transaction.cpp | 1 + crypto/block/transaction.h | 1 + crypto/vm/cellops.cpp | 31 +++++++++++++++++++++++++++++ crypto/vm/cells/CellSlice.cpp | 5 +++++ crypto/vm/tonops.cpp | 4 ++++ crypto/vm/vm.h | 7 +++++++ validator/impl/external-message.cpp | 1 + 7 files changed, 50 insertions(+) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index ec93e11c..e43b9305 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1559,6 +1559,7 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { vm.set_global_version(cfg.global_version); vm.set_c7(prepare_vm_c7(cfg)); // tuple with SmartContractInfo vm.set_chksig_always_succeed(cfg.ignore_chksig); + vm.set_stop_on_accept_message(cfg.stop_on_accept_message); // vm.incr_stack_trace(1); // enable stack dump after each step LOG(DEBUG) << "starting VM"; diff --git a/crypto/block/transaction.h b/crypto/block/transaction.h index 7539efe0..1ed2dfd3 100644 --- a/crypto/block/transaction.h +++ b/crypto/block/transaction.h @@ -120,6 +120,7 @@ struct ComputePhaseConfig { std::unique_ptr suspended_addresses; SizeLimitsConfig size_limits; int vm_log_verbosity = 0; + bool stop_on_accept_message = false; ComputePhaseConfig() : gas_price(0), gas_limit(0), special_gas_limit(0), gas_credit(0) { compute_threshold(); diff --git a/crypto/vm/cellops.cpp b/crypto/vm/cellops.cpp index 9e10e072..9b702fcd 100644 --- a/crypto/vm/cellops.cpp +++ b/crypto/vm/cellops.cpp @@ -892,6 +892,37 @@ int exec_load_special_cell(VmState* st, bool quiet) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute XLOAD" << (quiet ? "Q" : ""); auto cell = stack.pop_cell(); + auto r_loaded_cell = cell->load_cell(); + if (r_loaded_cell.is_error()) { + if (quiet) { + stack.push_bool(false); + return 0; + } else { + throw VmError{Excno::cell_und, "failed to load cell"}; + } + } + auto loaded_cell = r_loaded_cell.move_as_ok(); + if (loaded_cell.data_cell->is_special()) { + if (loaded_cell.data_cell->special_type() != CellTraits::SpecialType::Library) { + if (quiet) { + stack.push_bool(false); + return 0; + } else { + throw VmError{Excno::cell_und, "unexpected special cell"}; + } + } + CellSlice cs(std::move(loaded_cell)); + DCHECK(cs.size() == Cell::hash_bits + 8); + cell = st->load_library(cs.data_bits() + 8); + if (cell.is_null()) { + if (quiet) { + stack.push_bool(false); + return 0; + } else { + throw VmError{Excno::cell_und, "failed to load library cell"}; + } + } + } stack.push_cell(cell); if (quiet) { stack.push_bool(true); diff --git a/crypto/vm/cells/CellSlice.cpp b/crypto/vm/cells/CellSlice.cpp index e1df5759..cbfc9e50 100644 --- a/crypto/vm/cells/CellSlice.cpp +++ b/crypto/vm/cells/CellSlice.cpp @@ -1056,6 +1056,7 @@ std::ostream& operator<<(std::ostream& os, Ref cs_ref) { // If can_be_special is not null, then it is allowed to load special cell // Flag whether loaded cell is actually special will be stored into can_be_special VirtualCell::LoadedCell load_cell_slice_impl(Ref cell, bool* can_be_special) { + bool library_loaded = false; while (true) { auto* vm_state_interface = VmStateInterface::get(); if (vm_state_interface) { @@ -1076,6 +1077,10 @@ VirtualCell::LoadedCell load_cell_slice_impl(Ref cell, bool* can_be_specia *can_be_special = loaded_cell.data_cell->is_special(); } else if (loaded_cell.data_cell->is_special()) { if (loaded_cell.data_cell->special_type() == DataCell::SpecialType::Library) { + if (library_loaded) { + throw VmError{Excno::cell_und, "failed to load library cell: recursive library cells are not allowed"}; + } + library_loaded = true; if (vm_state_interface) { CellSlice cs(std::move(loaded_cell)); DCHECK(cs.size() == Cell::hash_bits + 8); diff --git a/crypto/vm/tonops.cpp b/crypto/vm/tonops.cpp index d150f30b..dce61797 100644 --- a/crypto/vm/tonops.cpp +++ b/crypto/vm/tonops.cpp @@ -67,6 +67,10 @@ int exec_set_gas_generic(VmState* st, long long new_gas_limit) { throw VmNoGas{}; } st->change_gas_limit(new_gas_limit); + if (st->get_stop_on_accept_message()) { + VM_LOG(st) << "External message is accepted, stopping TVM"; + return st->jump(td::Ref{true, 0}); + } return 0; } diff --git a/crypto/vm/vm.h b/crypto/vm/vm.h index 2066db4c..fd18f92d 100644 --- a/crypto/vm/vm.h +++ b/crypto/vm/vm.h @@ -98,6 +98,7 @@ class VmState final : public VmStateInterface { td::HashSet loaded_cells; int stack_trace{0}, debug_off{0}; bool chksig_always_succeed{false}; + bool stop_on_accept_message{false}; td::optional missing_library; td::uint16 max_data_depth = 512; // Default value int global_version{0}; @@ -381,6 +382,12 @@ class VmState final : public VmStateInterface { bool get_chksig_always_succeed() const { return chksig_always_succeed; } + void set_stop_on_accept_message(bool flag) { + stop_on_accept_message = flag; + } + bool get_stop_on_accept_message() const { + return stop_on_accept_message; + } Ref ref_to_cont(Ref cell) const { return td::make_ref(load_cell_slice_ref(std::move(cell)), get_cp()); } diff --git a/validator/impl/external-message.cpp b/validator/impl/external-message.cpp index e7665afc..073e7360 100644 --- a/validator/impl/external-message.cpp +++ b/validator/impl/external-message.cpp @@ -156,6 +156,7 @@ td::Status ExtMessageQ::run_message_on_account(ton::WorkchainId wc, } compute_phase_cfg_.libraries = std::make_unique(config->get_libraries_root(), 256); compute_phase_cfg_.with_vm_log = true; + compute_phase_cfg_.stop_on_accept_message = true; auto res = Collator::impl_create_ordinary_transaction(msg_root, acc, utime, lt, &storage_phase_cfg_, &compute_phase_cfg_, From 20f9271b72b5addf705c6f13f54472b2d9b2306c Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 22 Jan 2024 18:32:21 +0300 Subject: [PATCH 076/351] Fix test-validator-session-state (#869) Co-authored-by: SpyCheese --- test/test-validator-session-state.cpp | 30 ++++--------------- .../validator-session-description.hpp | 3 ++ 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/test/test-validator-session-state.cpp b/test/test-validator-session-state.cpp index 5ed08add..cb5d817f 100644 --- a/test/test-validator-session-state.cpp +++ b/test/test-validator-session-state.cpp @@ -34,6 +34,7 @@ #include "validator-session/validator-session-description.h" #include "validator-session/validator-session-state.h" +#include "validator-session/validator-session-description.hpp" #include #include @@ -48,17 +49,13 @@ class Description : public ton::validatorsession::ValidatorSessionDescription { return 0; } void *alloc(size_t size, size_t align, bool temp) override { - size = (size + 15) / 16 * 16; - td::uint32 idx = temp ? 1 : 0; - auto s = pdata_cur_[idx].fetch_add(size); - CHECK(s + size <= pdata_size_[idx]); - return static_cast(pdata_[idx] + s); + return (temp ? mem_temp_ : mem_perm_).alloc(size, align); } bool is_persistent(const void *ptr) const override { - return ptr == nullptr || (ptr >= pdata_[0] && ptr < pdata_[0] + pdata_size_[0]); + return mem_perm_.contains(ptr); } void clear_temp_memory() override { - pdata_cur_[1] = 0; + mem_temp_.clear(); } ton::PublicKeyHash get_source_id(td::uint32 idx) const override { @@ -189,21 +186,8 @@ class Description : public ton::validatorsession::ValidatorSessionDescription { return opts_; } - ~Description() { - delete[] pdata_[0]; - delete[] pdata_[1]; - } - Description(ton::validatorsession::ValidatorSessionOptions opts, td::uint32 total_nodes) - : opts_(opts), total_nodes_(total_nodes) { - pdata_size_[0] = - static_cast(std::numeric_limits::max() < (1ull << 32) ? 1ull << 30 : 1ull << 33); - pdata_size_[1] = 1 << 22; - pdata_[0] = new td::uint8[pdata_size_[0]]; - pdata_[1] = new td::uint8[pdata_size_[1]]; - pdata_cur_[0] = 0; - pdata_cur_[1] = 0; - + : opts_(opts), total_nodes_(total_nodes), mem_perm_(1 << 30), mem_temp_(1 << 22) { for (auto &el : cache_) { Cached v{nullptr}; el.store(v, std::memory_order_relaxed); @@ -224,9 +208,7 @@ class Description : public ton::validatorsession::ValidatorSessionDescription { }; std::array, cache_size> cache_; - td::uint8 *pdata_[2]; - std::atomic pdata_cur_[2]; - size_t pdata_size_[2]; + ton::validatorsession::ValidatorSessionDescriptionImpl::MemPool mem_perm_, mem_temp_; }; double myrand() { diff --git a/validator-session/validator-session-description.hpp b/validator-session/validator-session-description.hpp index 0c662b7a..5e09c694 100644 --- a/validator-session/validator-session-description.hpp +++ b/validator-session/validator-session-description.hpp @@ -58,6 +58,7 @@ class ValidatorSessionDescriptionImpl : public ValidatorSessionDescription { }; std::array, cache_size> cache_; + public: class MemPool { public: explicit MemPool(size_t chunk_size); @@ -71,6 +72,8 @@ class ValidatorSessionDescriptionImpl : public ValidatorSessionDescription { std::vector data_; size_t ptr_ = 0; }; + + private: MemPool mem_perm_ = MemPool(mem_chunk_size_perm); MemPool mem_temp_ = MemPool(mem_chunk_size_temp); From d91643face365912224a38c0416a3363e27d6906 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 22 Jan 2024 18:33:26 +0300 Subject: [PATCH 077/351] Fix getting shard client block id (#870) Co-authored-by: SpyCheese --- validator/manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/validator/manager.cpp b/validator/manager.cpp index 21fa5887..af01ff8a 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -2460,8 +2460,8 @@ void ValidatorManagerImpl::update_shard_client_state(BlockIdExt masterchain_bloc } void ValidatorManagerImpl::get_shard_client_state(bool from_db, td::Promise promise) { - if (!shard_client_.empty() && !from_db) { - td::actor::send_closure(shard_client_, &ShardClient::get_processed_masterchain_block_id, std::move(promise)); + if (shard_client_handle_ && !from_db) { + promise.set_result(shard_client_handle_->id()); } else { td::actor::send_closure(db_, &Db::get_shard_client_state, std::move(promise)); } From 2e231ec2ff74b950dabccdf490d9fcf8ea97ea27 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 22 Jan 2024 21:56:11 +0300 Subject: [PATCH 078/351] Count gas usage for ordinar transactions on special accounts in separate counter (#872) * Improve checking total gas usage in collator and validator --------- Co-authored-by: SpyCheese --- validator/impl/collator-impl.h | 2 +- validator/impl/collator.cpp | 10 +++++----- validator/impl/validate-query.cpp | 28 +++++++++++++++++++++------- validator/impl/validate-query.hpp | 1 + 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/validator/impl/collator-impl.h b/validator/impl/collator-impl.h index fe931cd6..c6ba27b4 100644 --- a/validator/impl/collator-impl.h +++ b/validator/impl/collator-impl.h @@ -244,7 +244,7 @@ class Collator final : public td::actor::Actor { Ref& in_msg); bool create_ticktock_transactions(int mask); bool create_ticktock_transaction(const ton::StdSmcAddress& smc_addr, ton::LogicalTime req_start_lt, int mask); - Ref create_ordinary_transaction(Ref msg_root); + Ref create_ordinary_transaction(Ref msg_root, bool is_special_tx = false); bool check_cur_validator_set(); bool unpack_last_mc_state(); bool unpack_last_state(); diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index 1b7991f6..413c5be9 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -2667,8 +2667,7 @@ bool Collator::create_ticktock_transaction(const ton::StdSmcAddress& smc_addr, t return fatal_error(td::Status::Error( -666, std::string{"cannot serialize new transaction for smart contract "} + smc_addr.to_hex())); } - if (!trans->update_limits(*block_limit_status_, - /* with_gas = */ !(acc->is_special && compute_phase_cfg_.special_gas_full))) { + if (!trans->update_limits(*block_limit_status_, /* with_gas = */ false)) { return fatal_error(-666, "cannot update block limit status to include the new transaction"); } if (trans->commit(*acc).is_null()) { @@ -2684,10 +2683,11 @@ bool Collator::create_ticktock_transaction(const ton::StdSmcAddress& smc_addr, t * Creates an ordinary transaction using a given message. * * @param msg_root The root of the message to be processed serialized using Message TLB-scheme. + * @param is_special_tx True if creating a special transaction (mint/recover), false otherwise. * * @returns The root of the serialized transaction, or an empty reference if the transaction creation fails. */ -Ref Collator::create_ordinary_transaction(Ref msg_root) { +Ref Collator::create_ordinary_transaction(Ref msg_root, bool is_special_tx) { ton::StdSmcAddress addr; auto cs = vm::load_cell_slice(msg_root); bool external; @@ -2746,7 +2746,7 @@ Ref Collator::create_ordinary_transaction(Ref msg_root) { std::unique_ptr trans = res.move_as_ok(); if (!trans->update_limits(*block_limit_status_, - /* with_gas = */ !(acc->is_special && compute_phase_cfg_.special_gas_full))) { + /* with_gas = */ !(is_special_tx && compute_phase_cfg_.special_gas_full))) { fatal_error("cannot update block limit status to include the new transaction"); return {}; } @@ -3019,7 +3019,7 @@ int Collator::process_one_new_message(block::NewOutMsg msg, bool enqueue_only, R return -1; } // 1. create a Transaction processing this Message - auto trans_root = create_ordinary_transaction(msg.msg); + auto trans_root = create_ordinary_transaction(msg.msg, is_special != nullptr); if (trans_root.is_null()) { fatal_error("cannot create transaction for re-processing output message"); return -1; diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index f5dc28e2..2b3ccd85 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -4685,6 +4685,7 @@ bool ValidateQuery::check_one_transaction(block::Account& account, ton::LogicalT bool external{false}, ihr_delivered{false}, need_credit_phase{false}; // check input message block::CurrencyCollection money_imported(0), money_exported(0); + bool is_special_tx = false; // recover/mint transaction if (in_msg_root.not_null()) { auto in_descr_cs = in_msg_dict_->lookup(in_msg_root->get_hash().as_bitslice()); if (in_descr_cs.is_null()) { @@ -4700,6 +4701,7 @@ bool ValidateQuery::check_one_transaction(block::Account& account, ton::LogicalT << " has an invalid InMsg record (not one of msg_import_ext, msg_import_fin, " "msg_import_imm or msg_import_ihr)"); } + is_special_tx = is_special_in_msg(*in_descr_cs); // once we know there is a InMsg with correct hash, we already know that it contains a message with this hash (by the verification of InMsg), so it is our message // have still to check its destination address and imported value // and that it refers to this transaction @@ -4717,7 +4719,7 @@ bool ValidateQuery::check_one_transaction(block::Account& account, ton::LogicalT << " processed inbound message created later at logical time " << info.created_lt); } - if (info.created_lt != start_lt_ || !is_special_in_msg(*in_descr_cs)) { + if (info.created_lt != start_lt_ || !is_special_tx) { msg_proc_lt_.emplace_back(addr, lt, info.created_lt); } dest = std::move(info.dest); @@ -5057,19 +5059,31 @@ bool ValidateQuery::check_one_transaction(block::Account& account, ton::LogicalT return reject_query(PSTRING() << "cannot re-create the serialization of transaction " << lt << " for smart contract " << addr.to_hex()); } - if (!trs->update_limits(*block_limit_status_, - /* with_gas = */ !account.is_special && !trs->gas_limit_overridden, - /* with_size = */ false)) { + if (!trs->update_limits(*block_limit_status_, /* with_gas = */ false, /* with_size = */ false)) { return fatal_error(PSTRING() << "cannot update block limit status to include transaction " << lt << " of account " << addr.to_hex()); } - if (block_limit_status_->gas_used > block_limits_->gas.hard() + compute_phase_cfg_.gas_limit) { - // Note that block_limit_status_->gas_used does not include transactions in special accounts + + // Collator should stop if total gas usage exceeds limits, including transactions on special accounts, but without + // ticktocks and mint/recover. + // Here Validator checks a weaker condition + if (!is_special_tx && !trs->gas_limit_overridden && trans_type == block::transaction::Transaction::tr_ord) { + (account.is_special ? total_special_gas_used_ : total_gas_used_) += trs->gas_used(); + } + if (total_gas_used_ > block_limits_->gas.hard() + compute_phase_cfg_.gas_limit) { return reject_query(PSTRING() << "gas block limits are exceeded: total_gas_used > gas_limit_hard + trx_gas_limit (" - << "total_gas_used=" << block_limit_status_->gas_used + << "total_gas_used=" << total_gas_used_ << ", gas_limit_hard=" << block_limits_->gas.hard() << ", trx_gas_limit=" << compute_phase_cfg_.gas_limit << ")"); } + if (total_special_gas_used_ > block_limits_->gas.hard() + compute_phase_cfg_.special_gas_limit) { + return reject_query( + PSTRING() << "gas block limits are exceeded: total_special_gas_used > gas_limit_hard + special_gas_limit (" + << "total_special_gas_used=" << total_special_gas_used_ + << ", gas_limit_hard=" << block_limits_->gas.hard() + << ", special_gas_limit=" << compute_phase_cfg_.special_gas_limit << ")"); + } + auto trans_root2 = trs->commit(account); if (trans_root2.is_null()) { return reject_query(PSTRING() << "the re-created transaction " << lt << " for smart contract " << addr.to_hex() diff --git a/validator/impl/validate-query.hpp b/validator/impl/validate-query.hpp index ff8cc83c..8829ac61 100644 --- a/validator/impl/validate-query.hpp +++ b/validator/impl/validate-query.hpp @@ -195,6 +195,7 @@ class ValidateQuery : public td::actor::Actor { ton::LogicalTime prev_key_block_lt_; std::unique_ptr block_limits_; std::unique_ptr block_limit_status_; + td::uint64 total_gas_used_{0}, total_special_gas_used_{0}; LogicalTime start_lt_, end_lt_; UnixTime prev_now_{~0u}, now_{~0u}; From 9f1b370f2cc772d93100611c9d6e45e6623a575d Mon Sep 17 00:00:00 2001 From: neodix42 Date: Wed, 24 Jan 2024 09:09:10 +0100 Subject: [PATCH 079/351] Make execution of tests in Nix builds optional (#873) --- .github/workflows/ton-x86-64-linux.yml | 4 ++-- .github/workflows/ton-x86-64-macos.yml | 4 ++-- assembly/cicd/jenkins/test-builds.groovy | 10 +++++----- assembly/nix/build-linux-arm64-nix.sh | 19 +++++++++++++++++-- assembly/nix/build-linux-x86-64-nix.sh | 20 ++++++++++++++++++-- assembly/nix/build-macos-nix.sh | 20 ++++++++++++++++++-- assembly/nix/linux-arm64-static.nix | 3 ++- assembly/nix/linux-x86-64-static.nix | 3 ++- assembly/nix/macos-static.nix | 5 +++-- 9 files changed, 69 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ton-x86-64-linux.yml b/.github/workflows/ton-x86-64-linux.yml index fdd91000..abbe1cca 100644 --- a/.github/workflows/ton-x86-64-linux.yml +++ b/.github/workflows/ton-x86-64-linux.yml @@ -24,7 +24,7 @@ jobs: run: | cp assembly/nix/build-linux-x86-64-nix.sh . chmod +x build-linux-x86-64-nix.sh - ./build-linux-x86-64-nix.sh + ./build-linux-x86-64-nix.sh -t - name: Simple binaries test run: | @@ -38,4 +38,4 @@ jobs: uses: actions/upload-artifact@master with: name: ton-x86_64-linux-binaries - path: artifacts \ No newline at end of file + path: artifacts diff --git a/.github/workflows/ton-x86-64-macos.yml b/.github/workflows/ton-x86-64-macos.yml index c0f90718..8c71f34a 100644 --- a/.github/workflows/ton-x86-64-macos.yml +++ b/.github/workflows/ton-x86-64-macos.yml @@ -20,7 +20,7 @@ jobs: run: | cp assembly/nix/build-macos-nix.sh . chmod +x build-macos-nix.sh - ./build-macos-nix.sh + ./build-macos-nix.sh -t - name: Simple binaries test run: | @@ -34,4 +34,4 @@ jobs: uses: actions/upload-artifact@master with: name: ton-x86_64-macos-binaries - path: artifacts \ No newline at end of file + path: artifacts diff --git a/assembly/cicd/jenkins/test-builds.groovy b/assembly/cicd/jenkins/test-builds.groovy index 380efedd..960ac8db 100644 --- a/assembly/cicd/jenkins/test-builds.groovy +++ b/assembly/cicd/jenkins/test-builds.groovy @@ -31,7 +31,7 @@ pipeline { sh ''' cp assembly/nix/build-linux-x86-64-nix.sh . chmod +x build-linux-x86-64-nix.sh - ./build-linux-x86-64-nix.sh + ./build-linux-x86-64-nix.sh -t ''' sh ''' cd artifacts @@ -69,7 +69,7 @@ pipeline { sh ''' cp assembly/nix/build-linux-arm64-nix.sh . chmod +x build-linux-arm64-nix.sh - ./build-linux-arm64-nix.sh + ./build-linux-arm64-nix.sh -t ''' sh ''' cd artifacts @@ -107,7 +107,7 @@ pipeline { sh ''' cp assembly/nix/build-macos-nix.sh . chmod +x build-macos-nix.sh - ./build-macos-nix.sh + ./build-macos-nix.sh -t ''' sh ''' cd artifacts @@ -145,7 +145,7 @@ pipeline { sh ''' cp assembly/nix/build-macos-nix.sh . chmod +x build-macos-nix.sh - ./build-macos-nix.sh + ./build-macos-nix.sh -t ''' sh ''' cd artifacts @@ -233,4 +233,4 @@ pipeline { } } } -} \ No newline at end of file +} diff --git a/assembly/nix/build-linux-arm64-nix.sh b/assembly/nix/build-linux-arm64-nix.sh index bb859141..08817e72 100644 --- a/assembly/nix/build-linux-arm64-nix.sh +++ b/assembly/nix/build-linux-arm64-nix.sh @@ -3,12 +3,27 @@ nix-build --version test $? -eq 0 || { echo "Nix is not installed!"; exit 1; } +with_tests=false + + +while getopts 't' flag; do + case "${flag}" in + t) with_tests=true ;; + *) break + ;; + esac +done + cp assembly/nix/linux-arm64* . cp assembly/nix/microhttpd.nix . cp assembly/nix/openssl.nix . export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz -nix-build linux-arm64-static.nix +if [ "$with_tests" = true ]; then + nix-build linux-arm64-static.nix --arg testing true +else + nix-build linux-arm64-static.nix +fi mkdir artifacts cp ./result/bin/* artifacts/ chmod +x artifacts/* @@ -17,4 +32,4 @@ nix-build linux-arm64-tonlib.nix cp ./result/lib/libtonlibjson.so.0.5 artifacts/libtonlibjson.so cp ./result/lib/libemulator.so artifacts/ cp -r crypto/fift/lib artifacts/ -cp -r crypto/smartcont artifacts/ \ No newline at end of file +cp -r crypto/smartcont artifacts/ diff --git a/assembly/nix/build-linux-x86-64-nix.sh b/assembly/nix/build-linux-x86-64-nix.sh index eca6fe58..60d31c94 100644 --- a/assembly/nix/build-linux-x86-64-nix.sh +++ b/assembly/nix/build-linux-x86-64-nix.sh @@ -3,12 +3,28 @@ nix-build --version test $? -eq 0 || { echo "Nix is not installed!"; exit 1; } +with_tests=false + + +while getopts 't' flag; do + case "${flag}" in + t) with_tests=true ;; + *) break + ;; + esac +done + cp assembly/nix/linux-x86-64* . cp assembly/nix/microhttpd.nix . cp assembly/nix/openssl.nix . export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz -nix-build linux-x86-64-static.nix +if [ "$with_tests" = true ]; then + nix-build linux-x86-64-static.nix --arg testing true +else + nix-build linux-x86-64-static.nix +fi + mkdir artifacts cp ./result/bin/* artifacts/ chmod +x artifacts/* @@ -17,4 +33,4 @@ nix-build linux-x86-64-tonlib.nix cp ./result/lib/libtonlibjson.so.0.5 artifacts/libtonlibjson.so cp ./result/lib/libemulator.so artifacts/ cp -r crypto/fift/lib artifacts/ -cp -r crypto/smartcont artifacts/ \ No newline at end of file +cp -r crypto/smartcont artifacts/ diff --git a/assembly/nix/build-macos-nix.sh b/assembly/nix/build-macos-nix.sh index fdf674a6..c3664bf0 100644 --- a/assembly/nix/build-macos-nix.sh +++ b/assembly/nix/build-macos-nix.sh @@ -3,9 +3,25 @@ nix-build --version test $? -eq 0 || { echo "Nix is not installed!"; exit 1; } +with_tests=false + + +while getopts 't' flag; do + case "${flag}" in + t) with_tests=true ;; + *) break + ;; + esac +done + cp assembly/nix/macos-* . export NIX_PATH=nixpkgs=https://github.com/nixOS/nixpkgs/archive/23.05.tar.gz -nix-build macos-static.nix + +if [ "$with_tests" = true ]; then + nix-build macos-static.nix --arg testing true +else + nix-build macos-static.nix +fi mkdir artifacts cp ./result-bin/bin/* artifacts/ chmod +x artifacts/* @@ -14,4 +30,4 @@ nix-build macos-tonlib.nix cp ./result/lib/libtonlibjson.dylib artifacts/ cp ./result/lib/libemulator.dylib artifacts/ cp -r crypto/fift/lib artifacts/ -cp -r crypto/smartcont artifacts/ \ No newline at end of file +cp -r crypto/smartcont artifacts/ diff --git a/assembly/nix/linux-arm64-static.nix b/assembly/nix/linux-arm64-static.nix index 616dfba5..5e834269 100644 --- a/assembly/nix/linux-arm64-static.nix +++ b/assembly/nix/linux-arm64-static.nix @@ -3,6 +3,7 @@ { pkgs ? import { system = builtins.currentSystem; } , lib ? pkgs.lib , stdenv ? pkgs.stdenv +, testing ? false }: let microhttpdmy = (import ./microhttpd.nix) {}; @@ -25,7 +26,7 @@ stdenv.mkDerivation { ]; makeStatic = true; - doCheck = true; + doCheck = testing; cmakeFlags = [ "-DTON_USE_ABSEIL=OFF" diff --git a/assembly/nix/linux-x86-64-static.nix b/assembly/nix/linux-x86-64-static.nix index 616dfba5..5e834269 100644 --- a/assembly/nix/linux-x86-64-static.nix +++ b/assembly/nix/linux-x86-64-static.nix @@ -3,6 +3,7 @@ { pkgs ? import { system = builtins.currentSystem; } , lib ? pkgs.lib , stdenv ? pkgs.stdenv +, testing ? false }: let microhttpdmy = (import ./microhttpd.nix) {}; @@ -25,7 +26,7 @@ stdenv.mkDerivation { ]; makeStatic = true; - doCheck = true; + doCheck = testing; cmakeFlags = [ "-DTON_USE_ABSEIL=OFF" diff --git a/assembly/nix/macos-static.nix b/assembly/nix/macos-static.nix index e65ec1a8..a3d4667f 100644 --- a/assembly/nix/macos-static.nix +++ b/assembly/nix/macos-static.nix @@ -3,6 +3,7 @@ { pkgs ? import { system = builtins.currentSystem; } , lib ? pkgs.lib , stdenv ? pkgs.stdenv +, testing ? false }: pkgs.llvmPackages_14.stdenv.mkDerivation { @@ -29,7 +30,7 @@ pkgs.llvmPackages_14.stdenv.mkDerivation { dontAddStaticConfigureFlags = true; makeStatic = true; - doCheck = true; + doCheck = testing; configureFlags = []; @@ -62,4 +63,4 @@ pkgs.llvmPackages_14.stdenv.mkDerivation { done ''; outputs = [ "bin" "out" ]; -} \ No newline at end of file +} From 49d62dc3bb075605b9174d1fb68aadda0a7412b2 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 24 Jan 2024 13:05:22 +0300 Subject: [PATCH 080/351] Activate new changes in TVM by version>=5, reduce gas cost for loading libraries (#875) Co-authored-by: SpyCheese --- crypto/vm/cellops.cpp | 47 +++++++++++++++++++---------------- crypto/vm/cells/CellSlice.cpp | 14 ++++++----- crypto/vm/vm.h | 2 +- crypto/vm/vmstate.h | 4 +++ doc/GlobalVersions.md | 11 ++++++-- 5 files changed, 47 insertions(+), 31 deletions(-) diff --git a/crypto/vm/cellops.cpp b/crypto/vm/cellops.cpp index 9b702fcd..af84a67e 100644 --- a/crypto/vm/cellops.cpp +++ b/crypto/vm/cellops.cpp @@ -892,34 +892,37 @@ int exec_load_special_cell(VmState* st, bool quiet) { Stack& stack = st->get_stack(); VM_LOG(st) << "execute XLOAD" << (quiet ? "Q" : ""); auto cell = stack.pop_cell(); - auto r_loaded_cell = cell->load_cell(); - if (r_loaded_cell.is_error()) { - if (quiet) { - stack.push_bool(false); - return 0; - } else { - throw VmError{Excno::cell_und, "failed to load cell"}; - } - } - auto loaded_cell = r_loaded_cell.move_as_ok(); - if (loaded_cell.data_cell->is_special()) { - if (loaded_cell.data_cell->special_type() != CellTraits::SpecialType::Library) { + if (st->get_global_version() >= 5) { + st->register_cell_load(cell->get_hash()); + auto r_loaded_cell = cell->load_cell(); + if (r_loaded_cell.is_error()) { if (quiet) { stack.push_bool(false); return 0; } else { - throw VmError{Excno::cell_und, "unexpected special cell"}; + throw VmError{Excno::cell_und, "failed to load cell"}; } } - CellSlice cs(std::move(loaded_cell)); - DCHECK(cs.size() == Cell::hash_bits + 8); - cell = st->load_library(cs.data_bits() + 8); - if (cell.is_null()) { - if (quiet) { - stack.push_bool(false); - return 0; - } else { - throw VmError{Excno::cell_und, "failed to load library cell"}; + auto loaded_cell = r_loaded_cell.move_as_ok(); + if (loaded_cell.data_cell->is_special()) { + if (loaded_cell.data_cell->special_type() != CellTraits::SpecialType::Library) { + if (quiet) { + stack.push_bool(false); + return 0; + } else { + throw VmError{Excno::cell_und, "unexpected special cell"}; + } + } + CellSlice cs(std::move(loaded_cell)); + DCHECK(cs.size() == Cell::hash_bits + 8); + cell = st->load_library(cs.data_bits() + 8); + if (cell.is_null()) { + if (quiet) { + stack.push_bool(false); + return 0; + } else { + throw VmError{Excno::cell_und, "failed to load library cell"}; + } } } } diff --git a/crypto/vm/cells/CellSlice.cpp b/crypto/vm/cells/CellSlice.cpp index cbfc9e50..ee5f6941 100644 --- a/crypto/vm/cells/CellSlice.cpp +++ b/crypto/vm/cells/CellSlice.cpp @@ -1056,10 +1056,10 @@ std::ostream& operator<<(std::ostream& os, Ref cs_ref) { // If can_be_special is not null, then it is allowed to load special cell // Flag whether loaded cell is actually special will be stored into can_be_special VirtualCell::LoadedCell load_cell_slice_impl(Ref cell, bool* can_be_special) { + auto* vm_state_interface = VmStateInterface::get(); bool library_loaded = false; while (true) { - auto* vm_state_interface = VmStateInterface::get(); - if (vm_state_interface) { + if (vm_state_interface && !library_loaded) { vm_state_interface->register_cell_load(cell->get_hash()); } auto r_loaded_cell = cell->load_cell(); @@ -1077,11 +1077,13 @@ VirtualCell::LoadedCell load_cell_slice_impl(Ref cell, bool* can_be_specia *can_be_special = loaded_cell.data_cell->is_special(); } else if (loaded_cell.data_cell->is_special()) { if (loaded_cell.data_cell->special_type() == DataCell::SpecialType::Library) { - if (library_loaded) { - throw VmError{Excno::cell_und, "failed to load library cell: recursive library cells are not allowed"}; - } - library_loaded = true; if (vm_state_interface) { + if (vm_state_interface->get_global_version() >= 5) { + if (library_loaded) { + throw VmError{Excno::cell_und, "failed to load library cell: recursive library cells are not allowed"}; + } + library_loaded = true; + } CellSlice cs(std::move(loaded_cell)); DCHECK(cs.size() == Cell::hash_bits + 8); auto library_cell = vm_state_interface->load_library(cs.data_bits() + 8); diff --git a/crypto/vm/vm.h b/crypto/vm/vm.h index fd18f92d..e5cca026 100644 --- a/crypto/vm/vm.h +++ b/crypto/vm/vm.h @@ -340,7 +340,7 @@ class VmState final : public VmStateInterface { void preclear_cr(const ControlRegs& save) { cr &= save; } - int get_global_version() const { + int get_global_version() const override { return global_version; } void set_global_version(int version) { diff --git a/crypto/vm/vmstate.h b/crypto/vm/vmstate.h index a81a4e78..0d6c3fdf 100644 --- a/crypto/vm/vmstate.h +++ b/crypto/vm/vmstate.h @@ -19,6 +19,7 @@ #pragma once #include "common/refcnt.hpp" #include "vm/cells.h" +#include "common/global-version.h" #include "td/utils/Context.h" @@ -38,6 +39,9 @@ class VmStateInterface : public td::Context { virtual bool register_op(int op_units = 1) { return true; }; + virtual int get_global_version() const { + return ton::SUPPORTED_VERSION; + } }; } // namespace vm diff --git a/doc/GlobalVersions.md b/doc/GlobalVersions.md index 7d9729f8..d2064b90 100644 --- a/doc/GlobalVersions.md +++ b/doc/GlobalVersions.md @@ -39,11 +39,18 @@ intermediate value before division (e.g. `(xy+w)/z`). * Unpaid storage fee is now saved to `due_payment` ## Version 5 + +### Gas limits Version 5 enables higher gas limits for special contracts. * Gas limit for all transactions on special contracts is set to `special_gas_limit` from `ConfigParam 20` (which is 35M at the moment of writing). -Previously only ticktock transactions had this limit, while ordinary transactions could use up to `gas_limit` gas (1M). +Previously only ticktock transactions had this limit, while ordinary transactions had a default limit of `gas_limit` gas (1M). * Gas usage of special contracts is not taken into account when checking block limits. This allows keeping masterchain block limits low while having high gas limits for elector. * Gas limit on `EQD_v9j1rlsuHHw2FIhcsCFFSD367ldfDdCKcsNmNpIRzUlu` is increased to `special_gas_limit * 2` until 2024-02-29. -See [this post](https://t.me/tonstatus/88) for details. \ No newline at end of file +See [this post](https://t.me/tonstatus/88) for details. + +### Loading libraries +* Loading "nested libraries" (i.e. a library cell that points to another library cell) throws an exception. +* Loading a library consumes gas for cell load only once (for the library cell), not twice (both for the library cell and the cell in the library). +* `XLOAD` now works differently. When it takes a library cell, it returns the cell that it points to. This allows loading "nested libraries", if needed. \ No newline at end of file From e459aea8e8978335047d6e2f0b51b2ade3d102ec Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Thu, 25 Jan 2024 13:51:50 +0300 Subject: [PATCH 081/351] Update changelog --- Changelog.md | 10 ++++++++-- recent_changelog.md | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Changelog.md b/Changelog.md index 9fec686d..9a98e44c 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,14 +1,20 @@ ## 2024.01 Update -1. Fixes in how gas in transactions on special accounts is accounted in block limit. Previously, gas was counted as usual, so to conduct elections that costs >30m gas block limit in masterchain was set to 37m gas. To lower the limit for safety reasons it is proposed to not count gas on special accounts. Besides `gas_max` is set to `special_gas_limit` for all types of transactions on special accounts. New behavior is activated through setting `gas_prices_v3` in `ConfigParam 20;`. +1. Fixes in how gas in transactions on special accounts is accounted in block limit. Previously, gas was counted as usual, so to conduct elections that costs >30m gas block limit in masterchain was set to 37m gas. To lower the limit for safety reasons it is proposed to caunt gas on special accounts separately. Besides `gas_max` is set to `special_gas_limit` for all types of transactions on special accounts. New behavior is activated through setting `version >= 5` in `ConfigParam 8;`. * Besides update of config temporally increases gas limit on `EQD_v9j1rlsuHHw2FIhcsCFFSD367ldfDdCKcsNmNpIRzUlu` to `special_gas_limit`, see [details](https://t.me/tonstatus/88). 2. Improvements in LS behavior * Improved detection of the state with all shards applied to decrease rate of `Block is not applied` error * Better error logs: `block not in db` and `block is not applied` separation * Fix error in proof generation for blocks after merge + * Fix most of `block is not applied` issues related to sending too recent block in Proofs + * LS now check external messages till `accept_message` (`set_gas`). 3. Improvements in DHT work and storage, CellDb, config.json ammendment, peer misbehavior detection, validator session stats collection, emulator. +4. Change in CTOS and XLOAD behavior activated through setting `version >= 5` in `ConfigParam 8;`: + * Loading "nested libraries" (i.e. a library cell that points to another library cell) throws an exception. + * Loading a library consumes gas for cell load only once (for the library cell), not twice (both for the library cell and the cell in the library). + * `XLOAD` now works differently. When it takes a library cell, it returns the cell that it points to. This allows loading "nested libraries", if needed. -Besides the work of the core team, this update is based on the efforts of @XaBbl4 (peer misbehavior detection). +Besides the work of the Core team, this update is based on the efforts of @XaBbl4 (peer misbehavior detection) and @akifoq (CTOS behavior and gas limit scheme for special accounts). ## 2023.12 Update diff --git a/recent_changelog.md b/recent_changelog.md index 637f416c..852fb764 100644 --- a/recent_changelog.md +++ b/recent_changelog.md @@ -1,11 +1,17 @@ ## 2024.01 Update -1. Fixes in how gas in transactions on special accounts is accounted in block limit. Previously, gas was counted as usual, so to conduct elections that costs >30m gas block limit in masterchain was set to 37m gas. To lower the limit for safety reasons it is proposed to not count gas on special accounts. Besides `gas_max` is set to `special_gas_limit` for all types of transactions on special accounts. New behavior is activated through setting `gas_prices_v3` in `ConfigParam 20;`. +1. Fixes in how gas in transactions on special accounts is accounted in block limit. Previously, gas was counted as usual, so to conduct elections that costs >30m gas block limit in masterchain was set to 37m gas. To lower the limit for safety reasons it is proposed to caunt gas on special accounts separately. Besides `gas_max` is set to `special_gas_limit` for all types of transactions on special accounts. New behavior is activated through setting `version >= 5` in `ConfigParam 8;`. * Besides update of config temporally increases gas limit on `EQD_v9j1rlsuHHw2FIhcsCFFSD367ldfDdCKcsNmNpIRzUlu` to `special_gas_limit`, see [details](https://t.me/tonstatus/88). 2. Improvements in LS behavior * Improved detection of the state with all shards applied to decrease rate of `Block is not applied` error * Better error logs: `block not in db` and `block is not applied` separation * Fix error in proof generation for blocks after merge + * Fix most of `block is not applied` issues related to sending too recent block in Proofs + * LS now check external messages till `accept_message` (`set_gas`). 3. Improvements in DHT work and storage, CellDb, config.json ammendment, peer misbehavior detection, validator session stats collection, emulator. +4. Change in CTOS and XLOAD behavior activated through setting `version >= 5` in `ConfigParam 8;`: + * Loading "nested libraries" (i.e. a library cell that points to another library cell) throws an exception. + * Loading a library consumes gas for cell load only once (for the library cell), not twice (both for the library cell and the cell in the library). + * `XLOAD` now works differently. When it takes a library cell, it returns the cell that it points to. This allows loading "nested libraries", if needed. -Besides the work of the core team, this update is based on the efforts of @XaBbl4 (peer misbehavior detection). +Besides the work of the Core team, this update is based on the efforts of @XaBbl4 (peer misbehavior detection) and @akifoq (CTOS behavior and gas limit scheme for special accounts). From 64b04e46d708221c6f0e3d5a10bb399bc46c5575 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 26 Jan 2024 15:43:53 +0300 Subject: [PATCH 082/351] Cheap fee calculations (#878) * TVM v6 * New tuple with unpacked config parameters in c7 * New instructions for calculating fees * Change unpacked_config_tuple, fix typo --------- Co-authored-by: SpyCheese --- common/global-version.h | 2 +- crypto/block/mc-config.cpp | 84 ++++++++++--- crypto/block/mc-config.h | 13 +- crypto/block/transaction.cpp | 26 ++++ crypto/block/transaction.h | 1 + crypto/fift/lib/Asm.fif | 7 +- crypto/smc-envelope/SmartContract.cpp | 3 + crypto/vm/tonops.cpp | 167 +++++++++++++++++++++++--- doc/GlobalVersions.md | 26 +++- tonlib/test/offline.cpp | 4 +- utils/opcode-timing.cpp | 121 ++++++++++++++----- validator/impl/validate-query.cpp | 3 + 12 files changed, 384 insertions(+), 73 deletions(-) diff --git a/common/global-version.h b/common/global-version.h index 9b23d46d..0a90ab85 100644 --- a/common/global-version.h +++ b/common/global-version.h @@ -19,6 +19,6 @@ namespace ton { // See doc/GlobalVersions.md -const int SUPPORTED_VERSION = 5; +const int SUPPORTED_VERSION = 6; } diff --git a/crypto/block/mc-config.cpp b/crypto/block/mc-config.cpp index 0cef7322..8b387155 100644 --- a/crypto/block/mc-config.cpp +++ b/crypto/block/mc-config.cpp @@ -621,12 +621,14 @@ td::Result> Config::get_storage_prices() const { } vm::Dictionary dict{std::move(cell), 32}; if (!dict.check_for_each([&res](Ref cs_ref, td::ConstBitPtr key, int n) -> bool { - block::gen::StoragePrices::Record data; - if (!tlb::csr_unpack(std::move(cs_ref), data) || data.utime_since != key.get_uint(n)) { + auto r_prices = do_get_one_storage_prices(*cs_ref); + if (r_prices.is_error()) { + return false; + } + res.push_back(r_prices.move_as_ok()); + if (res.back().valid_since != key.get_uint(n)) { return false; } - res.emplace_back(data.utime_since, data.bit_price_ps, data.cell_price_ps, data.mc_bit_price_ps, - data.mc_cell_price_ps); return true; })) { return td::Status::Error("invalid storage prices dictionary in configuration parameter 18"); @@ -634,16 +636,25 @@ td::Result> Config::get_storage_prices() const { return std::move(res); } -td::Result Config::do_get_gas_limits_prices(td::Ref cell, int id) { +td::Result Config::do_get_one_storage_prices(vm::CellSlice cs) { + block::gen::StoragePrices::Record data; + if (!tlb::unpack(cs, data)) { + return td::Status::Error("invalid storage prices dictionary in configuration parameter 18"); + } + return StoragePrices{data.utime_since, data.bit_price_ps, data.cell_price_ps, data.mc_bit_price_ps, + data.mc_cell_price_ps}; +} + +td::Result Config::do_get_gas_limits_prices(vm::CellSlice cs, int id) { GasLimitsPrices res; - auto cs = vm::load_cell_slice(cell); + vm::CellSlice cs0 = cs; block::gen::GasLimitsPrices::Record_gas_flat_pfx flat; if (tlb::unpack(cs, flat)) { cs = *flat.other; res.flat_gas_limit = flat.flat_gas_limit; res.flat_gas_price = flat.flat_gas_price; } else { - cs = vm::load_cell_slice(cell); + cs = cs0; } auto f = [&](const auto& r, td::uint64 spec_limit) { res.gas_limit = r.gas_limit; @@ -654,7 +665,6 @@ td::Result Config::do_get_gas_limits_prices(td::Ref c res.delete_due_limit = r.delete_due_limit; }; block::gen::GasLimitsPrices::Record_gas_prices_ext rec; - vm::CellSlice cs0 = cs; if (tlb::unpack(cs, rec)) { f(rec, rec.special_gas_limit); } else { @@ -689,7 +699,7 @@ td::Result Config::get_gas_limits_prices(bool is_masterchain) c if (cell.is_null()) { return td::Status::Error(PSLICE() << "configuration parameter " << id << " with gas prices is absent"); } - return do_get_gas_limits_prices(std::move(cell), id); + return do_get_gas_limits_prices(vm::load_cell_slice(cell), id); } td::Result Config::get_msg_prices(bool is_masterchain) const { @@ -698,7 +708,10 @@ td::Result Config::get_msg_prices(bool is_masterchain) const { if (cell.is_null()) { return td::Status::Error(PSLICE() << "configuration parameter " << id << " with msg prices is absent"); } - auto cs = vm::load_cell_slice(std::move(cell)); + return do_get_msg_prices(vm::load_cell_slice(cell), id); +} + +td::Result Config::do_get_msg_prices(vm::CellSlice cs, int id) { block::gen::MsgForwardPrices::Record rec; if (!tlb::unpack(cs, rec)) { return td::Status::Error(PSLICE() << "configuration parameter " << id @@ -1917,10 +1930,17 @@ std::vector Config::compute_total_validator_set(int next) c } td::Result Config::get_size_limits_config() const { - SizeLimitsConfig limits; td::Ref param = get_config_param(43); if (param.is_null()) { - return limits; + return do_get_size_limits_config({}); + } + return do_get_size_limits_config(vm::load_cell_slice_ref(param)); +} + +td::Result Config::do_get_size_limits_config(td::Ref cs) { + SizeLimitsConfig limits; + if (cs.is_null()) { + return limits; // default values } auto unpack_v1 = [&](auto& rec) { limits.max_msg_bits = rec.max_msg_bits; @@ -1939,9 +1959,9 @@ td::Result Config::get_size_limits_config() const { }; gen::SizeLimitsConfig::Record_size_limits_config rec_v1; gen::SizeLimitsConfig::Record_size_limits_config_v2 rec_v2; - if (tlb::unpack_cell(param, rec_v1)) { + if (tlb::csr_unpack(cs, rec_v1)) { unpack_v1(rec_v1); - } else if (tlb::unpack_cell(param, rec_v2)) { + } else if (tlb::csr_unpack(cs, rec_v2)) { unpack_v2(rec_v2); } else { return td::Status::Error("configuration parameter 43 is invalid"); @@ -1976,6 +1996,42 @@ BurningConfig Config::get_burning_config() const { return c; } +td::Ref Config::get_unpacked_config_tuple(ton::UnixTime now) const { + auto get_param = [&](td::int32 idx) -> vm::StackEntry { + auto cell = get_config_param(idx); + if (cell.is_null()) { + return {}; + } + return vm::load_cell_slice_ref(cell); + }; + auto get_current_storage_prices = [&]() -> vm::StackEntry { + auto cell = get_config_param(18); + if (cell.is_null()) { + return {}; + } + vm::StackEntry res; + vm::Dictionary dict{std::move(cell), 32}; + dict.check_for_each([&](Ref cs_ref, td::ConstBitPtr key, int n) -> bool { + auto utime_since = key.get_uint(n); + if (now >= utime_since) { + res = std::move(cs_ref); + return true; + } + return false; + }); + return res; + }; + std::vector tuple; + tuple.push_back(get_current_storage_prices()); // storage_prices + tuple.push_back(get_param(19)); // global_id + tuple.push_back(get_param(20)); // config_mc_gas_prices + tuple.push_back(get_param(21)); // config_gas_prices + tuple.push_back(get_param(24)); // config_mc_fwd_prices + tuple.push_back(get_param(25)); // config_fwd_prices + tuple.push_back(get_param(43)); // size_limits_config + return td::make_cnt_ref>(std::move(tuple)); +} + td::Result> Config::unpack_validator_set_start_stop(Ref vset_root) { if (vset_root.is_null()) { return td::Status::Error("validator set absent"); diff --git a/crypto/block/mc-config.h b/crypto/block/mc-config.h index caab93f3..624e3e03 100644 --- a/crypto/block/mc-config.h +++ b/crypto/block/mc-config.h @@ -350,7 +350,11 @@ struct GasLimitsPrices { td::uint64 freeze_due_limit{0}; td::uint64 delete_due_limit{0}; - td::RefInt256 compute_gas_price(td::uint64 gas_used) const; + td::RefInt256 compute_gas_price(td::uint64 gas_used) const { + return gas_used <= flat_gas_limit + ? td::make_refint(flat_gas_price) + : td::rshift(td::make_refint(gas_price) * (gas_used - flat_gas_limit), 16, 1) + flat_gas_price; + } }; // msg_fwd_fees = (lump_price + ceil((bit_price * msg.bits + cell_price * msg.cells)/2^16)) nanograms @@ -365,6 +369,7 @@ struct MsgPrices { td::uint32 first_frac; td::uint32 next_frac; td::uint64 compute_fwd_fees(td::uint64 cells, td::uint64 bits) const; + td::RefInt256 compute_fwd_fees256(td::uint64 cells, td::uint64 bits) const; std::pair compute_fwd_ihr_fees(td::uint64 cells, td::uint64 bits, bool ihr_disabled = false) const; MsgPrices() = default; @@ -604,9 +609,11 @@ class Config { bool is_special_smartcontract(const ton::StdSmcAddress& addr) const; static td::Result> unpack_validator_set(Ref valset_root); td::Result> get_storage_prices() const; + static td::Result do_get_one_storage_prices(vm::CellSlice cs); td::Result get_gas_limits_prices(bool is_masterchain = false) const; - static td::Result do_get_gas_limits_prices(td::Ref cell, int id); + static td::Result do_get_gas_limits_prices(vm::CellSlice cs, int id); td::Result get_msg_prices(bool is_masterchain = false) const; + static td::Result do_get_msg_prices(vm::CellSlice cs, int id); static CatchainValidatorsConfig unpack_catchain_validators_config(Ref cell); CatchainValidatorsConfig get_catchain_validators_config() const; td::Status visit_validator_params() const; @@ -633,8 +640,10 @@ class Config { ton::CatchainSeqno cc_seqno) const; std::vector compute_total_validator_set(int next) const; td::Result get_size_limits_config() const; + static td::Result do_get_size_limits_config(td::Ref cs); std::unique_ptr get_suspended_addresses(ton::UnixTime now) const; BurningConfig get_burning_config() const; + td::Ref get_unpacked_config_tuple(ton::UnixTime now) const; static std::vector do_compute_validator_set(const block::CatchainValidatorsConfig& ccv_conf, ton::ShardIdFull shard, const block::ValidatorSet& vset, ton::UnixTime time, diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index e43b9305..e08407a2 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1337,6 +1337,10 @@ Ref Transaction::prepare_vm_c7(const ComputePhaseConfig& cfg) const { // may only return tuple or raise Error (See crypto/block/mc-config.cpp#2223) tuple.push_back(cfg.prev_blocks_info.not_null() ? vm::StackEntry(cfg.prev_blocks_info) : vm::StackEntry()); } + if (cfg.global_version >= 6) { + tuple.push_back(cfg.unpacked_config_tuple.not_null() ? vm::StackEntry(cfg.unpacked_config_tuple) + : vm::StackEntry()); // unpacked_config_tuple:[...] + } auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple_ref).to_string(); return vm::make_tuple_ref(std::move(tuple_ref)); @@ -1920,6 +1924,25 @@ td::uint64 MsgPrices::compute_fwd_fees(td::uint64 cells, td::uint64 bits) const .lo(); } +/** + * Computes the forward fees for a message based on the number of cells and bits. + * Return the result as td::RefInt256 + * + * msg_fwd_fees = (lump_price + ceil((bit_price * msg.bits + cell_price * msg.cells)/2^16)) nanograms + * ihr_fwd_fees = ceil((msg_fwd_fees * ihr_price_factor)/2^16) nanograms + * bits in the root cell of a message are not included in msg.bits (lump_price pays for them) + * + * @param cells The number of cells in the message. + * @param bits The number of bits in the message. + * + * @returns The computed forward fees for the message as td::RefInt256j. + */ +td::RefInt256 MsgPrices::compute_fwd_fees256(td::uint64 cells, td::uint64 bits) const { + return td::rshift( + td::make_refint(lump_price) + td::make_refint(bit_price) * bits + td::make_refint(cell_price) * cells, 16, + 1); // divide by 2^16 with ceil rounding +} + /** * Computes the forward fees and IHR fees for a message with the given number of cells and bits. * @@ -3539,6 +3562,9 @@ td::Status FetchConfigParams::fetch_config_params( if (compute_phase_cfg->global_version >= 4) { compute_phase_cfg->prev_blocks_info = std::move(prev_blocks_info); } + if (compute_phase_cfg->global_version >= 6) { + compute_phase_cfg->unpacked_config_tuple = config.get_unpacked_config_tuple(now); + } compute_phase_cfg->suspended_addresses = config.get_suspended_addresses(now); compute_phase_cfg->size_limits = size_limits; } diff --git a/crypto/block/transaction.h b/crypto/block/transaction.h index 1ed2dfd3..57defc8c 100644 --- a/crypto/block/transaction.h +++ b/crypto/block/transaction.h @@ -117,6 +117,7 @@ struct ComputePhaseConfig { td::uint16 max_vm_data_depth = 512; int global_version = 0; Ref prev_blocks_info; + Ref unpacked_config_tuple; std::unique_ptr suspended_addresses; SizeLimitsConfig size_limits; int vm_log_verbosity = 0; diff --git a/crypto/fift/lib/Asm.fif b/crypto/fift/lib/Asm.fif index 0a4c7074..630f325a 100644 --- a/crypto/fift/lib/Asm.fif +++ b/crypto/fift/lib/Asm.fif @@ -2,7 +2,7 @@ library TVM_Asm // simple TVM Assembler namespace Asm Asm definitions -"0.4.4" constant asm-fif-version +"0.4.5" constant asm-fif-version variable @atend variable @was-split @@ -1295,12 +1295,17 @@ x{F82A} @Defop MYCODE x{F82B} @Defop INCOMINGVALUE x{F82C} @Defop STORAGEFEES x{F82D} @Defop PREVBLOCKSINFOTUPLE +x{F82E} @Defop UNPACKEDCONFIGTUPLE x{F830} @Defop CONFIGDICT x{F832} @Defop CONFIGPARAM x{F833} @Defop CONFIGOPTPARAM x{F83400} @Defop PREVMCBLOCKS x{F83401} @Defop PREVKEYBLOCK x{F835} @Defop GLOBALID +x{F836} @Defop GETEXECUTIONPRICE +x{F837} @Defop GETSTORAGEPRICE +x{F838} @Defop GETFORWARDPRICE +x{F839} @Defop GETPRECOMPILEDGAS x{F840} @Defop GETGLOBVAR { dup 1 31 @rangechk prepare_vm_c7(SmartContract::Args args, td::Ref cod // prev_key_block:BlockId ] : PrevBlocksInfo tuple.push_back(args.prev_blocks_info ? args.prev_blocks_info.value() : vm::StackEntry{}); // prev_block_info } + if (args.config && args.config.value()->get_global_version() >= 6) { + tuple.push_back(args.config.value()->get_unpacked_config_tuple(now)); // unpacked_config_tuple + } auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); //LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple).to_string(); return vm::make_tuple_ref(std::move(tuple_ref)); diff --git a/crypto/vm/tonops.cpp b/crypto/vm/tonops.cpp index dce61797..753bbc0a 100644 --- a/crypto/vm/tonops.cpp +++ b/crypto/vm/tonops.cpp @@ -35,6 +35,7 @@ #include "openssl/digest.hpp" #include #include "bls.h" +#include "mc-config.h" namespace vm { @@ -122,6 +123,20 @@ static const StackEntry& get_param(VmState* st, unsigned idx) { return tuple_index(t1, idx); } +// ConfigParams: 18 (only one entry), 19, 20, 21, 24, 25, 43 +static td::Ref get_unpacked_config_param(VmState* st, unsigned idx) { + auto tuple = st->get_c7(); + auto t1 = tuple_index(tuple, 0).as_tuple_range(255); + if (t1.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; + } + auto t2 = tuple_index(t1, 14).as_tuple_range(255); + if (t2.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; + } + return tuple_index(t2, idx).as_slice(); +} + int exec_get_param(VmState* st, unsigned idx, const char* name) { if (name) { VM_LOG(st) << "execute " << name; @@ -232,20 +247,107 @@ int exec_get_prev_blocks_info(VmState* st, unsigned idx, const char* name) { } int exec_get_global_id(VmState* st) { - Ref config = get_param(st, 9).as_cell(); - if (config.is_null()) { - throw VmError{Excno::type_chk, "intermediate value is not a cell"}; + VM_LOG(st) << "execute GLOBALID"; + if (st->get_global_version() >= 6) { + Ref cs = get_unpacked_config_param(st, 1); + if (cs.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a slice"}; + } + if (cs->size() < 32) { + throw VmError{Excno::cell_und, "invalid global-id config"}; + } + st->get_stack().push_smallint(cs->prefetch_long(32)); + } else { + Ref config = get_param(st, 19).as_cell(); + if (config.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a cell"}; + } + Dictionary config_dict{std::move(config), 32}; + Ref cell = config_dict.lookup_ref(td::BitArray<32>{19}); + if (cell.is_null()) { + throw VmError{Excno::unknown, "invalid global-id config"}; + } + CellSlice cs = load_cell_slice(cell); + if (cs.size() < 32) { + throw VmError{Excno::unknown, "invalid global-id config"}; + } + st->get_stack().push_smallint(cs.fetch_long(32)); } - Dictionary config_dict{std::move(config), 32}; - Ref cell = config_dict.lookup_ref(td::BitArray<32>{19}); - if (cell.is_null()) { - throw VmError{Excno::unknown, "invalid global-id config"}; + return 0; +} + +int exec_get_execution_price(VmState* st) { + VM_LOG(st) << "execute GETEXECUTIONPRICE"; + Stack& stack = st->get_stack(); + bool is_masterchain = stack.pop_bool(); + td::uint64 gas = stack.pop_long_range(std::numeric_limits::max(), 0); + Ref cs = get_unpacked_config_param(st, is_masterchain ? 2 : 3); + if (cs.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a slice"}; } - CellSlice cs = load_cell_slice(cell); - if (cs.size() < 32) { - throw VmError{Excno::unknown, "invalid global-id config"}; + auto r_prices = block::Config::do_get_gas_limits_prices(*cs, is_masterchain ? 20 : 21); + if (r_prices.is_error()) { + throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; } - st->get_stack().push_smallint(cs.fetch_long(32)); + block::GasLimitsPrices prices = r_prices.move_as_ok(); + stack.push_int(prices.compute_gas_price(gas)); + return 0; +} + +int exec_get_storage_price(VmState* st) { + VM_LOG(st) << "execute GETSTORAGEPRICE"; + Stack& stack = st->get_stack(); + bool is_masterchain = stack.pop_bool(); + td::int64 delta = stack.pop_long_range(std::numeric_limits::max(), 0); + td::uint64 bits = stack.pop_long_range(std::numeric_limits::max(), 0); + td::uint64 cells = stack.pop_long_range(std::numeric_limits::max(), 0); + Ref cs = get_unpacked_config_param(st, 0); + if (cs.is_null()) { + // null means tat no StoragePrices is active, so the price is 0 + stack.push_smallint(0); + return 0; + } + auto r_prices = block::Config::do_get_one_storage_prices(*cs); + if (r_prices.is_error()) { + throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; + } + block::StoragePrices prices = r_prices.move_as_ok(); + td::RefInt256 total; + if (is_masterchain) { + total = td::make_refint(cells) * prices.mc_cell_price; + total += td::make_refint(bits) * prices.mc_bit_price; + } else { + total = td::make_refint(cells) * prices.cell_price; + total += td::make_refint(bits) * prices.bit_price; + } + total *= delta; + stack.push_int(td::rshift(total, 16, 1)); + return 0; +} + +int exec_get_forward_price(VmState* st) { + VM_LOG(st) << "execute GETFORWARDPRICE"; + Stack& stack = st->get_stack(); + bool is_masterchain = stack.pop_bool(); + td::uint64 bits = stack.pop_long_range(std::numeric_limits::max(), 0); + td::uint64 cells = stack.pop_long_range(std::numeric_limits::max(), 0); + Ref cs = get_unpacked_config_param(st, is_masterchain ? 4 : 5); + if (cs.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a slice"}; + } + auto r_prices = block::Config::do_get_msg_prices(*cs, is_masterchain ? 24 : 25); + if (r_prices.is_error()) { + throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; + } + block::MsgPrices prices = r_prices.move_as_ok(); + stack.push_int(prices.compute_fwd_fees256(cells, bits)); + return 0; +} + +int exec_get_precompiled_gas(VmState* st) { + VM_LOG(st) << "execute GETPRECOMPILEDGAS"; + Stack& stack = st->get_stack(); + stack.push_null(); return 0; } @@ -263,13 +365,18 @@ void register_ton_config_ops(OpcodeTable& cp0) { .insert(OpcodeInstr::mksimple(0xf82b, 16, "INCOMINGVALUE", std::bind(exec_get_param, _1, 11, "INCOMINGVALUE"))) .insert(OpcodeInstr::mksimple(0xf82c, 16, "STORAGEFEES", std::bind(exec_get_param, _1, 12, "STORAGEFEES"))) .insert(OpcodeInstr::mksimple(0xf82d, 16, "PREVBLOCKSINFOTUPLE", std::bind(exec_get_param, _1, 13, "PREVBLOCKSINFOTUPLE"))) - .insert(OpcodeInstr::mkfixedrange(0xf82e, 0xf830, 16, 4, instr::dump_1c("GETPARAM "), exec_get_var_param)) + .insert(OpcodeInstr::mksimple(0xf82e, 16, "UNPACKEDCONFIGTUPLE", std::bind(exec_get_param, _1, 14, "UNPACKEDCONFIGTUPLE"))) + .insert(OpcodeInstr::mkfixedrange(0xf82f, 0xf830, 16, 4, instr::dump_1c("GETPARAM "), exec_get_var_param)) .insert(OpcodeInstr::mksimple(0xf830, 16, "CONFIGDICT", exec_get_config_dict)) .insert(OpcodeInstr::mksimple(0xf832, 16, "CONFIGPARAM", std::bind(exec_get_config_param, _1, false))) .insert(OpcodeInstr::mksimple(0xf833, 16, "CONFIGOPTPARAM", std::bind(exec_get_config_param, _1, true))) .insert(OpcodeInstr::mksimple(0xf83400, 24, "PREVMCBLOCKS", std::bind(exec_get_prev_blocks_info, _1, 0, "PREVMCBLOCKS"))->require_version(4)) .insert(OpcodeInstr::mksimple(0xf83401, 24, "PREVKEYBLOCK", std::bind(exec_get_prev_blocks_info, _1, 1, "PREVKEYBLOCK"))->require_version(4)) .insert(OpcodeInstr::mksimple(0xf835, 16, "GLOBALID", exec_get_global_id)->require_version(4)) + .insert(OpcodeInstr::mksimple(0xf836, 16, "GETEXECUTIONPRICE", exec_get_execution_price)->require_version(6)) + .insert(OpcodeInstr::mksimple(0xf837, 16, "GETSTORAGEPRICE", exec_get_storage_price)->require_version(6)) + .insert(OpcodeInstr::mksimple(0xf838, 16, "GETFORWARDPRICE", exec_get_forward_price)->require_version(6)) + .insert(OpcodeInstr::mksimple(0xf839, 16, "GETPRECOMPILEDGAS", exec_get_precompiled_gas)->require_version(6)) .insert(OpcodeInstr::mksimple(0xf840, 16, "GETGLOBVAR", exec_get_global_var)) .insert(OpcodeInstr::mkfixedrange(0xf841, 0xf860, 16, 5, instr::dump_1c_and(31, "GETGLOB "), exec_get_global)) .insert(OpcodeInstr::mksimple(0xf860, 16, "SETGLOBVAR", exec_set_global_var)) @@ -1592,17 +1699,39 @@ int exec_send_message(VmState* st) { } bool is_masterchain = parse_addr_workchain(*my_addr) == -1 || (!ext_msg && parse_addr_workchain(*dest) == -1); - Ref config_dict = get_param(st, 9).as_cell(); - Dictionary config{config_dict, 32}; - Ref prices_cell = config.lookup_ref(td::BitArray<32>{is_masterchain ? 24 : 25}); - block::gen::MsgForwardPrices::Record prices; - if (prices_cell.is_null() || !tlb::unpack_cell(std::move(prices_cell), prices)) { + td::Ref prices_cs; + if (st->get_global_version() >= 6) { + prices_cs = get_unpacked_config_param(st, is_masterchain ? 4 : 5); + } else { + Ref config_dict = get_param(st, 9).as_cell(); + Dictionary config{config_dict, 32}; + Ref prices_cell = config.lookup_ref(td::BitArray<32>{is_masterchain ? 24 : 25}); + if (prices_cell.not_null()) { + prices_cs = load_cell_slice_ref(prices_cell); + } + } + if (prices_cs.is_null()) { throw VmError{Excno::unknown, "invalid prices config"}; } + auto r_prices = block::Config::do_get_msg_prices(*prices_cs, is_masterchain ? 24 : 25); + if (r_prices.is_error()) { + throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; + } + block::MsgPrices prices = r_prices.move_as_ok(); // msg_fwd_fees = (lump_price + ceil((bit_price * msg.bits + cell_price * msg.cells)/2^16)) nanograms // bits in the root cell of a message are not included in msg.bits (lump_price pays for them) - vm::VmStorageStat stat(1 << 13); + td::uint64 max_cells; + if (st->get_global_version() >= 6) { + auto r_size_limits_config = block::Config::do_get_size_limits_config(get_unpacked_config_param(st, 6)); + if (r_size_limits_config.is_error()) { + throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_size_limits_config.error().message()}; + } + max_cells = r_size_limits_config.ok().max_msg_cells; + } else { + max_cells = 1 << 13; + } + vm::VmStorageStat stat(max_cells); CellSlice cs = load_cell_slice(msg_cell); cs.skip_first(cs.size()); stat.add_storage(cs); @@ -1650,7 +1779,7 @@ int exec_send_message(VmState* st) { if (ihr_disabled) { ihr_fee_short = 0; } else { - ihr_fee_short = td::uint128(fwd_fee_short).mult(prices.ihr_price_factor).shr(16).lo(); + ihr_fee_short = td::uint128(fwd_fee_short).mult(prices.ihr_factor).shr(16).lo(); } fwd_fee = td::RefInt256{true, fwd_fee_short}; ihr_fee = td::RefInt256{true, ihr_fee_short}; diff --git a/doc/GlobalVersions.md b/doc/GlobalVersions.md index d2064b90..1264dc2b 100644 --- a/doc/GlobalVersions.md +++ b/doc/GlobalVersions.md @@ -53,4 +53,28 @@ See [this post](https://t.me/tonstatus/88) for details. ### Loading libraries * Loading "nested libraries" (i.e. a library cell that points to another library cell) throws an exception. * Loading a library consumes gas for cell load only once (for the library cell), not twice (both for the library cell and the cell in the library). -* `XLOAD` now works differently. When it takes a library cell, it returns the cell that it points to. This allows loading "nested libraries", if needed. \ No newline at end of file +* `XLOAD` now works differently. When it takes a library cell, it returns the cell that it points to. This allows loading "nested libraries", if needed. + +## Version 6 + +### c7 tuple +**c7** tuple extended from 14 to 15 elements. The new element is a tuple that contains some config parameters as cell slices. +If the parameter is absent from the config, the value is null. +* **0**: `StoragePrices` from `ConfigParam 18`. Not the whole dict, but only the one StoragePrices entry (one which corresponds to the current time). +* **1**: `ConfigParam 19` (global id). +* **2**: `ConfigParam 20` (mc gas prices). +* **3**: `ConfigParam 21` (gas prices). +* **4**: `ConfigParam 24` (mc fwd fees). +* **5**: `ConfigParam 25` (fwd fees). +* **6**: `ConfigParam 43` (size limits). + +### New TVM instructions +* `GETEXECUTIONPRICE` (`gas_used is_mc - price`) - calculates gas fee. +* `GETSTORAGEPRICE` (`cells bits seconds is_mc - price`) - calculates storage fees (only current StoragePrices entry is used). +* `GETFORWARDPRICE` (`cells bits is_mc - price`) - calculates forward fee. +* `GETPRECOMPILEDGAS` (`- null`) - reserved, currently returns `null`. +`gas_used`, `cells`, `bits`, `time_delta` are integers in range `0..2^63-1`. + +### Other changes +* `GLOBALID` gets `ConfigParam 19` from the tuple, not from the config dict. This decreases gas usage. +* `SENDMSG` gets `ConfigParam 24/25` (message prices) from the tuple, not from the config dict, and also uses `ConfigParam 43` to get max_msg_cells. \ No newline at end of file diff --git a/tonlib/test/offline.cpp b/tonlib/test/offline.cpp index 0fedc865..7b4342dd 100644 --- a/tonlib/test/offline.cpp +++ b/tonlib/test/offline.cpp @@ -333,8 +333,8 @@ TEST(Tonlib, ConfigParseBug) { unsigned char buff[128]; int bits = (int)td::bitstring::parse_bitstring_hex_literal(buff, sizeof(buff), literal.begin(), literal.end()); CHECK(bits >= 0); - auto slice = vm::CellBuilder().store_bits(td::ConstBitPtr{buff}, bits).finalize(); - block::Config::do_get_gas_limits_prices(std::move(slice), 21).ensure(); + auto cell = vm::CellBuilder().store_bits(td::ConstBitPtr{buff}, bits).finalize(); + block::Config::do_get_gas_limits_prices(vm::load_cell_slice(cell), 21).ensure(); } TEST(Tonlib, EncryptionApi) { diff --git a/utils/opcode-timing.cpp b/utils/opcode-timing.cpp index 4f5c8ab4..d68928d0 100644 --- a/utils/opcode-timing.cpp +++ b/utils/opcode-timing.cpp @@ -11,6 +11,55 @@ #include "td/utils/ScopeGuard.h" #include "td/utils/StringBuilder.h" #include "td/utils/Timer.h" +#include "block.h" +#include "td/utils/filesystem.h" +#include "mc-config.h" + +td::Ref c7; + +void prepare_c7() { + auto now = (td::uint32)td::Clocks::system(); + td::Ref config_root; + auto config_data = td::read_file("config.boc"); + if (config_data.is_ok()) { + LOG(WARNING) << "Reading config from config.boc"; + auto r_cell = vm::std_boc_deserialize(config_data.move_as_ok()); + r_cell.ensure(); + config_root = r_cell.move_as_ok(); + } + + vm::CellBuilder addr; + addr.store_long(4, 3); + addr.store_long(0, 8); + addr.store_ones(256); + std::vector tuple = { + td::make_refint(0x076ef1ea), // [ magic:0x076ef1ea + td::zero_refint(), // actions:Integer + td::zero_refint(), // msgs_sent:Integer + td::make_refint(now), // unixtime:Integer + td::make_refint(0), // block_lt:Integer + td::make_refint(0), // trans_lt:Integer + td::make_refint(123), // rand_seed:Integer + block::CurrencyCollection(td::make_refint(10000LL * 1000000000)) + .as_vm_tuple(), // balance_remaining:[Integer (Maybe Cell)] + addr.as_cellslice_ref(), // myself:MsgAddressInt + vm::StackEntry::maybe(config_root) // global_config:(Maybe Cell) ] = SmartContractInfo; + }; + tuple.push_back({}); // code:Cell + tuple.push_back(block::CurrencyCollection(td::make_refint(2000LL * 1000000000)) + .as_vm_tuple()); // in_msg_value:[Integer (Maybe Cell)] + tuple.push_back(td::make_refint(0)); // storage_fees:Integer + tuple.push_back(vm::StackEntry()); // prev_blocks_info + if (config_root.not_null()) { + block::Config config{config_root}; + config.unpack().ensure(); + tuple.push_back(config.get_unpacked_config_tuple(now)); // unpacked_config_tuple + } else { + tuple.push_back(vm::StackEntry()); + } + auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); + c7 = vm::make_tuple_ref(std::move(tuple_ref)); +} td::Ref to_cell(td::Slice s) { if (s.size() >= 4 && s.substr(0, 4) == "boc:") { @@ -34,9 +83,11 @@ struct runInfo { long long gasUsage; int vmReturnCode; - runInfo() : runtime(0.0), gasUsage(0), vmReturnCode(0) {} - runInfo(long double runtime, long long gasUsage, int vmReturnCode) : - runtime(runtime), gasUsage(gasUsage), vmReturnCode(vmReturnCode) {} + runInfo() : runtime(0.0), gasUsage(0), vmReturnCode(0) { + } + runInfo(long double runtime, long long gasUsage, int vmReturnCode) + : runtime(runtime), gasUsage(gasUsage), vmReturnCode(vmReturnCode) { + } runInfo operator+(const runInfo& addend) const { return {runtime + addend.runtime, gasUsage + addend.gasUsage, vmReturnCode ? vmReturnCode : addend.vmReturnCode}; @@ -45,7 +96,7 @@ struct runInfo { runInfo& operator+=(const runInfo& addend) { runtime += addend.runtime; gasUsage += addend.gasUsage; - if(!vmReturnCode && addend.vmReturnCode) { + if (!vmReturnCode && addend.vmReturnCode) { vmReturnCode = addend.vmReturnCode; } return *this; @@ -68,8 +119,8 @@ vm::Stack prepare_stack(td::Slice command) { vm::Stack stack; try { vm::GasLimits gas_limit; - int ret = vm::run_vm_code(vm::load_cell_slice_ref(cell), stack, 0 /*flags*/, nullptr /*data*/, - vm::VmLog{}, nullptr, &gas_limit, {}, {}, nullptr, 4); + int ret = vm::run_vm_code(vm::load_cell_slice_ref(cell), stack, 0 /*flags*/, nullptr /*data*/, vm::VmLog{}, nullptr, + &gas_limit, {}, c7, nullptr, ton::SUPPORTED_VERSION); CHECK(ret == 0); } catch (...) { LOG(FATAL) << "catch unhandled exception"; @@ -83,8 +134,8 @@ runInfo time_run_vm(td::Slice command, td::Ref stack) { CHECK(stack.is_unique()); try { vm::GasLimits gas_limit; - vm::VmState vm{vm::load_cell_slice_ref(cell), std::move(stack), gas_limit, 0, {}, vm::VmLog{}, {}, {}}; - vm.set_global_version(4); + vm::VmState vm{vm::load_cell_slice_ref(cell), std::move(stack), gas_limit, 0, {}, vm::VmLog{}, {}, c7}; + vm.set_global_version(ton::SUPPORTED_VERSION); std::clock_t cStart = std::clock(); int ret = ~vm.run(); std::clock_t cEnd = std::clock(); @@ -102,7 +153,7 @@ runtimeStats averageRuntime(td::Slice command, const vm::Stack& stack) { std::vector values; values.reserve(samples); td::Timer t0; - for(size_t i = 0; i < samples; ++i) { + for (size_t i = 0; i < samples; ++i) { const auto value_empty = time_run_vm(td::Slice(""), td::Ref(true, stack)); const auto value_code = time_run_vm(command, td::Ref(true, stack)); runInfo value{value_code.runtime - value_empty.runtime, value_code.gasUsage - value_empty.gasUsage, @@ -120,18 +171,16 @@ runtimeStats averageRuntime(td::Slice command, const vm::Stack& stack) { long double runtimeDiffSum = 0.0; long double gasDiffSum = 0.0; bool errored = false; - for(const auto value : values) { + for (const auto value : values) { const auto runtime = value.runtime - runtimeMean; const auto gasUsage = static_cast(value.gasUsage) - gasMean; runtimeDiffSum += runtime * runtime; gasDiffSum += gasUsage * gasUsage; errored = errored || value.errored(); } - return { - {runtimeMean, sqrtl(runtimeDiffSum / static_cast(samples))}, - {gasMean, sqrtl(gasDiffSum / static_cast(samples))}, - errored - }; + return {{runtimeMean, sqrtl(runtimeDiffSum / static_cast(samples))}, + {gasMean, sqrtl(gasDiffSum / static_cast(samples))}, + errored}; } runtimeStats timeInstruction(const std::string& setupCode, const std::string& toMeasure) { @@ -141,28 +190,33 @@ runtimeStats timeInstruction(const std::string& setupCode, const std::string& to int main(int argc, char** argv) { SET_VERBOSITY_LEVEL(verbosity_ERROR); - if(argc != 2 && argc != 3) { - std::cerr << - "This utility compares the timing of VM execution against the gas used.\n" - "It can be used to discover opcodes or opcode sequences that consume an " - "inordinate amount of computational resources relative to their gas cost.\n" - "\n" - "The utility expects two command line arguments: \n" - "The TVM code used to set up the stack and VM state followed by the TVM code to measure.\n" - "For example, to test the DIVMODC opcode:\n" - "\t$ " << argv[0] << " 80FF801C A90E 2>/dev/null\n" - "\tOPCODE,runtime mean,runtime stddev,gas mean,gas stddev\n" - "\tA90E,0.0066416,0.00233496,26,0\n" - "\n" - "Usage: " << argv[0] << " [TVM_SETUP_BYTECODE] TVM_BYTECODE\n" - "\tBYTECODE is either:\n" - "\t1. hex-encoded string (e.g. A90E for DIVMODC)\n" - "\t2. boc: (e.g. boc:te6ccgEBAgEABwABAogBAAJ7)" << std::endl << std::endl; + if (argc != 2 && argc != 3) { + std::cerr << "This utility compares the timing of VM execution against the gas used.\n" + "It can be used to discover opcodes or opcode sequences that consume an " + "inordinate amount of computational resources relative to their gas cost.\n" + "\n" + "The utility expects two command line arguments: \n" + "The TVM code used to set up the stack and VM state followed by the TVM code to measure.\n" + "For example, to test the DIVMODC opcode:\n" + "\t$ " + << argv[0] + << " 80FF801C A90E 2>/dev/null\n" + "\tOPCODE,runtime mean,runtime stddev,gas mean,gas stddev\n" + "\tA90E,0.0066416,0.00233496,26,0\n" + "\n" + "Usage: " + << argv[0] + << " [TVM_SETUP_BYTECODE] TVM_BYTECODE\n" + "\tBYTECODE is either:\n" + "\t1. hex-encoded string (e.g. A90E for DIVMODC)\n" + "\t2. boc: (e.g. boc:te6ccgEBAgEABwABAogBAAJ7)" + << std::endl + << std::endl; return 1; } std::cout << "OPCODE,runtime mean,runtime stddev,gas mean,gas stddev,error" << std::endl; std::string setup, code; - if(argc == 2) { + if (argc == 2) { setup = ""; code = argv[1]; } else { @@ -170,6 +224,7 @@ int main(int argc, char** argv) { code = argv[2]; } vm::init_vm().ensure(); + prepare_c7(); const auto time = timeInstruction(setup, code); std::cout << std::fixed << std::setprecision(9) << code << "," << time.runtime.mean << "," << time.runtime.stddev << "," << time.gasUsage.mean << "," << time.gasUsage.stddev << "," << (int)time.errored << std::endl; diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index 2b3ccd85..44b49226 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -960,6 +960,9 @@ bool ValidateQuery::fetch_config_params() { } compute_phase_cfg_.prev_blocks_info = prev_blocks_info.move_as_ok(); } + if (compute_phase_cfg_.global_version >= 6) { + compute_phase_cfg_.unpacked_config_tuple = config_->get_unpacked_config_tuple(now_); + } compute_phase_cfg_.suspended_addresses = config_->get_suspended_addresses(now_); compute_phase_cfg_.size_limits = size_limits; } From 51d30e2f2b5c6d4895da5a59e5af4ff91ecad02d Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 26 Jan 2024 18:24:39 +0300 Subject: [PATCH 083/351] Add TVM instructions for working with nonzero-level cells (#880) Co-authored-by: SpyCheese --- crypto/fift/lib/Asm.fif | 6 +++ crypto/test/fift.cpp | 4 ++ crypto/test/fift/levels.fif | 75 +++++++++++++++++++++++++++++++++++++ crypto/vm/cellops.cpp | 57 +++++++++++++++++++++++++++- doc/GlobalVersions.md | 14 +++++++ test/regression-tests.ans | 1 + 6 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 crypto/test/fift/levels.fif diff --git a/crypto/fift/lib/Asm.fif b/crypto/fift/lib/Asm.fif index 630f325a..5ad6ce47 100644 --- a/crypto/fift/lib/Asm.fif +++ b/crypto/fift/lib/Asm.fif @@ -813,6 +813,12 @@ x{D761} @Defop LDONES x{D762} @Defop LDSAME x{D764} @Defop SDEPTH x{D765} @Defop CDEPTH +x{D766} @Defop CLEVEL +x{D767} @Defop CLEVELMASK +{ s ]] 0 runvmx abort"exitcode != 0" ."Level = " . cr + dup [[ <{ CLEVELMASK }>s ]] 0 runvmx abort"exitcode != 0" ."Level mask = 0b" b. cr + dup dup [[ <{ 0 CHASHI DUP ROT 0 INT CHASHIX EQUAL 55 THROWIFNOT }>s ]] 0 runvmx abort"exitcode != 0" ."Hash_0 = " X. cr + dup dup [[ <{ 1 CHASHI DUP ROT 1 INT CHASHIX EQUAL 55 THROWIFNOT }>s ]] 0 runvmx abort"exitcode != 0" ."Hash_1 = " X. cr + dup dup [[ <{ 2 CHASHI DUP ROT 2 INT CHASHIX EQUAL 55 THROWIFNOT }>s ]] 0 runvmx abort"exitcode != 0" ."Hash_2 = " X. cr + dup dup [[ <{ 3 CHASHI DUP ROT 3 INT CHASHIX EQUAL 55 THROWIFNOT }>s ]] 0 runvmx abort"exitcode != 0" ."Hash_3 = " X. cr + dup dup [[ <{ 0 CDEPTHI DUP ROT 0 INT CDEPTHIX EQUAL 55 THROWIFNOT }>s ]] 0 runvmx abort"exitcode != 0" ."Depth_0 = " . cr + dup dup [[ <{ 1 CDEPTHI DUP ROT 1 INT CDEPTHIX EQUAL 55 THROWIFNOT }>s ]] 0 runvmx abort"exitcode != 0" ."Depth_1 = " . cr + dup dup [[ <{ 2 CDEPTHI DUP ROT 2 INT CDEPTHIX EQUAL 55 THROWIFNOT }>s ]] 0 runvmx abort"exitcode != 0" ."Depth_2 = " . cr + dup dup [[ <{ 3 CDEPTHI DUP ROT 3 INT CDEPTHIX EQUAL 55 THROWIFNOT }>s ]] 0 runvmx abort"exitcode != 0" ."Depth_3 = " . cr + drop + cr +} : print-all + +// Ordinary cell of level 0 + ref, b> ref, + ref, +b> +print-all + +// Prunned branch of level 1 +spec +print-all + +// Prunned branch of level 3 +spec +print-all + +// Prunned branch of level 3, mask 0b101 +spec +print-all + +// Tree with the previous cell inside +spec ref, + b> ref, +b> +print-all diff --git a/crypto/vm/cellops.cpp b/crypto/vm/cellops.cpp index af84a67e..94407231 100644 --- a/crypto/vm/cellops.cpp +++ b/crypto/vm/cellops.cpp @@ -1391,6 +1391,55 @@ int exec_slice_depth(VmState* st) { return 0; } +int exec_cell_level(VmState* st) { + Stack& stack = st->get_stack(); + VM_LOG(st) << "execute CLEVEL"; + auto cell = stack.pop_cell(); + stack.push_smallint(cell->get_level()); + return 0; +} + +int exec_cell_level_mask(VmState* st) { + Stack& stack = st->get_stack(); + VM_LOG(st) << "execute CLEVELMASK"; + auto cell = stack.pop_cell(); + stack.push_smallint(cell->get_level_mask().get_mask()); + return 0; +} + +int exec_cell_hash_i(VmState* st, unsigned args, bool var) { + unsigned i; + Stack& stack = st->get_stack(); + if (var) { + VM_LOG(st) << "execute CHASHIX"; + i = stack.pop_smallint_range(3); + } else { + i = args & 3; + VM_LOG(st) << "execute CHASHI " << i; + } + auto cell = stack.pop_cell(); + std::array hash = cell->get_hash(i).as_array(); + td::RefInt256 res{true}; + CHECK(res.write().import_bytes(hash.data(), hash.size(), false)); + stack.push_int(std::move(res)); + return 0; +} + +int exec_cell_depth_i(VmState* st, unsigned args, bool var) { + unsigned i; + Stack& stack = st->get_stack(); + if (var) { + VM_LOG(st) << "execute CDEPTHIX"; + i = stack.pop_smallint_range(3); + } else { + i = args & 3; + VM_LOG(st) << "execute CDEPTHI " << i; + } + auto cell = stack.pop_cell(); + stack.push_smallint(cell->get_depth(i)); + return 0; +} + void register_cell_deserialize_ops(OpcodeTable& cp0) { using namespace std::placeholders; cp0.insert(OpcodeInstr::mksimple(0xd0, 8, "CTOS", exec_cell_to_slice)) @@ -1479,7 +1528,13 @@ void register_cell_deserialize_ops(OpcodeTable& cp0) { .insert(OpcodeInstr::mksimple(0xd761, 16, "LDONES", std::bind(exec_load_same, _1, "LDONES", 1))) .insert(OpcodeInstr::mksimple(0xd762, 16, "LDSAME", std::bind(exec_load_same, _1, "LDSAME", -1))) .insert(OpcodeInstr::mksimple(0xd764, 16, "SDEPTH", exec_slice_depth)) - .insert(OpcodeInstr::mksimple(0xd765, 16, "CDEPTH", exec_cell_depth)); + .insert(OpcodeInstr::mksimple(0xd765, 16, "CDEPTH", exec_cell_depth)) + .insert(OpcodeInstr::mksimple(0xd766, 16, "CLEVEL", exec_cell_level)->require_version(6)) + .insert(OpcodeInstr::mksimple(0xd767, 16, "CLEVELMASK", exec_cell_level_mask)->require_version(6)) + .insert(OpcodeInstr::mkfixed(0xd768 >> 2, 14, 2, instr::dump_1c_and(3, "CHASHI "), std::bind(exec_cell_hash_i, _1, _2, false))->require_version(6)) + .insert(OpcodeInstr::mkfixed(0xd76c >> 2, 14, 2, instr::dump_1c_and(3, "CDEPTHI "), std::bind(exec_cell_depth_i, _1, _2, false))->require_version(6)) + .insert(OpcodeInstr::mksimple(0xd770, 16, "CHASHIX ", std::bind(exec_cell_hash_i, _1, 0, true))->require_version(6)) + .insert(OpcodeInstr::mksimple(0xd771, 16, "CDEPTHIX ", std::bind(exec_cell_depth_i, _1, 0, true))->require_version(6)); } void register_cell_ops(OpcodeTable& cp0) { diff --git a/doc/GlobalVersions.md b/doc/GlobalVersions.md index 1264dc2b..c2d026e4 100644 --- a/doc/GlobalVersions.md +++ b/doc/GlobalVersions.md @@ -69,12 +69,26 @@ If the parameter is absent from the config, the value is null. * **6**: `ConfigParam 43` (size limits). ### New TVM instructions + +#### Fee calculation * `GETEXECUTIONPRICE` (`gas_used is_mc - price`) - calculates gas fee. * `GETSTORAGEPRICE` (`cells bits seconds is_mc - price`) - calculates storage fees (only current StoragePrices entry is used). * `GETFORWARDPRICE` (`cells bits is_mc - price`) - calculates forward fee. * `GETPRECOMPILEDGAS` (`- null`) - reserved, currently returns `null`. + `gas_used`, `cells`, `bits`, `time_delta` are integers in range `0..2^63-1`. +#### Cell operations +Operations for working with Merkle proofs, where cells can have non-zero level and multiple hashes. +* `CLEVEL` (`cell - level`) - returns level of the cell. +* `CLEVELMASK` (`cell - level_mask`) - returns level mask of the cell. +* `i CHASHI` (`cell - hash`) - returns `i`th hash of the cell. +* `i CDEPTHI` (`cell - depth`) - returns `i`th depth of the cell. +* `CHASHIX` (`cell i - hash`) - returns `i`th hash of the cell. +* `CDEPTHIX` (`cell i - depth`) - returns `i`th depth of the cell. + +`i` is in range `0..3`. + ### Other changes * `GLOBALID` gets `ConfigParam 19` from the tuple, not from the config dict. This decreases gas usage. * `SENDMSG` gets `ConfigParam 24/25` (message prices) from the tuple, not from the config dict, and also uses `ConfigParam 43` to get max_msg_cells. \ No newline at end of file diff --git a/test/regression-tests.ans b/test/regression-tests.ans index 0e07e3d6..ec013bf7 100644 --- a/test/regression-tests.ans +++ b/test/regression-tests.ans @@ -18,6 +18,7 @@ Test_Fift_test_fiftext_default 2b0db5d4d4bfbc705b959cc787540d7b3a21a71469eac5475 Test_Fift_test_fixed_default 278a19d56b773102caf5c1fe2997ea6c8d0d9e720eff8503feede6398a197eec Test_Fift_test_hash_ext_default 686fc5680feca5b3bb207768215b27f6872a95128762dee0d7f2c88bc492d62d Test_Fift_test_hmap_default c269246882039824bb5822e896c3e6e82ef8e1251b6b251f5af8ea9fb8d05067 +Test_Fift_test_levels_default 9fba4a7c98aec9000f42846d6e5fd820343ba61d68f9139dd16c88ccda757cf3 Test_Fift_test_namespaces_default e6419619c51332fb5e8bf22043ef415db686c47fe24f03061e5ad831014e7c6c Test_Fift_test_rist255_default f4d7558f200a656934f986145c19b1dedbe2ad029292a5a975576d6891e25fc4 Test_Fift_test_sort2_default 9b57d47e6a10e7d1bbb565db35400debf2f963031f434742a702ec76555a5d3a From a11ffb1637032faabea9119020f6c80ed678d0e7 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 29 Jan 2024 16:38:42 +0300 Subject: [PATCH 084/351] Add DUEPAYMENT and some others + small fixes of new opcodes (#881) * Changes in TVM v6 * Rename some opcodes * Add due payment to c7 * Add GETORIGINALFWDFEE, GETGASFEESIMPLE, GETFORWARDFEESIMPLE * Bugfix in GETGASFEE * Fix typo --------- Co-authored-by: SpyCheese --- crypto/block/transaction.cpp | 9 +-- crypto/fift/lib/Asm.fif | 10 ++- crypto/smc-envelope/SmartContract.cpp | 1 + crypto/vm/tonops.cpp | 92 ++++++++++++++++++++------- doc/GlobalVersions.md | 28 ++++---- utils/opcode-timing.cpp | 1 + 6 files changed, 99 insertions(+), 42 deletions(-) diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index e08407a2..b3aa6c8f 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1339,7 +1339,8 @@ Ref Transaction::prepare_vm_c7(const ComputePhaseConfig& cfg) const { } if (cfg.global_version >= 6) { tuple.push_back(cfg.unpacked_config_tuple.not_null() ? vm::StackEntry(cfg.unpacked_config_tuple) - : vm::StackEntry()); // unpacked_config_tuple:[...] + : vm::StackEntry()); // unpacked_config_tuple:[...] + tuple.push_back(due_payment.not_null() ? due_payment : td::zero_refint()); // due_payment:Integer } auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple_ref).to_string(); @@ -1938,9 +1939,9 @@ td::uint64 MsgPrices::compute_fwd_fees(td::uint64 cells, td::uint64 bits) const * @returns The computed forward fees for the message as td::RefInt256j. */ td::RefInt256 MsgPrices::compute_fwd_fees256(td::uint64 cells, td::uint64 bits) const { - return td::rshift( - td::make_refint(lump_price) + td::make_refint(bit_price) * bits + td::make_refint(cell_price) * cells, 16, - 1); // divide by 2^16 with ceil rounding + return td::make_refint(lump_price) + + td::rshift(td::make_refint(bit_price) * bits + td::make_refint(cell_price) * cells, 16, + 1); // divide by 2^16 with ceil rounding } /** diff --git a/crypto/fift/lib/Asm.fif b/crypto/fift/lib/Asm.fif index 5ad6ce47..92ceab6d 100644 --- a/crypto/fift/lib/Asm.fif +++ b/crypto/fift/lib/Asm.fif @@ -1302,16 +1302,20 @@ x{F82B} @Defop INCOMINGVALUE x{F82C} @Defop STORAGEFEES x{F82D} @Defop PREVBLOCKSINFOTUPLE x{F82E} @Defop UNPACKEDCONFIGTUPLE +x{F82F} @Defop DUEPAYMENT x{F830} @Defop CONFIGDICT x{F832} @Defop CONFIGPARAM x{F833} @Defop CONFIGOPTPARAM x{F83400} @Defop PREVMCBLOCKS x{F83401} @Defop PREVKEYBLOCK x{F835} @Defop GLOBALID -x{F836} @Defop GETEXECUTIONPRICE -x{F837} @Defop GETSTORAGEPRICE -x{F838} @Defop GETFORWARDPRICE +x{F836} @Defop GETGASFEE +x{F837} @Defop GETSTORAGEFEE +x{F838} @Defop GETFORWARDFEE x{F839} @Defop GETPRECOMPILEDGAS +x{F83A} @Defop GETORIGINALFWDFEE +x{F83B} @Defop GETGASFEESIMPLE +x{F83C} @Defop GETFORWARDFEESIMPLE x{F840} @Defop GETGLOBVAR { dup 1 31 @rangechk prepare_vm_c7(SmartContract::Args args, td::Ref cod } if (args.config && args.config.value()->get_global_version() >= 6) { tuple.push_back(args.config.value()->get_unpacked_config_tuple(now)); // unpacked_config_tuple + tuple.push_back(td::zero_refint()); // due_payment } auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); //LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple).to_string(); diff --git a/crypto/vm/tonops.cpp b/crypto/vm/tonops.cpp index 753bbc0a..9ce7fe9c 100644 --- a/crypto/vm/tonops.cpp +++ b/crypto/vm/tonops.cpp @@ -276,11 +276,7 @@ int exec_get_global_id(VmState* st) { return 0; } -int exec_get_execution_price(VmState* st) { - VM_LOG(st) << "execute GETEXECUTIONPRICE"; - Stack& stack = st->get_stack(); - bool is_masterchain = stack.pop_bool(); - td::uint64 gas = stack.pop_long_range(std::numeric_limits::max(), 0); +static block::GasLimitsPrices get_gas_prices(VmState* st, bool is_masterchain) { Ref cs = get_unpacked_config_param(st, is_masterchain ? 2 : 3); if (cs.is_null()) { throw VmError{Excno::type_chk, "intermediate value is not a slice"}; @@ -289,13 +285,33 @@ int exec_get_execution_price(VmState* st) { if (r_prices.is_error()) { throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; } - block::GasLimitsPrices prices = r_prices.move_as_ok(); + return r_prices.move_as_ok(); +} + +static block::MsgPrices get_msg_prices(VmState* st, bool is_masterchain) { + Ref cs = get_unpacked_config_param(st, is_masterchain ? 4 : 5); + if (cs.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a slice"}; + } + auto r_prices = block::Config::do_get_msg_prices(*cs, is_masterchain ? 24 : 25); + if (r_prices.is_error()) { + throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; + } + return r_prices.move_as_ok(); +} + +int exec_get_gas_fee(VmState* st) { + VM_LOG(st) << "execute GETGASFEE"; + Stack& stack = st->get_stack(); + bool is_masterchain = stack.pop_bool(); + td::uint64 gas = stack.pop_long_range(std::numeric_limits::max(), 0); + block::GasLimitsPrices prices = get_gas_prices(st, is_masterchain); stack.push_int(prices.compute_gas_price(gas)); return 0; } -int exec_get_storage_price(VmState* st) { - VM_LOG(st) << "execute GETSTORAGEPRICE"; +int exec_get_storage_fee(VmState* st) { + VM_LOG(st) << "execute GETSTORAGEFEE"; Stack& stack = st->get_stack(); bool is_masterchain = stack.pop_bool(); td::int64 delta = stack.pop_long_range(std::numeric_limits::max(), 0); @@ -325,21 +341,13 @@ int exec_get_storage_price(VmState* st) { return 0; } -int exec_get_forward_price(VmState* st) { - VM_LOG(st) << "execute GETFORWARDPRICE"; +int exec_get_forward_fee(VmState* st) { + VM_LOG(st) << "execute GETFORWARDFEE"; Stack& stack = st->get_stack(); bool is_masterchain = stack.pop_bool(); td::uint64 bits = stack.pop_long_range(std::numeric_limits::max(), 0); td::uint64 cells = stack.pop_long_range(std::numeric_limits::max(), 0); - Ref cs = get_unpacked_config_param(st, is_masterchain ? 4 : 5); - if (cs.is_null()) { - throw VmError{Excno::type_chk, "intermediate value is not a slice"}; - } - auto r_prices = block::Config::do_get_msg_prices(*cs, is_masterchain ? 24 : 25); - if (r_prices.is_error()) { - throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; - } - block::MsgPrices prices = r_prices.move_as_ok(); + block::MsgPrices prices = get_msg_prices(st, is_masterchain); stack.push_int(prices.compute_fwd_fees256(cells, bits)); return 0; } @@ -351,6 +359,41 @@ int exec_get_precompiled_gas(VmState* st) { return 0; } +int exec_get_original_fwd_fee(VmState* st) { + VM_LOG(st) << "execute GETORIGINALFWDFEE"; + Stack& stack = st->get_stack(); + bool is_masterchain = stack.pop_bool(); + td::RefInt256 fwd_fee = stack.pop_int_finite(); + if (fwd_fee->sgn() < 0) { + throw VmError{Excno::range_chk, "fwd_fee is negative"}; + } + block::MsgPrices prices = get_msg_prices(st, is_masterchain); + stack.push_int(td::muldiv(fwd_fee, td::make_refint(1 << 16), td::make_refint((1 << 16) - prices.first_frac))); + return 0; +} + +int exec_get_gas_fee_simple(VmState* st) { + VM_LOG(st) << "execute GETGASFEESIMPLE"; + Stack& stack = st->get_stack(); + bool is_masterchain = stack.pop_bool(); + td::uint64 gas = stack.pop_long_range(std::numeric_limits::max(), 0); + block::GasLimitsPrices prices = get_gas_prices(st, is_masterchain); + stack.push_int(td::rshift(td::make_refint(prices.gas_price) * gas, 16, 1)); + return 0; +} + +int exec_get_forward_fee_simple(VmState* st) { + VM_LOG(st) << "execute GETFORWARDFEESIMPLE"; + Stack& stack = st->get_stack(); + bool is_masterchain = stack.pop_bool(); + td::uint64 bits = stack.pop_long_range(std::numeric_limits::max(), 0); + td::uint64 cells = stack.pop_long_range(std::numeric_limits::max(), 0); + block::MsgPrices prices = get_msg_prices(st, is_masterchain); + stack.push_int(td::rshift(td::make_refint(prices.bit_price) * bits + td::make_refint(prices.cell_price) * cells, 16, + 1)); // divide by 2^16 with ceil rounding + return 0; +} + void register_ton_config_ops(OpcodeTable& cp0) { using namespace std::placeholders; cp0.insert(OpcodeInstr::mkfixedrange(0xf820, 0xf823, 16, 4, instr::dump_1c("GETPARAM "), exec_get_var_param)) @@ -366,17 +409,20 @@ void register_ton_config_ops(OpcodeTable& cp0) { .insert(OpcodeInstr::mksimple(0xf82c, 16, "STORAGEFEES", std::bind(exec_get_param, _1, 12, "STORAGEFEES"))) .insert(OpcodeInstr::mksimple(0xf82d, 16, "PREVBLOCKSINFOTUPLE", std::bind(exec_get_param, _1, 13, "PREVBLOCKSINFOTUPLE"))) .insert(OpcodeInstr::mksimple(0xf82e, 16, "UNPACKEDCONFIGTUPLE", std::bind(exec_get_param, _1, 14, "UNPACKEDCONFIGTUPLE"))) - .insert(OpcodeInstr::mkfixedrange(0xf82f, 0xf830, 16, 4, instr::dump_1c("GETPARAM "), exec_get_var_param)) + .insert(OpcodeInstr::mksimple(0xf82f, 16, "DUEPAYMENT", std::bind(exec_get_param, _1, 15, "DUEPAYMENT"))) .insert(OpcodeInstr::mksimple(0xf830, 16, "CONFIGDICT", exec_get_config_dict)) .insert(OpcodeInstr::mksimple(0xf832, 16, "CONFIGPARAM", std::bind(exec_get_config_param, _1, false))) .insert(OpcodeInstr::mksimple(0xf833, 16, "CONFIGOPTPARAM", std::bind(exec_get_config_param, _1, true))) .insert(OpcodeInstr::mksimple(0xf83400, 24, "PREVMCBLOCKS", std::bind(exec_get_prev_blocks_info, _1, 0, "PREVMCBLOCKS"))->require_version(4)) .insert(OpcodeInstr::mksimple(0xf83401, 24, "PREVKEYBLOCK", std::bind(exec_get_prev_blocks_info, _1, 1, "PREVKEYBLOCK"))->require_version(4)) .insert(OpcodeInstr::mksimple(0xf835, 16, "GLOBALID", exec_get_global_id)->require_version(4)) - .insert(OpcodeInstr::mksimple(0xf836, 16, "GETEXECUTIONPRICE", exec_get_execution_price)->require_version(6)) - .insert(OpcodeInstr::mksimple(0xf837, 16, "GETSTORAGEPRICE", exec_get_storage_price)->require_version(6)) - .insert(OpcodeInstr::mksimple(0xf838, 16, "GETFORWARDPRICE", exec_get_forward_price)->require_version(6)) + .insert(OpcodeInstr::mksimple(0xf836, 16, "GETGASFEE", exec_get_gas_fee)->require_version(6)) + .insert(OpcodeInstr::mksimple(0xf837, 16, "GETSTORAGEFEE", exec_get_storage_fee)->require_version(6)) + .insert(OpcodeInstr::mksimple(0xf838, 16, "GETFORWARDFEE", exec_get_forward_fee)->require_version(6)) .insert(OpcodeInstr::mksimple(0xf839, 16, "GETPRECOMPILEDGAS", exec_get_precompiled_gas)->require_version(6)) + .insert(OpcodeInstr::mksimple(0xf83a, 16, "GETORIGINALFWDFEE", exec_get_original_fwd_fee)->require_version(6)) + .insert(OpcodeInstr::mksimple(0xf83b, 16, "GETGASFEESIMPLE", exec_get_gas_fee_simple)->require_version(6)) + .insert(OpcodeInstr::mksimple(0xf83c, 16, "GETFORWARDFEESIMPLE", exec_get_forward_fee_simple)->require_version(6)) .insert(OpcodeInstr::mksimple(0xf840, 16, "GETGLOBVAR", exec_get_global_var)) .insert(OpcodeInstr::mkfixedrange(0xf841, 0xf860, 16, 5, instr::dump_1c_and(31, "GETGLOB "), exec_get_global)) .insert(OpcodeInstr::mksimple(0xf860, 16, "SETGLOBVAR", exec_set_global_var)) diff --git a/doc/GlobalVersions.md b/doc/GlobalVersions.md index c2d026e4..7e3b4ce9 100644 --- a/doc/GlobalVersions.md +++ b/doc/GlobalVersions.md @@ -58,23 +58,27 @@ See [this post](https://t.me/tonstatus/88) for details. ## Version 6 ### c7 tuple -**c7** tuple extended from 14 to 15 elements. The new element is a tuple that contains some config parameters as cell slices. -If the parameter is absent from the config, the value is null. -* **0**: `StoragePrices` from `ConfigParam 18`. Not the whole dict, but only the one StoragePrices entry (one which corresponds to the current time). -* **1**: `ConfigParam 19` (global id). -* **2**: `ConfigParam 20` (mc gas prices). -* **3**: `ConfigParam 21` (gas prices). -* **4**: `ConfigParam 24` (mc fwd fees). -* **5**: `ConfigParam 25` (fwd fees). -* **6**: `ConfigParam 43` (size limits). +**c7** tuple extended from 14 to 16 elements: +* **14**: tuple that contains some config parameters as cell slices. If the parameter is absent from the config, the value is null. Asm opcode: `UNPACKEDCONFIGTUPLE`. + * **0**: `StoragePrices` from `ConfigParam 18`. Not the whole dict, but only the one StoragePrices entry (one which corresponds to the current time). + * **1**: `ConfigParam 19` (global id). + * **2**: `ConfigParam 20` (mc gas prices). + * **3**: `ConfigParam 21` (gas prices). + * **4**: `ConfigParam 24` (mc fwd fees). + * **5**: `ConfigParam 25` (fwd fees). + * **6**: `ConfigParam 43` (size limits). +* **15**: "[due payment](https://github.com/ton-blockchain/ton/blob/8a9ff339927b22b72819c5125428b70c406da631/crypto/block/block.tlb#L237)" - current debt for storage fee (nanotons). Asm opcode: `DUEPAYMENT`. ### New TVM instructions #### Fee calculation -* `GETEXECUTIONPRICE` (`gas_used is_mc - price`) - calculates gas fee. -* `GETSTORAGEPRICE` (`cells bits seconds is_mc - price`) - calculates storage fees (only current StoragePrices entry is used). -* `GETFORWARDPRICE` (`cells bits is_mc - price`) - calculates forward fee. +* `GETGASFEE` (`gas_used is_mc - price`) - calculates gas fee. +* `GETSTORAGEFEE` (`cells bits seconds is_mc - price`) - calculates storage fees (only current StoragePrices entry is used). +* `GETFORWARDFEE` (`cells bits is_mc - price`) - calculates forward fee. * `GETPRECOMPILEDGAS` (`- null`) - reserved, currently returns `null`. +* `GETORIGINALFWDFEE` (`fwd_fee is_mc - orig_fwd_fee`) - calculate `fwd_fee * 2^16 / first_frac`. Can be used to get the original `fwd_fee` of the message. +* `GETGASFEESIMPLE` (`gas_used is_mc - price`) - same as `GETGASFEE`, but without flat price (just `(gas_used * price) / 2^16`). +* `GETFORWARDFEESIMPLE` (`cells bits is_mc - price`) - same as `GETFORWARDFEE`, but without lump price (just `(bits*bit_price + cells*cell_price) / 2^16`). `gas_used`, `cells`, `bits`, `time_delta` are integers in range `0..2^63-1`. diff --git a/utils/opcode-timing.cpp b/utils/opcode-timing.cpp index d68928d0..876ba109 100644 --- a/utils/opcode-timing.cpp +++ b/utils/opcode-timing.cpp @@ -57,6 +57,7 @@ void prepare_c7() { } else { tuple.push_back(vm::StackEntry()); } + tuple.push_back(td::zero_refint()); auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); c7 = vm::make_tuple_ref(std::move(tuple_ref)); } From 59927ba534094b5fa0d8abdbbeadc3e04cd71b9c Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Thu, 1 Feb 2024 20:20:45 +0300 Subject: [PATCH 085/351] Improve block broadcasts processing; add special overlay for blocks for validators (#885) * Improve block broadcast processing * ValidatorManagerImpl::written_handle * Retry sending broadcasts in ValidatorGroup * Fix setting channel_ready in AdnlPeerPair * Add special overlay for validators for block broadcasting (#842) * Private overlay for broadcasting blocks --------- Co-authored-by: SpyCheese (cherry picked from commit a52045bd91004bccabf10fd159371ffbbf60ffad) --------- Co-authored-by: SpyCheese --- adnl/adnl-peer-table.hpp | 4 + adnl/adnl-peer.cpp | 4 +- adnl/adnl.h | 2 + tl/generate/scheme/ton_api.tl | 2 + tl/generate/scheme/ton_api.tlo | Bin 86292 -> 86524 bytes ton/ton-types.h | 8 + validator/CMakeLists.txt | 4 +- validator/downloaders/wait-block-state.cpp | 22 ++- validator/downloaders/wait-block-state.hpp | 20 ++- validator/full-node-private-overlay.cpp | 175 +++++++++++++++++++++ validator/full-node-private-overlay.hpp | 86 ++++++++++ validator/full-node.cpp | 51 ++++++ validator/full-node.hpp | 7 + validator/manager.cpp | 17 +- validator/validator-group.cpp | 36 +++-- validator/validator-group.hpp | 2 +- 16 files changed, 410 insertions(+), 30 deletions(-) create mode 100644 validator/full-node-private-overlay.cpp create mode 100644 validator/full-node-private-overlay.hpp diff --git a/adnl/adnl-peer-table.hpp b/adnl/adnl-peer-table.hpp index 2a27a802..1c30b84c 100644 --- a/adnl/adnl-peer-table.hpp +++ b/adnl/adnl-peer-table.hpp @@ -77,6 +77,10 @@ class AdnlPeerTableImpl : public AdnlPeerTable { td::actor::ActorId channel) override; void unregister_channel(AdnlChannelIdShort id) override; + void check_id_exists(AdnlNodeIdShort id, td::Promise promise) override { + promise.set_value(local_ids_.count(id)); + } + void write_new_addr_list_to_db(AdnlNodeIdShort local_id, AdnlNodeIdShort peer_id, AdnlDbItem node, td::Promise promise) override; void get_addr_list_from_db(AdnlNodeIdShort local_id, AdnlNodeIdShort peer_id, diff --git a/adnl/adnl-peer.cpp b/adnl/adnl-peer.cpp index 44979885..3e21a7f5 100644 --- a/adnl/adnl-peer.cpp +++ b/adnl/adnl-peer.cpp @@ -212,7 +212,9 @@ void AdnlPeerPairImpl::receive_packet_from_channel(AdnlChannelIdShort id, AdnlPa VLOG(ADNL_NOTICE) << this << ": dropping IN message: outdated channel id" << id; return; } - channel_ready_ = true; + if (channel_inited_) { + channel_ready_ = true; + } receive_packet_checked(std::move(packet)); } diff --git a/adnl/adnl.h b/adnl/adnl.h index b7dad216..a1c39d5e 100644 --- a/adnl/adnl.h +++ b/adnl/adnl.h @@ -97,6 +97,8 @@ class Adnl : public AdnlSenderInterface { virtual void add_id_ex(AdnlNodeIdFull id, AdnlAddressList addr_list, td::uint8 cat, td::uint32 mode) = 0; virtual void del_id(AdnlNodeIdShort id, td::Promise promise) = 0; + virtual void check_id_exists(AdnlNodeIdShort id, td::Promise promise) = 0; + // subscribe to (some) messages(+queries) to this local id virtual void subscribe(AdnlNodeIdShort dst, std::string prefix, std::unique_ptr callback) = 0; virtual void unsubscribe(AdnlNodeIdShort dst, std::string prefix) = 0; diff --git a/tl/generate/scheme/ton_api.tl b/tl/generate/scheme/ton_api.tl index 21e8318f..0f94e7f1 100644 --- a/tl/generate/scheme/ton_api.tl +++ b/tl/generate/scheme/ton_api.tl @@ -394,6 +394,8 @@ tonNode.newShardBlockBroadcast block:tonNode.newShardBlock = tonNode.Broadcast; tonNode.shardPublicOverlayId workchain:int shard:long zero_state_file_hash:int256 = tonNode.ShardPublicOverlayId; +tonNode.privateBlockOverlayId zero_state_file_hash:int256 nodes:(vector int256) = tonNode.PrivateBlockOverlayId; + tonNode.keyBlocks blocks:(vector tonNode.blockIdExt) incomplete:Bool error:Bool = tonNode.KeyBlocks; ton.blockId root_cell_hash:int256 file_hash:int256 = ton.BlockId; diff --git a/tl/generate/scheme/ton_api.tlo b/tl/generate/scheme/ton_api.tlo index 9b74f1c3bbef41b10dba639833177fe7f6b6df74..e71fb0f726456b06fbbbad3dc63d41f59a226c3d 100644 GIT binary patch delta 139 zcmbQTi1p86R^CUm^{p77;QvNmXI-VF8()^mmgML8<)@_T1r%kLC6=T*<>V)4`mrcA!aEVVg6*M)_#cJoxj?R#}mv=m^|!oUDhbMu&x57Xq<55|)(MA@)_L^eCT Hzmf<5bmlp1 delta 41 scmeyfn03k`R^CUm^{p77;NM1GXWh*`x-Kk?HJdLQZr{7v new_signatures; + for (const BlockSignature& s : signatures) { + new_signatures.emplace_back(s.node, s.signature.clone()); + } + return {block_id, std::move(new_signatures), catchain_seqno, validator_set_hash, data.clone(), proof.clone()}; + } }; struct Ed25519_PrivateKey { diff --git a/validator/CMakeLists.txt b/validator/CMakeLists.txt index 4ecc865c..8de60081 100644 --- a/validator/CMakeLists.txt +++ b/validator/CMakeLists.txt @@ -143,7 +143,9 @@ set(FULL_NODE_SOURCE full-node-master.h full-node-master.hpp full-node-master.cpp - + full-node-private-overlay.hpp + full-node-private-overlay.cpp + net/download-block.hpp net/download-block.cpp net/download-block-new.hpp diff --git a/validator/downloaders/wait-block-state.cpp b/validator/downloaders/wait-block-state.cpp index 56137fc3..42f5c791 100644 --- a/validator/downloaders/wait-block-state.cpp +++ b/validator/downloaders/wait-block-state.cpp @@ -109,12 +109,14 @@ void WaitBlockState::start() { } else if (!handle_->inited_prev() || (!handle_->inited_proof() && !handle_->inited_proof_link())) { auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), handle = handle_](td::Result R) { if (R.is_error()) { - delay_action([SelfId]() { td::actor::send_closure(SelfId, &WaitBlockState::start); }, td::Timestamp::in(0.1)); + delay_action([SelfId]() { td::actor::send_closure(SelfId, &WaitBlockState::after_get_proof_link); }, + td::Timestamp::in(0.1)); } else { td::actor::send_closure(SelfId, &WaitBlockState::got_proof_link, R.move_as_ok()); } }); + waiting_proof_link_ = true; td::actor::send_closure(manager_, &ValidatorManager::send_get_block_proof_link_request, handle_->id(), priority_, std::move(P)); } else if (prev_state_.is_null()) { @@ -133,12 +135,14 @@ void WaitBlockState::start() { } else if (handle_->id().is_masterchain() && !handle_->inited_proof()) { auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), handle = handle_](td::Result R) { if (R.is_error()) { - delay_action([SelfId]() { td::actor::send_closure(SelfId, &WaitBlockState::start); }, td::Timestamp::in(0.1)); + delay_action([SelfId]() { td::actor::send_closure(SelfId, &WaitBlockState::after_get_proof); }, + td::Timestamp::in(0.1)); } else { td::actor::send_closure(SelfId, &WaitBlockState::got_proof, R.move_as_ok()); } }); + waiting_proof_ = true; td::actor::send_closure(manager_, &ValidatorManager::send_get_block_proof_request, handle_->id(), priority_, std::move(P)); } else if (block_.is_null()) { @@ -172,6 +176,9 @@ void WaitBlockState::got_prev_state(td::Ref state) { } void WaitBlockState::got_proof_link(td::BufferSlice data) { + if (!waiting_proof_link_) { + return; + } auto R = create_proof_link(handle_->id(), std::move(data)); if (R.is_error()) { LOG(INFO) << "received bad proof link: " << R.move_as_error(); @@ -182,22 +189,25 @@ void WaitBlockState::got_proof_link(td::BufferSlice data) { if (R.is_ok()) { auto h = R.move_as_ok(); CHECK(h->inited_prev()); - td::actor::send_closure(SelfId, &WaitBlockState::start); + td::actor::send_closure(SelfId, &WaitBlockState::after_get_proof_link); } else { LOG(INFO) << "received bad proof link: " << R.move_as_error(); - td::actor::send_closure(SelfId, &WaitBlockState::start); + td::actor::send_closure(SelfId, &WaitBlockState::after_get_proof_link); } }); run_check_proof_link_query(handle_->id(), R.move_as_ok(), manager_, timeout_, std::move(P)); } void WaitBlockState::got_proof(td::BufferSlice data) { + if (!waiting_proof_) { + return; + } auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result R) { if (R.is_ok()) { - td::actor::send_closure(SelfId, &WaitBlockState::start); + td::actor::send_closure(SelfId, &WaitBlockState::after_get_proof); } else { LOG(INFO) << "received bad proof link: " << R.move_as_error(); - td::actor::send_closure(SelfId, &WaitBlockState::start); + td::actor::send_closure(SelfId, &WaitBlockState::after_get_proof); } }); td::actor::send_closure(manager_, &ValidatorManager::validate_block_proof, handle_->id(), std::move(data), diff --git a/validator/downloaders/wait-block-state.hpp b/validator/downloaders/wait-block-state.hpp index 7cdc0699..4b484ca8 100644 --- a/validator/downloaders/wait-block-state.hpp +++ b/validator/downloaders/wait-block-state.hpp @@ -45,11 +45,9 @@ class WaitBlockState : public td::actor::Actor { void force_read_from_db(); void start_up() override; - void got_block_handle(BlockHandle handle); void start(); void got_state_from_db(td::Ref data); void got_state_from_static_file(td::Ref state, td::BufferSlice data); - void failed_to_get_state_from_db(td::Status reason); void got_prev_state(td::Ref state); void failed_to_get_prev_state(td::Status reason); void got_block_data(td::Ref data); @@ -68,6 +66,22 @@ class WaitBlockState : public td::actor::Actor { priority_ = priority; } + // These two methods can be called from ValidatorManagerImpl::written_handle + void after_get_proof_link() { + if (!waiting_proof_link_) { + return; + } + waiting_proof_link_ = false; + start(); + } + void after_get_proof() { + if (!waiting_proof_) { + return; + } + waiting_proof_ = false; + start(); + } + private: BlockHandle handle_; @@ -81,6 +95,8 @@ class WaitBlockState : public td::actor::Actor { td::Ref block_; bool reading_from_db_ = false; + bool waiting_proof_link_ = false; + bool waiting_proof_ = false; td::Timestamp next_static_file_attempt_; td::PerfWarningTimer perf_timer_; diff --git a/validator/full-node-private-overlay.cpp b/validator/full-node-private-overlay.cpp new file mode 100644 index 00000000..ea72230b --- /dev/null +++ b/validator/full-node-private-overlay.cpp @@ -0,0 +1,175 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once + +#include "full-node-private-overlay.hpp" +#include "ton/ton-tl.hpp" +#include "common/delay.h" + +namespace ton { + +namespace validator { + +namespace fullnode { + +void FullNodePrivateOverlay::process_broadcast(PublicKeyHash, ton_api::tonNode_blockBroadcast &query) { + std::vector signatures; + for (auto &sig : query.signatures_) { + signatures.emplace_back(BlockSignature{sig->who_, std::move(sig->signature_)}); + } + + BlockIdExt block_id = create_block_id(query.id_); + BlockBroadcast B{block_id, + std::move(signatures), + static_cast(query.catchain_seqno_), + static_cast(query.validator_set_hash_), + std::move(query.data_), + std::move(query.proof_)}; + + auto P = td::PromiseCreator::lambda([](td::Result R) { + if (R.is_error()) { + if (R.error().code() == ErrorCode::notready) { + LOG(DEBUG) << "dropped broadcast: " << R.move_as_error(); + } else { + LOG(INFO) << "dropped broadcast: " << R.move_as_error(); + } + } + }); + td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::prevalidate_block, std::move(B), + std::move(P)); +} + +void FullNodePrivateOverlay::process_broadcast(PublicKeyHash, ton_api::tonNode_newShardBlockBroadcast &query) { + td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::new_shard_block, + create_block_id(query.block_->block_), query.block_->cc_seqno_, + std::move(query.block_->data_)); +} + +void FullNodePrivateOverlay::receive_broadcast(PublicKeyHash src, td::BufferSlice broadcast) { + auto B = fetch_tl_object(std::move(broadcast), true); + if (B.is_error()) { + return; + } + + ton_api::downcast_call(*B.move_as_ok(), [src, Self = this](auto &obj) { Self->process_broadcast(src, obj); }); +} + +void FullNodePrivateOverlay::send_shard_block_info(BlockIdExt block_id, CatchainSeqno cc_seqno, td::BufferSlice data) { + if (!inited_) { + return; + } + auto B = create_serialize_tl_object( + create_tl_object(create_tl_block_id(block_id), cc_seqno, std::move(data))); + if (B.size() <= overlay::Overlays::max_simple_broadcast_size()) { + td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_ex, local_id_, overlay_id_, + local_id_.pubkey_hash(), 0, std::move(B)); + } else { + td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_fec_ex, local_id_, overlay_id_, + local_id_.pubkey_hash(), overlay::Overlays::BroadcastFlagAnySender(), std::move(B)); + } +} + +void FullNodePrivateOverlay::send_broadcast(BlockBroadcast broadcast) { + if (!inited_) { + return; + } + std::vector> sigs; + for (auto &sig : broadcast.signatures) { + sigs.emplace_back(create_tl_object(sig.node, sig.signature.clone())); + } + auto B = create_serialize_tl_object( + create_tl_block_id(broadcast.block_id), broadcast.catchain_seqno, broadcast.validator_set_hash, std::move(sigs), + broadcast.proof.clone(), broadcast.data.clone()); + td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_fec_ex, local_id_, overlay_id_, + local_id_.pubkey_hash(), overlay::Overlays::BroadcastFlagAnySender(), std::move(B)); +} + +void FullNodePrivateOverlay::start_up() { + std::sort(nodes_.begin(), nodes_.end()); + nodes_.erase(std::unique(nodes_.begin(), nodes_.end()), nodes_.end()); + + std::vector nodes; + for (const adnl::AdnlNodeIdShort &id : nodes_) { + nodes.push_back(id.bits256_value()); + } + auto X = create_hash_tl_object(zero_state_file_hash_, std::move(nodes)); + td::BufferSlice b{32}; + b.as_slice().copy_from(as_slice(X)); + overlay_id_full_ = overlay::OverlayIdFull{std::move(b)}; + overlay_id_ = overlay_id_full_.compute_short_id(); + + try_init(); +} + +void FullNodePrivateOverlay::try_init() { + // Sometimes adnl id is added to validator engine later (or not at all) + td::actor::send_closure( + adnl_, &adnl::Adnl::check_id_exists, local_id_, [SelfId = actor_id(this)](td::Result R) { + if (R.is_ok() && R.ok()) { + td::actor::send_closure(SelfId, &FullNodePrivateOverlay::init); + } else { + delay_action([SelfId]() { td::actor::send_closure(SelfId, &FullNodePrivateOverlay::try_init); }, + td::Timestamp::in(30.0)); + } + }); +} + +void FullNodePrivateOverlay::init() { + LOG(FULL_NODE_INFO) << "Creating private block overlay for adnl id " << local_id_ << " : " << nodes_.size() + << " nodes"; + class Callback : public overlay::Overlays::Callback { + public: + void receive_message(adnl::AdnlNodeIdShort src, overlay::OverlayIdShort overlay_id, td::BufferSlice data) override { + } + void receive_query(adnl::AdnlNodeIdShort src, overlay::OverlayIdShort overlay_id, td::BufferSlice data, + td::Promise promise) override { + } + void receive_broadcast(PublicKeyHash src, overlay::OverlayIdShort overlay_id, td::BufferSlice data) override { + td::actor::send_closure(node_, &FullNodePrivateOverlay::receive_broadcast, src, std::move(data)); + } + void check_broadcast(PublicKeyHash src, overlay::OverlayIdShort overlay_id, td::BufferSlice data, + td::Promise promise) override { + } + Callback(td::actor::ActorId node) : node_(node) { + } + + private: + td::actor::ActorId node_; + }; + + overlay::OverlayPrivacyRules rules{overlay::Overlays::max_fec_broadcast_size(), + overlay::CertificateFlags::AllowFec | overlay::CertificateFlags::Trusted, + {}}; + td::actor::send_closure(overlays_, &overlay::Overlays::create_private_overlay, local_id_, overlay_id_full_.clone(), + nodes_, std::make_unique(actor_id(this)), rules); + + td::actor::send_closure(rldp_, &rldp::Rldp::add_id, local_id_); + td::actor::send_closure(rldp2_, &rldp2::Rldp::add_id, local_id_); + inited_ = true; +} + +void FullNodePrivateOverlay::tear_down() { + if (inited_) { + td::actor::send_closure(overlays_, &ton::overlay::Overlays::delete_overlay, local_id_, overlay_id_); + } +} + +} // namespace fullnode + +} // namespace validator + +} // namespace ton diff --git a/validator/full-node-private-overlay.hpp b/validator/full-node-private-overlay.hpp new file mode 100644 index 00000000..6463fda2 --- /dev/null +++ b/validator/full-node-private-overlay.hpp @@ -0,0 +1,86 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once + +#include "full-node.h" + +namespace ton { + +namespace validator { + +namespace fullnode { + +class FullNodePrivateOverlay : public td::actor::Actor { + public: + void process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcast &query); + void process_broadcast(PublicKeyHash src, ton_api::tonNode_newShardBlockBroadcast &query); + template + void process_broadcast(PublicKeyHash, T &) { + VLOG(FULL_NODE_WARNING) << "dropping unknown broadcast"; + } + void receive_broadcast(PublicKeyHash src, td::BufferSlice query); + + void send_shard_block_info(BlockIdExt block_id, CatchainSeqno cc_seqno, td::BufferSlice data); + void send_broadcast(BlockBroadcast broadcast); + + void start_up() override; + void tear_down() override; + + FullNodePrivateOverlay(adnl::AdnlNodeIdShort local_id, std::vector nodes, + FileHash zero_state_file_hash, FullNodeConfig config, + td::actor::ActorId keyring, td::actor::ActorId adnl, + td::actor::ActorId rldp, td::actor::ActorId rldp2, + td::actor::ActorId overlays, + td::actor::ActorId validator_manager) + : local_id_(local_id) + , nodes_(std::move(nodes)) + , zero_state_file_hash_(zero_state_file_hash) + , config_(config) + , keyring_(keyring) + , adnl_(adnl) + , rldp_(rldp) + , rldp2_(rldp2) + , overlays_(overlays) + , validator_manager_(validator_manager) { + } + + private: + adnl::AdnlNodeIdShort local_id_; + std::vector nodes_; + FileHash zero_state_file_hash_; + FullNodeConfig config_; + + td::actor::ActorId keyring_; + td::actor::ActorId adnl_; + td::actor::ActorId rldp_; + td::actor::ActorId rldp2_; + td::actor::ActorId overlays_; + td::actor::ActorId validator_manager_; + + bool inited_ = false; + overlay::OverlayIdFull overlay_id_full_; + overlay::OverlayIdShort overlay_id_; + + void try_init(); + void init(); +}; + +} // namespace fullnode + +} // namespace validator + +} // namespace ton diff --git a/validator/full-node.cpp b/validator/full-node.cpp index ebba50a0..5a822b26 100644 --- a/validator/full-node.cpp +++ b/validator/full-node.cpp @@ -50,6 +50,7 @@ void FullNodeImpl::add_permanent_key(PublicKeyHash key, td::Promise pr for (auto &shard : shards_) { td::actor::send_closure(shard.second, &FullNodeShard::update_validators, all_validators_, sign_cert_by_); } + create_private_block_overlay(key); promise.set_value(td::Unit()); } @@ -74,6 +75,7 @@ void FullNodeImpl::del_permanent_key(PublicKeyHash key, td::Promise pr for (auto &shard : shards_) { td::actor::send_closure(shard.second, &FullNodeShard::update_validators, all_validators_, sign_cert_by_); } + private_block_overlays_.erase(key); promise.set_value(td::Unit()); } @@ -179,6 +181,10 @@ void FullNodeImpl::send_shard_block_info(BlockIdExt block_id, CatchainSeqno cc_s VLOG(FULL_NODE_WARNING) << "dropping OUT shard block info message to unknown shard"; return; } + if (!private_block_overlays_.empty()) { + td::actor::send_closure(private_block_overlays_.begin()->second, &FullNodePrivateOverlay::send_shard_block_info, + block_id, cc_seqno, data.clone()); + } td::actor::send_closure(shard, &FullNodeShard::send_shard_block_info, block_id, cc_seqno, std::move(data)); } @@ -188,6 +194,10 @@ void FullNodeImpl::send_broadcast(BlockBroadcast broadcast) { VLOG(FULL_NODE_WARNING) << "dropping OUT broadcast to unknown shard"; return; } + if (!private_block_overlays_.empty()) { + td::actor::send_closure(private_block_overlays_.begin()->second, &FullNodePrivateOverlay::send_broadcast, + broadcast.clone()); + } td::actor::send_closure(shard, &FullNodeShard::send_broadcast, std::move(broadcast)); } @@ -289,6 +299,7 @@ void FullNodeImpl::got_key_block_proof(td::Ref proof) { PublicKeyHash l = PublicKeyHash::zero(); std::vector keys; + std::map current_validators; for (td::int32 i = -1; i <= 1; i++) { auto r = config->get_total_validator_set(i < 0 ? i : 1 - i); if (r.not_null()) { @@ -299,10 +310,18 @@ void FullNodeImpl::got_key_block_proof(td::Ref proof) { if (local_keys_.count(key)) { l = key; } + if (i == 1) { + current_validators[key] = adnl::AdnlNodeIdShort{el.addr.is_zero() ? key.bits256_value() : el.addr}; + } } } } + if (current_validators != current_validators_) { + current_validators_ = std::move(current_validators); + update_private_block_overlays(); + } + if (keys == all_validators_) { return; } @@ -321,6 +340,7 @@ void FullNodeImpl::got_zero_block_state(td::Ref state) { PublicKeyHash l = PublicKeyHash::zero(); std::vector keys; + std::map current_validators; for (td::int32 i = -1; i <= 1; i++) { auto r = m->get_total_validator_set(i < 0 ? i : 1 - i); if (r.not_null()) { @@ -331,10 +351,18 @@ void FullNodeImpl::got_zero_block_state(td::Ref state) { if (local_keys_.count(key)) { l = key; } + if (i == 1) { + current_validators[key] = adnl::AdnlNodeIdShort{el.addr.is_zero() ? key.bits256_value() : el.addr}; + } } } } + if (current_validators != current_validators_) { + current_validators_ = std::move(current_validators); + update_private_block_overlays(); + } + if (keys == all_validators_) { return; } @@ -456,6 +484,29 @@ void FullNodeImpl::start_up() { std::make_unique(actor_id(this)), std::move(P)); } +void FullNodeImpl::update_private_block_overlays() { + private_block_overlays_.clear(); + if (local_keys_.empty()) { + return; + } + for (const auto &key : local_keys_) { + create_private_block_overlay(key); + } +} + +void FullNodeImpl::create_private_block_overlay(PublicKeyHash key) { + CHECK(local_keys_.count(key)); + if (current_validators_.count(key)) { + std::vector nodes; + for (const auto &p : current_validators_) { + nodes.push_back(p.second); + } + private_block_overlays_[key] = td::actor::create_actor( + "BlocksPrivateOverlay", current_validators_[key], std::move(nodes), zero_state_file_hash_, config_, keyring_, + adnl_, rldp_, rldp2_, overlays_, validator_manager_); + } +} + FullNodeImpl::FullNodeImpl(PublicKeyHash local_id, adnl::AdnlNodeIdShort adnl_id, FileHash zero_state_file_hash, FullNodeConfig config, td::actor::ActorId keyring, td::actor::ActorId adnl, td::actor::ActorId rldp, diff --git a/validator/full-node.hpp b/validator/full-node.hpp index fc2dd75c..838700b5 100644 --- a/validator/full-node.hpp +++ b/validator/full-node.hpp @@ -23,6 +23,7 @@ //#include "ton-node-slave.h" #include "interfaces/proof.h" #include "interfaces/shard.h" +#include "full-node-private-overlay.hpp" #include #include @@ -111,9 +112,15 @@ class FullNodeImpl : public FullNode { PublicKeyHash sign_cert_by_; std::vector all_validators_; + std::map current_validators_; std::set local_keys_; FullNodeConfig config_; + + std::map> private_block_overlays_; + + void update_private_block_overlays(); + void create_private_block_overlay(PublicKeyHash key); }; } // namespace fullnode diff --git a/validator/manager.cpp b/validator/manager.cpp index af01ff8a..97c5192f 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -1185,7 +1185,7 @@ void ValidatorManagerImpl::write_handle(BlockHandle handle, td::Promise promise) { bool received = handle->received(); bool inited_state = handle->received_state(); - bool inited_proof = handle->id().is_masterchain() ? handle->inited_proof() : handle->inited_proof(); + bool inited_proof = handle->id().is_masterchain() ? handle->inited_proof() : handle->inited_proof_link(); if (handle->need_flush()) { handle->flush(actor_id(this), handle, std::move(promise)); @@ -1198,11 +1198,24 @@ void ValidatorManagerImpl::written_handle(BlockHandle handle, td::Promisesecond.actor_, &WaitBlockData::force_read_from_db); } } - if (inited_state && inited_proof) { + if (inited_state) { auto it = wait_state_.find(handle->id()); if (it != wait_state_.end()) { td::actor::send_closure(it->second.actor_, &WaitBlockState::force_read_from_db); } + } else { + if (handle->inited_proof_link()) { + auto it = wait_state_.find(handle->id()); + if (it != wait_state_.end()) { + td::actor::send_closure(it->second.actor_, &WaitBlockState::after_get_proof_link); + } + } + if (handle->id().is_masterchain() && handle->inited_proof()) { + auto it = wait_state_.find(handle->id()); + if (it != wait_state_.end()) { + td::actor::send_closure(it->second.actor_, &WaitBlockState::after_get_proof); + } + } } promise.set_value(td::Unit()); diff --git a/validator/validator-group.cpp b/validator/validator-group.cpp index 51217bf9..73ca22a6 100644 --- a/validator/validator-group.cpp +++ b/validator/validator-group.cpp @@ -155,9 +155,9 @@ void ValidatorGroup::accept_block_candidate(td::uint32 round_id, PublicKeyHash s td::actor::send_closure(manager_, &ValidatorManager::log_validator_session_stats, next_block_id, std::move(stats)); auto block = block_data.size() > 0 ? create_block(next_block_id, std::move(block_data)).move_as_ok() : td::Ref{}; + bool send_broadcast = src == local_id_; - auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), block_id = next_block_id, block, prev = prev_block_ids_, - sig_set, approve_sig_set, + auto P = td::PromiseCreator::lambda([=, SelfId = actor_id(this), block_id = next_block_id, prev = prev_block_ids_, promise = std::move(promise)](td::Result R) mutable { if (R.is_error()) { if (R.error().code() == ErrorCode::cancelled) { @@ -166,14 +166,15 @@ void ValidatorGroup::accept_block_candidate(td::uint32 round_id, PublicKeyHash s } LOG_CHECK(R.error().code() == ErrorCode::timeout || R.error().code() == ErrorCode::notready) << R.move_as_error(); td::actor::send_closure(SelfId, &ValidatorGroup::retry_accept_block_query, block_id, std::move(block), - std::move(prev), std::move(sig_set), std::move(approve_sig_set), std::move(promise)); + std::move(prev), std::move(sig_set), std::move(approve_sig_set), send_broadcast, + std::move(promise)); } else { promise.set_value(R.move_as_ok()); } }); run_accept_block_query(next_block_id, std::move(block), prev_block_ids_, validator_set_, std::move(sig_set), - std::move(approve_sig_set), src == local_id_, manager_, std::move(P)); + std::move(approve_sig_set), send_broadcast, manager_, std::move(P)); prev_block_ids_ = std::vector{next_block_id}; cached_collated_block_ = nullptr; approved_candidates_cache_.clear(); @@ -181,21 +182,22 @@ void ValidatorGroup::accept_block_candidate(td::uint32 round_id, PublicKeyHash s void ValidatorGroup::retry_accept_block_query(BlockIdExt block_id, td::Ref block, std::vector prev, td::Ref sig_set, - td::Ref approve_sig_set, + td::Ref approve_sig_set, bool send_broadcast, td::Promise promise) { - auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), block_id, block, prev, sig_set, approve_sig_set, - promise = std::move(promise)](td::Result R) mutable { - if (R.is_error()) { - LOG_CHECK(R.error().code() == ErrorCode::timeout) << R.move_as_error(); - td::actor::send_closure(SelfId, &ValidatorGroup::retry_accept_block_query, block_id, std::move(block), - std::move(prev), std::move(sig_set), std::move(approve_sig_set), std::move(promise)); - } else { - promise.set_value(R.move_as_ok()); - } - }); + auto P = td::PromiseCreator::lambda( + [=, SelfId = actor_id(this), promise = std::move(promise)](td::Result R) mutable { + if (R.is_error()) { + LOG_CHECK(R.error().code() == ErrorCode::timeout) << R.move_as_error(); + td::actor::send_closure(SelfId, &ValidatorGroup::retry_accept_block_query, block_id, std::move(block), + std::move(prev), std::move(sig_set), std::move(approve_sig_set), send_broadcast, + std::move(promise)); + } else { + promise.set_value(R.move_as_ok()); + } + }); run_accept_block_query(block_id, std::move(block), prev, validator_set_, std::move(sig_set), - std::move(approve_sig_set), false, manager_, std::move(P)); + std::move(approve_sig_set), send_broadcast, manager_, std::move(P)); } void ValidatorGroup::skip_round(td::uint32 round_id) { @@ -347,7 +349,7 @@ void ValidatorGroup::start(std::vector prev, BlockIdExt min_masterch auto block = p.block.size() > 0 ? create_block(next_block_id, std::move(p.block)).move_as_ok() : td::Ref{}; retry_accept_block_query(next_block_id, std::move(block), prev_block_ids_, std::move(p.sigs), - std::move(p.approve_sigs), std::move(p.promise)); + std::move(p.approve_sigs), false, std::move(p.promise)); prev_block_ids_ = std::vector{next_block_id}; } postponed_accept_.clear(); diff --git a/validator/validator-group.hpp b/validator/validator-group.hpp index a158bc43..26818d43 100644 --- a/validator/validator-group.hpp +++ b/validator/validator-group.hpp @@ -43,7 +43,7 @@ class ValidatorGroup : public td::actor::Actor { void skip_round(td::uint32 round); void retry_accept_block_query(BlockIdExt block_id, td::Ref block, std::vector prev, td::Ref sigs, td::Ref approve_sigs, - td::Promise promise); + bool send_broadcast, td::Promise promise); void get_approved_candidate(PublicKey source, RootHash root_hash, FileHash file_hash, FileHash collated_data_file_hash, td::Promise promise); BlockIdExt create_next_block_id(RootHash root_hash, FileHash file_hash) const; From 957ecd723157c1ac806a6c5eb930c5857a6cfc6e Mon Sep 17 00:00:00 2001 From: Maksim Kurbatov <94808996+yungwine@users.noreply.github.com> Date: Fri, 2 Feb 2024 20:59:07 +0700 Subject: [PATCH 086/351] fix lite-client logging (#883) * fix lite-client logging * fix logging in continue_check_validator_load2 --- lite-client/lite-client.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lite-client/lite-client.cpp b/lite-client/lite-client.cpp index dd6df40f..c9be170c 100644 --- a/lite-client/lite-client.cpp +++ b/lite-client/lite-client.cpp @@ -3529,7 +3529,7 @@ void TestNode::continue_check_validator_load2(std::unique_ptr info2, int mode, std::string file_pfx) { LOG(INFO) << "continue_check_validator_load2 for blocks " << info1->blk_id.to_str() << " and " - << info1->blk_id.to_str() << " : requesting block creators data"; + << info2->blk_id.to_str() << " : requesting block creators data"; td::Status st = info1->unpack_vset(); if (st.is_error()) { LOG(ERROR) << "cannot unpack validator set from block " << info1->blk_id.to_str() << " :" << st.move_as_error(); @@ -3627,7 +3627,7 @@ void TestNode::continue_check_validator_load3(std::unique_ptrcreated[i].first - info1->created[i].first; auto y1 = info2->created[i].second - info1->created[i].second; if (x1 < 0 || y1 < 0 || (x1 | y1) >= (1u << 31)) { - LOG(ERROR) << "impossible situation: validator #i created a negative amount of blocks: " << x1 + LOG(ERROR) << "impossible situation: validator #" << i << " created a negative amount of blocks: " << x1 << " masterchain blocks, " << y1 << " shardchain blocks"; return; } From c38b2928ec0aad978fb46f39c0a450aca184f2f6 Mon Sep 17 00:00:00 2001 From: SpyCheese Date: Fri, 2 Feb 2024 17:02:38 +0300 Subject: [PATCH 087/351] Fix typo in archive-slice.cpp (#850) (#879) --- validator/db/archive-slice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validator/db/archive-slice.cpp b/validator/db/archive-slice.cpp index 5f1bc708..d3d63360 100644 --- a/validator/db/archive-slice.cpp +++ b/validator/db/archive-slice.cpp @@ -532,7 +532,7 @@ void ArchiveSlice::set_async_mode(bool mode, td::Promise promise) { ig.add_promise(std::move(promise)); for (auto &p : packages_) { - td::actor::send_closure(p.writer, &PackageWriter::set_async_mode, mode, std::move(promise)); + td::actor::send_closure(p.writer, &PackageWriter::set_async_mode, mode, ig.get_promise()); } } From e723213d5c6dc0fd6cd5fb5ced0f086d79f2a1c5 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 6 Feb 2024 16:52:12 +0300 Subject: [PATCH 088/351] Log number of LS queries by type (#891) Co-authored-by: SpyCheese --- tl-utils/lite-utils.cpp | 34 ++++++++++++++++++++++++ tl-utils/lite-utils.hpp | 2 ++ validator/impl/liteserver.cpp | 2 ++ validator/interfaces/validator-manager.h | 3 +++ validator/manager.cpp | 24 +++++++++++++++++ validator/manager.hpp | 8 ++++++ 6 files changed, 73 insertions(+) diff --git a/tl-utils/lite-utils.cpp b/tl-utils/lite-utils.cpp index cd2ace0a..427852cb 100644 --- a/tl-utils/lite-utils.cpp +++ b/tl-utils/lite-utils.cpp @@ -22,6 +22,7 @@ #include "td/utils/tl_storers.h" #include "td/utils/crypto.h" #include "crypto/common/bitstring.h" +#include namespace ton { @@ -129,4 +130,37 @@ td::Bits256 get_tl_object_sha_bits256(const lite_api::Object *T) { return id256; } +std::string lite_query_name_by_id(int id) { + static std::map names = { + {lite_api::liteServer_getMasterchainInfo::ID, "getMasterchainInfo"}, + {lite_api::liteServer_getMasterchainInfoExt::ID, "getMasterchainInfoExt"}, + {lite_api::liteServer_getTime::ID, "getTime"}, + {lite_api::liteServer_getVersion::ID, "getVersion"}, + {lite_api::liteServer_getBlock::ID, "getBlock"}, + {lite_api::liteServer_getState::ID, "getState"}, + {lite_api::liteServer_getBlockHeader::ID, "getBlockHeader"}, + {lite_api::liteServer_sendMessage::ID, "sendMessage"}, + {lite_api::liteServer_getAccountState::ID, "getAccountState"}, + {lite_api::liteServer_getAccountStatePrunned::ID, "getAccountStatePrunned"}, + {lite_api::liteServer_runSmcMethod::ID, "runSmcMethod"}, + {lite_api::liteServer_getShardInfo::ID, "getShardInfo"}, + {lite_api::liteServer_getAllShardsInfo::ID, "getAllShardsInfo"}, + {lite_api::liteServer_getOneTransaction::ID, "getOneTransaction"}, + {lite_api::liteServer_getTransactions::ID, "getTransactions"}, + {lite_api::liteServer_lookupBlock::ID, "lookupBlock"}, + {lite_api::liteServer_listBlockTransactions::ID, "listBlockTransactions"}, + {lite_api::liteServer_listBlockTransactionsExt::ID, "listBlockTransactionsExt"}, + {lite_api::liteServer_getBlockProof::ID, "getBlockProof"}, + {lite_api::liteServer_getConfigAll::ID, "getConfigAll"}, + {lite_api::liteServer_getConfigParams::ID, "getConfigParams"}, + {lite_api::liteServer_getValidatorStats::ID, "getValidatorStats"}, + {lite_api::liteServer_getLibraries::ID, "getLibraries"}, + {lite_api::liteServer_getShardBlockProof::ID, "getShardBlockProof"}}; + auto it = names.find(id); + if (it == names.end()) { + return "unknown"; + } + return it->second; +} + } // namespace ton diff --git a/tl-utils/lite-utils.hpp b/tl-utils/lite-utils.hpp index 520ff710..fb3c1dc8 100644 --- a/tl-utils/lite-utils.hpp +++ b/tl-utils/lite-utils.hpp @@ -46,4 +46,6 @@ template ::valu td::Bits256 get_tl_object_sha_bits256(const Tp &T) { return get_tl_object_sha_bits256(static_cast(&T)); } + +std::string lite_query_name_by_id(int id); } // namespace ton diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index 34b9f1f1..f2be6ef9 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -131,9 +131,11 @@ void LiteQuery::start_up() { auto F = fetch_tl_object(std::move(query_), true); if (F.is_error()) { + td::actor::send_closure(manager_, &ValidatorManager::add_lite_query_stats, 0); // unknown abort_query(F.move_as_error()); return; } + td::actor::send_closure(manager_, &ValidatorManager::add_lite_query_stats, F.ok()->get_id()); lite_api::downcast_call( *F.move_as_ok().get(), diff --git a/validator/interfaces/validator-manager.h b/validator/interfaces/validator-manager.h index 6b375bac..f0e1bb18 100644 --- a/validator/interfaces/validator-manager.h +++ b/validator/interfaces/validator-manager.h @@ -178,6 +178,9 @@ class ValidatorManager : public ValidatorManagerInterface { virtual void get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, td::Promise promise) = 0; + virtual void add_lite_query_stats(int lite_query_id) { + } + static bool is_persistent_state(UnixTime ts, UnixTime prev_ts) { return ts / (1 << 17) != prev_ts / (1 << 17); } diff --git a/validator/manager.cpp b/validator/manager.cpp index 97c5192f..baaa78eb 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -401,6 +401,7 @@ void ValidatorManagerImpl::add_external_message(td::Ref msg) { } } void ValidatorManagerImpl::check_external_message(td::BufferSlice data, td::Promise> promise) { + ++ls_stats_check_ext_messages_; auto state = do_get_last_liteserver_state(); if (state.is_null()) { promise.set_error(td::Status::Error(ErrorCode::notready, "not ready")); @@ -2466,6 +2467,29 @@ void ValidatorManagerImpl::alarm() { } } alarm_timestamp().relax(check_shard_clients_); + + if (log_ls_stats_at_.is_in_past()) { + if (!ls_stats_.empty() || ls_stats_check_ext_messages_ != 0) { + td::StringBuilder sb; + sb << "Liteserver stats (1 minute):"; + td::uint32 total = 0; + for (const auto &p : ls_stats_) { + sb << " " << lite_query_name_by_id(p.first) << ":" << p.second; + total += p.second; + } + if (total > 0) { + sb << " TOTAL:" << total; + } + if (ls_stats_check_ext_messages_ > 0) { + sb << " checkExtMessage:" << ls_stats_check_ext_messages_; + } + LOG(WARNING) << sb.as_cslice(); + } + ls_stats_.clear(); + ls_stats_check_ext_messages_ = 0; + log_ls_stats_at_ = td::Timestamp::in(60.0); + } + alarm_timestamp().relax(log_ls_stats_at_); } void ValidatorManagerImpl::update_shard_client_state(BlockIdExt masterchain_block_id, td::Promise promise) { diff --git a/validator/manager.hpp b/validator/manager.hpp index bdf0155e..5a1fbc60 100644 --- a/validator/manager.hpp +++ b/validator/manager.hpp @@ -575,6 +575,10 @@ class ValidatorManagerImpl : public ValidatorManager { td::Result r_handle, td::Promise promise); + void add_lite_query_stats(int lite_query_id) override { + ++ls_stats_[lite_query_id]; + } + private: td::Timestamp resend_shard_blocks_at_; td::Timestamp check_waiters_at_; @@ -640,6 +644,10 @@ class ValidatorManagerImpl : public ValidatorManager { private: std::map> shard_client_waiters_; td::actor::ActorOwn queue_size_counter_; + + td::Timestamp log_ls_stats_at_; + std::map ls_stats_; // lite_api ID -> count, 0 for unknown + td::uint32 ls_stats_check_ext_messages_{0}; }; } // namespace validator From 12c1b1a2e6c14206b6cfb9c9cfb5fbfa9bedf5bb Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 7 Feb 2024 14:56:37 +0300 Subject: [PATCH 089/351] Limit file descriptors num by adding archive slice lru (#892) * --max-archive-fd option limits open files in archive manager * Don't close the latest archives + bugfix * Delete temp packages early --------- Co-authored-by: SpyCheese --- validator-engine/validator-engine.cpp | 8 + validator-engine/validator-engine.hpp | 4 + validator/db/archive-manager.cpp | 39 +++- validator/db/archive-manager.hpp | 13 +- validator/db/archive-slice.cpp | 244 +++++++++++++++++++------- validator/db/archive-slice.hpp | 70 ++++++-- validator/db/rootdb.cpp | 6 +- validator/db/rootdb.hpp | 3 +- validator/interfaces/db.h | 2 +- validator/manager.cpp | 6 +- validator/validator-options.hpp | 7 + validator/validator.h | 2 + 12 files changed, 316 insertions(+), 88 deletions(-) diff --git a/validator-engine/validator-engine.cpp b/validator-engine/validator-engine.cpp index e488504f..c7e4787c 100644 --- a/validator-engine/validator-engine.cpp +++ b/validator-engine/validator-engine.cpp @@ -1364,6 +1364,7 @@ td::Status ValidatorEngine::load_global_config() { validator_options_.write().set_session_logs_file(session_logs_file_); } validator_options_.write().set_celldb_compress_depth(celldb_compress_depth_); + validator_options_.write().set_max_open_archive_files(max_open_archive_files_); std::vector h; for (auto &x : conf.validator_->hardforks_) { @@ -3793,6 +3794,13 @@ int main(int argc, char *argv[]) { }); return td::Status::OK(); }); + p.add_checked_option( + '\0', "max-archive-fd", "limit for a number of open file descriptirs in archive manager. 0 is unlimited (default)", + [&](td::Slice s) -> td::Status { + TRY_RESULT(v, td::to_integer_safe(s)); + acts.push_back([&x, v]() { td::actor::send_closure(x, &ValidatorEngine::set_max_open_archive_files, v); }); + return td::Status::OK(); + }); auto S = p.run(argc, argv); if (S.is_error()) { LOG(ERROR) << "failed to parse options: " << S.move_as_error(); diff --git a/validator-engine/validator-engine.hpp b/validator-engine/validator-engine.hpp index e59bb418..76b6134b 100644 --- a/validator-engine/validator-engine.hpp +++ b/validator-engine/validator-engine.hpp @@ -204,6 +204,7 @@ class ValidatorEngine : public td::actor::Actor { double archive_ttl_ = 0; double key_proof_ttl_ = 0; td::uint32 celldb_compress_depth_ = 0; + size_t max_open_archive_files_ = 0; bool read_config_ = false; bool started_keyring_ = false; bool started_ = false; @@ -264,6 +265,9 @@ class ValidatorEngine : public td::actor::Actor { void set_celldb_compress_depth(td::uint32 value) { celldb_compress_depth_ = value; } + void set_max_open_archive_files(size_t value) { + max_open_archive_files_ = value; + } void start_up() override; ValidatorEngine() { } diff --git a/validator/db/archive-manager.cpp b/validator/db/archive-manager.cpp index 91b7b880..25d686bf 100644 --- a/validator/db/archive-manager.cpp +++ b/validator/db/archive-manager.cpp @@ -55,7 +55,9 @@ std::string PackageId::name() const { } } -ArchiveManager::ArchiveManager(td::actor::ActorId root, std::string db_root) : db_root_(db_root) { +ArchiveManager::ArchiveManager(td::actor::ActorId root, std::string db_root, + td::Ref opts) + : db_root_(db_root), opts_(opts) { } void ArchiveManager::add_handle(BlockHandle handle, td::Promise promise) { @@ -598,9 +600,11 @@ void ArchiveManager::load_package(PackageId id) { } } - desc.file = td::actor::create_actor("slice", id.id, id.key, id.temp, false, db_root_); + desc.file = + td::actor::create_actor("slice", id.id, id.key, id.temp, false, db_root_, archive_lru_.get()); m.emplace(id, std::move(desc)); + update_permanent_slices(); } const ArchiveManager::FileDescription *ArchiveManager::get_file_desc(ShardIdFull shard, PackageId id, BlockSeqno seqno, @@ -631,7 +635,8 @@ const ArchiveManager::FileDescription *ArchiveManager::add_file_desc(ShardIdFull FileDescription new_desc{id, false}; td::mkdir(db_root_ + id.path()).ensure(); std::string prefix = PSTRING() << db_root_ << id.path() << id.name(); - new_desc.file = td::actor::create_actor("slice", id.id, id.key, id.temp, false, db_root_); + new_desc.file = + td::actor::create_actor("slice", id.id, id.key, id.temp, false, db_root_, archive_lru_.get()); const FileDescription &desc = f.emplace(id, std::move(new_desc)); if (!id.temp) { update_desc(f, desc, shard, seqno, ts, lt); @@ -673,6 +678,7 @@ const ArchiveManager::FileDescription *ArchiveManager::add_file_desc(ShardIdFull .ensure(); } index_->commit_transaction().ensure(); + update_permanent_slices(); return &desc; } @@ -820,6 +826,9 @@ void ArchiveManager::start_up() { td::mkdir(db_root_ + "/archive/states/").ensure(); td::mkdir(db_root_ + "/files/").ensure(); td::mkdir(db_root_ + "/files/packages/").ensure(); + if (opts_->get_max_open_archive_files() > 0) { + archive_lru_ = td::actor::create_actor("archive_lru", opts_->get_max_open_archive_files()); + } index_ = std::make_shared(td::RocksDb::open(db_root_ + "/files/globalindex").move_as_ok()); std::string value; auto v = index_->get(create_serialize_tl_object().as_slice(), value); @@ -878,8 +887,8 @@ void ArchiveManager::start_up() { persistent_state_gc(FileHash::zero()); } -void ArchiveManager::run_gc(UnixTime ts, UnixTime archive_ttl) { - auto p = get_temp_package_id_by_unixtime(ts); +void ArchiveManager::run_gc(UnixTime mc_ts, UnixTime gc_ts, UnixTime archive_ttl) { + auto p = get_temp_package_id_by_unixtime(std::max(gc_ts, mc_ts - TEMP_PACKAGES_TTL)); std::vector vec; for (auto &x : temp_files_) { if (x.first < p) { @@ -907,7 +916,7 @@ void ArchiveManager::run_gc(UnixTime ts, UnixTime archive_ttl) { if (it == desc.first_blocks.end()) { continue; } - if (it->second.ts < ts - archive_ttl) { + if (it->second.ts < gc_ts - archive_ttl) { vec.push_back(f.first); } } @@ -1200,6 +1209,7 @@ void ArchiveManager::truncate(BlockSeqno masterchain_seqno, ConstBlockHandle han } } } + update_permanent_slices(); } void ArchiveManager::FileMap::shard_index_add(const FileDescription &desc) { @@ -1298,6 +1308,23 @@ const ArchiveManager::FileDescription *ArchiveManager::FileMap::get_next_file_de return it2->second->deleted ? nullptr : it2->second; } +void ArchiveManager::update_permanent_slices() { + if (archive_lru_.empty()) { + return; + } + std::vector ids; + if (!files_.empty()) { + ids.push_back(files_.rbegin()->first); + } + if (!key_files_.empty()) { + ids.push_back(key_files_.rbegin()->first); + } + if (!temp_files_.empty()) { + ids.push_back(temp_files_.rbegin()->first); + } + td::actor::send_closure(archive_lru_, &ArchiveLru::set_permanent_slices, std::move(ids)); +} + } // namespace validator } // namespace ton diff --git a/validator/db/archive-manager.hpp b/validator/db/archive-manager.hpp index e5008764..1c5deaf8 100644 --- a/validator/db/archive-manager.hpp +++ b/validator/db/archive-manager.hpp @@ -28,7 +28,7 @@ class RootDb; class ArchiveManager : public td::actor::Actor { public: - ArchiveManager(td::actor::ActorId root, std::string db_root); + ArchiveManager(td::actor::ActorId root, std::string db_root, td::Ref opts); void add_handle(BlockHandle handle, td::Promise promise); void update_handle(BlockHandle handle, td::Promise promise); @@ -58,7 +58,7 @@ class ArchiveManager : public td::actor::Actor { void truncate(BlockSeqno masterchain_seqno, ConstBlockHandle handle, td::Promise promise); //void truncate_continue(BlockSeqno masterchain_seqno, td::Promise promise); - void run_gc(UnixTime ts, UnixTime archive_ttl); + void run_gc(UnixTime mc_ts, UnixTime gc_ts, UnixTime archive_ttl); /* from LTDB */ void get_block_by_unix_time(AccountIdPrefixFull account_id, UnixTime ts, td::Promise promise); @@ -123,6 +123,9 @@ class ArchiveManager : public td::actor::Actor { size_t size() const { return files_.size(); } + bool empty() const { + return files_.empty(); + } std::map::const_iterator lower_bound(const PackageId &x) const { return files_.lower_bound(x); } @@ -164,6 +167,7 @@ class ArchiveManager : public td::actor::Actor { void shard_index_del(const FileDescription &desc); }; FileMap files_, key_files_, temp_files_; + td::actor::ActorOwn archive_lru_; BlockSeqno finalized_up_to_{0}; bool async_mode_ = false; bool huge_transaction_started_ = false; @@ -206,6 +210,7 @@ class ArchiveManager : public td::actor::Actor { void got_gc_masterchain_handle(ConstBlockHandle handle, FileHash hash); std::string db_root_; + td::Ref opts_; std::shared_ptr index_; @@ -215,6 +220,10 @@ class ArchiveManager : public td::actor::Actor { PackageId get_temp_package_id() const; PackageId get_key_package_id(BlockSeqno seqno) const; PackageId get_temp_package_id_by_unixtime(UnixTime ts) const; + + void update_permanent_slices(); + + static const td::uint32 TEMP_PACKAGES_TTL = 86400 * 7; }; } // namespace validator diff --git a/validator/db/archive-slice.cpp b/validator/db/archive-slice.cpp index d3d63360..4a7c419a 100644 --- a/validator/db/archive-slice.cpp +++ b/validator/db/archive-slice.cpp @@ -21,7 +21,6 @@ #include "td/actor/MultiPromise.h" #include "validator/fabric.h" #include "td/db/RocksDb.h" -#include "ton/ton-io.hpp" #include "td/utils/port/path.h" #include "common/delay.h" #include "files-async.hpp" @@ -32,9 +31,16 @@ namespace validator { void PackageWriter::append(std::string filename, td::BufferSlice data, td::Promise> promise) { - auto offset = package_->append(std::move(filename), std::move(data), !async_mode_); - auto size = package_->size(); - + td::uint64 offset, size; + { + auto p = package_.lock(); + if (!p) { + promise.set_error(td::Status::Error("Package is closed")); + return; + } + offset = p->append(std::move(filename), std::move(data), !async_mode_); + size = p->size(); + } promise.set_value(std::pair{offset, size}); } @@ -44,8 +50,10 @@ class PackageReader : public td::actor::Actor { td::Promise> promise) : package_(std::move(package)), offset_(offset), promise_(std::move(promise)) { } - void start_up() { - promise_.set_result(package_->read(offset_)); + void start_up() override { + auto result = package_->read(offset_); + package_ = {}; + promise_.set_result(std::move(result)); stop(); } @@ -64,6 +72,7 @@ void ArchiveSlice::add_handle(BlockHandle handle, td::Promise promise) update_handle(std::move(handle), std::move(promise)); return; } + before_query(); CHECK(!key_blocks_only_); CHECK(!temp_); CHECK(handle->inited_unix_time()); @@ -146,6 +155,7 @@ void ArchiveSlice::update_handle(BlockHandle handle, td::Promise promi promise.set_value(td::Unit()); return; } + before_query(); CHECK(!key_blocks_only_); begin_transaction(); @@ -168,6 +178,7 @@ void ArchiveSlice::add_file(BlockHandle handle, FileReference ref_id, td::Buffer promise.set_error(td::Status::Error(ErrorCode::notready, "package already gc'd")); return; } + before_query(); TRY_RESULT_PROMISE( promise, p, choose_package( @@ -179,6 +190,7 @@ void ArchiveSlice::add_file(BlockHandle handle, FileReference ref_id, td::Buffer promise.set_value(td::Unit()); return; } + promise = begin_async_query(std::move(promise)); auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), idx = p->idx, ref_id, promise = std::move(promise)]( td::Result> R) mutable { if (R.is_error()) { @@ -217,6 +229,7 @@ void ArchiveSlice::get_handle(BlockIdExt block_id, td::Promise prom promise.set_error(td::Status::Error(ErrorCode::notready, "package already gc'd")); return; } + before_query(); CHECK(!key_blocks_only_); std::string value; auto R = kv_->get(get_db_key_block_info(block_id), value); @@ -239,6 +252,7 @@ void ArchiveSlice::get_temp_handle(BlockIdExt block_id, td::Promiseget(get_db_key_block_info(block_id), value); @@ -261,6 +275,7 @@ void ArchiveSlice::get_file(ConstBlockHandle handle, FileReference ref_id, td::P promise.set_error(td::Status::Error(ErrorCode::notready, "package already gc'd")); return; } + before_query(); std::string value; auto R = kv_->get(ref_id.hash().to_hex(), value); R.ensure(); @@ -273,6 +288,7 @@ void ArchiveSlice::get_file(ConstBlockHandle handle, FileReference ref_id, td::P promise, p, choose_package( handle ? handle->id().is_masterchain() ? handle->id().seqno() : handle->masterchain_ref_block() : 0, false)); + promise = begin_async_query(std::move(promise)); auto P = td::PromiseCreator::lambda( [promise = std::move(promise)](td::Result> R) mutable { if (R.is_error()) { @@ -292,6 +308,7 @@ void ArchiveSlice::get_block_common(AccountIdPrefixFull account_id, promise.set_error(td::Status::Error(ErrorCode::notready, "package already gc'd")); return; } + before_query(); bool f = false; BlockIdExt block_id; td::uint32 ls = 0; @@ -312,7 +329,7 @@ void ArchiveSlice::get_block_common(AccountIdPrefixFull account_id, auto G = fetch_tl_object(value, true); G.ensure(); auto g = G.move_as_ok(); - if (compare_desc(*g.get()) > 0) { + if (compare_desc(*g) > 0) { continue; } td::uint32 l = g->first_idx_ - 1; @@ -328,7 +345,7 @@ void ArchiveSlice::get_block_common(AccountIdPrefixFull account_id, auto E = fetch_tl_object(td::BufferSlice{value}, true); E.ensure(); auto e = E.move_as_ok(); - int cmp_val = compare(*e.get()); + int cmp_val = compare(*e); if (cmp_val < 0) { rseq = create_block_id(e->id_); @@ -342,9 +359,7 @@ void ArchiveSlice::get_block_common(AccountIdPrefixFull account_id, } } if (rseq.is_valid()) { - if (!block_id.is_valid()) { - block_id = rseq; - } else if (block_id.id.seqno > rseq.id.seqno) { + if (!block_id.is_valid() || block_id.id.seqno > rseq.id.seqno) { block_id = rseq; } } @@ -430,12 +445,15 @@ void ArchiveSlice::get_slice(td::uint64 archive_id, td::uint64 offset, td::uint3 promise.set_error(td::Status::Error(ErrorCode::error, "bad archive id")); return; } + before_query(); auto value = static_cast(archive_id >> 32); TRY_RESULT_PROMISE(promise, p, choose_package(value, false)); + promise = begin_async_query(std::move(promise)); td::actor::create_actor("readfile", p->path, offset, limit, 0, std::move(promise)).release(); } void ArchiveSlice::get_archive_id(BlockSeqno masterchain_seqno, td::Promise promise) { + before_query(); if (!sliced_mode_) { promise.set_result(archive_id_); } else { @@ -444,62 +462,107 @@ void ArchiveSlice::get_archive_id(BlockSeqno masterchain_seqno, td::Promise(td::RocksDb::open(db_path).move_as_ok()); +void ArchiveSlice::before_query() { + if (status_ == st_closed) { + LOG(DEBUG) << "Opening archive slice " << db_path_; + kv_ = std::make_unique(td::RocksDb::open(db_path_).move_as_ok()); + std::string value; + auto R2 = kv_->get("status", value); + R2.ensure(); + sliced_mode_ = false; + slice_size_ = 100; - std::string value; - auto R2 = kv_->get("status", value); - R2.ensure(); - - if (R2.move_as_ok() == td::KeyValue::GetStatus::Ok) { - if (value == "sliced") { - sliced_mode_ = true; - R2 = kv_->get("slices", value); - R2.ensure(); - auto tot = td::to_integer(value); - R2 = kv_->get("slice_size", value); - R2.ensure(); - slice_size_ = td::to_integer(value); - CHECK(slice_size_ > 0); - for (td::uint32 i = 0; i < tot; i++) { - R2 = kv_->get(PSTRING() << "status." << i, value); + if (R2.move_as_ok() == td::KeyValue::GetStatus::Ok) { + if (value == "sliced") { + sliced_mode_ = true; + R2 = kv_->get("slices", value); R2.ensure(); - auto len = td::to_integer(value); - R2 = kv_->get(PSTRING() << "version." << i, value); + auto tot = td::to_integer(value); + R2 = kv_->get("slice_size", value); R2.ensure(); - td::uint32 ver = 0; - if (R2.move_as_ok() == td::KeyValue::GetStatus::Ok) { - ver = td::to_integer(value); + slice_size_ = td::to_integer(value); + CHECK(slice_size_ > 0); + for (td::uint32 i = 0; i < tot; i++) { + R2 = kv_->get(PSTRING() << "status." << i, value); + R2.ensure(); + auto len = td::to_integer(value); + R2 = kv_->get(PSTRING() << "version." << i, value); + R2.ensure(); + td::uint32 ver = 0; + if (R2.move_as_ok() == td::KeyValue::GetStatus::Ok) { + ver = td::to_integer(value); + } + auto v = archive_id_ + slice_size_ * i; + add_package(v, len, ver); } - auto v = archive_id_ + slice_size_ * i; - add_package(v, len, ver); + } else { + auto len = td::to_integer(value); + add_package(archive_id_, len, 0); } } else { - auto len = td::to_integer(value); - add_package(archive_id_, len, 0); + if (!temp_ && !key_blocks_only_) { + sliced_mode_ = true; + kv_->begin_transaction().ensure(); + kv_->set("status", "sliced").ensure(); + kv_->set("slices", "1").ensure(); + kv_->set("slice_size", td::to_string(slice_size_)).ensure(); + kv_->set("status.0", "0").ensure(); + kv_->set("version.0", td::to_string(default_package_version())).ensure(); + kv_->commit_transaction().ensure(); + add_package(archive_id_, 0, default_package_version()); + } else { + kv_->begin_transaction().ensure(); + kv_->set("status", "0").ensure(); + kv_->commit_transaction().ensure(); + add_package(archive_id_, 0, 0); + } } - } else { - if (!temp_ && !key_blocks_only_) { - sliced_mode_ = true; - kv_->begin_transaction().ensure(); - kv_->set("status", "sliced").ensure(); - kv_->set("slices", "1").ensure(); - kv_->set("slice_size", td::to_string(slice_size_)).ensure(); - kv_->set("status.0", "0").ensure(); - kv_->set("version.0", td::to_string(default_package_version())).ensure(); - kv_->commit_transaction().ensure(); - add_package(archive_id_, 0, default_package_version()); + } + status_ = st_open; + if (!archive_lru_.empty()) { + td::actor::send_closure(archive_lru_, &ArchiveLru::on_query, actor_id(this), p_id_, + packages_.size() + ESTIMATED_DB_OPEN_FILES); + } +} + +void ArchiveSlice::close_files() { + if (status_ == st_open) { + if (active_queries_ == 0) { + do_close(); } else { - kv_->begin_transaction().ensure(); - kv_->set("status", "0").ensure(); - kv_->commit_transaction().ensure(); - add_package(archive_id_, 0, 0); + status_ = st_want_close; } } } +void ArchiveSlice::do_close() { + if (destroyed_) { + return; + } + CHECK(status_ != st_closed && active_queries_ == 0); + LOG(DEBUG) << "Closing archive slice " << db_path_; + status_ = st_closed; + kv_ = {}; + packages_.clear(); +} + +template +td::Promise ArchiveSlice::begin_async_query(td::Promise promise) { + ++active_queries_; + return [SelfId = actor_id(this), promise = std::move(promise)](td::Result R) mutable { + td::actor::send_closure(SelfId, &ArchiveSlice::end_async_query); + promise.set_result(std::move(R)); + }; +} + +void ArchiveSlice::end_async_query() { + CHECK(active_queries_ > 0); + --active_queries_; + if (active_queries_ == 0 && status_ == st_want_close) { + do_close(); + } +} + void ArchiveSlice::begin_transaction() { if (!async_mode_ || !huge_transaction_started_) { kv_->begin_transaction().ensure(); @@ -521,7 +584,7 @@ void ArchiveSlice::commit_transaction() { void ArchiveSlice::set_async_mode(bool mode, td::Promise promise) { async_mode_ = mode; - if (!async_mode_ && huge_transaction_started_) { + if (!async_mode_ && huge_transaction_started_ && kv_) { kv_->commit_transaction().ensure(); huge_transaction_size_ = 0; huge_transaction_started_ = false; @@ -536,12 +599,16 @@ void ArchiveSlice::set_async_mode(bool mode, td::Promise promise) { } } -ArchiveSlice::ArchiveSlice(td::uint32 archive_id, bool key_blocks_only, bool temp, bool finalized, std::string db_root) +ArchiveSlice::ArchiveSlice(td::uint32 archive_id, bool key_blocks_only, bool temp, bool finalized, std::string db_root, + td::actor::ActorId archive_lru) : archive_id_(archive_id) , key_blocks_only_(key_blocks_only) , temp_(temp) , finalized_(finalized) - , db_root_(std::move(db_root)) { + , p_id_(archive_id_, key_blocks_only_, temp_) + , db_root_(std::move(db_root)) + , archive_lru_(std::move(archive_lru)) { + db_path_ = PSTRING() << db_root_ << p_id_.path() << p_id_.name() << ".index"; } td::Result ArchiveSlice::choose_package(BlockSeqno masterchain_seqno, bool force) { @@ -587,7 +654,7 @@ void ArchiveSlice::add_package(td::uint32 seqno, td::uint64 size, td::uint32 ver if (version >= 1) { pack->truncate(size).ensure(); } - auto writer = td::actor::create_actor("writer", pack); + auto writer = td::actor::create_actor("writer", pack, async_mode_); packages_.emplace_back(std::move(pack), std::move(writer), seqno, path, idx, version); } @@ -611,6 +678,7 @@ void destroy_db(std::string name, td::uint32 attempt, td::Promise prom } // namespace void ArchiveSlice::destroy(td::Promise promise) { + before_query(); td::MultiPromise mp; auto ig = mp.init_guard(); ig.add_promise(std::move(promise)); @@ -763,6 +831,7 @@ void ArchiveSlice::truncate(BlockSeqno masterchain_seqno, ConstBlockHandle handl destroy(std::move(promise)); return; } + before_query(); LOG(INFO) << "TRUNCATE: slice " << archive_id_ << " maxseqno= " << max_masterchain_seqno() << " truncate_upto=" << masterchain_seqno; if (max_masterchain_seqno() <= masterchain_seqno) { @@ -819,7 +888,7 @@ void ArchiveSlice::truncate(BlockSeqno masterchain_seqno, ConstBlockHandle handl pack->writer.reset(); td::unlink(pack->path).ensure(); td::rename(pack->path + ".new", pack->path).ensure(); - pack->writer = td::actor::create_actor("writer", new_package); + pack->writer = td::actor::create_actor("writer", new_package, async_mode_); for (auto idx = pack->idx + 1; idx < packages_.size(); idx++) { td::unlink(packages_[idx].path).ensure(); @@ -831,6 +900,61 @@ void ArchiveSlice::truncate(BlockSeqno masterchain_seqno, ConstBlockHandle handl promise.set_value(td::Unit()); } +static std::tuple to_tuple(const PackageId &id) { + return {id.id, id.temp, id.key}; +} + +void ArchiveLru::on_query(td::actor::ActorId slice, PackageId id, size_t files_count) { + SliceInfo &info = slices_[to_tuple(id)]; + if (info.opened_idx != 0) { + total_files_ -= info.files_count; + lru_.erase(info.opened_idx); + } + info.actor = std::move(slice); + total_files_ += (info.files_count = files_count); + info.opened_idx = current_idx_++; + if (!info.is_permanent) { + lru_.emplace(info.opened_idx, id); + } + enforce_limit(); +} + +void ArchiveLru::set_permanent_slices(std::vector ids) { + for (auto id : permanent_slices_) { + SliceInfo &info = slices_[to_tuple(id)]; + if (!info.is_permanent) { + continue; + } + info.is_permanent = false; + if (info.opened_idx) { + lru_.emplace(info.opened_idx, id); + } + } + permanent_slices_ = std::move(ids); + for (auto id : permanent_slices_) { + SliceInfo &info = slices_[to_tuple(id)]; + if (info.is_permanent) { + continue; + } + info.is_permanent = true; + if (info.opened_idx) { + lru_.erase(info.opened_idx); + } + } + enforce_limit(); +} + +void ArchiveLru::enforce_limit() { + while (total_files_ > max_total_files_ && lru_.size() > 1) { + auto it = lru_.begin(); + auto it2 = slices_.find(to_tuple(it->second)); + lru_.erase(it); + total_files_ -= it2->second.files_count; + td::actor::send_closure(it2->second.actor, &ArchiveSlice::close_files); + it2->second.opened_idx = 0; + } +} + } // namespace validator } // namespace ton diff --git a/validator/db/archive-slice.hpp b/validator/db/archive-slice.hpp index 487115fe..9f775d2e 100644 --- a/validator/db/archive-slice.hpp +++ b/validator/db/archive-slice.hpp @@ -21,6 +21,7 @@ #include "validator/interfaces/db.h" #include "package.hpp" #include "fileref.hpp" +#include namespace ton { @@ -44,7 +45,7 @@ struct PackageId { std::string path() const; std::string name() const; - bool is_empty() { + bool is_empty() const { return id == std::numeric_limits::max(); } static PackageId empty(bool key, bool temp) { @@ -54,26 +55,33 @@ struct PackageId { class PackageWriter : public td::actor::Actor { public: - PackageWriter(std::shared_ptr package) : package_(std::move(package)) { + PackageWriter(std::weak_ptr package, bool async_mode = false) + : package_(std::move(package)), async_mode_(async_mode) { } void append(std::string filename, td::BufferSlice data, td::Promise> promise); void set_async_mode(bool mode, td::Promise promise) { async_mode_ = mode; if (!async_mode_) { - package_->sync(); + auto p = package_.lock(); + if (p) { + p->sync(); + } } promise.set_value(td::Unit()); } private: - std::shared_ptr package_; + std::weak_ptr package_; bool async_mode_ = false; }; +class ArchiveLru; + class ArchiveSlice : public td::actor::Actor { public: - ArchiveSlice(td::uint32 archive_id, bool key_blocks_only, bool temp, bool finalized, std::string db_root); + ArchiveSlice(td::uint32 archive_id, bool key_blocks_only, bool temp, bool finalized, std::string db_root, + td::actor::ActorId archive_lru); void get_archive_id(BlockSeqno masterchain_seqno, td::Promise promise); @@ -95,16 +103,23 @@ class ArchiveSlice : public td::actor::Actor { void get_slice(td::uint64 archive_id, td::uint64 offset, td::uint32 limit, td::Promise promise); - void start_up() override; void destroy(td::Promise promise); void truncate(BlockSeqno masterchain_seqno, ConstBlockHandle handle, td::Promise promise); - void begin_transaction(); - void commit_transaction(); void set_async_mode(bool mode, td::Promise promise); + void close_files(); + private: - void written_data(BlockHandle handle, td::Promise promise); + void before_query(); + void do_close(); + template + td::Promise begin_async_query(td::Promise promise); + void end_async_query(); + + void begin_transaction(); + void commit_transaction(); + void add_file_cont(size_t idx, FileReference ref_id, td::uint64 offset, td::uint64 size, td::Promise promise); @@ -112,13 +127,14 @@ class ArchiveSlice : public td::actor::Actor { td::BufferSlice get_db_key_lt_desc(ShardIdFull shard); td::BufferSlice get_db_key_lt_el(ShardIdFull shard, td::uint32 idx); td::BufferSlice get_db_key_block_info(BlockIdExt block_id); - td::BufferSlice get_lt_from_db(ShardIdFull shard, td::uint32 idx); td::uint32 archive_id_; bool key_blocks_only_; bool temp_; bool finalized_; + PackageId p_id_; + std::string db_path_; bool destroyed_ = false; bool async_mode_ = false; @@ -127,8 +143,14 @@ class ArchiveSlice : public td::actor::Actor { td::uint32 huge_transaction_size_ = 0; td::uint32 slice_size_{100}; + enum Status { + st_closed, st_open, st_want_close + } status_ = st_closed; + size_t active_queries_ = 0; + std::string db_root_; - std::shared_ptr kv_; + td::actor::ActorId archive_lru_; + std::unique_ptr kv_; struct PackageInfo { PackageInfo(std::shared_ptr package, td::actor::ActorOwn writer, BlockSeqno id, @@ -164,6 +186,32 @@ class ArchiveSlice : public td::actor::Actor { static constexpr td::uint32 default_package_version() { return 1; } + + static const size_t ESTIMATED_DB_OPEN_FILES = 5; +}; + +class ArchiveLru : public td::actor::Actor { + public: + explicit ArchiveLru(size_t max_total_files) : max_total_files_(max_total_files) { + CHECK(max_total_files_ > 0); + } + void on_query(td::actor::ActorId slice, PackageId id, size_t files_count); + void set_permanent_slices(std::vector ids); + private: + size_t current_idx_ = 1; + struct SliceInfo { + td::actor::ActorId actor; + size_t files_count = 0; + size_t opened_idx = 0; // 0 - not opened + bool is_permanent = false; + }; + std::map, SliceInfo> slices_; + std::map lru_; + size_t total_files_ = 0; + size_t max_total_files_ = 0; + std::vector permanent_slices_; + + void enforce_limit(); }; } // namespace validator diff --git a/validator/db/rootdb.cpp b/validator/db/rootdb.cpp index 601b07c1..ff9abae6 100644 --- a/validator/db/rootdb.cpp +++ b/validator/db/rootdb.cpp @@ -400,7 +400,7 @@ void RootDb::start_up() { cell_db_ = td::actor::create_actor("celldb", actor_id(this), root_path_ + "/celldb/", opts_); state_db_ = td::actor::create_actor("statedb", actor_id(this), root_path_ + "/state/"); static_files_db_ = td::actor::create_actor("staticfilesdb", actor_id(this), root_path_ + "/static/"); - archive_db_ = td::actor::create_actor("archive", actor_id(this), root_path_); + archive_db_ = td::actor::create_actor("archive", actor_id(this), root_path_, opts_); } void RootDb::archive(BlockHandle handle, td::Promise promise) { @@ -497,8 +497,8 @@ void RootDb::set_async_mode(bool mode, td::Promise promise) { td::actor::send_closure(archive_db_, &ArchiveManager::set_async_mode, mode, std::move(promise)); } -void RootDb::run_gc(UnixTime ts, UnixTime archive_ttl) { - td::actor::send_closure(archive_db_, &ArchiveManager::run_gc, ts, archive_ttl); +void RootDb::run_gc(UnixTime mc_ts, UnixTime gc_ts, UnixTime archive_ttl) { + td::actor::send_closure(archive_db_, &ArchiveManager::run_gc, mc_ts, gc_ts, archive_ttl); } } // namespace validator diff --git a/validator/db/rootdb.hpp b/validator/db/rootdb.hpp index 598defcb..97b9550b 100644 --- a/validator/db/rootdb.hpp +++ b/validator/db/rootdb.hpp @@ -134,11 +134,10 @@ class RootDb : public Db { td::Promise promise) override; void set_async_mode(bool mode, td::Promise promise) override; - void run_gc(UnixTime ts, UnixTime archive_ttl) override; + void run_gc(UnixTime mc_ts, UnixTime gc_ts, UnixTime archive_ttl) override; private: td::actor::ActorId validator_manager_; - std::string root_path_; td::Ref opts_; diff --git a/validator/interfaces/db.h b/validator/interfaces/db.h index ba4d9dda..84ea2b36 100644 --- a/validator/interfaces/db.h +++ b/validator/interfaces/db.h @@ -119,7 +119,7 @@ class Db : public td::actor::Actor { td::Promise promise) = 0; virtual void set_async_mode(bool mode, td::Promise promise) = 0; - virtual void run_gc(UnixTime ts, UnixTime archive_ttl) = 0; + virtual void run_gc(UnixTime mc_ts, UnixTime gc_ts, UnixTime archive_ttl) = 0; }; } // namespace validator diff --git a/validator/manager.cpp b/validator/manager.cpp index baaa78eb..55891ead 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -2385,9 +2385,9 @@ void ValidatorManagerImpl::state_serializer_update(BlockSeqno seqno) { void ValidatorManagerImpl::alarm() { try_advance_gc_masterchain_block(); alarm_timestamp() = td::Timestamp::in(1.0); - if (gc_masterchain_handle_) { - td::actor::send_closure(db_, &Db::run_gc, gc_masterchain_handle_->unix_time(), - static_cast(opts_->archive_ttl())); + if (last_masterchain_block_handle_ && gc_masterchain_handle_) { + td::actor::send_closure(db_, &Db::run_gc, last_masterchain_block_handle_->unix_time(), + gc_masterchain_handle_->unix_time(), static_cast(opts_->archive_ttl())); } if (log_status_at_.is_in_past()) { if (last_masterchain_block_handle_) { diff --git a/validator/validator-options.hpp b/validator/validator-options.hpp index 3a7e5ba7..3980b6c6 100644 --- a/validator/validator-options.hpp +++ b/validator/validator-options.hpp @@ -117,6 +117,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { td::uint32 get_celldb_compress_depth() const override { return celldb_compress_depth_; } + size_t get_max_open_archive_files() const override { + return max_open_archive_files_; + } void set_zero_block_id(BlockIdExt block_id) override { zero_block_id_ = block_id; @@ -173,6 +176,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { void set_celldb_compress_depth(td::uint32 value) override { celldb_compress_depth_ = value; } + void set_max_open_archive_files(size_t value) override { + max_open_archive_files_ = value; + } ValidatorManagerOptionsImpl *make_copy() const override { return new ValidatorManagerOptionsImpl(*this); @@ -216,6 +222,7 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { BlockSeqno sync_upto_{0}; std::string session_logs_file_; td::uint32 celldb_compress_depth_{0}; + size_t max_open_archive_files_ = 0; }; } // namespace validator diff --git a/validator/validator.h b/validator/validator.h index 2fefb064..d24467a7 100644 --- a/validator/validator.h +++ b/validator/validator.h @@ -82,6 +82,7 @@ struct ValidatorManagerOptions : public td::CntObject { virtual BlockSeqno sync_upto() const = 0; virtual std::string get_session_logs_file() const = 0; virtual td::uint32 get_celldb_compress_depth() const = 0; + virtual size_t get_max_open_archive_files() const = 0; virtual void set_zero_block_id(BlockIdExt block_id) = 0; virtual void set_init_block_id(BlockIdExt block_id) = 0; @@ -102,6 +103,7 @@ struct ValidatorManagerOptions : public td::CntObject { virtual void set_sync_upto(BlockSeqno seqno) = 0; virtual void set_session_logs_file(std::string f) = 0; virtual void set_celldb_compress_depth(td::uint32 value) = 0; + virtual void set_max_open_archive_files(size_t value) = 0; static td::Ref create( BlockIdExt zero_block_id, BlockIdExt init_block_id, From 79c48ebbba5724ce2817b340c6dbe8f0799572d9 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 7 Feb 2024 15:45:51 +0300 Subject: [PATCH 090/351] Add cache for some LS requests (#893) * Cache runSmcMethod queries to LS * Drop duplicate sendMessage * Drop sendMessage cache once a minute --------- Co-authored-by: SpyCheese --- validator/CMakeLists.txt | 1 + validator/impl/CMakeLists.txt | 1 + validator/impl/fabric.cpp | 5 +- validator/impl/liteserver-cache.hpp | 112 ++++++++++++++++++++++++++++ validator/impl/liteserver.cpp | 58 +++++++++++--- validator/impl/liteserver.hpp | 14 +++- validator/interfaces/liteserver.h | 17 +++-- 7 files changed, 185 insertions(+), 23 deletions(-) create mode 100644 validator/impl/liteserver-cache.hpp diff --git a/validator/CMakeLists.txt b/validator/CMakeLists.txt index 8de60081..832374c6 100644 --- a/validator/CMakeLists.txt +++ b/validator/CMakeLists.txt @@ -43,6 +43,7 @@ set(VALIDATOR_HEADERS fabric.h interfaces/db.h interfaces/external-message.h + interfaces/liteserver.h interfaces/proof.h interfaces/shard.h interfaces/signature-set.h diff --git a/validator/impl/CMakeLists.txt b/validator/impl/CMakeLists.txt index f4b967a8..7cd273f2 100644 --- a/validator/impl/CMakeLists.txt +++ b/validator/impl/CMakeLists.txt @@ -32,6 +32,7 @@ set(TON_VALIDATOR_SOURCE external-message.hpp ihr-message.hpp liteserver.hpp + liteserver-cache.hpp message-queue.hpp proof.hpp shard.hpp diff --git a/validator/impl/fabric.cpp b/validator/impl/fabric.cpp index ede8d36d..e3478594 100644 --- a/validator/impl/fabric.cpp +++ b/validator/impl/fabric.cpp @@ -34,6 +34,7 @@ #include "ton/ton-io.hpp" #include "liteserver.hpp" #include "validator/fabric.h" +#include "liteserver-cache.hpp" namespace ton { @@ -46,7 +47,7 @@ td::actor::ActorOwn create_db_actor(td::actor::ActorId man td::actor::ActorOwn create_liteserver_cache_actor(td::actor::ActorId manager, std::string db_root) { - return td::actor::create_actor("cache"); + return td::actor::create_actor("cache"); } td::Result> create_block(BlockIdExt block_id, td::BufferSlice data) { @@ -244,7 +245,7 @@ void run_collate_hardfork(ShardIdFull shard, const BlockIdExt& min_masterchain_b void run_liteserver_query(td::BufferSlice data, td::actor::ActorId manager, td::actor::ActorId cache, td::Promise promise) { - LiteQuery::run_query(std::move(data), std::move(manager), std::move(promise)); + LiteQuery::run_query(std::move(data), std::move(manager), std::move(cache), std::move(promise)); } void run_fetch_account_state(WorkchainId wc, StdSmcAddress addr, td::actor::ActorId manager, diff --git a/validator/impl/liteserver-cache.hpp b/validator/impl/liteserver-cache.hpp new file mode 100644 index 00000000..0e58e051 --- /dev/null +++ b/validator/impl/liteserver-cache.hpp @@ -0,0 +1,112 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once + +#include "interfaces/liteserver.h" +#include + +namespace ton::validator { + +class LiteServerCacheImpl : public LiteServerCache { + public: + void start_up() override { + alarm(); + } + + void alarm() override { + alarm_timestamp() = td::Timestamp::in(60.0); + if (queries_cnt_ > 0 || !send_message_cache_.empty()) { + LOG(WARNING) << "LS Cache stats: " << queries_cnt_ << " queries, " << queries_hit_cnt_ << " hits; " + << cache_.size() << " entries, size=" << total_size_ << "/" << MAX_CACHE_SIZE << "; " + << send_message_cache_.size() << " different sendMessage queries, " << send_message_error_cnt_ + << " duplicates"; + queries_cnt_ = 0; + queries_hit_cnt_ = 0; + send_message_cache_.clear(); + send_message_error_cnt_ = 0; + } + } + + void lookup(td::Bits256 key, td::Promise promise) override { + ++queries_cnt_; + auto it = cache_.find(key); + if (it == cache_.end()) { + promise.set_error(td::Status::Error("not found")); + return; + } + ++queries_hit_cnt_; + auto entry = it->second.get(); + entry->remove(); + lru_.put(entry); + promise.set_value(entry->value_.clone()); + } + + void update(td::Bits256 key, td::BufferSlice value) override { + std::unique_ptr &entry = cache_[key]; + if (entry == nullptr) { + entry = std::make_unique(key, std::move(value)); + } else { + total_size_ -= entry->size(); + entry->value_ = std::move(value); + entry->remove(); + } + lru_.put(entry.get()); + total_size_ += entry->size(); + + while (total_size_ > MAX_CACHE_SIZE) { + auto to_remove = (CacheEntry *)lru_.get(); + CHECK(to_remove); + total_size_ -= to_remove->size(); + to_remove->remove(); + cache_.erase(to_remove->key_); + } + } + + void process_send_message(td::Bits256 key, td::Promise promise) override { + if (send_message_cache_.insert(key).second) { + promise.set_result(td::Unit()); + } else { + ++send_message_error_cnt_; + promise.set_error(td::Status::Error("duplicate message")); + } + } + + private: + struct CacheEntry : public td::ListNode { + explicit CacheEntry(td::Bits256 key, td::BufferSlice value) : key_(key), value_(std::move(value)) { + } + td::Bits256 key_; + td::BufferSlice value_; + + size_t size() const { + return value_.size() + 32 * 2; + } + }; + + std::map> cache_; + td::ListNode lru_; + size_t total_size_ = 0; + + size_t queries_cnt_ = 0, queries_hit_cnt_ = 0; + + std::set send_message_cache_; + size_t send_message_error_cnt_ = 0; + + static const size_t MAX_CACHE_SIZE = 64 << 20; +}; + +} // namespace ton::validator diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index f2be6ef9..7d25b408 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -54,8 +54,11 @@ td::int32 get_tl_tag(td::Slice slice) { } void LiteQuery::run_query(td::BufferSlice data, td::actor::ActorId manager, + td::actor::ActorId cache, td::Promise promise) { - td::actor::create_actor("litequery", std::move(data), std::move(manager), std::move(promise)).release(); + td::actor::create_actor("litequery", std::move(data), std::move(manager), std::move(cache), + std::move(promise)) + .release(); } void LiteQuery::fetch_account_state(WorkchainId wc, StdSmcAddress acc_addr, td::actor::ActorId manager, @@ -64,8 +67,8 @@ void LiteQuery::fetch_account_state(WorkchainId wc, StdSmcAddress acc_addr, td: } LiteQuery::LiteQuery(td::BufferSlice data, td::actor::ActorId manager, - td::Promise promise) - : query_(std::move(data)), manager_(std::move(manager)), promise_(std::move(promise)) { + td::actor::ActorId cache, td::Promise promise) + : query_(std::move(data)), manager_(std::move(manager)), cache_(std::move(cache)), promise_(std::move(promise)) { timeout_ = td::Timestamp::in(default_timeout_msec * 0.001); } @@ -110,7 +113,10 @@ void LiteQuery::alarm() { fatal_error(-503, "timeout"); } -bool LiteQuery::finish_query(td::BufferSlice result) { +bool LiteQuery::finish_query(td::BufferSlice result, bool skip_cache_update) { + if (use_cache_ && !skip_cache_update) { + td::actor::send_closure(cache_, &LiteServerCache::update, cache_key_, result.clone()); + } if (promise_) { promise_.set_result(std::move(result)); stop(); @@ -124,21 +130,53 @@ bool LiteQuery::finish_query(td::BufferSlice result) { void LiteQuery::start_up() { alarm_timestamp() = timeout_; - if(acc_state_promise_) { - td::actor::send_closure_later(actor_id(this),&LiteQuery::perform_fetchAccountState); + if (acc_state_promise_) { + td::actor::send_closure_later(actor_id(this), &LiteQuery::perform_fetchAccountState); return; } - auto F = fetch_tl_object(std::move(query_), true); + auto F = fetch_tl_object(query_, true); if (F.is_error()) { td::actor::send_closure(manager_, &ValidatorManager::add_lite_query_stats, 0); // unknown abort_query(F.move_as_error()); return; } - td::actor::send_closure(manager_, &ValidatorManager::add_lite_query_stats, F.ok()->get_id()); + query_obj_ = F.move_as_ok(); + if (!cache_.empty() && query_obj_->get_id() == lite_api::liteServer_sendMessage::ID) { + // Dropping duplicate "sendMessage" + cache_key_ = td::sha256_bits256(query_); + td::actor::send_closure(cache_, &LiteServerCache::process_send_message, cache_key_, + [SelfId = actor_id(this)](td::Result R) { + if (R.is_ok()) { + td::actor::send_closure(SelfId, &LiteQuery::perform); + } else { + td::actor::send_closure(SelfId, &LiteQuery::abort_query, + R.move_as_error_prefix("cannot send external message : ")); + } + }); + return; + } + use_cache_ = !cache_.empty() && query_obj_->get_id() == lite_api::liteServer_runSmcMethod::ID; + if (use_cache_) { + cache_key_ = td::sha256_bits256(query_); + td::actor::send_closure( + cache_, &LiteServerCache::lookup, cache_key_, [SelfId = actor_id(this)](td::Result R) { + if (R.is_error()) { + td::actor::send_closure(SelfId, &LiteQuery::perform); + } else { + td::actor::send_closure(SelfId, &LiteQuery::finish_query, R.move_as_ok(), true); + } + }); + } else { + perform(); + } +} + +void LiteQuery::perform() { + td::actor::send_closure(manager_, &ValidatorManager::add_lite_query_stats, query_obj_->get_id()); lite_api::downcast_call( - *F.move_as_ok().get(), + *query_obj_, td::overloaded( [&](lite_api::liteServer_getTime& q) { this->perform_getTime(); }, [&](lite_api::liteServer_getVersion& q) { this->perform_getVersion(); }, @@ -501,7 +539,7 @@ void LiteQuery::perform_sendMessage(td::BufferSlice data) { LOG(INFO) << "sending an external message to validator manager"; td::actor::send_closure_later(manager, &ValidatorManager::send_external_message, res.move_as_ok()); auto b = ton::create_serialize_tl_object(1); - td::actor::send_closure(Self, &LiteQuery::finish_query, std::move(b)); + td::actor::send_closure(Self, &LiteQuery::finish_query, std::move(b), false); } }); } diff --git a/validator/impl/liteserver.hpp b/validator/impl/liteserver.hpp index 2707fdfe..57ec7c3c 100644 --- a/validator/impl/liteserver.hpp +++ b/validator/impl/liteserver.hpp @@ -27,7 +27,7 @@ #include "shard.hpp" #include "proof.hpp" #include "block/block-auto.h" - +#include "auto/tl/lite_api.h" namespace ton { @@ -37,11 +37,16 @@ using td::Ref; class LiteQuery : public td::actor::Actor { td::BufferSlice query_; td::actor::ActorId manager_; + td::actor::ActorId cache_; td::Timestamp timeout_; td::Promise promise_; td::Promise,UnixTime,LogicalTime,std::unique_ptr>> acc_state_promise_; + tl_object_ptr query_obj_; + bool use_cache_{false}; + td::Bits256 cache_key_; + int pending_{0}; int mode_{0}; WorkchainId acc_workchain_; @@ -75,11 +80,11 @@ class LiteQuery : public td::actor::Actor { ls_capabilities = 7 }; // version 1.1; +1 = build block proof chains, +2 = masterchainInfoExt, +4 = runSmcMethod LiteQuery(td::BufferSlice data, td::actor::ActorId manager, - td::Promise promise); + td::actor::ActorId cache, td::Promise promise); LiteQuery(WorkchainId wc, StdSmcAddress acc_addr, td::actor::ActorId manager, td::Promise,UnixTime,LogicalTime,std::unique_ptr>> promise); static void run_query(td::BufferSlice data, td::actor::ActorId manager, - td::Promise promise); + td::actor::ActorId cache, td::Promise promise); static void fetch_account_state(WorkchainId wc, StdSmcAddress acc_addr, td::actor::ActorId manager, td::Promise,UnixTime,LogicalTime,std::unique_ptr>> promise); @@ -90,9 +95,10 @@ class LiteQuery : public td::actor::Actor { bool fatal_error(int err_code, std::string err_msg = ""); void abort_query(td::Status reason); void abort_query_ext(td::Status reason, std::string err_msg); - bool finish_query(td::BufferSlice result); + bool finish_query(td::BufferSlice result, bool skip_cache_update = false); void alarm() override; void start_up() override; + void perform(); void perform_getTime(); void perform_getVersion(); void perform_getMasterchainInfo(int mode); diff --git a/validator/interfaces/liteserver.h b/validator/interfaces/liteserver.h index 3e803029..0920c11f 100644 --- a/validator/interfaces/liteserver.h +++ b/validator/interfaces/liteserver.h @@ -19,16 +19,19 @@ #pragma once #include "td/actor/actor.h" +#include "td/utils/buffer.h" +#include "common/bitstring.h" -namespace ton { - -namespace validator { +namespace ton::validator { class LiteServerCache : public td::actor::Actor { public: - virtual ~LiteServerCache() = default; + ~LiteServerCache() override = default; + + virtual void lookup(td::Bits256 key, td::Promise promise) = 0; + virtual void update(td::Bits256 key, td::BufferSlice value) = 0; + + virtual void process_send_message(td::Bits256 key, td::Promise promise) = 0; }; -} // namespace validator - -} // namespace ton +} // namespace ton::validator \ No newline at end of file From f344aa46c3b4274e53362d12be50e212f6ffa7ca Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 9 Feb 2024 15:28:23 +0300 Subject: [PATCH 091/351] Drop duplicate ext msg broadcasts (#894) Co-authored-by: SpyCheese --- validator/full-node-shard.cpp | 15 +++++++++++++-- validator/full-node-shard.hpp | 4 ++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/validator/full-node-shard.cpp b/validator/full-node-shard.cpp index 7c59a79c..53c086e3 100644 --- a/validator/full-node-shard.cpp +++ b/validator/full-node-shard.cpp @@ -109,6 +109,9 @@ void FullNodeShardImpl::check_broadcast(PublicKeyHash src, td::BufferSlice broad } auto q = B.move_as_ok(); + if (!processed_ext_msg_broadcasts_.insert(td::sha256_bits256(q->message_->data_)).second) { + return promise.set_error(td::Status::Error("duplicate external message broadcast")); + } if (config_.ext_messages_broadcast_disabled_) { promise.set_error(td::Status::Error("rebroadcasting external messages is disabled")); promise = [manager = validator_manager_, message = q->message_->data_.clone()](td::Result R) mutable { @@ -703,6 +706,9 @@ void FullNodeShardImpl::send_external_message(td::BufferSlice data) { }); return; } + if (!processed_ext_msg_broadcasts_.insert(td::sha256_bits256(data)).second) { + return; + } auto B = create_serialize_tl_object( create_tl_object(std::move(data))); if (B.size() <= overlay::Overlays::max_simple_broadcast_size()) { @@ -852,10 +858,15 @@ void FullNodeShardImpl::alarm() { update_certificate_at_ = td::Timestamp::never(); } } + if (cleanup_processed_ext_msg_at_ && cleanup_processed_ext_msg_at_.is_in_past()) { + processed_ext_msg_broadcasts_.clear(); + cleanup_processed_ext_msg_at_ = td::Timestamp::in(60.0); + } alarm_timestamp().relax(sync_completed_at_); alarm_timestamp().relax(update_certificate_at_); alarm_timestamp().relax(reload_neighbours_at_); alarm_timestamp().relax(ping_neighbours_at_); + alarm_timestamp().relax(cleanup_processed_ext_msg_at_); } void FullNodeShardImpl::start_up() { @@ -872,8 +883,8 @@ void FullNodeShardImpl::start_up() { reload_neighbours_at_ = td::Timestamp::now(); ping_neighbours_at_ = td::Timestamp::now(); - alarm_timestamp().relax(reload_neighbours_at_); - alarm_timestamp().relax(ping_neighbours_at_); + cleanup_processed_ext_msg_at_ = td::Timestamp::now(); + alarm_timestamp().relax(td::Timestamp::now()); } } diff --git a/validator/full-node-shard.hpp b/validator/full-node-shard.hpp index dcf4c649..faf49598 100644 --- a/validator/full-node-shard.hpp +++ b/validator/full-node-shard.hpp @@ -21,6 +21,7 @@ #include "full-node-shard.h" #include "td/actor/PromiseFuture.h" #include "td/utils/port/Poll.h" +#include namespace ton { @@ -250,6 +251,9 @@ class FullNodeShardImpl : public FullNodeShard { adnl::AdnlNodeIdShort last_pinged_neighbour_ = adnl::AdnlNodeIdShort::zero(); FullNodeConfig config_; + + std::set processed_ext_msg_broadcasts_; + td::Timestamp cleanup_processed_ext_msg_at_; }; } // namespace fullnode From 4d39772e4011788e16d2eef2a5167e090620fac8 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 12 Feb 2024 10:42:02 +0300 Subject: [PATCH 092/351] Drop only accepted duplicate ext messages, don't cache errors (#902) Co-authored-by: SpyCheese --- validator/impl/liteserver-cache.hpp | 4 ++++ validator/impl/liteserver.cpp | 11 +++++++---- validator/interfaces/liteserver.h | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/validator/impl/liteserver-cache.hpp b/validator/impl/liteserver-cache.hpp index 0e58e051..5318371f 100644 --- a/validator/impl/liteserver-cache.hpp +++ b/validator/impl/liteserver-cache.hpp @@ -85,6 +85,10 @@ class LiteServerCacheImpl : public LiteServerCache { } } + void drop_send_message_from_cache(td::Bits256 key) override { + send_message_cache_.erase(key); + } + private: struct CacheEntry : public td::ListNode { explicit CacheEntry(td::Bits256 key, td::BufferSlice value) : key_(key), value_(std::move(value)) { diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index 7d25b408..a7219b72 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -531,10 +531,13 @@ void LiteQuery::perform_sendMessage(td::BufferSlice data) { auto copy = data.clone(); td::actor::send_closure_later( manager_, &ValidatorManager::check_external_message, std::move(copy), - [Self = actor_id(this), data = std::move(data), manager = manager_](td::Result> res) mutable { - if(res.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, - res.move_as_error_prefix("cannot apply external message to current state : "s)); + [Self = actor_id(this), data = std::move(data), manager = manager_, cache = cache_, + cache_key = cache_key_](td::Result> res) mutable { + if (res.is_error()) { + // Don't cache errors + td::actor::send_closure(cache, &LiteServerCache::drop_send_message_from_cache, cache_key); + td::actor::send_closure(Self, &LiteQuery::abort_query, + res.move_as_error_prefix("cannot apply external message to current state : "s)); } else { LOG(INFO) << "sending an external message to validator manager"; td::actor::send_closure_later(manager, &ValidatorManager::send_external_message, res.move_as_ok()); diff --git a/validator/interfaces/liteserver.h b/validator/interfaces/liteserver.h index 0920c11f..f2f78d41 100644 --- a/validator/interfaces/liteserver.h +++ b/validator/interfaces/liteserver.h @@ -32,6 +32,7 @@ class LiteServerCache : public td::actor::Actor { virtual void update(td::Bits256 key, td::BufferSlice value) = 0; virtual void process_send_message(td::Bits256 key, td::Promise promise) = 0; + virtual void drop_send_message_from_cache(td::Bits256 key) = 0; }; } // namespace ton::validator \ No newline at end of file From eb4831d7d637e5b8991b9c72340bdf38836ec38a Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Thu, 15 Feb 2024 12:03:57 +0300 Subject: [PATCH 093/351] Add --archive-preload-period (#904) Co-authored-by: SpyCheese --- validator-engine/validator-engine.cpp | 11 +++++++++++ validator-engine/validator-engine.hpp | 4 ++++ validator/db/archive-manager.cpp | 18 ++++++++++++++++++ validator/db/archive-slice.cpp | 4 ++++ validator/db/archive-slice.hpp | 1 + validator/validator-options.hpp | 7 +++++++ validator/validator.h | 2 ++ 7 files changed, 47 insertions(+) diff --git a/validator-engine/validator-engine.cpp b/validator-engine/validator-engine.cpp index c7e4787c..b8d428f3 100644 --- a/validator-engine/validator-engine.cpp +++ b/validator-engine/validator-engine.cpp @@ -1365,6 +1365,7 @@ td::Status ValidatorEngine::load_global_config() { } validator_options_.write().set_celldb_compress_depth(celldb_compress_depth_); validator_options_.write().set_max_open_archive_files(max_open_archive_files_); + validator_options_.write().set_archive_preload_period(archive_preload_period_); std::vector h; for (auto &x : conf.validator_->hardforks_) { @@ -3801,6 +3802,16 @@ int main(int argc, char *argv[]) { acts.push_back([&x, v]() { td::actor::send_closure(x, &ValidatorEngine::set_max_open_archive_files, v); }); return td::Status::OK(); }); + p.add_checked_option( + '\0', "archive-preload-period", "open archive slices for the past X second on startup (default: 0)", + [&](td::Slice s) -> td::Status { + auto v = td::to_double(s); + if (v < 0) { + return td::Status::Error("sync-before should be non-negative"); + } + acts.push_back([&x, v]() { td::actor::send_closure(x, &ValidatorEngine::set_archive_preload_period, v); }); + return td::Status::OK(); + }); auto S = p.run(argc, argv); if (S.is_error()) { LOG(ERROR) << "failed to parse options: " << S.move_as_error(); diff --git a/validator-engine/validator-engine.hpp b/validator-engine/validator-engine.hpp index 76b6134b..da50c71f 100644 --- a/validator-engine/validator-engine.hpp +++ b/validator-engine/validator-engine.hpp @@ -205,6 +205,7 @@ class ValidatorEngine : public td::actor::Actor { double key_proof_ttl_ = 0; td::uint32 celldb_compress_depth_ = 0; size_t max_open_archive_files_ = 0; + double archive_preload_period_ = 0.0; bool read_config_ = false; bool started_keyring_ = false; bool started_ = false; @@ -268,6 +269,9 @@ class ValidatorEngine : public td::actor::Actor { void set_max_open_archive_files(size_t value) { max_open_archive_files_ = value; } + void set_archive_preload_period(double value) { + archive_preload_period_ = value; + } void start_up() override; ValidatorEngine() { } diff --git a/validator/db/archive-manager.cpp b/validator/db/archive-manager.cpp index 25d686bf..2c0c82e5 100644 --- a/validator/db/archive-manager.cpp +++ b/validator/db/archive-manager.cpp @@ -885,6 +885,24 @@ void ArchiveManager::start_up() { }).ensure(); persistent_state_gc(FileHash::zero()); + + double open_since = td::Clocks::system() - opts_->get_archive_preload_period(); + for (auto it = files_.rbegin(); it != files_.rend(); ++it) { + if (it->second.file_actor_id().empty()) { + continue; + } + td::actor::send_closure(it->second.file_actor_id(), &ArchiveSlice::open_files); + bool stop = true; + for (const auto &first_block : it->second.first_blocks) { + if ((double)first_block.second.ts >= open_since) { + stop = false; + break; + } + } + if (stop) { + break; + } + } } void ArchiveManager::run_gc(UnixTime mc_ts, UnixTime gc_ts, UnixTime archive_ttl) { diff --git a/validator/db/archive-slice.cpp b/validator/db/archive-slice.cpp index 4a7c419a..52abc008 100644 --- a/validator/db/archive-slice.cpp +++ b/validator/db/archive-slice.cpp @@ -525,6 +525,10 @@ void ArchiveSlice::before_query() { } } +void ArchiveSlice::open_files() { + before_query(); +} + void ArchiveSlice::close_files() { if (status_ == st_open) { if (active_queries_ == 0) { diff --git a/validator/db/archive-slice.hpp b/validator/db/archive-slice.hpp index 9f775d2e..f178a9b8 100644 --- a/validator/db/archive-slice.hpp +++ b/validator/db/archive-slice.hpp @@ -108,6 +108,7 @@ class ArchiveSlice : public td::actor::Actor { void set_async_mode(bool mode, td::Promise promise); + void open_files(); void close_files(); private: diff --git a/validator/validator-options.hpp b/validator/validator-options.hpp index 3980b6c6..41019fa6 100644 --- a/validator/validator-options.hpp +++ b/validator/validator-options.hpp @@ -120,6 +120,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { size_t get_max_open_archive_files() const override { return max_open_archive_files_; } + double get_archive_preload_period() const override { + return archive_preload_period_; + } void set_zero_block_id(BlockIdExt block_id) override { zero_block_id_ = block_id; @@ -179,6 +182,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { void set_max_open_archive_files(size_t value) override { max_open_archive_files_ = value; } + void set_archive_preload_period(double value) override { + archive_preload_period_ = value; + } ValidatorManagerOptionsImpl *make_copy() const override { return new ValidatorManagerOptionsImpl(*this); @@ -223,6 +229,7 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { std::string session_logs_file_; td::uint32 celldb_compress_depth_{0}; size_t max_open_archive_files_ = 0; + double archive_preload_period_ = 0.0; }; } // namespace validator diff --git a/validator/validator.h b/validator/validator.h index d24467a7..f2dc56c4 100644 --- a/validator/validator.h +++ b/validator/validator.h @@ -83,6 +83,7 @@ struct ValidatorManagerOptions : public td::CntObject { virtual std::string get_session_logs_file() const = 0; virtual td::uint32 get_celldb_compress_depth() const = 0; virtual size_t get_max_open_archive_files() const = 0; + virtual double get_archive_preload_period() const = 0; virtual void set_zero_block_id(BlockIdExt block_id) = 0; virtual void set_init_block_id(BlockIdExt block_id) = 0; @@ -104,6 +105,7 @@ struct ValidatorManagerOptions : public td::CntObject { virtual void set_session_logs_file(std::string f) = 0; virtual void set_celldb_compress_depth(td::uint32 value) = 0; virtual void set_max_open_archive_files(size_t value) = 0; + virtual void set_archive_preload_period(double value) = 0; static td::Ref create( BlockIdExt zero_block_id, BlockIdExt init_block_id, From a4d618b0fc51003cb571c903a5974f7efb72fa4e Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 16 Feb 2024 11:51:43 +0300 Subject: [PATCH 094/351] Patch funcfiftlib and emulator-emscripten builds (#905) Co-authored-by: SpyCheese --- crypto/CMakeLists.txt | 1 + crypto/funcfiftlib/funcfiftlib-prejs.js | 1 + crypto/funcfiftlib/funcfiftlib.cpp | 25 +------------- emulator/CMakeLists.txt | 3 +- emulator/emulator-emscripten.cpp | 43 ++++++++++++++++++++++--- 5 files changed, 43 insertions(+), 30 deletions(-) create mode 100644 crypto/funcfiftlib/funcfiftlib-prejs.js diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 0871d250..827c903b 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -401,6 +401,7 @@ if (USE_EMSCRIPTEN) target_link_options(funcfiftlib PRIVATE -sALLOW_MEMORY_GROWTH=1) target_link_options(funcfiftlib PRIVATE -sALLOW_TABLE_GROWTH=1) target_link_options(funcfiftlib PRIVATE --embed-file ${CMAKE_CURRENT_SOURCE_DIR}/fift/lib@/fiftlib) + target_link_options(funcfiftlib PRIVATE --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/funcfiftlib/funcfiftlib-prejs.js) target_link_options(funcfiftlib PRIVATE -fexceptions) target_compile_options(funcfiftlib PRIVATE -fexceptions -fno-stack-protector) endif() diff --git a/crypto/funcfiftlib/funcfiftlib-prejs.js b/crypto/funcfiftlib/funcfiftlib-prejs.js new file mode 100644 index 00000000..38326c38 --- /dev/null +++ b/crypto/funcfiftlib/funcfiftlib-prejs.js @@ -0,0 +1 @@ +var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } }; \ No newline at end of file diff --git a/crypto/funcfiftlib/funcfiftlib.cpp b/crypto/funcfiftlib/funcfiftlib.cpp index c8bf4fc5..a041c25d 100644 --- a/crypto/funcfiftlib/funcfiftlib.cpp +++ b/crypto/funcfiftlib/funcfiftlib.cpp @@ -34,29 +34,6 @@ #include #include -std::string escape_json(const std::string &s) { - std::ostringstream o; - for (auto c = s.cbegin(); c != s.cend(); c++) { - switch (*c) { - case '"': o << "\\\""; break; - case '\\': o << "\\\\"; break; - case '\b': o << "\\b"; break; - case '\f': o << "\\f"; break; - case '\n': o << "\\n"; break; - case '\r': o << "\\r"; break; - case '\t': o << "\\t"; break; - default: - if ('\x00' <= *c && *c <= '\x1f') { - o << "\\u" - << std::hex << std::setw(4) << std::setfill('0') << static_cast(*c); - } else { - o << *c; - } - } - } - return o.str(); -} - td::Result compile_internal(char *config_json) { TRY_RESULT(input_json, td::json_decode(td::MutableSlice(config_json))) auto &obj = input_json.get_object(); @@ -91,7 +68,7 @@ td::Result compile_internal(char *config_json) { auto result_obj = result_json.enter_object(); result_obj("status", "ok"); result_obj("codeBoc", td::base64_encode(boc)); - result_obj("fiftCode", escape_json(outs.str())); + result_obj("fiftCode", outs.str()); result_obj("codeHashHex", code_cell->get_hash().to_hex()); result_obj.leave(); diff --git a/emulator/CMakeLists.txt b/emulator/CMakeLists.txt index 969f9a88..7a4b7676 100644 --- a/emulator/CMakeLists.txt +++ b/emulator/CMakeLists.txt @@ -48,7 +48,7 @@ if (USE_EMSCRIPTEN) add_executable(emulator-emscripten ${EMULATOR_EMSCRIPTEN_SOURCE}) target_link_libraries(emulator-emscripten PUBLIC emulator) target_link_options(emulator-emscripten PRIVATE -sEXPORTED_RUNTIME_METHODS=_malloc,free,UTF8ToString,stringToUTF8,allocate,ALLOC_NORMAL,lengthBytesUTF8) - target_link_options(emulator-emscripten PRIVATE -sEXPORTED_FUNCTIONS=_emulate,_free,_run_get_method) + target_link_options(emulator-emscripten PRIVATE -sEXPORTED_FUNCTIONS=_emulate,_free,_run_get_method,_create_emulator,_destroy_emulator,_emulate_with_emulator) target_link_options(emulator-emscripten PRIVATE -sEXPORT_NAME=EmulatorModule) target_link_options(emulator-emscripten PRIVATE -sERROR_ON_UNDEFINED_SYMBOLS=0) target_link_options(emulator-emscripten PRIVATE -Oz) @@ -57,6 +57,7 @@ if (USE_EMSCRIPTEN) target_link_options(emulator-emscripten PRIVATE -sMODULARIZE=1) target_link_options(emulator-emscripten PRIVATE -sENVIRONMENT=web) target_link_options(emulator-emscripten PRIVATE -sFILESYSTEM=0) + target_link_options(emulator-emscripten PRIVATE -sALLOW_MEMORY_GROWTH=1) target_link_options(emulator-emscripten PRIVATE -fexceptions) if (USE_EMSCRIPTEN_NO_WASM) target_link_options(emulator-emscripten PRIVATE -sWASM=0) diff --git a/emulator/emulator-emscripten.cpp b/emulator/emulator-emscripten.cpp index dbd1c0d5..e76607c6 100644 --- a/emulator/emulator-emscripten.cpp +++ b/emulator/emulator-emscripten.cpp @@ -124,9 +124,39 @@ td::Result decode_get_method_params(const char* json) { return params; } +class NoopLog : public td::LogInterface { + public: + NoopLog() { + } + + void append(td::CSlice new_slice, int log_level) override { + } + + void rotate() override { + } +}; + extern "C" { -const char *emulate(const char *config, const char* libs, int verbosity, const char* account, const char* message, const char* params) { +void* create_emulator(const char *config, int verbosity) { + NoopLog logger; + + td::log_interface = &logger; + + SET_VERBOSITY_LEVEL(verbosity_NEVER); + return transaction_emulator_create(config, verbosity); +} + +void destroy_emulator(void* em) { + NoopLog logger; + + td::log_interface = &logger; + + SET_VERBOSITY_LEVEL(verbosity_NEVER); + transaction_emulator_destroy(em); +} + +const char *emulate_with_emulator(void* em, const char* libs, const char* account, const char* message, const char* params) { StringLog logger; td::log_interface = &logger; @@ -138,8 +168,6 @@ const char *emulate(const char *config, const char* libs, int verbosity, const c } auto decoded_params = decoded_params_res.move_as_ok(); - auto em = transaction_emulator_create(config, verbosity); - bool rand_seed_set = true; if (decoded_params.rand_seed_hex) { rand_seed_set = transaction_emulator_set_rand_seed(em, decoded_params.rand_seed_hex.unwrap().c_str()); @@ -162,8 +190,6 @@ const char *emulate(const char *config, const char* libs, int verbosity, const c result = transaction_emulator_emulate_transaction(em, account, message); } - transaction_emulator_destroy(em); - const char* output = nullptr; { td::JsonBuilder jb; @@ -178,6 +204,13 @@ const char *emulate(const char *config, const char* libs, int verbosity, const c return output; } +const char *emulate(const char *config, const char* libs, int verbosity, const char* account, const char* message, const char* params) { + auto em = transaction_emulator_create(config, verbosity); + auto result = emulate_with_emulator(em, libs, account, message, params); + transaction_emulator_destroy(em); + return result; +} + const char *run_get_method(const char *params, const char* stack, const char* config) { StringLog logger; From af71dae31b0b3ef3090f3344c1f5be88dee29783 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Fri, 16 Feb 2024 16:30:43 +0300 Subject: [PATCH 095/351] Ls run method (#906) * Improve LS runSmcMethod * Full c7 and libraries * Don't request c7 (mode 8) in lite-client * Prioritize remote result in lite-client runmethod (but not runmethodfull) * Return simplified c7 from runSmgMethod, add flag to return full --------- Co-authored-by: SpyCheese --- lite-client/lite-client.cpp | 38 +++++++++------- tonlib/tonlib/TonlibClient.cpp | 2 +- validator/impl/liteserver.cpp | 82 +++++++++++++++++++++++++++------- 3 files changed, 89 insertions(+), 33 deletions(-) diff --git a/lite-client/lite-client.cpp b/lite-client/lite-client.cpp index c9be170c..cb0a7dec 100644 --- a/lite-client/lite-client.cpp +++ b/lite-client/lite-client.cpp @@ -1275,7 +1275,7 @@ bool TestNode::after_parse_run_method(ton::WorkchainId workchain, ton::StdSmcAdd } } }); - return start_run_method(workchain, addr, ref_blkid, method_name, std::move(params), ext_mode ? 0x1f : 0, + return start_run_method(workchain, addr, ref_blkid, method_name, std::move(params), ext_mode ? 0x17 : 0, std::move(P)); } @@ -1449,7 +1449,7 @@ bool TestNode::send_past_vset_query(ton::StdSmcAddress elector_addr) { } register_past_vset_info(std::move(S.back())); }); - return start_run_method(ton::masterchainId, elector_addr, mc_last_id_, "past_elections_list", std::move(params), 0x1f, + return start_run_method(ton::masterchainId, elector_addr, mc_last_id_, "past_elections_list", std::move(params), 0x17, std::move(P)); } @@ -1510,7 +1510,7 @@ void TestNode::send_get_complaints_query(unsigned elect_id, ton::StdSmcAddress e LOG(ERROR) << "vm virtualization error: " << err.get_msg(); } }); - start_run_method(ton::masterchainId, elector_addr, mc_last_id_, "get_past_complaints", std::move(params), 0x1f, + start_run_method(ton::masterchainId, elector_addr, mc_last_id_, "get_past_complaints", std::move(params), 0x17, std::move(P)); } @@ -1607,7 +1607,7 @@ void TestNode::send_compute_complaint_price_query(ton::StdSmcAddress elector_add LOG(ERROR) << "vm virtualization error: " << err.get_msg(); } }); - start_run_method(ton::masterchainId, elector_addr, mc_last_id_, "complaint_storage_price", std::move(params), 0x1f, + start_run_method(ton::masterchainId, elector_addr, mc_last_id_, "complaint_storage_price", std::move(params), 0x17, std::move(P)); } @@ -1708,7 +1708,7 @@ bool TestNode::dns_resolve_send(ton::WorkchainId workchain, ton::StdSmcAddress a } return dns_resolve_finish(workchain, addr, blkid, domain, qdomain, cat, mode, (int)x->to_long(), std::move(cell)); }); - return start_run_method(workchain, addr, blkid, "dnsresolve", std::move(params), 0x1f, std::move(P)); + return start_run_method(workchain, addr, blkid, "dnsresolve", std::move(params), 0x17, std::move(P)); } bool TestNode::show_dns_record(std::ostream& os, td::Bits256 cat, Ref value, bool raw_dump) { @@ -2142,21 +2142,29 @@ void TestNode::run_smc_method(int mode, ton::BlockIdExt ref_blk, ton::BlockIdExt } } if (exit_code != 0) { - LOG(ERROR) << "VM terminated with error code " << exit_code; out << "result: error " << exit_code << std::endl; - promise.set_error(td::Status::Error(PSLICE() << "VM terminated with non-zero exit code " << exit_code)); - return; - } - stack = vm.get_stack_ref(); - { + } else { + stack = vm.get_stack_ref(); std::ostringstream os; os << "result: "; stack->dump(os, 3); out << os.str(); } - if (mode & 4) { - if (remote_result.empty()) { - out << "remote result: , exit code " << remote_exit_code; + if (!(mode & 4)) { + if (exit_code != 0) { + LOG(ERROR) << "VM terminated with error code " << exit_code; + promise.set_error(td::Status::Error(PSLICE() << "VM terminated with non-zero exit code " << exit_code)); + } else { + promise.set_result(stack->extract_contents()); + } + } else { + if (remote_exit_code != 0) { + out << "remote result: error " << remote_exit_code << std::endl; + LOG(ERROR) << "VM terminated with error code " << exit_code; + promise.set_error(td::Status::Error(PSLICE() << "VM terminated with non-zero exit code " << exit_code)); + } else if (remote_result.empty()) { + out << "remote result: " << std::endl; + promise.set_value({}); } else { auto res = vm::std_boc_deserialize(std::move(remote_result)); if (res.is_error()) { @@ -2177,10 +2185,10 @@ void TestNode::run_smc_method(int mode, ton::BlockIdExt ref_blk, ton::BlockIdExt os << "remote result (not to be trusted): "; remote_stack->dump(os, 3); out << os.str(); + promise.set_value(remote_stack->extract_contents()); } } out.flush(); - promise.set_result(stack->extract_contents()); } catch (vm::VmVirtError& err) { out << "virtualization error while parsing runSmcMethod result: " << err.get_msg(); promise.set_error( diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index bee7ef40..d450bc1f 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -1216,7 +1216,7 @@ class RemoteRunSmcMethod : public td::actor::Actor { client_.send_query( //liteServer.runSmcMethod mode:# id:tonNode.blockIdExt account:liteServer.accountId method_id:long params:bytes = liteServer.RunMethodResult; ton::lite_api::liteServer_runSmcMethod( - 0x1f, ton::create_tl_lite_block_id(query_.block_id.value()), + 0x17, ton::create_tl_lite_block_id(query_.block_id.value()), ton::create_tl_object(query_.address.workchain, query_.address.addr), method_id, std::move(serialized_stack)), [self = this](auto r_state) { self->with_run_method_result(std::move(r_state)); }, diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index a7219b72..139c2347 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -848,7 +848,7 @@ void LiteQuery::perform_runSmcMethod(BlockIdExt blkid, WorkchainId workchain, St fatal_error("more than 64k parameter bytes passed"); return; } - if (mode & ~0x1f) { + if (mode & ~0x3f) { fatal_error("unsupported mode in runSmcMethod"); return; } @@ -1283,25 +1283,45 @@ void LiteQuery::finish_getAccountState(td::BufferSlice shard_proof) { // same as in lite-client/lite-client-common.cpp static td::Ref prepare_vm_c7(ton::UnixTime now, ton::LogicalTime lt, td::Ref my_addr, - const block::CurrencyCollection& balance) { + const block::CurrencyCollection& balance, + const block::ConfigInfo* config = nullptr, td::Ref my_code = {}, + td::RefInt256 due_payment = td::zero_refint()) { td::BitArray<256> rand_seed; td::RefInt256 rand_seed_int{true}; td::Random::secure_bytes(rand_seed.as_slice()); if (!rand_seed_int.unique_write().import_bits(rand_seed.cbits(), 256, false)) { return {}; } - auto tuple = vm::make_tuple_ref(td::make_refint(0x076ef1ea), // [ magic:0x076ef1ea - td::make_refint(0), // actions:Integer - td::make_refint(0), // msgs_sent:Integer - td::make_refint(now), // unixtime:Integer - td::make_refint(lt), // block_lt:Integer - td::make_refint(lt), // trans_lt:Integer - std::move(rand_seed_int), // rand_seed:Integer - balance.as_vm_tuple(), // balance_remaining:[Integer (Maybe Cell)] - my_addr, // myself:MsgAddressInt - vm::StackEntry()); // global_config:(Maybe Cell) ] = SmartContractInfo; - LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple).to_string(); - return vm::make_tuple_ref(std::move(tuple)); + std::vector tuple = { + td::make_refint(0x076ef1ea), // [ magic:0x076ef1ea + td::make_refint(0), // actions:Integer + td::make_refint(0), // msgs_sent:Integer + td::make_refint(now), // unixtime:Integer + td::make_refint(lt), // block_lt:Integer + td::make_refint(lt), // trans_lt:Integer + std::move(rand_seed_int), // rand_seed:Integer + balance.as_vm_tuple(), // balance_remaining:[Integer (Maybe Cell)] + my_addr, // myself:MsgAddressInt + config ? config->get_root_cell() : vm::StackEntry() // global_config:(Maybe Cell) ] = SmartContractInfo; + }; + if (config && config->get_global_version() >= 4) { + tuple.push_back(my_code); // code:Cell + tuple.push_back(block::CurrencyCollection::zero().as_vm_tuple()); // in_msg_value:[Integer (Maybe Cell)] + tuple.push_back(td::zero_refint()); // storage_fees:Integer + + // [ wc:Integer shard:Integer seqno:Integer root_hash:Integer file_hash:Integer] = BlockId; + // [ last_mc_blocks:[BlockId...] + // prev_key_block:BlockId ] : PrevBlocksInfo + auto info = config->get_prev_blocks_info(); + tuple.push_back(info.is_ok() ? info.move_as_ok() : vm::StackEntry()); + } + if (config && config->get_global_version() >= 6) { + tuple.push_back(config->get_unpacked_config_tuple(now)); // unpacked_config_tuple:[...] + tuple.push_back(due_payment); // due_payment:Integer + } + auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); + LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple_ref).to_string(); + return vm::make_tuple_ref(std::move(tuple_ref)); } void LiteQuery::finish_runSmcMethod(td::BufferSlice shard_proof, td::BufferSlice state_proof, Ref acc_root, @@ -1320,12 +1340,14 @@ void LiteQuery::finish_runSmcMethod(td::BufferSlice shard_proof, td::BufferSlice } vm::MerkleProofBuilder pb{std::move(acc_root)}; block::gen::Account::Record_account acc; + block::gen::StorageInfo::Record storage_info; block::gen::AccountStorage::Record store; block::CurrencyCollection balance; block::gen::StateInit::Record state_init; if (!(tlb::unpack_cell(pb.root(), acc) && tlb::csr_unpack(std::move(acc.storage), store) && balance.validate_unpack(store.balance) && store.state->prefetch_ulong(1) == 1 && - store.state.write().advance(1) && tlb::csr_unpack(std::move(store.state), state_init))) { + store.state.write().advance(1) && tlb::csr_unpack(std::move(store.state), state_init) && + tlb::csr_unpack(std::move(acc.storage_stat), storage_info))) { LOG(INFO) << "error unpacking account state, or account is frozen or uninitialized"; td::Result proof_boc; if (mode & 2) { @@ -1346,12 +1368,35 @@ void LiteQuery::finish_runSmcMethod(td::BufferSlice shard_proof, td::BufferSlice } auto code = state_init.code->prefetch_ref(); auto data = state_init.data->prefetch_ref(); + auto acc_libs = state_init.library->prefetch_ref(); long long gas_limit = client_method_gas_limit; + td::RefInt256 due_payment; + if (storage_info.due_payment.write().fetch_long(1)) { + due_payment = block::tlb::t_Grams.as_integer(storage_info.due_payment); + } else { + due_payment = td::zero_refint(); + } LOG(DEBUG) << "creating VM with gas limit " << gas_limit; // **** INIT VM **** + auto r_config = block::ConfigInfo::extract_config( + mc_state_->root_cell(), + block::ConfigInfo::needLibraries | block::ConfigInfo::needCapabilities | block::ConfigInfo::needPrevBlocks); + if (r_config.is_error()) { + fatal_error(r_config.move_as_error()); + return; + } + auto config = r_config.move_as_ok(); + std::vector> libraries; + if (config->get_libraries_root().not_null()) { + libraries.push_back(config->get_libraries_root()); + } + if (acc_libs.not_null()) { + libraries.push_back(acc_libs); + } vm::GasLimits gas{gas_limit, gas_limit}; - vm::VmState vm{std::move(code), std::move(stack_), gas, 1, std::move(data), vm::VmLog::Null()}; - auto c7 = prepare_vm_c7(gen_utime, gen_lt, td::make_ref(acc.addr->clone()), balance); + vm::VmState vm{code, std::move(stack_), gas, 1, std::move(data), vm::VmLog::Null(), std::move(libraries)}; + auto c7 = prepare_vm_c7(gen_utime, gen_lt, td::make_ref(acc.addr->clone()), balance, config.get(), + std::move(code), due_payment); vm.set_c7(c7); // tuple with SmartContractInfo // vm.incr_stack_trace(1); // enable stack dump after each step LOG(INFO) << "starting VM to run GET-method of smart contract " << acc_workchain_ << ":" << acc_addr_.to_hex(); @@ -1367,6 +1412,9 @@ void LiteQuery::finish_runSmcMethod(td::BufferSlice shard_proof, td::BufferSlice td::BufferSlice c7_info, result; if (mode & 8) { // serialize c7 + if (!(mode & 32)) { + c7 = prepare_vm_c7(gen_utime, gen_lt, td::make_ref(acc.addr->clone()), balance); + } vm::CellBuilder cb; if (!(vm::StackEntry{std::move(c7)}.serialize(cb) && cb.finalize_to(cell))) { fatal_error("cannot serialize c7"); From 21dfad866bc53fd9a527b6ae0c376c8b206a3c6d Mon Sep 17 00:00:00 2001 From: neodix42 Date: Fri, 16 Feb 2024 15:32:09 +0100 Subject: [PATCH 096/351] Add smartcont/auto folder to portable artifacts (#884) * fix test-validation-session-state test * make running tests optional in nix builds * make running tests optional in nix builds * Revert "fix test-validation-session-state test" This reverts commit a5bb86918448e234dfcb93cc31c134cd18f123d8. * add smartcont/auto folder to portable artifacts * Add check if artifacts were created. If any of tests fail, this is not the case; --- assembly/nix/build-linux-arm64-nix.sh | 8 +++++--- assembly/nix/build-linux-x86-64-nix.sh | 7 ++++--- assembly/nix/build-macos-nix.sh | 8 +++++--- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/assembly/nix/build-linux-arm64-nix.sh b/assembly/nix/build-linux-arm64-nix.sh index 08817e72..8e5c367c 100644 --- a/assembly/nix/build-linux-arm64-nix.sh +++ b/assembly/nix/build-linux-arm64-nix.sh @@ -24,12 +24,14 @@ if [ "$with_tests" = true ]; then else nix-build linux-arm64-static.nix fi -mkdir artifacts + +mkdir -p artifacts/lib cp ./result/bin/* artifacts/ +test $? -eq 0 || { echo "No artifacts have been built..."; exit 1; } chmod +x artifacts/* rm -rf result nix-build linux-arm64-tonlib.nix cp ./result/lib/libtonlibjson.so.0.5 artifacts/libtonlibjson.so cp ./result/lib/libemulator.so artifacts/ -cp -r crypto/fift/lib artifacts/ -cp -r crypto/smartcont artifacts/ +cp ./result/lib/fift/* artifacts/lib/ +cp -r ./result/share/ton/smartcont artifacts/ diff --git a/assembly/nix/build-linux-x86-64-nix.sh b/assembly/nix/build-linux-x86-64-nix.sh index 60d31c94..38431ca4 100644 --- a/assembly/nix/build-linux-x86-64-nix.sh +++ b/assembly/nix/build-linux-x86-64-nix.sh @@ -25,12 +25,13 @@ else nix-build linux-x86-64-static.nix fi -mkdir artifacts +mkdir -p artifacts/lib cp ./result/bin/* artifacts/ +test $? -eq 0 || { echo "No artifacts have been built..."; exit 1; } chmod +x artifacts/* rm -rf result nix-build linux-x86-64-tonlib.nix cp ./result/lib/libtonlibjson.so.0.5 artifacts/libtonlibjson.so cp ./result/lib/libemulator.so artifacts/ -cp -r crypto/fift/lib artifacts/ -cp -r crypto/smartcont artifacts/ +cp ./result/lib/fift/* artifacts/lib/ +cp -r ./result/share/ton/smartcont artifacts/ diff --git a/assembly/nix/build-macos-nix.sh b/assembly/nix/build-macos-nix.sh index c3664bf0..12977745 100644 --- a/assembly/nix/build-macos-nix.sh +++ b/assembly/nix/build-macos-nix.sh @@ -22,12 +22,14 @@ if [ "$with_tests" = true ]; then else nix-build macos-static.nix fi -mkdir artifacts + +mkdir -p artifacts/lib cp ./result-bin/bin/* artifacts/ +test $? -eq 0 || { echo "No artifacts have been built..."; exit 1; } chmod +x artifacts/* rm -rf result-bin nix-build macos-tonlib.nix cp ./result/lib/libtonlibjson.dylib artifacts/ cp ./result/lib/libemulator.dylib artifacts/ -cp -r crypto/fift/lib artifacts/ -cp -r crypto/smartcont artifacts/ +cp ./result/lib/fift/* artifacts/lib/ +cp -r ./result/share/ton/smartcont artifacts/ From 71c650692d94893714884b83a5ad83f54552ad5f Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Sat, 17 Feb 2024 17:05:03 +0300 Subject: [PATCH 097/351] Add changelog for 2024.02 --- Changelog.md | 16 ++++++++++++++++ recent_changelog.md | 30 +++++++++++++++--------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/Changelog.md b/Changelog.md index 9a98e44c..81db2c43 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,19 @@ +## 2024.02 Update + +1. Improvement of validator synchronisation: + * Better handling of block broadcasts -> faster sync + * Additional separate overlay among validators as second option for synchronisation +2. Improvements in LS: + * c7 and library context is fully filled up for server-side rungetmethod + * Cache for runmethods and successfull external messages + * Logging of LS requests statistic +3. Precise control of open files: + * almost instantaneous validator start + * `--max-archive-fd` option + * autoremoval of not used temp archive files + * `--archive-preload-period` option +4. Preparatory (not enabled yet) code for addition on new TVM instructions for cheaper fee calculation onchain. + ## 2024.01 Update 1. Fixes in how gas in transactions on special accounts is accounted in block limit. Previously, gas was counted as usual, so to conduct elections that costs >30m gas block limit in masterchain was set to 37m gas. To lower the limit for safety reasons it is proposed to caunt gas on special accounts separately. Besides `gas_max` is set to `special_gas_limit` for all types of transactions on special accounts. New behavior is activated through setting `version >= 5` in `ConfigParam 8;`. diff --git a/recent_changelog.md b/recent_changelog.md index 852fb764..e4ed12fc 100644 --- a/recent_changelog.md +++ b/recent_changelog.md @@ -1,17 +1,17 @@ -## 2024.01 Update +## 2024.02 Update + +1. Improvement of validator synchronisation: + * Better handling of block broadcasts -> faster sync + * Additional separate overlay among validators as second option for synchronisation +2. Improvements in LS: + * c7 and library context is fully filled up for server-side rungetmethod + * Cache for runmethods and successfull external messages + * Logging of LS requests statistic +3. Precise control of open files: + * almost instantaneous validator start + * `--max-archive-fd` option + * autoremoval of not used temp archive files + * `--archive-preload-period` option +4. Preparatory (not enabled yet) code for addition on new TVM instructions for cheaper fee calculation onchain. -1. Fixes in how gas in transactions on special accounts is accounted in block limit. Previously, gas was counted as usual, so to conduct elections that costs >30m gas block limit in masterchain was set to 37m gas. To lower the limit for safety reasons it is proposed to caunt gas on special accounts separately. Besides `gas_max` is set to `special_gas_limit` for all types of transactions on special accounts. New behavior is activated through setting `version >= 5` in `ConfigParam 8;`. - * Besides update of config temporally increases gas limit on `EQD_v9j1rlsuHHw2FIhcsCFFSD367ldfDdCKcsNmNpIRzUlu` to `special_gas_limit`, see [details](https://t.me/tonstatus/88). -2. Improvements in LS behavior - * Improved detection of the state with all shards applied to decrease rate of `Block is not applied` error - * Better error logs: `block not in db` and `block is not applied` separation - * Fix error in proof generation for blocks after merge - * Fix most of `block is not applied` issues related to sending too recent block in Proofs - * LS now check external messages till `accept_message` (`set_gas`). -3. Improvements in DHT work and storage, CellDb, config.json ammendment, peer misbehavior detection, validator session stats collection, emulator. -4. Change in CTOS and XLOAD behavior activated through setting `version >= 5` in `ConfigParam 8;`: - * Loading "nested libraries" (i.e. a library cell that points to another library cell) throws an exception. - * Loading a library consumes gas for cell load only once (for the library cell), not twice (both for the library cell and the cell in the library). - * `XLOAD` now works differently. When it takes a library cell, it returns the cell that it points to. This allows loading "nested libraries", if needed. -Besides the work of the Core team, this update is based on the efforts of @XaBbl4 (peer misbehavior detection) and @akifoq (CTOS behavior and gas limit scheme for special accounts). From c7302bc4a3e4def5aef3d3c33e41c3eca250012d Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 19 Feb 2024 19:01:50 +0300 Subject: [PATCH 098/351] Fix checking ext message broadcasts (#912) Co-authored-by: SpyCheese --- validator/full-node-shard.cpp | 13 +++++++++++-- validator/full-node-shard.hpp | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/validator/full-node-shard.cpp b/validator/full-node-shard.cpp index 53c086e3..8e42716b 100644 --- a/validator/full-node-shard.cpp +++ b/validator/full-node-shard.cpp @@ -109,7 +109,8 @@ void FullNodeShardImpl::check_broadcast(PublicKeyHash src, td::BufferSlice broad } auto q = B.move_as_ok(); - if (!processed_ext_msg_broadcasts_.insert(td::sha256_bits256(q->message_->data_)).second) { + auto hash = td::sha256_bits256(q->message_->data_); + if (!processed_ext_msg_broadcasts_.insert(hash).second) { return promise.set_error(td::Status::Error("duplicate external message broadcast")); } if (config_.ext_messages_broadcast_disabled_) { @@ -120,6 +121,11 @@ void FullNodeShardImpl::check_broadcast(PublicKeyHash src, td::BufferSlice broad } }; } + if (my_ext_msg_broadcasts_.count(hash)) { + // Don't re-check messages that were sent by us + promise.set_result(td::Unit()); + return; + } td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::check_external_message, std::move(q->message_->data_), promise.wrap([](td::Ref) { return td::Unit(); })); @@ -706,9 +712,11 @@ void FullNodeShardImpl::send_external_message(td::BufferSlice data) { }); return; } - if (!processed_ext_msg_broadcasts_.insert(td::sha256_bits256(data)).second) { + td::Bits256 hash = td::sha256_bits256(data); + if (processed_ext_msg_broadcasts_.count(hash)) { return; } + my_ext_msg_broadcasts_.insert(hash); auto B = create_serialize_tl_object( create_tl_object(std::move(data))); if (B.size() <= overlay::Overlays::max_simple_broadcast_size()) { @@ -860,6 +868,7 @@ void FullNodeShardImpl::alarm() { } if (cleanup_processed_ext_msg_at_ && cleanup_processed_ext_msg_at_.is_in_past()) { processed_ext_msg_broadcasts_.clear(); + my_ext_msg_broadcasts_.clear(); cleanup_processed_ext_msg_at_ = td::Timestamp::in(60.0); } alarm_timestamp().relax(sync_completed_at_); diff --git a/validator/full-node-shard.hpp b/validator/full-node-shard.hpp index faf49598..0525474e 100644 --- a/validator/full-node-shard.hpp +++ b/validator/full-node-shard.hpp @@ -252,6 +252,7 @@ class FullNodeShardImpl : public FullNodeShard { FullNodeConfig config_; + std::set my_ext_msg_broadcasts_; std::set processed_ext_msg_broadcasts_; td::Timestamp cleanup_processed_ext_msg_at_; }; From 310dd6dec1c7a79b781d9b2a1881a3388841c141 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Wed, 21 Feb 2024 16:13:55 +0300 Subject: [PATCH 099/351] Fix fetching mc config for runSmcMethod, fix caching in LS (#915) Co-authored-by: SpyCheese --- validator/impl/liteserver.cpp | 38 ++++++++++++++++++++++++++++++++--- validator/impl/liteserver.hpp | 3 ++- validator/impl/shard.cpp | 9 +++++++++ validator/impl/shard.hpp | 4 ++++ validator/interfaces/shard.h | 1 + 5 files changed, 51 insertions(+), 4 deletions(-) diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index 139c2347..9b8cb300 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -157,7 +157,7 @@ void LiteQuery::start_up() { }); return; } - use_cache_ = !cache_.empty() && query_obj_->get_id() == lite_api::liteServer_runSmcMethod::ID; + use_cache_ = use_cache(); if (use_cache_) { cache_key_ = td::sha256_bits256(query_); td::actor::send_closure( @@ -173,6 +173,22 @@ void LiteQuery::start_up() { } } +bool LiteQuery::use_cache() { + if (cache_.empty()) { + return false; + } + bool use = false; + lite_api::downcast_call( + *query_obj_, + td::overloaded( + [&](lite_api::liteServer_runSmcMethod& q) { + // wc=-1, seqno=-1 means "use latest mc block" + use = q.id_->workchain_ != masterchainId || q.id_->seqno_ != -1; + }, + [&](auto& obj) { use = false; })); + return use; +} + void LiteQuery::perform() { td::actor::send_closure(manager_, &ValidatorManager::add_lite_query_stats, query_obj_->get_id()); lite_api::downcast_call( @@ -1245,8 +1261,24 @@ void LiteQuery::finish_getAccountState(td::BufferSlice shard_proof) { return; } if (mode_ & 0x10000) { - finish_runSmcMethod(std::move(shard_proof), proof.move_as_ok(), std::move(acc_root), sstate.gen_utime, - sstate.gen_lt); + if (!mc_state_.is_null()) { + finish_runSmcMethod(std::move(shard_proof), proof.move_as_ok(), std::move(acc_root), sstate.gen_utime, + sstate.gen_lt); + return; + } + shard_proof_ = std::move(shard_proof); + proof_ = proof.move_as_ok(); + set_continuation( + [&, base_blk_id = base_blk_id_, acc_root, utime = sstate.gen_utime, lt = sstate.gen_lt]() mutable -> void { + base_blk_id_ = base_blk_id; // It gets overridden by request_mc_block_data_state + finish_runSmcMethod(std::move(shard_proof_), std::move(proof_), std::move(acc_root), utime, lt); + }); + td::optional master_ref = state_->get_master_ref(); + if (!master_ref) { + fatal_error("masterchain ref block is not available"); + return; + } + request_mc_block_data_state(master_ref.value()); return; } td::BufferSlice data; diff --git a/validator/impl/liteserver.hpp b/validator/impl/liteserver.hpp index 57ec7c3c..145fff3d 100644 --- a/validator/impl/liteserver.hpp +++ b/validator/impl/liteserver.hpp @@ -62,7 +62,7 @@ class LiteQuery : public td::actor::Actor { td::BufferSlice buffer_; std::function continuation_; bool cont_set_{false}; - td::BufferSlice shard_proof_; + td::BufferSlice shard_proof_, proof_; std::vector> roots_; std::vector> aux_objs_; std::vector blk_ids_; @@ -98,6 +98,7 @@ class LiteQuery : public td::actor::Actor { bool finish_query(td::BufferSlice result, bool skip_cache_update = false); void alarm() override; void start_up() override; + bool use_cache(); void perform(); void perform_getTime(); void perform_getVersion(); diff --git a/validator/impl/shard.cpp b/validator/impl/shard.cpp index a96f1a81..e899926a 100644 --- a/validator/impl/shard.cpp +++ b/validator/impl/shard.cpp @@ -129,6 +129,15 @@ td::Status ShardStateQ::init() { " contains BlockId " + hdr_id.to_str() + " different from the one originally required"); } + if (info.r1.master_ref.write().fetch_long(1)) { + BlockIdExt mc_id; + if (!block::tlb::t_ExtBlkRef.unpack(info.r1.master_ref, mc_id, nullptr)) { + return td::Status::Error(-668, "cannot unpack master_ref in shardchain state of "s + blkid.to_str()); + } + master_ref = mc_id; + } else { + master_ref = {}; + } return td::Status::OK(); } diff --git a/validator/impl/shard.hpp b/validator/impl/shard.hpp index 1c511ab5..99a9e8b0 100644 --- a/validator/impl/shard.hpp +++ b/validator/impl/shard.hpp @@ -41,6 +41,7 @@ class ShardStateQ : virtual public ShardState { bool before_split_{false}; bool fake_split_{false}; bool fake_merge_{false}; + td::optional master_ref; protected: friend class Ref; @@ -80,6 +81,9 @@ class ShardStateQ : virtual public ShardState { LogicalTime get_logical_time() const override { return lt; } + td::optional get_master_ref() const override { + return master_ref; + } td::Status validate_deep() const override; ShardStateQ* make_copy() const override; td::Result> message_queue() const override; diff --git a/validator/interfaces/shard.h b/validator/interfaces/shard.h index 4a0e42fe..35fe4bc9 100644 --- a/validator/interfaces/shard.h +++ b/validator/interfaces/shard.h @@ -44,6 +44,7 @@ class ShardState : public td::CntObject { virtual BlockIdExt get_block_id() const = 0; virtual RootHash root_hash() const = 0; virtual td::Ref root_cell() const = 0; + virtual td::optional get_master_ref() const = 0; virtual td::Status validate_deep() const = 0; From b09f910bf2c289fea5c05a175bd591994cc7968a Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 4 Mar 2024 17:37:42 +0300 Subject: [PATCH 100/351] Fix converting int to int256 (#925) Co-authored-by: SpyCheese --- crypto/common/bigint.hpp | 27 +++++++++++++++++++++------ crypto/common/refint.cpp | 4 ---- crypto/common/refint.h | 2 -- crypto/vm/cells/CellSlice.cpp | 4 ++-- test/regression-tests.ans | 2 +- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/crypto/common/bigint.hpp b/crypto/common/bigint.hpp index 5fa8e2da..f8756d9f 100644 --- a/crypto/common/bigint.hpp +++ b/crypto/common/bigint.hpp @@ -169,8 +169,6 @@ class PropagateConstSpan { size_t size_{0}; }; -struct Normalize {}; - template class AnyIntView { public: @@ -290,6 +288,7 @@ class BigIntG { public: enum { word_bits = Tr::word_bits, word_shift = Tr::word_shift, max_bits = len, word_cnt = len / word_shift + 1 }; typedef typename Tr::word_t word_t; + typedef typename Tr::uword_t uword_t; typedef Tr Traits; typedef BigIntG DoubleInt; @@ -312,9 +311,6 @@ class BigIntG { BigIntG() : n(0) { } explicit BigIntG(word_t x) : n(1) { - digits[0] = x; - } - BigIntG(Normalize, word_t x) : n(1) { if (x >= -Tr::Half && x < Tr::Half) { digits[0] = x; } else if (len <= 1) { @@ -325,6 +321,25 @@ class BigIntG { digits[n++] = (x >> Tr::word_shift) + (digits[0] < 0); } } + explicit BigIntG(uword_t x) : n(1) { + if (x < (uword_t)Tr::Half) { + digits[0] = x; + } else if (len <= 1) { + digits[0] = x; + normalize_bool(); + } else { + digits[0] = ((x ^ Tr::Half) & (Tr::Base - 1)) - Tr::Half; + digits[n++] = (x >> Tr::word_shift) + (digits[0] < 0); + } + } + explicit BigIntG(unsigned x) : BigIntG(uword_t(x)) { + } + explicit BigIntG(int x) : BigIntG(word_t(x)) { + } + explicit BigIntG(unsigned long x) : BigIntG(uword_t(x)) { + } + explicit BigIntG(long x) : BigIntG(word_t(x)) { + } BigIntG(const BigIntG& x) : n(x.n) { std::memcpy(digits, x.digits, n * sizeof(word_t)); ///std::cout << "(BiCC " << (const void*)&x << "->" << (void*)this << ")"; @@ -2556,7 +2571,7 @@ typedef BigIntG<257, BigIntInfo> BigInt256; template BigIntG make_bigint(long long x) { - return BigIntG{Normalize(), x}; + return BigIntG{x}; } namespace literals { diff --git a/crypto/common/refint.cpp b/crypto/common/refint.cpp index 8e06da5f..a2ccdaa6 100644 --- a/crypto/common/refint.cpp +++ b/crypto/common/refint.cpp @@ -261,10 +261,6 @@ int sgn(RefInt256 x) { return x->sgn(); } -RefInt256 make_refint(long long x) { - return td::RefInt256{true, td::Normalize(), x}; -} - RefInt256 zero_refint() { // static RefInt256 Zero = td::RefInt256{true, 0}; // return Zero; diff --git a/crypto/common/refint.h b/crypto/common/refint.h index 488ae97f..e3305c2f 100644 --- a/crypto/common/refint.h +++ b/crypto/common/refint.h @@ -113,8 +113,6 @@ RefInt256 make_refint(Args&&... args) { return td::RefInt256{true, std::forward(args)...}; } -extern RefInt256 make_refint(long long x); - extern RefInt256 zero_refint(); extern RefInt256 bits_to_refint(td::ConstBitPtr bits, int n, bool sgnd = false); diff --git a/crypto/vm/cells/CellSlice.cpp b/crypto/vm/cells/CellSlice.cpp index ee5f6941..4be1667e 100644 --- a/crypto/vm/cells/CellSlice.cpp +++ b/crypto/vm/cells/CellSlice.cpp @@ -595,7 +595,7 @@ td::RefInt256 CellSlice::fetch_int256(unsigned bits, bool sgnd) { if (!have(bits)) { return {}; } else if (bits < td::BigInt256::word_shift) { - return td::make_refint(sgnd ? fetch_long(bits) : fetch_ulong(bits)); + return td::make_refint(td::int64(sgnd ? fetch_long(bits) : fetch_ulong(bits))); } else { td::RefInt256 res{true}; res.unique_write().import_bits(data_bits(), bits, sgnd); @@ -608,7 +608,7 @@ td::RefInt256 CellSlice::prefetch_int256(unsigned bits, bool sgnd) const { if (!have(bits)) { return {}; } else if (bits < td::BigInt256::word_shift) { - return td::make_refint(sgnd ? prefetch_long(bits) : prefetch_ulong(bits)); + return td::make_refint(td::int64(sgnd ? prefetch_long(bits) : prefetch_ulong(bits))); } else { td::RefInt256 res{true}; res.unique_write().import_bits(data_bits(), bits, sgnd); diff --git a/test/regression-tests.ans b/test/regression-tests.ans index ec013bf7..96117ee9 100644 --- a/test/regression-tests.ans +++ b/test/regression-tests.ans @@ -1,5 +1,5 @@ abce -Test_Bigint_main_default 0327a04f1252c37f77b6706b902ab2c3235c47738bca3f183c837a2c5d22bb6f +Test_Bigint_main_default 76f38492ec19464a1d0eac51d389023a31ce10396b3894061361d159567ce8cd Test_Bitstrings_main_default a8b08af3116923c4c2a14e138d168375abd0c059f2f780d3267b294929a1110e Test_Cells_simple_default 832502642fe4fe5db70de82681aedb7d54d7f3530e0069861fff405fe6f6cf23 Test_Fift_bug_div_default 1ac42861ce96b2896001c587f65e9afe1617db48859f19c2f4e3063a20ea60b0 From 9d0569645231b8f764635883ff344aad27786682 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 5 Mar 2024 16:54:49 +0300 Subject: [PATCH 101/351] Add infrastructure for precompiled smartcontracts (#927) * Utils for writing precompiled contracts * Precompiled contracts in config, override gas_usage for them * Add base class for precompiled contracts * Improve utils for precompiled smc * Implement GETPRECOMPILEDGAS * Enable precompiles by flag * Process null data in PrecompiledSmartContract * Fix ton_block wasm build * Fix vm::util::store_(u)long --------- Co-authored-by: SpyCheese --- crypto/CMakeLists.txt | 7 + crypto/block/block.tlb | 4 + crypto/block/mc-config.cpp | 27 ++ crypto/block/mc-config.h | 10 + .../PrecompiledSmartContract.cpp | 170 +++++++++++ .../PrecompiledSmartContract.h | 122 ++++++++ crypto/block/precompiled-smc/common.h | 21 ++ crypto/block/transaction.cpp | 115 +++++++- crypto/block/transaction.h | 5 + crypto/smc-envelope/SmartContract.cpp | 1 + crypto/vm/arithops.cpp | 22 ++ crypto/vm/arithops.h | 10 + crypto/vm/cellops.cpp | 189 ++++++++++++ crypto/vm/cellops.h | 40 ++- crypto/vm/memo.cpp | 15 + crypto/vm/memo.h | 20 ++ crypto/vm/tonops.cpp | 269 ++++++++++++------ crypto/vm/tonops.h | 29 ++ doc/GlobalVersions.md | 5 +- validator-engine/validator-engine.cpp | 4 + validator/impl/validate-query.cpp | 1 + 21 files changed, 991 insertions(+), 95 deletions(-) create mode 100644 crypto/block/precompiled-smc/PrecompiledSmartContract.cpp create mode 100644 crypto/block/precompiled-smc/PrecompiledSmartContract.h create mode 100644 crypto/block/precompiled-smc/common.h diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 827c903b..29b95466 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -213,6 +213,7 @@ set(BLOCK_SOURCE block/mc-config.cpp block/output-queue-merger.cpp block/transaction.cpp + block/precompiled-smc/PrecompiledSmartContract.cpp ${TLB_BLOCK_AUTO} block/block-binlog.h @@ -223,6 +224,8 @@ set(BLOCK_SOURCE block/check-proof.h block/output-queue-merger.h block/transaction.h + block/precompiled-smc/PrecompiledSmartContract.h + block/precompiled-smc/common.h ) set(SMC_ENVELOPE_SOURCE @@ -376,6 +379,10 @@ add_library(ton_block STATIC ${BLOCK_SOURCE}) target_include_directories(ton_block PUBLIC $ $ $) target_link_libraries(ton_block PUBLIC ton_crypto tdutils tdactor tl_api) +if (USE_EMSCRIPTEN) + target_link_options(ton_block PRIVATE -fexceptions) + target_compile_options(ton_block PRIVATE -fexceptions) +endif() add_executable(func func/func-main.cpp ${FUNC_LIB_SOURCE}) target_include_directories(func PUBLIC $) diff --git a/crypto/block/block.tlb b/crypto/block/block.tlb index 4b36f13b..3ae54239 100644 --- a/crypto/block/block.tlb +++ b/crypto/block/block.tlb @@ -788,6 +788,10 @@ _ SizeLimitsConfig = ConfigParam 43; suspended_address_list#00 addresses:(HashmapE 288 Unit) suspended_until:uint32 = SuspendedAddressList; _ SuspendedAddressList = ConfigParam 44; +precompiled_smc#b0 gas_usage:uint64 = PrecompiledSmc; +precompiled_contracts_config#c0 list:(HashmapE 256 PrecompiledSmc) = PrecompiledContractsConfig; +_ PrecompiledContractsConfig = ConfigParam 45; + oracle_bridge_params#_ bridge_address:bits256 oracle_mutlisig_address:bits256 oracles:(HashmapE 256 uint256) external_chain_address:bits256 = OracleBridgeParams; _ OracleBridgeParams = ConfigParam 71; // Ethereum bridge _ OracleBridgeParams = ConfigParam 72; // Binance Smart Chain bridge diff --git a/crypto/block/mc-config.cpp b/crypto/block/mc-config.cpp index 8b387155..1dbfeaed 100644 --- a/crypto/block/mc-config.cpp +++ b/crypto/block/mc-config.cpp @@ -2032,6 +2032,17 @@ td::Ref Config::get_unpacked_config_tuple(ton::UnixTime now) const { return td::make_cnt_ref>(std::move(tuple)); } +PrecompiledContractsConfig Config::get_precompiled_contracts_config() const { + PrecompiledContractsConfig c; + td::Ref param = get_config_param(45); + gen::PrecompiledContractsConfig::Record rec; + if (param.is_null() || !tlb::unpack_cell(param, rec)) { + return c; + } + c.list = vm::Dictionary{rec.list->prefetch_ref(), 256}; + return c; +} + td::Result> Config::unpack_validator_set_start_stop(Ref vset_root) { if (vset_root.is_null()) { return td::Status::Error("validator set absent"); @@ -2316,4 +2327,20 @@ td::Result> ConfigInfo::get_prev_blocks_info() const { block_id_to_tuple(last_key_block)); } +td::optional PrecompiledContractsConfig::get_contract( + td::Bits256 code_hash) const { + auto list_copy = list; + auto cs = list_copy.lookup(code_hash); + if (cs.is_null()) { + return {}; + } + gen::PrecompiledSmc::Record rec; + if (!tlb::csr_unpack(cs, rec)) { + return {}; + } + Contract c; + c.gas_usage = rec.gas_usage; + return c; +} + } // namespace block diff --git a/crypto/block/mc-config.h b/crypto/block/mc-config.h index 624e3e03..2ca89399 100644 --- a/crypto/block/mc-config.h +++ b/crypto/block/mc-config.h @@ -526,6 +526,15 @@ struct BurningConfig { } }; +struct PrecompiledContractsConfig { + struct Contract { + td::uint64 gas_usage; + }; + vm::Dictionary list{256}; + + td::optional get_contract(td::Bits256 code_hash) const; +}; + class Config { enum { default_mc_catchain_lifetime = 200, @@ -644,6 +653,7 @@ class Config { std::unique_ptr get_suspended_addresses(ton::UnixTime now) const; BurningConfig get_burning_config() const; td::Ref get_unpacked_config_tuple(ton::UnixTime now) const; + PrecompiledContractsConfig get_precompiled_contracts_config() const; static std::vector do_compute_validator_set(const block::CatchainValidatorsConfig& ccv_conf, ton::ShardIdFull shard, const block::ValidatorSet& vset, ton::UnixTime time, diff --git a/crypto/block/precompiled-smc/PrecompiledSmartContract.cpp b/crypto/block/precompiled-smc/PrecompiledSmartContract.cpp new file mode 100644 index 00000000..6797216d --- /dev/null +++ b/crypto/block/precompiled-smc/PrecompiledSmartContract.cpp @@ -0,0 +1,170 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#include "common.h" +#include +#include "vm/memo.h" + +namespace block::precompiled { + +using namespace vm; + +Result PrecompiledSmartContract::run(td::Ref my_address, ton::UnixTime now, ton::LogicalTime cur_lt, + CurrencyCollection balance, td::Ref c4, vm::CellSlice msg_body, + td::Ref msg, CurrencyCollection msg_balance, bool is_external, + std::vector> libraries, int global_version, + td::uint16 max_data_depth, td::Ref my_code, + td::Ref unpacked_config, td::RefInt256 due_payment, + td::uint64 precompiled_gas_usage) { + my_address_ = std::move(my_address); + now_ = now; + cur_lt_ = cur_lt; + balance_ = std::move(balance); + c4_ = (c4.not_null() ? std::move(c4) : CellBuilder().finalize()); + in_msg_body_ = std::move(msg_body); + in_msg_ = std::move(msg); + in_msg_balance_ = std::move(msg_balance); + is_external_ = is_external; + my_code_ = std::move(my_code); + unpacked_config_ = std::move(unpacked_config); + due_payment_ = std::move(due_payment); + precompiled_gas_usage_ = precompiled_gas_usage; + + vm::DummyVmState vm_state{std::move(libraries), global_version}; + vm::VmStateInterface::Guard guard{&vm_state}; + + Result result; + try { + result = do_run(); + } catch (vm::VmError &e) { + result = Result::error(e.get_errno(), e.get_arg()); + } catch (Result &r) { + result = std::move(r); + } + + if (result.exit_code != 0 && result.exit_code != 1) { + // see VmState::try_commit() + if (c4_.is_null() || c4_->get_depth() > max_data_depth || c4_->get_level() != 0 || c5_.is_null() || + c5_->get_depth() > max_data_depth || c5_->get_level() != 0) { + result = Result::error(Excno::cell_ov, 0); + } + } + return result; +} + +void PrecompiledSmartContract::send_raw_message(const td::Ref &msg, int mode) { + CellBuilder cb; + if (!(cb.store_ref_bool(c5_) // out_list$_ {n:#} prev:^(OutList n) + && cb.store_long_bool(0x0ec3c86d, 32) // action_send_msg#0ec3c86d + && cb.store_long_bool(mode, 8) // mode:(## 8) + && cb.store_ref_bool(msg))) { + throw VmError{Excno::cell_ov, "cannot serialize raw output message into an output action cell"}; + } + c5_ = cb.finalize_novm(); +} + +void PrecompiledSmartContract::raw_reserve(const td::RefInt256 &amount, int mode) { + if (amount->sgn() < 0) { + throw VmError{Excno::range_chk, "amount of nanograms must be non-negative"}; + } + CellBuilder cb; + if (!(cb.store_ref_bool(c5_) // out_list$_ {n:#} prev:^(OutList n) + && cb.store_long_bool(0x36e6b809, 32) // action_reserve_currency#36e6b809 + && cb.store_long_bool(mode, 8) // mode:(## 8) + && util::store_coins(cb, std::move(amount), true) // + && cb.store_maybe_ref({}))) { + throw VmError{Excno::cell_ov, "cannot serialize raw reserved currency amount into an output action cell"}; + } + c5_ = cb.finalize_novm(); +} + +td::RefInt256 PrecompiledSmartContract::get_compute_fee(ton::WorkchainId wc, td::uint64 gas_used) { + if (gas_used >= (1ULL << 63)) { + throw VmError{Excno::range_chk}; + } + block::GasLimitsPrices prices = util::get_gas_prices(unpacked_config_, wc); + return util::check_finite(prices.compute_gas_price(gas_used)); +} + +td::RefInt256 PrecompiledSmartContract::get_forward_fee(ton::WorkchainId wc, td::uint64 bits, td::uint64 cells) { + if (bits >= (1ULL << 63) || cells >= (1ULL << 63)) { + throw VmError{Excno::range_chk}; + } + block::MsgPrices prices = util::get_msg_prices(unpacked_config_, wc); + return util::check_finite(prices.compute_fwd_fees256(cells, bits)); +} + +td::RefInt256 PrecompiledSmartContract::get_storage_fee(ton::WorkchainId wc, td::uint64 duration, td::uint64 bits, + td::uint64 cells) { + if (bits >= (1ULL << 63) || cells >= (1ULL << 63) || duration >= (1ULL << 63)) { + throw VmError{Excno::range_chk}; + } + td::optional maybe_prices = util::get_storage_prices(unpacked_config_); + return util::check_finite(util::calculate_storage_fee(maybe_prices, wc, duration, bits, cells)); +} + +td::RefInt256 PrecompiledSmartContract::get_simple_compute_fee(ton::WorkchainId wc, td::uint64 gas_used) { + if (gas_used >= (1ULL << 63)) { + throw VmError{Excno::range_chk}; + } + block::GasLimitsPrices prices = util::get_gas_prices(unpacked_config_, wc); + return util::check_finite(td::rshift(td::make_refint(prices.gas_price) * gas_used, 16, 1)); +} + +td::RefInt256 PrecompiledSmartContract::get_simple_forward_fee(ton::WorkchainId wc, td::uint64 bits, td::uint64 cells) { + if (bits >= (1ULL << 63) || cells >= (1ULL << 63)) { + throw VmError{Excno::range_chk}; + } + block::MsgPrices prices = util::get_msg_prices(unpacked_config_, wc); + return util::check_finite( + td::rshift(td::make_refint(prices.bit_price) * bits + td::make_refint(prices.cell_price) * cells, 16, 1)); +} + +td::RefInt256 PrecompiledSmartContract::get_original_fwd_fee(ton::WorkchainId wc, const td::RefInt256 &x) { + if (x->sgn() < 0) { + throw VmError{Excno::range_chk, "fwd_fee is negative"}; + } + block::MsgPrices prices = util::get_msg_prices(unpacked_config_, wc); + return util::check_finite(td::muldiv(x, td::make_refint(1 << 16), td::make_refint((1 << 16) - prices.first_frac))); +} + +static std::atomic_bool precompiled_execution_enabled{false}; + +std::unique_ptr get_implementation(td::Bits256 code_hash) { + if (!precompiled_execution_enabled) { + return nullptr; + } + static std::map (*)()> map = []() { + auto from_hex = [](td::Slice s) -> td::Bits256 { + td::Bits256 x; + CHECK(x.from_hex(s) == 256); + return x; + }; + std::map (*)()> map; +#define CONTRACT(hash, cls) \ + map[from_hex(hash)] = []() -> std::unique_ptr { return std::make_unique(); }; + // CONTRACT("CODE_HASH_HEX", ClassName); + return map; + }(); + auto it = map.find(code_hash); + return it == map.end() ? nullptr : it->second(); +} + +void set_precompiled_execution_enabled(bool value) { + precompiled_execution_enabled = value; +} + +} // namespace block::precompiled diff --git a/crypto/block/precompiled-smc/PrecompiledSmartContract.h b/crypto/block/precompiled-smc/PrecompiledSmartContract.h new file mode 100644 index 00000000..509ebf79 --- /dev/null +++ b/crypto/block/precompiled-smc/PrecompiledSmartContract.h @@ -0,0 +1,122 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once +#include "common/refcnt.hpp" +#include "common/refint.h" +#include "vm/cells.h" +#include "vm/cellslice.h" +#include "vm/dict.h" +#include "vm/boc.h" +#include +#include "tl/tlblib.hpp" +#include "td/utils/bits.h" +#include "ton/ton-types.h" +#include "block/block.h" +#include "block/mc-config.h" + +namespace block::precompiled { + +struct Result { + int exit_code = 0; + td::optional exit_arg; + bool accepted = true; + bool committed = false; + + static Result error(int code, long long arg = 0) { + Result res; + res.exit_code = code; + res.exit_arg = arg; + return res; + } + + static Result error(vm::Excno code, long long arg = 0) { + Result res; + res.exit_code = (int)code; + res.exit_arg = arg; + return res; + } + + static Result not_accepted(int code = 0) { + Result res; + res.exit_code = code; + res.accepted = false; + return res; + } + + static Result success() { + Result res; + res.committed = true; + return res; + } +}; + +class PrecompiledSmartContract { + public: + virtual ~PrecompiledSmartContract() = default; + + virtual std::string get_name() const = 0; + + virtual int required_version() const { + return 6; + } + + Result run(td::Ref my_address, ton::UnixTime now, ton::LogicalTime cur_lt, CurrencyCollection balance, + td::Ref c4, vm::CellSlice msg_body, td::Ref msg, CurrencyCollection msg_balance, + bool is_external, std::vector> libraries, int global_version, td::uint16 max_data_depth, + td::Ref my_code, td::Ref unpacked_config, td::RefInt256 due_payment, td::uint64 precompiled_gas_usage); + + td::Ref get_c4() const { + return c4_; + } + td::Ref get_c5() const { + return c5_; + } + + protected: + td::Ref my_address_; + ton::UnixTime now_; + ton::LogicalTime cur_lt_; + CurrencyCollection balance_; + vm::CellSlice in_msg_body_; + td::Ref in_msg_; + CurrencyCollection in_msg_balance_; + bool is_external_; + td::Ref my_code_; + td::Ref unpacked_config_; + td::RefInt256 due_payment_; + td::uint64 precompiled_gas_usage_; + + td::Ref c4_; + td::Ref c5_ = vm::CellBuilder().finalize_novm(); + + void send_raw_message(const td::Ref& msg, int mode); + void raw_reserve(const td::RefInt256& amount, int mode); + + td::RefInt256 get_compute_fee(ton::WorkchainId wc, td::uint64 gas_used); + td::RefInt256 get_forward_fee(ton::WorkchainId wc, td::uint64 bits, td::uint64 cells); + td::RefInt256 get_storage_fee(ton::WorkchainId wc, td::uint64 duration, td::uint64 bits, td::uint64 cells); + td::RefInt256 get_simple_compute_fee(ton::WorkchainId wc, td::uint64 gas_used); + td::RefInt256 get_simple_forward_fee(ton::WorkchainId wc, td::uint64 bits, td::uint64 cells); + td::RefInt256 get_original_fwd_fee(ton::WorkchainId wc, const td::RefInt256& x); + + virtual Result do_run() = 0; +}; + +std::unique_ptr get_implementation(td::Bits256 code_hash); +void set_precompiled_execution_enabled(bool value); // disabled by default + +} // namespace block::precompiled \ No newline at end of file diff --git a/crypto/block/precompiled-smc/common.h b/crypto/block/precompiled-smc/common.h new file mode 100644 index 00000000..0406d7de --- /dev/null +++ b/crypto/block/precompiled-smc/common.h @@ -0,0 +1,21 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once +#include "PrecompiledSmartContract.h" +#include "vm/arithops.h" +#include "vm/cellops.h" +#include "vm/tonops.h" \ No newline at end of file diff --git a/crypto/block/transaction.cpp b/crypto/block/transaction.cpp index b3aa6c8f..88966179 100644 --- a/crypto/block/transaction.cpp +++ b/crypto/block/transaction.cpp @@ -1341,6 +1341,9 @@ Ref Transaction::prepare_vm_c7(const ComputePhaseConfig& cfg) const { tuple.push_back(cfg.unpacked_config_tuple.not_null() ? vm::StackEntry(cfg.unpacked_config_tuple) : vm::StackEntry()); // unpacked_config_tuple:[...] tuple.push_back(due_payment.not_null() ? due_payment : td::zero_refint()); // due_payment:Integer + tuple.push_back(compute_phase->precompiled_gas_usage + ? vm::StackEntry(td::make_refint(compute_phase->precompiled_gas_usage.value())) + : vm::StackEntry()); // precompiled_gas_usage:Integer } auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple_ref).to_string(); @@ -1460,6 +1463,80 @@ bool Transaction::check_in_msg_state_hash() { return account.recompute_tmp_addr(my_addr, d, orig_addr_rewrite.bits()); } +/** + * Runs the precompiled smart contract and prepares the compute phase. + * + * @param cfg The configuration for the compute phase. + * @param impl Implementation of the smart contract + * + * @returns True if the contract was successfully executed, false otherwise. + */ +bool Transaction::run_precompiled_contract(const ComputePhaseConfig& cfg, precompiled::PrecompiledSmartContract& impl) { + ComputePhase& cp = *compute_phase; + CHECK(cp.precompiled_gas_usage); + td::uint64 gas_usage = cp.precompiled_gas_usage.value(); + td::Timer timer; + auto result = + impl.run(my_addr, now, start_lt, balance, new_data, *in_msg_body, in_msg, msg_balance_remaining, in_msg_extern, + compute_vm_libraries(cfg), cfg.global_version, cfg.max_vm_data_depth, new_code, + cfg.unpacked_config_tuple, due_payment.not_null() ? due_payment : td::zero_refint(), gas_usage); + double elapsed = timer.elapsed(); + cp.vm_init_state_hash = td::Bits256::zero(); + cp.exit_code = result.exit_code; + cp.out_of_gas = false; + cp.vm_final_state_hash = td::Bits256::zero(); + cp.vm_steps = 0; + cp.gas_used = gas_usage; + cp.accepted = result.accepted; + cp.success = (cp.accepted && result.committed); + LOG(INFO) << "Running precompiled smart contract " << impl.get_name() << ": exit_code=" << result.exit_code + << " accepted=" << result.accepted << " success=" << cp.success << " gas_used=" << gas_usage + << " time=" << elapsed << "s"; + if (cp.accepted & use_msg_state) { + was_activated = true; + acc_status = Account::acc_active; + } + if (cfg.with_vm_log) { + cp.vm_log = PSTRING() << "Running precompiled smart contract " << impl.get_name() + << ": exit_code=" << result.exit_code << " accepted=" << result.accepted + << " success=" << cp.success << " gas_used=" << gas_usage << " time=" << elapsed << "s"; + } + if (cp.success) { + cp.new_data = impl.get_c4(); + cp.actions = impl.get_c5(); + int out_act_num = output_actions_count(cp.actions); + if (verbosity > 2) { + std::cerr << "new smart contract data: "; + bool can_be_special = true; + load_cell_slice_special(cp.new_data, can_be_special).print_rec(std::cerr); + std::cerr << "output actions: "; + block::gen::OutList{out_act_num}.print_ref(std::cerr, cp.actions); + } + } + cp.mode = 0; + cp.exit_arg = 0; + if (!cp.success && result.exit_arg) { + auto value = td::narrow_cast_safe(result.exit_arg.value()); + if (value.is_ok()) { + cp.exit_arg = value.ok(); + } + } + if (cp.accepted) { + if (account.is_special) { + cp.gas_fees = td::zero_refint(); + } else { + cp.gas_fees = cfg.compute_gas_price(cp.gas_used); + total_fees += cp.gas_fees; + balance -= cp.gas_fees; + } + LOG(DEBUG) << "gas fees: " << cp.gas_fees->to_dec_string() << " = " << cfg.gas_price256->to_dec_string() << " * " + << cp.gas_used << " /2^16 ; price=" << cfg.gas_price << "; flat rate=[" << cfg.flat_gas_price << " for " + << cfg.flat_gas_limit << "]; remaining balance=" << balance.to_str(); + CHECK(td::sgn(balance.grams) >= 0); + } + return true; +} + /** * Prepares the compute phase of a transaction, which includes running TVM. * @@ -1528,6 +1605,33 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { cp.skip_reason = ComputePhase::sk_bad_state; return true; } + + td::optional precompiled; + if (new_code.not_null() && trans_type == tr_ord) { + precompiled = cfg.precompiled_contracts.get_contract(new_code->get_hash().bits()); + } + + vm::GasLimits gas{(long long)cp.gas_limit, (long long)cp.gas_max, (long long)cp.gas_credit}; + if (precompiled) { + td::uint64 gas_usage = precompiled.value().gas_usage; + cp.precompiled_gas_usage = gas_usage; + if (gas_usage > cp.gas_limit) { + cp.skip_reason = ComputePhase::sk_no_gas; + return true; + } + auto impl = precompiled::get_implementation(new_code->get_hash().bits()); + if (impl != nullptr && !cfg.dont_run_precompiled_ && impl->required_version() <= cfg.global_version) { + return run_precompiled_contract(cfg, *impl); + } + + // Contract is marked as precompiled in global config, but implementation is not available + // In this case we run TVM and override gas_used + LOG(INFO) << "Unknown precompiled contract (code_hash=" << new_code->get_hash().to_hex() + << ", gas_usage=" << gas_usage << "), running VM"; + long long limit = account.is_special ? cfg.special_gas_limit : cfg.gas_limit; + gas = vm::GasLimits{limit, limit, gas.gas_credit ? limit : 0}; + } + // initialize VM Ref stack = prepare_vm_stack(cp); if (stack.is_null()) { @@ -1536,7 +1640,6 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { } // OstreamLogger ostream_logger(error_stream); // auto log = create_vm_log(error_stream ? &ostream_logger : nullptr); - vm::GasLimits gas{(long long)cp.gas_limit, (long long)cp.gas_max, (long long)cp.gas_credit}; LOG(DEBUG) << "creating VM"; std::unique_ptr logger; @@ -1585,6 +1688,15 @@ bool Transaction::prepare_compute_phase(const ComputePhaseConfig& cfg) { was_activated = true; acc_status = Account::acc_active; } + if (precompiled) { + cp.gas_used = precompiled.value().gas_usage; + cp.vm_steps = 0; + cp.vm_init_state_hash = cp.vm_final_state_hash = td::Bits256::zero(); + if (cp.out_of_gas) { + LOG(ERROR) << "Precompiled smc got out_of_gas in TVM"; + return false; + } + } LOG(INFO) << "steps: " << vm.get_steps_count() << " gas: used=" << gas.gas_consumed() << ", max=" << gas.gas_max << ", limit=" << gas.gas_limit << ", credit=" << gas.gas_credit; LOG(INFO) << "out_of_gas=" << cp.out_of_gas << ", accepted=" << cp.accepted << ", success=" << cp.success @@ -3568,6 +3680,7 @@ td::Status FetchConfigParams::fetch_config_params( } compute_phase_cfg->suspended_addresses = config.get_suspended_addresses(now); compute_phase_cfg->size_limits = size_limits; + compute_phase_cfg->precompiled_contracts = config.get_precompiled_contracts_config(); } { // compute action_phase_cfg diff --git a/crypto/block/transaction.h b/crypto/block/transaction.h index 57defc8c..42cd84a8 100644 --- a/crypto/block/transaction.h +++ b/crypto/block/transaction.h @@ -29,6 +29,7 @@ #include "ton/ton-types.h" #include "block/block.h" #include "block/mc-config.h" +#include "precompiled-smc/PrecompiledSmartContract.h" namespace block { using td::Ref; @@ -122,6 +123,8 @@ struct ComputePhaseConfig { SizeLimitsConfig size_limits; int vm_log_verbosity = 0; bool stop_on_accept_message = false; + PrecompiledContractsConfig precompiled_contracts; + bool dont_run_precompiled_ = false; ComputePhaseConfig() : gas_price(0), gas_limit(0), special_gas_limit(0), gas_credit(0) { compute_threshold(); @@ -189,6 +192,7 @@ struct ComputePhase { Ref new_data; Ref actions; std::string vm_log; + td::optional precompiled_gas_usage; }; struct ActionPhase { @@ -372,6 +376,7 @@ struct Transaction { bool compute_gas_limits(ComputePhase& cp, const ComputePhaseConfig& cfg); Ref prepare_vm_stack(ComputePhase& cp); std::vector> compute_vm_libraries(const ComputePhaseConfig& cfg); + bool run_precompiled_contract(const ComputePhaseConfig& cfg, precompiled::PrecompiledSmartContract& precompiled); bool prepare_compute_phase(const ComputePhaseConfig& cfg); bool prepare_action_phase(const ActionPhaseConfig& cfg); td::Status check_state_limits(const SizeLimitsConfig& size_limits, bool update_storage_stat = true); diff --git a/crypto/smc-envelope/SmartContract.cpp b/crypto/smc-envelope/SmartContract.cpp index 1908b912..13e5c70b 100644 --- a/crypto/smc-envelope/SmartContract.cpp +++ b/crypto/smc-envelope/SmartContract.cpp @@ -174,6 +174,7 @@ td::Ref prepare_vm_c7(SmartContract::Args args, td::Ref cod if (args.config && args.config.value()->get_global_version() >= 6) { tuple.push_back(args.config.value()->get_unpacked_config_tuple(now)); // unpacked_config_tuple tuple.push_back(td::zero_refint()); // due_payment + tuple.push_back(vm::StackEntry()); // precompiled_gas_usage:Integer } auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); //LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple).to_string(); diff --git a/crypto/vm/arithops.cpp b/crypto/vm/arithops.cpp index 1d3111b2..fc482fc4 100644 --- a/crypto/vm/arithops.cpp +++ b/crypto/vm/arithops.cpp @@ -1069,4 +1069,26 @@ void register_arith_ops(OpcodeTable& cp0) { register_int_cmp_ops(cp0); } +namespace util { + +const td::RefInt256& check_signed_fits(const td::RefInt256& x, int bits) { + if (!x->signed_fits_bits(bits)) { + throw VmError{Excno::int_ov}; + } + return x; +} + +const td::RefInt256& check_unsigned_fits(const td::RefInt256& x, int bits) { + if (!x->unsigned_fits_bits(bits)) { + throw VmError{Excno::int_ov}; + } + return x; +} + +const td::RefInt256& check_finite(const td::RefInt256& x) { + return check_signed_fits(x, 257); +} + +} // namespace util + } // namespace vm diff --git a/crypto/vm/arithops.h b/crypto/vm/arithops.h index 63adcf7c..c9735798 100644 --- a/crypto/vm/arithops.h +++ b/crypto/vm/arithops.h @@ -18,10 +18,20 @@ */ #pragma once +#include "common/refint.h" namespace vm { class OpcodeTable; void register_arith_ops(OpcodeTable& cp0); +namespace util { + +// throw on error +const td::RefInt256& check_signed_fits(const td::RefInt256& x, int bits); +const td::RefInt256& check_unsigned_fits(const td::RefInt256& x, int bits); +const td::RefInt256& check_finite(const td::RefInt256& x); + +} // namespace util + } // namespace vm diff --git a/crypto/vm/cellops.cpp b/crypto/vm/cellops.cpp index 94407231..61ffe5c5 100644 --- a/crypto/vm/cellops.cpp +++ b/crypto/vm/cellops.cpp @@ -1544,4 +1544,193 @@ void register_cell_ops(OpcodeTable& cp0) { register_cell_deserialize_ops(cp0); } +namespace util { + +bool load_int256_q(CellSlice& cs, td::RefInt256& res, int len, bool sgnd, bool quiet) { + if (!cs.fetch_int256_to(len, res, sgnd)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_und}; + } + return true; +} +bool load_long_q(CellSlice& cs, td::int64& res, int len, bool quiet) { + CHECK(0 <= len && len <= 64); + if (!cs.have(len)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_und}; + } + res = cs.fetch_long(len); + return true; +} +bool load_ulong_q(CellSlice& cs, td::uint64& res, int len, bool quiet) { + CHECK(0 <= len && len <= 64); + if (!cs.have(len)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_und}; + } + res = cs.fetch_ulong(len); + return true; +} +bool load_ref_q(CellSlice& cs, td::Ref& res, bool quiet) { + if (!cs.have_refs(1)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_und}; + } + res = cs.fetch_ref(); + return true; +} +bool load_maybe_ref_q(CellSlice& cs, td::Ref& res, bool quiet) { + if (!cs.fetch_maybe_ref(res)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_und}; + } + return true; +} +bool skip_bits_q(CellSlice& cs, int bits, bool quiet) { + if (!cs.skip_first(bits)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_und}; + } + return true; +} + +td::RefInt256 load_int256(CellSlice& cs, int len, bool sgnd) { + td::RefInt256 x; + load_int256_q(cs, x, len, sgnd, false); + return x; +} +td::int64 load_long(CellSlice& cs, int len) { + td::int64 x; + load_long_q(cs, x, len, false); + return x; +} +td::uint64 load_ulong(CellSlice& cs, int len) { + td::uint64 x; + load_ulong_q(cs, x, len, false); + return x; +} +td::Ref load_ref(CellSlice& cs) { + td::Ref x; + load_ref_q(cs, x, false); + return x; +} +td::Ref load_maybe_ref(CellSlice& cs) { + td::Ref x; + load_maybe_ref_q(cs, x, false); + return x; +} +void check_have_bits(const CellSlice& cs, int bits) { + if (!cs.have(bits)) { + throw VmError{Excno::cell_und}; + } +} +void skip_bits(CellSlice& cs, int bits) { + skip_bits_q(cs, bits, false); +} +void end_parse(CellSlice& cs) { + if (cs.size() || cs.size_refs()) { + throw VmError{Excno::cell_und, "extra data remaining in deserialized cell"}; + } +} + +bool store_int256(CellBuilder& cb, const td::RefInt256& x, int len, bool sgnd, bool quiet) { + if (!cb.can_extend_by(len)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_ov}; + } + if (!x->fits_bits(len, sgnd)) { + if (quiet) { + return false; + } + throw VmError{Excno::range_chk}; + } + cb.store_int256(*x, len, sgnd); + return true; +} +bool store_long(CellBuilder& cb, td::int64 x, int len, bool quiet) { + CHECK(len > 0); + if (!cb.can_extend_by(len)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_ov}; + } + if (len < 64 && (x < td::int64(std::numeric_limits::max() << (len - 1)) || x >= (1LL << (len - 1)))) { + if (quiet) { + return false; + } + throw VmError{Excno::range_chk}; + } + if (len > 64) { + cb.store_bits_same(len - 64, x < 0); + len = 64; + } + cb.store_long(x, len); + return true; +} +bool store_ulong(CellBuilder& cb, td::uint64 x, int len, bool quiet) { + CHECK(len > 0); + if (!cb.can_extend_by(len)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_ov}; + } + if (len < 64 && x >= (1ULL << len)) { + if (quiet) { + return false; + } + throw VmError{Excno::range_chk}; + } + if (len > 64) { + cb.store_zeroes(len - 64); + len = 64; + } + cb.store_long(x, len); + return true; +} +bool store_ref(CellBuilder& cb, td::Ref x, bool quiet) { + if (!cb.store_ref_bool(std::move(x))) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_ov}; + } + return true; +} +bool store_maybe_ref(CellBuilder& cb, td::Ref x, bool quiet) { + if (!cb.store_maybe_ref(std::move(x))) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_ov}; + } + return true; +} +bool store_slice(CellBuilder& cb, const CellSlice& cs, bool quiet) { + if (!cell_builder_add_slice_bool(cb, cs)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_ov}; + } + return true; +} + +} // namespace util + } // namespace vm diff --git a/crypto/vm/cellops.h b/crypto/vm/cellops.h index 1c08d8e3..0fd62854 100644 --- a/crypto/vm/cellops.h +++ b/crypto/vm/cellops.h @@ -23,12 +23,42 @@ namespace vm { class OpcodeTable; -void register_cell_ops(OpcodeTable &cp0); +void register_cell_ops(OpcodeTable& cp0); -std::string dump_push_ref(CellSlice &cs, unsigned args, int pfx_bits, std::string name); -int compute_len_push_ref(const CellSlice &cs, unsigned args, int pfx_bits); +std::string dump_push_ref(CellSlice& cs, unsigned args, int pfx_bits, std::string name); +int compute_len_push_ref(const CellSlice& cs, unsigned args, int pfx_bits); -std::string dump_push_ref2(CellSlice &cs, unsigned args, int pfx_bits, std::string name); -int compute_len_push_ref2(const CellSlice &cs, unsigned args, int pfx_bits); +std::string dump_push_ref2(CellSlice& cs, unsigned args, int pfx_bits, std::string name); +int compute_len_push_ref2(const CellSlice& cs, unsigned args, int pfx_bits); + +namespace util { + +// "_q" functions throw on error if not quiet, return false if quiet (leaving cs unchanged) +bool load_int256_q(CellSlice& cs, td::RefInt256& res, int len, bool sgnd, bool quiet); +bool load_long_q(CellSlice& cs, td::int64& res, int len, bool quiet); +bool load_ulong_q(CellSlice& cs, td::uint64& res, int len, bool quiet); +bool load_ref_q(CellSlice& cs, td::Ref& res, bool quiet); +bool load_maybe_ref_q(CellSlice& cs, td::Ref& res, bool quiet); +bool skip_bits_q(CellSlice& cs, int bits, bool quiet); + +// Non-"_q" functions throw on error +td::RefInt256 load_int256(CellSlice& cs, int len, bool sgnd); +td::int64 load_long(CellSlice& cs, int len); +td::uint64 load_ulong(CellSlice& cs, int len); +td::Ref load_ref(CellSlice& cs); +td::Ref load_maybe_ref(CellSlice& cs); +void check_have_bits(const CellSlice& cs, int bits); +void skip_bits(CellSlice& cs, int bits); +void end_parse(CellSlice& cs); + +// store_... functions throw on error if not quiet, return false if quiet (leaving cb unchanged) +bool store_int256(CellBuilder& cb, const td::RefInt256& x, int len, bool sgnd, bool quiet = false); +bool store_long(CellBuilder& cb, td::int64 x, int len, bool quiet = false); +bool store_ulong(CellBuilder& cb, td::uint64 x, int len, bool quiet = false); +bool store_ref(CellBuilder& cb, td::Ref x, bool quiet = false); +bool store_maybe_ref(CellBuilder& cb, td::Ref x, bool quiet = false); +bool store_slice(CellBuilder& cb, const CellSlice& cs, bool quiet = false); + +} // namespace util } // namespace vm diff --git a/crypto/vm/memo.cpp b/crypto/vm/memo.cpp index 576f28f1..015bab6d 100644 --- a/crypto/vm/memo.cpp +++ b/crypto/vm/memo.cpp @@ -18,6 +18,7 @@ */ #include "vm/memo.h" #include "vm/excno.hpp" +#include "vm/vm.h" namespace vm { using td::Ref; @@ -30,4 +31,18 @@ bool FakeVmStateLimits::register_op(int op_units) { return ok; } +Ref DummyVmState::load_library(td::ConstBitPtr hash) { + std::unique_ptr tmp_ctx; + // install temporary dummy vm state interface to prevent charging for cell load operations during library lookup + VmStateInterface::Guard guard{global_version >= 4 ? tmp_ctx.get() : VmStateInterface::get()}; + for (const auto& lib_collection : libraries) { + auto lib = lookup_library_in(hash, lib_collection); + if (lib.not_null()) { + return lib; + } + } + missing_library = td::Bits256{hash}; + return {}; +} + } // namespace vm diff --git a/crypto/vm/memo.h b/crypto/vm/memo.h index 3aee39a6..db6dc8e2 100644 --- a/crypto/vm/memo.h +++ b/crypto/vm/memo.h @@ -20,6 +20,7 @@ #include "common/refcnt.hpp" #include "vm/cells.h" #include "vm/vmstate.h" +#include "td/utils/optional.h" namespace vm { using td::Ref; @@ -34,4 +35,23 @@ class FakeVmStateLimits : public VmStateInterface { bool register_op(int op_units = 1) override; }; +class DummyVmState : public VmStateInterface { + public: + explicit DummyVmState(std::vector> libraries, int global_version = ton::SUPPORTED_VERSION) + : libraries(std::move(libraries)), global_version(global_version) { + } + Ref load_library(td::ConstBitPtr hash) override; + int get_global_version() const override { + return global_version; + } + td::optional get_missing_library() const { + return missing_library; + } + + private: + std::vector> libraries; + int global_version; + td::optional missing_library; +}; + } // namespace vm diff --git a/crypto/vm/tonops.cpp b/crypto/vm/tonops.cpp index 9ce7fe9c..4b2d1734 100644 --- a/crypto/vm/tonops.cpp +++ b/crypto/vm/tonops.cpp @@ -124,7 +124,7 @@ static const StackEntry& get_param(VmState* st, unsigned idx) { } // ConfigParams: 18 (only one entry), 19, 20, 21, 24, 25, 43 -static td::Ref get_unpacked_config_param(VmState* st, unsigned idx) { +static td::Ref get_unpacked_config_tuple(VmState* st) { auto tuple = st->get_c7(); auto t1 = tuple_index(tuple, 0).as_tuple_range(255); if (t1.is_null()) { @@ -134,7 +134,7 @@ static td::Ref get_unpacked_config_param(VmState* st, unsigned idx) { if (t2.is_null()) { throw VmError{Excno::type_chk, "intermediate value is not a tuple"}; } - return tuple_index(t2, idx).as_slice(); + return t2; } int exec_get_param(VmState* st, unsigned idx, const char* name) { @@ -249,7 +249,7 @@ int exec_get_prev_blocks_info(VmState* st, unsigned idx, const char* name) { int exec_get_global_id(VmState* st) { VM_LOG(st) << "execute GLOBALID"; if (st->get_global_version() >= 6) { - Ref cs = get_unpacked_config_param(st, 1); + Ref cs = tuple_index(get_unpacked_config_tuple(st), 1).as_slice(); if (cs.is_null()) { throw VmError{Excno::type_chk, "intermediate value is not a slice"}; } @@ -276,36 +276,12 @@ int exec_get_global_id(VmState* st) { return 0; } -static block::GasLimitsPrices get_gas_prices(VmState* st, bool is_masterchain) { - Ref cs = get_unpacked_config_param(st, is_masterchain ? 2 : 3); - if (cs.is_null()) { - throw VmError{Excno::type_chk, "intermediate value is not a slice"}; - } - auto r_prices = block::Config::do_get_gas_limits_prices(*cs, is_masterchain ? 20 : 21); - if (r_prices.is_error()) { - throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; - } - return r_prices.move_as_ok(); -} - -static block::MsgPrices get_msg_prices(VmState* st, bool is_masterchain) { - Ref cs = get_unpacked_config_param(st, is_masterchain ? 4 : 5); - if (cs.is_null()) { - throw VmError{Excno::type_chk, "intermediate value is not a slice"}; - } - auto r_prices = block::Config::do_get_msg_prices(*cs, is_masterchain ? 24 : 25); - if (r_prices.is_error()) { - throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; - } - return r_prices.move_as_ok(); -} - int exec_get_gas_fee(VmState* st) { VM_LOG(st) << "execute GETGASFEE"; Stack& stack = st->get_stack(); bool is_masterchain = stack.pop_bool(); td::uint64 gas = stack.pop_long_range(std::numeric_limits::max(), 0); - block::GasLimitsPrices prices = get_gas_prices(st, is_masterchain); + block::GasLimitsPrices prices = util::get_gas_prices(get_unpacked_config_tuple(st), is_masterchain); stack.push_int(prices.compute_gas_price(gas)); return 0; } @@ -317,27 +293,9 @@ int exec_get_storage_fee(VmState* st) { td::int64 delta = stack.pop_long_range(std::numeric_limits::max(), 0); td::uint64 bits = stack.pop_long_range(std::numeric_limits::max(), 0); td::uint64 cells = stack.pop_long_range(std::numeric_limits::max(), 0); - Ref cs = get_unpacked_config_param(st, 0); - if (cs.is_null()) { - // null means tat no StoragePrices is active, so the price is 0 - stack.push_smallint(0); - return 0; - } - auto r_prices = block::Config::do_get_one_storage_prices(*cs); - if (r_prices.is_error()) { - throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; - } - block::StoragePrices prices = r_prices.move_as_ok(); - td::RefInt256 total; - if (is_masterchain) { - total = td::make_refint(cells) * prices.mc_cell_price; - total += td::make_refint(bits) * prices.mc_bit_price; - } else { - total = td::make_refint(cells) * prices.cell_price; - total += td::make_refint(bits) * prices.bit_price; - } - total *= delta; - stack.push_int(td::rshift(total, 16, 1)); + td::optional maybe_prices = + util::get_storage_prices(get_unpacked_config_tuple(st)); + stack.push_int(util::calculate_storage_fee(maybe_prices, is_masterchain, delta, bits, cells)); return 0; } @@ -347,7 +305,7 @@ int exec_get_forward_fee(VmState* st) { bool is_masterchain = stack.pop_bool(); td::uint64 bits = stack.pop_long_range(std::numeric_limits::max(), 0); td::uint64 cells = stack.pop_long_range(std::numeric_limits::max(), 0); - block::MsgPrices prices = get_msg_prices(st, is_masterchain); + block::MsgPrices prices = util::get_msg_prices(get_unpacked_config_tuple(st), is_masterchain); stack.push_int(prices.compute_fwd_fees256(cells, bits)); return 0; } @@ -355,7 +313,7 @@ int exec_get_forward_fee(VmState* st) { int exec_get_precompiled_gas(VmState* st) { VM_LOG(st) << "execute GETPRECOMPILEDGAS"; Stack& stack = st->get_stack(); - stack.push_null(); + stack.push(get_param(st, 16)); return 0; } @@ -367,7 +325,7 @@ int exec_get_original_fwd_fee(VmState* st) { if (fwd_fee->sgn() < 0) { throw VmError{Excno::range_chk, "fwd_fee is negative"}; } - block::MsgPrices prices = get_msg_prices(st, is_masterchain); + block::MsgPrices prices = util::get_msg_prices(get_unpacked_config_tuple(st), is_masterchain); stack.push_int(td::muldiv(fwd_fee, td::make_refint(1 << 16), td::make_refint((1 << 16) - prices.first_frac))); return 0; } @@ -377,7 +335,7 @@ int exec_get_gas_fee_simple(VmState* st) { Stack& stack = st->get_stack(); bool is_masterchain = stack.pop_bool(); td::uint64 gas = stack.pop_long_range(std::numeric_limits::max(), 0); - block::GasLimitsPrices prices = get_gas_prices(st, is_masterchain); + block::GasLimitsPrices prices = util::get_gas_prices(get_unpacked_config_tuple(st), is_masterchain); stack.push_int(td::rshift(td::make_refint(prices.gas_price) * gas, 16, 1)); return 0; } @@ -388,7 +346,7 @@ int exec_get_forward_fee_simple(VmState* st) { bool is_masterchain = stack.pop_bool(); td::uint64 bits = stack.pop_long_range(std::numeric_limits::max(), 0); td::uint64 cells = stack.pop_long_range(std::numeric_limits::max(), 0); - block::MsgPrices prices = get_msg_prices(st, is_masterchain); + block::MsgPrices prices = util::get_msg_prices(get_unpacked_config_tuple(st), is_masterchain); stack.push_int(td::rshift(td::make_refint(prices.bit_price) * bits + td::make_refint(prices.cell_price) * cells, 16, 1)); // divide by 2^16 with ceil rounding return 0; @@ -1349,19 +1307,14 @@ int exec_load_var_integer(VmState* st, int len_bits, bool sgnd, bool quiet) { Stack& stack = st->get_stack(); auto csr = stack.pop_cellslice(); td::RefInt256 x; - int len; - if (!(csr.write().fetch_uint_to(len_bits, len) && csr.unique_write().fetch_int256_to(len * 8, x, sgnd))) { - if (quiet) { - stack.push_bool(false); - } else { - throw VmError{Excno::cell_und, "cannot deserialize a variable-length integer"}; - } - } else { + if (util::load_var_integer_q(csr.write(), x, len_bits, sgnd, quiet)) { stack.push_int(std::move(x)); stack.push_cellslice(std::move(csr)); if (quiet) { stack.push_bool(true); } + } else { + stack.push_bool(false); } return 0; } @@ -1376,21 +1329,13 @@ int exec_store_var_integer(VmState* st, int len_bits, bool sgnd, bool quiet) { stack.check_underflow(2); auto x = stack.pop_int(); auto cbr = stack.pop_builder(); - unsigned len = (((unsigned)x->bit_size(sgnd) + 7) >> 3); - if (len >= (1u << len_bits)) { - throw VmError{Excno::range_chk}; - } - if (!(cbr.write().store_long_bool(len, len_bits) && cbr.unique_write().store_int256_bool(*x, len * 8, sgnd))) { - if (quiet) { - stack.push_bool(false); - } else { - throw VmError{Excno::cell_ov, "cannot serialize a variable-length integer"}; - } - } else { + if (util::store_var_integer(cbr.write(), x, len_bits, sgnd, quiet)) { stack.push_builder(std::move(cbr)); if (quiet) { stack.push_bool(true); } + } else { + stack.push_bool(false); } return 0; } @@ -1433,22 +1378,17 @@ bool skip_message_addr(CellSlice& cs) { int exec_load_message_addr(VmState* st, bool quiet) { VM_LOG(st) << "execute LDMSGADDR" << (quiet ? "Q" : ""); Stack& stack = st->get_stack(); - auto csr = stack.pop_cellslice(), csr_copy = csr; - auto& cs = csr.write(); - if (!(skip_message_addr(cs) && csr_copy.write().cut_tail(cs))) { - csr.clear(); - if (quiet) { - stack.push_cellslice(std::move(csr_copy)); - stack.push_bool(false); - } else { - throw VmError{Excno::cell_und, "cannot load a MsgAddress"}; - } - } else { - stack.push_cellslice(std::move(csr_copy)); + auto csr = stack.pop_cellslice(); + td::Ref addr{true}; + if (util::load_msg_addr_q(csr.write(), addr.write(), quiet)) { + stack.push_cellslice(std::move(addr)); stack.push_cellslice(std::move(csr)); if (quiet) { stack.push_bool(true); } + } else { + stack.push_cellslice(std::move(csr)); + stack.push_bool(false); } return 0; } @@ -1747,7 +1687,7 @@ int exec_send_message(VmState* st) { bool is_masterchain = parse_addr_workchain(*my_addr) == -1 || (!ext_msg && parse_addr_workchain(*dest) == -1); td::Ref prices_cs; if (st->get_global_version() >= 6) { - prices_cs = get_unpacked_config_param(st, is_masterchain ? 4 : 5); + prices_cs = tuple_index(get_unpacked_config_tuple(st), is_masterchain ? 4 : 5).as_slice(); } else { Ref config_dict = get_param(st, 9).as_cell(); Dictionary config{config_dict, 32}; @@ -1769,7 +1709,8 @@ int exec_send_message(VmState* st) { // bits in the root cell of a message are not included in msg.bits (lump_price pays for them) td::uint64 max_cells; if (st->get_global_version() >= 6) { - auto r_size_limits_config = block::Config::do_get_size_limits_config(get_unpacked_config_param(st, 6)); + auto r_size_limits_config = + block::Config::do_get_size_limits_config(tuple_index(get_unpacked_config_tuple(st), 6).as_slice()); if (r_size_limits_config.is_error()) { throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_size_limits_config.error().message()}; } @@ -2020,4 +1961,158 @@ void register_ton_ops(OpcodeTable& cp0) { register_ton_message_ops(cp0); } +namespace util { + +bool load_var_integer_q(CellSlice& cs, td::RefInt256& res, int len_bits, bool sgnd, bool quiet) { + CellSlice cs0 = cs; + int len; + if (!(cs.fetch_uint_to(len_bits, len) && cs.fetch_int256_to(len * 8, res, sgnd))) { + cs = std::move(cs0); + if (quiet) { + return false; + } + throw VmError{Excno::cell_und, "cannot deserialize a variable-length integer"}; + } + return true; +} +bool load_coins_q(CellSlice& cs, td::RefInt256& res, bool quiet) { + return load_var_integer_q(cs, res, 4, false, quiet); +} +bool load_msg_addr_q(CellSlice& cs, CellSlice& res, bool quiet) { + res = cs; + if (!skip_message_addr(cs)) { + cs = res; + if (quiet) { + return false; + } + throw VmError{Excno::cell_und, "cannot load a MsgAddress"}; + } + res.cut_tail(cs); + return true; +} +bool parse_std_addr_q(CellSlice cs, ton::WorkchainId& res_wc, ton::StdSmcAddress& res_addr, bool quiet) { + // Like exec_rewrite_message_addr, but for std address case + std::vector tuple; + if (!(parse_message_addr(cs, tuple) && cs.empty_ext())) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_und, "cannot parse a MsgAddress"}; + } + int t = (int)std::move(tuple[0]).as_int()->to_long(); + if (t != 2 && t != 3) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_und, "cannot parse a MsgAddressInt"}; + } + auto addr = std::move(tuple[3]).as_slice(); + auto prefix = std::move(tuple[1]).as_slice(); + if (addr->size() != 256) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_und, "MsgAddressInt is not a standard 256-bit address"}; + } + res_wc = (int)tuple[2].as_int()->to_long(); + CHECK(addr->prefetch_bits_to(res_addr) && + (prefix.is_null() || prefix->prefetch_bits_to(res_addr.bits(), prefix->size()))); + return true; +} + +td::RefInt256 load_var_integer(CellSlice& cs, int len_bits, bool sgnd) { + td::RefInt256 x; + load_var_integer_q(cs, x, len_bits, sgnd, false); + return x; +} +td::RefInt256 load_coins(CellSlice& cs) { + return load_var_integer(cs, 4, false); +} +CellSlice load_msg_addr(CellSlice& cs) { + CellSlice addr; + load_msg_addr_q(cs, addr, false); + return addr; +} +std::pair parse_std_addr(CellSlice cs) { + std::pair res; + parse_std_addr_q(std::move(cs), res.first, res.second, false); + return res; +} + +bool store_var_integer(CellBuilder& cb, const td::RefInt256& x, int len_bits, bool sgnd, bool quiet) { + unsigned len = (((unsigned)x->bit_size(sgnd) + 7) >> 3); + if (len >= (1u << len_bits)) { + throw VmError{Excno::range_chk}; // throw even if quiet + } + if (!cb.can_extend_by(len_bits + len * 8)) { + if (quiet) { + return false; + } + throw VmError{Excno::cell_ov, "cannot serialize a variable-length integer"}; + } + CHECK(cb.store_long_bool(len, len_bits) && cb.store_int256_bool(*x, len * 8, sgnd)); + return true; +} +bool store_coins(CellBuilder& cb, const td::RefInt256& x, bool quiet) { + return store_var_integer(cb, x, 4, false, quiet); +} + +block::GasLimitsPrices get_gas_prices(const Ref& unpacked_config, bool is_masterchain) { + Ref cs = tuple_index(unpacked_config, is_masterchain ? 2 : 3).as_slice(); + if (cs.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a slice"}; + } + auto r_prices = block::Config::do_get_gas_limits_prices(*cs, is_masterchain ? 20 : 21); + if (r_prices.is_error()) { + throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; + } + return r_prices.move_as_ok(); +} + +block::MsgPrices get_msg_prices(const Ref& unpacked_config, bool is_masterchain) { + Ref cs = tuple_index(unpacked_config, is_masterchain ? 4 : 5).as_slice(); + if (cs.is_null()) { + throw VmError{Excno::type_chk, "intermediate value is not a slice"}; + } + auto r_prices = block::Config::do_get_msg_prices(*cs, is_masterchain ? 24 : 25); + if (r_prices.is_error()) { + throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; + } + return r_prices.move_as_ok(); +} + +td::optional get_storage_prices(const Ref& unpacked_config) { + Ref cs = tuple_index(unpacked_config, 0).as_slice(); + if (cs.is_null()) { + // null means tat no StoragePrices is active, so the price is 0 + return {}; + } + auto r_prices = block::Config::do_get_one_storage_prices(*cs); + if (r_prices.is_error()) { + throw VmError{Excno::cell_und, PSTRING() << "cannot parse config: " << r_prices.error().message()}; + } + return r_prices.move_as_ok(); +} + +td::RefInt256 calculate_storage_fee(const td::optional& maybe_prices, bool is_masterchain, + td::uint64 delta, td::uint64 bits, td::uint64 cells) { + if (!maybe_prices) { + // no StoragePrices is active, so the price is 0 + return td::zero_refint(); + } + const block::StoragePrices& prices = maybe_prices.value(); + td::RefInt256 total; + if (is_masterchain) { + total = td::make_refint(cells) * prices.mc_cell_price; + total += td::make_refint(bits) * prices.mc_bit_price; + } else { + total = td::make_refint(cells) * prices.cell_price; + total += td::make_refint(bits) * prices.bit_price; + } + total *= delta; + return td::rshift(total, 16, 1); +} + +} // namespace util + } // namespace vm diff --git a/crypto/vm/tonops.h b/crypto/vm/tonops.h index 5b3e14d9..bbac078f 100644 --- a/crypto/vm/tonops.h +++ b/crypto/vm/tonops.h @@ -17,6 +17,9 @@ Copyright 2017-2020 Telegram Systems LLP */ #pragma once +#include "vm/vm.h" +#include "ton/ton-types.h" +#include "mc-config.h" namespace vm { @@ -24,4 +27,30 @@ class OpcodeTable; void register_ton_ops(OpcodeTable& cp0); +namespace util { + +// "_q" functions throw on error if not quiet, return false if quiet (leaving cs unchanged) +bool load_var_integer_q(CellSlice& cs, td::RefInt256& res, int len_bits, bool sgnd, bool quiet); +bool load_coins_q(CellSlice& cs, td::RefInt256& res, bool quiet); +bool load_msg_addr_q(CellSlice& cs, CellSlice& res, bool quiet); +bool parse_std_addr_q(CellSlice cs, ton::WorkchainId& res_wc, ton::StdSmcAddress& res_addr, bool quiet); + +// Non-"_q" functions throw on error +td::RefInt256 load_var_integer(CellSlice& cs, int len_bits, bool sgnd); +td::RefInt256 load_coins(CellSlice& cs); +CellSlice load_msg_addr(CellSlice& cs); +std::pair parse_std_addr(CellSlice cs); + +// store_... functions throw on error if not quiet, return false if quiet (leaving cb unchanged) +bool store_var_integer(CellBuilder& cb, const td::RefInt256& x, int len_bits, bool sgnd, bool quiet = false); +bool store_coins(CellBuilder& cb, const td::RefInt256& x, bool quiet = false); + +block::GasLimitsPrices get_gas_prices(const td::Ref& unpacked_config, bool is_masterchain); +block::MsgPrices get_msg_prices(const td::Ref& unpacked_config, bool is_masterchain); +td::optional get_storage_prices(const td::Ref& unpacked_config); +td::RefInt256 calculate_storage_fee(const td::optional& maybe_prices, bool is_masterchain, + td::uint64 delta, td::uint64 bits, td::uint64 cells); + +} // namespace util + } // namespace vm diff --git a/doc/GlobalVersions.md b/doc/GlobalVersions.md index 7e3b4ce9..6c176552 100644 --- a/doc/GlobalVersions.md +++ b/doc/GlobalVersions.md @@ -58,7 +58,7 @@ See [this post](https://t.me/tonstatus/88) for details. ## Version 6 ### c7 tuple -**c7** tuple extended from 14 to 16 elements: +**c7** tuple extended from 14 to 17 elements: * **14**: tuple that contains some config parameters as cell slices. If the parameter is absent from the config, the value is null. Asm opcode: `UNPACKEDCONFIGTUPLE`. * **0**: `StoragePrices` from `ConfigParam 18`. Not the whole dict, but only the one StoragePrices entry (one which corresponds to the current time). * **1**: `ConfigParam 19` (global id). @@ -68,6 +68,7 @@ See [this post](https://t.me/tonstatus/88) for details. * **5**: `ConfigParam 25` (fwd fees). * **6**: `ConfigParam 43` (size limits). * **15**: "[due payment](https://github.com/ton-blockchain/ton/blob/8a9ff339927b22b72819c5125428b70c406da631/crypto/block/block.tlb#L237)" - current debt for storage fee (nanotons). Asm opcode: `DUEPAYMENT`. +* **16**: "precompiled gas usage" - gas usage for the current contract if it is precompiled (see `ConfigParam 45`), `null` otherwise. Asm opcode: `GETPRECOMPILEDGAS`. ### New TVM instructions @@ -75,7 +76,7 @@ See [this post](https://t.me/tonstatus/88) for details. * `GETGASFEE` (`gas_used is_mc - price`) - calculates gas fee. * `GETSTORAGEFEE` (`cells bits seconds is_mc - price`) - calculates storage fees (only current StoragePrices entry is used). * `GETFORWARDFEE` (`cells bits is_mc - price`) - calculates forward fee. -* `GETPRECOMPILEDGAS` (`- null`) - reserved, currently returns `null`. +* `GETPRECOMPILEDGAS` (`- x`) - returns gas usage for the current contract if it is precompiled, `null` otherwise. * `GETORIGINALFWDFEE` (`fwd_fee is_mc - orig_fwd_fee`) - calculate `fwd_fee * 2^16 / first_frac`. Can be used to get the original `fwd_fee` of the message. * `GETGASFEESIMPLE` (`gas_used is_mc - price`) - same as `GETGASFEE`, but without flat price (just `(gas_used * price) / 2^16`). * `GETFORWARDFEESIMPLE` (`cells bits is_mc - price`) - same as `GETFORWARDFEE`, but without lump price (just `(bits*bit_price + cells*cell_price) / 2^16`). diff --git a/validator-engine/validator-engine.cpp b/validator-engine/validator-engine.cpp index b8d428f3..96103cd0 100644 --- a/validator-engine/validator-engine.cpp +++ b/validator-engine/validator-engine.cpp @@ -72,6 +72,7 @@ #include "block-auto.h" #include "block-parse.h" #include "common/delay.h" +#include "block/precompiled-smc/PrecompiledSmartContract.h" Config::Config() { out_port = 3278; @@ -3812,6 +3813,9 @@ int main(int argc, char *argv[]) { acts.push_back([&x, v]() { td::actor::send_closure(x, &ValidatorEngine::set_archive_preload_period, v); }); return td::Status::OK(); }); + p.add_option('\0', "enable-precompiled-smc", + "enable exectuion of precompiled contracts (experimental, disabled by default)", + []() { block::precompiled::set_precompiled_execution_enabled(true); }); auto S = p.run(argc, argv); if (S.is_error()) { LOG(ERROR) << "failed to parse options: " << S.move_as_error(); diff --git a/validator/impl/validate-query.cpp b/validator/impl/validate-query.cpp index 44b49226..d925fce6 100644 --- a/validator/impl/validate-query.cpp +++ b/validator/impl/validate-query.cpp @@ -965,6 +965,7 @@ bool ValidateQuery::fetch_config_params() { } compute_phase_cfg_.suspended_addresses = config_->get_suspended_addresses(now_); compute_phase_cfg_.size_limits = size_limits; + compute_phase_cfg_.precompiled_contracts = config_->get_precompiled_contracts_config(); } { // compute action_phase_cfg From 0d8abea5344507670dce91f328aa2b8c185c0211 Mon Sep 17 00:00:00 2001 From: "Dr. Awesome Doge" Date: Wed, 6 Mar 2024 22:15:49 +0800 Subject: [PATCH 102/351] Add TON Research Forum (#919) * Add TON Research Forum * Update README.md --------- Co-authored-by: EmelyanenkoK --- README.md | 46 +++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 653f2f83..96516d44 100644 --- a/README.md +++ b/README.md @@ -10,25 +10,33 @@ ## -[![TON Overflow Group][ton-overflow-badge]][ton-overflow-url] -[![Stack Overflow Group][stack-overflow-badge]][stack-overflow-url] -[![Telegram Community Chat][telegram-tondev-badge]][telegram-tondev-url] -[![Telegram Community Group][telegram-community-badge]][telegram-community-url] -[![Telegram Foundation Group][telegram-foundation-badge]][telegram-foundation-url] -[![Twitter Group][twitter-badge]][twitter-url] -[telegram-foundation-badge]: https://img.shields.io/badge/TON%20Foundation-2CA5E0?logo=telegram&logoColor=white&style=flat -[telegram-community-badge]: https://img.shields.io/badge/TON%20Community-2CA5E0?logo=telegram&logoColor=white&style=flat -[telegram-tondev-badge]: https://img.shields.io/badge/chat-TONDev-2CA5E0?logo=telegram&logoColor=white&style=flat -[telegram-foundation-url]: https://t.me/tonblockchain -[telegram-community-url]: https://t.me/toncoin -[telegram-tondev-url]: https://t.me/tondev_eng -[twitter-badge]: https://img.shields.io/twitter/follow/ton_blockchain -[twitter-url]: https://twitter.com/ton_blockchain -[stack-overflow-badge]: https://img.shields.io/badge/-Stack%20Overflow-FE7A16?style=flat&logo=stack-overflow&logoColor=white -[stack-overflow-url]: https://stackoverflow.com/questions/tagged/ton -[ton-overflow-badge]: https://img.shields.io/badge/-TON%20Overflow-FE7A16?style=flat&logo=stack-overflow&logoColor=white -[ton-overflow-url]: https://answers.ton.org +

    + + Ton Research + + + Telegram Community Group + + + Telegram Foundation Group + + + Telegram Community Chat + +

    + +

    + + Twitter Group + + + TON Overflow Group + + + Stack Overflow Group + +

    @@ -148,4 +156,4 @@ More examples for other platforms can be found under `assembly/nix`. ## Running tests -Tests are executed by running `ctest` in the build directory. See `doc/Tests.md` for more information. \ No newline at end of file +Tests are executed by running `ctest` in the build directory. See `doc/Tests.md` for more information. From 132a6030f97c2d4a5b389920720f06f40ac0b34e Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Mon, 11 Mar 2024 09:45:12 +0300 Subject: [PATCH 103/351] Add changelog --- Changelog.md | 5 +++++ recent_changelog.md | 17 +++-------------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/Changelog.md b/Changelog.md index 81db2c43..318128c2 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,8 @@ +## 2024.03 Update + +1. Preparatory (not enabled yet) code for pre-compiled smart-contract. +2. Minor fixes for fee-related opcodes. + ## 2024.02 Update 1. Improvement of validator synchronisation: diff --git a/recent_changelog.md b/recent_changelog.md index e4ed12fc..e741a328 100644 --- a/recent_changelog.md +++ b/recent_changelog.md @@ -1,17 +1,6 @@ -## 2024.02 Update +## 2024.03 Update -1. Improvement of validator synchronisation: - * Better handling of block broadcasts -> faster sync - * Additional separate overlay among validators as second option for synchronisation -2. Improvements in LS: - * c7 and library context is fully filled up for server-side rungetmethod - * Cache for runmethods and successfull external messages - * Logging of LS requests statistic -3. Precise control of open files: - * almost instantaneous validator start - * `--max-archive-fd` option - * autoremoval of not used temp archive files - * `--archive-preload-period` option -4. Preparatory (not enabled yet) code for addition on new TVM instructions for cheaper fee calculation onchain. +1. Preparatory (not enabled yet) code for pre-compiled smart-contract. +2. Minor fixes for fee-related opcodes. From 79a75d575ee970b39231ef9eef4772c12788477e Mon Sep 17 00:00:00 2001 From: neodix42 Date: Tue, 12 Mar 2024 17:11:05 +0100 Subject: [PATCH 104/351] Add standalone emulator library to release (#917) * Add standalone emulator.so/dylyib/dll to release artifacts * sync emulator names --- .github/workflows/create-release.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 3d248cfe..50d2661b 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -191,6 +191,14 @@ jobs: asset_name: tonlibjson.dll tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Windows 2019 single artifact - libemulator + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: artifacts/ton-win-binaries/emulator.dll + asset_name: libemulator.dll + tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Windows 2019 single artifact - tonlib-cli uses: svenstaro/upload-release-action@v2 with: @@ -273,6 +281,14 @@ jobs: asset_name: tonlibjson-mac-x86-64.dylib tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Mac x86-64 single artifact - libemulator + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: artifacts/ton-x86_64-macos-binaries/libemulator.dylib + asset_name: libemulator-mac-x86-64.dylib + tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Mac x86-64 single artifact - tonlib-cli uses: svenstaro/upload-release-action@v2 with: @@ -355,6 +371,14 @@ jobs: asset_name: tonlibjson-linux-x86_64.so tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Linux x86-64 single artifact - libemulator + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: artifacts/ton-x86_64-linux-binaries/libemulator.so + asset_name: libemulator-linux-x86_64.so + tag: ${{ steps.tag.outputs.TAG }} + - name: Upload Linux x86-64 single artifact - tonlib-cli uses: svenstaro/upload-release-action@v2 with: From 4969176ec9224ea63499f9e6ef0ad92bee2104ea Mon Sep 17 00:00:00 2001 From: neodix42 Date: Tue, 12 Mar 2024 17:11:42 +0100 Subject: [PATCH 105/351] Improve windows build (#921) * fix windows build * exclude test-bigint execution on windows --------- Co-authored-by: My Name --- assembly/cicd/jenkins/test-builds.groovy | 2 +- assembly/native/build-windows.bat | 54 ++++++++++++++---------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/assembly/cicd/jenkins/test-builds.groovy b/assembly/cicd/jenkins/test-builds.groovy index 960ac8db..7e377f0e 100644 --- a/assembly/cicd/jenkins/test-builds.groovy +++ b/assembly/cicd/jenkins/test-builds.groovy @@ -182,7 +182,7 @@ pipeline { timeout(time: 90, unit: 'MINUTES') { bat ''' copy assembly\\native\\build-windows.bat . - build-windows.bat + build-windows.bat -t ''' bat ''' cd artifacts diff --git a/assembly/native/build-windows.bat b/assembly/native/build-windows.bat index 2e3f2082..2c64e80a 100644 --- a/assembly/native/build-windows.bat +++ b/assembly/native/build-windows.bat @@ -14,24 +14,26 @@ choco feature enable -n allowEmptyChecksums echo Installing pkgconfiglite... choco install -y pkgconfiglite -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo Can't install pkgconfiglite exit /b %errorlevel% ) echo Installing ninja... choco install -y ninja -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo Can't install ninja exit /b %errorlevel% ) if not exist "zlib" ( git clone https://github.com/madler/zlib.git -cd zlib\contrib\vstudio\vc14 +cd zlib +git checkout v1.3.1 +cd contrib\vstudio\vc14 msbuild zlibstat.vcxproj /p:Configuration=ReleaseWithoutAsm /p:platform=x64 -p:PlatformToolset=v143 -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo Can't install zlib exit /b %errorlevel% ) @@ -41,14 +43,20 @@ echo Using zlib... ) if not exist "secp256k1" ( -git clone https://github.com/libbitcoin/secp256k1.git -cd secp256k1\builds\msvc\vs2017 -msbuild /p:Configuration=StaticRelease -p:PlatformToolset=v143 -p:Platform=x64 -IF errorlevel 1 ( +git clone https://github.com/bitcoin-core/secp256k1.git +cd secp256k1 +git checkout v0.3.2 +cmake -G "Visual Studio 17 2022" -A x64 -S . -B build -DSECP256K1_ENABLE_MODULE_RECOVERY=ON -DBUILD_SHARED_LIBS=OFF +IF %errorlevel% NEQ 0 ( + echo Can't configure secp256k1 + exit /b %errorlevel% +) +cmake --build build --config Release +IF %errorlevel% NEQ 0 ( echo Can't install secp256k1 exit /b %errorlevel% ) -cd ..\..\..\.. +cd .. ) else ( echo Using secp256k1... ) @@ -56,7 +64,7 @@ echo Using secp256k1... if not exist "libsodium" ( curl -Lo libsodium-1.0.18-stable-msvc.zip https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable-msvc.zip -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo Can't download libsodium exit /b %errorlevel% ) @@ -67,7 +75,7 @@ echo Using libsodium... if not exist "openssl-3.1.4" ( curl -Lo openssl-3.1.4.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/openssl-3.1.4.zip -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo Can't download OpenSSL exit /b %errorlevel% ) @@ -78,7 +86,7 @@ echo Using openssl... if not exist "libmicrohttpd-0.9.77-w32-bin" ( curl -Lo libmicrohttpd-0.9.77-w32-bin.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/libmicrohttpd-0.9.77-w32-bin.zip -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo Can't download libmicrohttpd exit /b %errorlevel% ) @@ -89,7 +97,7 @@ echo Using libmicrohttpd... if not exist "readline-5.0-1-lib" ( curl -Lo readline-5.0-1-lib.zip https://github.com/neodiX42/precompiled-openssl-win64/raw/main/readline-5.0-1-lib.zip -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo Can't download readline exit /b %errorlevel% ) @@ -110,7 +118,7 @@ cmake -GNinja -DCMAKE_BUILD_TYPE=Release ^ -DSODIUM_USE_STATIC_LIBS=1 ^ -DSECP256K1_FOUND=1 ^ -DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include ^ --DSECP256K1_LIBRARY=%root%\secp256k1\bin\x64\Release\v143\static\secp256k1.lib ^ +-DSECP256K1_LIBRARY=%root%\secp256k1\build\src\Release\libsecp256k1.lib ^ -DMHD_FOUND=1 ^ -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib ^ -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static ^ @@ -118,10 +126,12 @@ cmake -GNinja -DCMAKE_BUILD_TYPE=Release ^ -DZLIB_INCLUDE_DIR=%root%\zlib ^ -DZLIB_LIBRARIES=%root%\zlib\contrib\vstudio\vc14\x64\ZlibStatReleaseWithoutAsm\zlibstat.lib ^ -DOPENSSL_FOUND=1 ^ --DOPENSSL_INCLUDE_DIR=%root%/openssl-3.1.4/x64/include ^ --DOPENSSL_CRYPTO_LIBRARY=%root%/openssl-3.1.4/x64/lib/libcrypto_static.lib ^ +-DOPENSSL_INCLUDE_DIR=%root%\openssl-3.1.4\x64\include ^ +-DOPENSSL_CRYPTO_LIBRARY=%root%\openssl-3.1.4\x64\lib\libcrypto_static.lib ^ +-DREADLINE_INCLUDE_DIR=%root%\readline-5.0-1-lib\include ^ +-DREADLINE_LIBRARY=%root%\readline-5.0-1-lib\lib\readline.lib ^ -DCMAKE_CXX_FLAGS="/DTD_WINDOWS=1 /EHsc /bigobj" .. -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo Can't configure TON exit /b %errorlevel% ) @@ -133,7 +143,7 @@ json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-ha test-ed25519 test-ed25519-crypto test-bigint test-vm test-fift test-cells test-smartcont test-net ^ test-tdactor test-tdutils test-tonlib-offline test-adnl test-dht test-rldp test-rldp2 test-catchain ^ test-fec test-tddb test-db test-validator-session-state -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo Can't compile TON exit /b %errorlevel% ) @@ -141,14 +151,14 @@ IF errorlevel 1 ( ninja storage-daemon storage-daemon-cli blockchain-explorer fift func tonlib tonlibjson ^ tonlib-cli validator-engine lite-client pow-miner validator-engine-console generate-random-id ^ json2tlo dht-server http-proxy rldp-http-proxy adnl-proxy create-state create-hardfork emulator -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo Can't compile TON exit /b %errorlevel% ) ) copy validator-engine\validator-engine.exe test -IF errorlevel 1 ( +IF %errorlevel% NEQ 0 ( echo validator-engine.exe does not exist exit /b %errorlevel% ) @@ -156,8 +166,8 @@ IF errorlevel 1 ( IF "%1"=="-t" ( echo Running tests... REM ctest -C Release --output-on-failure -E "test-catchain|test-actors|test-validator-session-state" - ctest -C Release --output-on-failure --timeout 1800 - IF errorlevel 1 ( + ctest -C Release --output-on-failure -E "test-bigint" --timeout 1800 + IF %errorlevel% NEQ 0 ( echo Some tests failed exit /b %errorlevel% ) From fc69377f9c07b041b306efdcfb5368811815abfb Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 19 Mar 2024 15:23:34 +0300 Subject: [PATCH 106/351] Fix running VM in liteserver and tonlib (#933) Co-authored-by: SpyCheese --- crypto/smc-envelope/SmartContract.cpp | 4 +++- validator/impl/liteserver.cpp | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/crypto/smc-envelope/SmartContract.cpp b/crypto/smc-envelope/SmartContract.cpp index 13e5c70b..ce3beba9 100644 --- a/crypto/smc-envelope/SmartContract.cpp +++ b/crypto/smc-envelope/SmartContract.cpp @@ -174,7 +174,9 @@ td::Ref prepare_vm_c7(SmartContract::Args args, td::Ref cod if (args.config && args.config.value()->get_global_version() >= 6) { tuple.push_back(args.config.value()->get_unpacked_config_tuple(now)); // unpacked_config_tuple tuple.push_back(td::zero_refint()); // due_payment - tuple.push_back(vm::StackEntry()); // precompiled_gas_usage:Integer + // precomiled_gas_usage:(Maybe Integer) + auto precompiled = args.config.value()->get_precompiled_contracts_config().get_contract(code->get_hash().bits()); + tuple.push_back(precompiled ? td::make_refint(precompiled.value().gas_usage) : vm::StackEntry()); } auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); //LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple).to_string(); diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index 9b8cb300..7ff2345a 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -1333,8 +1333,8 @@ static td::Ref prepare_vm_c7(ton::UnixTime now, ton::LogicalTime lt, td::make_refint(lt), // trans_lt:Integer std::move(rand_seed_int), // rand_seed:Integer balance.as_vm_tuple(), // balance_remaining:[Integer (Maybe Cell)] - my_addr, // myself:MsgAddressInt - config ? config->get_root_cell() : vm::StackEntry() // global_config:(Maybe Cell) ] = SmartContractInfo; + my_addr, // myself:MsgAddressInt + config ? config->get_root_cell() : vm::StackEntry() // global_config:(Maybe Cell) ] = SmartContractInfo; }; if (config && config->get_global_version() >= 4) { tuple.push_back(my_code); // code:Cell @@ -1350,6 +1350,9 @@ static td::Ref prepare_vm_c7(ton::UnixTime now, ton::LogicalTime lt, if (config && config->get_global_version() >= 6) { tuple.push_back(config->get_unpacked_config_tuple(now)); // unpacked_config_tuple:[...] tuple.push_back(due_payment); // due_payment:Integer + // precomiled_gas_usage:(Maybe Integer) + auto precompiled = config->get_precompiled_contracts_config().get_contract(my_code->get_hash().bits()); + tuple.push_back(precompiled ? td::make_refint(precompiled.value().gas_usage) : vm::StackEntry()); } auto tuple_ref = td::make_cnt_ref>(std::move(tuple)); LOG(DEBUG) << "SmartContractInfo initialized with " << vm::StackEntry(tuple_ref).to_string(); @@ -1430,6 +1433,7 @@ void LiteQuery::finish_runSmcMethod(td::BufferSlice shard_proof, td::BufferSlice auto c7 = prepare_vm_c7(gen_utime, gen_lt, td::make_ref(acc.addr->clone()), balance, config.get(), std::move(code), due_payment); vm.set_c7(c7); // tuple with SmartContractInfo + vm.set_global_version(config->get_global_version()); // vm.incr_stack_trace(1); // enable stack dump after each step LOG(INFO) << "starting VM to run GET-method of smart contract " << acc_workchain_ << ":" << acc_addr_.to_hex(); // **** RUN VM **** From 69de1cb62197a9a9271e52323593b753bbdefdb8 Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Tue, 19 Mar 2024 13:24:15 +0100 Subject: [PATCH 107/351] Fix linker error: undefined reference to LiteServerCacheImpl::MAX_CACHE_SIZE (#930) Co-authored-by: EmelyanenkoK --- validator/impl/liteserver-cache.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validator/impl/liteserver-cache.hpp b/validator/impl/liteserver-cache.hpp index 5318371f..20beca91 100644 --- a/validator/impl/liteserver-cache.hpp +++ b/validator/impl/liteserver-cache.hpp @@ -110,7 +110,7 @@ class LiteServerCacheImpl : public LiteServerCache { std::set send_message_cache_; size_t send_message_error_cnt_ = 0; - static const size_t MAX_CACHE_SIZE = 64 << 20; + static constexpr size_t MAX_CACHE_SIZE = 64 << 20; }; } // namespace ton::validator From dd5540d69e25f08a1c63760d3afb033208d9c99b Mon Sep 17 00:00:00 2001 From: Oleg Baranov Date: Tue, 19 Mar 2024 16:26:02 +0400 Subject: [PATCH 108/351] Single call optimized runGetMethod emulator (#920) * TVM Emulator optimized output method * TVM Emulator single call version * Fixed tvm_emulator export, changed to tvm_emulator_emulate * Removed imports * Set C7 from outside * Removed tvm_emulator_run_get_method_optimized * Renamed tvm_emulator_emulate to tvm_emulator_emulate_run_method --- emulator/emulator-extern.cpp | 60 +++++++++++++++++++++++++++++++++++ emulator/emulator-extern.h | 10 ++++++ emulator/emulator_export_list | 1 + emulator/tvm-emulator.hpp | 4 +++ 4 files changed, 75 insertions(+) diff --git a/emulator/emulator-extern.cpp b/emulator/emulator-extern.cpp index f8e2f724..6d38ae59 100644 --- a/emulator/emulator-extern.cpp +++ b/emulator/emulator-extern.cpp @@ -543,6 +543,66 @@ const char *tvm_emulator_run_get_method(void *tvm_emulator, int method_id, const return strdup(jb.string_builder().as_cslice().c_str()); } +const char *tvm_emulator_emulate_run_method(uint32_t len, const char *params_boc, int64_t gas_limit) { + auto params_cell = vm::std_boc_deserialize(td::Slice(params_boc, len)); + if (params_cell.is_error()) { + return nullptr; + } + auto params_cs = vm::load_cell_slice(params_cell.move_as_ok()); + auto code = params_cs.fetch_ref(); + auto data = params_cs.fetch_ref(); + + auto stack_cs = vm::load_cell_slice(params_cs.fetch_ref()); + auto params = vm::load_cell_slice(params_cs.fetch_ref()); + auto c7_cs = vm::load_cell_slice(params.fetch_ref()); + auto libs = vm::Dictionary(params.fetch_ref(), 256); + + auto method_id = params_cs.fetch_long(32); + + td::Ref stack; + if (!vm::Stack::deserialize_to(stack_cs, stack)) { + return nullptr; + } + + td::Ref c7; + if (!vm::Stack::deserialize_to(c7_cs, c7)) { + return nullptr; + } + + auto emulator = new emulator::TvmEmulator(code, data); + emulator->set_vm_verbosity_level(0); + emulator->set_gas_limit(gas_limit); + emulator->set_c7_raw(c7->fetch(0).as_tuple()); + if (libs.is_empty()) { + emulator->set_libraries(std::move(libs)); + } + auto result = emulator->run_get_method(int(method_id), stack); + delete emulator; + + vm::CellBuilder stack_cb; + if (!result.stack->serialize(stack_cb)) { + return nullptr; + } + + vm::CellBuilder cb; + cb.store_long(result.code, 32); + cb.store_long(result.gas_used, 64); + cb.store_ref(stack_cb.finalize()); + + auto ser = vm::std_boc_serialize(cb.finalize()); + if (!ser.is_ok()) { + return nullptr; + } + auto sok = ser.move_as_ok(); + + auto sz = uint32_t(sok.size()); + char* rn = (char*)malloc(sz + 4); + memcpy(rn, &sz, 4); + memcpy(rn+4, sok.data(), sz); + + return rn; +} + const char *tvm_emulator_send_external_message(void *tvm_emulator, const char *message_body_boc) { auto message_body_cell = boc_b64_to_cell(message_body_boc); if (message_body_cell.is_error()) { diff --git a/emulator/emulator-extern.h b/emulator/emulator-extern.h index ce920f98..b418e5b0 100644 --- a/emulator/emulator-extern.h +++ b/emulator/emulator-extern.h @@ -213,6 +213,16 @@ EMULATOR_EXPORT bool tvm_emulator_set_debug_enabled(void *tvm_emulator, bool deb */ EMULATOR_EXPORT const char *tvm_emulator_run_get_method(void *tvm_emulator, int method_id, const char *stack_boc); +/** + * @brief Optimized version of "run get method" with all passed parameters in a single call + * @param len Length of params_boc buffer + * @param params_boc BoC serialized parameters, scheme: request$_ code:^Cell data:^Cell stack:^VmStack params:^[c7:^VmStack libs:^Cell] method_id:(## 32) + * @param gas_limit Gas limit + * @return Char* with first 4 bytes defining length, and the rest BoC serialized result + * Scheme: result$_ exit_code:(## 32) gas_used:(## 32) stack:^VmStack + */ +EMULATOR_EXPORT const char *tvm_emulator_emulate_run_method(uint32_t len, const char *params_boc, int64_t gas_limit); + /** * @brief Send external message * @param tvm_emulator Pointer to TVM emulator diff --git a/emulator/emulator_export_list b/emulator/emulator_export_list index e70166e7..93f5dbac 100644 --- a/emulator/emulator_export_list +++ b/emulator/emulator_export_list @@ -21,3 +21,4 @@ _tvm_emulator_run_get_method _tvm_emulator_send_external_message _tvm_emulator_send_internal_message _tvm_emulator_destroy +_tvm_emulator_emulate_run_method diff --git a/emulator/tvm-emulator.hpp b/emulator/tvm-emulator.hpp index dafa2a5f..a9f248b7 100644 --- a/emulator/tvm-emulator.hpp +++ b/emulator/tvm-emulator.hpp @@ -33,6 +33,10 @@ public: } } + void set_c7_raw(td::Ref c7) { + args_.set_c7(std::move(c7)); + } + void set_prev_blocks_info(td::Ref tuple) { args_.set_prev_blocks_info(std::move(tuple)); } From f1592641de96f77a7f3c591155fda2ba3aaeddc1 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 19 Mar 2024 15:31:29 +0300 Subject: [PATCH 109/351] Tonlib improvement fixes (#934) * 3.6. Fix directory traversal in KeyValueDir * 3.9. Fix buffer_to_hex reversing nibbles * 3.5. Fix error handling at blocks.getBlockHeader * 3.11. Fix query.forget * 3.12. Fix error handling in RemoteRunSmcMethod * 4.1. Delete unused files * 3.10. Use named constants instead hardcoded constants * 3.4. Fix response block header verification * 3.1. Check proof of blocks.getShards response * fix td::buffer_to_hex + test * 3.2. Add proof check for listBlockTransactions response in RunEmulator actor * 3.8. Add proof checking for getLibraries method * fix regression tests * 3.3 Add proof checking for lookupBlock method * Add publishers to proof of getLibrariesWithProof response (#25) * fix missing return, fix requesting mc block * Fix requesting lookupBlock with client mc blk == mc ref block * Fix duplicating lib data in proof and data, add mode 2 for not including the data * Migration of LastBlockStorage with fixed td::buffer_to_hex --------- Co-authored-by: ms Co-authored-by: Marat <98183742+dungeon-master-666@users.noreply.github.com> --- crypto/smc-envelope/WalletInterface.cpp | 2 +- crypto/smc-envelope/WalletInterface.h | 1 + tdutils/td/utils/misc.cpp | 6 +- test/regression-tests.ans | 2 +- tl/generate/scheme/lite_api.tl | 4 + tl/generate/scheme/lite_api.tlo | Bin 14148 -> 15368 bytes tonlib/test/offline.cpp | 2 +- tonlib/tonlib/CellString.cpp | 64 --- tonlib/tonlib/CellString.h | 22 - tonlib/tonlib/ClientActor.cpp | 18 - tonlib/tonlib/ClientActor.h | 41 -- tonlib/tonlib/GenericAccount.cpp | 80 --- tonlib/tonlib/GenericAccount.h | 30 - tonlib/tonlib/KeyValue.cpp | 38 +- tonlib/tonlib/LastBlockStorage.cpp | 32 +- tonlib/tonlib/TestGiver.cpp | 52 -- tonlib/tonlib/TestGiver.h | 31 - tonlib/tonlib/TestWallet.cpp | 84 --- tonlib/tonlib/TestWallet.h | 40 -- tonlib/tonlib/TonlibClient.cpp | 723 ++++++++++++++++-------- tonlib/tonlib/TonlibClient.h | 1 + tonlib/tonlib/Wallet.cpp | 95 ---- tonlib/tonlib/Wallet.h | 40 -- validator/impl/liteserver.cpp | 435 +++++++++++++- validator/impl/liteserver.hpp | 11 + 25 files changed, 1000 insertions(+), 854 deletions(-) delete mode 100644 tonlib/tonlib/CellString.cpp delete mode 100644 tonlib/tonlib/CellString.h delete mode 100644 tonlib/tonlib/ClientActor.cpp delete mode 100644 tonlib/tonlib/ClientActor.h delete mode 100644 tonlib/tonlib/GenericAccount.cpp delete mode 100644 tonlib/tonlib/GenericAccount.h delete mode 100644 tonlib/tonlib/TestGiver.cpp delete mode 100644 tonlib/tonlib/TestGiver.h delete mode 100644 tonlib/tonlib/TestWallet.cpp delete mode 100644 tonlib/tonlib/TestWallet.h delete mode 100644 tonlib/tonlib/Wallet.cpp delete mode 100644 tonlib/tonlib/Wallet.h diff --git a/crypto/smc-envelope/WalletInterface.cpp b/crypto/smc-envelope/WalletInterface.cpp index c76ac4a2..e02759b2 100644 --- a/crypto/smc-envelope/WalletInterface.cpp +++ b/crypto/smc-envelope/WalletInterface.cpp @@ -71,7 +71,7 @@ void WalletInterface::store_gift_message(vm::CellBuilder &cb, const Gift &gift) cb.store_zeroes(1); if (gift.is_encrypted) { - cb.store_long(0x2167da4b, 32); + cb.store_long(EncryptedCommentOp, 32); } else { cb.store_long(0, 32); } diff --git a/crypto/smc-envelope/WalletInterface.h b/crypto/smc-envelope/WalletInterface.h index b7f80630..c4e1f270 100644 --- a/crypto/smc-envelope/WalletInterface.h +++ b/crypto/smc-envelope/WalletInterface.h @@ -33,6 +33,7 @@ namespace ton { class WalletInterface : public SmartContract { public: + static constexpr uint32_t EncryptedCommentOp = 0x2167da4b; struct Gift { block::StdAddress destination; td::int64 gramms; diff --git a/tdutils/td/utils/misc.cpp b/tdutils/td/utils/misc.cpp index d592593a..caff44e3 100644 --- a/tdutils/td/utils/misc.cpp +++ b/tdutils/td/utils/misc.cpp @@ -153,9 +153,9 @@ string buffer_to_hex(Slice buffer) { const char *hex = "0123456789ABCDEF"; string res(2 * buffer.size(), '\0'); for (std::size_t i = 0; i < buffer.size(); i++) { - auto c = buffer.ubegin()[i]; - res[2 * i] = hex[c & 15]; - res[2 * i + 1] = hex[c >> 4]; + unsigned char c = buffer[i]; + res[2 * i] = hex[c >> 4]; + res[2 * i + 1] = hex[c & 15]; } return res; } diff --git a/test/regression-tests.ans b/test/regression-tests.ans index 96117ee9..bfea7089 100644 --- a/test/regression-tests.ans +++ b/test/regression-tests.ans @@ -1,7 +1,7 @@ abce Test_Bigint_main_default 76f38492ec19464a1d0eac51d389023a31ce10396b3894061361d159567ce8cd Test_Bitstrings_main_default a8b08af3116923c4c2a14e138d168375abd0c059f2f780d3267b294929a1110e -Test_Cells_simple_default 832502642fe4fe5db70de82681aedb7d54d7f3530e0069861fff405fe6f6cf23 +Test_Cells_simple_default 414f68da0a2f6fa09b2bdb99c453cdf919db48b5b4ca1c6ac1dfcd837e2d8170 Test_Fift_bug_div_default 1ac42861ce96b2896001c587f65e9afe1617db48859f19c2f4e3063a20ea60b0 Test_Fift_bug_newlize_default e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 Test_Fift_bug_ufits_default 51bf5a9f1ed7633a193f6fdd17a7a3af8e032dfe72a9669c85e8639aa8a7c195 diff --git a/tl/generate/scheme/lite_api.tl b/tl/generate/scheme/lite_api.tl index ce4d2731..e1e28b9f 100644 --- a/tl/generate/scheme/lite_api.tl +++ b/tl/generate/scheme/lite_api.tl @@ -53,8 +53,10 @@ liteServer.partialBlockProof complete:Bool from:tonNode.blockIdExt to:tonNode.bl liteServer.configInfo mode:# id:tonNode.blockIdExt state_proof:bytes config_proof:bytes = liteServer.ConfigInfo; liteServer.validatorStats mode:# id:tonNode.blockIdExt count:int complete:Bool state_proof:bytes data_proof:bytes = liteServer.ValidatorStats; liteServer.libraryResult result:(vector liteServer.libraryEntry) = liteServer.LibraryResult; +liteServer.libraryResultWithProof id:tonNode.blockIdExt mode:# result:(vector liteServer.libraryEntry) state_proof:bytes data_proof:bytes = liteServer.LibraryResultWithProof; liteServer.shardBlockLink id:tonNode.blockIdExt proof:bytes = liteServer.ShardBlockLink; liteServer.shardBlockProof masterchain_id:tonNode.blockIdExt links:(vector liteServer.shardBlockLink) = liteServer.ShardBlockProof; +liteServer.lookupBlockResult id:tonNode.blockIdExt mode:# mc_block_id:tonNode.blockIdExt client_mc_state_proof:bytes mc_block_proof:bytes shard_links:(vector liteServer.shardBlockLink) header:bytes prev_header:bytes = liteServer.LookupBlockResult; liteServer.debug.verbosity value:int = liteServer.debug.Verbosity; @@ -76,6 +78,7 @@ liteServer.getAllShardsInfo id:tonNode.blockIdExt = liteServer.AllShardsInfo; liteServer.getOneTransaction id:tonNode.blockIdExt account:liteServer.accountId lt:long = liteServer.TransactionInfo; liteServer.getTransactions count:# account:liteServer.accountId lt:long hash:int256 = liteServer.TransactionList; liteServer.lookupBlock mode:# id:tonNode.blockId lt:mode.1?long utime:mode.2?int = liteServer.BlockHeader; +liteServer.lookupBlockWithProof mode:# id:tonNode.blockId mc_block_id:tonNode.blockIdExt lt:mode.1?long utime:mode.2?int = liteServer.LookupBlockResult; liteServer.listBlockTransactions id:tonNode.blockIdExt mode:# count:# after:mode.7?liteServer.transactionId3 reverse_order:mode.6?true want_proof:mode.5?true = liteServer.BlockTransactions; liteServer.listBlockTransactionsExt id:tonNode.blockIdExt mode:# count:# after:mode.7?liteServer.transactionId3 reverse_order:mode.6?true want_proof:mode.5?true = liteServer.BlockTransactionsExt; liteServer.getBlockProof mode:# known_block:tonNode.blockIdExt target_block:mode.0?tonNode.blockIdExt = liteServer.PartialBlockProof; @@ -83,6 +86,7 @@ liteServer.getConfigAll mode:# id:tonNode.blockIdExt = liteServer.ConfigInfo; liteServer.getConfigParams mode:# id:tonNode.blockIdExt param_list:(vector int) = liteServer.ConfigInfo; liteServer.getValidatorStats#091a58bc mode:# id:tonNode.blockIdExt limit:int start_after:mode.0?int256 modified_after:mode.2?int = liteServer.ValidatorStats; liteServer.getLibraries library_list:(vector int256) = liteServer.LibraryResult; +liteServer.getLibrariesWithProof id:tonNode.blockIdExt mode:# library_list:(vector int256) = liteServer.LibraryResultWithProof; liteServer.getShardBlockProof id:tonNode.blockIdExt = liteServer.ShardBlockProof; liteServer.queryPrefix = Object; diff --git a/tl/generate/scheme/lite_api.tlo b/tl/generate/scheme/lite_api.tlo index da64ac53bcac03fb1d2eb1ca4fe3940d7e56c29b..06c082586eff2976ffc6b0b7cb44300126bffab9 100644 GIT binary patch delta 485 zcmX?-*HOXyXtur;0~8o<;ggkncCQ=tOYn{)lIp oBadVRlE2|5!2HcRxl!AEa*l}rs=pHiB`4RK_(Pm`!K8!<0Ii~}L;wH) delta 56 zcmeCEIFiTvXtur;0~8o;(slice.size() * 8); - return store(cb, td::BitSlice(slice.ubegin(), size), top_bits); -} - -td::Status CellString::store(CellBuilder &cb, td::BitSlice slice, unsigned int top_bits) { - if (slice.size() > max_bytes * 8) { - return td::Status::Error("String is too long (1)"); - } - unsigned int head = td::min(slice.size(), td::min(cb.remaining_bits(), top_bits)) / 8 * 8; - auto max_bits = vm::Cell::max_bits / 8 * 8; - auto depth = 1 + (slice.size() - head + max_bits - 1) / max_bits; - if (depth > max_chain_length) { - return td::Status::Error("String is too long (2)"); - } - cb.append_bitslice(slice.subslice(0, head)); - slice.advance(head); - if (slice.size() == 0) { - return td::Status::OK(); - } - CellBuilder child_cb; - store(child_cb, std::move(slice)); - cb.store_ref(child_cb.finalize()); - return td::Status::OK(); -} - -template -void CellString::for_each(F &&f, CellSlice &cs, unsigned int top_bits) { - unsigned int head = td::min(cs.size(), top_bits); - f(cs.prefetch_bits(head)); - if (!cs.have_refs()) { - return; - } - auto ref = cs.prefetch_ref(); - while (true) { - auto cs = vm::load_cell_slice(ref); - f(cs.prefetch_bits(cs.size())); - if (!cs.have_refs()) { - return; - } - ref = cs.prefetch_ref(); - } -} - -td::Result CellString::load(CellSlice &cs, unsigned int top_bits) { - unsigned int size = 0; - for_each([&](auto slice) { size += slice.size(); }, cs, top_bits); - if (size % 8 != 0) { - return td::Status::Error("Size is not divisible by 8"); - } - std::string res(size / 8, 0); - - td::BitPtr to(td::MutableSlice(res).ubegin()); - for_each([&](auto slice) { to.concat(slice); }, cs, top_bits); - CHECK(to.offs == (int)size); - return res; -} -} // namespace vm diff --git a/tonlib/tonlib/CellString.h b/tonlib/tonlib/CellString.h deleted file mode 100644 index 89c933d8..00000000 --- a/tonlib/tonlib/CellString.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "td/utils/Status.h" - -#include "vm/cells/CellBuilder.h" - -namespace vm { -class CellString { - public: - static constexpr unsigned int max_bytes = 1024; - static constexpr unsigned int max_chain_length = 16; - - static td::Status store(CellBuilder &cb, td::Slice slice, unsigned int top_bits = Cell::max_bits); - static td::Status store(CellBuilder &cb, td::BitSlice slice, unsigned int top_bits = Cell::max_bits); - static td::Result load(CellSlice &cs, unsigned int top_bits = Cell::max_bits); - - private: - template - static void for_each(F &&f, CellSlice &cs, unsigned int top_bits = Cell::max_bits); -}; - -} // namespace vm diff --git a/tonlib/tonlib/ClientActor.cpp b/tonlib/tonlib/ClientActor.cpp deleted file mode 100644 index ab2bc125..00000000 --- a/tonlib/tonlib/ClientActor.cpp +++ /dev/null @@ -1,18 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2020 Telegram Systems LLP -*/ diff --git a/tonlib/tonlib/ClientActor.h b/tonlib/tonlib/ClientActor.h deleted file mode 100644 index 592589cd..00000000 --- a/tonlib/tonlib/ClientActor.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2020 Telegram Systems LLP -*/ -#pragma once - -#include "tonlib/TonlibCallback.h" -#include "tonlib/TonlibClient.h" -#include "auto/tl/tonlib_api.h" - -namespace tonlinb { -class ClientActor : public td::actor::Actor { - public: - explicit ClientActor(td::unique_ptr callback); - void request(td::uint64 id, tonlib_api::object_ptr request); - static tonlib_api::object_ptr execute(tonlib_api::object_ptr request); - ~ClientActor(); - ClientActor(ClientActor&& other); - ClientActor& operator=(ClientActor&& other); - - ClientActor(const ClientActor& other) = delete; - ClientActor& operator=(const ClientActor& other) = delete; - - private: - td::actor::ActorOwn tonlib_; -}; -} // namespace tonlinb diff --git a/tonlib/tonlib/GenericAccount.cpp b/tonlib/tonlib/GenericAccount.cpp deleted file mode 100644 index 9f44ede2..00000000 --- a/tonlib/tonlib/GenericAccount.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#include "tonlib/GenericAccount.h" -#include "tonlib/utils.h" -#include "block/block-auto.h" -namespace tonlib { -td::Ref GenericAccount::get_init_state(td::Ref code, td::Ref data) noexcept { - return vm::CellBuilder() - .append_cellslice(binary_bitstring_to_cellslice("b{00110}").move_as_ok()) - .store_ref(std::move(code)) - .store_ref(std::move(data)) - .finalize(); -} -block::StdAddress GenericAccount::get_address(ton::WorkchainId workchain_id, - const td::Ref& init_state) noexcept { - return block::StdAddress(workchain_id, init_state->get_hash().bits(), true /*bounce*/); -} -td::Ref GenericAccount::create_ext_message(const block::StdAddress& address, td::Ref new_state, - td::Ref body) noexcept { - block::gen::Message::Record message; - /*info*/ { - block::gen::CommonMsgInfo::Record_ext_in_msg_info info; - /* src */ - tlb::csr_pack(info.src, block::gen::MsgAddressExt::Record_addr_none{}); - /* dest */ { - block::gen::MsgAddressInt::Record_addr_std dest; - dest.anycast = vm::CellBuilder().store_zeroes(1).as_cellslice_ref(); - dest.workchain_id = address.workchain; - dest.address = address.addr; - - tlb::csr_pack(info.dest, dest); - } - /* import_fee */ { - vm::CellBuilder cb; - block::tlb::t_Grams.store_integer_value(cb, td::BigInt256(0)); - info.import_fee = cb.as_cellslice_ref(); - } - - tlb::csr_pack(message.info, info); - } - /* init */ { - if (new_state.not_null()) { - // Just(Left(new_state)) - message.init = vm::CellBuilder() - .store_ones(1) - .store_zeroes(1) - .append_cellslice(vm::load_cell_slice(new_state)) - .as_cellslice_ref(); - } else { - message.init = vm::CellBuilder().store_zeroes(1).as_cellslice_ref(); - CHECK(message.init.not_null()); - } - } - /* body */ { - message.body = vm::CellBuilder().store_zeroes(1).append_cellslice(vm::load_cell_slice_ref(body)).as_cellslice_ref(); - } - - td::Ref res; - tlb::type_pack_cell(res, block::gen::t_Message_Any, message); - CHECK(res.not_null()); - - return res; -} -} // namespace tonlib diff --git a/tonlib/tonlib/GenericAccount.h b/tonlib/tonlib/GenericAccount.h deleted file mode 100644 index 4a36d78a..00000000 --- a/tonlib/tonlib/GenericAccount.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once -#include "vm/cells.h" -#include "block/block.h" -namespace tonlib { -class GenericAccount { - public: - static td::Ref get_init_state(td::Ref code, td::Ref data) noexcept; - static block::StdAddress get_address(ton::WorkchainId workchain_id, const td::Ref& init_state) noexcept; - static td::Ref create_ext_message(const block::StdAddress& address, td::Ref new_state, - td::Ref body) noexcept; -}; -} // namespace tonlib diff --git a/tonlib/tonlib/KeyValue.cpp b/tonlib/tonlib/KeyValue.cpp index cdb0f5ee..ca055aad 100644 --- a/tonlib/tonlib/KeyValue.cpp +++ b/tonlib/tonlib/KeyValue.cpp @@ -42,7 +42,11 @@ class KeyValueDir : public KeyValue { } td::Status add(td::Slice key, td::Slice value) override { - auto path = to_file_path(key.str()); + auto key_str = key.str(); + if (!is_valid_key(key_str)) { + return td::Status::Error("Invalid key"); + } + auto path = to_file_path(key_str); if (td::stat(path).is_ok()) { return td::Status::Error(PSLICE() << "File " << path << "already exists"); } @@ -50,15 +54,27 @@ class KeyValueDir : public KeyValue { } td::Status set(td::Slice key, td::Slice value) override { - return td::atomic_write_file(to_file_path(key.str()), value); + auto key_str = key.str(); + if (!is_valid_key(key_str)) { + return td::Status::Error("Invalid key"); + } + return td::atomic_write_file(to_file_path(key_str), value); } td::Result get(td::Slice key) override { - return td::read_file_secure(to_file_path(key.str())); + auto key_str = key.str(); + if (!is_valid_key(key_str)) { + return td::Status::Error("Invalid key"); + } + return td::read_file_secure(to_file_path(key_str)); } td::Status erase(td::Slice key) override { - return td::unlink(to_file_path(key.str())); + auto key_str = key.str(); + if (!is_valid_key(key_str)) { + return td::Status::Error("Invalid key"); + } + return td::unlink(to_file_path(key_str)); } void foreach_key(std::function f) override { @@ -83,6 +99,20 @@ class KeyValueDir : public KeyValue { std::string to_file_path(std::string key) { return directory_ + TD_DIR_SLASH + key; } + + bool is_valid_key(const std::string& key) { + if (key.empty()) { + return false; + } + + if (key.find(TD_DIR_SLASH) != std::string::npos || key.find("..") != std::string::npos) { + return false; + } + + return std::all_of(key.begin(), key.end(), [](char c) { + return std::isalnum(c) || c == '_' || c == '-' || c == '.'; + }); + } }; class KeyValueInmemory : public KeyValue { diff --git a/tonlib/tonlib/LastBlockStorage.cpp b/tonlib/tonlib/LastBlockStorage.cpp index 53c4456e..6e5b3f0f 100644 --- a/tonlib/tonlib/LastBlockStorage.cpp +++ b/tonlib/tonlib/LastBlockStorage.cpp @@ -32,13 +32,43 @@ void LastBlockStorage::set_key_value(std::shared_ptr kv) { } namespace { +std::string buffer_to_hex_nibbles_reversed(td::Slice buffer) { + const char *hex = "0123456789ABCDEF"; + std::string res(2 * buffer.size(), '\0'); + for (std::size_t i = 0; i < buffer.size(); i++) { + unsigned char c = buffer[i]; + res[2 * i + 1] = hex[c >> 4]; + res[2 * i] = hex[c & 15]; + } + return res; +} + +std::string get_file_name_depr(td::Slice name) { + return buffer_to_hex_nibbles_reversed(name) + ".blkstate"; +} + std::string get_file_name(td::Slice name) { return td::buffer_to_hex(name) + ".blkstate"; } } // namespace td::Result LastBlockStorage::get_state(td::Slice name) { - TRY_RESULT(data, kv_->get(get_file_name(name))); + // This migration addresses an issue in the old version of Tonlib, where the td::buffer_to_hex + // incorrectly reversed the order of nibbles in hex representation. + auto data_r = kv_->get(get_file_name(name)); + if (data_r.is_error()) { + auto key_depr = get_file_name_depr(name); + auto data_depr = kv_->get(key_depr); + if (data_depr.is_ok()) { + kv_->set(get_file_name(name), data_depr.move_as_ok()); + kv_->erase(key_depr); + data_r = std::move(data_depr); + } else { + return td::Status::Error("not found"); + } + } + + auto data = data_r.move_as_ok(); if (data.size() < 8) { return td::Status::Error("too short"); } diff --git a/tonlib/tonlib/TestGiver.cpp b/tonlib/tonlib/TestGiver.cpp deleted file mode 100644 index b906193d..00000000 --- a/tonlib/tonlib/TestGiver.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#include "tonlib/TestGiver.h" -#include "tonlib/utils.h" - -#include "td/utils/base64.h" - -namespace tonlib { -const block::StdAddress& TestGiver::address() noexcept { - static block::StdAddress res = - block::StdAddress::parse("kf_8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15-KsQHFLbKSMiYIny").move_as_ok(); - return res; -} - -vm::CellHash TestGiver::get_init_code_hash() noexcept { - return vm::CellHash::from_slice(td::base64_decode("wDkZp0yR4xo+9+BnuAPfGVjBzK6FPzqdv2DwRq3z3KE=").move_as_ok()); -} - -td::Ref TestGiver::make_a_gift_message(td::uint32 seqno, td::uint64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept { - td::BigInt256 dest_addr; - dest_addr.import_bits(dest_address.addr.as_bitslice()); - vm::CellBuilder cb; - cb.append_cellslice(binary_bitstring_to_cellslice("b{01}").move_as_ok()) - .store_long(dest_address.bounceable, 1) - .append_cellslice(binary_bitstring_to_cellslice("b{000100}").move_as_ok()) - .store_long(dest_address.workchain, 8) - .store_int256(dest_addr, 256); - block::tlb::t_Grams.store_integer_value(cb, td::BigInt256(gramms)); - - cb.store_zeroes(9 + 64 + 32 + 1 + 1).store_bytes("\0\0\0\0", 4); - vm::CellString::store(cb, message, 35 * 8).ensure(); - auto message_inner = cb.finalize(); - return vm::CellBuilder().store_long(seqno, 32).store_long(1, 8).store_ref(message_inner).finalize(); -} -} // namespace tonlib diff --git a/tonlib/tonlib/TestGiver.h b/tonlib/tonlib/TestGiver.h deleted file mode 100644 index f8b62599..00000000 --- a/tonlib/tonlib/TestGiver.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once -#include "block/block.h" -#include "CellString.h" -namespace tonlib { -class TestGiver { - public: - static constexpr unsigned max_message_size = vm::CellString::max_bytes; - static const block::StdAddress& address() noexcept; - static vm::CellHash get_init_code_hash() noexcept; - static td::Ref make_a_gift_message(td::uint32 seqno, td::uint64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept; -}; -} // namespace tonlib diff --git a/tonlib/tonlib/TestWallet.cpp b/tonlib/tonlib/TestWallet.cpp deleted file mode 100644 index 8bdf78c9..00000000 --- a/tonlib/tonlib/TestWallet.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#include "tonlib/TestWallet.h" -#include "tonlib/GenericAccount.h" -#include "tonlib/utils.h" - -#include "vm/boc.h" -#include "td/utils/base64.h" - -namespace tonlib { -td::Ref TestWallet::get_init_state(const td::Ed25519::PublicKey& public_key) noexcept { - auto code = get_init_code(); - auto data = get_init_data(public_key); - return GenericAccount::get_init_state(std::move(code), std::move(data)); -} - -td::Ref TestWallet::get_init_message(const td::Ed25519::PrivateKey& private_key) noexcept { - std::string seq_no(4, 0); - auto signature = - private_key.sign(vm::CellBuilder().store_bytes(seq_no).finalize()->get_hash().as_slice()).move_as_ok(); - return vm::CellBuilder().store_bytes(signature).store_bytes(seq_no).finalize(); -} - -td::Ref TestWallet::make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 seqno, - td::int64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept { - td::BigInt256 dest_addr; - dest_addr.import_bits(dest_address.addr.as_bitslice()); - vm::CellBuilder cb; - cb.append_cellslice(binary_bitstring_to_cellslice("b{01}").move_as_ok()) - .store_long(dest_address.bounceable, 1) - .append_cellslice(binary_bitstring_to_cellslice("b{000100}").move_as_ok()) - .store_long(dest_address.workchain, 8) - .store_int256(dest_addr, 256); - td::int32 send_mode = 3; - if (gramms == -1) { - gramms = 0; - send_mode += 128; - } - block::tlb::t_Grams.store_integer_value(cb, td::BigInt256(gramms)); - cb.store_zeroes(9 + 64 + 32 + 1 + 1).store_bytes("\0\0\0\0", 4); - vm::CellString::store(cb, message, 35 * 8).ensure(); - auto message_inner = cb.finalize(); - auto message_outer = - vm::CellBuilder().store_long(seqno, 32).store_long(send_mode, 8).store_ref(message_inner).finalize(); - auto signature = private_key.sign(message_outer->get_hash().as_slice()).move_as_ok(); - return vm::CellBuilder().store_bytes(signature).append_cellslice(vm::load_cell_slice(message_outer)).finalize(); -} - -td::Ref TestWallet::get_init_code() noexcept { - static auto res = [] { - auto serialized_code = td::base64_decode( - "te6ccgEEAQEAAAAAUwAAov8AIN0gggFMl7qXMO1E0NcLH+Ck8mCBAgDXGCDXCx/tRNDTH9P/" - "0VESuvKhIvkBVBBE+RDyovgAAdMfMSDXSpbTB9QC+wDe0aTIyx/L/8ntVA==") - .move_as_ok(); - return vm::std_boc_deserialize(serialized_code).move_as_ok(); - }(); - return res; -} - -vm::CellHash TestWallet::get_init_code_hash() noexcept { - return get_init_code()->get_hash(); -} - -td::Ref TestWallet::get_init_data(const td::Ed25519::PublicKey& public_key) noexcept { - return vm::CellBuilder().store_long(0, 32).store_bytes(public_key.as_octet_string()).finalize(); -} -} // namespace tonlib diff --git a/tonlib/tonlib/TestWallet.h b/tonlib/tonlib/TestWallet.h deleted file mode 100644 index ef726b55..00000000 --- a/tonlib/tonlib/TestWallet.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#include "vm/cells.h" -#include "Ed25519.h" -#include "block/block.h" -#include "CellString.h" - -namespace tonlib { -class TestWallet { - public: - static constexpr unsigned max_message_size = vm::CellString::max_bytes; - static td::Ref get_init_state(const td::Ed25519::PublicKey& public_key) noexcept; - static td::Ref get_init_message(const td::Ed25519::PrivateKey& private_key) noexcept; - static td::Ref make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 seqno, - td::int64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept; - - static td::Ref get_init_code() noexcept; - static vm::CellHash get_init_code_hash() noexcept; - static td::Ref get_init_data(const td::Ed25519::PublicKey& public_key) noexcept; -}; -} // namespace tonlib diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index d450bc1f..86acbcc3 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -1227,8 +1227,7 @@ class RemoteRunSmcMethod : public td::actor::Actor { td::Status do_with_last_block(td::Result r_last_block) { TRY_RESULT(last_block, std::move(r_last_block)); query_.block_id = std::move(last_block.last_block_id); - with_block_id(); - return td::Status::OK(); + return with_block_id(); } void start_up() override { @@ -1729,6 +1728,9 @@ class GetShardBlockProof : public td::actor::Actor { auto to_lite_api(const tonlib_api::ton_blockIdExt& blk) -> td::Result>; auto to_tonlib_api(const ton::lite_api::liteServer_transactionId& txid) -> tonlib_api_ptr; +td::Status check_block_transactions_proof(lite_api_ptr& bTxes, int32_t mode, + ton::LogicalTime start_lt, td::Bits256 start_addr, td::Bits256 root_hash, int req_count); + class RunEmulator : public TonlibQueryActor { public: RunEmulator(ExtClientRef ext_client_ref, int_api::GetAccountStateByTransaction request, @@ -1778,7 +1780,6 @@ class RunEmulator : public TonlibQueryActor { return td::Status::Error("block header proof is not a valid Merkle proof"); } - ton::RootHash vhash{virt_root->get_hash().bits()}; if (ton::RootHash{virt_root->get_hash().bits()} != block_id.root_hash) { return td::Status::Error("block header has incorrect root hash"); } @@ -1837,14 +1838,18 @@ class RunEmulator : public TonlibQueryActor { td::Status get_transactions(std::int64_t lt) { TRY_RESULT(lite_block, to_lite_api(*to_tonlib_api(block_id_.id))); auto after = ton::lite_api::make_object(request_.address.addr, lt); - auto query = ton::lite_api::liteServer_listBlockTransactions(std::move(lite_block), 0b10100111, 256, std::move(after), false, false); + auto mode = 0b10100111; + constexpr int req_count = 256; + auto query = ton::lite_api::liteServer_listBlockTransactions(std::move(lite_block), mode, req_count, std::move(after), false, true); - client_.send_query(std::move(query), [self = this](lite_api_ptr&& bTxes) { + client_.send_query(std::move(query), [self = this, mode, lt, root_hash = block_id_.id.root_hash, req_count](lite_api_ptr&& bTxes) { if (!bTxes) { self->check(td::Status::Error("liteServer.blockTransactions is null")); return; } + self->check(check_block_transactions_proof(bTxes, mode, lt, self->request_.address.addr, root_hash, req_count)); + std::int64_t last_lt = 0; for (auto& id : bTxes->ids_) { last_lt = id->lt_; @@ -2971,7 +2976,7 @@ struct ToRawTransactions { tonlib_api::object_ptr data; if (try_decode_messages_ && body->size() >= 32) { auto type = static_cast(body.write().fetch_long(32)); - if (type == 0 || type == 0x2167da4b) { + if (type == 0 || type == ton::WalletInterface::EncryptedCommentOp) { td::Status status; auto r_body_message = TRY_VM(vm::CellString::load(body.write())); @@ -4241,8 +4246,7 @@ td::Status TonlibClient::do_request(const tonlib_api::query_send& request, td::Status TonlibClient::do_request(tonlib_api::query_forget& request, td::Promise>&& promise) { - auto it = queries_.find(request.id_); - if (it == queries_.end()) { + if (queries_.erase(request.id_) == 0) { return TonlibError::InvalidQueryId(); } promise.set_value(tonlib_api::make_object()); @@ -4490,10 +4494,31 @@ void deep_library_search(std::set& set, std::set& v td::Status TonlibClient::do_request(const tonlib_api::smc_getLibraries& request, td::Promise>&& promise) { + if (request.library_list_.size() > 16) { + promise.set_error(TonlibError::InvalidField("library_list", ": too many libraries requested, 16 maximum")); + } + if (query_context_.block_id) { + get_libraries(query_context_.block_id.value(), request.library_list_, std::move(promise)); + } else { + client_.with_last_block([this, promise = std::move(promise), library_list = request.library_list_](td::Result r_last_block) mutable { + if (r_last_block.is_error()) { + promise.set_error(r_last_block.move_as_error_prefix(TonlibError::Internal("get last block failed "))); + } else { + this->get_libraries(r_last_block.move_as_ok().last_block_id, library_list, std::move(promise)); + } + }); + } + return td::Status::OK(); +} + +void TonlibClient::get_libraries(ton::BlockIdExt blkid, std::vector library_list, td::Promise>&& promise) { + sort(library_list.begin(), library_list.end()); + library_list.erase(unique(library_list.begin(), library_list.end()), library_list.end()); + std::vector> result_entries; - result_entries.reserve(request.library_list_.size()); + result_entries.reserve(library_list.size()); std::vector not_cached_hashes; - for (auto& library_hash : request.library_list_) { + for (auto& library_hash : library_list) { if (libraries.key_exists(library_hash)) { auto library_content = vm::std_boc_serialize(libraries.lookup_ref(library_hash)).move_as_ok().as_slice().str(); result_entries.push_back(tonlib_api::make_object(library_hash, library_content)); @@ -4504,40 +4529,80 @@ td::Status TonlibClient::do_request(const tonlib_api::smc_getLibraries& request, if (not_cached_hashes.empty()) { promise.set_value(tonlib_api::make_object(std::move(result_entries))); - return td::Status::OK(); + return; } - client_.send_query(ton::lite_api::liteServer_getLibraries(std::move(not_cached_hashes)), - promise.wrap([self=this, result_entries = std::move(result_entries)] - (td::Result> r_libraries) mutable - { - if (r_libraries.is_error()) { - LOG(WARNING) << "cannot obtain found libraries: " << r_libraries.move_as_error().to_string(); - } else { - auto libraries = r_libraries.move_as_ok(); - bool updated = false; - for (auto& lr : libraries->result_) { - auto contents = vm::std_boc_deserialize(lr->data_); - if (contents.is_ok() && contents.ok().not_null()) { - if (contents.ok()->get_hash().bits().compare(lr->hash_.cbits(), 256)) { - LOG(WARNING) << "hash mismatch for library " << lr->hash_.to_hex(); - continue; - } - result_entries.push_back(tonlib_api::make_object(lr->hash_, lr->data_.as_slice().str())); - self->libraries.set_ref(lr->hash_, contents.move_as_ok()); - updated = true; - LOG(DEBUG) << "registered library " << lr->hash_.to_hex(); - } else { - LOG(WARNING) << "failed to deserialize library: " << lr->hash_.to_hex(); - } - if (updated) { - self->store_libs_to_disk(); - } - } + client_.send_query(ton::lite_api::liteServer_getLibrariesWithProof(ton::create_tl_lite_block_id(blkid), 1, std::move(not_cached_hashes)), + promise.wrap([self=this, blkid, result_entries = std::move(result_entries), not_cached_hashes] + (td::Result> r_libraries) mutable + -> td::Result> { + if (r_libraries.is_error()) { + LOG(WARNING) << "cannot obtain found libraries: " << r_libraries.move_as_error().to_string(); + return r_libraries.move_as_error(); + } + + auto libraries = r_libraries.move_as_ok(); + auto state = block::check_extract_state_proof(blkid, libraries->state_proof_.as_slice(), + libraries->data_proof_.as_slice()); + if (state.is_error()) { + LOG(WARNING) << "cannot check state proof: " << state.move_as_error().to_string(); + return state.move_as_error(); + } + auto state_root = state.move_as_ok(); + + try { + block::gen::ShardStateUnsplit::Record state_record; + if (!tlb::unpack_cell(state_root, state_record)) { + return td::Status::Error("cannot unpack shardchain state"); } + auto libraries_dict = vm::Dictionary(state_record.r1.libraries->prefetch_ref(), 256); + + for (auto& hash : not_cached_hashes) { + auto csr = libraries_dict.lookup(hash.bits(), 256); + if (csr.is_null()) { + LOG(WARNING) << "library " << hash.to_hex() << " not found in config"; + if (std::any_of(libraries->result_.begin(), libraries->result_.end(), + [&hash](const auto& lib) { return lib->hash_.bits().equals(hash.cbits(), 256); })) { + return TonlibError::Internal("library is included in response but it's not found in proof"); + } + continue; + } + block::gen::LibDescr::Record libdescr; + if (!tlb::csr_unpack(csr, libdescr)) { + return TonlibError::Internal("cannot unpack LibDescr record"); + } + + auto lib_it = std::find_if(libraries->result_.begin(), libraries->result_.end(), + [&hash](const auto& lib) { return lib->hash_.bits().equals(hash.cbits(), 256); }); + if (lib_it == libraries->result_.end()) { + return TonlibError::Internal("library is found in proof but not in response"); + } + auto& lib = *lib_it; + auto contents = vm::std_boc_deserialize(lib->data_); + if (!contents.is_ok() || contents.ok().is_null()) { + return TonlibError::Internal(PSLICE() << "cannot deserialize library cell " << lib->hash_.to_hex()); + } + + if (!contents.ok()->get_hash().bits().equals(hash.cbits(), 256)) { + return TonlibError::Internal(PSLICE() << "library hash mismatch data " << contents.ok()->get_hash().to_hex() << " != requested " << hash.to_hex()); + } + + if (contents.ok()->get_hash() != libdescr.lib->get_hash()) { + return TonlibError::Internal(PSLICE() << "library hash mismatch data " << lib->hash_.to_hex() << " != proof " << libdescr.lib->get_hash().to_hex()); + } + + result_entries.push_back(tonlib_api::make_object(lib->hash_, lib->data_.as_slice().str())); + self->libraries.set_ref(lib->hash_, contents.move_as_ok()); + LOG(DEBUG) << "registered library " << lib->hash_.to_hex(); + } + self->store_libs_to_disk(); return tonlib_api::make_object(std::move(result_entries)); - })); - return td::Status::OK(); + } catch (vm::VmError& err) { + return TonlibError::Internal(PSLICE() << "error while checking getLibrariesWithProof proof: " << err.get_msg()); + } catch (vm::VmVirtError& err) { + return TonlibError::Internal(PSLICE() << "virtualization error while checking getLibrariesWithProof proof: " << err.get_msg()); + } + })); } td::Status TonlibClient::do_request(const tonlib_api::smc_getLibrariesExt& request, @@ -5413,53 +5478,247 @@ td::Status TonlibClient::do_request(const tonlib_api::blocks_getMasterchainInfo& td::Status TonlibClient::do_request(const tonlib_api::blocks_getShards& request, td::Promise>&& promise) { TRY_RESULT(block, to_lite_api(*request.id_)) + TRY_RESULT(req_blk_id, to_block_id(*request.id_)); client_.send_query(ton::lite_api::liteServer_getAllShardsInfo(std::move(block)), - promise.wrap([](lite_api_ptr&& all_shards_info) + promise.wrap([req_blk_id](lite_api_ptr&& all_shards_info) -> td::Result> { - td::BufferSlice proof = std::move((*all_shards_info).proof_); - td::BufferSlice data = std::move((*all_shards_info).data_); - if (data.empty()) { - return td::Status::Error("shard configuration is empty"); - } else { - auto R = vm::std_boc_deserialize(data.clone()); - if (R.is_error()) { - return R.move_as_error_prefix("cannot deserialize shard configuration: "); - } - auto root = R.move_as_ok(); - block::ShardConfig sh_conf; - if (!sh_conf.unpack(vm::load_cell_slice_ref(root))) { - return td::Status::Error("cannot extract shard block list from shard configuration"); - } else { - auto ids = sh_conf.get_shard_hash_ids(true); - tonlib_api::blocks_shards shards; - for (auto id : ids) { - auto ref = sh_conf.get_shard_hash(ton::ShardIdFull(id)); - if (ref.not_null()) { - shards.shards_.push_back(to_tonlib_api(ref->top_block_id())); - } - } - return tonlib_api::make_object(std::move(shards)); - } - } + auto blk_id = ton::create_block_id(all_shards_info->id_); + if (blk_id != req_blk_id) { + return td::Status::Error("Liteserver responded with wrong block"); + } + td::BufferSlice proof = std::move((*all_shards_info).proof_); + td::BufferSlice data = std::move((*all_shards_info).data_); + if (data.empty() || proof.empty()) { + return td::Status::Error("Shard configuration or proof is empty"); + } + auto proof_cell = vm::std_boc_deserialize(std::move(proof)); + if (proof_cell.is_error()) { + return proof_cell.move_as_error_prefix("Couldn't deserialize shards proof: "); + } + auto data_cell = vm::std_boc_deserialize(std::move(data)); + if (data_cell.is_error()) { + return data_cell.move_as_error_prefix("Couldn't deserialize shards data: "); + } + try { + auto virt_root = vm::MerkleProof::virtualize(proof_cell.move_as_ok(), 1); + if (virt_root.is_null()) { + return td::Status::Error("Virt root is null"); + } + if (ton::RootHash{virt_root->get_hash().bits()} != blk_id.root_hash) { + return td::Status::Error("Block shards merkle proof has incorrect root hash"); + } + + block::gen::Block::Record blk; + block::gen::BlockExtra::Record extra; + block::gen::McBlockExtra::Record mc_extra; + if (!tlb::unpack_cell(virt_root, blk) || !tlb::unpack_cell(blk.extra, extra) || !extra.custom->have_refs() || + !tlb::unpack_cell(extra.custom->prefetch_ref(), mc_extra)) { + return td::Status::Error("cannot unpack block extra of block " + blk_id.to_str()); + } + auto data_csr = vm::load_cell_slice_ref(data_cell.move_as_ok()); + if (data_csr->prefetch_ref()->get_hash() != mc_extra.shard_hashes->prefetch_ref()->get_hash()) { + return td::Status::Error("Block shards data and proof hashes don't match"); + } + + block::ShardConfig sh_conf; + if (!sh_conf.unpack(mc_extra.shard_hashes)) { + return td::Status::Error("cannot extract shard block list from shard configuration"); + } + auto ids = sh_conf.get_shard_hash_ids(true); + tonlib_api::blocks_shards shards; + for (auto& id : ids) { + auto ref = sh_conf.get_shard_hash(ton::ShardIdFull(id)); + if (ref.not_null()) { + shards.shards_.push_back(to_tonlib_api(ref->top_block_id())); + } + } + return tonlib_api::make_object(std::move(shards)); + } catch (vm::VmError& err) { + return err.as_status("Couldn't verify proof: "); + } catch (vm::VmVirtError& err) { + return err.as_status("Couldn't verify proof: "); + } catch (...) { + return td::Status::Error("Unknown exception raised while verifying proof"); + } })); return td::Status::OK(); } +td::Status check_lookup_block_proof(lite_api_ptr& result, int mode, ton::BlockId blkid, ton::BlockIdExt client_mc_blkid, td::uint64 lt, td::uint32 utime); td::Status TonlibClient::do_request(const tonlib_api::blocks_lookupBlock& request, td::Promise>&& promise) { - client_.send_query(ton::lite_api::liteServer_lookupBlock( - request.mode_, - ton::lite_api::make_object((*request.id_).workchain_, (*request.id_).shard_, (*request.id_).seqno_), - (td::uint64)(request.lt_), - (td::uint32)(request.utime_)), - promise.wrap([](lite_api_ptr&& header) { - const auto& id = header->id_; - return to_tonlib_api(*id); - //tonlib_api::make_object( - // ton::tonlib_api::ton_blockIdExt(id->workchain_, id->) - //); - })); + auto lite_block = ton::lite_api::make_object((*request.id_).workchain_, (*request.id_).shard_, (*request.id_).seqno_); + auto blkid = ton::BlockId(request.id_->workchain_, request.id_->shard_, request.id_->seqno_); + client_.with_last_block( + [self = this, blkid, lite_block = std::move(lite_block), mode = request.mode_, lt = (td::uint64)request.lt_, + utime = (td::uint32)request.utime_, promise = std::move(promise)](td::Result r_last_block) mutable { + self->client_.send_query(ton::lite_api::liteServer_lookupBlockWithProof(mode, std::move(lite_block), ton::create_tl_lite_block_id(r_last_block.ok().last_block_id), lt, utime), + promise.wrap([blkid, mode, utime, lt, last_block = r_last_block.ok().last_block_id](lite_api_ptr&& result) + -> td::Result> { + TRY_STATUS(check_lookup_block_proof(result, mode, blkid, last_block, lt, utime)); + return to_tonlib_api(*result->id_); + }) + ); + }); + return td::Status::OK(); +} + +td::Status check_lookup_block_proof(lite_api_ptr& result, int mode, ton::BlockId blkid, ton::BlockIdExt client_mc_blkid, td::uint64 lt, td::uint32 utime) { + try { + ton::BlockIdExt cur_id = ton::create_block_id(result->mc_block_id_); + try { + for (auto& link : result->shard_links_) { + ton::BlockIdExt prev_id = create_block_id(link->id_); + td::BufferSlice proof = std::move(link->proof_); + auto R = vm::std_boc_deserialize(proof); + if (R.is_error()) { + return TonlibError::InvalidBagOfCells("proof"); + } + auto block_root = vm::MerkleProof::virtualize(R.move_as_ok(), 1); + if (cur_id.root_hash != block_root->get_hash().bits()) { + return td::Status::Error("invalid block hash in proof"); + } + if (cur_id.is_masterchain()) { + if (client_mc_blkid != cur_id) { + auto state = block::check_extract_state_proof(client_mc_blkid, result->client_mc_state_proof_.as_slice(), + result->mc_block_proof_.as_slice()); + if (state.is_error()) { + LOG(WARNING) << "cannot check state proof: " << state.move_as_error().to_string(); + return state.move_as_error(); + } + auto state_root = state.move_as_ok(); + auto prev_blocks_dict = block::get_prev_blocks_dict(state_root); + if (!prev_blocks_dict) { + return td::Status::Error("cannot extract prev blocks dict from state"); + } + + if (!block::check_old_mc_block_id(*prev_blocks_dict, cur_id)) { + return td::Status::Error("couldn't check old mc block id"); + } + } + block::gen::Block::Record blk; + block::gen::BlockExtra::Record extra; + block::gen::McBlockExtra::Record mc_extra; + if (!tlb::unpack_cell(block_root, blk) || !tlb::unpack_cell(blk.extra, extra) || !extra.custom->have_refs() || + !tlb::unpack_cell(extra.custom->prefetch_ref(), mc_extra)) { + return td::Status::Error("cannot unpack block header"); + } + block::ShardConfig shards(mc_extra.shard_hashes->prefetch_ref()); + td::Ref shard_hash = shards.get_shard_hash(prev_id.shard_full(), true); + if (shard_hash.is_null() || shard_hash->top_block_id() != prev_id) { + return td::Status::Error("invalid proof chain: prev block is not in mc shard list"); + } + } else { + std::vector prev; + ton::BlockIdExt mc_blkid; + bool after_split; + td::Status S = block::unpack_block_prev_blk_try(block_root, cur_id, prev, mc_blkid, after_split); + if (S.is_error()) { + return S; + } + CHECK(prev.size() == 1 || prev.size() == 2); + bool found = prev_id == prev[0] || (prev.size() == 2 && prev_id == prev[1]); + if (!found) { + return td::Status::Error("invalid proof chain: prev block is not in prev blocks list"); + } + } + cur_id = prev_id; + } + } catch (vm::VmVirtError& err) { + return err.as_status(); + } + if (cur_id.id.workchain != blkid.workchain || !ton::shard_contains(cur_id.id.shard, blkid.shard)) { + return td::Status::Error("response block has incorrect workchain/shard"); + } + + auto header_r = vm::std_boc_deserialize(std::move(result->header_)); + if (header_r.is_error()) { + return TonlibError::InvalidBagOfCells("header"); + } + auto header_root = vm::MerkleProof::virtualize(header_r.move_as_ok(), 1); + if (header_root.is_null()) { + return td::Status::Error("header_root is null"); + } + if (cur_id.root_hash != header_root->get_hash().bits()) { + return td::Status::Error("invalid header hash in proof"); + } + + std::vector prev; + ton::BlockIdExt mc_blkid; + bool after_split; + auto R = block::unpack_block_prev_blk_try(header_root, cur_id, prev, mc_blkid, after_split); + if (R.is_error()) { + return R; + } + if (cur_id != ton::create_block_id(result->id_)) { + return td::Status::Error("response blkid doesn't match header"); + } + + block::gen::Block::Record blk; + block::gen::BlockInfo::Record info; + if (!(tlb::unpack_cell(header_root, blk) && tlb::unpack_cell(blk.info, info))) { + return td::Status::Error("block header unpack failed"); + } + + if (mode & 1) { + if (cur_id.seqno() != blkid.seqno) { + return td::Status::Error("invalid seqno in proof"); + } + } else if (mode & 6) { + auto prev_header_r = vm::std_boc_deserialize(std::move(result->prev_header_)); + if (prev_header_r.is_error()) { + return TonlibError::InvalidBagOfCells("prev_headers"); + } + auto prev_header = prev_header_r.move_as_ok(); + auto prev_root = vm::MerkleProof::virtualize(prev_header, 1); + if (prev_root.is_null()) { + return td::Status::Error("prev_root is null"); + } + + bool prev_valid = false; + int prev_idx = -1; + for (size_t i = 0; i < prev.size(); i++) { + if (prev[i].root_hash == prev_root->get_hash().bits()) { + prev_valid = true; + prev_idx = i; + } + } + if (!prev_valid) { + return td::Status::Error("invalid prev header hash in proof"); + } + if (!ton::shard_contains(prev[prev_idx].id.shard, blkid.shard)) { + return td::Status::Error("invalid prev header shard in proof"); + } + + block::gen::Block::Record prev_blk; + block::gen::BlockInfo::Record prev_info; + if (!(tlb::unpack_cell(prev_root, prev_blk) && tlb::unpack_cell(prev_blk.info, prev_info))) { + return td::Status::Error("prev header unpack failed"); + } + + if (mode & 2) { + if (prev_info.end_lt > lt) { + return td::Status::Error("prev header end_lt > lt"); + } + if (info.end_lt < lt) { + return td::Status::Error("header end_lt < lt"); + } + } else if (mode & 4) { + if (prev_info.gen_utime > utime) { + return td::Status::Error("prev header end_lt > lt"); + } + if (info.gen_utime < utime) { + return td::Status::Error("header end_lt < lt"); + } + } + } + } catch (vm::VmError& err) { + return td::Status::Error(PSLICE() << "error while checking lookupBlock proof: " << err.get_msg()); + } catch (vm::VmVirtError& err) { + return td::Status::Error(PSLICE() << "virtualization error while checking lookupBlock proof: " << err.get_msg()); + } + return td::Status::OK(); } @@ -5469,13 +5728,95 @@ auto to_tonlib_api(const ton::lite_api::liteServer_transactionId& txid) txid.mode_, txid.account_.as_slice().str(), txid.lt_, txid.hash_.as_slice().str()); } +td::Status check_block_transactions_proof(lite_api_ptr& bTxes, int32_t mode, + ton::LogicalTime start_lt, td::Bits256 start_addr, td::Bits256 root_hash, int req_count) { + if (mode & ton::lite_api::liteServer_listBlockTransactions::WANT_PROOF_MASK == 0) { + return td::Status::OK(); + } + constexpr int max_answer_transactions = 256; + bool reverse_mode = mode & ton::lite_api::liteServer_listBlockTransactions::REVERSE_ORDER_MASK; + + try { + TRY_RESULT(proof_cell, vm::std_boc_deserialize(std::move(bTxes->proof_))); + auto virt_root = vm::MerkleProof::virtualize(proof_cell, 1); + + if (root_hash != virt_root->get_hash().bits()) { + return td::Status::Error("Invalid block proof root hash"); + } + block::gen::Block::Record blk; + block::gen::BlockExtra::Record extra; + if (!(tlb::unpack_cell(virt_root, blk) && tlb::unpack_cell(std::move(blk.extra), extra))) { + return td::Status::Error("Error unpacking proof cell"); + } + vm::AugmentedDictionary acc_dict{vm::load_cell_slice_ref(extra.account_blocks), 256, + block::tlb::aug_ShardAccountBlocks}; + + bool eof = false; + ton::LogicalTime reverse = reverse_mode ? ~0ULL : 0; + ton::LogicalTime trans_lt = static_cast(start_lt); + td::Bits256 cur_addr = start_addr; + bool allow_same = true; + int count = 0; + while (!eof && count < req_count && count < max_answer_transactions) { + auto value = acc_dict.extract_value( + acc_dict.vm::DictionaryFixed::lookup_nearest_key(cur_addr.bits(), 256, !reverse, allow_same)); + if (value.is_null()) { + eof = true; + break; + } + allow_same = false; + if (cur_addr != start_addr) { + trans_lt = reverse; + } + + block::gen::AccountBlock::Record acc_blk; + if (!tlb::csr_unpack(std::move(value), acc_blk) || acc_blk.account_addr != cur_addr) { + return td::Status::Error("Error unpacking proof account block"); + } + vm::AugmentedDictionary trans_dict{vm::DictNonEmpty(), std::move(acc_blk.transactions), 64, + block::tlb::aug_AccountTransactions}; + td::BitArray<64> cur_trans{(long long)trans_lt}; + while (count < req_count && count < max_answer_transactions) { + auto tvalue = trans_dict.extract_value_ref( + trans_dict.vm::DictionaryFixed::lookup_nearest_key(cur_trans.bits(), 64, !reverse)); + if (tvalue.is_null()) { + trans_lt = reverse; + break; + } + if (static_cast(count) < bTxes->ids_.size()) { + if (mode & 4 && !tvalue->get_hash().bits().equals(bTxes->ids_[count]->hash_.bits(), 256)) { + return td::Status::Error("Couldn't verify proof (hash)"); + } + if (mode & 2 && cur_trans != td::BitArray<64>(bTxes->ids_[count]->lt_)) { + return td::Status::Error("Couldn't verify proof (lt)"); + } + if (mode & 1 && cur_addr != bTxes->ids_[count]->account_) { + return td::Status::Error("Couldn't verify proof (account)"); + } + } + count++; + } + } + if (static_cast(count) != bTxes->ids_.size()) { + return td::Status::Error(PSLICE() << "Txs count mismatch in proof (" << count << ") and response (" << bTxes->ids_.size() << ")"); + } + } catch (vm::VmError& err) { + return err.as_status("Couldn't verify proof: "); + } catch (vm::VmVirtError& err) { + return err.as_status("Couldn't verify proof: "); + } catch (...) { + return td::Status::Error("Unknown exception raised while verifying proof"); + } + return td::Status::OK(); +} + td::Status TonlibClient::do_request(const tonlib_api::blocks_getTransactions& request, td::Promise>&& promise) { TRY_RESULT(block, to_lite_api(*request.id_)) auto root_hash = block->root_hash_; - bool check_proof = request.mode_ & 32; - bool reverse_mode = request.mode_ & 64; - bool has_starting_tx = request.mode_ & 128; + bool check_proof = request.mode_ & ton::lite_api::liteServer_listBlockTransactions::WANT_PROOF_MASK; + bool reverse_mode = request.mode_ & ton::lite_api::liteServer_listBlockTransactions::REVERSE_ORDER_MASK; + bool has_starting_tx = request.mode_ & ton::lite_api::liteServer_listBlockTransactions::AFTER_MASK; td::Bits256 start_addr; ton::LogicalTime start_lt; @@ -5502,80 +5843,7 @@ td::Status TonlibClient::do_request(const tonlib_api::blocks_getTransactions& re check_proof), promise.wrap([check_proof, reverse_mode, root_hash, req_count = request.count_, start_addr, start_lt, mode = request.mode_] (lite_api_ptr&& bTxes) -> td::Result> { - if (check_proof) { - try { - constexpr int max_answer_transactions = 256; - TRY_RESULT(proof_cell, vm::std_boc_deserialize(std::move(bTxes->proof_))); - auto virt_root = vm::MerkleProof::virtualize(proof_cell, 1); - - if (root_hash != virt_root->get_hash().bits()) { - return td::Status::Error("Invalid block proof root hash"); - } - block::gen::Block::Record blk; - block::gen::BlockExtra::Record extra; - if (!(tlb::unpack_cell(virt_root, blk) && tlb::unpack_cell(std::move(blk.extra), extra))) { - return td::Status::Error("Error unpacking proof cell"); - } - vm::AugmentedDictionary acc_dict{vm::load_cell_slice_ref(extra.account_blocks), 256, - block::tlb::aug_ShardAccountBlocks}; - - bool eof = false; - ton::LogicalTime reverse = reverse_mode ? ~0ULL : 0; - ton::LogicalTime trans_lt = static_cast(start_lt); - td::Bits256 cur_addr = start_addr; - bool allow_same = true; - int count = 0; - while (!eof && count < req_count && count < max_answer_transactions) { - auto value = acc_dict.extract_value( - acc_dict.vm::DictionaryFixed::lookup_nearest_key(cur_addr.bits(), 256, !reverse, allow_same)); - if (value.is_null()) { - eof = true; - break; - } - allow_same = false; - if (cur_addr != start_addr) { - trans_lt = reverse; - } - - block::gen::AccountBlock::Record acc_blk; - if (!tlb::csr_unpack(std::move(value), acc_blk) || acc_blk.account_addr != cur_addr) { - return td::Status::Error("Error unpacking proof account block"); - } - vm::AugmentedDictionary trans_dict{vm::DictNonEmpty(), std::move(acc_blk.transactions), 64, - block::tlb::aug_AccountTransactions}; - td::BitArray<64> cur_trans{(long long)trans_lt}; - while (count < req_count && count < max_answer_transactions) { - auto tvalue = trans_dict.extract_value_ref( - trans_dict.vm::DictionaryFixed::lookup_nearest_key(cur_trans.bits(), 64, !reverse)); - if (tvalue.is_null()) { - trans_lt = reverse; - break; - } - if (static_cast(count) < bTxes->ids_.size()) { - if (mode & 4 && !tvalue->get_hash().bits().equals(bTxes->ids_[count]->hash_.bits(), 256)) { - return td::Status::Error("Couldn't verify proof (hash)"); - } - if (mode & 2 && cur_trans != td::BitArray<64>(bTxes->ids_[count]->lt_)) { - return td::Status::Error("Couldn't verify proof (lt)"); - } - if (mode & 1 && cur_addr != bTxes->ids_[count]->account_) { - return td::Status::Error("Couldn't verify proof (account)"); - } - } - count++; - } - } - if (static_cast(count) != bTxes->ids_.size()) { - return td::Status::Error(PSLICE() << "Txs count mismatch in proof (" << count << ") and response (" << bTxes->ids_.size() << ")"); - } - } catch (vm::VmError& err) { - return err.as_status("Couldn't verify proof: "); - } catch (vm::VmVirtError& err) { - return err.as_status("Couldn't verify proof: "); - } catch (...) { - return td::Status::Error("Unknown exception raised while verifying proof"); - } - } + TRY_STATUS(check_block_transactions_proof(bTxes, mode, start_lt, start_addr, root_hash, req_count)); tonlib_api::blocks_transactions r; r.id_ = to_tonlib_api(*bTxes->id_); @@ -5592,9 +5860,9 @@ td::Status TonlibClient::do_request(const tonlib_api::blocks_getTransactions& re td::Status TonlibClient::do_request(const tonlib_api::blocks_getTransactionsExt& request, td::Promise>&& promise) { TRY_RESULT(block, to_lite_api(*request.id_)) - bool check_proof = request.mode_ & 32; - bool reverse_mode = request.mode_ & 64; - bool has_starting_tx = request.mode_ & 128; + bool check_proof = request.mode_ & ton::lite_api::liteServer_listBlockTransactionsExt::WANT_PROOF_MASK; + bool reverse_mode = request.mode_ & ton::lite_api::liteServer_listBlockTransactionsExt::REVERSE_ORDER_MASK; + bool has_starting_tx = request.mode_ & ton::lite_api::liteServer_listBlockTransactionsExt::AFTER_MASK; td::Bits256 start_addr; ton::LogicalTime start_lt; @@ -5655,77 +5923,78 @@ td::Status TonlibClient::do_request(const tonlib_api::blocks_getTransactionsExt& td::Status TonlibClient::do_request(const tonlib_api::blocks_getBlockHeader& request, td::Promise>&& promise) { - TRY_RESULT(block, to_lite_api(*request.id_)) + TRY_RESULT(lite_block, to_lite_api(*request.id_)) + TRY_RESULT(req_blk_id, to_block_id(*request.id_)); client_.send_query(ton::lite_api::liteServer_getBlockHeader( - std::move(block), + std::move(lite_block), 0xffff), - promise.wrap([](lite_api_ptr&& hdr) { + promise.wrap([req_blk_id](lite_api_ptr&& hdr) -> td::Result> { auto blk_id = ton::create_block_id(hdr->id_); - auto R = vm::std_boc_deserialize(std::move(hdr->header_proof_)); - tonlib_api::blocks_header header; - if (R.is_error()) { - LOG(WARNING) << "R.is_error() "; - } else { - auto root = R.move_as_ok(); - try { - ton::RootHash vhash{root->get_hash().bits()}; - auto virt_root = vm::MerkleProof::virtualize(root, 1); - if (virt_root.is_null()) { - LOG(WARNING) << "virt root is null"; - } else { - std::vector prev; - ton::BlockIdExt mc_blkid; - bool after_split; - auto res = block::unpack_block_prev_blk_ext(virt_root, blk_id, prev, mc_blkid, after_split); - if (res.is_error()) { - LOG(WARNING) << "res.is_error() "; - } else { - block::gen::Block::Record blk; - block::gen::BlockInfo::Record info; - if (!(tlb::unpack_cell(virt_root, blk) && tlb::unpack_cell(blk.info, info))) { - LOG(WARNING) << "unpack failed"; - } else { - header.id_ = to_tonlib_api(blk_id); - header.global_id_ = blk.global_id; - header.version_ = info.version; - header.flags_ = info.flags; - header.after_merge_ = info.after_merge; - header.after_split_ = info.after_split; - header.before_split_ = info.before_split; - header.want_merge_ = info.want_merge; - header.want_split_ = info.want_split; - header.validator_list_hash_short_ = info.gen_validator_list_hash_short; - header.catchain_seqno_ = info.gen_catchain_seqno; - header.min_ref_mc_seqno_ = info.min_ref_mc_seqno; - header.start_lt_ = info.start_lt; - header.end_lt_ = info.end_lt; - header.gen_utime_ = info.gen_utime; - header.is_key_block_ = info.key_block; - header.vert_seqno_ = info.vert_seq_no; - if(!info.not_master) { - header.prev_key_block_seqno_ = info.prev_key_block_seqno; - } - for (auto id : prev) { - header.prev_blocks_.push_back(to_tonlib_api(id)); - } - //if(info.before_split) { - //} else { - //} - return tonlib_api::make_object(std::move(header)); - } - } - } - } catch (vm::VmError& err) { - auto E = err.as_status(PSLICE() << "error processing header for " << blk_id.to_str() << " :"); - LOG(ERROR) << std::move(E); - } catch (vm::VmVirtError& err) { - auto E = err.as_status(PSLICE() << "error processing header for " << blk_id.to_str() << " :"); - LOG(ERROR) << std::move(E); - } catch (...) { - LOG(WARNING) << "exception catched "; - } + if (blk_id != req_blk_id) { + return td::Status::Error("Liteserver responded with wrong block"); + } + auto R = vm::std_boc_deserialize(std::move(hdr->header_proof_)); + if (R.is_error()) { + return R.move_as_error_prefix("Couldn't deserialize header proof: "); + } else { + auto root = R.move_as_ok(); + try { + auto virt_root = vm::MerkleProof::virtualize(root, 1); + if (virt_root.is_null()) { + return td::Status::Error("Virt root is null"); + } else { + if (ton::RootHash{virt_root->get_hash().bits()} != blk_id.root_hash) { + return td::Status::Error("Block header merkle proof has incorrect root hash"); + } + std::vector prev; + ton::BlockIdExt mc_blkid; + bool after_split; + auto res = + block::unpack_block_prev_blk_ext(virt_root, blk_id, prev, mc_blkid, after_split); + if (res.is_error()) { + return td::Status::Error("Unpack failed"); + } else { + block::gen::Block::Record blk; + block::gen::BlockInfo::Record info; + if (!(tlb::unpack_cell(virt_root, blk) && tlb::unpack_cell(blk.info, info))) { + return td::Status::Error("Unpack failed"); + } else { + tonlib_api::blocks_header header; + header.id_ = to_tonlib_api(blk_id); + header.global_id_ = blk.global_id; + header.version_ = info.version; + header.flags_ = info.flags; + header.after_merge_ = info.after_merge; + header.after_split_ = info.after_split; + header.before_split_ = info.before_split; + header.want_merge_ = info.want_merge; + header.want_split_ = info.want_split; + header.validator_list_hash_short_ = info.gen_validator_list_hash_short; + header.catchain_seqno_ = info.gen_catchain_seqno; + header.min_ref_mc_seqno_ = info.min_ref_mc_seqno; + header.start_lt_ = info.start_lt; + header.end_lt_ = info.end_lt; + header.gen_utime_ = info.gen_utime; + header.is_key_block_ = info.key_block; + header.vert_seqno_ = info.vert_seq_no; + if (!info.not_master) { + header.prev_key_block_seqno_ = info.prev_key_block_seqno; + } + for (auto& id : prev) { + header.prev_blocks_.push_back(to_tonlib_api(id)); + } + return tonlib_api::make_object(std::move(header)); + } + } + } + } catch (vm::VmError& err) { + return err.as_status(PSLICE() << "error processing header for " << blk_id.to_str() << " :"); + } catch (vm::VmVirtError& err) { + return err.as_status(PSLICE() << "error processing header for " << blk_id.to_str() << " :"); + } catch (...) { + return td::Status::Error("Unhandled exception catched while processing header"); + } } - return tonlib_api::make_object(std::move(header)); })); return td::Status::OK(); } @@ -5764,14 +6033,14 @@ void TonlibClient::load_libs_from_disk() { } libraries = vm::Dictionary(vm::load_cell_slice(vm::CellBuilder().append_cellslice(vm::load_cell_slice( r_dict.move_as_ok())).finalize()), 256); - // int n = 0; for (auto&& lr : libraries) n++; + LOG(DEBUG) << "loaded libraries from disk cache"; } void TonlibClient::store_libs_to_disk() { // NB: Dictionary.get_root_cell does not compute_root, and it is protected kv_->set("tonlib.libcache", vm::std_boc_serialize(vm::CellBuilder().append_cellslice(libraries.get_root()) .finalize()).move_as_ok().as_slice()); - // int n = 0; for (auto&& lr : libraries) n++; + LOG(DEBUG) << "stored libraries to disk cache"; } diff --git a/tonlib/tonlib/TonlibClient.h b/tonlib/tonlib/TonlibClient.h index f4651b9d..001df748 100644 --- a/tonlib/tonlib/TonlibClient.h +++ b/tonlib/tonlib/TonlibClient.h @@ -330,6 +330,7 @@ class TonlibClient : public td::actor::Actor { td::Status do_request(const tonlib_api::smc_getLibraries& request, td::Promise>&& promise); + void get_libraries(ton::BlockIdExt blkid, std::vector library_list_, td::Promise>&& promise); td::Status do_request(const tonlib_api::smc_getLibrariesExt& request, td::Promise>&& promise); diff --git a/tonlib/tonlib/Wallet.cpp b/tonlib/tonlib/Wallet.cpp deleted file mode 100644 index b4682823..00000000 --- a/tonlib/tonlib/Wallet.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#include "tonlib/Wallet.h" -#include "tonlib/CellString.h" -#include "tonlib/GenericAccount.h" -#include "tonlib/utils.h" - -#include "vm/boc.h" -#include "td/utils/base64.h" - -#include - -namespace tonlib { -td::Ref Wallet::get_init_state(const td::Ed25519::PublicKey& public_key) noexcept { - auto code = get_init_code(); - auto data = get_init_data(public_key); - return GenericAccount::get_init_state(std::move(code), std::move(data)); -} - -td::Ref Wallet::get_init_message(const td::Ed25519::PrivateKey& private_key) noexcept { - td::uint32 seqno = 0; - td::uint32 valid_until = std::numeric_limits::max(); - auto signature = - private_key - .sign(vm::CellBuilder().store_long(seqno, 32).store_long(valid_until, 32).finalize()->get_hash().as_slice()) - .move_as_ok(); - return vm::CellBuilder().store_bytes(signature).store_long(seqno, 32).store_long(valid_until, 32).finalize(); -} - -td::Ref Wallet::make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 seqno, - td::uint32 valid_until, td::int64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept { - td::BigInt256 dest_addr; - dest_addr.import_bits(dest_address.addr.as_bitslice()); - vm::CellBuilder cb; - cb.append_cellslice(binary_bitstring_to_cellslice("b{01}").move_as_ok()) - .store_long(dest_address.bounceable, 1) - .append_cellslice(binary_bitstring_to_cellslice("b{000100}").move_as_ok()) - .store_long(dest_address.workchain, 8) - .store_int256(dest_addr, 256); - td::int32 send_mode = 3; - if (gramms == -1) { - gramms = 0; - send_mode += 128; - } - block::tlb::t_Grams.store_integer_value(cb, td::BigInt256(gramms)); - cb.store_zeroes(9 + 64 + 32 + 1 + 1).store_bytes("\0\0\0\0", 4); - vm::CellString::store(cb, message, 35 * 8).ensure(); - auto message_inner = cb.finalize(); - auto message_outer = vm::CellBuilder() - .store_long(seqno, 32) - .store_long(valid_until, 32) - .store_long(send_mode, 8) - .store_ref(message_inner) - .finalize(); - std::string seq_no(4, 0); - auto signature = private_key.sign(message_outer->get_hash().as_slice()).move_as_ok(); - return vm::CellBuilder().store_bytes(signature).append_cellslice(vm::load_cell_slice(message_outer)).finalize(); -} - -td::Ref Wallet::get_init_code() noexcept { - static auto res = [] { - auto serialized_code = td::base64_decode( - "te6ccgEEAQEAAAAAVwAAqv8AIN0gggFMl7qXMO1E0NcLH+Ck8mCDCNcYINMf0x8B+CO78mPtRNDTH9P/" - "0VExuvKhA/kBVBBC+RDyovgAApMg10qW0wfUAvsA6NGkyMsfy//J7VQ=") - .move_as_ok(); - return vm::std_boc_deserialize(serialized_code).move_as_ok(); - }(); - return res; -} - -vm::CellHash Wallet::get_init_code_hash() noexcept { - return get_init_code()->get_hash(); -} - -td::Ref Wallet::get_init_data(const td::Ed25519::PublicKey& public_key) noexcept { - return vm::CellBuilder().store_long(0, 32).store_bytes(public_key.as_octet_string()).finalize(); -} -} // namespace tonlib diff --git a/tonlib/tonlib/Wallet.h b/tonlib/tonlib/Wallet.h deleted file mode 100644 index dd114cce..00000000 --- a/tonlib/tonlib/Wallet.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - This file is part of TON Blockchain Library. - - TON Blockchain Library is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - TON Blockchain Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with TON Blockchain Library. If not, see . - - Copyright 2017-2019 Telegram Systems LLP -*/ -#pragma once - -#include "vm/cells.h" -#include "Ed25519.h" -#include "block/block.h" -#include "CellString.h" - -namespace tonlib { -class Wallet { - public: - static constexpr unsigned max_message_size = vm::CellString::max_bytes; - static td::Ref get_init_state(const td::Ed25519::PublicKey& public_key) noexcept; - static td::Ref get_init_message(const td::Ed25519::PrivateKey& private_key) noexcept; - static td::Ref make_a_gift_message(const td::Ed25519::PrivateKey& private_key, td::uint32 seqno, - td::uint32 valid_until, td::int64 gramms, td::Slice message, - const block::StdAddress& dest_address) noexcept; - - static td::Ref get_init_code() noexcept; - static vm::CellHash get_init_code_hash() noexcept; - static td::Ref get_init_data(const td::Ed25519::PublicKey& public_key) noexcept; -}; -} // namespace tonlib diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index 7ff2345a..5d40b8c2 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -233,6 +233,9 @@ void LiteQuery::perform() { [&](lite_api::liteServer_lookupBlock& q) { this->perform_lookupBlock(ton::create_block_id_simple(q.id_), q.mode_, q.lt_, q.utime_); }, + [&](lite_api::liteServer_lookupBlockWithProof& q) { + this->perform_lookupBlockWithProof(ton::create_block_id_simple(q.id_), ton::create_block_id(q.mc_block_id_), q.mode_, q.lt_, q.utime_); + }, [&](lite_api::liteServer_listBlockTransactions& q) { this->perform_listBlockTransactions(ton::create_block_id(q.id_), q.mode_, q.count_, (q.mode_ & 128) ? q.after_->account_ : td::Bits256::zero(), @@ -266,6 +269,9 @@ void LiteQuery::perform() { [&](lite_api::liteServer_getLibraries& q) { this->perform_getLibraries(q.library_list_); }, + [&](lite_api::liteServer_getLibrariesWithProof& q) { + this->perform_getLibrariesWithProof(ton::create_block_id(q.id_), q.mode_, q.library_list_); + }, [&](lite_api::liteServer_getShardBlockProof& q) { this->perform_getShardBlockProof(create_block_id(q.id_)); }, @@ -964,6 +970,100 @@ void LiteQuery::continue_getLibraries(Ref mc_s finish_query(std::move(b)); } +void LiteQuery::perform_getLibrariesWithProof(BlockIdExt blkid, int mode, std::vector library_list) { + LOG(INFO) << "started a getLibrariesWithProof() liteserver query"; + if (library_list.size() > 16) { + LOG(INFO) << "too many libraries requested, returning only first 16"; + library_list.resize(16); + } + sort( library_list.begin(), library_list.end() ); + library_list.erase( unique( library_list.begin(), library_list.end() ), library_list.end() ); + + set_continuation([this, library_list, mode]() -> void { continue_getLibrariesWithProof(library_list, mode); }); + request_mc_block_data_state(blkid); +} + +void LiteQuery::continue_getLibrariesWithProof(std::vector library_list, int mode) { + LOG(INFO) << "obtained masterchain block = " << base_blk_id_.to_str(); + CHECK(mc_state_.not_null()); + + Ref state_proof, data_proof; + if (!make_mc_state_root_proof(state_proof)) { + return; + } + + vm::MerkleProofBuilder pb{mc_state_->root_cell()}; + block::gen::ShardStateUnsplit::Record state; + if (!tlb::unpack_cell(pb.root(), state)) { + fatal_error("cannot unpack header of shardchain state "s + base_blk_id_.to_str()); + } + auto libraries_dict = vm::Dictionary(state.r1.libraries->prefetch_ref(), 256); + + std::vector> result; + std::vector result_hashes; + for (const auto& hash : library_list) { + LOG(INFO) << "looking for library " << hash.to_hex(); + + auto csr = libraries_dict.lookup(hash.bits(), 256); + if (csr.is_null() || csr->prefetch_ulong(2) != 0 || !csr->have_refs()) { // shared_lib_descr$00 lib:^Cell + continue; + } + block::gen::LibDescr::Record libdescr; + if (!tlb::csr_unpack(csr, libdescr)) { + fatal_error("cannot unpack LibDescr record "s + hash.to_hex()); + return; + } + if (mode & 1) { + // include first 16 publishers in the proof + auto publishers_dict = vm::Dictionary{vm::DictNonEmpty(), libdescr.publishers, 256}; + auto iter = publishers_dict.begin(); + constexpr int max_publishers = 15; // set to 15 because publishers_dict.begin() counts as the first visit + for (int i = 0; i < max_publishers && iter != publishers_dict.end(); ++i, ++iter) {} + } + + result_hashes.push_back(hash); + } + + auto data_proof_boc = pb.extract_proof_boc(); + if (data_proof_boc.is_error()) { + fatal_error(data_proof_boc.move_as_error()); + return; + } + auto state_proof_boc = vm::std_boc_serialize(std::move(state_proof)); + if (state_proof_boc.is_error()) { + fatal_error(state_proof_boc.move_as_error()); + return; + } + + for (const auto& hash : result_hashes) { + auto csr = libraries_dict.lookup(hash.bits(), 256); + block::gen::LibDescr::Record libdescr; + if (!tlb::csr_unpack(csr, libdescr)) { + fatal_error("cannot unpack LibDescr record "s + hash.to_hex()); + return; + } + if (!libdescr.lib->get_hash().bits().equals(hash.bits(), 256)) { + LOG(ERROR) << "public library hash mismatch: expected " << hash.to_hex() << " , found " + << libdescr.lib->get_hash().to_hex(); + continue; + } + td::BufferSlice libdata; + if (!(mode & 2)) { + auto data = vm::std_boc_serialize(libdescr.lib); + if (data.is_error()) { + LOG(WARNING) << "library serialization failed: " << data.move_as_error().to_string(); + continue; + } + libdata = data.move_as_ok(); + } + result.push_back(ton::create_tl_object(hash, std::move(libdata))); + } + + auto b = ton::create_serialize_tl_object(ton::create_tl_lite_block_id(base_blk_id_), mode, std::move(result), + state_proof_boc.move_as_ok(), data_proof_boc.move_as_ok()); + finish_query(std::move(b)); +} + void LiteQuery::perform_getOneTransaction(BlockIdExt blkid, WorkchainId workchain, StdSmcAddress addr, LogicalTime lt) { LOG(INFO) << "started a getOneTransaction(" << blkid.to_str() << ", " << workchain << ", " << addr.to_hex() << "," << lt << ") liteserver query"; @@ -1853,7 +1953,7 @@ void LiteQuery::continue_getConfigParams(int mode, std::vector param_list) void LiteQuery::perform_getAllShardsInfo(BlockIdExt blkid) { LOG(INFO) << "started a getAllShardsInfo(" << blkid.to_str() << ") liteserver query"; set_continuation([&]() -> void { continue_getAllShardsInfo(); }); - request_mc_block_data_state(blkid); + request_mc_block_data(blkid); } void LiteQuery::continue_getShardInfo(ShardIdFull shard, bool exact) { @@ -1900,30 +2000,30 @@ void LiteQuery::continue_getShardInfo(ShardIdFull shard, bool exact) { void LiteQuery::continue_getAllShardsInfo() { LOG(INFO) << "completing getAllShardsInfo() query"; - Ref proof1, proof2; - if (!make_mc_state_root_proof(proof1)) { + vm::MerkleProofBuilder mpb{mc_block_->root_cell()}; + block::gen::Block::Record blk; + block::gen::BlockExtra::Record extra; + block::gen::McBlockExtra::Record mc_extra; + if (!tlb::unpack_cell(mpb.root(), blk) || !tlb::unpack_cell(blk.extra, extra) || !extra.custom->have_refs() || + !tlb::unpack_cell(extra.custom->prefetch_ref(), mc_extra)) { + fatal_error("cannot unpack header of block "s + mc_block_->block_id().to_str()); return; } - vm::MerkleProofBuilder mpb{mc_state_->root_cell()}; - auto shards_dict = block::ShardConfig::extract_shard_hashes_dict(mpb.root()); - if (!shards_dict) { - fatal_error("cannot extract ShardHashes from last mc state"); - return; - } - if (!mpb.extract_proof_to(proof2)) { + vm::Dictionary shards_dict(std::move(mc_extra.shard_hashes), 32); + Ref proof; + if (!mpb.extract_proof_to(proof)) { fatal_error("cannot construct Merkle proof for all shards dictionary"); return; } - shards_dict = block::ShardConfig::extract_shard_hashes_dict(mc_state_->root_cell()); - vm::CellBuilder cb; - Ref cell; - if (!(std::move(shards_dict)->append_dict_to_bool(cb) && cb.finalize_to(cell))) { - fatal_error("cannot store ShardHashes from last mc state into a new cell"); + auto proof_boc = vm::std_boc_serialize(std::move(proof)); + if (proof_boc.is_error()) { + fatal_error(proof_boc.move_as_error()); return; } - auto proof = vm::std_boc_serialize_multi({std::move(proof1), std::move(proof2)}); - if (proof.is_error()) { - fatal_error(proof.move_as_error()); + vm::CellBuilder cb; + Ref cell; + if (!(shards_dict.append_dict_to_bool(cb) && cb.finalize_to(cell))) { + fatal_error("cannot store ShardHashes from last mc block into a new cell"); return; } auto data = vm::std_boc_serialize(std::move(cell)); @@ -1933,10 +2033,307 @@ void LiteQuery::continue_getAllShardsInfo() { } LOG(INFO) << "getAllShardInfo() query completed"; auto b = ton::create_serialize_tl_object( - ton::create_tl_lite_block_id(base_blk_id_), proof.move_as_ok(), data.move_as_ok()); + ton::create_tl_lite_block_id(base_blk_id_), proof_boc.move_as_ok(), data.move_as_ok()); finish_query(std::move(b)); } +void LiteQuery::perform_lookupBlockWithProof(BlockId blkid, BlockIdExt mc_blkid, int mode, LogicalTime lt, UnixTime utime) { + if (!((1 << (mode & 7)) & 0x16)) { + fatal_error("exactly one of mode.0, mode.1 and mode.2 bits must be set"); + return; + } + if (!mc_blkid.is_masterchain_ext()) { + fatal_error("masterchain block id must be specified"); + return; + } + if (!(mode & 1)) { + blkid.seqno = 0; + } + if (!(mode & 2)) { + lt = 0; + } + if (!(mode & 4)) { + utime = 0; + } + mode_ = mode; + base_blk_id_ = mc_blkid; + LOG(INFO) << "started a lookupBlockWithProof(" << blkid.to_str() << ", " << mc_blkid.to_str() << ", " << mode << ", " + << lt << ", " << utime << ") liteserver query"; + + ton::AccountIdPrefixFull pfx{blkid.workchain, blkid.shard}; + auto P = td::PromiseCreator::lambda( + [Self = actor_id(this), mc_blkid, manager = manager_, mode, pfx](td::Result res) { + if (res.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); + return; + } + auto handle = res.move_as_ok(); + if (!handle->inited_masterchain_ref_block()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, td::Status::Error("block doesn't have masterchain ref")); + return; + } + if (handle->masterchain_ref_block() > mc_blkid.seqno()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, td::Status::Error("specified mc block is older than block's masterchain ref")); + return; + } + LOG(DEBUG) << "requesting data for block " << handle->id().to_str(); + td::actor::send_closure_later(manager, &ValidatorManager::get_block_data_from_db, handle, + [Self, mc_ref_blkid = handle->masterchain_ref_block(), mc_blkid, pfx, mode](td::Result> res) { + if (res.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); + } else { + td::actor::send_closure_later(Self, &LiteQuery::continue_lookupBlockWithProof_getHeaderProof, res.move_as_ok(), pfx, mc_ref_blkid); + } + }); + }); + + if (mode & 2) { + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_lt_from_db_for_litequery, pfx, lt, std::move(P)); + } else if (mode & 4) { + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_unix_time_from_db_for_litequery, pfx, utime, std::move(P)); + } else { + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_seqno_from_db_for_litequery, pfx, blkid.seqno, std::move(P)); + } +} + +void LiteQuery::continue_lookupBlockWithProof_getHeaderProof(Ref block, AccountIdPrefixFull req_prefix, BlockSeqno masterchain_ref_seqno) { + blk_id_ = block->block_id(); + LOG(INFO) << "obtained data for getBlockHeader(" << blk_id_.to_str() << ", " << mode_ << ")"; + CHECK(block.not_null()); + auto block_root = block->root_cell(); + if (block_root.is_null()) { + fatal_error("block has no valid root cell"); + return; + } + + vm::MerkleProofBuilder mpb{block_root}; + std::vector prev; + BlockIdExt mc_blkid; + bool after_split; + td::Status S = block::unpack_block_prev_blk_try(mpb.root(), blk_id_, prev, mc_blkid, after_split); + if (S.is_error()) { + fatal_error(std::move(S)); + return; + } + auto proof_data = mpb.extract_proof_boc(); + if (proof_data.is_error()) { + fatal_error(proof_data.move_as_error()); + return; + } + lookup_header_proof_ = proof_data.move_as_ok(); + + bool include_prev = mode_ & 6; + if (include_prev) { + BlockIdExt prev_blkid; + for (auto& p : prev) { + if (ton::shard_contains(p.shard_full(), req_prefix)) { + prev_blkid = p; + } + } + CHECK(prev_blkid.is_valid()); + get_block_handle_checked(prev_blkid, [Self = actor_id(this), masterchain_ref_seqno, manager = manager_](td::Result R) mutable { + if (R.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); + return; + } + td::actor::send_closure(manager, &ValidatorManager::get_block_data_from_db, R.move_as_ok(), + [Self, masterchain_ref_seqno](td::Result> res) mutable { + if (res.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); + return; + } + td::actor::send_closure(Self, &LiteQuery::continue_lookupBlockWithProof_gotPrevBlockData, res.move_as_ok(), masterchain_ref_seqno); + }); + }); + } else { + continue_lookupBlockWithProof_gotPrevBlockData(Ref(), masterchain_ref_seqno); + } +} + +void LiteQuery::continue_lookupBlockWithProof_gotPrevBlockData(Ref prev_block, BlockSeqno masterchain_ref_seqno) { + if (prev_block.not_null()) { + CHECK(prev_block.not_null()); + if (prev_block->root_cell().is_null()) { + fatal_error("block has no valid root cell"); + return; + } + vm::MerkleProofBuilder mpb{prev_block->root_cell()}; + block::gen::Block::Record blk; + block::gen::BlockInfo::Record info; + if (!(tlb::unpack_cell(mpb.root(), blk) && tlb::unpack_cell(blk.info, info))) { + fatal_error(td::Status::Error("cannot unpack prev block header")); + return; + } + auto proof_data = mpb.extract_proof_boc(); + if (proof_data.is_error()) { + fatal_error(proof_data.move_as_error()); + return; + } + lookup_prev_header_proof_ = proof_data.move_as_ok(); + } + + if (!blk_id_.is_masterchain()) { + ton::AccountIdPrefixFull pfx{ton::masterchainId, ton::shardIdAll}; + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_seqno_from_db, pfx, masterchain_ref_seqno, + [manager = manager_, Self = actor_id(this)](td::Result R) mutable { + if (R.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); + return; + } + td::actor::send_closure(manager, &ValidatorManager::get_block_data_from_db, R.move_as_ok(), + [Self](td::Result> res) mutable { + if (res.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); + return; + } + td::actor::send_closure(Self, &LiteQuery::continue_lookupBlockWithProof_buildProofLinks, res.move_as_ok(), std::vector>>()); + }); + }); + } else { + base_blk_id_alt_ = blk_id_; + td::actor::send_closure(actor_id(this), &LiteQuery::continue_lookupBlockWithProof_getClientMcBlockDataState, std::vector>>()); + } +} + +void LiteQuery::continue_lookupBlockWithProof_buildProofLinks(td::Ref cur_block, + std::vector>> result) { + BlockIdExt cur_id = cur_block->block_id(); + BlockIdExt prev_id; + vm::MerkleProofBuilder mpb{cur_block->root_cell()}; + if (cur_id.is_masterchain()) { + base_blk_id_alt_ = cur_id; + block::gen::Block::Record blk; + block::gen::BlockExtra::Record extra; + block::gen::McBlockExtra::Record mc_extra; + if (!tlb::unpack_cell(mpb.root(), blk) || !tlb::unpack_cell(blk.extra, extra) || !extra.custom->have_refs() || + !tlb::unpack_cell(extra.custom->prefetch_ref(), mc_extra)) { + fatal_error("cannot unpack header of block "s + cur_id.to_str()); + return; + } + block::ShardConfig shards(mc_extra.shard_hashes->prefetch_ref()); + ShardIdFull shard_id = blk_id_.shard_full(); + shard_id.shard = (shard_id.shard & ~(1 << (63 - shard_id.pfx_len()))) | 1; + Ref shard_hash = shards.get_shard_hash(shard_id, false); + if (shard_hash.is_null()) { + fatal_error("shard not found"); + return; + } + prev_id = shard_hash->top_block_id(); + } else { + std::vector prev; + BlockIdExt mc_blkid; + bool after_split; + td::Status S = block::unpack_block_prev_blk_try(mpb.root(), cur_id, prev, mc_blkid, after_split); + if (S.is_error()) { + fatal_error(std::move(S)); + return; + } + bool found = false; + for (const BlockIdExt& id : prev) { + if (shard_intersects(id.shard_full(), blk_id_.shard_full())) { + found = true; + prev_id = id; + break; + } + } + if (!found) { + fatal_error("failed to find block chain"); + return; + } + } + auto proof = mpb.extract_proof(); + if (proof.is_error()) { + fatal_error(proof.move_as_error_prefix("cannot serialize Merkle proof : ")); + return; + } + result.emplace_back(prev_id, proof.move_as_ok()); + + if (prev_id == blk_id_) { + CHECK(base_blk_id_alt_.is_masterchain()); + if (base_blk_id_alt_ != base_blk_id_) { + continue_lookupBlockWithProof_getClientMcBlockDataState(std::move(result)); + } else { + continue_lookupBlockWithProof_getMcBlockPrev(std::move(result)); + } + return; + } + if (result.size() == 8) { + // Chains of shardblocks between masterchain blocks can't be longer than 8 (see collator.cpp:991) + fatal_error("proof chain is too long"); + return; + } + + td::actor::send_closure_later( + manager_, &ValidatorManager::get_block_data_from_db_short, prev_id, + [Self = actor_id(this), result = std::move(result)](td::Result> R) mutable { + if (R.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); + } else { + td::actor::send_closure_later(Self, &LiteQuery::continue_lookupBlockWithProof_buildProofLinks, R.move_as_ok(), + std::move(result)); + } + }); +} + +void LiteQuery::continue_lookupBlockWithProof_getClientMcBlockDataState(std::vector>> links) { + set_continuation([this, links = std::move(links)]() -> void { + continue_lookupBlockWithProof_getMcBlockPrev(std::move(links)); + }); + request_mc_block_data_state(base_blk_id_); +} + +void LiteQuery::continue_lookupBlockWithProof_getMcBlockPrev(std::vector>> links) { + td::BufferSlice mc_state_proof_buf, client_mc_blk_proof_buf; + + if (base_blk_id_alt_ != base_blk_id_) { + vm::MerkleProofBuilder mpb{mc_state_->root_cell()}; + auto prev_blocks_dict = block::get_prev_blocks_dict(mpb.root()); + if (!prev_blocks_dict) { + fatal_error(td::Status::Error("cannot extract prev_blocks from mc state")); + return; + } + if (!block::check_old_mc_block_id(*prev_blocks_dict, base_blk_id_alt_)) { + fatal_error(td::Status::Error("client mc blkid is not in prev_blocks")); + return; + } + auto client_mc_blk_proof = mpb.extract_proof_boc(); + if (client_mc_blk_proof.is_error()) { + fatal_error(client_mc_blk_proof.move_as_error()); + return; + } + client_mc_blk_proof_buf = client_mc_blk_proof.move_as_ok(); + + Ref mc_state_proof; + if (!make_mc_state_root_proof(mc_state_proof)) { + fatal_error(td::Status::Error("cannot create Merkle proof for mc state")); + return; + } + auto mc_state_proof_boc = vm::std_boc_serialize(std::move(mc_state_proof)); + if (mc_state_proof_boc.is_error()) { + fatal_error(mc_state_proof_boc.move_as_error()); + return; + } + mc_state_proof_buf = mc_state_proof_boc.move_as_ok(); + } + + std::vector> links_res; + for (auto& p : links) { + auto prev_block_proof = vm::std_boc_serialize(std::move(p.second)); + if (prev_block_proof.is_error()) { + fatal_error(prev_block_proof.move_as_error()); + return; + } + links_res.push_back( + create_tl_object(create_tl_lite_block_id(p.first), prev_block_proof.move_as_ok())); + } + + auto b = ton::create_serialize_tl_object(ton::create_tl_lite_block_id(blk_id_), + mode_, ton::create_tl_lite_block_id(base_blk_id_alt_), std::move(mc_state_proof_buf), std::move(client_mc_blk_proof_buf), + std::move(links_res), std::move(lookup_header_proof_), std::move(lookup_prev_header_proof_)); + finish_query(std::move(b)); +} + + void LiteQuery::perform_lookupBlock(BlockId blkid, int mode, LogicalTime lt, UnixTime utime) { if (!((1 << (mode & 7)) & 0x16)) { fatal_error("exactly one of mode.0, mode.1 and mode.2 bits must be set"); diff --git a/validator/impl/liteserver.hpp b/validator/impl/liteserver.hpp index 145fff3d..931dd6f6 100644 --- a/validator/impl/liteserver.hpp +++ b/validator/impl/liteserver.hpp @@ -69,6 +69,9 @@ class LiteQuery : public td::actor::Actor { std::unique_ptr chain_; Ref stack_; + td::BufferSlice lookup_header_proof_; + td::BufferSlice lookup_prev_header_proof_; + public: enum { default_timeout_msec = 4500, // 4.5 seconds @@ -124,6 +127,8 @@ class LiteQuery : public td::actor::Actor { UnixTime gen_utime, LogicalTime gen_lt); void perform_getLibraries(std::vector library_list); void continue_getLibraries(Ref mc_state, BlockIdExt blkid, std::vector library_list); + void perform_getLibrariesWithProof(BlockIdExt blkid, int mode, std::vector library_list); + void continue_getLibrariesWithProof(std::vector library_list, int mode); void perform_getOneTransaction(BlockIdExt blkid, WorkchainId workchain, StdSmcAddress addr, LogicalTime lt); void continue_getOneTransaction(); void perform_getTransactions(WorkchainId workchain, StdSmcAddress addr, LogicalTime lt, Bits256 hash, unsigned count); @@ -138,6 +143,12 @@ class LiteQuery : public td::actor::Actor { void perform_getConfigParams(BlockIdExt blkid, int mode, std::vector param_list = {}); void continue_getConfigParams(int mode, std::vector param_list); void perform_lookupBlock(BlockId blkid, int mode, LogicalTime lt, UnixTime utime); + void perform_lookupBlockWithProof(BlockId blkid, BlockIdExt client_mc_blkid, int mode, LogicalTime lt, UnixTime utime); + void continue_lookupBlockWithProof_getHeaderProof(Ref block, AccountIdPrefixFull req_prefix, BlockSeqno masterchain_ref_seqno); + void continue_lookupBlockWithProof_gotPrevBlockData(Ref prev_block, BlockSeqno masterchain_ref_seqno); + void continue_lookupBlockWithProof_buildProofLinks(td::Ref cur_block, std::vector>> result); + void continue_lookupBlockWithProof_getClientMcBlockDataState(std::vector>> links); + void continue_lookupBlockWithProof_getMcBlockPrev(std::vector>> links); void perform_listBlockTransactions(BlockIdExt blkid, int mode, int count, Bits256 account, LogicalTime lt); void finish_listBlockTransactions(int mode, int count); void perform_listBlockTransactionsExt(BlockIdExt blkid, int mode, int count, Bits256 account, LogicalTime lt); From 0a82a1931328a76523307360d26a20d0ed31011c Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 19 Mar 2024 15:43:03 +0300 Subject: [PATCH 110/351] Don't serialize expired persistent states (#935) Co-authored-by: SpyCheese --- validator/state-serializer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/validator/state-serializer.cpp b/validator/state-serializer.cpp index 4ac4fc70..8e1b1b57 100644 --- a/validator/state-serializer.cpp +++ b/validator/state-serializer.cpp @@ -287,7 +287,8 @@ bool AsyncStateSerializer::need_serialize(BlockHandle handle) { if (handle->id().id.seqno == 0 || !handle->is_key_block()) { return false; } - return ValidatorManager::is_persistent_state(handle->unix_time(), last_key_block_ts_); + return ValidatorManager::is_persistent_state(handle->unix_time(), last_key_block_ts_) && + ValidatorManager::persistent_state_ttl(handle->unix_time()) > (UnixTime)td::Clocks::system(); } } // namespace validator From 14f319d29cc547d078d8d025b5f6f40af102bf8a Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Tue, 19 Mar 2024 19:07:09 +0100 Subject: [PATCH 111/351] Build fix: 'all_of' identifier not found (#936) --- tonlib/tonlib/KeyValue.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tonlib/tonlib/KeyValue.cpp b/tonlib/tonlib/KeyValue.cpp index ca055aad..b62ce7c0 100644 --- a/tonlib/tonlib/KeyValue.cpp +++ b/tonlib/tonlib/KeyValue.cpp @@ -22,6 +22,7 @@ #include "td/utils/port/path.h" #include "td/utils/PathView.h" +#include #include #include From 7a6bfa7e7a7a705f189ca38bb4542aad33f6ed13 Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Wed, 20 Mar 2024 12:21:40 +0100 Subject: [PATCH 112/351] Save rocksdb statistics to file every minute (#932) * Save rocksdb statistics to file every minute * Add flag to disable collecting rocksdb statistics --- tddb/td/db/RocksDb.cpp | 15 +++++++++++++-- tddb/td/db/RocksDb.h | 6 +++++- validator-engine/validator-engine.cpp | 4 ++++ validator-engine/validator-engine.hpp | 4 ++++ validator/db/archive-manager.cpp | 20 +++++++++++++++++--- validator/db/archive-manager.hpp | 3 +++ validator/db/archive-slice.cpp | 7 ++++--- validator/db/archive-slice.hpp | 7 ++++++- validator/db/celldb.cpp | 15 ++++++++++++++- validator/db/celldb.hpp | 6 ++++++ validator/validator-options.hpp | 7 +++++++ validator/validator.h | 2 ++ 12 files changed, 85 insertions(+), 11 deletions(-) diff --git a/tddb/td/db/RocksDb.cpp b/tddb/td/db/RocksDb.cpp index 500985e2..a84a804b 100644 --- a/tddb/td/db/RocksDb.cpp +++ b/tddb/td/db/RocksDb.cpp @@ -59,9 +59,8 @@ RocksDb RocksDb::clone() const { return RocksDb{db_, statistics_}; } -Result RocksDb::open(std::string path) { +Result RocksDb::open(std::string path, std::shared_ptr statistics) { rocksdb::OptimisticTransactionDB *db; - auto statistics = rocksdb::CreateDBStatistics(); { rocksdb::Options options; @@ -94,6 +93,18 @@ Result RocksDb::open(std::string path) { return RocksDb(std::shared_ptr(db), std::move(statistics)); } +std::shared_ptr RocksDb::create_statistics() { + return rocksdb::CreateDBStatistics(); +} + +std::string RocksDb::statistics_to_string(const std::shared_ptr statistics) { + return statistics->ToString(); +} + +void RocksDb::reset_statistics(const std::shared_ptr statistics) { + statistics->Reset(); +} + std::unique_ptr RocksDb::snapshot() { auto res = std::make_unique(clone()); res->begin_snapshot().ensure(); diff --git a/tddb/td/db/RocksDb.h b/tddb/td/db/RocksDb.h index b8bfaf9d..1afba4cc 100644 --- a/tddb/td/db/RocksDb.h +++ b/tddb/td/db/RocksDb.h @@ -38,7 +38,7 @@ class RocksDb : public KeyValue { public: static Status destroy(Slice path); RocksDb clone() const; - static Result open(std::string path); + static Result open(std::string path, std::shared_ptr statistics = nullptr); Result get(Slice key, std::string &value) override; Status set(Slice key, Slice value) override; @@ -60,6 +60,10 @@ class RocksDb : public KeyValue { std::unique_ptr snapshot() override; std::string stats() const override; + static std::shared_ptr create_statistics(); + static std::string statistics_to_string(const std::shared_ptr statistics); + static void reset_statistics(const std::shared_ptr statistics); + RocksDb(RocksDb &&); RocksDb &operator=(RocksDb &&); ~RocksDb(); diff --git a/validator-engine/validator-engine.cpp b/validator-engine/validator-engine.cpp index 96103cd0..6b8485d4 100644 --- a/validator-engine/validator-engine.cpp +++ b/validator-engine/validator-engine.cpp @@ -1367,6 +1367,7 @@ td::Status ValidatorEngine::load_global_config() { validator_options_.write().set_celldb_compress_depth(celldb_compress_depth_); validator_options_.write().set_max_open_archive_files(max_open_archive_files_); validator_options_.write().set_archive_preload_period(archive_preload_period_); + validator_options_.write().set_disable_rocksdb_stats(disable_rocksdb_stats_); std::vector h; for (auto &x : conf.validator_->hardforks_) { @@ -3816,6 +3817,9 @@ int main(int argc, char *argv[]) { p.add_option('\0', "enable-precompiled-smc", "enable exectuion of precompiled contracts (experimental, disabled by default)", []() { block::precompiled::set_precompiled_execution_enabled(true); }); + p.add_option('\0', "disable-rocksdb-stats", "disable gathering rocksdb statistics (enabled by default)", [&]() { + acts.push_back([&x]() { td::actor::send_closure(x, &ValidatorEngine::set_disable_rocksdb_stats, true); }); + }); auto S = p.run(argc, argv); if (S.is_error()) { LOG(ERROR) << "failed to parse options: " << S.move_as_error(); diff --git a/validator-engine/validator-engine.hpp b/validator-engine/validator-engine.hpp index da50c71f..b39b6438 100644 --- a/validator-engine/validator-engine.hpp +++ b/validator-engine/validator-engine.hpp @@ -206,6 +206,7 @@ class ValidatorEngine : public td::actor::Actor { td::uint32 celldb_compress_depth_ = 0; size_t max_open_archive_files_ = 0; double archive_preload_period_ = 0.0; + bool disable_rocksdb_stats_ = false; bool read_config_ = false; bool started_keyring_ = false; bool started_ = false; @@ -272,6 +273,9 @@ class ValidatorEngine : public td::actor::Actor { void set_archive_preload_period(double value) { archive_preload_period_ = value; } + void set_disable_rocksdb_stats(bool value) { + disable_rocksdb_stats_ = value; + } void start_up() override; ValidatorEngine() { } diff --git a/validator/db/archive-manager.cpp b/validator/db/archive-manager.cpp index 2c0c82e5..adb6f482 100644 --- a/validator/db/archive-manager.cpp +++ b/validator/db/archive-manager.cpp @@ -601,7 +601,7 @@ void ArchiveManager::load_package(PackageId id) { } desc.file = - td::actor::create_actor("slice", id.id, id.key, id.temp, false, db_root_, archive_lru_.get()); + td::actor::create_actor("slice", id.id, id.key, id.temp, false, db_root_, archive_lru_.get(), statistics_); m.emplace(id, std::move(desc)); update_permanent_slices(); @@ -636,7 +636,7 @@ const ArchiveManager::FileDescription *ArchiveManager::add_file_desc(ShardIdFull td::mkdir(db_root_ + id.path()).ensure(); std::string prefix = PSTRING() << db_root_ << id.path() << id.name(); new_desc.file = - td::actor::create_actor("slice", id.id, id.key, id.temp, false, db_root_, archive_lru_.get()); + td::actor::create_actor("slice", id.id, id.key, id.temp, false, db_root_, archive_lru_.get(), statistics_); const FileDescription &desc = f.emplace(id, std::move(new_desc)); if (!id.temp) { update_desc(f, desc, shard, seqno, ts, lt); @@ -829,7 +829,10 @@ void ArchiveManager::start_up() { if (opts_->get_max_open_archive_files() > 0) { archive_lru_ = td::actor::create_actor("archive_lru", opts_->get_max_open_archive_files()); } - index_ = std::make_shared(td::RocksDb::open(db_root_ + "/files/globalindex").move_as_ok()); + if (!opts_->get_disable_rocksdb_stats()) { + statistics_ = td::RocksDb::create_statistics(); + } + index_ = std::make_shared(td::RocksDb::open(db_root_ + "/files/globalindex", statistics_).move_as_ok()); std::string value; auto v = index_->get(create_serialize_tl_object().as_slice(), value); v.ensure(); @@ -903,6 +906,17 @@ void ArchiveManager::start_up() { break; } } + + if (!opts_->get_disable_rocksdb_stats()) { + alarm_timestamp() = td::Timestamp::in(60.0); + } +} + +void ArchiveManager::alarm() { + alarm_timestamp() = td::Timestamp::in(60.0); + auto stats = td::RocksDb::statistics_to_string(statistics_); + td::atomic_write_file(db_root_ + "/db_stats.txt", stats); + td::RocksDb::reset_statistics(statistics_); } void ArchiveManager::run_gc(UnixTime mc_ts, UnixTime gc_ts, UnixTime archive_ttl) { diff --git a/validator/db/archive-manager.hpp b/validator/db/archive-manager.hpp index 1c5deaf8..aff76544 100644 --- a/validator/db/archive-manager.hpp +++ b/validator/db/archive-manager.hpp @@ -70,6 +70,7 @@ class ArchiveManager : public td::actor::Actor { td::Promise promise); void start_up() override; + void alarm() override; void commit_transaction(); void set_async_mode(bool mode, td::Promise promise); @@ -173,6 +174,8 @@ class ArchiveManager : public td::actor::Actor { bool huge_transaction_started_ = false; td::uint32 huge_transaction_size_ = 0; + std::shared_ptr statistics_; + FileMap &get_file_map(const PackageId &p) { return p.key ? key_files_ : p.temp ? temp_files_ : files_; } diff --git a/validator/db/archive-slice.cpp b/validator/db/archive-slice.cpp index 52abc008..b38fbb7f 100644 --- a/validator/db/archive-slice.cpp +++ b/validator/db/archive-slice.cpp @@ -465,7 +465,7 @@ void ArchiveSlice::get_archive_id(BlockSeqno masterchain_seqno, td::Promise(td::RocksDb::open(db_path_).move_as_ok()); + kv_ = std::make_unique(td::RocksDb::open(db_path_, statistics_).move_as_ok()); std::string value; auto R2 = kv_->get("status", value); R2.ensure(); @@ -604,14 +604,15 @@ void ArchiveSlice::set_async_mode(bool mode, td::Promise promise) { } ArchiveSlice::ArchiveSlice(td::uint32 archive_id, bool key_blocks_only, bool temp, bool finalized, std::string db_root, - td::actor::ActorId archive_lru) + td::actor::ActorId archive_lru, std::shared_ptr statistics) : archive_id_(archive_id) , key_blocks_only_(key_blocks_only) , temp_(temp) , finalized_(finalized) , p_id_(archive_id_, key_blocks_only_, temp_) , db_root_(std::move(db_root)) - , archive_lru_(std::move(archive_lru)) { + , archive_lru_(std::move(archive_lru)) + , statistics_(statistics) { db_path_ = PSTRING() << db_root_ << p_id_.path() << p_id_.name() << ".index"; } diff --git a/validator/db/archive-slice.hpp b/validator/db/archive-slice.hpp index f178a9b8..a58df32b 100644 --- a/validator/db/archive-slice.hpp +++ b/validator/db/archive-slice.hpp @@ -23,6 +23,10 @@ #include "fileref.hpp" #include +namespace rocksdb { +class Statistics; +} + namespace ton { namespace validator { @@ -81,7 +85,7 @@ class ArchiveLru; class ArchiveSlice : public td::actor::Actor { public: ArchiveSlice(td::uint32 archive_id, bool key_blocks_only, bool temp, bool finalized, std::string db_root, - td::actor::ActorId archive_lru); + td::actor::ActorId archive_lru, std::shared_ptr statistics = nullptr); void get_archive_id(BlockSeqno masterchain_seqno, td::Promise promise); @@ -151,6 +155,7 @@ class ArchiveSlice : public td::actor::Actor { std::string db_root_; td::actor::ActorId archive_lru_; + std::shared_ptr statistics_; std::unique_ptr kv_; struct PackageInfo { diff --git a/validator/db/celldb.cpp b/validator/db/celldb.cpp index d29126ce..fae853ba 100644 --- a/validator/db/celldb.cpp +++ b/validator/db/celldb.cpp @@ -20,6 +20,7 @@ #include "rootdb.hpp" #include "td/db/RocksDb.h" +#include "td/utils/filesystem.h" #include "ton/ton-tl.hpp" #include "ton/ton-io.hpp" @@ -83,7 +84,12 @@ void CellDbIn::start_up() { }; CellDbBase::start_up(); - cell_db_ = std::make_shared(td::RocksDb::open(path_).move_as_ok()); + if (!opts_->get_disable_rocksdb_stats()) { + statistics_ = td::RocksDb::create_statistics(); + statistics_flush_at_ = td::Timestamp::in(60.0); + } + cell_db_ = std::make_shared(td::RocksDb::open(path_, statistics_).move_as_ok()); + boc_ = vm::DynamicBagOfCellsDb::create(); boc_->set_celldb_compress_depth(opts_->get_celldb_compress_depth()); @@ -156,6 +162,13 @@ void CellDbIn::get_cell_db_reader(td::Promise> } void CellDbIn::alarm() { + if (statistics_flush_at_ && statistics_flush_at_.is_in_past()) { + statistics_flush_at_ = td::Timestamp::in(60.0); + auto stats = td::RocksDb::statistics_to_string(statistics_); + td::atomic_write_file(path_ + "/db_stats.txt", stats); + td::RocksDb::reset_statistics(statistics_); + } + if (migrate_after_ && migrate_after_.is_in_past()) { migrate_cells(); } diff --git a/validator/db/celldb.hpp b/validator/db/celldb.hpp index a2a84ab4..fb437a26 100644 --- a/validator/db/celldb.hpp +++ b/validator/db/celldb.hpp @@ -27,6 +27,10 @@ #include "auto/tl/ton_api.h" #include "validator.h" +namespace rocksdb { +class Statistics; +} + namespace ton { namespace validator { @@ -103,6 +107,8 @@ class CellDbIn : public CellDbBase { std::unique_ptr boc_; std::shared_ptr cell_db_; + std::shared_ptr statistics_; + td::Timestamp statistics_flush_at_ = td::Timestamp::never(); std::function on_load_callback_; std::set cells_to_migrate_; diff --git a/validator/validator-options.hpp b/validator/validator-options.hpp index 41019fa6..fca8d62f 100644 --- a/validator/validator-options.hpp +++ b/validator/validator-options.hpp @@ -123,6 +123,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { double get_archive_preload_period() const override { return archive_preload_period_; } + bool get_disable_rocksdb_stats() const override { + return disable_rocksdb_stats_; + } void set_zero_block_id(BlockIdExt block_id) override { zero_block_id_ = block_id; @@ -185,6 +188,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { void set_archive_preload_period(double value) override { archive_preload_period_ = value; } + void set_disable_rocksdb_stats(bool value) override { + disable_rocksdb_stats_ = value; + } ValidatorManagerOptionsImpl *make_copy() const override { return new ValidatorManagerOptionsImpl(*this); @@ -230,6 +236,7 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { td::uint32 celldb_compress_depth_{0}; size_t max_open_archive_files_ = 0; double archive_preload_period_ = 0.0; + bool disable_rocksdb_stats_; }; } // namespace validator diff --git a/validator/validator.h b/validator/validator.h index f2dc56c4..2857d333 100644 --- a/validator/validator.h +++ b/validator/validator.h @@ -84,6 +84,7 @@ struct ValidatorManagerOptions : public td::CntObject { virtual td::uint32 get_celldb_compress_depth() const = 0; virtual size_t get_max_open_archive_files() const = 0; virtual double get_archive_preload_period() const = 0; + virtual bool get_disable_rocksdb_stats() const = 0; virtual void set_zero_block_id(BlockIdExt block_id) = 0; virtual void set_init_block_id(BlockIdExt block_id) = 0; @@ -106,6 +107,7 @@ struct ValidatorManagerOptions : public td::CntObject { virtual void set_celldb_compress_depth(td::uint32 value) = 0; virtual void set_max_open_archive_files(size_t value) = 0; virtual void set_archive_preload_period(double value) = 0; + virtual void set_disable_rocksdb_stats(bool value) = 0; static td::Ref create( BlockIdExt zero_block_id, BlockIdExt init_block_id, From 0feaaf591c1332a2b4cacfd3dd8f8253afa94de8 Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Wed, 20 Mar 2024 13:57:20 +0100 Subject: [PATCH 113/351] Mode 644 for db_stats.txt (#938) --- validator/db/archive-manager.cpp | 13 ++++++++++++- validator/db/celldb.cpp | 21 ++++++++++++++++++--- validator/db/celldb.hpp | 2 ++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/validator/db/archive-manager.cpp b/validator/db/archive-manager.cpp index adb6f482..d4d9e76c 100644 --- a/validator/db/archive-manager.cpp +++ b/validator/db/archive-manager.cpp @@ -915,7 +915,18 @@ void ArchiveManager::start_up() { void ArchiveManager::alarm() { alarm_timestamp() = td::Timestamp::in(60.0); auto stats = td::RocksDb::statistics_to_string(statistics_); - td::atomic_write_file(db_root_ + "/db_stats.txt", stats); + auto to_file_r = td::FileFd::open(db_root_ + "/db_stats.txt", td::FileFd::Truncate | td::FileFd::Create | td::FileFd::Write, 0644); + if (to_file_r.is_error()) { + LOG(ERROR) << "Failed to open db_stats.txt: " << to_file_r.move_as_error(); + return; + } + auto to_file = to_file_r.move_as_ok(); + auto res = to_file.write(stats); + to_file.close(); + if (res.is_error()) { + LOG(ERROR) << "Failed to write to db_stats.txt: " << res.move_as_error(); + return; + } td::RocksDb::reset_statistics(statistics_); } diff --git a/validator/db/celldb.cpp b/validator/db/celldb.cpp index fae853ba..d9803cbe 100644 --- a/validator/db/celldb.cpp +++ b/validator/db/celldb.cpp @@ -161,12 +161,27 @@ void CellDbIn::get_cell_db_reader(td::Promise> promise.set_result(boc_->get_cell_db_reader()); } +void CellDbIn::flush_db_stats() { + auto stats = td::RocksDb::statistics_to_string(statistics_); + auto to_file_r = td::FileFd::open(path_ + "/db_stats.txt", td::FileFd::Truncate | td::FileFd::Create | td::FileFd::Write, 0644); + if (to_file_r.is_error()) { + LOG(ERROR) << "Failed to open db_stats.txt: " << to_file_r.move_as_error(); + return; + } + auto to_file = to_file_r.move_as_ok(); + auto res = to_file.write(stats); + to_file.close(); + if (res.is_error()) { + LOG(ERROR) << "Failed to write to db_stats.txt: " << res.move_as_error(); + return; + } + td::RocksDb::reset_statistics(statistics_); +} + void CellDbIn::alarm() { if (statistics_flush_at_ && statistics_flush_at_.is_in_past()) { statistics_flush_at_ = td::Timestamp::in(60.0); - auto stats = td::RocksDb::statistics_to_string(statistics_); - td::atomic_write_file(path_ + "/db_stats.txt", stats); - td::RocksDb::reset_statistics(statistics_); + flush_db_stats(); } if (migrate_after_ && migrate_after_.is_in_past()) { diff --git a/validator/db/celldb.hpp b/validator/db/celldb.hpp index fb437a26..573d4b99 100644 --- a/validator/db/celldb.hpp +++ b/validator/db/celldb.hpp @@ -60,6 +60,8 @@ class CellDbIn : public CellDbBase { void migrate_cell(td::Bits256 hash); + void flush_db_stats(); + CellDbIn(td::actor::ActorId root_db, td::actor::ActorId parent, std::string path, td::Ref opts); From 9452c367e403b2b222992871535a20f242373c23 Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 26 Mar 2024 14:51:06 +0300 Subject: [PATCH 114/351] LS queries to nonfinal blocks (#941) Co-authored-by: SpyCheese --- tl-utils/lite-utils.cpp | 4 +- tl/generate/scheme/lite_api.tl | 9 + tl/generate/scheme/lite_api.tlo | Bin 15368 -> 16988 bytes validator-engine/validator-engine.cpp | 4 + validator-engine/validator-engine.hpp | 4 + validator-session/validator-session-state.h | 22 ++ validator-session/validator-session.cpp | 47 +++++ validator-session/validator-session.h | 4 + validator-session/validator-session.hpp | 3 + validator/impl/CMakeLists.txt | 2 + validator/impl/candidates-buffer.cpp | 213 +++++++++++++++++++ validator/impl/candidates-buffer.hpp | 64 ++++++ validator/impl/liteserver.cpp | 217 +++++++++++--------- validator/impl/liteserver.hpp | 2 + validator/interfaces/validator-manager.h | 20 +- validator/manager-disk.hpp | 21 +- validator/manager-hardfork.hpp | 21 +- validator/manager.cpp | 196 +++++++++++++++--- validator/manager.hpp | 24 ++- validator/validator-group.cpp | 58 +++++- validator/validator-group.hpp | 15 ++ validator/validator-options.hpp | 7 + validator/validator.h | 2 + 23 files changed, 809 insertions(+), 150 deletions(-) create mode 100644 validator/impl/candidates-buffer.cpp create mode 100644 validator/impl/candidates-buffer.hpp diff --git a/tl-utils/lite-utils.cpp b/tl-utils/lite-utils.cpp index 427852cb..99e22f83 100644 --- a/tl-utils/lite-utils.cpp +++ b/tl-utils/lite-utils.cpp @@ -155,7 +155,9 @@ std::string lite_query_name_by_id(int id) { {lite_api::liteServer_getConfigParams::ID, "getConfigParams"}, {lite_api::liteServer_getValidatorStats::ID, "getValidatorStats"}, {lite_api::liteServer_getLibraries::ID, "getLibraries"}, - {lite_api::liteServer_getShardBlockProof::ID, "getShardBlockProof"}}; + {lite_api::liteServer_getShardBlockProof::ID, "getShardBlockProof"}, + {lite_api::liteServer_nonfinal_getCandidate::ID, "nonfinal.getCandidate"}, + {lite_api::liteServer_nonfinal_getValidatorGroups::ID, "nonfinal.getValidatorGroups"}}; auto it = names.find(id); if (it == names.end()) { return "unknown"; diff --git a/tl/generate/scheme/lite_api.tl b/tl/generate/scheme/lite_api.tl index e1e28b9f..f0439a29 100644 --- a/tl/generate/scheme/lite_api.tl +++ b/tl/generate/scheme/lite_api.tl @@ -60,6 +60,12 @@ liteServer.lookupBlockResult id:tonNode.blockIdExt mode:# mc_block_id:tonNode.bl liteServer.debug.verbosity value:int = liteServer.debug.Verbosity; +liteServer.nonfinal.candidateId block_id:tonNode.blockIdExt creator:int256 collated_data_hash:int256 = liteServer.nonfinal.CandidateId; +liteServer.nonfinal.candidate id:liteServer.nonfinal.candidateId data:bytes collated_data:bytes = liteServer.nonfinal.Candidate; +liteServer.nonfinal.candidateInfo id:liteServer.nonfinal.candidateId available:Bool approved_weight:long signed_weight:long total_weight:long = liteServer.nonfinal.CandidateInfo; +liteServer.nonfinal.validatorGroupInfo next_block_id:tonNode.blockId cc_seqno:int prev:(vector tonNode.blockIdExt) candidates:(vector liteServer.nonfinal.candidateInfo) = liteServer.nonfinal.ValidatorGroupInfo; +liteServer.nonfinal.validatorGroups groups:(vector liteServer.nonfinal.validatorGroupInfo) = liteServer.nonfinal.ValidatorGroups; + ---functions--- liteServer.getMasterchainInfo = liteServer.MasterchainInfo; @@ -89,6 +95,9 @@ liteServer.getLibraries library_list:(vector int256) = liteServer.LibraryResult; liteServer.getLibrariesWithProof id:tonNode.blockIdExt mode:# library_list:(vector int256) = liteServer.LibraryResultWithProof; liteServer.getShardBlockProof id:tonNode.blockIdExt = liteServer.ShardBlockProof; +liteServer.nonfinal.getValidatorGroups mode:# wc:mode.0?int shard:mode.1?long = liteServer.nonfinal.ValidatorGroups; +liteServer.nonfinal.getCandidate id:liteServer.nonfinal.candidateId = liteServer.nonfinal.Candidate; + liteServer.queryPrefix = Object; liteServer.query data:bytes = Object; liteServer.waitMasterchainSeqno seqno:int timeout_ms:int = Object; // query prefix diff --git a/tl/generate/scheme/lite_api.tlo b/tl/generate/scheme/lite_api.tlo index 06c082586eff2976ffc6b0b7cb44300126bffab9..d2f67846100190fd875c542232c993e0b610847e 100644 GIT binary patch delta 1061 zcmeCExYNSO`)Ibl6$2DlY~;1(RO)d%+#s8iS&|x@T2z)=q?ebUmzJ5An4{;Mn3s~7 zl30>Dah;UPyLy&TdAzDTQzl-J(74L@##a%)y1cY}1_q#7o#kEEeyU+p8m8XABMSLL{3aE1)r2G10bnw!Uje3*e6 zrJvo`f~L5QiA-61qDUnr)H*SlrT(=RS_5D zEzV5OLx=%G1}MtUQ<7hjm;+PDFuC1OHX39PviopGZW(6eg4BY7hXv|1-n`U`l6Y7c zF-+FCkmTe@PL3~5EzHZG9LOy`c>x~_D@#F9YT4vKefh~>_yst*VE&#wQCU6( h; for (auto &x : conf.validator_->hardforks_) { @@ -3820,6 +3821,9 @@ int main(int argc, char *argv[]) { p.add_option('\0', "disable-rocksdb-stats", "disable gathering rocksdb statistics (enabled by default)", [&]() { acts.push_back([&x]() { td::actor::send_closure(x, &ValidatorEngine::set_disable_rocksdb_stats, true); }); }); + p.add_option('\0', "nonfinal-ls", "enable special LS queries to non-finalized blocks", [&]() { + acts.push_back([&x]() { td::actor::send_closure(x, &ValidatorEngine::set_nonfinal_ls_queries_enabled); }); + }); auto S = p.run(argc, argv); if (S.is_error()) { LOG(ERROR) << "failed to parse options: " << S.move_as_error(); diff --git a/validator-engine/validator-engine.hpp b/validator-engine/validator-engine.hpp index b39b6438..84a5e67f 100644 --- a/validator-engine/validator-engine.hpp +++ b/validator-engine/validator-engine.hpp @@ -207,6 +207,7 @@ class ValidatorEngine : public td::actor::Actor { size_t max_open_archive_files_ = 0; double archive_preload_period_ = 0.0; bool disable_rocksdb_stats_ = false; + bool nonfinal_ls_queries_enabled_ = false; bool read_config_ = false; bool started_keyring_ = false; bool started_ = false; @@ -276,6 +277,9 @@ class ValidatorEngine : public td::actor::Actor { void set_disable_rocksdb_stats(bool value) { disable_rocksdb_stats_ = value; } + void set_nonfinal_ls_queries_enabled() { + nonfinal_ls_queries_enabled_ = true; + } void start_up() override; ValidatorEngine() { } diff --git a/validator-session/validator-session-state.h b/validator-session/validator-session-state.h index f827b3fc..35910535 100644 --- a/validator-session/validator-session-state.h +++ b/validator-session/validator-session-state.h @@ -376,6 +376,15 @@ class ValidatorSessionRoundState : public ValidatorSessionDescription::RootObjec void dump(ValidatorSessionDescription& desc, td::StringBuilder& sb, td::uint32 att) const; void dump_cur_attempt(ValidatorSessionDescription& desc, td::StringBuilder& sb) const; + void for_each_sent_block(std::function foo) const { + if (!sent_blocks_) { + return; + } + for (td::uint32 i = 0; i < sent_blocks_->size(); ++i) { + foo(sent_blocks_->at(i)); + } + } + private: const SentBlock* precommitted_block_; const td::uint32 seqno_; @@ -516,6 +525,19 @@ class ValidatorSessionState : public ValidatorSessionDescription::RootObject { cur_round_->dump_cur_attempt(desc, sb); } + void for_each_cur_round_sent_block(std::function foo) const { + cur_round_->for_each_sent_block(std::move(foo)); + } + + const SentBlock* get_cur_round_precommitted_block() const { + bool found; + return cur_round_->get_precommitted_block(found); + } + + const CntVector* get_cur_round_signatures() const { + return cur_round_->get_signatures(); + } + static const ValidatorSessionState* make_one(ValidatorSessionDescription& desc, const ValidatorSessionState* state, td::uint32 src_idx, td::uint32 att, bool& made); static const ValidatorSessionState* make_all(ValidatorSessionDescription& desc, const ValidatorSessionState* state, diff --git a/validator-session/validator-session.cpp b/validator-session/validator-session.cpp index 88de0fa5..38e2ea23 100644 --- a/validator-session/validator-session.cpp +++ b/validator-session/validator-session.cpp @@ -929,6 +929,53 @@ void ValidatorSessionImpl::get_current_stats(td::Promise promise.set_result(std::move(stats)); } +void ValidatorSessionImpl::get_validator_group_info_for_litequery( + td::uint32 cur_round, + td::Promise>> promise) { + if (cur_round != cur_round_ || real_state_->cur_round_seqno() != cur_round) { + promise.set_value({}); + return; + } + std::vector> result; + real_state_->for_each_cur_round_sent_block([&](const SessionBlockCandidate *block) { + if (block->get_block() == nullptr) { + return; + } + auto candidate = create_tl_object(); + + candidate->id_ = create_tl_object(); + candidate->id_->block_id_ = create_tl_object(); + candidate->id_->block_id_->root_hash_ = + block->get_block()->get_root_hash(); // other fields will be filled in validator-group.cpp + candidate->id_->block_id_->file_hash_ = block->get_block()->get_file_hash(); + candidate->id_->creator_ = + description().get_source_public_key(block->get_block()->get_src_idx()).ed25519_value().raw(); + candidate->id_->collated_data_hash_ = block->get_block()->get_collated_data_file_hash(); + + candidate->total_weight_ = description().get_total_weight(); + candidate->approved_weight_ = 0; + candidate->signed_weight_ = 0; + for (td::uint32 i = 0; i < description().get_total_nodes(); ++i) { + if (real_state_->check_block_is_approved_by(description(), i, block->get_id())) { + candidate->approved_weight_ += description().get_node_weight(i); + } + } + auto precommited = real_state_->get_cur_round_precommitted_block(); + if (SentBlock::get_block_id(precommited) == SentBlock::get_block_id(block->get_block())) { + auto signatures = real_state_->get_cur_round_signatures(); + if (signatures) { + for (td::uint32 i = 0; i < description().get_total_nodes(); ++i) { + if (signatures->at(i)) { + candidate->signed_weight_ += description().get_node_weight(i); + } + } + } + } + result.push_back(std::move(candidate)); + }); + promise.set_result(std::move(result)); +} + void ValidatorSessionImpl::start_up() { CHECK(!rldp_.empty()); cur_round_ = 0; diff --git a/validator-session/validator-session.h b/validator-session/validator-session.h index 3f3b7ab9..6300eaa4 100644 --- a/validator-session/validator-session.h +++ b/validator-session/validator-session.h @@ -28,6 +28,7 @@ #include "catchain/catchain-types.h" #include "validator-session-types.h" +#include "auto/tl/lite_api.h" namespace ton { @@ -92,6 +93,9 @@ class ValidatorSession : public td::actor::Actor { virtual void start() = 0; virtual void destroy() = 0; virtual void get_current_stats(td::Promise promise) = 0; + virtual void get_validator_group_info_for_litequery( + td::uint32 cur_round, + td::Promise>> promise) = 0; static td::actor::ActorOwn create( catchain::CatChainSessionId session_id, ValidatorSessionOptions opts, PublicKeyHash local_id, diff --git a/validator-session/validator-session.hpp b/validator-session/validator-session.hpp index 2dcbb46c..e61e9010 100644 --- a/validator-session/validator-session.hpp +++ b/validator-session/validator-session.hpp @@ -175,6 +175,9 @@ class ValidatorSessionImpl : public ValidatorSession { void start() override; void destroy() override; void get_current_stats(td::Promise promise) override; + void get_validator_group_info_for_litequery( + td::uint32 cur_round, + td::Promise>> promise) override; void process_blocks(std::vector blocks); void finished_processing(); diff --git a/validator/impl/CMakeLists.txt b/validator/impl/CMakeLists.txt index 7cd273f2..42dded31 100644 --- a/validator/impl/CMakeLists.txt +++ b/validator/impl/CMakeLists.txt @@ -7,6 +7,7 @@ endif() set(TON_VALIDATOR_SOURCE accept-block.cpp block.cpp + candidates-buffer.cpp check-proof.cpp collator.cpp config.cpp @@ -24,6 +25,7 @@ set(TON_VALIDATOR_SOURCE accept-block.hpp block.hpp + candidates-buffer.hpp check-proof.hpp collate-query-impl.h collator-impl.h diff --git a/validator/impl/candidates-buffer.cpp b/validator/impl/candidates-buffer.cpp new file mode 100644 index 00000000..e24913b6 --- /dev/null +++ b/validator/impl/candidates-buffer.cpp @@ -0,0 +1,213 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#include "candidates-buffer.hpp" +#include "fabric.h" + +namespace ton::validator { + +void CandidatesBuffer::start_up() { + alarm_timestamp() = td::Timestamp::in(60.0); +} + +void CandidatesBuffer::alarm() { + alarm_timestamp() = td::Timestamp::in(60.0); + for (auto it = candidates_.begin(); it != candidates_.end();) { + Candidate &entry = it->second; + if (entry.ttl_.is_in_past()) { + for (auto &p : entry.data_waiters_) { + p.set_error(td::Status::Error(ErrorCode::timeout, "timeout")); + } + for (auto &p : entry.state_waiters_) { + p.set_error(td::Status::Error(ErrorCode::timeout, "timeout")); + } + it = candidates_.erase(it); + } else { + ++it; + } + } +} + +void CandidatesBuffer::add_new_candidate(BlockIdExt id, PublicKey source, FileHash collated_data_file_hash) { + auto it = candidates_.emplace(id, Candidate{}); + Candidate &entry = it.first->second; + entry.ttl_ = td::Timestamp::in(120.0); + if (!it.second) { // not inserted + return; + } + LOG(DEBUG) << "New block candidate " << id.to_str(); + entry.source_ = source; + entry.collated_data_file_hash_ = collated_data_file_hash; +} + +void CandidatesBuffer::get_block_data(BlockIdExt id, td::Promise> promise) { + auto it = candidates_.find(id); + if (it == candidates_.end()) { + promise.set_error(td::Status::Error(ErrorCode::notready, "unknown block candidate")); + return; + } + Candidate &entry = it->second; + if (entry.data_.not_null()) { + promise.set_result(entry.data_); + return; + } + entry.data_waiters_.push_back(std::move(promise)); + if (entry.data_requested_) { + return; + } + entry.data_requested_ = true; + td::actor::send_closure(manager_, &ValidatorManager::get_block_candidate_from_db, entry.source_, id, + entry.collated_data_file_hash_, [SelfId = actor_id(this), id](td::Result R) { + td::actor::send_closure(SelfId, &CandidatesBuffer::got_block_candidate, id, std::move(R)); + }); +} + +void CandidatesBuffer::got_block_candidate(BlockIdExt id, td::Result R) { + if (R.is_error()) { + finish_get_block_data(id, R.move_as_error()); + return; + } + BlockCandidate cand = R.move_as_ok(); + CHECK(cand.id == id); + finish_get_block_data(id, create_block(id, std::move(cand.data))); +} + +void CandidatesBuffer::get_block_state(BlockIdExt id, td::Promise> promise) { + auto it = candidates_.find(id); + if (it == candidates_.end()) { + promise.set_error(td::Status::Error(ErrorCode::notready, "unknown block candidate")); + return; + } + Candidate &entry = it->second; + if (entry.state_.not_null()) { + promise.set_result(entry.state_); + return; + } + entry.state_waiters_.push_back(std::move(promise)); + if (entry.state_requested_) { + return; + } + entry.state_requested_ = true; + get_block_data(id, [SelfId = actor_id(this), id](td::Result> R) { + if (R.is_error()) { + td::actor::send_closure(SelfId, &CandidatesBuffer::finish_get_block_state, id, R.move_as_error()); + return; + } + td::actor::send_closure(SelfId, &CandidatesBuffer::get_block_state_cont, id, R.move_as_ok()); + }); +} + +void CandidatesBuffer::get_block_state_cont(BlockIdExt id, td::Ref data) { + CHECK(id == data->block_id()); + std::vector prev; + BlockIdExt mc_blkid; + bool after_split; + auto S = block::unpack_block_prev_blk_ext(data->root_cell(), id, prev, mc_blkid, after_split); + if (S.is_error()) { + finish_get_block_state(id, std::move(S)); + return; + } + get_block_state_cont2(std::move(data), std::move(prev), {}); +} + +void CandidatesBuffer::get_block_state_cont2(td::Ref block, std::vector prev, + std::vector> prev_states) { + if (prev_states.size() < prev.size()) { + BlockIdExt prev_id = prev[prev_states.size()]; + td::actor::send_closure(manager_, &ValidatorManager::get_shard_state_from_db_short, prev_id, + [SelfId = actor_id(this), block = std::move(block), prev = std::move(prev), + prev_states = std::move(prev_states)](td::Result> R) mutable { + if (R.is_error()) { + td::actor::send_closure(SelfId, &CandidatesBuffer::finish_get_block_state, + block->block_id(), R.move_as_error()); + return; + } + prev_states.push_back(R.move_as_ok()); + td::actor::send_closure(SelfId, &CandidatesBuffer::get_block_state_cont2, + std::move(block), std::move(prev), std::move(prev_states)); + }); + return; + } + + BlockIdExt id = block->block_id(); + td::Ref state; + CHECK(prev_states.size() == 1 || prev_states.size() == 2); + if (prev_states.size() == 2) { // after merge + auto R = prev_states[0]->merge_with(*prev_states[1]); + if (R.is_error()) { + finish_get_block_state(id, R.move_as_error()); + return; + } + state = R.move_as_ok(); + } else if (id.shard_full() != prev[0].shard_full()) { // after split + auto R = prev_states[0]->split(); + if (R.is_error()) { + finish_get_block_state(id, R.move_as_error()); + return; + } + auto s = R.move_as_ok(); + state = is_left_child(id.shard_full()) ? std::move(s.first) : std::move(s.second); + } else { // no split/merge + state = std::move(prev_states[0]); + } + + auto S = state.write().apply_block(id, std::move(block)); + if (S.is_error()) { + finish_get_block_state(id, std::move(S)); + return; + } + finish_get_block_state(id, std::move(state)); +} + +void CandidatesBuffer::finish_get_block_data(BlockIdExt id, td::Result> res) { + auto it = candidates_.find(id); + if (it == candidates_.end()) { + return; + } + Candidate &entry = it->second; + for (auto &p : entry.data_waiters_) { + p.set_result(res.clone()); + } + entry.data_waiters_.clear(); + entry.data_requested_ = false; + if (res.is_ok()) { + entry.data_ = res.move_as_ok(); + LOG(DEBUG) << "Loaded block data for " << id.to_str(); + } else { + LOG(DEBUG) << "Failed to load block data for " << id.to_str() << ": " << res.move_as_error(); + } +} + +void CandidatesBuffer::finish_get_block_state(BlockIdExt id, td::Result> res) { + auto it = candidates_.find(id); + if (it == candidates_.end()) { + return; + } + Candidate &entry = it->second; + for (auto &p : entry.state_waiters_) { + p.set_result(res.clone()); + } + entry.state_waiters_.clear(); + entry.state_requested_ = false; + if (res.is_ok()) { + entry.state_ = res.move_as_ok(); + LOG(DEBUG) << "Loaded block state for " << id.to_str(); + } else { + LOG(DEBUG) << "Failed to load block state for " << id.to_str() << ": " << res.move_as_error(); + } +} + +} // namespace ton::validator diff --git a/validator/impl/candidates-buffer.hpp b/validator/impl/candidates-buffer.hpp new file mode 100644 index 00000000..5db1e516 --- /dev/null +++ b/validator/impl/candidates-buffer.hpp @@ -0,0 +1,64 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once +#include "ton/ton-types.h" +#include "td/actor/actor.h" +#include "interfaces/validator-manager.h" + +namespace ton::validator { + +class CandidatesBuffer : public td::actor::Actor { + public: + explicit CandidatesBuffer(td::actor::ActorId manager) : manager_(std::move(manager)) { + } + + void start_up() override; + void alarm() override; + + void add_new_candidate(BlockIdExt id, PublicKey source, FileHash collated_data_file_hash); + void get_block_data(BlockIdExt id, td::Promise> promise); + void get_block_state(BlockIdExt id, td::Promise> promise); + + private: + td::actor::ActorId manager_; + + struct Candidate { + PublicKey source_; + FileHash collated_data_file_hash_; + td::Timestamp ttl_; + + td::Ref data_; + std::vector>> data_waiters_; + bool data_requested_{false}; + + td::Ref state_; + std::vector>> state_waiters_; + bool state_requested_{false}; + }; + std::map candidates_; + + void got_block_candidate(BlockIdExt id, td::Result R); + + void get_block_state_cont(BlockIdExt id, td::Ref data); + void get_block_state_cont2(td::Ref block, std::vector prev, + std::vector> prev_states); + + void finish_get_block_data(BlockIdExt id, td::Result> res); + void finish_get_block_state(BlockIdExt id, td::Result> res); +}; + +} // namespace ton::validator diff --git a/validator/impl/liteserver.cpp b/validator/impl/liteserver.cpp index 5d40b8c2..b7d97321 100644 --- a/validator/impl/liteserver.cpp +++ b/validator/impl/liteserver.cpp @@ -275,6 +275,13 @@ void LiteQuery::perform() { [&](lite_api::liteServer_getShardBlockProof& q) { this->perform_getShardBlockProof(create_block_id(q.id_)); }, + [&](lite_api::liteServer_nonfinal_getCandidate& q) { + this->perform_nonfinal_getCandidate(q.id_->creator_, create_block_id(q.id_->block_id_), + q.id_->collated_data_hash_); + }, + [&](lite_api::liteServer_nonfinal_getValidatorGroups& q) { + this->perform_nonfinal_getValidatorGroups(q.mode_, ShardIdFull{q.wc_, (ShardId)q.shard_}); + }, [&](auto& obj) { this->abort_query(td::Status::Error(ErrorCode::protoviolation, "unknown query")); })); } @@ -343,21 +350,15 @@ void LiteQuery::perform_getBlock(BlockIdExt blkid) { fatal_error("invalid BlockIdExt"); return; } - get_block_handle_checked(blkid, [manager = manager_, Self = actor_id(this), blkid](td::Result R) { - if (R.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); - return; - } - td::actor::send_closure_later(manager, &ValidatorManager::get_block_data_from_db, R.move_as_ok(), - [=](td::Result> res) { - if (res.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); - } else { - td::actor::send_closure_later(Self, &LiteQuery::continue_getBlock, blkid, - res.move_as_ok()); - } - }); - }); + td::actor::send_closure(manager_, &ValidatorManager::get_block_data_for_litequery, blkid, + [Self = actor_id(this), blkid](td::Result> res) { + if (res.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); + } else { + td::actor::send_closure_later(Self, &LiteQuery::continue_getBlock, blkid, + res.move_as_ok()); + } + }); } void LiteQuery::continue_getBlock(BlockIdExt blkid, Ref block) { @@ -375,21 +376,15 @@ void LiteQuery::perform_getBlockHeader(BlockIdExt blkid, int mode) { fatal_error("invalid BlockIdExt"); return; } - get_block_handle_checked(blkid, [=, manager = manager_, Self = actor_id(this)](td::Result R) { - if (R.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); - return; - } - td::actor::send_closure_later(manager, &ValidatorManager::get_block_data_from_db, R.move_as_ok(), - [=](td::Result> res) { - if (res.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); - } else { - td::actor::send_closure_later(Self, &LiteQuery::continue_getBlockHeader, blkid, - mode, res.move_as_ok()); - } - }); - }); + td::actor::send_closure(manager_, &ValidatorManager::get_block_data_for_litequery, blkid, + [Self = actor_id(this), blkid, mode](td::Result> res) { + if (res.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); + } else { + td::actor::send_closure_later(Self, &LiteQuery::continue_getBlockHeader, blkid, mode, + res.move_as_ok()); + } + }); } static bool visit(Ref cell); @@ -495,33 +490,27 @@ void LiteQuery::perform_getState(BlockIdExt blkid) { fatal_error("cannot request total state: possibly too large"); return; } - get_block_handle_checked(blkid, [=, manager = manager_, Self = actor_id(this)](td::Result R) { - if (R.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); - return; - } - if (blkid.id.seqno) { - td::actor::send_closure_later(manager, &ValidatorManager::get_shard_state_from_db, R.move_as_ok(), - [=](td::Result> res) { - if (res.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); - } else { - td::actor::send_closure_later(Self, &LiteQuery::continue_getState, blkid, - res.move_as_ok()); - } - }); - } else { - td::actor::send_closure_later(manager, &ValidatorManager::get_zero_state, blkid, - [=](td::Result res) { - if (res.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); - } else { - td::actor::send_closure_later(Self, &LiteQuery::continue_getZeroState, blkid, - res.move_as_ok()); - } - }); - } - }); + if (blkid.id.seqno) { + td::actor::send_closure(manager_, &ValidatorManager::get_block_state_for_litequery, blkid, + [Self = actor_id(this), blkid](td::Result> res) { + if (res.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); + } else { + td::actor::send_closure_later(Self, &LiteQuery::continue_getState, blkid, + res.move_as_ok()); + } + }); + } else { + td::actor::send_closure_later(manager_, &ValidatorManager::get_zero_state, blkid, + [Self = actor_id(this), blkid](td::Result res) { + if (res.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); + } else { + td::actor::send_closure_later(Self, &LiteQuery::continue_getZeroState, blkid, + res.move_as_ok()); + } + }); + } } void LiteQuery::continue_getState(BlockIdExt blkid, Ref state) { @@ -583,7 +572,7 @@ bool LiteQuery::request_mc_block_data(BlockIdExt blkid) { base_blk_id_ = blkid; ++pending_; td::actor::send_closure_later( - manager_, &ValidatorManager::get_block_data_from_db_short, blkid, + manager_, &ValidatorManager::get_block_data_for_litequery, blkid, [Self = actor_id(this), blkid](td::Result> res) { if (res.is_error()) { td::actor::send_closure(Self, &LiteQuery::abort_query, @@ -641,7 +630,7 @@ bool LiteQuery::request_mc_block_state(BlockIdExt blkid) { base_blk_id_ = blkid; ++pending_; td::actor::send_closure_later( - manager_, &ValidatorManager::get_shard_state_from_db_short, blkid, + manager_, &ValidatorManager::get_block_state_for_litequery, blkid, [Self = actor_id(this), blkid](td::Result> res) { if (res.is_error()) { td::actor::send_closure(Self, &LiteQuery::abort_query, @@ -671,22 +660,16 @@ bool LiteQuery::request_block_state(BlockIdExt blkid) { } blk_id_ = blkid; ++pending_; - get_block_handle_checked(blkid, [=, manager = manager_, Self = actor_id(this)](td::Result R) { - if (R.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); - return; - } - td::actor::send_closure_later( - manager, &ValidatorManager::get_shard_state_from_db, R.move_as_ok(), - [=](td::Result> res) { - if (res.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, - res.move_as_error_prefix("cannot load state for "s + blkid.to_str() + " : ")); - } else { - td::actor::send_closure_later(Self, &LiteQuery::got_block_state, blkid, res.move_as_ok()); - } - }); - }); + td::actor::send_closure(manager_, &ValidatorManager::get_block_state_for_litequery, blkid, + [Self = actor_id(this), blkid](td::Result> res) { + if (res.is_error()) { + td::actor::send_closure( + Self, &LiteQuery::abort_query, + res.move_as_error_prefix("cannot load state for "s + blkid.to_str() + " : ")); + } else { + td::actor::send_closure_later(Self, &LiteQuery::got_block_state, blkid, res.move_as_ok()); + } + }); return true; } @@ -699,22 +682,16 @@ bool LiteQuery::request_block_data(BlockIdExt blkid) { } blk_id_ = blkid; ++pending_; - get_block_handle_checked(blkid, [=, manager = manager_, Self = actor_id(this)](td::Result R) { - if (R.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); - return; - } - td::actor::send_closure_later( - manager, &ValidatorManager::get_block_data_from_db, R.move_as_ok(), - [=](td::Result> res) { - if (res.is_error()) { - td::actor::send_closure(Self, &LiteQuery::abort_query, - res.move_as_error_prefix("cannot load block "s + blkid.to_str() + " : ")); - } else { - td::actor::send_closure_later(Self, &LiteQuery::got_block_data, blkid, res.move_as_ok()); - } - }); - }); + td::actor::send_closure(manager_, &ValidatorManager::get_block_data_for_litequery, blkid, + [Self = actor_id(this), blkid](td::Result> res) { + if (res.is_error()) { + td::actor::send_closure( + Self, &LiteQuery::abort_query, + res.move_as_error_prefix("cannot load block "s + blkid.to_str() + " : ")); + } else { + td::actor::send_closure_later(Self, &LiteQuery::got_block_data, blkid, res.move_as_ok()); + } + }); return true; } @@ -1712,7 +1689,7 @@ void LiteQuery::continue_getTransactions(unsigned remaining, bool exact) { LOG(DEBUG) << "sending get_block_by_lt_from_db() query to manager for " << acc_workchain_ << ":" << acc_addr_.to_hex() << " " << trans_lt_; td::actor::send_closure_later( - manager_, &ValidatorManager::get_block_by_lt_from_db_for_litequery, ton::extract_addr_prefix(acc_workchain_, acc_addr_), + manager_, &ValidatorManager::get_block_by_lt_for_litequery, ton::extract_addr_prefix(acc_workchain_, acc_addr_), trans_lt_, [Self = actor_id(this), remaining, manager = manager_](td::Result res) { if (res.is_error()) { td::actor::send_closure(Self, &LiteQuery::abort_getTransactions, res.move_as_error(), ton::BlockIdExt{}); @@ -2088,11 +2065,13 @@ void LiteQuery::perform_lookupBlockWithProof(BlockId blkid, BlockIdExt mc_blkid, }); if (mode & 2) { - td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_lt_from_db_for_litequery, pfx, lt, std::move(P)); + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_lt_for_litequery, pfx, lt, std::move(P)); } else if (mode & 4) { - td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_unix_time_from_db_for_litequery, pfx, utime, std::move(P)); + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_unix_time_for_litequery, pfx, utime, + std::move(P)); } else { - td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_seqno_from_db_for_litequery, pfx, blkid.seqno, std::move(P)); + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_seqno_for_litequery, pfx, blkid.seqno, + std::move(P)); } } @@ -2368,13 +2347,13 @@ void LiteQuery::perform_lookupBlock(BlockId blkid, int mode, LogicalTime lt, Uni ton::AccountIdPrefixFull pfx{blkid.workchain, blkid.shard}; if (mode & 2) { - td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_lt_from_db_for_litequery, pfx, lt, + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_lt_for_litequery, pfx, lt, std::move(P)); } else if (mode & 4) { - td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_unix_time_from_db_for_litequery, pfx, utime, + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_unix_time_for_litequery, pfx, utime, std::move(P)); } else { - td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_seqno_from_db_for_litequery, pfx, + td::actor::send_closure_later(manager_, &ValidatorManager::get_block_by_seqno_for_litequery, pfx, blkid.seqno, std::move(P)); } } @@ -3133,7 +3112,7 @@ void LiteQuery::perform_getShardBlockProof(BlockIdExt blkid) { } AccountIdPrefixFull pfx{masterchainId, shardIdAll}; td::actor::send_closure_later( - manager, &ValidatorManager::get_block_by_seqno_from_db_for_litequery, pfx, handle->masterchain_ref_block(), + manager, &ValidatorManager::get_block_by_seqno_for_litequery, pfx, handle->masterchain_ref_block(), [Self, manager](td::Result R) { if (R.is_error()) { td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); @@ -3237,5 +3216,45 @@ void LiteQuery::continue_getShardBlockProof(Ref cur_block, }); } +void LiteQuery::perform_nonfinal_getCandidate(td::Bits256 source, BlockIdExt blkid, td::Bits256 collated_data_hash) { + LOG(INFO) << "started a nonfinal.getCandidate liteserver query"; + td::actor::send_closure_later( + manager_, &ValidatorManager::get_block_candidate_for_litequery, PublicKey{pubkeys::Ed25519{source}}, blkid, collated_data_hash, + [Self = actor_id(this)](td::Result R) { + if (R.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); + } else { + BlockCandidate cand = R.move_as_ok(); + td::actor::send_closure_later( + Self, &LiteQuery::finish_query, + create_serialize_tl_object( + create_tl_object( + create_tl_lite_block_id(cand.id), cand.pubkey.as_bits256(), cand.collated_file_hash), + std::move(cand.data), std::move(cand.collated_data)), + false); + } + }); +} + +void LiteQuery::perform_nonfinal_getValidatorGroups(int mode, ShardIdFull shard) { + bool with_shard = mode & 1; + LOG(INFO) << "started a nonfinal.getValidatorGroups" << (with_shard ? shard.to_str() : "(all)") + << " liteserver query"; + td::optional maybe_shard; + if (with_shard) { + maybe_shard = shard; + } + td::actor::send_closure( + manager_, &ValidatorManager::get_validator_groups_info_for_litequery, maybe_shard, + [Self = actor_id(this)](td::Result> R) { + if (R.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); + } else { + td::actor::send_closure_later(Self, &LiteQuery::finish_query, serialize_tl_object(R.move_as_ok(), true), + false); + } + }); +} + } // namespace validator } // namespace ton diff --git a/validator/impl/liteserver.hpp b/validator/impl/liteserver.hpp index 931dd6f6..20c2abfe 100644 --- a/validator/impl/liteserver.hpp +++ b/validator/impl/liteserver.hpp @@ -168,6 +168,8 @@ class LiteQuery : public td::actor::Actor { void perform_getShardBlockProof(BlockIdExt blkid); void continue_getShardBlockProof(Ref cur_block, std::vector> result); + void perform_nonfinal_getCandidate(td::Bits256 source, BlockIdExt blkid, td::Bits256 collated_data_hash); + void perform_nonfinal_getValidatorGroups(int mode, ShardIdFull shard); void load_prevKeyBlock(ton::BlockIdExt blkid, td::Promise>>); void continue_loadPrevKeyBlock(ton::BlockIdExt blkid, td::Result, BlockIdExt>> res, diff --git a/validator/interfaces/validator-manager.h b/validator/interfaces/validator-manager.h index f0e1bb18..a3e83a9d 100644 --- a/validator/interfaces/validator-manager.h +++ b/validator/interfaces/validator-manager.h @@ -29,6 +29,7 @@ #include "liteserver.h" #include "crypto/vm/db/DynamicBagOfCellsDb.h" #include "validator-session/validator-session-types.h" +#include "auto/tl/lite_api.h" namespace ton { @@ -171,12 +172,19 @@ class ValidatorManager : public ValidatorManagerInterface { virtual void log_validator_session_stats(BlockIdExt block_id, validatorsession::ValidatorSessionStats stats) = 0; virtual void get_block_handle_for_litequery(BlockIdExt block_id, td::Promise promise) = 0; - virtual void get_block_by_lt_from_db_for_litequery(AccountIdPrefixFull account, LogicalTime lt, - td::Promise promise) = 0; - virtual void get_block_by_unix_time_from_db_for_litequery(AccountIdPrefixFull account, UnixTime ts, - td::Promise promise) = 0; - virtual void get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, - td::Promise promise) = 0; + virtual void get_block_data_for_litequery(BlockIdExt block_id, td::Promise> promise) = 0; + virtual void get_block_state_for_litequery(BlockIdExt block_id, td::Promise> promise) = 0; + virtual void get_block_by_lt_for_litequery(AccountIdPrefixFull account, LogicalTime lt, + td::Promise promise) = 0; + virtual void get_block_by_unix_time_for_litequery(AccountIdPrefixFull account, UnixTime ts, + td::Promise promise) = 0; + virtual void get_block_by_seqno_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, + td::Promise promise) = 0; + virtual void get_block_candidate_for_litequery(PublicKey source, BlockIdExt block_id, FileHash collated_data_hash, + td::Promise promise) = 0; + virtual void get_validator_groups_info_for_litequery( + td::optional shard, + td::Promise> promise) = 0; virtual void add_lite_query_stats(int lite_query_id) { } diff --git a/validator/manager-disk.hpp b/validator/manager-disk.hpp index 4812d60a..05816c71 100644 --- a/validator/manager-disk.hpp +++ b/validator/manager-disk.hpp @@ -387,18 +387,33 @@ class ValidatorManagerImpl : public ValidatorManager { void get_block_handle_for_litequery(BlockIdExt block_id, td::Promise promise) override { get_block_handle(block_id, false, promise.wrap([](BlockHandle &&handle) -> ConstBlockHandle { return handle; })); } - void get_block_by_lt_from_db_for_litequery(AccountIdPrefixFull account, LogicalTime lt, + void get_block_data_for_litequery(BlockIdExt block_id, td::Promise> promise) override { + get_block_data_from_db_short(block_id, std::move(promise)); + } + void get_block_state_for_litequery(BlockIdExt block_id, td::Promise> promise) override { + get_shard_state_from_db_short(block_id, std::move(promise)); + } + void get_block_by_lt_for_litequery(AccountIdPrefixFull account, LogicalTime lt, td::Promise promise) override { get_block_by_lt_from_db(account, lt, std::move(promise)); } - void get_block_by_unix_time_from_db_for_litequery(AccountIdPrefixFull account, UnixTime ts, + void get_block_by_unix_time_for_litequery(AccountIdPrefixFull account, UnixTime ts, td::Promise promise) override { get_block_by_unix_time_from_db(account, ts, std::move(promise)); } - void get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, + void get_block_by_seqno_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, td::Promise promise) override { get_block_by_seqno_from_db(account, seqno, std::move(promise)); } + void get_block_candidate_for_litequery(PublicKey source, BlockIdExt block_id, FileHash collated_data_hash, + td::Promise promise) override { + promise.set_result(td::Status::Error("not implemented")); + } + void get_validator_groups_info_for_litequery( + td::optional shard, + td::Promise> promise) override { + promise.set_result(td::Status::Error("not implemented")); + } private: PublicKeyHash local_id_; diff --git a/validator/manager-hardfork.hpp b/validator/manager-hardfork.hpp index c34ae5c7..77e604ae 100644 --- a/validator/manager-hardfork.hpp +++ b/validator/manager-hardfork.hpp @@ -448,18 +448,33 @@ class ValidatorManagerImpl : public ValidatorManager { void get_block_handle_for_litequery(BlockIdExt block_id, td::Promise promise) override { get_block_handle(block_id, false, promise.wrap([](BlockHandle &&handle) -> ConstBlockHandle { return handle; })); } - void get_block_by_lt_from_db_for_litequery(AccountIdPrefixFull account, LogicalTime lt, + void get_block_data_for_litequery(BlockIdExt block_id, td::Promise> promise) override { + get_block_data_from_db_short(block_id, std::move(promise)); + } + void get_block_state_for_litequery(BlockIdExt block_id, td::Promise> promise) override { + get_shard_state_from_db_short(block_id, std::move(promise)); + } + void get_block_by_lt_for_litequery(AccountIdPrefixFull account, LogicalTime lt, td::Promise promise) override { get_block_by_lt_from_db(account, lt, std::move(promise)); } - void get_block_by_unix_time_from_db_for_litequery(AccountIdPrefixFull account, UnixTime ts, + void get_block_by_unix_time_for_litequery(AccountIdPrefixFull account, UnixTime ts, td::Promise promise) override { get_block_by_unix_time_from_db(account, ts, std::move(promise)); } - void get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, + void get_block_by_seqno_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, td::Promise promise) override { get_block_by_seqno_from_db(account, seqno, std::move(promise)); } + void get_block_candidate_for_litequery(PublicKey source, BlockIdExt block_id, FileHash collated_data_hash, + td::Promise promise) override { + promise.set_result(td::Status::Error("not implemented")); + } + void get_validator_groups_info_for_litequery( + td::optional shard, + td::Promise> promise) override { + promise.set_result(td::Status::Error("not implemented")); + } private: td::Ref opts_; diff --git a/validator/manager.cpp b/validator/manager.cpp index 55891ead..c24a98d6 100644 --- a/validator/manager.cpp +++ b/validator/manager.cpp @@ -225,13 +225,13 @@ void ValidatorManagerImpl::sync_complete(td::Promise promise) { VLOG(VALIDATOR_WARNING) << "completed sync. Validating " << validator_groups_.size() << " groups"; for (auto &v : validator_groups_) { - if (!v.second.empty()) { - td::actor::send_closure(v.second, &ValidatorGroup::create_session); + if (!v.second.actor.empty()) { + td::actor::send_closure(v.second.actor, &ValidatorGroup::create_session); } } for (auto &v : next_validator_groups_) { - if (!v.second.empty()) { - td::actor::send_closure(v.second, &ValidatorGroup::create_session); + if (!v.second.actor.empty()) { + td::actor::send_closure(v.second.actor, &ValidatorGroup::create_session); } } } @@ -1168,6 +1168,10 @@ void ValidatorManagerImpl::set_next_block(BlockIdExt block_id, BlockIdExt next, } void ValidatorManagerImpl::set_block_candidate(BlockIdExt id, BlockCandidate candidate, td::Promise promise) { + if (!candidates_buffer_.empty()) { + td::actor::send_closure(candidates_buffer_, &CandidatesBuffer::add_new_candidate, id, + PublicKey{pubkeys::Ed25519{candidate.pubkey.as_bits256()}}, candidate.collated_file_hash); + } td::actor::send_closure(db_, &Db::store_block_candidate, std::move(candidate), std::move(promise)); } @@ -1575,8 +1579,11 @@ void ValidatorManagerImpl::started(ValidatorManagerInitResult R) { td::actor::send_closure(SelfId, &ValidatorManagerImpl::read_gc_list, R.move_as_ok()); } }); - td::actor::send_closure(db_, &Db::get_destroyed_validator_sessions, std::move(P)); + + if (opts_->nonfinal_ls_queries_enabled()) { + candidates_buffer_ = td::actor::create_actor("candidates-buffer", actor_id(this)); + } } void ValidatorManagerImpl::read_gc_list(std::vector list) { @@ -1868,8 +1875,8 @@ void ValidatorManagerImpl::update_shards() { VLOG(VALIDATOR_DEBUG) << "total shards=" << new_shards.size() << " config shards=" << exp_vec.size(); - std::map> new_validator_groups_; - std::map> new_next_validator_groups_; + std::map new_validator_groups_; + std::map new_next_validator_groups_; bool force_recover = false; { @@ -1901,8 +1908,8 @@ void ValidatorManagerImpl::update_shards() { } else { auto it2 = next_validator_groups_.find(legacy_val_group_id); if (it2 != next_validator_groups_.end()) { - if (!it2->second.empty()) { - td::actor::send_closure(it2->second, &ValidatorGroup::start, prev, last_masterchain_block_id_, + if (!it2->second.actor.empty()) { + td::actor::send_closure(it2->second.actor, &ValidatorGroup::start, prev, last_masterchain_block_id_, last_masterchain_state_->get_unix_time()); } new_validator_groups_.emplace(val_group_id, std::move(it2->second)); @@ -1912,7 +1919,7 @@ void ValidatorManagerImpl::update_shards() { td::actor::send_closure(G, &ValidatorGroup::start, prev, last_masterchain_block_id_, last_masterchain_state_->get_unix_time()); } - new_validator_groups_.emplace(val_group_id, std::move(G)); + new_validator_groups_.emplace(val_group_id, ValidatorGroupEntry{std::move(G), shard}); } } } @@ -1957,8 +1964,8 @@ void ValidatorManagerImpl::update_shards() { } else { auto it2 = next_validator_groups_.find(val_group_id); if (it2 != next_validator_groups_.end()) { - if (!it2->second.empty()) { - td::actor::send_closure(it2->second, &ValidatorGroup::start, prev, last_masterchain_block_id_, + if (!it2->second.actor.empty()) { + td::actor::send_closure(it2->second.actor, &ValidatorGroup::start, prev, last_masterchain_block_id_, last_masterchain_state_->get_unix_time()); } new_validator_groups_.emplace(val_group_id, std::move(it2->second)); @@ -1968,7 +1975,7 @@ void ValidatorManagerImpl::update_shards() { td::actor::send_closure(G, &ValidatorGroup::start, prev, last_masterchain_block_id_, last_masterchain_state_->get_unix_time()); } - new_validator_groups_.emplace(val_group_id, std::move(G)); + new_validator_groups_.emplace(val_group_id, ValidatorGroupEntry{std::move(G), shard}); } } } @@ -1988,23 +1995,24 @@ void ValidatorManagerImpl::update_shards() { //CHECK(!it->second.empty()); new_next_validator_groups_.emplace(val_group_id, std::move(it->second)); } else { - new_next_validator_groups_.emplace(val_group_id, - create_validator_group(val_group_id, shard, val_set, opts, started_)); + new_next_validator_groups_.emplace( + val_group_id, + ValidatorGroupEntry{create_validator_group(val_group_id, shard, val_set, opts, started_), shard}); } } } std::vector> gc; for (auto &v : validator_groups_) { - if (!v.second.empty()) { + if (!v.second.actor.empty()) { gc_list_.push_back(v.first); - gc.push_back(v.second.release()); + gc.push_back(v.second.actor.release()); } } for (auto &v : next_validator_groups_) { - if (!v.second.empty()) { + if (!v.second.actor.empty()) { gc_list_.push_back(v.first); - gc.push_back(v.second.release()); + gc.push_back(v.second.actor.release()); } } @@ -2704,19 +2712,72 @@ void ValidatorManagerImpl::log_validator_session_stats(BlockIdExt block_id, } void ValidatorManagerImpl::get_block_handle_for_litequery(BlockIdExt block_id, td::Promise promise) { - get_block_handle( - block_id, false, - [SelfId = actor_id(this), block_id, promise = std::move(promise)](td::Result R) mutable { - if (R.is_ok() && R.ok()->is_applied()) { - promise.set_value(R.move_as_ok()); - } else { - td::actor::send_closure(SelfId, &ValidatorManagerImpl::process_block_handle_for_litequery_error, block_id, - std::move(R), std::move(promise)); - } - }); + get_block_handle(block_id, false, + [SelfId = actor_id(this), block_id, promise = std::move(promise), + allow_not_applied = opts_->nonfinal_ls_queries_enabled()](td::Result R) mutable { + if (R.is_ok() && (allow_not_applied || R.ok()->is_applied())) { + promise.set_value(R.move_as_ok()); + } else { + td::actor::send_closure(SelfId, &ValidatorManagerImpl::process_block_handle_for_litequery_error, + block_id, std::move(R), std::move(promise)); + } + }); } -void ValidatorManagerImpl::get_block_by_lt_from_db_for_litequery(AccountIdPrefixFull account, LogicalTime lt, +void ValidatorManagerImpl::get_block_data_for_litequery(BlockIdExt block_id, td::Promise> promise) { + if (candidates_buffer_.empty()) { + get_block_handle_for_litequery( + block_id, [manager = actor_id(this), promise = std::move(promise)](td::Result R) mutable { + TRY_RESULT_PROMISE(promise, handle, std::move(R)); + td::actor::send_closure_later(manager, &ValidatorManager::get_block_data_from_db, std::move(handle), + std::move(promise)); + }); + } else { + td::actor::send_closure( + candidates_buffer_, &CandidatesBuffer::get_block_data, block_id, + [manager = actor_id(this), promise = std::move(promise), block_id](td::Result> R) mutable { + if (R.is_ok()) { + promise.set_result(R.move_as_ok()); + return; + } + td::actor::send_closure(manager, &ValidatorManagerImpl::get_block_handle_for_litequery, block_id, + [manager, promise = std::move(promise)](td::Result R) mutable { + TRY_RESULT_PROMISE(promise, handle, std::move(R)); + td::actor::send_closure_later(manager, &ValidatorManager::get_block_data_from_db, + std::move(handle), std::move(promise)); + }); + }); + } +} + +void ValidatorManagerImpl::get_block_state_for_litequery(BlockIdExt block_id, + td::Promise> promise) { + if (candidates_buffer_.empty()) { + get_block_handle_for_litequery( + block_id, [manager = actor_id(this), promise = std::move(promise)](td::Result R) mutable { + TRY_RESULT_PROMISE(promise, handle, std::move(R)); + td::actor::send_closure_later(manager, &ValidatorManager::get_shard_state_from_db, std::move(handle), + std::move(promise)); + }); + } else { + td::actor::send_closure( + candidates_buffer_, &CandidatesBuffer::get_block_state, block_id, + [manager = actor_id(this), promise = std::move(promise), block_id](td::Result> R) mutable { + if (R.is_ok()) { + promise.set_result(R.move_as_ok()); + return; + } + td::actor::send_closure(manager, &ValidatorManagerImpl::get_block_handle_for_litequery, + block_id, [manager, promise = std::move(promise)](td::Result R) mutable { + TRY_RESULT_PROMISE(promise, handle, std::move(R)); + td::actor::send_closure_later(manager, &ValidatorManager::get_shard_state_from_db, std::move(handle), + std::move(promise)); + }); + }); + } +} + +void ValidatorManagerImpl::get_block_by_lt_for_litequery(AccountIdPrefixFull account, LogicalTime lt, td::Promise promise) { get_block_by_lt_from_db( account, lt, [=, SelfId = actor_id(this), promise = std::move(promise)](td::Result R) mutable { @@ -2729,7 +2790,7 @@ void ValidatorManagerImpl::get_block_by_lt_from_db_for_litequery(AccountIdPrefix }); } -void ValidatorManagerImpl::get_block_by_unix_time_from_db_for_litequery(AccountIdPrefixFull account, UnixTime ts, +void ValidatorManagerImpl::get_block_by_unix_time_for_litequery(AccountIdPrefixFull account, UnixTime ts, td::Promise promise) { get_block_by_unix_time_from_db( account, ts, [=, SelfId = actor_id(this), promise = std::move(promise)](td::Result R) mutable { @@ -2742,7 +2803,7 @@ void ValidatorManagerImpl::get_block_by_unix_time_from_db_for_litequery(AccountI }); } -void ValidatorManagerImpl::get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, +void ValidatorManagerImpl::get_block_by_seqno_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, td::Promise promise) { get_block_by_seqno_from_db( account, seqno, @@ -2840,6 +2901,77 @@ void ValidatorManagerImpl::process_lookup_block_for_litequery_error(AccountIdPre promise.set_error(std::move(err)); } +void ValidatorManagerImpl::get_block_candidate_for_litequery(PublicKey source, BlockIdExt block_id, + FileHash collated_data_hash, + td::Promise promise) { + if (!opts_->nonfinal_ls_queries_enabled()) { + promise.set_error(td::Status::Error("query is not allowed")); + return; + } + get_block_candidate_from_db(source, block_id, collated_data_hash, std::move(promise)); +} + +void ValidatorManagerImpl::get_validator_groups_info_for_litequery( + td::optional shard, + td::Promise> promise) { + if (!opts_->nonfinal_ls_queries_enabled()) { + promise.set_error(td::Status::Error("query is not allowed")); + return; + } + class Actor : public td::actor::Actor { + public: + explicit Actor(std::vector> groups, + td::Promise> promise) + : groups_(std::move(groups)), promise_(std::move(promise)) { + } + + void start_up() override { + pending_ = groups_.size(); + if (pending_ == 0) { + promise_.set_result(std::move(result_)); + stop(); + return; + } + for (auto &x : groups_) { + td::actor::send_closure( + x, &ValidatorGroup::get_validator_group_info_for_litequery, + [SelfId = actor_id(this)](td::Result> R) { + td::actor::send_closure(SelfId, &Actor::on_result, R.is_ok() ? R.move_as_ok() : nullptr); + }); + } + } + + void on_result(tl_object_ptr r) { + if (r) { + result_->groups_.push_back(std::move(r)); + } + --pending_; + if (pending_ == 0) { + promise_.set_result(std::move(result_)); + stop(); + } + } + + private: + std::vector> groups_; + size_t pending_; + td::Promise> promise_; + tl_object_ptr result_ = + create_tl_object(); + }; + std::vector> groups; + for (auto &x : validator_groups_) { + if (x.second.actor.empty()) { + continue; + } + if (shard && shard.value() != x.second.shard) { + continue; + } + groups.push_back(x.second.actor.get()); + } + td::actor::create_actor("get-validator-groups-info", std::move(groups), std::move(promise)).release(); +} + td::actor::ActorOwn ValidatorManagerFactory::create( td::Ref opts, std::string db_root, td::actor::ActorId keyring, td::actor::ActorId adnl, td::actor::ActorId rldp, diff --git a/validator/manager.hpp b/validator/manager.hpp index 5a1fbc60..fd599563 100644 --- a/validator/manager.hpp +++ b/validator/manager.hpp @@ -29,6 +29,7 @@ #include "rldp/rldp.h" #include "token-manager.h" #include "queue-size-counter.hpp" +#include "impl/candidates-buffer.hpp" #include #include @@ -235,8 +236,12 @@ class ValidatorManagerImpl : public ValidatorManager { td::Ref validator_set, validatorsession::ValidatorSessionOptions opts, bool create_catchain); - std::map> validator_groups_; - std::map> next_validator_groups_; + struct ValidatorGroupEntry { + td::actor::ActorOwn actor; + ShardIdFull shard; + }; + std::map validator_groups_; + std::map next_validator_groups_; std::set check_gc_list_; std::vector gc_list_; @@ -563,17 +568,24 @@ class ValidatorManagerImpl : public ValidatorManager { } void get_block_handle_for_litequery(BlockIdExt block_id, td::Promise promise) override; - void get_block_by_lt_from_db_for_litequery(AccountIdPrefixFull account, LogicalTime lt, + void get_block_data_for_litequery(BlockIdExt block_id, td::Promise> promise) override; + void get_block_state_for_litequery(BlockIdExt block_id, td::Promise> promise) override; + void get_block_by_lt_for_litequery(AccountIdPrefixFull account, LogicalTime lt, td::Promise promise) override; - void get_block_by_unix_time_from_db_for_litequery(AccountIdPrefixFull account, UnixTime ts, + void get_block_by_unix_time_for_litequery(AccountIdPrefixFull account, UnixTime ts, td::Promise promise) override; - void get_block_by_seqno_from_db_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, + void get_block_by_seqno_for_litequery(AccountIdPrefixFull account, BlockSeqno seqno, td::Promise promise) override; void process_block_handle_for_litequery_error(BlockIdExt block_id, td::Result r_handle, td::Promise promise); void process_lookup_block_for_litequery_error(AccountIdPrefixFull account, int type, td::uint64 value, td::Result r_handle, td::Promise promise); + void get_block_candidate_for_litequery(PublicKey source, BlockIdExt block_id, FileHash collated_data_hash, + td::Promise promise) override; + void get_validator_groups_info_for_litequery( + td::optional shard, + td::Promise> promise) override; void add_lite_query_stats(int lite_query_id) override { ++ls_stats_[lite_query_id]; @@ -648,6 +660,8 @@ class ValidatorManagerImpl : public ValidatorManager { td::Timestamp log_ls_stats_at_; std::map ls_stats_; // lite_api ID -> count, 0 for unknown td::uint32 ls_stats_check_ext_messages_{0}; + + td::actor::ActorOwn candidates_buffer_; }; } // namespace validator diff --git a/validator/validator-group.cpp b/validator/validator-group.cpp index 73ca22a6..05628ef5 100644 --- a/validator/validator-group.cpp +++ b/validator/validator-group.cpp @@ -21,6 +21,7 @@ #include "ton/ton-io.hpp" #include "td/utils/overloaded.h" #include "common/delay.h" +#include "ton/lite-tl.hpp" namespace ton { @@ -61,7 +62,9 @@ void ValidatorGroup::generated_block_candidate(std::shared_ptrresult = R.move_as_ok(); + auto candidate = R.move_as_ok(); + add_available_block_candidate(candidate.pubkey.as_bits256(), candidate.id, candidate.collated_file_hash); + cache->result = std::move(candidate); for (auto &p : cache->promises) { p.set_value(cache->result.value().clone()); } @@ -108,6 +111,8 @@ void ValidatorGroup::validate_block_candidate(td::uint32 round_id, BlockCandidat [&](UnixTime ts) { td::actor::send_closure(SelfId, &ValidatorGroup::update_approve_cache, block_to_cache_key(block), ts); + td::actor::send_closure(SelfId, &ValidatorGroup::add_available_block_candidate, block.pubkey.as_bits256(), + block.id, block.collated_file_hash); promise.set_result(ts); }, [&](CandidateReject reject) { @@ -224,6 +229,16 @@ BlockIdExt ValidatorGroup::create_next_block_id(RootHash root_hash, FileHash fil return BlockIdExt{shard_.workchain, shard_.shard, seqno + 1, root_hash, file_hash}; } +BlockId ValidatorGroup::create_next_block_id_simple() const { + BlockSeqno seqno = 0; + for (auto &p : prev_block_ids_) { + if (seqno < p.id.seqno) { + seqno = p.id.seqno; + } + } + return BlockId{shard_.workchain, shard_.shard, seqno + 1}; +} + std::unique_ptr ValidatorGroup::make_validator_session_callback() { class Callback : public validatorsession::ValidatorSession::Callback { public: @@ -377,6 +392,47 @@ void ValidatorGroup::destroy() { stop(); } +void ValidatorGroup::get_validator_group_info_for_litequery( + td::Promise> promise) { + if (session_.empty()) { + promise.set_error(td::Status::Error(ErrorCode::notready, "not started")); + return; + } + td::actor::send_closure( + session_, &validatorsession::ValidatorSession::get_validator_group_info_for_litequery, last_known_round_id_, + [SelfId = actor_id(this), promise = std::move(promise), round = last_known_round_id_]( + td::Result>> R) mutable { + TRY_RESULT_PROMISE(promise, result, std::move(R)); + td::actor::send_closure(SelfId, &ValidatorGroup::get_validator_group_info_for_litequery_cont, round, + std::move(result), std::move(promise)); + }); +} + +void ValidatorGroup::get_validator_group_info_for_litequery_cont( + td::uint32 expected_round, std::vector> candidates, + td::Promise> promise) { + if (expected_round != last_known_round_id_) { + candidates.clear(); + } + + BlockId next_block_id = create_next_block_id_simple(); + for (auto &candidate : candidates) { + BlockIdExt id{next_block_id, candidate->id_->block_id_->root_hash_, candidate->id_->block_id_->file_hash_}; + candidate->id_->block_id_ = create_tl_lite_block_id(id); + candidate->available_ = + available_block_candidates_.count({candidate->id_->creator_, id, candidate->id_->collated_data_hash_}); + } + + auto result = create_tl_object(); + result->next_block_id_ = create_tl_lite_block_id_simple(next_block_id); + for (const BlockIdExt& prev : prev_block_ids_) { + result->prev_.push_back(create_tl_lite_block_id(prev)); + } + result->cc_seqno_ = validator_set_->get_catchain_seqno(); + result->candidates_ = std::move(candidates); + promise.set_result(std::move(result)); +} + } // namespace validator } // namespace ton diff --git a/validator/validator-group.hpp b/validator/validator-group.hpp index 26818d43..2dbff8de 100644 --- a/validator/validator-group.hpp +++ b/validator/validator-group.hpp @@ -47,6 +47,7 @@ class ValidatorGroup : public td::actor::Actor { void get_approved_candidate(PublicKey source, RootHash root_hash, FileHash file_hash, FileHash collated_data_file_hash, td::Promise promise); BlockIdExt create_next_block_id(RootHash root_hash, FileHash file_hash) const; + BlockId create_next_block_id_simple() const; void start(std::vector prev, BlockIdExt min_masterchain_block_id, UnixTime min_ts); void create_session(); @@ -58,6 +59,9 @@ class ValidatorGroup : public td::actor::Actor { } } + void get_validator_group_info_for_litequery( + td::Promise> promise); + ValidatorGroup(ShardIdFull shard, PublicKeyHash local_id, ValidatorSessionId session_id, td::Ref validator_set, validatorsession::ValidatorSessionOptions config, td::actor::ActorId keyring, td::actor::ActorId adnl, @@ -135,6 +139,17 @@ class ValidatorGroup : public td::actor::Actor { static CacheKey block_to_cache_key(const BlockCandidate& block) { return std::make_tuple(block.pubkey.as_bits256(), block.id, sha256_bits256(block.data), block.collated_file_hash); } + + void get_validator_group_info_for_litequery_cont( + td::uint32 expected_round, + std::vector> candidates, + td::Promise> promise); + + std::set> available_block_candidates_; // source, id, collated hash + + void add_available_block_candidate(td::Bits256 source, BlockIdExt id, FileHash collated_data_hash) { + available_block_candidates_.emplace(source, id, collated_data_hash); + } }; } // namespace validator diff --git a/validator/validator-options.hpp b/validator/validator-options.hpp index fca8d62f..1b7c5b09 100644 --- a/validator/validator-options.hpp +++ b/validator/validator-options.hpp @@ -126,6 +126,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { bool get_disable_rocksdb_stats() const override { return disable_rocksdb_stats_; } + bool nonfinal_ls_queries_enabled() const override { + return nonfinal_ls_queries_enabled_; + } void set_zero_block_id(BlockIdExt block_id) override { zero_block_id_ = block_id; @@ -191,6 +194,9 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { void set_disable_rocksdb_stats(bool value) override { disable_rocksdb_stats_ = value; } + void set_nonfinal_ls_queries_enabled(bool value) override { + nonfinal_ls_queries_enabled_ = value; + } ValidatorManagerOptionsImpl *make_copy() const override { return new ValidatorManagerOptionsImpl(*this); @@ -237,6 +243,7 @@ struct ValidatorManagerOptionsImpl : public ValidatorManagerOptions { size_t max_open_archive_files_ = 0; double archive_preload_period_ = 0.0; bool disable_rocksdb_stats_; + bool nonfinal_ls_queries_enabled_ = false; }; } // namespace validator diff --git a/validator/validator.h b/validator/validator.h index 2857d333..9ad20b4b 100644 --- a/validator/validator.h +++ b/validator/validator.h @@ -85,6 +85,7 @@ struct ValidatorManagerOptions : public td::CntObject { virtual size_t get_max_open_archive_files() const = 0; virtual double get_archive_preload_period() const = 0; virtual bool get_disable_rocksdb_stats() const = 0; + virtual bool nonfinal_ls_queries_enabled() const = 0; virtual void set_zero_block_id(BlockIdExt block_id) = 0; virtual void set_init_block_id(BlockIdExt block_id) = 0; @@ -108,6 +109,7 @@ struct ValidatorManagerOptions : public td::CntObject { virtual void set_max_open_archive_files(size_t value) = 0; virtual void set_archive_preload_period(double value) = 0; virtual void set_disable_rocksdb_stats(bool value) = 0; + virtual void set_nonfinal_ls_queries_enabled(bool value) = 0; static td::Ref create( BlockIdExt zero_block_id, BlockIdExt init_block_id, From 0bcebe8a0e4f11ab92c0f130c6c2595d498f95fa Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 26 Mar 2024 14:52:46 +0300 Subject: [PATCH 115/351] Exp/compress candidates (#942) * Compress block candidates in validator-session * Compress blocks in full-node (disabled for now) --------- Co-authored-by: SpyCheese --- CMake/FindLZ4.cmake | 39 ++++++ tdutils/CMakeLists.txt | 15 ++ tdutils/td/utils/config.h.in | 1 + tdutils/td/utils/lz4.cpp | 48 +++++++ tdutils/td/utils/lz4.h | 27 ++++ tl/generate/scheme/ton_api.tl | 13 +- tl/generate/scheme/ton_api.tlo | Bin 86524 -> 86740 bytes validator-session/CMakeLists.txt | 2 + validator-session/candidate-serializer.cpp | 76 ++++++++++ validator-session/candidate-serializer.h | 29 ++++ validator-session/validator-session.cpp | 35 +++-- validator-session/validator-session.hpp | 1 + validator/CMakeLists.txt | 2 + validator/full-node-private-overlay.cpp | 43 +++--- validator/full-node-private-overlay.hpp | 3 + validator/full-node-serializer.cpp | 155 +++++++++++++++++++++ validator/full-node-serializer.hpp | 31 +++++ validator/full-node-shard-queries.hpp | 5 +- validator/full-node-shard.cpp | 39 +++--- validator/full-node-shard.hpp | 5 +- validator/net/download-block-new.cpp | 91 ++++++------ 21 files changed, 548 insertions(+), 112 deletions(-) create mode 100644 CMake/FindLZ4.cmake create mode 100644 tdutils/td/utils/lz4.cpp create mode 100644 tdutils/td/utils/lz4.h create mode 100644 validator-session/candidate-serializer.cpp create mode 100644 validator-session/candidate-serializer.h create mode 100644 validator/full-node-serializer.cpp create mode 100644 validator/full-node-serializer.hpp diff --git a/CMake/FindLZ4.cmake b/CMake/FindLZ4.cmake new file mode 100644 index 00000000..e13eca55 --- /dev/null +++ b/CMake/FindLZ4.cmake @@ -0,0 +1,39 @@ +############################################################################### +# Find LZ4 +# +# This sets the following variables: +# LZ4_FOUND - True if LZ4 was found. +# LZ4_INCLUDE_DIRS - Directories containing the LZ4 include files. +# LZ4_LIBRARIES - Libraries needed to use LZ4. +# LZ4_LIBRARY - Library needed to use LZ4. +# LZ4_LIBRARY_DIRS - Library needed to use LZ4. + +find_package(PkgConfig REQUIRED) + +# If found, LZ$_* variables will be defined +pkg_check_modules(LZ4 REQUIRED liblz4) + +if(NOT LZ4_FOUND) + find_path(LZ4_INCLUDE_DIR lz4.h + HINTS "${LZ4_ROOT}" "$ENV{LZ4_ROOT}" + PATHS "$ENV{PROGRAMFILES}/lz4" "$ENV{PROGRAMW6432}/lz4" + PATH_SUFFIXES include) + + find_library(LZ4_LIBRARY + NAMES lz4 lz4_static + HINTS "${LZ4_ROOT}" "$ENV{LZ4_ROOT}" + PATHS "$ENV{PROGRAMFILES}/lz4" "$ENV{PROGRAMW6432}/lz4" + PATH_SUFFIXES lib) + + if(LZ4_LIBRARY) + set(LZ4_LIBRARIES ${LZ4_LIBRARY}) + get_filename_component(LZ4_LIBRARY_DIRS ${LZ4_LIBRARY} DIRECTORY) + endif() +else() + find_library(LZ4_LIBRARY + NAMES lz4 lz4_static + PATHS ${LZ4_LIBRARY_DIRS} + NO_DEFAULT_PATH) +endif() + +mark_as_advanced(LZ4_LIBRARY LZ4_INCLUDE_DIRS LZ4_LIBRARY_DIRS LZ4_LIBRARIES) \ No newline at end of file diff --git a/tdutils/CMakeLists.txt b/tdutils/CMakeLists.txt index f1e4b1ea..7eebc910 100644 --- a/tdutils/CMakeLists.txt +++ b/tdutils/CMakeLists.txt @@ -15,6 +15,7 @@ if (NOT DEFINED CMAKE_INSTALL_LIBDIR) endif() find_package(PkgConfig REQUIRED) +find_package(LZ4) if (NOT ZLIB_FOUND) pkg_check_modules(ZLIB zlib) endif() @@ -280,6 +281,15 @@ if (TDUTILS_MIME_TYPE) ) endif() +if (LZ4_FOUND) + set(TD_HAVE_LZ4 1) + set(TDUTILS_SOURCE + ${TDUTILS_SOURCE} + td/utils/lz4.cpp + td/utils/lz4.h + ) +endif() + set(TDUTILS_TEST_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/test/buffer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test/ConcurrentHashMap.cpp @@ -338,6 +348,11 @@ endif() if (CRC32C_FOUND) target_link_libraries(tdutils PRIVATE crc32c) endif() + +if (LZ4_FOUND) + target_link_libraries(tdutils PRIVATE ${LZ4_LIBRARIES}) +endif() + if (ABSL_FOUND) target_link_libraries_system(tdutils absl::flat_hash_map absl::flat_hash_set absl::hash) endif() diff --git a/tdutils/td/utils/config.h.in b/tdutils/td/utils/config.h.in index f8b89aeb..3f4e1bf2 100644 --- a/tdutils/td/utils/config.h.in +++ b/tdutils/td/utils/config.h.in @@ -3,6 +3,7 @@ #cmakedefine01 TD_HAVE_OPENSSL #cmakedefine01 TD_HAVE_ZLIB #cmakedefine01 TD_HAVE_CRC32C +#cmakedefine01 TD_HAVE_LZ4 #cmakedefine01 TD_HAVE_COROUTINES #cmakedefine01 TD_HAVE_ABSL #cmakedefine01 TD_FD_DEBUG diff --git a/tdutils/td/utils/lz4.cpp b/tdutils/td/utils/lz4.cpp new file mode 100644 index 00000000..ebf456aa --- /dev/null +++ b/tdutils/td/utils/lz4.cpp @@ -0,0 +1,48 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#include "td/utils/buffer.h" +#include "td/utils/misc.h" +#include + +namespace td { + +td::BufferSlice lz4_compress(td::Slice data) { + int size = narrow_cast(data.size()); + int buf_size = LZ4_compressBound(size); + td::BufferSlice compressed(buf_size); + int compressed_size = LZ4_compress_default(data.data(), compressed.data(), size, buf_size); + CHECK(compressed_size > 0); + return td::BufferSlice{compressed.as_slice().substr(0, compressed_size)}; +} + +td::Result lz4_decompress(td::Slice data, int max_decompressed_size) { + TRY_RESULT(size, narrow_cast_safe(data.size())); + if (max_decompressed_size < 0) { + return td::Status::Error("invalid max_decompressed_size"); + } + td::BufferSlice decompressed(max_decompressed_size); + int result = LZ4_decompress_safe(data.data(), decompressed.data(), size, max_decompressed_size); + if (result < 0) { + return td::Status::Error(PSTRING() << "lz4 decompression failed, error code: " << result); + } + if (result == max_decompressed_size) { + return decompressed; + } + return td::BufferSlice{decompressed.as_slice().substr(0, result)}; +} + +} // namespace td diff --git a/tdutils/td/utils/lz4.h b/tdutils/td/utils/lz4.h new file mode 100644 index 00000000..fbbc470f --- /dev/null +++ b/tdutils/td/utils/lz4.h @@ -0,0 +1,27 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once + +#include "td/utils/buffer.h" +#include "td/utils/Status.h" + +namespace td { + +td::BufferSlice lz4_compress(td::Slice data); +td::Result lz4_decompress(td::Slice data, int max_decompressed_size); + +} // namespace td diff --git a/tl/generate/scheme/ton_api.tl b/tl/generate/scheme/ton_api.tl index 0f94e7f1..159a0c88 100644 --- a/tl/generate/scheme/ton_api.tl +++ b/tl/generate/scheme/ton_api.tl @@ -309,6 +309,7 @@ validatorSession.candidateId src:int256 root_hash:int256 file_hash:int256 collat validatorSession.blockUpdate ts:long actions:(vector validatorSession.round.Message) state:int = validatorSession.BlockUpdate; validatorSession.candidate src:int256 round:int root_hash:int256 data:bytes collated_data:bytes = validatorSession.Candidate; +validatorSession.compressedCandidate flags:# src:int256 round:int root_hash:int256 decompressed_size:int data:bytes = validatorSession.Candidate; validatorSession.config catchain_idle_timeout:double catchain_max_deps:int round_candidates:int next_candidate_delay:double round_attempt_duration:int max_round_attempts:int max_block_size:int max_collated_data_size:int = validatorSession.Config; @@ -385,9 +386,13 @@ tonNode.externalMessage data:bytes = tonNode.ExternalMessage; tonNode.newShardBlock block:tonNode.blockIdExt cc_seqno:int data:bytes = tonNode.NewShardBlock; +tonNode.blockBroadcastCompressed.data signatures:(vector tonNode.blockSignature) proof_data:bytes = tonNode.blockBroadcaseCompressed.Data; + tonNode.blockBroadcast id:tonNode.blockIdExt catchain_seqno:int validator_set_hash:int signatures:(vector tonNode.blockSignature) proof:bytes data:bytes = tonNode.Broadcast; +tonNode.blockBroadcastCompressed id:tonNode.blockIdExt catchain_seqno:int validator_set_hash:int + flags:# compressed:bytes = tonNode.Broadcast; tonNode.ihrMessageBroadcast message:tonNode.ihrMessage = tonNode.Broadcast; tonNode.externalMessageBroadcast message:tonNode.externalMessage = tonNode.Broadcast; tonNode.newShardBlockBroadcast block:tonNode.newShardBlock = tonNode.Broadcast; @@ -401,9 +406,8 @@ tonNode.keyBlocks blocks:(vector tonNode.blockIdExt) incomplete:Bool error:Bool ton.blockId root_cell_hash:int256 file_hash:int256 = ton.BlockId; ton.blockIdApprove root_cell_hash:int256 file_hash:int256 = ton.BlockId; -tonNode.dataList data:(vector bytes) = tonNode.DataList; - tonNode.dataFull id:tonNode.blockIdExt proof:bytes block:bytes is_link:Bool = tonNode.DataFull; +tonNode.dataFullCompressed id:tonNode.blockIdExt flags:# compressed:bytes is_link:Bool = tonNode.DataFull; tonNode.dataFullEmpty = tonNode.DataFull; tonNode.capabilities version:int capabilities:long = tonNode.Capabilities; @@ -430,18 +434,13 @@ tonNode.getNextKeyBlockIds block:tonNode.blockIdExt max_size:int = tonNode.KeyBl tonNode.downloadNextBlockFull prev_block:tonNode.blockIdExt = tonNode.DataFull; tonNode.downloadBlockFull block:tonNode.blockIdExt = tonNode.DataFull; tonNode.downloadBlock block:tonNode.blockIdExt = tonNode.Data; -tonNode.downloadBlocks blocks:(vector tonNode.blockIdExt) = tonNode.DataList; tonNode.downloadPersistentState block:tonNode.blockIdExt masterchain_block:tonNode.blockIdExt = tonNode.Data; tonNode.downloadPersistentStateSlice block:tonNode.blockIdExt masterchain_block:tonNode.blockIdExt offset:long max_size:long = tonNode.Data; tonNode.downloadZeroState block:tonNode.blockIdExt = tonNode.Data; tonNode.downloadBlockProof block:tonNode.blockIdExt = tonNode.Data; tonNode.downloadKeyBlockProof block:tonNode.blockIdExt = tonNode.Data; -tonNode.downloadBlockProofs blocks:(vector tonNode.blockIdExt) = tonNode.DataList; -tonNode.downloadKeyBlockProofs blocks:(vector tonNode.blockIdExt) = tonNode.DataList; tonNode.downloadBlockProofLink block:tonNode.blockIdExt = tonNode.Data; tonNode.downloadKeyBlockProofLink block:tonNode.blockIdExt = tonNode.Data; -tonNode.downloadBlockProofLinks blocks:(vector tonNode.blockIdExt) = tonNode.DataList; -tonNode.downloadKeyBlockProofLinks blocks:(vector tonNode.blockIdExt) = tonNode.DataList; tonNode.getArchiveInfo masterchain_seqno:int = tonNode.ArchiveInfo; tonNode.getArchiveSlice archive_id:long offset:long max_size:int = tonNode.Data; diff --git a/tl/generate/scheme/ton_api.tlo b/tl/generate/scheme/ton_api.tlo index e71fb0f726456b06fbbbad3dc63d41f59a226c3d..18df7794cc6bf48a3e48ce6020c1a8051d2bf747 100644 GIT binary patch delta 692 zcmeyfnDxq1)&<&D~JpUmIVlY6#RXMI0XYs$B3P4lE z1QCV;r9sN3U(jZhn7koPV6x5^jmb67btVU_=9rW$!_Acpw}0|}KUs+38ZUGpjEENo z5Jt}n6EI`?jQ~cd&<~j0hgg}(9xp|}@|zQ0vM{oMd_Sp9VsgW)5)%*`*^x_iY~7?_ zA(H|P86@{2^a@VSO;zSaav%f40~oEUFRU*W=dWqO4h nBgFI57q~H+fMvJeaAVBi0vj@Y0xzS^^nyS}1qgRaAY%pqPbL6! delta 597 zcmcbzl=aVI)&<&P`Q@ji>NyqVC#EDP7MCzEuuOCmpKPF=AQ~xU_EG?* zz$LLH(XBKmXR;%gw4ku@7ZDVh$%Y#8n-6GbFipK^$bFL=UiUy4H{NJCfJAN{6Y^mIf+A-&9S+;JgCH>w9|W$-amApxJq741pG=Ui z89?HbC)mhLK9eUhxyMSH>Hx$=Vk+>{Y6z6Nht zDh*c36;PC)pN2. +*/ +#pragma once +#include "candidate-serializer.h" +#include "tl-utils/tl-utils.hpp" +#include "vm/boc.h" +#include "td/utils/lz4.h" +#include "validator-session-types.h" + +namespace ton::validatorsession { + +td::Result serialize_candidate(const tl_object_ptr &block, + bool compression_enabled) { + if (!compression_enabled) { + return serialize_tl_object(block, true); + } + vm::BagOfCells boc1, boc2; + TRY_STATUS(boc1.deserialize(block->data_)); + if (boc1.get_root_count() != 1) { + return td::Status::Error("block candidate should have exactly one root"); + } + std::vector> roots = {boc1.get_root_cell()}; + TRY_STATUS(boc2.deserialize(block->collated_data_)); + for (int i = 0; i < boc2.get_root_count(); ++i) { + roots.push_back(boc2.get_root_cell(i)); + } + TRY_RESULT(data, vm::std_boc_serialize_multi(std::move(roots), 2)); + td::BufferSlice compressed = td::lz4_compress(data); + LOG(VALIDATOR_SESSION_DEBUG) << "Compressing block candidate: " << block->data_.size() + block->collated_data_.size() + << " -> " << compressed.size(); + return create_serialize_tl_object( + 0, block->src_, block->round_, block->root_hash_, (int)data.size(), std::move(compressed)); +} + +td::Result> deserialize_candidate(td::Slice data, + bool compression_enabled, + int max_decompressed_data_size) { + if (!compression_enabled) { + return fetch_tl_object(data, true); + } + TRY_RESULT(f, fetch_tl_object(data, true)); + if (f->decompressed_size_ > max_decompressed_data_size) { + return td::Status::Error("decompressed size is too big"); + } + TRY_RESULT(decompressed, td::lz4_decompress(f->data_, f->decompressed_size_)); + if (decompressed.size() != (size_t)f->decompressed_size_) { + return td::Status::Error("decompressed size mismatch"); + } + TRY_RESULT(roots, vm::std_boc_deserialize_multi(decompressed)); + if (roots.empty()) { + return td::Status::Error("boc is empty"); + } + TRY_RESULT(block_data, vm::std_boc_serialize(roots[0], 31)); + roots.erase(roots.begin()); + TRY_RESULT(collated_data, vm::std_boc_serialize_multi(std::move(roots), 31)); + LOG(VALIDATOR_SESSION_DEBUG) << "Decompressing block candidate: " << f->data_.size() << " -> " + << block_data.size() + collated_data.size(); + return create_tl_object(f->src_, f->round_, f->root_hash_, std::move(block_data), + std::move(collated_data)); +} + +} // namespace ton::validatorsession diff --git a/validator-session/candidate-serializer.h b/validator-session/candidate-serializer.h new file mode 100644 index 00000000..030a412c --- /dev/null +++ b/validator-session/candidate-serializer.h @@ -0,0 +1,29 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once +#include "ton/ton-types.h" +#include "auto/tl/ton_api.h" + +namespace ton::validatorsession { + +td::Result serialize_candidate(const tl_object_ptr &block, + bool compression_enabled); +td::Result> deserialize_candidate(td::Slice data, + bool compression_enabled, + int max_decompressed_data_size); + +} // namespace ton::validatorsession diff --git a/validator-session/validator-session.cpp b/validator-session/validator-session.cpp index 38e2ea23..51650524 100644 --- a/validator-session/validator-session.cpp +++ b/validator-session/validator-session.cpp @@ -19,6 +19,7 @@ #include "validator-session.hpp" #include "td/utils/Random.h" #include "td/utils/crypto.h" +#include "candidate-serializer.h" namespace ton { @@ -221,7 +222,9 @@ void ValidatorSessionImpl::process_broadcast(PublicKeyHash src, td::BufferSlice // Note: src is not necessarily equal to the sender of this message: // If requested using get_broadcast_p2p, src is the creator of the block, sender possibly is some other node. auto src_idx = description().get_source_idx(src); - auto R = fetch_tl_object(data.clone(), true); + auto R = + deserialize_candidate(data, compress_block_candidates_, + description().opts().max_block_size + description().opts().max_collated_data_size + 1024); if (R.is_error()) { VLOG(VALIDATOR_SESSION_WARNING) << this << "[node " << src << "][broadcast " << sha256_bits256(data.as_slice()) << "]: failed to parse: " << R.move_as_error(); @@ -343,17 +346,17 @@ void ValidatorSessionImpl::process_query(PublicKeyHash src, td::BufferSlice data } CHECK(block); - auto P = td::PromiseCreator::lambda( - [promise = std::move(promise), src = f->id_->src_, round_id](td::Result R) mutable { - if (R.is_error()) { - promise.set_error(R.move_as_error_prefix("failed to get candidate: ")); - } else { - auto c = R.move_as_ok(); - auto obj = create_tl_object( - src, round_id, c.id.root_hash, std::move(c.data), std::move(c.collated_data)); - promise.set_value(serialize_tl_object(obj, true)); - } - }); + auto P = td::PromiseCreator::lambda([promise = std::move(promise), src = f->id_->src_, round_id, + compress = compress_block_candidates_](td::Result R) mutable { + if (R.is_error()) { + promise.set_error(R.move_as_error_prefix("failed to get candidate: ")); + } else { + auto c = R.move_as_ok(); + auto obj = create_tl_object(src, round_id, c.id.root_hash, std::move(c.data), + std::move(c.collated_data)); + promise.set_result(serialize_candidate(obj, compress)); + } + }); callback_->get_approved_candidate(description().get_source_public_key(block->get_src_idx()), f->id_->root_hash_, f->id_->file_hash_, f->id_->collated_data_file_hash_, std::move(P)); @@ -431,7 +434,7 @@ void ValidatorSessionImpl::generated_block(td::uint32 round, ValidatorSessionCan auto b = create_tl_object(local_id().tl(), round, root_hash, std::move(data), std::move(collated_data)); - auto B = serialize_tl_object(b, true); + auto B = serialize_candidate(b, compress_block_candidates_).move_as_ok(); auto block_id = description().candidate_id(local_idx(), root_hash, file_hash, collated_data_file_hash); @@ -862,7 +865,8 @@ void ValidatorSessionImpl::on_catchain_started() { if (x) { auto P = td::PromiseCreator::lambda([SelfId = actor_id(this), round = virtual_state_->cur_round_seqno(), src = description().get_source_id(x->get_src_idx()), - root_hash = x->get_root_hash()](td::Result R) { + root_hash = x->get_root_hash(), + compress = compress_block_candidates_](td::Result R) { if (R.is_error()) { LOG(ERROR) << "failed to get candidate: " << R.move_as_error(); } else { @@ -870,7 +874,7 @@ void ValidatorSessionImpl::on_catchain_started() { auto broadcast = create_tl_object( src.tl(), round, root_hash, std::move(B.data), std::move(B.collated_data)); td::actor::send_closure(SelfId, &ValidatorSessionImpl::process_broadcast, src, - serialize_tl_object(broadcast, true), td::optional(), + serialize_candidate(broadcast, compress).move_as_ok(), td::optional(), false); } }); @@ -898,6 +902,7 @@ ValidatorSessionImpl::ValidatorSessionImpl(catchain::CatChainSessionId session_i , rldp_(rldp) , overlay_manager_(overlays) , allow_unsafe_self_blocks_resync_(allow_unsafe_self_blocks_resync) { + compress_block_candidates_ = opts.proto_version >= 3; description_ = ValidatorSessionDescription::create(std::move(opts), nodes, local_id); src_round_candidate_.resize(description_->get_total_nodes()); } diff --git a/validator-session/validator-session.hpp b/validator-session/validator-session.hpp index e61e9010..619f7178 100644 --- a/validator-session/validator-session.hpp +++ b/validator-session/validator-session.hpp @@ -156,6 +156,7 @@ class ValidatorSessionImpl : public ValidatorSession { bool started_ = false; bool catchain_started_ = false; bool allow_unsafe_self_blocks_resync_; + bool compress_block_candidates_ = false; ValidatorSessionStats cur_stats_; void stats_init(); diff --git a/validator/CMakeLists.txt b/validator/CMakeLists.txt index 832374c6..a25ac7e1 100644 --- a/validator/CMakeLists.txt +++ b/validator/CMakeLists.txt @@ -146,6 +146,8 @@ set(FULL_NODE_SOURCE full-node-master.cpp full-node-private-overlay.hpp full-node-private-overlay.cpp + full-node-serializer.hpp + full-node-serializer.cpp net/download-block.hpp net/download-block.cpp diff --git a/validator/full-node-private-overlay.cpp b/validator/full-node-private-overlay.cpp index ea72230b..559dba17 100644 --- a/validator/full-node-private-overlay.cpp +++ b/validator/full-node-private-overlay.cpp @@ -14,11 +14,10 @@ You should have received a copy of the GNU Lesser General Public License along with TON Blockchain Library. If not, see . */ -#pragma once - #include "full-node-private-overlay.hpp" #include "ton/ton-tl.hpp" #include "common/delay.h" +#include "full-node-serializer.hpp" namespace ton { @@ -26,20 +25,20 @@ namespace validator { namespace fullnode { -void FullNodePrivateOverlay::process_broadcast(PublicKeyHash, ton_api::tonNode_blockBroadcast &query) { - std::vector signatures; - for (auto &sig : query.signatures_) { - signatures.emplace_back(BlockSignature{sig->who_, std::move(sig->signature_)}); +void FullNodePrivateOverlay::process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcast &query) { + process_block_broadcast(src, query); +} + +void FullNodePrivateOverlay::process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcastCompressed &query) { + process_block_broadcast(src, query); +} + +void FullNodePrivateOverlay::process_block_broadcast(PublicKeyHash src, ton_api::tonNode_Broadcast &query) { + auto B = deserialize_block_broadcast(query, overlay::Overlays::max_fec_broadcast_size()); + if (B.is_error()) { + LOG(DEBUG) << "dropped broadcast: " << B.move_as_error(); + return; } - - BlockIdExt block_id = create_block_id(query.id_); - BlockBroadcast B{block_id, - std::move(signatures), - static_cast(query.catchain_seqno_), - static_cast(query.validator_set_hash_), - std::move(query.data_), - std::move(query.proof_)}; - auto P = td::PromiseCreator::lambda([](td::Result R) { if (R.is_error()) { if (R.error().code() == ErrorCode::notready) { @@ -49,7 +48,7 @@ void FullNodePrivateOverlay::process_broadcast(PublicKeyHash, ton_api::tonNode_b } } }); - td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::prevalidate_block, std::move(B), + td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::prevalidate_block, B.move_as_ok(), std::move(P)); } @@ -87,15 +86,13 @@ void FullNodePrivateOverlay::send_broadcast(BlockBroadcast broadcast) { if (!inited_) { return; } - std::vector> sigs; - for (auto &sig : broadcast.signatures) { - sigs.emplace_back(create_tl_object(sig.node, sig.signature.clone())); + auto B = serialize_block_broadcast(broadcast, false); // compression_enabled = false + if (B.is_error()) { + VLOG(FULL_NODE_WARNING) << "failed to serialize block broadcast: " << B.move_as_error(); + return; } - auto B = create_serialize_tl_object( - create_tl_block_id(broadcast.block_id), broadcast.catchain_seqno, broadcast.validator_set_hash, std::move(sigs), - broadcast.proof.clone(), broadcast.data.clone()); td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_fec_ex, local_id_, overlay_id_, - local_id_.pubkey_hash(), overlay::Overlays::BroadcastFlagAnySender(), std::move(B)); + local_id_.pubkey_hash(), overlay::Overlays::BroadcastFlagAnySender(), B.move_as_ok()); } void FullNodePrivateOverlay::start_up() { diff --git a/validator/full-node-private-overlay.hpp b/validator/full-node-private-overlay.hpp index 6463fda2..e6497a87 100644 --- a/validator/full-node-private-overlay.hpp +++ b/validator/full-node-private-overlay.hpp @@ -27,6 +27,9 @@ namespace fullnode { class FullNodePrivateOverlay : public td::actor::Actor { public: void process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcast &query); + void process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcastCompressed &query); + void process_block_broadcast(PublicKeyHash src, ton_api::tonNode_Broadcast &query); + void process_broadcast(PublicKeyHash src, ton_api::tonNode_newShardBlockBroadcast &query); template void process_broadcast(PublicKeyHash, T &) { diff --git a/validator/full-node-serializer.cpp b/validator/full-node-serializer.cpp new file mode 100644 index 00000000..42e68286 --- /dev/null +++ b/validator/full-node-serializer.cpp @@ -0,0 +1,155 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#include "full-node-serializer.hpp" +#include "ton/ton-tl.hpp" +#include "tl-utils/common-utils.hpp" +#include "auto/tl/ton_api.hpp" +#include "tl-utils/tl-utils.hpp" +#include "vm/boc.h" +#include "td/utils/lz4.h" +#include "full-node.h" +#include "td/utils/overloaded.h" + +namespace ton::validator::fullnode { + +td::Result serialize_block_broadcast(const BlockBroadcast& broadcast, bool compression_enabled) { + std::vector> sigs; + for (auto& sig : broadcast.signatures) { + sigs.emplace_back(create_tl_object(sig.node, sig.signature.clone())); + } + if (!compression_enabled) { + return create_serialize_tl_object( + create_tl_block_id(broadcast.block_id), broadcast.catchain_seqno, broadcast.validator_set_hash, std::move(sigs), + broadcast.proof.clone(), broadcast.data.clone()); + } + + TRY_RESULT(proof_root, vm::std_boc_deserialize(broadcast.proof)); + TRY_RESULT(data_root, vm::std_boc_deserialize(broadcast.data)); + TRY_RESULT(boc, vm::std_boc_serialize_multi({proof_root, data_root}, 2)); + td::BufferSlice data = + create_serialize_tl_object(std::move(sigs), std::move(boc)); + td::BufferSlice compressed = td::lz4_compress(data); + VLOG(FULL_NODE_DEBUG) << "Compressing block broadcast: " + << broadcast.data.size() + broadcast.proof.size() + broadcast.signatures.size() * 96 << " -> " + << compressed.size(); + return create_serialize_tl_object( + create_tl_block_id(broadcast.block_id), broadcast.catchain_seqno, broadcast.validator_set_hash, 0, + std::move(compressed)); +} + +static td::Result deserialize_block_broadcast(ton_api::tonNode_blockBroadcast& f) { + std::vector signatures; + for (auto& sig : f.signatures_) { + signatures.emplace_back(BlockSignature{sig->who_, std::move(sig->signature_)}); + } + return BlockBroadcast{create_block_id(f.id_), + std::move(signatures), + static_cast(f.catchain_seqno_), + static_cast(f.validator_set_hash_), + std::move(f.data_), + std::move(f.proof_)}; +} + +static td::Result deserialize_block_broadcast(ton_api::tonNode_blockBroadcastCompressed& f, + int max_decompressed_size) { + TRY_RESULT(decompressed, td::lz4_decompress(f.compressed_, max_decompressed_size)); + TRY_RESULT(f2, fetch_tl_object(decompressed, true)); + std::vector signatures; + for (auto& sig : f2->signatures_) { + signatures.emplace_back(BlockSignature{sig->who_, std::move(sig->signature_)}); + } + TRY_RESULT(roots, vm::std_boc_deserialize_multi(f2->proof_data_, 2)); + if (roots.size() != 2) { + return td::Status::Error("expected 2 roots in boc"); + } + TRY_RESULT(proof, vm::std_boc_serialize(roots[0], 0)); + TRY_RESULT(data, vm::std_boc_serialize(roots[1], 31)); + VLOG(FULL_NODE_DEBUG) << "Decompressing block broadcast: " << f.compressed_.size() << " -> " + << data.size() + proof.size() + signatures.size() * 96; + return BlockBroadcast{create_block_id(f.id_), + std::move(signatures), + static_cast(f.catchain_seqno_), + static_cast(f.validator_set_hash_), + std::move(data), + std::move(proof)}; +} + +td::Result deserialize_block_broadcast(ton_api::tonNode_Broadcast& obj, + int max_decompressed_data_size) { + td::Result B; + ton_api::downcast_call(obj, + td::overloaded([&](ton_api::tonNode_blockBroadcast& f) { B = deserialize_block_broadcast(f); }, + [&](ton_api::tonNode_blockBroadcastCompressed& f) { + B = deserialize_block_broadcast(f, max_decompressed_data_size); + }, + [&](auto&) { B = td::Status::Error("unknown broadcast type"); })); + return B; +} + +td::Result serialize_block_full(const BlockIdExt& id, td::Slice proof, td::Slice data, + bool is_proof_link, bool compression_enabled) { + if (!compression_enabled) { + return create_serialize_tl_object(create_tl_block_id(id), td::BufferSlice(proof), + td::BufferSlice(data), is_proof_link); + } + TRY_RESULT(proof_root, vm::std_boc_deserialize(proof)); + TRY_RESULT(data_root, vm::std_boc_deserialize(data)); + TRY_RESULT(boc, vm::std_boc_serialize_multi({proof_root, data_root}, 2)); + td::BufferSlice compressed = td::lz4_compress(boc); + VLOG(FULL_NODE_DEBUG) << "Compressing block full: " << data.size() + proof.size() << " -> " << compressed.size(); + return create_serialize_tl_object(create_tl_block_id(id), 0, + std::move(compressed), is_proof_link); +} + +static td::Status deserialize_block_full(ton_api::tonNode_dataFull& f, BlockIdExt& id, td::BufferSlice& proof, + td::BufferSlice& data, bool& is_proof_link) { + id = create_block_id(f.id_); + proof = std::move(f.proof_); + data = std::move(f.block_); + is_proof_link = f.is_link_; + return td::Status::OK(); +} + +static td::Status deserialize_block_full(ton_api::tonNode_dataFullCompressed& f, BlockIdExt& id, td::BufferSlice& proof, + td::BufferSlice& data, bool& is_proof_link, int max_decompressed_size) { + TRY_RESULT(decompressed, td::lz4_decompress(f.compressed_, max_decompressed_size)); + TRY_RESULT(roots, vm::std_boc_deserialize_multi(decompressed, 2)); + if (roots.size() != 2) { + return td::Status::Error("expected 2 roots in boc"); + } + TRY_RESULT_ASSIGN(proof, vm::std_boc_serialize(roots[0], 0)); + TRY_RESULT_ASSIGN(data, vm::std_boc_serialize(roots[1], 31)); + VLOG(FULL_NODE_DEBUG) << "Decompressing block full: " << f.compressed_.size() << " -> " << data.size() + proof.size(); + id = create_block_id(f.id_); + is_proof_link = f.is_link_; + return td::Status::OK(); +} + +td::Status deserialize_block_full(ton_api::tonNode_DataFull& obj, BlockIdExt& id, td::BufferSlice& proof, + td::BufferSlice& data, bool& is_proof_link, int max_decompressed_data_size) { + td::Status S; + ton_api::downcast_call( + obj, td::overloaded( + [&](ton_api::tonNode_dataFull& f) { S = deserialize_block_full(f, id, proof, data, is_proof_link); }, + [&](ton_api::tonNode_dataFullCompressed& f) { + S = deserialize_block_full(f, id, proof, data, is_proof_link, max_decompressed_data_size); + }, + [&](auto&) { S = td::Status::Error("unknown data type"); })); + return S; +} + +} // namespace ton::validator::fullnode diff --git a/validator/full-node-serializer.hpp b/validator/full-node-serializer.hpp new file mode 100644 index 00000000..a5c73cbc --- /dev/null +++ b/validator/full-node-serializer.hpp @@ -0,0 +1,31 @@ +/* + This file is part of TON Blockchain Library. + + TON Blockchain Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + TON Blockchain Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with TON Blockchain Library. If not, see . +*/ +#pragma once +#include "ton/ton-types.h" +#include "auto/tl/ton_api.h" + +namespace ton::validator::fullnode { + +td::Result serialize_block_broadcast(const BlockBroadcast& broadcast, bool compression_enabled); +td::Result deserialize_block_broadcast(ton_api::tonNode_Broadcast& obj, int max_decompressed_data_size); + +td::Result serialize_block_full(const BlockIdExt& id, td::Slice proof, td::Slice data, + bool is_proof_link, bool compression_enabled); +td::Status deserialize_block_full(ton_api::tonNode_DataFull& obj, BlockIdExt& id, td::BufferSlice& proof, + td::BufferSlice& data, bool& is_proof_link, int max_decompressed_data_size); + +} // namespace ton::validator::fullnode diff --git a/validator/full-node-shard-queries.hpp b/validator/full-node-shard-queries.hpp index 1a2cd716..17068229 100644 --- a/validator/full-node-shard-queries.hpp +++ b/validator/full-node-shard-queries.hpp @@ -20,6 +20,7 @@ #include "validator/validator.h" #include "ton/ton-tl.hpp" +#include "full-node-serializer.hpp" namespace ton { @@ -38,8 +39,8 @@ class BlockFullSender : public td::actor::Actor { stop(); } void finish_query() { - promise_.set_value(create_serialize_tl_object( - create_tl_block_id(block_id_), std::move(proof_), std::move(data_), is_proof_link_)); + promise_.set_result( + serialize_block_full(block_id_, proof_, data_, is_proof_link_, false)); // compression_enabled = false stop(); } void start_up() override { diff --git a/validator/full-node-shard.cpp b/validator/full-node-shard.cpp index 8e42716b..9f798fa8 100644 --- a/validator/full-node-shard.cpp +++ b/validator/full-node-shard.cpp @@ -21,6 +21,7 @@ #include "td/utils/SharedSlice.h" #include "full-node-shard.hpp" #include "full-node-shard-queries.hpp" +#include "full-node-serializer.hpp" #include "ton/ton-shard.h" #include "ton/ton-tl.hpp" @@ -645,19 +646,19 @@ void FullNodeShardImpl::process_broadcast(PublicKeyHash src, ton_api::tonNode_ne } void FullNodeShardImpl::process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcast &query) { - std::vector signatures; - for (auto &sig : query.signatures_) { - signatures.emplace_back(BlockSignature{sig->who_, std::move(sig->signature_)}); + process_block_broadcast(src, query); +} + +void FullNodeShardImpl::process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcastCompressed &query) { + process_block_broadcast(src, query); +} + +void FullNodeShardImpl::process_block_broadcast(PublicKeyHash src, ton_api::tonNode_Broadcast &query) { + auto B = deserialize_block_broadcast(query, overlay::Overlays::max_fec_broadcast_size()); + if (B.is_error()) { + LOG(DEBUG) << "dropped broadcast: " << B.move_as_error(); + return; } - - BlockIdExt block_id = create_block_id(query.id_); - BlockBroadcast B{block_id, - std::move(signatures), - static_cast(query.catchain_seqno_), - static_cast(query.validator_set_hash_), - std::move(query.data_), - std::move(query.proof_)}; - auto P = td::PromiseCreator::lambda([](td::Result R) { if (R.is_error()) { if (R.error().code() == ErrorCode::notready) { @@ -667,7 +668,7 @@ void FullNodeShardImpl::process_broadcast(PublicKeyHash src, ton_api::tonNode_bl } } }); - td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::prevalidate_block, std::move(B), + td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::prevalidate_block, B.move_as_ok(), std::move(P)); } @@ -749,15 +750,13 @@ void FullNodeShardImpl::send_broadcast(BlockBroadcast broadcast) { UNREACHABLE(); return; } - std::vector> sigs; - for (auto &sig : broadcast.signatures) { - sigs.emplace_back(create_tl_object(sig.node, sig.signature.clone())); + auto B = serialize_block_broadcast(broadcast, false); // compression_enabled = false + if (B.is_error()) { + VLOG(FULL_NODE_WARNING) << "failed to serialize block broadcast: " << B.move_as_error(); + return; } - auto B = create_serialize_tl_object( - create_tl_block_id(broadcast.block_id), broadcast.catchain_seqno, broadcast.validator_set_hash, std::move(sigs), - broadcast.proof.clone(), broadcast.data.clone()); td::actor::send_closure(overlays_, &overlay::Overlays::send_broadcast_fec_ex, adnl_id_, overlay_id_, local_id_, - overlay::Overlays::BroadcastFlagAnySender(), std::move(B)); + overlay::Overlays::BroadcastFlagAnySender(), B.move_as_ok()); } void FullNodeShardImpl::download_block(BlockIdExt id, td::uint32 priority, td::Timestamp timeout, diff --git a/validator/full-node-shard.hpp b/validator/full-node-shard.hpp index 0525474e..c8b5301a 100644 --- a/validator/full-node-shard.hpp +++ b/validator/full-node-shard.hpp @@ -71,7 +71,7 @@ class FullNodeShardImpl : public FullNodeShard { return 2; } static constexpr td::uint64 proto_capabilities() { - return 2; + return 3; } static constexpr td::uint32 max_neighbours() { return 16; @@ -146,6 +146,9 @@ class FullNodeShardImpl : public FullNodeShard { void receive_query(adnl::AdnlNodeIdShort src, td::BufferSlice query, td::Promise promise); void process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcast &query); + void process_broadcast(PublicKeyHash src, ton_api::tonNode_blockBroadcastCompressed &query); + void process_block_broadcast(PublicKeyHash src, ton_api::tonNode_Broadcast &query); + void process_broadcast(PublicKeyHash src, ton_api::tonNode_ihrMessageBroadcast &query); void process_broadcast(PublicKeyHash src, ton_api::tonNode_externalMessageBroadcast &query); void process_broadcast(PublicKeyHash src, ton_api::tonNode_newShardBlockBroadcast &query); diff --git a/validator/net/download-block-new.cpp b/validator/net/download-block-new.cpp index 14754f64..9ec36e33 100644 --- a/validator/net/download-block-new.cpp +++ b/validator/net/download-block-new.cpp @@ -23,6 +23,7 @@ #include "td/utils/overloaded.h" #include "ton/ton-io.hpp" #include "validator/full-node.h" +#include "full-node-serializer.hpp" namespace ton { @@ -219,52 +220,54 @@ void DownloadBlockNew::got_data(td::BufferSlice data) { } auto f = F.move_as_ok(); + if (f->get_id() == ton_api::tonNode_dataFullEmpty::ID) { + abort_query(td::Status::Error(ErrorCode::notready, "node doesn't have this block")); + return; + } + BlockIdExt id; + td::BufferSlice proof, block_data; + bool is_link; + td::Status S = deserialize_block_full(*f, id, proof, block_data, is_link, overlay::Overlays::max_fec_broadcast_size()); + if (S.is_error()) { + abort_query(S.move_as_error_prefix("cannot deserialize block: ")); + return; + } - ton_api::downcast_call( - *f.get(), - td::overloaded( - [&](ton_api::tonNode_dataFullEmpty &x) { - abort_query(td::Status::Error(ErrorCode::notready, "node doesn't have this block")); - }, - [&, self = this](ton_api::tonNode_dataFull &x) { - if (!allow_partial_proof_ && x.is_link_) { - abort_query(td::Status::Error(ErrorCode::notready, "node doesn't have proof for this block")); - return; - } - auto id = create_block_id(x.id_); - if (block_id_.is_valid() && id != block_id_) { - abort_query(td::Status::Error(ErrorCode::notready, "received data for wrong block")); - return; - } - block_.id = id; - block_.data = std::move(x.block_); - if (td::sha256_bits256(block_.data.as_slice()) != id.file_hash) { - abort_query(td::Status::Error(ErrorCode::notready, "received data with bad hash")); - return; - } + if (!allow_partial_proof_ && is_link) { + abort_query(td::Status::Error(ErrorCode::notready, "node doesn't have proof for this block")); + return; + } + if (block_id_.is_valid() && id != block_id_) { + abort_query(td::Status::Error(ErrorCode::notready, "received data for wrong block")); + return; + } + block_.id = id; + block_.data = std::move(block_data); + if (td::sha256_bits256(block_.data.as_slice()) != id.file_hash) { + abort_query(td::Status::Error(ErrorCode::notready, "received data with bad hash")); + return; + } - auto P = td::PromiseCreator::lambda([SelfId = actor_id(self)](td::Result R) { - if (R.is_error()) { - td::actor::send_closure(SelfId, &DownloadBlockNew::abort_query, - R.move_as_error_prefix("received bad proof: ")); - } else { - td::actor::send_closure(SelfId, &DownloadBlockNew::checked_block_proof); - } - }); - if (block_id_.is_valid()) { - if (x.is_link_) { - td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::validate_block_proof_link, - block_id_, std::move(x.proof_), std::move(P)); - } else { - td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::validate_block_proof, block_id_, - std::move(x.proof_), std::move(P)); - } - } else { - CHECK(!x.is_link_); - td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::validate_block_is_next_proof, - prev_id_, id, std::move(x.proof_), std::move(P)); - } - })); + auto P = td::PromiseCreator::lambda([SelfId = actor_id(this)](td::Result R) { + if (R.is_error()) { + td::actor::send_closure(SelfId, &DownloadBlockNew::abort_query, R.move_as_error_prefix("received bad proof: ")); + } else { + td::actor::send_closure(SelfId, &DownloadBlockNew::checked_block_proof); + } + }); + if (block_id_.is_valid()) { + if (is_link) { + td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::validate_block_proof_link, block_id_, + std::move(proof), std::move(P)); + } else { + td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::validate_block_proof, block_id_, + std::move(proof), std::move(P)); + } + } else { + CHECK(!is_link); + td::actor::send_closure(validator_manager_, &ValidatorManagerInterface::validate_block_is_next_proof, prev_id_, id, + std::move(proof), std::move(P)); + } } void DownloadBlockNew::got_data_from_db(td::BufferSlice data) { From 43ad9947b9a91d4e8cefd2023d0b9e74f56f317a Mon Sep 17 00:00:00 2001 From: iliavy <65302426+iliavy@users.noreply.github.com> Date: Tue, 26 Mar 2024 14:54:20 +0300 Subject: [PATCH 116/351] Fix typo in variable name (#940) --- storage/Torrent.cpp | 14 +++++++------- storage/Torrent.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/storage/Torrent.cpp b/storage/Torrent.cpp index 6807519c..545b6d10 100644 --- a/storage/Torrent.cpp +++ b/storage/Torrent.cpp @@ -324,7 +324,7 @@ td::Status Torrent::add_piece(td::uint64 piece_i, td::Slice data, td::Ref Torrent::read_file(td::Slice name) { @@ -488,7 +488,7 @@ Torrent::Torrent(Info info, td::optional header, ton::MerkleTree , info_(info) , root_dir_(std::move(root_dir)) , header_(std::move(header)) - , enabled_wirte_to_files_(true) + , enabled_write_to_files_(true) , merkle_tree_(std::move(tree)) , piece_is_ready_(info_.pieces_count(), true) , ready_parts_count_{info_.pieces_count()} @@ -586,7 +586,7 @@ void Torrent::set_file_excluded(size_t i, bool excluded) { included_ready_size_ += chunk.ready_size; } chunk.excluded = excluded; - if (!enabled_wirte_to_files_ || excluded) { + if (!enabled_write_to_files_ || excluded) { return; } auto range = get_file_parts_range(i); diff --git a/storage/Torrent.h b/storage/Torrent.h index 6401e405..1ae30fc2 100644 --- a/storage/Torrent.h +++ b/storage/Torrent.h @@ -173,7 +173,7 @@ class Torrent { size_t not_ready_pending_piece_count_{0}; size_t header_pieces_count_{0}; std::map pending_pieces_; - bool enabled_wirte_to_files_ = false; + bool enabled_write_to_files_ = false; struct InMemoryPiece { std::string data; std::set pending_chunks; From 438e59a324ce06801f54dded386013303216f96e Mon Sep 17 00:00:00 2001 From: omahs <73983677+omahs@users.noreply.github.com> Date: Tue, 26 Mar 2024 12:56:43 +0100 Subject: [PATCH 117/351] Fix typos (#926) * fix typos * fix typo --- doc/ConfigParam-HOWTO | 2 +- doc/catchain-dos.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/ConfigParam-HOWTO b/doc/ConfigParam-HOWTO index 8432657a..639014bb 100644 --- a/doc/ConfigParam-HOWTO +++ b/doc/ConfigParam-HOWTO @@ -13,7 +13,7 @@ All configuration parameters are combined into a *configuration dictionary* - a We see that, apart from the configuration dictionary, `ConfigParams` contains `config_addr` -- 256-bit address of the configuration smart contract in the masterchain. More details on the configuration smart contract will be provided later. -The configuration dictionary containing the active values of all configuration parameters is available via special TVM register *c7* to all smart contracts when their code is executed in a transaction. More precisely, when a smart contract is executed, *c7* is initialized by a Tuple, the only element of which is a Tuple with several "context" values useful for the execution of the smart contract, such as the current Unix time (as registered in the block header). The tenth entry of this Tuple (i.e., the one with zero-based index 9) contains a Cell representing the configuration dictionary. Therefore, it can be accesses by means of TVM instructions "PUSH c7; FIRST; INDEX 9", or by equivalent instruction "CONFIGROOT". In fact, special TVM instructions "CONFIGPARAM" and "CONFIGOPTPARAM" combine the previous actions with a dictionary lookup, returning any configuration parameter by its index. We refer to the TVM documentation for more details on these instructions. What is relevant here is that all configuration parameters are easily accessible from all smart contracts (masterchain or shardchain), and smart contracts may inspect them and use them to perform specific checks. For instance, a smart contract might extract workchain data storage prices from a configuration parameter to compute the price for storing a chunk of user-provided data. +The configuration dictionary containing the active values of all configuration parameters is available via special TVM register *c7* to all smart contracts when their code is executed in a transaction. More precisely, when a smart contract is executed, *c7* is initialized by a Tuple, the only element of which is a Tuple with several "context" values useful for the execution of the smart contract, such as the current Unix time (as registered in the block header). The tenth entry of this Tuple (i.e., the one with zero-based index 9) contains a Cell representing the configuration dictionary. Therefore, it can be accessed by means of TVM instructions "PUSH c7; FIRST; INDEX 9", or by equivalent instruction "CONFIGROOT". In fact, special TVM instructions "CONFIGPARAM" and "CONFIGOPTPARAM" combine the previous actions with a dictionary lookup, returning any configuration parameter by its index. We refer to the TVM documentation for more details on these instructions. What is relevant here is that all configuration parameters are easily accessible from all smart contracts (masterchain or shardchain), and smart contracts may inspect them and use them to perform specific checks. For instance, a smart contract might extract workchain data storage prices from a configuration parameter to compute the price for storing a chunk of user-provided data. The values of configuration parameters are not arbitrary. In fact, if the configuration parameter index *i* is non-negative, then the value of this parameter must be a valid value of TL-B type (ConfigParam i). This restriction is enforced by the validators, which will not accept changes to configuration parameters with non-negative indices unless they are valid values of the corresponding TL-B type. diff --git a/doc/catchain-dos.md b/doc/catchain-dos.md index 028cb95a..d256b157 100644 --- a/doc/catchain-dos.md +++ b/doc/catchain-dos.md @@ -13,8 +13,8 @@ For catchain protocol version higher or equal to 2 hash covers catchain block de ### Catchain block size All catchain messages, except `REJECT` message, have (and had) a limited size. After update `REJECT` message will be limited to 1024 bytes. At the same time one block contains at most number of block candidates per round messages. That way, 16kb limit per catchain block should be enough to prevent DoS. ### Limiting block height -Another potential DoS is related to a situation when a malbehaviouring node sends too many catchain blocks. Note that limiting of maximal number of blocks per second is not a good solution since it will hinder synchronization after node disconnect. -At the same time, catchain groups exist for quite short period of time (around a few hunderd seconds), while number of blocks production is determined by "natural block production speed" on the one hand and number of blocks generated to decrease dependencies size on the other. In any case, total number of blocks is limited by `catchain_lifetime * natural_block_production_speed * (1 + number_of_catchain_participants / max_dependencies_size)`. +Another potential DoS is related to a situation when a misbehaviouring node sends too many catchain blocks. Note that limiting of maximal number of blocks per second is not a good solution since it will hinder synchronization after node disconnect. +At the same time, catchain groups exist for quite short period of time (around a few hundred seconds), while number of blocks production is determined by "natural block production speed" on the one hand and number of blocks generated to decrease dependencies size on the other. In any case, total number of blocks is limited by `catchain_lifetime * natural_block_production_speed * (1 + number_of_catchain_participants / max_dependencies_size)`. To prevent DoS attack we limit maximal height of the block which will be processed by node by `catchain_lifetime * natural_block_production_speed * (1 + number_of_catchain_participants / max_dependencies_size)`, where `catchain_lifetime` is set by `ConfigParam 28` (`CatchainConfig`), `natural_block_production_speed` and `max_dependencies_size` are set by `ConfigParam 29` (`ConsensusConfig`) (`natural_block_production_speed` is calculated as `catchain_max_blocks_coeff / 1000`) and `number_of_catchain_participants` is set from catchain group configuration. By default, `catchain_max_blocks_coeff` is set to zero: special value which means that there is no limitation on catchain block height. It is recommended to set `catchain_max_blocks_coeff` to `10000`: we expect that natural production rate is about one block per 3 seconds, so we set the coefficient to allow 30 times higher block production than expected. At the same time, this number is low enough to prevent resource-intensive attacks. From b07614335ce05ebeecec0ae9d38adff8f35e733d Mon Sep 17 00:00:00 2001 From: EmelyanenkoK Date: Tue, 26 Mar 2024 15:55:58 +0300 Subject: [PATCH 118/351] liteServer.getOutMsgQueueSizes method (#943) Co-authored-by: SpyCheese --- lite-client/lite-client.cpp | 27 +++++++++++++++++ lite-client/lite-client.h | 3 ++ tl-utils/lite-utils.cpp | 3 ++ tl/generate/scheme/lite_api.tl | 3 ++ tl/generate/scheme/lite_api.tlo | Bin 16988 -> 17584 bytes validator/impl/collator-impl.h | 3 ++ validator/impl/collator.cpp | 4 +++ validator/impl/liteserver.cpp | 52 ++++++++++++++++++++++++++++++++ validator/impl/liteserver.hpp | 3 ++ 9 files changed, 98 insertions(+) diff --git a/lite-client/lite-client.cpp b/lite-client/lite-client.cpp index cb0a7dec..55d46ad1 100644 --- a/lite-client/lite-client.cpp +++ b/lite-client/lite-client.cpp @@ -973,6 +973,7 @@ bool TestNode::show_help(std::string command) { "savecomplaints \tSaves all complaints registered for specified validator set id " "into files .boc\n" "complaintprice \tComputes the price (in nanograms) for creating a complaint\n" + "msgqueuesizes\tShows current sizes of outbound message queues in all shards\n" "known\tShows the list of all known block ids\n" "knowncells\tShows the list of hashes of all known (cached) cells\n" "dumpcell \nDumps a cached cell by a prefix of its hash\n" @@ -1108,6 +1109,8 @@ bool TestNode::do_parse_line() { std::string filename; return parse_uint32(expire_in) && get_word_to(filename) && seekeoln() && set_error(get_complaint_price(expire_in, filename)); + } else if (word == "msgqueuesizes") { + return get_msg_queue_sizes(); } else if (word == "known") { return eoln() && show_new_blkids(true); } else if (word == "knowncells") { @@ -1611,6 +1614,30 @@ void TestNode::send_compute_complaint_price_query(ton::StdSmcAddress elector_add std::move(P)); } +bool TestNode::get_msg_queue_sizes() { + auto q = ton::serialize_tl_object(ton::create_tl_object(0, 0, 0), true); + return envelope_send_query(std::move(q), [Self = actor_id(this)](td::Result res) -> void { + if (res.is_error()) { + LOG(ERROR) << "liteServer.getOutMsgQueueSizes error: " << res.move_as_error(); + return; + } + auto F = ton::fetch_tl_object(res.move_as_ok(), true); + if (F.is_error()) { + LOG(ERROR) << "cannot parse answer to liteServer.getOutMsgQueueSizes"; + return; + } + td::actor::send_closure_later(Self, &TestNode::got_msg_queue_sizes, F.move_as_ok()); + }); +} + +void TestNode::got_msg_queue_sizes(ton::tl_object_ptr f) { + td::TerminalIO::out() << "Outbound message queue sizes:" << std::endl; + for (auto &x : f->shards_) { + td::TerminalIO::out() << ton::create_block_id(x->id_).id.to_str() << " " << x->size_ << std::endl; + } + td::TerminalIO::out() << "External message queue size limit: " << f->ext_msg_queue_size_limit_ << std::endl; +} + bool TestNode::dns_resolve_start(ton::WorkchainId workchain, ton::StdSmcAddress addr, ton::BlockIdExt blkid, std::string domain, td::Bits256 cat, int mode) { if (domain.size() >= 2 && domain[0] == '"' && domain.back() == '"') { diff --git a/lite-client/lite-client.h b/lite-client/lite-client.h index 2602a0a7..219ba7d5 100644 --- a/lite-client/lite-client.h +++ b/lite-client/lite-client.h @@ -35,6 +35,7 @@ #include "block/block.h" #include "block/mc-config.h" #include "td/utils/filesystem.h" +#include "auto/tl/lite_api.h" using td::Ref; @@ -302,6 +303,8 @@ class TestNode : public td::actor::Actor { td::Bits256 chash = td::Bits256::zero(), std::string filename = ""); void send_compute_complaint_price_query(ton::StdSmcAddress elector_addr, unsigned expires_in, unsigned bits, unsigned refs, td::Bits256 chash, std::string filename); + bool get_msg_queue_sizes(); + void got_msg_queue_sizes(ton::tl_object_ptr f); bool cache_cell(Ref cell); bool list_cached_cells() const; bool dump_cached_cell(td::Slice hash_pfx, td::Slice type_name = {}); diff --git a/tl-utils/lite-utils.cpp b/tl-utils/lite-utils.cpp index 99e22f83..9ea7756a 100644 --- a/tl-utils/lite-utils.cpp +++ b/tl-utils/lite-utils.cpp @@ -148,6 +148,7 @@ std::string lite_query_name_by_id(int id) { {lite_api::liteServer_getOneTransaction::ID, "getOneTransaction"}, {lite_api::liteServer_getTransactions::ID, "getTransactions"}, {lite_api::liteServer_lookupBlock::ID, "lookupBlock"}, + {lite_api::liteServer_lookupBlockWithProof::ID, "lookupBlockWithProof"}, {lite_api::liteServer_listBlockTransactions::ID, "listBlockTransactions"}, {lite_api::liteServer_listBlockTransactionsExt::ID, "listBlockTransactionsExt"}, {lite_api::liteServer_getBlockProof::ID, "getBlockProof"}, @@ -155,7 +156,9 @@ std::string lite_query_name_by_id(int id) { {lite_api::liteServer_getConfigParams::ID, "getConfigParams"}, {lite_api::liteServer_getValidatorStats::ID, "getValidatorStats"}, {lite_api::liteServer_getLibraries::ID, "getLibraries"}, + {lite_api::liteServer_getLibrariesWithProof::ID, "getLibrariesWithProof"}, {lite_api::liteServer_getShardBlockProof::ID, "getShardBlockProof"}, + {lite_api::liteServer_getOutMsgQueueSizes::ID, "getOutMsgQueueSizes"}, {lite_api::liteServer_nonfinal_getCandidate::ID, "nonfinal.getCandidate"}, {lite_api::liteServer_nonfinal_getValidatorGroups::ID, "nonfinal.getValidatorGroups"}}; auto it = names.find(id); diff --git a/tl/generate/scheme/lite_api.tl b/tl/generate/scheme/lite_api.tl index f0439a29..d74e8953 100644 --- a/tl/generate/scheme/lite_api.tl +++ b/tl/generate/scheme/lite_api.tl @@ -57,6 +57,8 @@ liteServer.libraryResultWithProof id:tonNode.blockIdExt mode:# result:(vector li liteServer.shardBlockLink id:tonNode.blockIdExt proof:bytes = liteServer.ShardBlockLink; liteServer.shardBlockProof masterchain_id:tonNode.blockIdExt links:(vector liteServer.shardBlockLink) = liteServer.ShardBlockProof; liteServer.lookupBlockResult id:tonNode.blockIdExt mode:# mc_block_id:tonNode.blockIdExt client_mc_state_proof:bytes mc_block_proof:bytes shard_links:(vector liteServer.shardBlockLink) header:bytes prev_header:bytes = liteServer.LookupBlockResult; +liteServer.outMsgQueueSize id:tonNode.blockIdExt size:int = liteServer.OutMsgQueueSize; +liteServer.outMsgQueueSizes shards:(vector liteServer.outMsgQueueSize) ext_msg_queue_size_limit:int = liteServer.OutMsgQueueSizes; liteServer.debug.verbosity value:int = liteServer.debug.Verbosity; @@ -94,6 +96,7 @@ liteServer.getValidatorStats#091a58bc mode:# id:tonNode.blockIdExt limit:int sta liteServer.getLibraries library_list:(vector int256) = liteServer.LibraryResult; liteServer.getLibrariesWithProof id:tonNode.blockIdExt mode:# library_list:(vector int256) = liteServer.LibraryResultWithProof; liteServer.getShardBlockProof id:tonNode.blockIdExt = liteServer.ShardBlockProof; +liteServer.getOutMsgQueueSizes mode:# wc:mode.0?int shard:mode.0?long = liteServer.OutMsgQueueSizes; liteServer.nonfinal.getValidatorGroups mode:# wc:mode.0?int shard:mode.1?long = liteServer.nonfinal.ValidatorGroups; liteServer.nonfinal.getCandidate id:liteServer.nonfinal.candidateId = liteServer.nonfinal.Candidate; diff --git a/tl/generate/scheme/lite_api.tlo b/tl/generate/scheme/lite_api.tlo index d2f67846100190fd875c542232c993e0b610847e..ccae66f367f17a192e3864d0c9935547f046d58c 100644 GIT binary patch delta 370 zcmcc9!nmQ6k@wMTeJchiu-eGW%%;%lb8NX(PG(7JaB5LmYLT9QX^C%fdSGd4X=-q0 zRVu^83la*FIJ0W<2MLME zJiHw4AVHYRuF7%6pxcRNNHIwM<}o23CZHziXZJPPiZc?6Qi><9SCZ8PnZ*b-3?wI! zT2T_8Tbv$W2=Z1u(Aw1aoXp(JlF1(>#6h;RfK1!GN6tl%QDHNq!F@IjvpEN=<&eCb jo?3zyGQ|uaO_K|Z3?@&pH<|oJR%G%Wd#FiQ%sRLMxb%bJ delta 52 zcmdnc$#|!Qk@wMTeJchiu-M4U%(l3Jjg`@Ib0hb5;ms)u7J`iOo97zdXWMLIS;Gwg Ddy@{V diff --git a/validator/impl/collator-impl.h b/validator/impl/collator-impl.h index c6ba27b4..e059ee68 100644 --- a/validator/impl/collator-impl.h +++ b/validator/impl/collator-impl.h @@ -322,6 +322,9 @@ class Collator final : public td::actor::Actor { bool create_block_candidate(); void return_block_candidate(td::Result saved); bool update_last_proc_int_msg(const std::pair& new_lt_hash); + + public: + static td::uint32 get_skip_externals_queue_size(); }; } // namespace validator diff --git a/validator/impl/collator.cpp b/validator/impl/collator.cpp index 413c5be9..073da237 100644 --- a/validator/impl/collator.cpp +++ b/validator/impl/collator.cpp @@ -5140,6 +5140,10 @@ void Collator::after_get_external_messages(td::Result +#include "td/actor/MultiPromise.h" +#include "collator-impl.h" namespace ton { @@ -282,6 +284,9 @@ void LiteQuery::perform() { [&](lite_api::liteServer_nonfinal_getValidatorGroups& q) { this->perform_nonfinal_getValidatorGroups(q.mode_, ShardIdFull{q.wc_, (ShardId)q.shard_}); }, + [&](lite_api::liteServer_getOutMsgQueueSizes& q) { + this->perform_getOutMsgQueueSizes(q.mode_ & 1 ? ShardIdFull(q.wc_, q.shard_) : td::optional()); + }, [&](auto& obj) { this->abort_query(td::Status::Error(ErrorCode::protoviolation, "unknown query")); })); } @@ -3216,6 +3221,53 @@ void LiteQuery::continue_getShardBlockProof(Ref cur_block, }); } +void LiteQuery::perform_getOutMsgQueueSizes(td::optional shard) { + LOG(INFO) << "started a getOutMsgQueueSizes" << (shard ? shard.value().to_str() : "") << " liteserver query"; + td::actor::send_closure_later( + manager_, &ton::validator::ValidatorManager::get_last_liteserver_state_block, + [Self = actor_id(this), shard](td::Result, BlockIdExt>> res) { + if (res.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, res.move_as_error()); + } else { + td::actor::send_closure_later(Self, &LiteQuery::continue_getOutMsgQueueSizes, shard, res.ok().first); + } + }); +} + +void LiteQuery::continue_getOutMsgQueueSizes(td::optional shard, Ref state) { + std::vector blocks; + if (!shard || shard_intersects(shard.value(), state->get_shard())) { + blocks.push_back(state->get_block_id()); + } + for (auto& x : state->get_shards()) { + if (!shard || shard_intersects(shard.value(), x->shard())) { + blocks.push_back(x->top_block_id()); + } + } + auto res = std::make_shared>>(blocks.size()); + td::MultiPromise mp; + auto ig = mp.init_guard(); + for (size_t i = 0; i < blocks.size(); ++i) { + td::actor::send_closure(manager_, &ValidatorManager::get_out_msg_queue_size, blocks[i], + [promise = ig.get_promise(), res, i, id = blocks[i]](td::Result R) mutable { + TRY_RESULT_PROMISE(promise, value, std::move(R)); + res->at(i) = create_tl_object( + create_tl_lite_block_id(id), value); + promise.set_value(td::Unit()); + }); + } + ig.add_promise([Self = actor_id(this), res](td::Result R) { + if (R.is_error()) { + td::actor::send_closure(Self, &LiteQuery::abort_query, R.move_as_error()); + return; + } + td::actor::send_closure(Self, &LiteQuery::finish_query, + create_serialize_tl_object( + std::move(*res), Collator::get_skip_externals_queue_size()), + false); + }); +} + void LiteQuery::perform_nonfinal_getCandidate(td::Bits256 source, BlockIdExt blkid, td::Bits256 collated_data_hash) { LOG(INFO) << "started a nonfinal.getCandidate liteserver query"; td::actor::send_closure_later( diff --git a/validator/impl/liteserver.hpp b/validator/impl/liteserver.hpp index 20c2abfe..34e569c9 100644 --- a/validator/impl/liteserver.hpp +++ b/validator/impl/liteserver.hpp @@ -168,6 +168,9 @@ class LiteQuery : public td::actor::Actor { void perform_getShardBlockProof(BlockIdExt blkid); void continue_getShardBlockProof(Ref cur_block, std::vector> result); + void perform_getOutMsgQueueSizes(td::optional shard); + void continue_getOutMsgQueueSizes(td::optional shard, Ref state); + void perform_nonfinal_getCandidate(td::Bits256 source, BlockIdExt blkid, td::Bits256 collated_data_hash); void perform_nonfinal_getValidatorGroups(int mode, ShardIdFull shard); From 10487b1c713c7e97c30a135ae8c9cc039047cd8f Mon Sep 17 00:00:00 2001 From: Marat <98183742+dungeon-master-666@users.noreply.github.com> Date: Wed, 27 Mar 2024 12:23:11 +0100 Subject: [PATCH 119/351] Collect statistics for .pack files (#944) * Statistics for .pack files * optimizations * fix typo * fix erasing packages --- validator/db/archive-manager.cpp | 7 +- validator/db/archive-manager.hpp | 2 +- validator/db/archive-slice.cpp | 144 +++++++++++++++++++++++++++++-- validator/db/archive-slice.hpp | 20 ++++- 4 files changed, 155 insertions(+), 18 deletions(-) diff --git a/validator/db/archive-manager.cpp b/validator/db/archive-manager.cpp index d4d9e76c..fa043ca2 100644 --- a/validator/db/archive-manager.cpp +++ b/validator/db/archive-manager.cpp @@ -830,9 +830,9 @@ void ArchiveManager::start_up() { archive_lru_ = td::actor::create_actor("archive_lru", opts_->get_max_open_archive_files()); } if (!opts_->get_disable_rocksdb_stats()) { - statistics_ = td::RocksDb::create_statistics(); + statistics_.init(); } - index_ = std::make_shared(td::RocksDb::open(db_root_ + "/files/globalindex", statistics_).move_as_ok()); + index_ = std::make_shared(td::RocksDb::open(db_root_ + "/files/globalindex", statistics_.rocksdb_statistics).move_as_ok()); std::string value; auto v = index_->get(create_serialize_tl_object().as_slice(), value); v.ensure(); @@ -914,7 +914,7 @@ void ArchiveManager::start_up() { void ArchiveManager::alarm() { alarm_timestamp() = td::Timestamp::in(60.0); - auto stats = td::RocksDb::statistics_to_string(statistics_); + auto stats = statistics_.to_string_and_reset(); auto to_file_r = td::FileFd::open(db_root_ + "/db_stats.txt", td::FileFd::Truncate | td::FileFd::Create | td::FileFd::Write, 0644); if (to_file_r.is_error()) { LOG(ERROR) << "Failed to open db_stats.txt: " << to_file_r.move_as_error(); @@ -927,7 +927,6 @@ void ArchiveManager::alarm() { LOG(ERROR) << "Failed to write to db_stats.txt: " << res.move_as_error(); return; } - td::RocksDb::reset_statistics(statistics_); } void ArchiveManager::run_gc(UnixTime mc_ts, UnixTime gc_ts, UnixTime archive_ttl) { diff --git a/validator/db/archive-manager.hpp b/validator/db/archive-manager.hpp index aff76544..23cbb9c8 100644 --- a/validator/db/archive-manager.hpp +++ b/validator/db/archive-manager.hpp @@ -174,7 +174,7 @@ class ArchiveManager : public td::actor::Actor { bool huge_transaction_started_ = false; td::uint32 huge_transaction_size_ = 0; - std::shared_ptr statistics_; + DbStatistics statistics_; FileMap &get_file_map(const PackageId &p) { return p.key ? key_files_ : p.temp ? temp_files_ : files_; diff --git a/validator/db/archive-slice.cpp b/validator/db/archive-slice.cpp index b38fbb7f..43a02ec4 100644 --- a/validator/db/archive-slice.cpp +++ b/validator/db/archive-slice.cpp @@ -29,29 +29,151 @@ namespace ton { namespace validator { +class PackageStatistics { + public: + void record_open(uint64_t count = 1) { + open_count.fetch_add(count, std::memory_order_relaxed); + } + + void record_close(uint64_t count = 1) { + close_count.fetch_add(count, std::memory_order_relaxed); + } + + void record_read(double time, uint64_t bytes) { + read_bytes.fetch_add(bytes, std::memory_order_relaxed); + std::lock_guard guard(read_mutex); + read_time.insert(time); + read_time_sum += time; + } + + void record_write(double time, uint64_t bytes) { + write_bytes.fetch_add(bytes, std::memory_order_relaxed); + std::lock_guard guard(write_mutex); + write_time.insert(time); + write_time_sum += time; + } + + std::string to_string_and_reset() { + std::stringstream ss; + ss.setf(std::ios::fixed); + ss.precision(6); + + ss << "ton.pack.open COUNT : " << open_count.exchange(0, std::memory_order_relaxed) << "\n"; + ss << "ton.pack.close COUNT : " << close_count.exchange(0, std::memory_order_relaxed) << "\n"; + + ss << "ton.pack.read.bytes COUNT : " << read_bytes.exchange(0, std::memory_order_relaxed) << "\n"; + ss << "ton.pack.write.bytes COUNT : " << write_bytes.exchange(0, std::memory_order_relaxed) << "\n"; + + std::multiset temp_read_time; + double temp_read_time_sum; + { + std::lock_guard guard(read_mutex); + temp_read_time = std::move(read_time); + read_time.clear(); + temp_read_time_sum = read_time_sum; + read_time_sum = 0; + } + auto read_stats = calculate_statistics(temp_read_time); + ss << "ton.pack.read.micros P50 : " << read_stats[0] << + " P95 : " << read_stats[1] << + " P99 : " << read_stats[2] << + " P100 : " << read_stats[3] << + " COUNT : " << temp_read_time.size() << + " SUM : " << temp_read_time_sum << "\n"; + + std::multiset temp_write_time; + double temp_write_time_sum; + { + std::lock_guard guard(write_mutex); + temp_write_time = std::move(write_time); + write_time.clear(); + temp_write_time_sum = write_time_sum; + write_time_sum = 0; + } + auto write_stats = calculate_statistics(temp_write_time); + ss << "ton.pack.write.micros P50 : " << write_stats[0] << + " P95 : " << write_stats[1] << + " P99 : " << write_stats[2] << + " P100 : " << write_stats[3] << + " COUNT : " << temp_write_time.size() << + " SUM : " << temp_write_time_sum << "\n"; + + return ss.str(); + } + + private: + std::atomic_uint64_t open_count; + std::atomic_uint64_t close_count; + std::multiset read_time; + std::atomic_uint64_t read_bytes; + std::multiset write_time; + std::atomic_uint64_t write_bytes; + double read_time_sum; + double write_time_sum; + + mutable std::mutex read_mutex; + mutable std::mutex write_mutex; + + std::vector calculate_statistics(const std::multiset& data) const { + if (data.empty()) return {0, 0, 0, 0}; + + auto size = data.size(); + auto calc_percentile = [&](double p) -> double { + auto it = data.begin(); + std::advance(it, static_cast(std::ceil(p * double(size)) - 1)); + return *it; + }; + + return {calc_percentile(0.5), calc_percentile(0.95), calc_percentile(0.99), *data.rbegin()}; + } +}; + +void DbStatistics::init() { + rocksdb_statistics = td::RocksDb::create_statistics(); + pack_statistics = std::make_shared(); +} + +std::string DbStatistics::to_string_and_reset() { + std::stringstream ss; + ss << td::RocksDb::statistics_to_string(rocksdb_statistics) << pack_statistics->to_string_and_reset(); + td::RocksDb::reset_statistics(rocksdb_statistics); + return ss.str(); +} + void PackageWriter::append(std::string filename, td::BufferSlice data, td::Promise> promise) { td::uint64 offset, size; + auto data_size = data.size(); + td::Timestamp start, end; { auto p = package_.lock(); if (!p) { promise.set_error(td::Status::Error("Package is closed")); return; } - offset = p->append(std::move(filename), std::move(data), !async_mode_); + start = td::Timestamp::now(); + offset = p->append(std::move(filename), std::move(data), !async_mode_); + end = td::Timestamp::now(); size = p->size(); } + if (statistics_) { + statistics_->record_write((end.at() - start.at()) * 1e6, data_size); + } promise.set_value(std::pair{offset, size}); } class PackageReader : public td::actor::Actor { public: PackageReader(std::shared_ptr package, td::uint64 offset, - td::Promise> promise) - : package_(std::move(package)), offset_(offset), promise_(std::move(promise)) { + td::Promise> promise, std::shared_ptr statistics) + : package_(std::move(package)), offset_(offset), promise_(std::move(promise)), statistics_(std::move(statistics)) { } void start_up() override { + auto start = td::Timestamp::now(); auto result = package_->read(offset_); + if (statistics_ && result.is_ok()) { + statistics_->record_read((td::Timestamp::now().at() - start.at()) * 1e6, result.ok_ref().second.size()); + } package_ = {}; promise_.set_result(std::move(result)); stop(); @@ -61,6 +183,7 @@ class PackageReader : public td::actor::Actor { std::shared_ptr package_; td::uint64 offset_; td::Promise> promise_; + std::shared_ptr statistics_; }; void ArchiveSlice::add_handle(BlockHandle handle, td::Promise promise) { @@ -297,7 +420,7 @@ void ArchiveSlice::get_file(ConstBlockHandle handle, FileReference ref_id, td::P promise.set_value(std::move(R.move_as_ok().second)); } }); - td::actor::create_actor("reader", p->package, offset, std::move(P)).release(); + td::actor::create_actor("reader", p->package, offset, std::move(P), statistics_.pack_statistics).release(); } void ArchiveSlice::get_block_common(AccountIdPrefixFull account_id, @@ -465,7 +588,7 @@ void ArchiveSlice::get_archive_id(BlockSeqno masterchain_seqno, td::Promise(td::RocksDb::open(db_path_, statistics_).move_as_ok()); + kv_ = std::make_unique(td::RocksDb::open(db_path_, statistics_.rocksdb_statistics).move_as_ok()); std::string value; auto R2 = kv_->get("status", value); R2.ensure(); @@ -547,6 +670,7 @@ void ArchiveSlice::do_close() { LOG(DEBUG) << "Closing archive slice " << db_path_; status_ = st_closed; kv_ = {}; + statistics_.pack_statistics->record_close(packages_.size()); packages_.clear(); } @@ -604,7 +728,7 @@ void ArchiveSlice::set_async_mode(bool mode, td::Promise promise) { } ArchiveSlice::ArchiveSlice(td::uint32 archive_id, bool key_blocks_only, bool temp, bool finalized, std::string db_root, - td::actor::ActorId archive_lru, std::shared_ptr statistics) + td::actor::ActorId archive_lru, DbStatistics statistics) : archive_id_(archive_id) , key_blocks_only_(key_blocks_only) , temp_(temp) @@ -650,6 +774,7 @@ void ArchiveSlice::add_package(td::uint32 seqno, td::uint64 size, td::uint32 ver LOG(FATAL) << "failed to open/create archive '" << path << "': " << R.move_as_error(); return; } + statistics_.pack_statistics->record_open(); auto idx = td::narrow_cast(packages_.size()); if (finalized_) { packages_.emplace_back(nullptr, td::actor::ActorOwn(), seqno, path, idx, version); @@ -659,7 +784,7 @@ void ArchiveSlice::add_package(td::uint32 seqno, td::uint64 size, td::uint32 ver if (version >= 1) { pack->truncate(size).ensure(); } - auto writer = td::actor::create_actor("writer", pack, async_mode_); + auto writer = td::actor::create_actor("writer", pack, async_mode_, statistics_.pack_statistics); packages_.emplace_back(std::move(pack), std::move(writer), seqno, path, idx, version); } @@ -692,7 +817,7 @@ void ArchiveSlice::destroy(td::Promise promise) { for (auto &p : packages_) { td::unlink(p.path).ensure(); } - + statistics_.pack_statistics->record_close(packages_.size()); packages_.clear(); kv_ = nullptr; @@ -898,7 +1023,8 @@ void ArchiveSlice::truncate(BlockSeqno masterchain_seqno, ConstBlockHandle handl for (auto idx = pack->idx + 1; idx < packages_.size(); idx++) { td::unlink(packages_[idx].path).ensure(); } - packages_.erase(packages_.begin() + pack->idx + 1); + statistics_.pack_statistics->record_close(packages_.size() - pack->idx - 1); + packages_.erase(packages_.begin() + pack->idx + 1, packages_.end()); kv_->commit_transaction().ensure(); diff --git a/validator/db/archive-slice.hpp b/validator/db/archive-slice.hpp index a58df32b..faec2fb8 100644 --- a/validator/db/archive-slice.hpp +++ b/validator/db/archive-slice.hpp @@ -21,6 +21,7 @@ #include "validator/interfaces/db.h" #include "package.hpp" #include "fileref.hpp" +#include "td/db/RocksDb.h" #include namespace rocksdb { @@ -57,10 +58,20 @@ struct PackageId { } }; +class PackageStatistics; + +struct DbStatistics { + void init(); + std::string to_string_and_reset(); + + std::shared_ptr pack_statistics; + std::shared_ptr rocksdb_statistics; +}; + class PackageWriter : public td::actor::Actor { public: - PackageWriter(std::weak_ptr package, bool async_mode = false) - : package_(std::move(package)), async_mode_(async_mode) { + PackageWriter(std::weak_ptr package, bool async_mode = false, std::shared_ptr statistics = nullptr) + : package_(std::move(package)), async_mode_(async_mode), statistics_(std::move(statistics)) { } void append(std::string filename, td::BufferSlice data, td::Promise> promise); @@ -78,6 +89,7 @@ class PackageWriter : public td::actor::Actor { private: std::weak_ptr package_; bool async_mode_ = false; + std::shared_ptr statistics_; }; class ArchiveLru; @@ -85,7 +97,7 @@ class ArchiveLru; class ArchiveSlice : public td::actor::Actor { public: ArchiveSlice(td::uint32 archive_id, bool key_blocks_only, bool temp, bool finalized, std::string db_root, - td::actor::ActorId archive_lru, std::shared_ptr statistics = nullptr); + td::actor::ActorId archive_lru, DbStatistics statistics = {}); void get_archive_id(BlockSeqno masterchain_seqno, td::Promise promise); @@ -155,7 +167,7 @@ class ArchiveSlice : public td::actor::Actor { std::string db_root_; td::actor::ActorId archive_lru_; - std::shared_ptr statistics_; + DbStatistics statistics_; std::unique_ptr kv_; struct PackageInfo { From b7849249c6dc56e4dd52b10fc49fabe2a4ab8aee Mon Sep 17 00:00:00 2001 From: neodix42 Date: Thu, 28 Mar 2024 11:18:11 +0400 Subject: [PATCH 120/351] lz4 support in multiple builds (#946) * Compress block candidates in validator-session * Compress blocks in full-node (disabled for now) * test pipeline with lz4 * tonlib compilation required lz4; try win compile; * install lz4 on mac. * wip, test builds * remove FindLZ4.cmake * fix typo * fix wasm lz4 path * increase groovy timeout to 120 sec * add lz4 for android and emscripten builds * add lz4 for android and emscripten builds * fix win build include path for lz4 * add precompiled lz4 for android * cleanup * adjust android include dir for lz4 * fix path for android arm of lz4 * cleanup * minor fix --------- Co-authored-by: SpyCheese --- .../build-ton-linux-android-tonlib.yml | 4 +- .../build-ton-linux-x86-64-shared.yml | 2 +- .../workflows/build-ton-wasm-emscripten.yml | 4 +- CMake/FindLZ4.cmake | 39 - assembly/cicd/jenkins/test-builds.groovy | 24 +- assembly/native/build-macos-portable.sh | 20 +- assembly/native/build-macos-shared.sh | 18 +- assembly/native/build-ubuntu-portable.sh | 20 +- assembly/native/build-ubuntu-shared.sh | 4 +- assembly/native/build-windows.bat | 19 + assembly/nix/linux-arm64-static.nix | 2 +- assembly/nix/linux-arm64-tonlib.nix | 2 +- assembly/nix/linux-x86-64-static.nix | 2 +- assembly/nix/linux-x86-64-tonlib.nix | 2 +- assembly/nix/macos-static.nix | 1 + assembly/nix/macos-tonlib.nix | 3 +- assembly/wasm/fift-func-wasm-build-ubuntu.sh | 13 +- example/android/build.sh | 8 + .../android/third_party/lz4/armv7/liblz4.a | Bin 0 -> 1080138 bytes .../android/third_party/lz4/armv7/liblz4.so | Bin 0 -> 796152 bytes .../android/third_party/lz4/armv8/liblz4.a | Bin 0 -> 1818394 bytes .../android/third_party/lz4/armv8/liblz4.so | Bin 0 -> 1092656 bytes example/android/third_party/lz4/i686/liblz4.a | Bin 0 -> 1092662 bytes .../android/third_party/lz4/i686/liblz4.so | Bin 0 -> 863588 bytes example/android/third_party/lz4/include/lz4.c | 2826 +++++++++++++++++ example/android/third_party/lz4/include/lz4.h | 879 +++++ .../android/third_party/lz4/include/lz4file.c | 341 ++ .../android/third_party/lz4/include/lz4file.h | 93 + .../third_party/lz4/include/lz4frame.c | 2134 +++++++++++++ .../third_party/lz4/include/lz4frame.h | 746 +++++ .../third_party/lz4/include/lz4frame_static.h | 47 + .../android/third_party/lz4/include/lz4hc.c | 2041 ++++++++++++ .../android/third_party/lz4/include/lz4hc.h | 413 +++ .../android/third_party/lz4/include/xxhash.c | 1030 ++++++ .../android/third_party/lz4/include/xxhash.h | 328 ++ .../android/third_party/lz4/x86-64/liblz4.a | Bin 0 -> 1771042 bytes .../android/third_party/lz4/x86-64/liblz4.so | Bin 0 -> 1128888 bytes tdutils/CMakeLists.txt | 7 +- 38 files changed, 11004 insertions(+), 68 deletions(-) delete mode 100644 CMake/FindLZ4.cmake create mode 100644 example/android/third_party/lz4/armv7/liblz4.a create mode 100644 example/android/third_party/lz4/armv7/liblz4.so create mode 100644 example/android/third_party/lz4/armv8/liblz4.a create mode 100644 example/android/third_party/lz4/armv8/liblz4.so create mode 100644 example/android/third_party/lz4/i686/liblz4.a create mode 100644 example/android/third_party/lz4/i686/liblz4.so create mode 100644 example/android/third_party/lz4/include/lz4.c create mode 100644 example/android/third_party/lz4/include/lz4.h create mode 100644 example/android/third_party/lz4/include/lz4file.c create mode 100644 example/android/third_party/lz4/include/lz4file.h create mode 100644 example/android/third_party/lz4/include/lz4frame.c create mode 100644 example/android/third_party/lz4/include/lz4frame.h create mode 100644 example/android/third_party/lz4/include/lz4frame_static.h create mode 100644 example/android/third_party/lz4/include/lz4hc.c create mode 100644 example/android/third_party/lz4/include/lz4hc.h create mode 100644 example/android/third_party/lz4/include/xxhash.c create mode 100644 example/android/third_party/lz4/include/xxhash.h create mode 100644 example/android/third_party/lz4/x86-64/liblz4.a create mode 100644 example/android/third_party/lz4/x86-64/liblz4.so diff --git a/.github/workflows/build-ton-linux-android-tonlib.yml b/.github/workflows/build-ton-linux-android-tonlib.yml index ae1be22f..bbd95661 100644 --- a/.github/workflows/build-ton-linux-android-tonlib.yml +++ b/.github/workflows/build-ton-linux-android-tonlib.yml @@ -17,7 +17,7 @@ jobs: sudo apt-get update sudo apt-get install -y build-essential git cmake ninja-build automake libtool texinfo autoconf libgflags-dev \ zlib1g-dev libssl-dev libreadline-dev libmicrohttpd-dev pkg-config libgsl-dev python3 python3-dev \ - libtool autoconf libsodium-dev libsecp256k1-dev + libtool autoconf libsodium-dev libsecp256k1-dev liblz4-dev - name: Build TON run: | @@ -29,4 +29,4 @@ jobs: uses: actions/upload-artifact@master with: name: tonlib-android - path: artifacts \ No newline at end of file + path: artifacts diff --git a/.github/workflows/build-ton-linux-x86-64-shared.yml b/.github/workflows/build-ton-linux-x86-64-shared.yml index 166de660..ce0ade64 100644 --- a/.github/workflows/build-ton-linux-x86-64-shared.yml +++ b/.github/workflows/build-ton-linux-x86-64-shared.yml @@ -19,7 +19,7 @@ jobs: - name: Install system libraries run: | sudo apt-get update - sudo apt-get install -y build-essential git cmake ninja-build zlib1g-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev + sudo apt-get install -y build-essential git cmake ninja-build zlib1g-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev liblz4-dev - name: Install clang-16 run: | diff --git a/.github/workflows/build-ton-wasm-emscripten.yml b/.github/workflows/build-ton-wasm-emscripten.yml index 16156b07..92107ffd 100644 --- a/.github/workflows/build-ton-wasm-emscripten.yml +++ b/.github/workflows/build-ton-wasm-emscripten.yml @@ -15,7 +15,7 @@ jobs: - name: Install system libraries run: | sudo apt-get update - sudo apt-get install -y build-essential git openssl cmake ninja-build zlib1g-dev libssl-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev + sudo apt-get install -y build-essential git openssl cmake ninja-build zlib1g-dev libssl-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev liblz4-dev - name: Build TON WASM artifacts run: | @@ -27,4 +27,4 @@ jobs: uses: actions/upload-artifact@master with: name: ton-wasm-binaries - path: artifacts \ No newline at end of file + path: artifacts diff --git a/CMake/FindLZ4.cmake b/CMake/FindLZ4.cmake deleted file mode 100644 index e13eca55..00000000 --- a/CMake/FindLZ4.cmake +++ /dev/null @@ -1,39 +0,0 @@ -############################################################################### -# Find LZ4 -# -# This sets the following variables: -# LZ4_FOUND - True if LZ4 was found. -# LZ4_INCLUDE_DIRS - Directories containing the LZ4 include files. -# LZ4_LIBRARIES - Libraries needed to use LZ4. -# LZ4_LIBRARY - Library needed to use LZ4. -# LZ4_LIBRARY_DIRS - Library needed to use LZ4. - -find_package(PkgConfig REQUIRED) - -# If found, LZ$_* variables will be defined -pkg_check_modules(LZ4 REQUIRED liblz4) - -if(NOT LZ4_FOUND) - find_path(LZ4_INCLUDE_DIR lz4.h - HINTS "${LZ4_ROOT}" "$ENV{LZ4_ROOT}" - PATHS "$ENV{PROGRAMFILES}/lz4" "$ENV{PROGRAMW6432}/lz4" - PATH_SUFFIXES include) - - find_library(LZ4_LIBRARY - NAMES lz4 lz4_static - HINTS "${LZ4_ROOT}" "$ENV{LZ4_ROOT}" - PATHS "$ENV{PROGRAMFILES}/lz4" "$ENV{PROGRAMW6432}/lz4" - PATH_SUFFIXES lib) - - if(LZ4_LIBRARY) - set(LZ4_LIBRARIES ${LZ4_LIBRARY}) - get_filename_component(LZ4_LIBRARY_DIRS ${LZ4_LIBRARY} DIRECTORY) - endif() -else() - find_library(LZ4_LIBRARY - NAMES lz4 lz4_static - PATHS ${LZ4_LIBRARY_DIRS} - NO_DEFAULT_PATH) -endif() - -mark_as_advanced(LZ4_LIBRARY LZ4_INCLUDE_DIRS LZ4_LIBRARY_DIRS LZ4_LIBRARIES) \ No newline at end of file diff --git a/assembly/cicd/jenkins/test-builds.groovy b/assembly/cicd/jenkins/test-builds.groovy index 7e377f0e..a959d75a 100644 --- a/assembly/cicd/jenkins/test-builds.groovy +++ b/assembly/cicd/jenkins/test-builds.groovy @@ -8,7 +8,7 @@ pipeline { label 'Ubuntu_x86-64' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cp assembly/native/build-ubuntu-shared.sh . chmod +x build-ubuntu-shared.sh @@ -27,7 +27,7 @@ pipeline { label 'Ubuntu_x86-64' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cp assembly/nix/build-linux-x86-64-nix.sh . chmod +x build-linux-x86-64-nix.sh @@ -46,7 +46,7 @@ pipeline { label 'Ubuntu_arm64' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cp assembly/native/build-ubuntu-shared.sh . chmod +x build-ubuntu-shared.sh @@ -65,7 +65,7 @@ pipeline { label 'Ubuntu_arm64' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cp assembly/nix/build-linux-arm64-nix.sh . chmod +x build-linux-arm64-nix.sh @@ -84,7 +84,7 @@ pipeline { label 'macOS_12.7_x86-64' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cp assembly/native/build-macos-shared.sh . chmod +x build-macos-shared.sh @@ -103,7 +103,7 @@ pipeline { label 'macOS_12.7_x86-64' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cp assembly/nix/build-macos-nix.sh . chmod +x build-macos-nix.sh @@ -122,7 +122,7 @@ pipeline { label 'macOS_12.6-arm64-m1' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cp assembly/native/build-macos-shared.sh . chmod +x build-macos-shared.sh @@ -141,7 +141,7 @@ pipeline { label 'macOS_12.6-arm64-m1' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cp assembly/nix/build-macos-nix.sh . chmod +x build-macos-nix.sh @@ -160,7 +160,7 @@ pipeline { label 'macOS_13.2-arm64-m2' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cp assembly/native/build-macos-shared.sh . chmod +x build-macos-shared.sh @@ -179,7 +179,7 @@ pipeline { label 'Windows_x86-64' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { bat ''' copy assembly\\native\\build-windows.bat . build-windows.bat -t @@ -197,7 +197,7 @@ pipeline { label 'Ubuntu_x86-64' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cp assembly/android/build-android-tonlib.sh . chmod +x build-android-tonlib.sh @@ -216,7 +216,7 @@ pipeline { label 'Ubuntu_x86-64' } steps { - timeout(time: 90, unit: 'MINUTES') { + timeout(time: 180, unit: 'MINUTES') { sh ''' cd assembly/wasm chmod +x fift-func-wasm-build-ubuntu.sh diff --git a/assembly/native/build-macos-portable.sh b/assembly/native/build-macos-portable.sh index a4187d4c..32a09e45 100644 --- a/assembly/native/build-macos-portable.sh +++ b/assembly/native/build-macos-portable.sh @@ -37,6 +37,21 @@ else fi export CCACHE_DISABLE=1 +if [ ! -d "lz4" ]; then +git clone https://github.com/lz4/lz4.git +cd lz4 +lz4Path=`pwd` +git checkout v1.9.4 +make -j12 +test $? -eq 0 || { echo "Can't compile lz4"; exit 1; } +cd .. +# ./lib/liblz4.a +# ./lib +else + lz4Path=$(pwd)/lz4 + echo "Using compiled lz4" +fi + if [ ! -d "secp256k1" ]; then git clone https://github.com/bitcoin-core/secp256k1.git cd secp256k1 @@ -128,7 +143,10 @@ cmake -GNinja .. \ -DSODIUM_LIBRARY_RELEASE=$sodiumPath/src/libsodium/.libs/libsodium.a \ -DMHD_FOUND=1 \ -DMHD_INCLUDE_DIR=$libmicrohttpdPath/src/include \ --DMHD_LIBRARY=$libmicrohttpdPath/src/microhttpd/.libs/libmicrohttpd.a +-DMHD_LIBRARY=$libmicrohttpdPath/src/microhttpd/.libs/libmicrohttpd.a \ +-DLZ4_FOUND=1 \ +-DLZ4_INCLUDE_DIRS=$lz4Path/lib \ +-DLZ4_LIBRARIES=$lz4Path/lib/liblz4.a test $? -eq 0 || { echo "Can't configure ton"; exit 1; } diff --git a/assembly/native/build-macos-shared.sh b/assembly/native/build-macos-shared.sh index 7b4f90ee..0f16eeda 100644 --- a/assembly/native/build-macos-shared.sh +++ b/assembly/native/build-macos-shared.sh @@ -51,6 +51,19 @@ else echo "Using compiled secp256k1" fi +if [ ! -d "lz4" ]; then + git clone https://github.com/lz4/lz4 + cd lz4 + lz4Path=`pwd` + git checkout v1.9.4 + make -j12 + test $? -eq 0 || { echo "Can't compile lz4"; exit 1; } + cd .. +else + lz4Path=$(pwd)/lz4 + echo "Using compiled lz4" +fi + brew unlink openssl@1.1 brew install openssl@3 brew unlink openssl@3 && brew link --overwrite openssl@3 @@ -59,7 +72,10 @@ cmake -GNinja -DCMAKE_BUILD_TYPE=Release .. \ -DCMAKE_CXX_FLAGS="-stdlib=libc++" \ -DSECP256K1_FOUND=1 \ -DSECP256K1_INCLUDE_DIR=$secp256k1Path/include \ --DSECP256K1_LIBRARY=$secp256k1Path/.libs/libsecp256k1.a +-DSECP256K1_LIBRARY=$secp256k1Path/.libs/libsecp256k1.a \ +-DLZ4_FOUND=1 \ +-DLZ4_LIBRARIES=$lz4Path/lib/liblz4.a \ +-DLZ4_INCLUDE_DIRS=$lz4Path/lib test $? -eq 0 || { echo "Can't configure ton"; exit 1; } diff --git a/assembly/native/build-ubuntu-portable.sh b/assembly/native/build-ubuntu-portable.sh index 81dbe710..a3a11f1b 100644 --- a/assembly/native/build-ubuntu-portable.sh +++ b/assembly/native/build-ubuntu-portable.sh @@ -28,6 +28,20 @@ export CC=$(which clang-16) export CXX=$(which clang++-16) export CCACHE_DISABLE=1 +if [ ! -d "lz4" ]; then +git clone https://github.com/lz4/lz4.git +cd lz4 +lz4Path=`pwd` +git checkout v1.9.4 +make -j12 +test $? -eq 0 || { echo "Can't compile lz4"; exit 1; } +cd .. +# ./lib/liblz4.a +# ./lib +else + lz4Path=$(pwd)/lz4 + echo "Using compiled lz4" +fi if [ ! -d "secp256k1" ]; then git clone https://github.com/bitcoin-core/secp256k1.git @@ -120,7 +134,11 @@ cmake -GNinja .. \ -DSODIUM_LIBRARY_RELEASE=$sodiumPath/src/libsodium/.libs/libsodium.a \ -DMHD_FOUND=1 \ -DMHD_INCLUDE_DIR=$libmicrohttpdPath/src/include \ --DMHD_LIBRARY=$libmicrohttpdPath/src/microhttpd/.libs/libmicrohttpd.a +-DMHD_LIBRARY=$libmicrohttpdPath/src/microhttpd/.libs/libmicrohttpd.a \ +-DLZ4_FOUND=1 \ +-DLZ4_INCLUDE_DIRS=$lz4Path/lib \ +-DLZ4_LIBRARIES=$lz4Path/lib/liblz4.a + test $? -eq 0 || { echo "Can't configure ton"; exit 1; } diff --git a/assembly/native/build-ubuntu-shared.sh b/assembly/native/build-ubuntu-shared.sh index 12c819cd..7d5326a4 100644 --- a/assembly/native/build-ubuntu-shared.sh +++ b/assembly/native/build-ubuntu-shared.sh @@ -1,7 +1,7 @@ #/bin/bash #sudo apt-get update -#sudo apt-get install -y build-essential git cmake ninja-build zlib1g-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev +#sudo apt-get install -y build-essential git cmake ninja-build zlib1g-dev libsecp256k1-dev libmicrohttpd-dev libsodium-dev liblz4-dev with_tests=false with_artifacts=false @@ -119,4 +119,4 @@ if [ "$with_tests" = true ]; then cd build # ctest --output-on-failure -E "test-catchain|test-actors|test-smartcont|test-adnl|test-validator-session-state|test-dht|test-rldp" ctest --output-on-failure --timeout 1800 -fi \ No newline at end of file +fi diff --git a/assembly/native/build-windows.bat b/assembly/native/build-windows.bat index 2c64e80a..9b7322e1 100644 --- a/assembly/native/build-windows.bat +++ b/assembly/native/build-windows.bat @@ -42,6 +42,22 @@ cd ..\..\..\.. echo Using zlib... ) +if not exist "lz4" ( +git clone https://github.com/lz4/lz4.git +cd lz4 +git checkout v1.9.4 +cd build\VS2017\liblz4 +msbuild liblz4.vcxproj /p:Configuration=Release /p:platform=x64 -p:PlatformToolset=v143 +dir /s +IF %errorlevel% NEQ 0 ( + echo Can't install lz4 + exit /b %errorlevel% +) +cd ..\..\..\.. +) else ( +echo Using lz4... +) + if not exist "secp256k1" ( git clone https://github.com/bitcoin-core/secp256k1.git cd secp256k1 @@ -119,6 +135,9 @@ cmake -GNinja -DCMAKE_BUILD_TYPE=Release ^ -DSECP256K1_FOUND=1 ^ -DSECP256K1_INCLUDE_DIR=%root%\secp256k1\include ^ -DSECP256K1_LIBRARY=%root%\secp256k1\build\src\Release\libsecp256k1.lib ^ +-DLZ4_FOUND=1 ^ +-DLZ4_INCLUDE_DIRS=%root%\lz4\lib ^ +-DLZ4_LIBRARIES=%root%\lz4\build\VS2017\liblz4\bin\x64_Release\liblz4_static.lib ^ -DMHD_FOUND=1 ^ -DMHD_LIBRARY=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static\libmicrohttpd.lib ^ -DMHD_INCLUDE_DIR=%root%\libmicrohttpd-0.9.77-w32-bin\x86_64\VS2019\Release-static ^ diff --git a/assembly/nix/linux-arm64-static.nix b/assembly/nix/linux-arm64-static.nix index 5e834269..8c2749b0 100644 --- a/assembly/nix/linux-arm64-static.nix +++ b/assembly/nix/linux-arm64-static.nix @@ -22,7 +22,7 @@ stdenv.mkDerivation { buildInputs = with pkgs; [ - pkgsStatic.openssl microhttpdmy pkgsStatic.zlib pkgsStatic.libsodium.dev pkgsStatic.secp256k1 glibc.static + pkgsStatic.openssl microhttpdmy pkgsStatic.zlib pkgsStatic.libsodium.dev pkgsStatic.secp256k1 glibc.static pkgsStatic.lz4 ]; makeStatic = true; diff --git a/assembly/nix/linux-arm64-tonlib.nix b/assembly/nix/linux-arm64-tonlib.nix index a753423b..ae62ca26 100644 --- a/assembly/nix/linux-arm64-tonlib.nix +++ b/assembly/nix/linux-arm64-tonlib.nix @@ -21,7 +21,7 @@ pkgs.llvmPackages_16.stdenv.mkDerivation { buildInputs = with pkgs; [ - pkgsStatic.openssl microhttpdmy pkgsStatic.zlib pkgsStatic.libsodium.dev pkgsStatic.secp256k1 + pkgsStatic.openssl microhttpdmy pkgsStatic.zlib pkgsStatic.libsodium.dev pkgsStatic.secp256k1 pkgsStatic.lz4 ]; dontAddStaticConfigureFlags = false; diff --git a/assembly/nix/linux-x86-64-static.nix b/assembly/nix/linux-x86-64-static.nix index 5e834269..8c2749b0 100644 --- a/assembly/nix/linux-x86-64-static.nix +++ b/assembly/nix/linux-x86-64-static.nix @@ -22,7 +22,7 @@ stdenv.mkDerivation { buildInputs = with pkgs; [ - pkgsStatic.openssl microhttpdmy pkgsStatic.zlib pkgsStatic.libsodium.dev pkgsStatic.secp256k1 glibc.static + pkgsStatic.openssl microhttpdmy pkgsStatic.zlib pkgsStatic.libsodium.dev pkgsStatic.secp256k1 glibc.static pkgsStatic.lz4 ]; makeStatic = true; diff --git a/assembly/nix/linux-x86-64-tonlib.nix b/assembly/nix/linux-x86-64-tonlib.nix index ac183d2b..5a6e43e8 100644 --- a/assembly/nix/linux-x86-64-tonlib.nix +++ b/assembly/nix/linux-x86-64-tonlib.nix @@ -34,7 +34,7 @@ stdenv227.mkDerivation { buildInputs = with pkgs; [ - pkgsStatic.openssl pkgsStatic.zlib pkgsStatic.libmicrohttpd.dev pkgsStatic.libsodium.dev pkgsStatic.secp256k1 + pkgsStatic.openssl pkgsStatic.zlib pkgsStatic.libmicrohttpd.dev pkgsStatic.libsodium.dev pkgsStatic.secp256k1 pkgsStatic.lz4 ]; dontAddStaticConfigureFlags = false; diff --git a/assembly/nix/macos-static.nix b/assembly/nix/macos-static.nix index a3d4667f..be15579c 100644 --- a/assembly/nix/macos-static.nix +++ b/assembly/nix/macos-static.nix @@ -25,6 +25,7 @@ pkgs.llvmPackages_14.stdenv.mkDerivation { (openssl.override { static = true; }).dev (zlib.override { shared = false; }).dev (libiconv.override { enableStatic = true; enableShared = false; }) + (lz4.override { enableStatic = true; enableShared = false; }).dev ]; diff --git a/assembly/nix/macos-tonlib.nix b/assembly/nix/macos-tonlib.nix index c362de4e..4f7b7620 100644 --- a/assembly/nix/macos-tonlib.nix +++ b/assembly/nix/macos-tonlib.nix @@ -23,6 +23,7 @@ pkgs.llvmPackages_14.stdenv.mkDerivation { (openssl.override { static = true; }).dev (zlib.override { shared = false; }).dev (libiconv.override { enableStatic = true; enableShared = false; }) + (lz4.override { enableStatic = true; enableShared = false; }).dev ]; dontAddStaticConfigureFlags = true; @@ -52,4 +53,4 @@ pkgs.llvmPackages_14.stdenv.mkDerivation { install_name_tool -change "$(otool -L "$fn" | grep libc++abi.1 | cut -d' ' -f1 | xargs)" libc++abi.dylib "$fn" done ''; -} \ No newline at end of file +} diff --git a/assembly/wasm/fift-func-wasm-build-ubuntu.sh b/assembly/wasm/fift-func-wasm-build-ubuntu.sh index 9ca23cc0..6daf2d4c 100644 --- a/assembly/wasm/fift-func-wasm-build-ubuntu.sh +++ b/assembly/wasm/fift-func-wasm-build-ubuntu.sh @@ -41,6 +41,11 @@ cd zlib ZLIB_DIR=`pwd` cd .. +git clone https://github.com/lz4/lz4.git +cd lz4 +LZ4_DIR=`pwd` +cd .. + git clone https://github.com/bitcoin-core/secp256k1.git cd secp256k1 ./autogen.sh @@ -101,7 +106,10 @@ cd ../zlib emconfigure ./configure --static emmake make -j16 test $? -eq 0 || { echo "Can't compile zlib with emmake "; exit 1; } -ZLIB_DIR=`pwd` + +cd ../lz4 +emmake make -j16 +test $? -eq 0 || { echo "Can't compile lz4 with emmake "; exit 1; } cd ../secp256k1 @@ -121,6 +129,9 @@ emcmake cmake -DUSE_EMSCRIPTEN=ON -DCMAKE_BUILD_TYPE=Release \ -DZLIB_FOUND=1 \ -DZLIB_LIBRARIES=$ZLIB_DIR/libz.a \ -DZLIB_INCLUDE_DIR=$ZLIB_DIR \ +-DLZ4_FOUND=1 \ +-DLZ4_LIBRARIES=$LZ4_DIR/lib/liblz4.a \ +-DLZ4_INCLUDE_DIRS=$LZ4_DIR/lib \ -DOPENSSL_FOUND=1 \ -DOPENSSL_ROOT_DIR=$OPENSSL_DIR \ -DOPENSSL_INCLUDE_DIR=$OPENSSL_DIR/include \ diff --git a/example/android/build.sh b/example/android/build.sh index 06217255..cd75f9d7 100755 --- a/example/android/build.sh +++ b/example/android/build.sh @@ -4,6 +4,7 @@ pushd . SECP256K1_INCLUDE_DIR=$(pwd)/third_party/secp256k1/include OPENSSL_DIR=$(pwd)/third_party/crypto/ +LZ4_INCLUDE_DIR=$(pwd)/third_party/lz4/include if [ $ARCH == "arm" ] then @@ -12,6 +13,7 @@ then SODIUM_LIBRARY_RELEASE=$(pwd)/third_party/libsodium/libsodium-android-armv7-a/lib/libsodium.a SECP256K1_LIBRARY=$(pwd)/third_party/secp256k1/armv7/libsecp256k1.a BLST_LIBRARY=$(pwd)/third_party/blst/armv7/libblst.a + LZ4_LIBRARY=$(pwd)/third_party/lz4/armv7/liblz4.a elif [ $ARCH == "x86" ] then ABI=$ARCH @@ -19,6 +21,7 @@ then SODIUM_LIBRARY_RELEASE=$(pwd)/third_party/libsodium/libsodium-android-i686/lib/libsodium.a SECP256K1_LIBRARY=$(pwd)/third_party/secp256k1/i686/libsecp256k1.a BLST_LIBRARY=$(pwd)/third_party/blst/i686/libblst.a + LZ4_LIBRARY=$(pwd)/third_party/lz4/i686/liblz4.a TARGET=i686-linux-android21 elif [ $ARCH == "x86_64" ] then @@ -27,6 +30,7 @@ then SODIUM_LIBRARY_RELEASE=$(pwd)/third_party/libsodium/libsodium-android-westmere/lib/libsodium.a SECP256K1_LIBRARY=$(pwd)/third_party/secp256k1/x86-64/libsecp256k1.a BLST_LIBRARY=$(pwd)/third_party/blst/x86-64/libblst.a + LZ4_LIBRARY=$(pwd)/third_party/lz4/x86-64/liblz4.a elif [ $ARCH == "arm64" ] then ABI="arm64-v8a" @@ -34,6 +38,7 @@ then SODIUM_LIBRARY_RELEASE=$(pwd)/third_party/libsodium/libsodium-android-armv8-a/lib/libsodium.a SECP256K1_LIBRARY=$(pwd)/third_party/secp256k1/armv8/libsecp256k1.a BLST_LIBRARY=$(pwd)/third_party/blst/armv8/libblst.a + LZ4_LIBRARY=$(pwd)/third_party/lz4/armv8/liblz4.a fi ORIG_ARCH=$ARCH @@ -56,6 +61,9 @@ cmake .. -GNinja \ -DSECP256K1_FOUND=1 \ -DSECP256K1_INCLUDE_DIR=${SECP256K1_INCLUDE_DIR} \ -DSECP256K1_LIBRARY=${SECP256K1_LIBRARY} \ +-DLZ4_FOUND=1 \ +-DLZ4_INCLUDE_DIRS=${LZ4_INCLUDE_DIR} \ +-DLZ4_LIBRARIES=${LZ4_LIBRARY} \ -DSODIUM_INCLUDE_DIR=${SODIUM_INCLUDE_DIR} \ -DSODIUM_LIBRARY_RELEASE=${SODIUM_LIBRARY_RELEASE} \ -DSODIUM_USE_STATIC_LIBS=1 \ diff --git a/example/android/third_party/lz4/armv7/liblz4.a b/example/android/third_party/lz4/armv7/liblz4.a new file mode 100644 index 0000000000000000000000000000000000000000..311fbca4295f718c018f5e2ecfb1058bfe3b6598 GIT binary patch literal 1080138 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 z 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⋙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 literal 0 HcmV?d00001 diff --git a/example/android/third_party/lz4/armv7/liblz4.so b/example/android/third_party/lz4/armv7/liblz4.so new file mode 100644 index 0000000000000000000000000000000000000000..f98cffe80fba8e3773857c4fbccbd21515c4a43d GIT binary patch literal 796152 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 Z=4@f_# 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

    Xb)c27u!$XkD?@hY2(~s#)rgg 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 AegFUf literal 0 HcmV?d00001 diff --git a/example/android/third_party/lz4/armv8/liblz4.a b/example/android/third_party/lz4/armv8/liblz4.a new file mode 100644 index 0000000000000000000000000000000000000000..6db4a5d4b7b35de57fa2a9cd79a6d6ea7ed113f5 GIT binary patch literal 1818394 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�AS;?fR~a@*zX|p}mov2@7+(>_ z6)=v3aq!W&cFx_YTvjveR#K?q9X^*(mMxrRrZ2g-? z3JH6`$uplR&vHKXgK~4k&vDLzLyNS|vX4pU@Z<7|;0 zQ5)aGXNuOyO5XTdhB%OrW9g-t%UZ@)nT>;>8Z58jG;8@vvvEK@(ou#6CM8t`5c;IS zGN7t zEs!jUxs8ydMLSGzeaMReZWYoHAXJqjV!5K()h|e%P;6#OvYG9e8tXQ<+3s495O%`dBjvXt?9zuv*sAuv`ha`+u>k>eDe&!w~=vXp%; zxtm36G#@VL8eP(oWt{uPBLq2ChZcs*YL=lQvJ8$hTrNF#5Iq;?&T}|@FkZvlGKcKA z*~&#_CUOhUOcd&a5GSLa6Iyk^W~uu6Wei)C6!EEh)kbg`0>zi4tjZ+ANElcAvMO%n zbIiZ{nem8}wH{51`sEnimVGWE9q;5U`=#LfQ6n^Pj@2O~?H0YP2iz^B!6h6pbbPxW zedk@4wX6Y zZocLpIl4LXj2!(u;gRDAONLQW4z~-1pi+5Ohx|NY(fmB&)uAn19gOgDtPY*#ENA(e z>HBf>1lw|EqLA}KNp;M`EIa`3mrgQtgyC@|&6P8?A{ZYQE)_67s-zI(3#^n&e5KxZ zm0^^h%SE3{sNfFfzD7!U0OF$!a;y#^>1p8-Tn{_ILw9{}q7;(#2xq}Lxg1LzIEQ#f zCJMoU;Tk^ogxA5)!OM_fxZlRWJW0k7GYWci8*q|unK#yyf^WH*Z^hru4#nTp>k#rN)DxQnl* zw!PDSalPP)>rA}IIRU-q2@q9FUb*DfE}{A*_PG^I5~6%uXOaWWNT!t0b|_AjR{}#^ zXJU*7%WgX`hVYaMP|KQ6L-~y7(n|3Sd z67RYE=X85=8+g&iy(TcA3E4tpVXmGI#y-yiee8v@@aYfpM zf!j1Yn0|n-WEn>oUQ|+v`v$rXodpG)l5W!rctuE~%eZggF#&pX4o^Uw7E>SdO??!m zzCx^j%(vKH-xfz%Xt}r*#(?UO)NTk}bc09~T)uI+*!?q?k0pvA3}%vNFW)yNjK)wI zd*Q*?h>X4c3{~vl$RmR>PTMM%;Nj5IEGkTZJkttpXE;Fen1IjeAqrE8=+8K>Y zBtRHAWeh2?i!BZwKgScA$g)a|wRg40C8$sYX;sA-A~H;$WP!uqDvg(6@?*X+kA>>p z&k}3#y*rq+M50n}GsE3VI>-=b?5W#BNJJFl3ApnelHf9i;BrPuesCE>(_v&my!_e) zm3xA#a*D5}YXF~N8rjPdmJ+5!q>$dg8C3G=gw(coWY5RAx;@J!&z=f zM3Fqi1vR>)`Uzzzu`S>U3DO_T1ARD$N?k6s(Yu(Z{bb^=Nm_F4{^b<>Vuq>_Ve>* z!D(sojX3hGT!LN?rL-|ftxC0v*^dLNZ`=fURh-v2Mtp5Dz}*B`64E$I#MKSrpqE6V z9>5(!+T6hmvC@*GJA<)u>BXyWy1A;!$`JfA+ApE{B?fK7FR`zSOG=m6H;r@Q=@R>< z{StF8WMB|ZPn`m85#^PA#z8ON!MV}gCVrs3OWYQQhAQLgw(j-MXJtmc!m}0BOO0#X z*K*MI!R3jy6;=;YvHfY3UH66LI~~@A3g@S zT1Xo)-sl&;Aex;*5a1dy!BIdM1@YphmW%5n*YF+K8?DH} z)uK!yp)6%QEF2lQjA3kGJYOg7^O>L1>}NS)-ZW6^bmC)UqY09DTuzMkO^MBT2Qck`XYe5E1(afZzzWEpU+ki@kf7E<{X!!t_40?=CN zuH`9)+m(bV$SENW;=$@A(tij2ExL-&WK<&0Yz7AwFN~1<_YTe2eR?`Wp4O!ZxiOTIBmtg-W zah5V)O=kq&pq%?z2e838EUZt))S)Tfk}oClpgnLns&Xj z%{f3I;#l*FI6Q(A-KAZ1oRaQC7v7_QDAowkBSPSXk7Oc%X(93-r|S?Qdbcs$ z!`Ebajep3+txXHx!St18KoA+~A(CWg5au!pE~p<>HN*w?Q~|EW?2PoQL-2 zwlF-Xq+<-V-XoA$>pjAW2B^h{dmVE@78AB1GK|O2IGJ2# zlKFb!)9TcV3vRw>eN{Lh7 z%kmr*xq`z$@ZKQ2`v4)d;oUb4xlu+!#V;+f4-ooH5~3VjXHqGejY7Duyb_87?;NXp zD6k?r>G2u&_>AY%D&TTd%9@Y z4J_ly({h7kng&G&ab>KU>=1=M40uFH z6TXhiP`921dl<00F3|}scLR0!VXGEJXoVOS?>pJ-*+p(Ma=A@u^P^2>g!_CWc^ zC1V*-+v8zrVFqqPuV(r-zUG*cp$TDh^K}+JpZRt2H7vTSt1`kmfr#|L8`Pz`2@aIj zdW?sB#zQ{iIiJ&{sDF&hy3AK1!FP;EC+JC<2Uj=3 zh}Vb_XBb{E$YGRnMC867-DTwE)3x!4^Bmrt&32XNZYWf|kdfLCSgonqN^ zRit+ZlT_?rR3pG^BleuS(-$xy-PeUK|Ac=EM0sxMh~p6 zVxY|S0tMuFtQwrb#jfPTV}MVt<$a&iuhW-Z9f@iqB8JQ(qh?qnheSC}8=^-2qWNI^ zp5UZQ#JtL|xOA^{T)n_7Mnsli zz&-|MqPO6j?+|BsdM%E_X2`(4IYgNQVVDdh7rYuUIy``=<|biRby6P>~&1w-bS`m0wr!8gcVZ zt{dL$ZFsMn&Z^_Oj22jjLU473XyY3y#I-X~zX|4Jd_I@?n3>Ndw>hBm(a8fq)!w~6 zi5Jdb=?tK!%+*6jq*U9P z1T7E=N;u88a(MeST$K%crG)`NFs_LnYXL`XrpH=1hg{sg4)wxnNkBlTIgaiHgaRp! z0YZWFSPI~7QCtb|xRAyG&kCsoxI^O97~n-Al>j4|n2rIq2&ue>;UOW(y8{jj=|RBL zLMokQcwR^k0&26DcCrN=6-y}LNGncHk#YbJ$nJjk^~RzRetoVGD*u)1nL@ zP9u{LfM`C-=-X&7>JBR;UVtzg;uUIxgPhWn3zy1^p%QO=74YVK_R!WBr4>@0VZ9MK0a}kA=-^L!qHynAVh*hJ4B)hz&%15 z1Vo6UjDRidkEwQW$(NJ_mt10hN2y>2+l4gY>tKR=j9lC}bdf83nXjgs0bgYr#ilh} z2bd+1ge8NSID?DbF6ngm)Gqr&)|8s1z(29FQ!V z5X~-##Rt8t&t=@_5{%slt>;CS2jPI!u!A3x@VVRzE*QblNEc8U2UXR@`j`^EJcxdW z0&;xk!sSvM?QELf#w@oB>wz5%ck$J3JGtfA%pu!yOC%v(KJ%5^qECbs-F2RB!SQ`VHk^o|_jyyVG zvsl+C;40DX1Yk)>qkxA*$O*s;LK+3!Bhg_3a6gmG!c}P+zfNjGQ~+1kXM;W|73=}r zE?h>y7$4`O=MDhzfjgS-0&4LiV2|re#UGa9drKUHFa|MI>z&@f!c3$p+&k?Hk$bsH zOYG~ z>vXiB0Eo_78-1W@8b8oosQ^GU8f68nlL^jP7sItm0^H3cTL6BnmUi9Lr`AS1NKxO?{m(TjKF5$_*Wqpk4=lDtv@e;#T(m%?8=uNbc33x(N!AW6yNxVwj z5F5mAm3K14Jcm*pViN41+z(tB{1=fB*D7K);>s|5$+5tCf@^nyuhfnkPzXk_hQ_z$ z;wsMNW7ptZM!6Q|!0EI|)G>XIF{C6V!Gn)WuPkq22)QYh$jiVLJA?70$0hh2Uo$s4 z?1K6{S4tE$z{L}U<8!Wb$XNvK1uCi3{dT1G^7v&+2dlz z18dnFFN@I*K<*79_WcwQ2y>l}h3AN?-i1gZ@%#Z< z&Z*2rTrko>EXv_z(E`m3XpIqY8IzLb zJtV}{9Xf&D#DEw9wg@SxhlS;$1(yI@xrDh@3c09KfQJ?(oM&+-GIF^Js z{Zd>X;1(ts-hI>fwOtbeVi6@th+juEA>gqpj`(#&69TSEHCo>^eyx@I_W>TPN(gP7 zuA<`CWz7zVc1a{>Ipi`^)09Qven4o)FzOdw?a+jP&`y#Nzm94`z++5G65?044Eg)9 z^|F@3NRn`(F3GozuL*Sz2hD?gO{maoNfgr$SWan>>chXbR#APu!g5&j$Xowt;XAE- z&F;ErMzjv~X5q-dZJKeWqaBE`t8pT^x+PLSR|yq18JPszB2uXMGo0WuU&+TqJLi}i zkuEa4tfUa*W!&D{?)PGliHGEJ3;<7ZG0J5F#8X)|gk-s9m4tXLtQWH&kM=-g7#d`T zUF2D~_j%LnAGsXmO%Ks9O?ihOq5*GJYd_eiT7!K8T&}SG>8U!OOK_tJT%bc*S#+yO zBrrxTbDRnD8ISmkM|{R3A#(y_)!uxJ5?r+2W4?G}zIefLH5jXSMdQk#DcHDhgjjVW z?+1vMG7H^qQyJQ2uP25V#NnE>u|@%x$uzzM*eaxPK&-KluLr~d8(Iwl)Fpuu;3|&3 zlnU^mkV=5ZgftF_$pvW!52sIZ%r+%5+#;k2z+FNr?P0i2NE3hugj71rP`7AGC7uLr zlgW_0>He~k04I3VKym@@kae;0PKGC%k{(YLYT_nr=BsIahG>0Sh(Y6TkyIrNFt!P4 z99tJax%%+BI9_Jo~K{hS+`&ADfvnX-ZS4fk|OK#9~#2Bz!Qvse7(#G=)wcBs< z8@3l701Zq^1Vmq_gX4g@+P)DGtw0%li|9qOqcajOKy*gR2#B6SbqpCvnKgwCJR0&s z?h9h0!DUdFi{0sR`Q+OE0;ds{%Pg-?dNK~6|C|yT2hK87v4hKm8H~?(T!QD)_px{| zC-UV8P6$7AG{?7@@j5OGA%jxE8sHO&1Z&tT{$bp2`iW3G*Rd7DndMlmN0uh(3j<3$ zE0bX7;gPAy`LXT>ZKso?L!HZHVzheaDZsDq` z+(Z3LQXz*RH7if419oTG;&$OHHFm^DP+gs3@&y* z>>Zp z!zh59bx5Hum)hu8o2FMY%Wh#ku!doYuXalb<-upz%yTV~gan@_DmVB%L3!j@J1R?V z0IXZ2&F0ZS^WlQg1Dr7hkC28Zd6u?~uQ@_1vTTtoat=hf1Pg{>a56N*23*E|$E-$| zrtwRIWT~4IY~^c?l~@$Fh5^k=0G07D7$bDi3Nzq@l+^>M#Seo$uI`i$^lc1i2)vWw zZoZn@_D=i71-G*~zdVpj3x$}`qH2bB-?Ur1gzA^r=T%#T8{oq zIr=kd-k&8$fAAefYgxc0(qij<8(Q!3&het&R%VRan1R7s#}o|>3c}S@)Q!#u9V@$! zL1SnDN(DHF4h0>;XOIi<8@YtClyPv&rkz`D8()br;0_^;03H!i&pC!TJxKM!5)Eeb zwC+*i`PLS`QYye5LK?Zk!zYZ5DAj5X;d=6>2X20e7no#xt7O>P zgCii2h=IlDBxAe*aNtN2Sg-2;1MD99A$V!h7CQK(4SKhAR0flFr&>? zUh6fwbh0gCEpq5qTX2+HK`yTETE%y?tO4IN27J>9jt5{Gu-y4NSD(+y3@06aA_tB_ zD_Zd@TJbAd5!EqpHHeKrWjy3F9`YFn=dC-rz=M1x%fQAq7O;tgM|jYE=tvgeR_Qjq zfLDbyww(LMYUv~Le8?Fw^^Lx%kHOSi#MC#!cvT0zFiW+?v5+P)ayl#(z8_t5L?jBn zXxrstSNdE&xt9OHX&=jDOc;%!GWNoQW41?)Qf6^g?BJ*`gK@vdWhA7+Gn@b>K%S|E z+ZPUyyc{63LaB~&S!i!cg?2{c5(y9nP8mZItzwIV$Ir10j4Z3gSbMQhuUvu(MUYli zY(zwc>60vQ_}j$5GE9D>Z_FD*^)9pUT72(LCN)cs>%|J_9wi-OcuGkS5)s9C0`7c= zC6a7JaKYL$)y@wt8_{$aSr9M3c0uKy2$wYIIrk6Uu@`-rZsg@<0;$a1NEaTxz3tHBIkj zmRKhwJJ|17o=x`@is<%)dCJp+s_H&ku&rE`QS(BYIdFmdNB<=qhtzqT{m>=xM}4hq zYH+?eUdO$UvmD|p?E-}gMwb1OWg|8jl}pg;p_DcTG&uo;8oxHk zfOZ({aCOICpkr`H%>+0i5{ykT+|E~1T+ehTTYIR6TVf=OP;jO$EwYUKoEG=R!`6l=2B%`v=tr;ldJ}Fg(du z!@E!PrON4p?>Nj#N)kdjDs3MYlhe}n1=m$txO`YpwlU4aY}PVkt@G#>Cc!FbWP>=W z{Vu3XpYepxc*18q!KKT^H45P(v14N=!&Q83iarqSuwRP;WrHT3V5rsG2r16%2ttZy zFq0HJ_&&`w4lq2Yq{|GotTB|OstisBq{eJpW`yCgF*GhrE;Grj(#)q}eQ6$R@}+sK zNyK1qeM^Iuy28@ZW&t3qiy{Xg%*tpTScm9kKpd8!oPapmKw}j^ZI1Df&h~NwxFcc= z)vN6Wx$I;vd!(+xC5#B2M*5MgTVZlRHNrq&ds{hFqw}0Vr}4pa9gwA&Wm!zUy<;j` zVZIKB#=s7za6&)f&UJ@N%VT+_11w0_6@==D`WWfq9=PX+M2#TE&#_+zPEw{6* zK*5rw2V7Ly!J%A>C(9;q85hR#`V-h^juDfqP}475^%k` z-KWHb2RG5dShoFQfS5(r1F+ zY_(U3`Scl|%O=R8{dZHS8$qGxq~3#oTFGE!+s?TU3zu=oqIwC2)GeHQn{Wvh4DnaU z#3{JGev-MLky3)&QsCZ}zm!YNeHCXh9k;|7ip|rRv2=b}iXO$1)3LgwamjiCPcW$| zdLPAe6U#xlsEIE#L<>=V%E{#=)@x zw5p6Z`;0gHjDu|e6WT6@HVBBGK+YNvUBGlV;FFSb6QK5xjeu7)6`w=A!!V0T)$v zaGr6td&_E3;T- z6$^BS`?%4`fDVrVb}`AU7KTrMff1Hg;%FV<3gKM_Y!T8rKopmwzi{TLO}NPF^~kdl z8ohsQ3dwMtsqU@9rUwwC9Xj|5h+&pdN6$2VZI`?gfV-HKB*d>)nZr)(VTcK*c{UB( zd~Fh!NBS9#2x;OX!*h*E86+NHGi#fsn}EBQNUB2&Pb%pG!%Iq9&dOWCSKxSwl)Wb}L zG7@Sl3#>H_ZURBziwtPT2M{6}-hCo)vk2S=c!h;Y5~2klOhUyk6|D~t>P-?tAY5m% z`12xgKVVwmei0aNXCt=&m=?HyI!oaGX7qNvxaR z$NEm2#JcI@Oii1_x{PWBA0mY2J4D0x0>WjGg9C(fpttb@9+Zq_G|44#0Kq`JgzLPM z>to)8<5Z1E=+tN?BKbXd#P7i)s2#4ZeL;9gZbBQp5acj4s2M)UhDGjwki^jXnFdh| z4Q1ncJ<9;It&etY+qQKcqOZ(Q-^vX2t(@-m)VDH2ec|(WeiJ@*GC+Ma!bfZ4I#a7_ zmZ0}WO*P8|xZ@fwbV zIACn&E3IwrWO!Ccqn8+B`Hxa<<+Y}6S;ZIy#F7)GYW9X{W3J|DCFtCeL^60hBDs1e zUa&h{UHd!3H!ks&LJ43>>l@ti&C7^0T7H8ofk~Iq@*5xyuC7?F)@iKQ&gw+8rrF6k zCM{#NE}~&?!<1c31F1vS4ohW*8-%nT5be?w?Tp@Q^MkTPTB_u>lu4WvhU1#6>yrAA zXn>f))kc#|)A(^g(_uD zYo2DaO6l^fXK5w3or!_l%tS)#;_9~YalV1R6-OHYAubuvB&5}N|L7#dh4q_su26>N zN@Zve2Uk}t7@x}UuOZBo0zwd_SU zh&LJB$#9R7_A|t4EIm`-!JcAVJjRgkM267qwN(apum@0m4nd!o!sdt$tGJ>SsqiM0 z)h#Y2xO3%lu}AP-KDo~2gVP$8$ByVd8OzW^yU19^LY9ghocZ+oj60d3atZE8?O-l2 z6nc^uuvrXb0^tTRhEg43Yd9(fvL4m|6QCy@-S|NyzvD2M(}st3;w61Y?z` z2YSOYC~b-%#9|qgNPdXzfp(8dReAtV3h918?S8>kWW3QpO&}OQk)=!8V-UNT$|Y!_ zBbL%=$*so?C>H`btwJIS(K5b@XhvIKXIrnn}$ zi<0G*LV9tz)JE@Y%Gd=gpW@OWXl*prG>z^Iwb{&bEiv1j&XtQTdV%B_IN?;5;sRJN zlbJwpo6%M6{J0?K!I|gSR=LF1yOU=S#*%nce+QX{7(1il;6;gPWhcKymAM9K9w?DVdn$Op+WBy@LDxMK>ZNV*nYly zNm7l~@n+}>*%aLfh_80jdwGI;EJNT==F=I3m0*(u*1PHy;N-5xec?(?$u$`O2E|lTNDkf5yYZ-1)65!EvR{TKIQdU51 zkV?rte)=4Xm0!|631c+9&H9$Kamvp0kqmBBF7My%Eam%2k=uNX1n1n5J zI)>17jLSVKz49&GiLv!n9Xl~^UZSFEW`O&h?({OO91!n-XQG##8 zEpaK6e5GOCHijpZ1Xw5CO8no5kjij&JCt;h;Z-HIai{B)&R1T|P+yigxSL5wCDowc z8wcCitY9lND}|{X7K_^$YV9&t6d#47!wGP|m!%i>&y|Z^(sKFaTIYg1BP^G(ShSDI zSVm|#D>9ZZFjTRFlfVqd=RGdLRfK&kDh!3(9pDma`b{tp_+LuZ&Fx!}b{<93qrJ&t zyDpYUzBeuT)-dW@!vmpqMD*Suat~Z!h_9#63<^T-6S)WAlRL!n23+4m8AHXd<+7kF zT8F|&LCfkvxYEefvzEgT6hj#iUUrCu^c-M#P)UBo=|NR0Qk5RS2_aPgwfFV-6%MX^ zo#qOwQ3Q2_EN7&N%4a<;LCcT0>F`ck)6IbKQd)9{E4ae2t{f9za0VB<$kpWV$+hz3 za*_oumz&%O*;hslmphW>SldI*TE+Z>>c%UicS@FC^l-J}URd#jjIVkzlsc{?7&b;m zIbN^;2cyN0qIfN9)GtfMXj;~2NXHwvid&?r11L+Y8np6LoV!`-o#h8ZvbbFA0@ZS6 zxk6YEv@nFA_GPcG-_5nK=9ZZ4zvm_Q0?AWG{ZU!!(_p<@R1&mkzoPTuf>;foo5#Pf z@>=;yaTM^dtmO^^Vwu+*=`2m-*I7*%Y6{$Mk>Yv)TV>~Eq>W)GUrllJg*-0iv=lc2 zcDTB0^PsO`K%ILJ!$W*EynCmy)v7}DVkc;4N{HUzaNjSnZ*NA4eHkV8O>s%-62q^! z@JsB^DzQJK#Qv-j!zW*1%}^S>j>T`AVaSE6+crLz5uZ!2g?%oYeJ-0J1Fm6NuAds2 zv4mTtJQL4_)yxE|jy&*AhR2n3hM`)-s4FsM z3{W+;5wIjmoB&k8gOlEEEFD}biR5c6$YqkbY?ZnOhc)LpDHK5Qu7hjRDK#qNtOqKa zBPyO?#-~M=;NB%lcnORH#A0@2sHu-c}XaU40(wJi|*HqfH)39srK?+Z8F#} z%i@1s^D5ub;vYn@Whv`H$D*53U+L8Y1J%%$|bl7 z3ob3fr58}S1Q(~lWrc9*15_@-h1o97y_T=^y}72~l)%q)GrdIA`Ey+>GR;Fc%@Wj# zUrMk!{47B`@U!Gr^mSL4ZpQ+sXE-hC9WBIt*nVn?J;L{BffcE6bqxaa76z0BP`LzK z4_sCVmtH{S5;U7m&RrHR!7NCsr37p2X9-r%&oU3eg2w5W^7O6C1UKOpY0BL8yhO6} zEoa!JBt~+X$(|R6ON$g-0z4)I#bLnHOiGro@awE51iVz0Q0l;7rmCPPQP%`KF1$wp zQEalPgLe3@^`CDc-8U<#38`*{YdEnEVMeyaJjI`WVXQLQaCLl)>Bsp>3rK*6giCO~gJR%FXn_a0q4XRFFkuiQB1^Dfh#!fp70xUd zx5kI~&QZSR*ntH1CHYG^&D>i!i?O**#!yWj+eI~&iL@oa7A7UZ3JGy_s|~t_(;mPU zzLx|XB*b+lM$MdnMyr6`DMqDWKw8eJJB3j&XmHA?PO{)>ps0yS+1iM2j&ECfOMUIq z=I6g~>CN%F=SNXZXH>iNZMVGsrZ?2Dcy<)kzASp%Em2h0O4NI9x`~b~)JuY!OoE2z zQG(i~CVdn&$`4A|Bnj(ls8WmK*l=3>5=#GCx_y&jdDBhz5L{A6w{E&A;qk0Cq8rXj zpKXhN_VZ&(SD)N$ewIkrMHz3l%&6e!+>%OkODYlFTSmO1=UOgY#Pe>6QQGtGif)dd z)3AE^|M4>~NNREW3*L6i8($Db%kLuX@ST+;_zUWzn&%sE>s?fq5hqF6LUO#Yp2RXF zQ^OT^#SbsFKW{QA%>AF@`!|{UFRG_{by5j0PBSveT8zfP<|T{yM-=_^P1HqR`ZB6U zt7b77ZcE9SmMMx}W~5bSw|7?kZ2PHrhX;)Fq*u_)LZkt(FmhIS5p}zESC|T{}J^F+p&^0Sa=NXYpIJ}wR#;9;{RIn!EJT5 z_Ykx>>+8resZ!?FKR?SRGoM$AkJmKRn*QGK4*Jjh#jlJT-;=5V@=)Z>Fq5sTZ-5=F7evEO= z8yc}>T63Fi@uqm`QIo|~Y}wNP+dz^`bH}fUmwww&O?{V|TT3sR`&Z~c%l%{VbIrA- z?tdmVT|q`u_hVL^vx@JI8y{g@^HwqIn$CugBE?;CBi6BN?rHoi65pN}e$CSV zV(NB+$h8*zxk2Be{~Er_N#pm%&#R;VtQ^B66k*Ep6O*RVav{=h#Lugt|7@BM(;dQ; z=EZcoww3;Cz=OH*_V{^C^q)=mvvh|r-Il)jGjYRu@LU-;jxnz3*1EMX{bi!on(~(# zah96$mRgZl5-;-?f4OF^Ii830__Q3c+ux zH?Av@?`P`o7W&Vo=-u_N75ba&*9d+~{m%=2YyJI#*Vw#K?MsQW)O532qtn`lO=B7H zYFE*XhUcQi-WJzBVj8R0Q2RjrZcXj5A^Z{u=WCKGPTSzYRoqvrRs3kJR`GXhwTl0- zR;#$bR;&226#e&VwTi!At5rNut5y7iTCL*8ZQd5DOcej2?LGpHJaG zO{G6tdq1&A(*NfaK9oxHpHlQsrRZO^0W!(^mDICg?gW1=mFA#TTtfd$ zt#QH$KAe*6NUE$qN!9UlsWe}-GQ1?BzxbB=pH7%Ox84{j|7f*85t}|{b!8cnv%B~xhM7PwbLYG-AV*EH&@J~{@xN0%;`qxBO z2)nM%j05=I+ijup^MiFJ((}E?tZ@9}!#0=P+i&ILd!I}v{1i(lNxxwUob;R3@_*0% zOzQtPsVbib6RXUmlkAAChfVtRj`)-2{N~cn(El$@?%!(df;-WzwSP%>lC-y4Qbke1@{~LAHB0o&1Vwjd3N)S)FFTy2jjKK|csVKbR8qgI1TE_x)CC7VZ6sViT^(*q`qt zKN6uE67#&xNNWDZDTc=n859rO(DyQf%^&?XZIb?NqEPy`2}tSR#?^#=-)@;3{-ZX! zwl!1O#-C|JqTgx93N+V^?%202rYU9A_L@{Gvp^Hy(olbAJpLAwMrSKM^z-G>y@p5` z-){4?o56?qi#OHZs)LaBoghD0zs!<;pIma0K8uz$t*U02cr*6L^I!tdW6v_ot;S2WSQ8 zAaK_z{8|Ih53m7X0>C`CWSMOT*afhcz$@|4ppn3g|B}S@G}>Efewn{D^v|+*ju`_+ z?T1YdroZ_6wa>pZp7;X&yrcH3^ncqq>r#@tW>gu!r1p7~;s=J@-p3PWA}+b3HhG4n z?e0_#JHq^7?X&KTH}w(uj@k$4f04r6y*u9Y9-BcWeI?PYaBl^81A$lendJPZiMJq4 z1z?+5dzOL}u1O~q7L^W=^2+fMRXHT(~vM(sbgd`aX@b|-bjF$JZvw-JJMcH^UYPXUSHrALkIn3(WAXRb0CN?2Onf*F= zm;hq$n~7m-Zsh}vHA#mL3 zyB~@scg7>u{iJJ96;-wpOIwQ~syu_EiZv{XDz-0W#1l3DwN+l-L>FtkRh_pz-Ffe* zxk6c9v!o7v;WdBqM?d=ZKfK^(+aI`l(7S~niB?RT*rR=&Vh+MhO-BDt^~qUcPFAO? zlFwGzh-iC(NNInujM}*~Ly#&b>El%q$!d0nh}7nHSqf8GUAAhlUP6~m2J7@o1K7K6 z+yEw_C=kgqCQq|Wl_XS2fSY;pR28mhcov)%B}2c=!B*7}%M9R>(3UkVGIxt5(nPPLJ*{rbjox^hk}QD&F*?haukB zbUKOJ;!L7`sfa;#^x)5?{1}rbGR=Du<&SeN(l{qQ#44s!3p}0Lj=oYvBV%dFpN$jG z#AtLKOsn2oOsi-pG{0$;9-CQ9h8#a+w#Mvq(QJiTFw0)paE`sOR?|P?cVhSWovFhg z?@Ar!_(f-v@Zd|0G&b*holU~`I-7*=t*_oBd~bdACZV6ddebnuud)7pc9T%|@E)mO zZWUn<5;^07oyoXhvdu_J5Y*f6P2sYFE06s*(-%|W_vrjZSvl_R_mZIz(KE~qQ z$a{w}h>)qPY!b?d!)zkjF^Fs{%0{Eio@W_)%sd62VTfq@hb=E-|IjwInJQc0Z6bCV z)1Zw2dpFrC!8W3?nwI2tvPJ7`4OGpcn@qxFYcbiV7@cv4adgHV#yKqz%U0tIJB(E; z#kz)M7l=o7!_cbq?szoWD9l_SrhTFr)*9>*GHDNcP}S?j_U;_li-%`lFWy0Fwk`cM z8{nwnKCx+bu?tBCV4psTXIU@Sm9hoje@u1j^rpu3wf{K7!Y=w&dd2obH*Uz1P$R)d z!jS|hiCq%SWSw^*1JoM0tt3EIdD$}EGaHbBK-F%N%^axswg#%q129Vr6C0&cb}UPQ z<}O8o8N<`{djKXC&!jdcB1>GW+7y{BF3|xP;V=<%u&G+{-A;Uq5M&G~J*O6>wLv`# zxYBFQwm1kwD%XQBsSbSo2BH}c!X(=%I>Lih(65WoU#M7O5;+0I^Oq9FJ z1jxHgaJUVgJWB|j%@%ZB zBRpU97dER70@;9T7Bn;GiPlc+JaK&H)l8FUw&~(RtY%g%V%mU~aojaE`?DTRW_?xj zY&+|tMKxKGz7*k!UN(=M5a$<$23p-kUoLMO3P=4di&o1*nl>od0ln8})@93U{m ze@|EI0Dl6| zNDq~~_T6S%ng6=t5+&@4dur)Rid}IpU3$9WKDzXF#r<^Y>x$RWh4LlujQe={&2S&L z$6S+F>U`WDaRoNVS!cp6rtJ7r_2%`F3I25bGAba!2Wp1Ag0^{tCnhIL49mW4RoMx2MtulRB25b@*AA>zlK zL&T3ehln4y@7a49IA`!Pt#G^CKV#pgSM{bL^A5rIFYDp)WZa^7$DJwU}b#6ZPiJiN1DD)YH@aV>z@lHuI6`jJGg-CHpN*Uk{IApQNGd zLcMcIhMZ;)st*a9L8{$;Pd4IZI4k2(8HUQhRK~1T1JfBMC~K)rt?$b?8f}g(%y6*R zb_jE@my+0><~eL0*p6a155_XiK%2XF$74^!6`L_VG%aH_GrXYMEZAF?cB8q99Rbn= z|5<}dA2w54U%*3Vwv?y*abmG7>9{YUXBUKOMgq1w-$hj24*XQz%k4yRhTdF9xy;#7 zdY6^$%x&pM9P9`=y%H-sf`2uN7T}k~e7f$ZC3+6+K zDKGT2TXtfBb@1|yWIah9Ir{S(E>OzSPF2LTMlTCF*C1*>RVz4o4pmnz+*nOiKl39C zH?ovt-VWug;3VNIy@E6LR2^R1H2dMTz2rq~EsG$i4)_@v1Zg&$SVC10G=ozKf;tv> z!^|Pkz9h?C5QPv?#C67-FGI?wk>RU17e*qm(iyuNz+DS$5yE3sgD+`5U`PrN94&EzVi*$hjOO z3tOh6#}EDFAGu>U{fNRBUIiWhYkj@#kuyK{-fXg`)@Ep-A?xMOx{zj;{^ECxjnmov zxbzOXR6YM~@2)VflrH61%vfdAWd2Ot;x>43gRaiJ*nYsGT^>YlX-KML9z=h6WS&C5 zqsDs#-PXu%{>`%5B#)r$x|;EgEJJHU^~3b7R*vZ37*XRFH1O-dUyx9xB_di`iXXbP znU@&<1z^#GOnENAO9)su{0e~A0lXQY2VjUmyV18TeKo7VXucgU^Nva5ww;a6Eii3p zfq93w1#c(7-u14{h9zET8Lw;5C+L!w0?y#?hdxSx zwyPXzZ#nF3*iAtX+X+-1r?IxSq2Yyh#shZtHe09~u%fpiR2fw?(LZ`)=_;!oH)P5D z%%rM*@nO{qrS1Ii7aDH9v-Ve`Y4b|yJM1t~vM1BKVID3*2~zwB<&5oHQRz*^Z>8*3 z7}bjKF=E^uLp!{Z-eJv@t+B&eW8w@~Hkg-30P9Nn-3`A*N^CL3$FFVB4}`p?LB9y_ z>IU=Ckt9uLgZZdQg1Z`qDH}V{bq)8^5B%C-e@sYbi$UFI)-M?-P|>bmS@^XOaU1?yV_p}wUq?~>7E(jM<} z+T&eLd%VkOk0iae$CewcJ)S&Y*J140MuWoD8C5v0E|Nil9qA;W&H9ywd*YHw9RG^7 z(|h6`{`KEz{G%hRcQ=@?3-K6oHv;$W2J=Cv#69k|cF%6@w^NSnBlbp%W&1nUKc>cv z%R8mx9B?|$0jJ~qfzxsRprQIjJ|B1TyT3nS?`xGlX?^k=O||HYPu5xM&HrQzYkTpe zxtsj$q)Yr69v`&P4I5%Q2}p3MP!el^Zz8G%KW`aGg4L8j3;AM08>!EIw&q(_PJN;6 z_ZpIqgxtt)^f}hZ`jX`}IVUA+ak4Kp%Q34<;3IoivVtdDRQd+fov&1G}U-_-9udit0S@fNZ zOZ*Ai$7lNziroRM%t6~Tm14iQ!k>IezqWW8SxQVhfT>pXpEdk3@Saon|hQVJ| zYn7>iQmv&u$=kKHp2sYtSzuoG*beVyKI~(u3$aLH&o}iZixe}z%s>TQ&_Skb^UB7r z{hXW^j#6LX@dMeL>+YmaCMJOlAGtCe!FIOPTOzZT0`c0DbUy3;URw7uS_4eJO4n!4 zOI2q#iSCa3l9fbVV4}yeb2nUSfKMY{o6R(X1!m3B0{LKzwHkl(s_HT9!?3PmsGG$5 z^q|OwS{iy;wa#JiHPa{cX8PEjE$1meex)7u#vbb0ZK7F*y0$aVG}Psr^sGiP)SYv` zc%~0^tsgM~dLh2tWxadGXS-&O$f<>(JnwA9*g*oL_i;dfBaOb&b!Y8VvXMq_5YLE$ zCdAT9N_aob3!)dzr(MfAgXmmdm5@9+m-SM?{M`Sym~l2CB}qLc_^3bD%2YQyH;l986605UVfg8NO-LfUj!v+>TXK@AR2% z^E?@lM85UYKsal3ocegBteNbi?O^M3s>YA|sqa{-9Y41Hm6^u3saZVFSk~5=Rk2t~29v}X`sC~T zZ_MYiZA_fwVkus!kRAj6pcn(%pkB38eb+4S0I3=X7AuytN}$8vCpHkw9P?e{ZE=Y! z`!mOU2gsA;8}r>6Km2UkcPmDGtguv&?rQ@HsmiY&%`#kkKNfe#$smvP?*i*X+7@oYIo9^79DFC`&a)Y9m&&iuQn`&2 zbycSrZ%!7OvJX4jjI-~B>dBH)wn_{WqTDx(2##I=ub2BD_@{xe^E2LJGD{=n00mRi>eGoV6;#TTEM5$u@Y7 z#SClzb3Ee@``2h+wQ;o#Eq*NyJ{6(M^n>erv+8;aU60(DQ?n-)y7WocEzco~dWg&_ zimx~i++A@V*t_C9uy@6IU@yskyWwU2;vd@w^7QvlEdQ!!@Fq>Vf1$S`&^rOmBX|-x zDs;mJ4(G``ol-`P&#~TqAs?e_$Hx|*%#SR}DQP*5A~RB%h|1Jd&ZW$9uta90GDnqJ ztIT6%W_t-UTXP)6YCP|D#FKU|Wv)T}&e$HJw%PQJ0UEEK*wcD4T{Uk!w+b__(o*g+ zT{Xv2?0s`krTWELWbJx{%VxcsNXgl)r~HHp7I3smRRO;GWXb~1O^b6W#&g;~yXSg+ zhkCV;94DK_wYO3AY`<8*hxwX`XYyIjYxyvrEybQEf7`_fD`D z&+a9C_IexpW*kxxItV?FWl5zgF&RN!F9dS@njDxXFK7NW20kEPuo%JX1=V!w#qfxzo;4q+Q2r$ zn^fmHAbcuLs%T`d8vE@*=)M+_2M*g8vElt$jrIB6>P5dB9l zg>9^U3FHn^=SJGd!MI`BekitJ~d?%&nH@^L-QQv%d z*(PeS68&@IU(*}b68!%*K1L@=68z&-nyZbkqqGS2#I^E?Y$NvMDd#}W)^R@$&wpy zS!BwUJol#Z+_y-pQ%*QXQNu@Llbl$-va!}wD`~tVjlXYbiK34*nzt(h8~zFYBimpt zlrW0_#AZli=Jbj9!<3mheIouORfxqt6epsJola3Rvz_i*RBflb7MYiyzRVP5{^DJW zs_oQIZ{IBXN1x;LzqKfNv*?$IV29Ix4)Ff~d>`PS0c!q~6E6k072stAbfEbv`el3M z8v%X};68w1fOi1=TYwJ${Oko&Lk$E5DWc(RR$(5dYcG_NPs^-WlKb zRU-S}%l%~BO!w@Ymr|8DNBr7Bqf?F1rUv==R+FR#o=v>#T9cKf27qE&@8tCf*ObSP@1g?PMI2P}xzlV5h4@vH~ zOAq*n+XH5?_v_Wnwa489BfJ;je=*kR8=LJ18)xYU8=u;KFelL#wjY!hxF3-IUu?`f z{y7^L*yXQHMd_cnK{p8=|7$ARml{pvN$5SP^u0E!w^*j@QbGORRM0J_g7kIfVQ523J`s`n^vpo)Q3g9e(_RoCLmJ`MMxicRlg7sP_0nPxN2e<@qm4Nj_ zONb1eRIj>Uh@vG^pt`k~JkerTcm(0SU6Vn1}oX_YfhtDJFKz98yC1QQAc?`{j+~&jU!GzuhFphZ>ev|C}4%TlZ<wLh@>blex9AvJ(~y?yb$1afL8&$5#Z+l?jxX~{a;-dw4hTES=^N6 zPFVmIS9WdvRX(TU$4?vDADAVyKk(Fs_Bo06LyDEUa{EM=N5>b~9Z6{4mxT7^UT8mM ztbXRu{@U-Iv>n6#*A=g$FG!lNNxsj1O>%n_z4n3~za?p^?+l$t=S=7M)idck{Vvbw zb-2A%*9X4nj1Ru(j3>V6j3@l`)qeI%&UoR(jGgty*^h1w)h5=Q?%6;l7+nlpdK@S|x?A5C%kXo^#kNQ3YO z?Q0WG5T0;?@Iy`zerR!Z5Prz!*C6|j#eYqM5B>d4d%yjmze@Uf{K(?uk(~Ds!3N#; z6VQc@f8eg^FSwd@R=eO>wT5abvb<^*T(wE&v#L5imsQoVS>oE*tgEVnGpuHGqIk2a zsx{d`zidr+1MDM^N+8Rvs>xqtMQ3Z$s@`9*uF|9}(JWMp+Et?Y=yn8^%d=v=@Vf0l z@$=MeyV*4`fAPCnwa=8@gZa0`6Wu*fm(^typG>g!T9<-v81Ch{P>*ezz1BTpW`vY| ze6M;~kmP)sxo7_3B=zd_C}?$h$g?^<%2}Nr*sxbWoc6_sQ@;3c$`>bzUT917F?0G_ zn$y=(oW7Rglq59wl)?O07Bx1^ zb3w_UJlc(&9QD_tf4HDCwDiV3S#0~GWRB)9KD;>jSljQwP=62L(*R!vc$|RR@Soq< zHmof%gQfY6TpS#s1^D#$-1God+Wr=zi<0TS{uQUJ3ETh79Db*n-Pe6+YIjrg`oH`y zGv3oce7061$R9fq>W||k&C*y>~gV9;122XIvq%*BAEKZJMR?W0*p#At9rd&2d zwtB5H7Er-+njg$x!86Uhp6L7_;u-np>WvliGWzH0%^)ZlqkXR4Or3#EqBPbXHe#|T zW3)eWdf1;iJ?zh%9_FXFJ?d?LM=bfTg|6{e*f#E^8@7di0pMYP_Yi3NJv(wva@vfa zuTPBXGjzjd{5-%{0KNtAT>@r{@$czsZRIBbjs1q@Yu{~lP56)28{?JaiYPs~rP?3G zrLMS_E^YnslfvXolvqqfOJ=^Iupm?(W?@fYl-Q8H2b zhE)+JO5d;wy2t33)PQ`pmH5}|vl=UDCevEfOs2J{nM`Z-C9OsIrL|J?w{KR7_01}= zzF8&KH><=-^0lMY;%_Z}leU&GUz9;oc~WZniz<2kVzGHr13PVhQ6SUA;1xq}NrG?{n{YrmULeSmwS)XD-#s?N~B#1{bT$=^`6Y;tVdb0VVs%NSQc; z5o_MN@{m2$B&Y*?*2fOZna;)l~tUFMv`X?(|+t@hwDY}@b5nowc zPaijW2a(%elXBzs-U@nIR9t!sk?$~Hqqcu>5B+?3bgv=q+ZMk)$#bjW8ege5T|RCh zOmC#BUuHV=ZRUsh>!yD!>%Ta%{YxU-PyW#+wEwl4)X_~#Y`kmw5lPpalw|KVo4fy7 zUtcA%CEj909=0NrbeXcMNGZkE-BjJ_>TWVlK3aN)imp9MwOZOnV~$#TAi#=H{8wn8 z&_JPqLIZ^c3Jnw*C^S%LpwK{}fkFd?1_})n8YnbSXrRzQp@BjJg$4=@6dEWrP-vjg zK%s#`1BC_(4HOzEG*D=u&_JPqLIZ^c3Jnw*C^S%LpwK{}fkFd?1_})n8YnbSXrRzQ zp@BjJg$4=@6dEWrP-vjgK%s#`1BC_(4HOzEG*D=u&_JPqLIZ^c3Jnw*C^S%LpwK{} zfkFd?1_})n8YnbSXrRzQp@BjJg$4=@6dEWrP-vjgK%s#`1BC_(4HOzEG*D=u&_JPq zLIZ^c3Jnw*C^S%LpwK{}fkFd?1_})n8YnbSXrRzQp@BjJg$4=@6dEWrP-vjgK%s#` z1BC_(4HOzEG*D=u&_JPqLIZ^c3Jnw*C^S%LpwK{}fkFd?1_})n8YnbSXrRzQp@BjJ zg$4=@6dEWrP-vjgK%s#`1BC_(4HOzEG*D=u&_JPqLIZ^c3Jnw*C^S%LpwK{}fkFd? z1_})n8YnbSXrRzQp@BjJg$4=@6dEWrP-vjgK%s#`1BC_(4HOzEG*D=u(7-c718;hG zE)9zHQ6)9pY0O#U-aFWsZy+o0^lGM!Z#g^Onuq z#Wft2mzSM;L5mhijzsg3Sy>~~Q**QObCOe=Cue1}$jiz~Pac(&mf0dbeQZXv?3}F8 zsmXb9@yYF4wn-f^yk&B7Qp@)7sU2Il>5w#{!|?c4E!!oxX_=Ig5+C2H!-#f`d@aT% z<+K=`nmHydGq=UKtei2q*-6Q%E&3&m%uLN2l9iK_HEv*1db8}b?9}wM%+zLWTBMFo z%E(Snb;HymePVoz;rVIlDJ_ySlE$RAXx^OvOHUilSDGjP33pI;YnGIg(JsE(*bYg) zzE{U5wu|qRo|ci8=S$1XQy?QPvu|qV$h=YNEO$&=_RyTPkt0)ceEFHVY4mg{acr8H zm``7AS|{fD0tc71Y3<7yo1U0TPwz2L&&nL>%T1e@O16XPGT$q?P3yd*;pwTQbIIVr zmt2)Nr1#Z55{F(jut#E|FC{g(UA%KSGb^tz2QM|nr-GT9G9W)MJ3r4iA}u{#A10@# zCgr523{`r=Ck)KX@eQBAVWEFpwew|Wbx%vq^NmZ(8#OQ|bwt|ucJX6;`MGJCBYTX` zQxlC8nn&j!4R-=ca?)^sI3l$gGsq#1Z-F>50SB zvy#X7vXgT1(vs2>ohv?y$RT-2d8tF_$$ga9ayW`pb28Z?i=Hb#H`O;PDR-0;ZcdAQ z3Nzo5a&l76gkXHDA3G7=LB}_L^G}9P$a8|pK~K)l$w|%38!%!-Zfc%SMc~j0+4?a! z6#R?ayqwgejKsV|H#A))$b-ik64`1qdC)6scvQ-TB$V_3(L_M8D)nV`!-JJ*$ zZ=|nzZ|9opoRyuIqaRft(bw3d^kAgqj>^h$vtg@t+EyKKqH|QLD5dD8OiO3^L_LIU zF3CwA<;zJOspB%=u^lp02cccOR#gX=wTll%ss2S;W?J456`#K0`6EV98R2a1OT4;o zyNuKfN`!%9FKg94J1I9eF>5$iFo}GwNHTnv^7b>z94l$@NJo|==y`L@`zxM5DDgiA}IqLAWq zs$eQS6nGVA75t2(@lIKG9wytDk(8G_%Bhz!MyT(B>G`<>GE;qNsT4g)naPy;J}2At zP8qMN2p_i&zT7-2g}pOVQpfwKlsXr(oC1;M2xevbMr7rTOUg;AonxabizlX26_A)t)lp7TdajSp2Ipt`C<5{`^3#*@C`_ZA zu>10|#-wJdS}HZAceXDvlQa|6V^I)O13{omxm0^4kLt%y+<&<9YbX4=I8&14=^8nm zB$Y-ts(PHH^krn_r1~;b$0-5DsigSQQpT&Kpt7DqHEg$D>Wr(Kfmyj}Dy6ams4a!z zhWymbWT!&vn>CW6HZ3EyE!Qr&&T$9ln6o5hH5I@CnY~EQDHJMt_~OXaViy^47<6$Q zN6lTgtn3LLIFAmba8d^5FFI2Z?Q`m=aXA#lR6?ng@Kwq_R2j3By3n_WF3QPNR`Pt= zy)%8;>goB=N%3r|d8u|tNgFXj{jUG;Zdn-_S(#nc193ePP}3pfKx$czrFdmP8H_6R z)L;!AD2=Ku;F3uHa}ZfhwL>aOoTsMpuPX;Wcj{ebn4XoC!gXiyDwuN_H!r@v?&S<_ zV4Uik6EqOg%&eRY{{2u&_wh~*oT74Xnv&=C$Ei%*0;p>NRl0O5rK($M1AUbH(kD>l zdkQoaoPnyIS2^E_$}BE-$)i$}$LQuo)xWAVsv~us@+UhE$=MTpiB83%eF3V*vM1>5 zPfk?2FN<@5lU965g^UWL^DuO)0VA9g<%^f*WKo3~$org881uKv-sFj;aoeA$Z=dFr zbFQ4ZIaYyI5yRGj%;SkAa%_@Dqy{1@P1Pa3Eaxj|mzv^4po$tNR>(8Rpf-scLnpj+ zKtKhH-5wpJ#LO%mjO=V*x^K9dOzQS2S^4x3oUZhEPWtIPa`p)ZL-`?GMJdxPa?aAI z;Zi{p48>cyo=S0_h>8rAUQb1A$f;0zf2v#~om1G>4K@XKL=xAl3Q}Z{6Xdj#QhQ&QP)6bL+$L1vEk~ z7cZxtr_}kC#VPZ;#ocif8IH(Fb)TG1-Eyx&e(MkD_82Z~&PG?xr3( zIV&?SEmK#9!An`xt?8jN1pg>EX{?ix_{5WQI0eC>Brs^HQZgZQYQGg?@mdhE2v=U(;!z>T&(1{ zuH5QylIi=AhcGrRD?gW0mM@Vf+dYtVJk_@&!IYi-~E z>j4lNf{N0^P$eb~_LZ1at3-`5wH2$XdAR;&yQccMjE8m6$1Oc>hPZ}@$Y_m^2vZei2|(TgfAsl1r)%m3f6?fdd~-!e7h?kTy%zc^fl zVXeNl>O49)jaDp~9M<+J{5_Pl!WKDdJ|AB%S;8?u*X!x)-Pufqg~F~vna{S&(3MET3>V1fWyB{vqf}lhL80Q>+5XG*Q1t%EiOriaeN-e z|ImkRC~mq0(xuFja*LysO+9U+;(cJ5nk`+MC6S9c9C7r2FKu&-j(vg+hdo`}xcP(g z#Vwjuji-~-#2wqO*7kYPr?-zIlLOj5n~tS$v1Un&FZz7r{q)Zngdtwr4?F|=dL)^m z?T>LBUsUxmlZmFx!_Y~@`E&BRw;W~%; zfWGe5#mv6b%zX}K;T#A2?R=>;iPg-ts_hsbQCMSbmJbJPj1mHj*fl3 zf^`#LTcodb=W9kixWUjmHjm1&uL_m+5+zFfQm!n2adD&nOPrH&{<9y;Kl@*tZhnEP z(7@CJJ(!*uX_lEXrddwww!?!nBDrcxqy>34JYSGUGZLBkK} z(sK+?%gb#+9gw`V5fkX4xF71=*5`}RErHKx9kol?agim$!YP+{`RBwN5HDl!FNimd zOz>OtCKlM|TVL7>$t==!VU6YRQv>#0)w;|>XS)ya0XzIGk!8alMjOW>1;esm);Yv{M; zvy4?P!H$_>SM<}v`K_03Ea1D(n;4$Q%10?MWoP-VJB#1Qu4z@G8(AqKxA9wBNxPcg zI!r;R+RKg@pzg+DEb?2=_$`UA=WE5 z($k!nMBHzEOj3=k!~(ma_0~;xAR*Y{1jW;={Ux3Eefa5Tk~!%u&Y_|tn<`O z33d%@dRU>|wuc=vm~bz$UPO28#=j&L{-ugL;>E+IBCvo0@!pLrwLyiht_lPFZu9sA zYb%9_LQjFDaPOn*HLWzdw9bjvd;Ii(!9Y^LPWXuI3Pg+(koJCyEbSO;W>|q;qo*B1 z33GTH1(>2goYcM?7l_Di)*gOv4ss2O&+zchlw;_!W6IA*X?A#AfnDEkEetQRYxK4o z^|9Mp6Sa(rA(gOf6y>+}(v9gS%SlkBLV_J-?XoCxtYHauMQa9yh%Rp-DAnNk^XIHy+8_4*2_N5 zug}pVwzJOXLn`*&_^6TfB$-87$H`13ae3u# zE+m5nL}KYH!LCPXlwkdxF4=xc+(J9jPr1Zy6rM+EOi${!c5@MUit^e3IxMt@6xnr( zY#)(ArwCBy@8Oh@;+gy3Rsy2?*%iV&ah$H8P*ZXqpsXzwhw#IJ(h$CiQaSudTpCmf z=zGpfKnH&TW!aFdUUn*Fuy@4VPAyh1N~;9xO==2NhT!x*#~FfBwvXR>IZ&=_H=L9) zAEKgA;aiU017lV677~CZtPm71%2O|nrL05^T?Cavqo|SiCMtN8`*u=MtjcAMP$At< zqkl{BqY|>lF0dZC=?qJWDkG|O=gOlTJ@N-s$f?SGj2rVQcE#RQ6;i!LC43o?F7$Nt zFBQ53VnuBDI6EWnQOQ>-MRxPPloAyERAVRDwG-@eev+`tQk!-vWxj*mMco75fXeO) zzS%#>v?3o;5$9v7W1gUsCRRPV$r`tg3adv>)K8Nr;i%=9Ng=YW&r1~AjjemBwdZ3} znnSJZl~f=3!}F+t4m6l~)Vy+Ha{K4hcho%2p*o2eH?&mge?Wp)TGtkkL-Jb*&fU8x zBgSx}NA>4r3DmYGSf7$9h52Q!oSviOxU*{r8wMLfdWcgO{ZloBoG{N&mHeOC2y!cZ zibk-|X#@*Bji6I5sTKJG2|Z2@ zDJTYqy~SYFzp5CVt~K;i8(5_LL2}pGNeo{VY!wfmrf8V0;yEY|ZcAf0fBy|FB2`r{ zjxA8$+C9rs-_%A7pP9x|i_k)7G$0|CDf}}`VsEoHIWlZ!?U_&%rY4m8Q9X)!6N?@*AG6?NgcSMRi_)N-DP zq>+m_W8`8^86KeszlcXCifD8qA!KxdemTEPLdf9Al+x;lpK|Q{oL9)Pb6aV8(4X=O zcp%|RJA74Oykb^qaxbP(x9ltGCsnrYEm=sN;t$D_q~E$j4YNwq(_7_fK*Rb-Sv^Wt z5!U`2)p&`uaAE?Dl+>|~*+oRh7I83(!SYs_BGqZD>F;Zo-w-&gOg*aS=qKx`y02_) zr}{s_+Caxctmnv8XlgB|u3vjAiVw3X_}oixM57p`cmN9;9KuxavWUBL>x|~Ngij62x zq5H4u<`n+H4$3LJKBZ}Fgog>IPAH&*Lc6lxs#aiE>SI@?u`TN-8WOXL@>H9^qpwuP z@1=34_S}7luxNn88F-DD<{4|HDlnusX0`;U3X)SX&*e^zGi*#jnqP{}z8FtcqB9EY zx1OfjpPKN^f&dF95ihTOJNyF#tr>QaT&W&F~|W7R*>;G=3JbmiWT263rrq`_d~+{~z^ zg1ar#X|zlYQ#%8|%D#{W>WUBg7U-dDD!%{LHsF*)y`CQKUqij8>gE15)O*UI-m@FT z3OLZ@%A>KY(>TsCx4==TGT+&81F3$cnpF>#Qy;vLrbX0Hbb-Zf?~mjRHl{JD@XqQ` zjX;ra_a_cO*>P5Bo`RuAhEp)1z3kxFbJ1zMGIRWihUTf?#WOPTC7d1@&+Dw3M7@kg zbe>>S2da_k82ty2Ou1cU8lvK^vNMeAj91Yx1x?^M$KGx;9S2-3au9H@`M+Y^in_DA z!l#I^jdQ2*$Wc;CC%U^>~?mXSO=&|T>;|x7< ziAkUVDYuk)x-R6121*kRkDj79ksIWhnfd=X2&GF#uqi77Jpk_@l$w~q(!@DwU@lk0M|7acVcpS|@J`r=el*1kM?DM%*B%22~B=1ZHn&?#7*7amJ~sku0Jb zK@Wvcdue?&nd%50wdU5+QzcNs2O3NAk9l>29zGHLU0OHbURMENf4D6#o1hAq2lu0R zJcb7MSCUsAWxY#{lN$4HZcQamoAh1^%mPt`PPh4^3md%NE)8GP7`C&*;W!@bFq_r? zsr3zdYR5Yo@h42}l($}^6sKhVHIN(sZBsmFIA_b5a4$_|2FGiar>VM@KTS%YVnhRK zQaPfcvLKww4wsk4JSj@Y?2CpvpnA!WP^hR_@_M0vVWB$X2HCrGi2CQJo-sA2h0f7( zq5tBkA*Zzsw!~f^*L&>scPSY{7AX}g#8mLkZNq%#<=L4fI`gFxy4azfU&unyl{Dv3 zF4Bq!Ye~)M8#L)bH{4j7)+JHnl^5PQWLfC*j{VrMrpmsE?KeC2TP6E<$-ZLbaT=oP zKuO~)7Y$Cx(ENvOy&72*7G=!g{9R4OSg-m#t4xditf{pzvdDU9B8l=+RvIjPoqT{O zT0y!tkGgZte2toUv8mI#j%ILp!Aog6ewvQ;*rMIQnxWR#C6NrT-=z8Yk4sVaj~A6r zv#a(9SzRg*%(lGEZbAd5+;Q~}`a>Q_U^;FG^*I|@GbeMTwkF(!x09V$zb>cWAaLdJwHc%jKIs zMnMQ&hvpd*pvUE@_rl^c?_o`82@qPIDb}&gD1v!K%nZ6AxuUnRWB>I4(G#qw&35o$Ki0Auh4KN*6^Y^17Koe1_9C9hLmJ@Dh9U{lPomGuzOh)pOR643= zP34lhix%Li8B(fa^?sHC}~A1^R88 z>5rwST1lr=sqdkBG{$;I^`!#cpyG?zVvgHo`q-`e+i`tqDu&ctuT*PCxNz@RZ<27yWzzJ3V|ANYf^YxiKbcOEvZ>O@MJVZ+c{;FlpT`g1Z3~HG_ zX_V!U)+(xxM2%QAYX#LRHLUljR%uK}w8euKm{+r=xD^VOsXZ1sN4#pNp;~6np5Hq( ztsCrck(WbDPI)|qT6AjWsGL)=bqD@iQw2bTDm5;@VU-LI>?88PqS-NINAJEo<>-Cw zIC^s>NACpLw}_-=DbM?@DS32PT6klZu(FlcX3fnnB44kB^|j#ZEhtlh=RG5>6M3N< zmX?&E+aJuOiZ<3y78Df`^nZE3Rk@Jr?92kY^mA(6%>0Q3fyFeHt%~lvb_r`XEq1MI zeKoPruG!b-l{0F-Tk((uK#!`GLltd%6V>s#6nv@_X`PU{x$0>*z#rxDiXfW0w&s@L z+mlE2EY+S7Q|)TBPiQKg zyBsQ6OX+FtOYMk36nRkvcDeBORKxHJsD-Wq`+vM~qCH`%&3VT}1#1?abhF;2C8g}v zg?RB_xlizDUU(h_oZ5Dtfae8BG#h`KC!slEx;JM)da&Y;RL5_f?E8ukLDj$eyZ-bZlU;S z?zg7XR9;!ysPJG-!4wYhvvia5tk?MVlA@Ea|>Povv6aSG4@3jzwKfwd*j}N~RLmgLcW4CKKKz zr@D@`S#MKdJEH1eQS40fgh1{;hVDEN2d-&3r{2>bFQlY&pzb4efjui`D580x2whr7 z4^Yi&K?!4xq-ue~OmscbSl%#siA76d+7BX=dh|q##&d#O&+}F43qD5+`pEb*S{PWx z;)kVro;tdLO_yi-Smss@ueW-JPj}9eonnSpv#Ll78&zTotz$V?iB6G4{`5Z`J8J3F z8AQvvQj~pPA5Y0fsab5tth3=W)_R^-g!ZuO(8?*=Jm(A~=sZ1yHpp@oV3S6d(sg$s zP{`I)XQ2<3wnH=%QPbK`Lgylt&sCmr#}AwZo@!ev_W^idL3MyAm^`ZM6bvVmDPB~3 zQD|TSD5O*Ji;L}wb@vI<{b$lXLA7E=*d<8rLLX`;)Mef@YW+-;9Mj1! zqYB2@JL+t)rPcL?YRe*p^Bx@ufpF4~R?u#!Q=~KddT;sYK6{)kr)zj8GjC-q%NwcK zXL)Bb6+Zkt|DJu1wW*<{hppO&=C7#tan}1E)ns~b=Lhc|3N8}vqC0%v**KaP=3dTO z?lx{@y+ujaj@FS<#TnRi97WC~xz)pXfaH0)UfwFNM#}M);{x7t%qwrE2FkLhT+_G+ zM&3_5nSQ$FNwqSx**VzCus7j$eyDNaacmm;y2sC5slX6+0mnKGS6jD+ zQML~3F`(?u4T#gSP|^ol78*H{_Z6rPbrD4nb%1%_V}0u~8l5`*%LHfxgSDO7jVNow zO>|ct?QZP19;MOfdVT0=4)J>kIOybOZz0&tIzhfDzh;1MF^Yb%m%^!fc-SzGdvu;R z4xC|=!_)G4)Wj6n@kN1gZdxkgX?afhJ_0r1t(%^}7}Q@)&wo(UL-Xc5fv(z?HS}T& z&x;EJZA($GZQ(V1o;L8Ww#9sVh2C4wZA&3f9lPJol1VDe!6v3VH8GnhKD|v$vAN>1 zv#5H&GZ#EcL(^L4dz%&SyDVa?yD43xtZ#S&1J^p_1Aj#gW?WytbvI2U)b(56Mo^V< zCmpM5uz*@2-YVSRn!+21*~1CG@#0LHA8I)Qz5`Xnx zQOy`lUQ!=EHuy%2&}NKge7DeOoZ2SrU2Gd{u$(t!=mv``(e=Cv^TebAn)#%fFVJEX zc^VAfq`*_2HNJ702sM$(k^DQ=%ltwbiZgx{jT2{{mc!_KoZAg)&8=z9duLvvTdSss zy;i3wLhqe9T`S<3?Ii!nco~f|19AH5|9|QQ9JDk3L3)pp+c}~V^2cAj;Y?{3s{Q_y zDT5V5)6-Q9G~VD@L~^P+;_O~~^Sblen_u%iIjmSE5Pa>8D(VGiv6v)S_7b@4tqPVs zcDw`LTA=W)KZC+Y1u^KhbuR9j zwCZ7yr*L8t*Ziu{qvqFIb2F7P9<){0c~x|v(WJ>mwLQ-%spN`mpcaWcTTXda?W4Dd z@|q#fhV6f*ghp9=>0WdP>OecAa?Py@+&6rke2wPTI_jQLO1(rKC$XudVZ&9_)jB5w zb!z41X_p1j3RUk0A#z&uE4`eZL25PT;J?P~{u;AWV~cKC zJev-c*I7E#QM+<#)DC-0XVPstC!==M=UKpWkJ2EWs=BErJ_l7h4Nvi`Pr&UuhjqFW zO6sr%-nDt!`4*?+^Uu}h;ux5E;gUP~5>~Gw4T(})LNiPuujJ$*u)ivI;kAS`7xAY} z$fyCSv-eTYa^A(5aG}xlKH``}@jf9vcgP$}pr7cB4E|NUgX&%Nh1FKQU~jnd>3YMb z87BK9wfec3i*W|SXwGPmOaeU0pvTC7Lih zR+bj8^|4Fz3whPmiL$gr?Y12D{VUS)xckcTi$JLa@RFYbTIORd;1w*q(x;2F(x(w$ z{~b!YsntN!#S7I7>~` zTS9n_t+iT?6JZUaU2#0?)}Cfvd0CEH8^enXk|{LL1(ue0*4EHE4682vx@Ym_GQ6wP zeBI|CS{g&~{X0Es1NHbS>}p*REzaXNnelp=Gkpm4=JD9U9Nr>ljfYy!Kv6P{9`JhV zlBqY2s|6MOu)2@N<0ae&YpeEjIvpxC?L{#X7)L2`X1zT9Gu0g{wuXWR8H#nt{=k5x zS_r{o%YUHpmKRH$@&zg_gX<&I2+1j1=8(;#=1ArLa(~OG-sVlk_LOf5<~=a{V(!3H zdGWpJlxu_aH0_iM@xIlJITea?wGiV!t=(7g%j^8gQ1v&Ob z$hl~({s&wV8W1{4Q(aD;r?=$>GG*~mY_!}#&mO7uZPeUy+oLKyu2KWlaS<);rD-Bh zMNCTstb@G1jaM54-+$t!^>E-CH<9+QKH`{ikv`lA8Vp`zc=ZY2LSyAAQa_C>eYt!U#o^)YP!K)Z5Jwb`d{$kvv- zDpJK8X&sovHE>xgwt)Vi(AQaNS-`Ri{PL98DYT}87W`JRX3^^vBd3!#HC_BF-#5xr zE44OTtr^@)bN?}Y=(WAG?8g1SdF3Yk zTfzE(-Uvy5lxA{4&whhwfyMqXy6fHy@;xbH)Z{yE zx2ER2C^~^J$IxHd>COMz)<3doF@v?DJmm;=qMm}5bW&bm? z9cWkULCql{8ZQcb_n{~4tNs#DZ`Qh(f=&ZiArE55Or1hu{)m%^1{PQG{dYSKUhwv` zoF|)H5dOPAwD#p%XV0E`!yLU&n?hGZZGNGy`Sc84M*ed&jY4P8?mK-{NZ<61X?obk zg>-=<_-Bg3=^3=0h$6OWSodhVF>RmWU-7%B>GyVHl_#2!!+JB>|4jSfe&iLyC({e; zmbBNoBIOrK1Im5roE7WRo;_NSSf4g19m}E@oUuhgNbbF#a&N^*UfTX?dLhM>^)1C? z@m#zwTD?tTSq5d+Wfdq(oLz>t9?zsO9i$|$*H3MJtdL+WqMd$JO24mA5Z;ZRyaE{< z&nUF!L>E!c?Q7Q`NbiiLn3x|;kx%1xOZa)uEMMDo>8;h2?lJzJeK-+s&!I#*b@8z) z45D{hQKqJx`EvP$;sqejEdZ2X-Xt5^Me`0N#rae0#+&ST%IbY-)MQx(M>v&&LzK#q z1-$Y14-^EI)v12lA59VcD984`Xo{F+88o{|SzhNf=Z_Ha*wys%^k~Z{OyHt=)pcuH z%t7nYGm1!z7Z-Jowp&x^XvYy{t9ZVH-I`*H{?ZBwsd82%mNS~V&Qt|)H$7bOayZy} zCbw7#oJv(4O#xF;qyeDn1MDh2`tc6RKr!sslZqj4$#Wx#wwTi0DZ@^sJlw+ig{sL4 zYM_WRg@Y*`ie>YP1U^Zph;e@8Tvb_|-XL$jedHm^|6OUftEH%(bADPKSb1q>)_9k=6p zbE6c~o6U;&s-pFK+jaV=u+^tsdofg^ovZwt@C$9aOh2N3V<>n&x~7(uKU$I3@l5B} zU)t8sRzgTKxXNj`wwVnV?Z#bKftM*%uwJGmc;&6<)E}>TFo)MB9;9Kn7>k~l^1!}K zK3+y8JC!=z}H@{QB z0zB&Zi>(7*H$pk<^I zTdZX~EVhi+NvaO0O-$#Puku*7=k2SfY8zX+Z6h~<^d4$zvph|s)FjehR#G`9&?Ks6 z#AytvTD0m@E%DY_G=|SpiD(*WEu@OVu1#eySXWSz|2Nkan^j%$#f_@2m|rrquGr_) z75A$2JYQ|@wJH{BPnTNqSE705zdUU_r#!;d!$0jKc&meR?E4n?5!m;oYWZ{yfNK89 z73Lb29RXU%{S2S@tsPWZ)aMg*L=E#gZopqBn^rWmOEz3#|DD{KLTb(j+f~Caq@B3* z8}iw<(N%iSlz$qn%%&##6>=XoX3$?GB(06?EOI5}_!M^3G;TE6#il>nc$O|Ul|%J6 z@iuXrOD~AnmQlp+*Q?PyZn2(Dln22+j9SL+^})Hybl;y$KRI5GqH1FXt&()YSis+Q zM>1(oTWkvLj#63ot^^8Y=B&*RHe-A^8D zBsuKfCoAr^TQi;NpB!;^-<3yB-_%_H98Ld_8{dJeDt7Cgt5jK040viQib}dvL`Lk& zlh4(d{do3j=w}qoO|>(xAk|*eR7(6px0*&tPv4yIbLhwH;!_}s`9AOX=&>Hr&d(XR z_@7YObzJ-fK^LFPFg;v0z44Xq6qOL{wC;=M(NyyG`L!JD$ls^DoJr1-D&_R%5$hu= zy?UsFl<(|t>p|{*qlc~BHg?~yngA?+5F2-E& zgWV0T0&#ca^hKW@pup~^ssmL6aGf%Tdgj3z#nWX`{f_t|`_J#4sBSt>oj*$v-|B^6 zLTsY*X4FTguFp2g>ogB}JMBjC4kVm)H-@?{1vD&UbY0Bidw`4Y{akz-bC+D`uS~B* zz4ypUA@8%9O*|r!-e>b1b<@YF_u1TCDfE3d3(2fnWF48MYg zjM%T>n&&US!l_GKccRcw+4cn*rE{tk-W6Zmv9LCAokLBuYP47J5tUPZq2{0MSWv5B zIu`UUYL7Fa$N0SH^p(v2BmaWxOYL9qPUqXH@>5O}#WW8YvYSDFJ2Nb$*fS$HgU2O; zeg-=aG&o2kI9#Z^M8&-f<%`HphPqU2+)%k1^p>J`Dsgz97(-IZ@u2*n{SL|#vjm5u zto0TRv(|9d3(+q2-m17i>eN3+E79-o8{-Vb1bq>;yPE1Y$^|FVX`derJeqIa`n%Jk zSZR(vP%A;h=F~!;os03;u=!uZ=KsX7`4(=JH=M;#!B@Iztga@AoTic9jzvxs{pEm` z*3&#tXziRp)d3G8#8OKiQ()JmhVaMHG&0KLk4682AqAf9XndP`)l5u+e})}D&F(~= z=U{pZ+Ef~CqgI!S+miC^-COi(+*pD~Y1&4?A|8XJj-E4C=?+mohleO@PjSW|y`z)I ziw{mx{A|3LYR(lrW%FM=2pdPclc|BLZM{Rw^4eNYsNBHEO{s}qP8q^^cp7E;(?^wr zEKrU7K)Vya_^VnUAsf)#i<>e2j6C2BP*WCLNu%3ktzEQDj2f5fs#TdfM&-zr<$1pN zV}1qBcT`+x$^RWO32I>SIGxfO*|{;4iM}39&5qLH8LRh{PM=$;eF|x77R4yXnKJZf z<)ki+;bpT0G*dl`wmOWX+Z?0|lkCzOQRiT$=C@{}WD?WQ1=A#aBY znDy#t?%mUz;@{{Z`L%DUa}r)1Ls7YlEJJ75bT6B{a~ff1?}3Kxxi3cka(U~0>T9bD zbbPQZMUHg?aZ*0FWADLkc%f%Pu7D@xXkt#yhulg1rQp0=0ng7l{c@^2&e0$}ji=Bg z7sUX3Kr}{AM@5>DKcoJF*BOu7Qw&i6&v-_!D5R@hKuN%}VmyN%aF)F@dpv2SCM`H% zYNDH_>3CdU4dv5dw(|s(Toj68Gv00*@8|wDP4qdQBV`cnIXZu-jH=#1UZ5NJb#IyG z@MyBRHD!h19A2S0hZla>n8f35uqs;rPy;%D`dnUUHdlFCy@Y5P_es>O(OE5w5ayA& zLrGJ}H&T~7IE7p&=U7UI=>NT$WU40hOfqG!fAvgqcxRjosg(TbnXm=z65uIBJ(a9y znE8c#-Wg{8o7^<)^21glF=-Ifj8o)X1FDNKr!;tZl zLTWT(X#AuijptE|Q($eQ7T{m!_xyir`qj*IQ(C;kdq9F-(0}vX8u=oICS>$=gx-)q@HKcE@PCE4l+^ClM3pRreq7q;6x zm!tpU%bSkE8cAU{DU^w<7~w2uVqZnshjPcB0&9Fe4QCL_nOZ(|kq-l(mlO)+Y+(5!19tAgQe_&-9s4q_ zS>SuJvJd5seYt?0dvLX~59N-1lxr6FZm;Y^xnmz4uyYS8Df>|V9wlLzuaax#o8$?C z<>9VDj!KuHz03LA@>TYps^bfkeJFSAtA^NDQ1+qRv9BIte?UD~D0l2*L+qbd_MzOd zuN7jyP}zra$38B^ew?xo<&J&b5c{FZK9oE5^+N1hDf>|F*w+uSFQ@E7xntiT#6Dfc ze<*kC8->`%EBjFH*f$BWFRkoDxntif#D1R&e<-g_MZJVCC14+?k1A>Ip1a?C+48mE zuVSC|NzVu%$85)Df>{)*DPNf{wnslLD`3LHnMzei`nu?e`O!a`I_Zx&tJtp zO_Y5oXCuqkv6wBNge&_{&etqoC;lq-8KKfEl(UiLyReuopEOtYp`5Q-zKi***vD4( zp`48@UzcLGe6mM{Ka}$|%XbNX75l7F_Mx0pJj~ZEU^~gv)L0(w8r-3Dg7z-wZ_C%i zd#aAdDEmsrce--;&t_d5?;-g%% zV&9f;bg^?j>8$KSIbXAU>HJmfQ%%{2@*h-sWfZgJlc6e}vqCrn%XdQvk5%@eyqx9p zMbj_bj|v8zEH25M{?Q-TLtRbbiS`96!It{^PD0ThzuMLL-e&He`Fx|QI6r7!!snB` z(wcNx;+<7EgMM{iecvvm6YX z;qLmrpHkFBd;D0}{stA!pkF#v+rLQh7F5@ezAjhxLBG^}l4Eo&+86Xc7wMnOQT9PU z)3xXg^fxH`IQ?t-qUYq#U16+W*Eyko*Xkp#8KQml0-VFaAI^r+zWVBz|8bvdx=P;$ z0bVuUIm}k^*(kvCbQF$P_YL}W+1etObfoxcOE-@81^v45I_s5D@z1TZ^BJf)KS#93 zA3LU>H(S{U{i`>$eK*B}ew1tfstSM5UplO_@O;ICe$g8oG4#n*;SBmeZaTh7Tzang z%0B4-xal}l@t~g*r_{*@QSsbGpZNkQv_tVr0=$eaBG)V4Bfy90=N+Kpzh{7V&_}ft z?;YSNWu3$C)$<1Zf&G-9_;UySAMFda`zeb0d@m}UVEaB>^IPfu(Y|0i?$!uv6c4u7 zZg^U#@CVyv*M61a!S>g+U#{*OY-incEL7W4YJ)v*+{xJr3%To>FQ$6-?==e7Il@t&BF?p;GfXSQc zd|~n(}$Jg>a0TpjC7r#1mjvnPjE{we$LWuU@~I$wqd+=_gLJ&s!@co* zm#*B*_?e{Zdy~h;$nnt7lV0BZzo)8f@2eK%-ta8-aIa3w8bNz6-=-^GGn}{RCYHHZ zKQ2zz=};GN2dn%uMIZCmFn!GWGxafldGqI)*t=~D>*y#{YAv;<`CJ15U#fX^((&GR zDV_7j)Y)dq{5z2UJAnMW+QYr^JPOoTcY%7TyLRUT;BNi#wWLN z?x%}BFylc7-^cOh%~z;Ccl`p^nd^$vcRbKELNc zy!PIDY@riX>fg@#nEkG75AR~|IDMX{zu6!2+K)H5YhRN5K>l$2d+!_XiBB)T#S@?2 z@TcqeG{c##xfz~3!#+-h!si=r*t^`DUd6(re`ki@O?NXqt9AIz@a)mtwRi8k*RXf_ zwIJSZ0pYnN%()Pf&pq+!eXd;|K22-#*DxdA+)F7&yt#aoVIQY2xasA_gUjxg3 zP2Q61_+#>G0bk_F=U)9Tp7{6jO@JQ(ys8r%<##RB$NZ(;dBwf?$MvJwPb-#x^lzDa z(4~ISB_vW{GM*eZ7?l_n)$zj=5GGcxAk>4?A`lzG3;IL^#i@>zD3)c`RaasBa>GG@yz4E{4wqGKtAl? zm@E4!`k23l>0{RM_6xk+Yd-_n>tt8?&}&~w+nfC?*Z()USLZ(cTmJIuc)3@{%Wu)Y zHRDI)kn-Z~2TgU2=-bP^{iBv1eXqUSE|j47)LB(oPSp0yb(U0Q3*e=6`kMBgb^4mT zk>v=P{9+xUCjSxe3vF4)_0vq9XMz1mz^~MiV(P2~+-;Xl`*dC2O}-uQdOBfD`_X_e z2K*<$2kUmt)PDl-<~kFY_DO(04!EWJBc@Iw;LibGMb}HFPA=eY0v@CLL8i`8!0*@N z7^eLI-Cs8O4}fpe1=Y0w5%3Fj|I4(W0=QrI%S`*>fX@f~VqKA$I@19E5b&{je8AKx zr^k&=z6|h-^dOOGe;?p2v?F5L&j9=&;1l#XhN)A!x?KOv0=%sr_b_#C1bi#tJ+vcb z>f8=^d7ikXk7<7o;8pbas%ifK;0FO;r^j8goRIL;s3Y?i0e`iwY=08)$Ip}P zo79u}F2JqxW&7TM`y0si9RXhfc(sPI&P>360z9petn(h=Wg5%&7X$tj;5C}aI=2J< zCg3qmWt}Sk{}u4IdVJ5!pQ8XD-dw)#e8BA%vVA__p8$TDcHqo#z6^NVR`PvE0sb4{ znXP4=eSnwM;m4M&TP7cpofM3*Jw%-Ey7~SzO!?OnP?*UKhDBt%x zz=vNT+s_C5Rlr+yl66u5-vfB}&a%#0!0YLy5@x(z0r)F`{|tDui{$Vu20TJ9(J;d^ z0r2@mjZqe@P%Dv{kH(OyUF%_0DlhfCf#M72LLbKL$<#N@V^0m5b$xA z%KC=@uiR6%|GAgUFX}DxBY zzW}_|RkF@Fz@G=a^3}3V0pMQ)UgsKFXC&ZT0RJBFj@Qcixqv?o`1^pDyH3{c3V1%? z%K?8M@H*Ga_Z)j&jqyxSd@RNXdzg5!CN0IxAczHfiPHvwK{s;rX$_*}qW2E6PvS^qM?7X$tY;6ta&`d8m3^ErSY2mHDj zvd(6}$Iq1Qp91_xz%QI7>%0Yc<=bWZJ+oyVJ4fc@0AC6CpgUxp&49PKQ?}0sd?Vl; z?viz02mCj{Ti-3~qyoMJ@Wi>Y&SQXo0eG!@WSv=n9|FA5JXt3T@O6Oy0{GDRvi=sp zo8BwiCj$N$;J*Rh<~~_}9N=pJ{{--A_sjZy0lx+CX8`{c@M;U>`z8WD7w~<6*Ig*< zj|Ti{z<&n3>jSd>EWmdGUU`wMb1mQx1AYYX=8I+hJirS94_hMZBmh1a@O^;SeNfgP z4fxZ5Ke1HS`4;ec56SlFfENOu`>?F@4&WC*BHKR(c>PCZ`%J*s0zPe-tn)hHzX5*r z45YS9o65e+}@aFUa=y0)7(k16yRBq^&Yv0eH-dvi&uH z-vRhoW>wgG%|827U3xJn=S+>suyby5T-({Uk0e>0r?ytx?vjE=(c;)S~&UC=v z0KD_7vd${NV_%c)X9Io`@JC*kb&djl)f=+?Z-5WmA=|$Oc*~u#eZ^fezZvjv0B^fn z))@u(1Ay-YywY2;{z||<1pNHBWt~HNWZvK%nP&q25a9Q|E9<-l_-}x>{)enH0`P@^ z?*zQWURl2v;5P!k74TB;$@+Z&Uk~_s`(&M~0lx$At$??BU)J9X_@(=0`&R(}8Sv&G z$T~@YzY6#@AIdrp0sa}_)jyJTrUU*F;O8HZb;ba`2JjyNA9zsK-voHf$FhAdz;6V6 zE8sr>e!(I6zIlKz2Yf%^ z0=(I0vi<_VivYjkh^#XU@LhmgM`fLB0lyRQBY-#mT-Hwld>-Jh0RA)JL%xvjyBYAR zU&{7<0KW%R#2 z_kef$LDrcE_;$d50lfK-vi@+u=L7y4;J*Ui@`QZfv4F1td_Uk(Kgs%60R9Z%y?&N; zwgcY#7ukLi;F|$&a#Gew1bi;w?*KmXS6Tl_z>fo7|2J7@F5q7P-s*Q*XB^_gcWW173#(=ws>(1^hO^cK{w1ChNBYJPq(gfbRm_vgG@A0DKJKO8|ch z@MZ`MUXx!0MISELl|1n<0q_?AFRfqLWa)Z$UF~Hl^ly&X|{0QKe z)RJ{>1AGVI6>G~nmjXT;@I8RX#>x6AfUg3)2=LeH$ojtm-mudCj-73@I!z%X(-?Kdcf}nd>i0D0^Ych zeBT_v3jq&nEbAlyJ{j<*o5(t!0N$jjY=1rA_X6IinXGePbD0+benAV_{!PFuwv_E} z2Ry8mY~Ks;hXDTs@NunW{gr?ZY9rfE1$+bGUjRNNUe;d#xZPH^?*sTvfPW5nw|27r zOu*j+Jf^*@a}D6H0N$p9tn(n?ZvkGlqpUL(@a=$yT_EeU1AH{#iviyac*#!kecJ;* z8t}z{9|F8`XZgOp0iOf-r+`=W)O*c9-oh1$;K(Cjf8SL)K3Od@kUB z2mB|%n_nv5Hwo~0fbRpmY)@Ig3*fmPUQP9^oPRa~{yX43dIj(6)wvz;cK{FX9n`7e z2~U5(7XkjUhu8M#j7$jXd-*~Suj8>la@S-+!)H}It6a=@!x z9@O#LPY3*Yz>5HHaD}XYHQ;jq-vao>SIYXg0low9n5$%+YXE-;@Xr8mcD1ZO4DfpZ z{{Zmwu95XG2YjZ7H}d3@@N0uQO+5S?z&Bnm+dn!?=JyYmdB+r)&rX&3X21uHknQgS z`~$$FM#?%p03Q$d3xGEtCF?H%yj+@We-q%_0FNIn>r4cE3*ars$U0*I-voHcbXg|> z@Vfwi7x35&Sw98v`vCt4@CKQ(eiq>C0sj^7rrEN74&aXg{srKjZjkj00gug*?WY6& zCE%m;WSzZ$$K}iRBLH6j_(y8{#!F--h8Ia zX94~x;9Y0QI!gdQ40xB@Wu2!1uQyw^9}W0RfJe-cbv^_9#ye#Dt$=?A_)~YuI-T#9 z`I~@WK3BHyb&t$n0le%y*}ek?TfAMob@ukxU* zlMVQ@fHzz!>nsHP2f#Z&Bz<&h1$t&`G zuLt~Yz+VRZ1mI1!%lDlM_KvVIca^8w!uc!$?y{UX3eye`}S4EXdnWcwn( z+wG9;-v|7bowEJk0WbHaY(Et6g@Atyc*9+?ekR~+0WY^(*0}`mCjs}rCF}GBd@kU7 z0k8G8te*n-O2Dl>vQ7rzUjlyRJF?Caz;^>)oNR-s>N-&O?BI26(f*vd%ET zHv%60o~&~v;I{+58}O3*Wc`kSPX>G);70(j`M!MLfq+i|{1w1|2E5sR`Mybj&jWlX z;9(!g`t1P!0PsE^$~t!g{yX5^K9Y5w0=(-1**+ie<$&)8y!=5~e;nWuAItUw0G|)| zcEIBg$@+5ue;e>>hh?2az#jwrH^4`KBI~~kc*Li&{Q$t11O5Tvbv~2zuL1l{z+VFV z2f!O2k?(sQ;CBK365yqd%K8@oo&oqnfbRjk+~@Lry8=EI@S0!9Iu8Q=3E)G%ly&X{ z-1S!V{|2LW&Jt*ny)_%ne21o+@0 zS^ovV8y}bLuLJxMz)u3+>N{CKAMmFDKLmJ{?`8c2z;6P44d90XukwR@-vxko`BAo? z4)`a4H##Bf%m=*DPqKXm;7b928}L#;%la1p{xIP2zsNch0p9}nalreYl=bHV{xaaD zf0cCx0lpIOO25fE_W=Go;5~kqb;bk!0^kFEVQST636k@!pIiZWObOXO6Y#Zw{|tDu zFj;>(;2!~gz9s8i3HTDgcLVM(DeETyJ{9l{fPV>iZCk$YV8EvXz7g;*0nhZy_l+qf z^J@Sv1pGI^M~BP$zX9GgLblHbd^zCz0WTjZ>yHCGqO@#30Pq!n?+3hX8Cm~Ez_$Wk zs;sOt4Di*N7`0Py-zvd&zS!WjDZvkGtuBCG{6r6eqjq)X93{f13svwth2I}%s&9UcWc@HR>0Q+{u$sy z+sOKR0526U+dt7(=2P0qJhi>d+jNlm?|`@NDBF((dyHF{3*ZB~$vQg$zo5Hpe+%Hx0R9u;sXb)I zS!X!livZsRc*$O}etW>j0RAB0Zv*b{E#EgA@Yeu8FG1Ex1AGzS9|IoKN7nBR_#D8u z0PgQA>n8yIEZ|A~WSuR5m+CLu_Xqqa;Fk`Nb#4KCE#OB0j~yuM4+MMz;MWb3bshoy zDB!V!Wt|y-9|XL?5LqV!@Mi%33Gj=D%KFm){}Awu%VeD|0l)Hc*?tM&y8*9qg{(6L z@C|_f2KeYJW&M``{{isMSIIiJ0A2|A*MQf(TGqb|@R@)=5BRr$*Ski(?;U_20sN9{ zWu4mqF9h6oovhOa@DYG70Q?QWfA{bfp7F73t`COC%hv-Ql_=X^4){zDZ{@k~3Bbn< z3+j9A-v<1eB-wr~;Bmuc`w@Vz0=#OntTPPo<$xapyhDnt-#Jz0^8vqNq-?($@DqS{ z871p10K5qBLus;3qtP~#18(KY_W6MC1iW&d ztaCl!%K-lx@c4XLe{fZ=$S|2KX<4pFc^~83Xt_!0S$y zbw&Z+<|f(xWx!v(S++k3c-LEG`$d3%3V4TGWu2P$IT0m;0y7d;s9{0e>Ixa<|F)a{&Jd@JnXMIx_*^4S1EA zvd(pYKLYqsz+-30`U3zj0DK+bzj}B_Px_|c9=xxYzYlo(*|Pm+z^l%Y?QZ~lJ>b6r zKKu?@e2k(2KCw+4PF9N*(BeKqyfcJS+w%-MK<;P_EEWpi|z$F57Pc{DYOUeTOGx{wUy|1AfISSts*JnXd)>H^9gI zP1achc(}v;0z7H8tdqJ%=9>YJcv`l<2JnXf-vfB{XJq|hfG-35cffnBmG##H z{wv@;*U36d0sj>6YR}3#eF2~A;TL=BtMx%0FE0W-WrJ+L1@LMcW&3=W@(+=={n`HatfWP^IY+re^%x?gEBjA;`$U62`nfC+yKEO-9DC;Bu9`llHzXR|W zw#oM20^a^*+5T?8-v_+e-({U#z?T93CEz_?k@d#|z8mlhx63;B0=^&cy06MQ^8num zc)izToymZ|1o#gg-py0bT>N@azlVoU1N?Ol@9D9x^hQvpw}(#wya@259kR}xoicy( zO_?{`CG*Dt_wAPLF9m!y;GY0~$y>7iV!#gp-so*vrvUKx0k5-1)|m+S7Qp@Q$U2FD zZvec(yRuH^UYUOY_`&yN`_B7ho(1@R!2SDWoxXtI3%K=xtkWCtuK};~p{z3!@Y)~A z_SYVe`Llrg4$Ag}0ly#c*8#8hv8;a=;O_$7;*hM95BO(*H#;orj01cZ;FUj-b$SCn z3Gf#^ysxLeZS`qT-^*76Ugk5|ejeblM`Zhaz@G=)J}T?<1AIQR-$D!vTK|@JipvI`%P{_W^u9;9=j&I=ukj2YA^cS!W2~ZvnpgxU3WT zoy>;kk0D0PyV|-rrMiv_BEl_wv#| z$$TQdHLgJehX}ya4e1fY+}l>yHQg1;D=rJmGv$qAnT+6 zz7p^c08eTt>wf}xS|i#1E5PF#%l1P6pAPs&z`q2%b`$x&g8_dR@T;53I@6lTykv8k zZ)_p+iY;Y+AK*1w$@cvLzZLLlt!16p0gq`T+ZO=79q@bNWu54@GPl~vydB_^0Dl+o zxc0Js4&WOA{{ryQ9c2A?0gvq{+YbkP58%}=kabc3e;#nFldRLu!-snOtH%JZ)H$f* zwVw|73BX5RDC?{S{0G20UnJ`k0KOgYsEcKt%K?88@LpYHojU;E1Ng*CWSuR59|yc| zS6Sy~z?*fG?Q;R&2zYdNStk?lhX60zL)Mu9_$t7Q0Pk?AtUm_uC4lb+ykt*Vzpsa1 z?kRV30pAOFtzJQWuTBc!3jp5$eAdG~kN?-vzkUPrh$Ez|%bZT2H(^<>A9T{Cf`{?%@;r z2k-0UzXRTDfNXyU;ClcsHBi>+2lzdJ{~hoigJk_Rfd2&eC4*(1nSj3uc+3!4=NiBt z0(=kPrH0D-7XY3C_&N_C<;f?%0p9bn;C)AX?C%2nB@a*c*!%Ty7>z&Yd3YHQpWxxq z24AetD|`54k9~CyXPw{md3_HbN5^q5I>3ELE{BKhljxg2?piySXKH?_bJ^$e9L?P^ zE|=e;xf{1GU!%GE>@Huf`OSv@V$G);{4UMs7<`@Ps|>zJ^9=^yq4{QmZ`See6D${xb)@?+mVAL+#_=^T*YRQ)fP3ZOvVslFl@T?|g%o*Sv|r zYii!f;0-mu#Ncf;?`iN(n)fsKC7NGn@Sd6{8@#{fX$HSm^DKj>X@0Z8$7(*!;02n` zH~4JLA29fQ&7Uy%63yLw>c;njI%RfFs09KQ1nuBUN*Z4BN>hu=+S_rALO?;Bv)>u!kqnukF6 zwOi$zY}o5%1HO9kB5`rQ4Ud*5lAk1^~g>hn7dK3AVF)8AbG>nyAi zY^`Cxx3rUvTRisqP+iz**nh6=_j&C7j)eO6E02AShyUoY5BG4}c23;qJ*o987<`HT zeJz7Osd;0AyU*F);2X7lCxh?Tyr;nrX?}&lKhb=+!9UYH*WgDrzs2CcXga~4cGmV?> zvow!3_;SrJG5BSgUt#bYH6La0d75V%e4XZ#4erMCOoQ*y_VW$?zUB`Z{D9_98r+TN zjRyZ*+rMmZH=cJJ+>PfC4DQDBQG>hj{Jp{5crH<@czHab!&BDazi3{~;BLB}Z}1p> zzg7mXuK9%qucLWygS+kiWd?7l?UM}NR`U#lchP);!Fy{y&ENwyzuVw${#$JDtF`?K zgC}dg&fud-lRFIVKG#Bn z`*b|6Ft~f)bq06Cxz*rqcy=1xz3&GG57+no+~Cog|77sWn)@S)m-jf$D;m7M=5-C; zMDrE~@1S{SgS+AH2l&+n@2qvw4DQBrzQNt}y4B$Bedimzi`IYG;BNTW8N9!?f6?HH zn(s8YTR$H#xLZ$sW$-at=O=@^I(B67^vcur(FUKSd7Qy#Xx_%)^EB^la5w&Y8QhJ} zp$30k>kKov8~zM~yZy%-0iS8`HCq2(gS+8**x+t>{$_ADJkJ^24bQ89A2j$j9iFcZ z?&hCg4F0CJFRA@pw_g1~^C*KK);!kWUufRY;I6+KZ}1{*-^JkHY2MG^KWKir!NYVt zGTh)1nr9ijyyoK#?&?f6xT|xw!QJxppuuZu{Z$5Up!o)aH_?2X!CPy-%ix_f|G?l~ zHU9$e-wfVU+n3e@vTnLxrFm6@yX{#WgS+w8%;0XkU10Dut>4q&ZvGr<@H}mwWN^1$ z$}qTFjwWi({Y{^7{-nXT==$negQsY|+2F3f zwB6vVv>&+J;I99_&*0zbcsOM6ziEEV!#RH3G5w!BoZ~0KZSTuD5$LAZBbt{sczs>S zDjEDL&1)L`LCxzM+-;v)82k!de|0eUGn!vw@bWreCK!B-=0gnrissiEysVCwRD&PX zJk#KJ>GN?0?^)i7$6E~kwdQvie3Pzc?lbr|nlCkY+X{~U3WMLM`O^mfP4njres#2? zv(4ahG~Z$Hm#=s1_i65y_meRWKjg9J{I=S`z9Sya`K^5==fby!P8mG`_?uy0MQ7Zy zI{r9+vi<=_#@9e|H#~0r*xj&?qTli7D#Jcjr|&qx=NLL&w9Z@)=jU3TsN{VQ7`$wf z!yh&H0?pTG?uOr|)4kAR&(G`5KW_GLzV8X0F53-0M2Ba$!DELx;o0ZmtiMG+*GC@C z`uW=ah{5-1{=MdI_(HunXSVaq3Z)TewJ!p!{EC#kMnSTt_7+5R6bub4`=--?T57UaJJ7( zVQZRyH~2oy`x!h&^UFP4gN^y_BuSj~qSytC$$4cq26yL;zBc$>+WvQgyYoF|D;AH3{W>06Ywm{UnAU0U;W_lv zOGh}r?_%%+n)fz%%t*)nau4Tp@1p&sWX;`l*`&iW-mrJ)QEv5c4o^jW-&qF#NavFU z9-g`w>SxT!p_0U8K*K9?pKg z+s``b;jH71d)vA_=k#Ko|D)?Zz-zqUH-H~o&DhimLSx6?#Hdk9T3c0Ps~M}PAoeCk zjas49CRMeyp{P|&QKP76wRRg@OZmUgdG2q2&;P!zyw~+R`Q?*4_jkPSIY~~AbZrUm z#yc{RSApjuPYDks|FO9C6esTtFHe3ySo1Z=$HE(sXMw*>zVZ$2X+vHP{sH;RVw&%3 zT=pj_wfa!wvOhh_tB)psQcis`c{n_pyfl0<`Th{?Sw;Rfd?WdlvYOvc-VeT?{NFN~ zKSDke{sVaj_yzLuxZbXje+R!!p0SjU`;fc^`~~@Acq)8<>aNeyrL`v$c{n^5`DvW5 zK=M=-w5K@vQh0gt3>7tBgM1ad0r~ODntz-8Ky~#FaQ8T{8b2R(HF>!X<8dAKGA`HQ zB=iq8?!RBB(f)DdQSjO1vG8T&3GmIvW!w&!{|@q*@NbOEd;;)u_bKvF_!;BUe-BSU zTqYmVLf7>>dFn9r2XMEaKJ43blb89#Vq717UUAn|1GR`T}MG@sYF^atYS z?m*+RuC7>Daq{)>^5l2XU&pxgN29+rc^tea-0edMz8@HugfAk;KilzbCdbRCeFw?$ zGGN~o_RjF@dxz_Hzn{o#T>9hR@yC3*$)~{! zk#~Go^Cid+W84bl<nhet=Q-Z^Fpu2x z{xghA{yFCJ33<(i4t+9r9RsGx7v@XYv62d_9Cb z6h4*QJJQn$_U z+#i25dH?+jT_ryUze&Cg^Sp0d`hD1kC&r~eJ?8m}JOZ8p_YXIJ_q=DJ zB)kfF9LDXKgnvYS6nS^QbmPXumm}}K4u--%GcN0D-CGvz^KGL3kgV#vDZd2y?~Kd7 zMW8?4xb$D_qdgbN=fQs^@7`DQcgRm++(+cq(ep2PLG)z60{w6NKaY!Vh4&)A4j*b<&TjzrVI17eClS7o@?r28<1+5AxE|J%Z-MVJ?!T_k zbHKRtL}H%D$s5Bjz}-CaVc+hN2f=;#zQCQYSd5#>xQzQ&gm>c|nc%K}9lrkNrTk~e z2OF1lC7{2wap_N1N7{Y9a>hq^@4Md%)HNOb{$JMDe0uWw@a*LO z*3*1`@`1SCijfD@)qGjXYeH7@-L$iFZy`8CZop9(+Uxa;i#Jd<(h3CN}S{N$nV!p5b) z=-ZkvNj|xadPVX)ZPn|--9Eoar~a17%Y5Q6ZVTfw?jY<#JMu^H&g82x&)&wRKM>D9 z3@|SJOPYB%-Z7l~8hk8y73}9M37eob}}ygzqQl; zp5)8m5#$5fYkmaz1&lk6ya9TqlNU$Nr^aQTp?S1_3wZ=Qjywi_*tmb+-qW7b#-%?I z`AfznpQ(f9uakcae?b0Kd(Hp%d;`w!qqOR2i|Si9-Y9qp@(J+9 z=yXS2`GA{db4?W|JOHTs!a{+lsUR}>;$kAs+xALVgrJ7VfUAXKA!&pUM00j~Mr`aT&MOQq7+t&jdeDesqcE z6UfKGZ;@ArKOlebsrEc4-vD>7H+0uS7kI`J`gzV@hvy_ey;ySv$)~|f8TVfg*q=(q zWq&@!KGY^pfHxv9woJzjBkv1uPreP_h5R3QAM$$3wSNftH25g;)9^{;udmRa+2mc| zi^w;?SCW4gqdgnQZ^6GL&$m+Z`^dY&50h_$pCa$GN_)y9KOir# zTJz7zd%#nc)Q`LCa1%Tu`Lq|BdmZlXr;BhuEn@Qi$C-kf4>m5>;i%8m%TdoJ^wg&O zx5&S3T>3-N-^RG~r~O;|KOjH*OuaAM&Hq9k^-+{xiTrfRyVpZ3rF>iL&l>U~@a@#& zUiWY@3IEIV$a*8N-bcn|y*r=l{Qo8Y9^&thXik5O}z8>5oSLN91wvDR8$B z^I!Kq$vZYA;YZ1rB7cQ^6Z`>rEIear9Y@ZK%rh}i-_L4X_F)aqS6;ZA=S}nkQ~nO} zm5ob(U?J_VV_f=+zfx~Z{@Y9ScgVj&z5{sykYy4T))BHd;&0^XOwr(4<-xo z5C7lqL(5>?bmaeFpYs@(abqxUVdJu{qv$C~J|A8U?&et&^K4Gu3_ig0_|GrK9d6uz zoo~?fj3rMEpGF?HUi0(FKZY+QF92UdesG=kY$5Lf-$|Yh9!I`qt@a!ve;0n5{0Y7< zx@uhZCjigu-83%yllKelzfb;CtolFXv*9Vq>Br^tNlz1a2J(AbHJ5{Y4!i()CHNcU z7q@6n2>B>@HS$96dgO;UYfn@1HMkyHk*D9N`S;0(!h4XPhYui++@w9j$uGdik{7@{ zr;!i&LVM*|B z%f7Y0t@#t=#o%Yjzky#NpNw(;AWwk*MLq*PFOADQBQVdb6?I;+58^TKAo6&4apSVC zkM8Q{S2iv^0dJ_+F)sP0chnn`?}WD@e}MUaVB9}{^mj8Z{Q;QIK)AaO-Rnzdksr#U z^Vw*6q(2t@`zikd`Qs)pv;yXzqV`*5B-Fj(hvn>+&klspEWwz7Vn>yL-$gu8vXi}}=`ysx-^ zeyDNT|04I)n~?8^zf1lA{(*5h?_ucg3wQH5iTRABd^GaYjLUoyaXri<-v?i1T*i$< z&qm|YGY#|HPTmH75boyr4D&os?!$S%XL@AZM2!2uxQu&zly~DDPmGW7-gmz*NL|JM z;s5^qV@L^oKeKV^DK=U?H~AQNA@U3GGH|!93tHp*(By}C7KL#K8JBU7{HUKWl6)R~ z0(m%mCV6T25xARA;%nM}p7Mh+(FF2P_$~6k&uh;E@+0u)uuV0{aCe=!zlXKkG%n-T zzo_|&1k_ zYks(KfByybvE;Ad)5zm7?n2|zABFzSv#g@Q{A}i!(yDT`qWbsJz2z zJ@Vtovm!s8d^CJMc~|s&W?beOhI#HJkAfc~kAdZ9nsMpRi23A%yX&M?2L1dBLrbp%SbK^Cm#DVh}``_(qYDBfBrpEgqi1xU8%HbM%mvN)f)6KZ_lt+Guaml;qYepHDd=0E?5_uZE^_yGX}>3Tf4A@^`O!??Al~s9?yl#vnCDB%UqC*6ZT&o#PlM;{@)-A@#|oM& zU|iM}6sca=_y~{O&m-lH`_Bt{Y8aQEeduXGo@12uzfImB-U06R)4iV7{X3-pu4jz9 zoO(Xpsr_ro>%wEnpYPE8Zt}0-2g&=vPmsR>KTCe~EA78Rz7YNgc?+>_aZ{V!QP71Ihcsi<57ImnVM)uR$KVTl*W3PlCTqehS`( zJm((m`GC9=ychZBaQE+%-2LKD_{Wt0XRr2;ClB4HK7)KP{1fuM@a5#M?bn{Q1dHVzESIAew{~({2CYk>e9>U%I^g>$gd13PM_z>cr zj|`~Zj=w_vZ~ohd23XfK^7WWcvbz62 z|0=bPo6flO$Du#7aaq@P^yenO0WU=UF8a$Dm;R8-I*$hA;qW$aw-0@BUWO;(3&@8c zzma?bJdS({{1V)q-)PJy!MNgv*zcKvba&uCow8>Z8I zPI4c-Ao*!{FnJA(TaJ7!ygK;|^fWOp=PMEOe4jk9imqn>c^G_%aaq^F47#qd#-%?R z`Dw-_KQO)K=aFB5uO!b6-vD>l&x=5>%sX~cz6s`YD2e+Edh7)tcadQ{!78<+V^z-_ zz3IK<9ddn&-$qYnxSQum>{}4|W%!$>N5&1PF0DRabK}xq`-q=?ZONY}l9`F_9PY!B+9r+~qSH@+3!m&SJ8<+jrkNx?M zyykb>A5T6G?*2Z3JC8@&9IT&rF{ExaM+` zPkMiQD07eJ)8Pg>Y4GU`Y!Tz@WV;;oTGeERL65iqZBasg#p8&4`cjqe#>k2h4>#Fd;U+Zf^J(tnbhVmnj?`B-~Ef)R# zj7$H{huZ%U`9Sy>^7@Z7KZSe~#+^f+8$F+r{|jGlT;`d8dG033GY?Bj6jzW8izqNImZFIPao-f8>uCmwxxW z@CoD6UvZ4I`+PqbAK|_4eqV6axb%eAk+jcu)423Rqvt;PIru;1`J$x7=S$N}-@1K! zq3`UJrhgd>Z^d z`F{96f&@^XC!gsSf}F4yOA%>R&a$wwgnBY7PB7xF~-UGl)XUYU11HZJ3qz`9)#dLcW-B$$v3h^JU2oW1dyX+s@Ve zn{c=PKJ0&UllSj`JJ_5LjPdn(%%Fqb+y%Wj% z!RH#6{zUYzBM+>v^V|b>`w*U7{ih`S4tX!+eJ%9!Tu&rC2YD1c1TNQ!%rgx0sbpOC zVHwU>ZR$CTo~D%l4f*!Q{rimmF2<$5(0rYDAM#7{)ZKrF$6e2xksn3*oXAfi9|xaJ z-V;5`jmtb^G0$z}3GhSY0S$DX$Bg^;ZGrkZuQT}$52mDN}boG108QDx$jN&kB!Uz zlw7Dj*|_wCA^$0P416uQdtP-Pxew1<{XiZ9zfK+j|A#yVp6*?puY25xhi5h}>)NkY*7HRa*%e7V1~)QIxo$cGsp&^ezqrH5AR}J#*Ic#Pvg=v0Qq6Y zB_D@;lyS)q$GWDHH-OJIEPbkgp1P&Jb=QAepGx*e@|RL+ z{v_qy-zB?1?*9JRb#iz8Cz89rC-#DT4d$7)m5%S`(-r6Ob-1iIt492{rA=P0hxyo_ z%H%)8>yQU#(eu@qya&8B+>KibWA~u^)~wnyfIJdDoV*EqEO}1&H1cbh&l2)Y@YUqM zqGuc2&EH)o*Nta4`}x51$o0@HgMRR(aoOh_*>t_hTkFT&`Eq|xFOzY}4@5qzap`y0 zVFBZk--CQ% z*Lf%7lK%zyF2*I_67v}Zm-8a~pWFMN91F;Ulzl&vyK|PhjRvGA7qapuJKUX@J~)qo z#$}#aa_GJV8JBsw^B7`W@XcWDYxdk8JB){9wUrP|AIW4A7Whc?mR}3|Az0QqTz0zt9qX!$98gj8|C}U^vKuE zFns-bW?beI^}5a{bz5os-+#9;3i-^&C7+OA^SQ|2=<|$@nPP24F7x~s{mtO+{y0Qy zeC;XUrl@|PmvQM2#P5^FQ;+*Q+bby_hWrNOGM@%m*EiG?{F?Vc@3@kLKQuiupD6S{ zGcNsIYU})ywU@U4ov+h%)YFlt3RTYqcl#5XQ9nP>W9w#9|Hugp7+Q9eE9b1sSeL-Ka$33yNYTz@xs3AmhhSyvR+Ro1wy zt2V~1Nj)>r)1EvU{tKQ#R^{{+lG+55Tz$HPP6?mEnl`FE$h?`<8ow{h9e zwr}eB8ccp49!Xvd`#;sVtTzn(3*c@(k22`E8z~=+{C49qpCF98pF9!wmy^b2+&J|7 zWL$c_M$a$g)8KdEZk~Y|b)LyO;jOnVxxD`y49^L7=P?oE<~1(kUV20Kv!L-2p0~!& zgJq4&`~&g(lB&j~XB~R#k`INyMP3iyk~}lKBl+cGI?wLp^Wpu;o56>Xr-Vn5?<=bP zQ^}{o7Z~?nKiG#A#$_Lh1Z&Sa@;2}<$fv^hkne+kOa2%9BzfWDI_^*8z2U!*Z-d_; z{|BB(Uay4q|4lv=p8NxE@!sJcS2vW@e0uUL@a*J8N@+enc^h~!@>%fOctrF)r6h6t0sI#^pNs4*ipiOFjYldF1Z*i!tQk z_5`Nma%rg%C=Z#DMfbzOOzZsW&BJwwlOa4kZ&EF?) zT2cKU@;UG{;oc{EhkHEShv#Dh!u{;O4rSc%FnvFVaTzy#i1rsC9}j@K(m9KNP<=>P;R2kA(lX5BNRu!X$h%`61*Fl3#$IC%+7T z0C!(sVlbbl#$_M=#rg7e_TKRhH_s^i-ZLZIJ#N&mq~|5CasNJ}KghWBkFBiv(&RPZ zmB}+!(R>~9k1%dy@?YWakbj5%aN{yh-@9_-^9>;nflne2hfg;y>k6or%-^%fxb(*$ zztXtmzrngTke95gJ-f(TB7Xqx&WroK@F~hKM9-xp^3TZkrSwnVm!pfmb^S--W#R7n zNx-@)8kcn)$GCN=ClNiJ$REK+l25?zj~0^$!gr7d!OxI4fG3hShNtWL|JQo~k4w4W z?mF*MBbh%KNcn&?`uU|P{|WMyjmz~AfZtcuFfRL6x2EOc-~CammLbzk@shev&+(mG?>BaSiU~a}xWUx|@F7T|c472ard> za~PL-M&kZe*tpCy9{Eb-f%rW~J@PPkTkFI)eUAWta8Q6z5(x&x3=p8F5{|oY8Qhv3@eV0vMevaFOp5Mv8!aVPjuf^lf zzvS+9;OTnkKyts6{@;@8`?-_wVo7*Kxa@Ntt?=L0qx?MlJl@>6>|38kdY!*(T;}6` z-`B~wB%!_xrxl#wA~?vCe0laml;i_st>igrBdM8JC{% z=vir8dfe+1HXE1x_sD-?T=MSq2?yYApKE#_ljEWByh{Gt)IIeb_jStGMAwzgxLnWf z_dxlK%Y5b|UzEHdygXdyBjZ-o;e1_<=ZDFgu}SzY;{{Fr2;5zt>v8>@GA{G{8S^=9 z-0t(Q#$~-e{Ql#Paq0QsE#04#y(FaH-^zUOYa(AwpDSCQ|AZzK&VxFyYpBl zO!w{GB=Q5v@1kc;626iA8S=;BZrni__hJ(H`zAla>-Z_H7QH0D15ejSKkgn+9^>nB zPVy!xG*_71{eHO&`PkH&uTK6!8ufQwx`#lqcnIKlgv9N(L~^u(d(oN?)SiJm*gC7+0V@_ybs-XV_z z;(_@6XhHHYcv-m2=MDd7>P;<^m+SE74C+mc%Y4eU*6ZPI36d=Ys@_)7A_?X+hD`NX#BUy|>F z?<22*p2Os0;HSv1Vm_CQ`>zwM_quUe@4FcHzH$F`g8Vigx2l;4tka7QYh~GDtHZJ29?V$S>3U}AxQvWQx$3>Huo^bT^FfKjq&@4L3-S<(w;BtOT z>Jt68A5lJ8M*ZM83Fs^1Y19x@Kd4h8ma0&oDgheQaFT)jWs(fHB&* z^tk7pW*L{BSoAD3EG5I+IU;_a?u!QS*bz|G+*(lIKCsMDlmwv&d&* z-xiV|fX9#*-=_0fPyPvf8~NYxz2s@PYtJF_8u0JQ?|!BEbL4$?s9z;N55Gy?cBkg= zlegTf{u1sU-=<{J>oUz?eJj_eT(_aPZZjB{Pd)Ud_T(`x`55Gjk-OI$RUi+<>pyB5 zm;T+@ho;7*-@U%4m2t`cjrG27T=G%q?_yl?N09GtT=KEV4>m6OtGji*k>q=^pA*T$ z_i27E-0kxWeBEDS@-l8+Hu9!>G{4ul^hbw#H{KCvT>4vM zUB}3mz)zE3MgLXf((hjX@t8cMvwYC|`#(eUt=oqnJfD*<2`^7x3i(Fljo}^1o56>{ z-SzBV&k<={_Th7!uZh&N8a;CH~f0Mi& zybHPe_bFq@BavSWclSH@I+*3gWnIm_)$_a2xc~a;>Yui6yK%`+KB)QqTx?vU=!BFgVW&sXGe@YCc8@W04!!e1Ni--iG8p;UT(KPO!FLDu`zVVzHr zB=Qw0zaR6jMcxhGgL*1r+`*L3iE*Qn$S)(Wik>~>4d5rJza#q38JDecuTQ#UT=ro$ z@;9kJ68)*UoBrj|Ngc68Uk)r9U41(~V1i zmPy(_pZvr`^=0IX;GdJf3*SoqWPSlOLa=J)OvV<2va{9t)2k{|!EZy!d48A4k3y`#GIF*-XvPC%+0` zMm~6!=07Lj4c|(B7ru*pZM60rAg?$_{W$q|@H6Di=W6~kdFVX#-^m}GQ2&!WFP{H= z4tI|~F)93)tuN&$ee1p+xz}U8W?Zi4Z!m6Fxa+xqo`RH5HDBjb!noXDVsL*cYh3z& z#p6#+; znLH3an!Fu+X%fDJyc_bDlJLiHx1YW~y1y@t%X){O(siX7qaSx)7rusPH!k}Yf}Z@w zr6=_d+EdE73E}7?*q;@;!}9eiP;s z0e9yy5&Jxf@~MB+^-eb~{fX$GZ(RBtoYwp@@|WoOoID=+t>o2^-$lL#et>)$dg6`C zJOlfBH{Nm4xXd%>8J*`J#w8zt{9nc;-x2wLjQjT)`B%mzpZT2jXNdCN@eX%=2K3YS zb42M|cO7;=tN8-t*WquFKgWDR$XCIu!QJ_7kk#iu8d5&&CmpwC68Q-7#^{+z-U_~) z`WK*oy>Z#MQ0&7N??!&nDzU$YbGelgGn* zlb?l8fV=Y>fptwaKFFIw==o&+i7YTK`w)x#3gePriR)(_`3?9N#-%3_Jv)p`&ti=G zE!^!xB=#qPJPQ6V`3!ijabBr+xb+6&bt?Ic%eYrDZgIF9_d0qSlHY`PC9j&@Kb&s} z^%uR6%>RM$l+TWQ40%5Ie)8a4+W#|o2>cOwU-Tp!ub=1czsD}>d@{k^dR@LC<-frE zgUQ>$-=QA&-`VLz`E(e!PZIel{H+;Xn ziShw>UBw>C&p`fK68@Zg5%PhPWYzzB-qm?^@?FTcAU_1}OMVnS5$+yuLoxqZ#$`Xx z57m8JNInO?+PLgn6nZurm!1kAY0nPw8Srn&Ps5LrHyEZpKa%f&|4g2BxaNN&e-nO} zd?oxb`M>a&-o;I7jT(@z!Znqhi>vk;q_fk(hdX7^5JLJz8m;OZbUobBHh5pug{%&0I zA@V`*_|v%1E99S&pMa;F;{UY&zK@DPPe$WHi;&N2T*h^;HwrQ?`R>S9GcNgf^oNoA z274d$j(+4J@JRA-_*mmoUFeza&ouH+aen8KmwK-G7`Qv{GfMcU<6Cd?{`q6vEyiWs z%ulq({r7X+bvOqeNBNnU=P~2bA38+GJ!M?_t3K8K^W>x93FKGc_l!$_Ec#PS)p2B= z;tB8^aJLWfMKo7}{3g6v65gBq5%OcmpTR#R4-V3C*TUU?4#N40rF<*o_fvis@+T;t zvZ(g|M)_$kbe|uR-$Bm{@&?Ffou++mKLdv9`+1GadEAeDuyNV{aOBGwmwbwUbv`wX z`_Citb&X4Y$1BY@H!gYKM{?u+T{`2E&+t<7;pEfdACj-adfscf{>n9QWJcaU4 z(f>&j`EBHn(DMViub6*Xz69#8g?+eVT=pRZ`;cf{_8|iKf2lth{jX2gaooB}!K;w( zgSRGc2OmV<5k8wd626H%3VsCcuD5Wk>x6MxSH@)eh3A5C*@qb9uNjwoW1r@4ldpt7 zG%h`f=y_&bdU{~oR5QGHyuWw6e32lYQd|6$6NswH?!qgRhhRSS;qLKpK?*%z zVM*jWQ+{-E&G#lR3ZF+kRWWW1<pX56mvLh;?tSt|_&>&F z+)(tqGA=#!kk1^gC-FNBvR{{dc=Joy^!sY^Z({ucRacuVqfpKDJ?@&KY>S) zm)M~BspRY7bID6=)cg|iH0kv5WHa2|UwWm|^S8s~<+=^Sb-UNNT(=SEKSVt-==qWI zJCMI@T>7KXf6ch`KS`_e{L{GPo5kM(YW;Z@H#-*np z@ogQy1>kNUs+RJ{d=--LCgh>WcOvfyA50z&pG6)G zUjld6Z6lno)s)|d{1=p8iTpQ|k0`C{`knG;k^hstbOt?-Dd+3wxqXYlzGXBn=W8(X zuN#+rPDH+lamnvSzKn7I`NHq}D;Sr2-^@CnP~(!1M!t!0$sf$9`FF|dW>SBTydCo0 z$X{We{ow98=~%`a#5+Ew{ATn|P9ndWJRCg-$os-iQ~yKsUokHG5QlyE)wt|KG3?u4 z)IT5n89tF!{O{-4MeyR}!DThqi2M-p-N=u^$CBTKFDJhXcmJJOcfBQIUHg%D_ls!( zdLEA(mwgC{(s`aSF8go+`*4}O0D69hyYo9A>wQ4^-;jTmL_XgF9pCjVLQggF)$o>Z zx888fznyWJf6gqr-tN?M547_aj=2zS>>bb0mjln+Bb z!MKcj1N(W4{7d))<1%g(dY&4Wo)O5W`BcYu=P?%f0OOMX3hT;4J{DfsxQv^Co;Qq3 zPjloe!`(i_mDhPRB~O5dlV69AGyVR3o}fL`jmx;(`y}&!U_N<&_)6o_6N;V<#--;4 z@?VnI>#P0y$fv*$lb?d0BG2AWd(M-0geQ>ChTkGT4}U;ju)p>{C+`VQxx~Ls|NZ>6 z6`qm&F+3-EP=xjuB<~FmCSL|GNB$eUI(dbG+Fzf18@w5L_CcC&O+FgliTpaeCwZ44 z+7m$@4pxN1w}>3Srt__#o=)iBYFw_{2wb<@jmvdA@{$g4 zz_{dNkw0!+^6f8c{tS6hcmmwbKW%RBlf2_T;$$r)R9Jo7QyYhKu-tno)%ee0KTPuvqxMi+r z&pPs-;9roh#XR>Im;UHU-i>#BV_f>{|Dydz$*019B!3G3#klnQCd-Y__lP_Mo_d*n z-0j0%T(^0X@N(pjkZ+TON04X8qvK5^4}izO-Phl6%yW%#*`G!@k6Wmx8+!IqekStA zjQjT={ilsf|B2sp|1XhGgkL9bdtLMQ$m1~X6Y^5%c}1QDJ(-s4KDm8}!#oRQbY!mpTqSyv3!^{a7NS2FCwU(|B}JsDQ$eBJyn!;6#m&8xXa(jmNCs&N0|MLXoOOXdm(_9_$P2k&h9{rik@ zdmEQ=N6$~@pU`0Ps_-b|(i4uJsm7(}2=a5uGklWF-@k=LmQJ z`8V)9bG@1f0L(%C;v>xcaJ|I=ucx@`cGm$xs3bo z@5l!lmwYhJS8?(K_jEqx$sfUM826tS^oJUk{#nR3GcNf!e zTmPl`2)H|6XA5~{-Z8@DW!%tNe)f$vF5~vcK2IjkaYy^3$)97Mi;YWvEc%xlm;Qz5 zSxbHe9!uU7{rinef8cEI#yifChrxe`yM1U@K=Z!U`j$N>c`M{glJ|m#lJ|wb2Y1(J z6y_6dT=roJ&ew<36NjFUD1Qz43C8{VjQ*L%rN7{PJzopRFXD-k733R{Uq_xD`7g+$ z;Cslsqvx1$nP&p#d4)V6TF=K{H~ zzmNHsfV=DDY(X8b3gru9J`Iw{cP77pp3&sj;fqYa>{}exwamDzt2M^mKs^}(b)Mgm z2f(kB$H0?+uAk@DTN7T8JQQA&JRIJhyc>KNc>;V2T+XAc>k-zqz_{##dp%YRdB_~^ zgWj>mxbzf%*Jlj8D0w`* z61fkrOQ>#qkXO0>v97B=`DJ*RaanH|dftb-^BY-6=QoJ*(a4W9F5_Opeoi1?3!iD+ zf8C;Iu5sz@2`*$M7CGY;Oeplm?zm9xQiNl&#b?rzutn{^CtNwcysbc@V4YF0<|Zcd;|PL@(1ui-s7koZ<@SZ z&#}0k-!d-O^Hq%7l6tD5C!F#{OX+<27?=J8^hX$%{<=*yKgzh|L-4w&Nya6g9qXM< zp3p*jmKyipPtmi+xb$SixL+Fg?*sDtj7xqZ@`uScVcb*X!{O(R`}YC;myJt*ZRGD7 zmwW(TFZIH>rKDWd&fK6_eG(|2N;+9E9CPTm;MOk3mKPuy=K~9f;<-cUxB>! zJDLxLyX!4BvsdOFO-$au4;Z((aT#|D#%)X9u(|e!lV5{>Xk7Zk7RspJ&)>%V`-by4 zjQk}$io8AcZKiSQk3;`za`*bJop84gG3or%@tq{!1^+V%&#*~9&-ENaz7Y9Qculyw z9s(EX=hrnZ`>+J(>n-X@nO^g4DSr+5?#BK5jQ;+{rN3ZHJzvAfFTSfDMZOXFspQ#_ zpGzJEUqap;JsXV6JfktsFOADQ?;{^)T=EIXA2TlbDy?+>XN^lfWU+VS9T$yDK66{m z|6$xeALRcsF8S`QHUEtKIy~8C8Ab2!l0S#}q$3{%&jxqbPvZ>!Pxl2ub)qK9wUrPJ{H%{IPxd(>2Npy zikY-$5#{${+%-w$50Y0!&sFjU@W0`1z3%mJFOAFm|HQcIx9YsyJo}<2m^=dhCix3^ zSMsIsDDoKiGV(b19`Zx*v*c$p>%6bQWxcYlXC3uC{+UGn73CA&(|p=k?Q=bo;91D? z!3)9NzFo$A%22)<=2Ihye0%Z)^n65q7e1N#$Dn_%asT5OuG@viWq-CIznc1k0(AWc z$b;d(kne)OAa4cF^M&@g{c(T4v@-c{kJqhTEGcG-EBmV>3?ZXi4!*%jS@W08I!e9T= zEA7* z`Pa!uz>AP?f|nw{3a>=otb+E}CO-*pME(jMM*dkP?P*Uwva)&?^7pH#_aQG?RecEg zQ}`(I616oy8}1$lVzcP}E;4z!ZliJCE;BCIZHa2yv%$Fk@dx=YjZ6Nu>YCq2{u6qR z8JC`r72b_^oHi~!E0IqyF8OfeZyA?-f8?JT_pb~2WM6q9?{L@Ey_!1DbmW8J*~oXp z^BI@^IP@1XF7qjgd}-s7Pei`Famjy&eXBt}7w547d6hak|99Z-{60$Km3c=8llSji zjGuiU7?*J?)X<(@FF8%KHXJ3&= ztn@zU9Y^7AAD-zneOHq3hvdE#+LLyNzI8qM;Q7e|;Z@=8>thV&Q_HyQ!zi4uhSbv$ zJuNB!E%Kd>`}Z0By^TwMvbwt9!Q^{G)g#GgB0rJ*3C5j8-UU4i$s3{PbK^44fK|GW zTaC*+&mh0gxa7l;KWtp`dFtu>NP4fXu?H9pL9_j;zG#w9=ZP0f!czW|>Mck_=-t?QXj`DGY)WfJ+X$)nJ7 ziF^k9vFVrjC*XSi$GFTt9^V|g@?G${!07!^Kv_h{Bz15Y@+#;d$iB>^nzz3f7w{``QdKg0x_Qwl+TO# zR7oP=nmh_POP&|ro4g0c9Y$UR`3dCiI*cZ-iu_XYI`DPm?t0ix{u_S2I6(e3 zdQOoi$M+$Z$Ung2`7O9S{*=>G6V`ek^p3DN|C|4Q z&TZLQ$8Ar(3EqV~cNfj~A@2kqLVmNW=0}moz$cNfM$c^WcE~Rx4}h;UF6)iMdOtTV z`xeqo=d+c(Vt4gj?duh+_6I2 zFTM}_(Bx%437G#N<1(KfIKLyw&kacKebnchKpqXBNq!IWSwLO^`4!}W7`Ayxa@Nj_W51o((}g6 zg~)@)sh1$153dS$WT~GVVt>UwMtoJbie5bC7Y#{}QDGmnNSNuS{MYUWYsc<2Hx8b-CYb3^aL}PYCAo zv2mHtNSxpC`1j;v;1|g! z!G9;;kir|pJMNRa=PUjtch6V6c0@lsch8@ELcS6CmE_yu+sOC8zac*hKS6#TexCdy z{5o8&|0;Tl{I^d{Uas>;xZZrhM9mndjldKyjAo?!Bs z@N(p5;MK{;PSKwFiotIYL$K?2o^4E~xLit4+_wA*8Yvd1+XP>6?{E>Q=qUT-`p8lu?+&niSUj**1 zlSb$-P5HCPSEu~P$k$IIA4d7j$agaNYUq|XeNA2-e+J|G>fy#^{~x0#(zxW^^Ep$D zOTOE5-M1OWCGVckS!7)DXOLfNT=MSw>UG8?Uv`G}Z!#|V+o`-8@7QNtuB!xGSBH&D z&rbB5A`h6U{pZO)geQ=1h2J7CKU;eqkl&uA{+#?VdQu*fRs8SuTC0%HNZtXS)3~fR z02f?d=eyOJM+_a#67 ziS`U7|8Rl&X!4uz>2SH9R`d3!S8DIZI~I`#X^n3Uc?0kBngWY=h@%5kM7}cR-S=trDL)ALX5{5o>O9+1kNZAtXc9h; ze3LHAw-N5{FWu1p73JOcX$L945cv~H$|Aodrc$Sx}ZuO?Fok6tQ)aztt8~7F%ce zPdC|C1Vv0oP;Sr>)CBiV&{_WgVRKELnDNpf<| z`RBOEJ+J!fIEM`hPky{)5+1JC^R<3c!jm5_xrB%H-`4sq2@mUiKdq4Pu>R3+iG8*u zJgoQqv{J&u`qNs!BjI7aA4gXb9@andNX*}r@UY&GulFQ8eEe3lZ(oq`kTX`!@4~PA zo0$Jf_^->`@VCid2fyO2G3U?WAN$+rZ-IYbIY;3;wf;TuSIR$_@Nm8@o$p5z9?tj4 z>T?qQw0`XK1^6-fzrw%p_i_Ed!wdfqeE~l#{}KG_@{2#cDz|#`e*TrCG3Rpl-@QHh zCit;;M86CCX@ltZk%!x*@bPsZeg1H%Uxe$&$)`$*oG{P9+vEC2B|OaY!_oC0N{<3=WKKU*A zZRMU%UGur`1^iKooN(O9JI=?Z9-HuR+&Ag^J~iQCeQFTb*AgDqU!?WF0e{~++|L8oAGFmmcT7EwMiIDX7nT6CV0>b$ves|G}}?XAFOb{Il>MY9D?X{!p#| z2K?bV?sw$we@y*vHHq`HkL6d(eSL5D-q`ZuA@B5k6gopLde_!mgJK-Q!+toP^5X2Qez-NTr_KjC4$ zzi!x0cvwHw`hy7%>-}}ZZoK5PwE zf2`g{>OOSPs4vK|0294pTUdrZzVh&cQ6P?UH!a-gooqa{{!*3KZHN(c=Xg~ z&;PSqZclph%iuSDFs{D}e&vUv-x>ZJ@-6Up%I^o?IEpzBf?xlU=nscq@zLmI_{Zc= zmWPk8@Nu#K*6}=_4c`@GQqNE1gn7<1&ql(-JU?+`{0A?A|H3%>@4^3A-jTacU$@Uk zFW?_fUqB(CDw;NgLkd|SiN2RdA(m< z#~W7v_eHwCm%~5ziP&=!{Gj|U@KgG@xF`HhT7MmUvyQu69{N8bRy+UaV-xGc?ej%f z#{c+~#QH}j*6+dktkyRY9?thab=-Xk5BZD8~g{_haZ6Z^U;k75BV=w{-+Wi^1r0~sXWZ{G4YV+|NJJ_KSKS#m++AP zQRV-4!bAR7m4AtzCYZ?Z-mk(v z&*#d+e10ibKmX_NVEwOZKCeu8n9s(O@q+z+!jsqcPZA#1zf9|2pYX8W^ZBcUhxOmq z`nM$f{G4@v@*N2e>!0?|vCq2`9@cxFA4+&w{|BFr>pzieG(9&(=gg_v{c7ta6ZTkg;N^i=dK z;Y0b=@Ehbg_%-r-!~aVC9{~US=i_l7p78UZ7u3I;@X-IITK@$2&&i(-|H|iL{&V1O zkne>*SpFjT&7X}quYfOgUay89(E1MiVe&U6Je+S&=lkY_hw~lidc75Xw||L!2Jq)i zqrV^i1^GwdU;0v9|0(#kFGoKG|8@Dz@Kf?{!XI&S%=s?-*Zwv75`OhpqhI`f2Vpr{{sF8iJWlUhK~E1gooo^`EN1k&k}xq|7d+L;bHwxzY^E~9el@4(ccCC zWBCW*KbC(o;o-Ow9ryDI56AtcuKP{!YjoYeE%$sjX+F35;_4r--sm~GuW#x-aos%< z9**15^?g9XU%c{y);}cSVf}Iz54;2ZcKI*Ecgdduf2@xCT)F#ab-%HlSpVYHack=H zx`c;5o2Vqt=_^s!}>?bGw`3xW6m}3 zP4a8u?~&gZ{sQ^7gopk!^?z`}L!T#pJ0ACX_*4EP`s3j5kne*3_IKj?XTU!xe;)j* z|BUNj2!Fb~34gczRq&19jXAG@m;NjI>*0_4Ui8E8Ps;yJ9zO2E$Axc~-U}bC{(E@) zDExr@s~7Me$$k5rd2h`5X~M&G`SgFso|k_){&%l0Y5k^zhxI?v9PR>t_~yA}1WTr{lgU;o-P9osH-9 zw+RpH{qud^k?^p7r`8YQ7t22k?|(n$e-i#it^bnT=he{bG|nZ~hd!zIg+EfMOTQA| z`*xtM>w6`9sR!g&!`~&(!EYW!Cxx>t%Sd1wf?fpSAVSDUIzE)kype0`Qr6(zs}^Z;C?**4{$#oAHpA? zJ|Ba-&u8K8b2Hq1zAX>?}enVcEUr>J%199`%?JqT=Z8bJmf5t(@A*9>1zF(;7^qQ zHT*X6e}F$vb2tY7ko=$E*&oNAABVqL{+Wb_{{Hz^rxG6eZ~AG>`I_AO(DxgEg!NC? z`VBX){_*O~>-Dmk)a~TnpTDI!-wFO&<=hK7lNg(No+$K!qj{zUm1_}%0`fSjvn%3lNDeo4%KJ^XL2BFq7YQcAjtfe4&?7r0#nG|0VcX$9tRZ&iS>`x`d3|G z{U2lfOSJwk6YDFf|9$(1#QK-4`2Bi5XL`zJiCzt!#H`UfODtoM8#mhiCteOiBg!ozyc?ePf@ z>+4s={3j+ntoO&oGZP-xUvvAo{@Do+>-}+YL&C%DZArJcFH3mH>0BLi4#1xwe=Ynz z@;AbNc*mIYmV}4n`sZ&RO?Wu&rfgjQ9{366d=UOR`Hk>r$|vwI-y!CI3H}uM*Wq`Q z{|EdpHpQH?@T=uNNq9Kl)Ca;JtJ|q>=>2N{hx6^~d@qN;_?no%34Z0BqTdC6_Ri7o z3I8MgVD9VSx4lbTUxdG2{s{P&o`F-IZ&~dlH zFVgyl!Y|QrACvIVvvfT6-kI>w^RKo3X$cSO8(RPDgopKSxLfT1eE3)7`{4J`etS9m zPvr;Y-d8(fe5!u||41Sy^z5nUjR_Au->d6;D&b-MMC)%(cvyc|t^X$cl=jtk;V+dh z;SJ^7`rlTet2dulTVId6pWORA^-po#gAyM4JodhE5D$l6Eic1Q-zTnr0{orwr^8<% z|Mi5QzwYYONO;F>gcO^Wm_v5l!!o&KF+hhKogopM1x=bVCVf`z#eqX}FdOvPzB|NNOX#IhN zhxLBkbVwfN7Uq-H{mi3@^&#hZx??ehze)aC_@$4E=k+!CZ_B@(@UY(&+Hc=YcsTC2 zwf>ykJ07Hst2f`C7akptdpEh)AJqD-Sbs$MzW{%Za;`^CM>)^DfbWO*wEhtC z->CdIW4)hG`vhnhUe<+e{Oef}lkVZERC{-)gLyLI*7!rKoM>qE|c9~*O0XU_lU zTW+_P`h;{D{A2Q~;D0K=o1DijVEwOY{e$6K<=4Z1r1O0o{NwUn@Yl(o3*RmOE%-Av zhnLIUe|sED>KzHM%EG&UO5}w3KS=xM6A2Gu*kYSnvJw zt%Qg5cX?dAj^9amSnrREpUA^`h5lPt{|j$dekZ>7?Z$JIvsv!-KIi*k{TsFZLGVw= z9}Yh!FT=0f8T&t3&f`80>z}RlFND8A-h_|kuY&(r{{P_j|K-?cAa|cVaa^g7C;aKM z@a|M1C(Qqm+7DlcZ_C7gw19g*{1oony^a4F|6RCV$?JP3_!;HjM;`izp6U3{Q_o2F zZdrKueB{*C|0Qtue>L3w-vD?2x4^wW-<|OAc_j1USn7Df!#;nOuFEIo;k-isY+RnY z8D5lsC*jYOg?B$rp;S5vD*1R{}efIxo!N9J-GY79q!Lx$Kk%6`6S$*kG`DnaJ?$JUf)P~xL$A7_4+S) zIIr5ueZ4j;R)1N&*?qk>CH&cO$@xF8mHWE9|F-cz-ap~txZlxnACT~HeSN+UOL$m+ z!{g(}`}GMA>ph3ZCp@hGq1Hb!;bHybE?fPvdV6-l!+biL&+`)=a!S7vkGl{4hw_)h zPs(4D@Q^=J{_7JS@_(lFhvAQ^#N+-A{Ey^shd=mW|f1UmngY^zrTgi3|8S_Qw@F&NQqiqRK_TPd0jXK7Y6YE1xTRG3h`Yl@j;tTlSC48^ehIj8v@9FRU zyyx}KDPjF74YUm3e7gu0__;eosKRS^jL?AlcBTn;pBCJG+Hm*jz}=?{cb@@#roRv2 z?lXcre++m24DSAO_)>FTz|YBjd|$8B6>*`jv;B;ci@Q$_>)j_0pD3pQKPA_frEkfbDP8W zc>lon$(Qg0@{H~n`{Q~j&%%$(bMTQo4?iI^?rjNlP}=DzrKX~{&!0I&U5qq>@@tW@-y&^_IVcW z`4`|m-y+=STY~$1%W$7>1@7~$!u>d;2KV{a;XdCM-2K~d_wT^nzYBN&0o?tEaQ7d< z-G2;s{~6plbGY}z0`BX(g!}qt((AWZ&di8N)rF3EcCU!abiE z-1C{kJ)Z^K^I5_@pOn7-;C%r zC!JR}S>8XsKambkMkjo%&zCuPMmc%7zu&(A&uV=U-jtW%?o)=lPYr%RIdynj-hdyH z`}d%F4qbT%>z&_)JHH2aejo1q5!^XrxN|0O=S<;#{4j$b(*5i?{IGlh&*-`@;Z1o) z_s2aqKfcYv-9HC+|2%x4`4`~Ftz76^qz}>$KpXj&)_)+-~?mi>9`;6i4GlQ4Bf8b^BAGjYUFX4N%KBLDm-akj=S$JQb zgCCXW;eOm(fFINPBK)|#1V14!!zc0@-2Llt_iw=6zX^B$7Tk~9+i>^y<1No~te#!0 zKPex;-G2yo{}J5%$8h(b!QFojcmD<4{g-g}&**LAevXY{&` z4t%d(*U^QallS2HtK;K}K75;eMAvzZ;XdC9-2JC;_n*Pte-3y51>F6YaQFAu8@=D$ zC#$bN*sGdz4!&EShu7pK_)d8l?)(be`Bk{{8}Od;{q<7!AIMu+e@xznAD4IFBY78o z)26sjdhpZoKHS%L1b6>2-2EqT_n*Sue+GB|Ief13O6k4lc0_+q!`&wXcb_cWeR6R3 z$-~{J1mAE~oO2nz_4d&#@S0!W1@Frn@UilnaObz+&Tqq=--8#_vk%`U_gp>yl6;8u zJLD6%^QUm<&*0AYynS5fr!)_{bJB3ot1@1mo z_!fPf*5K|_hr3S;-c+A9yesd(H|e-txcdy?4Xq!-oAMF-fP4(^$Y<~~@;Q7VU%=1G zm++-LrStawN$EPK;Tz-`_(pjao{@XMJKz0_SnvMc7hdoFWvqAq8r=QsaQAP(-QWAd z$94Y>)}PbdykETD$L(RgbNcX2n$HOCIgH_+!vyX*OyTZ1gL@8hxaY8dyXO*K@_x`f zJO}sB!reaycmF)x{R?pSFT&I6Q-M3b3U_`D?)*C3`K=3h8}4~_;92$T!Z*tYaNnOC z!hL^o1o!>PG2HhjXYic99yf>k>-Y<}zb@vv`nn&{;}m}!*f;5Mhv#Sa;}m~<*nM7} zlRcyR^99Yx?*2u%`+J{yz5AE3-u)|Z_pid;zXo^zI^6wR@Pg*whP!_U?*3i4`}g4P z--o;Z0Pg-nxcg7wCH0@ecgSb(s`ndww|oKLD__D7$WwY;=&N>gn$T;Q7|E-sjtbyMG(*{vEjccj4|ofV=+??*1dV zuh$sv{xi69=5X(a1>Dzn3HSB&zVqGo6i(kL`yv=N#PUn}_>+3vi!r5$^LX z!F|4ExX-r&_xV=gKHnPL=Ua#Sd|Pnmx8ct3!1royU3f!2fIEK(cm4?O{4w15Gx$Kq zox}aQp9MUt`%z1HO`f@CeV^>r>v*zo=jY(g&%>Qxg5RY4GTg62s=&`^eHHH4AvNI6 zZ^E75f;+zrcYY7-*=Jj+=(N ze+GU+>$C8&ya0FqBHaB;aQ836-MSaPOZn z+{c~3y?>@~A9n`#ap!RFH~#_%-w$zqdh_}|aefBw{4Cu01-SEzaOaoc&M(8AUxOdf zKCHw0@&?@dstNaXX~BKn+i;&(2kxF-cv_zq25|Qu!rgxacmFZm{U`9_n!^Yy9`5`C-1$Yg^DA&)uPWR*HTcB)2YyQ4f;+zrcYX)%{4U)2 z1Gt~h8N&U1&Is=3bH?zD9-qt-9$xZLjh8Pqhu7o_ct^g3_vM+p#{Uy;PeT5Fc^2-R z9K4|W&v|%V_cIIdz4|(O5q?_FUzgy1oKS}Q{&xlL`)yVDKK;D`_xU#AZOx$t_xZNr ze*D#eFa3B2zFG4bz;AiH19#2{?(-ePeZDieA0N%(&R@Wtzl1wKbGP;Vb6Dq_g*!h7 zuPZkXcYX=(K4o}D_n#{8&GIUIySxE+P805&7JP?t+VEZS4t$Ti3vbDL@V2}UKPVr- zJMtmibDqF`zEil*cLw+Q&fz}a1>EPmg!_C`x%K_y^G(Bjz8SdBHw!1@7~$!hOCqxX-r^_xU#9KHnzX=i7mMeHVU6^Xb9;xT_C8to0+f^T%-K zPvFjPj%cS{Iu>Lr+zMV{>`7iZqnzuG<=J0XL9iU%E`l9@&f#Tya;!n65M^t zaQCUf7s{{0&&nI{l;Tz-~xbwSk=l9^w@57xxf;(pncg_UvoGD$`aR%QjpTked zQ`fHVhjW@+8ty(Bxcg+`n>EiIJSWe?^YQ|Go4g2b$V+gaZyE0Mt-;gEsl(mB0eAl< z-2Gc{_iw|u>$p95R^ErZ&j9W|L%91);764|g&&j8;3wpB_$hhn?(6$!qi;{(8F>c2 zNuGsgE67TmA%Zo~ch z`5xT)eYo=naOV%<&Y!@YGle^626xUJ?$;$R;5j{SwuHCknR~78pIg4a0Pa3HxclVc zr!@Zpd@3)({kr)Q{EXI@;d#9tx&rt4R^dM127ILaCfxm7aQAP+-M<5O|1SKjjyr(+ z`wfP0_Zh+6XAF0r8GMiCHiy^c3;16765f!f^6UF&zdQ{;D9^$Dy7@f(q}CVU6L}GS zN?wBBBrn7Ly8H^cmF2b{abMNZ^PZc2Y3HI-2De|_aDODe*&NCyrys; zcLsOP9PaO1NZosVKX?vlxaW|8dk$H+d*{R3ah7w}VYd!&}|r95??_5HK? zqWJeTydclOPhA$*XW=E?uPeaarwDhS65M^taQCUe-KPpat)4abTwaHtk+yY| zwmc2*$a8SdClB|03UJS-2={zSaL=a<_k1dFpKlfJ^KHQ0zX^B$7To>YaQE-Q-M* z?zxrVou@+N#HZ^2K?+wc?mc?~_d=hKJpP|g6p zM?QofkdNS=&lrA0>nCu}XA1XxW^m7E4)=T(@Y6c(5}vs{?!V0a*7u?3lZEe4P7c0D zo`)Zh7vP>x5q?DLOK{Jp4EKC0aL=a-_k3#b(>iV)?)kLf&Tqq=-+|AS--Vx%58%!p z!ks^YJAVv!{tUiV*L@BzY>fM00Wa#~XbEr0GxuNLKmIviS@=mEHwT}{^Kkbmz}=?^ zcb^J;yUwc$FUf20o$@-oB5%Q+--bKC19yHG?)(AVIYYQ}MsVkh;iW6$b(+9;%BOJu z9*`N_KX+*kFI*Y(Q`fEUhqC6DhP!_T?*3VLT{$`UUU?qAPhNnx4f?aR1!2DLkcpHG^m5bNFVt zf1#A`FYT763+wx;CeOh4$g}XeJO|$^&%^i03vmA)oFcrf^%c1LSK;nogS&qn?*0vU zL&t5x-M<5uC`ZwP-y@&Fy|3nQUzY{k*L?~1d8Hn(zJJ^^4L_kiIk@}h;qG66yMGbx{v~)*$1TI% zzXo@H9q#-F-1$wo^E+_ocj32Oq_Mp31}hJYfOuuWJ|KC-l5o3GS~Wm*M{Y*b02}HL*|?zC&Jv*X4EiDR~3l z)$1Oc@S}SDN(b)wbm1p8w;tT{>BBqe_zwnf|2+30{D9^;f&1tFPvOp)!F|4SxX(AW zE%x&LnIr0%hC4q4cYYS``~v*6@{4fim*9tVUCMCh*Wm6`hfj3f8}OUFAK?CefEN6$ z*0`Z(&t z{kq!`e4ld0aOY3p&Y!}azkr`s{t`Zyr+zV>hd3aQErM{rwCBxcdy@?lXaJ)%Q6};XCCs zxWDgW4tJkaaeY7JG@mqli#!9*%d_yU@*LdX=a7f**7_3su)GZS_Z3v&N3^~Q_xBsr z;QoGtI{cV&8t~)tCVV9Cz}>$KcmE#T{rhnDAHm&!40rzt-2JC;_g}z|>b#b4A2;>j z_5I_VH2j2ea&XTf5BD4jaL=I#ch3^sb11_-hYH+1tMH}zH{kBygu8zW?*47K`*+~( z--Y}8VFqyL58=)q!JR*bJAZZopTj-R1$^xN13xLx{Gavx)7Im@Ec}=}2lwOaJlv13 z3vfTaF2eozx&-&*>oVMruWRr_>RE@oe*^CRO}P8F;O^gsyMG7n{$05H58%5t#p^MI z?~#w-{<*7Tcth(a@O|sleT*3U{9x+e+^$x8>Rxbw$w z=g;8&xutXXO*-xZK9?`yXXKgf>-)#~S-A6aaOdaY&M(28Q-(XI0(VXo?vIxm{Iot^ z>Tv(u!xsFs=Fo<_PY3QkUHHj6#yR%j?$d|6&j_AV&KO>jPvFPpQ@Hyq;2SlcC47@S z_0aYGke8?7{`t%~_(84D!#nZ<{E)l|_s`!f!Ts|$%kU%0slboQtMGxm0eAl<-2Gc{ z_iw}9zXx~!KHU8WaQ7d=-G2f9>wSCAeP) zUWWVoMr&~Qsl(l;0e7D!yrS3hx8S?vZFp7QgFB}Wcg_IroFUvl$7uxje8zCkX9nM` zo^!bK7jWk<;m*&L*7uL|v+$aZn}hF{=ivwB1$b9pgddTY;C*=+K9X19=j2tme}8lX z?(=QJeZDQY&$kWt`F7ww-!9ze+k+od|32L3JA%9a81DWPxcg7x?!SP${}S&0sYj&F zzxnxI_fNy!KL_{q&BL8jfSBDpK0o=boVhFEj{Rr-#=Rbz~=lM_IHRVj<%}Zm?8N4N*!w<<9@Wb*Y zynm~hpSeE1_kQ#IvvAKp2lxE*aL>O0_xy`+&%Xrs{L669zXJFCt8mZ12KW5y@Pik} zxwPP(PaE#}bl{#(7w-A=;GRz(?)ePhp3e~O`HbM6&lv9cOyHi+6z=&f;Lcydou7K- z`hMGUar}E4UYF{#Cq&dI`^lY=`a5BKe70e(=o zhefz=KTB}`e)%%o*QExZT@ufy4tM_s-2Izy{~q}k+$V zGl6f^Jg4wY@)rx26uiP?)(Pa`AxX5ym(POz!L8K)Gx*V9v&};`EOOvG<=sl2X~)5JbPKpEx#4#${|5ZTZQ}Vi;m&Wt zo!^E#zX#v0?`QABOY#AHr+f&n$R}{;PvOp=!JR*cJ3sZf_5I+SG~78ExO1}bxxVi> z2e0UQ<>7sK30}TD_AA5Prvi7MD!iaRHMslK;k(tR1wU|k?9+z(_fdA>IUTnPcb@^= z-$yotA5xzYyel8Wd-55)sXlY~e)$6K?>Aq<4`_XA=lcHX$kXtlJO^LM^YF9s0^Hwk zUWA|1`VxGD=1_*GEpb11;wvj{I;5qnqQ?q7wwe+};b zb-4RC;O^gqZ@eP*>A;=eg*(3ocYYu4{Luw`4EH=I@Xc4mo>O>EzJUAd4okT2ho>ID zzJCs-Q1`+S#hpKt0{*7uLkHx1va zo*B5$Hw*Xq7U1q*gu8zU?*3)C``6&^Ux&MY1MdD!xchhD&gsIvA9`?K-#*;ecLaC- z81DQD-1$?u^A~XEEa5wJeN&b7{opyI;rqQG;D_W{_)&QdeoUT+59I~;ad{EG_13X> z3BFrih7aX6xaU)cdp-@g=hK9HJ}tQC(}sIK9k}Pyg?m0dxaZS{&o#FJ-18a28=B7q z?)gmNp3e;K`OM*-&jRlGEa9F{>Iv)n)ALEgJ)aER^U1Ui;1zv+vkyPGACAjm;aOcaOaod&ac3oUxja0ehr?J*Wp{_Ex7aBaOZd6&hNsVKY%-b2zUMn?))*_ z`7^k4=5XgM;LcgXeZ4Zf*7t++vvB9<;Lgv(onM0Ar2Scj&*T;OX?Ybsm)GED<#l+@ zw-4~DZy(^h-+GAd;o9ChwuaP3EcgsaQC0V-G2^u{{?)nj=O}r zf9lEW`)9w_r{OJm4(|SWxce92?q7tve+BOTRk-`t;O<|CyMGJr{5IVA9k}zmaOV%; z-akXQk2`{U|BT^2?gZ}RPT}5f3%K)_aObC2X}rR?)(DW`9-+%EAZXg zhgEn@UW0pI)#1J_4Y;p+6YleB!QHbBKdwGKxcm3v?mvLL{}Ar}BltcYcMNy`8Ql4E zxbqiq=P%*T&pdT~|2RJjcYY4;{5;(GCAhCw8Sb14yzTu1KPYd&o!^8zzXf-G8}9rb z{Dki3^x=NKaRB%8jYIfxJzqLW_?=gmA{Q@5Y6{;XpTW1u=kOi!R5kve@b%@pt^V(3 zc^bY~o`E;zS$IcYNci1X=KLbOp!FrV`QxfIGhk_s4Gq?))m;`8Bxn>u~3{ z;0JWRZFpPWfghB2;T?Go?vM9AysPyixbw$w=TG3ypTeELfIEK)cYf+uV=?as=cnP$ z&%vFOhdZYLcTN%R+l>m``Bk{{YjEe+;m&U*{9db5&+59g;off@xc6HZzE3$lxR2Y1 zFSLFHcb_rbeI{`CnZgUoU%;Keggf6a5Dohw%*XlZ-7(Pa{2bipn}_$*rvUfuOcCDK z`V#!8ybK@6YjEe+;m&Wso!^8zzXNxE7w-HX-1&XD^G9&!jN#6iz@0ONAJcpmaOW@K z&QCof{zG4P=cnP$&%sAJZXQ0C7vK|l5x$UD5`N#6?a}AKD*TYV2G8m1Aa!_QLp(qO zzCq7-HQ|#hjSR?_s?zX!j}(>`2+Yto!1cV^Buuce!K}krk)eH`%mFJ zZyWo};O;+%Pp*yYQ_qa=!~O}^%YD*t_sPKBCkuC<9Nc~KaQ7*}H)%d)cvfD47vxp= zHhB%cLtckhe`vz}IK2h$DyI$a%X@I2Zy)aS9l(9QL%7d(1o!!l;k(pl0{8h& z;XdC5-2Inu_fP%W`hIi&G~E4jaQDx{-M;{L|03M|D{$vj;oc85xUX*=?(5rvJHHKg zeh2RSF5LM8cuUuD2zSm1?wm3FnD+zxq9%I9!@{c8dD*I$-!fBhv@Ti-wa z`b!$#*6n8w?)l{5o=*Yp`4r)vPYLe%l;NIF1@8G&;hs+o?)lW=o=*er`844*J#W^5 zdp=#b=hK6GK7F|7Gk|+OL%8QNf_pw=xaTv0dp=XR=QD$QK6AL|lX_O_{F^^NIzJ6} zeg^KZ17_j=`g;NH{36`>CAjm;aOcF?^!qPT;5HQ}|RqgZujk=5T)>!2*6*uj5_9d-BY)*Y}V6XW{Oj zgS&qo?*0Y1`xoKvUxK@T8SefyxO>*&?%9C5XA|z%&$r-y9d#S-*QIyhKCdp^=hcJz zy!vqO!x7xSFJ=rM>-)kc@P&K|KPO+nH_Mms?ef%f*7wg)o`$hJwUXnN9?$d;Cx;*x2!QH0~KdGJ__-T0;?*0S#7WEv$ z-G2mk|1rF&oEf|&pTqt8e;4qS=CFi&KAAo1`=_q;S@_k}o|m`bTfHCP1@8xVQQm{^koVyg`3Ua*W4QZI;O;+# zyZ;QnO~;+X-G2cuYyA?wQ=WP5`u=hMEZqHbaQDx{-M<8P|1#YDD{%L(!ri|CcYYJ@ z{1)8#ZMgG$aPOZ!+{Ycjy?=&qA9n=zamR4)w;9~|bGY*taOW@K&d)q=eLpxq3wM4F z?)*I5`6ambRT-Yw{;a^a%Byf+mm1vHy$<(zHQ?^qgdfszJ8<{!!ri|IcmF=z{Ri;v zI_?l&l272ypTeC#gFAl?cYf;E*Y|_-({Sf!;Lgv&onL_adKKZ$DZzcc%J5y9PYv$; zI^6jUxbvHE=Xc3-2E$X_pid; zzX3n0{!O_1wBXKf!`qr$4_?*$`|#cJ0eqi)2tO(x!B5G@@U!w6+8Y!`(jzcb`1meF|{*DZ&rwxRncd74H5uxck@P?%#s@xNW%eJ8NUWw>uoYH;_j!`;6DcmF2b{abMNZ^PZc19$%}{HV@rK-WBnaQ7d<-G2;s{|Vgv zr*QY5!QFojcmLG$*Z0ppomU#ZU!H*-)j^ zX}I%q@Ga_@hv(%5_*QulUXYjIr|%g1mEm)F1%5_eg)ig{xcfKZ?%#sDe;e-p9k}~< z;qKpqyMG_<{v)`1j^XY(fxG7vUe$bNaQB?U-E#qV&n4XZD)WN%{kC1#Jqyp>KCa8b z%kn&Ym%Ieur~ESfkh}uVD5nZ{p9Z|D^-XwR-hz+iZFv0-@q9b*bGj~FxaT>5H9h3osl{nK#w&%oV33wQq5bpdD-1%d;^Jj4HpE=yeUBJD6mT(_8)mYy@K5iQB z{g#6}KM!|)0q*=F-1!x_^Q&;@*Wk{t!=2xP@6kSN!@aLMaPO-w+}EWC_jT{XeO?2& zdk*2J)pG)O|0&%4XK?qQ!`*)YcmE~a{WHJ4zJHvbg*!h7cYYr3{1SZI#qoG$_!d2H zR)L?oHm<5%n3v-Dd)K z{uJ)~1>F6Y@C|p5^GV$h-~07Z+vI6@MV^6I@SV!!ks^ZJAV#$e(HDD_k*u*8t$A7 z+&NkJE&BoP{36`>CAjm;aOc&u0$zd=_xeX9@RwQv25To9B~;dp;Ss=aYqdJ~_DO zlZR)v#2zKM=TnAzJ{7pf^XG8qFW}B!!kwRa(fWRy+#~)y3qK{#!Kd;({3dw;e&{|izXjv?m36YZ?0Nh%imq!KXYC8H2mZ}V_z&!+<4tMyfQS6+i} z(si%Hw|GCm8}c^1Deu4!%e(N?@&SCauGbKrlaJtAu~pP!QHI^!k3rE>okM!(DR~mxL;?ufFFNg%vr)u%QG)q z-wzobHw$;49Nc~KaQ7*|-KPk5p9*}R`c&cWQ-eFd4xj0KTX6Sp!}n><9rzJ>7e12r z;A43oev^Czcb_rbeI{`CnZn&?2A}A-bNDHFYXACvaGx~XeKK(O$-<8-zizLe+S>8c)6;Lb0@onM2WP<|bLTHb)~)^VF~_vyfATHl3l)O>pIw!9DT%17|i z@-h63d;-tt<6;W0$QST~@+G_@PrWL2{>}U0kUS0V$}{l8@+|y_JO>}h^YG*H65RdE zaQCmk-M-2MA-_aDLCe++m33EcgsaQ9!p zoxg-TKlOX-`^Widxbt&x@1H!}$1T9Ue~NG)w*>cb%W&_v8r=DHxbquu=QrWb@4%hk zg*(3ocYYu4{1M#yY79T5{W*bm8*tCF3EzB8oMQ*>`E=o)PY>?-^x>Y* z0Pgt=;hxV3?)i-2p3emC`Ap%S&kXMQ%;BC->ecJ}&G~7#^E2>;_H!0~R$hQRzX*4J z3GVzd-1#+lQP;f=-+!lgo(=dZeS9_HoAvp(1J5d_3wM4G?)*O7`6GB+`D6G&`2^mT zPvM8<3%K)_aObDm>-)j^X}I%qaOdRV&MCm1Q-u5Wumm6LdX?dxa}9n-bEw1JrvZ1L zCVc;$<6K&B_i4l3rw5;?PanRJ58!)s+#%e3Ch(EgPvK+v41Q8Rhfn1T_-XkPzDd_5 z^MBX(PgS0U@0RD_HF+MsM_z!}$8E#i zzXRW|^<8*NK7hOb5bpjXxciUc?mvUO{~YfA3%L6);qIS#&HDaveirWh9NhVNxbsVJ z@1HW<$F0Du~S47To!5xbr)3=Xc@GAHbbIggbu(cm5de{26?=_Td~} zlP}=jS4+6BOX`o-_k*u{8t(JTz}+(oKcPMaxce93?q7nte;Mxn75F|Kw+eUv2Hg2g zxbs_Z=eOa`@4=nlhdX}&cm5FW{0ZFGYYKPH4BqzsfghBo4qjkCz@49gJ3k9|egVF1 zLp)v)epp_D`*B$rzW>^oQ-hb3Q-?dh0e5~A?)(ni>$~uQ?%(#{V|gEbQa*s+Bp<>T z@(J91rtqU$KZCo^9PU1;*RJn}!^%m+ou7d_KMQw$0q*=F-1#NA^UHAO*Wk{n!+pIP zaL>O9_xw9>=Xc@G@4=nlhdX}+cg`5@IZWW5!xZl0&fsTtedq9vca8gC0pBcN!ney) zf4shbcF5E4vOELdDbK>|KNoXz@P<4O_s4Gu?s=Bso@WK_c~;?`XASOo*5RIK1MYb? z;htv;?s>N1o@WQ{d3NDV&3OR#e1>q(X9V|r#&FMP0{48TaL;E3_k8AX&u0Pme3o#} zC-o=m`_uDD!#$rI-1&L9^9%5b=3IpDl2_o)ufm;QgFC+tcYX_gNXKo%2X~8e>A)BI z`0B!o`usb9?^MnZ?)(wl`D3{AXYk|7pTkG;1^lFZ37^O_o%Q|T{4Cu0Ik@xlaOaoc z&MCv4Q-M3D3is_{4SrhJs}A>^Tkx^w(1yED2kt&y_#hYO*n_)IAMQRQ_y*;S;alVr zcuzisyUzlCR_mAWbMn;dQs>|NdYF{vnTBtWXW$um7QS6xfH&nu_FZX53X z)`L604|o0m?))L#`4hPFr*P-b;Le}Jou7LB`hM82eVB%~m}`E9uKJ8$JPpeN2?*4W7Hmz^L z-M94xaX6FdpF6YaQ9EWDfadKCHGIm-9H0&|18}73vl-=!rik3ch53>aYgK1f&2HyR^i(;&l=q4 zRfqe$8gQRi6YhQ3ftR#Ty6`RP--Ekuk2oQc~20;yoAwa;OScjj6KqW$IqqQa>8JtK+ViGX; ziwJa$z-J8>HH)@HYukjCZECRwf2K;?Sll*Nx0`;}T}Mm10o-k@sEI=JIp^MUX6~HK zNV}ii@9X===Xt^Nig=9A(b#FF5NT5S;a^$D{Ly^?L-;-z+%mZxNjJw+hbs+XQF*U4nC7bqk(H`Pn1*YT~_ubGw8D=XUQC zoa@yuIQuyucqiFS{Z@4Tu>a|Tv;RK9+5b$z+5c?8Zzj9Bf|n345S;ZF3C{XU1ZVw0 z!C8N!;H=X*@7RY`=DIGmyI#{3k2uyR~8A*{*(yL{saYQ ze`*A0e;Nd5f0_kPr~0-CK81Lz;JL)x1YbtHL-5taI|Z*K-X-`>;@yICd_sb=|9yh9 z|NVlq{{w=v|LQ<={;>aE!Ar=`RKbJ9(*@`HW(&^#=L*jL`vqtJ^8{!AO9W^CgMzdF zHG;GM4T7`(&4RO@7QtChtKi(eZGv+v zI1XOH*>0-ft(*^nA13Y-{3!8E!H*Nq7QCN$uHdJM`vo5$o+mhuCnbV&e1d{=d};*e z_%sO4@o5yC zr%!N>Pru+Cp8>%+KI#dj7k-|@@$m}I@kte&n{-e z4CQB$;ELj3BRK1C5S;Zl3eNhQ1ZVxNg0CjKZGu{OJ;$^>+)-`a^<0P5S!;e}j0x;LFJFfZ*&;>QmAAP)PAf7rc?UPw+FuGX)<> zaq|oQG_`M@;D?D92>uS|gWzdY-x|SpQhgf)Z{mCqyqS2D;QNR-3*JJ!MetVQt%5&I zyiM><;$4EX|J{PK|2=}U|Gk2<{~^I2C%b)uv;X~qcaZ#m;D?E)em6RQ*#C6F*?*tl z?0=@_P;=I_Pu(gC^*0I5`dbC({Am-M?RE&x`O_&l z+wBsZ?RE>!`4$qK_4f(R`uhcE{R4ut{?zY9=L73c7o7F`1ZVx3g0p_V;G9=^f;Urs z76`tNc#+`TE+v93t+UU`DQm}LAe z5uEi01!w&=g0ubx!C8N^#pi&@>Bg*T5qwIbIngRO&&S#XZy@@Ltm2B{=Kv7M%5m z1kZ69yM2Q5^Okb62V!2Q1GY8ZllHLgUM`TRy7HJhWu$3+(-SoMeqXR9fIeQ{!YPJf0y8_ zzguwD9}>KV^!EwgM7&?{$2lJae~0topecy?fbnUh_OjCiv+)$c!}VLi3bJeJa4r46%Z;P8{h5NZe!t*B@;^`TO5z2A^Yi2)!E>qKl?Yx=JSg}wibJE|d>wBR zob@*g&iY#fPosX?A$S}0yH3IR?;u@*cawa#;3Fx|djwA--Ya+w@qWSUDb53eHxO5c z%ns*6KXI?%X_U9Ag6|}rE_fQ%D_d~x7rBD>l3l;x^;EAs!CQ%!2+sP0f_IYs8o^nA zgW&r}f3x7Ts9r6C-%Pw!@I1=THo-Zsx&&wa-Gci`e~;j-zgKY9-*54&AO=2)!+_vC z{-}R20+WDCyYVXolpPl3g+2HlyYzew;sUUQ;E@WaG| zf*&W|D0q1ODLCtI7M%6B2+sOD1aBh$I|Xkh-X(YqwR^YV{P)uy!H-hj_6pudJR~^( zy`xWXp6{t27{@RlF#hbnS8(<}RdBw4Nf(^`_X*DaWD3sy_ywn7P2~yx0mZXG@B|vS ziv;KSVU6Idzd`UfNPnZ?tiMU{={)}wJb}i~Ho=3$I|Lt~cI*_~PvcCF;C-a0SMYSo ztB~NiJpUBDkhtoI&Ii`-75og@O%+cqv z^@juxlKwuy8;SP|elx{wK=8+js~?(zIG$j93Mg;Ag6|}rD)>Ii!*s#9ey zHo@7SF2TDgZry@=slWFKUPANmUcvVe?-!i)4+!2zcGWXxhx3Q^dj)SK{XW5ulb@M_ z=h1kWEjah!SF^K-u*!80lUdj;oy6cU{CuupIv2h@)u`LGgp`MT^C{B6pgRKa_R zrwi^&HYa?7-%LDH@FwEfg1=2XSMZT3Mt_0e?0=Eq?0<>i?0-;j_P<7O_P;@J_PeVFpY2vMdv;H>08%TeL;H@IKPtBRJo0_6p9=D?)-FrgrQToag!K zS<{a>ANJ8W>=m4!|D+1ee|Jb1Je|h>Y{6N7uHgLK$uBtT&l8;Wmk7?|d{FSylvg!^ z^ZiJJ;QTzTQE)%Svq^BCFEtC!ac&Wu^R~m{tDz~To90lRg7e>Tx&&WMaqbrUZsH-q zXOaFs!C8O5;H-Z@aMqvt<4FFX|NBUPy5MgU_X)m?+9gwPejex-ob~4kPU)=*1ZVw4 zf|qkX2+s4g2EkYJ_#ilce!EFv$dX%L+CHww=Bn*{G5yR8<#4npgve$giQGU6SA=MnD|ypVX8;Pu421<#>& z=@I-Ly6*G}{sHlR!TqFvKydb7bs7P@zF>XXf3M)|f2!c@f4bo8zfW-XKT~k_-!FIr z`JX2^&tnS&XZ=NjAE)@#2%b*;u0indcp^B@ADRTOCq1o#7Z7g~ob_}F&U!ip=XmxA z-b4A{D>(Oykl?)}-zWHsoIipm&~<7+@R7vTk?8!%A?_7Cm$*;x1nPI0f)^3b7M%Ub z6`cJk5d109QzUpV@e;w06Auc0hIpgk?+|Yiob@yd&U#t|=lFLB&h6eQ_#4!YU4pZo zZozpT8xoxL_X*DW`vqtH1A?>u)aRq~fuAR&3x1f!H=p3FKT~kNU+`OeEtq&CTBskZ%PjIfUdcjl>uSeLvhpE0^!MVPvf^&V- z1?T$u1n2r@3eNS-7M$ywD>&EJFF4mXPjIepiQv6d-=N?F#A^iS&-pY6&hzSK!C6m> z;EJzbf_Kt5(>iFXKINqRa3ZzA3!IP32fyq@%j1ZVwyg0p`0 zlIdui5B+4F-c&f`*^;5;rB z2+reDk>KTIw?=S|PlMnbpGLtsK23sie3}L4__PSl@o5#DNjb9_RA4^aN}3C{897o6iWAUMZIy&RpN93QXX9G_IdIX>xvb9{V)b9^!d=lEm` z&hg0=oa0j{vz=v!H*Je7Cdc) zX^$4cyNGuPUPSfk6ugCam*8)co^HVtXnY6>&ieZVZy^2sg0ubs!B3Oj)K{YOjlY+g zE;xT4$tU<56t_&lIc|Qz`TMPTg3qG%Ef9Pp#i2-WevfF4;Hn)^CgT8Ppi`fr*5izf~T9}DpT+&#IptW5ziGohj@X-OMtOIMS`+ctQnQ>DM z2;M?my=rzaAF#gs_fW6k?2pglF4h6tOu@Z$F5BYVws1Ek2qUZkhytdYU=eZ1Ge}zD4kI zI@fCPF_wIr;4I%^@ia@mQ*h3cE{jtLbg6E^@21N2SbU!Vaa<1f1J*xT70S{pDs9$Cq9c$v*a@+2m82WTl`{!^g37Y z!*tGX@k=fFJi+_vT!F=BSn@@Jb398dewig76g)l0oUF0<<(7Pd;PsS@jTWD6$u|jJ zL+6?;KF5-85xjv0gI0^rx8&OdFCh62i(g^McM9H5?bT)Rg_eA`;BS!r9*bXP$@dD* z`a>4K+LG@Roag8L7Qe=l9}t{Bud9w4ALFKiV}-oXXy_L&YvT#v3P+c-ynD{ zoolo>J`d-mNpQZuZnil0Q7qFUIDZbO)#5j>a@e*BUQXvaEM8>EcM86T&UIP*CQH6s zaK4`QSo~&7zE^OLPsrl8Sn_>>v;KaImss)xg0p`0QzOLl87|@#ocm*{#miY3w&{W= z&^e#QH(2tSg0uhG77tqTxq|!XoZsTNS@L;;FQan>7O%AAiv(wXxF369d~jLv*|d+G z>xzi&Ag3WuOL8tDXWe*$eL!x{uO8Q>ltMm|_Hol`aeKbhXYo|p#|{5I0rlAPpG-K$ z1$mm;)$2Tq+w++Qi`(;-7K_{SlfxFb=ONt|x91yu7N2VQlR!a7Kc`td)8ZFfoWIYF z^7edyzXyigzV7d|^w`&T{`)P;+t+daegks*dhK-^Cy?9Mr|_y$G#r* zSbVjmhrgGGdhF{9f1eDweI4PyBO$l17xf;a6uEs}c*^4T_|JcDM|tj>sNuLJZ;$5# z7PrUkk<`gik3Bx~=NXZg7}xZgKR<$ey~S^~^psn?#^M_+zSH9NIN54(dpvy6;ymV{ zy6KevIR4YFwzA0L)O4B`TAWmBey_#t@$C_d+v8jASY1q^U3+}H-QxE67MK;0x5u}K zEpCr*Kef0$zMZkSJ-*$$Afn$M-~Pek_W0IkaeI98P-n(^+2dQS#itrmdi{46pJwr| z(FGdyTx{{P7PrT@S81?7d3${GU1l&r|@@om?}h`c?%^;+B>-yW%o$lK%F zowr9gRZ)YzwGnQQZ{OJ*;r96U(v}Ff$G5F_Mz}q`&Ad0l7n@zZUSe^3e5@$F@c+vD3u4@Tte@h$D42*1JX>h*Gq z+vD5)7PrT@0~WW(w|6ami>3cli+4I)g2m+(W%U)+Ri(9C)uzCvvYM?bt2R(s8j&jx zlvQu4sSVWC71xz+2o&E@Q6F5lskE}Ppf<3fqCtvRR+pA91D)$CtM5=*<$?8^Z!Ioe zzrHrG#n_heVda$-n=0x9TC#b=hJbx)OQ5z6^8dQco7N-Oxo;F!RBfo1mMf|%D3#re5Bu?6?tg7nzK-RU_edTiPlXS%@rn3ph1T!2g$l3S>!r=iVt}rzR1Pk(0 zYKmk;@#dP?nb894DrJWS!%7EqzdTU87EG9Y&ruBUs2QmRa{nGRbNrH zd6>8iO+2}#BYl!_-{nbX0ICl_sw2d#4kEu2A8(n@zd{8`bhgVw0tVA7q=MPE_E zzC=ezxXPsu;1Es<}1uHom#_cV2uE=B_iVhpAXlNtG}drb5*&*D{pm~Dl;2GfQ_o}<^W0+IPzM6c)R^<2H4qt~zkksK|e*Yosx zu3pbET#L-pB6>YfujlIZ97D9oTrDyenxneBw7xW}tge2ZW@bHC@6XX|Se0ijn1co8 z>vfJ^&(rIp6OzZBN7gtNVXQQpz2paOlzz zn% z$EtsG4EtkZ*ncZd{tb|Q{#*b%AnpG$UjC8&ekzFVpBBS@2o%O@|N2#?U^$iNjkNzS z0Fe1vfVLg44sZYQa89=W#yIuwCHp)Mv3hBLL!A1DV%WznCG8i)u|JDCKK2=Vk@i=` zv7h>yslVO-CxIeq|0J+j@y{jukK4v!U)ujYF~5+@jA4HY$VmJ5$Ep9@WFO1ei?qKz zPW}Bc>|Y3qr2S{&*zYI%IyjaC(*B`1_KRZJ_r6mRJbrh@xqi2j|NM769KY~+wv69x;Cw9q)lOrPKSvYKegF!`ieL9nP5#?+v0uPI#52A{q&!k`nQoV+Q+{)Nc;bQ zI^e&Nh8iSoRuN7A zL*ZEU50d>Z62|t&zY|IO55}>-=s8m`{5dYtBkk{sV?XnCQ-2yOujSpGM@ z4kuvY&&ipi;r6k9=#!rXXd66c+TZT~OW~ZfUlgbQXMSZAl^8W)?Xv#s;?zGx_S>i= z)_*ztm-bi2x&Gb!8&fcs%JW9rUl#BBM+0XG6-4{j!hdN$J&yf-WS>75NNR?)|JXS8 z`^bKy)&47E*#9G(kJbJIzcUv3bB6KkpM=6O+y9rQ;Yz3=)*o+)Wc{0f#j^kQzng;P zW)oh^`0s!-vFvw~{cI|U_Hjxq?Y|f&{<(do;2tW^8)^T!IPo8dVIQZI(*9i#rdahq zO7>Ykp8YLQK34rRe`VrtU;nO;VgK*r*nflUpDX{r7stMz?A!5Q7sLLHIQ>82gsJhl z>OVbB|F4Nr|F6Wb|GhZ&N0R+>)&Ge&_M2kV|En?VKN%>T$0EslNF11Dgy`%eiROZ)#3Cx4#$3*)yu z*|h&$G-fSNQ+eY>%7P1Cu(j#K2SF|4;B=)*X%Y;luzIKeZp)-3I?$&UvK^JS$Rhd zEp@$l_AXER*`?0jPv@z@PrjPeetM0!{i{7!{nI{I<3oMp{ex{gG6oux)!~ob&cVg7 z{m88j`c&guC$VuYsM=TJQiBkH!}pCe$EV>u@+~g^V56gQK7m(Qb-_Net`xHkxyNgn zZBQ1TDWs)2jStO(?LQ@|!PYwUW)S43f{pdA#L%}PB`j{kbA7wo1;wJ+IJKWWH`yEe&SYzA$QurPv?O@Yx3GZ z`RcXpXYX3x4zb_cwReBE{MVLrE2ec&|bfX^V1yfZj}F&+Pcf7=AZnIzy0;m{=s$5*xk>%Qg&y8 z%r;lrsqWEgaN3z6{78D5_67Xqc6q|Vb{Tu{^qS>RuVw86#Y>^yOWL8%x?MhUPdJG6 zWBJxU4;7-_5VQrx^&{|;726y>0-iPw@&@MWX+G7u z7RJLg%uCM6_n^PFLM+iH=4$I0vyVB7$8De&zMpeA1Z~9Q0Qbc^;Jgp|;{?cw5bUFl zP}q+N2PcB9R^rk>^a=fgxltOHeQ&JVi(|s?X#8Lst$#s(M?H3XF4p~WT-^2#fi29> z_n}U|gZ^6%cG34&Tvk*nN7s~)1Y@8v_D>ta2&PAC#=`+;Cw0M z6V?yw!q*?TyjgWJV}2XxH~{t9=W5!IWl>)CS!n}gVBu@*xwbS}QK_bw^6TvoEd;|G z=x=&)Q~~c6kp)MU@h|_q6G7pUv=dJ;PX--zJ@39vMI062T?nsU64Xb|^#}MUCu}aj zyX=$^lztgX>cbo9S`nRTqOGIKn`t)`LF~lHuoLCd2`I=O^hTseMR+64x6zqS+Pc)z z17Ts>`JX8>=YQ1B)8xCO)}5<5Ec!;cNCEG1*j?(uOx{lm2e&{r0g7=ObdVS_-tP_< zz3~m&N=PJVIQ)vgr2;Swf0>%j5^^+9##e#Dt9P8#%pqqC&BOJAXcY8=2q|VT8YB<0f zh=ez?>U<)bcB~;OFN^}*E!n0SQ}`(2!8zNL&2eBHwU&1yTFQslqnr!!R@TEuC)jD1 z%09sR>?bq`@3JuzW0ky>s)sum81CRXYhFO=D{1Sfn_6hMgSOE5yu8njf*73*Z=`=X z@5Lpe`9{|Kv^k?db1Lt@NX&`)-mHdFa|wwC!$r>7``C%Q!$k^OY4?pVx|R0A8)=wN zq=kzV@NRY(mGSN(LZ)}|kv}XL?mf$*1nD5Wkxs<07?!0SS%lAX%2+dphH#%Odx~~H zh#)S=+jxq(%2qe!t3Qmnyjw$xO*b8G?wq}e-Qa*hH|5<(JvIzie9qyfk2FU{sPHT% zqBy{c`RWAM4!%J3g=2Qk9>Y4^KMQU1sZ9$iMG`Cbaa@u5J}$ciV}RAjzUqC4#Jywu4R%0 z=3`W~H(W3nwo5zGe8Diqw{{VVXgTK~dh;+X8(7OxIt9}R+6!-_FMJ{`TqHacPYcjCUU=WCZCTypev5q%#~Vypr=iYlJomm!}=6hJ(ay0$ud4 zFEVUy@0{;kJbJ9hJvw#5u{79L5DhmCtQl!Oz>V;%Qstp*NKMnUP7WARKb9F7PJf{Br1 z;oKs4d^742tz~o;6hz5OC;CA4JP(}4L$r{Z$*}~-UIK2V zWkL1EB>K}IT{1CJ=o*k6=TWW+5w+uUlq)@QH~|i=v*{N&bH<{gq7gTa_$rv32&L2K zfIE}$%vUBbpNv|OPeBE^bHNB5(hEIm%6WL4@xXRRD^tq1Yr6w#_AW_RYARrbHk7)E zYVWyp;>xj$CZe;`u!isgjYwSh%*A6Jj_@T`UD48|Ib<@EWFXQr!mZ%JR+wqk%Y*g0 z%z>6yYSvV+cLf|@j%_|-#Ft<<%TlicrTs(iW`{%R!NS?$*y+PLDW*|8ST{8f6G>;S zx&Pv>p;6Sz)dPnK&N7$ztDjywdToeX?-BkhovPR8>-8AD9;?@BdOc3B$LsY3y-wHbiKZ?|2_EC@U79Mrj^UXiv0av!!*Fjb z_^nv5B?=}c;Z(|7hS7y3$-Lb;+XZolW(+^$Xme=hggO+|My@MjizZwO#Yg z+mQAC0-u)A`&VSDq$40a;-|2}#i?<0qb2kRNZUi`!rE{R#1BzcqY9Wmb7gp)4UfB4LH{Y3lI2-x+iRhQSSx*WCY@>8oW zKQncC7|Z?~>VhA#_wq0NI-h8-y;xIRoLiH=3%jGR7T#wGCQj4NdA#_YBjvi%!SN2Z z>#$~qEg`n#IF?DmGpQ(qi?7)~M(p5ZW zG74eO(L30E^$zwzy^{euSYFM99d!Zjjdwlh#jPuFQKIeBhKs@DD4%AbR50laeJVFT z#VA<%#g(Cg=~tm+w4h(E``y}e{BqBQd_^B}Zh%A0zs5WG?IV@(5)9J3_?+uqspV?w zZ!ILdMd4~{0*A@+Ui5QQTh@xkcBzr|r*_mYUnBhexcM;|_lhmjt+ zf7C>$U=Wa%y4XE0bfWs^L}wlL%u6Hrt^23Sn4-I;2^A*gHMi7NE;TZ2$zU%Y{B?E*JK0v}dmQ%rWY$00o$@84i7ml3=^g<^W)=;OV zdQ*NKY%U#pBdpcbhaqyjWPIN`z&`LdFuG>xd4~}(!#s|=-+-b~gT1XMT4{cif_0!2 zx|Fk25Bv#Vpe18tR6#w~Q^y-?hH9K;5&4qoirCcCFd0G4J+?kR4eCa7w0-% zdNjt-+xdwZrPIKS^QxJ9>HhcHbSun{*LI z$QffCTMlRFf`dMqbC($x5lqvgMZ{S#LSyde5juXhm`0BZw8}yka0$VG>P8c_(b-6G zaZPlv3){!o0qtY-D%(hd{A8y!>UfIQ7dd}{IKEIH&$M$9Vxe4foKzT|Ga==y;n~j3 z4JJ3&>D-JA&N@jmo*Bgs!L2Ba%J;*1-LM>_IIq?&OcQa|mu?;Le??_U@56f3zr)J= zCsOX5xj5CqPdm|={FzA)-SnR)M56mR2vBsd*3BJ>-qkv~k?35b&(A@XE^KnML`5eR z&wbfR)$RQS@hQjnXrWjUnrV+=y7RAdU}z}QL&MY$_4sa#$M3ZizF^Go>7ZS9;dzwy zV@*%+I-_uyz6@_dba#Mz>i@U=e;a|tRpqtS73IFn+?<8kbFRpph1vAv_Ev2=yZwpjytf;D+eMfce#=4r)vcT*wm)=?hZ%V4J zt*ySJptSPxnu?kLzLM$kd9wozrJHIh1MJgm_@wCU^_wdy%V(EuD%}{Eot1_EDl69G z8S@#^{{bu7;^n2an-=6;z9qL*ZLX@T0GG>s@B%djZ%tfLyk=GLb=AwE0=4FN`P#K> z))rs8{JQ09S1z^DrqYHb@JgnQ_--+HW!sigcn6(*em$Q2GQ5W@)=7B%AH13hUh@{~ zB)<>}UR$?1uq99#OC}g7g*TktU|w!ld`E3HyiHB}Z~WE9mj(l68|yZ2id7!p?^U}c zP`;wF^wwg0si9R^zj~?^-x{gkQx}M;R$XnGt}&$0>eAX<19rjky817dHt=cv5=r~C zejQhyb{t&7T2?{`hDj7|tqJh^--eyk%7;}KoGPfV9UcaF^%uR{5-PI--nkcD7Zb!U z3KPC=4c;XAMIyRZ`lVj*y1C-gN_Z7m`Br!@S}nZn(stkSM87o+s)%nJgqJ`<0!2wi zlA~&KWu>j7q8jQ5Z_yMCP1*=jb15XAD%Oo!zIoH8t;GRM>Eb{YqyxN1vbZdFVR02C zS1r6LlCAS=F?A`>u^?yF5~CIl=FVSW9nJZ2!e#ZQ?9H8w=3msjB%+o)RRMQ+-!x{VbzHF#=;ez}`wRn<$dvvDgKeNkP2wUw9EH$bKs z2|OsSi|nfnH40wRxMJn%FEEkwF56%vzAx41+~(alPU#_)xrlE3}G{zYgBM z7b#PTJ+ltSh16=&P6-TDxJa z9hzRJgN~KX13UzO(5%iU%WmYjUTNQJ>TAm@Hf%8BE8v}afxudFRpC&L2PTGi3a(n$ zLDGgL>hOhs81dqpR?i24((-~WUzu}7O)0!?wt78Yb&4@K*_$>MT*0x|Vro593Qwsr zcrPBrPQTz)t*@>_RSV3!Y-8&xShZynzw8zwfw2Z9HCu~IH)&Nm4(6qu*l*3tZ()GY zX$fto&sWr07XhqUe9>D2^*R|>;tNG}+F>KCTxJwm0Ai?*@Ty>))E5b8=ICC5BeM|_ zCqRqt4>(R5f$$-mB4M2d;j0@qq))eIIlP+|Jd5fa5lc}x(&BKb!n!etjH=Ko*cF#y zkfC342dq#J8(ZmtWe4W(PEYau(<)dXO?;+n%a zv3Tv;#WxnOTY1y+;=&sXmKPTr7vNpX@QT_%Raqchd6SIi^eb>{MU~OPE`6m2-g~IS z1RltL$4321-CCGU zKo-KpBT%l>uvS&!kXVC5mG05dA@vrAkFV7JTSYizPzFu%s_1ao3&Qe z8?{ljG8OtST7o!0E%XiSY;)skR|DpvF%0VaLLJ5bqS07ETVGLMHyh@}^%Wbo{trb^ zn80^mo7$-amr8~lFpK+j<#@)VxH2asx_`JW-~B6-jkHL%9DJZ zC+P)`N_2l8&Lz2jtMU`wW%-`VR(afs`JOQ#0b5v)dLYsL{I>0$v5D?~Q`-}~o{{d< z`~;UL%YA#kJ~|JNu5{mS&gr8hcWu5Wb)_e1m1kZ77|!=x^SsBG?@3PF0sG?;-M660 zJBC|JbT8fx9=d-9j*h$U+%jX_mu&ZV67${rwrzKR0ELnh-REsjbbkXJb`ssY9Pc8J z$GzVBG*)yURMexT6v}(1C%PM*e9r`M$qN-tgKZMHl(;6*{n@?wo*C}HfwR*RcX%eR zOh|@mKer7+v=nRWNpx>_;NZ{qZg-7@ktaI-uR{FCrJRoKJ;c-Ftcp=;kK=gKq1DDG zy8n1@zI(5ek6UO2_dYcB0qkFq=ziGQuH!iw9KLL&XC(NXoOqpQ)hgW-h3MQ|_bk&e z`e=mvawz?KD1CmS`&&?<3s-tBc8|>WjL7p`45dfpduAoRh)2oy!{G&>Y!Yl!KtHtJ zq&$z?9mw}ga!&?VU=JP9p?wxYo9I4vulH$J`mhK*2X#qG8SA;sy>lD1KvY8MCWf|o z$$37}{TkHtB`4pNFigd7K?No;gyTsN`Zov%Y&{nxy5ECJj86QMPGV@)Zv#z&8UmfV zO6S7Wgc57AlWNrzBiZj6I13His3HL+d zZucaB>4~7rlXy>}yZ@e8Y58l2=y*=cVTR(R<=?p+&%_k(or&(yJ^AidS3Yhrv`=E) z{|)vpNOXV4wcRsfjb|n}ay2+I;)o~tWpL)|#5FoCe|azFWwQGj2Zo;eJtHAX?u}F$ zYW4zZ`sqF1dfelk?J?5oCGaIF<)uXTD`0jElyPAU^W87NA?W!h*YloC_w9euy&@C* zxC(q2nYhxE{0;5Qb=sL{?geZ2ZF?R)N_77tsJO)42%`ZeX}G;S4s`zQu2e`%9#-RQ ze+J`jg8FbM)@ir-09Di}^X><@w2EaF=y9pY#~}RHdAG$G&(bO)^2~ATR!R1u-k+-F zhjSy3f9#81%xA=gbChx``kR?m#C$4kIKM>Ki~fiL@_ws~TSa&nYd>Rf5OAB%1BFF# z=VQ=MpA*8JsKqT`6ai;XYI%AAL6kJ=AO07L-)s5d9E-Xmf13_#3TgT9->k#j$d8XY z#)CP!zQg$?nukB_5LM2t;KPbynXKi9a};x%KMh5dFrO3De=>^V<`alGlaF3L)Aho) z)ec|W$~O%DQOghKH$sOR10M0B?`z=T2O!V)Kzt6j7@1i7SRB3}4lj?R|9{2dC*tU7 zizAQYL@YmVg%h#(w?WSstDow7Gtlv^IC}7VD`QloKQ03~T&~eP((m{qi?whrmfeat z{ujoP|2z)IZ;r&$|9$Nb{3Vc<5N)4{BmZz5{-)Lw>8JWW5Om!g$A3TBnGEIdewCL3 z+ChFXL)aEsJp2cCV3iiXl=g80&k*#2dNOGrH+R#%?DpKJ+ntY{@&?0!CNdnml+rI`l!Wc zS-i*Mwq5>?68e9+CC?+6tS{$=tS{S=JV-i`+wIt5@$jGcfwfxPZbyEefqHB|`S}iV zyM29@9=m;cU;4@80dlS*s<88RF6qQgyu95>GE)Cj#AW-o5tr@TY3Z3q`?xu3al73^ z7SEx5-1J%8j^`PR+x1F-`r{(~xAWhY|7-JqnWcZeF{Rh5EpGc+VsYDU(Bj;tsHi3m z@3c5x<9OlgC)U^cAcw;11un?#e6#z7?GNXSj9a{ZQE1d_{kgP{o0~0e$DzjJ3uzxW zc^1FQ;`X?0>nXS7Z9NSZx9intaXZdUak!T_PW<6g6JAQ=aLz+1e;37H@*l+Ezl*~s zkP}i5-Y?)Hx&526w*QyXluOEgGY-w}-q%135pa3?|uB>57HM`mkEJr;+jkW$oR%a_IB zzp}VJ4qT=`vS$2DH7@J*qjC6LGKO|-`ESSJDI<+iDgQtm{;N2A9NqGvo-vl6hvM+l zarmWFd8vn*UAaI%Uvtq6xud!MfH~P_A5b1S&dYJ(J2m7}4bp4;9TQww-VNt*xx{QV z$Gfc%9rHDgs|Eix@wI~EyP9z+GMlg-dbZhzkv8r!Ly0~ zLhz-;-xM5w;{%tFUPsz@6UqNU@H>frAo%^n|0MXs#0La_f_M_y=X^Lse3alX6X$sv z%fC(hA|Zc@_#DBL==yPm;A4od5d0G2Jg;NB_)TJ5zAofHCtfc22gEA{{|a%ukH&@d z*Ad?-_zvRDg8zv403ixmNHV zqgK@l-b;L&;5@(CBX~O1_wNKRBz{P6zFzY6huiBW>ev69QWGv!|`J($naDeq4T`83L_MDmyQ z_=u-koObn@3+aI4UrGIXhQ-ltBiX&&;y7;bc%ExdO_7g-$TdECC%;wb+$s`M(0 zqdZ?vZ?HJZA0~OuYxe&Q@;@Nt=@tB{!s4j^O&-TAj^kt_{KsXh#nJ9pDDL-I9QC|K zdYUYb@;@N?Jr+m#e9|JlAJFkVg1G-tZXX%(L!|`-e z<-D|I&hyoYf?q(#yk+@(;xmLi_q&CHbN^Z08xZD+W!p5x|FT`V}yf9&VLT7>LgBjkBrv|8{ylHVwJ z0r3XG`MJqA1V2vlj}Yhnbv?CTo8X&>|D)h<6Ymwgk@#`JcMQ~ zKc6E$PVmQwXA0g$e74~KPJET%9%}DO;@H0S^Z#v@JocBLlb$_7p2yoZ!F`k`&saQ_ z7;d^O{n+pJkw0%(9PLgc-eYl;=keqni=+I5Bp@H|v3)WALHLi$gMt?stl9-HA^szw-@H!<=81wYAU{79d=_yxB^k$!^E@@q-(M~i z@&`!IOp9Y2Mv=WNi(?!(Pp-5$%72&SzhrScZux?{DNn8^j`765_0+?ETy7DZ?>DP0 zJ!qHXwNLO2I{u;1!}@Jz+;jxz;+nvVT~chYg5;QU;oK=2%>2QHlN>M}ZR5}dE6&4PE)F~<-6K|M!_chHu32_192nU@pqqAhdw zyIb%|Iu2Q!9z|)=Cpdpzq~GH9eeQtZemYhZC-#Riw-56)lH++3a=PT`B0OJU&T;lx z`l*X*`Aot4={Vcs)D^URuHb%6;dz_IQ;Fe*=PBq9@(@B;c%FhB#|K_GznF8sm_h>h z+jDmO{T8?5Tw-y$HPVFh4fWV@d&-ix@ZD0$1 zkrlq7TK@&#y#C_vWqX<22}1}aO*(^`16grWm&qls{n^jv4U-m7{%357_M@4;E zFiU^;dbkui7%3nAjxT(>zP_|@2H*>m!_3G0F1S>039SW7`upU_ zD5dDT(dJ9uQ4N6Kiv~e>oq<%T;U@iF6jf$6Muc3iF4M0<(7$}BvLF+nX<)l`6Ko!ChFv?mXOu73|K%U0A{H9NdK!>}KO`Hh1;^ zt1Z4al7^5dJp-G}A^-i1PeQkjTK*P}kkMnh@Hu~YFM5ZDr7*;o8h%mvkT59AUkB%r z`NJB`&cIT$O{GEoA~?i)dJPVLmS{Pgk7eIS<@_Yi8)@GUa=%&z5)wxHI0Q@ke}Kxzs((Et#WE_-8(IJN;>5orM*Z=+ zBJJbnl4IHLB>OyXh-ZIv9Qy-gKa=8!^~dX%w2$o^%YGYO_xx;_wzB?{p?s|N_pLMq z@~9lz$6Fq0|A{#D?<4ymD$g5fA3r}5%YHD1eZ0kx_K(G}-<@bI@;oV?ef-=>Ec+c~ zznKbR{qb8N(mu`;;h%yqMlC^_FZiQqq&(vnpdgl)OB%- zDG$;AH25$5$787zOMXW0F|866ld}IBr+hFSwJ3E($G_IkLc(> zek)D-{|qpx6H6Yr6xWf@wVR{ivWMVAO#2n4M2QtY{Fa-v-vtcq%d6RWGXTPpWKTNb zn0@6f-Vetr55K3Nmv5U*c+KT_`wiIP{jd=19H#O%!+j}xKC~|~(afro%JcmW>*4zI z@kl5bD}D`hgV;ra*napeJ}yt`p$$u)ut*<$$)SP^AcRHAehwg({am{Kcj;2*ZKpoi zXLW2JUpFo5jzx;TglqU-4c|Y&{xtY6%i~*M^y@L`N29ZSk;UwrHUDPxoGWs2a&l4T zFaOQx?Bo1?u3J% zxZMXoh2LiV$nEIg6UN^s#otVZYrx^3DF31NcBn(Idb_UfPWKO<7z@97d|u<#ebdz7 zO6X1>kA>fq9qT^=zb$+FMNkL02TW7PRrL^@54oK~p(K!{^YBv=g;=MV@cX^R&bU*r zLhNRE)cN@k5BMGGjip28caZzs$unnwT!y1=$GZ28RY&rjrb#ERP)9h<95;+V#%3nO z1a&?M$8d>D!&u^R863m@+LII1k(0CiM`pqPsmcB$L+7a@Lrc{F+Wx?;j%|*7P!Y9!{4Ij-^oS2 zLHI4&)n zThx&zXzK^^;rDsr_rl+UdUd(R9Yeisun(UR->san$1qo0p}zKS7(3ABr`N26oXdmX z;x)f3J_x@v4tc5jBHH@{%s*dLo< zJi^};f5n|K(7NNQL#;a&!T+n_|CbJBeoYB>b?^GKeDLJJ#k?`o0_8$~9yUh`LMQH_4Ib5yy7W9DaAY1lma-gKm_8dHP}W34Oay zwbp96NoueW<$!AjvL*PN((s$wLHLdOZfqOquT8MM55^GuU2ycZ)U~7?_Vt)i0_Uf~ z^$a=gBQK@jrH)r;)y zxcz(eSRah9*9+~E3cuS9^(lckU<`urJKCjC*I^9mVzc!i_db=wG4~^#Gq1M!RmN|4 zAFt1xKdd)+b_m+u}zW8M{w<12mSed)C2wa zJ*W$|PYC)P_G8%M^m-q%_8r9oIHo=U{o?FhOWQx124mw=Cp#?Ng+#?B2Nv}rgu%Kd|xGB>_7oUsh%0p<|4Kl*d_u2-YR5Z&Hb{?E}l zV2-H|h_YsWmC%0H?d<*hGBx;sdwjZn9D!T7o@39k7bJult|-yxkD zd~)$tyhhvy=P)-j)WnT&K`$JHm}SoXazn<{t2V-~F%$-u_>YuqfO!DS8Q?RXg*;}# zZD|^ovvqZy9V$e*sWA6oox6bPID-zmzgB?WAmr>dApZf_ZA&nHK0HQlfUz$@J^OcH zXAtH;?5_j*-iGl5+H)rQd>I_SrH@S?w)Jj;b6yx*aQwvaBs{KyZtOqXL3h;H3O<&C zU+6phjX5nmo}v6`&_m-}5ai%G@+=H$X;I@F$hD3#_ISKTSue1y@Jg|}o^-Ze_1WrbLW#24oq70Qq5c5TLG`Kg?^t4mP(^TZF);YZBD$ zdw^rR^qv_y>_DGEj>qpq+Xue~xr})SGHB~PnAh<2&j-4~<2#O#1K8J1*%GK{2##?K zvVC|WDS8h3*{v&JUb(FO^UI>=u?+*@%jAeJuYfPoev^OaTAZV|C4Z;3$pzyfTwf}l zSvCXibw1p9(X}&9CLNeG!PJ3BQ0k5HFCSaWooA40rgp6=0eMY;bTjQg2z zzxx2#nK>QipHP=fxQFBXJ_tFo7{&#e)7a1Yh7RC;_J>~O-JN{3|Dlw#1#q8!V88dC znuj2dKZH0O%=he?lz-1XZ+V@R-D;}R*Gs79Fn#cBG7bAtvbTHxOt=pp0rzc}!@W4% zN1w!dzgcwe)&%!%c>m{39<>|q;ozaB)~U-v8T4nSqjqE2l}_@mRmnyl`h`BBu1e6= zbg}ob3b+@KrEAFThB-oF``I1N-ZRxn?VsK1g=#i1`jdqHgf0q#{R?n!>^?;+M3 zp?zi~kKR24+W&!zM?40;?7hZuoywf13fq62tdCAP?I+;=0q0Q=+ra^s_gIE| z{3(1^^g6W1d+tf$d+c`52hVM0o^ek;I0NbjkIB-`!1+7fQ;rq8C!Bf}#*lk}nKJ1I zkHCEu^qGCngWkUzqxSyjk!xqP!dP`YQCqCyoF<#DLdg{zB6&|qtL&b64k;7Qq;m-qt!yR z`T4#6hdzVnI5)e~cfSQXO_|AH&y3@~jaPLBM~vOw4!PuY(srjoY##u*6VT_OKdi;) zD{bI69;Y}Hb|X8uL=7JK7}dJ+abfJLJIQ5VIHD#RKUsHUAGVruFG-$0Udu z)_=l5j#nRy<4q8=wxzdpHc{MO-0}4RUH0=Kh#8id5{{XFkhalpV|(6726uy8QU9uUY4Y;H+rzGC+W5x0KM4WFn8ANT?}O*Hw&@7 z2Tm<+{}K2;5#ogVIA`mEaTMO^la{}&=&ih=yth^k6}*LQZ`w5-e4KO;zJEF_55Bg| z{}Afgc!`D ztQU`MofvH;eA*u%x&zx-InhkY;>g`^FqIFgKO*Q zHLGCE&WEvkC5+*D?Psd-xz>ty7~l0Z;}VDy=!IujFSHNR^M`?A7nE_sIG@m-whYD| z7*o7A`;Xwf9milCPn#~n=Z3CR6;Q`Q7#DFot%tE4=L>@nVjiI1;_-!KWy)ci}KoGKCn9od2?Ih zwe8!WEh}K$_d3atGbuV}l0Sia4vG)v4Au$r5!)Vh*vCQ2L)7;q^k@4XH|G8KbaVf$ z+{5p``=E^-I?wmt@Rt&}&rX8>iSQrp!xh|zE4U9=a38MVJ{<0`!}s7=7JT&cJ-A=t zFDC!x_uy1M>K=SC%sE~EwR`Z>Ys_<4m~-fRaLD5$`Wa2OdG-{(hk$zvyszjM_vU=e z_u-J&Gwpl-)6m|Mh3D#|vq?OkF~{cKT$asPrjBHIog*33)nLZm-gbQ6(+bZ_u1QlL zK8bk%eGFL_ZM_QSt1v%rhq?J>bEcl3vT4egVrRt0Qjk^f%nW7m?-UO7Pj9M!AA#WcGAHb}Y-8l8(dSDm}DGS%mLiqb_8pcPSTMXA>9*@r6wWOV&S>-_t zcR>sfLJU_!3`al=w>cv>J^?X=zniVS2Ihg^IWtr^0{wJSHsZ5^Jcwlq#WEjanFq1- zLM%~sDg3Ph$G`XBIr#fz|f%4c0_?*XL-Pr!4?WYAd*`=3pKXRz>m2>?F)XFb3W^5A5eTb}{5<;hd)Zcs+x}+1Cec*5<%`2(FE7 zcpZahxn>?g=b;|RO+9daPaN*wp?-&X>mpJWohgg)5WQvn$6!eIfRrxswlm1>*^2DxhB2 zzb+bK+B6yZ<`6tT((U@;(0urwSK5guSF~>gIjqA;h$UQ8kNM%cn&FH%l{RO0xZWs- z{>+3NN_J9CodiAI3t@bKGAAGw?Orv1HQ2>iW{grFemNEV0-yE~!!~{w`tbV2>hMX- zPv|cvV0#jtH_gN?XfY zNT5N3@*`+a6sVD3CLu^jf{R`E6JmalNJwH55R@t+Dx$7hv9+x=wCirsvRm9z*CO50 z)@^Oo*0#2Ft6j0BEedU|rLC@7zwendbDrluH}PKFcE9_F_oesDnKNf*&YU@O=A7pV zHaT!|O04taVt=v+a``fMg!4U$Yn0=>gmHfIipEE&-*uj|_S0uN^*@KNCgFDzU5}rW zlRs4CVZGf{@!(@Phr9%xUqlwy(&3)OCu-{%-X8ra!=-$nD$!~x2XWZH59Gw3k{O-`!o92<$vd-WVlI$lJfv%8(lo>h%mS+{Q=OoqprB!&%HC7?&DwH zdeMW3dvB1fCc@W>hCB5WFEq~phs@gXiAk{QM$C`qF5$S-_CoM%f#MGS5!-zfuU>*5 zwqZ}!Sak$zSnDrQoSf$v`7IkRbxp)ps&hGdH)&%n1a9*T<;BaQ<1%4ue< z)=Esc4s+EPj)k&b=S9Iv+tB_9cnMCU(-;9>o7dm;ClSv$2LoPrSbTca@aa;m(oH1}@eMtw)LvC8*PS zq_u)RZ@8d&2{wIsK{<|hyK8A}(Ym5FMQbm-?r6=?dJC^L;#;0K@EUswYgyMB(Y=f{ zb_DAQW7zjH_6LfCFVp_;=Ukk7%zSHA?YD6+QcHPdu=kfAe5bw`b~+0F)aN`G=Pc<{ z^zZM~pW&VI=Y zjk%xd<~@1j?CqbJ=$>-)@*B2)VznE4auWWh@sl1`V7wY%MpJ9KaeUsw;@#V{qr&S|gTZ+7`3TO37oSiEkL{3NVKa4(v+>q{0 z4uZ!ll(5em$$Y$*0Q_{+X{{WEukU~?icMAU_tn?~X`e{h`v>s%Hasu81^tklJxMv1 z?z@yn5jVf<;lqhzk~dn);x_L>*mUrv0vp@PQ8`x zaw#|cI_2k>hbK`|+@O8-mbfz;?@Nw81iStR^@k4h?!^W0J38~1A^y6^p=@pidAW!| zM{1J~zKk{dF!92^hJ3S3;~?D$v|}x4{<94<;kZb0zlHse_P$ZFzvDc?=RkTFhkX4V z#FBTASHFX`NwIb(cogCMbstLlJ&ch~t2^B(#cO%3_|3eZxYJ{^V%wZs9Qya`-o!7c z{~7<&dqQu@eNps1p@#7|r$Ns?*n@nXo+Z;+^*GK&bcUpRBt5s%Jwgf2VS0X@gf&eu zuN`NJ3*0eB+h#b3Rk&}$n0Eq?XB#++;am$G-H~61_LHm2=e!Y5o?DVLZsbJQy^`9_ z^~ygo$NTU{j^J+QNbK4#jKvx4#n|YhIDgfz2JeZ^n4?>uqj~qt>_;TG?CSj3 zbRUH>7jk#w|Gs}pJlF=i(H-_atiL>zyT=|puf%=*+;J0}k$-ziysmGQb0v+t4DEDR z(~$4-VOTdSm%3shx9~j%&ob2?v?yq!<>ok z)U_1nk~kX`<;RCljyw6+Ovc@cTmE**sCb>T=+iUWKInYO89#aW>IJd4_B*BLVjLf# zF^tBX(lbWti@oQr>+-NRoUdJvfe}m@sM~MBav2Jsnv54nm`2D*Q=t6U~9&R_#Eno{BYmG^haAM zZyJkrJC@HHbcm~DP!R~p<_i^S&j^Z!H zvpuZQINsm!&iEtd_D`5s+?zf$=8OH~=zbReu3P=3csJn?))tL*51oQ3&WKHovpIB8tr zaRy@~KB=_70N*fe*d{b4$0>h<=5u9dZ+A;mduuy>LY{wFxu}VL+c)$h@~OWcZ)*6h z<^>(mpNJ6z{myHH{YiL(#;?7~FHlp9`89ac!msw={oxP;>ZuY8=_zy z`M2E-(*CTwt@0n7ni`yif4v)S_rLLRMTp*X7D&CEOQatB5u`1!9{J-sH40*j=1<)D zy<3Aj#?;SXjIF zL^agj+7(vPHUP zV@K`NEPY)2t2u&joTvjT>6X807ZpFpN~uwBd(7Zmr&&Ry)%-EBKx+>Kgu=xZ(LrfL zur^mHs4`rqNkJ7r;#Tx)Ef9ylyh{BHCN7ACwF+*L4a;@bY!~oAfKpKZZFbV2Hls7C zG9?1IPMv~*xK<}9)2d)tTwT`Uimf=hKjTjzu0_S^pToOOi-KWs^;wGxc&}96 z57?osR4~kY<$K_LiSovuAM(d_E>SSd`;v^j9~B1L%XQif$KX5aH}j+^7;2NMv&X8_ zq)vhdS^R-3sb%#y0ATDkSsmSWm8?=Q(5NNQ#Xy5;q)P*<)O5L-ko5M>S1D(67KjCM@tvMQa+DyxJ5QC*%9 z{OeL?kzpMX(qpzu#uTJP{A!Vuxy~w0n-oDhJ zAf(5#@1h9-{TmPTftAM#*lba)rY-o6T12@7T{5ny^e$Zie*^thq-eHlg$*X9AQ--a z!SL4D?gB))#HDws<&tss%7nB$`!2fscVyp16;BF))KS6F7KJx!Qa{n*X=_{n-1sUO zaJfXOv>c4fc*~_m!Fd+dtYC$p%$Y!IeF33@TT%$M_CP?W;NBEMtvwnLD)@K`p;T-! z*suyMqZJD3SddjIr~@%)53T7~K&aprVP^=nregu2f;tdGs5Ko62o($uYemLwQ^eEV zGJo*4f`WS1LG(~?j-_hVF>MS`TLj!4pj6KT0ZJfS3})ye+oevy@X#_Ja0-M$p=C7C zjOjRZLSV@)(m_oRl#WA<43rSrB07$D5nm#mz@=Kiz>Fd7F@+wT*WB%NV9r z+#)M(g@T&j;nb|43NQ;xYk|0o`=p91x8iCQR2f)83aS7SSKF_(KwQR&RdE_>5bG6u z%4*Q8;2}YgxVnB@v&L+W3#b|xLg{6T!Dh5fD6my1805iC3hF3{cl`ik&bXG;a|0!B z-*s)q*cP<`uA=OK1c;7H+s6wK!@Cd)S6kdoj>7eV^Dwd+t(1#NW6n+XpApvSXF{zs zhX@r8(rIwi%AOFRs;K2)Lnsyk*IA*Unh}OjP<5uMS<$bxc_I&l3aZYAP-~hsgHS=$ z*$`??M{ojjP-q8GtDu@4>q$XXnZ(uF0q7Kj7M>aysC1<=uDa2pjGA&_tEw^^t?JE= zm@;WixJ_1xhDV4}n0XTPWii z)iK{E0z!7)V#l7*&i6`h-SKe8v}=pozgal!lv2<_Y>Vjl4@k>%Qli_VTMGJ>i#nyC zEgJ!%+_YVN0b8nqIx8@pf*nFmj#<;MHMJ7@D)^`nqOXDnQ~FB97E!&_>r^rr?Ga*S z2$bzEK$MHN7YP6j6)dx;jJ_+B_Mf@MIw=%fz=i&3EafwpE^1y1!wQ#5&zQ3fudA8Q z94R@vYGr4LP+@gWCX{wt45meaP+%+ys$kevK^1G_p4L<_2o+Qv455`SKvaqGf}bX3 z+$ng@?N|2OQm|67MU+>Gv?wo3@fJa;Qb5`60z|oJFzJ)_EV?Mm(Loml=UJ3JJS`HG zSvgu$u@I+VeF~x0RtFpvY)c`OiY=l8)P_O(BiOs~@A3uziv(LlM^-E?AqP-UnPzcWsO(1zfEiIxod@o|T3YY4R80!1 zvzZB&c3VW1E|-=N?=6B-h9?l-0xmTQHVZeSj@E7yEJml`5zpWtE*UrAb5a8Jf`Ix9 ziYK7dHY;m|f`P2&bXm>mvYLg3Euv=BhR3a}S_PjK6d9nlKTr190=sM1Dp({aL)a&^ z?E#?*(Q+^)wg>?ZFA4?&ZcQI>Yx;mQp378+%~n>uf`P0Sm33#_kRfeRQ0JCLTi>r5 z90~{()EPH~Dp$+FY_QSlwNk-AuQt_7m2jOl)j-7or82Y}Ojfs*b%}y~7PU&jK>V6? z@oUn>XFQ2-6kBbvHmgzN9fUELZe z?X6{$%M;RYSV}w&9xd*#%K<1or#@p>M*A@V=UI(2K1Y5^WIQM3aA%`4vLJs-Y0;?# z1;vy43x(x0DWmP0H0%0|whLQZM8~RfUl$5QLKUSadkT&s{XQvyvK$47GF~O5YB9;? z)kJSebCyZ|ULjXwOE$0f`^94LER*~iA=g`Y?1y?0-)*OERi+Ut>E`Ua>=n}EwoCgy z*>9e;`%Xrmc~*KK3%DFSaV{OwWv7(%%uORgku2P7p2J1?AYw(?WD&$PitM!^qb5BT zWpujT(mTW@(=4WU$$0)z?gs;1GfB~Q>46J_It52d8{S?~DlMaHO7Ys&byg~v_x~3c z-D(gL6x6MTw#u4*tvzlvtWi({ts&H!CL-XdpoU*VsAkYIYNkSIm}VtrT+6DYCJ$L; z$OXcEo|UrVP62f!I2Z`V7ExVQu%@5rqFaIvItwo8y40vHYU?aQcDgP#s*6rU7F@>5 zSk*2RLsS_xOg3>P%IDqQmWc9yH(EOt0z_v-y=IQIXWo&$&ADiyg{ehna;O<*!}n%`OpXi|7PwmX_^OW?=!H|9#na*(s!Z zrOfKpmivVG1QwNcIT6>_J`dR8{H;K?h#E~vRgCNWHM;B;`Hxz~GQOgw5#%k~MLm1a zu{lKNpt9S7m3Nuty+Xkvo3%D6cvw)xJM$Hp^43EMUT0A7UKu?x z%Kl~SQmbU0g2$~HuTW55404?g1@Z4U^2c?qP%u1{%&#x#P^MW8>J@bCd7xE6{BtP$ zi8*&9wWpTRc%b+a0gx&xxW|sIO~FSk>QV)tkoktN0%fMMW;b00nGR<0_7;U?a>lv^0s)grjDIs~|E`g8O*l_zsLD?eeFngutSt+yF z%icqmM}_-gDc>yvKO!`9#3=7ZE2OrFjxH+Kb8al^j|yO;5akPJ2Mxk*R_j(#0PeKG`wgR&nYd+c$*OIl*Qln?UqsOv7@QU zq*^ppKw4B2+5WT0l$4966sZ|QlwoRXwi;?y0(Xis%*MlHP|Ah;UDGEGD;Yzuaw!#VSv*Hc?~-wENbiy{CTN!u zQH&g3;Xv7p$(XXKu;aTzt#ogI$}~O7WxVauq2M%&%D8nam;c#}>EP#B!8HmlvZ#!E z&TT?^ukDi2N7K7x9I|GjoJ8U1U#oWhFjp)O;WZXw;AeHT44 z-eK2f<6)VC0pk|cNXzKqOYs5YT4k&U z7~C={sEo6_Wh@lt0q?(%(kI4vl|6xEw8nPP_<)pITyu2`sqW}mbW!eyvzKy6NH5EN zEZQZIl5y`(?~-wMNbizyDW-SHxD#lXU@Fx~9sNWdTe}1n%eZ>eyJU12HSRG{0}Eck z*Db0|AX`LrohGvyoMAH#FTG2~;YGV-70{!dvbc$5YH_rLZMy$Z%QprGoI-D9EgqVY5-@e=*6n0<*}W17JVi7le8SQ6od znb;<%T~cN-ITb>>G5an;Y5x!cQgmwPSuXFtM6YI&GCF;Qf?p)%|G}5&FB8?^?h0zO zBX_Uq*P3QC@B{_bpA4ba_5>Ui+$ShQC>2{ot(GS(YCU>XrSK|g8{%wp3aDfLxPHZ{ zrqED9)s$E$yir(yOu^j)a8;b@4sxNgMO5)c(xQe8g%GvG2_%;V!VQ8I)Fo)_sI|g? zP{HwnGK5;27Z55~orKP?MwCPhvr;aJj=N+jd5){SyGlr0Q~61Wr|GngHmc;1jt9hdW^fUl0^I zS53dx9vxx{6?{rihEQwed6rPb*&=EXZO{deL%o9P>G(5_wz#3|laj=(=zm7ERQ(KA zIchnW#DIP6Jeh(;QWB$D`$x)KQn1DHq@YwvLpxrsMDb6J^T%KvQMV|hc5T02vpnF3 zX^X^?^FkKQ{=KGR87*Rlf`={Y3Oy3Gg+@}>e{ba32kBhb|CC^#35~C=UmsV5$5+?C zM@Fl6$c96nj5a*#x_-UW)R!S}1AHW5RD4xR(|ul!!B$IYuzO^#_l7*Pu7BD9Myu;z zE!d8bDe;1qIAu~w!&i)Ci_G3qUn5r3RY;8L`}K)p*e~k)iw5wE`u+z7uv@)-yC-b7 z`u^L*OTyk#-(Nhyz_b5HJ2k-IO))!g0ixsAAQAGWOkGNaAn20uf>*mdAzkqhLP6z% zt*As{odJ-omdSWr+!ZJV)swMBD7Z=t4=M#Ov#3iI3~r{cP_Q~~Gy^XM>1T!M16~U5 zv#3iIJS4siDh1W;!Ars2;?AG{O{Li81e zJot{ffNt;yt@tJtzs-tox=h60XT>)?BVd8u4w?cf28zn67Xp=uf0vT~fo!d-+DRlU zrX>?c?Ww*)uiGhnr_2`~*L3d|c(;Td#tFPvO1x>UpiUE!X-rxq)*xJkz|A3?#-lAE zoSLmqY(;$)-e^sEse;=>WIF{`i&IxMxdu7HjTiIJk&+UBxB33 zm$}tYi@2q8s|f;73cfDWj*dFR8dpITohMMeAk%c%&gK;gzHU)=mR6^m`m&^18N^F0 zeAtG)=BTmYQm=|F-;xq~DLC4OJ>75Zs*8p_4N`}M0x7S8fkAIyrEstjw5yf}B&Oi` zqizHmE3Y12c~Z{JzoJV z>5SV?obj4;#%t0UugR8ip4};$ACJu7dozWmhnk>gaXj8FIvfjh(eVGM4ICNgpg_D_ z&jN7mOhzb@E_!T0{5a7rSv}TDmy>bg)4OCefOZL9r)$aoX*Y|>&@Or~&T2BWQ!tvEOp{(Hs_C8zo9WiR*@pg%^K-9o zIUr>gmOmn-@wibji`R``mo6ICvyh_i328F$*Xg4BOCTkq-J>^8S^S$K@1aYF7+3GN zvWQsv_RtGYdrDRN3w2R*7X0>d!Q!tv0k$Re_ z6nH_#W&65xDUh@i|E3WA0#2qmjCRXvMB3>sYq^a7V90n;t3t{w(#iBLmul~N%O&Hk zprpZRxJJQUmPIo^{x-pMO9`7R zxY?pIJ{i1BNN=-U)@E|5W+4rvWQ<6TB!0y<0nE7M3(~q|4lL4Tnw4@zrm>6`Qhk<{ z)y!+BU^E$*{P>6*WR2V8Y@zpAStOFHgp20WbW0xjM6;LCBBex1<3F3=Kc#}1CncCE zSYc5a{ij$+^`w-=J1u3>C6JQQ8TLq*16Hw&UG@s8-ZN)mUcLR-Yv?S-@*cYAWm_O6 zqxa|>mkWT@P{C4r4bY^Q39knz?WkqcI}|@p06f!HFksx0&bUQ8YB?C=IhJv)f*UQW zS;5VMqUV!%nk}`%0il9NQV6xC??_;Z-x2~m>*5d1x`1&lS%}v3Q2_`QoR&fu9lX&| z#b_BF|9EMbC*@zvu#1G@Wm0<14VnMkFuha3d+9VH^S{QFE-8z@hE)I8F=dfGJSuY( z`1%?#h%KU1a;LN$k}}7+#W{P*ta1Hs2|_*IHbkf1Hb@6sL`7{E?RH6t0qqfRZ-BDh z1&DG{g?CCji9ct`+2i^Zu}d0!ZpfGnDnIR(MZ&UABpi|wubAt?(NzMJ+UW&5wpIm0 zx0DJV52zFjX0cfW*&=EbeJv>vzgEQuT-Ms|0z|nKhz!ET|V$XC;^wI^)fCIz2OA=KKTfKWkw z6k<4PZH^stlY)x`WeBylGayt@SDGOdiMEJNzcv&Jfat7Xn?Z$PMEc>LM_V^xJ#HTy#+I_cOC6%3ER){b8% z9fS(%h)LVpeyts{LYfuS5gS6S>7;|Bf;wVDs5PB*5GoiRfA;U9?X{}aDX3bL#5y~M z(bnR13aT=OP-`6lp@MyaGK3=07K6E_>Vw}mQZTGq{Q#=f52RXsf4XY*1F4qzovdx5 z^iC|raq*g zuDUG#kSb4lt8ueBH))zMM6H6m zEUHyO6-!FgS|y$d2o*deC_^X}TSVPm8%hPh+sg`S@WY}}aIa7i?>ehQ5Z4CzkvtWm z1m{BDoZBsC;MEw9tG^sv^gdJ&{c^6RS>a7wh6>JVMT511QtUDl7Fsxek zYpTRDxCW1*@@EL6wZ@RdAPxBPD7FP@-iZ zC9=2H6z6aVbbc){tCz-FxAE@>hqF0o4J zk^rHCVI?w$Dpevb08aM`CPNal&q1_z7FQlhs)7dS;*M~q3?Jot!wXJ2W%vkpe&|pZ>o|F3f*Izz#B%r~usj!>^2Y*TiKrBi zgrP$}2yleuICOlzHWj!}*ES>=<^)hQg~66$2> z1+sCr*HG$pN*ukE1bdq8F_hlvIDLjQ$b^;5fOL{=X0Qkxr~1&DP-NOOh9WyZlgy`> zY2hA3KOOT^Nb@tJ%o(3gz|0BmtWhLz)zC}*zX3^UnM3$lGu+PMW_m~*bv{dk4JBb` zlby?8-LlhQ>DeM^=;#A&7w(0gEgk@a_eL1TQ2W0xt@=veAbI z>Ntyou~d$lcQP%NB}Vi;3r;2`7lo~A2r9yT$O4rCjiIO-KpL@LDjEsz>d6S^WQnfp3UtzGgwO?7r&xLQwEn>9+*a$aAC7{L+F zoapl;+NBrrDk~fbZEhD4xKrIm6#POU0q&Wu1~Y0KP8GiuUx~H&;#VV*u7)|MjCyo^ z2ZQH_!9A6IK2b;dSI)fav3WKjwcF@EB?u z%U?7u=cIt*2eFY~QR-)7{^NiP4JDBqQ~nZ=`;-@$GI11`{67)_KHgg=7kF=sBXAUE z)%$OU;c*1N88`Ek6CXxxJZ{f9h2XfiC}wtM{&xA>U_6H7{O$91g1>Y4JIUX<{5^!f zhw^tGe-GpD;ryM?-v#_Vg1<-d_bC1z&EI4Adn|vS#NUPdeX=vbXn74+O+GPzN=mjP zMCK~;u7QxB8VGrB3ep(J^^H-CY*)W+QDv?l$9z~o;nX!mpZmkQ|5&2Lt4iY)y6 z4NCX<{Oh%GkzKR?H2*GOM}A70y#Cm!BzTTH(yS_4Z!V_Tt{r!DtcWYmql-HxR>GAZ zV|RAP#!4Ok5V6x2S`+8H6Nz0>c|um{2oNT8m7YqKA7iY;))El~m7;QIK z#X1Gf$WNm}pTuLae0`PFzc8Qtn?C+j{{V6QD!xXl^%Gx;`QIlj4aI)}U-`en7kzSC zK0w7B#L1i&d94pcLXvYx);+;5$;gXohNR<3?OnNs~hfmUhEInNfRRDU==rTU{Ht)31y%K34zRw=^gJa<}3 z^(Uum^>3*4`4UvamfhkE`!m$#F~Uh;ydmtHFxviD{uqJ%59aH;lRgOrrx+K0Y~=Y$ z|7a|KvC^NPuYVcnn>QO1u74RC6XPJvZv~WprOMdnZ>eCe~xzd$~gUi96PPf-8rqP>|{vtzE;F|@?`Jp#R2?y3B$Yx{l_#X|1-+#-%c*_KF@7$60g06R{}!4 zhvSSNLGZsO86HpY7xEZBo#1^1470p17BW18@Q;jl^7Ze=y&Lm?FDuKtBR?q#i1*R_ z2?~Cir!Oa&f0klCnXhZq{b#=t91|40@-GEMpZFf0=hC>$GZDvgWuCb*#ErB0xH8mD z29-QFFQ^Q2O|HOX!`;!`@*JeZ^WDOLtiUY^DkI!!&M@jAxlz7)xw~iNMKSv%bfoPb=+{Y`ukSJ<0=8?WFB`{t|h znxOK#xbbK9&DY|qgO=aN+k(pRcsEy=><@9{!c$4kALCmBvOmSQ2V}3u?+jYrh#MDX z4gNd6i(A;a-;D1LDsRP~AsD*;@a6H=+ALH6B_yVYON!2e+JMA+V6(Z7n^pJ zF>-AKZ)PIH<64*ElrX%(eF;RS zVXON~3vY9u0C$7m?jE)Hn?v}ULhy|tct;4nB?MpZzH0g08sd3-i01DZru`432~spc z!%t8EP0)-aXi&hI&lVJJSMzW=Y+MOoy1U}TC}xbh2j8G|oLd0Qe3R`)RmZsu|GW3Q zC-cgozr|;u2msSh!?&d-TE?D-@6yHi;@S!Y{!W2*1=cHYy#lu@@Nob$>A<9)c>vsP z?qpWr-HuA2n?{}7R+sD{zR}9FXQp^f$ck5lrn{XxIJ2lXeUi8HzHpX-8(^EW>C`24 z@+$$^i4#OzLbUEZVMj9+Bl#Y7G~+8DW9KsPy=E>=?-d@eWz%DY*NA{@;98GFC`?2K zuJdT0G;qB~vo3o4T|C6;@8SWc{}&H9{XZr$y&K{SaCxL~AYpa9f-a-{i|}3M|I!Y0 zUs%Atkbp0S1bi_h;1OnI2K}Wt1w8{l8vim_8~CyK6ObjV?uj_9G&nQS&L+rx+-0-7 zkJA_gB&R=zTfae!f;ja67J|EuTRz9L0ygI3e$FL>1ob^GF$~wq073nqT{2F%p4$E| zE=@zw{&}A4b7SVW$lQl{zENfI?!UTpP@N;nIPMo+Qaq^db7{mu{R`YavjkqKA3E{7 zkGZ+$%~=TS`A!AC&zn<66mwr0W~kh+xF6sp^Cut}@X*dC%~#+Q?xBm#{iG_t_8qTwnKrB zD)1QqGrxu}{lL9p$GAV;ZT&XT=Q%&b_dK`t5YbpmQVPQyKM!jz`B{{`(|<@(&+9Ktcm zgE8|rEng%=fc|Q10(%al%dajr)^Z<@4VycbPtoZ5M9f62$%F{dPleIWTpO-_78}Pb zQ^FO6M)n#Lt|Egu9HSj35dTV8{Lz^C!yOjy%>9~<=ufd+mh)pE82Bxta zB%NuVhlSP53v1is`@ZHHzRk?{!d2Xfx;xH=O`*#CccvIDePgl23wCXBQ%O=fFK|~W z{lWmW9Yf6*o>roikhv;U8AN87KEx+gOzaj~bfE!YA$m7p(OtMRguL*xq00O(hAOmf ziN*I*aJ3u*R$z5I7yc&HGT)sZj6u7u4Go2Y3znpz%{LH3R))NImgev3y@R= z^gr|HWE#|8@@O3e^2E6H%(I97a3CD7;T%Pa4=^{7sFueg+p)@JIH(v#D@WX7It z+;i?^&Ws^zXx!LuCJ=14xe8pQK%D{&3akad*0@7~PXb7ZGD#Z94IZ{%jxzIH6IIf_?7%$gOad!m_-VDj}tIkr11ei}CAuQS?qEkjGtb$)u+ z66!iXJ~_QB%~#NMF`sc$mNy56C6vw%92h!GU|7TJBASV6R(m7f4+!tWb)56oVvnOu zX$QXRV>e&t%nxr()N(6YcqdHhT_3-zZD*XaVakJRxj)gS_rHz%??{tQ5>-0U)W>$b zoAmiFg{A>L2g5PKrDg=fS3@*#~(c2C;XcsHix==79Xw&xq;soU+1e8CZH zr#JB>N4QS(Q%Q__GhcKB6MhR{a0K-oeEAX7Z;c9%Y zOER0l_MR3phgA-BoSDvZB_&M_@2PDk90u*eI+5^hJCXGQ3;x3(tMMObH8z=roZ{Ve zd;%bvO`?-9e{9`$#kX8UGF-5_CyV;gUaO z0Jn>72(bRmjlc?XBT!2>0zB7rC%^#R2`ouH+}3z_g%&Fr#R@n$idu{ZMHiN@DORGW z!=V>NeMmA#>@K=OfMj!Jup;Hkpw3(w)SD}Vm9vpjE=fHz4=9|ZLLBK(|3R08uQbBD zLc$-XVXvbb1|C>8Hw*Sc!Cokr>`e1y^%%{MTt_Iv0OIyX8Ok+j6iF?xd{^uAFAq22W~ zCo(_lDT?!s9z^pnmhQluO75}59m{?f3CejtBjdz_^riY8?x2F z;8M31Wc;D*kH&2;DOaH)dd-h`>-@;2<9xn!oZpQjn|{plHX9N4Bie{oIF4ClEy3z> zTY^Q_LQCKb^Yo^h7FB3}xDOR~UF#XLKlCba9RNQ4+zMdsHJo#Sa%F7H5bA$35H?Mq zq@8K+2ew*67?IKRyH^&%o994m=qR2Z*rKlL6+Gugyq8h(G4PoX%5h zHB)UxJ^080n<12w#qhCe7{e3F?Tx6>%VP_iasyufvVM3~EEzcE##oZ4<6WFG5+ukI zr?J$}@P)Ei&{Q0Z9{SuA6YNcVM{ewTGv9X`csqAB@GY@KE;^YV_<4!&&j&m3^Yj{r z@x7nY)vZXs%%wLUM9yWrw;Fzz@kVIo@Bi^z0M5mvRpJk{*cr@OP9TSX_`};Unz47# z7tNKEze!%Rh%fgk|Er|FIm^PagHefAm&1%9NL(H>LFWmwjsG;h6NezfM5W$$iArnI zIOpsX)adEN>tuW<=nXof?}MDL(jGMSX*3(9ty7pJ6?n&;&R2WO-5RNp4=<;sjE(J+%4 zr@NPs5&y?lwBw~ed3U==6St8^5x9$~>xdg!@8EK{*)zxFY%YiY60fAt#5iBZ_laH% zr#%1W3#L{!wR!$cSK6WNrwCP+l=3*7dd+y}9gi-tsia%&8Mq&zyX+Zpd+VLyMw|K4 z2rveF#|~Y1X{4AjI4IfMa(jPnZ`8Aumhvu7A%qY7=$#@A>!ug#5|1D8=z2s}+9Mvt zbhC0E@hI3TOpiC5k;f%rcdzjLHvo^}Jd9%gSkA*PKx)9LTj-0PmWr$^*#kw^m7$f~ z6I#7JOl0KtvT_QO9EAhj`aOtXhv#g9b{ywRiASmec*n>_R4%QWcaxL@aC zicVkmo}qJwPbavM`ns(<&NbTs-m8E`%zj}8ZM*b`LPE40)58sGs^ z!G=`i&n|qs>pp?BkA3>H3VZ6bZ<`IHqKKZ^N5&KUQfg7!{=NNxCR;}PQve>C8y=8U8K`<8`w z-%-qKCRs;6oHG{s<|s(kLe7|CtMr@^Hal-uESfX!BL&tGTX$kajfp(A;2b-N+k>>R z*v|t$2%?q``H=fLe+c_h2{nL;`A`rn{WeggKccUn zajz0;b3fzL5))7Oj894#PcRJ4(>6*~-h#$O=`fm(}+~WawlFZAK%sJRypJYn} z^{4z#r?|`0EIep`+W#lC+cA_w&0tc$&&;Fs=qnOG^`Ahmxnw%}xIgvHJDp@gwq+JZ z3^bSr7JB;=@*mp;<6p`P zFQ`}ZTc0WQ6#Fep(BuW}%MxV2pnh@UbEsQo-4%({C+_tLI+O(Mb?k*fy*5H$llWo^ zze`#FfPNLf864FACc^I$e$O&!U&-=o!iQ#3-fc+ukvCr+%He7K-XddI_wzaCDE<>5 zcv^p{z-tQpS%D!qd|02V1_NF$CjraA2NakIAmu(PPP&Xw4EoGW?xSkWGc#wdeL(TK zoDr;m+T>5=9QObicZ!AUT<@3xl7{cC2{b8;LmigDjyIUs0{t!EuoxEKbcOdI< zg!eBK#wP~0I*&nSDk5cQ4lN@qC3Vpku;&F*M{qrTI!5M<$uJ#OKR(BabIsMH z!Tn0Yq@%=~r{>++e>dVc&qV6qi_GEovz^1@6hn+;Lj-eFkka~M#M=%H;%zVHOc`{6 zSm&uuVLdgO>MSL!NH9ZZBq=RRS?s(PXC?=I!zy)CuyV^%l6bkOnLNDS-wmtr5) z4?Skr;bHh zSVg0blbxcWM;wvcWD*j2IaD=G)yim^s!vT=lO-o$3}fWrh0oW6^t(KgewRnm@A62x zZRi7UU*xC0fVqHAb3uEi`oc(tZs^aX33Ain;BjxIZ=NpEV-nt`=>Z7?6$(;LAbr5A00lp!i326on~-DohS! z;6JhR$YJs%&g0Hxj$?U?GH@XuF!WMt3b$x&Cie*)ig&T6(-DAuTxU=d3Z1B3KxRwBFiQG*_5W!WS2V)Fdx@rAwNw8XH`)vtL8Shgth5^(D7#!F!8 z;76X6B_L0T{%o!UDGeKI@BPf>C*wH(;%7IYF#B2;LGIJ^bj&^~cAus!oNx2E^}Do1 z2GwVXIJlH5BnE~}C2!(-`%;;t%PYMytV+^_sa_eP2CrUDPk7LKX_5r$mElruBN_a0 ztEKf4s-i|-zTEvAt}RQ_xw^i{E_-0%mgd7|H=6C`d)0vFUU{Oz#&Gv~WFFORuSd31 z-Aqr_O>5>lQ)@=Ey?pf>h(83La=mbSMEvb6K2Ya&Rv=s_6~c9zx)Z6>J-0QAdxys_ zzv|z(ka@~UySqFS?|+UUaGuM5=raGa)2P{eC<1NA<{JG|3c`i|U_$BK>DtpoFVHRd zePtN8l3)6%=huMDi+L$80FksMr&gU{4{`r{LO0?AtpRp_b9sINKRPxqehf;wNY$W| zin#d4c_!7xKc3=7A5U?kkEghi_NynJuBip{sjbG5KF*F5%-$z?_9BMNcwrt|2+xqr zbu9VQ5l{Sd#1lUq@x)K_C<0B>`=@$ldOLaI%rwvY2l}(6HBZ9trn_zQr&iP5_IL9_ z%AccNNVrrl)U1rAe-EYj-$N<>_fU%eX+PtCS~FoxYsUK?V(*KX zDhqE*(8H<(z4qqQO9F|*nD>#d$!ieqx4i^C+2hp3r+;~aGgN;sqBmbD#|9Rg6?_1z~3%qZE_bu?g z1>U#7`xbcL0`FVkeG9yAf%h%&z6IX5!21?>-vaMj;C&0cZ-MtM@V*7oEO23Gb5B=$ zb5Y5hvhzx3ojYe*(dCW3EzLz;okcxmvrEsNQ`S7SsHvl|b4}5PmY&{r;AfT1D4lUm zQAt~0Uw7~MGiNp$7Bkj#b*<@W>FrwI)6_DfscYTLzOJs0rnbiR&Y2w@8`e$l?&-Rs zrKzu|tm&N6vs+p(FKudSEIqfZ<-D`bp3~Sm=kl^yrROxAUE0{(Tvj$~PU|^SotYaN zduCqI(z&+1vv=lIT|H}iyBnKYW-e=7)7jEj*VWV0byZDc$Mo*@?v{@B&X(zC&urP) zxURdSMRl6ladp|u%h$JeG|y~W*SNN2=8PHiUq}1p)Y971xDJ~B6~wT}>5V<>&MBL| zVNRpd)YaUw80z*out$$`c}G{%+Pe0uTY8=KoxSZCO>_4TxOuIY6c)7;Y9 zxW1!r;j)%>PSg6{zOHo_c0j&qWN^v)&Za)htTZod4B8DGAz0GW(qg(3WE;D>8?Rj7 zQrFkmC#?%v8p&PT(6qdpMD$*~zN5qG?Q6WeqouB=DHwixXP?v4(%aIrp{3dIh6i;6 z(<>ce79P&>r41K%8C!CFac%AL+J=i3U%a@sa-ktHC>U&k+PR^AA!#nTD%+Xm&&Tvham%Elq2C*RLC> zzuIC+N8_4?-WD0W(VXX}k<8i9+SuNq1~ZMlJx$~n4Oo2DjXi5*Dok5*Z{M=UjoMtd z4vfM|@p`CW#i0_7vI8baqp081-O{kWb8TnWRh?;#%sg$lP^zY{C*2IqEg@SjNgInX z;=7rtsjIWErL*tdNO)9>AgCE@qM@;)2Ls#$FYW0|HC#v&_F)XMy|cZq9e#6lDrMjt zo#f4-X>ISq7~4~A1{{eDlfg9?!ttC2?%KS5-MUR?;Wo5%!W~+>dK#MMoY&9^=jv%# zk8o@{%StvC@HnSz=>l6hYxX&z+N@Do zUn-vFTWQdfl}@GLo&(^Uy1F+lYVX1J7VU2b9cZ+W87LvMOhvVJtnY1GzCO&WZhdQO z`^J<$sVL}M$3x{^L4+~y0nnJEI-Mt{v#W0rS+upMYhC@i?gfz4(!(`GXsNMd@ZLg> zi&#wYIu+UL@D|qH*VEkI+6of8wegw;-t}l z`3QD>xYFlTEF`@-5i*)t!}PXw_0VolCYW`OD9QjUI_n$<>(aq4h^gm@Wt5=U#ZYzo zIyh`c*Hs4SY}wdX-?g&4nReh%IO9#qF~V9KH+1zN8rF5UVDU=sArk~GXnv$1724-O zPEQ|OsbXOR4P>AZqbWRQRK+9+DKs2uJ>smsq*)-8qw!piZT6)na3AM8l9@&KX#b(_^@+j9^ps5R2cuBH~eP)3= zC@VY7x50PyHFi{XGQ4qPo6|@2hK`ob1~BiSM1U&JhFQ*rvz!fQI~&RztT43UyO**` zL{KadM9sbyOjx)E54*YyGmjlyAkG?{mGDo~!j?6*kfbe`F&@am5V}F8vZ)EqB(6cQ z(`-y&3YdpyskUVu4iMP6b@Y{;^)wo+%yr!ekrJQSYz89@N)H;dbW-NZp>0a%(=mC5 znWE;9S_B)c?gq@2IT2LZEX}&u7IdxeYz|h4kKz6XK@v%o&dY@0n>+!BfhY(1F_)`P_>$%2+O?VZSm;0q>_7^lHF z&4z_7Z($?OhwUa@Eosn>8W1s=G-OPQ^iTphVNhd=M6v+55*~%|BA%H*InMT~7t@x4 zTm)x~^(}zGrNOMA=Jqu(mnvMFEtG|+N0}5t(+`F;3K`o# z&%TyWH{PE&_BAv%Z)ikZYnDUgGCFPcZKTLRalDItAi$WB1}ajE(?N$R(;{|7BEU99 z$K?CWc6YHOgt6Urpi#!M3Ghb=MM6R1dM*3b-8T{GnLG_a;IP((t4xFH_aYGAfAu6J$@#co! zP=l?cn0>uTNC1&c61}^~TL~%%%zX8hb3)YS}Z%wJZ@_WZ>Rt(7xhXw)c{T_TJF-2sSRR zU2G3yis2I|PY5t_QIYC=8Wb9^v!u3gxDLl+GqEzE+$tSRxFFL65rT#B?YZ!7U;!Us{WOxH97P3ENOJ zEqvMBQ?w02422NNxA-2CvKbuOP5Q)}9JUWr(8{{}ZjxV+*^-+J7+U>}EnbkJI1iIEvf9fO=5E?&Rxaz3ofaf*fq z8PuP^E~njTV`gUV#flOHi6ZckP!`n7r`|=_>B4Dpuf3q1Wuel*v!b`Pqy}3{=8P>) zN7Oo_UjkJ;5)nsKzj<^w|Ka!&3p#$gqy1qFKX;-#Km%ZM@L}GW+b!@Hm)WrVcTZ*+J%%X0ck77HfG*KmnF2`=sKDw zgdRMwPPBQ@D9nuw+m_uymQ|0QS1L(Awja}Uwp?W=);KHa)Jkcu>B&?J7U8zQX>4l3 z?%u;Uy!fG-|I1HkCM!0f; z^$$7-$A7qj5`Q|vAHuZ>9L8-HT$z+acc;Kxq%21HfWY*_fzD-l6Kd{`?Tp`(_-OKD zL+;J{c)|T6KQ)^5drIi|Pf!38ze9pkxkacS7u@4i*5pknRetvm`4o+#1pgP}FCghd z|NghroHt>$(y+|opD4I*^!;N$Rp=CX>1eDwfh{G=Hp*|CIdk5AaP^8^>3`udaktRx zJd$4=5ZvR$ch$gtK{h-rbh`i#WW%`p<ljzazWcDKzC|)C_i^IXo!z^e-CF+DP+LnZqJ99}`;ksR8_+#!?W+7e2cF z30Ew*uF<|J}dHL+BHK#(d&EGCll;>!d#S#^~hP{q)Y}wbOgfntgfj%)XZ&+RsF;L=Ut3 z@XWk({l@7V=bY1UP8mHw$2Y$gFw?vaFcS|9JJvV1%$}|LJ#AOE{>BcQ3QYH_(06{M-Ca~`-!cwI6N-g_8{7Fhm1~m&whBT?6hVmF@RuT;!M6 z_!DaUQt#?2|I8Y{iI! z+jCu2Jn83opS^Z}-1QfE{~UYGU=!XwFxaq!cMJx*V4FV{V^~5+R`3}hCwaehw)(l= zUDs9lW4u?Ls)ToNbCqA5@VE0?d{Bm=Z z_X&?xNO-S*xC%N<^tPk>N#2<-hPSc`0v@>zQx>+yelbRs7z0L_0Na%&$RZ`n0&{p% zA>&IBnwRi?l-TO$c*i#<_rShDElYUc@m}+Xc{}|oH2nH%YIqn8rzX6|a`*eoynDgz zRPP9y{R94pn|#08cM{&0H*EFu6W$YUl|R{gCkF~b^sK}U{>dnF6HEPk@A{2f(ROnZ zcB$}ltNjlyg(0i_@rj!f-a{K84c_Q&^~YbF@OHyu@XG)6l6}PdvrsS1Kb}pve%_E9 zVtEngJCt<&VM9ixIprg{u7B!~v z#pC=T)CGp7neg6(bKMB9duubi;O%Q^d3ZbGuX%5iP6_XgYq!QmM|A!Kl$bUo`7iLg z=iv&|ynlq$0`CRP66|&}91(o``jJC>q_8M76^Jx`L@Q#BN@c`@b1};yL@*LQKe6AWYHYWQJU9RD|{vt*t z11j_$3@e#;F?4%~C4=IJu**oOia4+|&Go(x(YZqq>mIv?&HW899cyOe00!WDk7F>o z-j^*bjgK+nKe*8l5-g4Tx$zs^Xb27bCB}b~@kHZ#-^7CU!F|7X5bB0`FGu{b7-qN} zVTi&Pb6K9|yWDXOWuvRKPKTlM^;0rJDv*a<}eB z;QfF({xfs@0SHHU!}j~-kNJOtSsYR2{S$P+CioV7Z<6;E+Q%Ty4BL+NyoVeE3c>RT zbpZ6E5F92}lC008+eCzEA3lZ#?Crm!U`lz(nF;SDAL)tr8fFbDoafz%n1DX_LG!|d z_cLfds>VNWiNRI*Q@z7rGc57PZT_T6e*%TTd)Z`1*km6ET^k*&g=T=bn8O!`(755!?|IBQK`8`SB)bj;w4K zRsnja#q`f}`mr=^Nq$-I(VY03jQ6fe=kyX<3X!Kn=%+RzclCY_kq*P0H6lEEAA!on z-fu9Zv#U9V?t!nJhK(C4pLvmAR_)KP^iQkyPg&uYOS)Hjkw100Us6GNpX>byL8sVz zC6&Sagtr|G7A*H?cpIzy3p^x3 zgGv`f=4|y>V(#FebsTQKp+vD#7x?l7Rto~f+mNveSve)1-eLIO6z?pg$KG-nj7}N} zj|_%g;88Hd56i#~W4$lHsONd#20Y~^f9AFRnHaz_zpN4q1MJv17-TgKsT3;FIH1R| z9A3{mVX$0OutOnbyM+dNJEMM&_Cl<eU{tpxx#(TG-(10h{l~T`>MHSeO~}2Kd9PAcmxPKLj30&A&h(#l6#U`YQB3 z%DH%ze=c0J0N8pMxysuQzdJYKeG`tDXOMZ+!J}+!CJ>JIG??n}4!#tv_8wvoPM%Fyf zp#3$Dn;-J-M!3Ty{UiAU1s~Y*ZqVf7*l%MEZ1J(&*fbZ8`123rMC;uj;}8w_bcRQI zF9AN++l3<<{1NczG=Big$FNRDAR*g&BD0S*k-E|*dpjZi6z>?shz>-a$ASE_>q(3d<`*R43<98d`u9^PxT#|J+d8_I5)Wtn|Q8T6`~{1vBtjQdE@w z&CpmGZf(5puP5q(wZ%^LB8HUft-!5DL|e3-zSTedW~AAD$We|$C|UQOzGPoo@c2%i z>z@hb$N1xx(Z24_sPaD7yVXA{;T_K7-PQY-KH6N*^1cswU~^wDOoB!*Eku-f%`e2B zH6rm_9O&;yM=Y|#d6@P4dS4@Vd^jKbKh7SN{M28?e2IpXdq45~+POw1k4R{{IXFygZ+x{28o#A~F?FHU10Z;Ni0r&!M zJdQiwS^NFcW&Y$F{L)HJ3;wf*E} z!(teJmG`|X`7-ihP~gCXrQv)32KS!jeIIe`JhQQE?V*k3RBsE2=5tIu(~RYM)_sz9 z{cy}14o;Q+m}-Ag1$`H<@F&&qd>{k(40zGh6w)%dqnoGV&3rn&{x>c$a6+1hz3KP< znKzTY&t$8MgoC{#dXo1wOt+CRVwpebA|KzwmM8XmZ}f;a&_!t(+|E0W?GaX(SxFN) z)9AT}2QbC^5ss_a2B%cQSc}L|-Y;MfEbD{FNTzx}#jKsY3`y5mgvxKD1#a>*hDNH> zX$S|V4_t?J^*c<&4DTbD2Mn}qhd&wZ`H736=43-WHQ`}&dnOI}57F8C~gz$$+Z z=6VeBmMPfVF$5eRFrqIL`3{he@%}iRyrD386`~aoxM}`lK0Lm{KeZY;Is4q#y2+|% zdjAeBrvO`FzC&%WI64(p;xL@>uJ6VbHXF%A6R^C!V5>j9!vDZh<1)|FfgS72$H-qN zyFjn0&<~#J-3)61{og=C$D8bg>B2+;obW!0>v*)j4c{2!-2l<&BzE}cJ_c`m6Bfbx z%-iaxE;yWzCwU(Onr;-PKpukNuX&-~%?tH6fJ;3C|BT`Ld4c{M@af*CxFguV3Z+ZE zJ5bH_{y*y8JU)s#`Ty@^2!u<*A%uVu1SR1Nr$JDLOM{?BMU99OAV82STp9%>9BKsA zps1)QaYZ*lba6#DD2q{1qoBssU0Kg~qj=zo7!>4J)%~hTQ8Vv#zn}kp{eV86^XjU4 z-|z0}p0JF}cA@6WW~lDvB2iav!BOLvW_hTm9Mo8P0){k)+wLd%*^HtZmB zQvJ|QYR?IwjZ3J<;f$fGR8BUift{A^=kqOo&F&NWiK6OEWf0WV)$_S`=otEiBJgux zwW#x`>fJ!Sz3(TXyFcP>BWK5lUg5kAZKJHE8+)&j<97T-4drJ!ecUeeZqu{%wLGc#YK$(Ms0|FD8h!>H9nZ~R zG#mcJuQ?k?#qHswXSt}F7bkQJdayg@a<-ll`kq3f{-p=^GJYupADkTek(xPITDq&T z+rKb9J9HyuH60$IQH$s4G)-wk-&xS@r|#7FsOQ{WK-oq0nq~p5g4uT4`sC1;hK^8? z)AxZZsBkH`!*oQ|^Hw@a57C^3u2RR0^6$c&lQ3cw-HREW&}T)$D7hMaZ~>aGn(__FL-S}VO%<-$f2f&Jn@$))8eII{LLT2bunpmAomvCNa2X!gb zULU0P-+;#1kLLKJRAtiHOSw%@laHf(59QL3PP0Qw`iCTF5PFC%jy{~@SE7x4=ChP0 zI+4GBIg{@Y_Mma$T~ZFDnNHH#bYqm$lEuAz?@|68G+K{I7;po9p@u8=Tm3GqZ|G+# z@zhaN&Kz#9&_C$=#7<`=^r91&CY(Uk_%OxWxqj%qW;D;BD~Uf*p;0bvr6AIlC!9Je zA#F6>1M;iFjlRXy&|%7$USkrHv$(0B6yk4PcmQZy-yhCG&ldQN`DOBZB4yb&$}*a= zyv7y!=>l4PM5mLUJVi#9E}>GYcg@eCT3oO!zO%Xfs`RJpiBHm1;X;2(Km`y-y~g+c zx23(PLNWxAW>S?n zKJ+eK|27P5qB{a@uwR}?r5&oJDJ^x8C5>t1-A|`c!@9NcGYK7*(p{&WSCjp}&@~!e z%e+Hh9VdtWPFJ{eL-u02wMyZKslVk!j7d0^QvMB{?RUs@5>I_o>xb^*x$!p(mPK6@ z{Nm5N6R)C^`TJHH`Z+hw4lQ4RrcF)XHf_>SB@gxS8}@57Nu}#4ZrFTPNNtC135UL> zafGVgI--21^?z^UK~F|!Q?5N7bRFy=jt=||WERb4Kco@DFD3sgxRXQwq1>gLx#6HM zUhQ`stwTRI_En)({&6RB+@5~1obuRrx4X_=&(Q4u_zjc#`CgRD5zqSd?rzxpmWs7K zjrl=yS?kl}(05c!R44vL9a9i>)IHqSllc0EE~_YqIP;pE6Ln?0h3;G?G-?&aZy`?K zGCxLN2^2mPx~&0CoTyg+Ms=a(@`R@6Ck$KRw>7@APJBJzS$`I{#kscp9Jee!qg8x{ zX>s@XR!1i^`Fqs0*n`0>)VbyleEk7`Be`MwE1QzJ}vLS9qZjci-``e@#TvN+!B5z+b2KjJ9l z(Vx~Z%V++BZqb}&A+Nbnd)_0yKAH#mmQnhj{PK$Cf&Ta?{bRm9ng{weQTkcFKAH#m zwo&@vuMtM`K;JG(|4%=kqj{h|Axgj0*GKa}-yupr)YnJzK;JP+AM*9lJkWQF(!cGO zS2PdwCr9b;^7YX?(07T_f9B_ZG!OLYQTqFReKZgB^v55}a=EXM=7GMhp37;$A2EsM zFZk^uOJtFjeeaCwfj+}Dqa@EYtD`TFxBoMirTIpte?@aLKQWB=Jx+8aWG zIPY}-*;4+1pIMb9$o3__e4{xFLLU9u1hdTb_0gPVA+N7d)8E$c_0c@g_m9#a z@#{l05A>%->0kHt(LB%(jMA6*`e+{LPm9uj=+}p69_R-}>F@US(fl6jpX0q@5xxI> zGmb)3UUs>}w-e1-7xK=qa_^|0&(S=ep7MYAulYuk?nK7ooLR2kT*1< zlbsp9KAH#my7Y>^i?5I74-=2~&KFsvy##jZ;upa$emO?-K!2vlBHLGdeKZgBSrMJ= ztn~HKJkXC4S!DaJUtZBX(ATwhIbn^jkLH2?9Faw~1AToo5A=2YgPd^4&*x|!=?dd_zl@% zz2uxc*MArIWax!o4890lM!sb5d%;t%-Am=p_WgGwi1GUpygUjn{jAIY4k6C30$Joe zgD1gdf-Cy@;H}XP#cw-FFSv~8?<3B0z$INbflmQ%4gY6Jdcj+QHw3>GT>SnU=_&&k zzw5zY0zVOUzDAs%fy+q$5P1FgKqw>nWbkg_GSg}d9tLj)`@0b5dEinXt_Hu{a6T=h z=DjfE{Yde9F*wtZ=l{7O-i<8J`}%0kf{>RJ(aFvVUmwliqI7xQr6N0K8}cqY=9mvw z`TA(ipM|{3d2`It*Vjk$pD2Gk?}}rzeDI{tbE7zekT)rcPw@58d?}4zE$9qc_;ns$ zR?($V3w8Y^?X}G3w8A3#k9|9J*GGOflIC>!-$M2J!aLIZr-ix>>IZwx$V3ZuT~h?U zjp|1Wb^YSMV@IDYqj^yaPiiZ@J4DC4{Ot3(`HcVW74eZ&zxCY77t`uo(#PT@zF(=u zb?=pZ=EvV$PLHIpj~~CZPS4v3#YjKjq?O=(J^HMv!|(m1j}=d~Z(n*H&-35qBRk&^ zkEI_<86Jyg&^fXAB@RBp5oaHV{onn3tGhm`B)hzP>T~J!>6NSidk^^Ol3vR5{Pzgy zvmYJl`jtLw;YqJw_ughFD&H1fM_8@1^EWE5Sm~YTh<}x%o(y-ybFo8DIHq5IuP|0T zGaPof#AE5tp?)J4|J84g(p%Tn+n4-$*d>xb(teNk%OyRE|LE(xMR+St5H0-vWGug( z9QpZ*Bmd)l`@I6Aw5HSje4P^NW36cU>UY zW%VhZ7T#$Q{Y>n=;^*6-2>0KCq@xU<*UiKI_a2G&apc2(%BL3InGriOzV~(H!+nl& zf54%ybm%4jTGHo|HylKyoDG+_Sbt?CTF*iKx6gU%D&cDJM`~3 z^raLBFYRc1U$E=1_b6Uhi|8XNFJ4$LeGDIGD1JW!ETxJ+Adt3F_fw2t>L&e#x%Mmh zX8qvGZY{6*+0pff`(a)sd|IN*4sO)&{8{!}3G*NYW@TJhD2|4s4DidQIJp}5Y^D#dkr6YB*h zbDZ0hon*zIQM|k2x}9!T{8^>nqqwf;u6|XGEJ(2op%W;d+KOdaxuZytHdOa?uI=JLB>m}_hm3+3mRN2w` zT*Y6*K5xdVI4@FM&x>?FoDU7>v%Y(*^HcNfO3&?AmMZLYBRiVw`J0ZXM8&Dc$Igy+ zJwovp#3^mZJ9vrWIZEGNwRc?~N*#Qs;yQl0Wya;D?PSyooH5t){CvfAzp+>GT`JC2 zj&@D&kogPS*Xb%&T*ouGew|*|pRtPT`M^5GwVv+>^1^<#K7+2`g=@dN71!lktGL!@ zC)U}~`B131F83&Sp8ZZ$dg)i0>o}8?Uh~cl zF25^g?MVEVw?YhDF1jDf24}sV56jrZT+fGRD!rb^>i$;GVV+qeoqRfI15giJ=A4IeoT&IL z+Lz-diqEEfIhOokJ9CK3v6L@!PNN(rD?4*(Uyj==K9Bb0I92iav@ge<6<#8$Ndy9qEN{v-VO5v>-P!=U!!;nmCy31CEL+_4(17#f8^ljpb}X9 zb_Y*Jg|qqv4*q8cABg#YwX?**YaDzK<`34+QU`y(X_+YVQ*q{9(o0D*a+~3LL-Y7q+akulW}a-m_I~ z{bLT^9YI^a^BlZF@pdZyF0JeQYJQi4CtyOwezkt3gCBD6UdgfjPEz~?73aywME0xs zmkz!trOv+Af92r4kr-?Leh2@|!F#ul?RSadb>H&S{1m~lU(GL9yras8haCKC#XBke zoD=Kf(fojehY03yk?dFNUvTiAonza7*}?lDG1mSQ4&LaL*!E9%@Z}EvgM-gOCfaza9K3Z}?0E7V ze3OHJ=-{1@={BC}4*rCL|Ki}Mca0r?frCHf;Qvy*TVT>(x5oj;-$U_9iuY2yO!3}| z5APlvupP~>a`18o|G~lgBRFe+k%K?);0=4mj&rGlZ*_2a#NWo#7nx=GR0qG$!QXIj zdPU4%to{BDp6}rIJ9xE&*F&LNzo$C*l@5NtgI7Cvs88(l4sh`44!+*O-*oVLePjDQ z)xob+9J{`OmmU11es%V>eujg8=iq1ck8NkGgC`A$t-sj8*E{%|4!+^k*!KV7;0c+r z^%o6{&5Iqp+QCDo#kMoR!5??J3Y4F z0S-Rh!Ph(Zrw)Gn8L|ClIrt(6f84$M&1;;L9ESX$L>- z;5kD*f8qXF_a_fHc++9A^%pw$jSl{?gSQwS+kUo#-{9aC4!+O9dyk0iH_yTEcJS96 zy!pu3_Ahbp`yKo<2TwmUw*B!Aew%~ubnsssyz5!9{a)_iB@X_g;%NH5;r3Z|_BCJV z;BPs2*HN+UEO+py9sFwtZ+~`d`{z0MG6#Rk!S_0NyV0@zp6lRC9ek^U|LWj9#>DoU z>)>}fc$I_y=HNZgsq>4j)CXG~eBimU^*1>9E(iZzadeHo;mzmO+1GqTc5Hs5gYQ-x zU6gO&+Vkt|Xx{gN*!&vB(WHFg)C=qMn%|>1sx zW83-j<*|9oD`N904u0Q+*!tZQWAjFnWAl{`{+WXh&Wmklor526@N=fbw)2RCA9e7Y zsj=;>a`3ktyxz3fc20HhnGU|e!T;gl-ST7my~4rQIQUKnKjh%ur^og?&%qyd@I4OR z_{!M!&v5X$4!+UB-*xatGh+Ka-NBbT_|p!4*ui_vjO{ni!S8nP*BtzagJ;Z&?RT<+ zmpk|m4&HxuZ2OBG{BZ|A;Na)XiEY2g!Jl;SFCDyHL2UcyI`~otuW<1196WVyY`+&e z_&pB(v4gjo7u)_>4t}kJzvtjh=f}1mcJTQQ{)mJB+rf`p5Zmui2fxX|pKELazitTrdgD+A1qTp12y~n|OUtMQk>w6c*<|`fiIR`)B;OW=Iwtt0# zuW|654&Lk9*!CAX_)896>)H?OPndknwc z!I#A5R~E(Q2}@)1DGt8Q!FM@$^JTH^pXuP&IQV7<|JcD>ERXGXq=R4U;Ey?YjpE}1 zSN=MEMV;UAiqBIVQ+xl@UmSe#4Rv<3KJLcY{6+_Fd{b=wbq*e199y5|;I}HC8=UH| z-*xatH`m#pr1ZBrc&nAM_4hdViK}AkA9C=t)v@)DDUM4AUwF{L({HJ>qxJOz?8V2? zJ6zc3O%ug&s!v)Nem{;|E4~K%yh%}(;y2R%C>+ZeBzEpY;4_t;?aTA`m<~iecgi+-5jzXv_l^MjdNduM ztOsX3pDX$Bu+lfB{bU^f6^+w+be1+j*@Rf#N1}^WNiT(NDcNzWd;OhR{CvZ21HZ)Z z4dBxZe*%1#;oHFH8~!}_GQ(d1FE;!Q@O6go0e`^o@4+`3UcW(*&zlTy0WR-NNO`4! zKW+43aCwhg^cR4?VD$XELcGZD9*BMs_!~xlEBHHx^Y2yh@}A*;0k1Lq1@JEoe;52) z!@mbVY>>^pgKa4VV1yfPPWzbb`Ec_Y$8p`clOCoZ-)c?=t*L@OKT5gWt~#PX+(M z@Gju;6R{HKEwJAh?L+t`@YaUE2_F1TbzMH}2TwElrtmA{p4cAk#d%&`iu=j;Df?&&{u$*)e-!qgQhMzA z`WKD98Saz6Y4}OV&kqcje*SC2`$2!$@S)(+Z%KJw4t_k!NB9)*j)pG)?_u}~@Y4*x z75q%Y?*hNT@b%zV82$+Om4-hFewE=nz?T`m3;b5Y-vz(d@Grn0G5jF-UkyJBzQgdu z)XYKj|IQM@SDM<9*O_cXZ8 zw^xjQJo2I1=(CW|9~%Al$j^O>-$L3GQSP;d_X4knt+YpJr%8s(_|@L<({U`npCES5 z2Jd0?vv54n@C7&?W%yM%9&30Zj;9!YEsp0IF6p}7aH&r#4VUYky9~b_#}65PKaRH; z{w$8S8(xXyD#KsH@jHggbyJPu690FG{|m>z8vYHA>o*H3l9ZRk)536x=S0K*13O&} zmwX;z_+jYJHM|*)FEd=?oMyPhIp1)JbBW>Nca`C(IKJEPE;xS3@C+PpFmG;ygc* z?>pKl&i#qxe;37BKdnBkXz8Xn>!n;yRh;$zf_{+Vte1Lqmg1}*iAmOI#aS=)?GnXV zzZLq+6lcA(qiKq>J_*;8GZbgNw6ALom;T{q!~cT$+ntKD{h6?TkK%0qZ_q!iIO{h+ zU#>Xor9M2RIO}_3lDJKA)=PbU61@b2Kx8at1|PL)$|qdq;8BpVFCDwCquw^>TmdbH!P|1Nyy+vtGvQ1B$c0>&djD zrB-p)%Xr=3c>m+beXRqCv!&u}ryO?LD9(1I-gYuv#?xMkbNiC-mHR2q_Tx{X6)l;H zv;EnqpCc4!{UYeI6leVr#6MPX)=%p~D_U|CXMLkKKKAkz=QvAo-8xrsw$mSemnhEq zYUqmXZ>+$w4&u7iu-Xw|Gwg^ z9}oTK;M}gcJ<9W5KN|g?pg*iQ+xP18ihe&72A_{EB|o&B(Lnc{5c2k0j#&gn`=y5@jOewLt~ ztTtTgo6K`L-`H<9=I52lKKt$8l~%O8YIr{QKMcPQ{1fAMFyd*3cqPuAfqAdJ;d{U( zeWFi9|3Ad&lfcIq-W~iB!?VCA87{wbeU;%mpbhHcoBFLJg6-BTmqhIxIEW&n&C}QzGoTU9{e)HGr$)b zz6E@V;(bvUcykN5jMqKTFWjRz*V{=r>3+qzy~urxa>ZG{1Nz4lXT6Nq+Z1PgNob9hg{@-W#x!@ZOPXzy~;%vVL_McUp?e9O0RFYhr#9dY{l<<@Y9Tb8vLFGF8Pp+@pOjL`}G$0uWm9t z7raDq&WEgU5dS@fw*>!_;WdcoQNtete+pdUT!%PcF#1KX|EAH)dj&rzJ*TS#@z*NO z@jnhbaqa1V7Rk>8VgJx;WO(+_fVVXKF7Wn-j~*82Pc}ROyr<#UgAW3id{}|`$poe6 zbjfo;`HFM8t{Wcsoojd&__c;N0$*d&Zp8Vvv9ksCYmEK_=#MHr zr%Rr*N<1M*hm^~mBZK4ShMxzXVt7OFPKLiQBCyll@Y}%q8$KTV48zmG&ocZoq&M5} z_Ysf&{b%kE!}WrAmMT5xLvG`M-*0#c_#=vQxo>2*l7wb<$Kaufv&mY+@Ifyc~M7)ok50YB?NY|l${$1 zT?G4M6xa60JM3I#_zKuxuI#Y=V%Wb)aXlX0ZS1Uuoqt%4aq1hx!|_47k~#!i$xrF` z(hOgK_LXh8w7Y!6k0;khIf}D>7WCs4XZvz} zlyA6Prz}vM?Ys&*g^IHsnLn>kob@M-q7^O0ss1Jsr(AceRh;#oK)+6LwlDMiGR3+7 zsYE~XgyL*x5$rr;_~YPJinE>lu=AGUZ0DNMw4&v`RDTm0f6oN}%hX2f#}IJZZxp9cc7-q}jOidZ(jZ<=a&5%?U% zIe%^$6BsHqJO_NK;U|NyH2gn^b1k^UnHd+@f6(YFVdrt9m-|Ss8onBK{$=d^1Uv63 z&h<_D^KTq>>Yo(EC2@Wp9D3aimw3)JT)s~kZ}?WkIR{+&jf?Po&>M<_Gr0V)h~$qvPuAv? zz@YG3Q4c#AF3&OcG+gTEX@=hmJ7*aF9QfIW%kyL741XE=DTcoWJ{O$x?F8fvZz6z6i3bls;o>*YS|2E|z~-xoisIO{(`C;At~SufugKdU(F=i`3R zbBeQG-b37_IP25V8N8`D>*f39j}_;7ScLkpS8=xUG5j7>ob{E^A61<7cfxPeE_6T( z*B{o)O9`zNXZ`!ocUGMBa^2BGan`5fx_uCMq#8a_BM?}gHX9noilA7}VX@D7T11mjH)a4E0l$hU!t zbDS3;&eIj=e3SlUl;W(v5BhTyXT9_%mxFWs9FMe%#YW!&dvr{udc8@8zvFT;?GUfODJ}>V40f zjeafaTZQ7BKTjaN+ZE^f^KY5&DbD%{skEYHx8kgqI6nZFcrcuL-zh!Y`6ZQBv>Y*f zAXida8g&b{*3QX_qbv1=eZeK4|BCbuQJnoQf&Jl%bNrH@7b?DrxO^|4YxsWDw^@eE zeXXk$XTRUW?=o;s7soI4=N7}I|5<0a^grdwKF2>E_2+5B<@u`@4VUK+cN<;|J9`Y5 z`NQXiuZDiV;qrd;5yNkXKA}4WO^cM5%=eNEe-Qe1hRc1YE{4l<$vK z_#Q!i2%iJq!SG`6)4;jjqDXxMSw{a2+TF#5%k@{D;c~q>&v3b}yk2o`M{l6NSf=llE`We2P zNIma?<7S5E;yBsxJ8|66@G2a4HT*D+`x@R0g)rFgN#G+5zZ3id#W`JGVvwH86zBXL zgnY{b=X$~>WSpIA^w%KYmKl9GFz@}v=r==O;n06(^tI4`Yj`)5)6a%q0sgz;QjZ%T zKcv0941H_GIe#*cKOGe3{F#sXlV#;afYu2pKSOm;4=+B48G9tUi_suEz7{AJ}d~ZcZbo>Mn0@J`aj#*!dDX!*H2j4K`fvr)3!~{o7c> z<@>u_!{t8eOv5Ezg@(&~a)sduErNV2F}x|b{QXc#ue@heZuIS;|C`|_f$ub2=Kt>* z-XHo;4Ic{ryW!`8w?(~^I4=k92hR0y5b6|fh8g`xj7QmqOPp62F5~h{!)08))^NEG zUu?LP`(1|1_sEZcOZ?~_yc)%asC50L>~Ozv$~nP@hYjBhp3pD&ob!$K*PR<2w@{q> zr7cYY-cE7W_lCYRILFEHgaf(P+vs0}{tTlZ1N~Ko%Q$kg;aSk%r|fe-FdOAwX1HAM zZ#7)5qbm)+8+QHy&gmKopS-CtdU+q_Tg5ql4kEq#73Vnb!}lGB6=(g%^Jv9O|6n8a zxdQqmaEV8*_d6;*+Zmi4oZs8<>%q@(*tt~k;eiQ%Jx$r+_~pHw`HHjOov?qk;;fha zT&_6l=bcY0T5eLD_3}N=-HLNPtU*28Xn1NekhK~jRPVtdoy!j1W%JGrogAWr11Y6;fKP?Pjk9v5b;WCb-8!qqr_cL6c zCm#vU={+k5!C&VnJ?GC{w`Z5F8OeP&f(<+qpyJeb)%Q(QrO5&r_WBGS9h8an{ey zp%pC?6leX=yw##gYKzBg8!^^=o*?Cn#W^_N5cgW|q@=zmk3^><7N>>O2`_3}Pj z-$8NK%YEiLSJ2{x4H#Ma!j%vweBrWV+&PC;K>7)BHtow(|h&EHZo~_zJ_nMMrRp z;U(aA8Qu?k1GuDjOhZ2$Z?n4F3oC4#N}X2l`#cej)5PI4$^`%boL~1o@Dp zIOjtX*l%n2yK{r{PcnQ6^gX~OT_eyRo@VsfQv*9^D9+_2fc;ktm*0(g z$MF5of2cUebJ;9f(Xv-@-)~aDzf+v`Bj*JCN5wh*?6v_vqB!ddp^wAGwv1CRBE3x& zXZ@K4ft}`x>-_JiILDcbIJ+v&c3Q$tU&B8_JcA8?6#Oj3*?tM^k5QcMzc!6lv}7x; z;~Wnz_2e+>?R2GQJFial&3LmEXFKw~?sbZDJT-{tM#b4q9^$#p@Lu5S3_lFN4;p?q z^p7ddev@!t>#vHl-}liEKdm^&FYhhC0519Pd5Auw-_%-T>RF;Zzp`QE4+I>GDb@VxQt%|t_*lT#o7LQh$pN#$1@%J5sI_^Q|QNn zTfg&_p6!HSXNlsR|6%0+3dLF9DW6uf6f4et<-P8;inIP==+`OEdTEav6=!{C0C7IAINSLVeqS?uJNVm%-wghd;%r}j-|92P+5Vfzx33iEIKM&u|D-tU z<7d!{mR}TS{V&irINkr)|NCe>f5<~UNd}jCvL1drDb8_LBOlTfXTP`24D5DST<7Ot z#o3Ph2;WG>+0J;_IoI$m;FlPF0O_3sF7;4;mtc<3_lJJI;vA=ZpSVPEj%N|{%N1w6 ze9w5B;;erh`a2Y7eLajLrQi~0=lb*^EsrTZ+ew?{WA6#Y*-ksyc|q}2#4}n1`dx~% zoh=wI-ZA_O@DB~Y2K+0<*?unUf2%m#Po5k2-LJULpTml?el+yn8NqonZc6?)QJnQ_ zpifd<=jRFFlAmP>f!(f3&vt%B{pqPV+et!xp5d@_xze+p7hoq}an7Go7{?|8~XMehb*IRGjrG(C=29^&_FLR-E-+pqKacC0!#B zXPYpIXc4|1ymQ#ck>?o-VLwfAZNH!59M7ZBXDZJ6eB^T$xcJ=)zsn7m=dtfMd@bhN zPZ(YWzTNN|@K+7b!t>AH8lDS&+)&S7B+j+q{S24C>n6V|Ao_loS4=bdnc#~I{}%jC z!;{gU|IKjuJ+$`?Ur;}Y`%A;+?d`=e$>Ou7}moKcG14<$H%sinBib zYFg3qxZ%ip#6RdLquhyHiPS${p+sr;UVrpy* z`CZvz`&B5f_!0icet*vPZ$Ka?F#ugn|YH(dIk zuMC&_+dmn;AM?+nhS!2O9!bt-)>~9X_-VwuV!5f_!>`1@#BJ8wLoZE%hD$u1Wej}kXmIXZB@P^=h44(@=$ncHe zqZDVq8Ss07;x`hXw>^B#FuT%U+;t#{lN^mL1JgQ&3 z>@d6#{AXo{+hZTJi`29H)BJht)L_?N_XL-AbW7{t!-0z5Na*3!0Y6=FwlDL9EX7&> zJ@jJ~XT6O3mnhEqj{G4lmnqIj-oKaz&iOFTR|czvMt=zNqUDB5|Fgz$`5t70;qtxh zV}{H3v+_GDl5g@o>?=yo>Dq&G+@(0DOYUR*+iB@87|Lxjxt>4hnE;G&j(I1T%OyUZ@4_S zSp?4My&?$RU*Br<@;krxD$eP>66t+Fah={xinIO)=pR>{^^yO`mxYoVt6k248w7I(pzG9 z5%hN$z6Jax!)w3~fJ-~dM!(wO>_8xV2Kd?FoZej6;7yLvpMmx`)o^Kd3k;X~w#;y; zS0#o^{dvG}sVAEh=ls7B<@mVbx}Iz|TI$Ot!T+oob{6b zV-;up8t8KrXT6k5p5m-;y^2<}ukn~*N9->E?_hW-_-Mnc!LJ3E`cQ&)x54mo z@Yj?biG@w=F?#vE^)C&V`g6c=sVDL01c6CBQXi5GmvTSRa4FyJhD$k~X1J8s+2EX? zoUVF77+#6dkHd3l&lo-w6Npy~KOX!Y!#jX~Vt5bm?+rf{9AWwMPrii92S~)0<7Y1Q zA<1xbCo&C+*x3qQhS6`wai-xraU3?h3ddQ7@5XVq;d^kLWB9i?E-<_arH_}wU=xWy z8NA4F`CSf4x8zS}=u3<~4Sb#9a$T^+@cqzN7=8e}((qbv$tQ^?FFp{~C_NAPG6&sj z_)Hw{H@pbPwT7?2aT5Hq-*&|MflK}g=QhBLVW-&eRPYkRrM|5*T^Kn22V9y>S3DUWzdHWm-d)tcn74cLWF7>m@aH*fwhUdc09>ep&_Zu$tv(|8_pEA+n`or-{ z{Y@~bQ z?C&>R#*13RWxPmA2pnWn9lST;j<$d^_SPGW;FbFE(7}2PKAo0R1|{KL;;0T*jL+!{zTj zR2p7@II9d_3tnw_BKn0rhNpt>H(Z{RsWn{w{+id|*!mNOokYW>-%K)mEA+{RZwF5` zyb?Uk@SWfphD(2%X}CPkBY&q(+Nt#WIYuw>=Nc~Y=Nm5Z7b)JGvZ{TMU0$)_so*7s zcLrZ)xQy?mhL=EJX82a{O2Z|dD#KHuuQpub*<-lGQ)9Tqv)6EmM}E(S^IzvrVqy@0 zaEV9$j<;}$C)wyF9{D{O(Jw%{GL2s58)3s`yv{P*Lw_#66Jzb?8@<>sFkI{x8ZP!r z6z@y1%Y1L0;bEk!)bM=pGQ&&3w-~+`yu$Er!7B~l4_;;X0q`2bH-qmrT`wj05UTb(7xYsC1pp> zhKrqi!^KX4;bN!I@M736F;bXun49^CyG&~2q%JA{v z)rQOch&_hO`*HgXUk5w2hHnJ-8XsGKWZsx)xZE$0zq=*%tzNz0{4}GNd0K|yt)R~| zJR3Z0crJLB;W9tTHC*)hh8Mt2f#Hk63k_clUShb|S!cM|DK%W|lo?(E`<06Gt2_lk zc6wEY7lKzCUJSm+@a^FH4X*^RHGC(y{9q=RFUL~_p4cSV5xyHd$?$6MWWzrIPc^&- zJk9WI8NUo43!Z7XTzAXg&yhG~9+G49NwAY^czf`C!{vTOk>O&e*l@8^Vz}5@XLttu z%I{-w{6i>j+9Q7|l%9Ea@JhpF-dJV0)RP*;hm(y|*x74%XYl=or-9cR-W}X)8ticV zY+veaqTxl*ryAZ5Jk9V-@C?Hxy_trGp${7_`H*G!TIh2P9|4|kcoukp;bXuH4Ic|$ zWcWJpV#7CrmnuGr*n03X!#9I(FRKqtW2D&uE4}fPF-U{=oOv7cqm~FVklVkX| zh%?vlci=bQaEYhDaEYhTaEYhH@XfHl&TzRdDm8p3^ks(c2AAhLC7&0dT&j$|2)x?x z6_{7-F?(NIYxdH?i5V^+E27CK;ZI`##BrSAb_2F7y9P!zY(0_tp^1je{ZRQkDpKF%{${e# zZ-)I0!=)Z(8eWV14;$VJ_m#2?m-~A1J0%iNGW7XI-yXcc@b2L9cLT&uKXCb-65$f( zI%8)uuBS>3m;3u=h9AKF`YndnL%vlQo(NuPxXkaX49~;-wZ`xy#JSgSx$fR?cq;U@ zhRgM}{CP_iB3$--!C@KRic8A@R=yPsICD!VAEY441$2n{2rJ-Cp_K2(hyt?Jm>k z4}gaauLaLC{4jW~;c~s1Z}>XoXMy4MFzy!`o(NuKcrtjg;d0-$)bPD%*JXx#h<}UW z((hFmz7_gP!?%N18U6uyjo}i{Uc_i^1i06vTca>|_~z6L5LHUi9t3bBw+-c!A>lzH0ZNTk;AG9|2xucoulE;bXw% zeO8W#?XLhYGx}oiErzcKuQ0q6yxMTNKd{H}@fd$=49^AMYj_^GyjREZ=aA1@_)TmT z>STk;<$wM^?MEP=TmwQUU5t@{7-5PFM{5~dw5)4=yLo|5)I#o%uZ4qyS_fzaJchQ z7009PzCO)xNpFVYcqPf#XBxiKr=Ay9oS!$ACCl(a)Sqm{`FT`Xatz-LeXipC{GlxQ zhF9W)0>wLun6`z6bKB;nNbybq^4G#d|A#t>MxidU!vH>wjORPc&Sf z2TD?WkkTg`F7-K8alXGTOPb+wU7w*i-*=TI)9_M!5LSGsh-sT;xYUPi#fK|>j^SJJ zS+3$El|J8aDc=Ic&rJuJQ=>L6(6tS*<-lWpBlyW`?GruuYs-oisvf(wT4T1$sc#; z`aenO6VX`C+6C^tOj4f#T8QyNu7w#WqVvD7_x9rR-R* z$7QK^%=P$Nr0nQ%cCF%iJS|gPkDHQDY#&{Yul!u;k#wKbDz3*n`96p395b%bF)z&Z z_$Bix=6akeR{D;?ss38p6YKT3BmEF_J-&Rd?C5bs3W@c4ypZPtnCo#Nj6!9u`~R_u z>wZ38aowNGbC+yK_uF#6gt_jYE0rDH5ARi6_qU0-zGpi_Rldph`OJ0ynWgl)pOpIt ztk?aaJcr0!_j~djB6Hop?Ns)4Kek_Ssq-AJeDBS6bib5_#=~6qKZ6z5{fyi%VSTR3 zheD;Fq~d5X((e{4th12d8T+|OXwKTDpcU=EW$e^Tjndw)Z5-QK@cT(|e%71!;( z8}gI=>h^xK;<~+$P6!godfnb9E3Vu7BE@xkkH`H0wxiqo(~9f%eh`Ugy>9RNd9#ix z|Nnyymi3(!zZ99p{A9%+S6sLE^Kc!{`gEm#4VlPXxA#vK*X{jR#dUjcrM{QZ?Y)`0 z->%#Hnd&-PxA!X)*X{i;82C6&-QHWH@R$!(>6)SVaK+{KDp)^K@$=L;tK0j_ijPuy z`8`XvqucvSsey>OZtvlf>bP$2kDyRluiN{pitG0NiQ>AwpW3<3er~YquP;!1lH&I( zo~QUzitG07jTzT(!o&p&CQis+rdh-F2eYQknp|*=*K@&?!Ua9) z+%qRko-?ap-jwC7=xu9`A)!mNpf{`oWKOw1cWCNG>h=W4HK-jqoTr%jkRY0|tY zSLxH~)F}%_Oi@;b&za5Ey`J-?%$%ql&6_fD!Ib|=I(6QZ|4lgAw>i8n2`=YsF_z4a zl=CnrC#!EC%Bg8n<}dJ*?|7XgsBswA?2%&ds5P8O_?2>6jw(DTWL_k@CoG&lefBgirReNNrVN`hZTf7b~A3sE?PK{>}X;umeqPwJ9MA1TsZyODLp62-h8AhsQL3I&Zep%?O^_bdAboypFeWmyg7tS zm1jqJQ?jN^%$p(~2G*v}o;oK=O=0*MG0Ok2u7wi6c*;C(pi!qt2Kt5U7s~Y6)2Whi zt#yho@{4iQtb&=|j0uy^E8tFJ{<#Zh&h#csm`^FxDA1|COf+=~&NP_A%bNXya+?4zYQ@OQ8nGgeh6^#0na?r2h=hmHy7DZKl z!Nf^3rvy#w7#+7vT|)BVaB37$9>l-tug;r2`M+rAES#O^wB)B`*ngFbq|>>OrcS(S z&b$$kZj~Cug#}Zl#4zpmL&pd);!K#Bchy9S)pgGBx+e6$p22-uo!MCvXHqTnCI_3K zr$Olwo_TFQzgT-t_Igt1L?uGoYi9A5(<&5|1m-Mo_t^F z^8YxUAIpC+{FmWGPCwtOu>My%{LB5g$o+NLvFYb#8q0si(jWnn&+MOXeOUh=I?7+( zj}blG`@UqKxBNbQEdN3_+Q{={WL`6r?t zvwyySX#MkZd$ICgp6jX<$JpBR|KzBDNy`Jrxj2vg^L z{{`@`%b)LuTL1ihcP#%+aNlyhIL6lczr&ILrSLEHoYT+uU9JBE#A5j`ga3T^m5ufP z1AV|OECOsRV)*C#yVm~+i{*ba{LAwJ zFca1Oucq^3`A=TKR_VPosvo?tf4)^|(|^D*{>pRZf7Ji}Kf1WNBVan{gLM@=v-bn zul4e!BmLFzp9?XUKYyQK%fBNTj8*^kBn2nR^BOP{<-a|h&oPBXfNjQ2LHW!3$n2lL zx3K;XJH}sm9zgVBo_*=%7svR!_vYyO*NaXRdr~idAcL{eFV7vw_qgKI`u~Oiv#f9c=ve$KS(P|9Ou7cQpbm6?@oP{}UYjZ}zI_^z-*U)<4^imHzJdQY{~TWn=x{ zM<2vWe|`-A{Yh*6?;;k6|BF26JAzm1=tBVZ+U!^bSu zX~E%%$IxgU&$D8se?QI_e_}?CWqXGs{k1q>o`;h2ZTfF@q`%;{ApK=Hk<&kn{)=Df zza~+_SxLjdG0Xn0!C`4&Ci0o}e>t7cEF4h;JIN)%iG|?oe+2!v{=XqvEdM3lVF%~S z#`^z)PLAcj1pXzR?Eg&qZ~bqllVkZWgMZPx{6FM4e+$m9krT1ySoQJ%0cK$hX}=8d zmw@Ndb`<@WcqCmHI{J?ie98Yu{m;3M@h@`?=L-EDQhyz^pV72${a->LR{m{-|7x5s z8=L+M==@me&xU`U{&QmZzt)ld1w8|g)}K9I=tzG}jP#!u!~X{Kf42P;!oTE~EB!Cf zJe~8ej|i|W!ud0(ed#4AmEaua*OFsqM&^B+5uBA5Y$EHZ^wasw!VyKVQ;YQHz%bjn zkp4@0q+Sd`{I>tk#zP~ifw{<9&KG_J^OuMKI|Vp@>@CNBBIy^(?@7gqKYMMUtl&vA zEgb*F^k4i-{Q1PJO+wzz9lWMzIM}#atd`$zwv6Q`z8IWzm@BPXtoBhy|DCuaP*$!C zPUiS8rT;emNe=%h&4cs9`k^N}-}=AY;lC;?DEOj&b^b4l;h&$MW1FaMftc3g@FL2C z`r#_#;$OCWn;o@{f^3gUmWvyfnGQsR%>^V`HHuR0VT-ZmuEc*fA*kB;3Fm%J<4OJ3C> z6xw%9(Ykx-J;XJGI(Tm_2{qr>u!%P|B@{k1I6i#n-cZVG&v@R}oKWR^$t~&slHqUD z(9tTnlegyA2H`^!LhbfViu1;C=&s^^+`KX#{d91gYXO7*(cVJe>up_Cc-lb!pXyf@|E23~V|cl50r8hC4-^V;rf zN_G?S7iW%Z;GKWu%Eg)M>9gm&6J~g1W98AKZGI&?#k75?W#zbQn~fZOgU_08;yjv6 zv2LZ~z2xJ-d1sc_gc^4JB$U|o;3Xr=D;MWJSvz3_)yv^jKZlhcSv0hq>g$@y(1d?^ z4T>%(@=E9N{?X+@9X>Lg%4=FY)!`7;;d)eu6Ur~G9`w(&HsM1Z62t$Y-=RG8Sp#od zDaBhu{+NGF<=Y{y;l7EDy|D+*8%gJlp!0{5PxxCN_)DSs|5GTT>w!?cuC<|1*Plc2 zn+}HJHvK|vBx^%>;9mOk5b^bkE~p8$+4Kq7UPiG|Gh0hjn^sv={uA1GhekD~?Gms2 z>~`U8iE#}_XT>Ep&T8jv%jy;`UsB(jn;utm!D#v{{fRqLhV=I4uBPMk-m6m*;~MSi z>J?p(7}t1JBd=^;hqy-jMveBa8SbYe@HdRw6Z@-K7GCp7hoTGQnDTW~;?QvOnox4r zi!bxaFK+A|%6cf2&VE^+MS1WU)yEEAs~N9H?6uzXY3TS(pNCp?{UX$|>nY^BD$aX~ z^*Yar4jvubl+qWZ`Pg&5q&z78{V3l$IOd$114qX)JF;j8l}}vxk&w4$Z@r=mehS5P zEv7tcMfseVpP!i+=k?<DY7yltGHX_SA7 zl$STtwgcs7V(*(%iqH10IdI-ks!K1FaostxXgig65XZqw;wh$3d1=VoO7~VDyDRB8FD%TT{7ikn@yjET6g_CbiALJ zH(!}nc;LL@RL_QyUyfsE8J*jT8P`e8gZOro|3qcR`ScUTM4C-~mQy zZ22MNSM7v&%I6T3X}$8?2HsX~t6Zju4ZNo)EviiG+N`v3O7Esa@k7_J-?T2_@~%Of z-IeaQ!$zwb`t7jczWxVLZa3V{)2KbBQF~15y)q@8+GCIpt*PGBwZSvV zZ{}pLJd@H!e`oBPSL3LTo;QNhH=OFxFiJC*=S!$dBT$!){fx`Nbq=?cA@!(@Jh3!o zCDmhYFEbLX*T%Qh5KS0xxtz4h0yx8@5L!@o5jTvkHm0hWg)wS^|N)J6BKbPzO z*9|tLP;8lj@9pKkpsq;UznQdIi^F%^%;_E)errNFJh!V?dO_mz8}8-!+T>3!Jf8Zf zvCl6{8Q>+Z`lDF)p5e9RI@}?_oBJsBQDt4j<>^n{ox*)Pm%XchFQmi|1~ z(Z9d?LcdiTT6lAxe$Oi}`%@^rjQYUxc<&Is12Q%}uJ!128f(&-HVpaKSe;w;Mz0d%bnIV$LaPs~)?qQM<=zPWRZ)*S|gc%2^fpSN5nlj^=ZT3ErBI z;~LL+qxY(mA#sWOzMtN`a3amI%1`pPaa;U_>YucE?$bDb6BB|yDlR{*mXD7PuN$X- zY3Uu3ws{GS(FZAS_qGlns-b@7r%*i_XX7{hOnr@v*<5crcr9n}SoOub8>sEHrata? z>R(&YIMvecfBF2cF`j=y^Cqe5Ja71=W%v;J59SVj9gN*iv{mCg_ZQp`a9@#5V>I{w zuTkHdMtwn78k6@mi0hLzG;LLfxW@ZJ)CW!&8vZej@^V=3;(NJmcZ`eYTkC7nX}&ll zE_q*WJ#TCp#n-60w`K^9;V;lJ_bYTywH4b;i%VR^{mcKQZ~2D$&adfzq>n(KV&nYu z*P~-Ur1@5Qx8dn&RA!IH7j0`CYP@O*mFZrJhwjg};+VR}C64aaDZFiUT%*RTsopG! zYcgXQ)tjDFZ<pqcb1!%16aDY@8YL4h^9>QhK*gdU_{s zn~rM~`RyLpXmpdfCaX43K2qN|mg3pBYU!$bXT&A$IyOZcecD^Lu`|-&}-l15Ooy>+#l7|ZLSx54e@`8&DQUq|3Bv51w88V%=`cS<_BRilf#S&hfFBp zP&FAuh(}VlO+s1=nF=DKuGnov>^8}$z`AR}Q^445U{FZ4-8Srhk)mxf7=c=SC+%Jf zk+&`;6=7++yY0RW2MwjJUm+Ru1L!S9P&vQTbbKl?l z^gN^Vlg_to3~cJ;J{`}vk(Hw~6we<)=cmW}$#Lp$X`YolN%Cw5V@+d|Kh5U)zuP9v z#8H_x&R?c*l+)I8!co>aI7;+N@?nAhG=30$E-@y43Z|N9V=6uCLYPYW(e}q=V5-b< z{r`>c(y~8^^Uu}I+Ox79jEVK4TQ4XSR_qQNR1|`j)Ti|LZ<4BvYNxI2)SUwC6R(I;80uh6WSr z>*HD<{T-VzI=;SzKQ+MW#$699LKm?rXxo)r4=$iT&2^ zaJuWU>GnG&_O8dKG|chgN^Htf#<8CN&fQP>B#+a6F6oMT+t*cN>kRD!=x6^+M+@{y z=)?X;pZ32osaJf3x zPTo$i&uOeW!t37}VBozwZ`$U*renKR7~kq}hO)5>&>c>J=o@V|DdX3hvkcR)_9^W zvoPF_A7ra(ta{G+O!OUV>(Y{JV^yPRj6By|5G@^R1X~ovwIhgBF}&|MKeZn+}YVdw1=KF`0u8k2hU z+e>P#s|NR(KN)!0YV~_I|DoP;hJV_8OT6sio-G4Y7KF=8D_n+sC7XO;z7_0aK2I;Q zf&1RP8hq6B=^Sqy>R_(J&@5_Aj(=E(ylgIrpSjf-`Em2a_;c3M_(0eg z*?3C&28i%i^t8PE5b;XkHrEI(0Cf_DU98h79oUB-FTE%F_+JqUc6qKtW?lAj_N*dKDj3 zXY=jRJ}WoWU&MRn{F;>;xW~*5?=-8r66ToDG``>2{MC4yl@)#o|45ycA3MFSt!?!b z;}9{gSi={L;A_~=EAXY9FmroOfDJp%y}#}B^8ewQ!~Dh@z4oDwIx9C;GtLO^X02Yc zoPi;Hc{k9{HZwoGsbR(HX{YK|CrmT6Z9M&@`mW~v3-r0iQ5@^I&IsO<*-zHF{ooKT z{LOTuwbQySz6W0fvG?Fk)_%y$b$9c-r;#0|VfIV|_jkfuYCAN|@T#q1gDdigjhXqe zc~=?1*OBqG?}}PqjVDYa)O{tiVI039PPxT23TGLq`F&J#xYNvcXU=hYKCwjh%H#X4 z3GXorV%@|-Pq0ru0MGAn6vST5GJ-cSmKBUi^vXSN9`(%QzR`J%ADzeh%tOD~#&2gE z`8~5;$$6+Pb73Ci?Rg9>LPjzV#W-o-MSIrK3@zic=5QZ#7^*p^%^KRQ8EunI8<)|l zHP>?#=Nz(fBg-6B6{p8n&8@`O*XiBV)@c?8u41eY*kfHnXm5PX!G74uetNojNqor6 z3gcUf<BfyOTW(%8iVRqPMZUt?E%R^!*$ zGuo`74P#HWAvW8|_%(L5NsiqY=`^b8(Xhpo!Eb6%dT+X_+K5pg1A|CV7?~U~1;B^kKzh|8!?`9lI1ZQO#iz}h)F!DC%w~63mA15YC z&Zu9>n%uk_kXiZR6Y!;;AztZ3_KE&eiEW<1w>q1BJ4D-qd5gmNj)Gp%_0+>v-|?^~ z9>vGH*YLozxiJ&WaDs6s##a4dE#p0r?+HA9*=xSehlzW$m*40A9)~LiR+Ow5LB{mF zj$DyUQO-f1BS{nSVIONSk9{#j&clB|pS?EiXW4Z44Ycq4=q&Bu$4?x`o(IbnN@fUe zrg?Ny{te+=%N0PMgioOBcQQZngAP4H&cHMKJ`;VPT!hosl*nJA>q_8#;h4SuRu}y( ze^;9lV@&7>ae)%#aCU(a{Mm=!>|pE_Pg}P}?foNpX%_Sru%<&is}G)em1i7zuWoMl z$93#`BXkG+ahNenF1}_Y>9-wPy%RlJVeGAo$}e3-e=E!h;UVUFKi}{D zL)~1(8n!XkA+X9}=y^w$=H`wKu&=5@E9Sz-hn5{nj#svco|kXHf9xM#1IS#r_L}za z9&>D{bKSRmC5|bvO?)T*#SRK4%qe!<;Bm(k@>)FZA#0XDA32}EhdrhIaUW@Cg{Sz= z!{18sj8%^^FY(;R#FmeNL zTlxN-w= zymb^gS7Ml>GFrMxGQ`%uy@}u<_RR`t!g>rhlH>6+`Wk|tqP(84iX+m8HLoOse?hzC zXJqp)6TwD45Ak<>m)_&n(M0gG{7&*mGRFE}iJ+g);;l>`aSSDb+xdRP8s|Sn9?6@$ z4qB5VKic<~QQ^&>Grob}8C}mY)4MVajVGR-h6X>6?kD6cz>Pc z4J)?39=ZzqjPU<@)}zB(%5RASf!8jpt|^;2wrXVTiMnXnG-7-EK8LO5?%iZM-MRCs zyeEmBK-Z9BZJtM;@SUJf#oH?R?uYEvH^8g+m^r=2z?086G(?YFQWicy{Othv>;Twq zxbfcTK;z}na`2~(@g0s(`4x})5@2j^eG=OVR}O>EW}(MA_-zD?w+(Do#xsuptG8ot zrr8x=+7Rsk<5gCFDKr4Kt1~YSMVN>1UWw%iRcBX?EShF?J&G*d11289Z?p#+r=4eu zZXIB^;vv#Sln(EMeETg{r3?=H*;NOPj;=G;N|0T%Q_C_XLgc*7$(mxGI928nCi@Wv?yx#ozz-O7=me*C@a2Qt70U$WtEU z5IVp2Q0Sg$8*$*Jmbdn|rN-6hyF-T@x#7yZWRBST=t;@A%fPE;(DrBSE#-9y7e|^G zM{h8F?sDc<3np7^dV9*zU&@(NTW}eeESWRc2rjO(Tro!#F;RH=1~8fCU&kEQRVHy6 zG-w5U6qY$MXalAyL)K~xX&M~^gNT1>;nh0i)-pbSfb0>55jI}W*cus=aDJ!h>Uj-c zR|I>rb}}Z<`mu+?i>VjX0%yDn>C|tkikpAo#Fw> z;X!m6G^$u^<4teqHy3Sa)A(O=6a=K#{m>{qpIT^y4dm`1&KhC;BM#%LPS$_WD(u~3 zx?(T<;;G->^+?r|O&1yEIm}b*|BAi-V|sg7|3mfnM44OdDslw1{ynUJ9s5{0g6Lj9 zKBGeU`lv0pUn9*o#{1Bpzd@G1w(CjXE7-$Ju;=?6W9(c(SN;8S`EK#5#{1`jO%BzW z-q2K@rF=#`k96ol|3!P3{wTLL5JC2onOT8KvnW*2{R3am-VMG8`#XZ{8Pt2^LpHcL zf;<|yzARjZjvJh8TqEDuw#i2DIM}!eUraUc$AOI#h9`8KJ-LDX$Q)KJ7q1|PP8d0% zd$1D+4OhU=Ub>#O?P1^4v4^X{uLDi^CTX*e{aaSPrEM12c#mnt%4Qou{Opl8_`iYu zyV%U@X(hktv8mWM@WEDap0M#&BRe*o=gcz4^q#iz)V89|yfU;7JMFPCv<0VvS8Z(k zhLs&r{%OQo!aR+u-XQ>00#qM%szj)b6gl+VJCs)hjwhz`HfHJ;wZc42%7e9oy!Gj*Mwf3hxf&TY-+t zUiFoMcTclF-{AiqhufZ`XnBK~-E&WVCM}b5+{zps*uVE6pPpoXNm`cK^Aj!0z`AE? zSrCyNA*Upw{m{sG--lNRAJksU4*d$gf9)sheb~$1>yf2fkq^1h*jxX%bLGGJ4X@m* zb*R!Y!RArXX#gJ89vfi1xAD4wyjDHCBX>dIG5AC4H1HXNvWv4ay%QNDJ0k6`n9c9B zZa+d^_OW(pdAY>Qa_e`8_%B^B3wiQNYK`G1uiB2v6C){4Xx~M9Y&owjPuRPy8iy@U z&bC=Yn>C|toV4M8AGDM_Ibmf*TH%vtWP3ZtgkJF=+gNk$$@>{H#)}Nmq|Oe zDC8%90Y6r>i~TvUcfGwo@w0tmUp5{eckLwfV>WaZ?if>6{XjoBZR0Nz!8bojOq9-( zzPm4PLAb%;4$Q!}IRMtW3O@P``ZvxPpWXMF=xJmhvAxJ^*a&;fLfZyu#0I$^`-8i; zkSAkp8)OeW*Kra11-v>uv%2f2)=lUWXvF&Z*@w@Vu5f4bt??#Dwrzt%ut8SI264D- z8{{sY|Ee*@=I4Fb96eQK=u3ADzk)3@>dc&wgZJ#$z*{_D_-<>;{us<36X?9G$M+-b zkJHQ18;qMgr3ikJ;a=?m?@}zX8lDx%hp2-JDfXsPDAzALD!Jj;;6<^tZv` z#MOGgeK-LvZo-G-iglK6Xxr0WVej9;+ZjW3S#Rw}Hy-ZkOuRS<&y28dB(MG0BZJrb z!?nojxuz?$@3}-!eLMhm*IsRuP5=u?SAqrBpyx*QpmbmvHc6e8v_}T9AR(=|q9EAa5m2N%9`Ea}IV*H_xIh^4a(95!Q*1>bKaZYcd4{)Vy8`%z*{8wG{0QQaS zlFP7fW_`YtR+j&$ZQpo8@-+YqXFl-vx zGOyaU%=MvHv2_M*pYu3%omNzsVn`Vw|8vFy2_p&2KpnW^fl}(ejVJ3H9 z6Bd2awv24UH=nE;83yac;9)m=;7x2pa(W^cqFVzw@M-(75+Bmz8;syq%N=|9RwF2W zco+L~tL2Q%_(LN2ca~AOFNxNm4d$2Vcd=d;d1L_7>#$xi(LBtO1*6 z5FK|pIJ^f8K8Vdzi~QIA7nZ06gMT??^T?M;-BjTYFns~Oo^P84VLvv{Ny8o9Vcix# zfE;gZXk2{&o2Smq3vHWjKieKpHSc8?HD()EJ&*hv1T$z{eaNeQzj*Suf6HEI@=zN? z3}BEoc_01p0l4@;s4@Dx#>VJ_R$lFc6OF6EJ%<)ru5e!p_kLix{2J>v#`QM(`De`; zb`No(TI`;a%n!fuNS=|`b9u_{QQO)J*gf;Al4D*tYWL)Yx>I(~+vxHSv3m}r=yL%2 z96%RCH{0$>(`g=b5|*v)z7)JgOu)8#az^c*0c8CK=zTA?ifHa97B8BQ+6mBnF7pw6 zWQ(uky=?=9GHf91q33NINSH1U8|aC)9&8}SJ%V4zp6kL48%T5gG#luEZ3E@mnB~)K zAle}NQ*AC_1JQ3q6|%n%pL^N{>Pgu^qL=2DNv|)P{J=6!5W%I&bc!71S<*a}U@`7w2<=V+-r+T*Mv4PN0p1*QV?s%|UjMu;pp^OV4ENHnv=nyD%_l6a?P4-2OUjq5EGB`)*D3 zbrLLFhYu#%SF?}!m)+N4_DP?kFgA;IS6|DqxgHqp%NNpk)i{M6<_Ob zHS{Uo+k;$gz|PTrRsZQd8v)abf71I^m{$D#0(+qeyVu6F?1i9N;MQ+P`40Y&ZKSqO zfoat?jcJ=wHZtwIXwM!_uD#+(8jCP(Mw>OX8RZYflimi?HjUcI1rhdO#g}dV7#F$^ z8@bVuZDZQeakGzV%|dsrX$9EhUYoXizvp`%JbN2>_KCeu@cuJV7dECaOAVMswq~Q7 z_zSW2Y3Sjj*qD{rL)~CA&H`M#)$oRv3#Vn;n8?Z}jNH%@W*+tmJ_9gVkiE0Po@176 zV+yxnFNW4J*BWfh#>q*{SN2)im}cZ{{!6ADF!OsB5`Pi>M8^aeUp8jKuwuusF&m9> z*qHhD-21RGWxrA%Y1^2!DI4=`Fpc7B_<>S3W;XgL8~ZEU#&3T5sihwmHs&a_HP=UTWK5oM+VfHa2FuucNk&Y1%esH8?Maey8#3;x)Yv zNgFdepuZ<=%!0URDjRc>Wd$PeuJrmdrPU9-39sIbk2x1C)|2ADZ(w^48fLHPw-DR2 z8@(yJ<_U)x?!!*s%X`T+KYb?UTTY~u_s1E3UCJIE%r^u3!0gK(l0BLOy>p;PP7=@B z^sst1Aji+rJxPxQ^q3CbX+*c2h8E(vK68dm3(ceJG>_vOG zjyVrt`>;PMv}ccCpG2)Camg6jKlj2TUxpWDOEftw+x}UI{c{KQPl=Id+dtpH{%LlM zvuP^(XT!W1*grW*`v-oO?IQaJUJ9J%`NDsRQTu0Hpa)tm!Txy{EF59{Z!?dlQufb6 zV_f(E_7Aexwts5D5L)*j-#>x<(`Odg_K)Q7lMYw-Ug*$gI&AyrdB%JPv6ll4jdS5K z;xc*my!A}9hPhvVZCnlb233CIxCu(|ywN z`@vprbo{C)wOF!$PFgek;>l%p*gyY;{c{>Q zAfB=1GB!^ezm@Efe3?P)MK+OmNo~^nF&#VTS-uzMRW8$`?1vV^+bdf|K1JCoW$5#7+_RcCDip!Z9W=AKOB9%HWm8$g>8v3ignLHR$Ja|8-R(S2~=%e@)(8KlxCl z%7uDl|CZ9v%nuLLVc($ZoEH<5G_ikV@7&@DP9y$X{{;gxOL=11k?bkdVSQu`uXh*~ zGw|K(ISrp1b4brR!u(V>yNmTHeR%(tj^^UH?2ZW^efh9#kC)jC2Kk3AjtSvcr%&iL zu|eC}1F{ojPsnDF?Vy}1*%GoZN(&9jTFB+Qck+@_)2J9=4yA@SJQG=Z!kR`tXF)i} z%|AHG z9`G8&Yrj?5xsmtFkn`f{r;(ekZ&k(p-!hc%72D4D{a2E2hh1BU4a;4|hq6CwtiFVG z8GxRHtVJ30%zpUQE!mS7gv*K;C-`c9ts_|SdFF(?7-W6sW3y*}-te|8WdDwg8(si? znp11?z3ZL!nrveY(rdDxwNBfClko5PK5RNXkG-HZAwCtKZxw_y*FyX+I<;4>{f^dU zDze3SyK_r=Z4|%Ch8LQdpG|YtKAZJ&@?SVeV_d)(Sx@(T##ZVm49k|2eSd_UGuig; zGl_}f^*fOvPHZ>*tpmO#j_3l}+bbQx z87W?#@h9=J^=I+2^(XMM#$0~^ey)d~LpDFph}`k1{A~S6{M_^jezqc?#?Nu6Q~206!>e4LgoSA8+b$7vpJ$>8A$@bGr{`#(NtI_yaC zu@fGa9O*dzV25Oi_*VRy=3~he@$vqfoLl}J-W9(Ng2B!#F-GRalQMb)o_x}B_FkWo zr;?$gGPPuWI8&ZFXF7sY!5osMGr+ZJIa+2J75k7glB4&h^$s)7<5qD*@#C~VhQqn-oR3m-LRkAyw&)=G1U(YiYPe#9$Q=v4 z{O9U|{!1Ofiq!tm`1TQp_%K5sG%yb4C*c@u0V`SS+(JehMUVos&le5a5N+!HyMV(Fwlpw9v3<}@aU-S+;O8Y%kJ{bQWF ze?*fD=!25<{^9RQeLzj^`TBsrNgw1~VE<(Q+54x+)(55N0PUZ$OE0Vk%1X}af&NL! z{bQx{z=!bNnOo25gVGFrkY1B(M)ko(@uyjjBhXm9B|iIvE?_OB3o_RrQx{aE^uUGW ze;MneHM$62%lY!3+Dv=h>~&1*atmEfocDxP5t&M#7uMxP=dRtS>2m9QU0(FbwM*;r znhWT1>;Fub%m1ad`&0F}GwyO17F%fGZ9*E)U3{t=GSx}CpfS})PHjNEqV>*PKv zj!0ii9-hCJl7SamzqJ0&O6hO4$<*OjqQk#OKH2#)Ph)aUmdr!$T%5#^En^+QVr;kl zDg2n0dD(_hQInDt|B;dvNuDgW<%P3JGA}vTB4h9$plF+z);v?pRT8jR}X~w;b~4PFUC3IByLyNU~snXD0Du zfz5Bi329uJ#*Nv?p)v=!5A4_kzsWw9oao0U)$f~#y{2*FENCS;ad(Q>gcH-)v7To% zz;Ay#ZcNIF{!RGgkrBix4qXT@X3B|{5!1$tk`qqsn?Zgnyg2`cq@L9}q~$~KOG!N| zxgcJXtd`7{jy+eu7KJ6B(QUn=cSDNb()y=ls`YE>R?%K^;(Q$|`5+xion%CELVT9Z z*z{T73oB}!(lSjkmKZkg0DTUF=@n~fc;MrpBhM%_sQH;{q|VMDSIKzU{AuTv)KO4- zp_+@G=z7k;=-R=W9VcfsL9NNX<@n~Q%P9G%ayWJ+F`>k|o1EC3>#57Q6uY<2%#A%q zU4-(c+NsYtNnEGIG`i+pPmB-Usb{ofXR5B`TGQ%%{TJprwI%)7Tj|;o`2~{oC9cu> zlCocz!S}w+bI7fj_CHO#_D1=R((79t#;RW~|2ViK-zaRimc|zp8i&j~HvU^Vv7v46 z{*OPrIj^d99I>QzTmJnIQ;N`q#2Bt3hho|Bkv|L*GkV{;)Zc#T)g9E)9D2rmUB|Pk zlV~oC&o{;q!7~4tt7xpVqC! zRAmo5VLAikmXB=aKlz?LEAV-4Otm?HPh9Qf^L!rqZN-nSSm*P^yEgH^&&&@gFK8n? zNQ}Mp`Q~6|n>DmqGuj53(aHbk;Wa%+d-^0gzZ2W#_3_F@&kt?%KG7z*@&m>s`niFId>fVd#;X1Ji*o3Hs2j~G0nz6j zBPU#T1^EulbqDl`L7xzPgn0fM=u=rhp3Uh*a2kEPp@Hbol%mr;jOht}w}SsC$!WP9 z|5_;326}qcPIOYfQWO0B!E$Hdq)cn+ci21ECbKM$4 z4L*u@;E`El4ezGURK;WPLg=HvIlOCiDEhqV2^@OZv!oI}HXL7jz%lKMAILTo|B62s zF?Nqb^UaB!B7eJ#KE1>{X0x_CnePyND(8EM`Etf{VLp1qBi}6JmmhrCD)pB;^4$i% zIm%q8QlBuD`h+3os&?i0!PQoC-OXGRrq|{P`sg~sTp5?m6UtFm9yv8PnQhk4X3c0D z_<_3W5OtIC=UPJx;4(Z`E%u4ZU;ALT=k4+J~*KlKFdKip0KX5vBO@+_!M@S zkirg=Z0w-1e*!z8D}@{Sh!32_4LWmXLZpOvcTLLQ^viiht8hc^c^K6RUU(JU@TX&j zq_637#LwmvhbzFxl$G)^ebT>F9P4j6ix=wA$u?G4l*9^Jj~S`;Sn}nwHhFytix%Na znx3-3ORe!?t;4J2NeGK-Ewl#dz2jWu+@iI}q`&Z}`0u5ZPf0rRLVhLjYXf7`-_=%l zL2CoOBQ2IM{9N-_qi%Ct@2i&E?ax*&M^5M%<8Gop6PX%x@2-nqHr`kqvgOvw!y$P2 zx%!z=_aVOLj2`Jf<*a?;??>z6ncqe9o1=Bn5WF6;d3|QoHCz|1<#R2c2bTJySK#y2 z^XBlXxpg9MB!8u+kn?MhziT9WrKdvh-$wp-B5Tw}{Gr;Bjp(4~(Lv~?P{{ju+ZtrO z|`QuU=bXBjJQ!T+Z`3DuYOUutwrBKPKdV~j<|8CN}+O20Y7 z`|szDS@^bcY!-o;s6lm7gW7Ht$J>#?F4JtyhUcBtX6xXO$8;bMH}}slu-T2xF8({s zs*m*EF!z4Gp64IQU;Fu~yjRWY#9ZgXBkr}Iud+W+jK}+|&LiX2eqQ+`+wtpY>^}u# zsb*AT*F1!ee+qt6zDUbYlvlMh{u+5WVR8b#OC0)H+Ar|dlvRVHYNu6owOD5F6IE4S z&T4XBg8%Vx^jsf2bMmy&^~Bo8sW(upILEFZon>VA?rdnJe$-F>Xz@Aqql46s-iZFI z6<(soz(b9}R?|iO=rwlz=;QRild(kj9r;AzW6%v=S@JAnJwcw$Gx)LE@vEp7`@^M; zQNMES&8+Zt{O2F@o#Nq<=AvjLv7mlzz!vI8zeQfiTPuu_h*c21ll;&2=JD}*^1@20 z1EI&r#qYQ46lR9}_(qn4S${-6%O3Jnwox;z+!W>ga4x3nooPnbKa(HRZcUEX<1=%b zlLO?zL|LE0ukpKDtJtlxMQcZM&hB6RAUP`~#CYzgWp7z|p&7iAkGv|jK>Dkg-~Ux~ z{}|({x@pwhAlp^@p&EzoshqQD6uV2HX+7`7%QJb^^XKFni@orGpFZ==V)xK!&CUJf zq;U4twXHs1d7IDaZFLXg!y2{>e~IY{?Ldz;kxw&UxcuT4-_VsCe0AXKp>@=0@cN*Y zAIK(`^f)<4hl#J$Q)}R0Ozq9LMVl;VsPw}G?{AM&7arJ+EmsO&C^6lkWt{V+8p)~5 zr^PbD6<~%EGe34}T}#_!>JGMAV`IX!v#qL;-NZJ*COwBZ4`VjDy#Gv`OZt8oETd=e zTd#gwLq5q~=&E|Ne)?L0@4#bHS6jbgwdW72tM!Dokq?y*UP&;9YTje(5sx1md-YoC z^uRs4=*vT2r#O$%NncL-aner_v3Jop*!`4m#=d5s-aie-?4Z92Y+m7*O2=dyOYO97 zjUEMmXzZ7Qr-oFg3T^~LwW{s3sXU9e!czIv6;x6i_bB-bwC|b*eKbGSp_+VG4qYnX z#lHhL3d6mP4^MNqX#mz4CN7vs1BZvW*1ihPeDlP%k%Mg0g1W*chbJZ+wH~{npLymp zE@;%VpSoKo&rQ#B1@pmB>MbRQMQ7nd@SH7&g$qURA?T9PW({rDjJ5$6Qq$6^IjN0g^$_DnmQ@TRt4ny6 z=b}w*PRH25h1SIAPXxcHIWV^2`{;)}qhrir6Fhcg5uc4@Ev{ka2WB%DlR2r5cqdpl zHJ4U{_0jJ}=L2tPKD6&LY~D#?UCl-7W6$Son>DmyKB+d$rJOn0^Px?0KF&zFBUy_p zOzfnN*ol18S<_DNti2YjtrH%)&>W8(NdzUQ`_t=Yw>8{FW|8}R9$nj)2-cGu(tmwv z*x7LZ>Js+svi~9m|6hr#zmR2I)#o-=9sM13ZRCa2nR%gR-j}i`C4Vg5Yws>HvqP$N zn~#2MXJ4s4a0>Og`{7sZ#I@Z$5n&)zR6vM&&S&N5aLz!GsM2rx{~LGd?~Q|Nw3A7!uh7FcbL9B_$T-c z{gsEhS!>zm<4o z!xPiCS9#8&@EnJS9EI#q{v%c2`H;4f->-9~HMOEK;=#yjN2DYxS#R5)UmU2PwVzzv zJ6;g|ML+H1Z1_3frlZrYw@uk+=*Eosv3KS%zhP);IJ~Tx=2mLYO|{NWd{59cRqJfn zYoocf(+`+ol()+B=9A9}7IZiR#bz0}@wItdFZ%NK6-y@%zY>!=^dOLE|8GBXo z=GGIqW7g|FFL}8~S8x^rV?Tx8YnsOx4#Q*Ag@=c_>!RAb%6Z>un&BhNbsOK$K26rd3)R-=Y6PQ)m-Qb-{;$N)-#Wo-mvz?kZA;vx$Zg8 zSMocbc9Q+JY$1mN*^k^vo>3r~Q32+!WWAFz!yB1qRaLx=46HQ9h02kE(go$n!A$u- z;~;rf@Z8h%%e;sE=-H#_%4hMI=zpBt z@|$U|HA>U`QS_bYD>+bttZG-6$_dsO#JAu# zlX?5smACk~wyH4mJIzmRg)y{;h<*9@lINjkxvuyDIV&^l`r)1UM2D(Ndxywb*~D4W zPtmXP0$mx{sn~Rdwx9RBPM#%yC3&=~W_BPCzhW$|1q+od&^bPT6;0!G;oLD5Rn&Y~ z{x5l3+WK$jdBV~6h$HQr+?e1~0{g;}-F8(gt`*Z9G z3w})7-euO=Jc5o<+uLW`-XE|Q$=r^~@nU@Qccy&vrO1aj*&Yp-go;tkEY6nQ;=qA^!z8SMF-vFZlaW-2xcV_R%sqo}R(;itE_KKjPt zc4~}j;ZMl{eQ&qpyFtzdSKD>0%`?``@x0H2MJ=blrOG(--5jH9gTZ;I(7cD|)bbn` zYfTcPH{vq9&vUj=OO<)1WwOx~_846=>A#nDEme*)8!j`t?xp>XJi~jybi1FJYIG^r zbI%p}P4e#>_-+|zhs4aaH$|>s-BNu-94_}FFxkDdmmi@Ny3V&IhXdfN9DK(otk2m# zgevUiWc-1=H1bne+fVf&G~iz@Lr>J56ML}mA^0Lq##tZ2SMVLkhj7n%G0J-4lMDW= zxI@y1&`x~cga07^Q~d|yVx{BH`VZv$o{z4Q51~CHu3wY#Aw)Cc`tQP1iun{F@2|s; zaA(SoP!CP_MS;;GW*&Mj%4l5Hvg@dy_)q-!d=9nDRn{4;YxpmWu1#}{F7XhyliSt(U0)wLKl5|p zOV;{Mcq|ML_GMA?P+Z;l`g@Oj=h3_|3uBB;*tQB=*~9;5`0muDRU>bY+xz+9$6j0r zMjJkT&0F`rd(E5oUh#7D-tw2Dmp|!ya$)(>?<~A%^3w~KO?hGA6%#5}l;=1XzVg`c z!e{w!PWhXAk5B&b!nYrLX`$)b`jzgF62U$*KW6?1_}Vizd@tkJL;j}=Jjj0Nx}4A0 z;b)xHjx*wYXSH?4?KQe^QhKRZ@aA<|WdYi_JI0pH;2AsEr^He&T8KS3ID@#uM5Fam z{$6il2eWTg!x-VSZ18Qw6I6FmYEE`jzaI!A7r-ap2slIe+#g#x)Ggf_KY(wg9T^#d zH=nh>8lQ%5Q8x2C))c?mYwt#QRsHAemeto9>(1^tIP3lDrCzrYddr%vsw>gsP+ z+-qrk3O)e>r-h==FX8DH&$zIQec`MYo_2-8)U0LFO!W9QV;0>+Gtope6YWN62CYsa zr&pgxE9H6W+>N{Ot%z0|p%w9yB^#mD$;P{()n(CzW}Zze@>e-OU3E?_&QDL$O6w$_ z$^m}2^AhVc99{D)tNCd?N-f=}e;kWD-2(PUm7I=1xQ=t-M4c{XiSs{ttN>VxZVIkLZ=4W+)aiMno(5N@{5rG90$AB*gl}uAdnWVb9Dn z+_tT<_6G80jY**zUgaxs^Sak^*uIidoj)|ySaodFSCSVxica2dI`EZD3AG42;w#a) zEAo|0#aA*0nWwXN#`5Z>U1pypeB6E2V?K*KTc`Ii_sa6kzBeo{{u0CXm(;PYX@5!V z%FRA-*s2iz61{4?uVUk9eNW;ukzPLt&YEvzhvudHCUu50v>)6i+iO1gdepRqo!VFC z_>jr>JFv}5O-Ddjt_b_{LH@4VqbB^^UthPS?VriZ-)eD(&|etAIoR6Rnj_d9J##$9 zPdzFBiRYrdzx6y)b6CIQ8D9N%JLlnCho3=peg}zrc)^gdf2bN+*|2hTIsTIphc{&6 zGx3;=#W6m#4f`hTKN+at3?*zX`D)ac$9Jy(q?qSw&YJIh@{2R=(Q5d82KAaQ?9n=6 zz}=@3!7Am`v!2U&uer(|Jx+W~G;u*IY81jwXd`=cEOnjj@Tut2jn6~2D7i+VK`{4x z?9d3j>cAGQLynbQEnk%jd&L!TLzh+55VYnceHqKKMe#4%Hev}FcsjVlfnA~;eA-qt zku$#z`$hJXa^_jDl>Ow4{53qiibl7Hybg*s_|Da@gr{7>(j$2WhHOf;rLF?sPSRJk16>X8$Bs=mf-|xG<=c@R(HE+c)R#S?M~Lw;oT)2l3Yb#)eVf>UU*MAnb9tdc_Ma>}}=ma~?}@2fWjSz1_|G ze&~JH-gX7rFHhRr$LL>UXmX6P?d>FOoIS17`-?X7Y+gy)+x8kl7uEdh{hg+x*K#<* zNuD{^=03|a#Mi)H$FR4Aw}icZdit9kqLFw>K8xf!C4F#Or?0b4UiR1+`1Ucw+cPG0 z#+lkaYp+w%XBD%3aPHW2&Mc&Tm*~Q8x>Ps6ZBlZb#2eUMg+FH=r|^@-$hT~wW?8TYN6V$NKUcQhJzL3RdRQvC?eIYl3#fF=zM%oRJ z&ENaPdsU^qP2`g-v-$9LTh=z2_~ZF3f5{mQcH18^ zCc@ba!@bzNJCOe&{2@)IW&1;RaIVa9=KT!chw+CrffwWtIR+kTHXPv)^iX^)8$bLG z#=Z)FNT}h?x$r!Gj-(Gr&s=Ug!ZBpC=Bzn{Oe>%@SqQx)Pj=AWmNU#7Ib-{WZQAfz z{2{+c34T8DM~wZ0?5em+ei8WFb5XcW&-FNbflOJm51;2_$iMCMFTcnjXNSrkqIHkK zlj;80FKgHo=W>D?PnqLoAJ4Pm+wb?F!*)7_U~N$j+$)F8#~C~HJ>!EX0G|8=thlSdXO9j z{4wA6)tTOyo6k3z?vy{qYx`rIE07KYYjG`S@d8AKh`d@ebpv7=D?ibuF>u-;$qcoSS^JRU3J)nCRvBHuCUQ z$oJ>;j^n(7sxIPoi&s`~chtkrZ@Cvc=m@rj6C0CzAl?1lVP7AAlYjHXU*Tuw_g;SQ zd1Ut%&&S_5yb_sf;KvxI7RWM&m`!?f0Bp)1iydRN^HbCu$xX=9{YLedE`Cx{FVcZ^N#oh@HvV{z+TEN-|%<<~yu%P-$#WAQu6*QT(z zBN@9ij0`Nk)>ndUU}JG!HQt647H1FIJ~Ux*{5T<<+iAxzGq89)`|25VV~dS7^Fr&0 zwI#8*75Eky^9`^vIRrKquLMtr*8QOEL2zf2H6|7Vhb^$NN7YCxIHug;?r8;&r}ffZ z57!*VZ)sz1H+9}#_V1g`)ES5 z!#z+b-KF^D7ri^YHgJ@b{(+{5_4&ci8xQd}yDIzbzYo*YN&A_}c;go}Z$L z33fXlf7e1AOLPE#4{%QM8({At{>Q*FtISC~hrG!=Gu7}Ws0*#Z_pW%zozTlN^Lurc z4sF51pAB_GbI!JGeGELjJcYl9h|8>ncKwIR+axaD4_%s&p9_c|t3I=|zA^5kAF%n0 zwP2-E@LxI>v;(XT?zY!VINZUy3x^-0PlNBFH~mf@#o_bL!QqA-6B1ozql&fx_{R^g z&gE5cRXtz$q@Ea&jU5=)j)Y=z$NCM- zN%;L3>t1J^#rk*QbAb2kGZ#fCZ?^HGY!0=RO{TV5cVYcHt$B&P|GO5m-kP_Km-ucT z>ns^T611JC@CI1F61?vCEZ7OmFM6L(Yp|G&|3&k(4Z!(50j;0xM2%+{8z5yL+BSfm zsqx4Ls7%=al9S-KQ5!(Ep?FU=Kt`K2v>CMlgza?hmt=_AByE7A2z^(0Z5zNFs=x;5 zhd(t>jmyj2BInYe#B zxW7IF_w&5g+icwLh&&HoChrB_DUN&=+`rWrYvcY9xPJ|}pZG3#I9dC>Rk)wCE<h)WB%hA=^UuNi zX{;~Is`Zl3#<}jh;8vfFTNkBpYl6>;BRaWrTfWuvaqEmv!L4eW#;wP}t*RH-vj)rC zz^!wVxOMhf+{$@YHg3fqbWR-60=LdUW@SF_Rh}i;n3jt(iQh`zIvD2;>fn*JYwY!u zjD?4v<-g=8=WWM8t|ezZg5FTO7<WRCjN z#50KfgfGuCx=z+nKRVAibI>H_n1S7Ef0zhPgr+|PrypSrhQQ%X*aJh|n|<~8Ko{ei zUx>|6b#Q9<7_Zx{o8ph5gXU2Cl8e09ZGAO<*Cey->vN2v(UkdY~xzv%|fHb5t=#J=-9^0aLik;myi z&2zMlify$Vyf~cGQC0S1!xd;bcxl-EY*krKhf(%67<`cZ`wnBToYkYShY^B9zKu3YKbiH! z?aWd2#M1x5ILBqLQ$MFYtyn%Wy|8?L;t^p3`2fjli7I}Vjd(E@n(Q?Sa!Y3IVJG!^Sr*vnZxR*hP|MgwgPKnxL@__ z@R|6II~yZ93q-N?8OQ?h-n*%Mk@tzgCF=++yN+-?xgtM=cQxPk>EnAl97W;xsC#gl zg<(B=Dtre2>U^ULi*fgpFHz6?``O33XZCm407tPkRdcUg`gDC@AMx#WWX3;`$8F#B zbPaiSj3e`|r}w_ic^cgHq<)h1ctxZ2cmv!a)5pG*A5FQ}zoef5YLTJU=)F(>#CPgP zaTT4<(at?ms-JLjK1V}7=dsxP)JoOLWyjjl$(%RPD}CnwU#p2lmqs{8v=<+BxNHIW zQq>i)tIB`i)7;6SZzUEz?8c{{T$~#CD!r${-4)F#y1q1;hm)*<8G*k0$?H)K%tUC* z8NoJfRr4}1ePVCF!-Bp=5!JTjGY-*AX9Dz(H|F+2U(rJRp&X$BtL&Wl-e)A&xrTLq zNwOhz=8Nu&)>>QVt+m!U&Nx~a&nMS;0{k`UoORZE45Zdt@=cX!hBnLQHp0etXtyT+vYAb3-Qqe;|&hZz(r4H)=s|jgEPUevR1-B@KK?jr!~Em@AUqI zHxd)y!-pc7t~$5zSH?LyjpP$0h{ZpO ztvNt#Qj@_M-Mm*0(*WZ-|J<8;>2Ktw)?1*#idT4@g2AXV#COaJY_!l_aZ{2$6LY;4lE-rGc641**j>&+T9p-+6 z*bj+0$i5%I#y+1es?B;zx+g^+@khOJ?)g5F2g_4*c`}18s)4Id(dOSd3*}f!uZT7s zj)~A_Qdn}prp-d<7RiD%ZNwka9T%ccy3R^^L$vt5r8;UOQp!GZ5~F%&-lyl7i5LD@ zomw?<@`uqY_H)2wF7{V0Icu5cE2-X1wEJVv=_Y2po99S3dj>pLdM`-->?H4bu)J zf={7?GUbSLR9Z(QAJu#0$d-|h za=vWb(VYm!$#K4xz9k=}^U^v;xv2ZtXTlce%f_TUID3}NelUg36_XrH%RpfX$vMrf z1^kkfbCdpTIcM)@unz#1*I%J#H`zP3unS1wwd+xv4yW6m{6g!k&{%`Ll zwXzQdxtnw{_qMih$0+Cj_;o+&2i6$uCNrWtN?TS`bv*fvnzC%OxVO}nqRui_{S^D^Zsel& z=hM9E?$m7VPTk6V2W9Z5eP^n0#`v@2SeG{@d2gzf{omf3S~AX9RYtyWcuQ4XcHlhk zPsNj*C2r%%Oq-#Pbp!8w>fNlRhm!Zg>R#4b=%l+@ABRo>^vfy6qxu@rsfoDczAo-# zg*NH$D^2bnZ7zsge6RahU!v}{l>1n9X1nfO{SRsZb!PjU*vmRcV?Qwt{WeDKVIq7{ zNB_0sI;degbPu_-3GyP9C)<+5{@m~R^i9uM7sX$qCbQl0k~2r`EVZC5@GF=vvVLYw zS=g=o$cfa4P9jEB-THH@n4H+j@ykq)yMMbeGM}^LS6JD-Pf!!pPQGQS>FV`UKia?5 z7^#O3BF(;N#PkGomU%rnG33-n+iT`@w9Fva6<^C`R&nnPGsiv4(z!Z$ew|y-*{31J zWA8Qc+*Q<2oV0Su9klE^*nZ3DKiN=E9c(E%muJtUKgF5!{oJ+1U26dwFLQ^Y=ZbIn zkJ&v_9Hy=d|7sYA4@SxtS&Atk5Z5_fUV< zZWTsLuT4!W^j2z=?!;#hd&*(DUQL7xpbpGK>&0mdc zoyZL$&um;M!kszexJz;y&-O6pIbWO;_B8(O>T(D3X6}0Co~o)~{rb^$Z7;z~eU5@yHnz!TVo=NYKgaO& zZ2mCuBIi7F*U7Eibuz)OdE8~)7WFu?-0NubGI5W2+?hHZ+4l-D7`63K^QgA+Z|#C7 z`>1n!8F|QaySkBQnpcU#3{~@;?mOXJS+3nN3aiOkn&#pEnVQ4&?cR&5SKD3iu%2;@ z{mwJi@QgM3y=>=K@ZUZK?$n(R^4*@YvLcMD!a@Ft?&N*Nv$;()JZKaIp67XQfwMHW zae68bcQSGhgI3pduS?d${A+*2Xsm0o3l~ztn_mIhNB|d9sZ>S!o zV}NH(HVQYgr{Bactk}GGq?|giXUTbf=f}p#FHMh2Ji~b~)IyJsKi51y`b(bsfH6Ms z7x?*KMW=I5Wpt0j6RIZR7vN#7M5Aj$;b+YO*H8e)Z^HtgY5qe6W&Oq<=uU0)=sw^sG4=uH6tfRbf!)Q!^T>JCKA?SSACM_uGx+ z`AxF#F53maZL=1Ww>6pl>WR&nv$+j=2SkHAp@sI}qp7?@?LpB&zfJesWF_~Ga{HGd z2h)2;d55BdY6ddetf9^5{(6v@qxP8i=4E?-6-VfIbbmcqps^I%Ifv)0;m0+HJ&p

    yGlSM9!}{BmDluZzZ098=tV*0_-PKyCkZ-?x3c$e}-V{haU=`Ch=wqIZVw+r!;-cD*d?iciLq%!M|y z?0a($8cy!b9jmq#l}7U3T*(OCn@dh~s!le`zBiY%#iCAfF|-%f&wwA03#Flz=-9D6 z^EqpZ^=mC<%sP7qA82qJ>(3tK^Mshr6glYd^s06#3)ztDFL`IK`qQ1cnf(!Kh=`tw z1J9=)y?5}wl=m-kCej{gw(nK){m^BcJ>|cfy5?G9OUlnszls@`66Zy?l4oBKP`tby z`K4!x_EqF(oJ5Y!Pt|7crzX~8j_(yso#Yj({hi?CYJ8BDMwWeV?put#Bvr?ID&HCS z(X4~MS01|Kh4+y^C7flAe=WEYzDCFN97L}upH?&%Pm3O^Z56-H0}sPvz4t>acow=R z?@4LO3C<)Q6gkMA_$spdU+{_O z?x*+hQ@=-^#TK5ce)q8tx~bv)FaEAJ(yMme;yJI1)H z`F8I5&9dXy=KFPXU#5Py&M@tq)nDUB)gHLs8sDouBl=m`eB1DY-&k`=Z;7KgwoN($ zo-W~U^LYQBl@)l2ez=d>PfW*-W1q?&AJ_#wCs2>_!B+4a=@r zyK|8vcHZhr(-&6m@dJEceOhKXW1HROqxmOd%7N6Y;fAw3J_+?kB*5QZHU*Eq+3{1aU#NYKS`x#fPYb)ta-l==) z$MDd+OYA#!cl{*sVxy78ow`o{{?Qz-zg_)na@h9mPT0@;JkQbiH)r4tbm}MY#_y4d zeMaFZ-spz+GVzA6#;E@IpTzjsPb;AjYc$-$et9X?kK}G9u0batcOB>9nzY=_iaZKm z6@qK(jKXtpO*_v&1>Zi+bJO@n=kiqYee(09*mi1~>+E&~$TaTaH7CUOaUQ&z-$=%l zAjgh#R)KPC+qwTlIOtt#9JO06|KNuP_XBXI={F2wAh$)2Z@;M{ZFlIr!hYJFvb<^wT}|2g zak4i&ap%dpsOq|=IEs369ofCT*ctB_+<}Sxv3^EX*9P)*o6MY0tk~@OEj3-Lx5ZWp zJx|S^WPPGS(xIZ;Y zo}POiHo@PUjzAA~Mo-ANdItG|s$(45PM#7rVJ&B3%(n8wpLMtbZ*r!i?f{j4VUT>b zotzy}OUy%k>+B2l-}Z8w@AbW#d<(mu@a<%*I~hkKv>5!7?t{CJdNWrbWV-A=`>;c% z*BimydgCh9v~t(o;#Ed|*e@(=I&C||<;d@S0U4n?9WI4tx)^OmUnUQ3HsgI8yz@fyP27Vq-afl=laaiyW*NWXxjnTR_tlWE zHhN#p2Jj*0+1WM)eRRa z%v|#4E$;p_Mo8E=bmBU*OZ#SUi-8|K*XFNp!RrZZz6FZ!Shq&0X$!Sa(fixL?=I{t zU+S(iXQ&(O7lEgBx9A(}x3`o>X*dF{;K19>DPiH=gV!~%FeCEw$SU(kPo%!z(wqB-DPrP!;011$s2b~Fs?-}7nXyyl6xv??+;#A z-L=RpaBKeQeFekW_duy_a$hCweOGE^Y`vszGcy z&i%4w2kpC7U{9pwf@~_yanQD@M%%2R&8X~eRsax zu<2uZ-5=xQm_jY3ztP=j;u*!ZGQYR);@tv|9w*DpnIfuF2uXF z#l|&u{uuW|kEd34kBd8`eMaz0fZj0~ateD;KR0P@JXFqCR z-V7f^QaY-dJwHgSZI9ZqrZ-|A<|7XhrZ@H~Hv4H}bIS9pMMu?gcJ2mj|9R*m@k^b- znQP3k4tt$*#5t45!M$Fby@!sd<6f_IV0&u6?0db)iMH)S)jM7eEd~SC_(zSa-b6O( zp3xF&BxDo$;Z619B3EDgPI>N?j-*Y*9mn?F(XTtk+WlP2Txf6i)eY9t8Bw~YI^CD* zqu*rgvW0F2OK;%yYF=Bk7AalzEO$po$nVwPl{X%de21<&yXldPc6W0B)gr^&D>@C5 zV@@5ZeRp)k;js6v>W+m^6Qg%^IRc(pJw6Zh?xMfw$o*g$bM*8yl6$H-ik6vkbYO?P z?kMQJa&&%kLh1Q=&Y52U=h%89;#cv#{5K!M$AitbuOoCnXOpgYVY6=~`Eg5-%Y6=C zidXNKZL|2n)LnaZX7T9V(Wl^5@vQ8{T3$DB-=3a-3Z9ir(>gVvZ?sOE;0f`rcv|{m zC$dTUBCRW?^82%LHtA22oV_I_XORb-iR9|h*?6LX+RC5Q#Clusl`Vt7FZ1vf(w~iA z(sH&NKVe$V{+xc&{U&8>(kC+rHncGwI!pU(CwnU^z0W>nkGb9)ckMiEJK@>8xXbM; z*fuv4*Guz@?m?4`ZUpnpqmJ=6eJA z@ak!>{(B*v8>BP6#z$V{+!Wc<;J4IW(D}AK?Kj7VIeVw|YQB%ycR?rbLX$jx0iJDy z7IoMffsPE~P4V|NH=&wVbXctuP#rX#q$KDMdp^mN_Pg{Mivgy0e z%N|ds%IoW)w5XgHa1nC*13az%2>Msr+;E)vH5_50??tDtd;41D0nouVPB}Ys9{W}i zPsU63IQTD`zJhr_8BhQ4z?>G2n_t5iTiV~t7>}KT{d>|3$Npls+-rAhq97cJcYXoq zgK>&D7)U-cg_Uhin=)l}137{7!udMEC= zdjI82Tw`QhIS>23CVX4_MU4ODF1T{cbtTXSY7dOD?yZJT)w;J@)**G`ZVb7%`cQZ< z=AtsJyWqYPN{?2z13;4iDk6gg`f0r4F#8CE=X1~~vaW?R|HT8Mt;hWfrF@F?xY$?Joz#nis zY@Z`WpY}}{`(MJ?KY59ZX?G2F=KFh73`-+Vb6_J zWB;8Pvqzx^zK8Mqd5q^TJiMf(9OK_6_yiipPl?IcU*-+#%%T`JXzYpIgFOy-$NKiz z*_VwgJK-OA5bLyG!?aNUq)=dV$2(ftj5d%QIU6? z^BnsYd;!vDJcTn~ZC^lTS21{z__Jcz0^4WApbv0v8P-%pEZSsVa{oeSZ z$6^hByd7ijIYZG79u@W=0kZ!ZJ#Qj9+FZuF}cVFO8j znm~Uld-ImT))%|U>QCX5pfBK?@C8U3yDyC#zFYYMoW9h)yEcLKmUTFz;tX^U;#+-b zU6L zEMLIPt_bF3W&hlV`{LUcDO+BA0T^#L{~CLyu7vxvM{2&&@~g$)fK3sZ(jUG6^h0kK zhX=;%)L0Meb1h$heeUsq*nO~b?!_I(_rT6M8R}#C0osk5aqjOo$Nn0+`AO7641NIQ zYxx15f$sVcIK&^2fKC2-Ry4ZW3NxVx2PUdv`@Mnpboc|LPm_HwXot-r%i}mA zp-k`xlw+K~7rwrZeFg1bN83+e4TAUsMCN5pL5KJaaQ2n71PFVhcY)ig=hBk4{ z$ci1poXO6054B+bMXUhltqRTm0=XQAamur3@96Wadv-4yS<$s<@88DVP%<|AImZ8g z5BWO@`Kz63RDKn*cMpC~;tXVrbKdwm<`ASk$eF`uAcNRXXpR5np0)3zu6Lpj__^69 zy5Hy(e-`yQ-HBSpr&xR3kouZC}qqwlxI z|DWRS+@G$S*)>*;|J%_{rH#rtQOiKbPK^DF2O3{mgYPnadEIJ5_SipxvB(P8q*C^n zv?ZL?bGNcdB`)?k!X~xH{&EJ6w2|8}&W|denyoJ|_Q&34u}Njm<-Z{xX$SI+dutzq zFOvM*kMWt%8#{12^gu6b?EfLgymFq%P&xY=Z324Z%8&6AU2xH*3uN4nb4ZJ1t?^Gm zPS$#H)IJ^&f_$Dk91uQ81GmW3lxt85te3qH{k9QQ+4piXU@J7JCcZ9Reb*0`TK zfa88SQ%uf_5?z8g*0^8CagF;EVSC(9J@M@U&=WYn#j7WBBDaS^5#fo*MmyF={TQ-= zJ2fnQ@gBzhKY=dC*#M)<(f>hbTVsFhC$`4^k(wu=GoG|`#*d*hP!G@<1GLV7kI@>} z$XG`9PTdUt2`uCLgf+hJ75l#-d&mFonY^E4eE&_fn^KI|WNaU)T`~3*jIn>Uc*R(( znZTaT{?>R&%J3fWhVc|V@;LMe?C+MS(JLzbht$2*cUWWk!SE%|ZTZy!dwictKBE}l z!`@qFVtoHG=6yN7{}=d`=ZDj*@qGgA7kY46HRMOy_*XHP{44mJqo`leJKsQE??k;x zexwEjz8Ty$Sp#z#R;Jw)5aXjzE6LT)Q|9J)b!gm^`HMWmo zys{H|T6ijFVPP$rj`vtrH2$EG)h>LBt}OeTrD|-yGn9q)lar9K{bkTJKg~XuInh5W zIvx9HM`LXN9@^{~{Dxv))G1@m;b$?n7v140Blxfra`Cv?tKBK%XkA7*bJ|@-k<&*& zubh#az}S9%I43p-ecr6spUaz$J`cDcs{<@q?GIUnA7uLfsIg@gdtdd~{xWo=jO{Oj z-YIx~9bgf>1_M!*xz)$4&6`YO!3UtqpG55_rK5QGaVu zCefi!Vh^>X{d@d=jsD|4=uj!Y#Krg?`>-7yvlsKNGOkDbJ+I>@d0jIxj>NcL&L$9g zWL*ENr2a?l_Bmte>6|F`8@FJNAP4tv#ESRF^FD%&wiA8qPPDQ1198AZT2i&K2*&qE z&77#%t1`Yn^7Ctzb1=TA&0@<;?(@4YyNeN>tnT#i*AI!&_3Tua6%5^qIblWUS{S*gw81Fs{_xMtyzz; zLjQ!k?}xsUalQBvWn3Q(_s85?R^$Tg_zQ-8&-sOtc-|1mK_Wcb8rQ#PL@ax9FYY|EWKzzeqD>5a? zU)PE`c#Nm-0gq5e*Ny9?Pn9+yeJXIQK$}=0?cq_p%RX|+XD`*a2A8P|UZy({uLe9yJYfEd4#j;uUU6<)ERxPvkq%;FP@CI&!gVo$9Ovf{WbP^Sz~R>cZ9Ka2FBWLI5$Yv zM5N>1^-kO=_*?8xuQt--A;?4r-aDeUZ{VN9&fV*sk6^D`(%Iad56RvPp3j|;Xj>bq z{1kB-u^$5Z^Sb?Fld-118n(3TiFjS_7sEam>~WGYpzH<0c)m!+y0T|X#`pWx{y^c6 z++!vCB!q9mk4xdfh+B3=)>caYFTN3xE1c(neG~)Y1=vd#MpJRYa?8Du;ZKT5gPg6^?QUG zP29y9y0Lp(Wgk!{d^92}1K^L5y=fWPt08xmS@*D`PQ3SI^-Xkq!@j?D9rWG%sG~_( zYnHsPW3q`oE2@6JnY2$!>ZT2KBlRM6l81f3KfzjxN0QFGZVJmiG*}yidSd-Zy^8*q$Q$ryda*HLlG5 z{k2;}_8)}2Pr_b6!QTm4mb=(%S_|TrezH05JAbz^Z#eE@7ulBYBHKNY>+~i6A=eFN zMBfqn!Jk5|adrsh8teW7$@HZ8woG4wkFi?Gbpm*_Z2tw;V_xZVS!7%GGKubaQr#I# zy(4RmME8hni(JcI&40mu#0N3nGORtkI4fAmw&)%4eTn>1wnffGw%e>dincr_?{f+w z)29|in%)N;|M1DRTQ0ySdl51}CYY_%l)n8GdzfUOoRnS4{0aQ0$$OtAUunZlw-3a5xp~dvU%rI+9nkSY z7t4CH(y?;i;C*OQozO|>ccRh`1xF6{|418q2Ytt%tMehGulTGooKj`LIhcAMos?mM zs|-TB(9L@LG~B0I&IIYM9CD6`=%nAGJW>v+KPeN-B6rVAf02$owo6eK*>~3=dItOQ z+R;~JnpyhZ#J5Aau6q;F*Q2kHJ;BmGlKY86(0zqiyK?fndlR#;kM`!~lSysq2>J%; zBmNQlNx6@-4gJF*^bZ#>@7dixQmK#mz_T5Fkh3p0$GVq29riNYQsJGc`-Z~XCdUhJ zwfB*=O$=4;3eV`0eSc?BmJZc7q?g<6N9y4$d;`*c2Bf%$>g~-xCw3|I> zH_m;ExmJI``xNCK8{v5)+KIFm(fy;*2S~oM$4L4B=?i2X<~o##?WPbiCVjcA!{}7~ zfYcB7f(tBtd%AI3Jc9Ai2jTqYn~mIV`gS8w-!A*6ukYK9Zu|DkGN<08zNBx@FnZdz z-)z;}z3`Jry)~jw7ycaTrtS_U)m{1nwho*C{l|K1oa)ru%c}jnuKM)tXe(|VAbq>^ z>!Jg%@7HmrA@)xv_v_MjsQYMtO~T!ntke5Yr|$mz5b95KMVjb}q&j>Ddi6;o*P|mu zp4zN44A3r>o~yYpRM`r9um*Zg%EZ04heD2QeoN^&kxQBXnS}FWXtyNa`y%CO3k{CT zeJ{!O3hfk`U$gZ>o~0MWj;w)RXhUAX`#*7u_IowjZ)?-^DKXg&WNc@PW#H`AHa)|0DP#x`8tGDs%+zV&4G$Aad57 ze&|j&bYNX~Cu|^*FX?B4=!XqON%{eD))vCO?7$=T<0RF`Nx$$h zy2H{hsKY~`Tf*d<*ppJ9f&=2 zdaRAD$DOOPhIlRN=`PTlW%h0V06Og=^xHJxdAl~&a{A8V_~=#r29I8qQ!)CJRmV>) zUe=OWJi4XIG@>!osoY~_lsua!@{wOtV$C1EguBeQylgaqw&*0#CuNnr{aeDu71>KH zdx19;hYL4g4smPLSkZY2`Lo zg=b;inthkN+#%m$=EgVf`*J+{9^>sh&A#zZ!q|fb{>UAyLqq)%A7D)1xNcS#?(DdN zIpaP1zlw8Yfu|8Z!CS&Nx68iUyIgy2+c1uF_T2V&&aHv0%i3h)4`yX2&ZR&(^?5bN zL-zSCXA|6W+aLENZcrZ7IM!lI&3yA8Qllml}88(^P}`l^wtQO4E-nez{5J ztZ;@^m(-Q)S8RkoR`zT(-nk(@5c04$l$O|V>mMo`F;B8HG&uULP$ZJ^^ljFi^+mYv zw-a~4d|Fe~@<=!%8mr5$sKfs1e6!+PvNlE5qMpS3+7#(~#v7HBO^g9?2W2Pxi-njg zDa0Jp7|by>V6DbR=%f?KzX`U@6zCwiGrrWk*;@Y$KUK6GY45^s7yQ;E;b#;*CGl`K zdyd4D^+P)`uUrbbJ@X~_mP~0Iwmy+I@hHLy(KcnxR}1>=jmTf*SZFv8-$)_!+8E5o z3oYmqDx2U_FMPWH;6mI#T!c0Dow$4EQ>?Lfm-7I8?y^3p&>Rqzvf^x_xST^<1X|Hn z4sQrK_ig4%S#L6y4F_*zf5H^_ax-!7`$mhOe|7wW<+UwQvtM*6?tMQAK5hpeU%Gwb zr)S~&7g{$<{eVAG_7A|Hp^86!!JlH}mx*5-b3Mi24`jlM2Oi}}JmF6>_%qb(o7j)N zf}n5Dd9*2<9k>TN87?!Ny$Ie2kG=!`)F}SQUMYzu=N#lh#|Ztme+s`=_}1v5KgfBG z8L^rRIBWeDITHZqRN-8KGw@e^1by~0<^^#^0sQv2T5GHSFSJe3t0L1P&p(;4vPooH zWL9MRN0{Fb8Q!r@&axkb{r0)dQtsTVRmVlQO5PEitMz-doj3Oni!{Tx3?F#>T@=26aLgg*Y5b`w=Mo8^G19R=UFDyNj?0h z!b{mdCVUirHJG`vCgA=U>(YOZeF`6858V693$YIucV(h4Yy{65v5p06ajd?g1Nx#9 zbtmg+uHq@YZeCn7HhxWf!hJ2DFxJ-RjD;?ddwMs5Z`hX+=|mlUjD2KsU+_Atb&$CR zN!tY+;?wAYZ&L7W7*N(V8L~blf;+w7<2Et>n+};z|Mw@3r&~G%cij&!!#Pn-*!wjI z8&KAgjy9NX-2qQ4IQ+i7Z1)D7o{$KAMcCWg}1+dj_l$lPG~`g$v0pV!ZqljwNezRym^12u;2<4ad({7L=LM$1)a{7Jn?oorBJ zxSzr<<6U;LS6%8Ong4PgobaD_+mZi`Gt%KhvFm`oJ)v9rIQMu!&SR7DwzRQY&?s?G zZxN{{@V@!`;XzpIFsG$CG`PJc)HjlmVN6GVW8Hr(b9VD@#rjFKyXL=}-xV2X;O@fP za6jS`$EQHXao}W2^FJXRHrjiT5$tRAem^t6D>+T4q&YLcWeVEB6srvswKV|zhfbFyYb;)o7Ppq);E z4q77f3+O8gbK={iPaK1OMf$@god0?mxTPOx25!ki`jIn8i+*GU`j8d#!3WWUa!#M* zA$KBKeGS6oEZIWfj{?8&D?R7C+j0dr^!a|^{!8E%{lh+A=1uw`O!`Rnb7$MGRZg>L zNXOU)`%(VMK6BQ%#dv!s>Jw|J-cHBd&0RPbwJ**t>4$SsZ%4cA_=3??1Dh)y_EKTk zw9bF*!kuq&2Ip;92h;Ho*7j^M-VWoekOH*BGibNxU@y;xz5EHr%`)duFu}xqgOTPI z+%u9U0^S>U;FNLH?@ok-P|r~1nUs~D#pyau})9c2QGn6>wB>8FTuWl_36;ySFyhD zRcmkHU&6k>s|E9$mVGbtphriq&%0(u5?PDKTK4@&Ue^kSV0dDaG2t-B|P3iM51SgV-YL3uEB_F03bfcDS)8 zfwh`)-yYW5^_4SPny{9t7UQ8p%;znG9RXXm1@)Z!FyL5dAo`-AMKM{cXWbLGeEFN9 zNVF8|CQePpe#5X)g!Oi@YQXuh^NaEP1LUu1-Q1Q8th+cl9CC>MLDmQU3^sQ|C@1!V zp=c|>TM9l;0&LkHcuGE-vW)2=)UDi=A@|0OGzUiNk@xvO9~rN&UA|n}+PX1o^X?hF zC9g1NZ6rQAo_7ZOyh_b1>yC=On0K6vw1szU%sYQiJg*Kk)#JW6dA=FSj2^;zkjvrR zBDtHQDU@#Mm!@^I(SK*eI$(P>!FSjc%82fStyv2jq!fMhFe`ixj{X`LeF}ESC^H;y zT8F*a@WmFc*|hB|*1Z(j)_n|d*zzI#qDJI!B+Ymu27AI)#h_qUr)LO!Zt z+rBBf5PpGT==)J-B;JnuDUM=)R~^c-2Iok??zGmP3l~H`aTdPB6?<$X#y;S6;w8*K)UhB_&tX6JznZ-yeV;{Op-=yOo@LMHq?2H?FAOyItt~HGRZxSqFbdr z!r$|tBPq@b#DR^e;wb&Q3w1AXM8AvwPxSA8OaF#qG1!>3W_DES-~rG*3N$3(ix!$r zB8}*iUEqh@QBV&#nr~z#%1i3E?Kd-{QYQzbEJo(x;joh>4d|C~n5_HAk@PHwz)}vR z*|Q%%sTU~+?zMSN$|B`Rin9W7R_Hh=M+`qHhs2R`NS_o#Io6^ab-;Brr+(WZGb0*7 z878BCE!l!iTxe!Rq-jOIfyf9vf zHe8CfI39b+@A=nj_vXnxg}C2+AMTWD!djbB6S@R&1Z_>$W}U_P5?F_VGo;dEOTw9P ztjj{%jKse+x_(;}YcVYw`d_Y9zKODwA`b5P=$eW(nX%E|-}V^V<$SEqnmpWIpN0M9 z%}cPJWzNfGbHr*MFA0NY<;)fVpA@2PR<~_0T2&-0mudsH? zTAy_m^*$0jzvWC3GJ z+>g?$S=v9+AV2$lltTCip6QKn*R zP1aGADF#0vd5HbF&0X^+;x3OYeV2#WTcT&K)Rm#{pJ$!@E4o7bCsCzms<9Rg>+PdY z!S+bNZjyC2GqIKsds~}jU6GtEEcCtv-!ay7SnGKum|J^pi}OQs}6q#k>pA$t*NPjzT>u{CS*u-+sw z67QQrnbv)0C(S=P9`q!8^p5iTr>Af2?$ftd4?J)WIdW0YZLM8qZ#T_SO% z4;FdEIJxL!teFv9hem&ATj{>h*1ZwC!qdCz#}~KPm0i@u(E;u~g0 z>;T$cGQKmwCG|8C%s{)@>2%ER6MHgBxkk(e>M6XfM)F z$=WOFkI&+~i?`8UUIK4XKbPNE=Wd*Ve98KCY2VT}p2Zrs`w>sx*%uvXzgAg`Fp*=C zlkoq0t?~|}p*&GOZpT@&I}m;f)-p3%Pa$Zlet${uO{a#M& zo2~yfZ`r=*@^%AXF?idK{T4Ck;9-Wn*Fx~rVXuXp|9dLk7=u2!$iVvCsF4+4ApME~ z`v+}h2l}i{$Y&G6Pnx-j^=mh6leL}C$bJj#Z`z1@YKLCvEj9^kpPe`dPIQB9fAq5a zK{%VMEK8L@6wbP;-B`(gQ0?oZF`{Nl|8xHsk>ZJFdhPn|m8gd8_pf*_#dxY6c1qz?j4ff8mQKdl4K{8*#zbo%=LW_^BXGZ7XE>*5 zLe9o*omeAShq<0k@a6BZp61m9b6P$ro!;~ttSy(jB3^^P>#ii9OFG8l_B=n%O}azo z`FkhQA22IFh0aXJ{MT8uY5H6`G5C;T?|=>!eQDpHFaT#8Rd$Kq6&l5-@)gLH&@Jy$2BBZ}2LGoF zoMVc(A7eb13x3QWYb^T!bv1b$#wWOcz6kg1O~!e6@J~l%E=}O~!=WO5jXg^cKbmRepnXI}4mb8lKQX^V(%9dN5ca6-Lo=}_xkUT|b{MZyJ|0l{}uLBbq6W`DV z%;Qn6M2@=i54q=yN8^3~na}wIYY$eZ!v;WIqc1JOp8n|~b4#En3MPcFO1&1B8hb|F zW9$(b!r8o$qJ3-g8gh)wlW`9X<|c9;gN((|Rv!VL_XdxDb<@YI{$_tx+Ege{_#m>H z%ix13!Ea(_+SE(MSU=LI^?}Rl-<*p5T$ew*?>9?7y6?TEU)RgwRK@!_k*ImVu-x<_*4 ztKq^Z;uJUaDhyvhdyzF1W=>=Z#_ffexB4dh6t~}uaSYNHqm4FW?0@bHID-gj#AbX6 z{)|t)WS_wz=Zjws%f8&1Elp^furr^7UH061_%JU*hfRSG?Nj*Ag=VoI1eeTlARKse zaW2tAHVj|ltDW#eVZC2|C@((L=$k0OdpZ2OQ!cJN{vO(S)4J&`B?B_!+rzhXjfyR9 zDaF~r;segXxKhrREDdGFUj04pU&CH3>_cqHz+TGB$BjKX&>g#QhCn9Pv`b$m;{ZA5 zsR;hT-QfW(OL3porE25KBAn^;KK$^qH)=oHSP6Vnr!j~5KFW6qKBsofFI~K|C?0z{ zdvFZCmzd?diM71HxVUAinH7~X!ES}`=KFbjLH~tX+jp}){1EPyH;eir|6<^jH4q8l z%Pzs)f(-`Fz0GW%@^oZy9KM&cII~msLCU#NazAUL-Pj}h+b*p$uKX=*=+5FkO&ihw zmX0rvoqHH(N?H3pN5;et(--UW#TT;^z8tv&^_uJzecjm8iT$-1=;NM)4r>bMbiIlD zLWNgHAjgFR^5Taf*M;M4AH`0r*-pj3TV1>pevyAR-)^<|CVXBC-U-jd=Po{8;oAj^ zZ~Zmj&M&t4R*vzi@T~!St5HlG$l#)XH%KjD|~P5f9B z5WYKq7E+n`Kb6&*g)%zEX$8o^|#`CiWD_q-~ZXI@U38cx)aaBP+D|1`uI%| zV@&BVV;O8MoO_Bhlf)*1O+OiXX-gqx!#%48`ot3CI|^}<^Bju$ z+j8IPynDg3!kpESW1~0cox;8+8Tamloz-AuYyZ`Sdp76EUf-keU&&MGg+Cv4)Vt`P zV3TabnLM6CJHeR zdk*X1&*HZfV`|Lv9Ue8%9#gN!co2Jntg&t#Y{UIHFV?_#@EqC;;@*GK91$CaFd0+J z-J`HK)tEZF`32P1X2bT&?S@~j!N`i$z!n#JVS7ej1D)`DSv39tdyi$l&qTR;gTCXK zui6co>q1$Hch+p#_5x_F!<<^iJ@AWw#@F!64rLwA&M@A{!d{r87#AOVdcyIae&yRu zNS`C=UWN^x4WE{r0Xh|Pc19>GE@!EZs#&_+z&W*;JC2=(9Zwq805*~LNy!KEyrYux zId;?a`CLNTWUZI@3&hUql<~IA`HiytQ5Fv`D1U*R=}CWqlnMS#%U^KJ%x;%+=JRnT zB79ij9qxKhMXHAZ0;C^js7vl5kM0*i=*^as9 z`w$Oy_;Z)mm0giDBxN3VH~NTHGdm(YybbpK(Qww`si0G6l(+`$c8M!~L-=oT9%@$N zrQsIO_ZX-v83#$vhSY<6KMLFEm}x|k>*FQt`;j_6y6;YF z+%XLA*arZ=crJLCn?T=QxfH&x&7dm_b-O9kc!M~lZeLXGUu@KC7^Csqy3DEZD#NtK z?OE8Tb^v@h17E-<*c&I|W5qsx;!}j&a8K(Pj&u*)c);_|({dt!B+h@=~hdd`|&`|zQP5y?QZK_$FBibiq&O>pbA^rryKflw&xlM)92sBZPQm7UlxrWx*U$~P!+q1X zY{=Ib(7FXQT!R0z4*7@Bzg&0$YZ>7CJc_nD6u!Bvl1=>eN|*()sc3++j9Rv?b1UCz+T#*aF}rhPzjcBt(BR-rv) zV4u;ZZBK-9qgkLm3*$nOO#i3QV`a46tdQAmV$6;{rWt*U<-^K?59_bt z!#WAwS_QtYfgIvYRjVzmgZ|ruGjC49*D(yR=v^txN%R%_(f^$eXGhN=pHo$J%Z7j<=${{ZPU$fe!fF z#E*3feyoFNBREGLn>ta9pH{ty#Gdl|ZS?t)F@8sbw_=LPyp-wk|XG8Hm0nZDN6|sxppT}4rjD3HF zMOpCGOMjoH{d6VQ`ROG7Wb^^j51b397ySc#Yl1JM zy#!m!w!5-pr^OEfTTbk*4S>b&isC7D*Uy#RH4OQ>?XFVDPO{y#Z}b{vclA$cna6 zpj%VhD18%$aK=4k^-7tEehfPBLVvp-6PXqr)T;Wjs<08y!hE5$=^w%_ISRXEm}Qrk zvD26*WWH+vo5=4Z_6v%wHYy4C)I6t;6ue(XKP+W)+mplo?ONr)f4g=s)*D*(67w_AOr#HIbU7yWAJPTT(44mqS=6#cvA4tr0y*k6Up{-TW0218jR zA`g}hlru`u=dQ(G@?<;A#QS^b(`bhkqE5sPTP=2&^x^%km$7ElgXja%XTOK8V?Ve9 z{orZ?XH-FUXotyo!M4N9#CX_yr@{ARJ8aEeNArfQl=A{?8|+Y#j70`3xiJrC4M>(7 z+YW0$A1bzNtI@0d8R=szxv_0$ksGm{X@{MI?v}F@#TM(%4qJ=z4Ab@G*kP?^FUt=5 zq0|%ja5Q4?+n2av%j|_+NLxngiFTOO6KyQnvrjuLDb5PS(YB22V-`D1Y-OQQ_(~s~ zq!GK3HluCl^t#SQdnJ3*w(XF?FQXh{qrDfvM%#@tJ&O7j8*OTD+eQ-^?9N6*e28WycM( z?6}jg+mh|LwRneajJ{{tahXL8+Kx+$u14GHm1M`^tYgcLi&%DCS~qqa!YwO$iziG$40y_@!sqDBkZN~}iV$1Er{FaOxsI$bDV;eXMS#h@kvE}v}wB>qT zXUkE>{}FY!-As$4oR^!?AD@Gc72E9$p0dVDbf?@A{}aSJh4)VUXuC}~hV%IlZpXVV zaTaSCn*b z-@YRD+c3+1J9@j=Z)OyJfg-FS(!Qe+Mn>%Hux?Am`o8D-9<4mKJF zN7lThz2+h(b_jj1%v+v%1b58IyybYAx2$SuwdO6eF>fh-W}nCb_zdq1g`-C?Z#fG0 zSfz!G_8(wuf0Jsj0@EjxC1WkKZ%odQKfLd|dARGSYZQEUS;}`;4Vz4CUBM@3$G-$W zGCI{UGPep}_Vmq=Kl*57{&ExgZ|JSK<*P9VCVqtZ%MW3D$axc!VcU&@ZWI5I_z-qu z?o#x%J;olO$JpWnk$Ab#ftwI-l=6X4w-3d+>6UKCoP>-&WW0;`dqf5dHCA1NK8WM& z3|F}&9>Nt~x#?)cQ}m!qaem`NnON|GnyX#!#$# zk$KKF-%U)IDC<@8BJ=;fblLd{fZ?AOpYlk|k8TfFv}9s_bV|RnJ<$h@>C^7V-1pPF zUMR;rMGSK_IFB&Wjyi5Yc*KZAPr;Y}0mgnZw<`0h$@kqGeT|%K%pspTF82}{F^m~1 z%P~JvcCWDv{+gl$-b;`!Thgt3?Swv6oUEB(dRaFC#at=t9>l+W7t+d_ zzGV7}FfP~*o=KX_Oq>H*jeVIzHT*cM@Nc)H~;%lINX-t|{ON=bwsUw-x`yo_mt|m-(l}fQqJN zSCVuB&L5Js3?frnFTh4T4ZU!-)Yc1-U+9JEmSKbBemeu}gG@^=95lnxFTmG+LG;4S z#=X7am!nRw+JqYaWJ&*RX2&i@U-gkNI&?SpQh?T31^Y#8|_I+418w#+}E{mM59 zUz*fMijHvik)k8^Vja|H*?|e*v-`N*L^broKjU4_a_j24c1u3m@_3wee-tt?A8qs~ zcprst9BXiLveV1<3_Ct7{%gR`Ku%=71-}2-GegY6{Ga^Ur++=pzz}O)9?ms-PUaRH z%wCC8*k>g3879g*A7|fvfM-7V@Egp1?JYMhpTT=B@CaOuG4`FJL&}Zmz0oF(l|OvJ zxVq@L0a+M`I2g-e|C62WEbO8$Anp$lw-4g}V&#us_yywr0zSE47)Io`SbMd7-9ueZ zVh-6bdc}bQ`rnAf(T;@QRiOWe&{bHAjkCRaM^eQt25+{2);HEwv^*KgjR^lw8Utc~ ziTRaZDxKQ-dKvD&$u5$6mzMl9=H<{h0F{N8wO2G;I?$N5N?-m7fSJ)xW18?g@MuB0_5vQETabHY8>y%QS>4QtJb?75x* z-Il!OWF6{4)|`CXwdUkg%+1$e-}P0@{o_7>=3BAu1ZUV=>jT7ozliX{;kUMnKfA-c zH7?^7xg+Z`)>PQ*P6o$iU5W5V#w=pziyo2nC$e@#_F;Em%}eU_8Qh2czwY{s7vQgv z^%*tT&tt89@LQvSGe_O$GSsO3JhJwOYcy7<{XDWpL-qm`pbq3LlXtN`12(?J{|z`h zNBAoBz%?0C53(jh>Y;7n_3JW(_fi+a|KMvh2FJgT_589%L)L1D9464lr43)W2W!pI z_K)U7;xcw>&oByOn5#NAr?l|sc+m$q&*FD~z+4M#%fG<>GRW%_utSpj{14HtMBY1I zF1u2Sz1nTi>#|Q<_MlwEo)PXVS^pt?j@Sz)YZi);M)o4fewqa48$LiEBzycXL#Ofn z;Qx-fG}+6%(6yJj#>6_Frw_l-DQ7O=+)tTXgMT6ce~EQ}@T1T(vY(+9<>|z^QnLRn zxq)McR&>nc;tra5nA{&go`f^R1X4xVbsqwD&e&27j>^=KeI~ z&ArV9A>4-!9RT0Fb=J!n>=`$(x2`!n3w!KuiPVM$MX|pW_v+5-%7ER`5W>2dyRYIN zLBWBuUR3*%Gi6R=-{JN5s?V@+2(DV}i%7<^66uAPr!h8^bEpbh!_Ue7G`UM2{-C!D ztUZKbeV6v$2-CW&Dhi1ULfnHCWFW0$0Y6<{d^wwUdx`M=WxgL z<(<$$*1kjNHR>Yx^z=D5W7M9*Q`qx&1->`#Yx@LqcfZ3JP4>tppA*xF`jNA4#HVEM zgS`c7T;^JGavr?EI!NpR&y7#QUbXL|e9|7IuK!GUb$8j7|BU_j685#za{p1dNWx@q zya`+3Ug%iiL*ssj4~H-oXtd6?=&$+E*y|4|`C#p#7e4G8gZt;7_uN092>+q-cc`OA z=;n1U-FyHxh3Mutlx~(g46QrK)jq%9LB2kPZkBV__Cr=gKH9KeN6uHf2t9lmG9$W4 z?md+DZ{JOy8}Gnb3eq0Fr$(1EP|LJOF0s6}g4aWT)r*H?HlA(@Jj=H=4=JrJR zOW0@LH*pH*t`)5L?zVKSaUY7cbL-HKB)kw|SodPBnJc{f^xqr~WyG(+?m7csaVKCo zM`tZyIfqi#-F1S-zR#3(6+L5MKHRX*Pm#0GL{~}!<%>b}qbYwg-kE~3B3zSJ7XZ5eFP$*>LO9FX_Jw>PJ+-Uz<*wfOQf_)=_y ztbH=IYc_&6eKl{Ijg0twqiIUWJc)jX{HX?SxHpu% zk#6Blp=I!lMkF%?JN^T-wgi{O~`^UeF(cPv=ob!l%#Tk?jBE z-p^;yKS_H!3%#}xa)k9y&G&$h9q2c%;Et_JIOpdw{0e6=KXos{Wv~4C2fJTCDRT2! z=c7nniahQ6;9BJ}^bvwj&b{c1c2y4hRL*0PeY`w#r4hUqes_oSJld3$dp`QH)0nS& z2{?sjq5Uk@(P539Bg3Ib)_L?u1p7U^&{up3dSHW`t%LReeQ zoV`(q{^S5;QS{08wXJuHB@>NSoAK%pTVD*c^o6v84bTUIPx_{U@GVLw4AMH`aws>D zPUwsMaiSBjm&4KtL&F(~2LX4WpSoTjGJqaU6WcAa||M*pF7!Z(yo z;MrDo`Mf$|qtXd&v(jIXb7Q=Q=(FMo3_C)@l1_dSo}UDlCBdtc zV2LR4C7&w%%J36d{;eil1^|(+sXx43_xHS&K=PbMutf!>86TR{Fz0vuUw4SMYDCis zCL@|27||0dKhu~=a6=MBGaL9;uXCJvJ&E0ycDBYnYrO)A%`|599Lqz*(y9?Zgq5Mz zpM&@z6`~(*9!^qU$S~8Gr{gNXon)FP$=Cdnu<)cgj1hPPUtUzHO=I?U1v&+oO^__N zl76oIw(9)mc=Ma{x$<+kINy&%mcCv^w93U7(q$Tp-&Nm9SD^9}d8>XU=zQ7@K9o%A-;9hM=QmPZNZtDunaY&zi)PBel?bkO3Jo>D9hnt!&&Qp5ar zIYH#uK_|#tR@kK1|8-Z^KYCT9E3(KEi2C)Ecva~*m84Ra=r37Fr$YbI56cOa`l@+=4{!a!9ZRr41zGWys26e)@%-{Tr}7!AQ7ew+#U^haDl#7}9&6$B}ercpzXc|ifBF%v%hGpl4~G(TX56C`HSU?k%0 z*1~ewGm~kS=u*ri=pe4v7!}~AxI~3hXdpjCyjp!i5J3mAucT~Osaw@EK<{(|Nr?S~ z&ZU~*RUI@(LHgll!a4PYy%g*g9ajPFB#fG=+s^DE3S=)4GD;c7qk%TK z@mPTxg#!FAna1O8JP7JJmW5s{zV+xX721s#i*MDIsmfqIi7dL&NSI%l_^wOvq<02(hoO> z_+gL&fQ4X{4yqwoqk`HW*BB~et=#B_hSCam!Qi-5u2r^rnO?+d{h)6J* z2>&jN)Q!|R&LGH|HjRY@nXM2pqk(U&I_*M&$wbTuEO`YQQ3XNf3`>Y0vlSvLQV{WY zDk3TZ6EQ*)QAu!;4q8C4Tm=acl?{BG=0qfzOl_s6c9#>8;F0Svsu%rm3(pw!Wt@6K zf(eosv;%_F^N2-y-qHzuTT7XWI?+i&EF?Zan{#7;gJrFfUb!6PP4q1qN1)!x6?9xGt2&Solj}U0x$q1Q@vlKhi-9y?M=GUIjXPU!f!oqPYqY1dkvErDwQF5zGmKL#)%7w;?Wq%dD&@%8eJ zQ&CBFfN@B@O7gtU#aCz<^$jPcPGBsPbQ0e=!67OtHEMumRP2mKs-*pl z<;E&wNVe2Z|2*GrPL3hbUQ z(MfPbp8dxvfm$P2<-}5ueso81nNCtcuv`U+;;qo`p7knJCh0dQm`%AS6Za!kTFlZD zd`bsZ6J!oTLuCWsm|p-bqfig0NjVvNK>AHx_gwO7n zJXRAiogj0@=#?O|6(XiL@QpdkdI^u?ql zOeP|@*OOIl8WjYYGrXPzlZmKELB!*!i1=Jy&mo!<3kW6?QK^X-<3uEw%n2Mu>H6zV zCh}E0to9?woFU!>lZlv_f{5x=M9lOhVu;F|O(MXU(W|^3u2NW*s3#;#LHgk?{c`nX zvre*z-9QgkzId_d#e5Ey8cl=(+_aE}7d0)uUDj3=wM8eH-KM}J>M4c@;bST+pds>> zicXXPOa$B=Y5jeqo~AKZA<++avAt_jW;d$T?`SNub#evxV|j#Fj%X~8_+eq!zg{PK z*e?mkfaN;LBLp2Rz8ROO)J_s#zRguhXqlVFqkgn5P)U}kXFucH#uGg-SCp=yGJsy7 zK47yC(i3{HEbwAk;8zqwVWEnKwk8%T;{XeIyjT``vG`iw#KMjfT_drK)9Tr``FpV} z@?!Dzz>sg#6o58MkUX`G3P$A9-JlqruK)~S3GUEA)dY8`Alp_@FZ$6P?hzW%41#4k z=wX7)Bfz4`u_`syMGuC-gLKAvI(mT)T1b#xi_Js6ISO(iL8{uGF`HZfvk5Y1NHalZ zYcrc~%o!00CKD0dFw57)o9Zs9?KKA@!DA}Oj;LPr z!!1K2)t5=?X)oG+ieM#1lvmy!7ZQB%T0O=*4m) z;^f8hxSPuX`Zq6@ghy)j07m;s`PDFxj z*F{t>`r)oO3Qd`c0ZAcl3PJz{KrF2C0RCGhDbN}FPADaizOklp+6?T8bR;5*kvR4@ABR(JeRpa6_I z2vVS+y9hE{yPM)$n@+2TKFLG`@1{m*M0za9oRfw=%vOk)(ZDx{2tD*kCL(w@m9L4Y zAUI72RTHH3V0Tk|o9#p-Nc!xEe0#%*NbnsMWJgpl`r)p(67_|>A^1bwNu1Eh72uDh zhFB<00hY3{(M?pjK#&PKkopq;s~D3wooh$&!C;Kl|5 z+?Z~FCUhQNEWUcmON*{PmMTE?d9i3wa*Dy(RMP1-w`md9nER0$waPQb)U# z^f^rM6<9`fWZbt7Dg0FZNxeXo`i43rSfheONlepgx1H>22(tOw5mhSva5pr5C{X}< z0fJRJXc56=BBrMx;y<=R*gS(yZdKe%u8z+&DM-Rfwt1QYC;uKh@tpW@~+*nl4$4VonfE}V6 z8whY?x&fLX-(D;WRPpu0t;f8y{KrlZVV0LKH&RDC1Qq@$AOWhCQ5_lgtwTExBh|2I zrTPZpAXu-0?0$}Ko1KURNqo;b!~%^-4~y38poIjPt>B*Cz_+bVM1sjge6C>;b4C|K zkl6|mGg1)ocq$@3*RY6n068F-Ohknyf^~q11d}=8-yx1vtYkI;B+r{rukBp4GlEfoYE#JVXvhy$NI zP^J-A5_H(Sz{`qC6<hoc88@*MZlU-f=LW#YCgNe^7*)%tI&TwEUX)cd|x~Cb0ncC22xne$4L}GVYw6a zP+<*HOohM`WcEqD?Pe9rR#<#{QKx;JVB>WW)r)>~Cl~CBFc2rWLF3j(pD;Y zCnCXQB7)l;DVm$Z39SX0t!;Pkjm3xam|!vy!R?L_x-@#$aJ3FvK#++`DN-JWc)djkl}%J3G;Ch1<)n#L_O3cLp0~K@#9#M|8eY+VXV{)`j2Cm zG%FV9=A{64E8};z*(7)EYV|FE$BkGDbP{dsI#_&%JH#?cV@Y+U7Gv?*U5VJ-fIx=WO+K72kbtYL?IU*Y&1NvP-p=~L$8BnqHU z-HCdrPxBR1VVe=0tAq3@NlSFlGzIC0yO#K2j839A$yMo~#|b)!1CJzG;G`W+tU>hS z1RcbIN0KxPlXfkw))Z@#gcgTw7x8VY6H!6>;bst zFnhd7d{u@wiSHaGd6lorr-hO72CJ7~l@m)r`r+m^Kco=GN{!`zmmQn+ieg*xSTsJn zE4m}qf6|?p;}jiFsAm9wB9oNqB>D^;VhJMEM8h-zq}rRrSE{{90!wwSF5fhQjXG!n z!8cTp)Nb$#KAhUsquL!Bw{O49Le;1w0s9VjvL3CkV_t!JM0ZX-s9WX}APE&q4>;#d z!j4C=(z{Od29i)m&DB*(wcl+njJn)OvO$5=AF_9m@bl_hz`ctrRdk|+)u2N3qdPrB z(MJ-34vp0WS1UZhT0y>w{giqJAcqpwgCvt&x%4(lh6g!(+?`JNu2AWRn_KQQ0o15B zN#HukcKAk+brY-tSdNJfB7$rWHX^>&I1vd_rfxJxeFh5i5Jb+3e`bRb9l_)rgZu7S zFxZ_0lXG;I_cI$rB$%9Ia7SIfW|m$zS*3!cV`T0`9;CBW$&C>jwLTJ*g~AYzm`Q$s zyJ|`l!b(kGiQezP#vP;q{HgF*=hw4bBq-3K_N2(+&ott3_%n@+<o+_1nfKHx-GHWCuND;8x z5Z`DH1;CxJkP{)2+yIuX3QL=M2FQ4lH)9o|AMSd&fh6R1Qt>o;1-Ns$fh1K5RS$Bx zfg~!ERA;eKgJVtPiz*rqi$GAlI>})JE?kvA1bw8y_3ADz1f{DBu5#5ALF*MbVu?;j zuv`V%f>)w0<9bIuk(S^%byt-gk#DnAC?XPk>g#qUN|e>xO7%p<=M{V3RZlzOh-G%N z4)sJtf|pc~9dXxR*%8mHCn6Huszlz7Xh(DYy9I<_9HvkAGJQIkenc@J-4MY+iusb= z^aj3-(6uw2AZy8v$TtcAFcM@n+7VfkHLCjT&?nT}6RP}nD7li%g5X`F!-5%PL8dP6 z41)D4NOHu&GxauCpL#K)AZ+s#7pYo*c0?~@W{@!~p&e0+X;OU$?`+w#!cR)D$|l1I z8{cbP#e$JTR-lTYAKl5wNEIXL;4p`0wM6Z-)mn1LIn}0?Ao(GMuGC`VH0oLk$WvqN zTyan0IR$p8r=525y>^7>)zc0wA7_W=KA@Ag{bw6Irk-}h`cgY|yL#H8Bg^d2iRx*G zwvM+$PpGFIy5m7R^ey$YLs_fIa$DIzxn(WeaoOyXrMa>pl{5#pRGgZb>8+WWtQkjc zXO2rDw=;FkP*`F35M&KW8D=){EmPOmOoGV`dS(NQ&O+PCZ5BHJyOTkuShKvvn&mCl ztktSz9#c=rZdQt7%}Q0QS-Mz`7|yCsA#k%AUR0rtNn$vwfnu1{lfs=pbldKjCg za`l$ncg$)?)ltmy^;Ib8H>wmzWq3z^vF!&L^1Y_gJGRg~g2&V+sF3xm_;N`F;usp% zMW$jrg4pQE>Hvq;xC;U`z;b-HqG4X2tx{M&NoqosKtJ4)=%wgSZKk9!NK%*{6q_U? zgH4P!1gr!q6xE%sx4{cDP>-NaH~Z9 z!L1eb2X{l!AKYz4e{eS!{eiroj@2K?5jG3`!H+NJRRl*4wIxaxfV*1VsWy+G6g3qz zFE%PPx>KvjdFEyXZcs)rnQaA<2=dbkBpGCx6-axO?6LxHfVz%U)OD;%L0!kH6x4OB zN2m{RtglNUAN6%9YM{O@ zMGe%~rKo}Wx)e1~U)NLWq~~!HCt+^dB+N~kgt;k`FgIZm7L+cB_kX$;Ok-%AV;>Pr zYQK%Cs-iJfRWzomipIcI!6IAjn{`1W$5s!D(3P6t*{c=U^(C9L=)cp(+Td9AL=eF$ z9khhtQ#xoi!I57ft|bJ?58$eIX*0~ZxCO#Ambm2sL2hwCP*0`7;sW_Z#fz0@pUEw< z2=U08{QFtLnw1LN-~_p4KEP78Ow|#SHn?crG$F{ZxFbARD!o`L{jgkB1N{;$C36U} z8o|dCskG>cR9f^zDlK}V$66G5cC0E>C3Nbpf+b9%&FPf3YX4CM!B!O%Hl8#a_;NxA zZZsP@)XOCu_=MTOmydKHlJliY1!9a&koU1$+3=ihgCeks-b;CaTzE) z>AlgoDSPN0CHc2y=Z_dR`nKB}vK5yGsi$eoA?OHLtWteltz*q5FR3*G+$x`~q@-L+ z%R>Z{YGi9FCAc+}65N_f32yaOf`dF{EKNbi=2T>CPDRG%RAg-SC4;w5RB3L^CP;3C zjPFfi<u?m^f%Py5qXW^ZtsBtb{xE%Np+ zz5~8p3L%Hk7_z+Rbxd>I)Ps?v8?n{H4pH2rqs$6)j|iI8x`Q@ zW(q<&R;3`MV^s=5I##71q+?YILj1=jB;;Mia!`+PgnBupD|QY+R*4la1;MSU2!`8N zRbLY4T2m41KU^Wf^y5P2Z-CitshHiCiuSftw6~?Az0KE1Ani#^tglPK#QM4vwO(JB zf{FEYDQew+Jme-s#wu<)B+N~Qgt@7ZFgFnrb_2C?%2O+tm2uO6Ad=9iq{?b?d@0Z~ zQqu{})n|RDqHdv;f2;$r>TYdn`nT)5~+oGH=8?>YH zQG#?DV}5*fh%Z|+N!5}T1*T`|Ac8}5P$j{RK{^(}iMKMSl3=+CLY^IFrFuD1V8^op z`Ep7HVm^l8^TkQ=_)<2KnJgigdsk9Cz7&ko@mdsk#0es}xg;qmU%FHvNFi7rupv7!XMtHcUJwyO%H-hyR7adB#WiH*tm@7DHhuKo6#7fGSbS<&91ShJXuz{fg<-SS>Vrak@wgf9CUuqnT1X*+|9t&TtTS2Y2 z75FM-@`HkJ6>8F*HUlY1khIOAL4|f8#l{NcT6NaF708$KS`emrYkk^w#YRqMgXw>q zB5{%-U$^1e1Sw%+4zoI$zl4zh3RDoY`Mi>-F5N>vOpw`usV8*b#r&*5cZOD=BfU1% zoea;`1zbYV$?@4n(_KPTPNV6~5rKX=9&@#tbaX0P((y}kcU8_8cMEd9kS>a|^Tkb^ z^Cc*Slw;}k2vbR;{M${frXAI~U8~j>t%8>jd{+leC%7ZerUsSuS{+}q2it+rR0J>G zkra7dyJ-|44$*;vOHcBU9v5oBkIx@oNA zOS-PZ1?)thcY+9RR@I7r>!1RU=%57z&+DK{*7HGK^_68xb52xG;G!~Zb%F?9RY4$j z^QyEj*d@$VPbBqr?n|z!em+xaWB5f0X6v9z>gswYh+vxvvhsXKy}awha|y|$R zQCiaU+MWdjse(-75l3)rs5|jF;iyi6)3o%&2of+RZr}t2{-U1x38VtG#<)V;L3;&BDh`$%_sPj7W9Yw2*~#mU}ysJ z`!KgT1qyU%nnRkL+~x$$jaaO$LvB35_7i#N#>DU&={5mxsV6R*BzRBQX$+y_N>0VFcM9x!O*fuB0TO0zNn;4j&E5tGKsev2l9I78 zjNPS&CHz1OH90ZE-W^F&EOwzv8A6rU%Vr2)+39+6%UDes`A%9b?-nHzF&r=Mi$Pi0z9E%mCdrBq#WwN6^YQ;H2J3@%WOaHTyz>xhlxQH%Ps32oEtQSnecc!OtsRSV{Tf zDDs8m2DP^p&yOGZs>suH(dYRk8L6U@MOHrVs6g_=3Uu?q3Ursy3f!T}#^P9kEYJv5 zy;h(fbz>AEWx7C%36fw;B)Q2&kegTpxk*Kkn@|L~$wZJJkz-vf#Of(hG*`=3%$rxt zn^){}~~F!WKpOlrU-&3aEsU z{bN*hNSI%KyIlD}4&B)yh`CXBA;_H>f_j>l4AtG4Ntin~33F#BVLi<+schSoj9GHe zmmOO0Vgx5Dr4IQZRq0wU&nr-jCc^_r5&3;gi$pb9FjnVP&AhU8Ue#^}1kf?9Dvvgu z*F5IM@&%yypcjiDahxS5CL=J#*mh%Nj!oGUefie`}mQ%9KH&3gDS^n&A@ryynM0Ld$BmI zvmrMFTUC-1I^+4|o1+eV4aAkI@Xu=|Om}l!_JF(o+_XHU_{C8&rlmNv<**Jx9BypY zJ=6kP6`88VA{K|UPdP!Z+zog3FRJVZ>EZM&Z}zj8eT|+Xn&r)FmS0|PdGeaayhdm% zdERyf?r?&bmtzw9N=2(DuUh7ns}a|F5!d<^!i%`li@4H@*w-cCMO^JgTyohwbych48J<6RJMXt0!6(DK>O{`ZhMEzN)d* z5_DLx&|7X_sh~q^jOJc!wgT&Q(7bV~U9$WEx+)?j7SZ8!i;)2m#{Qb9gXnrUZuqU- zs1fAG9K^fjDSFI{IOav{Yi@ZduJt0W^&8h zA47?leS%0e(Y&S51d((%9uVk8gP@?)EY}5?M=ZOXAU`bARMZ7J$$VmY!wK@ka!^He zs#m+A%XKGR>8(rOZpe#xo|YSpcpeegXd&^{;6!{(7jo7K1$L=t*!XKxPx6e@xh?ED zGyX_4lU9ez+7xoQJd4b5T8ytL#1f~gLSp86?(lE}UzuMYD|qw}&6JTkew~Tn67@=6 zg^jv8-|=ymN_15{bK%%jD?;iB+}@C@l*AydEPM^(^$OuG^)!w7)GvmXlfYQ&6&7m} zVY7N^QO|Va+r~Ey+3d%VgU**a`wR2VRCzmT{N#xRA%`$U;6@f;)__<(A3Mkf(qgg0 zO^p@kSE@!A50%Wh8K`BB96h4a^*8E_oVvj|b+_e&zc=^x+Z*`dgo=>kiU0xSr+2+L zLKcow>O+SYhZO-h+=W$i`xTdhTjB^X9q$XAAU`Z4Ra7PoV6qYWhTyquR#Bbdoo_SY z(k`wi>}4-R;#xtj&sM=)j^nJ9v6e0Qm7bZrtDCQHCwWXoea%_wioH>4S=c-333+W> zHRxtL`w{AiZMpLB0AEq8w6A!K%26&eZKpG@tx`*y2W6=H`LUuB-D$R@+E zI>bxMOfN0I3r5_Ct*K(7W}C4B`7-S$n{lYKmbwM%rDI@HAYZyvAcnmJ+4`)+ZgQs$MzcWCy zcKa&6oKS&aEkTkGE^c2%`bn4-*i+W}Ql=^&+I5_wXQHO7g5WL{Bx~Uaw>Z(>QXq>V z(FmV&qCKB$Q~$1dBF}RQ%+-cm#UKSbwp~Sus;zomYZW^bc+d&*V@;JZDwCLeDHW41 z`K~&v@nCwk%k)+k0{v)e^yq}?Y`7#79&9)20MkWo35Dh8MO@`YT;)e`wxXDd4^ru` z%-xAF;_qob0ZdG9F22U2J4rxu(48#6Hh{5;Z{yU{G`{A?f-)6#l6v+tRv2r7uPoc3 zlD(#Ltf2@v&8>#bZJKU@HE-QwQ`V}UI9|Zp0&Ca;-_b3w#;-u!9@M5N!nsV-wxr?k z%$B<6)1A#m{CrA9!zLjsn%?7tEl&J)PQ}SFssvMV6n1^g<2)9tGVKiU4jnYBI5N@n=P%(u2EEOugu2kDDodgWwHYAmRugC7R ztHVja5bnKH3HZvbm`(zQa5Ixiz*p{AA_MvUQGuPaiq6;c!s`gaz8r>dPp3-2{hTje zp8$KL7{Z;LDgj@)vC}C5L%4xTCE)9e#WqPS0pGJn+Tmdl8Sbs(wkU;zuS4!iip!l* z&i<^72ZcWm-ywhDybgWwa{N%8nXy9n{zJ*{Q@v9Enc+j+?3lzO271-}*B z`fAm%t;BqBy5Kof0PKRTcs50qF4c9iB&IRzyei*YId(Dxbtv$>6Ld*|A2~r| z6oC#+vq;k$S}DzPXt5zTMQJK~Qe+i_G?i&X8NA|)!{}LV60F2-A_6fcTahtD*Y-k! zqzvnxNLQogLN$3s1|gQ4Dg?P{3b2MM*Too|tjO$_EBQl^H?JAqyk_`S!e``lNs$3V zWAiG$e5AQFgWv*9(_+%JQcJ<&Mg_j%1O=sOoX%?w%RgJ^HHUfCXvDf8h%KYfjoJz%@=FSNAoI|T9-a<2 zas;_i2k?h@5kKNZ{D>E^?_Pc)ZdHu2nmAt^_Ro7wv7t@#dcivibVfl7yaf1Gb)&0B zp!8X?T{^EhMBL#7`Bn8158}nda$aLu?1v>=HIM?`P#&#Rprbo{x4a)zNtS4Bx9|xC zZg7J9XxXf=)T<=$1565d(EYtmX!&0>> zY<6q*pq@w6v_Y(RnaV^Mp*<-JOB6WP2_i@y1*v2Y0o5dcd7>BhBKBSAcSIpRrJksF zFBV@>*sKaiw-Js5p=;<3?elqv?w{3KcRWPLj^p5Xh<=Cy-HAR#qwYl~=%4~QfJ2Uc zHT#w#a*U>EmY1SgUW#UsqVsxKJjfKpQ{-%hlty z#9#9w_Vqb<5zq7@p6NwA)2}AHh%1QL&=gmA5my97d|t5xUPXdVtyeOy^I8xp+Z4MU zwpRwt%R#K`(_#CK)aOTv_;gL)qonwf6XZu8QxDQfzDCfYxY}E8U#Xa=5LRl$GYIa` zK^1fZA9RBJC?;ZR4(XeT=A1$kq`!9K!Q6@)4T5?~4Td*fEHiqJxoAQIuuosqA^-y`!;7HCKi!2qA62of=Hhm53EHungH%=Vp*VzIfqzEbeVj6hBB49 zQe&A%EMqkm-{Hj#nEV{^omU!F&}2V|Vi^zKn3<5j>`YX0@me$6?2;pzIi=u~d?PH=Lk@3Uu5L4Fixda?K=DN{*iJGrn#ZBCFMmK#ViS2c*0>KQiHnR)?Ot8Oj62K6Kr z)v;*xH2x8dW#&5`^L3_QnY@VSP|F_Fi02UTyTR?pKN(`Oa)TmIEyCn0IiwelvN*5l z_)p7%EbJY}t6X2?Y6OP&3Nd2_VnqzPIOG7WRf zZe#(bn^}<0#}2ZAv{>wLQ)31Cm8!tSLnVf825K=RN6S^Z{#fgN-5O?on5!b>xFSGi z`Kihqg-ewAX@NHzdzrJlumRUFZ~gzMdz+xjvh6(Zl8K&aJ6}Iao$kg``iWOcwNq{^ z@nkF^2}wvwODP-MB!78dR957(O zfB^#r3>YwAz<>b*21GOi1{vXAXP@s|>(<`4YHz42ce^4g&)Vzm{jJ~qbN1Qi0K7|F z6LuFiQFT|FMCWFrKT1#VMpU&X(SyOIf0PGz3Rj8uehmxLV9H8@nPHHHx^(u^y6TWkpAPUtV^8hvJrhIhT;})Ry|1iJKvy7Yy*^u=`Xf!)&+LbHcCCJS{Ba!mR5Q3uF( z#(MXU^Ivyym0IOr%2{K$3TwYHXFbt5_&I0lc4Tf=3!~Dpj!w~+NpEh>E>w}hsFP~3 zmu5Wr^d6MRc%<*EVnZY=#*c%)n5t!$i_VWCZ3I6#u>yL!~0 ziaDm~lvCeWvmfO+GW@N9+%Oi&dZ?P6L?-<})qmOul4fMpNL!*jWun;n?P)XOu%PjH zx(<>#lyJK=fx~>}zU%<8H;^XX=uBgf;qWH=W$aP}7nTn#teeI~9ukJYBO&le4EWL; zlCms`4zqrvgrP5N5`9A>Y!W>{>^DhV%=*m|7TNWP^nIOHqR$W-P_+@)>;Um>`T^n| zG_%~AU40NgXdm>!y*s85{G4;dPQ}fYhA!$S5{}4e;vRbg5|;1qhHHI>zJ{w z&e^0LleU}OS>TK=Pw`1kU?z9dg;6TyNF`p=lW9Q0kim_N=j?9<-tP#f1Zx`>&iK~!04wFJFqk_x=TPYH)* zt~~KhXJ3IY`LqK*bxamauTftwSI^hXF=MW&g&)i{{nYHWx~AWkC#!8=TEa7?uaR}G znflrC3=0=v3N*=*>hzL2O=}=tZh*AdM9+m$r#6-KjP{$XXOzW+ls*yK|19QfF01QR z)^n2P{!xl&r<1cr%*@Rn<|2f30rJvVRML9OXsG09Ovy)3u342Fphj25ilH=xD6u9* zG&xo&&v-krXG2U3Wx+#ns~qC&YPU*Q`cy$$oT-AeICE2-=1&uE69(opfha z1!-}n3Q~M{@sZ>v)5l4;?^M|tT_c94uOYbMufn9A#h&^ z9DN=U0zW12v}*h`1b&*Tai@m(DM^d^Gs>D!Sm;Ak+EXIBQS@FY!Yci^T)WR zOe{W*yw&W(2hfK<`bb?qK$M5--{|bY*5`^cOtMx{qG^8% z!R*sE$Uo&MyRW0{({PY~%HC*$d~^iZh9&!IQHkVz-6nt52=bA!V);PeRy0Y;M88eK zJwBUUss7zmwn>$Z4k3qVeWoY_M0uzv(S*50lOCYI!8JeEi^8so9*uds9aSx5^ttze zqV$FN5$)C?a5r;tPl3A$e5MPIsLQ`IV7l@x)Wg9<7U>~9P)T#PwEkbabG;}s2zLvA zop7!f-E$7t`-PwKc~9lJUi`YOojICXwW!);P1yez)#u45_kiM_+t#DdifdirC-V2Y zvkwuI^Voiw&3~b6E-^7m;su)y z)SM%u0~LNy_-pSFFMcTD`hiy=JH(5h%3&2f#EYNCaIFx7L%hfx#xeB}FYq>Sm2HV# zke9}arNSnvvT4HR2GJYRbG{K(AEh^G#zWN>Tx$x^^SYg=diGCpt7X@PyuCf#- zIj5{>PW3?iB(4d);1X4rpo>P$o zqB(VoCOjp$wWTB6+5);swa}#u`I#CUBL3p5(l;qA9Zsjka)2 z80edk+(-IF!O!RJuyCxIUpxVMW~`W(eQ24E32Z3Qfu1OABI!F9?ah9pgq1+pW zedk>JP$$W@ALsI9H>>k8=nh;H(uK%%+N2z!lw&4^D7_&{^!>dhSl93yxjcEdfaDWp z6?;IA8EX&ZzOwpBUMed(>g+@Oi8?vjWDH(=uihIaSunx1AnzF~=FkxM6@d*U+6jna zO-54%Ta#BeZxS7GLdBv@_&0dw|2dQ6b6gjV^$oWhaMb2lc zC~`hiMUnI9N~4M*yVVrgt)|FsHAQx-DYBcah^4^`2Il_n<&I1kwX2x3U(KBTYUb=$ zGiSe=Ir~v_#*krCn$<;;mVBRY)zC(!x=d$VHDSz!8OB_gVa$bTX_r$8$+s{YDk3Z1 zP!VB1QBw@kqM=N{T%GV>~`D$c5UyF?AE0OV1opGu|LiPb@6d0=P&qI4-k~@M$ z#p-pGkj5-<=#a)#_A!Pk*O&zxzs5+~03&$5RjzT&tcS3G-N`kg4Nd4!j@gF7*uTy( z9rHB`mX@Ljt@uu~tJTO?Xji*hMZ4P7D%#bmcJC|}wW}8+XN=3gxe=-Nm(*G*+fHV$9(i8kN*X(!n~f@`?H)$k2~hs$2qfeBEL$4Z-RVh zto%3o*B^zdYPJmf+3}n_dcu-XY@jdZ;0srig}2I-zlqAiE|_(hVM}$tT(f!v&WTok zU9-xL$#X>5rjPNp%|} zS)to$p^9#&g(|w87OLoWTBxGisjpgaI3Pz|l`$UE_97}Al>ZWgLh3I7_(GFoQ&ahBW zqq<2}D7&crdjm?#78uDxWlgYOUMj1b-K1^YP<>4DwX%vN>7#_3I;J55Ak)!91lmx>I=pa8t)-vj;aUs7@HBUo3N?=N#Xm^|qo!W3+>+d+AMB^)$W7IjS!HruKq;bU#K( zdI38`TYAUvfn6W)p&io)PwFj%zi)bzoKn`HFHgRh+YA%Tl)+dEP*$x1m+C>jH5O$R z)JG-XvV;t!tOf(V14pCyRYKGcRRQ;hhAT7g&Vkj$Uva2Z3 z-m;FWwK|OqGQu4ikZ7bgfO4pU%Q0OyQT6h-@|yCp)q9Yp%V?-e)CtD`K2_jSh!XXS zkK#I)kCW8ni1c24QzE&eDh}_0+%r}?{BLoH4wsa5rLxM`AU74bOj$?9@-3?=L<2}! zg>Qs%2K6pf<6&w{FD3ke%JUErIj^kl81Q@mTm@zP$?xPiQ@F}pHwSXjSnoj=Ff(Qg zQjm?xiki9tjn;5YSY2+R>bvwNJE&T#u6h-EFZ%3?D34*Dj1chy9Bj0to*S)4`-keL z=sh!0HWcMWh!RajqBN-+xHH3wv?8hAXmUl(Z$s5hZ88v3tP@p>+GH@+WCB&E z(woeq>Oy*x6;xeIZ$h)Tv`N%_Zb{k3+W0;mdCdRI+z~Z}@gU#Y9F)g?q+s({6UT*OYTmPmNwl~VMmj%o8+Fd z21qgjf|aT!Wr=O_R4p`kV>T6u1}A*3j#0Zs6YBfzbcQ+^dA_KV|7&SFA0XQ=srFN| z$}T~)+jNO9r67TBl!DaArJ!%1W8T!ZFJ(!EPTy&k(2Rf6+m6+4*yuI zS|I!>$rt7Z5lY+C^z7RLX{PmsruCVeocbzhM5!DP+2c~i!}oB}eO0hXlF(wv<)^-i zju}((EQsPqK2E|zwdnw5C`1{G>9PWpHCz*RDA!SS6W8y{>&|oOpMSnWGh2?l;&Nn8 z*TS#DWys!zsG^d!{~7FXrxx;h`=s(eDl4^We7 zW5q(i&R`CCv5mCb$JO11vA~s@9OfmtkHuSF4}~LKr5?#g?YT0pUK0wBag}-`4=U@i zaQ_eU#!`>u4pG1cMCtO zS!LmY*6So`dXL;fg@UTkq|nj5QL6Y*n+(T9zed#!Z4%XX8daJ1E>D=;OkT%4_L9~y zcaWinm1#ST++;esnoP(7y1Qe>44Q{_OKMP&Bo&s2R=&Ez@|6{qud1+oMTO<7DXf^1 z3!V#Q7m6Akwdakqy(-Ts!U|Afg$`4IPDc{Hw zG^vHOghx~bRHcI10*jrDDVy;)8!%_xLJS>;gLul~jH*$dB%Lo#SiUr2(f<^dvAq9$ zclfd-4>x9gX^!d3b4*`i&b*<_3i}!`TnWzc3=0pylzJrTcIoKUYXyUuuxdT0CkzMl zLnC4>X+bY+s`w&hEvc-c?}3DTYJd!jZ<(@aUxLOHK$%mGhc`iP8LQy^=g0pRO-|vD z1#<#3e%Dx@+~C~vIdr7uE^`=G`q?oFegN>K9P{C`JAb0nfQ(0aS~VY`ynSQEj48k+ zb(Sg=c4Dj;N^OV|Yto7)ohqf1zM~llZvxlB(nhs-n62sbg!`sTw64P)NL^tn``*~y zUs&b6$X@VE%sxJz*hWivJ`mo`d=lQxe8N?X-OYT$QE^FcT|QX>$y?`y#}6fFVj2~x z(URWY73;C~zpwWIMT&1!@zKR(Igr&wS#MQVR|wn{b884Z7y=K5z<73O@cwWT0+$K= zMl~*nz-5EXsjmWlt%*=3X^|MAtVxwMav$zCw~wUCGGGm{x&1croPzQTYQ!)#o=}a4 zW9qT>ilTIpG>xBzc1N>fvS`02-%!rE^H}I zGznW#)iO$-@9!weAk(K=6C*k|g}_Cs_fCO}1b(EzQU85sz;xvl)Wa7sS)_;bOP(}m zP3ynTz8<@dB7<T2PvE63^;R@buA$9C z0L%K6!^4TOVwq2r0-8v-yZp2kg(h6<3ZE9{+}C5tX|-Qw^Is^N3q@;_s=^d7<(Y;L zmhhN^hI})3&<)hZxx?4SF=JLe@O+4z^Bt%;*NXb>xc;E#-e3T)P7($2>HKCY-Jk?)X`CQM*ZzGn)yHjx+0My{{8;k7YqR#{jy=ABg* zmW+9Km4$U<-dSaVE)qd^SEpdx60VNP!j>^>S7X7T9Sx8v!Jri-WfjXHsf;|lO$ENM zDB~ne)<7$MrAz@P`Ss#=(U5LQ*ez;7lTOuWfHJ0(HMjtBOIcA<&rtP^=4Cg@DP zLB2Is%!eWHO9C58^pp=#tV#4ZVc6tls;(v_`gTGnCEA2J&aqz-zjl=;!`na3m2^xN zieSo3dI=V}w`92TH z`hP>S<myCqK+gaBys5C3K+>7QqMtaEIz@P_ehwKS^+@tt8N!NX z%R{I)_HU^`-!#ZMeS@HnBsG`iS3N){8B9*(}wRrK7`YyVH?OPW98ND zUw_9o%`XG=ORHKuK;w^$MUu|Q-Y_6tRL2aIK+-{3HPZBu^uf2~Ty45TSk17RwhLpJLXMQcgax& z-qMK5yPB!+w@4#8^Xqeh+DNTbT?j1S-`lOBskVqI7qNJ`rz@5+7cm@fXIS)75_81W4woxRF_ET_E}bh%c?uO+?OkK6J`>>SK!~m!HxSf;*;< z?wIDHoJw%icC~4FyV|t8J$qAldG^wY;7w|>d~$P?ao+>kw*b6#gRo-22gvV39Z8T6 z*3fs@5vrcxn!SiJo&F-qL)^l1P?r~1X^IW$-9@M|seP|@j6} zo5>-PFmH||3+fO_m^Ver#tk1RWi0W%WGhA=&3?J5ZWSS)z#RMChWy*g5^8&+EZIPc z$`;t&RTlO%Z-)**&SBeDb`a)4GF62|?{}!fhDi1(Yk(vbm4-JBj@V`?NF2w!DN=T~ zO0@};atG_D;J1fkUBdK<{~ZBeA1uFo(-K!@KH4|y49t*h<>@PwvKkGw>Gxq0K5@J0 zjp=T;*T+fP0wxmsiEG5dDUSBZ`u-dw?H86WFJTMVmzE8XDhww8s-=31ewQVj@AZUL-Hw;B zvb!3hd=k^;5Gd!kW{C;1Q3v?wjVDp8N%Y3kZ<5m0{Wb|xuHPhai1V8z+<1mfqBovL z@H9JYW#_%tKGMxTa-><^9cFcRnAP23R(CV2*ELM41RtCSq1y zBlq50$B#8BAi#CFW;ca1={JQ%G_whzixa|yCVN+y>|J59cZJE`6()NZlikMVu38LC zb-LojG-Ag4cU>z`j+)7-QTD_sOfJG|L}oK@g~g~)Sz&R?p|ZlFa?B)QnJziyYqS}7 z^2HfgSGc-W2Mb(`%lon<>tK|t$HILL!wZs=mGxM-)LHli$tesY4vz%}PUMp0YoV?l z3p=_hdO`9CELZOsg?638U(ly#n8RH?7U*S>OGk5JclDSToX;JT1y1PFm?T5w>ak!W z=!;mq>JZU~xMsHlq@RG7@Y-bqs!nMW5GLQx6koDfP!qkSuhOVq^=(n%JtW(}x?6Zt zv&uq;)*B&ddPhI9R7Hh?s!&pBOk!VcKUM6}Cef|04OBhTCS}9VDc{TQP?ep=8{ z&8Jr+nJ;plnBti&*%4!mdK?mk#Z0-U17Rv;n1;_N2a7k16Qtn){jivW0-z*jou42QsYfOiw%@ep`C1dcwp3pE}f@P%qT z5CTWHYY6-vE|J|Xk{0zcWu2(3@-n<^ZZDf(aw_h2jiHj!@%M)fnec zO-Wxpwtl22!z9fW-J#vltSAAHJD2ia0(UGqvkHrA7LFhZZ!d(vFGJv$A#ik334zB$ z;PDVRn#Vq{n^}Bl$MnII<{-k4X$W7E+*VeR@(zsk2H9-Rj}9V}Xg#MWWda`=%hIiS zpJ3}{Z8A*qow7PZ^`c34ABo>&9iRx(mio~?QHMdAlb^gF&o$JQ&V#RFMy^3HSG0L7 zJ!r=y_%(h^in`Mt>vb%-gPFVU{|Z>(cPME4rN!yvi!&?Kh23!k0vr|Tz+~V zg*II6;|b(Ev0rBM4=zwPhf!;js=^{L1K$_s_IMaeAMMa6u<>f$1w8<2j@D<7j@;pzzo0olQrM~gu zH0dA7AJQ0#e}`cUXy=goy+Y}W+JP@>S-t>2`w)Y$_c4m|MN?Mii=}*vl>At%&LF-O zVr0j>W|f6`W8PV1fq$4vYTjL?I#*E3HD`f;u1c79qML(Mgz)luF~NzG@W$~q%y|UO zzXIOZnI3wF2_l$Muxzsg{r6}b+R-E!ANJdR=BX+>D{3%je;dw41;bw!a zPk|<>Tf52xXa|mCvcQg5Q;4oS-vhJ}E_R)Tg-6D`v&urVG4HOjz`qFR)QCCn0gj3D zjJRY!U&R%~%!BwxXH^;lRyFP3^Fo3KaV>aoBh^iq%H1w59^MS-tv zOFfdOxRr7B&QNH9L!}}lO7qkSFJ+(gC zxpz?Y0$2A)y`0CINt*H4*_fk_2lsJS$aww?knv)fv+L;~i?QoZ!>LY~)WYVqjOnT2 zn)`Y<<}DQ2n60A7#%vWugc&NbFlJgzUXu%Jxw2n!5gO`(elA7T-Z zv7l~)&dXixAUS1At(ecKfXOOS)`7|@QWjr#lsoZIRy0|Uy+n~N!RRc({)Apqz)G|M zS9`e5wdrB-OUw&T&|(i)aa_2%?Fv`7U0mIs>Y}WR&gUSX5QMQne39ZWbv!K+xTFD( zdYmtJnq3nFK2hL_5IA~(IRqXGfrmoi=$&r}JV4+h)p#HT#x0Qr+Ft??*xo50AZgwi zrmQ`cHO#lf&F%OtF3W&5p62%3#Pcl@Wm)rdgc|Rw#^|v{TKRM+mj1Mnc zKt8yzeCUKXCcnl@9hFNeUz&5BFV8V=ZpwrYUQ?Lxp@kI#zCctjE#L$$TWn(}Oov8o zGC{IUSzTdxr3P`DDwD`Caw>+D>F5Jxyi}Yg<-DfM5`=l6 zc12f3574?#v1_O!=f@~1Rj|9BI7%_!w^&n-1AG8k(x;n!Qy`a=HAr&Xo?RAJS-7xz zB;QxoW5J$r;((NO2!AFDwdy?sBt^)Bs1P{16C47UUIWkG07d$#t+~v2i^ULSv>e z0lt}p?osG6NkV6LX(4jiFmuXBK8Ls7z}50r1Icw|6*ocd80!&&)TF`cC)uH_=)C*@ z1~sc;(Iy9|T2fuQNtTsW90NINte7i8;Fkn86dXS@EZ?C-u_n=Fd)NdHyor?Pv7As! zw8=8`*h~-TqgT1o6S&I9h+c!7G8V}>Wfe)jRo2Jn|1rmU{geEf@L{6`v~HMWlW~%5 z%6dVvM_J=<{yc9`eyt6sK+YNK1mr_#mheHUHE6W0c12T&Rrk}I9HQ!#HK9e*uq@$o zZ|7)jei+~i;SNpZev)I#D*9?B1pWj{UT8?7 zdAkF(c1^uKkO#(!d1ne$i6%1$Nki!mEyAM6;Qdr4u%UeXt)O&DFZ4&LEMBmjWQ7QYVdYIni0#&zvsvaSEpseB% z$TMR#!iA62mHi~!lvV5mc>{-2qYg!R5u)Ix!+ML~XRl#booQ^9bINa0M%8s~GC^`f zS;b9|?~E0yhdU^f7?<@iWf^dP2pkh>j!~q`YDnrLKeayv?IO%&&Px#_sB` zD!G2}^16QXa;_h~oa@Ig=T_^6U8}id`!^n}ZU$=yt>j5HNroqr*j*)9-3->c4r$#a z8MM4DOBTZJ14Q!**Suo2V0EvC!RltPD!tvkN^i3RB*lRoFtgUtGzYre~=uks+$ zMuwdplJC`nFXtBX0czJ;AJ*vp!o>jWQCWV(_4!+#LpmB(6rhU(<<{-uq`F7pr zlUyzSh3LFus+lcnQ!hy~b0Rczf@aofXPqEP!!iwe)y#SfiE=KIWMv2JT@8(&IBw6? zs_cNhYCH$eTno)&YB0t98KMRi+Q;#~gvl)G(Lpl5?3%971z$Uc>(Vs-&_p zv@h(IeLDcC?3R61x@BJ&mOh5XI$+;&mC>?q^#a_hiZQfr^}!Ev*^h9|%<9t+vU}!S zme@n(JM$zf1KU?6uzkfp$mNuA%@NAQ|`V2~QsW<2fhf10b1@J-oJBb~B3 zbjdP7vaGBk$uY3Ry~{H!%vn7StMBhnr=q$}Q=fx?dM@TTk+w2hCG0D+3T|OvnN?g6 zG5G8yaUVV7`QRBZhP?vA*Kp0ggVO&+EsMkt0)u0QxQy#C-%^7;eE7S8kfL(E~*NFG}m>M%$b$T-E>>)LMltBiR! zmvx&#i5fH4-B82$QD?`b)*P`NlX}yYj@dAm>rOX1W~wQRIB4iX!JTRTMd& zsiH`Hprc1DhSkQaTbQ#lTg9A}*(&C&%vLdHWwwer@$rG?(63p)_w~qlz8V?N*CONj zN@ToLXP8UByKeCaw@hzvttmVsS&_~g)!e>O&Fvf2+|G12!~J2IZa0%lBuhG-^pc!Y z)(gg_R`u_#1IaaqoB$+QvAaZa$r|po=L+(UN*a=^|HJ&J?8Xdai?Vvlf0X~a_{Xf( zOY#&f>D0$F=O|oRy}W__o8Xv-u%0O@%Uybbb_$Cm?UY3r$sVXHXFjO;im^!UDQlAC zv9iWVuK!D#JV}yyBk+DNsVPjdldNH?7M9;fgk=uNDc>#2m^n6am6w=E(k*g~tdoAB zN*T}BDdSNoCThm>waR!gwRWKnb5}M*!Z`HAP@0jFW15=%Bx#7G(`B`h{j%D~epzi~ zznqDw;rB^5FCD|e<~w=w>`(K8EaEDkq^wzG;f*r?wq}+6c3zpUYgSoc++1@8uAnaH zCduyY>ajpC*A$+UtZ>z-y6O$q5I34*7h&^1%R+o7n$*Vi5brqm~tON zc@~P2FHYVsptLpEDJ+uv%6fhT@>E&nGmzZO$lg_$%RPQyyHc5C3ldjW;FBPyjI{)k z>7DRli7M97(8;^G8ln-&U9cpv=Vw@0z!LzOrQU(O`XQUXAUXC+WOb9={c+BcgOQgt zEF6LMNdqMKSZ&uV}q4Zl?ZyV&ku}Cibc12SbF2NL4NH+Zr>&ctA zEhx0%D)k!L^55ABGv5UP9%X>%HFPh+&_yTn?K@wVRVOD}zo?V{YyJGRUzn!MHv7fz z8um*r#s2jN0qViLai?vOD9jBB@pcWfqY0_tm=h?RXnwpPdC-^(l_g2rk8*MXSIM=x zU(Q(%9%`-SU&~46h}0s<9C0#PV2(&Vl1vC!kA?H!rHB_KufcNlSg1wx1&`!Cuv|Sq zI~+5IwtsKw-i&TlKd;1RehLZ854f;$iT3YTg?kUZTkh#eHtK*pNRs1>WYR`W zGe#P&gXHFl{k@Ezgyna1*VOdMDPOByZ>$lwoX$K5Sar!ik9?$@$dPV}Zk++!)jRy}8^{X9){MopDEAgPb;2-oXC- zDkpIubkNLePG;intr{jC2O`HD!;Hr1$1z!$*CFURM;i_;V$}LvuGKfw{~AH=&^&ui zl6fZEKTqgEt}-&7IVGoj*PHc=hj?VVJ#+lcBH>JMeF^ZtE-eW&KkK{3F@4P)GgWVPi-g6V?@!q@_w^B$uT8@Fumdl_ zWMvxycZa~;F(VH>VE63@AKEc}aK}uArw?5t7OpY)$ddRyNOquXm5lj&`+v!W2x}Ll zP3Z%^R#NMxI#qV4>3@*7mIOJRVPOtTS!|P}2Ckm3gJXUZEgt=Snq1rgxofOFkS$Q_ zPT@CJ+d#LQs*gdIjYaY;SXoQbi&m|OVSLMm^Ieejx^gNufNV7u$qukG{8T?!16pJneXC+ZoD_7Yp{U9PsET%Pe2cQtRW`e*I*6P+UK-gX~6ag||*WV6bOo;W0mHR+GJDs1xV=1rmpaD6F>s|deY!U8&M z5>>7a4!)<39*Vi39#tD~{eEGpFjshhKS&oH|Ju=P3fBa?I#87ZjvPtZ1&bY29=bCb zdvxX)=VW4I{rLI!bNeoF&5pMO!~b|V{Eu_^=U6WdW1iX!l#FKacF-gmk7G1B!Bw{G zCol|8>&RS==}HtXOvJn=Xx*tOPf42F$5VmNRK2ms06bOTv2&2kI!lbTf;3rUHQj+tG2xepIfYAV#+uxNYPP6|HfctavWBkA2++U;!Ha0Up(tHP zAQ|<9KhV*EkT2o-KtA?pf2#AZNoRkm^Vt`*ymftz_2bvqW-UIG`r((b<&O`250Ze+ z=PA2D|9RPCzq3@wf%=Qu?k{Tj8=rFC_v^^I=ZjiCO*#LyJbZsYtMx_g=cjT8p1i`Z zfBCoL8u_9qc=vIw%iGCmdU6`QRv99B55L^1_(d%_+>`#f9FIjlN2yegJZ@iquTXZb zXPM7ID%+69-RKadzIsQBum;a`a+%h9{eCT*HS3DNTE(GYX2v+-(-D4S?m+i zEkpZ1iTSz_G9Ia{GG+1A-h`xo7^1`kpTTP!B4lHf33Z?e6}@#VK`@gyd$8rFYQ`h< zA)qr}OhaN%t82PQQk*DFX{VY6T_kCuB+%9@3ubR0l`?yysqq@ROsP&~DnJ1V;i4IH zh7xne5~}W56J~TPGCV=>JG5qsW!p>sT$1tVBznkgLtzl)?qSCBRmgZTOSU~7q$m3- z2#XqU<`UMPr+~10`NF!X_$(8B`5DhwAmjNOWISJmjCWHVL~W`tg*0}99t+c&+oL3z zb#iA$P1m*C_EFJVO^v=fkPM$RYy!&?D4PEa-m#|P7&SMI#;DPXYBWZT-Xn-I4f&o+ zn3)bB_DIE-DgLecs2p?uVTclIQU~-#mD1G#l52{D8>wY9*;14;UA3&PimG3as*kiu z7yBuP*92W|A^1Kvp|}Gj0plhVH+Y4`&C(;?j2h#<)IAG+J;(-QaZ$+?rC@PiiuaTW zDbfZd-|3Fo%TUReRPvE3`7)ICGL{v^Kvo}R?dp@5zE&JqY11<-eW9#q&npG8dMRs5 zW%Y)@(LXT|0)G?&e-r{okMo4U<00^P2s|EhJAo%P#N#9_>P5<0QtuQyG2mG`MfWZ# z%YZe+=Jwmf^9_`rS0lQp@rr8P6>|k!FDptfNz?dwXm>O#_BtY#guU$ujLVyu|=h{6dVOJTwk0h5x}#5vU{yh;^auiExea)+^EDCZFPUImwl z@>o&IF_c?0DFfYNt%nEBRd93y3Q_u)F(--=op^~dsZCzK0l9?h-GaP9Oz0!6_dMnq zLYtYlQILumiY{-=SubO{(3Ul*kH2EZBEj{quhHB+tv{Fj#lL+N>4m$6x%glFTSI4E z$Mt^UFZobG|F+kMt2_90SG#sJ^&X;Xhc)47@J<(=$tX=gk$bb{nPwD~5nzP`xSO|tMn z(e8mK7u5#FxWCi$EHSn$382A)4URKTfNmhc-RMC7Z`Wnos7dJUK?c)e5rlOC6 z<5oUW;wda2?Y6lT;>b(iUTUYjE)wG0F1LLg*CTy}95dD590{b+vJMOEFExcBk`-gX z@(jlSCXdvk5>x*;mn~?~}2$OP);p4~wHXkP8Ok0TZO_F_E z`(v3TT`KXIuh!Y;qn-Uc=#RzF(CAc06w8kf3ac!fs@{Dhr*yP^`8JqIUWQpDXw0G> zok{xEL6-g@v#9UU|DKc0xXP~n`~L&kt@BMEEnL@J>nmXDVUkEgG}DX!eEw^Vo`YGE zZ0){@8SiUtyn@PEMXF!=#axk$R|d`SXFS?84Vy9^X?7%80Fb1eSv9o~M9k1^eDw9t zcnr~-f0P4BR?f|^Fa@UQK$7aadeonaIp(*mS*amMl!K2aAkU0NvIDASC;dA?7ghc7 z5=fenRU`e@s(~qBal9Wh zVZ~4`Fg%pB4@Vb1SHXx<@?$IS0>lKr2g*Yg+)vVU>5rjo;yVJ{xMqjqL0a;CzIex1 zP~K`@#7n>?!tWOJ@P(;J4-;J0Wj=Jmdr|j-&;>(c!bgPbfnx3|n=LuzTNE~l#>sCY z-8R0$^cy9t`1~e`OFO?=f}|GstyRMsefg>lRUhN}{lZ@rX3|f~FQD0pO6+=s>0?1h zr!EdyHpFy=LrhmV#B?=dMrhI5t}7gMy24SXi=)o8jylojFZY7kd@z=D4}vDqJUv8{ z6I^9ZA$j!kxx9oYqb0O1U=-l1>Dsn!<`XV;;`1a0I3d?7kWaV?C8vf~}I#w9tS@2z;t5n~_)y%K)5E;8!Fq(aMx%iB@Jv z8#IN=Of+VfJinkumR04LMsv`_OdY0p`Z8hc+y+XMx_zYe7jn^d13JRqzJ#B|tugh^ zJYZQI%+LDJj!E!EfIH?*;bm9N2N#wPov`;-MenU@dT-78;G%c@7KZTmH1}nXiUkY8 za3`EGp&oz!2BgL1xvxS(z^}ZxNb=Ef9V)9F0+(YEX@Es$#3WG`6gWCo&H-gv^KoDg zQSumq-MnUXICvDH%N(bsvg6 zP`d_v=!8XTLx>WyY79-LP4GF$3uDDlZqcL`BQ1wnH=b~;$Olj1St(Tj#wujftJ-iiNXY_J{ z=XzJ*xw>7`?ULS@UEGg8(rupcP^0lsqj739r4Kd6L-Emr!&4Az;>#5OPJL7+@Vwep zj@dOG01py)U4aKf;OJ&i2wV(-iy?6F<{FQLz#}1Wbp1q)Z6|Mpq`AF|vKG`kUEFmu zw|Cv#2#u$?{WkGjLOeHcm6?Vb&#T4*G49jTO^{tsiQWL6Ystiq15*5X=DHAcxnWkWCm};qctW;h9_S^8OKb-=F9l(iP4j zUF_^OheSL5J~TSURl>hD%YvynLN%ALxs!13M`)sCiB6bxz@#L^x_J?$;~+hqwavhs%Bw((>H z^r79r;DbA6%wax!7IYsy`2d=HUzrt?JTIUo+WnqGFTq zwiChvXZ3`ADJr`Q6{HhURa0Pu3Uug-X@m-xtmw*N3o=aBFl8O7_~@qkyAUN7?Q=9K zs7r^NK(-kxhH{H0x9EhsQ0NrbyM_N!qlfMu>FPK-du*b;t@`yGREwe%!{NCYb3+JR z=IqdbO-HzP?-Jl%MkqG02My)DoD=qr^B!cUxwgMN1>SfWeDH(i7!LkL*hQv z1RiEimyH!mg+^3m(}XQSqA#RNSwdCY4;hFlwt*Db$Mxss+~F6sU)25`ySIESjlUhD z&Ig5IzY2f4|4X^R?`2hn(_HDtN}R}_yrAE;EB}@I5*y3*7i)y?|HT@9wvC@= zTWcYB9%Po+!M~dYpI>O>$JL-9zoJ(0t+XugIiUUPpMaY}HZ0*PBh_&Y3(H{2U`ldL zSdLjF@Xz>dChFC0g^^YI5uV(Nt)r9zC6c_NqhtNMO-CmNmfYQ zov9*mcczNO-IU@chS)z|^|jAl z4DwY^d08mLmc#kqQa|&t-H73XJEpI>W2PnyN3<-js|;^rl*q0qXEI4vjAa`$9Lv~w zq#pI^`DeK@!XjBx)(}Y>-o{dOXR>EI9n_QZGaeNnbjpqh-A=#AnC#mttea~1t#?OL z?^UQ?^r8DH#_(bzBNH7&&(Ne%oAi@3l>V4sE`rJ9BR_ER{;40ggjZ6p1K@!WcpwCh zuAK=?hr3f^EYzc~OXt~|Wr0~KuL)3vx2PwqMUae|ut-{elH)AwPy7EQ_o)+cfVqH^NX`F_#Le24|HumNYcV8FEEAR z32!w~_Y2q{>qh1q!G+~R3oE8|EdX0}AnFN$dqUuz7;qhci?}BINvp8QM>m(!ck?FE z7u$Ws5*M$2vxG%;GrZNJUK@(p(~7F?xMr_8&8ENRG>>KnxXMf4;e0j3LA+DPh9M3Y z*1?Cu4n7oi@S!^N=6kq`#IVl~g?)Y~?DJ9QT*E5%dFc@}g=wD9N$Su!45bvJlnUN| z{{8VOP|mfh4U#S93MqFMC)r@T{5!JsB`Ez z$%kOMdMzkC(R$BIAjgbFl5UapM$EQTXhQ+nLuvp{D)49wr505iw8=10OqZyKxOiN~ zCZMyNg>~H->>}CrE4f~-UJ-@kN+t`9|7TuP4#1Fn1eR;e!Vc~#q#j8wzGczskM^!9 z$NL5>=p6GQ3S6bjJ{w2;155(09t*bg>++`oSI?ga95WV_C-4~EC9f&bNpym+XnK>H zKG_4ZXsj~GF=M@jA*TBz)$GtUYV?49kEf)w%vaMfspvbX;Fv5}lzM%=Ts>bi$Ba3! zU~f9QTC1$3KoRtO>o9z_4tcUkah$AB2*yyJ<%&KE^=Cn zmOWBgBO!2fEz=Mf@ro!D3j8YO_-UXl;VP5WF33}3#Za0tpI+!x8x?#FboOT1uX@7n zdc>@(q|1g#@hSRmd(GKr;@O^ zRZ-B<;3YR6Z5Qn&H@l{E27k$UlB-d{Dq#V^-C1FIDI46;a<6quH&MnzjmATb#;H+f z6HOTp#gE6t_du+PAEEd~_0b4{Cw0*p9e0ZXaEZWk3S0_-qdO)c@IVMW5CTV^-GsnH z1fEunheF`!eiMNwG{i$B&Fx*3HKDS)%5b;2J-WW3ECbefn%i#^&(~1?tr{^*jVD#( zXqRN`B}FNbG>u0?yQ5jbhZ2Vh{FG#)s@KJ5679x{br1q`Kr2JxYA$Q(pINEo8;4IWWa>nzaQ&NK1E4mbVN^%V>Sv_yfu&{3RNZwaR z_WD}Md)J+q(9Dt1r66@$R#{!t$z*j=R--OZx_k#Dbgg;FpfRFxbb3IOV^!~YEnIL< zUGY4Ia*HM_K;OajZs9L#^i*1{4scNe=F#5Px_a)VUQq@n;a3{~qsyrfc!c9`odS;# zcuE5o9W1^xV7hW2F2U;nEYd^z8UxL_()#};dz;#<9c6SLc!ZK ze?#KK)l>X>r4AgthvBMTC$Q)fu@1DJQj}57c_)ezz40eX4^Z5jB1IJDaLwL~`H6d* zhMWcaWj6nXvUwk6ZDQSqD$r?iBkhAF+*=dno4JE-pf1iGzBWm3)4cY4h&1#asA))# zE}`8I3V-qCw`uspIx2kNRgj$JPa9zszD>iQHbXJ_+cdthiEq=K0dGoEFM5-6jV8?f zgxBBOfIgv8qAR%9sA`Hud)5L*u}xg7y*k6+-l0yFS7-Rs5?(FgD6vj>qaO^NkP{O9tN#0S=1?9uCWVX#~~zT1fd{ zd|52Zli;IzY*4rd=hWkx@U4bsR6T6Y!R47S$+{ntRjdcuXsl(BE6VC8xvi||>n4*B zKbNj?9W>p1U8iD5i+8%iBm9DG#e$Xvwb-=h0dEx zi8eVwFfY=BT8HFc|L07gagt}sDqetmZ>&kYGW8l)nZZadC@Y#%k0HK@YeFwLMb)>^ z#f6N8c~fu!mz-?@cG7_r8+DhSA9(H=bNI7N-MKIreoe5>GO@65J{M~K-#K?v=v3#K$l_^ z;h{U_HW^tR*&QPx{? z6@*3dL|Mf%kXOc=Hk7EliNYpM!Bo*~l(6{nkMsbxbPJgEM@NSw>-QCU4=G`&jTa%vCUR(*E^N zHc{aU?M|y{cREu=yVIE}+MUi+(e8Anigu^a{zlrJSJUpins(>av^%e+-FY?b&XcvX zEPAPNMK&dz)2R}H{c1MuSF>@ynvMI_Y}~JA<9^h}DJ~GX3 z*Mun}%rIqy8K#Ud!;}%GB}+~vB=pK`sGZy%gxU!+)J~Y8cESv`6Xs2|%f9a5E0^(n z-7=o9TE_D=%Xq$G8Skcgx#NAlVvb48I&_ed1HCL1!Iaw+YWrBnEvd%>2Q#VXTi}HF zCOBryh7+VJyW^K^*m;&W&*4$n(_|Ih&Qah5;A+x}_DUJVa45hm@iIZ>ElA_?>6i6mxH zw=3u-Q|{@^bWe`e)=OW1zI^9FUtVCyWGGy|Q}|Cga}rlMbWCzdSSU{T3KD+$1iq9@TrO!BiN)RtUr8hWOI%XAxFF&oKaQysuJ+x!u)D$MD z+oZa3f~2|f^Wy?FGgk^T)J&M6X2SIU^CQZXzNZN&D`pm&)W08*qy^%jwV7ql>2lhf zW?fm=U7KN{>CbX?WUqz2__6k8`D6nNJzz?``~7*7#lOt2B6o521ceJ+rCvCrNIizy z(mr}1g8ulDoh)psKc16hzEwn&);brlu=0eaKPOoc=EXY?&@-8pg2%{@X%9{KoCNhh zZKJ%-Yml@;-W+H_bf{gzUt?K@uQ$}^!@kcGUhW7{`a=|iJU1Zw*H79G#9=|>@iECI zWfe(Uh(2aQn3q2`DLLiK;#j_8z_BK8e?PCWgsa?`Y=G?insIsERY`0PMOq)a zZR}q^c!aMry-B`SRzKw}s44x6fpz@_SY_5FyX{&%Jx~j=b1Hs-;^$QSfNyNVp>mpf z&wy`%at=)|RpWkYOvfdxT`xiui&0Mbk$MER+g1J2B*al*0rN3jWF&Ju6432 zzv_+*lGB7=aOjRj+Vu|#@=<6xc=#W)W~OaU`8q!aR;xOr7+M}p0v{zGXwZ8Z^Q7T} zNE6UY@|!PBR zs4=~iV0TZ55>tO3P1aQKF#TegGaN&C3>TKvl_iqa^P&$7Ptf{OQKI>Ij;iyzDDNh@ ztE^XCx?d@)J7&=ZfTy&{QKC%^N%$5T*IZ`Rn^9EBww95be*B4OjyHEKbjsJp4pOCYJaoQtBo_g%S=?5Gq*7xU8dn<|if`Z$#TER_F@ z^3PQMv)c%34UBzBVMqUlmc1_JC zYhJd495dDe$VFo%+pNhvK+jp2q8+b*%$?F?j^=;ZBsvdH74Lk2@==Hqy?J;LpgbkYf#xJq*+S>fm5oF} z->cr~N7)Z+wVRBxA6m~D4SUWgd(InGX*BFPqo!X@#k70k`FPGO0DK#P(@ER{l8LkooAX?DW9D_^SL2Z_rN>G2{__``57O` zF=I$`K)S+JKHN-_J`$Xb*(%^0voY{Tftqpxgh+=NsNBrP!fOn8@>e(ZK^~wV3aj*! zT;e3I!g>#~_|yC+VYU55PEP3as%}0*tyLp}25&rWT34Gg-mhN5RyPn*M_^*W6UdDPNIRDx%pQ9oDspPC*|tI?Tp| z)0jRAMtUD9aRTtsvU62FRLWVa|G(o%O!qZU=xxWmX`m%@?^aowjd1v@|5rI;_Dmfl zySA|C+ciuM!Xmk$tbUSIG+|n108Vsdi4Ko!QgK=!)fu;FVovxrvc67+?Jw%&|5|#K z$Cm7uRAZ=FW$qL0Ho5<$TqDrUa!n^1$u-|Vmw>6Z{f|ipdQgThU)zKctrIERqp2HR ze-%-+jB9pOekT2>{05qx>7C7ZxS|>_qC=LnV~&T5tZ^=~?Dk|lT+oakVhLtF8lV

    tBa@0)LQ(W$uzx(O$c2%;U`j(Bw+o@KlAz0Lx$_mSL$thnWF8Vrk&Kr9J@-41z zUT1;hpPYy#IgcUH)nj2L|KH_}1&;~P07trdEYQnR&(8{1k1n_M_*f2X|N1UpfnT?A&Bi0rC*UP~ z&|?!-@2LleOlD5SB#Q+#(Ur2Vt~9DwefL%0E|P~}-7Wm2W|f6gt=CP`^oHL}`vkoU zs=}p0N0Xf@o@`?`LAPA_t@v z)1qiBD#@gfT49i)o#G9Yn^q+UsS$&a;MS=SC6*m4XtJ+@qq^>*DizG`^x326vy8`~ zpH9noj2lPnlwE>7PoCtwFHTs#G-3I|5;}`7OM1rktS`+meR+=QOLWXw2z;3p_U$1X z1?PB%g?&xYGD*5!a)f$4(G(r*K?kMN6Ecai$`~9as|nn$!2Ka`G+a(u9Dff{${|YmrdG+fgF}?4)2HCZ1$E~TQBI8&(}k_qwMj3@U1gys7?wZU za*x2aX2v+Q+BiBEj-zAjTsDqIZxz~*@Ew}?uShN{YiJMTfw4^eobrtzFo$55SHw96 zPExWFX-kE_BF>?)QuUeACWA!TH&zU#2URDuNf%K}muP^m(E7ga&Hl7T_hw7_NGCc% zo&v`bMGqoOD9S*X718-41Ri7tmKAuAz;iG-VHNwG0n?R@P!He0Wsx4zZ}-xi4z2%_ z>=V+RC^87LnH2wo^nEOD8gRWYJIMG3;53O3SDWzbk}id!n?P&O<^We&L$cR5sn4U? zMwAVpNT-{h*+k(8*Sf-|vg@6_olefF{W6>XLfKroS({k5p$hbnobC6)5{~;5<(s*K zZlEsC9lkb>8MA87^C5E1ccA7RJ$jCIKaekUe=z%tAI$#ngS(%VKKyW%KU|^02VMn9 zQ2ulsV&or#evcn&k!BSb{GhaNY~uH#n}KL^P;|NY1WouDLGGzzPGwb-5?#;DL&_$u z2~yq#wnP=%K}WO4F3~3YL6c~gKSPsqTxCpsjd@@i*Mwn~D3^-TQ$*`pJ#N|a0Hj$I zUG#>)LjZYbqgPY6+ZI$&gv+CN0{+lebr&E)(1kV2guGga$~1dcViLY7i^LW0*r zH9OQ54N41|OsMY$!)QlQmeG1kQJyi4h$eqFK4vjJI*ByPUiKP^zt6RZgID~(Le{K1 z-fS9D_(xS_6N%qodDxe$ny|0*?V|8o64G7eqsGv}z6g`>o(T0ZB>8krh?MX>n<_|O z^_3bgu>MU?h$LsisM9H|6q9#nSZF}5$m#b+kj=(g2DzfFevI33dN1{Y4{R(z z)`n^{KpBV18axA8ryW0fGuVcz2ioL0$wOrok3gOnE2eP>{F1 z{xWx+eF*2Je^OU!StxVL59kCmX+@WjljJ<={2B{~gby)q1BFfHK<3nVE|BMog+(JC z|9SqCuu4D8$(FxRR!-QzzQ(>R@pWOssER~?}4wYsPez}-Q3r- zX-f(P3KVFu)M`WjKxhkAD6~KuQb?P$ByDLDlC+IYlaQo;K>El2!HTf_u_!7~R{K*{ zyHd5gl!A%~yA@HZ7DYw3x^+cm5fN8h+2!{=XXeb@ckg}oy`+Dv?t7m$_sqXDXU?2C zbI#1%JH4v&KHXA$cIbW$mbNK8h#ICr%ZK_fUC1R=?brN3)PV?V>U&EjZOaR1gi3sw zZfi>DynmTOsUmgYA^n8QDWDL~`NHILq%=S}k|U1luh8RtEy&8(nYMPO?_ zygp1IM}|q{$S{!{+1omCOgCI3qQdndDqLG0=X=8}(XS?i>(kNUI(2lo-aOxL2-i*L zC&Lv}T)0+>3s*^Tz2)oQdVLVKee1#u<;XBcIWo*rj_fT@QD{%x_`pXlwK9_lm~+O| znfuF^VYvaOSL53G>bjUZUtJed=d0`b(9UCC=dsiS_Dzkj0NIoW2TV0+4XXx`onqsvGzeH~qUr<`eF|J*`O4$4 zs_4=H-MM7%V8~*NGxYHtJ85gDF=AVyMr?~1u?@yLZ7J7nv<=e?w1kDNv@l6LhNApm zC^YRfT~a5Y<^MwAza?OyaP|%3A}uWHQS^w@k;m#ln9LyOq<)GE6F_l7fmBCvmLUqt zgDqR*Cd#dG6Xn*piE?Ysi89*8JElob*f!oVE!xIArbXL$$F$zI5!>G3>JSyK4N>9B z^4KpAw+$N;(YmgS)^(lKwZn*yUWm1=3-{e2J<9CBtQWA{ESKb5Y7{KCNKPjyS|q2F z6fKhTvlHPWdAbbYVi@STr-pE$Jk&Dm1J>YN){Lv_~S`Z>tCxi_yp-ldD#RjeA3 zt(|7+p+=S-?lOx7HPOX_ny8+w5j|UD^lZ(O8hqMDJrr5?k)19hs1Z5UblWAwrLu(B zY_#msnOdihx=|s@qYDm&5OY_DQFCM%d456>MZaf#4EjCmW6~MUR}lMNhVIn0Sf{BhSZ%4s*tO0O1;JO1K`I(%Y6m@WRy~ zO7IUon&K(Q`zoHV#&s}06t0KX;iAtW{Q>m(OaGf%Yhs<-+b)3-`pgdY?nY^Fzl}Pe zL90&|NQccd`ecECRVJ!VK#_i+53?qZZOE{6<{nr9#vJ*9CCK|SuyPIB;}y3y1*F%d zKXr7tPxCb#LhAl#>Vb#j=8=cZJR*FDXyyKHkjSG99=xa3dzDuk<|PhCg!!1y*8(Fv zY>Xmqj3RE#Me&;<#JnvQM$M67=!y$;;slmJS84N@T_@<7cohyNbb;wqvTPIDUYy!(`?8x?9gCc%|>B;It z`jb;L^cx(=wMc_)HcG(FI*RZMe4ovhFKdMJxLPL6cSMD`p2r0=!}NqIauFvZbccYR zM0c9@w?y0DBJJN{8m4Dc+q|&d8LpqFMjbnsSs3NXLgC3FGn5v- z8W~DCeK8?Z>LNCUE2B86P2`^9Y~vM_jRk@mEZ7=nnQe`;%yO@vL`lD6T9ouVrbS7= zV_I)X$C5`FHKM|p^H>-O6ODzDDB|k`@k6F>bFP96*Ihk9KcPm;HP~jN^z308Qr&;JR%ZeAz|`y~T!Zy*g+~4HM~TB8M3b zJb$VNEA^A@APGz{jhQbTAEoDF&L@EhX3m~3;MQP136vQ-WWIpAbrj>1fN%~MbV|3b z(FP;ulR&wd%H|6=Lq~DGnL1!)V!p6>ie@C|lYlTD^@^a#puT0?kbzC0%G@Ux@bEb%X;l|by%BuvtOGkMQ z?(CGnLndF7fR^r@$2?<5z!^J@a+g7!a|8&951S%dPP4P@pw9Y+e&+u{hcSBiSe?); zl5KTDb5tiZi%yuP6&OBHB=YryQ2-jqPWa47^$k+}lm=A{LMDiJ7{od)JL1X+;zfdZ zj6u98idZwSH;7xKh+CtG^}=^=5YLGso)bl!b36$vtRpi=K-=rpQdg*NI*+*O|;!PrQ$h_u-MEpnyBpk z{emtcvk_}$nR4C?PC4PJgmc!0<_(T~Ib=<6Wb8Cy=~7Tw2_FhkhmR=;ZBLjPa$dMT zsn-n4X6u2~C@gSj-VFEHib@iPkkI%mLTQIfM4-I&57H zQkS$Z4~o}BvE*X>eY%LODB@hYtR%|dLzJjBX;~hp*Q1E%MG?=7BF?GHqljChh+CtG zbDBqC#4NaB)EpT`o|lLV`iG1-%@go-6ICbm6`Sd%u1AZmWqwWr|6z^r34?gCATBkC zb()osuwInX2Mm@)0={aZ=0wTMY0Fe;8kSjF?$hA?Hp&vFpfGuTD6&D1TN$*N2SqbC z8(pC-99w<3;scsSnJ2mX!!spE3i4$dd0v7NMo-@))N~8|^i4t?HNw!{Ahp@1G}uPO z^YA6zlvgd=qjlvJl$WDea#h?1(|VL{jrAIpfU8bjUP6vWmu&~?+p8I(oY*Ki)HvM z%Ab}#6zM~Y_h^D%&`;0lam}X92(vnp^FZ1TUH%QzK(qH&X0Wu%(AZ-}OU{`yinu|B z;V6T+K@jgUh;>go<`mc}TNDf0syt!XfiLC23BnZjO&dJ$xc*s18aeV6AWc zcGDUSgd6puE_6^ohdLYN(_QNXIA{BQ&80(zTZ?6_d#X`dIS0!!UB@>4#7o07G{Tt% zan8XaSUNQpsH3gxdUW7^{iIKH-N>Kyl9-2W%6gR|b&DppWpXi1NU&=C`Y^IQcH;!g z;ju&5Aha+$!qjkNu2$V1;-MD9FawPk3P*S8awp(U?~KoSNx~C4!;nx0$gCti8O5PK z>-DrwcrJ=VKI;{3Y@VO>I-o_)PO&*f?^RtyWFH$txtJY10oV6^9 zmGzruRT+6Ry-v=}%jsoefY2FB*FW^)?{cuqU z2;WdtPI(X4Rt)Epz^ghE`2;M|{N;Sb^6I5|6=%LMSvbu3chwgSBEI6%`v^TAY2)8<>FAdE?z1K*T#|I`ZzLNBS-eO&OrNWwIRb}RsxHRb+bS~ zkzR~Oq3caESI?WFMO3EIJjSf>VYrc$Il_g32JxI|U30=5$YZsBpsr)6scW&+)ohxY zb2yYnvE*X>1YKmNe%ezQVn8{1INFq4IM--guj?l?gjiSBDs7HhrOjfM790K7Ed6zh z?mys)+M7AG&3zGy<_JYk8dX0>>S{1`<+PCQk05Rp#JddQ)+l0~W;q#FQ&Gf=qKFqo z5$9Yfk0P!X#5)be)ltMbmo5ddeS@-EKr09}QrCT^t{Qnw(y~40x|7sp5u5(BZ0}2d z?$-Ue&xr0~p?I62IOjN&(k~b+tpZw#=SAC{Q!3=sSEXi(Tu`pTHWO7hLCde`p?o}C zU0S}Q#Y$Vgpd}MCM~c}e$n#R~LbssDZeJKVqQa>2*b|H*UJymRAc{EWBp5~98b#b1 zMVzw>hiOg^xBVrEH`pkv7!(v%57O(Erbw%R%S=>tR1k8K*9Thm>k3~o6)zs9>lv<} zd3*u14@E}lSy-lE?7fMdHOg2(ddbN$G|b9Hnnp2%S)j$35Y!wg$j4~pd5L})J+?~( zxzLX&0i`~eCsLbjN>1myQ#WOeWqY))oZ71=ip6p-UL58=sFYmCsp+aeMa4w>y7Y0d$YpLZ2s&_U^hyml2I)?V07{TzzTIDIov zU{~=j&7~cNTZ?6n;7uEqONmU-bu2QTUzMXv7a1%$7jXs46paOnaqGINI?$}2v_sg# zyNVLiX;ap#6scS07+WUahS&+~`Y^IQb`_-|hsO?KgV4h42vegXL(K}?NHrlIYB3Bm z(1@XMbd4?-*;SN;%{oKOuA(Gujp9(dinr^8ZBZPus~B!*jvAmhO!?a~_S*Mc2 zY5JLm+aOq;G+3@H)}@D9ECSjV<$N1f5I<}X&l#u@K4cKj*{#7>ZB)^Xsu8xXoZTvQ z?J{-Ele#7t#Pb9!*HOG6DuF3BpMX0}RD+QDhK+htgHY=H!(m{dyx2s|6VNuML1njp z!@44&F&0Zs8$hr;sac|SnKaFUC$Ft1!4!})OT2=@P1vm~mCEyw!~MF*A=8C9t-;rI z)-kqIqCL=%i`E)ly3Jr&e4hsIw^6yU^r47!f_!FdINm$3qDko zi+~y}a|63o&a_kip`yAE6-l^O$9ohn-(_5;KWrdIf#Pso+KT>`_q zRB=S6wo71A*G{>28<6J{yUPD0JXW8;Nf<=|Hh*BJRz|mt-LX8zw@A;K^gF z=ONwT9r}qP0`4?X`ZaM&QFyormffaE&gHdTI_q<$$RYs`n5e3Q8Z6Qrf+HZ{Koiw4 zLW47Glz^5yi|*5@J4~)c&uQ=l6V+fFsi1IEg>DfJP$WbSH&_-4MYj5eBUAl;&5&YU z7mT+J>m*QW2&kH=!73ZoslkW!lZ#4Vm(BO01`pY&Tuc$FUNSw`Al)OJ!0b|~5n84! z6q+6~bv5kNp!5w29@J4*u5(JH)X}DkV(b>hkF%*ORqNXHlXFTy^h+L_g`%gX+Cl7Y zm%t1gnc6OaDjVr-mw;7sdFX)KH3m_KdDv<9MT%7C>fPPC$R7Q~WH_To6{^+GJmyEi zBA1+wLt2c zY3f=aV5N>?J52&rHlKi&%y~kl&<4R1aEzgRfq<6sd51x{#gbEN3$LXUF<6}KLv@P; z4@c%pPe7=071^gdSSrs$=nm;3Zy4FgX_OV~)=V?~R3$wi4b0jW&n5BA%a%X;H-Wcj;zY^6GnwCGD(qZgbAr9!4ecx$r$4>4e1xb(CY6n^QQW zSms5s%jF*w0sVv^c-ti)vXswI(ao1jDuz4e-G#6l(U9AXcvxfGZJ3&~ ztD{Bgr1TR8%K`zPHc>g3Q3UZGQ$%kb*ba)AmpZG|hA}8$FDl-pu{>!iUMQf&l9Mlz z^+k<^N4f-@)v6Kr{$2A;3Y44v5M>*vpl~w<%gctq=GQf7vE)3|BQz8nT51IpEGg%X zX}O3g(#5x~Q8{6m2>67Fs(o662W-?--SBDp3G++9S`$^9t9nDSX+`}L8hqMD<&8yG z44dPi+xtR!++1tu)iveA;&2%p;>tza6y5ep!-Jfhd{Jj@GhMVqz)llY+oQo-Y*a2< zqKMxkh%J`7e6iRf`b?)S7#SzJMYc#z4I;GKB2^Z@f^yfAvqsp0xmOAwF16mqVx$cTVt5}YjoDT zOp#ifSwZ0<1K+FShv_GVQ{`F}RimGIjIah>`Xz&9j(`(xQP}X2)D7ztC?C_z<1A~B zMtHkHoO5hQ*8B4>vO{OxXNyE>%~|miy7Uy&;wHiJhHg2XD%zl!(59b=QW5rVxR1h! z>5#WzmM>9LTo`pehry$`@0b?FeaEyY?%cDX;C|V#b&jA8h`^hgH^u7}2k=4bQVou< zQEN1~!9>*wxXnc6ly>Rh7Ys!?i!9TE1(=-U1@-SR((TKO{XC5mq zl66P^MRw|}yYnxyPiK`DlNg1YOmX2h=Ob=m+-zHfk#l4idtO$^b0N~v4TAhd+kXPS zY@%vk*IstwbWhdC+~ z)f$Q#J2iNVjmp)oQ9A1sQzWOJ-lns@V2Ugg@I@0BMeeMV zB&~Q1(uSYlIQ?D3I?jNRz%d!QN=5^4oPnc|eo09QVg?!X2n?q9l9EdRo?xgbAw;DH zJ<^7pz*tT^)kW?!$U)pmhMW>2XDHX0cAS$>3S>GZkO^t0awaru7;11%(``fP)5oC@ zHS_JK%{plWBF^wZ7)22E!$%|cnL0~}WI0P`DWNQ96ZMjRLeADQR};s%?Sq+S z!<+McbXYl>cY)13>m-%E+%l3%Ur3Dz5;w_rhMz#hO$Pl;P*#5lZ@{-Z7XS#r5KXF9?+R6ulTmA_qG)E2 zAYH)yMk+4$*^F3C{Gj(RSJAj}it6H`wK~Qd=MLJc;nXFAJ|y7VRmRki?T8ul86EAn zoJizPL1+2@25E4dZz07$=rDYU;Gcn2KLIe5SVb8Xql(=@zeOzl{O3-l#{@$1O)j_- z{Pn->oI=sh5WF7@Q^A82{0=A&1iy=J3k1JcD#6Dn^MPR*!RLo(1iwE*f+sx z;OP{6VRT0DM{k$lbV~j47zCaERLiN=MEb}y;8JNm-Ehd2W`-B>MA23sq!IrQR#cB^xsR~O|D<$ZE|@S zJq6kUqngJklb^QRmPtn5-^hM@rQoimZ=>s{@Q3Ta5y$|eern;6ODOkr{26qO&h0jxR_r#hT>T0;+$Q8AbVFJx zD=}e6H=v^RlK*3Aztp`qZI#4_(*cd~k+jkntUm5b7u#$fO%HTVC;GkjyTldu3?29$ zVIJ}V{tiErqTGd?e3pVaRh9dHDH`9p-2Y3>2Du7H6h4~@d!J5SjcI;_3Vb0|g@A-U zqe4yzVJRWzt2(y21nWAsx`EoK1#6#{qHMa%tuAp{m$_AyQ7!o#vq81wb3{u7e8k2w zIFbl=KTqWp_ytmaBNV*nEoy;NLi|w`e1JKkuzrA|opb09{r04QsDmK)D)-z0uJbm6 z>4z}2IvA#+qg?jT-I*@YG|H{!yb`M6&@7jRwkh%d-xhIKl+CvjI-TwZ+}bz3(K7`REsTM!%YcA)`sf1E)=d~?u`DOLF*2C z2ci96L@+SG*T5+N-bqR40N`3UG#;U`^YBN0gvt9tYIvEu>;{UCODr#Q-=h*c0wqhS z9J7kBv#3gp!=-jQwPw=tIcvE^^;q=2ks|=rVWdUVhAd zh98Uek)8!1l#!2#pI9>h3wUtoUZ-((jPDjK$Ddv0tW4GvJih$GQxR3b#A?5cVdeWW^r4Qmc*JdDg! zHpD%OxUsYFM}A!VLBAi0*CBe6ECs#gHX}I2X{E?r8%ldrnbAeWUi{ogeII28A;<)t z#_^+{RoNW3N)!HFL~w?m0C*>rd`W=c0~j}2(?CANYXqJ7> zJ!RZP9iW=YC~((IpLSX}Zf&V^S-X^41G`}1%^bS$)^N@*xPxqMqp3Dyv_0mY&Ha+Y zXfy321;Fh~FsH81ZZUCP%4V_@CD?%)Rg94c%WP4!9hJ+QoPtC*v6u@{*lP z~>Pb?o<-HQ`-~Ro!XwrZc7GNWXPyv zGNPK@Wpdo@S#>*!Mn2j-DuIOBU8>|yalv%m?cgzY-DgEdJW9f0)X+((lgqp{?@eG5 z606)46zZ#!Q$s+;+9Wd8CXul=UoyC&tYn+&UoD>7uL zK8uRXshXVZBC}>)A4P^xi^yn|m5qvFOvU;H!CkYy_f*iN>k?{31wwW{J0P-p5P*&L zu^7v;JOqH%Z}Y?YEvnWsv{{1;iCo&OPfF~aOPwUZ*#e9eV6p(y1-Mp#g#s)U zpj&|T051I`{>bmr&jtfu3X?%SI1j++^#gUu zM?K}B-i`<^d7l6~1lT3O69ViL;Gh663-AU2=2Foh4U`HnT!1kGlnXFTfJy;s1!xwa zQ-E6p*ebv_0Ui=yrvQ5dcv^t{07gIhYsG8#w<$FhKZyu#|8oGi0mZ-3z?%~DssM)s zcmaSNXCtM=c>wI5L3awPzw4Z}y!!hKOxjToWnsC^!BZKiyD)5OyT44GHui@!>FXaa zXuX;mJ}sD&jRM)3cqirj0~&0JObv#m5GgR&JE_c7&YaD90z0L`~&la9TM-+9!_L za~Oezuq0Di`NRQM4~=6ri|Hx(vU&k?^TIe*kB#j7^uZfRTvtqeo=@V+ zg5L894%>G^x-Sg(mity}NW^7D%uj zC~E5EDC(=jnXR7OqbPats3|&%NPFcmikk8mMZqqvMju$c)__n{1zzc$R_4xUl5EzS zkd-@S3-#i~m^$g_&h#d8pIs%BYPA6M0Jy+%0agRB2sa}X*^YHTOuMHsO9Z^Mbzka) zGFJ~4i|8I8fsn=U+xp6oIVda7ptdMmtG%gZ16Ii=w6+KN zJJ>{9Hd}IQyz#vzx0u>V=LV zLNwGMUU}F~> z3)k4Z#)vj%b<{wPTEX$g@8vRYkwMuvOL(YQx`$&DuXS$9VG>IYF^My*Uy^yZx7IJs z^;RYhb81f5Z>h;LHS?4?KWgCe)C|KjAi8Eu5xqR75)A5W^|3)cH%on))?P$mVjjlX zo0_CaT1}S`JIUj-H#JF<^n6ZqM$6e7*VR+%BQR{43v}RyfxaKP`8(}&aTB6m*B%_X z*_@Fj=Ex0`kp0jNn|z8#y|E$JY8x^jjO3VE(ahp|DcR69-)-R(gzBf2}Z-IYZkwe2rT3^d3|F>FL>$1H5kD}hwDf1I>pb4WR6 z0pIHgxVd#%v_P&=iCH>4eI;~gwpzGDV>~cgHcWB@_$7K^bx9*X z?$q55;B`;--ob-c^gsx z_VB!pEWUbm)TFY*BP?SRgm~kFn0A#*($iSi=LYVl1%B(I3@bWjE=tr7F)m8fd+D2t zV%F#5J(G+jZ&sOqSr6sroF0ngi1kp|A3a_@l~M#a;C#Y6lO%oN0}lDHoBB{;~#zO73u71{LwTOK*}0DCHJ zYNE0|mf)$>dm#l4Ii<7#)f{n*X9h zG0XW+tHb{rW6q4kMIugTur$7vOmTekQm@Pn^04)OCD8O0)J|Muo0{lIIOaBpn18)5Fo^iU0)D8N|)yi6|@PLE|q{tgig{Eq_0-Ohc>$^gLIRNY;-`CRWiw}J}hj0L*%oS&x#^w6*IW}O<7)00qqRW0}MbNDO znG+7?%tOBC5RTw#-{BoYP_9?@leueyD=;*^en{&}`1Shu!Ic?%ywOu>Rzx#AC>tGr zILfAzb!tONM{_c^r;4dDYTaF(5~>Xuzax-=B`V>7QC&t+djcx?z*fYmS9>MzJDj}| zb6<%*r?rqBy1^#;$om~@of{MUj-!2YFy_-L;sUc`2yZ4QI>F186RddF?}OQ#;H@Mw zN74ySJpLGecCc1&s6=Im4|BGw#f}U~w;QoqT$P&__3w|$woz?%7YwhbhL$cP4wxO- z$Lbi9rZ@hqNKA*xCIQ|$49i@?`fIjYcxzx@Jj>{;2+p~xS|a_g76#Qj-*JgJDWczY zjo%okP1+bxZ@a?pjV#mgVIWm&Z{(!!f#zR&VG4OF*|pc%>wum3ftsNK>8K8d8jmI}U{RG+L7+ppg>; zXNB@TmX&=Fr0$-{+|IoV!DFlsT-Jj0d` zQbQ1(Wz2b6LYQ7uiZ|QX5*aSQ7y-%!m?l6a04suZ2=UKGT}{TltY5jQekZX^nK!

    AMlZXdVzW{}4v=4=5O*;!y;dS6?H9#<9Ax-B-`F`{sh(*-5_kQfOmhc9&I>>Lc_Qtm6+3OS>fZ)mP8~_$icDv8j{!PRzBO}|p`;E0x z_eTuC80kweva{90Mt01RSvKbRRp_`=;>8daWn#~Zn%Fcvl=-J$9*H;q<|Ucf>gAC> zn%Eg4!=&N}T3lr2I|yY&cONY4Y%kw1YqfI|Jf4uuT77mc*Q+<$wTWkK;;T2xwLx30 zeD?Mg==UYR0F8!Oz{<-OW3F=qXdHrYu6`u=Wa z!DJ68w!fMEkgmfq+0Dj>HrZQ_!G6eJ(qxZWnLbRDU2*IfnC$tG-aC_B8EDyFN7H^~ zA58Y%f8Zi!kwDxG9pjB(66_>{p`x5=-J{L&yq3f=8s881cN=ri=Lqm0b{z^N1{m z6ThRnT)9i}W_#jyRF{iQXB+o7X|`v*mL$02XL*p&!HGtD%n%Zzojv)OoyB4@>iMGx zF=o5&|0A-qX!kshoY`(UwqF+DUj$&Ie05Ddz3D9KqHUIhjE@Hl9ZWq|?g!%mz z#-s$oiQ926$-R^!DOmQeTK3);t zl`vCh6>@U*Rj4fBCy^TE_C80bqBY zzR>Sf+>T)OoxMkMsxY&RS_WC|)@PQ0I{7IsHoS(CN_-#M+A5GRH%oj56U>BLZF1u|(+xJGr~Xcd&++^72)Y6h49o#ARz87AnU+zpm-uEC`Vi)1|NXcn zWIKJ`5*Mk^*DkRzZ2U^|Jxue3O!^#<74hWHV7`}^^0ObdTj!`8vLEEw%QQyoTT0Aj z8o!fUHU39{{&M9-^q!6LB*{| zx5V3-3zAme)yG?a$d2fI?%rt0`mt@dg$W&ZoZh_=(+9kP(TBcH{1Q)$_bUb`Za+vg zH)FoUW6jOPBQ}X&;?YNJY(F2xyEhhv?^-y9cW>xV)CRX;N@<|IWgTLCVIPOEMSnD4b2C}^a zBl9W_bq9vMW#TV%6-Txk4UW-O9EuCZ)iS-B=(vLvbO#*S8;UatIht3uj0t(c8y+L*YSV$Dvs#R_lt5FMsy3@>}vOF zFZ>8>f%ol8#Aa2Z4|j5`ch=-sjF23x8ZhSKUs(*k4#*xbt!~6#%3KIzY?&V!C z^|i2o(U`C%pA8Xjy2N}K*`Ae}8{;BrF9>I))E8(n_Pne!ocNjI<|JoWf2KI*U7tI> zA@UND=~W_@+5S)H9{j9lmG>Pi$8ICDJ$IL8EP(XYWy)61;r6(CyRR=j-kwK~+rf4C z8=0;;AeM0ektG+SCxgX(-7D7PCNes6?_?$qDm`xEU+qcU$yDPe?&um`?KuKFnX8fy zAcjZL(K~>cO`io6;}PlNZ1rRtMY6QS^TJr+9{uPw>I=3aff?`-X3asRoM?RB4 z<5Ati!Y8h{A41<)Xi)tS`M_8)6%BrzVSXRKGiFE5aq&h5))mb)gvZBCEXFM|M}&>* zWWJJ;k6UEEfMT4fhs5DJ!f))w@5QnR9*$@9-kcvkmK@?4Wn9fd8YSzuQOsbW?^7|Q z$J7T(@J$jwQQFH-B9k8F#wF}BW~+~E2k-9v>$1Q46Hw!kDO8g{{IcYx-t>mR{;PdI|OmmjTkhfA4T*Y_J-I-T`a@5X;0c}qr?-hUsN z9Xa(9yAjQN9l2xm9gf6z_hTeeyyk$Mn6^#GLo#FPBMX9VZ8>bojQL&w&2VblI#Dtc zzZY;!KG&UxINq979N7lT`I%n+hKS-(Z@wY2KK>gb)||_7B0691HbHG_`Rld!*+=2@ z?%uVYHDhjnI%dfti@Hp_iZapDO}vUyd%AWp;Rt+{C1z~0X3sq~%_oMeR3vn3wtCp( z%unZJVfNA002y=B0h*hR#>GO%Koj)(gWdDkFR-1PaJ7&+l4G+TOAkBdbxBr@$u~Df zujJ&LPUk8gyH@$wT>&54dOJtbx7MSg1BQ+KVu&}BZ5c96b{meYZygy{N8oy)_k~<) z#n8bf`pCP~H#u9ZX=f$z$bG82A>v7MPq8Q6km*9tKsT|qp7F&*^4U4oUS=9yxH&vm zIK6XG6$NSi~26gqgppVTeb?->9 zD*GLY>|v|DB-3w3x8~R?JyssJHcH~1n3!)+CVAL2>F1KknEHxQj6G~OQ6}dl?&j!k zMg+I)7%$7D{#Hx;p>Xxhh%8%n>RT;G`7*3dCve$$ydZucBTI}RvQwE|6xq90JnD^i zE#Er{Y-Sy+>w5d@T^r?PhMX}45|$*@PICU9wW%eGiu^0`t7Ar_@vDi7KBd(=j5taK*sSua-p^aABiuRH4gv>p#}{h`$x9NRqSPinR~tnCVt5cB_bo48(t(!7$U*KU1hZ9;6?%{Hu=&>Ec3-jvjUyZxh}H;ZPuit$GP%(6UMA| zn-%fsfwTQMF&6*2iF~-j{cXzU;YgqCVBk3bJPOSsb^IYP&O=}Cu=0`g(T-d6Cpofz zv_o>p+VtP@4OzA7nyavtJVM4)ASp58_jyAcxqOv zj@7O~;s-w#MmvmLX7yR<$eRQSi?Z2j;r*+a@7R%KtNXFyJ}aWPsPN8Q;%7w`vM!I? z4#3B!6F)1mP=BZ}Ds{a2u4?Vg>ifF*vu#oQyuPOhx3ZAs;M);6iIwf0oLv3Fb9Gqf zB&-={tB2Q&6QxXRwg{)x{$=7jlZpMG_|By6e|zXH-!p~@LqNUK(wlt=E&5gt5*Vy` z7{B=!qj&8vu1?&H(>x4r#@P+x#YqE9@i1=m;r+SAdVtv_I&xNz#Mj-8ZoU2Jzn{#b z;1ryrVr%pq0Jg7K62fc3ncwS)oSebd>2UByDcwj{2F7Hdo&=f5hA7*hBP&m-_UjU5 zLU((-Oe79E)$LhiBD>P%-FJo9bT1LhY}dQ*LEaysE78_S6-V3muS!@Ts?rNYfi5px ziFTCknl?UhuRLkvh#ObfILA?+I3M5IIP_81{IFbV^RdeuzO_|i2`+Wu-m|Pubs*3G zA-8%?X!B{fsF7pkRv*^BUr)%bUZgHsFwsZDtzMOIiuP!`)iL)*iCZ0O1gx)x!o}%!xlbv6$b7Sz|t%!7h33GkA%g&5$#Azat+4Kld--SH+I%1S>l6 z*14FMh{UrB)RV<|jk$Nu`c{bto)Yh!(+8e{261n1S-3Iz+a%$Ubo9PWqK}cr`$91z ziJ9Mrk(8~TY$GZEPM)KD)clua0Nsnufij9RXW5eA)zOE(T*7$SPcWzSg+*96b`Z|6Qd<9Qih z%y?&gbM6ZMnoQNNriRCU5YQS_nO}&za&Yj{km!e#Y`Kg#H*IwM*L!UGVPA}=w};e= zbao~3nEPuzhjUKz#*n|(s{Az*{kP_?C2WHREG{c0`S@#!XUD)_(=$tWS(r8l1H>Cm zU51Inyn1`Ay|&(8j+f8YXSid6R_bwaIbJrOimiwkpDJpetnvMuzqr zuqT@6yCq(am*~44h3oO$-tLJ728k7<1WPXQe!Ro--4bueOZ43mZ^%0WzFTLq?{@6I zE1AuVKGGv8TRquElK5`8BP(&6E5=y2?s?)kO7z_HI69i1+rxiLo}1FS`6<=jiUOH> zNeg1dNuJx06oxFGo02kP4@fiR{W{pyK z6tQDx;g9?%#eLB4#}ZeEgh_A7&uvCyPW*Qw4W*QfhB7v4 zA_LS)22?XMT1iUW-R}GN{Qe-caY}#H(kq_`aDqB`6ZiiX>gLp~_&YcCe*B%oa#59{ zVQQGuOej}S<4mI%i0{5p$UWI@inNL1sZC{WQyyKHrA2y15KXe z2;5v0fCKT5Bd_EM!)G&|I{z6o*RtR_1l$#?UehetB*2{ld|ZG}3-Cn%?<8bj5#SpD zMw5)u&u#SwF&BF+Ym79zyd`uE4Z^st;lUZ`8Vt?2;gnCGI2VNlZF8caZ30Q>5I^WQ zh2CshL6Cc6=swjOed^e^Q5yY_PMw<(4yAt<0v}ALjt+;##1WldG_`HW=p z-MCvKQco%Qk7Q@`vm|y@W+e^brQb!c%w6^qJQ)8=0{kApxY2Y{wOmJvEzbj zll%ksSwfe6;NfmrRwmJc-%tuOuIO7X>su)c=@xzKuF`sz#w$xCtD(^sYl_{~{y>ht zO46$Zs25z_4N>DqxpQ=g+T_gQ zz|xe~*Gp3~AjoIv$l0FbDE-@-de?6ReoyKO120cq?Mr-H>MaAer=9{1Rdxl(k5GZ` zK&GBlJ@tlDG7b2K+z7a&f*>ktdb0u1S_geS)SF)qbsrHzGIq1P*Zk* zFO81&>+^KW^RehxJ3hb9RZ@Rq)EcGpf*!S`c6fO9M)5RdS3C(bz9^5wQ#=_rXE&ft z?vMO)!Bcf}_9lCCc9Xf2>eXLsooWsbn&X7|-kn{M?Vw^!ph$O^1tE3i6sXHnn+^_eL%82%U<41Z+Otz#9U?4OW)8=B z!LtF(7u1m>YK8YIsGUn&*hQJV(so zIid=4M?e(!5r>s1&I|R^yih+OoY7Cw{F(iR{M>H^ciVw>(aSm+OCadUOnM%@J?iE`&6*zuUWo zkcNO>4XMh&Ipzs40^TZyh#$NMm$HEfxm zlqW+zjLc7)L6Bkf{Y0H&bzO+nbs<*Qg;!al}Cl8gLF${XB_J!#WW_Cr6VZfOqYAKJAFafp2j|56N?2(W; zuZKp0bV|}rn(~^?=5Ekl)7k8$odNP3_iX0Bfx&x$iO)gUcJF;uP<8L3Q1>nhIe?2o z-HUKW_p0(^X`M-ay!Ejt-NL-jcikyohQq5-cL#j3!6R6Q?s+P)W62pWbvNSdi)LC$GJYmp&Ls1gMpVMsBWQ#BNGaecuvdL`!IB zw{XL)v%fS=`y+#HCvf_D>%3D+MNx5ke6FW(*Yg& zxwmWKpo2Or3g-jJ*o$KC_n4p2xm*+joy~Ea)0x=Eiiov(uH0KhtCDAM!sA8v!)#LU z6GeY-;4c+@%D`VPq7_Y*=PQgz!A};o^>cOnSBq{0tTze&qv#P7P($}6E}-CF7QGLd zuuZrNxJy<69yCl1OUIpAax20`=Slb*DMk5u_i>caly7h?Ul+Kger74Z_6rpL;xO{dJEmIGmX=G zw>r2pfbb1hM?T^{WhnU^!#d$nW{1J`)j+jS ziHsOrzrytgx|g|p)Q<)9a@Vne>8`rAg;Qp@#d;Jz?geD|3D3&%mpm)WU-qmlf5o%1 z{G?}P`Kydb$@o*AmFus0R<57*to(jG0Ppv#Y<@ccf77#a{agV4MgabSck@8kQS5s@ zfb&2A{!Rer_dV(fl|Kl7FOWYNAB6vf+pEg{E5l08R~4z}hxPN9o(dNiX~8H7Xq*8I zizH0W2-RhT))dj+p{nkt0DN;%VAQ;y6O3eil+#q1`-@0875uS4{Ktdk|2~lL35H3s zh(}7>VLy{ zqVO*Q@jnclC;3s}JjsiJ^CUkB92NO>Ko9*Y^}Q3Mu3rZ7{4@anM__OtV)_+5{~o~q z^FaQe1>z3|;$I5j`ElysOuhfcIJLn1fg7d+B`oebZ~~7rRdp%Ltm*qVxkjDOW%)E| z7kZ@Hb=u@$;EKRtn!$y1uB!qGGd&VTolwEWB{Vyb?HbOeh`Tmeq&lO>^%7=-6|b~<=lAbwPUN#_RO(F|)uV+6Ynzn`mC#BXK9I^m8W|L+Q* zyE_2iqxwP@c`$_gldN^1t*6s0fS>zps$@D$Pc_K?k(2cx`^SJ5{v21W21F2kgd3~k zcLm_jv$oY(?@X~9sdC+!BHb%6=~aR4oPSTM3h{~qcL#;(!<-;J@IdM(KqaA1usrK_ z??}z1Bx%rBiXb&aX<2uLg2_m2;>L_5OvC3rD}n?v>`~H`De^#kbPdTKG15 zF-)_&KW(jr?{Hxi|6M+jpy2QE5g7#^NL$O{`9PlUrvnp1+D;5VWSmN3e;t5-6@Xt# zTkGPN0r)=x@GsbtQg{vp;C~OmKjXtJD$maY@Qdl8r?`%q@gM7_p0DfYPx|SB@pwNw zmp>7Jztk_F@4m?iW@Nn)XhabHW8gT)p8|RQoVKQridV#J6C#{`GzH7RE$R2T4GdCA zl6DHGskWZVNeUjuux`^CnPoO?>Ow>(*GB*Uv zyeE**8i1Dta4pTmwS}`8F5DL=_0a(QF@`nG_Xp5DkcsXeg84oh$hTAHlXf5Eo>px9 z_kPwg`&l6V=Rs+BDUk3hhS6Om?a&8GaW(%63PdZeW>OP6{^mgZ%@jXEDWUbGa3s?j znmBdgHG#sb0`aQ|kv`75T5Ae-wMz$T)o5MKo>dUmByzajGu311fRXta zuW~4?dwHA*Y-g>S%2qF=k5nMH41Yo>DgAhQ{ue<`Et3Bf82joG^JxdGk9)G_^IhFCDR}rK`IY z@e|9(O&B+6#F%A0J)PYbk00NtP>fsJ(Xq6xrMqKgS5wQlrj8ZkdpbJWnwB-TwvTUX zTeaf6&aRI4v^4dMC~ulH;ewVWH%w@1YMd~+yyc?vFPPG}WXcWY6DLe+x?njv1@5dPi0H{(w=2bef>(rU2uLqunI8mg7clGs>ZIy z72SxgufJ^W+{^0ft7k2^qQ0iC>Wcb$r*c7g{fgFhjibGzr?PcLYflTPP|s^u_H?f7 zah9~UwP~=uV@7LJ&-9)(&dToA_N6*7v&mV~xT>RTddG^+u9j{Rjk%3ItsN?MMhhfB z;;TDbfWNDyvwmfJPfIsdMgi2#&!&#{C9Pd65Nnvz*3rJy>2AHbh1w<@>t5E;MQx(S zPMoA$&A_~glN_|Ex~H+Hr5dFih+P*ktfi~Hv8}$j168f;ZgG}1b}v(%L0ni#ydwDw zL;+Dtdw>u|q^g{vYosR?zu~5y76(mS(z*r}gR*9D$wJIlr>$eP0@_>F^wf0B>ud&z zPJlO+Evs7E9Mv@DCpf40rR79ZfW}b8`a$)#PC<=bJvVW^)H{frIlX>5zs zXOqpd%AS{G=#^h#x{qT#LNOCA-D*wybSV)j$5kvuu`Q|*JwYF+sVov9*cBgZ8V-M&As5+oix&~EH)r1DaWBN=EU2_BEctuD1<>=II zhZ-(<6z$+1qrSYcX}Qzd>8xPnt+QL(ofY)w28xFWI;%8M83;8GTe~kK9zxKWmn&L8 zs;Z_N`b>IhNn^K)mVTqQbvyM7DkrUIS%I8YtL9Cd+}YUOUEgs7Y1DceC=*&&I4ap` za+q-tf>wjoxnbp!B`v^1qhnc9H;oicDP^+)v#hBcnu^3(mEhsj-m;pxhtYrSk|iL4 z$;LA<_>~~54r^+I(&ACott%0UuV32I-h!@nnjo;C`YZTUVzko7LXkg4U{m zOe831R`VLC75|mSb(T5JEp0uGx(r%=#TuntNE=dPs3h2Qd0PhrfjTunf~uEta67}v z$lBi1+P+dZ27(DKrlmnwXpm|4+5RG>BN`yU7BvT8lyF8-}<8WhB)5;Yq+Zua_SSW!Y?w0nZj^>v7?v@)@0)!Ip=$_&% zo1%!LZdwL?)X`n;tT^8iem*6vXglBOZd}#UT#tsLowG>|P%DwWe#QBYig2vz;`Tyu zwY3p2{zrA(0(SfEv*ksK@!viiysO2`VrFZFE*#fO!RzJ~OVf5g5AK zFN0RUsk@a}pVeY=9Dy4S1S^u`%R$?qyDT1|7!LY#iA-e((m{Ax@ z5P01v)x*p=?uU+!<%CcdrJ)2l0k`OHi2k6P0|2r zEHem<(o+GkEm$4&4H-K+bpTa1%mV)FaDdf>d>{Wve?n)2l80spb zM@1^lQ7ww29+m)Uf_kkLdpeer?V`+cl&D_~*JFA|=S?uxx_byW$txZRv7|Xl=dbR9 zqJyD<37k@4e(1@76DqGjQm3ZC%mmsfa=J0Gw>Ci^LtUcsB`e$7w3XS_(nE$!$0`gS z{KcT`=&UB?MY_R(0o1dys~yAp26XZb=#YBK$AB`y2ptc8mf?Dm1K8<$L^zNY(PJ^C&O1OXLy)+}(nBs(@652p3n;-O>iOL&GwTO2tbP2@=Wt zAOXwBz!5r;7*E!nwlN8;yg~(L&ze!slNphNd=j240T7Hvw8D>RceJapY(94fq!!at zpiFrPN4f4HlJ81VU|Pe$Dnu(3OD5<%GO<;$)eEE;ATk|g#*y=Ph1M9&Z?eDFX?K@FgCzBlnI(2zy#|d#-XF)Z5@rxG(=!r zQ4oW+v1u7uU8EJj#Kx|hI6>-1idZ|w6bv`QWXK?trrkhI7GW4aTOKXV+IbBkpE+Im zGPdmbFfrKsjm?eW+p{c=)o4XVxrB`8C#L0##V{?gv6;CL;&OID6k3)8WwnbOU_F5P*Lt#2v&ld*Mag>7<4L5_ zX`@ns35dhcu4%o4OeB&&yWE?2(^$B$b*8`nc(Np3Je&>bDhc(jJdpJsWHAt zk#{#PX;ICS6#??I6bh=hMaY4THbaj-Ho0^mNGUinqY)m4cDvM^C#uMS-E{n})0OH~ zP50)xj(f{l?imBmcE%uXn2z6*0_6M`onk>7Q*oo#o@}&Q|MV6rn{7> zrusM?PiiausQyY_wwxkn4m`8;!PEmqI&GOwqxKSQlE&@VX_ju=eyVGSPM1Czfw(<7 zu7REz?HR}%p>i+kJOtBk1pdFO<8G%2w9oQVl_MSur9Q`RCOs2)FjeQHexe_>rAo)` zq=>44XHMY0Dt>Ul0|UAKPMyA=(qrfzf#_{I&%P{qh(?x6JP$MxSF5juSXr3c0orA^goj3*$|lvb%pJO8Ku*>Q@T%OEwb z>;8H0AbQY{!GHIN>}m9V*P{0&a_yx!Sdz2bC}ubc(sWYtgyLdNlb;UdXeWW6;z2v2i$3j3)>yn$$ z_%7HViWbM|uXT^(c+aNXBG12OfH$>xXOZhWY41a_Q7Yc~QoKka=YRpAf1+CR&CWIYH=Z}dL(-U|O5AoVNK z-hrD@Pulyuk35_GYVY~AR2-!~qe`8I(AWxpV0tF9Rrq7lAMnq^6GVKQ@%KkrLs>1JI;h%xHv%Kx=HwtNJ+R(K3 zB1)a^eIE=(^S`xjFA@2u3xdCnC@}CbmpFNi_btQ`HztA(^aR>@a;1OTl|(FMO?zK< z_xdNLi>LYnP|;vi?x$z@!>{)JS!wU7b+7rSr@d`1^1Zx{5Hc$e`u5Fxfz(ZVucj(e zWl$(V!FXbT>z_TqO$`jie`5d%%xMF>AFNJ|a#6m&_u1mTY3~awD+tx|1B$1nz0a;J z-U)VkpDV$$KWOhqp+hUtv{%*@Pemzo%@;}_Gqe4%SNWxt{wXsdM-~1l72v%0;Hr&4 z`=4Ok`QA2$U+!OVHJZ{>;e8pUz=wNQ0oN`tV{F>{4zcVJ!04v~kjsm_-=JuJ@7`5h zvG?Wm#5~`-=ry9lyNaoxrk|Gfeu(_1dT$h?YVQN9K~SZC>Q(;GYY_Q5BGE68pkbwH zZ_fZic^Y7EDX1&HkdiP@txyA2}v}0Qd;VqsPM7mL$0L>BT-;2`TS4v(3c{fDK z`zgqqJfL_rI(p?^@8_twe;U2}02K$NjGbiZl>vLX!*;AH?h(NuN~woI=^;(2@0D)! z-7OJnf2X+cb}F361QG>E-6asWtNn=>GVyZ7w0wE}#za}_?;V2dm3n`|sO#@-W$F6( zD#+C}2>uL7gS|gOQcJIfyzN*GZbRTM^8TIW^}i@#HhA_VbwerSws>cxReQM)DoF~! zDVBoY`|j1LqL9qJ5BW|Xu-Whb`?UAx9L?jrRXjz;nrft1)SSo^+J-XStr@HU6mL&-26p zk|6ruE~)S;lyqds9I77WJ;hb;R5`zdu|b*x%48PEf+8Vy;SVbh=ni0s@8e$UjHXJc-DTP0%9+v%(Pv#<7tRQl&t`sd8@--cP+yI&3e>%2pdic${tFTMyG zp|~s3@eiYS2M#zXGLm->L}z`Y8@dO5wHKXy-f#W>*Z7xQNq;Be@3ou#37fcc#-|_m zr-7CWD*Od#1X(Dz`lny%&z|MKW41qR_7(o1YyGpX@(0cK&xIvXnHn0>8s7sA?-@Ya zbteSu04kdd5r^f{A8I61nO};Dd7x6}Uxp;*Qs$R>zj8N5+I#@@O&;LgftgEY4%8K$ zIj+ZCt1J6b9+h41{W_+y=TX^eZro?kxbLGU(YV`V8wXwdeO=!ZdDK_w{U)Zq@2kdr zFwnTzY4JU2?+3cF$MdM{J>JVPmHhyfec0vJJ&e}9fYw33esvu*q?#zLUgxgr$*>Tn z>Up=$`yUtjB5dru0OT+}o`jtz=&~3e6%pe@P_Op>HxBg=f%+4Q?oWa49}OfHd0)ws zZn12ZcyGDIQzLZ$NYVY}+;nF*nl`)MhExph9|QMCTxjDH)7}nH{vs$pHSJxw(LWh; zU{onDhHoHBc}JX5eh~;y9pGI7#hpXH-vZA|P<=8E)j^;-H^$Kah2qB-St7$?f!XUk z?-CgI=WoK4`3m&!MDOnGCV3t@9+MyRv{>J+_jfQrN<$jw6_9lL0PkLSO8tx9t?U}i zZ$EKC$VJ}IX`25kEC6tp%=%M`SNelV_g@V&i`lVa^{_t65r@ehJ|KUt+81x$S^*^tLxBKkMiin=vG>FUZUJHwL z@cL-+EnNKb*@|yP@i7BZcX6tNrO@BYgprj}K3ZtX49Od~ZKeFJgbw_rC2$xpy1P>oW&*!KfhtI|b$bpm4buW_q`_(LVE>A1{n3?}^lsXFtv|BTAM_=_ zNE_r0fG+a>`6jgH;4LuIKIK(B4tr%ez*lZTLpcV{!VeKZO`rAlqRby1SQ+bSraB2p zKY4G3_sJsaESh{LZ1%@&@=rtj3ox@r0!@Fix?zIA3?zIn_N%~r^+`u{7 zyhK9d06FqAUKsDa3w{L@)0g}S0On`#Z=uR{Vw`yDU&*Ij=wIu8sa#cvN6`Zt~AY`bk*zI~|(s=QmR| zm@Rzo$22blaMD0BI0w>t=SE7V6~YI7GN*tOk64_f6gKpOBJ;i1F-4%!q$v>ashQy0 zf2@Oc!@?^K0eYgYW#CL2u}>-S2Y)E5ci%cF%}>D{hV6mnPSiSimcJ5BI2V4%L_E)| z@E!%9;PP#SxREnC5Gki)dcg2e%IaR9IpzJHm4RtgfKj$(gd%}kiu@lzAqrLKy>FyZ z*FUMQ+3f><4y_&N?FO5;!B`&t9#=ic`yBeH|9_!RkppT9BP8wp%gq%$R2)D&(L9EN zXKX@xMFpbv62rcPww;ZoS!90%I^jFy7^^2#uqW8*CacS-Ta#OufT$CdWe>gKZ;(t1bqPMI&Tx!VG)EDe-$OD+h!2{J3uvt(;q1g zQ|s27sLx@PJ?6jGhlO*9$b9byG)Y+%3UljI>q%NGz;fb(PpkV7DJ*HzGCw_0P6;(; zUBo_!SUeTiH(IXmrOEAA{Zdo0*^u7rePoT9;dm|9`ysk^#8v(nn$@oHKD(BLdZ_nH z>au&(76Z-CF@{|9ZO~r_H=;HUYGEg)3iBJ^e0^2#e z2ebM6vAN)TeujoCos1see+}SVGD)hMoPs z3pG$Fp6;mM#desS>F!*56mG-F&`OQ-C=F`1an8u0NM?oqeyY~C%6QnM?J_fP1v_S@ zy3`xoiJ1J5$M{_Se2&f~O;fbu5XnL}GS2>4KI&n#mByQB$=qdvO|(d{jN!-Wcll_m zFI=4NJ}*3?`vNqIj-m@QfA~+nFxf{)lUva8Uv&#;ZlYGBA@lSzC?9m-Y9P0OE(7B; zWm*tSo@UagtKvVI^xY~W?}!hc&i8`TpKo$q_LHyEo(9W|Jk(?kpNAWbf9?fqmzKH< z9k{ql1Tc`7t$Y&zIB$dxZ zciP5jq6PWWIZa9D&}rh?;Y@rbI<-+BNjy{X0p_QpYk6dUTD~HmVO*y4P1#jS3Lo#6 z6e&aA9yt*lEkP|-HDjg*G)gCi57SOM`N31@S9#ZvadLPcyBIM~rj+rkDh!E~y8|5?nTqU${7Pwi3tsi!mX2={$I zs?p<_cxg+Hiz=8YDV&!sgpJf9bl9(DqW2rj0h8xNURCFG90z0W0m(1>GeV&@*0(Y- zH&N#*>CBz0CL<#io6|I8My69Qxwsw#9s2oktx|ZTJ&TYQIvzUv|7)(5+r%*!i@KKT z9-fcY5N#fabFuttQ}6iqT`l&hQfLxR^kbHQ&qYfD>~qnTwT~tuyADG)ZZub!xt#dv z^-={w>2rGcw?T=t^kP=1(il^AMjrovFtyW!LsPq*(y1?QpeCc!yPVxuZTaf|cUfsA zn%D92h8vi`ywf>8Wly_+MK>0~^355pV5P;GrLofZ-*j#rPmHGQ)N5C?d_+q|G$6~8 zg0pr-o#G)588B`^d0{wxl{}Gzkz|$_{)yJZ%<9`#6D?dS`~mGr5wP1j3kH#|7^YuEvZSw<5UI#F z*tAuY6kafhSAJ>1P7$V0n#^cU5`i|9CLbv$EulNDG(pEIqd zeOfZ7Ib?YzQm9G4{*WA2-uvLDrRd(~kwUcH_Fg|TVf@n;3;#SgeHA(`n!c#?f7Ec) zJmeN_;gH|$rsb*C#+#NulUAd%$&E&lxxD;GXY&-TMeAeKJ7^VPJfDlWj$;HB-53?I9_KuVdY=A1Mjx+6;@7hU|c9Ui8Ug=Q;fXo(#^ zUn5oB^JT^sx||o&;FXJZX+9oIy_>wyUA#9|gO;di?wx&~8B-5trxttkKKd^uJCC(= z2THLUnduW1NB7S6C54Y z?Q7?b$nIhre~Q{q_A+TR!rabL%Z~~3en=J5RqImqX&rhKwN2je>$J>UDEtwvVdQKX zY51#Yhi^;{G+l3e@v5foABe*32KB7 z(gC#zKT4;sVK{;M039Z6oqR>KcFRZs8mZ^ges<(aim0K+;PXunV310E4(bg)!{am! zsh|HOD(F)1P|mqL|8$j>Czr;1KnI+8^CS@+9o>Cy52r*bg-g=aJ({j0TFLpH27u<_ z;k*|}B>YD>(fpR|V41dQVWT2&UhhODTjh_e7f73~)VR+{$tk3kk;4?<2jY0~-#uue~wKm~1kHeuB z&ljG`TlY)MlYDfdXh%HN)_81-oMwyc>6_EsF#f*u!_t{xj1$?ZgO8*ci2m?c_7wgV zI}*GUYwA76Y=M^vAId_aJ=|iL;y{Nhj{wswOpF&{>+fRm)*y% zP0&7yNO%}U@a5%w@aU~Q{rN1H#{L{reA$YODUIR z49}$jq|njG#ji&S(SW#(mZa$SbI2^;ci;=@u>N2?p}c z&U5(P8SJyiMXHhiVDEaoxIVhnjB^@`RQpdi+vDnucHHCZO_$<^j5K7Vd6kkP?9O7p zn8VX(SMt2AO42|Qi+7`^z^NaTyQfU!r`eh@R}l5u=*a#L_i;^xA#Xx|PBkjw?_npM zKHiV~)zj`>M+5%&u5ev;j#67m-a|H8V57U-3&S%9k?)-@{4P0Y*}~8A?D{%65ab}9 znO`^(=$Ah9$F$2$ zwTb&{t}90$NL|TQiPn|eo9X7**%eE>2TrAu2Tp&|UR`4~&Np0RrIw}DLiWXJ2`jn~ zM2&R%6;?X2PvxLxkCI_p-6%c6L`U+G8%|CBL!T5fNT!9{@DoGL(>23sH8zri{%=X= zj%I-HC)5->|1@%t2Rz-Q?%at!9bHgVK*=_F;jI?^IcE?ys8B_TSc8qOo zLd?S@=hg}Qq)CyS+jbn9`4*j@O4KbIB}OXoY}uS1Orq*iOYO1|!eMgR1IL-DjaQAY zE-$2=eRUJVd+DxPy-%{2CCZn@}0)0fz)@-i3d()q`?K}nevQ$a1&EO zb+_Bhj~EB~bkDOWiz=~!yM{c{;`rjU)Iq11ZW;dB6D_1+BDH8o7d(t`I>(4}aVU<_ zO6tKM@iv3==)gaI9N|Cohe}Z}J6*c}`t6B-OP1_}=cdHplE{jedP`EAo}x&h)w1*V zj06XN(PYb^^7z3L8YE~8SrFma^0REt_`4;3*o}u%o)cr4cFYq=cB#-Qix#(S4xj(_ z4#z%7q+Ivr9*5R~X@NYg4;0aLws!!pr5o3t`l+*zPro}$4>?8MzNfYBQ$Kpb4)e%= z-(ODV8J8YEIe-3gQ3`KJ0?v5aHwVlEuEDb=GKm7Wr`Ea z`XBk?)IER9Y`3DGqz7(kl763^nm5QTqf2dl4yx|*K1uwBUwOgg(;O-EBoe*14lBE- zDdf2(nS2kg(OOXE@CI76HqJ3E5?inOI$9JXcdBr!$beyi!AkO;qXw1ePJ|4uYZ0m3 ziW-sQlSW1=wTx7385zK?oQS6NZxU$ljJ!>%Wo=rOJ%_rp zhnuEQcPi(9(*vO%;`lb~jYXdzJj2H#gK?W@MCIW}>Ks+ukj+1HLCl<4!9Kq0nvGY%=;f5#peN_IUG8WZdz$f-jhX}XQ2)nk8zd;{`K=xz=9CUjFzu5-2U zhjjN<>>NMF`QN!H;+v$}P>u6Vs8dCsC#RO?r=4jHNH*vZIlPkK(qBlJj(H-79W_0c**Nn$7^!DkZ8OL8mJ1lq8&Jz>*?-xdyXV_ z8_ExlR3u*`>NyxMg}s{}cmb+(rY4kKg8qO;(7(y+C{LNVhERe`+KwQHDvX>eE`@xMakS)U*1~9QbXBBE^GM0oks{3qC7Q)8 zQwZ&Vb0Nv5*h*AHPHL`^lqQ2>g({7T%#5eyDkt8quZaMSF0$rYT!ytNj)xr&O|imlip=oz|o)lrk)e3hT{aN<--)Es^0OkwGcc-@djO0pC zeB4X)D;hMuq>l-7P_%_m%#VQEnUfqAT2ZGfpbV{xvdAp@tFjrx-_l=Iq0758wO*MP zbiczfv2CcR#7JFgy*h0ot(tL)1p1$n)m~0lXRAol5!AAjs)nww#PBrIq%*>M5=FvY zxs8gFI&D;(vN?G<-A3E+C1e9*IdqTH8BypSt@X~N)P)pcZHG@S)P~w&5T`B365bl- zsA?K_OW9DH%x&qf+K0a}@zj~a&v6V8YTMopEx&D4>~We+zN_1!8~D~|YCZjz=_hC_}Hp@z#$F@J8XPqZGU_?kAI z25&kj)v;H!sSXDnXF6sIo=Nd?6#iMpMjlb34bHX30q4|49I!_x=!wkf2hq(6c@96) zHAL6VQ*^|a(3y|FZo=PkhR{DL7(CUL$rtlTT5RW`;SWk4Mc4UQ(ufTW#~(}#k0a8U z&Z7JuKK@`5F?w2(LNVzN#&eRgV^jgsnneK3hO=1^Rr zdI>ih5ottic_m-P;jidVD0t+m}OIP|Nr6sGJC4JL8l!AoL zZ(`&c8gsbIwc_rQe>hKsyJOigAue(^&Teya1xdl3#ZWjqfKu{ zJ0{f1bbjVi=0v*8R}SSrFE^UAn9<+2j+CO2uSMiS+HE%E!mBwW87DJK9!nuvz3397 z5I<_SK{QX#p_^<ybP>t(!b%Q+qLJn-dQ6s2 z_BqRO#sRInXx`<`GivhKL%!slPUONapzR?};r1uhcNFDhqgP%-8gl_HleUc9(t`GS z6C)JW&Ix5})7yg7lj@L%cGP5wu`9Opiy#__j%XS+QNGr+rb{C@jWaVT+N|iRNXZtF zf}Hf8{+4%CJCZL*UGWH|XXzN8bb;I}{b7m`Z(v>>4VqKs1F3o0@2+~b6-hUvZ(}JU}xD8 z&AQ1&c6}>Vdb(6y@stZL|JC!E-_2 zJTm0)ol$x@_LEPaUTzP`+Q%S@Q$jgjL{Ju0X}pdmmtptdTxFEwVYmaw9MP$Zt_PpP zjB-@()Vq0UUM%DL$M}bFoy9WFRYLben{{+gyTTBmSQ%#qJaBYvtBb19LF=+5Z;rI^#QrJQO}EbTKLop&WQ9SxVXKo(6+ zM>npNh>l`bQGeTqF0y=8`+JxO=)BOgxea?dfYnduXhRc~i9aK}mtwIrx)`=R|aL$ef7IxL3R! zX8kKlAV+gNxfEl`zoKoqTc{t@WB)4rJ9$FX1IClL6z^t{gRqo>nfP%5%34gvk)6L0 zKt9ufk~7A4RFAVGw~yV_C)l0X+n@Y9J(JMY@5a`(1vZ#Q9PpH=mk#b=38Z zU&p7H&vzz{+UD#y+;KS-A*bLnw-XF6ADO6 zsOYP`IOaAB=dz~@NiLyN=g3J8@)DBoMBRaX(6i3=0v??BcOAXgC_u&eDI@H=C(rc=-hbm-#$}!I|C1APi1-nYDDxsZ$J6 z8=h%q8(Mb#2YHztzk+8(PS1QUd}qFs=8bDv9->q4IJi)K3J zhc7{@z7k}26wJe57B1G*|_2SwXWyR`{u{||ND&Kc1oiQ>pXkmd}|_0 z&S~+!c^~1@==MSC3&bq3(r~2SIsD)DzWK_b#ihb&yNzXc>6BloOVh~Nr30t65XYtY z|C1~(2wb@Cv^v0#{6?2?80VkzkxQ>Fbpqjr=)HHrmH{x_Smlxa>H#r057&R#W| zVj)Jfm}{Q@KeI%jZfZ-)P8sWDHYX}CD%nf}YHG`9OPI8U6l%qBe3>3ddxlG(Zw};Q z3T_QLZYuqSX^ga`9!hR`MH@4fDmc)@ZE+*hqPh7}Aun?%rAIV1qp+@s8>1I(;~*0N z#XixszKD}GY#yAFDjyf!cy{CX^0UnkYp*RyV3~$Yr+!6g*N4^wDZ^>(x}v(qr-d~E zglCwvk}uiV1(7;ur5Rr+OKNm{p>`%$LJQuc-I2Itm2}vry9QF99rDs?Sd2?u863Wo z6_*+!I;_wz9!;QTk~q-5qe*4C%1vcS!#PE8@fPHMiiSQ{-=WRR942YvehMwCLfHiA zP9!1YD*i6*TxJ2hK=^%%VWh9rE)iZz4;9u3zd^CBnZpTGogj^7-<2FVMX57+RpBSj z3_)2jY)n3<)ifD4snw5h9RIOkb_V(aTgeM=w*YmeF^)>mlD%G0MhSn{KKcQ{FJXTYT9Dn-!u@l{vRJe|I2- zbdxuI(doi=>_RZ#1tjuU14e4wMQF4A!CPvvyoIy^5}!_!o>Li=Vj6)`9rFtJS>@HF zmANxWZ%O5tJ7Io8A@LtKO6te-65}4zqn?wxZKzSG8&OhDx|gNE(5&QJ(bMsTS4YZF zSlp9?lEXhzD#<4YrO>PGKBM_6c#KS`Cm!HGn@af#ujCY+d|&iGm!dN+shG3kY#wcr z9i6_;>Y2&V$y=Z=*=G2irsP!FIg{M%ob)I*UG)De**WcyelbOk(z6&bFN~)j@`)+E z_5zO2|3}$5lTJO+su?=DTB#lzFc0N$ShR5sXaG)?BuHYrQ=HgtKG9yLPRfo%q07|$ zAElw1r7dQ!@I8aPtzX0)R1jECtFjvC>^wBJM7JxjHU)OwS?)SJS5=&73HJo$1$ zP@3Z?eA`U*^d`yu7Rxi=*$5IB)yNpl_{kyNl4dByh9c1s#xj0(k&K_b-SCllgpj7$ zVH9qZ`Z<5FlN<;SdR*S-v3-K{?f9{$RP5<_H^$Li=B|>{-=*f3}ir zh$e8d)sqdK=`;T%MC(YD0o0^$q#i;Z>v;=44r1)>8n=7cCJNaPHGz@Z!K4vid2^}Y zZE)^Tw1P&lNojI|Qcd*cvgQFz$pwg?>E-8nd8Nl>{|wqZE)3eOwz5Y5A646#sNIk= zyABx~ixwn6K{f2oM3a9~sK7r-{t0qi{kz}2eFiZsaY;1KH2J4ZFmZkt(rw5M-J9_P zmvLV|P6LBEv1a?wiQk}(dY+b#O_qRj5b_+6uk7Y0#zvj~`yg?Av+@<%G@qnBr6x5g z&0~}tpzj$zd*iMZyJO~Q5{epUfkvLfoZyItdp-EVL=w<%Z6pDGgCVUMoZ-_`CPxVs zM7M*Ic8gx3cg;=R&*C zS(YNXI7d9^i>Kw%=ja5gm?rDqXU4(YTL1+z|eOGA5WLtn9tX_rtpP z97%l7VgK+kin2}XHw>8Dm7qNSGe7?-HOY(SiQfd1*OWH3W49di^fIvWH~CLir)o8m z_v}1mWVL}Rr}eLC^ji=y`6AR%t+3mO9FIh*!$DdKC&yGYMS%5(gqKG|0?Z6@g4@vYG;@hEk08HTnEaW@=nJ* z(n%FJw;*Tw^ncWyrPhtcC!Xr|!wyh0`6-|@We{`X!A;T>?>i3Y@k#p9lXTuw1x}u?8Pw?usTN?}+~!GcCeiaY zlhT!ha=1Fr?Ef#$r*s=wo)ZferTsD5T%nt5vk**UW*>6e)CvFmPNn?xmQp{HXVjld z)0Y0?Omd+A!?~2U+|Ex9bahHil_lYyOsO;|=c44=6rb>ZEX^iOnfCDw^6=9>fjTKT z|BDIK)Rotzc#-iOEGbeWMB^#=UYOjibF;L_Ntt*>F)b+p&S6@nGmalQJ3lRME7~kK z(tu-o6fN+r<2~M$^xekfBvTrB${kAKD3rX8)z;3Y*{ahLrhzET!;p zn^M?Zr)0{T19XW@;cq}FL3u9^QgCA9jNuuSWb~{v2UE-lB@(5G(Mh~~nf7f2C7{_& zB%3L%fz6!LGm=Fjnw=EFG`?)7=WZpgnaBLpam{G)J@(aRHi0m$zPo8p?dB%u8C`7_ ztm)Wu(5PWEEmIReMFUgXQa963N)f5_u<#F*)3vT9-C^EZtdt9 z3R?ZAB*0}TW`jA95h-<_ zhsoWfkv%1vmb4756Z4nJ=cjC*GINFfDhOFHH_I0n-s{ znONy=kTS8-wHd1zJ%%6^quxU8#kqj#uY-iJrX4v)Vw&>;Q&MK$%P2*sjUH2r&kKBt zOs(rm)!V;|40eI(Alow1MSHE182fn6zYB*F_$Ad(TVo&3*(e;!o643yj5JLd&-r)Z zP=0<%^>e4OkLPR@4i!vg%O4VreLUyig+qn-CDl)Yv5)6$6b=FaHOCvz`FG(^ zQGQAF^M$dG=P%MFkv>#BYTG=0^eyScctBSgop{c_4~I$yX3^Iv#y+02K{!+@Y8Sk@ z-`K}my6m3Z-$t5j_20CLSPnsz17&qb8BBIY8Sj|YV6~=wXYJG zMPIWS`*?2cFOJ#;Z+;_% zjeR_~_Ko7~_nPC4=hnVSoc%^)AJ47*m2vjZ8T)u{?XQZnA8G94xwUT=XMd-$kLN{b zoJkjI8MU7geaHPOHV+24zR`*2{QIz@6WHHp+Bv2laBJVn{b=4_W9;L(wQmz=U)$Kn zb30YHjkC8pSI6=1%yGqYYu_Qx{yk$K&!0BDW1RgE!#l-stKT_}-)ijRd1AT{&9ZdT z=*(iJvs818XGf;aZIDSrTIo{dyn&9{|!OZc9sZY#5 z2}aBjK!1_3&nvYHMQ8NBhR6Jn;JCVwPJ-iy6qLWDFSZ~a^DDYYJ-It4IDSQNE|#0) ziunl>Mdx#KTqWgGD3nRw{bb6G&DRTr7bBfOGx|sLrl_e;nJC&M?|3{&2$hTS59D11 zs%SzeXvI)ytMIkPJ~qz==kY1iKdVG_X3M*3hR5d3VEkEQc-5%=TzPkg;jwvemhh>j zeS)(W3QZSY)$rK77PMOqqf=X~LZNK(?yzZx*gUmN_}|7pHXjWWUcmI**t`>*q3x#J z*!(g`>~A%^k$eh;`pUbSrrah`9<*~wBHH;1j;{!v|L)PhqVq5P$mazC53Uck@8Rfl zckJC!afZV?I`)el-qYbh3;XqHE;c?NDZDW0-RbBw1olA>VV!#&`~JW_=yz=I>MwTe zdpkPq9PYOBFu*%=pvmEZ~FL1c4 zU%}z-aki_x#e;;qLh0_CvQF+;(<#ZUj0(9k~9kPA|vaZHI|u$3J=K z)xA5IB0QhRH;OCfw@;S}R>$YlE9$&LWu0e}4(;oF0eCNQ-F*9!a>4sNLp8nJvEtJC z_9d&w?A>u=kHdpDXUhuWy7@W_E|2NB?Y~hvD7SxGGRbAlLR%f)S{T24;c&Ju$&h|_ z2ro`LuKh00-dcx3dxTe(asz(I<3W8w;$jB&CFKuhHMej4<2{vx$cSCyXUL9!(ID=(mDM4)DR<|*S=5J@9%K8 zo@MUW?Sp~L*Pkwf6mxeR2*xhv?)bC9%7>V{<#rc;#@C-HJZ{_&?vEP_F461X3S5sP z!Sz_7hOU$MGM(=Lyh|-hBWv-0br|O^0EDy$$cA~Yw;XFQM6292sZHYA$zDjs7o&@%5Jo~C*zfpKFJ_LM+ z#{>PJJRa2ZgiLb&@pin{7Uc83{d9g*CRE>k@k6@(A&0yDzsA6ry~{HUigCC7bBPo0 zm)qRoz3rcx|H}-~b(#;=dB@>8ubrgx9S(QLf#7_mqy8zEtPu#t1fM@;AU! zSW@Tqbakrd)b+aozQEzqBt{@pu9%L?Zv{LV@I1M7onC;i13YVju5&fuBLROM@cn>a zm`5+Sv%}>S8N+3O{{?uHyfJ-gLIXYkymda^ehc8&$`%Os6IVY{K-cL5`0Id23hFv7 z0e=MW&jBx1NY}p|@Ogm$0(hyyy8bl|m#$$9w*!7vk(iEazXb5&MRoh}fFA?AUNK!K z3Gg=nKL~hf31Q*>;~rNhz{dgp3E=5V==JXc_*B66174z}u74-s3jsd@c%2J%{h@%b z13YV~n2ucf23+lMxs(kb>2SGp4FAaC(p3$wSlYZ8zsTjI0N>znIdw*$e3_Vz%kKt! z7T})(p0TX1-xcsD0ACOIUw~IFr;PU|A0eH^xx_%pn%c(Pla{v#vc=>vC?XRm4 z(|7rL!0S|u*-Micup00tm2~?L0B>Dcx8DNzwN-Tc@qljvJpV{x#sGYw0>Y z0AB?7uYlLBt?SDJpo?~_({N@+01@Ln1V&%$| zZa@;?Ujbg@YF%d%;6DIfrM<3mAK)thKM8o#4!Zt$z&8ON?x^e31pF?*X951X!^MR$ z1>Sf~tX!9W3wXCqy8X|9_r6xQe*y4qfEVqo>$C+t3Gmke-w$}{>tf}K3ueGjz`p>z z+V#55c)-5{yxtAEP7>fB0G{JUU8f`9PXWFQ@Nzfl`n>>u7Vs^AUvRUoUk~v69WJh` z5!eWL*;``zuKf_e4**`Wi>`Ag;7&Tl4>QfG+_&>utJDN5J0&{21W% zZ`bvE1O5Ww+Z-+~tr5PoYfRte{Q+MD_#VIu-J$EZ0(>aoO91~K@Pgg+a$5pE5AYoh zZ(=3Q|F!Ro>AU`7?m$?5W%L1pHmV zv)-labO8Jrz`t|2xY9=WnqDz|m%k5qox64WX@FU>N; zoiFdN^OJxN9iZFien{u(2kN}=Af1l}yv$(T{vE)(4AJdh0=(%^-F^q)&4=msp8&pZ zxNbi+N#|bzUSfo9{}SNIBX#@MqjbI%@Ebot zb578CW5726-f^O?^9A4^P15b(oviaur|A5pM|7U=QJs$g{CB{go~rBQeoW`>p3wQ9 zfDf9k+wTLs#*@1JWWdusquVzFd=lWF0bXLJu74-s3jsd@c%5f;{o#Ob06fnuUFQbC zUjY0t;I*F9^#=p~F5oSm*L51ap!1P{uLnF~wytwM;IjeW5BQ}o>iYcwUk&(Sz{|X( z>t74_!+^gH_));i&(X{62KW}hchA*z^3BuvQouXEtlO^zyz_iu4|tXZx_y1Xdjq}; z@Ky_T{Z)Xsdj;47o_>*Te;MEd0e>6tVvBYCae#jUc=}g$o#uc)40!e>y3PQ=zX!a* zQeEc>zz+d_<1$_6HNgJ_yyI)S&O*R5FW2pF1AHamd0*Fct_OT6;6DJ~eub_-AMhi9 z*Lg$N84CD1z>6pAI{g6O0(j+>y3Ri~Zi@KSH;I^6+(1@PYh|8cdhf6-ey z?*jN#z~2MB@)}+LX23rNywcmc&IrJN1-#8Wy3QQHv%Ra^cL#he;3e1UIzs_J3HbHv zbe*MuXM0b#9|HJVz>B@F>$C%W9^lu1pz9R*Q0K1!zG=N~UwDJgy8`|u;Q2S|IxPVo z0{E+d?*Y8XM|!z!03Qzc8o=9stn1&kS?AYm(fN;n-}9+%A0+DGxTCABiTS_RR$%{` z&U*pA1n{iebe*1nzYBQL&vl(=06zwJy)Sf~B)~ra`~=|Fe5va{4fw}^=iRRB+zj|^ z!1n<@>?>XWOTbI)(Cya(-sEfDeg@#b0^Vk)t}_SlJm2W{y#QYVc-CFIPFKJe0GDqG?QaMC2f(ZB({=6xd==pHf7W$&0-k%nZr>E} zet>TQJaRzSe*o~!fLA)G>r4jxXTY2NqU*c>c=|)S{WQQ20bcX4t}_|%bSb+1^?)x0 zyzCKO=Ptn40)8Cuc1Lyn62IzvBjDYR>Gn4q*ZGTpp9K8c-*lacfWHNJ3gBgb*Y$4% zd@|tg0G{p-U4JUzjZf(I?f=sGX29=0soQ@E_}za4d%%ZC!amz;jFDPQRaA3-~jDe-C)K%zFK|0A4VQZr>8{M*v?7c&Dto{yTtQoK3eM z1Nbh$>u};@<$8P(@RNWy&7tc&1Nbq(8|2h=MgqPb@Laicolbzy0Q?ic>*m(=rvd%} z;C}+%C_&dB19&pv={fO|a(-_Bd>P=`^XfX|0N)LG1y01J)Mq~6hXJpZU)LE9c<%zb z{c^zf0$x-S2m9kvTfmb5Pgh8lf3@eH!rZ0l$P3l_~8o0Pw7wm|n4O0QgwIw*X$Wq^{o$ z@CAT3xKP*W1NcV36H4hi%>aK0@P&Zy0=#Z%z1-n|F9&=t;6=;m`fUN92ly|5UshJv zUk3P(fHy3s>x>5c4Z!yUUZT9N-yZPQfH$k4>udu2x{A8}vw&Bqq}#6ryfr5jRIby_ zfX}U>+h28&&a+&s^TmKCUZUGiud4IofKRQa+h202&VK>?@9Mh!(~{WTpEth+y!>Ul z&Q!qv2E21kU1tK|n*lFUOV=3#_z}SC)Yf%|0=@+B-vF;%N7ug@@J9gO2Y8Fib^X@> zzp$=ue<$Dz0pA69xq7<(b$~w$_!ht`*Vpy?0KO9N@(pyIsepe8c!?`?o%VoF2Ye^s zxf|;GJpn%f_$7^Wo!bDP3;5T7mu{@<_W*nm;JX2@+eFtN4)`*_e+0a6Q(eC`;KKl4 z3iuCz7rIg}w-w++0bc@m@vC(Gj?HvF6Y$>wAKF~k>C!^yF9E(E@XHf*og~251D?=Q z*SQh!a4X%uHQ>VlUkdo|fVXa~m-`st-vC~*jjnS);4cBbAMi`t>iTy8z6S7&?R1?w zfcFCYS-`gep80CM+6cjc)1&N`(A)Q3-}hm8{eqwzXEuv zn{@l-fS0;ix9<-4D}a9sc==m&{n3CQ1^n_Zy3XBzF9rN}z+2y{>wg1y%iDDO*?|8A zc&FQSop%5)(p9&=74T%h^W359+ywXwfbRwTl5V>G1Awmt{2<`N?$q_S174=PZr=;= zC4m11c*7pL{*!>G0N%2vuJbIu8K;7T~Ykt?PUXc;0(-`|AOp z1o#@jj{|0w_9e^(ayip%rr!V03?$hlb1HAnGy8SS~zXZHQUtOm? z;G+Ov0r<~=-|&E5?k9jReNeYA-B0I9fFA-p(*Rwk=0iH44EQ^M{|flk19knE0na%| zx4#SU_W>_GSl3Ac{9C~D4$*a*0X_@x97A=To`8P{c!goQ&JBPs1N?^Jx=u3Sp(NeD zI^cH#{uJPw0nac(FSi!phXB8Mq^^?;c%f0ceSg4L172XXu9FD(IKb~5qw6dLd>7!A z#_BqK0bdPx#&NpN^?=U;{8PX)j@R|u0e&3tMiX?Mae!|IywF5l=T5*E0{$!Dbtmci zqX0hw_<)CXojH?regN?5Q*`?QfG+@i7vOmw(e)Dn9}M_nz&kyv>#qeo+f?1Y6X3G| z{{iqS({%k?0G|nXr^j@ip8%i!gl_*0;0e=p`(}Wz2Rz|PUFS-``vac;DP1QC@QP3C z_KyL6`3&8D7~o3*{{irx&*=Jl0l#miZeQhDozDmSFyL3t(skAXUhFyD{z1S$0ldQV zy3RDf4**{M1zl$%;NJt@V79LF1mMR2zwJd`XD;CBUefKG0X_-v{eWLTN7tVP_@#4o z`-y;W1HAY=U8gJHF9UuE@R~2{`aJ-D74R(cb)DM*Uj=yW1-i~7fPW77^$T^KS%Cil zc-2>Qof3<5-X8E#fNuc&B;eH+>*Wpw{3PIGUe$Fz0=(4{-F^k&CjqavRM&Y9@a)TU z`<{UB1ibfax=!)eb$$on(*geo@OCS7{po;j0Q@B2Gv3hkyCm!UEx?pSy$_PIpC$<((Stgz6$WVYjmAyfFA(-s<(BWX93Upj&9!-@RtD( zzpLx?0elnS71!!IPXm4w@XOcfI#U6E5Aba7={o%Z-w*iR@9R2C0sjH;{vYT%TL3Tm zp>E$5@RtEU1bEH$y8a-**8*N_gRb)+;GY2Aa-*&@8}NOA-~ExUvlQ^(0dMlLu5;-p zI-daeYQQsW(sgP9-V^W@fVbJK>(2rF0O0kv=sF_+{}Aw;pXxf-0zMw_O@N2D>iRVS z?*aHbfd2}3-Ou!LhXcL?@KW1!o$i3Y3wW{5b)6Z2e*$=gFLa%I0Dlhft$<(frLKQD z;CBPQAMhdDb^TWX-vfB1uXLRefPVvc?H#(#dcgkzyz1Aw&N#qV0saf%rFQE2LjeC8 z@T6~ao!0>W6Y!3^be*RF-vxNNZ*`qsfUg5Q>uz1=YQUcW{A<8Vf2Zqr0(>0cs{n7a zN7tVQ`1^oY|6bRb2>2Gj3;v+%+zj|^hj%njdf5Lm{uI-3`Ez@9-sWeWPuZ{Yeg|~^ z{Xw0tKBV&uhjpF^_!PkJNzru<0N(0|Za*LJ`bTy9J%Bg)Rkwc@@J+{b`+CQ9o&3lGb)9?v)_M9+dUN5VqhGt% zOLM?K0laQHT_+jvJ?VA(c43{50Q^J1PXOLKgRZ{^@B$Itegfcs1AcEtU8nU0I?t3@ z=TiXxC5vvqGn>x)X4m z=FxTf0-h?*d*TpRO|y@Lhn{$*=272YdtIWeVszg8|YOX~J*0e=kegMeRup{`%Pl+N!4{B^+h0bZ=MuHO#u#{u5~c=7VOev=A19|w5( zin{$qz-w0m_JG%}tlJL({8hk@1Ky#EuKy$87hR;=cLDq*z$;y>>&yfEqDyr99|7-H zRkvRN_&0!;t)}bT1^BCg?*V+=rMmvFfZtkOw@(HA zz~2VEem!01alm%~eoK8_=S9GO2K=%Hx=xuZblwy2X8_*>c(|diUlZ_=fWHoSmqxn& zT)@*c*6nWwd?nxon*bfa7XW?~@On*k{gHrw40yjQb)B~Wk6fkOw*-7H;0FQ!u9>dC zvANE>wb1$SM4i76_#c2bY^m#v2K+m~>$TE#k^p}V@SgxL)>_wZ2lyDklL0>fc$GGK zxyJ#o)K<5@3Gf#H54F>Et^#}j;0pl%7Vr*N>*X#0JO%Kw?RA~I0G|nXjSjlbLx8UV z{0QKUuhI3l0)9g$-98!cE3Vb;rvqN8vu@uT@DBm6aGkC*9PnL$-+H~SlMHz12HpND zzy|=n0Pv%LUwxxq?h}Bo2RzqJx=s_oCjtH`;Dv71^%nu2=@#9-4dBB8FV{uac@glF zfM0v7uCo~M%(vo#;CXM?b?yfI1Hf~2)pa@nJ`3<40Iza~u74lkF9QAr;61zP z`s)DCey47KE#S`p{vF`?yX*S*0{$`Jm3rtpp99{cr*1zE@Ku1Pzf0G-4DjxNF9tkw zFJ1pOz*hoZ>uz1=1;FJ+X9?iH0p9ptU8h=ao%aL$Wx&4%JXarG|MmNIp3qn4 zR|1~y0p0#4z?TD_^Fdu_IN(PBZ`DuNc@^;N{dM~ufUg6*%m7_y7vS|C((RJ~{|fL6 z2kJT<0e=ecBY?LWr0cgFtn=nWbiNz#zlQ4eHxASJ8-OPa*X{2Dd?w(V0nd=6>(>JO z9>AXid@JC2M(E`p2E5it-F`6O+W@aVO4k_x_yWMc0le&JUH>J(6UONFR{}l(@C(Q4 zI(GuT5bzV@be-qM>%9I1ozDZj{zPC8c$-PO{WQQ20N(0hU1vVv87AxYqX6Ftc$q1> zPEWv}0sMQw8$6=xj|6-@;CUa_b#4ZHHsF^})pe!<{w3f;rs+C=0p95`-F^|^nI6~e zZw34#z{@?M>+}MA9pJ^M>pI;4UjTRt;I*IB^@jky7Vu6_={k!5KMr{Pr*)kXfPV=1 z3Ba$Jq3gc_c$Q~$`W}{8zx+Ez)%!2YdtICjqavSl90g_*;NSUe$Fj2mEfpX94~x;Dwgx z<=z7LPQY_7)pdFTz8LWD0MEZn*KYy%Aix&^{wv@WUen9H0q~~)KLYsd<+^_3*LA)N z@Nz43`?Y{S@P=-mCt2t70l#;pZeMDZ&Nl)Z?Y^ML;ec%zNF{zAZy0DkL7y3QQH z4+DPF$GXmkfam-~x4#DPv4DRJc-~FAelx&l0p4u0uJaJ!3jzNY@cdhJ{Tl&)9`K(4 zFY>9b-xu&?zz+aka;vW20r1g)zXAAuz)O6lm)jojQGl-i{Aa+cZPUx02>3R@ul-!t zSqu1zFLe8pfLHrcx9weblPXgX_zi!_T@RtEEd_dP34fr2`KYUQv`4RAoe$nmk2mB4d3m(#SMgqPb z@LY#=olbzi40yd1U1u)f>5l03*8{#3@DfLLo&JEY2E4$px=wGvlK~GM({-)_d?Mgm z055o4*B=S^*MOJ*P1m^_@TGwN4tS&Ab^WIRKLU8GKXjcB0Kf20-TqF%_W@q@gs$@- z;A;S1^p~!)8}NK5b^GRk4+Q)bz`q4N@85d4*8{#3@Dic0n#bTvz)Pgl?I!^K8Q_`H z>pFD-zX$MTfd2t_wXj}pcfel({3zfJGU)na0p9|6_lU0ZG~l;q)a_RR-sS?`eh%QF zOuGG5fDZtC0pQ;No{(8DHwo}#fG^IX>l_38wye7SHoymG)9o+HuJh(ObiNGmk~wwz z4uHQ8c=cSm&LY4|6)_l7CKEUtKuiKvh zd|(0HzIs8OcLV%)z-JZGb#fKf`AEQz0^X&FuCo#Fgrd6rm4NpLd_Lg20WVNYFEE#`@C|@hDy8d;1H4IT-TryNPXc~@ z8C_>N;6=*n_I&~W6!47Ybe&rOUjcZ5^19Ay!0)M`+mEZL^WA{oR!O(dTv_LL0KOLR zl2vq_0f27-yx>K;PD{Xt0RAfAKLK9sV!hmUfR6zD9l-CrMAy$&Rp-;H>HI6eb6l$1 zHv#-Tz;jgBbs7Oa5b!?$?@&Y6UjTUIGTr`Wz}Ev_x~8tv1MqhM{}u45wRHWz0iRkM z*aJShj&8pX@M4$i_U!;)19+9Xy3Q=XYt#ewfd2q^q58VceSmKOyi5aKX9VEC0DjpO zy3WIZZw35Wzo5Bp-x}~I03Y2#*Lef*{eYK9)OFee zJ__*qEp?q|TIqZb;00Ri_N@T_1n>fFbe%-NrvQF&TV3ZVz%OnG>;b>xYTbSm;41(> z3HUwjb^Yytx9OnU?*_b0N8NrJ;O_%obK1>Grn(z5?*v*XlZh0pA9A(ayTg z1Au=F_(j+0I->#q2JqU~>pDXK{~YivH|RR;03QMPhk#eOQP-aa_;$dv-=ym_1pIrz zufAE=SqymQTXg%|0G|u^LBMNt(e)n!d?Dbw0MB!)u73mI%K*=Qo37Ih@ZEs7xn0+p z26%z4y8TUnzX13Fz<1oC>*wsI^TvQb0Qg+MzXCkRoqD;A03QSRF2GxL*Yyka(D^NZ z&jWl1;5mEh`i%h}3;4%?r@KqnZwvTFz=!tIb=Co%^={q10pP~~f8ZWnC+odBe+KZJ zy>H* zz7z0^AJldF0-g+bsGqLW9Pq~h{}Av}{dN6o0Dl_rZvn42K-W(K{6oN-KcwqC4EVc% z{|0!Kfx7-JfIkZO&wy7Or0aJD{0YF<1O6A_RR`)ZhN!+`Gtyu}Dz{~+KOj@0e%1bhwP z8As_ltpI-%@Gk(bHd@#32l$(ShsWqTEdU<`_#(h}172mUUT$B&R|DQ|oUZdY;2#2h z*?3*&VZgTnUU-78(*^L1@?A*j>HA!+m-qaV&EdB=Ji+77$mjeHzumDf>~PlM?~UP~ za`q*}<=#Z^hb^+8io@CdcCoJ`od3R)yyusz(|2djb+|c(P zm#j`wPF$}4Jb z`bAKmUBZ`p_VRdO=pB#m5dGl%2RicjPe{H7&0ME^eQgwd`I@pgE?-v_Vxr&g*fRE<+_e z{CS#IB>$5kkU9gyU9AJ_xlg~H$U?5_~M$>Y_9@Ah~d;Rii_tMETO-dT7=UW59ymd}Mf-a|f@_xK(1xw*#& z%I6Lq?hZ(E8vx$P?g)!XA4 z{b)Klh0UgZzR|CNRKZRKFQ<3 zJovc7x!kJKuby@|ms>~9>s;Z%_z>8y^LWtzcY8eOw{F-KjiUVa{WH(@l8|)|19zNEJH(~w}c1B zwL`9pcOB0CypvoPTO1wf%0_9IXTMP9m;D~^A^rJxj|cO0M8+qs50~3d>=QgbTzCR;F6w~2joj}H*u(c^=Kcky`Om-O;@;Ft9G_!Q9@>G2uDr+EAY;jejo zp71w?^SB|%T#p+(`?utJ{M_L@{si;TR}Sav?x2YM=y0~*C*%Il4rlwIeU3Yv?VHGW z`lrL$K4`ZKWLycxpBZAG)!}S^RO(Z};jEuo#*rcpXZxU?%R8LyZxj2<4rlwIU)6Fr z+piS+x(;Xipr5o99<+ZM`W^ptaqM~gpC#jY4~MgUGr3Og^LSq2Lp}YmEKWZ!0lpgW zKOBAIpGbYOWVd=j`#&V*7IL`pD`b8t<#4Wl(2py7{AxMhH9WpX^y_>4i10+=L3;*% z!X1Fm^mr~gu2($$*QGu?9L~ozCGe9S&d1eCJ|FaWM)`c)<7=dSLpf5n=YzsCd%UXf z1ds2NdKU5cqf%Z);X(VflH{Dg6FnaE&&P!a<8yG|GRLvM+8(0$|25D4 zf#80};oP2W``ABP=WzEr+U#()|NK5{|Cz(tJ{V`dbvWB^zu($_?{Kyc#+kzoXZx9b zt^KbKXZv8>PAB7Ka9#W<_7R7(eK5}Cb~x+LebDOXb2!@vS`x4osGG;lcUWPZr%H1l}B0hYJ(__6+$U+3{xgx}_HE_arcd#A&>+&`q;-X5QD zneA|c9nLz3L}#?aStnr-{YO8OJw8PEbdMJuZ0(=(c(U-9J>GeUwO{J-nZj3jyxvf2 zzs}=Zg@5evhQqA==N^Aw_%4s{9&YXTdVE5X@WS&_RkRxXZmQf?{FtYop|;hZ>DaSQ zFfY8|aMo#8)0Vr~;cTBv#`!lr{joKy{${{`@O0XV&YzzBY|+V<+v;&Y;c|zGeQt+y zJ%5&s%Hj@Z`^92k-r;PYN9?P5e5mj`9{*6%<9)&5e7rA<{bEo5gy?_d@z7=TNA$DLD*la4)~m)=tUa2{?|TJxrAbNvg|we`>CaJF9~_JthI_KhyL_N6?&PpPswEh*!5V~2COw@5wP3J=cvemUM=9{)}FU{B{o(HZM-E;pF(CpnzU z{X*=Y^7PBpq+im{>mIKle5=R%3QzHPN8vg1TD{=7It#Dj@vU{OT?>zYA^djXLBAa) z?b+Sod|X$HWncz59~JRYiT|NbH2LH`fQ{4vF| z?<@8T0pIB9G!&h!4(E2;Chhi(!?~S%i~Sylv;D1&Z9hEhaJHW%_J25>?Td(gxBz{i zpP;{e*2wB)^Y|>``8H zdp%xN_}`w+bZNJu1#LM&xdE>$oX;=ocM+W?4)09-sGOJf4rlu*V&7YMpueEDE$?B# z7kGTJ*sl^E^tbYjZ2NEU>{p2W&mONT^U-gf&XsZ=(-pGy3iSI6&*5-Bt~GL8WrPRE z)k^dm0p7*a3CXIM-*B*cX+6+Mu6=WPZ9-cu=2_QlGYf-{a|26`cni&h^QCr9JPX9M1LWBK9wM z`qQP{w*mjg<1@tm7e}AVZ7SuS^z3JgeZ?YVL_fjt&K2Ga@H;%dK)3NU1b)wKhjab+d}-Tlp~oNGZuxSDoAWE}xzgdRGf(W-dVGiQ%?@XsTr$6I zcR1^m`pTC3oyP|X-|z9yh5zdDsynRCN#Q~JAC>iotVO9X`U%?e9kDOuaIR-Nsb?vN zb3Nbu*6LUGc#GYZ*YJ38v9Is(uEMYKcvy5g3J>bP=U%RLDAWV+5snVmf0)#NqQklV zKg+txV;*lhj@4;B)#D!tpX2dPTLD+CgERu zeBC5#|AWU@PPY6Pk8hY_`EMSd`H1D|irLqopJad3e$L|Yp~CZc{IKw%9-lhZ>Xh|( z=Ep3**yGKgu)LPX$2@6yLyxb1%kmZ;FTKX{_8w3C*zy}ZKH(3`y9*Ec;f_9*Kj86M z!jn9{K-S+Td%UB}A2Wn=JKsdoo21{q=y2}0zt6DczT)vKp0WIOkB<_*#^WCe|Ip(F zW?G$X4!?;|F7bE2aX8oK7P0@y<1Y$7?D3z4|Kag!&)Ras#qDd*-;T(6&*t#~VxQ0B z?+P#O@vO6~Zh4P)5MI^eeWzRdIv(FGys^itNIz`p@ux+t%IU&Z4kq#f!woORYnJ9HEtj90<)7Y}*7XxJXlWRJ_^ zilNznza~5wuMSDM$qwiGua|nh>u|1TL%Hwzz~OAaeXgy~XTpQ}m&{=KLC2nT7K_di zhqF%hdDi}f$L9;rT+;qNsDH_V_H%;6S!dPDmKX7OyZM%v@wwPvI--d1wFH+sCC@BtpbQTTXIKmCG``FYIYT%TETyiYlt>vPc}`j39*lr%3x zul4vL;oo|^Uc~Dw5p9v4nV{bXG?GESTx=i}>kDks%>4zsgK1Fzu(y7~FhVUA~gL2nMxpf@Q<#v~H zuX4EQ4|3nz*5PcwY@sc$v&WmiV)?BeZz}dZJ^qE1d%wfE+%8gXe}|iLMSqm=;Jh!B z<9*)aD}=x0@wLJ?dHR2d{#Op?`b?4f>~c8Q=MU+(2R!{{($BM$vF#DmbA|Bo9?u~C z@Jf&G5&PRb{*&;b9?ul?PmgC4zCw7kKge;t>2N--(Q&XD6e?AV+36rE!ZXPrKx^S8%$zHarim9?)y{SS#wK8Lf;PfM*`agTRgW_fv! z*A)Az9{*bEQ^(_z#lEq_P5a1wW;2I#eHKc&9fb$&vq{>gkH?Q@vh|$c=&*hl(VyaQ z);}Wp&w4s#GFzQZ9uMNzzx8wyS6KUf9)Cgj5s&{Y{DjA=y>E3r+aZ_S@3nL|>$iH%)}y1xUle|m z$I~sh_T4;wz3_WIzEpUBhjV?}Nqq)8oa>WK#`*EWgZ8PB$(H-9$JYv9EIeqp`J%JZ z;au)8DR+&-x!m?*|Ea^-ezDl^a5&q~Uq}DZ&-WhB@Sf!dJ>FjIk9+*sT5BJwXkUZ+ z_YNM9?u~BB9C`kV|8kJ{5|1Uc)Zlx*1oyN2MWL1;|GLa z@A0eNu{yVV{8{0>JibcW`2mkNf8Xj1@%VGX$9TN`2iAUy$Mbw>`I8=BDExVkf3V)# z&-Zx32FsUu{6^t#di*uv?|FR1M^@)khjaftB>i)j$4kn(z+Q)Qzs(~$DIU+U(dz%{ z@du@yGgPv_5Bg_5Y0vB)Zz4MRJ^rBZ5+0u?yn@Gf2(RXFKHe^JTs0le$90t)*A*Tg zAiR~sS!asq+$lU5XDVd3$2rO4-Gx67_)<@Qjp(m%IM?&`%~t$m9+dlhqL|5 zpIQEi!%aJg{Z@ywefd4s{#%E${bI4-=Ww?FQ|ym;e9-q+=Y+?XihZQA{e93M?iQZI z;au*alGZMd!@1mBf3Uoy@Sy!`$i6^*kJlD{y~o!Izsu8~Bl-_|_CXxg2+#f}Io>J2 zexb)hQto<>XA}OFr+=~3XP;-^RqQXQV%sBVhwj45czmqzMjoFi{1)MSUby|MUTAf@ zJDl4;yv_1H9=}caLmpo#e1ymIer|Opdi*irk2&1*TdB`e4(IwD6#F^CgLYVx)9SDH z_*&ryJiaHdwg1c0Kl+{JIWDrVf&NI*sqFE-!W(+LzwjG{2kksXj_X#3^KrG_V$194 zaC2RV{k;xn`)|a)zsI|MYIR0AoORmCdeFlTXPt+>u=Y=Q{HX9*9$zDTp2JyxnCQRa zaMpkCORK+9c+j4Ea#{X`$A1$3tH=B2w)QzMwy%NCbg?fgJQ!zMOSu(+{Z$^HAv!mB ze6H|bp8izPAL!ZVm3mJ1ctPQ>dAzppEgr8Y{E+aV|E!UA{@vl+&Rw_Kc1eGUyr#4F z1-}W;>T~HQc^%H@F;{8(_k|p8^gpw_obaIiE9A7iiN~u5@8a>=!XFYI99Kgrcc{a; z+!|k4{fVAV@I1^sk7tte^`6Ir=TG){yoT7Pt7^*$j;prt;vR2U(Aw4YcvIomd3=VP z$DYE2{+VsN)w$o}orDka_zdBrJic4_!yfPdmDPX3;e393OFPeSIJfg=v7aYAXoodY z|BW7BEBqIa*G{nI=BQ?01D)S;*v}P&2j_j3)aN3HbA1Zzu=baGI@3kJgJW;{Z5eCd z+2O3SN_6h{-ncM=aA?;?{L<6cBi$U@A0hP zSia2T2c+CLJw8qNdmg_^^gnSp*C$x7-0EDi zu}fL|xtPOQ|7FpyB0SK~EA#J7jy=~iSg-8naMl?v?R>Atw+rv@@lxN}`V9AYcj4n5 z&gHI=`cHN^m-~v?&k!EezqZu>4UbpJZ_EAE;~m9*ucOc99+GkoI-JYh`lHo3?(um) zSstoxUxV@Fg`e%`><(xBhUF~J?{L=NE`DYSj}Me`D|oz=@XLe;?a*D0x1D3pk+dy&+?i^JJ|vDn|?aJJ94m;R%l`-BJO2K($w9edW3L<3_Y}TIcu=2$1+0CB8um4~E^?K(pEEn0>$6OB@(B-gW{XZK&wiVn-%C9E z1!CXA<7kM9%yy~nG5YxNI0+*}uOUXD1N&&z{iA3V<&oR^ML|6-R}y@0P0Ud!XX zg*O!*wC5_(Z|~U$@!z+2_V-GAcK7&t;SV~TkE^#F*HDM^ab0}a)_bhS#|VGK<3Am; z_D^|yqVN|y{>LxYeu2lI7XF&YuMoca|D)^P<7=+}IDj9wTx0G+8Ie27E!WIluFG{8 zM((*x?u_PEVli?nWHL-{Bgr*$%e9(vPt0ABrre``-}iaHKK1^+9*>+}A6 zzTa~&Bl0VEwC5oC`|u?4XE=wm&8Y<@v~lF9pD=W&0|FfR9JJM_#YZ~aJnmXN=Qb6ZKi6TX3b3VODZe+Az|{ww?l z`HPtIN8_@u6zuDa@lem-NB$D|cK99R(i4cU`)7Vl_wCNpS5V)tNM0N6{$85PJ8zG? z`}rsY{hf`=oHd_n|69goo>=7F-(z$4`R_jOH<;dIDCJX-A8B0rGiTELWaH8wjISd{ z8<+gg$j>A1mRWl~C7*}LHQ%tZ>3c7t;tWIXCQepd_46BV4i5oSI7LT$!o*E zArFIJArFVAsp0cK+D)Js&A1MwcY$=`(+CO-@>L7qbv@*Wk)W8kkDm-`_F z^VBvj^ZbJR8*q2MwicFlpKl=fPWUYH1f2g;>OYlH=S-mdX!Lwb-Vc76d?5U9(=Yo9 z#MkB1)%1`1@85H2_DtW;W?b@7$mcXJ=WrPLg5<~l(VmjVr6(CZLB^#gKArBj26?sg z>h;O*Am7}$^atSU;~~bSzfcD4=?Zt(%Y9$|Sn}I1dY|My7LZ5c&&%SezX$ripnME^ z5-I-~_VsNl`CrNBqURs-Sa?7!omXy4+3!vC7lFI|7Qp&xy{!5I@Jjegm`Bswm#(lDZ9r>-sr9T$^yNpZ!Nc_BW1n%}*82A4T@<4d{+B%oZ zmxJepyYt+M{y^h0PZH)SVO-{^i2Jh=-1R>#tn0NV_u)DYByRy94|ns7Kz}sl%OSs- zJP7^`c`&}taD}`fJWZYdKc84!_gru{&s^O9g~%_!i<6ha|A?bJ`Cxc8^7ME;tZTfh zj8;zPYiL}~zbo=@!rl4r$Na;|55X6Z2jlg5749e>UkQdJ!mOdD@dNfp;T+7ysaIU-DPr5#(p!V~qRH2lGrYF7rIVx-;PJ zd_r(O@#Nw7^OU`&NBWb{f6%z}*Uql{Jw-in=*d{u3waN>?q+xaxVw&(b81gf@@RM& z@AVFY^Rp zp3jWSJZp37IjkX{m`8mxdB6PXdyGqe6#9=Cm;Ozd^GEWwSob{n6Xbt^yYmUhIiwHv zO1+0%M_D%!>t+rX{qOG)XTbbjvV_u_BC1 zPheg>pE2ai;giUJfzKeXm`{5a!reRt@aGy^Oioya1M$4R zOg(ea^Bd()pyvtYTOpsRzOLiey@{_I7r^h=dQkp5}y=oSWc&E=2hj$akXrSmb+BJ{tKUlz)u;c;j-;$vEftjLSKv#dVxT z{_P8T{tLu88(@FfRKF#=g26m+Mux znCAPDXMqnTUjZLW-oL2!OeWtCk0yTyJ)gkczHZ~!Z(CCFlcq=Z6@h(SFfRM*7O3;w zAkPC&AwPn1drTe$Pus{V^&V-xTIsI_&q^ML{ycEEuf_O%K~c(A!}(M+F8hkbzN#CS zb=SYF`>IDi2HuQ3PjSt+B|n4n4bPacDP?WX=4nDY?% zGWZqpCh*(jdEwue3JKd zHp&;eqWRB^OMejhR~eW7S(i1RKzd-93!^VD+_JsFzFF8;gj zn~~2>-uSA{nIG=vd4!(gl#fQfl5shQaGXOe<8ls1u4#Wm@+t6^WS1k6m%ed^T8Se9M$hW}1C$C#d_jQK+5d0GP zo251XEBONWpX7mMH2;)*Cp<$_+4X<-L!+{q&rW_Ao}WCnoaO_`UoWp-nmla<^-ARN z@LJ^cD{8(Wc}$RcOY-009mr?As`>8ZB`c}-BfkM3O8&62<|n}2{WGnyp5qMihJ)1? zlD8YAzRdK?eHC0ueWh`^uZmRFbvIDYl!2PxN%{NdHGj~!^hcoom~rX<2>)ZPljLXN z7sx+vr2RL@^EFmaA^&}_`eX8gBh;UJL-!#+AIY34m@|iQne)?DnlC{9HoPc#QFs~h z(=D~9GWmz_+T@MkjmYn|(4JQ0Te06R#{Jh9_en3~vadDh8ALuBK9al<{9W?Dn(I8% z$lJkZlV^c{LcX_|_ADnK3tvlK3H~K{izeFhHTit_LGrusB=S*BwdX8(=o{*n$v=hP zBEJg1$Bz5t8F`u3+W%a$|L#w@UR~ii$g8}m`2yr);YG=Bz{`-gZ=*ex$(O)ulRtqs zA`fn>J*~(e!MniS>zMoVi3pRI`!)vm?HJ>74rws|B=YYuy}~LHItfw#Fqts-5P;j7vTi z`5wk4->8S?2N;)p0KOk+h;hlEMt(H;^*-7&(YW+Pq31p0((`M7&Cep=JwSaS`N~1+ z%Zy8ZGWu5YKLQ2ahK(&YWu z5$871xUAa%*DKn%bmJ#dY|k)-1!fJ2f*Dt+3@?WAd{DQ0;>Bz-B;DP%<~m`8XK2rTsJE?i?cU^~5#gz3_FVoz(LMUIz{u zmv!C0kA2LztlJ6e{zUzA(VwlA7xEr%o;di6aCaR?_tp7dA^!nhk-RXTFV)F=!Rr~9 z`IB*Ojg8CvpCjKE?&jQzIU~pm;69&Deg^p!Gp+Bl!VF!bRGmRN*;qh*Qo`U`^tYl zSU1?Xf4|*y{+85}Em+qZKpp^ppS&=91$h|e+)Ew~zepYhe@Z?DUg%Ao%bmkL{JDE| z@~iNcxgn3pPmwDD8{{{6wMSl{x53g^( zk?(|OZKrd&eU*ckA`gN$A`gN0ByR_wKz<(I*EJjN?(@hFdc8g&-v?h#{s6v~ylhA9 z`I3A+{A=U>=XD+3|32e#&JU13Zd~#~$e%JU`8q>%-7Cf=ACCNO_TDFZ4|i@|;Q{2U;4i@4^>trIeueTihH8Hm<1&8?=C5O1=5ID!^Nq>#!&{Rl zz(dJL57V9=n{ODG{F;$Ee;e{q z3F_UAOOG#D-gy6>u5tgmQJNo09ta;xzUN)dPbP0WQ9YWxC-U>ipM!r&zHox}tRnB3 zq`uj>|9S=cx8>VqT=rELJ>QULgMUwccD(kVAs-9BM7|d1^DB8Fk=7eS{&NmI zr*WA-A=rE4J@Ofs|IC4NC_-KzUe37mBnNwMyvG}GcW&z{|Jm8NOTdYm7@i7{9JdFfRXjYP06I8TaoO`LB)3e{M$q zLF1AS$JafM8JGX8oT&XL$uAsKzhKq(Tah@Tg#Q9ki4&37b^h4-SK z$yj$N<<}xV-{fWfSj@lFxXeHNh@MY8d0w3JM)IA=e+_s0ZP!!hKWp;->xgwP7?*Vq zqW>4;k`KVwA@3NM{9;_+zu<1&t5~;oXI)>eqx1x$r;%~#xs0Ax>pNX{xpB$IBEQzSG_NyKLVdbp69UUXOM@%=NgxFBe3qr#{KgnzY^}wAy2sX zN#0{0c>&zdKa*Dp_s4yY$eZGv^M&chU4LVcm59@zgWpfX?%UaeoE=9CNF2 zS+^4M2aHQT2>Bz%CBJX0_Me8kIji9P6qA>pSoGXCE^Edh2ZQ7p|`*znc0N>}7 z$GG%-wO#WslGom${tEd#ct!G1^i(%4{~3aH>ll}H@1ds|+?|8F-hIi3W1sJlN5NxF zzx-zu)?Hy-*8LjSYZLXv;ePm@JRW|VJUw1dvf$%x{xf*LBzZF4Z%E!0KkxS-ZvlT7 z?yh43_BGA8>?{2@dc9_oUxj}{9syr&+`mP9zmeOwtSkM!@$0THk$3wYh;ukXJ{*3L zdW%k2|kJZ1YRGOlAnR^Aa}q1_zv!#NBO==zj;o_TkqrZk`zAa~YR>0KN~Yka4*#-QQ2+z4iHuldpi6CqDzPMqX^1_S7XG2yaTh z1^y=a-|)`lrSWykzQ$!=?)&E=jLW{-e4z7;AzuieM1B-LgZyv!T=J&VwSNiu@9>r6 zHD+jj1NlVwR`SE}J>)r~wdV+VcleLwE8yqJe}i8mul%9*-yt6le@K1{?!)iH+(fOjUJKUe$v z!rkjwd@Ff&dH??+lb8E80?)^(#^t^pf&I=TuMb~9UN%P8bzism_x$0jDIW*lM1BUo zgFGwN-EUmxkH!3ljm!MSaSlI_cZ6RwEK{NUzTdVn{mmz?+bj(xa3=*f1q*ye(`n4p~fX& zCszB%8kc+s&f#6-lHZB^H1dV3v}d+)|GMazZ(Mr1tkL{Z@}RZq@#Oh8sBbjxKL?!u z7UR-C9{JtIB_EFbe&dqghy1s2cYWL8>rm$?{{Z=4D4z-WEWN!_@8NoG$|Bw)KioZE znxUsS-o(I)S|j#ziLaangW z`WG9Qybs^!w9L5VKfv`}4|nU{!@9qlyz~U2=aF&g`5rxK`gren4|kqz*6BH9Azuj3 zO@09$2zT=o#-Bq3o4m{uj(Hjxmw8I9*L6D>mwXKJ-Hl5=@H5T#Baem;B_F&@^JB^L z!Y7j-ghv~fd6F>CY~wP|HLUw7+?~Tye81EV@)P(zm6N7N`hCcsGcNsQm+Sn$P)~Y% z|3tyQ^2vG~r6&kIFB_MhGV$6|j(iHdD*1Qt*U9s()}AKDW!-SB+rqf48-{!*xH}*B z{Wl}Y-Ji$DkT=DC*N`8=x`)Z*;J?A;K9@OT;17(;oOj}MU;mKLf@kXIg}jIKNWL08 zC;1dyuY%-1!(TQo^CV)PQpTmf^9r4(D%_o0FMK~)8}dW&fu=|LQ_w%uxb(-Oe}Zwz z2cl=Pamm;DSm%j>yLsaAyjX4W{&PmpdgIa)fu66(KU}2!`;AMF56_oxjZ4qiPc(mu zyeN7ul4nQ$rg7;HLH}>YrN7c*?SBGy`%T7v^Y`~c-oyD-cop&#cq6#Ge@3G}#JJ28 zg?ZW=mw6uJdiA9KOvt}Wo(;a3JQTj2ygK|ed2RST@>smi=NurX@ZUMa!7IYu^DY5B z)s4%(>aNstu19_q-i&-IysdFLw-oe;8khby`1Mt9xVv8Q$WJC;3tvdS6~4*z%esMh zUHZznta}r$d;6)U6uzJ75_viJ-{d#ph2Qo{y@#9MeVpeP<=YhXNo(Zp?Q{nFQGiHHaubJeh;S0#KEYy4~d0qHw^1bj)#^wCo_d$MTTt?4= zpVtl;m%IS7!;Aw|=oAe&;KG_b>3U~9n{sNT$ z4f&$vl~3xr<)|kfbJn2z80704m+KOOUvD%qF4yG*@*(5}PwBc{jZ04ydIlMno*l?f zBM*nqCeM3X`#*uZ^C^s9N3Np$T;#trF7qT}p0AC|JRhIY{)6Ow;7R2Fz|WE&#JZQs z1ChT)ehmH??)Ehtzb?!h;SJ|K*ek=`&(|r~S9RmEuTnqjzUq-rgf}xT=MyBKF7vqWJ6va6 z=4p|v`7PvU;JeA!q5ly1pYY@4bI@}U?&d#%*M+}Q@xnvB;k<|B@l(G4{W5U5?(#>t z^K<#xSIxNWYw>m6S54!RAM>2%8ylDW-#0Yh%(&#oBj3TeQ{`z=L2$$RWGE>!=n_8cRBivF{3cir9J*UR#bzwY0kFNSYU z>xbOrtKfyne}k7W?ti}H*DYm?%bbB|@;-m)xh)~T246|u@K4QeAYTsON?!Gz=J$}FhaVxYbzk#88kciO!oJQJmwhcj z{u24H3F*9#dS53q?!PYhb;v{G(sSs6uIn4-|FnPahbj-%Gn0>n=ORz{Nb`lrqv6HL ze}I=K@A6oCs*zuW*ClWMMDtC_e}KP9e(NvIcP3B!O#LnLkKqH!FTzKV_xW3UCXo02 zNBw>BC-4~ZV4pr;J|;g1|BSqH8qKdE-vr+Zch93kI*#uEdFVL3556-!a{t8O{`t|k z+&|~j>bmEtCrH`%3+0=p(+}J;F8ztD<^WX1ZrlO~SasTzgeqS^$``wCs8MvFXa9w|`uL*e|ychXE_z3F%8~sx#-vaq% zcqOXdc8W4fAhV1ALBBQ`@ZWT#--<%Z#6%fygm9Sk}pMmI(aAfM{u{VruDo< zyhkkMGh)tlspOB4w?ofQ)YB3@*Nw}51H1c|_1!Wa>QNN(kKk_3Nc86&qo3zI3SNo4 zRDI2bkgr945P1T8I(ZU&75NGH0rD`c`v=_JpCQ=qL*ugFTezPyjMaHvJ_`9laJSzx z=&zoNcch*~^mI2a>t;*R`)Yu3xi0SS9}O`s`A>e(e57&zbqx1D=sl(ymwY?qXOd@! zFCagAT>E3mSHM@3*Twvs$QQzQz}>lpH1Ln??yZt(UjokhFY)#PtKbm|a{A1&?uVCzJ1NFQAKf$q7{1){@q32KIa-LVQZrbrW zuY27{Kt7N>8D0(U&eQ$<$F`~XJJb`{Q`Z}7T;|DtQt$H*jCb`s1o>6uQSe=GH;)g$ zemIwkKc=1p^rV^a-#N%U%`i`Z@vfdHBVPgT*3E-;TcqLx$O|Ap*7VD|J`nlM zA^D7#c`M2TgMb*i3y_?Se3H6Li zPY8M%8<(C&$hRgR4G%LeJu&F%ZCrZ3Mt(4P{wSSi6!|cC6#4h?58&>64&ilYKIMB% z)c!c*GG`LzTxVS7Ed8G5w~&7c-%UP!s^$-oC&7=C4?)jGxSQYIANNx6>`~ru-ow2< z`0)L^`J?>&@7MRn;p;Gg-jgr?s@X~9GWXg z-mi#yNw~XjgK^&m8JFi>ZJa|5@_F$3%DFfR9PBJSH^#^t_!^CitklD`C> zN}lOO&Ceun1z$iu5gtpv8NQnQ27Hroncs)M7x9&GnSToAOeFsb{;hH82|~|JxO=^N zq(3eDvQL)9{`>QVWAK;Z?sX{~J>`tcJP)vL4eAL>@2~YWBaef3q@GK-j^X5a0@M17 z`Wu&h#bBPn#$}$S_<3QJamgnkA8B0jAEJLMdGBJn?o9H_@I}V`*Q<|L<~`z!OMjc9 z+Ov-QI@aAnUIhKSjr*@7`u7``{wC--4tLl049@v7FN>j{UK zg#UX#V4iZuWuBQh{~FXY1w9?er@@DjpMcLM-wa<*z7>9y{1N;n`BQktssF#+O1m>{bpN?`}@mk|30|e zZ=Q_aCwY%#@&fQ@j@Z*KD6kuPjq z&Mg7`MUBh3T|`d>xI4FA8Fh~4+Uix>wb!Lj~JJH67oM9mwbtedj99hFT$^pFRP&WJLJXS z4~@&ZLHK(qPmRmE-SGU){DJq5_i)!G5&M0Gd_TMac@n%G+}($9=$A`Z^^QLjhPpqWZy&K%kQ#*@%lK20iGI{?wqbJh1^!$dN zspOrjYyTYM(vyguMaHG4R~602kte~|k#DN3`7Pv~;JeAQqUVrt|M}qWv3zS><|$oO z`_IAM`3%hBeb9S6B#+6eo^yu&=&n}~`tuo={vqfu0eAh0=;=V71n&!X_u)4<=Lqs_ zHFW+l-$lr(0Fz&zZm_Nq2%>OO&OWyfM5A`7q2` z5AMz_Dx1z1X7c{~6Mt`~hjE!_8+ryBmwXWNLyb#*CeC33+^rk%yso?3(H~2JQ=>7JTKW0zF2?F*C+oT-kkg!^tU7L3-4-N*7dz3Z+yO<#%0~j19aUXaCd#r7xc${ z(d5bS)#T+0X?{EPKSBQi$}dLG50tNk{KZuAPswA^Q)sTP@8;hOF9&z`+eGx&qI@>Y zA4(noA3+}YlCC$0yf{1o?(V}7oc}iCa{ha8U+pCi?4;M_DES!p3Gy@WpUFFQ)}HIe z<$j35JhzO?Je!bz1b63|EwApk&^-Ooc>w%%@+mm~R&aOzKlRmlx>No{9_@`J-w&Tn zeh9wK^!uM**w-fGvag!$b=@7t{m+YGx^ALz$sa@hFnLTz?Kx#!dP2~1(YW*s?V|ac z$>ZQpjQg(_`u{O5{d>c-Kihoo9q-|;OK3iQzchImyfOJrct^OqUYWXTe^1J1 zLVgJ4-@rVPspJ=tXG2c{c>(wyxSMAd`jaR>4f)^5qv2T==y|yFSqm>oo&awIchBEM zoPR6ha{ik-==pRce+~CZIC)#-`y2P)hr@Ng!N#S(7+xR7!QK4BasMwQ9}WMCd6dkbuxb(afuKP`-o-p*BHF@cYK+gr^(z66TH^`HEYyUmt(vysyXU3%`O;61~ z_lft8_i*Pn2%dwybq~!KAb)^)ijv18U&gr16FAbpoUfvBndcj@?jmx_8kbew!=XM73=Ue23yod8>{Cck>++FwbZ|nS(D1Q$k0cMn^ZG;T8GzT% zg_I9Keg)-=BmV{EBk}$1iIm?kOwZvkd6wbor;T^@_7#r(CL5RijvcG{U&w!i|3O{_ z{ulX~G1`;LNX^eBZ!lhc33>1Y^_Ar3 z;2X&AzpMGJx3MStd4Y18{b`a{s4D^~Qs`{c#=+ZmwZs9zs9%7xa89=(R>{FeE2%@m5VjMg}fzvw{clF3hVASF6&nPRC|uY-F4ht zM(4akz7?KzxqjT`)0frv3&Y)Y8HfIolpl?rDwI!)e7#ii-N+-+GmbnO{xSJg_!jb; z@E^$^mDhcxkUxcIkJFFKe&w7KanAXT%Q;`e{S!#uaHgJrY4YXpO5{)BwaCZM(w>IK zWu6qw^M-Mm=M?fC;O;tRE8%_6dyF9ufG;Kw$GNSg{yn(=cTqm6xb~kTPlW$Yz8{`- zg?^qpXZPP8kc_e?<{mRF8z_SwSNHIU9XT=ybpSh_sQGAZSflE=fBz}Ss&X2Xfv2p2%LQiYs($i_a=0nL3zOMfr)pQWA{^kn(m|7rf;XGu@s zM14QEap`IGiOyM=d=x-4Lu>+qkSd4*56W?tC_5{yyXb@$1GY z@+9Qvn|@h03hOR1F6+iG)&0hikB?PfM?Pw~`gY^epM?H>#-)EfeqDNuyfxN6N&W!& z%W!uN@!0P(lb3Y^CV6kXN7^;`F^&E^W@#}0^Ts6~jC?NRGUqSI7lFHVtC!Q>aFdsw z2=w$fEG`}vz6m~#{1JQ#`Rku)&uqAxCmi!^GyPf753bNTbHQDIxr&+#q5Ko%J5hch@_i^jW~KHIH!kNKgmWHmT+VsYD$Tz~ z-V#2G{3d)M`C6>Ij65UqpOb$H-wJo4ch0< ze;YhIdHywe4*AJ@zyrzGz)O?ghgX8TeVwnObJV5$`)hUGmd0gYF}PkGjLW|EZP0vo z@|o~{6*+zhYeW<^J84ipFJMl{V_W zs*^v%b*V?b5cy{0VaT^7{|X*P-Wxpw;BH^>)pcL*rQ$2dqibk>3-#yRr29HYeiZ9o zA@7L%ZR+2T{>PL*g?z@1y1ra5Ip@GB`hI|MIp?3g(0N`UkB1i{ueVwAWyv!mUxmCU zybgJG^fZUNbIw*v=j@w`Ph!WP7tEsm6XVnQixyITH1aDbAB=xLGlBAJqja8Kl>ZC= zuH!f4_1@QYzo(uv=s8dM;mBVjUj_ezdh+1+3+XoLT<-aJ4*6{4#i!{!dC3RDUn1WE zFG=3?1MLZdyX#d7^VFgIOyrvzm-{dT_hCEZavvU>uKiuf--Gud51pa;A>@0o?r8Gz z=$S~K3q7;oZeRDXuQjRox28w-6@z`9GA{d?^QAstE|TAZ-y~nWMe}#bYksBvg!~LV z-51_s-oxDwFKyL)Hu9bDyySznY5pbhtlQN~k}rn`k@wx9`5NQ}cdFMXKMZe9p0G>v z?Z~@+t=^Tq+ivwf%8th9CblGGkNKB`uxpBekZef5#uta`**TR8J9UTT-E+p$$z+_UXy$&ya9Q8 zcnk8Z@b={UE^B``@*(iP?!vc?^6R z`7g=Z^Evra_!s0I;XBE5zz>igyr})(kzYBfeww`WDfMLXDezy&zk~ll-ukrm{6)SK zp8iWcZ+CwtoYDOA@&~vs zTgXczzneS^eu#V){5W|zT(5J+{jW24K3+5~^Ebyi+$5g>zi(W60^axD$d6m}M|W<) zP4)e1aJdituLH<8p!{g$+fhCO`A)`V&U@GNoO>FV{v_o48kc;lyPA(M?w@Cx&N;%k z;Z`C#NP!rlE4|E53gyG{9F z$p1xo_y4Ic{FQ#5>#2>N(s1|sb`JZhM){`5cQJXHKLqplGA{GqeWd#xL_P=SJd(Ty zd@|h4=?l@hKQ(#(b;P>Mjmx?XalO_XmwY1fUl^DC3xDaHiEy`WG}cYCRo8dVyAFp`egFQc-}>m$HM24w?Y4>#{Jh3^DH+W>dg~@braz395S`i{eDaS2!6x# z_^&(qZyOKwDz>2iFX}1PTKmgw(;wZs)!}vE?)egl*O|uTC*iHhi{N-|%d zydS&_`6hT}@<;I6Jk5$?_{0`m_iKLMXf9s^%Q{YTIr zZ(QaH!944X%REDF>-<}cOFjYl9mXa98S;mWOWysvY{!jD{*T|Z{~Y;ychs+tPeA@Q zc`o>U8aqvOp z@$e7e?tGGQJ~NHW`Q-UUugfCpse+!(Chxy*XX@PBj7v`w^z0>n^Op91Z(MrZziW2J zxb(dFtL86}UxWY3j&=Vu?!W(M>70*@OaBARlVO*B+?{_v?6(;CKzLp9(eMzsdwr{o z=VKS+UA?7(F;BR0nWx0>y5B)?H%~U)|I^6>;H${P;0MTS!!MHu!~Y>ak6+gn{`&vV zCmCK7?(VAy?5lxs+1K0HR}1n0ybiP{--vuS<6XU;1oXdUT>2x?69ISU7K?p-NFE3O zj64Cp)AY-_$yj%faalJLen0XZ^~B-%dy70Co@uxD$=<`w*$%H`uaKWXz5)4pcsTh} z_;_+3`adRL{D#i47VhrbzBlwf{E~b<{A=<{@Pp*}ZfZ{w`N#0H#^sy?VsxGh#^szZ zA^$7fo!jO%ntw?7mH7RRFHt}4_H`DX*|@A5jCHdcmv#H#>umXrOWyr^ZH0|XK7Shh zx?BnJ$?yu~KJ?czF8v9Zr=f9wzfb#HlCSwk&$$D68+do} zIG){WKOFjbme~e3hCGwf}dhd7-x9)9tPV#E$^*$^}9tD4y{0O`p+@1e^ zoPQ0dCs`>WWk@aha`}@QviR;oHeW3u(_j^35-*C&At8^Uh9se_S(p zxu279Ki@Gf_j3;PJS0C?So?hk{{Md4k9jhaXF)y}c^!Bm@(6fw^5yXI#{I7|^K_0% z#%2Ecn7jXy z^{(3U#JGRmg}UxP#-%4iPt9lgMnCRe$IiiXlAq|U`GUs%=Yakq#-+bzAI+CCF8L(n z%Nv*cAmppT-Te?SMCWTj`B>!JP=5bl%?~4wheuIQM)Z70`2^%QnY_&J`&j#T7?=68 z_R#(ACtnNymb@+e9Ng`9+Cc5UZ}R@@h;^SBmvy`0dSy7MpXYuZ6@h#f2#{=RYlb;LYRjLSUVVcm>} zbY6E3Yy0Z^#mQs(t5=1)=WhnQ4g?#QbtABDBjd7eo>1LaJL*qF|5THgo>=tEG%h_q zW8DShZ*irDqy?3XsnU(f$&~ zWu64|R4^_*b6RWuHS$-`6U>hM8^)#Iw?y7}-~VD<`d@of`@6v1e&ev;(d6;)dE}en zE2)1x`ZpSvd4e#{7UMEc+AccJKI-3(`yrY95d0Z=f&N~Z_sD)!e{`>JP0{}%-0k-s zdTNqCf_Eg}kDp(LlOKZ5fxG)89Q$2lT=qK-^Td${hUq!1Bj1Dk7UOcBvFP7nT>7KY za|rJC+Y9G&jl3WH3Hfk%)?@#FoJpK+Nd3G);(F7uSb>trdoo2TL1+S`b{DZD3n zfq|MI26xwY1^OpZemHuTl8=V(Bwq+WOTHL>AMUQN?^B)UiE-I)0`C8e-|ENRe$U|f zQkeWaycYRQcssaTHw5c;GA`>rz`A{m`|lIvhZvW9A&-SGBTs~XO}-y~j{Hn-o&Ptu+wZ&< zdL18-pNIcLo};DaGkyR6=hhIOll&mOpm90>5S)Jz<8nXbz|Wgy;qLsW4Ab?hQ+`~8 z&Qp(kJ-nH5SvLynwl*&7em_imLXAt_{riJmjZ41dP|f!tzx|H-5c2-$k2Eg*DVS%f zap}K}{+Z-a@CD>6v2Lt!=?{$c-gu7{#-;xf&Sw+co%3d#^FGQ~!~Dl7Uwyd0-gk$* zHat_3e*E9pt5|*idE+uq-r;&~1>tTU_wUcYM&1kk?Z`L7dsBZG^be=J`*-7KlP^Ti zdh(m_qvW^YzmjKyr#r6ucKbSma}I#J=i_3Wb1~!o`xfU`*0`M8z?bygs*oRm*C8)n zMDvZwC&OElUxtU0*9+919^^~l1IQl_(EKRl{^u9=6=huZm9?nmKOpY~pF_S6zKFb7 zG3|*Xp9o(^Uh8GeZz2B#zMK33{1ADY;@WeZd_DXedF~RLzd}9`ew+L#{66{L@W07B zzM}mZfA9|1d${{80Ukh}qon3vAm0KnM&75C=F5^#EUjLJ{2aUvdFL{kZ%m%1ta@wm zuJBOuo$wyy1;mVdUE@Xg&(=p1+Se>p9LddAXl`%hW$L?tgtl&noid^4gz3 zegyMuBM(4+FL?v_QSy=S6XdJmKO2|%gE0SP<1&9!%zuk~9Q=`S=?OPL)Ae=_>NH!l5Gkw0Tx^6uY@{MoqV^W)DouEX8^5Q1Nq{z>^} z$frHweX{p(`Si%YOn$SM=7Qkv^=%{OtV8(}DJ^}gd#wDME{6V-|x7}O1Zl;s^qkG;Z zqbH|v>8aL4_gj#B8~kPRf8gcF8#UFQ8gMsHBxg+iH!kxOs;2#4!QDB8$tQV_6Xcn~ z{p`C&Js;q8AjP;;Bw*e9#%0|eSU3GC?Q`o^57+mr!vDP=(DS-+>1kD8=Wjy33LZj! z7v72dwFcVL)40qZuuA9YYh2bHkNj}Bn?EdE^RvmP;raC$^-RL^aUJDHqvsHLDO{K9 zRg~K~XM>5oPKOykmDzOK%{$hhQ_kdHMk`R%wr*TLO9$8gTyn7mMM zy!Xa?95pUIzoF*@`NQfu&n4s1lYpLIjZ4qN*EIhp`3&?tWk){48Sj(5hr1u#zXzJd zxb!csq5b*cZofX9e--ld@Hfc=;6358Zm8FP8U2Hd%YNOzANr1Q$-jr|^)B4a(-7Bv zF?mz?Hu8n=BXBp*G4!9M{BYzSkdKDvKI;wVJ={Ex-qQDj$e+Sn!QJ_Xuhx7=D?O}&o$s3#cDmowxI;Sb3}-~m7BI&R$%tee-ktlJdp z7BlX@PmnKbT=ENR>6}%_%hgt|LtY&D#^hVEZfoPRZVJ|IXWYLo`g_3L{n-!uoj^Vi zzKDD@d@c1~K>t_9WuCw_-W%_+)40sD4?n*jrv9tplJ@zoliv*YvoGCw{n5=|1@~uB z@;tbIUMDXA??PT3KAOBXd@gx-n9i{Z?w%LXuj+M7Apa4*jr_Svn%_%a3x1URYxoJ{ za?T+*=d;G;oS(z*E3d)bxeXkm^Z!BlAN%M$e~~}eS3UjD`g!ho5ruU#8<%x!;_H67 zjLV#f$mcgM`FGJDNZzr(u3MV?1iYH@u3k?H`s*5({)YXurz!avtotT;PV{#+-qq^~ zT<3%b6We<8dG+}-EjpuYm;Ma_g(V&AMSpeg`Vtix3B2Ynk$ovH#I%7 zuP9uvmd0gYb0_M)I*|Vc?`~Xr64BGkxby^0(w;%&ZQ)~$OOJ1Zyz%}SapThS9`e!T zm*Mls>rK{mKZU#VITPux_pPD)b>z1hmwAFQ&tBs)&(y(c~{&(^X@JHlV;c2ewT<*HOkXzpmfV(*(lzmmmr@`Mc zj$6n7k&)CNg8p~O*TScf--pkp{vfQoIu*Z4E??7;NBV2}qwKf4_n$vLr|;(^zXN}f zd_24~`9yeC@_X=l$v41XChrd~2Y1)EpVs&qrsAW? zW07A%9uGfe94`U>kDPHArXOa378`HV~d=g1c{F8NE?+$+WOQ-@g+a|ni-e8d;WHY%k`Bd3uxT;w#iG+9jqHkUgbsogsIfyejcAg z`Bs=`X)5^y$`?X@8~JstyO(?;{3!WY_)o^WdZUNq`SOQx+3!KD`xp5Wc&3}WZ+C9P z^g{u@l%EW1MMmQ2J$^AUrK9ylZ+RD$qzB6N1k`j@H)2GxSW3^`eThteqjdh zjrUk*`tcIx_Z^haj-Q108JGS8=s#%O_Wx*H@nyns&%0~n_-6%ucgZtjo@eB_;hAsgymCIW-xuL|$&12^k(Yv3ATI+C zfy;HoOP+thZj`T$a~@z^?w@_QUW1L>`)#ao$rmZ^ulG$bF8ROl^Wb#jlJAZDOyiQz zj9;IBVqEeIk^j`V8+f8}G5fxa8f>v%BH$d>Z=G-k*z+hrs_%#cSTy zfLupeHwNp5kSD=A8JB&{Dxsg>lROOmHu=%wnjcR7H+&-8?JG{>zQw8dN%F18U!(rL zm?!sd8gTu1+4t3fyXX6TnV?TR&lDcpBQ=W^%&2%eezP5gwHi+nG<2wcuV<_XqXUlsCjcvs`NT}*3@9~v!$u}zNXWtIvl6Su!KWJR?N02{iT=L7&f7-a@TbJ|Rc#ofqOWwWi-Ga;Y zlJk#|u=mLFyZ-3zhj!)l{oLg5!vo>2Ctl;eTB-PO@}0;}q5f;=Ur+gV$nT*1B zE#oq00_F@hE^|&s{tfai@D9eMCmB6M;cosGn13$i18`q`Y+TkYfPF17F6W#rtM|rx ztTrzB=E$!zF8RuM9ouGH^0SfOWnA)g-0Pun*;lZ;|BXve+gH6e-Xod(dH65n2ZJ>K z2l+(!U*xsm>F?_2x$Ax(=bsDi&Uv85e6NrPrPU8qCT|L_WBTPBf--8pF}ZtQw;^wd ze0S6DUizhJ5ap)?X#Y5J_qzH4`M>8EUAmx;J4FC9dN**1RwnL+) zZQ2e^YyQO3QSo$C)U?7gDs&!#dGyJBe&6r7^Lf1{uh-7(dCxUhuIu{!a_2tDeKK&b zV+-zeJOcOY$z8agzmCKG{o?@sGSzbm{u=q$^*8M+Y9?j+-9=RQ! z_;JjmIlJH6{%81eKYpL}sPOgWF^}Rshr7l+%70q%_lS8E@A*6^=F#!0rsGvE=24zg z`Ud#1@Vi{I_`}8RTKKJse+Im)`2Fyg6eCWgR{=VrcaGfS6%J5_1uP1JaxlT2<|K#0rAKy-DpMNmsQNJJ1eE#2<$M^Xk z#ypC@>apRDKN<7*KL2dYqxj!f{9na9zR$l9^C&+1xRC!#F^}SFcMblHm`CfF(&K#^ z^C-_hDbEk!yB{C&{1pBy`ECDq_;Ww5Zc!e|T5E3V*Tu8hNxoqkUKlWh8F6gx>=1D*j_|eH)rM0q-gPf5lvQ z548U;n}@&X`8-wYd;6G2`_23RZZVJM^99Ax3l;<}he@h`kS&!ml10Crl>6~@=PSb>j$$75^?a@4>6l0R)7K|VVjji&-)A`+ z^C;er$63sy_?vE6{Ia;6k9idD=cB|=xBvL!b-Dkp_#H8i;{ANIOCHTL>et7g2gKr| z`~C1UL*A?5uarLq{$=^oV;=2?nfAjg$Zx5GyUp++o>hUp;=5SRh z{G}(wJif1<5%VbiO^Sb3%;Wp&S7RQ<|D)n>jCp)ty)x!e{OYqqJ+Fy*d|$me=286H z6#ttskK%otf4AK8*%i_!I*MMs{E+JZP|P1Ai+=mVSpH~zpR4`+XEBfF_9fl#XJa14`#AY`F^}T+|H|T* z#qA3*kK%ot{A$dj_^&DcpJN`y`#AaSm`Cw1dfwuf#qEE^Jc{>m^2afc;=iT%pT#_i z_j$-2{?Foz#Vwj=G@sn|SBb=Kx!3)J&kuj_0C-h?HT;Y6$H)BF7AZ>FpD&dAe)sBr zUmlB(>faUpvbb$tBK~cNzh3e0g1<@re)uQl9r#)KC*`iQ9?D6ahI?+`fwvT&{(1PH zD9>YM(Qglw`?&fV?ZZdLJSyehF9?6>(J_zK(fjb)m`Cw%RQyw89>sefJ}2f;{7CW7 zi+L39efZ*-NAVAS;o_IY?PW2K;=K=F7xO6oR>i*|=25(ltGC8HivMTD|5nVSc<l zP~QvWuCo?6@fLVf{)t$g8yEKL`u_dT;eH?F^KkFy{{i>D{TI0R=Xc?LU*N~`sQ$;R z#^|@p5(`+|{5bu99;a8vJX*(BY7Tdc`Hc(rb*=Y}c@%$A@ehc36z{$s5%VbiKG7d8 zZr8*-BKP~`m`Cw%Q2ccjG@obR6ynn{kK(0AaKd$&}%%ga($orG zQT&?Xi!qPleY`Epqu-+WtStVEZm)>NM|nQ@l5I}B4qlbN8GeoY5d1$>&pY9tm48qk z{T9_z2zQ(4!7K8w#r#RK=(lgny}n=7`u=Au{>icUUy1@3H^+Zp@pp`QG>0#$uPb97 z&C}1n_lbEF|BwTVUlzCf#ypCD^If+&@vxXj@n3&w@JGZviud)LPmXzX2=3{5q#}>n zi~909zA6?U<=?0LZ@NVMI}m@R;T9CDPRBf| z|KqCX>+m4%@wdB6_`|=7d33+0b-#Zb^Z0)IQp}_Hm%KdW`Nx>Y z_uIE(9<592iV%M;=24!U^87>|%`K{bUkFd!Sr^7fWwib(z`n{{>S&n&BPgVE39`h*v?RxyaB9{O9h5PnK#9yWS zZ;g4B|Bsdb?Jx3l<@aMA#s8k-KNj;S-p?<88uKXr@|zdG zEN*`m^C;fWFMk{JDE`HY|GSt+@jgHQYRsc`uW8*UG2gE9m5V=I+`a>UhWv-{+sc0i z|E%h{{bk|t7_ED>F5ZWChim+c>urA#|FrE&!Y^0LqkS9o^%$+=<6<7w|Ie!Di7}7j zy-%JV^CxD$@$ZUx6z_HaaLl81?`YjW7V{|2ZCziE8F)?p zck*a`qxJIn;c0j!q)Gfs%%35PemfV-AJzXNt?xYMQJqEAc_HReyw^8*yRd(veG6l0H-&OqXm`CyN(Q#%q=FvPyn&&k!kMflCjn)(4_mMwC9?dP9 z!}{XC=(djdPb>aa@VCm}fIOA$EQ{+s5&s>er%M^{|_i*=0h`#Qk8!~M9pAKd%@YPhd|ejNO-RsZ$yvHZF4 zZ^&J6;g3-K3Op~*!Ji=C3%^cYg!_Ho{qW~1z5@5pTW!Go^Hz0u zS$Ph@Uo3CIYw{!TgYqu?t@7jW-<6+$e@y;4_+QAs4F7xi*Wq81e;58W`A^{gCco_V z%lqMb@;kvVyM5S)_kv#`e-QkR@<+q(F25FjPx-Up&a)2p{Z`?wa}$1*^4|h~u>76y zhs!? z{uubXcZB`05B@yGKO0`u^ZSkPk12iw?&E45K2ZE2xPPv{1^03F2;9fjF8q}8ABX#R zJAnImdkXI3RGstdo%d|R6Q5qK7JFn&LkP ze~$di@E6FxaS8w4CH!Y_KVMv~A7J$JyPq%a3itCx2JYvJhr@kbdOY06rR(87E`{&%B4EK504RD`#y#PMY z{k|0bW%+C2-SnH2f=y|JO_S_u=1C`~~=T=3;rC% zAAx%xcH!R7pN2nAc|H%nNj`>;b$s|Y_yNWL5bo!fpTqt9az$!+9lf9L4)^oL{osDS zxEk)~g~!8hQJqD&>)8+AQhWve0r>{p$Kg8s_Z9y(_z(1b!F%B!SNuodpO*g-d?5b| z_~+#R0RNi&pWv?lU*QwQe;@um`31P=nY?m&eJ{Ubcs%Zc`+hTU&+TFGoyzlg_%3-7 z{yaV2_rv|Xa})f*%JVAt6XkXIweq*ZpDKSB+|N@VfcyO9DBRyqeG=~PBmNxzOx^G2 z;QQrYhWq=_@4$am@jryWLjH4jO@75)me>7_^1H*k`abu5@V6-bYIsBbc=)aIeeie5 zOYq;5{~G**@|VG#=XG%B`AztLSDtsm|4{zl;Qs#oqi}!!{wHw1F8Y^nfB*guaKFy{ zPw-Ayro_L(|3-EG2i*Jcr|>T;{&sg=UUwgd?*jMv`Bm^U%JUHTx8#q8e@A{T+>eWA z!v90@FNFK`gqOkny20zFW;Qqe*)9{}v{x9MF ze*Ev?{{HtL;r{;j8*qRBdk*gJe}4u~-YFdCFWL_ z@~6O`C|`qLCx0RQ2Kme3&yl|Y{$4$g-wJ=e;@<`LasGpF=l?kTM&;?lUnV~Zf0g{p z@V4swI{Xca|1R9;w?Bgaw(?wdx8?P{MR~4-dk$B@{W{4*;LiVOxaW2)+;u)1?zvUq zhg9bV+@IH7hks1*Z-f7t{CD9)c?a%&^$ED=_8GYQ{d>6Q_7%8aU-~B8uP=QM?$?)o z3isyd%;hu-v`3~T>Ipa@NX#oiEuy9J{|7o)91s_DbGvbzTeltFDU-a z@Mr5h6BwIb2Y?)$53>o45(SK+Rs0pHZuP55zr-GZOg z*KPPvUw7cA^mP~BjE23q4Yq&%Mg6YF`P^?uaU;Z^(br?R^UvVUKZhUE*SgI7;+*~W z^)~fIABBf)Lf?*G^n>avtv`4Dt|td~J^s95$Ge^a;#c)`5$>-`@PWQA!(D$3KG)ZE zcuIXW;2ZKLye{v={C0~OH#Fxid?4?^z2Ew9?<@Bg%`M9B{V_!RMETvfxF5fTm|wN1 zWsmA9!t?SHe4o4wugNR$y1WW+%4=}%hdR8Y_!fLa?(@@V&QV{kr-OLc(}la99^Ccx z;jU){_x+CHzTXMl_dA9AerIss?;L(gb6EU<<@U{UI4w`YC-MwjmlGtiaPOZSe6RLf z9`5G_e}1;>asD#mQ_53;>*be374FaDZN&Tmi=I5^CcLG7TX5&`&&5V{MtM4_$Dhk< zUz7Kdr!F7B56XvdKMzje&Oe2hlxGItFQ3EL<*Dc-Y;kk_33(dsIb`6TLl%Bsc?y^C zBK(5lOYnrAcgt{}57lD+&_y4s+ubbI8D5k(;66Sy;eEw-;QQoVxbyem&fkaklxGBY z{xRJ7CvfMV!Vf9`41QEThj-=v{KaTLJZxcUd0N-4+Y9mx{D9p5zJ%l5ZvpXp6<>rq ze+lmVWw`72=NI~ZoxhHF=WoEBzX?C6I$LlbhuiRu;(IZF_`-7XK736+fY;d(Qua=%~X`#mQ2`%#fUVqxB& zVXN{vd|jTgaaUQqr4 zd`&)tm*f+;^GxB+GlM(N9Pa(&pI46Rf6C%Mcj|uAx*p2DBG16R&$DpXr^A^OWJ9zkgmf%76W$M%P)7#YgV_*?=EVUro68RVU_8Tf}A*@At2w`;FXn_7LyK zT_5g!HH!H&VtK}Juj2&nzNYZQs&fW!%jfW}JfZ6iqrRegj>(hot5}yr+_@JrwDgFCAjM;!(C4;=FeW#zDM=f;T3rU-jO%q?alB99k~1I!rfO7 z?mGMMq3(A8AIXRCiF^c~%ExfmKZBoB{2YFGv0t`tJHv0$I!5!%YM@E@+TIYCf;Vpt z?(0>ZC;7_Y8N?rwXW{!dLVOOs`I_K)_?8}!1^5|x5x(-;kf#FAX%1Dm=Tn2b-#Xm= zw&0tZXB*y-ci>HV7w-8F;Eo@{4=c|I-ja{uN8}TDM?Qsj^&y%wct-nV4qx^D(e**z zC$2vYcl{Z->(9csRA&y}mgnK_w*+_oGTiwqaObbWo!{39y5E87X(Hb9Y{5OxHr(^< z!JWSkKdJj2z=!f7-1Us$u4fE)Ju~=R`RDLm+CK?h2jTf_$$j0H-Szl7EPGG!S>%~T zC!vd54xY#d&%<}f3-D9=u(Tq4xAt=ho|Bj1e*D(pXHW*WZM@{ubQzx8bh8 z19$yhxa%LlC#ru4KPw->r}8m;$D_l#OyDW`6yB82;O=)0Pib8ex}L)O$NeVZdljF7 zpHux=xa;?IG|un(^N3HY{t`SRFT?lBEAUNu74G>o;4Q^B;ofg8xc6Hd?)}z*7c{pn z{NnzByPhF@OLdOmZTT2}R6c_{{~Yf8+ixN+ww~9^`ID)zAMHn!KLdCEEZq5XaOcm% zoxcP>rTZ{&1Wzi@ z7@n0+-~;&-?s^heF0cEho)?nvx;zDM%G2<}@(jEs&%(Fl1-SDU;m%)zJAWDO{55z( z_gjbiejD%;if_Vmdfx27oxclr{vO=<`*7zU!JE;GMvL1RendWjcjQxe;c+3)_M60u z|MhXeb581WmF%8#3hp_l;cd+=cL~qKJKhiQqw*rWE3d$h$g6PYufd(a4tM?*+*=TF0(KL>Z7 zJluH-aOWw)52*giCAV7xnb;Q@@4fsKM6W)+_;LhKLJAV)E{C&9dkKoQT zhC9y$?mScYA=U2}s68Kha#uKh*bgf{1#ijI@GW@`-jwIz&R>8#e-ZBd6}aB0T_Pap2re@5`*s%H#$JrlU=nZjMq4DNd7 zaMzQ%+wwk{s-865^B4KT3*LhtllS3%eRTvsuInYn@Vl#~de;!C1URRzD{GhxGZ^#F5=O4mLiXXxE%g69_`3#=e5!QPS_jMSFdo1sVOU*;th^3i zlQ-Z;?-1tJgkO-i;AuTh+wc{651v!MeYoc{fO|eexaTv1dp={h=QDwOK2x~oGlP3R zbGYZ@H{5-^@_dr%<$de8hlOl z*Ws?e0eAgP_!;Htz*I$Oa{upI-)-hjKWCft3s;GT0E z?m9bk9hbWBJ@Ns(t9>|xyZ#Z}^^f7Me*$;?Q@HD&(N*Uh?)p>rTHZg$RDT-o`ZI9X zpM|^r9NhKi;k&e-3-GM!FT!1a1%6!hSK+R|26z2+_)$HMT5w-)-G-l1d8N(0jyk!FS`OFmV^O+gk=QDG7TgU&zy_ffopVyM`om$5fydY1* zeZG`~H#MI;Jgt5U@bmH_-2Il|?zaqgzZJOqt-{@J4PH{eb-4R&!H=omHr)Mo;O@5z zcfUQj`|ZQs?*Q(8hj8~hg1g@_-2KkrzW#U)cfbAtZJ#f>-{kJ)eYiu{3#Q<%CkD%wdoI9TPZ6F_Jr%e=r@abyzcsk)uftt`3trUyw&A`$wFB=ez6(DtAHYw_ zhj8z=5#0N24EKJUz`ft5aPPMn+@E(hhkL)J?z6m4Tz?ww`ZI9XpM~$!>k>J*>&e5b z+HWPeuX8QKT~7t>daCffs;2?>=gl_Z7Zl&3>p0(rd;UFmLwWjeU#~fUdwqv+=bylR z-RczX>qlpB=byu!KNbBj-s0xtN!H)*!~J}kf&2M13!f-Y4({i>Jbcaj0lr6h%J71` z0(U)C_*n4`_wAW9zdkjBAJywVW4OP+n!#Pq z96nZ^iCFYX8UVZ9$Yg8Ti~F?^Ty$ppSCpTfQ0W^nJfIo$g# zm08|Du0IVwuIsTf@O536lZ8*@IrtI1kCKO9(Cgy`xL?;O!cXe;g$msDSK+R|2H#Sh zb-3$qz+Hb6?)qDB*WZS_{vO=*_u;O806(vJ4&kRY&k@}9jNz_l26sJkxa&#WH?e*5 z^HEOsn}n~)Q}C1WG~D&);77DxdAQfB0QY(o;eMa50zaYrRrqOn4SrVhufv_c1s~{f z)Q0=|%MSdk;=6EPU)Y16Q=NVI0Udt^@I87Q4dI97Be-9e9K(+*eg=2HbGZ9W+;4gR zBvpSB?tW8n_nU^h-wfRSX5sEP2Y0`Dxce=^-ESH0ek*WapI3z+zB0_E0eAi;-1%GZ z)4EQs4Zk4ozVyOyFLxDg2=K8{F$PhkLzJ_g~&` zS=E__yZ#K^^=IMdm8SqtsIMY?x4Z=3FE7JApBnsx_DLOn+WQCY>(ZL=f{qUzcthTW z`+TMc_xVg8-q3M!0QdRK5bpDt5!~l9V|Z5kVFLH#dI~?{{R1D$=kTdKwX(c_eBE0b zzDL&^W#DJ!S-9tugL^)CxaU)VdpATPjOPZ2&-Jr#ITUWL2g8r=2Q;jX_0U(s=< z4Zpa5;1~A~e6POG8o={D--i48yb;{_$MC%J&)`M*9Pa&`c;NE7dp{@PSs$<9-p^^c z_j3k5R-P=}`?&yj{YALzFTq`Z8Gcf8sK8xM6@Er_HsA-9rwMmGEx7Ax!+o7l4}Mnp z`*2@(GJt#jL%8QZfhTkw#uR=~K7%{|9Pa$72QBZPtn#Gc8}ba?`Ll56FTnTf@m_=< zkeA>m9b zsKC!>Lfut(QQr^L;1zit?)}h!dp|Vc-VYtP>+iz-{%8+g()&PtxZi&o!2LSu5Z>1u zM(`7QUKzuO@)_Lq&*82=@!;is(p3FPxa&{BU4I(x`ZI9XpM|^r0^Ic%;jX^~KdIMA z%kZw|S%JHrD%|xn;I5|$cRelm4&84Xo{@LpZFv{ol@H*4|8)rWdX3;-uQA-OgU{f{ zwIAm2Q}V<^65BT)e|nmK67KvN_;J1Oo`s)~=isO1dH9;@DZtOli|~r-EW!8aaa4vM zmRI0ic@=(K-k_`gCfxnD;B&>d;qJEscfVb@`|ZKqZy)Y{2XOa0guCAfUG-1l?so?F z`^0m&-xo|hba}sd|D@s0pMj6{zHAnr(ED>a_(6Fd?s`h_l=fR0zE@s>d%ddg1FEwI z_j=Xg2fg3mUauzH>(znpR-IkA>+iu`e;KJojtDR@E0fi!$go`avwguHpU&u0p7pU)KG`*hw?g8O`?4EOm=1@7~iDm<(G zP=ot%U56j>{(+y8H{lo0m*6|~K0z1m_e*+k_uGfN-vQkH4&m;11b4q1z-*W0V`LN~v=6+Lf_nU^h-wfRSX5sEP2Y0`Dxce=@-ER@@ek<^T`mMs< zZw>B#>+qWPe*^A%nsC4V(t($}-{2K_kFNXe!#Ct3y7G+S?so!r{ZqK>Ph7pcPyD`1 z67Kg`Qt*tvpH0J8G;jX_0 zcl~YnNzI`HcRgMBS=Bj!*Og}ocReGx>lwob$}@wXmCxaRU4HvRX=BG9&p-L_<$dM( zXW$9FPMw7xl;_~ipNBht37%D+GJHc`fjfT{?)(jSUysKo-0y$4;2Axx+wfI+4?fZN zIeqv!`2g;it6! z3h<2Li||!>3GU~oGW@LKYjB_U)ZwnP0e78EcuQY*;AhlV7e1Bu;OFFhct`6og0DRy ztj8E$kx$?USFYY(E=QD>FHMi{# zRbSkd_ghJx)Oy-I&lKGA^yAp^o@WN}o@W-G(c{jKZ|8CSMZ~-Q65REd;jX^|cl}lP z`1&ya8r=2Q;c3<1f|oVVHhf*)fj8t`_(^#WUU_1uvk%{pkKl)uXAJMlC-4*UDSRML z>Y3syruXQd`q5&ACc$aokW zPd+8g(VxHTdG3_A5%2xnfqOr9;oi>!xceQ#-R}r~_S#VA81DKfaMwSDyZ#y6_0Qq; zr-u7YT(i92#_}Y5Do??8>2aNgdp_k0>~&!-9Zd^&K?rwjLddhiwP=RUkIAHWan3+p|Edp;w$=QD2>?*#6Cr*QW> zgV&XR4tM_4V=l4Z;Le|cA5ngPUhKvB%L|D2{EKkUzXbRE%kbk`#|qr@tirRZrvcwk zo+jM&wBW9%4eu#W4?dRn;od(3xcAQx?)@`?pI81Vyr$=`8Ql5jaOY3um-oYNggfRVdd$=-R}VI`iF4WKY{mkzf<^7K7*&Vf9CKNdFrvt`(dp5)9|T01K+Fr&BBZF z0^H}rMfgFT_m<$}Cx!aT@YO=_3Vhd-gID1Lc@5su`B)u(RNjE^(7y8LD0@GoGj z-!9z!_TUNi)rY&^0o?r#;qG??cfVt}`<=ku?-cHS6ORk?_8i=A67GIe@Ez(m4bRFm zaQB;qpV0c|;O;jM?`VDfIo7V<{T31Lek*YITZOyd8a%5y>+pT@2Hf>G;jX^}->JEE z;htv??s@j%yH(E!zOKjP7=Btlf$vj2Q@HPU1|REw=Wx#<@%Y5{&FghS>zIU(V-N ze4232$DecTJf4p~&)Dwy^pIyu^XbD+$_H@IX9yo^Uyb0de+(aL9Vc+tKZU#ggx(); zUmew%gu8zKJ1UNM{b|Inseb?aDvmG9^N8P+``>?X{4seE@t#iwK2>}b?)_GSd%xA; z-fs=K_gfQwN{`15{JiSv!d*`f?t1$0iH}$CseBCIrFtfC*FS~3{)Ao^^!(53yd?=w zX`iIvyX0y3Zg~!#)9c20_&L8G4nO&{#P-dvf4k1wGlEwT@BCG`^Vi_cUxzz?3w}!V zwBZwZ2Yy!Gg&%r)sNb(EyD!%{M7--9!4GK;V|YhCgFF8m?)(X@zw2@SB;5HkaOcm$ z)0#sLzDJ&i@0AzeMR^gvE-%3=@-qB@-0vs2-cJaY_deX~IDmT{hwwdXVSkS3FAqM3*X1+#MD@(!tID6yal-R2C{Gf;PwwN8 zo3AHs=owx{xaP8Yw*1C)Zu&O4R}G`gm20_@XQTiy}Iy= z@8`lVzMo5ffsR-3i|^;cFTS4(zxaMGJg0S;!0R`M`<=r5{%@iX{@nYau6~p7gU<|c zDR}-@gQwxHKLdCDS$OZIAx{DBdWvw@Q-Zr5pEtQL*Hb~f>#4#!s;2?(YCcW)d3g)I zskyb`uD=IAp*(%~R6c;8lMmrD`2_C#Q}{sfGx$mQ9DYik()pC<>^Y?27Zjg?Cp8~` zAM89Cc>(dxQ-nKD34U=uz)RY<6?jcvg{OZlv3;w-cgyQ=@3#ir`>hH0e(S*9Zx`-< zd+_t?q0T-0RhZd%gU9p6BoNY9rq3)q#7xx^S;o5AOBq!@XVuxYuh4_j*m>Uau+K>otS# z(R$6{C*=vfF7Ekw{(e8-?)j$>@A;?Uo__}J`Dfvte-7^X=i#1z0q%Jg;htv&?s-<> zo~Pe$@f^xNej?uUY`{IwCfxIE!9CA5-1F?fJ8wvz&+0? z-1D5l_q;e9ALnrQo6!3(p1=D|!rgBQ?tas7_nU!Nef)&G-vZqI`u!r;>3&OyAG{>= zTZX%Szc1%J&R<8o^EcpUmA?sh{tn#p@4`L*9^CWy`*^OiuXP+C-t!#7H#Fx7ysA7? zxa*n0UC$ieQ=Zgy%g?`Kx!+fG{dLVPgLv{-@0%g-+Uc`^Z5AINBk+BcMaedk0`I^4&N27F6%Xu>akKM3EaIdtKkPY>?-^x>Y*0Pgt=;hxV3?)i-2p3emC`Ap%S z&kXMQ%;BDoe{R70t)lt(`g*(Pk7yX(&*zNK|9!E36g40k;h zxa+CHxAgdGz&r9L{Diy(-=V(RaQEATA5eTBesTZ6FYX`s#r*@nxPRbDJ-#Mz?}sVe z`yrv%`@LQpsy_*L{VBNX_xml*b6&@d9O8HB_>hP1lNaFb*YCqPzx(z3Eq3pdD)OAu zzViDmjz6S2{eFwxefj+syVs?O{I0VFKc#){_gkE2w~k{S#24gU_?mnGAE>V(-2IN= z?sp7#zZ1CooxMzcfT3+ zkc6+Oo)kPQPs8`ib8zSJ`=Y*I=kfcW_G8LZM4prK68x;Z3~xU>tZxN=L|%n^zt!O0 zZ*{o$TMO=f+i>^Wfp4mwF5LC^;I6+9pFJn^JAj{lZtx+zzCZW~o_SvIG2HW+z&)QS zy!HH$X9l0i=kP>1#3%H=ocBXro`fHgr{HaQ8t(PV!M$F2xYw%yKdkjC!o6N4xYw%; z_j*;}Uaus5n$z5Kqk=jQclAl~cMgnPYOaIaSz?)B=xyE8 zo@XBJd6wXwXBqB!R^VeFKjEHd4eoi?;htv$?s+!ho@Wd0dA8x6X9w)3;Po_%;{GNw5L+{d>r{H)HqdhmPaY{_d{BF zl5qE%g1i1S-1X<+yL6tJhx_Kni}0Mh0?#Uc6`q&Z;Lcx%uPT2FzOMPS;b-I> zcwOt*h5P(x06(BSL-?kA1Ru)B@YC`c{E&POKQ2$`ckc(+pM<;q417!bEDPVI`^&+7 z-kXOHwLc5+#IJi8N)rF3EcCU!abja*4g{*wC0n9@6i59!9AZed{bX% z;I2OlpJ?54aMz!QyZ#c~$KNvC^;h7ozY3pgUJdvTecgn+&lcQuwBepl58lz&efUsc z58&Q!{&TOR_uB~Z-fv_0T#wTkysNM0aNl1-$93PY>q)|s%AbMnlKXkXc?$9z;$6R= zPaN<1ONjU5x(wgYey+gV`nn2tUp2VrT!*{P20W?bQWL)4$18YK?z-IXmb`~}KY#b( z?soup-XYxmj^OTh40pd1xci;L-R}(Ue&=xao6^4U9QJ7)({T5jfxF)<-2LX@?l%uV zt*;Ak_gjR!-xA#Ymf`NV247RZb-4R&z};^X-qCzJ@MH2W-20;k_k8+r&u0W*(euj~ zUXV}V`{YyjnmnQN2=9k8`hGJBAHOi1x1`{w^gg4XZ=EOkvJmg{T>Dh{^T^};1-SDU z;m%)y?@*mpcv9}~M_tcOc^&bq@&xH;r$z|Sh)uLpPz8?OlQEyUO4ZFoufJMeXR7w&on@Z;5RzeD&?K7yZ;kKwL= z2Cuv-nX!sPYr%b_4xZv_vLyTh<81H9&^0wX(8VAwBfF&2d`*d`tVKp0A805;iu#yxa%3i zUC%7$(Np6IZIe0tv^=5bhiDE_yg#qOud~|yc?2oMpV%7`rQs*#Ik-QsArC*S_yW8o zFT(w~))lz(`}JDae?WO^i1+72)ZzY|h!)&)Ys2T7r#~m#_nTkLHM(^XzoL42@Kf?W z{LHN(&j?;n{xN)?d;(vSPvIr`41Pd9hganZJ@2{S4Y{BH?d~^)c=wxzyWbrApz`P8 zhi?<+Q-EK1LhvGd&-KAe@ba63m*M$?!F}H0z8Y@{UPXNOH-p#U=|=E6d_&%XpHjbV zxclwE-ESA3dSbZW0sN4B2;Y*A;78o3Dye+BOPtMFs$s|NSyJJjLF72kq8 ze;e-n9k}y%;m$vRpVs{j;hz5p?)i`5p8o{y`A^}Ve_}nXr`N^xB;o#iiWK~e_Yd6l z`}%$7cl}w!yZ#*9_2=QPzXbQ^R+Qm;w4Z%Fxa--FR}t^}8<+4V{8%B((bwlXe_oH@ zHsUMShWHNrm>yqU_yu_np4Q{25BKq51V5pE$8gs_fxG@G-1X1ku73`9{R#ctiRa_` zlW^Ccfe%!F7Vgj2%E5<<&%@8k3-A@KV-bE-UV^({|Jp9%b&>Yu`QE6)t>{Wgbtza?Ij*uJ^1 ztmc-4U)(=%*OP_MRA&x;UY>_1RDTKX{AIZFSK!WHh0k@r4Y>0+;m+TJJAWJQ{5`nm z--mnt1GwiugnRxI_+FpSzzgyj+@E_nhv#+tOx$>h{Q!488Th8|Hw)jA=ipi0ZyxS? zO7IifCuO+L_bPCo?^WS@R8IpwRy|Gl8F>qSPTq$5a}7H1^NR1n{dorixbqL;&Od@X z{}}H4Gr0f#h&kN%>z@bp@geh+us@QO<$dCxzs2T0?))>j^UvYV zpSmfree-^Bo;2KfGH~a~!c(fV03Ti#?ym?xB`?88@-qCiyaFG~tMD`O2Hg3ZaOZEq zoxcrt{vOFAR!9U0DpSSZqxuEsML0U%$%1(~Xcn5BKX= zC3sWyl;N(&pG)C==z6M%cRe+@>+$DvIFIXTA^wEwX~SJl2kv^haM#m=yPiJW^^D+$ z-xB6IhR@^^xbsip&Y#fFvw9B4ZWHn+;TK%Ic;m)6fJHM}kVEzK) z*Ok8r-;`J24S5xQMDFV;e7~pVb;M8QE%?Rb13Yzw_5*yEybCYhA;kCK6?q@-zMb|1ym@)>8T_n#4&O+I_{7V@@1Exwc@n;L`w*9c59De1RGxva-zntD z!h3RG7vp+%>vqxGG^UH=^J`cu{A{kiM%@O2vQ z`ZI9XpM{@Oo&tO>FT!^v!~K@vYw|MO^QpntmA?-6{%pX#-lwgZkFTHd{y&=x^O+$2ynG7Zt$Jo~*FT55{?sd$_k-(9!@ceq_@?T~!rfO6 z?m6e-uCo9iYM&S3DIc%ktMW2DFZcCvp7U|@Xvy57+9cfU!v`%S^!ZyN4?bMS%s z&BNVq0q%Z_@Ppdt6?ju#g&&pI;GT~^*WYvSd|HU#aYdM08-DTp3V!kY3clj=EBM9p zEBM9pEBM9pD|ktd(-GXyvt#%`@e_DKkJBmK=WmHuE+4P5SA?&V@Z<6nyrns$;qEsB zcfVP<`^~}KZyxS`3-FTqEyCSz1-_=fs&MyPgS+24-2FD-?zahdzb&}?ZNuGf2kw5m zaQ8c)tKT8q{f^-7cMR{`A?%Y0-1SW1t|zgvyx%sw-{1$m-{7t%4L_oKa`2||U;DVdB~QYgKLvOGH2k#k0DjWP2e_Z_MsPphjp23e{|Wr!^AUVa z$L++cmyZu4A0Oane0+ero-};Z#|QY##|OCkEx=uW5$^hZ{l3?0q`s<%PwWnT*5Etk zzOLVSI#-4G7UJj1--ch1ci^d1$kT@;-bhAHi4TV|YnEf$x`3;bnQ^HOu?K z`IGRh;#2Tdc^bY)o`V;z4EL9Z7v%-`n!E@v$xHBcc^Q60UV$HzSK&Q*4Srl+hi}|f z`v>lR+i>^WfxF)>-2L|8?zay=q&f%ilky?l^-tige+qZ~Gq~%Y!(D%(w!GiYsGcNz zaF-C5fxDh8-1X$(t|t$7Jq37L_gjSTk(b~-c^U5dYw)S!>+pp3PXoR#Z^FG^9e7Xi zU3fMf=GlX<%KPwx_YUy`_+j}F?&IwU?&Iwk?&IwYK2rU2_!)WPwafeGoIDA?AWy-& zyTad3!&mPXJOkf*ui#mDMRUl((|R7s!|U=A-2Il}?zaMWzg4*Vt-&Yiw+?r|4Y>Pl z!rgBR?ta^F_uGTJ-#*;^4&d&02zS3D_?Fgd3@>QCCUDn3g}eU5>z4PM>rcX6e+usU z({R_Hfsei4;OFHz_^SHK!`*KQKGl9G!@VCWaPNmIyrp^?@T49`O?XD$f*(?zHr)Ap z@Uwbc_u-!N0KTGrhw!8F5qw>Bj^P*X5%$3Z-n~!oDLkRad*b!W`^WVs;jTXg->*8; zaMz!KyZ$WP_2=NOKM!~PCAjM^!(D#`enIoB!smAnb7{bxzX^B#7QCoDZFo)IfluXK zxa%3ftKL8GE$<(==RbyzHHQh@^Pj?J+EdW99F|r}6>Z`G@ef&!6GP zEf;I2Opcl`yp>o3Ar^}1pS?t04b zE!A0rPc+Xu-1RizuBQpls-6yfzq|{d$$N0mzYq8PNAQ~RjN#|x6S(tF;m)6^FYkx8 z@+9GBKK9P^%Q~3m*%7i+n@UnacKPaEW56M&iPsr!j z`7`n~d`+H#m*iRaet7}z{6+YR;!E(XybRCDYw+{(I^6rG0r&oC!W;KbY~MQYtoBbPI&<*T@;u!2m*B3y40rt%xa+UNU4IQeRXuh1@P1*A4fv+^RTJ*|J8;+Eg}eS9 z-1Yb2u73buQJq70K|X@_&FBIS#@*>>NFD1C2U;H^tejNGvrH1&ks=p4uAaB6CE1@s{T$=N*J|K7t@#%*I zZ^H}fs{@}sEW~%=d-VL+gO}ue__}-qcfVt}`<=ii>URovzcaY|ox|O4;$Y~{b928* zxcg1P-ESK1esgg5>z~i_{kq=*;%i#3B0R12D#2ZU8SeTkaMxdjyZ#2;^*7qr7{R?C#_$c*GlM7fIGV#V^2Bc}@1KhDB;n4VfqQOQ z_zv}zgYS{&;YZ~Kcv*E8;b$Hc>Mp?#>G58MkL4A3L67Syd`;efyWb|<{kGuy)mIzt zemijY+l9N|9^C!*;qG?;cfUip`<=ku?-cHSXYjfA8+`V_uwJRREblkxPs5!*11~5~ z7G9O-;1hWs?s`h_s@AIv-;!70Uaudp;Ss=aYqd zJ~_DOlZSgg1-R!^gnK?ExaU)bdp;Go=Tn7yJ`H$T^J&68pBCKnX~S#UR~@+P>B2X( z&j;|T>KVf8@)6wijNu!qX9ho{Jaf4FP27^$zWI3W`jc?ipMiIDzghUj{R6+af8Ymw zz70RF{AKt_c?ItLRd`+b8}O#Q3HN?(!M&f`aPQ|1-21r;_kQldH?>dtaPQ|4-1U#) zu73h|{Zn{yHSB{K-1W@ib=8@=b$S1s&^*&{*OP&}o-BNa>M6iiUV$Io6Y^ByrE7xM;JY6kybd2e zCU^_JqWCsEFYmzj%DeE1d;qVi&LP}&j^M6y3_twXQ2z{mT7Avo6M5oL_@GQI}&%yW0^Y9Du68xZ!Q)Rf1;}!Up;;V2UA8YU}Jx=Oye|}L5?$4`l z!zX*g96Ip1yi0#Vi0{G6*9Y&z59|*JK9l;CoG5oyV&zQh>>vg~>yeyx= z*AIp|=kPUsf1Y?-_;c^KiaZJT_oXSg&*RhZbR*==!3&ym9zK^B;O@5w-=}^n@bg-) zDtu2V)Ki1|-;Juny}k{&*S87x=fSn$J6;m*w+%nB5xfH*%DZsypB~)%rw{l0a09sC zZyUld?l-#TIfbtjL;W-Os(cRj{1d+w{+{=n=bwao{wcWUpN4PhahHL+-z?nk7Z%{& zKSj9vEy3My8SZ{7aQ9oKtNt3?{np_dif_Q(Zxil*JMbM^uP!_(@4?+~A6{4d0G@nW zSnnY`BcH$v$}@#;$Y=1Hd=B4~r{0eJCQrln$usbxJPR+$3vkb&2yZIB1V1bi!oSX2H=HG&E%G>axH-tHM;9Yqa?)~3`d;j<0ho2MjkKpci40pd1ctiC} z;jVuMcl~p?>rXVXfAl<(gr9hJh)cn<>MIS;%QNt*JPY@H3UJS-2={zS@V4ethI>90 zxaU)adpU}irwR9bT5!*&4flL{aL=a?_k0HMf#x%Wm!7Hp37^ZyaL;D~ z_k5;s&u0ereCBY^C-K|M`_uDD!abi1-1Eu8J)a!>tmc!4dp-rY=Tn4xJ|(#4Q-*s! z6}ab9g?m0VxaU)cdp<3==hKFJJ{|bvSz$f8aQEATyWc+C{SM&ncL;aCBltlbPsVWf zJA=F5Io$mwerI{Vt?Rg#guDI>-1)O`=g+|#%Abcje+lmSm*Jj&1@8G*;T3#z-y{M3vbAC@YC`< zd?GKweLh@@NJ$Mygg1g@_-2G1A?sp1zzcaY|ox|O4>YZV(em%kcrs3{410Sm2Ec~22 z2Y0`Dcx^4zQGmPOB7E(J5MP43-!k0&*5K~94tKu|_*nb137^YbaM$04yZ#=0q`CFs zp63AWc@E*HRL=ySQT{31kJB04`*sfZ{U+YEynnoJlW@-=1^2#9!>c!hyczgN&&yf3 zpVxBmeR^Ey;U#$qzEATh!#$r0-1DizJ)auf^Qprg@@erv+L-&%0*w>JEM9*;eENA>jKu4e#uJwtdy z$Nvd@OFo4Usc>1}ajuJd8FT+>m z6?jfwg%|w#Hr(|z;R)qw!S~7AaOdyAoxcyCX$}K;S^0->=bylxe+qa08T^3q&*2B< zso!1R4^4R*epH@;@7A2N@SMB=-;x*Mdw)gy0lxcr!OQUB^Mlvm&R>T+e*^CPO}O)S z;47-93(w1Y@V)Xr{EU1AuV@Zqxa*w2&u9))_*|ZN&+_^@e-iHeDY)~e;m)6fJAWSD zP+tZ3VR;e0<^2Hf$jk8K@(R2!ufk8rYw)4G4j;)I@UgrJKPzv+&&k{HnY;tPAn(Gx zUIX}8>pp~g9Y=7l;~3s5hkY}FAJlaPQ@GzRPP}({zvY!D2|pxH!JEpTh98z^;4OI; zz9rAWkIM6K*I$CW{xZC-`YUkfufmw>@R7U+Kk$OE9(}m4HyFTu zy}=Of>kUS5UvDsm`+9>3+}9gS;RoLk>YTy-zVjUJ>kU#{%lqw^`c1=6%QNsZ@+^G# z!jLxy_rD{RhkHH+xaU)Z?|V(iUxKf{K6n|v=huT*;G3FT74CU9;GRzt?)kLfo=+R@ z`E=l(PZ#d_^x&RPAMW`K;GWMA?)gmMXSKdl_#UnA41PjBhr8d@?}c^n>qQs5-{4v0 z$-r0TS$IxffIEK?o=|)VzC&Jy@08czd*yZbK6wLPlsDmr5bm7j^gM0t<;r@5p z2JquA4eK$47hfKH1YeVn;ohGUxcBE2?){l~-|~KNze%|JO~F@GPa5v}GjP|Rg&(Vi zI&yITdo6kR>dhg(0AJe(UW9u-CAjBPhWB0-@>Jl7R|l`cQ}P;okGu{q$Q$te@+REt z)uC(OcHv&H9(=FXs}J{j4d7m{A>8XVf_uHjaIe<{?)93&yW#L}00$uA>gnPY8@B><}GW@)}0{8r@aL>O6_x$T{&%Xip z{F`vkzXkXF+i=gn1NS_;aL;o<*F1-C&vOKCYHnk==Q)9Uo>REzIfHwibGYZ3XfN+i z&oc@4JX3JbGY$7VGjPu{3->$=bnj2N=UIYRb-XRZ-ERf%eyeczTZ6mbI^6v>;2S=E z!dG;@+JXD|t_yd+J@`rG@57yc1b6;1-1#SP|GNcKxbr7Iu)Kdf|0LY=Pr*I^H2j>_ zF$4EJv+$bcP=Fut^Do@>l;EzX3_q(pHF!$T%XPT-PXq4#(}a8fbl|JX|9{zg7x<{E zYw`b_IZ2#^08t)BK^ZVgP#ysT1_e7j)DR+$5!(o{Nl2oJgd|M@1_ezK+f=Yd!8R>a zqD2h|n)YIiN^MkXDN-A~=uIp3Mr$n!))=YctNzy7XRUK~*35AR@8f?zpTFk=bJqFp zwbxpE?ZEY=N`e|q<9Vqew28x;2h5}!SgAe zluiA|5C8sOs^Hw-fZ!Z|y5JmtQ1Cdq&d(N{f4?&%cqWaje8GdnYXnar`wfDRB;F|a zD&kFo^Y4td3Z6mwZGx8*Zx@{7?+~2h?-IP=8oNKb1?S&O?h%}?!w(6*mdAtOBbVCt zj|tvO+}PZIJfzY%@e4ke$B*D0w2q|;Zcu*(1RqH}UGQ|`LBSg-KiPtFenNtCe)0w9 z{1ge!`6(Bi^HU=@=chq%&QGJ@oS!DaIX}&UbADO`=lrw_-a`555S;VVDLCh6uizOp ze!2wb_`3z?_eX{uIGE{#3zt(R|DhoPXapOYnoF9~3;5 z@{lb!=ch>U0@5!RoX1;@;5^A6s<;M}f&;GE}l!8y(h!ROMt zlqGnGcu4T0G@kPX=lF{R=lIJ7=lE*`=lB~0=lB~1=lGih=lEL%KSuGl3C{7i3(oO( z2+r|$3eNHG72Kfl+$A{2-z_-D-z&I5 z5S-haB{;V?BzP}9AI=v%nfj$j@D$?Zf~OL16nq!GU(+P`5#r5)e@47TaHHPNW2@kC z#M=bt_d7ZT=XmxCet`UT2|kqUcMHz;dj)6v#{}O)_Knv5<6%76_Y2PU1A?>tbivtv zhTvIbKTGfs@sQvJ#PbDjAYLT+F5=~a?o11+L{FC_gk9<=l5G%1TQU9W{g(B zv*~`PO>lm{wNr48XRqKKPnX~vPq*M4Pmkan&mqBwe#fx4d+i-RPae70KK2VshccNMFxuv%K7Qq)1Zxy_Oc$?sBiMI>hLcBw8?%yuK zxqrI_=l<;x{0NUv!MT5X1?T=fCOG%6@pC&LyuNY&`UU6yO%a^?H&t-%-+e?%!;|xqm}~bN}WG&iz{?IQMV4;M~8Bf^+{i3C{i7Ecj5GcP)Z* zf3*tE`EL`P^WQEw=f6X6&VQ%iod3OobN;&o=lpjI&iU^Vob!1|aL%W(wg33!eEJ3F ze5MGVMfpq>obwqFob#D3IOj7%aL#9z;GEB(;GEBF!8xBH!8xD#f^$BL1m}E~3(om$ z6rA(fBsk}@S@5k(X#EtN+uJHQx3^7jZg0Eb+};ksxxJl&?4cMop__*apbp2@D$>$f_IXgHo<#|w+qhkcL>h$cM0A>E;#3>MsUtggW#N>M!`8hO@ecNng!?lvmCC zU2u-SLvW72Q*e%dui$fOJa-As@plW(@%IW|PVpZToZ~kh>ObB%e!t)cXj}yZ?;)Np z_-Dj31n2f<3C`^e3En`@)A9x1NW4h!7UJcCw-RrZyxMMmli=ONn*~2ayhZRM#9IaL zCEg}Dzkkswcq{4e6}*#pm*7T?9e=mrY`<4^z2?);i z(*h*I|XO^dj)6vJ%Vo~`-cQ?Bi<``JMm+J?^~lQi2DVPqxPl<9w447 z_*~)v!CQ!@3%-?jhT!{&X9?a-JR~^hIbU$jbCKYj=W@aQ^nP@W;0u@A`DzfHe}BDM z@O;v55xkLjtKiMV+XQF(or1TK{$9a%5$_Vbhj_Q(#tOS#y@DSkeoXK;i5n01A3sNk z`vtFDY3l_9H?FsNy5OrCY@Q+bTH;xP7m@vt;Csk^zTo_O;YETUB>i&1Ii5zrOIO)( zHVGbFZS!Wq`TOl#1n2L!Zxx)s-@Z-o)JEHWr{Mhik$VN_c)A4Vc)A7WczOiqcn%59 z@feTTaq;HO@Y< zXs_U{q~E3SLBw#^EjZm?7(E(K(ew`qzMsl^HGYz&e@yT!YOm35E8+MYs_FX$Pp7gJ zjStuKQw7hYvVg`@HT`tKM^aga#!uDsvjpe-1U1e!uv)g@>^r3K(>43~f)`PKiZmY3 z^veZLp|To{kJ0oS1Yb{OjT%2w({B{K1tK>7W@E}^=N#urhiCqXZ&mYTuuL&;9I%u7q)=oe=0NB z`vu=jWhojzPt#8oyp75N8lSG|rwiUnWf>a3K-13>yoJhw8lS1@XA92bEu`^pX!`kr zCsSFG#%F2z<$~{`vKo!g(exVxZ=|wDjbEhcHwn&jyIJFxX!sh=OSsV;K;JXoM{{e0J? zas9l;;}q?1pQCD*rmvr;j%YlEWZVsf`naJT{k$_n<3nu~^%~N+ejcgRIIr1Qp-JQV zd7(|?oGaAdt#N&w@6mVw6=^%FaeduRrKDrK^z}KYaeWO)c9l$9`?zWeSmT5>t2S&_4RF`#`Seu6=zzexY%FK92Rf`ucplLgV^; zyg}poe0)aZ`h0vtKAxs=eLns`Iq-Lctv9_$T*ii+QlImqO zwPkg6h1Zrm2PR-lI7PH7B5*+TeiZEMAUcufXm8?Wfk>h zrI#(QuUTI2tvBV%6(Q)d`YY;d%ZitQ&1;J5z!WrQSy@#*HWmuKOk-vsS69>**OyV% zJT&H}5NKUlacxQYMGf`XMzUnLvbMPD+Oj%hqJ30XU)!&=qUxGzqp+|Jx?pKxN%>NU ztfJDj40h}1P|Bfaa?4hfL1|TWec8lI7F;<&Rr|8IORB5tE2@^46_%FO)n8F@L)n)p zJ35e$Wz{P@b)mWa`UE=5_TptcdyeRw7-~dS!ETAgvCy%*p|YZin^#s|cuj5bGCZs< zEv_%dIiXC8fnHHnUshXHTsg6%a$)h3$};1c+OjeOClJqx+11OdO0~Ybrg%kl?c6dh zhW@*vrmU>gSXNwFSzTh3*gJcQQCNWcPdUf9)>@u>M&%8ea&cr z(utYy3YzM5ih7-_Uf~4_&%@Vq;T6oN*U9Qt;mm2O5MH5hnr?WqV)m<2%ABg4sMjg# zb+USe7jTlP3f1cr^*UL-!V46hs|wZY6!kjUCSi%91sIkwRS#aFS?YC)dYx>`s&KL@ zRIgLi>ty>?6=tYH^*TkpPFAlO+6ntBihqFn2D)|VXW`hB1Jv;ybp6VOaGB6=TL(wT z^lNQY2;xhGO}|#h;<-@y%j)xUXf`G5AB5}rNcE4=%>rFsa`k@q3J6c}@E=D>;pfzB zK>Ek~aAZMNpnd2PJ8^AvjDJ>%w;*&`Zt%7J-+@Jnzk?h#QGMP?|8GD+B>%_AKl?%d z7?Je{dnsl{r?M`NAjOyr_XTS zHy}IG|Hn`{lK&3!-=O)&TNvs89uNQ7q?k_ic_;m^0}v_x8mgbk6=^T)e-8k%pwP>h zXD2}KKfG0u@o)3+zm*jAdt!7U{crW~pB=$J-oH!#RUZC3NwE~2YMb<5;o-k1f`5EY zApI|bbt+Q+({QrE#`&|4!rT9uNBtR8zX*+Mn~eV>sE;hD>7dv^@n;jq@qY^Zm+_3ecqujeLD^6NAll9{`K*f4i%;Ur+`KB z-%1lV+WGTws2|C{ksIFrvm^N52-gXb{8!TRuB}i<-(>smfclaA7m@#Ls*L#`5C3KR z&++h|LeJGU>&`)z{?GF8-$wrR>!*nk{6FF0e+T(*i{k%L5C7c}+K;iw_7{5iUpT~e z+#1FIA`kz8OYQ#G+dn0O|Jyy*|D)u;C5rzhkM%!9{)?zS_CH?B$o8M@;eS0|EWj4+ z{Bx#<|90}9ZJSYFmp=_;>EG{>|I}f2#bm0_J30Oi1Bf(#(y0C}u1I@X|1AK>ft0On=;X^ACtYV|0DRv z_Xni^10Lh2p8T(h(*8esjGr3vpH20#{rEnF^uO4{e=qs3kK+HE9{xKb_@5QQe+G1D zr14jJvh8?p6#wUVj6dVD@cy3@!T&<)e_AdbZy7Xj=rrbV&L8i0deje6{UWEPEwDY_ ze-m(|_P0`f{u~3Fk>elVvq2VQ1=^=l`}uug?Eg#PKgZ4U0?%oY{Li@EHpHKcu#dve zUt^&ll7IgdcK-boF#5;$qon^Kbo~g!sNXg+1*0;IXy?y6sD8i7aL_^Z?^y>5+GbmI z!EI0+DgKmi+3~l&ZR=wEx$s}czZ#gdi8a2t*>3or{_ewczYCQk)jze>uK)DO{Y(2F z8OACAk>YO;+L5-rZr8y0FN6Ow{t_sbHZlHJAA^Mzw%%W;o%14fzYQRg|LigL4OsJC zb`A88V^#Y94iuvXpXb@p^A#|$V0)0xL$|oljE1`r`Tz9%y9b|;B&@E`Rm?g-#|9g_`&?)TEX>s{^D~^857zL++xT7 z(68{w-K6dZP(PCY@{Vx-`Cvx+e;MMFZAWii)9v}g_o3*wEJFQ;hVtUN@`)uAt0x6; z%TTZOi!Ix)(=sy^oSt#sv@9hRCEa{c?!`XSZINj_7BLs0g|1EzV!+jMI%u}eZ_Mko z3SUW|dq&#z`wrjAd!+&|uYd8y7k`KUN8o=S{6{O;D!it`^F_4sS03%$`H!*h6kT@s zz}T4&|MHnpalyW#cw^x=g2wwLNyb9RWpgk&ZqPdmev)_2v^(;y`*nNm;phIX)-;2k zANqZBo`3p|+C;-#mu>h5EEyQLz*u|lpjogFjvTtcIBn#D^qIzsR@~DwMj8IYMH}y3 zV8u}b%4s&u&Y5H2zd85bDr4?_RmRAB7Z@GCSl~C# zI^A!Y1I8o=?|R)bw)a^6v(GRZ^PqV{G0r&&|99j3t2GL535TYCxIS<1zWZu1PhM^L zG99*KB-ri#{KnsG``j|_1lt>Xz{lq|KHY}nWOQS2=NJQW*l6tZ8I3cMeKE&;@$(zw zK;OI*`*U8`1uqAnPknD1)!2{e!-5}UzqQ>m>KOOw8v~4;=@9E10~%-coM3$3^X$_z zUO&S(?)3q|okr((XPAB{hkDy?DLgjHOgwzAVJ!Uo#<|-t7Vvi``o-8jzwy`GKKz!c zVm*49Z`)|g*yT?Pj{B$O+g>=sc>nN^x14&^GPi#K{hDMB8{kh5K3+J}_|6gFOU>l7 z$C(4p9$@;`-8|EHKPk-^x7RclmizqcUblvBH;Ror->`;lM?d9f2Ol2>_0NY~2ViU* zy=*r4owe=r8=qBqx!X5vUAkptRxB~@9PVq(3z+_O&-ncFl^v*m2*!8On$8*JFuse| zJUzn)V>lhg`ym+XfsOYqFr9IG?*bFb(BI8x8;={C?_IDL>}-UXiq$hXTzMB4Rc~P*c%6PVhPyV z;v05&4Yc=B-_YlaAa0D6+lzT#4*q33kxS-}3qB5?mCVGx$9ZNncFy>+xdx|$q5hQM zgt{h((gb}mBs5cKOP zf3PnI>&U3@8t_@)$(rvRJ>4W_B?fZRKU+y=L^^KeM$G)WLNBZ7=?t{KdjpTJX zpf@-e+;(EztZhc4ap&O)$(u$QgANazmb__FQu3y=(~~z9-}?N9U)=hK4ZXMial>V| z?%QzAs>DqbZc5zbga7ZWPTZ9EuP+vkzx(!=mVW;HhVk#++qd&?f7md-==r{!$MXBf4cFp&rj?0v$#$tZ2SBc^UiEoqv7hbIT6;_ zG0FY~2CUVy;M}+k*649CFMa^?qQ^3K{vPH<&ydEMi7+R6EMw<5XwR&*uP=DxmRUPr zf6(0a`Ynw!eBkG=R_Dx~?+15Ua85AR8aw@AYxl+W+WoA)cJJPHtk7P&Km3+&+tJIc zZN)xg7pw&zvWF2PQ%HY*6BI0PR|BE zxK{5`YxRe)K70gg!H-~FxE|*IuV6hm59U3t;opQc;3Js(aL<-mai4K#YMi~6`z&`Y zFMlAo?Yf6&Z>#*(tZkzL*2~$Whi|IdK1azFXAa-wzjg11=O+)}R0*+QdCt_~o5tPx z`wjlpCvUnr$9Q}k?3cotkppYRQjl}tfB6H(Houju*7>E|&23FxKW{a4s%y#H6Y&U+hj-3z() zw*|NT0PkO{|x7+kLmpMu`#go&nUy& zKh3#tO$ih8&bHs(oi`57)rZS|mUlLs_p-m)QTq?WNO`29GV6uJ!Ry|J^Y^+>w$|>0 z^I@ks>XmVGgB`GLj2Jib2SWm@2aE_ihV!6a4$t+5j)ywyq0ai5>xVQ#ov>r5Ga)57 z9d&lDPEva7rh?wk;Pl(zcu@;KVfJynz9D8?5=#l;B-2KtCLU@%Rpm$4VG04?!P~`^FtFHNm(9TX6pG=zAX5 z?&tokuMNiN*)T?rz&Z9XtmWfA+}}6JG*Y@MmSw${n6fS##_l^Xb}QlhyAIa*-|u^) zuLt_=oVCGYOIQ2VxLvwB3C`ojzNL3RzoBSy(xxvhgE`|>FKKOXUpCnEFVEiRhp}&b zH+vtpa{~C<2^_Bnpg%XkINP`L?muj31z%rU2EHZ+g440?^Q#Ah)!za2*TH=1guePx zJ74Bs^YMa*j|piw76wAK2E}o-(rX}J}^UD z+HGijMte}?hdLwi0Ss)mVm=+!(;gIA#D}7;A|JK5iY&JFQ?x6&uU>7~N-CytIg1=M zhIYBrhFr(v! z=CR08V`zC>_^8rVWRat`75S*yRb)|bLtfN2!1adOIAEVK*@=RkAR{$rCv(B|xdm8< z>vKf0*x`8eu}y8{5s9N%Y+li51D}IwaWWRw3dh22`>MHNJ6fAqP2(!I&ojkU78y2ViZe-pTVfjcoU`91tIVKM zw+c7ksV1wiY6EGQM${@Tq{_VpRZ1y~JO*O0!nHX;J|iQ-c+QA57+9THT<@4GV^Pmc^vflxuRgwra^$XMcic_TV_cEHNMdGBR~W5G)y4u*$aESGoV$pPEZ+LY>y+ENxr60(f7 z$y+k%z)fn@wsRlz#dZu0EusLABR5<{YZDo9b~2r^ie<#G5^<&fozTiD_!!nZ4(vFp zw379<*uDI>REc_x8tx@(m0i?^UfNs6Eoo6tE2PUmsfG(l0kI<5AKzNdwPWb7xx&$L zToT1mRal-_OmA-Hgg8NYa7CzuX z1TbX_A7s&h0hqdl59SgCi(es299Jp@fj6NI>S+a&G%7KTMbf^jOghd^c1D0ox@d3m zZ#OtK!X9u0sfaJiO=B@Zhc#lj(J&jFF~T7PfE#VBkfJ&>Q)kWyND!bCmr+P zZE~tCY9n!vi=65tNGp7;vDT?l7_AEDYok-8C|Z?9QgFTGvDiXIrV-UKTWNNx6qDra zWb@d|dZ!A0uD0JMtL&vx9!dCMh~=TqRQPs38*m`azzJV%$5Ex5Y`Rs7S>y|4(vLG4Sxlue`+k@ec`p|+ z=6tCIhFIjQF53_vxtDJt7I}Ys9=R6WShL7`G!*?IbQ;CJiuUjxNd6XX5AS7r!z;z` z9!Pkl7(9i-!;Ag~QFx^oo;=D*(1+Z7-pe#FA5Q{QVX??TB`lUYD8wS)M%aDMNA1pH zTf$-|AzP7;cy)$H?=133<@iQXx)Yl7K%S$9hu17}d@$BnOm#vHd!8NJ@FT}YfCPBH z!XmGi@IafzBGN+Jd0Y61gMqp%y7y&eEb5v0FTDrCZXxUJj=Sl<_8y39xRecR`K6{i zJFmeQAdSeGbgGl!Wu=J9@lgy1!^19?$4lY!z-d#tJ7!p{Aq4M%__y#ug9}r(@IjLc zQ@8Men|_{HPBUfucr zIk4lXvWKj9IbNb({jh3}Qzh!7s%}zss}!*4cZNh%D_rFWS%YT@EG9cvqJ|%CC2E!N zWIgD3S)1-JV*Zk4FvbCn{;alxuED?FGz9rMGB z0>{c#a(Rg1iA5IGp6ghNdQHy}?Ir;x0*gF)?ei`l9dZ>}>?L%3Cunv99wXT1xOgvn zDwPUm&_0H@T*i~?T&GIZ&gCj!!All-!FxrP%N@^Ar(*=qTzggQRx(L7*QruKlCzVE zTljQ8Aml`T* zKK?2VZWXT00lsT+~h?Ck84WB-HC_k>u=TBiIK!h+)F8DhCil6?Pxz z1onU8{pPt&I3X6Z9ds2B#)S?FvB+Zs1{TkpQdf(`atB>iNut~F&ZooNd0Ws(T1`&H z5R2;_RKO!`4qDtn;%)~mVsVdyoK<(Pg9`SOc)&p+7P}o(aFE0| z9TZ~mkb?@2ka*NVAr_B0Xz^zx#yO{~5Q}~XE#@nbp$-bMnChTKECw7DVlmA@1?eR6 zi5t#8Eb>{{Gz!8`r6E46x|bLQA+oj5F~2CE#CivXsEN)_PE9Tdk^ncOEanoj?>uYh zsNPj%v9X^b_jaeN$Rc;KZIM$p(uwwR7CBG0A{laavJG>ogc}QOSV*Xp_S!x6S{L!S z-|Qk5w-U09@5DLpW$$uf{FXg*(B)P>Kw^)J-XxJn5d^{_w;x=XTX?XHcay;*gZmz; zvdF_gMMoZ-olFlGG?3|7?l-wkBMC52S#uzA$YTXAvOB2) z=Mc1b+VgA%#A2^w{_3M7x>Gj9B4-+|BT}gGZhk{7a-KnpCt;S;3(jPm;h@DV@(hHy zSac`j)%jGR(y16?vBp7H^HgniP>98i4!XL9#H|i0V6nqN&Zm@iJLu|85)U{i#A3ID zu0BZOF$aZM{LDdD8}uYN#d#uJFqFiAi&)HbP>97W2Q8jKV#q-u78g2bF~8lwPtPII zEb>Ec7&-M+!F^I4VsWiwYf%%4n;jHtC2^OFSnP1n)w@aTa!`oH0}i^nn?(0HeTc3T=2fWI-T#YHS`cF3%tj`Gjmm zUUu4CMHYFju@!k8NOMO2iR)d&VhbTv zl@GW>048qPMH+kD%3UNLbrFjOWn9_ggP|@=blzy@&IHY*Eg7T{bUQ4U!~z%bo1cv? zYA3PNMf*uS=%Pa;#<{)6Vlp8JBW_E84l-Q586@VqD4)az7qQ4|m$JqOO{51fe#;Iz z*zH!{OJcW+-X!s;i+Ew-6#ynEi@XAW12gI~1{zUDKCKP0T)Oc}P*0WdSq95IpksKb zDb2)Cg{?O_6CvuOCZ1W%TCgnhRExp0G!sJ=w!S&`VB1J_hZZc$?s^cl&C*N^!Ls#^ z*n>Stsy$k;Ec1#L!}B$1CWb0({RnxEp$adZpJ~Ce%xmdaFcU)+w(fV9$Ec63hmz_@ z+T#RcnOFH3JWDe%RAKAmV-J?k;&ZiNS?04(44$Q#7^<-KQ0&3-X|PBOmSsLK#^70+ ziJ=NxuZ%s|22yR*f@OLAS2q(wuxy=g6l18;Mgi^6f@OJE?7>PiF?eR{9kF}aL#lhV zU|HtNnHW4vGcijz>Fwue*?X~D95^sAeRAy~G4EOsw^1)fgVSh#et%$IdBoQ|ZK z7^<-KOy@!`>Uol{FXw8(vdkBpF?g0{VyME_L$L?TSH4ABuq^YXa15TMnHZ|D^~%_T z-Abx$TCgnhMS2VaP@0LM3R~ah1RM2q+exZ>v|w50+lLrDOEWQ4Ve4J72g~;{JzB6V zANuNMVhEP4ABo)y-#w?&jSH>@Ec4w}44$Q#7^<-KH0PEn>M-Ejyi6@vmifLf2G7z= z3{}{AF!o^i1~jAv%X0o#Hxom!Y`q|MFRi4yRSTA7z5|ZIvosS!6}H|Ud$7AnwNne0 zWxh9$!Lu|ILlw5ZKlWg|N%f!>EX(}VAO_FUObk`n`XTRN%@fTt2Mvk02Bn-lV$g}^ zmGFZvzD&a!G;hfH11^Xk3160Jon_2}pMQuO4m)cQQ20rL_%u+taKHc%6C4g-s(nJ7 zId8~-0k#r+@vk)qEhG+B7LtaT)*w{~nga$pPVh(il1-=xzs)%sG|z+MLFiz>fD1t! z3>J)(iN=ZMNeRK!AJ0BT1ra~?lzBtGaf)G_I1#L3tOx?2e^NYDMSuo}U|aZL=m5Az z8V27jY7D1J1Gv)3RA~TKN}UKaKvfmJ^uU?{&`d?m(eYpqg)yfY{Z-ER!5R~4-97u16QL1lx52lj z`%>?mooX0oLJ25S$ypI&H;l39!VNVYLvjztx%t2po;}g58l*~{1i>$?%^Q*l`5qs^ z0rtZLu&6nh=;UGm=3MgjRUL%@^{;J!Ff9IX8}f z1;iY08`W%V^8N9Ze}C$w-#zrFXH3`C0P`1r{L?QrkZAt;;J&+)U5zC35vb>LgSp4| zTd4B>-=279tP6kU`zuuY?1jF6-fA0Dac}m03~Bhuhd+5}_zBqFIA6D41*=|7gW#bE z(7LQ2jJsIn9va;3G%{{tVk^+Nhp5Q1e+)Fkf-g!&FPL{L(KOtHBs0!E7yw_t@2Dl4 z$?m~GGsQg^WDZpa_zQ5>U^CS%NioyigA>j1M)G{HH*gv##u@O1yznb3CnV0sqf1qy zp#IMFp5we45y&f!O0YdI!Gng>fjU;XOUt227@|Pk7IdAsaXwzt&s1Xxz8M;a_TWUUl8D`# zf{M6dPnp#y!Oyf{KcA@NA~Ohk^CUX>Pq4=_K2l&Am2A1#yw%~w=HEac7Ai1WV*UsC zwB=GwE>jMM+6A@hz?SPYx!UY?4Ap4-J4%M8;5lqq++rF;zC#u|8?GF`6NH_qexl6x z4#rO+hDjnuN$nk|EK+;z1G`i?k%+!%61OX_al!Y1)PQ#*AEHtsO5rosRNR{8q7{2A+CXa(K>Ywn! z8?J@E73P?L88Sg0Z6@QZaWe8TXW%PsLt*c`9`oUbxY%4qLr&(ZB_O0fgSbk8D*B`=yHIbHJndUGgtX zKX`{RJrH)IGg9FdE+Fv*xA@z&IByqm-o77{?T~L*ajG*}d>kf8ZL8pwvh}FQ)}tz3 zH+zq&Gus3op7|iq$4p$sN8GKVf#VJ{UM+0x0F>}33!SJkf?Mi)iWISpN)cP91iNMS zxpR+-hR!8>R4DejWRE&Qu#Amj8Ba=dF8qUbl6*m(|ESvh_E@uS!>Btd<@tMAX6 zhk#ky&;BH~?`Ug&!sbq?@Z~n{IcU?UTxt{AQcJ=?Gjp^FzmsH43On;3O{O!xeL6KV z_>}KEXu>TQn!qgs{!cOU4@5Nou6Y);Cm-y4djSRaBsQ9ygrnxxShYOcI=LV~hWzU%tm6DM-1xhVk8k{wz2rJuH z$76i`ulB|$V>C|Fl(kWx!cVI3Rs@1?ER9z`SRQQ-g;zBg@h3m}U!u@?=J_BL(CkvO zyD;OeD}^!@E+FiMd8+S%v-Qa{RRuX}JKCpBjfpJZSXhLAg}C3ktqQ06@Ej6h-5woh zXVaef4+o((#r81H*>ll@uN^Uk{}IZh@)4@Inbg9cAu>6`R}PIBRWTU!X~R>C??PWP z#I+poq>HsO74yfFpePTE^tq&pei1)9&OYme)LDlbF)1u5AEyP(e3cU(E$65kbQ&$^ zSl9x4w47tPtF^6U^YIq0Pb|B4JrmW9h&{R{X>x{gKnwc$mV0+|fhw>o%+%x=ntY*> zIo4Z!_%MNDy;Uuub{w~=vBC=xhL7(PMk;>tSad-^@o3G5W?}VlSP)qD07Onw7&7WEpZerm!5S;Z3 zKWU-#e$2%`XW%uZ72Of2L~^9A#N9z~$iu-Q>A+oSp(v7Jk5Trahl3BLgYZ!X zD#zjIn1`cd(H((GBu64upLjUkc{ms(9k{82qDY24QuV4wU%V>&B79VV%5gY)&BM`a(H()xaX9)<4@dtQ z-4Uonauoik_H|{;z037lu#b4eawK{zpb{w-k8b>jhogT)cLXZO;i%WcQEzldpc2VZ zcy{|@%&% zScXQA1ymx%;*s6q9*%}bcLXZO;V9L^QEGHYpc2VZcy>>f*>!K3@v#P7s@7RE;c_zk zy@KV|$kF-sdj-x@DD8cL>#hDzQ?IwpguO4Y(sJJy7!O|6mIklneznDqkX9=T{A_=< zHFzw9r9V^&KrP?R%3g$LMEq<&-+ol&#N3R&?DsO(h?v(XkM4E%8VjEWI8W!-TKK-Z z`*i+RE5@hu>qs&DX{{aGi4cr{X3wungG;4A}G2)n2&(s5Eo;@%|{T!OWn|l27fR!=Y+zmAR z3i1vgJVaNIgzQHH+EbPXtW)5LV*f`p;kMhXjDU4Z)|PfK|0Pb8j(g`gI?UUH=3*5hO$PZ7Ia4gc=rBvCzcAMi9bV`6~xb%tDc-$FZycQw$I8R9S@g zE1t#isNUfDZ+O4rWwk8O>h!W&jP2FwWi?;z2gLuOlxX4kvpS{O1+QxIK}~*5$?$oZ zp|H5C<<(iId!ei8obaxAiuf#3|M z&7i30Yh3&`3;$%ngvi|Il0Dk9Lp46VA7{G5SF8WJR^OcyUQa>aI4>*aE3aAZt=~{OwE%!{Nz2jrX^?!fBjN1Y&8Fke-8cDEI3$_)9 z@AzB;c+|OCnF@TP58v_$Vwrw*qRN)};z#@S_k5@=;knu9!#90YZXjF5kNFIf&b+U%&ID_t*$5yq-SML&zO8(*7(4Z;<~cZKy_81Hgjsmd0CmI;{qj>#Z}h^ zR+QD&RREuyIWc46v_N`!eSJ;c`I9CU+a@MnTU~u^Wm#SI^4gNJi6zy`Ce>G0SC*6) zS5!@^tX#2dLQQS;b!8>>fy|O=8RwQ=vm~RWq&VZe%(CfI&dn;mCTmINrm% z6*Xm*6;)*u&Ye`&P`s?BvW#PzRCz<@q$SHMDoZDoEGu4GHfiES{8w4AWKu&zd2wC& z#FGC3C(7Z3;@V}?GAFFaDmFrS^De#U+$n{VjpbE!6%c!AprWeYC@fqKJK*((BV2jz z6i1z;X_kt+2MNxHK2X zhFznkzLuQSRxbx-R9RMBSy^3TsKymuQ(IPM6fVl01}!S7Ss7Y!<>d2fitFkMtC!&1 zD#YYugyyeUhD`O+qH3%Ta zAq<~tN>`v+5B1mn7 z76A=w5o*d70qfTyIPTvf0R3BpRybPOA}9-Q5d;lczor70F?*zfnsZ1athB5irWZ_b zHO_HF!o;$353`E|wFp&I85EFh*a-$Y8J*Mk)A3Sx2l4;(dD#6P1@neH!(4T`IU;$K z`fde&e-+=>!VUj;gg=Lae_@6jvLFhuu^!f2s0jV-RCe-dDfjq(hHrDBehro3pXuU; z`fHU0-w%NMTvtB;hpq4*H~fQ4_^H*?GB)@&#@(IpBmX@~Kf^cZ(B>Zak6V#?wOKdG zsDm5o9Z{0~v2|t!wS~Wi0`-Ox)7z9zOyxziX)cwek$u$3C)SKiYZL0!QyG2~##oqq zT9DiHo^s)7!Nt0#mj@zk$jy-$zL1Z(0Uq3%T{@w5%G4$9C2XC#hMiPXTZUJ6 z^>7JUwY*_ML)NsyX_=GiR@T*4SJzKkUROJ*qN=2Fd1=|Cy82Q$cTOzF6!p8_gdB!l zg_axe9_v?h4#pt_b%{R7zBJckC@s6jj^Qg>kJPj!74>zKuBooAuefFRQ_e ze0h$M2<@{stI=o1XC|3GKa7_CB~6wYe|nNNz>FW5kQ1MnU@gi?u47MYcSy3SLZM`60BxWN>8xf^R0=8qdTDtYJUP%lB~OL&WRs5KR)Tn_(bb% z18RN`O4Aao&p>yKe`b8*_v6pXjZd~6Uf1`(=+OFXRbTwD1nUckB=J&;A|mvqgyrf1 z$kq5H>$j^TC2~6yo|$Al16hf;I(<3taUhxNcFT;5k55jr)~|+Mh&QbdeSN;TFtta) z(&!}rH&EC5)9M^h9c?}6gEanbRUbmgm$?S$Fl)OnM`^vHv<9J;I$lf1|DxkH>Nwt7 zWBGSrZ#}&#lH*(A%=pA4Yj$7!X;xBB{ODT}tVdQo5r0~O)n(Cw@qRbqDlVQo<8ZO%1G(R+pIr zlJ&?<5E>rD4~FqHBH^O=;Z`CHzl0oX6L^H+|8Btu`w3V9kMCPgK%IM_jy*mHT0Kzn zWN1t%e%dYZsRmXc)EK=Q!pyEkGa*2cIs^Wz8lFHErB zzHv?ba0nnS2a@*$H09FxKyLh02sRm~Om=*7ZiIRHC>R}^Wc>t23J!yR+=Q7mtP$LCmE z(JESk+3@rD9E=1US_f|+0>^pQN~}9FArGQ#$hkaz z*3OlX16UbfNa(|rF*!E^@(m4JtUiFz1Z(24m66uOkDw6N#DA{DHSzX@NNeKf2{d$n zv(jD@pM^mdVbrcUK`n~ctJ$#r276IF3LS5K(m-?eE)(bLFzcguXvyeHl;&eAQFD;> zd_qpP2I8$hCiv1!9Lq-=A}xi_gF9FXFIM9M*21A{6RbBHVChS+HlF}v%3l3Wh1okW zH$Gsme)lL}6RkJwMZ~g?M_PYPfVtHJm0>CQ_Y*+g*#Kr?G1__p#t`Vg0JbPAur8p3e%@v!SU-kU7*@_? z>uoTch=yUlqr>ER&MQD@+>gM|$+?iH1^pIQ=q*^^X<>D;0eQ)ZFu2}@UVxQ#slBp3 z2q_!|8Nn1jfMyP!;ID@z;yDOqu=Q*3cLunI_2XFp=P7WKl3~FZZS98gTotdi2g;`^ zV3#Mtwa7eJQ&1%lPVYIFCs;2#3rT|Y8ptCPtR3-~c34PYU5OtFi%P$>1S`Y34i`1n zj~br9O#cn~>-;m2kMO1YyMCH1Pd4CWnQT1^ zCzW{XmWU^X`{9~zaFUe_iF#qRFVn=yy$iYzx^(~QC-CT35HcL?vyVFP3S;l;Cm?^e z)~{{;TU+Z%`)IE(XWsmI^XGpT7Td>GLyi5m@-Dmh1zY)-_EDEFXZO*g3D)-2&}C2B ziodmsu)Dzbv-S~OFQHW=ozOWjQ4acGZbV4IZ{k&}hJfdtH~30T?C<-aW1x>=6sA}i z%IuCCp0EpGd{V&_Rj@t0AX62zK>@gJOMs~fQFKEWE6c8dPD3ef4!7`(UGh^XNrCe{ zOq-Le$Ket<#rhqTBwJ5_tb*HPE4HwSC!FYBvP*8`64&hkyQIlB{;4wlpfdg^WxS1z zzhdOy<@3MCNv9XNfg4a)et%J@b${tg zO;usP8iN%I=eEB3h;u*vW6E?mxAhbH>EeO?4cFoP&u~}oGtwM=etv?$a-MQI#m1A$ zFFz@AxvihnAHdPwNohO zCrx`dP3eboTVH*|zMp7H=i5|2!rx@jra$wt z?62kHBDH@`*-_sd*N@|Y<$lM8Q}(FRcm4*@;kN#We#dxlhtdz{w!ZoskbZS;Qu^WC z)>nVU)=$4s>4$S$KhRGX4;Co>aE@h`F$Q=2whW~o&QZxS&giF$2dAoj4Ch#8Y4Zz@ zakG?untdQ%E%&=poRT9d9{A&%2%BZN{m#XmNc(|Sf4mDwx=Qg0VH|;FObX-KNZz=t7{upSU1T}c$6%&6d;3UIchxxsQdGNIHByGKA{ZD}7b8xx+ zKlo+l zI>p`fiu3cHvhS`-JOj%iij(X=q*d`WQ=Dzej=RqA`wTdjrbq@ert|mISJqPW#gZuP2WB?kIxyJp^aF+@I$N{YKJf&iXru<6jX@BpG)d zB+EFvh|4(fE8TFDaRvluziGrd9=kStWs~5nzmT|$ldoSS=l7N*=bR(In4Q9&$I%Gj z*&645<2%(-9C&V0>IDapt$)%aEq&h3@@?1%Flp!#~8I8HK%^UUHrvp&xc z=B!^p^<>_1A#U7|>#Jxp%$G=fw+BDu!H>6JcwBHEf_4~2fcD%j=Ie>eehFz@@0VR3 zoY!yJFP)?>^K-<56ISzubB~Ps7k;?F=|k4VJ+?Pf1G;`Bj&F9d4p!SwbtT7dTEk89 zh16e?Z}#ACdT{%^9Bv=KJU^1(4i9eMXNB9jod%GMv(tlr;K9$LTP$g((u42v;A3d9 zmUe#N!FPM`_dNKR6C&rWT;uLp-Y|ZlasBS*3>q95r_L)q_`M$d6%Rfj(T!8LAN1hM zJ$ReO^}DSKx+KE*b$-}`-vVDtft%Dn=)tGb!YcJ|^x)5W@X6E}(oU%d|FH+(=fS`5 z;P{ovk=k44!CO4|^B(+P9(*!gGKRI+ga6or@7K6{HE4gXgWIL^Y&tQZU!C8marf%c zFrL=9d-Z4-Ni~W>*cYE*v4OVHt+=D;t!H;_I8Fb>8_78aQ z3n*DqzsiH}^5B2>;1kq$REOuM&VxVT!T;pJM^UHB`13sYtsZ>82miu@Uqu&E((if? z{u>Y8=fTgUK`HG&=E2|b;2Ed7>wrE!8$5UlDM`QAd+_ZZyw`)DK^M@{euW2r#Dl-# z!H22uGYKDWi#_-cJ^0fe+)uZNGX4uZ_}w0SuLu9sgHIe4xgU!?_y->RtUzQtl^Q2e zDL$(4G)3%}v7_xh=0WE*9{hd}{$~$9cuZvbb3OP<557a=XKC>-JHxfF^Y=XX_ogvj<6dGOmkc&7*dz=Pj9F|ywd4}MtV)J4j`7l z9-xOKI39HVrU$p^rd{fvr*W#P?7uwSjYsD*FNn;ani-k*dGP5MM%J(N;9ETSTORzB zZ$!4A>%lj8@aH`E#~wTwjO@40gFoQG-}T^uS&{8u;lY3E!T;dFjoFdyU*f@U@ZdW= z_)!l&c1~o!i#+(f9{hj@KVfcU`wKkycRlzn5B{kKpLkJZzr`NB&4a({!3SL&+5VLt zyvc(<>A`)MM7BTGgO_{oM?Cl&9(-7KWWNO-{0_Rvhi1AKcEecj_2Vxf%5Q z=p2osektkG^5EFHgLp{je~nk@*+IrwD!iE1$~*AL6qe zUMcu!;@qEXe+u#Ig#LxZR|=j>{AR(gAby+RR};Tm@TJ7>7yJd{I|T0}&i%&m*Ajn5 z=-*8IkAmap4{$pu_p9wykxJ7%m`b8JS%L@Y_)@_yrepi_ zLT^me@EE)CLOO9-2Qx$Vc4H*a_v--p8YvSm$TjbgdOhRhXv>UeM0c% zbZmbf&$Z9v>LsDihri-t8vtCqIIfC zektYQ_d*~39#L&C34SVF z5WOln#rdYj)pd()#&}!f==Zy1r%&)*#6K1M@5KES7x(XHWPh^Yag^t5;@Dn{r-<|~ z*Eq(*>+mAMb182nf|paC`Tcs%XFKubLjQDX&rOok@%J^3aW+$&>otyX-b!}v7QBP_ zJ%S%5{t$7_+d{H`K=1BvwsPmPkA0d{loTG5kFmU{#;AC#`Wh{(}?pt_0hPR zt#QmlEj<^zSmQX4c>T=NIO?a;L#%IV9QApd@*sf zKY(JvU4_tZqVc`bL;o(J{}9>#so>m?4`_A4Lwr!89W>|pP2#5reu((l#4*oblTO8vo((PUm*ME3jPz~ zGXyUso}+QJZ_xa`LgQ$E8MUWCa2_{hf?K3tqjAg+e{OHJ;N0FH2+r4acMHzz|Gk3q zI{&cXJl~%XoUikLC-?%&|I32&b^Ggr^L6{Xg7bCz$Aa_yLOd;YJb(FqAyx46DV|Y+ z=Mg_g@T-YW6P(wFS%NPi{YwSEmiSeIJLhG=IsY}paemQ9lW=qyHwpb$Xnx(MaU5^0 zG=6@laU4JMY2N)*$^W}iX z(f*Be{F>mb_mNgL97ue1e{A}VA1^$-9eey898vh$$e{PzIz^Qg=}BYj@q`2IYR^2eOl z|6zjjdNNvYzK_Tvj`^XF9ICusEcE|Q>r9@;G5>og|KHTOzRr{g&g(!Oap`xhrjPaq zrl@d?4T1-W-z)4C+3Lnanm)$E&m$fad;_h|JRUI~`iP>k^rFx|MtOKuaK4`WyT&p8 zI*RkK#xb5{v<`ntT>4F=yfUXSjZ27gzw`5yD+F()3f~s|LE_g5{t)pMg7bN54RMTz zJ{qa=(=7Cd(tX-yjbk1jr#!T39P_~E({>O0`sbE)zkm18Pa!`XC+F>K;+!{ro^YPv ze7>6_IG@)p6P&L<7Yokw?pne5ewoJw$HUiGHw%5fzFH^v^VF~w!TI`XtKfWn)h;++ zN9`7zuewTk=dXhE_<2uo&d;ZUbAJ4EQ^EOpgX|9z{2#@t8pCv9Oq3MNB!sMc#XzUpU2@3 zHIDkp^v3L68b^H|pIZdyb@&mD<9V=%&VwBqNBa-ZMd;IlrxM>McsjlD`|pC+5I-om zpOX4F!LJ$x&SCopan3(qzkMq7tI19rBP~>UUAUv}hdl|4jN1XdLxZ==s1S8b|$s zr@;$s9fDs${5g%Ioed3w?RJf${Z`Wdk;YNKlk7jJan$c2{dSF` zei0o%E_fI9(=&n}q2uQT&m0QIU^^iAe&VkQej1(3-y+WQh=#NAfzUsfE>1ra{2Jo% zBK zqy9ale~-pdznSzO)Hv$DNc!!9pG+6CPiY+ObdjAGG>&$1NdKV5RlDeV^=}$S{def^ zZT=zn9fm;Qm@o`a?91`t77YQse0NG4eZ3anyf=#^<**j{41{U!-x=zntQ!);Q{Sk$!{5QU49Hf2+n(KfupzG>-af$^I7N zJU&Boe)*-~{C?X#2Sj&V-Pv}=5#an$GQ z)r8@8IrsY?rrXC!8b^J;ZcG)NuYb}sJ`MDLg_U4S*Ek}+&YUJVUuVwNINF(todDa# z8b>>PeV#`g^N;!Ab)ZnwM?0k#!V7FA8b>>8DR27U>*;oWB<$BHD{x()*+Kj7P8o{>o)>J@ING02_IC z_Opm{zkfmT%o6-!@|!E{bdsH`g#K9<*>PU2aXrpu9(I}q-$VBA)$CwCcThar1^7;&tLgQ%X-zmr&3Z9YoldYqFy?BofaM)pfII~Y#_*{>A*QsVmGkK^^j46?IU=uf!B zjJeGS$5+0o2njOsNwPb&@;13gjNZ2__cJ>L*&)NP% z*!f|Oov&9lK2wYTu!o&Nr`z>7&qFQycocEY^H8#%F8E^N{2Ytzj3+xmp?|@A+x}dQ z>v1k5F6~?|cm~;T((GWKpQd>36x>gKHw!!2WM`YuKScUFHLl0`YY#g;g6ER`_cc2h zXBFB1MDRz6Cyui7#Ca$sJL!UNCO(xo_t)LIcKzuZ*W;h(VW(2?R`U!9@6)&*=Py0%ye#-`it{ba4#v5c;(1T-!Q}T7VdntZIU!)j z#rb@X^ap5Mk8=cZ?k~1;q2S$Q|1!-E#<`sA=L^1@__e|gKd=72#%U;lHTXVf;ut^1 zxhMfCTrUUIPJNG-uK$$ANmPpa>45FjkezOgWBjH6ue0-yZR@)3IF~ps(|Ci{dL6eK z9g`^ylQ@cOD+${g7zaBk3#gvZxd_p@5M`MTg-S9fD;d){v#@!Ky16T{x&=|#8`ow5 zv8AZm?GG79Ty9G{t;hf+NLQjW0s{3~ZZ$9l%?e=%hTZet_bVTLMJB)=r1#_V&i$Tq z?!E69-{T{euR3mi`CR37aH}7iO@@CPcHSOOjo%T^M&sS!^m`6|-zS{UH|`bA=Nk`# ztNw!H!_M!L=+xo&yyKSdSJQE!n&Up-i;kQ9uVA_1xY_f5+1G^g`HF8k{-I#c=QYZin>_rX6SocFK4 zAe{HXpAr6xsGqM3=jW3z2xq?E0k?ks{_S%8<><>S}a?)|LXFL9aaNaMz({bycE%eV3$1R?-*oYqz-UiPJ-*;yy z6o!uo{~hp;Ic|P?@cXFa=J%VhFA9GYjWFl9>7?HoMqzluanreSSA-L1g%`k=h2IJO z1;{jR||1kV1p5{I97eE`1~?LhnIVgJYgJ_Bz3 z$MRZ2UQar1dA*Lj^!-jRLH}<=pZt4H$Mjp!|B>USKb(n${@Zc0=a(M-*KxCd6!z~% zzhL~i+hUzPj+^}@*xxDq2jKUEv)=eUj)P+Vp1WiHhlL*lKO+3g;ExLbE_hM+d+&+$ z=fD}ySZE&`J~x10b~;fzq8|R)ajSxW@N-S)69i{r1aZ&-+%d3Fq2$e+S#qn()revEx@A zxA=d6eA|v&JbaF~3vPLNzqerjO}-B?~fDsGsmqS_#7{fW2%2;fZy*A;5$%>)M35xJ%OyZ z-$lM7uqXd0;(tK+2f-f}{#);e^O_KT6#R_v1@NbZ(>_*<-mmz5zZOuioT5f6EHLishW}4wm!6d3-MlXWV7s%&Q{2h&Zdl&w$s2 z^LSAgK8EFnaOT+*&hjnC?Ge!wme+*iQ{tQzbc%% zHQ@!sQx|>=ydk^@-W1OIX$hzPnsDl`3#WctIQ4tNpF=zw!r7k^H^m05&kpR9!moi3 z3BL}W65azJ6}}3d70!5a!aK0f3uin<$KM-lCy-}ZIG;nS2w%r?RXCqRs|jC)eqH$U z;0@s~fj5P-T~~zjKJu#Y4s;l=wU_0~{?rzG-XHG>r{AvdSE1h%PQM$%ufd-8ofr@O zrf~j3&i|4Soz}JKy1z#6_47@Fz+hI>Q^W6~6d=ogKV*4`R zq;TdtB%JxCgfm}0k5By+;?Iix9`Ky-F>qe5Q|BP~gxIs*3c?GpFAC@T$jZWJVZS7t z@h=N!{59c>zb>5dH-t0(rf|mJ5>CHs!qbREu8UZgfsq8;f$Zxi_~ZQ{JsS_pTjAL4!4VL3&iEU`8Glna<6jZZ_*aE9{&nFU)LUCPw~LN& z_VccAZr45G+)g)yvmYjI-P*5MZ%N@<)Mr{a=DuV$b;V!Wnc_nX)4ahsN9}-R-z9)_L3GPqCeg}9)IQJWTo`O2p;5RS!tcMBV z^ji>4zeVBnTNcj!)sk@TCzplikXKFkQSiF(0(e9C3Gk-yGI&e)VemEKz&pa3Z&x_;?Fk=;&W3R2o4|7l*1lGs%r_~V`SQ65+UKC35&Og7qrwZ|S>eaP zbHXd&dEu<*3E>xDUl3jgFABd1?%x+@_0Rxc68jwZvT){G6V80=!kKSFIP+}^XTB}r zdBn3OobA3YobA{aJ`0_WaMoK_IP0w^yaAmJ;Z1Np=feKO_)~a3g`DxHg){z)aK=9> zobmhj>19GJjGxcZ&~FiO7DR{JMN#+??90N>gI9!eyRHgnzg-f}dRrF00)0N$qwzPz zp7E~;XZ)+e8GlPS<6jfb_&bi<_aBF_-|hAD?9^zeovZyd0Z=qJ&$We;XJODg)c$BBK#b9Rd^ko->YUk)US&@ z^&7&e-xPix`YqvC!PkU$z}JOe18)oOf_H>p2k#0`;PYobP{DkupB#!e5OV7K_YhkD zp?*s2-+*8K{*~#_r735fz44^MF!24CW>03^|8BeS2J|PK4o(TpJW&u%t)k=D#YXmJ z;i-s*_xd=FDvZ`th3|&_lH+)VTeN0b_!-#O9LFo5qBV8l>{kuP@hY0gzA3y2{T0XY z3XN#Zs__pmPK_&v@(FP!y1 z;rL!>Ul30FqT?gZzAT*k+lu41y>qAv=l$tDFt{b;@3;3+$Jw@q4m-YO`*qxJr#z1{ zeZM^}J9~r{k!KwD+t-@oemlDAxZhsbKIYeN7dz0-#(n=!Iqv)UUdPk$Ws|()zTX~m z-1kqmkNNfeko!gBzQ6sQ)A9Xk&2is9}Y#{9^hIB);8$;<#`3G&>kjPSTsM7cZmu-n&nO5ilunoWtqSG+syLp7srlfJ(Vbpgh(lvMlTVZuPS2d0 zKl1q8@lse91ss>0nLl|dF*$j9accTglhfr-O`e>ZncZ4C1XG?mU4CTY)ZC$|`BU>V z(^Fy*V(Mcte`>Kb^5G*Nzb_Ksra4V56V3+*TP=cSAB!7R9ar7F=&x7x#nNnRyzQ%E9&2Tq$855_40tv!|xF z^ch>OR;|TH!ivz_7N?Gf>63Fd9X>I#{{xBP>d3xm{DIAunLfRkjn;;7SR0LF@K6Mz zaTta25Bfs;9*kB;<1h-VABaFSexOf+4~|7vVI15<<7l-1Km?-kfj-3!?6+d^cz>7= zg(DK#f=-WQE|0^s&d|DRd=ok<)DwiHiKgdJ8G?%lBkCt`Yo zy(i2X!|r=?MQ(F$>x{@Hz8+S;Re9{rH$}AkheGgH{#~0E@k}1eL&B-YX=On9BFarj zdFpZcuPCqiub^B*Doo>lIg~e+6F-%|kHHekXTzfTVB9=EKNQXf%tZb3`7GMUYOycQ z+thwPx1aysKg3q_WByHxdgOmFz(1d>qg|}F-M{^QYd`)GS9=Sc2*{}Y4c)p2tgZxhp@Zad;-_G~d|9=ch-mzOIUxQsxcE=gF{T!)A9iB@>6y)6MEN_8 zY+a+}e`dh`vyJ#Wc7hoO>wk8=t?}EkY6g_JGHK)RUO8zPwS6VnD6?{BkJ~tr_-lWW zAC}ejUjpmbe^&9qSK-5^632gEm}>m>z*N)h@BXZf!+V`jkMYuW+s}s;{rnFN$ExW} zT+-_A{_wBvyk|DAwm%N-YfPFs(P4R6!ThQF!?3TfLkvwR8y--mzdaoTCd pbH5}z0FD2<1N>)>Z1->9t5^T_JLi&O?D%p#si1(V9qLp5{{R4u{iFZ@ literal 0 HcmV?d00001 diff --git a/example/android/third_party/lz4/armv8/liblz4.so b/example/android/third_party/lz4/armv8/liblz4.so new file mode 100644 index 0000000000000000000000000000000000000000..f22c79453a6005442647b874e559ca7403903964 GIT binary patch literal 1092656 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�l$Be!B+!LA>WTLmxOvvJ2T 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 T7+T1-icz>o%k*}Q$A0}U6fX+) literal 0 HcmV?d00001 diff --git a/example/android/third_party/libsodium/libsodium-android-i686/lib/libsodium.la b/example/android/third_party/libsodium/libsodium-android-i686/lib/libsodium.la new file mode 100644 index 00000000..1a9c26bf --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/lib/libsodium.la @@ -0,0 +1,41 @@ +# libsodium.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='libsodium.so' + +# Names of this library. +library_names='libsodium.so' + +# The name of the static archive. +old_library='libsodium.a' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags=' -pthread' + +# Libraries that this one depends upon. +dependency_libs='' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libsodium. +current=0 +age=0 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/home/alex/magnet/example/android/third_party/libsodium/libsodium-1.0.18/libsodium-android-i686/lib' diff --git a/example/android/third_party/libsodium/libsodium-android-i686/lib/libsodium.so b/example/android/third_party/libsodium/libsodium-android-i686/lib/libsodium.so new file mode 100644 index 0000000000000000000000000000000000000000..1bb074974862187dd8b4f0f482fb82fc84023898 GIT binary patch literal 454172 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ℓ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 E2WY3?i2wiq literal 0 HcmV?d00001 diff --git a/example/android/third_party/libsodium/libsodium-android-i686/lib/pkgconfig/libsodium.pc b/example/android/third_party/libsodium/libsodium-android-i686/lib/pkgconfig/libsodium.pc new file mode 100644 index 00000000..0bed9f77 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-i686/lib/pkgconfig/libsodium.pc @@ -0,0 +1,12 @@ +prefix=/home/alex/magnet/example/android/third_party/libsodium/libsodium-1.0.18/libsodium-android-i686 +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: libsodium +Version: 1.0.18 +Description: A modern and easy-to-use crypto library + +Libs: -L${libdir} -lsodium +Libs.private: -pthread +Cflags: -I${includedir} diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium.h new file mode 100644 index 00000000..295f911c --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium.h @@ -0,0 +1,69 @@ + +#ifndef sodium_H +#define sodium_H + +#include "sodium/version.h" + +#include "sodium/core.h" +#include "sodium/crypto_aead_aes256gcm.h" +#include "sodium/crypto_aead_chacha20poly1305.h" +#include "sodium/crypto_aead_xchacha20poly1305.h" +#include "sodium/crypto_auth.h" +#include "sodium/crypto_auth_hmacsha256.h" +#include "sodium/crypto_auth_hmacsha512.h" +#include "sodium/crypto_auth_hmacsha512256.h" +#include "sodium/crypto_box.h" +#include "sodium/crypto_box_curve25519xsalsa20poly1305.h" +#include "sodium/crypto_core_hsalsa20.h" +#include "sodium/crypto_core_hchacha20.h" +#include "sodium/crypto_core_salsa20.h" +#include "sodium/crypto_core_salsa2012.h" +#include "sodium/crypto_core_salsa208.h" +#include "sodium/crypto_generichash.h" +#include "sodium/crypto_generichash_blake2b.h" +#include "sodium/crypto_hash.h" +#include "sodium/crypto_hash_sha256.h" +#include "sodium/crypto_hash_sha512.h" +#include "sodium/crypto_kdf.h" +#include "sodium/crypto_kdf_blake2b.h" +#include "sodium/crypto_kx.h" +#include "sodium/crypto_onetimeauth.h" +#include "sodium/crypto_onetimeauth_poly1305.h" +#include "sodium/crypto_pwhash.h" +#include "sodium/crypto_pwhash_argon2i.h" +#include "sodium/crypto_scalarmult.h" +#include "sodium/crypto_scalarmult_curve25519.h" +#include "sodium/crypto_secretbox.h" +#include "sodium/crypto_secretbox_xsalsa20poly1305.h" +#include "sodium/crypto_secretstream_xchacha20poly1305.h" +#include "sodium/crypto_shorthash.h" +#include "sodium/crypto_shorthash_siphash24.h" +#include "sodium/crypto_sign.h" +#include "sodium/crypto_sign_ed25519.h" +#include "sodium/crypto_stream.h" +#include "sodium/crypto_stream_chacha20.h" +#include "sodium/crypto_stream_salsa20.h" +#include "sodium/crypto_stream_xsalsa20.h" +#include "sodium/crypto_verify_16.h" +#include "sodium/crypto_verify_32.h" +#include "sodium/crypto_verify_64.h" +#include "sodium/randombytes.h" +#include "sodium/randombytes_internal_random.h" +#include "sodium/randombytes_sysrandom.h" +#include "sodium/runtime.h" +#include "sodium/utils.h" + +#ifndef SODIUM_LIBRARY_MINIMAL +# include "sodium/crypto_box_curve25519xchacha20poly1305.h" +# include "sodium/crypto_core_ed25519.h" +# include "sodium/crypto_core_ristretto255.h" +# include "sodium/crypto_scalarmult_ed25519.h" +# include "sodium/crypto_scalarmult_ristretto255.h" +# include "sodium/crypto_secretbox_xchacha20poly1305.h" +# include "sodium/crypto_pwhash_scryptsalsa208sha256.h" +# include "sodium/crypto_stream_salsa2012.h" +# include "sodium/crypto_stream_salsa208.h" +# include "sodium/crypto_stream_xchacha20.h" +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/core.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/core.h new file mode 100644 index 00000000..dd088d2c --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/core.h @@ -0,0 +1,28 @@ + +#ifndef sodium_core_H +#define sodium_core_H + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +int sodium_init(void) + __attribute__ ((warn_unused_result)); + +/* ---- */ + +SODIUM_EXPORT +int sodium_set_misuse_handler(void (*handler)(void)); + +SODIUM_EXPORT +void sodium_misuse(void) + __attribute__ ((noreturn)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_aes256gcm.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_aes256gcm.h new file mode 100644 index 00000000..9baeb3f1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_aes256gcm.h @@ -0,0 +1,179 @@ +#ifndef crypto_aead_aes256gcm_H +#define crypto_aead_aes256gcm_H + +/* + * WARNING: Despite being the most popular AEAD construction due to its + * use in TLS, safely using AES-GCM in a different context is tricky. + * + * No more than ~ 350 GB of input data should be encrypted with a given key. + * This is for ~ 16 KB messages -- Actual figures vary according to + * message sizes. + * + * In addition, nonces are short and repeated nonces would totally destroy + * the security of this scheme. + * + * Nonces should thus come from atomic counters, which can be difficult to + * set up in a distributed environment. + * + * Unless you absolutely need AES-GCM, use crypto_aead_xchacha20poly1305_ietf_*() + * instead. It doesn't have any of these limitations. + * Or, if you don't need to authenticate additional data, just stick to + * crypto_secretbox(). + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +SODIUM_EXPORT +int crypto_aead_aes256gcm_is_available(void); + +#define crypto_aead_aes256gcm_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_keybytes(void); + +#define crypto_aead_aes256gcm_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_nsecbytes(void); + +#define crypto_aead_aes256gcm_NPUBBYTES 12U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_npubbytes(void); + +#define crypto_aead_aes256gcm_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_abytes(void); + +#define crypto_aead_aes256gcm_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_aes256gcm_ABYTES, \ + (16ULL * ((1ULL << 32) - 2ULL))) +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_messagebytes_max(void); + +typedef struct CRYPTO_ALIGN(16) crypto_aead_aes256gcm_state_ { + unsigned char opaque[512]; +} crypto_aead_aes256gcm_state; + +SODIUM_EXPORT +size_t crypto_aead_aes256gcm_statebytes(void); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +/* -- Precomputation interface -- */ + +SODIUM_EXPORT +int crypto_aead_aes256gcm_beforenm(crypto_aead_aes256gcm_state *ctx_, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_afternm(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_afternm(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_encrypt_detached_afternm(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_aes256gcm_decrypt_detached_afternm(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const crypto_aead_aes256gcm_state *ctx_) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_aes256gcm_keygen(unsigned char k[crypto_aead_aes256gcm_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_chacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_chacha20poly1305.h new file mode 100644 index 00000000..5d671df1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_chacha20poly1305.h @@ -0,0 +1,180 @@ +#ifndef crypto_aead_chacha20poly1305_H +#define crypto_aead_chacha20poly1305_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +/* -- IETF ChaCha20-Poly1305 construction with a 96-bit nonce and a 32-bit internal counter -- */ + +#define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_keybytes(void); + +#define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void); + +#define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U + +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_npubbytes(void); + +#define crypto_aead_chacha20poly1305_ietf_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_abytes(void); + +#define crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ietf_ABYTES, \ + (64ULL * ((1ULL << 32) - 1ULL))) +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_ietf_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_chacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_chacha20poly1305_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- Original ChaCha20-Poly1305 construction with a 64-bit nonce and a 64-bit internal counter -- */ + +#define crypto_aead_chacha20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_keybytes(void); + +#define crypto_aead_chacha20poly1305_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_nsecbytes(void); + +#define crypto_aead_chacha20poly1305_NPUBBYTES 8U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_npubbytes(void); + +#define crypto_aead_chacha20poly1305_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_abytes(void); + +#define crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX \ + (SODIUM_SIZE_MAX - crypto_aead_chacha20poly1305_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_chacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_chacha20poly1305_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_chacha20poly1305_keygen(unsigned char k[crypto_aead_chacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_aead_chacha20poly1305_IETF_KEYBYTES crypto_aead_chacha20poly1305_ietf_KEYBYTES +#define crypto_aead_chacha20poly1305_IETF_NSECBYTES crypto_aead_chacha20poly1305_ietf_NSECBYTES +#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES crypto_aead_chacha20poly1305_ietf_NPUBBYTES +#define crypto_aead_chacha20poly1305_IETF_ABYTES crypto_aead_chacha20poly1305_ietf_ABYTES +#define crypto_aead_chacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_xchacha20poly1305.h new file mode 100644 index 00000000..6643b0cb --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_aead_xchacha20poly1305.h @@ -0,0 +1,100 @@ +#ifndef crypto_aead_xchacha20poly1305_H +#define crypto_aead_xchacha20poly1305_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_aead_xchacha20poly1305_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_keybytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_NSECBYTES 0U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_nsecbytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_NPUBBYTES 24U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_npubbytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_ABYTES 16U +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_abytes(void); + +#define crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX \ + (SODIUM_SIZE_MAX - crypto_aead_xchacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_aead_xchacha20poly1305_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_encrypt(unsigned char *c, + unsigned long long *clen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_decrypt(unsigned char *m, + unsigned long long *mlen_p, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(4, 8, 9))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_encrypt_detached(unsigned char *c, + unsigned char *mac, + unsigned long long *maclen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *nsec, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 9, 10))); + +SODIUM_EXPORT +int crypto_aead_xchacha20poly1305_ietf_decrypt_detached(unsigned char *m, + unsigned char *nsec, + const unsigned char *c, + unsigned long long clen, + const unsigned char *mac, + const unsigned char *ad, + unsigned long long adlen, + const unsigned char *npub, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5, 8, 9))); + +SODIUM_EXPORT +void crypto_aead_xchacha20poly1305_ietf_keygen(unsigned char k[crypto_aead_xchacha20poly1305_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_aead_xchacha20poly1305_IETF_KEYBYTES crypto_aead_xchacha20poly1305_ietf_KEYBYTES +#define crypto_aead_xchacha20poly1305_IETF_NSECBYTES crypto_aead_xchacha20poly1305_ietf_NSECBYTES +#define crypto_aead_xchacha20poly1305_IETF_NPUBBYTES crypto_aead_xchacha20poly1305_ietf_NPUBBYTES +#define crypto_aead_xchacha20poly1305_IETF_ABYTES crypto_aead_xchacha20poly1305_ietf_ABYTES +#define crypto_aead_xchacha20poly1305_IETF_MESSAGEBYTES_MAX crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth.h new file mode 100644 index 00000000..540aee0e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth.h @@ -0,0 +1,46 @@ +#ifndef crypto_auth_H +#define crypto_auth_H + +#include + +#include "crypto_auth_hmacsha512256.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_BYTES crypto_auth_hmacsha512256_BYTES +SODIUM_EXPORT +size_t crypto_auth_bytes(void); + +#define crypto_auth_KEYBYTES crypto_auth_hmacsha512256_KEYBYTES +SODIUM_EXPORT +size_t crypto_auth_keybytes(void); + +#define crypto_auth_PRIMITIVE "hmacsha512256" +SODIUM_EXPORT +const char *crypto_auth_primitive(void); + +SODIUM_EXPORT +int crypto_auth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_verify(const unsigned char *h, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +void crypto_auth_keygen(unsigned char k[crypto_auth_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha256.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha256.h new file mode 100644 index 00000000..3da864c7 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha256.h @@ -0,0 +1,70 @@ +#ifndef crypto_auth_hmacsha256_H +#define crypto_auth_hmacsha256_H + +#include +#include "crypto_hash_sha256.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha256_BYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_bytes(void); + +#define crypto_auth_hmacsha256_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha256(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef struct crypto_auth_hmacsha256_state { + crypto_hash_sha256_state ictx; + crypto_hash_sha256_state octx; +} crypto_auth_hmacsha256_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha256_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha256_final(crypto_auth_hmacsha256_state *state, + unsigned char *out) __attribute__ ((nonnull)); + + +SODIUM_EXPORT +void crypto_auth_hmacsha256_keygen(unsigned char k[crypto_auth_hmacsha256_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha512.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha512.h new file mode 100644 index 00000000..d992cb81 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha512.h @@ -0,0 +1,68 @@ +#ifndef crypto_auth_hmacsha512_H +#define crypto_auth_hmacsha512_H + +#include +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha512_BYTES 64U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_bytes(void); + +#define crypto_auth_hmacsha512_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef struct crypto_auth_hmacsha512_state { + crypto_hash_sha512_state ictx; + crypto_hash_sha512_state octx; +} crypto_auth_hmacsha512_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha512_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_update(crypto_auth_hmacsha512_state *state, + const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512_final(crypto_auth_hmacsha512_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_auth_hmacsha512_keygen(unsigned char k[crypto_auth_hmacsha512_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha512256.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha512256.h new file mode 100644 index 00000000..3fb52638 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_auth_hmacsha512256.h @@ -0,0 +1,65 @@ +#ifndef crypto_auth_hmacsha512256_H +#define crypto_auth_hmacsha512256_H + +#include +#include "crypto_auth_hmacsha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_auth_hmacsha512256_BYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_bytes(void); + +#define crypto_auth_hmacsha512256_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_keybytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +/* ------------------------------------------------------------------------- */ + +typedef crypto_auth_hmacsha512_state crypto_auth_hmacsha512256_state; + +SODIUM_EXPORT +size_t crypto_auth_hmacsha512256_statebytes(void); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_init(crypto_auth_hmacsha512256_state *state, + const unsigned char *key, + size_t keylen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_update(crypto_auth_hmacsha512256_state *state, + const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_auth_hmacsha512256_final(crypto_auth_hmacsha512256_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_auth_hmacsha512256_keygen(unsigned char k[crypto_auth_hmacsha512256_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box.h new file mode 100644 index 00000000..e060dd29 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box.h @@ -0,0 +1,177 @@ +#ifndef crypto_box_H +#define crypto_box_H + +/* + * THREAD SAFETY: crypto_box_keypair() is thread-safe, + * provided that sodium_init() was called before. + * + * Other functions are always thread-safe. + */ + +#include + +#include "crypto_box_curve25519xsalsa20poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_SEEDBYTES crypto_box_curve25519xsalsa20poly1305_SEEDBYTES +SODIUM_EXPORT +size_t crypto_box_seedbytes(void); + +#define crypto_box_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES +SODIUM_EXPORT +size_t crypto_box_publickeybytes(void); + +#define crypto_box_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES +SODIUM_EXPORT +size_t crypto_box_secretkeybytes(void); + +#define crypto_box_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_NONCEBYTES +SODIUM_EXPORT +size_t crypto_box_noncebytes(void); + +#define crypto_box_MACBYTES crypto_box_curve25519xsalsa20poly1305_MACBYTES +SODIUM_EXPORT +size_t crypto_box_macbytes(void); + +#define crypto_box_MESSAGEBYTES_MAX crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_box_messagebytes_max(void); + +#define crypto_box_PRIMITIVE "curve25519xsalsa20poly1305" +SODIUM_EXPORT +const char *crypto_box_primitive(void); + +SODIUM_EXPORT +int crypto_box_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_easy(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open_easy(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_detached(unsigned char *c, unsigned char *mac, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 2, 5, 6, 7))); + +SODIUM_EXPORT +int crypto_box_open_detached(unsigned char *m, const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6, 7))); + +/* -- Precomputation interface -- */ + +#define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES +SODIUM_EXPORT +size_t crypto_box_beforenmbytes(void); + +SODIUM_EXPORT +int crypto_box_beforenm(unsigned char *k, const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_easy_afternm(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_box_detached_afternm(unsigned char *c, unsigned char *mac, + const unsigned char *m, unsigned long long mlen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +/* -- Ephemeral SK interface -- */ + +#define crypto_box_SEALBYTES (crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_sealbytes(void); + +SODIUM_EXPORT +int crypto_box_seal(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *pk) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_box_seal_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES +SODIUM_EXPORT +size_t crypto_box_zerobytes(void); + +#define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES +SODIUM_EXPORT +size_t crypto_box_boxzerobytes(void); + +SODIUM_EXPORT +int crypto_box(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *pk, const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_afternm(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_open_afternm(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box_curve25519xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box_curve25519xchacha20poly1305.h new file mode 100644 index 00000000..26a3d31e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box_curve25519xchacha20poly1305.h @@ -0,0 +1,164 @@ + +#ifndef crypto_box_curve25519xchacha20poly1305_H +#define crypto_box_curve25519xchacha20poly1305_H + +#include +#include "crypto_stream_xchacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_curve25519xchacha20poly1305_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_seedbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_publickeybytes(void); + +#define crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_secretkeybytes(void); + +#define crypto_box_curve25519xchacha20poly1305_BEFORENMBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_beforenmbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_noncebytes(void); + +#define crypto_box_curve25519xchacha20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_macbytes(void); + +#define crypto_box_curve25519xchacha20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xchacha20_MESSAGEBYTES_MAX - crypto_box_curve25519xchacha20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seed_keypair(unsigned char *pk, + unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_easy(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_easy(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_detached(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 2, 5, 6, 7))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6, 7))); + +/* -- Precomputation interface -- */ + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_beforenm(unsigned char *k, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_easy_afternm(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_easy_afternm(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_detached_afternm(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_open_detached_afternm(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +/* -- Ephemeral SK interface -- */ + +#define crypto_box_curve25519xchacha20poly1305_SEALBYTES \ + (crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES + \ + crypto_box_curve25519xchacha20poly1305_MACBYTES) + +SODIUM_EXPORT +size_t crypto_box_curve25519xchacha20poly1305_sealbytes(void); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seal(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_box_curve25519xchacha20poly1305_seal_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box_curve25519xsalsa20poly1305.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box_curve25519xsalsa20poly1305.h new file mode 100644 index 00000000..e733f499 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_box_curve25519xsalsa20poly1305.h @@ -0,0 +1,112 @@ +#ifndef crypto_box_curve25519xsalsa20poly1305_H +#define crypto_box_curve25519xsalsa20poly1305_H + +#include +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_box_curve25519xsalsa20poly1305_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_seedbytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_publickeybytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_secretkeybytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES 32U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_beforenmbytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_noncebytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_macbytes(void); + +/* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ +#define crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_box_curve25519xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_seed_keypair(unsigned char *pk, + unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_beforenm(unsigned char *k, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES 16U +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_boxzerobytes(void); + +#define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES \ + (crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES + \ + crypto_box_curve25519xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_box_curve25519xsalsa20poly1305_zerobytes(void); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *pk, + const unsigned char *sk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5, 6))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_afternm(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_box_curve25519xsalsa20poly1305_open_afternm(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_ed25519.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_ed25519.h new file mode 100644 index 00000000..3eae00c4 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_ed25519.h @@ -0,0 +1,100 @@ +#ifndef crypto_core_ed25519_H +#define crypto_core_ed25519_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_ed25519_BYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_bytes(void); + +#define crypto_core_ed25519_UNIFORMBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_uniformbytes(void); + +#define crypto_core_ed25519_HASHBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ed25519_hashbytes(void); + +#define crypto_core_ed25519_SCALARBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ed25519_scalarbytes(void); + +#define crypto_core_ed25519_NONREDUCEDSCALARBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ed25519_nonreducedscalarbytes(void); + +SODIUM_EXPORT +int crypto_core_ed25519_is_valid_point(const unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_add(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_sub(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_from_uniform(unsigned char *p, const unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_from_hash(unsigned char *p, const unsigned char *h) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_random(unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_random(unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ed25519_scalar_invert(unsigned char *recip, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_negate(unsigned char *neg, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_complement(unsigned char *comp, const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_add(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_sub(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ed25519_scalar_mul(unsigned char *z, const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +/* + * The interval `s` is sampled from should be at least 317 bits to ensure almost + * uniformity of `r` over `L`. + */ +SODIUM_EXPORT +void crypto_core_ed25519_scalar_reduce(unsigned char *r, const unsigned char *s) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_hchacha20.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_hchacha20.h new file mode 100644 index 00000000..ece141b0 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_hchacha20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_hchacha20_H +#define crypto_core_hchacha20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_hchacha20_OUTPUTBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hchacha20_outputbytes(void); + +#define crypto_core_hchacha20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hchacha20_inputbytes(void); + +#define crypto_core_hchacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hchacha20_keybytes(void); + +#define crypto_core_hchacha20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hchacha20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_hchacha20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_hsalsa20.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_hsalsa20.h new file mode 100644 index 00000000..4bf7a487 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_hsalsa20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_hsalsa20_H +#define crypto_core_hsalsa20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_hsalsa20_OUTPUTBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_outputbytes(void); + +#define crypto_core_hsalsa20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_inputbytes(void); + +#define crypto_core_hsalsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_keybytes(void); + +#define crypto_core_hsalsa20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_hsalsa20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_hsalsa20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_ristretto255.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_ristretto255.h new file mode 100644 index 00000000..f2820e55 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_ristretto255.h @@ -0,0 +1,100 @@ +#ifndef crypto_core_ristretto255_H +#define crypto_core_ristretto255_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_ristretto255_BYTES 32 +SODIUM_EXPORT +size_t crypto_core_ristretto255_bytes(void); + +#define crypto_core_ristretto255_HASHBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ristretto255_hashbytes(void); + +#define crypto_core_ristretto255_SCALARBYTES 32 +SODIUM_EXPORT +size_t crypto_core_ristretto255_scalarbytes(void); + +#define crypto_core_ristretto255_NONREDUCEDSCALARBYTES 64 +SODIUM_EXPORT +size_t crypto_core_ristretto255_nonreducedscalarbytes(void); + +SODIUM_EXPORT +int crypto_core_ristretto255_is_valid_point(const unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_add(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_sub(unsigned char *r, + const unsigned char *p, const unsigned char *q) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_from_hash(unsigned char *p, + const unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_random(unsigned char *p) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_random(unsigned char *r) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_core_ristretto255_scalar_invert(unsigned char *recip, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_negate(unsigned char *neg, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_complement(unsigned char *comp, + const unsigned char *s) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_add(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_sub(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_mul(unsigned char *z, + const unsigned char *x, + const unsigned char *y) + __attribute__ ((nonnull)); + +/* + * The interval `s` is sampled from should be at least 317 bits to ensure almost + * uniformity of `r` over `L`. + */ +SODIUM_EXPORT +void crypto_core_ristretto255_scalar_reduce(unsigned char *r, + const unsigned char *s) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa20.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa20.h new file mode 100644 index 00000000..bd79fd9f --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa20.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_salsa20_H +#define crypto_core_salsa20_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa20_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa20_outputbytes(void); + +#define crypto_core_salsa20_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa20_inputbytes(void); + +#define crypto_core_salsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa20_keybytes(void); + +#define crypto_core_salsa20_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa20_constbytes(void); + +SODIUM_EXPORT +int crypto_core_salsa20(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa2012.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa2012.h new file mode 100644 index 00000000..05957591 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa2012.h @@ -0,0 +1,36 @@ +#ifndef crypto_core_salsa2012_H +#define crypto_core_salsa2012_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa2012_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa2012_outputbytes(void); + +#define crypto_core_salsa2012_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa2012_inputbytes(void); + +#define crypto_core_salsa2012_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa2012_keybytes(void); + +#define crypto_core_salsa2012_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa2012_constbytes(void); + +SODIUM_EXPORT +int crypto_core_salsa2012(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa208.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa208.h new file mode 100644 index 00000000..d2f216af --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_core_salsa208.h @@ -0,0 +1,40 @@ +#ifndef crypto_core_salsa208_H +#define crypto_core_salsa208_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_core_salsa208_OUTPUTBYTES 64U +SODIUM_EXPORT +size_t crypto_core_salsa208_outputbytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_INPUTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa208_inputbytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_core_salsa208_keybytes(void) + __attribute__ ((deprecated)); + +#define crypto_core_salsa208_CONSTBYTES 16U +SODIUM_EXPORT +size_t crypto_core_salsa208_constbytes(void) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_core_salsa208(unsigned char *out, const unsigned char *in, + const unsigned char *k, const unsigned char *c) + __attribute__ ((nonnull(1, 2, 3))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_generichash.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_generichash.h new file mode 100644 index 00000000..d897e5d2 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_generichash.h @@ -0,0 +1,84 @@ +#ifndef crypto_generichash_H +#define crypto_generichash_H + +#include + +#include "crypto_generichash_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_generichash_BYTES_MIN crypto_generichash_blake2b_BYTES_MIN +SODIUM_EXPORT +size_t crypto_generichash_bytes_min(void); + +#define crypto_generichash_BYTES_MAX crypto_generichash_blake2b_BYTES_MAX +SODIUM_EXPORT +size_t crypto_generichash_bytes_max(void); + +#define crypto_generichash_BYTES crypto_generichash_blake2b_BYTES +SODIUM_EXPORT +size_t crypto_generichash_bytes(void); + +#define crypto_generichash_KEYBYTES_MIN crypto_generichash_blake2b_KEYBYTES_MIN +SODIUM_EXPORT +size_t crypto_generichash_keybytes_min(void); + +#define crypto_generichash_KEYBYTES_MAX crypto_generichash_blake2b_KEYBYTES_MAX +SODIUM_EXPORT +size_t crypto_generichash_keybytes_max(void); + +#define crypto_generichash_KEYBYTES crypto_generichash_blake2b_KEYBYTES +SODIUM_EXPORT +size_t crypto_generichash_keybytes(void); + +#define crypto_generichash_PRIMITIVE "blake2b" +SODIUM_EXPORT +const char *crypto_generichash_primitive(void); + +/* + * Important when writing bindings for other programming languages: + * the state address should be 64-bytes aligned. + */ +typedef crypto_generichash_blake2b_state crypto_generichash_state; + +SODIUM_EXPORT +size_t crypto_generichash_statebytes(void); + +SODIUM_EXPORT +int crypto_generichash(unsigned char *out, size_t outlen, + const unsigned char *in, unsigned long long inlen, + const unsigned char *key, size_t keylen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_init(crypto_generichash_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_update(crypto_generichash_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_final(crypto_generichash_state *state, + unsigned char *out, const size_t outlen) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_generichash_keygen(unsigned char k[crypto_generichash_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_generichash_blake2b.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_generichash_blake2b.h new file mode 100644 index 00000000..fee9d8ad --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_generichash_blake2b.h @@ -0,0 +1,118 @@ +#ifndef crypto_generichash_blake2b_H +#define crypto_generichash_blake2b_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# pragma pack(1) +#else +# pragma pack(push, 1) +#endif + +typedef struct CRYPTO_ALIGN(64) crypto_generichash_blake2b_state { + unsigned char opaque[384]; +} crypto_generichash_blake2b_state; + +#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# pragma pack() +#else +# pragma pack(pop) +#endif + +#define crypto_generichash_blake2b_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes_min(void); + +#define crypto_generichash_blake2b_BYTES_MAX 64U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes_max(void); + +#define crypto_generichash_blake2b_BYTES 32U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_bytes(void); + +#define crypto_generichash_blake2b_KEYBYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes_min(void); + +#define crypto_generichash_blake2b_KEYBYTES_MAX 64U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes_max(void); + +#define crypto_generichash_blake2b_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_keybytes(void); + +#define crypto_generichash_blake2b_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_saltbytes(void); + +#define crypto_generichash_blake2b_PERSONALBYTES 16U +SODIUM_EXPORT +size_t crypto_generichash_blake2b_personalbytes(void); + +SODIUM_EXPORT +size_t crypto_generichash_blake2b_statebytes(void); + +SODIUM_EXPORT +int crypto_generichash_blake2b(unsigned char *out, size_t outlen, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *key, size_t keylen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *key, + size_t keylen, + const unsigned char *salt, + const unsigned char *personal) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_init_salt_personal(crypto_generichash_blake2b_state *state, + const unsigned char *key, + const size_t keylen, const size_t outlen, + const unsigned char *salt, + const unsigned char *personal) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_update(crypto_generichash_blake2b_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_generichash_blake2b_final(crypto_generichash_blake2b_state *state, + unsigned char *out, + const size_t outlen) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_generichash_blake2b_keygen(unsigned char k[crypto_generichash_blake2b_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash.h new file mode 100644 index 00000000..8752f9ca --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash.h @@ -0,0 +1,40 @@ +#ifndef crypto_hash_H +#define crypto_hash_H + +/* + * WARNING: Unless you absolutely need to use SHA512 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA512, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include + +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_hash_BYTES crypto_hash_sha512_BYTES +SODIUM_EXPORT +size_t crypto_hash_bytes(void); + +SODIUM_EXPORT +int crypto_hash(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +#define crypto_hash_PRIMITIVE "sha512" +SODIUM_EXPORT +const char *crypto_hash_primitive(void) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash_sha256.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash_sha256.h new file mode 100644 index 00000000..b18217e1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash_sha256.h @@ -0,0 +1,60 @@ +#ifndef crypto_hash_sha256_H +#define crypto_hash_sha256_H + +/* + * WARNING: Unless you absolutely need to use SHA256 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA256, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_hash_sha256_state { + uint32_t state[8]; + uint64_t count; + uint8_t buf[64]; +} crypto_hash_sha256_state; + +SODIUM_EXPORT +size_t crypto_hash_sha256_statebytes(void); + +#define crypto_hash_sha256_BYTES 32U +SODIUM_EXPORT +size_t crypto_hash_sha256_bytes(void); + +SODIUM_EXPORT +int crypto_hash_sha256(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha256_init(crypto_hash_sha256_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_hash_sha256_update(crypto_hash_sha256_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha256_final(crypto_hash_sha256_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash_sha512.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash_sha512.h new file mode 100644 index 00000000..8efa7193 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_hash_sha512.h @@ -0,0 +1,60 @@ +#ifndef crypto_hash_sha512_H +#define crypto_hash_sha512_H + +/* + * WARNING: Unless you absolutely need to use SHA512 for interoperatibility, + * purposes, you might want to consider crypto_generichash() instead. + * Unlike SHA512, crypto_generichash() is not vulnerable to length + * extension attacks. + */ + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_hash_sha512_state { + uint64_t state[8]; + uint64_t count[2]; + uint8_t buf[128]; +} crypto_hash_sha512_state; + +SODIUM_EXPORT +size_t crypto_hash_sha512_statebytes(void); + +#define crypto_hash_sha512_BYTES 64U +SODIUM_EXPORT +size_t crypto_hash_sha512_bytes(void); + +SODIUM_EXPORT +int crypto_hash_sha512(unsigned char *out, const unsigned char *in, + unsigned long long inlen) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha512_init(crypto_hash_sha512_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_hash_sha512_update(crypto_hash_sha512_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_hash_sha512_final(crypto_hash_sha512_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kdf.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kdf.h new file mode 100644 index 00000000..ac2fc618 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kdf.h @@ -0,0 +1,53 @@ +#ifndef crypto_kdf_H +#define crypto_kdf_H + +#include +#include + +#include "crypto_kdf_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kdf_BYTES_MIN crypto_kdf_blake2b_BYTES_MIN +SODIUM_EXPORT +size_t crypto_kdf_bytes_min(void); + +#define crypto_kdf_BYTES_MAX crypto_kdf_blake2b_BYTES_MAX +SODIUM_EXPORT +size_t crypto_kdf_bytes_max(void); + +#define crypto_kdf_CONTEXTBYTES crypto_kdf_blake2b_CONTEXTBYTES +SODIUM_EXPORT +size_t crypto_kdf_contextbytes(void); + +#define crypto_kdf_KEYBYTES crypto_kdf_blake2b_KEYBYTES +SODIUM_EXPORT +size_t crypto_kdf_keybytes(void); + +#define crypto_kdf_PRIMITIVE "blake2b" +SODIUM_EXPORT +const char *crypto_kdf_primitive(void) + __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int crypto_kdf_derive_from_key(unsigned char *subkey, size_t subkey_len, + uint64_t subkey_id, + const char ctx[crypto_kdf_CONTEXTBYTES], + const unsigned char key[crypto_kdf_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_kdf_keygen(unsigned char k[crypto_kdf_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kdf_blake2b.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kdf_blake2b.h new file mode 100644 index 00000000..3ae47dd3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kdf_blake2b.h @@ -0,0 +1,44 @@ +#ifndef crypto_kdf_blake2b_H +#define crypto_kdf_blake2b_H + +#include +#include + +#include "crypto_kdf_blake2b.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kdf_blake2b_BYTES_MIN 16 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_bytes_min(void); + +#define crypto_kdf_blake2b_BYTES_MAX 64 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_bytes_max(void); + +#define crypto_kdf_blake2b_CONTEXTBYTES 8 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_contextbytes(void); + +#define crypto_kdf_blake2b_KEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kdf_blake2b_keybytes(void); + +SODIUM_EXPORT +int crypto_kdf_blake2b_derive_from_key(unsigned char *subkey, size_t subkey_len, + uint64_t subkey_id, + const char ctx[crypto_kdf_blake2b_CONTEXTBYTES], + const unsigned char key[crypto_kdf_blake2b_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kx.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kx.h new file mode 100644 index 00000000..347132c3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_kx.h @@ -0,0 +1,66 @@ +#ifndef crypto_kx_H +#define crypto_kx_H + +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_kx_PUBLICKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_publickeybytes(void); + +#define crypto_kx_SECRETKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_secretkeybytes(void); + +#define crypto_kx_SEEDBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_seedbytes(void); + +#define crypto_kx_SESSIONKEYBYTES 32 +SODIUM_EXPORT +size_t crypto_kx_sessionkeybytes(void); + +#define crypto_kx_PRIMITIVE "x25519blake2b" +SODIUM_EXPORT +const char *crypto_kx_primitive(void); + +SODIUM_EXPORT +int crypto_kx_seed_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], + unsigned char sk[crypto_kx_SECRETKEYBYTES], + const unsigned char seed[crypto_kx_SEEDBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_kx_keypair(unsigned char pk[crypto_kx_PUBLICKEYBYTES], + unsigned char sk[crypto_kx_SECRETKEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_kx_client_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], + unsigned char tx[crypto_kx_SESSIONKEYBYTES], + const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES], + const unsigned char client_sk[crypto_kx_SECRETKEYBYTES], + const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES]) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 4, 5))); + +SODIUM_EXPORT +int crypto_kx_server_session_keys(unsigned char rx[crypto_kx_SESSIONKEYBYTES], + unsigned char tx[crypto_kx_SESSIONKEYBYTES], + const unsigned char server_pk[crypto_kx_PUBLICKEYBYTES], + const unsigned char server_sk[crypto_kx_SECRETKEYBYTES], + const unsigned char client_pk[crypto_kx_PUBLICKEYBYTES]) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_onetimeauth.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_onetimeauth.h new file mode 100644 index 00000000..7cd7b070 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_onetimeauth.h @@ -0,0 +1,65 @@ +#ifndef crypto_onetimeauth_H +#define crypto_onetimeauth_H + +#include + +#include "crypto_onetimeauth_poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef crypto_onetimeauth_poly1305_state crypto_onetimeauth_state; + +SODIUM_EXPORT +size_t crypto_onetimeauth_statebytes(void); + +#define crypto_onetimeauth_BYTES crypto_onetimeauth_poly1305_BYTES +SODIUM_EXPORT +size_t crypto_onetimeauth_bytes(void); + +#define crypto_onetimeauth_KEYBYTES crypto_onetimeauth_poly1305_KEYBYTES +SODIUM_EXPORT +size_t crypto_onetimeauth_keybytes(void); + +#define crypto_onetimeauth_PRIMITIVE "poly1305" +SODIUM_EXPORT +const char *crypto_onetimeauth_primitive(void); + +SODIUM_EXPORT +int crypto_onetimeauth(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_verify(const unsigned char *h, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_init(crypto_onetimeauth_state *state, + const unsigned char *key) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_onetimeauth_update(crypto_onetimeauth_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_onetimeauth_final(crypto_onetimeauth_state *state, + unsigned char *out) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_onetimeauth_keygen(unsigned char k[crypto_onetimeauth_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_onetimeauth_poly1305.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_onetimeauth_poly1305.h new file mode 100644 index 00000000..f3e34d86 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_onetimeauth_poly1305.h @@ -0,0 +1,72 @@ +#ifndef crypto_onetimeauth_poly1305_H +#define crypto_onetimeauth_poly1305_H + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#include +#include +#include + +#include + +#include "export.h" + +typedef struct CRYPTO_ALIGN(16) crypto_onetimeauth_poly1305_state { + unsigned char opaque[256]; +} crypto_onetimeauth_poly1305_state; + +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_statebytes(void); + +#define crypto_onetimeauth_poly1305_BYTES 16U +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_bytes(void); + +#define crypto_onetimeauth_poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_onetimeauth_poly1305_keybytes(void); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305(unsigned char *out, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_verify(const unsigned char *h, + const unsigned char *in, + unsigned long long inlen, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_init(crypto_onetimeauth_poly1305_state *state, + const unsigned char *key) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_update(crypto_onetimeauth_poly1305_state *state, + const unsigned char *in, + unsigned long long inlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_onetimeauth_poly1305_final(crypto_onetimeauth_poly1305_state *state, + unsigned char *out) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_onetimeauth_poly1305_keygen(unsigned char k[crypto_onetimeauth_poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash.h new file mode 100644 index 00000000..585a993e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash.h @@ -0,0 +1,147 @@ +#ifndef crypto_pwhash_H +#define crypto_pwhash_H + +#include + +#include "crypto_pwhash_argon2i.h" +#include "crypto_pwhash_argon2id.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_ALG_ARGON2I13 crypto_pwhash_argon2i_ALG_ARGON2I13 +SODIUM_EXPORT +int crypto_pwhash_alg_argon2i13(void); + +#define crypto_pwhash_ALG_ARGON2ID13 crypto_pwhash_argon2id_ALG_ARGON2ID13 +SODIUM_EXPORT +int crypto_pwhash_alg_argon2id13(void); + +#define crypto_pwhash_ALG_DEFAULT crypto_pwhash_ALG_ARGON2ID13 +SODIUM_EXPORT +int crypto_pwhash_alg_default(void); + +#define crypto_pwhash_BYTES_MIN crypto_pwhash_argon2id_BYTES_MIN +SODIUM_EXPORT +size_t crypto_pwhash_bytes_min(void); + +#define crypto_pwhash_BYTES_MAX crypto_pwhash_argon2id_BYTES_MAX +SODIUM_EXPORT +size_t crypto_pwhash_bytes_max(void); + +#define crypto_pwhash_PASSWD_MIN crypto_pwhash_argon2id_PASSWD_MIN +SODIUM_EXPORT +size_t crypto_pwhash_passwd_min(void); + +#define crypto_pwhash_PASSWD_MAX crypto_pwhash_argon2id_PASSWD_MAX +SODIUM_EXPORT +size_t crypto_pwhash_passwd_max(void); + +#define crypto_pwhash_SALTBYTES crypto_pwhash_argon2id_SALTBYTES +SODIUM_EXPORT +size_t crypto_pwhash_saltbytes(void); + +#define crypto_pwhash_STRBYTES crypto_pwhash_argon2id_STRBYTES +SODIUM_EXPORT +size_t crypto_pwhash_strbytes(void); + +#define crypto_pwhash_STRPREFIX crypto_pwhash_argon2id_STRPREFIX +SODIUM_EXPORT +const char *crypto_pwhash_strprefix(void); + +#define crypto_pwhash_OPSLIMIT_MIN crypto_pwhash_argon2id_OPSLIMIT_MIN +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_min(void); + +#define crypto_pwhash_OPSLIMIT_MAX crypto_pwhash_argon2id_OPSLIMIT_MAX +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_max(void); + +#define crypto_pwhash_MEMLIMIT_MIN crypto_pwhash_argon2id_MEMLIMIT_MIN +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_min(void); + +#define crypto_pwhash_MEMLIMIT_MAX crypto_pwhash_argon2id_MEMLIMIT_MAX +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_max(void); + +#define crypto_pwhash_OPSLIMIT_INTERACTIVE crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_interactive(void); + +#define crypto_pwhash_MEMLIMIT_INTERACTIVE crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_interactive(void); + +#define crypto_pwhash_OPSLIMIT_MODERATE crypto_pwhash_argon2id_OPSLIMIT_MODERATE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_moderate(void); + +#define crypto_pwhash_MEMLIMIT_MODERATE crypto_pwhash_argon2id_MEMLIMIT_MODERATE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_moderate(void); + +#define crypto_pwhash_OPSLIMIT_SENSITIVE crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE +SODIUM_EXPORT +size_t crypto_pwhash_opslimit_sensitive(void); + +#define crypto_pwhash_MEMLIMIT_SENSITIVE crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE +SODIUM_EXPORT +size_t crypto_pwhash_memlimit_sensitive(void); + +/* + * With this function, do not forget to store all parameters, including the + * algorithm identifier in order to produce deterministic output. + * The crypto_pwhash_* definitions, including crypto_pwhash_ALG_DEFAULT, + * may change. + */ +SODIUM_EXPORT +int crypto_pwhash(unsigned char * const out, unsigned long long outlen, + const char * const passwd, unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +/* + * The output string already includes all the required parameters, including + * the algorithm identifier. The string is all that has to be stored in + * order to verify a password. + */ +SODIUM_EXPORT +int crypto_pwhash_str(char out[crypto_pwhash_STRBYTES], + const char * const passwd, unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_alg(char out[crypto_pwhash_STRBYTES], + const char * const passwd, unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit, int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_str_needs_rehash(const char str[crypto_pwhash_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#define crypto_pwhash_PRIMITIVE "argon2i" +SODIUM_EXPORT +const char *crypto_pwhash_primitive(void) + __attribute__ ((warn_unused_result)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_argon2i.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_argon2i.h new file mode 100644 index 00000000..88ff6221 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_argon2i.h @@ -0,0 +1,122 @@ +#ifndef crypto_pwhash_argon2i_H +#define crypto_pwhash_argon2i_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_argon2i_ALG_ARGON2I13 1 +SODIUM_EXPORT +int crypto_pwhash_argon2i_alg_argon2i13(void); + +#define crypto_pwhash_argon2i_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_bytes_min(void); + +#define crypto_pwhash_argon2i_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_bytes_max(void); + +#define crypto_pwhash_argon2i_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_passwd_min(void); + +#define crypto_pwhash_argon2i_PASSWD_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_passwd_max(void); + +#define crypto_pwhash_argon2i_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_saltbytes(void); + +#define crypto_pwhash_argon2i_STRBYTES 128U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_strbytes(void); + +#define crypto_pwhash_argon2i_STRPREFIX "$argon2i$" +SODIUM_EXPORT +const char *crypto_pwhash_argon2i_strprefix(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MIN 3U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_min(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_max(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MIN 8192U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_min(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MAX \ + ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_max(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE 4U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_interactive(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE 33554432U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_interactive(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_MODERATE 6U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_moderate(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_MODERATE 134217728U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_moderate(void); + +#define crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE 8U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_opslimit_sensitive(void); + +#define crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE 536870912U +SODIUM_EXPORT +size_t crypto_pwhash_argon2i_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_argon2i(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, + int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str(char out[crypto_pwhash_argon2i_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str_verify(const char str[crypto_pwhash_argon2i_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2i_str_needs_rehash(const char str[crypto_pwhash_argon2i_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_argon2id.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_argon2id.h new file mode 100644 index 00000000..7183abd1 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_argon2id.h @@ -0,0 +1,122 @@ +#ifndef crypto_pwhash_argon2id_H +#define crypto_pwhash_argon2id_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_argon2id_ALG_ARGON2ID13 2 +SODIUM_EXPORT +int crypto_pwhash_argon2id_alg_argon2id13(void); + +#define crypto_pwhash_argon2id_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_bytes_min(void); + +#define crypto_pwhash_argon2id_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 4294967295U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_bytes_max(void); + +#define crypto_pwhash_argon2id_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_passwd_min(void); + +#define crypto_pwhash_argon2id_PASSWD_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_passwd_max(void); + +#define crypto_pwhash_argon2id_SALTBYTES 16U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_saltbytes(void); + +#define crypto_pwhash_argon2id_STRBYTES 128U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_strbytes(void); + +#define crypto_pwhash_argon2id_STRPREFIX "$argon2id$" +SODIUM_EXPORT +const char *crypto_pwhash_argon2id_strprefix(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MIN 1U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_min(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_max(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MIN 8192U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_min(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MAX \ + ((SIZE_MAX >= 4398046510080U) ? 4398046510080U : (SIZE_MAX >= 2147483648U) ? 2147483648U : 32768U) +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_max(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_INTERACTIVE 2U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_interactive(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_INTERACTIVE 67108864U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_interactive(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_MODERATE 3U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_moderate(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_MODERATE 268435456U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_moderate(void); + +#define crypto_pwhash_argon2id_OPSLIMIT_SENSITIVE 4U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_opslimit_sensitive(void); + +#define crypto_pwhash_argon2id_MEMLIMIT_SENSITIVE 1073741824U +SODIUM_EXPORT +size_t crypto_pwhash_argon2id_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_argon2id(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, size_t memlimit, + int alg) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str(char out[crypto_pwhash_argon2id_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str_verify(const char str[crypto_pwhash_argon2id_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_argon2id_str_needs_rehash(const char str[crypto_pwhash_argon2id_STRBYTES], + unsigned long long opslimit, size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_scryptsalsa208sha256.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_scryptsalsa208sha256.h new file mode 100644 index 00000000..5c0bf7d3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_pwhash_scryptsalsa208sha256.h @@ -0,0 +1,120 @@ +#ifndef crypto_pwhash_scryptsalsa208sha256_H +#define crypto_pwhash_scryptsalsa208sha256_H + +#include +#include +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_pwhash_scryptsalsa208sha256_BYTES_MIN 16U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_bytes_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_BYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, 0x1fffffffe0ULL) +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_bytes_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_PASSWD_MIN 0U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_passwd_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_PASSWD_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_passwd_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_SALTBYTES 32U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_saltbytes(void); + +#define crypto_pwhash_scryptsalsa208sha256_STRBYTES 102U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_strbytes(void); + +#define crypto_pwhash_scryptsalsa208sha256_STRPREFIX "$7$" +SODIUM_EXPORT +const char *crypto_pwhash_scryptsalsa208sha256_strprefix(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MIN 32768U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_MAX 4294967295U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MIN 16777216U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_min(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_MAX \ + SODIUM_MIN(SIZE_MAX, 68719476736ULL) +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_max(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE 524288U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_interactive(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE 16777216U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_interactive(void); + +#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE 33554432U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive(void); + +#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE 1073741824U +SODIUM_EXPORT +size_t crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive(void); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256(unsigned char * const out, + unsigned long long outlen, + const char * const passwd, + unsigned long long passwdlen, + const unsigned char * const salt, + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str(char out[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + const char * const passwd, + unsigned long long passwdlen, + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str_verify(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + const char * const passwd, + unsigned long long passwdlen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_ll(const uint8_t * passwd, size_t passwdlen, + const uint8_t * salt, size_t saltlen, + uint64_t N, uint32_t r, uint32_t p, + uint8_t * buf, size_t buflen) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_pwhash_scryptsalsa208sha256_str_needs_rehash(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES], + unsigned long long opslimit, + size_t memlimit) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult.h new file mode 100644 index 00000000..1c685853 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult.h @@ -0,0 +1,46 @@ +#ifndef crypto_scalarmult_H +#define crypto_scalarmult_H + +#include + +#include "crypto_scalarmult_curve25519.h" +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_BYTES crypto_scalarmult_curve25519_BYTES +SODIUM_EXPORT +size_t crypto_scalarmult_bytes(void); + +#define crypto_scalarmult_SCALARBYTES crypto_scalarmult_curve25519_SCALARBYTES +SODIUM_EXPORT +size_t crypto_scalarmult_scalarbytes(void); + +#define crypto_scalarmult_PRIMITIVE "curve25519" +SODIUM_EXPORT +const char *crypto_scalarmult_primitive(void); + +SODIUM_EXPORT +int crypto_scalarmult_base(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_curve25519.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_curve25519.h new file mode 100644 index 00000000..60e9d0c5 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_curve25519.h @@ -0,0 +1,42 @@ +#ifndef crypto_scalarmult_curve25519_H +#define crypto_scalarmult_curve25519_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_curve25519_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_curve25519_bytes(void); + +#define crypto_scalarmult_curve25519_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_curve25519_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_curve25519_base(unsigned char *q, + const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_ed25519.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_ed25519.h new file mode 100644 index 00000000..2dfa4d70 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_ed25519.h @@ -0,0 +1,51 @@ + +#ifndef crypto_scalarmult_ed25519_H +#define crypto_scalarmult_ed25519_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_ed25519_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ed25519_bytes(void); + +#define crypto_scalarmult_ed25519_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ed25519_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_ed25519(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_noclamp(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_base(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ed25519_base_noclamp(unsigned char *q, const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_ristretto255.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_ristretto255.h new file mode 100644 index 00000000..40a45cce --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_scalarmult_ristretto255.h @@ -0,0 +1,43 @@ + +#ifndef crypto_scalarmult_ristretto255_H +#define crypto_scalarmult_ristretto255_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_scalarmult_ristretto255_BYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ristretto255_bytes(void); + +#define crypto_scalarmult_ristretto255_SCALARBYTES 32U +SODIUM_EXPORT +size_t crypto_scalarmult_ristretto255_scalarbytes(void); + +/* + * NOTE: Do not use the result of this function directly for key exchange. + * + * Hash the result with the public keys in order to compute a shared + * secret key: H(q || client_pk || server_pk) + * + * Or unless this is not an option, use the crypto_kx() API instead. + */ +SODIUM_EXPORT +int crypto_scalarmult_ristretto255(unsigned char *q, const unsigned char *n, + const unsigned char *p) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_scalarmult_ristretto255_base(unsigned char *q, + const unsigned char *n) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox.h new file mode 100644 index 00000000..1d3709db --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox.h @@ -0,0 +1,93 @@ +#ifndef crypto_secretbox_H +#define crypto_secretbox_H + +#include + +#include "crypto_secretbox_xsalsa20poly1305.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_KEYBYTES crypto_secretbox_xsalsa20poly1305_KEYBYTES +SODIUM_EXPORT +size_t crypto_secretbox_keybytes(void); + +#define crypto_secretbox_NONCEBYTES crypto_secretbox_xsalsa20poly1305_NONCEBYTES +SODIUM_EXPORT +size_t crypto_secretbox_noncebytes(void); + +#define crypto_secretbox_MACBYTES crypto_secretbox_xsalsa20poly1305_MACBYTES +SODIUM_EXPORT +size_t crypto_secretbox_macbytes(void); + +#define crypto_secretbox_PRIMITIVE "xsalsa20poly1305" +SODIUM_EXPORT +const char *crypto_secretbox_primitive(void); + +#define crypto_secretbox_MESSAGEBYTES_MAX crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_secretbox_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_easy(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_open_easy(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_detached(unsigned char *c, unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_secretbox_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +SODIUM_EXPORT +void crypto_secretbox_keygen(unsigned char k[crypto_secretbox_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_secretbox_ZEROBYTES crypto_secretbox_xsalsa20poly1305_ZEROBYTES +SODIUM_EXPORT +size_t crypto_secretbox_zerobytes(void); + +#define crypto_secretbox_BOXZEROBYTES crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES +SODIUM_EXPORT +size_t crypto_secretbox_boxzerobytes(void); + +SODIUM_EXPORT +int crypto_secretbox(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_open(unsigned char *m, const unsigned char *c, + unsigned long long clen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox_xchacha20poly1305.h new file mode 100644 index 00000000..6ec674e3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox_xchacha20poly1305.h @@ -0,0 +1,70 @@ +#ifndef crypto_secretbox_xchacha20poly1305_H +#define crypto_secretbox_xchacha20poly1305_H + +#include +#include "crypto_stream_xchacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_xchacha20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_keybytes(void); + +#define crypto_secretbox_xchacha20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_noncebytes(void); + +#define crypto_secretbox_xchacha20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_macbytes(void); + +#define crypto_secretbox_xchacha20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xchacha20_MESSAGEBYTES_MAX - crypto_secretbox_xchacha20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xchacha20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_easy(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_open_easy(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_detached(unsigned char *c, + unsigned char *mac, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 2, 5, 6))); + +SODIUM_EXPORT +int crypto_secretbox_xchacha20poly1305_open_detached(unsigned char *m, + const unsigned char *c, + const unsigned char *mac, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 3, 5, 6))); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox_xsalsa20poly1305.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox_xsalsa20poly1305.h new file mode 100644 index 00000000..be0874cb --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretbox_xsalsa20poly1305.h @@ -0,0 +1,69 @@ +#ifndef crypto_secretbox_xsalsa20poly1305_H +#define crypto_secretbox_xsalsa20poly1305_H + +#include +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretbox_xsalsa20poly1305_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_keybytes(void); + +#define crypto_secretbox_xsalsa20poly1305_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_noncebytes(void); + +#define crypto_secretbox_xsalsa20poly1305_MACBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_macbytes(void); + +/* Only for the libsodium API - The NaCl compatibility API would require BOXZEROBYTES extra bytes */ +#define crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX \ + (crypto_stream_xsalsa20_MESSAGEBYTES_MAX - crypto_secretbox_xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_secretbox_xsalsa20poly1305(unsigned char *c, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull(1, 4, 5))); + +SODIUM_EXPORT +int crypto_secretbox_xsalsa20poly1305_open(unsigned char *m, + const unsigned char *c, + unsigned long long clen, + const unsigned char *n, + const unsigned char *k) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(2, 4, 5))); + +SODIUM_EXPORT +void crypto_secretbox_xsalsa20poly1305_keygen(unsigned char k[crypto_secretbox_xsalsa20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +/* -- NaCl compatibility interface ; Requires padding -- */ + +#define crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES 16U +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_boxzerobytes(void); + +#define crypto_secretbox_xsalsa20poly1305_ZEROBYTES \ + (crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES + \ + crypto_secretbox_xsalsa20poly1305_MACBYTES) +SODIUM_EXPORT +size_t crypto_secretbox_xsalsa20poly1305_zerobytes(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretstream_xchacha20poly1305.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretstream_xchacha20poly1305.h new file mode 100644 index 00000000..b22e4e93 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_secretstream_xchacha20poly1305.h @@ -0,0 +1,108 @@ +#ifndef crypto_secretstream_xchacha20poly1305_H +#define crypto_secretstream_xchacha20poly1305_H + +#include + +#include "crypto_aead_xchacha20poly1305.h" +#include "crypto_stream_chacha20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_secretstream_xchacha20poly1305_ABYTES \ + (1U + crypto_aead_xchacha20poly1305_ietf_ABYTES) +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_abytes(void); + +#define crypto_secretstream_xchacha20poly1305_HEADERBYTES \ + crypto_aead_xchacha20poly1305_ietf_NPUBBYTES +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_headerbytes(void); + +#define crypto_secretstream_xchacha20poly1305_KEYBYTES \ + crypto_aead_xchacha20poly1305_ietf_KEYBYTES +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_keybytes(void); + +#define crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX - crypto_secretstream_xchacha20poly1305_ABYTES, \ + (64ULL * ((1ULL << 32) - 2ULL))) +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_messagebytes_max(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_MESSAGE 0x00 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_message(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_PUSH 0x01 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_push(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_REKEY 0x02 +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_rekey(void); + +#define crypto_secretstream_xchacha20poly1305_TAG_FINAL \ + (crypto_secretstream_xchacha20poly1305_TAG_PUSH | \ + crypto_secretstream_xchacha20poly1305_TAG_REKEY) +SODIUM_EXPORT +unsigned char crypto_secretstream_xchacha20poly1305_tag_final(void); + +typedef struct crypto_secretstream_xchacha20poly1305_state { + unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]; + unsigned char nonce[crypto_stream_chacha20_ietf_NONCEBYTES]; + unsigned char _pad[8]; +} crypto_secretstream_xchacha20poly1305_state; + +SODIUM_EXPORT +size_t crypto_secretstream_xchacha20poly1305_statebytes(void); + +SODIUM_EXPORT +void crypto_secretstream_xchacha20poly1305_keygen + (unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_init_push + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES], + const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_push + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char *c, unsigned long long *clen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *ad, unsigned long long adlen, unsigned char tag) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_init_pull + (crypto_secretstream_xchacha20poly1305_state *state, + const unsigned char header[crypto_secretstream_xchacha20poly1305_HEADERBYTES], + const unsigned char k[crypto_secretstream_xchacha20poly1305_KEYBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_secretstream_xchacha20poly1305_pull + (crypto_secretstream_xchacha20poly1305_state *state, + unsigned char *m, unsigned long long *mlen_p, unsigned char *tag_p, + const unsigned char *c, unsigned long long clen, + const unsigned char *ad, unsigned long long adlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +void crypto_secretstream_xchacha20poly1305_rekey + (crypto_secretstream_xchacha20poly1305_state *state); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_shorthash.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_shorthash.h new file mode 100644 index 00000000..fecaa88b --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_shorthash.h @@ -0,0 +1,41 @@ +#ifndef crypto_shorthash_H +#define crypto_shorthash_H + +#include + +#include "crypto_shorthash_siphash24.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_shorthash_BYTES crypto_shorthash_siphash24_BYTES +SODIUM_EXPORT +size_t crypto_shorthash_bytes(void); + +#define crypto_shorthash_KEYBYTES crypto_shorthash_siphash24_KEYBYTES +SODIUM_EXPORT +size_t crypto_shorthash_keybytes(void); + +#define crypto_shorthash_PRIMITIVE "siphash24" +SODIUM_EXPORT +const char *crypto_shorthash_primitive(void); + +SODIUM_EXPORT +int crypto_shorthash(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +void crypto_shorthash_keygen(unsigned char k[crypto_shorthash_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_shorthash_siphash24.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_shorthash_siphash24.h new file mode 100644 index 00000000..1e6f72a6 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_shorthash_siphash24.h @@ -0,0 +1,50 @@ +#ifndef crypto_shorthash_siphash24_H +#define crypto_shorthash_siphash24_H + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +/* -- 64-bit output -- */ + +#define crypto_shorthash_siphash24_BYTES 8U +SODIUM_EXPORT +size_t crypto_shorthash_siphash24_bytes(void); + +#define crypto_shorthash_siphash24_KEYBYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphash24_keybytes(void); + +SODIUM_EXPORT +int crypto_shorthash_siphash24(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); + +#ifndef SODIUM_LIBRARY_MINIMAL +/* -- 128-bit output -- */ + +#define crypto_shorthash_siphashx24_BYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphashx24_bytes(void); + +#define crypto_shorthash_siphashx24_KEYBYTES 16U +SODIUM_EXPORT +size_t crypto_shorthash_siphashx24_keybytes(void); + +SODIUM_EXPORT +int crypto_shorthash_siphashx24(unsigned char *out, const unsigned char *in, + unsigned long long inlen, const unsigned char *k) + __attribute__ ((nonnull(1, 4))); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign.h new file mode 100644 index 00000000..f5fafb12 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign.h @@ -0,0 +1,107 @@ +#ifndef crypto_sign_H +#define crypto_sign_H + +/* + * THREAD SAFETY: crypto_sign_keypair() is thread-safe, + * provided that sodium_init() was called before. + * + * Other functions, including crypto_sign_seed_keypair() are always thread-safe. + */ + +#include + +#include "crypto_sign_ed25519.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef crypto_sign_ed25519ph_state crypto_sign_state; + +SODIUM_EXPORT +size_t crypto_sign_statebytes(void); + +#define crypto_sign_BYTES crypto_sign_ed25519_BYTES +SODIUM_EXPORT +size_t crypto_sign_bytes(void); + +#define crypto_sign_SEEDBYTES crypto_sign_ed25519_SEEDBYTES +SODIUM_EXPORT +size_t crypto_sign_seedbytes(void); + +#define crypto_sign_PUBLICKEYBYTES crypto_sign_ed25519_PUBLICKEYBYTES +SODIUM_EXPORT +size_t crypto_sign_publickeybytes(void); + +#define crypto_sign_SECRETKEYBYTES crypto_sign_ed25519_SECRETKEYBYTES +SODIUM_EXPORT +size_t crypto_sign_secretkeybytes(void); + +#define crypto_sign_MESSAGEBYTES_MAX crypto_sign_ed25519_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_sign_messagebytes_max(void); + +#define crypto_sign_PRIMITIVE "ed25519" +SODIUM_EXPORT +const char *crypto_sign_primitive(void); + +SODIUM_EXPORT +int crypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign(unsigned char *sm, unsigned long long *smlen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_open(unsigned char *m, unsigned long long *mlen_p, + const unsigned char *sm, unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_verify_detached(const unsigned char *sig, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_sign_init(crypto_sign_state *state); + +SODIUM_EXPORT +int crypto_sign_update(crypto_sign_state *state, + const unsigned char *m, unsigned long long mlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_sign_final_create(crypto_sign_state *state, unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *sk) + __attribute__ ((nonnull(1, 2, 4))); + +SODIUM_EXPORT +int crypto_sign_final_verify(crypto_sign_state *state, const unsigned char *sig, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign_ed25519.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign_ed25519.h new file mode 100644 index 00000000..0fdac42d --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign_ed25519.h @@ -0,0 +1,124 @@ +#ifndef crypto_sign_ed25519_H +#define crypto_sign_ed25519_H + +#include +#include "crypto_hash_sha512.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct crypto_sign_ed25519ph_state { + crypto_hash_sha512_state hs; +} crypto_sign_ed25519ph_state; + +SODIUM_EXPORT +size_t crypto_sign_ed25519ph_statebytes(void); + +#define crypto_sign_ed25519_BYTES 64U +SODIUM_EXPORT +size_t crypto_sign_ed25519_bytes(void); + +#define crypto_sign_ed25519_SEEDBYTES 32U +SODIUM_EXPORT +size_t crypto_sign_ed25519_seedbytes(void); + +#define crypto_sign_ed25519_PUBLICKEYBYTES 32U +SODIUM_EXPORT +size_t crypto_sign_ed25519_publickeybytes(void); + +#define crypto_sign_ed25519_SECRETKEYBYTES (32U + 32U) +SODIUM_EXPORT +size_t crypto_sign_ed25519_secretkeybytes(void); + +#define crypto_sign_ed25519_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_ed25519_BYTES) +SODIUM_EXPORT +size_t crypto_sign_ed25519_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen_p, + const unsigned char *m, unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p, + const unsigned char *sm, unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_detached(unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_ed25519_verify_detached(const unsigned char *sig, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4))); + +SODIUM_EXPORT +int crypto_sign_ed25519_keypair(unsigned char *pk, unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk, + const unsigned char *seed) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk, + const unsigned char *ed25519_pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk, + const unsigned char *ed25519_sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_seed(unsigned char *seed, + const unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_init(crypto_sign_ed25519ph_state *state) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_update(crypto_sign_ed25519ph_state *state, + const unsigned char *m, + unsigned long long mlen) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_final_create(crypto_sign_ed25519ph_state *state, + unsigned char *sig, + unsigned long long *siglen_p, + const unsigned char *sk) + __attribute__ ((nonnull(1, 2, 4))); + +SODIUM_EXPORT +int crypto_sign_ed25519ph_final_verify(crypto_sign_ed25519ph_state *state, + const unsigned char *sig, + const unsigned char *pk) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign_edwards25519sha512batch.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign_edwards25519sha512batch.h new file mode 100644 index 00000000..eed158aa --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_sign_edwards25519sha512batch.h @@ -0,0 +1,55 @@ +#ifndef crypto_sign_edwards25519sha512batch_H +#define crypto_sign_edwards25519sha512batch_H + +/* + * WARNING: This construction was a prototype, which should not be used + * any more in new projects. + * + * crypto_sign_edwards25519sha512batch is provided for applications + * initially built with NaCl, but as recommended by the author of this + * construction, new applications should use ed25519 instead. + * + * In Sodium, you should use the high-level crypto_sign_*() functions instead. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_sign_edwards25519sha512batch_BYTES 64U +#define crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES 32U +#define crypto_sign_edwards25519sha512batch_SECRETKEYBYTES (32U + 32U) +#define crypto_sign_edwards25519sha512batch_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_edwards25519sha512batch_BYTES) + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch(unsigned char *sm, + unsigned long long *smlen_p, + const unsigned char *m, + unsigned long long mlen, + const unsigned char *sk) + __attribute__ ((deprecated)) __attribute__ ((nonnull(1, 5))); + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch_open(unsigned char *m, + unsigned long long *mlen_p, + const unsigned char *sm, + unsigned long long smlen, + const unsigned char *pk) + __attribute__ ((deprecated)) __attribute__ ((nonnull(3, 5))); + +SODIUM_EXPORT +int crypto_sign_edwards25519sha512batch_keypair(unsigned char *pk, + unsigned char *sk) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream.h new file mode 100644 index 00000000..88dab5f6 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream.h @@ -0,0 +1,59 @@ +#ifndef crypto_stream_H +#define crypto_stream_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include + +#include "crypto_stream_xsalsa20.h" +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_KEYBYTES crypto_stream_xsalsa20_KEYBYTES +SODIUM_EXPORT +size_t crypto_stream_keybytes(void); + +#define crypto_stream_NONCEBYTES crypto_stream_xsalsa20_NONCEBYTES +SODIUM_EXPORT +size_t crypto_stream_noncebytes(void); + +#define crypto_stream_MESSAGEBYTES_MAX crypto_stream_xsalsa20_MESSAGEBYTES_MAX +SODIUM_EXPORT +size_t crypto_stream_messagebytes_max(void); + +#define crypto_stream_PRIMITIVE "xsalsa20" +SODIUM_EXPORT +const char *crypto_stream_primitive(void); + +SODIUM_EXPORT +int crypto_stream(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_keygen(unsigned char k[crypto_stream_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_chacha20.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_chacha20.h new file mode 100644 index 00000000..40889755 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_chacha20.h @@ -0,0 +1,106 @@ +#ifndef crypto_stream_chacha20_H +#define crypto_stream_chacha20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_chacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_chacha20_keybytes(void); + +#define crypto_stream_chacha20_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_chacha20_noncebytes(void); + +#define crypto_stream_chacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_chacha20_messagebytes_max(void); + +/* ChaCha20 with a 64-bit nonce and a 64-bit counter, as originally designed */ + +SODIUM_EXPORT +int crypto_stream_chacha20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_chacha20_keygen(unsigned char k[crypto_stream_chacha20_KEYBYTES]) + __attribute__ ((nonnull)); + +/* ChaCha20 with a 96-bit nonce and a 32-bit counter (IETF) */ + +#define crypto_stream_chacha20_ietf_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_keybytes(void); + +#define crypto_stream_chacha20_ietf_NONCEBYTES 12U +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_noncebytes(void); + +#define crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX \ + SODIUM_MIN(SODIUM_SIZE_MAX, 64ULL * (1ULL << 32)) +SODIUM_EXPORT +size_t crypto_stream_chacha20_ietf_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint32_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_chacha20_ietf_keygen(unsigned char k[crypto_stream_chacha20_ietf_KEYBYTES]) + __attribute__ ((nonnull)); + +/* Aliases */ + +#define crypto_stream_chacha20_IETF_KEYBYTES crypto_stream_chacha20_ietf_KEYBYTES +#define crypto_stream_chacha20_IETF_NONCEBYTES crypto_stream_chacha20_ietf_NONCEBYTES +#define crypto_stream_chacha20_IETF_MESSAGEBYTES_MAX crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa20.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa20.h new file mode 100644 index 00000000..45b3b3e3 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_salsa20_H +#define crypto_stream_salsa20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa20_keybytes(void); + +#define crypto_stream_salsa20_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa20_noncebytes(void); + +#define crypto_stream_salsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_salsa20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_salsa20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa20_keygen(unsigned char k[crypto_stream_salsa20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa2012.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa2012.h new file mode 100644 index 00000000..6c5d303c --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa2012.h @@ -0,0 +1,53 @@ +#ifndef crypto_stream_salsa2012_H +#define crypto_stream_salsa2012_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa2012_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa2012_keybytes(void); + +#define crypto_stream_salsa2012_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa2012_noncebytes(void); + +#define crypto_stream_salsa2012_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_salsa2012_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_salsa2012(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa2012_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa2012_keygen(unsigned char k[crypto_stream_salsa2012_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa208.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa208.h new file mode 100644 index 00000000..d574f304 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_salsa208.h @@ -0,0 +1,56 @@ +#ifndef crypto_stream_salsa208_H +#define crypto_stream_salsa208_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_salsa208_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_salsa208_keybytes(void) + __attribute__ ((deprecated)); + +#define crypto_stream_salsa208_NONCEBYTES 8U +SODIUM_EXPORT +size_t crypto_stream_salsa208_noncebytes(void) + __attribute__ ((deprecated)); + +#define crypto_stream_salsa208_MESSAGEBYTES_MAX SODIUM_SIZE_MAX + SODIUM_EXPORT +size_t crypto_stream_salsa208_messagebytes_max(void) + __attribute__ ((deprecated)); + +SODIUM_EXPORT +int crypto_stream_salsa208(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_salsa208_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_salsa208_keygen(unsigned char k[crypto_stream_salsa208_KEYBYTES]) + __attribute__ ((deprecated)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_xchacha20.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_xchacha20.h new file mode 100644 index 00000000..c4002db0 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_xchacha20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_xchacha20_H +#define crypto_stream_xchacha20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_xchacha20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_xchacha20_keybytes(void); + +#define crypto_stream_xchacha20_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_stream_xchacha20_noncebytes(void); + +#define crypto_stream_xchacha20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_xchacha20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_xchacha20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xchacha20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xchacha20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_xchacha20_keygen(unsigned char k[crypto_stream_xchacha20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_xsalsa20.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_xsalsa20.h new file mode 100644 index 00000000..20034e34 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_stream_xsalsa20.h @@ -0,0 +1,61 @@ +#ifndef crypto_stream_xsalsa20_H +#define crypto_stream_xsalsa20_H + +/* + * WARNING: This is just a stream cipher. It is NOT authenticated encryption. + * While it provides some protection against eavesdropping, it does NOT + * provide any security against active attacks. + * Unless you know what you're doing, what you are looking for is probably + * the crypto_box functions. + */ + +#include +#include +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +#define crypto_stream_xsalsa20_KEYBYTES 32U +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_keybytes(void); + +#define crypto_stream_xsalsa20_NONCEBYTES 24U +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_noncebytes(void); + +#define crypto_stream_xsalsa20_MESSAGEBYTES_MAX SODIUM_SIZE_MAX +SODIUM_EXPORT +size_t crypto_stream_xsalsa20_messagebytes_max(void); + +SODIUM_EXPORT +int crypto_stream_xsalsa20(unsigned char *c, unsigned long long clen, + const unsigned char *n, const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xsalsa20_xor(unsigned char *c, const unsigned char *m, + unsigned long long mlen, const unsigned char *n, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int crypto_stream_xsalsa20_xor_ic(unsigned char *c, const unsigned char *m, + unsigned long long mlen, + const unsigned char *n, uint64_t ic, + const unsigned char *k) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void crypto_stream_xsalsa20_keygen(unsigned char k[crypto_stream_xsalsa20_KEYBYTES]) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_16.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_16.h new file mode 100644 index 00000000..7b9c8077 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_16.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_16_H +#define crypto_verify_16_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_16_BYTES 16U +SODIUM_EXPORT +size_t crypto_verify_16_bytes(void); + +SODIUM_EXPORT +int crypto_verify_16(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_32.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_32.h new file mode 100644 index 00000000..9b0f4529 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_32.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_32_H +#define crypto_verify_32_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_32_BYTES 32U +SODIUM_EXPORT +size_t crypto_verify_32_bytes(void); + +SODIUM_EXPORT +int crypto_verify_32(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_64.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_64.h new file mode 100644 index 00000000..c83b7302 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/crypto_verify_64.h @@ -0,0 +1,23 @@ +#ifndef crypto_verify_64_H +#define crypto_verify_64_H + +#include +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define crypto_verify_64_BYTES 64U +SODIUM_EXPORT +size_t crypto_verify_64_bytes(void); + +SODIUM_EXPORT +int crypto_verify_64(const unsigned char *x, const unsigned char *y) + __attribute__ ((warn_unused_result)) __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/export.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/export.h new file mode 100644 index 00000000..a0074fc9 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/export.h @@ -0,0 +1,57 @@ + +#ifndef sodium_export_H +#define sodium_export_H + +#include +#include +#include + +#if !defined(__clang__) && !defined(__GNUC__) +# ifdef __attribute__ +# undef __attribute__ +# endif +# define __attribute__(a) +#endif + +#ifdef SODIUM_STATIC +# define SODIUM_EXPORT +# define SODIUM_EXPORT_WEAK +#else +# if defined(_MSC_VER) +# ifdef SODIUM_DLL_EXPORT +# define SODIUM_EXPORT __declspec(dllexport) +# else +# define SODIUM_EXPORT __declspec(dllimport) +# endif +# else +# if defined(__SUNPRO_C) +# ifndef __GNU_C__ +# define SODIUM_EXPORT __attribute__ (visibility(__global)) +# else +# define SODIUM_EXPORT __attribute__ __global +# endif +# elif defined(_MSG_VER) +# define SODIUM_EXPORT extern __declspec(dllexport) +# else +# define SODIUM_EXPORT __attribute__ ((visibility ("default"))) +# endif +# endif +# if defined(__ELF__) && !defined(SODIUM_DISABLE_WEAK_FUNCTIONS) +# define SODIUM_EXPORT_WEAK SODIUM_EXPORT __attribute__((weak)) +# else +# define SODIUM_EXPORT_WEAK SODIUM_EXPORT +# endif +#endif + +#ifndef CRYPTO_ALIGN +# if defined(__INTEL_COMPILER) || defined(_MSC_VER) +# define CRYPTO_ALIGN(x) __declspec(align(x)) +# else +# define CRYPTO_ALIGN(x) __attribute__ ((aligned(x))) +# endif +#endif + +#define SODIUM_MIN(A, B) ((A) < (B) ? (A) : (B)) +#define SODIUM_SIZE_MAX SODIUM_MIN(UINT64_MAX, SIZE_MAX) + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes.h new file mode 100644 index 00000000..a03cc657 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes.h @@ -0,0 +1,72 @@ + +#ifndef randombytes_H +#define randombytes_H + +#include +#include + +#include + +#include "export.h" + +#ifdef __cplusplus +# ifdef __GNUC__ +# pragma GCC diagnostic ignored "-Wlong-long" +# endif +extern "C" { +#endif + +typedef struct randombytes_implementation { + const char *(*implementation_name)(void); /* required */ + uint32_t (*random)(void); /* required */ + void (*stir)(void); /* optional */ + uint32_t (*uniform)(const uint32_t upper_bound); /* optional, a default implementation will be used if NULL */ + void (*buf)(void * const buf, const size_t size); /* required */ + int (*close)(void); /* optional */ +} randombytes_implementation; + +#define randombytes_BYTES_MAX SODIUM_MIN(SODIUM_SIZE_MAX, 0xffffffffUL) + +#define randombytes_SEEDBYTES 32U +SODIUM_EXPORT +size_t randombytes_seedbytes(void); + +SODIUM_EXPORT +void randombytes_buf(void * const buf, const size_t size) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +void randombytes_buf_deterministic(void * const buf, const size_t size, + const unsigned char seed[randombytes_SEEDBYTES]) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +uint32_t randombytes_random(void); + +SODIUM_EXPORT +uint32_t randombytes_uniform(const uint32_t upper_bound); + +SODIUM_EXPORT +void randombytes_stir(void); + +SODIUM_EXPORT +int randombytes_close(void); + +SODIUM_EXPORT +int randombytes_set_implementation(randombytes_implementation *impl) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +const char *randombytes_implementation_name(void); + +/* -- NaCl compatibility interface -- */ + +SODIUM_EXPORT +void randombytes(unsigned char * const buf, const unsigned long long buf_len) + __attribute__ ((nonnull)); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes_internal_random.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes_internal_random.h new file mode 100644 index 00000000..2b2b7d6e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes_internal_random.h @@ -0,0 +1,22 @@ + +#ifndef randombytes_internal_random_H +#define randombytes_internal_random_H + +#include "export.h" +#include "randombytes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +extern struct randombytes_implementation randombytes_internal_implementation; + +/* Backwards compatibility with libsodium < 1.0.18 */ +#define randombytes_salsa20_implementation randombytes_internal_implementation + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes_sysrandom.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes_sysrandom.h new file mode 100644 index 00000000..9e27b674 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/randombytes_sysrandom.h @@ -0,0 +1,19 @@ + +#ifndef randombytes_sysrandom_H +#define randombytes_sysrandom_H + +#include "export.h" +#include "randombytes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +extern struct randombytes_implementation randombytes_sysrandom_implementation; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/runtime.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/runtime.h new file mode 100644 index 00000000..7f15d58e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/runtime.h @@ -0,0 +1,52 @@ + +#ifndef sodium_runtime_H +#define sodium_runtime_H + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_neon(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse2(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse3(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_ssse3(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_sse41(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx2(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_avx512f(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_pclmul(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_aesni(void); + +SODIUM_EXPORT_WEAK +int sodium_runtime_has_rdrand(void); + +/* ------------------------------------------------------------------------- */ + +int _sodium_runtime_get_cpu_features(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/utils.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/utils.h new file mode 100644 index 00000000..ac801512 --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/utils.h @@ -0,0 +1,179 @@ + +#ifndef sodium_utils_H +#define sodium_utils_H + +#include + +#include "export.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SODIUM_C99 +# if defined(__cplusplus) || !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L +# define SODIUM_C99(X) +# else +# define SODIUM_C99(X) X +# endif +#endif + +SODIUM_EXPORT +void sodium_memzero(void * const pnt, const size_t len); + +SODIUM_EXPORT +void sodium_stackzero(const size_t len); + +/* + * WARNING: sodium_memcmp() must be used to verify if two secret keys + * are equal, in constant time. + * It returns 0 if the keys are equal, and -1 if they differ. + * This function is not designed for lexicographical comparisons. + */ +SODIUM_EXPORT +int sodium_memcmp(const void * const b1_, const void * const b2_, size_t len) + __attribute__ ((warn_unused_result)); + +/* + * sodium_compare() returns -1 if b1_ < b2_, 1 if b1_ > b2_ and 0 if b1_ == b2_ + * It is suitable for lexicographical comparisons, or to compare nonces + * and counters stored in little-endian format. + * However, it is slower than sodium_memcmp(). + */ +SODIUM_EXPORT +int sodium_compare(const unsigned char *b1_, const unsigned char *b2_, + size_t len) __attribute__ ((warn_unused_result)); + +SODIUM_EXPORT +int sodium_is_zero(const unsigned char *n, const size_t nlen); + +SODIUM_EXPORT +void sodium_increment(unsigned char *n, const size_t nlen); + +SODIUM_EXPORT +void sodium_add(unsigned char *a, const unsigned char *b, const size_t len); + +SODIUM_EXPORT +void sodium_sub(unsigned char *a, const unsigned char *b, const size_t len); + +SODIUM_EXPORT +char *sodium_bin2hex(char * const hex, const size_t hex_maxlen, + const unsigned char * const bin, const size_t bin_len) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_hex2bin(unsigned char * const bin, const size_t bin_maxlen, + const char * const hex, const size_t hex_len, + const char * const ignore, size_t * const bin_len, + const char ** const hex_end) + __attribute__ ((nonnull(1))); + +#define sodium_base64_VARIANT_ORIGINAL 1 +#define sodium_base64_VARIANT_ORIGINAL_NO_PADDING 3 +#define sodium_base64_VARIANT_URLSAFE 5 +#define sodium_base64_VARIANT_URLSAFE_NO_PADDING 7 + +/* + * Computes the required length to encode BIN_LEN bytes as a base64 string + * using the given variant. The computed length includes a trailing \0. + */ +#define sodium_base64_ENCODED_LEN(BIN_LEN, VARIANT) \ + (((BIN_LEN) / 3U) * 4U + \ + ((((BIN_LEN) - ((BIN_LEN) / 3U) * 3U) | (((BIN_LEN) - ((BIN_LEN) / 3U) * 3U) >> 1)) & 1U) * \ + (4U - (~((((VARIANT) & 2U) >> 1) - 1U) & (3U - ((BIN_LEN) - ((BIN_LEN) / 3U) * 3U)))) + 1U) + +SODIUM_EXPORT +size_t sodium_base64_encoded_len(const size_t bin_len, const int variant); + +SODIUM_EXPORT +char *sodium_bin2base64(char * const b64, const size_t b64_maxlen, + const unsigned char * const bin, const size_t bin_len, + const int variant) __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_base642bin(unsigned char * const bin, const size_t bin_maxlen, + const char * const b64, const size_t b64_len, + const char * const ignore, size_t * const bin_len, + const char ** const b64_end, const int variant) + __attribute__ ((nonnull(1))); + +SODIUM_EXPORT +int sodium_mlock(void * const addr, const size_t len) + __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_munlock(void * const addr, const size_t len) + __attribute__ ((nonnull)); + +/* WARNING: sodium_malloc() and sodium_allocarray() are not general-purpose + * allocation functions. + * + * They return a pointer to a region filled with 0xd0 bytes, immediately + * followed by a guard page. + * As a result, accessing a single byte after the requested allocation size + * will intentionally trigger a segmentation fault. + * + * A canary and an additional guard page placed before the beginning of the + * region may also kill the process if a buffer underflow is detected. + * + * The memory layout is: + * [unprotected region size (read only)][guard page (no access)][unprotected pages (read/write)][guard page (no access)] + * With the layout of the unprotected pages being: + * [optional padding][16-bytes canary][user region] + * + * However: + * - These functions are significantly slower than standard functions + * - Each allocation requires 3 or 4 additional pages + * - The returned address will not be aligned if the allocation size is not + * a multiple of the required alignment. For this reason, these functions + * are designed to store data, such as secret keys and messages. + * + * sodium_malloc() can be used to allocate any libsodium data structure. + * + * The crypto_generichash_state structure is packed and its length is + * either 357 or 361 bytes. For this reason, when using sodium_malloc() to + * allocate a crypto_generichash_state structure, padding must be added in + * order to ensure proper alignment. crypto_generichash_statebytes() + * returns the rounded up structure size, and should be prefered to sizeof(): + * state = sodium_malloc(crypto_generichash_statebytes()); + */ + +SODIUM_EXPORT +void *sodium_malloc(const size_t size) + __attribute__ ((malloc)); + +SODIUM_EXPORT +void *sodium_allocarray(size_t count, size_t size) + __attribute__ ((malloc)); + +SODIUM_EXPORT +void sodium_free(void *ptr); + +SODIUM_EXPORT +int sodium_mprotect_noaccess(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_mprotect_readonly(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_mprotect_readwrite(void *ptr) __attribute__ ((nonnull)); + +SODIUM_EXPORT +int sodium_pad(size_t *padded_buflen_p, unsigned char *buf, + size_t unpadded_buflen, size_t blocksize, size_t max_buflen) + __attribute__ ((nonnull(2))); + +SODIUM_EXPORT +int sodium_unpad(size_t *unpadded_buflen_p, const unsigned char *buf, + size_t padded_buflen, size_t blocksize) + __attribute__ ((nonnull(2))); + +/* -------- */ + +int _sodium_alloc_init(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/version.h b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/version.h new file mode 100644 index 00000000..201a290e --- /dev/null +++ b/example/android/third_party/libsodium/libsodium-android-westmere/include/sodium/version.h @@ -0,0 +1,33 @@ + +#ifndef sodium_version_H +#define sodium_version_H + +#include "export.h" + +#define SODIUM_VERSION_STRING "1.0.18" + +#define SODIUM_LIBRARY_VERSION_MAJOR 10 +#define SODIUM_LIBRARY_VERSION_MINOR 3 + + +#ifdef __cplusplus +extern "C" { +#endif + +SODIUM_EXPORT +const char *sodium_version_string(void); + +SODIUM_EXPORT +int sodium_library_version_major(void); + +SODIUM_EXPORT +int sodium_library_version_minor(void); + +SODIUM_EXPORT +int sodium_library_minimal(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/android/third_party/libsodium/libsodium-android-westmere/lib/libsodium.a b/example/android/third_party/libsodium/libsodium-android-westmere/lib/libsodium.a new file mode 100644 index 0000000000000000000000000000000000000000..b46cb5dcd3fe18c95b05f667defd6eebddd15605 GIT binary patch literal 579332 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

    mxC*!Db5%cy>se&cC2*I?Q`c_uq4j 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 z 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

    H6K3%{4^D>B8I+kUk*79+rP%^t5 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�BkcK|rHc_pG%JKPz`R7pFP(8j4$ip6A&?T`G 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%0DwxOZ_E?NA}~i60v%Ro?Zt`eHsz2mvCB-ko}VM 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

    k&3}U$tQND@H9Fxne;rn18 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

    >$6Zl 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%0Dxmg9X$B^aMEZNc`!w2!9;#W%+S%K7vaRXQGX6 zgrMKLitIb_e{v8!9stM-Yfw%KcfnAk7x=06=E}nHgax zE}#UUkANot3Iw#u3_HUCPAtZso>JlZdZaWi(lv1&M1hJv1P@kpv1Xc&Op`ys*Q=;4 zVMTj}O+^#q0HlhE>j9*eiI)LPHCf9#O_U>GWh8>5Wcy3yo12;rT@S~04I>S_knO)n znmOYt{2i5XHU5rdzbMR*VLHUY>W2JE@h>z(Dwp^bnM$P+V?w?(*y*z~dsXpq9>%QZ2zIs^H=uQS&cQ;e`UukA|J4 z0=@^hLqK^}*tuW8Zh*%DlJ_?YJ1+>>&?4--0nk(WSoUYgVrpdn#HsLQUyA^+uf4FJ z_O(j^*w>B%U|;*Lx#?@k8xYv*Zv~Q;^tbyVX48xVVAC7`z^2)xwU9w*H;wIYHw}j7 z-i8y~B#hN8`R$`koTH_qwbVe;(JKFIM_Y)by5(!|0Z2MD|j5d3pZvPB%zIEfGcguWRE5*MU^X&DA zCgU~H7l6}H&w+4e{~Pj4A}tf=9T0X-5_wmE(E>hd8+OhTa5KO(0jC38BA_|ILIE!# zv84dcNu6dnP9Ll&%I_q3zD-ewGsH#GFrk@JDv%?V#ohj1OF!o zZv|jaU#D{R^sA&fn1VZ_cH5wGK38Vc^gt@tnqJ$pUD#RBo$lMEc*E*7XeqOL?ofzU zMY_*)gRP24ud?^FArWB)cnOG_xbhDyaPA*=dh(+ut7H?ql=M z|MJ{yr)jch-OsG4!Nc0SkI!L4Gzg#WGkZ#vUy9^}3R(G=SgV}S$e}WzUt*n{lV?Mn zq4P3Aot7LyFa#a7)4IcmPs0%IvKxOwQ#1bZE$~zsy60z{DENf~fv07h8Ua2@ls!EI zw@o=+F6ah)LB>m{d6$vmKZE|UE)V9yG1~;%Ad`A|##z)-ivpzAW)^UZQv^xWZY5fk z6ud(-Zao-(Uo)*a1NCKvUNg<~8r(-DA%ES>L9IK4o!(vOeikY9I3Dgxp|sE@-Z33d zp}%+GCDEICX*AolTCu~Jojf@4w9_=* ziDx>Bu(vs@$;88(vxjKx6iOBPFwz4>GB;;0^l#3d#EqtvNS9krZv${MD$+4*wx>=7 z;N95;pJS?>4;S~K9tH6BpvoYUJ*ZRUQYn5EWr}7Ew}XwRQ(hGyzhUd`D$RTvJvQ`- z43Xt>EBGhw5P3R-t|zh0=nUDUQI;TnXvUg9(H0HJ{%HXx9~5?85pXxaTLOLq_*lU7 zgTv0(07u`9sjwwhkL3rmJ@co~Xy@pXotOhX&m!7?qxf(h3A{8x33>t0Cins+rcJOCfTqCFr(+)9;Pvi8a2aDB zEXEqJ{AeCjtHU|@UCgJUZIMtXcC~F0K7=kfh@LD|H#clEL=MfoRmMR)D$~3Bbc;vj znT@9#dw)DC=4ei66#G70s98>EbfP!oNzcy-710nisSK6jxLV5tD_Kal4AeqUF#I~3#N|$itvCt?n+*$kR5(M4fI$nt2_v3(c5|@`Q>^70Xd% zYP*Qq?!Fst>Kkrk+kJkIutSDt!uJ%qRwW&)C^|H8aZe>_>j6m8asf!vG7eLcmYuXn zTCKzsl6GrCN!myNlC%~8To8CAt|V;%07+V309g=7evB|4No$a_grt3sti*mx+yy|A zHUWSpT&>nyrU=`Fv;FNy{eL5AjhYtvq!Z#|K!7;wGh(iWGF@+!p>7TqTIDCJL$V?; zIztHDC_W=b@)=QxX9v1sjt1Na2c8kF@pp`NMW~VOG{&^kM!4Bda7#O#)=S$-!@mvp z8#2O-o9&hl9l~9jsK`~i{VD+I_HF>u?c6+V$+H01l79yv-F_*3mxm5AlFWR;{PEqM#XY{_8&Y{?7&w&Y^fOnOV&{{L%B z)@oY&Zb{+W8?8o@<{HiB8pY-s$!63>+o1tBn?@5NGS)QOH>f2WZLDdunZ32q;Fd<) z1vdwmhQIVkWzxpYMynI$jE#;?9Cnm8(F_0?Y{|y~*fP)cvs%XaQd?#SeAzO8^wpMG z2f&uO5P&U{3&587vX8dRwTR`lOunQgEmI9KTV@mhTc#xdTc!jn_3|?Z)0qkrscOxV8KntSVs*N7-K6uPj?+oR%7?pXq6~zw^|Ku7NNfCih7=58m$2e zV56O38ttO~+Gub~qx}lES@SaC7Yxvmrt!l^Ya<#r8?j9Ect&(q;xP!h(A5aQk=JXW zHtR$H&Y?E|aO75%!l6A#(ntDo7FOH@X z!wOXG?E$Fd%K=2m1NfBUigor^2#tY*6=PAWyD;BBR7#z0&_r{PX!1ow_ePB^5v?Y6 zK`P@WaoBOX##I8qHLe=~tkvp0ny9bb;NT&LajRp-&S-~g*d4KbB0vB6BrDm$=Tjx* z-SRcy3OGVD<`0lc8dYyZS-7Y;&Zs))cvbZ{qw0BZ^LYigsQNv)scMaX#0ffzjGL+- zqPdkxZsVf!6N?duJ^oDq_V{)~w8xJJU}IDRq%}r?Hb&x0$n54w=ANjXyjZis@&@jh zgRj>hwuB9GFQjacEdX3}+<&Mx$ngMHgDlrX{RRp4cItku29kXOu?>o78`$%fK4vy) zz}3|K7?dONmbJ^jWU2l3AJN)yA=;_y%P`^JwO8w@X zqWT>Nzz%;sfTiCdny9beb7k?xT}(8j-K|KV!Y`LHd<s8J;Pn|FX%*mHwGh`a_pd`e#b%UuF7k+nc^E{T-(7wmtS`b!>b3 zSDU_D3hBG0=p}lGjsDENZ@J%(jL4k^B~Rcqc(G}?8~eCvxW&24G~9*1>WOmUcdIn) z&xALa(e!n?VAc${l^P⋙!n!a7$)RS3WvA@v1 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 wIOoaf&1OmzX``!0B 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ŠtFt2TJxS!{6dCjuJpXV- z1nOLaazpm_b5|A26QnAI~NEJ+ZyF-Ls< z1=7?d&#QT)YGq$e0|j;YG!jAxxY<(B3|VZ{f@Vh-Qn$>J(N~p4xShm#Vc*~gQIkX7 zGDh-~Bu0`dhLB<;y{pnmwcN>KbDrETX<|O@xHdyHS&72GUhmpviJGsgZAhyYDX_&7xD3 zTS+}bYOiMK$wxzz#dS`ZRy_5bQr??BnqUA;Jff_CTs7iKL7HGtqljD_i%I;%%%Vde za8dm)!4j?};THv#lF(Uy!F8AtRHvEoxjssl3`vY@1YB#|IOGLnDM*9X z+{XtC@AOkDdz0qAw7mhB(8Z5t!}Y9WCaPN>H9kHX-#(U zYCf%B-D9Kq1A-z9Z8etSwJs)P`!fRIkF7$X18|fD|kPNf-7Nra+NG- zH4B{WmA$uw>b)eW4;mDcqZ~_u8rfdi#|apGm;m)r0<^jZ68j31uOx6EiJ!P=m?=c} zffyMb>z_-qGj$>A2y}s9eV$fpavG*_Nk53Cx~{Nl%ku#X9hz3ay;`Yw3gs@avL=Ts zTNF@vYK*E$Sc)2R-=!-Fh|~Hk#C^l2B=D`L3vq*$aNw%y?<9;)z_p!^+ODW4_t-!u zj3?^z3d$`xr0_I*RbJ4}Tv*(=B$`~o8mjdkQ$SRCLKiWv>Ixpl<33K3FVUl-3(Nx- zwdn0*?y)!o;DUT&xKvmLEFP$j=VUZIA855OF#!fsll$$9#2L^+TGZk$#WiUY zpdCQUbc(VPx}Qgh=d4t5Tbk8OO{rT8$OlN$RIJ2yVTr^HRteQ>PJEMqFV&+*ocvr_ z#K}dqie8|;mq{r-+!Pr%d745^_Er8+esZ)!a#cy%XhSRUX~+$-hy~SpPtLUSm62W;vEWn zZ-w##Kah-GEsd`M?fLR4iu7E`c9vaVA*!z+X%qz50j*epYOY7ImFLU~3j)FRV$h$P zSbLB(s)BEmQrh?c^7odN7|AFrF{_S3h!aUE`dCiZUX=LEN+l-qc950LJpUJd&;1r) zf=ef$s(|h5nOVB2cG0S=^b@&cM zd}CsK$tO?6_v4BamotDuq~3(t%dpNSA+~@DV8p`!_VJ>{3{5OuS>v*Z63_uB!zOTo zEj>#D?pse~f$tnupf{^RriH*(hL#2PGqj{95-vB?elPA?M-_O&(6YenVCgCNClW2c z0MMcwRA4^lfoK9B8d?@u?5F}#2E1lQ7OP4PfD;`maDkx(f#*qDIS5WR-(C{XtI%xq zBSbH0qEnv&78_d9E7F=)HZcVB1rJpssF#8uoxpJcS?~jrRVbuSqwxsz!dI#2nm~6S zvLdiM$=LS+In-YWnL?ueV*n>QRPTJBX=q;HQx^;b^dnZR&({O|(a`dXfL`XG%4-AK z9V)QCp?QH#9aUgULrVfrIqLI(`3`*(@QFkJ1*pO3QF~9o9u5__-O!T2Ves&Yu%13 zg23yBR&*SDk{NM9KsK$~1Y@UZ!EtP(3{U5<)GY9>p(O!#GFuREmRS<`)EEi^vQE`3 z=-%X05O4-ticR9^k-LJPy!+CIw^YlRj`s@6+Jb1e<6#yU6QE>kNm=TAU-yF9g-5p8E9`m4PIlgXlR^$PFUbmYg>$sSm$wwrpkt54Tj;tecWO;e7ElKbS{G6nU<+6sFKk5)zn!p{svU8$-N4+LtaGg1M2;NXAI5j4forbqVtmgrx{w373o|YFCy@*p%sCN3?9== zz`b!k{}JfFjoL8+BXPc^LtrckUIFJ&I%Gxf7_}r@kwZWn8x#KdVbNF2rERj_3u8b` zUojKbDrd>6Kxn2jZB zl7*+7;K=CRG3()}$E=>ZjAPbhalIxoI%bWEr@kgqURg7X7@)`LXF60`S;HnzF`6d! zri@@hG-yHuv!FqhM7{l^2i)6}McJtVy_hqHJ7v^H_w{DRc^__$+CPzF_0*Bu=ncdQd~C1mx1D5V0u+Q2Q#%L+qo z)ty*(y$e^1MX8FoZgOa~Fsnh{*s?mr@r*+S?#ItCs7-?M)hU8#8UM0n<>!Z7iJnA; zU#`&KCrK<51&+h;X`-*7z77Lfpo?2m^%d+!f-JC3Ko%V9$O3l-WI?x)C~FpcY_p&& zuc4opqYi<)4Xp^s`k_Xq94^x_BJVIj`(lQJN%$@Sg;LqN;GRa#3+xw=j{@rFTrhSY zi^MIrp$I8Fij)N(h(y*e$vV4D45id|t*Nafa4*SL-9k<=y%o;{oI|q1Yawzhh%Df= zqLq_}e*1EkWzrmVF zaOteO-ni_Y@{TKEGV&h%Tu-8CXs_UMOYX9OdmnwrC!l}hxK+a{__8~Ct=7QtRCk9} zS&8|a@$^SW1K8%W3fRHvJ(PUHO6LWhCK=sVWf#6OyI59rwB!qc`XWEpzAy6Mv{R7K z&zsN%Umg>TnoOuY($NYQcoEgO~`&nOg;Xc9B-MVm-Dv z^9zsz{l(cJzx5Zlf#~-+jIF{n-GyWqmx1WU#KT2Hp-7JRg9{xUVPft z={AG-zCcLfI)od+xC>u)nYLIN-ZL1MNj^;O<-yH+aZ)_KxZJ~wB>{DSARQG*EFo1O zXIzDdtB@w}iYg=EYxdQlwB}{i_v4*$Jt+CgIAu?(>&JVbQ|SKI&%8h&x|8SL z#+nxh*xIVuWH*6i0=JUriojttrf~uHy3vZj1GXtE3p{UVjrvdUKS%&rQ7o3k)p?Z0y!cO@jN`dZ{AdoGt-j7Ej9q0a_r6EVzRs?*^FC!;xPEz7gPW13w`VI6ntWCEj7~0-qRK5%|{7f`C8! z5!{J{yV#pK_acd9%`1RKhUNuUXZAuB&_qsI63Yw%(~}w8X=acYm_woub%F~VxgL`! znRRqj08mmO&4NXJ8Znj~Cvc6~Sb8Z|X#3Zh3duBh3jnI>{3 z&^tA1xEC?bBHR5Xi*U(XL|(V>WsXA`?k06XAW(++#6TJ5&;kwE0#I5|QGKoA1fOBsh8fkS4A1{A4oz&^K#zc_$$8H6A*A^qm z#VNSNNV4`VI+Ju0ttb5_YzfHOr0f#qDHf2l5!34|z9KPn`k{v1NT7!RT#!yIM^#t_ zY?rDc;!EAKdQJwS#WM=89*CF-Kc}t(NqA%dRZR(BAl#1pi}vN`kkse-QI+f4j@0>K zeo-coe)M7fWbq@p%am3edh)vf=h22*}C>Ci0A+Ov;Kf#`W8fD-qXx97w64fS><4iC`pfo}tBPZI{rx3S44brHCuB()}eI ze_Q|xb0D^OuC7&C9mZ7=D3PpIA$vNyz_Fe# z#Oa`rR@K&IqpFOcs$e7p+`D+E8eGpbm>3mR9JtTKcq=a`wlSr}M#a_buV4*n#eyD1 zl_xs4oPOuAg`G*7fBORuBcXJyA$KzWTHG6;sFUK3R9FSfL8^%OQoW_;#CAL%XmxL5 z0_+*K+ELA=CA1b-DFSI7twnT-1x8s3-D_#4cXLqTsWj^r%?U4{7i?@ulBQxMP7g~Y zj9w+&J3nxIzYO?LkNu#q^~(G8h?9q?BhHj3s`J$89-B@y_b6Edna{X9?cZLtRaL@G ziOVlIJ_P@oggvT+dyqL{Jzv1Fw$)qKPVYcljFq*?`^cfy1LO>-O$S3 zOvM=_814dmWoSu2fs2_g6^tOkAh4yOB?0#frxk(ijoMKFTxn=UpgY6K=CL2ZeIGY3 zFv?K{bZUZ{>ja-Qa$)tr7-;S zjcHy$<0=k8$i3V6ez0=*ecl@naW4Y0sCL-PW`j5K(RBcBGi$f4H( z&Npkw%Np(?sXD>nxebApundtS)5z=bfX~bx^4CBStKJ)V8r86+xNhL#1KnTOq?UfH%Y=zL_*c^UN8X4?gUzRq+TW!$To>DudMoSl~i zbe@lr8l@GPvhZcArXpL?CY>o~?!lB$k!pH4G*V4PsyW|OQ;Aelk@Y*(R9*~KQ<;Nm z+_bN#=bG6x;YSfPO{P~MG9i`#8qCHEYXNq0s4U;PxWe6_4?606fF6;x7bOdEohb-7 z*H`(Ex@Vm!2&iwgA9b;yp6a!pP}SSh3@r#;MnZuNg3dk)Qo=c=go0+8n@0sH;3*Q) z3k)^G@6a#SxLH#0vjoQ^zS7p$-G;Vz$&FFwoF~z>XxzBdDAA zG&cp!I!{`VqGea&kfukO-E?@v5?Pitk0f01abqd0gQ2)-lnA(f8mYu549w?lj06Jz z*WfKcERiBQn(3HRL_xqQ!g}vqM2FnNQ*@c5!MflLAe#JIuEj_rL)kiL(>{KR|A#BN zNbTGD0h>vvMBh!h*=)M-XMhWPiH@nT3fQJrMZ}l7!}XjgCz7#N@1poaB*LG-JVO&A z52ZyJHDbEHL?JT;(8lMTJhAkf!s$MnoJDh#xEkf zW{vP_DLtQUc0FV2&R3k8r5c@Qg4*e}ek9SRWHP?SxE6+73CHfIe2NO!r<9xZMK$48 zImO=wcE-r8!K9Im5!?l48d{Q@b`H7dCkqUkD+)EB-kGMX31Vw3HR&E3E(vTwvga;^ z$g$w$BX3%gKRM7GN%=6q6q5bakPtZ;xCLAv5_^3$JBtLDnqAS5Ry~@L^l^oyamk@} za+~HWol}fQhU&8F@ht0nNk9cmDb_dZX6aPG??^@$qEq~o(N$F!SXE^K*LGeNokcV)G;2(w}pq}A;zOt_BaC~Y#vzZXff z@L=FkBy_8_X;YQ+N$PMUl?(6 z@E38WoB~GQhV0O{A-^J}$odQX*l%qCP}Fj>;#^v_x;>YjaLt0xz4S0Ia2v_!zI^IQ znyJl}Gp`ETkgNFFD5!knX4?IDb1aP?%VbExeOIs~S5g2jkJA~R8Ke}$ zin0<$+lOlQBys37H?szgM=u((i;XZ+y-C|HsvCrhr!VE0H<1p^I{LgZ?+9h+kJyJpB4Hrtot+KZ*X}$<~s^bvQ&u~zE=4_x$Drog$hYGxDXh(Ig zeg)wk5{^#bev;~00DL#V1tlB8c!Ly+|M)>X34$}j($$~~NQ|d1kutOw!66GmR{q<^ z*CmCvo4^Hi)afzdIkk1pI z&U6x*5P1kGMa#;P4@b;|N&g=dlUrAhw#O6b{6~1T7F7NJnlI?3dbAA*MQ#V!-k}1! z8d^FL@UTM#<{4Ue7a)l!Cc(?3A5oba8f%41YUmO}ivm}XH1=AV-)Q8#z#WDb1YF;F z@hZ&}O-ISoDfMSr!{hT(w&Gt?td8+y+6n|M=>~&+yd6FWo9lX6U0+CIp(^m9p+$k9 zaKbuvBu^Dk!uKF$mAexhPUn>)LGQBym8d`>a_tMp;l`Di_AfwQU|EUH%DRZB-<)Q8 z3Y=hQhrm>}9*jea;4QY7N;tVj*z`S88L6O-e0vhSd!0DNy}w>(5B?mucRZt4Hud;n z0ydmsE?Ak7WPF9El(^=#=7fPR3lfj9dcZfgQvO>>zS11=@$5U9&hmU|hO zS9p>upv#%0s0v+uM8bXrbc`lx1b>+@OBnlhc(~-S7$(m(I#{?{b7djRhl}v{DDhaM~sDQf%k(ge`BfwqO z+k!w~#P$VRy>&nm2ue-_^OhyD|9F=(4HjoPm8(I6H_rMJDJxkWjLx)r6KauiCz$Mo zXvQS0r527R$5k!N#*lX)A!u`T-j>jvM)Mjhr@4d(dWLEj5;H|yPN|7is#LFR4T*;N z6Pt}~GXan1oaUT4d41zFOH! z(+s;Nyaoic3a@Y0N3o@FTf82P6=>;ef$W=%D2VJx5di0#mcuWr~If` z`BAa*qhjSpEvI}-tb9wXd`ql+%W}#Oi5Xi%p9co3^}SOEWPcmu6zE zE%l9s>u%XbAmlgkV&BAzeY3n`OX9_r#EWUU?>;FiSsX96I9_bAFBJ-THI(h?v1aRg zz?FlU`%hFa^^0DIr$3S22tOUTZeNG{%Df2wcj_7wlWWY(NG=}G2;~|RlPmeKMkLq& zvaYG)B7IFA7s-`;ul9{7>Pr&QV%aMDpHwG_+)KI2J=sY0CgBzZ^a>$d;qCzUcCL!R zhmQIQV6j8>MS_!T*;y8F4^o$;>EQXjjY0oFqOu18&p1@z4MR%;digmFWx&r2EeTv| zXz@nCEe;j9&Ct>ZJvmKkvSQcwA~ut#;qQQ&-iH1faFU@Vfj1p>FZsTVkBW`(sOsY4t1$)UrT4!ZT9k%$ z(+k<8;hRjY`KJLjb)x14^hHA$1RiwM%j)@}qFV&`HsPIwTAkhtk%kMuLwQ%30`v0# zJ$hL01oToBqFU1_z>AGs5csp9Wr5d8cH>Ei`;mKI?tLBOa32XJEdXd(j42wQf`&tmF|GIa8la~B)mqmf&Hu`G zMRon3`-tmM!cC@#qJV4?@f*DP39s(TeegYIMJfV85r*7-yoc2}%PiR%de!3ia`Vv1 zvz$W6*ETcaYnz#89JU>(^2rm5|L@C;iODu5CR@^jOSWH-aApEJ*+T{61f`CYbE*pD z^DL`StwdFJa(XFcU1C{@W$kh*l!n(KVc`PphIR-{cGMF9FB)1ASn8-dV+F^OC?;^S zp&c5cUEOp!5HQQ30@oOt7kJcB1zs?;L*OMx6?n~21?pC@CVB&ocIY{P-#S#_DnmO2 zK6cdlRe3Ik#8&XyegI}3LS8a}?_HBX=KvNvbcfY=sD%XeD8O-sc6=3B=8&4U;aVBLWc_Uuyub)ps(E<%I^j^ zg?WR~NY}2*C3X3y*5#7GTto9O0NyjSAn=`|3hazt?5@`_Ag4=7nf!TxnTD1kwUwm3 z{Yb_wM0$i<;5tJ~Qs)APegatH&@75ui)0120+~pnpfvtFLrVfLIjVrPZrnmN&zUdP z3e=>SZaOar%yK&K8`C*TaUbt>_6zw|+?zyYR(zIgINl&(1C9NVexUUrFCYUFxmq+8 zag!l713F~(stEfX6BJH4)fhrd9&O<{Uj$s@&}dnduOU+Rx1e3n@#8R(J#8lB21k#A zd7(n|*6n!qw~FBIhcgNSdKDPLZ!Gv95~H#%JvoQOaGnovOQ(v!KOFU7qWQTN*b7=O z{oqhV@E1t5;e#`%V(`rtgDV#jJQi3S$qOtpv>@=Ep=E(B2}l&12ypAAynt5t97!l# zFEz9vu!b9tjRjp4FZeiy?A62J*PryZuYQ?DPpHsa0j+gJ)uQr8U*FFSs6ZfblOIu}Z;FZB zB$2iF75yXN*Cum8AXq0f#pG|&f>$z&y;|r&lFnIfwDv4$b>Gd*uAo)s6(mkz{YztI zlv>EgNPaCCBgqDDCB;Zu4@&kJ=^QSdc@|`Z&iY~oRj3xY4S}_F(Sl_w;3N`ur*E;Z zY;!HIZ*RIabix`{SOx646%`R*>O(A^6P>kqM&Z@s#6-|LL|nTa)m%H$raVf@1d)@u zm()LzZ0KfTqJv6Cx8wl;mwR6a*|wFI8e9!c?xsn4f~b7iZs zZKiykYR5Nh5mXLZU3ZLYGr01kH0Me^@{=hQ%z!NGV?iMKAPi_L#Csal8inh=dSw3(ggE_{jv-TdSBOS6TArDYDFTa}wP03Yu-8kyk85 zo0!CCM+Se;g__Fvq z>vdUN)X)^GE#WF8&_a_fFR+MYeG#(6(FL?oHM)>*+^)5{NmcbKNkR*%3WizWUjbS0 zD=VFFw5m9;k?M+-6_irbj_dzr1!;A=3KM>1IbGE94J}Rqxcd%8t^eJk zwOGsYbbzf?3qt{Gk!*P(!}yFT1Z5?e*TXzE;%N;5MQ9I??)CQD61jZcK>%=$u=&RvM81BI`;;@~>h_ zuSjTZGT@aUADJMP>ee@)N!b?T5$%9tmQuKtcAR;bO}GtWp_!52pG3HB2p-CpL1<$X zBl(R@j3iU|Jt;=ghDHjEk)nNK;a}u9D@g>G9g$s|X2p9=9^K!=Ha?;|pE`^AH$a+% zTHSFKRsjp~Dk8qrc<(v!NTWQX@ah_4B77gVoA3vR(Wa(&ib$IEPmmh9gXH49ejZ+w zr%Cp^@y!E!HLuaDIrX>Ulf|`MNGqPYT+r*#jP9nHgOW<8#N(HCUgxk`W)BzoOv8h-S;~Y(5 zG6=|zF@%kRM;N&%@XLUFBJctu=e<>ndpE56Xq#sx%`;6fs`f@Mj>tQdBA-|A25uaf zvs?rPBUf0e?qB4}^XkN2riHwKUf^mWRLD=9E7%^eBgtNUAw+J1o(cqq7ikRyUR4dO zs8>y^CaLT+uE4FSvE{n8>ayy?Ro0!nfIPf)U&tREUEm>47jl-3d1A(^stZZXJOR~! z7Z@jOr4|D#OUnu>luV8*QTK{fkXE;=FwxQF=s@3kU6rH>sUH$p zo5apTw?Af*KyLwPSD3ONQDGG@FR3EpOLdu^llkfSQl@H5fSbcs6TNApMV)}82(&3H z`J%1n6R{!6O6XfBC6~BTkJ0Rlq!btPYdGA`C$!Csm6!*&*7qshQ3=(HMlv%W3i#}z zdh8-j-ryT?ro7Hqw`{H;r8Kt$vioJDqP8)Avg3<{_P&Q}4R$(cFXBoBB^{u+(~?95 zdc{YuP3qs9pg>B|mgh1TVk&6KrZs$uKswK^C6p13syiBGB_@#8`tHQPa2n0JR(3Yy_slO#>WN}Lgv zNC>JDs@LYsaRFcI1d2GBGZAOX1X6wDNhuTPaLDIcmM!qzTDe@^4ee$wFs?$h4M>Qt zWr5p5l*DzpTN*?=goJtr!clNsu|>nmbUH^$84q8;?yv4f$%CwPS>RBT(S22R;VZL? z>Tdb!Xvr4>^+kTHeP86iX{RWm-I^)3iz-Gyv4mZaIfzaEF(kXF z?tYB(jX38Uo-uspCB`{F&N+X1oG->XUtAvNvvJO66P!PRq8_EVLS^k}SqbCXCMcx^ zC#Ze=;ytP{5e0mfX6y;ISQy$9ei@6lD@ekZRo#DECXjp@&74ePdJ0T8wDg1k$6zu} zfSy8zVFW-TfqIEj>@?nY)our3=;34V2CJwj;QBUoP*hXG{3g=ZNhDU%0vZMs+6J(X zSE#HASf+tbmyy4Gb1+|(&kS5C}|>c7D1uTY(Rd|wxFQ*3@u8QCmkBJAI`>OA|sLDQGmbxzXJB{WebtP~UKm8@h{{nL;MIi`tn&oarRG`~z8T_Ey$p(v2iBn*>H1+9423 z#YD$Xqp&KVL^MkiCV4g-&TW+c2>QJhC`SbnI=B`NeaR$cJvAO_N=`6=V+<_{d`n_* zxFPR8e&G5*Z+2|eS*l@YQa4`J)TM2T`*Pdi5bieq4uM(jM0=dz>!cJnzb$M_jje5_ zU?U#TeFftv_Z1AC5gCyT_Z5sFqgOWdm`LhA#N22iZYb+8%Sxy@D%DZl(I~5=czc;u zP|)v;UFlGPTMaF}0_eqI7V}G>zo7*kLh3w&`6FTwwZ#1NOqWcV$6a?)LW%{>+I8KEW?5~M-YuuN=H_K ztd7@Zrp}v&gL5B0TVuJ8EH`&0=>-hvV^0c4hETzEH86zB6H1n zNmVhHgbo`8Hz46!ehRqQp#oQs;HVS4!I1^-HMAfQd^fRCa2*Rb2@8m|JJ&?t))iM< zT5)1(0=pSnIUO+9p#pz1wD2xKO~5O#uAvEEu_j!BZjy?NWhNCD%bZIk?&EDLmifP| zb}d?wv?=pD%F@iTj~8Z%u9)%+mO!BY2FJwHMSO&7$>?-fdKYvdiC`q~fuTi#pfH&G z_`;fTs(=z=apRf@R3f-RD^CHv+X|GU0twH&4;+UXS7J)P0C|CBCETxm+V~jjaEHJ? zww9YZOz=uliZ5?~?S5lxn<@A>$$8>q+*(36j6{5jH1C)SLha*q zwSswl|C@50aUxfGdqbdaN{VfZvc0lv_2^Sy+oP%9z#hG_rGAtgo2l(FvCsH!8`bNl zOKOK_^kiGzFsKu{b?e40%#fj*7`m(qLv0W76Jx^*7#l*y`Wn`SD`m5)Y2_jCZ$Nf8 zRoSiE1klDhvbuG1b#!lmu9|!Fw5EIZ%feUhGMl=G(v72FFRP4(d-sVk@l!Cq3**S^ zE2XSrwFFJ9+9&H<>o=M$NAE71^}lqB0j?J#22AX;DR*4^k48H|&KLwAP@k#kFJ!gR zv?XyIXESmPtfxhh)WboevxoMu%WmRO{^~(~H|6tVz7zY5rG>%qip16|jrnT$We|74 zT|vE_ZO!3yV^~x~1=fnm=$O6q!;!XMRN08Joi1Be&yMM%-c9bdbA5%1TE(u;jjYcM z>M3MxknTc8iMQ0xbLLc&=%dGG1lCy@pj}&AH`5nCp$Ug6s=b?8)VlS?ICgbojM`l9 zES^|)W!IN(BWX7v#{}dXuxGf`g_-+!Za?=4) z=7h09*EbasRgn4gA6hTzqa7;dYSB%YIZWUkIoH|wa5jUiq;3S9jpD4!Zk6r67`9CJ@A;qYz7qbgCKKd6UemoV*O~5m z1~}V&gz~!Q_+RTe-mU4b_o`;Pk2j8OjYB^s6>_{+(|vE_I8+?I+~_Xd^@B2*?kB~m z>vZjYwo!j?)GpH9!$RA$UG+{&y{)ij8`H%fgl^D7y6Eye|Mc>Py7AebQ-IBz)xA{H zq;D7fi=4WbYcfr*bJ2}d_X_`3(s#dlNng#IS$3vNwo5-~yQz}D*YpzO8JB6^ue-F-DZE&|rh;9r+(`8SeMb@$YCy&Zfgc+Ey#^#G)vE38?o zP7fnCWP3aYrB)s5+v7Q*^wpI@~5eix{#T^D*f+0Z4x@7PDh|!YkHvWOb;Dg z)EaiLFv-y63I2^z4X0#Rt>a%)3m2Ms;1tpOE4qBfzX{?wIlF2N|C)5vp)+1^c=Q-+ ztqy9s^ylAXQub6;c51e1doJwJ)l*@#$yikO7TF#f18Y@#4>i_9we>K82Ee($m>#d` zAy?2t7q!YK08x{n)L{2657Tyb;7RTRbIlAq)8SHkX3%+D+(D{8PkGtZ|7`eB>Rsa`@>jpd zt|ip!_Ze!%YQ?{h zto|Ru|0R6$dikM&{}H}L{Xa$T&cEzW9G!ri$!=NyvFMsf*{$mTEqrs)x2~^2jRW@( zzD<1};lC2Tt(DEx&gY_sW<;%2S$nL;M&i}#_sF~a8;p>c$xh7H>XF>qu2j%vBUHDe zsPER)_7`Dy2nUGpUd>=Vikh8iUO(vKtXk{hjmo&H*1CAR@T+UBi+>V+O>NZ0Yiq5G z4~l-BqgxlRuZ_BRLv7T>8*8I3-c%cP@n$RAtk;obZ?(D5{EYCYEZQ``Ec}UDJv7%W zp|X$HevAs57YKjU@qZxv;aW|mW_vt!uET5Tb@m~LHwb^w@%I#dpKEuJ@H-rRi16EM zcR`)aql7>0WLQu5osLJZ-N@czifgvr*&l1=FPrV#4u5iO$u(y0cJ=7>8QD1w*E@i- z_d9$K;SU)9ko|@CsUO;Wl#maNAv3hu&Z3sMW=~Mg*A72j_*bTeA?FG|tZr!Y3?V(` z#52uT3va5Efi&MByqDoaoA1)aDs`IQ&31Iux6V3i?e;Mox9sZr&NXJ`m%9F1z26%i z$ohkml``{Gb*WB4dua3Xy4cGa)#b~&Jf}`Ga%l4cU0h&-4sBkji%YDO@;=h#wI<)t zW;^1$EnqYW?+hdqs}Y_v!qDcWD)&+-zjf_>yL4S%=(=oW-V50>T`9Fnyl=b^!oVh!=B?|t9zhvJe(EB&}JKf$EDHbS5}6vccXoW;&ai z={Q^2ymp8Vr)#gLbAu}Bt`z3f-}2Mt7K@J=fKi=e!T<1U=N z9T+Qrpp|zs_F(5QhV84;TlsZNcUCFi7_#k~baHpfSxY){q)}QWw23^WzHjSK=)n#UT2}{|BIHf_ z_-i5BOq?y`7?9rz*#P8fA=)+A{tXc#XOUCV9N$pLTm0Kf$d`;% z0c4#!`F8~?&ldfvnZ{6Vh6vklWbK)tEqV?=BoC==99g@!I5I7>0K?&5L;RoCb{~-K zxCs)g*0B!*N7g>Y|2EGt2J&kVc)m#RMNL?U_KIY%CbhiCQ zG3up7df9Kz-Wx`#-1AW6F52fRe*jmjiM$!ea3S?n)DF_}H57fH7oeCv6bWm|lZ1Ll z?#SAK{BQFdlCT9rpo%Lg$b*0cle$3zvV~t!NuZG(Ubk4Q`_Kkt^PdA+?v3X^l3hvpe|7oK08s3F{^f4MuS`d(QH`|pjq19*ZuQn{xEMfc zl@DDDWZg0R%bmc#O-OB@(CQEsKY)DwPEE@}{1cUKDT<6mjAJ2XT2ABtmt>eGZ>#A$ zAY1&6GBWK=($gtaFqvzsK>J4wB$J)33Mx?ryO3c+_@|nt0ok&vpk*fIHX+AUa8FG$ z!*`2S-Et4$W^$NOEIjLa#T?Po;utH2mtioIpUYE*HfhFVtJchObptzFisnw38=E_A z+fqa#=U$^DU(iXLP1`}`FOz*4)5#WOGj0~4JNbk4RpKj3WXZ{m@6I#;F&UIC5wq{r z4RmHYR%R-)=@v7!nOuNCnM^h&jm?u?e8$4MH9Aj_%vhQAe&q9q53i@)_7;so8(WgUtG89XEYvkD#(RcEK#Ue3Jqo@8W?!b`tGrg`c6LCi~^31VKl z1Y%x#2#9&AG&KOVPc%pW(x*FIk=&cS#umg2lKhz%azd8}+}bx&Y4GcB)U0J`;#fv{_r zLoO_aq|saolz;21JhQcHVZ@RH&z*Pv$$lwC{Bloio<#*0xj}9JMnc_$(B`|JT`Tb2 zwZon7ZXbuW%1-@(=XGJ1uay+CZjb*&p@oeBxoso_Yh zSYfhusT+WY(4+AZa#LWN&y$do)jOw$gM5(&O{MaC(nB_%s*X&HX38%qfNYs;x4Ql~ z5$Dj`50JQHhq-u@I~61gU+!rT#iaIW${&Rm6mN37gIEN*07Nm#I`}Y%T&Dtwbuc8T zgJTt>o`9uRECeYVou?rnvI`>FvPP%%E-F?02*<}WMdM>Vd6%-*ldbAj344-h)6bFq zMWeSPV`VYsI4H-{NbV#kQH<$^uw6BW6k|RhOEHE<8-ozjU?JxBWGKYs{t6NVnT8<9 z=#VOdm(XpR>>EhI*qjJ$WLEEVFr_HlI(TqxpOINDG|XR#Y_fZQRRe*{jQkY?sFxXz z%mxb(nMODA%`^@n-`j*IMmCXYxfbT0p7~7+d}Hr1nI4r)nmb|k#M*k*)oIdX+Vn$= z8%kZDwjd9JSVu%P0dc%Gx*@^LSEH+MV%Mt=G1uDWiIP!2g-UgDvw9Dh=><1CfO`ki zoBiSeKAV-EBN}zn+~E{7&DGWSabdoldd#R4=Cd8uQ9jI8l+Si_4)QvT&K*HN!yrEw ziUs+RBd`XlZoLsC3i5SaS&-j`yqwhZ8I&-{i)!Lk2l+{4@R!LFoSY7Fkg(qynd^R0FcQN=3C2Q6&C1kC(o3S2=w}uur4aKtU$j#41>g=K;OPt z^4v=0?>7V^{~q}oxU7Z!ycURN03qEBK!&vxPBYRMox z6L<^IXMk9M{u_t|=ubf`K!3MR5TNVE!~*m}1?WBLP_8eQC%v|xsVlvi%IVac!~N7k zUiEe=Bx50+wo{M7Pt8G4u2@hG=6$f8@*EoFU^_KS4WH5$gyikpgOGeZ$bzoHcB&_9 zmG-$}Jc4f6cIr|P3udo?*mi2Z@<(!I+o`QUESRlKMG9}WOl+lt)}v)^r#y!wjBTgJ zQP5^f>UJv3O>C#Opqx2RZKt{(o?%1Pc{jBd;>j`km2#%-Ns8#MVQwl}7U||gu}JrC zC{d(4fEDFxKGN;FZm^r$6r@wA>kpyxZpsHb?WSh1Iz-L3n`*rR)@nx^GT>-ikA|VM zt6eOuzc@DLY8&ts=4!u!*<9^5WJj*{5y*12?YirgJC?lA&CW)c$jufaA328%^LDnE zsyHXx_6=0rOeS|Fm4uE~RI9`sZAVl|7goe(o^rJJP{dVZj&>*(Mo%(XbF{_Sj%qxm zmg{H_fT8n_>NzO5m%z2g_ug9dhPkon)Alw+Gz_`#kSp|???5%{N!d{?ByW96j8-hq zt%83HcT>tj!PUDdkxemvb+QP8&4!pHHcdYF8L^P>jvL%=YAN|9m+ht)%FP(c5pNQ1 zY_D`kY_B9^I250J7n$ahe+Obdd4CY|$?YKKlYd~hU_SX>5cA2mgE*fIVm`S8B=pI% zRJ(lgV}k>qd^U*r^gdiPu)MvJXNg7McAe$rPC#heD_uJ(aLg;^oMUcp#sYGa>C5JL z*W7I&wpV%<#P&*h)G0TDt8lM0ok?L+$?ugyf^|v@;!9yMSyT2(K2Ji%_DYxgBDPnm z{PNlw4h*;8v|nDWgn1muk<-J zuPjaby;4X}2W_wPJuK#E{9fq?2sT+2A+i=UThF4>PJ1QK6pfGVmHM#Wu%6gnDd5SDckzjd8;I{iSC`z0}#A3O4};w#i?c)@vV|4Mke95N{@Ty^sQ2uoxWAl zTl82yIM-?`AyG^?zfB4WX1UrX)%FSGi}}npPn3MIZBlo58>KS*=eqG_Qk&0-2HLhq zgDGIz3b#jXy<%~Dwb9AA9Wp3xf5`}Tj@#2@&KIo{i`%oHSlpgMZ5FrR2Z`eL=3H6a zo~xpxC>qA??GVPqv+YqVZs*BJ#O-!H>yRr_K^U{ohtCGrVs`8h^(ivUxD>OGrARDh z-$-71%wFo7UDoEPo$+LukO?+NlII>O4>w2GkZ%*YYI79QLofViI8E{u*c>f^SK7$E zOoc3*FIuI)*jQ`~*M_c!4AIF~=3 z3Wp!UwLOIs)b|>Fvio}Odc@vb+kL&$?7p7eersYBvS-)#Z+(=;?e<%H9@2=9xHOS} z=T)?;cELL6RS;VTT?S(7pq)W%9W(&M)uFn zERkk*#Fj{J3`f^GYdsEK1FH9EX&h z6|!whXM)(ep^5x(Tly5sPNtF_pa$z~>+q}4(UPqvI0mk|i5KSDt}}@Kb`1A6We%Y{0IU^Ro7D*`G$2*yJEPj0m62-6GxUwU@%W0TD7I730W0l^g2b+KAIfx5Wy^|Szkz|$ zE`ph{bZt(=tk^y9FgG?y+Imq0t+9HiBVj=51GOHiyN_q5b^dgstv`8NtHj?aVLQ(c zLBgGuJvsYbH(3*m@6J#4qWkeAm)mH4PvK*vq8)iF9b1H zyjmr2#p{EZE4~cG9Pd*g=6JJ{1IN1_NSeQ$0bM7DxhFy7Z*zLY#%})&2hj#McQl9| zsjw$0USxM|##F|V_a#5AGT`&-XygoerafdC@t_KNzxk(ThOLi%uaw^rC-9hTf8atyOD^S#rv5aZPTYP28vP+4Rzs&zgzc9TTkuC}pF_|VTN68X^hvk<#bhRkLA(9>a9 zLkx5Mvk)Ib=^;w$vk+l!%=+8Dp@_PcJ7Uk65B&jZ0@3!%4nZcGVxa(6DpLjS2O z(^F^vDRL+OSq}l_WfK0ghtG)or#=6mw=|kO_)jcUcT;n7P6>Qv??Jp~mfCXvf#Q87 zCmt}3_`^oQlKARqNj!s$>@_TjpCi+j#5MFMToQjlRYa#1UJ}nyb=Pu6c<&~GLp~kE z9P%C@=8#8%*pj#>h&klfY0@0>4It)_PXq}a@?upghrECS=7+mX2>kGP5L*)O4Pt)y zw;<++?*uVF{62{J;Q^Zlet2^b^TTUy7A%P;g4mMya1is%*MgX5o)2P6;>OK`CGmKW zG#7m;baT;jK%yn_oGk+P%sm75#9OZ;VoT!hMlguFJ(2qu#_-hei)`ez?Pgv`z+&B9 z;_lc{QwH5cPguBHw>`^Y#@N_``;DE2m;>?Ydu{iTONbod7 zQ|yTETf{fF$kPz9ryxW|)0u4Nqdk#LUVpUrJp^?pZSo(xrl0w`J=j!5RDKlW>`2$+bWXUORX?2Y3o@)*ouck$YClW+Vbq=JdsBVK>@_m@bB`vB zph)cW?IB+%@n}K|!@bZP37U~+gs#g%85r4LVD=UzJ}ArA#wVa zX&c9=NsQdJ)E#ba#{02PoVLN5Y5M`kdX5V9y%2lCj@m}GWHP&pG9F449FIln5l@T{ zg5$YSaGXa*_B?{)Mm{(m0}=+uP3hQw6C4+*x(nE??6`Lj9D9OTaC~O3AUIwCV!?4o z5DShyK`b~vvu6+-ZvY8{V-r?k!SO)qvfy|j$X;lx^;r-Lj!pXn!7&eF!SO;63y#l% zSa59GHwcd7KrA@E31SZ()b5AMaD%y#AQl`C1hL?FGl&Jp4?*m_sQ>=y!SOQa793v% ziGt&x1A^c!oR&hmH5upxUYeC2apgtYUb zwbw$Fd1CwsMhiaMpB-#@dQ-x7I*XJ)kbK+eYz|`K=qeZ$j%=5l8=8Jzv>|i`G1%Z# zs?LkTT-)FT&j_0T+mv!N>mt<2NMfDaAH+ImF}39DwkVYM=S2+!nB06gZLc#OCR`KG zNYd|UuhR^ZMWD|h+j-I7Ky0tG$$7zE=TImXgRTOxz0N9R#r8TEuNlNud~WNx0awqPw@wJAs%@VIt>l`SN})^r9BQ4a zj$Eogm1+BmJQmKuUS}hUg?k-ksn=C!MIxJK{p#Ug5LOajOcI*~8KzU6GNQeXS#tw) zW=eE-%}WE#PJm`H8rkXi)Sn(0_|$G7=2M^eMc`A<0WqKYQxNm1-9XHzK5;j0Wl9+ zb4cJpw*WB@dNN4buHqBu<~VbQ#vSK=hXs!Fl@nrzK5MjM;)}auq1Tb$vJzMQdvNtJ zS1#b$!s^9Uqs>LkP(pHicxF+_oA6`g&STz3gU(U5sp>s{9XQHS(*j3%0muU4g*nPU zVyW$UF>Zch;2(buVjlAb5Ob6VDE~7mGDo>8WLvJk1|pAXCNimCu#$+L_lh3~{fz9$ zUsfLog}I3Xq5UY=sIG+vLcI{*R`Xxcymb^Qrb)sgIkq~Vp{s>lMSk%PNahz$J}K~v zyMUNqd=|vk=2;N)i(^5|FWv|e^NWoGVt#S($=)wUUx*1AMJB*Z|>|v zuT^0SlRUp^?-jTK`z~WqD>%MEBcDW5O%%y(f&_McbNF$A(|rj-$S;7P1G(SL(zx<=@YhEto$6v4Aj`PDbZ9y(5orCuI6vIP*&q+nwJ) zp}I`?ZI&G%FjVI4TT9ettK;z?rd^YGKX^>y&QD^^gRFNY<*tF-R>&_ynL=f`_T%H{ zG&}d<)JkpWoaS1xY?b_Lkl>)E(SpGw2nq(#HzONk$26a=68Nsp$220FU+H{IBeIF? z{mNnpW__rl>Ip16rumlqTFDq5(=7Fr&c`$%*^X)SQv%~CX2;#Ok`Toj@<%iwAsht# z3V_*;Kcd+jf`wdsnB9YMM>7@3)`{?F=J39;aJUeCCGLrM28F|iVCWnUXUK|nV!09? z&&+{h;c&vQf^c{}NE8mcb7kRhzKVXrRTvJ>rY#e%Ivid|MidT%d&2FDRY4!x4#VN& z@R_Qrw+T(C-t?gdqc)^SY@6@_g>0Y_0dX9qtl4D+#Dif#r5SfL)4)8;9Y^Ki(aa0v z+q9214K|HJy3Kx_)qMn~36XL%GmIuwOKui*hY@omR2%bX9}#*m4q{HiXYQ*)FI<3| zKq+nKLfKiAZ=tLwHQA@X{_jo7?sV!TMyzi7v(vKE9roh1>=h21KP`Kc!`_&dy~|+> zrez-n<1wq|rvz)KH_v<(Bv-l+9e}L&7CI-8;89M)_hfGlULj-;EZuAmEDgN9-ZGA* z^X|1lj>)|$D8TIjC5JcL!%276>kHJ)m#fm*^FbZT%$?#e|?^q}&-odZ|dD4x02g8ayxVAxYM|YYtE?cNMnxY$$G8?Gf zonBHuAG3ZAe+_A@qmR{V0ES=Bwe|Ed_iWmJ(}QQz9&^v8ZOgUw^)Y)p)bO>rw$29i z_2Ali>#p4^Q|8qVMK9LVfk-iwl$}?<%E43TwqR=ju?5?U)M^X1 zD?q{p+X1Rw3$}A+Fop0ot^0s%B4iT~+ZqoAu_fGhmj+9?=Rs^od^3nG;Z6pzCER2X zTf*&wxOTWW14Jvg(RO>eijCs$gBcpXHm zx?JhE!GiAu5L+hh{D)xSw*4)!h1(YlLi;p&nENALFfTL#%P_yx^)l~;EXw^Aha{h* zGe+*X^o^ayO@tn1<1zgKiydD)N#^P*XA8NKE##O(4?}hb8Eu{eKQ$_NTy2I#`UfK0 z0`JLNg9Y9akOlP5cGdf^uW6qn#?R@JmQ1;Ru0%E)BXO%yLeA`w35yTczXOkc9 zsyD%Ro1?Z}b*Yw1IykB)(Cx02y49#`63O$+P+8~x$L%J+0~DTM5xc?UWO8F!1YXlExD%L9xS=G1F;SGTo7Ax zeNGA6fDeOW8}Jz*u?_gfjX|VyFQjOwUT}o@x*Jq8y`l4ZL%(&E%ikGWZ;X>r+J5)A z1H~eE>(wC9dSemI+wGtoX?Tb_^#S?ennToR%@KPDqeKR^x$mm>q(!%6XwOT6kz9wX z4t?9%Vz;e2Vvk`wPX>P}n{fTCxD~NANAMU%`vI!@uT*_6!`F5q1~`b)W3t7+ac#3i zwC<|$&bqaEOGecs33KC#@$0PWKln-N3tSr0X->+TFd zk0{?rM)rBa!%@Er!owsG3lAeeEIj;^auyY?fMQYM1}GL4ehy+$VH1!rD(FkB78SO; zDu@b0K`bgPofSld`$23!e-(%YgS|j37z_ciVDPV*K`@v@!xjwQ0*Qh_{pImsuoYJp z3|{_y5DZqmA_xX~5DNz9gIF+l1jGe{D}!Kg35W%Q8OUn8_-R+ig29Ival5{So0~#@ zxQp+`>@zPHbNseQ4l}|L4G57_2elot_HCqgSpCI!j&Bvtc5x(+EqZpBZHl( z*=DAHogd7eFHv{A zJ~&KXtgCaliegy2gz-#NY%DlZj>WUCWHczF)8h?$s{OvSA4W6Y9G>YaK8t4MV>K}LhNc6_z%2#Q ztRuFA){BQ2hTurqN3&y9b=}QDG`oa4w}vM-5{ly4C=l$+e*^V;2yHjQCoyve zL3s#DrcJZZNY6rgN~Db4lD;&)8$BNJJi|4*O`V{Zy`%*gXntl3SHtmPD7ndeQ2mgCl{CLBG8QKx@>q2>r zs+Q67?pcm0W%PbsC{M&{yWr{dX{KVCTof8T7wR}j_{hxg4k{A|Ly4S(Nk!;1*(Hr%8? zlr{KzS@V3Nhc2DB60L_YpX$L&=U)ly;mhZmogNm9rVw&iAcuncg7x$Ck-Yssq)}Qt zz(NYpU4C4bMKeYIYS=Kd8m|7xZYUu9kzHSswt{3MpLq>2`ZGJW`YBB6_*X@moVtj3 z-loZz*_TML9iYEFqXuS{w@GQ3_?KtlJ0}lAG`Jj!*&o4!D z06z*i10cVMjHW%riv!{OD`|)DI}&UHzssh{#^q>*2Fg1;Cxi_wr!mT>f&a0hVLN9n zCdpnW(oNoj{d3OI1$;^mf_5gdR2ZlT&!P-!XC7hq3Y5Zy^~2GKdtVuzu0U z*C~bWv~NVc7!g|>CmAbFu)n+yERv;t9BKW52}lpO)>mlvN|E1nwjQ61P%jl~Eeq*L zc1jMV&d}FpADpt9=nTC(**8UAF>c=a+b>04?VItJ$oEN+*O_M|Q&=4(;XBc-FrUJpg`4wkW5rbX)X6V=qBm+3Ib_v}~tGY|B=emQ5q9En8(;_G_xGEo05BE+pe-BG z=|6~|*Rm%P)RtWaFxFsAT+9CdXZnW|KGw4FGfpPF#>TfSn^>=9{R!`4!j{dRybsg- zQ0k!by#Nr-_s3Afga{%!-{Z|q7#pAadXg}i63zDuQ18umCmEK8RO((1k>q*u%B;xj z6ij=A*PAJniBB-~JrmsaA;rE?iY)VgZi>8GKj_d{Ch-+mew}hxq{tfrTFa|(VT$7R z8SN!-jhV}`9*Hd12xBgmsadeME0*;lHgAR$WR)3l=RF<->QYvj5w|~KeRcHhX2jh~ zyXak;+f(GOO{XD*^;hh7nDkp7wXcr0;gN*(82?U<@4TJrd?VGnM@`ZZNou$5R=d^t zTQXCdcCTjE<&CL4bwQQnV_=a7aJ1D=@S|gxnG*q@0`;&y-@(!T+ay+P)$06mv!$1u=ynGt~NBb$^d#A^Dy8~G)MP%*`C-O5BNklX9Knf82Jj@CjpNG zIY z0H5lv*>QpwMCykBRrCl=)S)vKs+}ugqC?bkAmqb%yqm9Sf3I8Hy}KPDab@{ zy9jhx59xmd=&?mMs>4J2NgeI3motg3Nv*}`Xyppw z(^BRPp4Vb}O9FZHB8-+pc%sd7zItP#gp_+oNc_}^tbK!i4At!IR%Oa51)AUwF(hFn8w5k0u@o`q}I#eWvg z|3&%lBvA)l=hlB2X|&(#I~TtSf&C@7@LW8Jv8em+*g1hW4Z>J&8e}yi2|G0&9;G7T zA;5lcwN$Y~0JD5#61E|3l%#01H{-oA;7~w#E-uk9%|mgqIT*6N%*_wTk=Lx`88|!a zSD>If{6?ZjHpQvD)O?BijgKvfp1qAmN*jqCFspSthOKR#FT>$YY-{01*0v4+gtm2s zM2l^`8t&m}$$T21w)GQ$+SWZjwzl;MfZEn+0JW{l0cu+}0Mxc7e`0Ox!2q?b1pu|J zZ9lcPbtph>>)8Oct*ZcPTekw#wl?|9+SZ8xwXK%`)V96?&|9M^JFIOz1faIH*XP!@ zP6McIy@`I&L-03whkIySvwB*?avg2gSXwx-)eNKk9+RHAm2@(B)M}ni9%?lU0LE&r zm3eU^S*q2nZfULNazJP`pO0cS<;8!|gZRw7TFnapa>g5Ni=bM~j8=qxhOJh!4I0&I z9uJ6F&93$?N}Sc43_nE*sqcUE*HvOP!&tp@X@`y4%&DZqM_Zd|-ld=mW@9r?b!zpj z*S?3J<9aFSHML<06p*h8=%%Q3!vw{g@Bcm zG`b1ko%g17|3`xvMkg|ubEK5R`F2?Nq|{O=lAQF8-q#w;wSbtx>`X`v<^g0Yo-*2q z7JHaE&20RgqXn`i5y*C*I-^o1f#>A^!f&K1~JJJQ^#O#BSyQt zK7*OUpbHJAp5LyQ`eQ6J@1s=WSTnB#$ZlVMTeMxG8UC4b;hN2U)_jySm6mt~UT82E z!fha>@*W;G!-fw&5I0a#d`1d2n5|hXh6Yoj$uQnvhHQWO$;skXE~_|$c|H6lqURqC zro1ao8%Ygj_y)Q@7=?vW#)~PMuC=DaIYu}S!09Umv1YTZ#`xM^w#5FEQ$5j;|GAyFi#X+Vwewn${OYY z05!~c0A1@Y0H{5_8KCxfGeGTelc%jc9thC2ZVf=~@e+XAwY#sjq#=HygQNu_O!-W zzJjQu0AuX=?2zq`0x`meBHw}@F%O;S4J+#xv**x!(L=~Z?eE6V?Y+a4ok7h0-q)1Q zTrGlqow)Bge)wJx=8xMlUBOs_>K zU_LcfLtF-@24&In;KUZLzrYUPqWA()cH!zC-8FBVUqM9eg{%J>-hI=oK&Br zdRMJgQmxDIAg6w5tMw5;s+GAPKtITG6hN!CUXr(^WMS3jl1;2?-h(UWxFYM4+urKS z-YyF6_p2ruG?ymOs(EiRTu20kOmMI8cw%Bzn_ylYoOKV}Ymkp#{WTxcC1n@+){Jm3 z7cEzElkaab)}Gr82z#zqBv)PJgNU{f1z9KvD=6Gp1-+(!h6pVm70jGK68mt^E~(-v zgu~wZ8cFpnT1Bso1~jR!ihB@Kr;1cbp0~M@IGvgGxyf}1sP7H;6^AyphhPc!6=AGr zqq2sQMAlK!`>9IkCda|mawXVT$VpVOqL$MiglM0OarJJd})()gNp#_2Fn1U8|*Ji_3UShb%T8Y>iuQ{)cY*~ zsP}sVpx&?fJJ$P+1*rF10#NUF4?w+N%dOVw9S%^ZR|F`*tVZVpW(v3saIt_50P%k2 zY0bzs>-ieLm)P@-fUll!3qbcZ=f7_~-{cQG&v$7LnovB2ylP0AQnw*>Zn%W8e*cOC zTuid4B$F3d%^(YP6uE$Bh|TN+5RZ}N+=0cd&zd|A-C+Z9y0Q)=OMc= z1+tfl;9V43J>;GrS`YaSKzAtXB|Zg3>LHH=sE0g{_|QXMz%v>37$1R7i^YEYs zo!Gi2Ba?XmMbW1+bt9bRM506B+Z)ExWN*8q>Rin;cxJ0D&NYlx=V}M9Zf@Qs-GMZK zI@c%Bscm*6K-=tmfVP>Fi_U;!+Dskq-!5Nuyw+{AD3n&1N8_o}y#jN53YkP#z==KW z(yTT4%1O~-zuBiO?f8wEo2B9Z{>M|Swx^C!G32XF)>qaUv!_nR8)UU z*+NIW297%7+y1cC+Mk@&5x0Y*j(8kEtF~E^k0d^FXi<~Nm_fkz+U?g_L@71cBbHqm=zl5fUZurY{#KOHm8b}=R!NjN|ZUzW@&NWMCgbwA&GUwspyE_PB`qnGmuQ^h@WyQbQ$G8m$aOiSnt^? zGGxUO@5!OD8i4v7@gWFEMPdhhx4@Bc?L7$OZ5F~<&sJvLOA;J9y+u_*N4y4ZeUA8X z;$}&ThJTY2!!_CoAUAiSIe^e3i<}N-c>*?e(igJ5Qm98>=kk$9zMQDhnbXM6vxiP3dI@~*0h+%^s;SCpy!LP1Jt88+h9F<6rdjc;@7Q5Uj)6P zLp=Ial0{{3i%0*7ywp3r15oeu6hOU`lZ)O2$9nVy(m_2ajqZ6VdCxN%fXYo#Vy(iB@A;h6?{sA`EoM+Y+QnBJyhlg(ASPy_or7H~s`DsY=wNq9wPdIJJzTBU5OP)r zyBLl-*k=G*wbTPiKA-r||2$BuYMz6A(iOSZ+95*}bZh8Ut&DOqL+b8yA0r~MgI!ds zYRB50?qLk^8)W=^loE;UbcK6~s22x2kQl9EIw0&h=U@jR%0Hf5A~vj`aASSvIoL5o zgbwybl2`}ZU#j>d;js5kLsBPD{2Jm}r=qTdB_`H;wu;ul$~US1(ZLQwfXQSWtR4vG zQYJkRUP#mHfp8gM0h3z~gr`e1b}Mr%Tzeq=B1)uRqBp|}9qh|+V-D88_ZnoqMqII^ zc$yUIV1EFFepRB$Fn*^SvVFTLj&qaCDz?+rACP?J_;^KKzPF&QLg$veWL;qQwb}Ef zCth>ztxJ|Zbi*@vob$SqUv+OwrTSmt-a36_-CJWo=-$>yw79q9;i`MP7@+R$8GyRC zZ2;Y{HviVTx1j)aZ*u|a-tGqIhV>QETldxtpziHNK+L^eN=R>l_4y&Odz%hl z-P6~fqjhg10qWkS0@S@d3ecn4F~4~3?UF3(-rh?8C-)Y{`rRb%Z5zo#_jWy5 zsCzpbAYP4c3P~q?{IhjoefcD&y08-gp$j{t1A@)kA~@hD+L~Dvy$+x*>?R7UE^MI0 zr=rMgN&)J^t_6fHtUa0O@Qia|S@4|;!%WHyuuD7fXJKreW7~eD+e^kQel2rDH#Zo3$cdb97z$e8`co=uEC16xi0YDsz_ zaiK-rL|)p+@!Q4sh^Xt$){BB<@(%6cpmz3VWV|=KjEI=Y_r2K+Vq*5td9&@J`c}#o zdb5Bcs5cvsW~;Rlpx$f~a_Y@e;b_$|5RPsm6jp67vWXdc&zrR&B33oGUF)EKRH%Zb|T4OU+3H{hsxVq;}aALci zxI#(s11Z#xwcrt`(2q&9ST=nd8yK)h7u7f0!o;vx)i)iq0i(eUk7BfO(S8xZn)Z295U0`~<$98Q%wpxnPMF7rfsA z5#xDB1Jv`L1yIlX5I{GUp99qM9&lj9c;2x9^}Oc+)bm!gjhJ6;UII|h`w&3gt9Y34C?IYXRzlKLE6o-PbmOqlj)&55B>3onMT_!C#Oq`LsJDQ3Wi8e>Q?i5FMvu^fgKE;Ux%f;#H+ho2U-EpUE(JIJ%()w z&|TsPfbJ5X1bDl|1sFFq-m*)~jC#AoFh+KXO^LC)#2r$SeX=~i+6;rIe)TM*)JlI2 zh*{~Ogw*-;M=+Yz!?VzLl0DV8_d~s7*!zia7MdS`So@qS3f}7J+2>ZYy~@QqpNT{? z6V2>1GJhk9w@*BRIL)=z9ntBcd;+BlJ?mnrnCuhNNUs&E0;p%b3_10zuK~1jYb5zS z#E0%@2X#maE9d!+?-N$;by09V4I4Ti`3YdmvwHqZ7Ra$Juc~nRwcnBLo11!A}NNELOtuLfY7r_w63IU zpS*@_-yX^iQEq2zRx!`2JH*Ew-|Y}TfT2AkUX-5%xEr6#nzJ>N^89?LeLUzUI420F z^I>tD#L3bENqDG&j@CmB0E8ZDjzo)xS_pRpjh}flKsSl60Mu3e2vAqmrjvD5LjdZk zN&&h_yaJ%E>Is0ls#aaBt2zRpuBsTIu4*YjTvhZxfL8_l0?-{}+pdY-)iC(#u9gGT zT|EI%cl9ygEJjZBDmq2oRii$hySkMY%w9}2qkkhPi;k>^U`?0S%EB0%EwwtdRni!> z9okx9`5h<@t(4xb&!KIWoQiu}hxTq?>(Ki4^Bmd_7`5zuSt3QpQql;$9K9VN+r?-D zQm8{4F7dxpC3R^1(Wnk>3h|*s>&7%qrXul=`wW1u6Di^2K4EN~ed7_NQ)4Cj#D5esr7sp z5VM}638_<9FG<_?_blgaWUup5caok>znchcn_7p5+eJaILp-}FuRlSw?sjVd5zgb) zJ{LWK80~7cn{Fq$OH>c1Y@xr)=!jbJcYnauY7M5=>hI2lqyBC!K&v(!;pigbL#Oa* zt*UwcPF`@VMoz2dc9N4t!LfeT^63{XXZ$Al8X{s<^Znf!E{Rsn-FSQ&?g|+`Ss1zS z2_WHKCM_p^Zz&mT6;B6*J;%!()$6^8=su$0MPkDW3OCkwp4Zzz1QSr7-pc%jB-ZQA zkt(K9hS2ND2Rg6j=lZlg{XsB z&wetD_3T#GH6)QjM@LeX(Cgjc%9UV0c_VQXCB;-ysMot45PCg{PT=)IwwJl?C+|YO zp_Do1^>jb^9DEv-Z4|G~T}KYy_COD+wj!WCrh7^Ej4UbWm>`%YN%K}PIwN~GI)p%{ zCvbt{ISD_5LF%-Ea5Dapu>L%4E@AzFq>=A@BH_P8exFA2i`c9~QPL9XyqSn}NqAr* z`8h486J2S+$j6#Zq_w`u?vqCHpr5Hw>l{h2!{AYZcQzWm0vXNk zi$;y;_ttW+D)Oaf(R!}nuME~Qe%0%=)YXMHO5C{`%6M1sd5YU- zd@O;5saoQ11TWIka4ft_LLD2oYrt@eyqDUprTp#L*lO!RNYwAQ3lO* zph}uta}?WLhpJeH=6YmfX#+{qOEgR{Y2@y9$@t@K;#NhU({w=NX?s16L%#*b?P^GZX5gAU>uBaMFONnVCw(cs{73_ET9WqWGU4x$qz%z_zG%ENayrF{v|c4K zcSb~0d-MD7)e%$q4i}4D3zu^X)oOBXp;}GOmapTbMUr$w#x0VtWzzJO)V}e5D2qH^ zhf(Yx54}ddirBh*6_IipjbCY|Mx*7c#;+pUu^mYtyf5=RPuy!{abun3OAoiFL5myf zca94P>uJ#9#yZQp5-!3QJNX}&%m>P3HtD+$pnn#lJ91g$CYd9Thy+K%$ZP=^Ct%yZ zBEd-lZUvkyU>IPQfVP0M1yleo5%3FnEfcT-a4R5t6`G@GqwE1f(T4y}3)lg8SwORa zkzkX6{(z4JoCEkqK)XSa;CBI~fJQd}o*5ho_7?EzkVw#0zK{o;K9vKM^7V!9p zNH7@Ca}57wQSa=vQiK(-C&TG}(uyG1EY%&I+A;Iz;gMiAjLZXxJ_isT4!BgnJiu}Q z3ceKuCn8$z6r^@SL01%{I0ajWSp_!$R6%#5R6&=K%)`XgZQ+63`nk2B5D3sYac;pf*X3yQZczUt(M&YVY@(z++(yo^Ld)odggO8K$pLT09o%w&j9G*&nEym{Nd_(FCFp{legz1fJJ20 z^Jzdce3-W9QxqKo5Ja9z-M`Nb=Rd=EWOz zntr{M^Yq3YGVd5;n|>NVn|>5PoBj`qpiSQjjyC*h@p_rC8ZRq< z58-#{NSD5luzs}N#H%sOkdiFNm?e+1#%wrJYRuY`of@-k05xV00o0gX3{YbhMOckl zF&s5!hXd4@^+$8G4_eh4y*u98r=&bW8$bAT~ z#%#VQ`1kRiFTfi zvmsx{tla^qG0VpKbeA!!#w<6^n5~v#iZM$&(HgU}0BX$E1Jsy(4G4|d?0+<7>qVUy zv%V);V>TbKP;A%}fGY)j2ndbYVYQ4|ZoDzuF8ain-I8x-R1rXD)Chpis8oQ?sDl7H zqs|2Q#w@RqHD;4jtTDR~jvBM;{G*ixo-u3Ig%XJ|I})z;Ya4*}>$=I- znC%2e2Q#v|ARetI92&EMqCkvUXSk~1Pl~Gw)&g{3jJBGr6__YV#E@MAUk%yqfS4hZ zQ>mCC8y^mekgtPcyzy|^l~SY&DRd`_7`+dWEnpMiUjXA|_QI&pSk}_j>6gV)BC&Me zO|kuQ6+ru?5@7lTp#9PVp#8EIVEZL#yDkkCBkgAALkWyB8u&`gZ8kU$ zQbpYN9hAy!WX5_MnQ^+2F?*2-W-p>^<73SJBO=yqqPKTBR`s{f&`n2vqq9)jKBK8f zP0<_(=_+xi(c4U7YBZ*OhHhr&tK#+h>XE8tOxADU}=K9_g-WcjV+7>UkK;}_(eb~K=MoUU#B~R z;2<(-A<{QvvKJLag5EGQ%K%3R$OVi9bPbNx{|oj13jU9lqvlirp8_rra2vvx3wRcA z10ZWS+CRe(M01KG!Ci2&*T|rnM(9yOT{_&wrUjY3p-6F~RxF|phZS9lzz6^;9^=1L zM8!6gz98Bg5c#G{{Q}YZL6Lcq`WQ|9fJ>c~iWNLa62As(J85E^U}_}z3XZut%AbZT zz9MAl{&jDvidu&(a!G7fS9VRevJek@^G<=FJ<5MP%ma1X8f%yjDz z7Xj2Ejt8hiYy(h-c*`{F5KjlFLwpsW4)GX(I>abI9pVmY%UvYZ)qS@T>*G!WsMk9m zpnmWkfUfR;1?cL&?+oib=L6KAZY{MA@z8SX5Z?pnGXH`K>k!{Q#dC=B_Mkh1Op5Rr z?9d_Z3r8JdI$Skd{Q+vWrT{KoL4qp))*)tzf(I)-hd5jmh(nwTR}~xvPz8Te5LIvq zoR~wLOE1$Dy1MV7&Ts?qo-^El0Asw)%0A?)-Sb!W=Q3!zN(yy`b}mI!huE#!I>cE3afoa=t`vnI z5?%?=1?HtBNfU*-wjUqw4(CV#)g9J2cL*@<5MazMz_>$zafbkFc6CWVAH%MT{AW_F zJKO}wUMyW!J=1elt0X&hRd9`~LX~#eT7Y)hXrfG?>wR>Eq&o;2p` zX~LIM04pClgg&C_X-rl&Q%fDfJ^*zHyXIJjFn@l7Ixe9lk?ImI0jNtDLpt#U(USq< z8?uh0xIc?Y{t1q{gf28}wDmmCC6pl(?-E8KU|qt?M9&u$OHiRMVGSU333AdSx0#Jg zI96T4G?zMSe;T`&Bt9FKx`dGPAe=at@Yi1G$!o_UcVx3^(@m$^Hr;I6^lrl1rkhQh zoM|xuThB(Bx`XQh>JC<%Y2CpK0Cfk) zoMqk00)TFv9tWs5`4*sCr+MdCzwq#R)>BM8-};Vi3p`J8C1W(ZQgZGO`!t4rv;?pK zkiA&gmlC>C*pC2K0*F{G5eJ|+JoZ@+M;*fkjHOQLTL3zxrvolsL4scZF~@KTeSHwh z^w_6Ay3{$$26)cl9fTO~b(}-U_nkxbb}bgg3?1GsDVFR2r(Ix+btyoL^(a7#^##Bf zKiz6AA-|rIrFxfRV&0`o`<1*#i3P-kj8OG3H!QRs<|lx9nAVG|hZzM3JxmFS5}qBY zhq)5FHi&wvhq;_|r;|_SdjRz?yq!y3%>EbB{KTk>k^AWwVe4X!iFYy0x)CKVW+#bG zNkiT305yjf1JoRj1gJTj22gXj4xr}HI+Q<{0_tM!5FqDBNdVn(MX`8zxtP%l8DjLZ zyO4kMp^H6}KTt{}CjUaXIz9>j+7XQb(*Dt&0O=71*hEpV<|5CHRf+;}W2JCa!61Mt zXb8}rybR#Eu?3Pu+}NA&rDD;q0Wmjr8MV>D6?b$L@^x^z+o&s~NUu}G?`1Ol0{9D% zy;j(n4CXzg3dMj{S_SQ<6X|vBCOvAZ(@mSDfa0}kF16jXA3(e52NW5v1<-D~51`#N z7#Z!RY&jB$E+ZHoHD$n2Z?)M9MSlPoZ$-PRD|$^%xbp^y+5E_u!9`1~+5E_u&B=t- zY<^_SW>YbEQ>gkW|g+WdJp!`(0_x z=sYe9@knky8jKH8Er0Rbh_qzy)~mt z0BS}T2>TI2YDRwqSTnjxBF6%?QQJXl%h2@^z$#3pOcMF2xMZ=(kcVF{3wMXN&b3K#R2tpvCG+0?&-f z_Zk@9^_bCPv503mGdgL7HKX?f4i@9L8K4XG#w$HDTKSJ=^oo=q7(zYOjOLO~&FFH# zLQ%O1aHW7h0ihkeo<#p(M^mHd6Fd6Ijdp^b1<(mv4A2RB5I`sB5dfW_*8+Syy0@&* z#e6nr&Z$A|CZi<-<|AWO@EEN)qGxQc)p^Z1&3atcah1vnMLgN5hp~eVnh1B-HM=j`ynC%Z4YWvqp zF*9%VO!sEVR803a^yr{|0HC917C=W&G6_7>{jDSs(>(;fn(lmn+A%G|TNu_vraR=< zGTo^?C{m}}Ja?1Kv;`n!ku#nYxR%R>UW-r{(mubBf~Vm?$15NEw~-9YB53^#Jur zCj-}=hWyC&lPWcnY zQEKi4>xy2UK))89x}txIhU|uy;7MBbMEq?r*o0HZ@Kx)%;{>Nby34J!*~i@1i!1;rqU* z1w^j{sL_5DphmkT!p;kc^N}Zl)cJHqUT+4U3Q%kMYW!+GWT-`-BVC*Jm}k)!ONqpy zKSd_mwO0VNYmWt7N()Cn2AHv-XG*IiiCFZGC{l|)5D>HIdr=tOQRrg)m`2hza;6mW zwOfy|w?EcPks3YjS@i9qUp5%qP-~nFK#Oz&KuQul3m|15`8xrvR9?I3nmuhd>1w`CHw`4M`qqt4*lwB)&~6$F&~Ex1joM9n!qIM83D9oJ zo-TRsA{egb=Zi);dpht*+hzj*+GbLTzBfD&=zGfh-a~6u3Fo4_gW!6=!LP3if|Kdi z{*iG>GhxUtsscSd&-*YPtR`yG!)a$XLzdvoQ=-U9bqHPgZD|$B^wW8+%)QS!zO0DRLaMX(S1*jEWBMsAi zt+kN(0JV^p0rV*SF@T!N4*_avqt93ad;7E2UUcRWV9X;xr$A#8m?@B*+6x6=uJ_Di1{^hy zE8yyYodr+@0|2VvaeyjN^OzSw2i>UVu@RZPy#mIO0M9(GLMV}W4Ec4;<6w-Rs*OMJ z&09Vs;n-BaJN3*Az) z&>ccp?P-}==r$#+_O#3_bpJzrw18!rzVi))bzxhP_T`5>PCWEIyRbdQENriM5fd)0 zvM6n@%(LI5RbXUJ1>7xQB;Zj2Jppe3y31|jTuJa92Dk-Wy+g2TqrF404IsCSGamxT zErQHz0D8;#eu}F12Zq7X`vcdJTy6_Q9|g#bg6!$iWtYBX?+q-F&=x}B?cxQDLA{lx zw~NgU-?X>gy@Bi%l3;%l$nAh=M@}ilDgwWYs*3@Q?gBgj*c%XJzb*ow5RBb4(8k#TKXN9mIq+TEI2{0b`=l{I z8|SNcY~!2&M;qt4Ew*vaBT5_RVxsis$tr-fQnq}0HhR@o+c+5#+D<5J9CpSm8$g@x z-vAv>UjXDegv`A+*`_-bpe=S2KnK{Ko9(#j2GDV}TFP?=A-(6cUP7-E3Y+c(443>& z!#svynl3_@*n3Wo6Rr20jwF$^TC@xx?WkjGJ<+jyPUazoHZFBm6RdkrX}*JD={={A zQv)Y#A-m~5TZ)l)kl280jSYDAeLLr`HFN%K!aC=#HFJItVcpzX`6R-+hH~kd^Lkq9 z(i7ILzlqmX-e7XoRbHL|S>=@pkX7D1K+tye9u(+7-=IC{8MFtzoxTxj{Z1@FYkf@6 z@PoErNW^Qtrq?`8uX&n`kkMqZYO+|@g&T~)?I?xR*Er_oNYmYEnr_qww(0IPO}7tW zZMr*6)4jLdHl3Bfjj$HnhARncmNqUjpRR<2fUZ@uNFE)FLS1Yw z`q(Z%Uj*omKls!xQI7!VqV+<6E@L+VbYYwJnO*9h@ugjvzVVe^v_A2*U9_I^ja{q$ z{GGQ}?biZ3G*OE1F6?lvS}ApswQ4W8vsX~%;{dv%I0v9BiiZGpt-3%IZ2Hz)tF90Q zvXx&5R~6&~R6%=yD!302TdQ8ljM6`70Q1t`*^4~`8S-^G;y(j< zJK{2q5(ov^*mdgBfWflVtO11U)E`inaGk0*7e zoh}MK11tpa*zlF|hp#J!3)S05ktW5{g=(FL?OvDi=~42JcC~aCKvzps0lHf12+-Bi zK!C26t_A37$*xaFHv!0swY;fas6GV9-XT4<>rZbH8SrZ#T}0jmS9|PifcDr>fcDr% zfa!AGq3*CF*2;9j5m| z8v?Y^-$#!&`fPwU`gH(p^q$CQqw5A>`(AO+cZ3Yt0C08x72B~|a(XbWS>|0k_zlSh z#>x^vKLN7U~+N*ha2B7Ap7eM#K7X#GJ90yQ4vrAg% z1(K?r33ggL(;J|6rsfN4XKn+iop~3ac4kkkirSe$0DU@bBcn`rz+e7k?abz%t(}?h zi?uVIe=~L_JEI>tHz5?7m;P|nyiESpcI+a6cI<-y9c!Ngta-^51uyLK%*%99Am(K* zTpbx>0IFawfGSuCh?$p_ta-5GW-I(5QMwgwM<$+$`PJ=s^fx0h6BF|5n3&7h^{Lg; zt#JHf*7K#9Vq(6e_T9uDjQ-u4m@5EkVjcs8CPtpfs^7#+PUD*p5md@{_-E3cE-G{W za3H?5f+>3xmSoHva@7J1Ap zsa|f7WOksBnI+Xq!n&k-%q*#96V@H5l^;!5mrPdvAi}z2GV!|bpD*Qq664maVUk(+ zcLV6ce;7a){!;+D@V^S6d#0bzB&+-AOK@}t&^aZ^>;O&y=$>hXwC;C}lkD@y5^9x} z6kGVq!#Hgj8UFLf!x69x|KEwOl(qYVsL*{=A(7#}Nfz>q*jf*pUFlNmrwI>|#H(TH z!e2gCsGMKmgbROt@@@vxt|hr?GYsFuHbWsmo8b&VJ&$5vLzLD&!VXsVKeGW+`{-o= zX`!rZ(7r>8vJ;N(fnJxUXx7wgio21)+tq4{90Y7r?18b+6wiT&=^ADrtVxS(>kn>IV_lufT>V+t|T}YWm=i#M1+<3o>V$2^svC}ho5mN zvpQi@yGv!3QY76EPZw2N5zzhcE`aWb4`k4o{qTGd7(y_tDZi#~#ab)!WJ9^5Yk$c7 zq<#zC{E+)e{SLbMA-54S+bDz0>^w=5=A9?A^F^JV{TeKJeSSm_h+fp`3FEE#5uKke z>imSUd45E{j2b4{IzOWOMZ@Tlv=wWN=1kH4a$1uv=Z^LmPd9ARE%FQ;K0KfCs{Bn} zl5xWpKr}5qDfk4y#_>JsmLo_vW^!y3$y*`ieAQTy0z~!4XRjJ7GMKQI@>OF+Iuh33 zup9XWAfmUP#OhiS7WaBgK)X}k6avzj24&f6$i zy=~fcHl@9w7u%e0+0rRA^#>8=f}IUgP7 zY%2M=1+NI*6LI5X-(Ztx4vq&6CUza#jQ6;4AZTK;j?d%p#^Y z);se!fO>($0QGo*}7NqKrE=9guOs?{10+|cBx}OziGa=^#Z936?KS%;dr)D zt%fvQBrjW<|I2WUX+MAI22}@b{4d?0>aqa`8x!uXR?Vct3+sOQIKk()PObpN2b zHOHvtSR&k?Oo#8FTsohAGV|#b!Y9dm{7LidvT3q;p$tntUPY1CFmtt34W{0zLXr7w z5+8QYyn>kDDPPyW-4&5vd3Ou;;Qy{y%#Y}=y_tI5#V_n?DAOpCakvD2Yxq63$C#I4 zfJojMQpP_`nHsdPW%|>UY5xxq;W`51Mst&B1_GU7c6pBMyTjEE{;Od_Eo8{po7Yc9 zCTI~?%uif4Q-nQ4ao$2HLW4cz`5I<>18t=Sdx(V#(my1(dkl!M@OJvgFFQT-Iq2>FskYRA;LNjEL+3OYlid=p1a>_Cv zx)|c#P{09ua0v}@HPnHok3y2(UGegcUqw1!kK?~j4Sju=qVEaFU7rv?oxI}tdr4><CTJD35!wX#<#Xu|MBb%83+yhRU*YjZ z#^v+*Zt(k37QZ~t+VWgP8%sO6>rmw0gW~z~;9U#7WaFLu2VQ;TMO(w6(Vjjx_HSWq zFQm`28Pi8YJL%KkynfB1KV^>mH@R{vSB0*B(l^)2Nq+JLLU%P_CzAnXLd8%GGy+}j zijQ~vy^!{Ve%bLUW+UpqC-P9Ik%H z!FO`^f!*cvZ}9jclkC&)jF2i$FLrt-ldqcAKj$jx6!+L5f zRKrQjJjh+A0G30~B}j8V^0zQ{?u0h72W;GquMa>cLhp3qo&KGf%U!USkh?_RMUd!g zNZxW+Ps-pfDUFKzea&{6C@$3Wjfzd=%dcl}ek zh`gB8Ub`zdo-|dgjLyoaolg^ZiTD@7_sdsAI!WuUCB%22%<=qx!`}++OPs{JYim9I zA$>3XDE%jG?)uNAYx!T|ZzX;$^di&{f7}cj#5^4a$!8R{L89MX@$!y;f1Do2mu=BF zZ0V)=n16YC-miyWjjW&lNYb4Fxl8PF24#xp%d*OT-d*y+wnXjn1_GH8vsQ6) z>j1`dSNxMaGyPX*?4vjCKk(!ik?t}`(z#34Oq_29oRkDk&z0!91=@k#`4&o~cgz1V z9kr;w$F_!=QHH&tTcJCl_0X%3Up|-qHZOgIwC?ix-yq{I zk#YIV@Z{^`KaNZn?Ee7hU!ETri@o;C`LHc#73=7mWv5^-@fSOwc>Y!J?t zoejCGKK@cHA?AT$~}AG#P?f-ZN($2)#Da(+6;{|x^3vYthUujd!|GvJ>F zoh9-1x)7X5z9nnUBG%{6L*IDo^fvHie=1)^dkTt=@8HEx2D_^Wd>V8M^n}NEHe773 zTN^zM7F&A(bM`Fk_$QFN21Ja_7x~UmPn*ug%i8K@=yu5Ixe8skLfg0#_X(6p@9F=? zbXSq?hPeC&ke9n8->0GVP&(_v){tKgC%4Lzi+JltpZ^Uq?h+ZNZ-ysdAAcVEm;0#u z6VUTeDQzq5;I8?^Uj^MN`ZiM20&jzwk){pguGhh?o?nAIkXH{czhMX# zKo>w4LvPTpJlPgr!n=`hFWUBKNZyWmFLvKuD{Xu{{}0PQ6WN_F1H>rG^Sf#UVZd75iWxqTyTcQbAG5Ow{+tFN?mTjDxGPVOG?8t9x9`UEJ3WTFH~oK-OJ8U-n$? z5*erW?A_qsh|I^YPH4T2^?>$`KV1LZ}r-H_;a*FU8@kF@UEUAcEj^FufKJ}#e2;3eWW zrCfgbHjqxzx@&LZDlXe#5u4n#B{0!30hUP({XE1sS zpqbFE&{L53k~1OE@2=fRmzL_JSwrqdKE8b0v{=5)n&KOwuFw+V#1 zsKmeQ#rO5%mx0~20{jH@BP8kEHIcCB+7I3^>ilY4e&t^L5@h1z=X&uSJ-wOWQP4t2 z(z$C3_z!3RdF4Rvdb*(*4>AsZVEyC9!Hz654xHSk-IRNhvGp9Z9+Gj^9=(S{!=M`I z0_aE9V}C-DpSyM^T~lv;`M=5+k@jrXp~sS^pKnWeiTF3ccjdf-^2LM) z-T{6MYDyYO=dKyxiy&DmKkxDD>;HAwjVBocd$CVj&RM0{i3_ugojA&~6aU#wxy#XY z4RkFediOzZcW4N7GITD~kUe4=B>A~(chYSmt-JnL`7HLEgW3Njlc%5WhxPEMAnVF` zCuNndHUAB{tDN|S(96&e_NgBbC!aERmwZ^;#cu(->wWMakbE9n(z)wOc%iJh^9)i;tJDUOPPnp8jI+X^?!oTGF{|8u~ASL}rk^dz=jkGPGR*>kq13l}Z%}^TW-R+^42jTA^ z(eJL^Nmor;cm1#OPiMsPeUQ9|k++}!%fx>UWwr}~Wst;A@XEKzi|D={Q2J2PAcS4`FXYCf3UnBS~{vaD)?B%zY7yk&@U5|seLh=<@N$0LXV994%Tt348 zAOU|CylWx(;Ht#CYf?lWV8EW>zgywk^sKaSy88Gn z$*T<{drZl<7x@l{YM^D%eL}2BUWTMR?%JJndo*y;^!;w+#QLZPl6&$E(JQ*$wGuh8zkfp0@z)aH4muh-(UX%;J36^E z{elKt(B%cd(SAG0}^!EXboqsWAF7wta za(0l2e~0B4BkRkbNP77)ObJv9xvM_@0%T-8xdgfsx(AXEo_z@I%eqg#54REv-0mwzwp^AO0DV-98cE3Q1tkzWI~qP$C?-jsEaS6=z> znv3s3yt{gUM?v!WG)d>Kb;zd@cKJ$vz0fxt^4sBEpOmG+}uhe7Y7(_Ovm;a`h=dl`~*qmLkW3IDMK{7(^> z0)HX0cYE@}m*@WC`Qwl|8xq|oFz4JQ=Ua=Q0_=~^FDERv>C8C(o6Ms|%$IWNb-p)l z-hux;6wg1Bxhr#7+M&dg9|=$FN<9B~bWep!Ao&*87|49p)0B8HrWKznV2+$H>H6Y&2)pa%Yh$jYADUBcf# z0skaq&WA*IuGb&pCr^XM((XQA&iGD-%HsI)T+R8?_S98A7~rnS@Mb6AXVB)8p_h^W z%4?sF@CGH|e*jPR^xNr=8J^v~4PFO$k3jN6se@>D`I)r4M!}m1od7L?mO>&s4;^wQ z?yg+G!%#Qs+!Jz_%%8K-CvT4a-ka}z>fwJ*8}lHh{>tNEPml1E6YyKYUkQCfTysxe z_^_C$oJ-#C>aNG&y^(^4jroD_39qHsV{6{#QuO4S#_4M#ovwpPn9B5M)pE8~^npAp=&rZm{{Y4FPoY2Mrzu0|w-+IIeG9KS z;i2e|N9o=51N@W({AUr^47~>(P2H}6zDKS(X*+x8O}<<}+owVQBrp1QM{YEFj)#t6 zoID8a$GGSK^@j4i{&sTmT|<$JkH46)AkP*qB+WfuI^m1$j_1pLNLjldhwOY$Uikcs zx(;r$LS04;aljdzae)Ce{%x< z-w2!q|2AYdc=E!}NWiZ|=0+&Om^#-R2QnUSflg%{`uv52uZEVz@!w!vG+f?4v9XW|502zf_n8p&p2ofv=nkz z5xC6qBp-Lldt(Qodl4jl)?L-`52T$tKra3gFaA{GKZYco&;Kkgozo}Jl2$Qkkp0 zy>tHEm3wqI^);d_@++e(#{035yM*5^0Y8hmB=-y(A=}N97yjr3{MXQtgxm>`)XQDJ zGZ$OXo~m}h^Q!t0iRza8E<=D~N^Ejb(6h;91OvrnfIw+eb1UGh2- zcbx(6$^`r`;9Y?|yaj!4L(|bI&sw?b4dQk{VtYkqU)Es*povfwb#tO z%%uwCH7nVuJ9xucjW>ehT`}45>FNN za?`Gz4Lg1tJ0FHx{t=l5OtImU?B9v@@4?JPxuh-R8fX3lUF_e>?cdJ!?@s&odi!^a z{d+xp5!?&K=8Vfn(5Ty9_G>gV$BXrcqhm)``*B`^Aw zOI}zh*V*PzXdmRYA#%C;FEBxUrH;S}^@LqH53=#Douf89%>MPJZ;(@7R8>(@l+mSs zp8;9D4({JQV@g4FaZyG^c}7*AzF7zN?^BeSQCM0~J}qNbaaDB*{9b)}WcBEm(Per~ zO=a~VJ$n`y6+Na^R7@)^uCAC_Rao4ku%fJIO+`g%;q-!%@}8xov&y2CRTU=}7uIC- zDeRZkyLjr9tir;Atb_X$56JG_zhG+rDSdin^(*Y1RZvvar%$i`Q~PBGJ!chE^*p(_ zd`3xmbddR=hk|`3?qwxQQ95lD+9NxM#>i9nS{rZe7Eh#Ih z2};Uqlu=evKB~BUTFrC~RnI7?%&RJyHm$fSm|0$3LcNMIL^MBtCVzTo=hp-wIHq@Y zP&KPGznFSg1=S_{iE;`pKYdB^1r&Cd^tiVOSo zG127}HKU|J#YKS@thi{*%$mxXHNn)9(ozcxON$Gtii`48-;}wzHC4fsxsp5o_v#mv zR}3jBtO;h9)J)H>DG+12plWWc{WY=a zfc`cs`724L%&jq%kct(~tg0$5uNgCSYISiY-`Olvg7k&jbmd<%1dg-Ys&;vW=@^T z=$GLfoAPit_52Wy}a-1{YvrN^0f? z6*?`3lvI&>$*khqvn9VMHr^vMGwjfY6_6V8(mx$h$jfDYnX*2%8QEU1XC-jW*1Zy4G);EqtvR=@H0zm zG?O94r8NbC8JZ)C=9qYC4jH}qrA+nwQp`?OL1}d`-IPXcPI1wQ%AlrVMsazNUrxsP zT2Pl4an&`&{D(yJD2jTkl5PQpS)e@#$1qCBY7ItnyhP>EG!UKf>2ovP`i2)KyB!!>mDl))8cWfkRv zFl^PLJ(RJEH5*%GYU}E6D{QOz&sODRlS1DRY?HX>pjGrUs}UGt~?Wi9E8ZqAb8ZR?f9^ zty)yr$*KH6IXa0eDpqSHvS!G)g)J$yOCP2TZdmK2&FIE{ z*z5&G;YennQ^|Z?LgZU>HcL|_h{;zIC1b$r85UAfA!qkX)Pe;S=1)wnxX5&xc8BQ+ z)+J@7!Ax<;)#tV$3pCm{Y5YUCkxvY>k%21;)!#R$>ckY6=RcGxfs- zrf|dDw9{O5iInE&k$X)Y9V7S>oLO~@OY9@QE}Bc2Gt;4I3}7XTE<#! zE6J?g)<~&h{BZYV>UNG7sS4CQ>5PqQL5+3QuUASls2v*?P>p7|Efe)FN}I|BFxa|{ zGZQ>tYgBh`)x)lxwpLSx`fG7#mOH){A{NY_Sw5q@Vs?3)opF<$?ks-9VEL}9gr;I^slbe zt?vJCAGHLWv+5O@H!g^rmKtf@q(OrP9QMhXo807+%N;0*Y?g93aF)MA(^GTO8>sAX z%Xf!fl75oqx%9c{t+YHn1k922O>)wk<)pV5oId&dh8HwAC;7ajq3K0A>60tdi$