// File: ArthoPacini[P]blockchaincpp/./Blockchain.hpp
// Function: Blockchain::load(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void load(const std::string input_filename = "blockchain.json")
    {
        std::filesystem::path input_path = std::filesystem::path(std::filesystem::current_path() / "blockchain" / input_filename);

        if(!std::filesystem::exists(input_path))
        {
            std::cerr << "Blockchain file does not exists!" << std::endl;
            return;
        }

        nlohmann::json input_json;
        
        std::ifstream input_file(input_path);
        input_file >> input_json;

        this->difficulty = input_json["difficulty"];
        this->maxTransactionsCount = input_json["maxTransactionsCount"];

        for(const auto & block_json : input_json["blocks"])
            chain.push_back(Block(block_json));
    }

// Assembly:
subq $0x478, %rsp            # imm = 0x478
movq %rsi, 0x50(%rsp)
movq %rdi, 0x470(%rsp)
movq %rsi, 0x468(%rsp)
movq 0x470(%rsp), %rax
movq %rax, 0x58(%rsp)
leaq 0x3f0(%rsp), %rdi
callq 0x56d0
leaq 0x1a0bf(%rip), %rsi     # 0x3ff0c
leaq 0x3c8(%rsp), %rdi
movl $0x2, %edx
callq 0x24fa0
jmp 0x25e61
leaq 0x418(%rsp), %rdi
leaq 0x3f0(%rsp), %rsi
leaq 0x3c8(%rsp), %rdx
callq 0x24f10
jmp 0x25e80
movq 0x50(%rsp), %rsi
leaq 0x390(%rsp), %rdi
movl $0x2, %edx
callq 0x250a0
jmp 0x25e99
leaq 0x440(%rsp), %rdi
leaq 0x418(%rsp), %rsi
leaq 0x390(%rsp), %rdx
callq 0x24f10
jmp 0x25eb8
leaq 0x390(%rsp), %rdi
callq 0x251a0
leaq 0x418(%rsp), %rdi
callq 0x251a0
leaq 0x3c8(%rsp), %rdi
callq 0x251a0
leaq 0x3f0(%rsp), %rdi
callq 0x251a0
leaq 0x440(%rsp), %rdi
callq 0x251d0
movb %al, 0x4f(%rsp)
jmp 0x25eff
movb 0x4f(%rsp), %al
testb $0x1, %al
jne 0x25ff2
jmp 0x25f0d
movq 0x320dc(%rip), %rdi     # 0x57ff0
leaq 0x1a009(%rip), %rsi     # 0x3ff24
callq 0x54a0
movq %rax, 0x40(%rsp)
jmp 0x25f27
movq 0x40(%rsp), %rdi
movq 0x3206d(%rip), %rsi     # 0x57fa0
callq 0x5500
jmp 0x25f3a
movl $0x1, 0x38c(%rsp)
jmp 0x2623c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x25fc7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x25fba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x25fad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
leaq 0x390(%rsp), %rdi
callq 0x251a0
leaq 0x418(%rsp), %rdi
callq 0x251a0
leaq 0x3c8(%rsp), %rdi
callq 0x251a0
leaq 0x3f0(%rsp), %rdi
callq 0x251a0
jmp 0x26278
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x2626b
xorl %eax, %eax
movl %eax, %esi
leaq 0x378(%rsp), %rdi
callq 0x1e840
leaq 0x170(%rsp), %rdi
leaq 0x440(%rsp), %rsi
movl $0x8, %edx
callq 0x26290
jmp 0x2601f
leaq 0x170(%rsp), %rdi
leaq 0x378(%rsp), %rsi
callq 0x262d0
jmp 0x26036
leaq 0x16c0f(%rip), %rsi     # 0x3cc4c
leaq 0x378(%rsp), %rdi
callq 0x19700
movq %rax, 0x38(%rsp)
jmp 0x26051
movq 0x38(%rsp), %rdi
callq 0x263c0
movl %eax, 0x34(%rsp)
jmp 0x26061
movq 0x58(%rsp), %rax
movl 0x34(%rsp), %ecx
movl %ecx, (%rax)
leaq 0x16be4(%rip), %rsi     # 0x3cc57
leaq 0x378(%rsp), %rdi
callq 0x19700
movq %rax, 0x28(%rsp)
jmp 0x26087
movq 0x28(%rsp), %rdi
callq 0x263c0
movl %eax, 0x24(%rsp)
jmp 0x26097
movq 0x58(%rsp), %rax
movl 0x24(%rsp), %ecx
movl %ecx, 0x4(%rax)
leaq 0x16bc2(%rip), %rsi     # 0x3cc6c
leaq 0x378(%rsp), %rdi
callq 0x19700
movq %rax, 0x18(%rsp)
jmp 0x260be
movq 0x18(%rsp), %rax
movq %rax, 0x168(%rsp)
movq 0x168(%rsp), %rsi
leaq 0x148(%rsp), %rdi
callq 0x263d0
movq 0x168(%rsp), %rsi
leaq 0x128(%rsp), %rdi
callq 0x26410
leaq 0x148(%rsp), %rdi
leaq 0x128(%rsp), %rsi
callq 0x26450
movb %al, 0x17(%rsp)
jmp 0x26110
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0x2611d
jmp 0x26217
leaq 0x148(%rsp), %rdi
callq 0x26480
movq %rax, 0x8(%rsp)
jmp 0x26131
movq 0x58(%rsp), %rax
movq 0x8(%rsp), %rcx
movq %rcx, 0x120(%rsp)
addq $0x8, %rax
movq %rax, (%rsp)
movq 0x120(%rsp), %rsi
leaq 0x60(%rsp), %rdi
callq 0x127a0
jmp 0x2615f
leaq 0x70(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x267d0
jmp 0x26170
movq (%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x8830
jmp 0x26180
leaq 0x70(%rsp), %rdi
callq 0x8ae0
leaq 0x60(%rsp), %rdi
callq 0xc450
leaq 0x148(%rsp), %rdi
callq 0x26d20
jmp 0x261a3
jmp 0x260f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x2625e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x26251
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
jmp 0x2620b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c0(%rsp)
movl %eax, 0x3bc(%rsp)
leaq 0x70(%rsp), %rdi
callq 0x8ae0
leaq 0x60(%rsp), %rdi
callq 0xc450
jmp 0x26251
leaq 0x170(%rsp), %rdi
callq 0x5110
leaq 0x378(%rsp), %rdi
callq 0xc450
movl $0x0, 0x38c(%rsp)
leaq 0x440(%rsp), %rdi
callq 0x251a0
addq $0x478, %rsp            # imm = 0x478
retq
leaq 0x170(%rsp), %rdi
callq 0x5110
leaq 0x378(%rsp), %rdi
callq 0xc450
leaq 0x440(%rsp), %rdi
callq 0x251a0
movq 0x3c0(%rsp), %rdi
callq 0x5790
nopw %cs:(%rax,%rax)
nop