// File: vsklad[P]cgen/./acl/sha1.hpp
// Function: acl::SHA1<bal::Literal<bal::Anf>>::execute(bal::Ref<bal::GF2NElement<32ul, bal::Literal<bal::Anf>>>*, unsigned long, bal::Ref<bal::GF2NElement<32ul, bal::Literal<bal::Anf>>> (&) [5], bal::Tracer<32ul, bal::Literal<bal::Anf>>&, unsigned int)
void execute(Ref<Word> *M,
                     const std::size_t M_size, // size in words
                     Ref<Word> (&H)[SHA1_HASH_SIZE],
                     Tracer<SHA1_WORD_SIZE, BIT>& tracer,
                     const uint32_t rounds = SHA1_ROUNDS_NUMBER) {
            
            assert(M_size > 0 && (M_size % SHA1_MESSAGE_BLOCK_SIZE) == 0);
            assert(rounds > 0 && rounds <= SHA1_ROUNDS_NUMBER);
            
            const Ref<Word> K[] = { 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6 };
            
            H[0] = 0x67452301;
            H[1] = 0xEFCDAB89;
            H[2] = 0x98BADCFE;
            H[3] = 0x10325476;
            H[4] = 0xC3D2E1F0;
            
            for (std::size_t block_index = 0; block_index < M_size / SHA1_MESSAGE_BLOCK_SIZE; block_index++) {
                Ref<Word> W[rounds];
                
                for (unsigned int t = 0; t < _min(SHA1_MESSAGE_BLOCK_SIZE, rounds); t++) {
                    W[t] = M[t];
                    tracer.trace("M", block_index * SHA1_MESSAGE_BLOCK_SIZE + t, M[t]);
                    tracer.trace("W", block_index * SHA1_MESSAGE_BLOCK_SIZE + t, M[t]);
                };
                
                for (unsigned int t = SHA1_MESSAGE_BLOCK_SIZE; t < rounds; t++) {
                    Ref<Word> eor_args[] = { W[t-3], W[t-8], W[t-14], W[t-16] };
                    W[t] = rotl(eor(eor_args), 1);
                    tracer.trace("W", t, W[t]);
                };
                
                Ref<Word> a = H[0];
                Ref<Word> b = H[1];
                Ref<Word> c = H[2];
                Ref<Word> d = H[3];
                Ref<Word> e = H[4];
                
                for (unsigned int t = 0; t < rounds; t++) {
                    Ref<Word> ft = f(t, b, c, d);
                    tracer.trace("F", block_index * SHA1_MESSAGE_BLOCK_SIZE + t, ft);
                    
                    Ref<Word> temp_args[] = { rotl(a, 5), ft, e, W[t], K[t / 20] };
                    Ref<Word> temp = add(temp_args);
                    
                    e = d;
                    d = c;
                    c = rotl(b, 30);
                    b = a;
                    a = temp;
                    
                    tracer.trace("A", block_index * SHA1_MESSAGE_BLOCK_SIZE + t, a);
                };
                
                H[0] = H[0] + a;
                H[1] = H[1] + b;
                H[2] = H[2] + c;
                H[3] = H[3] + d;
                H[4] = H[4] + e;
                
                M += SHA1_MESSAGE_BLOCK_SIZE;
            };
            
            trace(tracer, "H", H);
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2d0, %rsp            # imm = 0x2D0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movl %r9d, -0x2c(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x1a0(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0x191(%rbp)
jbe 0x40e02
movq -0x18(%rbp), %rax
andq $0xf, %rax
cmpq $0x0, %rax
sete %al
movb %al, -0x191(%rbp)
movb -0x191(%rbp), %al
testb $0x1, %al
jne 0x40e0e
jmp 0x40e10
jmp 0x40e2f
leaq 0x249fc(%rip), %rdi     # 0x65813
leaq 0x24a2b(%rip), %rsi     # 0x65849
movl $0x34, %edx
leaq 0x24a2e(%rip), %rcx     # 0x65858
callq 0xd1c0
xorl %eax, %eax
cmpl $0x0, -0x2c(%rbp)
movb %al, -0x1a1(%rbp)
jbe 0x40e4a
cmpl $0x50, -0x2c(%rbp)
setbe %al
movb %al, -0x1a1(%rbp)
movb -0x1a1(%rbp), %al
testb $0x1, %al
jne 0x40e56
jmp 0x40e58
jmp 0x40e77
leaq 0x24a9d(%rip), %rdi     # 0x658fc
leaq 0x249e3(%rip), %rsi     # 0x65849
movl $0x35, %edx
leaq 0x249e6(%rip), %rcx     # 0x65858
callq 0xd1c0
leaq -0x50(%rbp), %rdi
movq %rdi, -0x58(%rbp)
movl $0x5a827999, -0x5c(%rbp) # imm = 0x5A827999
leaq -0x5c(%rbp), %rsi
callq 0x44450
jmp 0x40e91
leaq -0x48(%rbp), %rdi
movq %rdi, -0x58(%rbp)
movl $0x6ed9eba1, -0x70(%rbp) # imm = 0x6ED9EBA1
leaq -0x70(%rbp), %rsi
callq 0x44450
jmp 0x40eab
leaq -0x40(%rbp), %rdi
movq %rdi, -0x58(%rbp)
movl $0x8f1bbcdc, -0x74(%rbp) # imm = 0x8F1BBCDC
leaq -0x74(%rbp), %rsi
callq 0x44480
jmp 0x40ec5
leaq -0x38(%rbp), %rdi
movq %rdi, -0x58(%rbp)
movl $0xca62c1d6, -0x78(%rbp) # imm = 0xCA62C1D6
leaq -0x78(%rbp), %rsi
callq 0x44480
jmp 0x40edf
movl $0x67452301, -0x7c(%rbp) # imm = 0x67452301
movq -0x20(%rbp), %rdi
leaq -0x7c(%rbp), %rsi
callq 0x444b0
jmp 0x40ef5
movl $0xefcdab89, -0x80(%rbp) # imm = 0xEFCDAB89
movq -0x20(%rbp), %rdi
addq $0x8, %rdi
leaq -0x80(%rbp), %rsi
callq 0x444f0
jmp 0x40f0f
movl $0x98badcfe, -0x84(%rbp) # imm = 0x98BADCFE
movq -0x20(%rbp), %rdi
addq $0x10, %rdi
leaq -0x84(%rbp), %rsi
callq 0x444f0
jmp 0x40f2f
movl $0x10325476, -0x88(%rbp) # imm = 0x10325476
movq -0x20(%rbp), %rdi
addq $0x18, %rdi
leaq -0x88(%rbp), %rsi
callq 0x444b0
jmp 0x40f4f
movl $0xc3d2e1f0, -0x8c(%rbp) # imm = 0xC3D2E1F0
movq -0x20(%rbp), %rdi
addq $0x20, %rdi
leaq -0x8c(%rbp), %rsi
callq 0x444f0
jmp 0x40f6f
movq $0x0, -0x98(%rbp)
movq -0x98(%rbp), %rax
movq -0x18(%rbp), %rcx
shrq $0x4, %rcx
cmpq %rcx, %rax
jae 0x41bb9
movl -0x2c(%rbp), %eax
movq %rax, -0x1b8(%rbp)
movq %rsp, %rcx
movq %rcx, -0xa0(%rbp)
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x1b0(%rbp)
movq %rcx, %rsp
movq %rax, -0xa8(%rbp)
cmpq $0x0, %rax
je 0x41028
movq -0x1b0(%rbp), %rax
movq -0x1b8(%rbp), %rdx
shlq $0x3, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0x1c8(%rbp)
movq %rax, -0x1c0(%rbp)
movq -0x1c0(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
callq 0x40b00
jmp 0x4100a
movq -0x1c8(%rbp), %rcx
movq -0x1d0(%rbp), %rax
addq $0x8, %rax
cmpq %rcx, %rax
movq %rax, -0x1c0(%rbp)
jne 0x40ff5
movl $0x0, -0xac(%rbp)
movl -0xac(%rbp), %eax
movl %eax, -0x1d4(%rbp)
movl $0x10, %eax
cmpl -0x2c(%rbp), %eax
jae 0x41055
movl $0x10, %eax
movl %eax, -0x1d8(%rbp)
jmp 0x4105e
movl -0x2c(%rbp), %eax
movl %eax, -0x1d8(%rbp)
movl -0x1d4(%rbp), %eax
movl -0x1d8(%rbp), %ecx
cmpl %ecx, %eax
jae 0x411df
movq -0x1b0(%rbp), %rax
movq -0x10(%rbp), %rdx
movl -0xac(%rbp), %ecx
leaq (%rdx,%rcx,8), %rsi
leaq (%rax,%rcx,8), %rdi
callq 0x44530
jmp 0x41092
movq -0x28(%rbp), %rdi
movq -0x98(%rbp), %rdx
shlq $0x4, %rdx
movl -0xac(%rbp), %eax
movl %eax, %ecx
addq %rcx, %rdx
movq -0x10(%rbp), %rax
leaq (%rax,%rcx,8), %rcx
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x23cec(%rip), %rsi     # 0x64dae
callq *%rax
jmp 0x410c6
movq -0x28(%rbp), %rdi
movq -0x98(%rbp), %rdx
shlq $0x4, %rdx
movl -0xac(%rbp), %eax
movl %eax, %ecx
addq %rcx, %rdx
movq -0x10(%rbp), %rax
leaq (%rax,%rcx,8), %rcx
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x20843(%rip), %rsi     # 0x61939
callq *%rax
jmp 0x410fa
jmp 0x410fc
movl -0xac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac(%rbp)
jmp 0x41032
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
movq -0x58(%rbp), %rax
leaq -0x50(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x1e0(%rbp)
je 0x4115e
movq -0x1e0(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x1e8(%rbp)
callq 0x40b20
movq -0x1e8(%rbp), %rax
leaq -0x50(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x1e0(%rbp)
jne 0x41130
jmp 0x41c64
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x41c1b
movq -0x1b0(%rbp), %rcx
movq %rax, %rsi
movq -0x1d0(%rbp), %rax
movq %rsi, -0x68(%rbp)
movl %edx, -0x6c(%rbp)
cmpq %rax, %rcx
movq %rax, -0x1f0(%rbp)
je 0x411c9
movq -0x1f0(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x1f8(%rbp)
callq 0x40b20
movq -0x1b0(%rbp), %rcx
movq -0x1f8(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x1f0(%rbp)
jne 0x41198
jmp 0x41c1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x41b62
movl $0x10, -0xb0(%rbp)
movl -0xb0(%rbp), %eax
cmpl -0x2c(%rbp), %eax
jae 0x41476
movq -0x1b0(%rbp), %rax
leaq -0xd0(%rbp), %rdi
movq %rdi, -0xd8(%rbp)
movl -0xb0(%rbp), %ecx
addl $-0x3, %ecx
leaq (%rax,%rcx,8), %rsi
callq 0x44560
jmp 0x41221
movq -0x1b0(%rbp), %rax
leaq -0xc8(%rbp), %rdi
movq %rdi, -0xd8(%rbp)
movl -0xb0(%rbp), %ecx
addl $-0x8, %ecx
leaq (%rax,%rcx,8), %rsi
callq 0x44560
jmp 0x4124a
movq -0x1b0(%rbp), %rax
leaq -0xc0(%rbp), %rdi
movq %rdi, -0xd8(%rbp)
movl -0xb0(%rbp), %ecx
addl $-0xe, %ecx
leaq (%rax,%rcx,8), %rsi
callq 0x44560
jmp 0x41273
movq -0x1b0(%rbp), %rax
leaq -0xb8(%rbp), %rdi
movq %rdi, -0xd8(%rbp)
movl -0xb0(%rbp), %ecx
addl $-0x10, %ecx
leaq (%rax,%rcx,8), %rsi
callq 0x44560
jmp 0x4129c
leaq -0xe8(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x445e0
jmp 0x412b1
leaq -0xe0(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
movl $0x1, %edx
callq 0x44590
jmp 0x412cb
movq -0x1b0(%rbp), %rax
movl -0xb0(%rbp), %ecx
leaq (%rax,%rcx,8), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x44630
jmp 0x412ea
leaq -0xe0(%rbp), %rdi
callq 0x40b20
leaq -0xe8(%rbp), %rdi
callq 0x40b20
movq -0x1b0(%rbp), %rax
movq -0x28(%rbp), %rdi
movl -0xb0(%rbp), %ecx
movl %ecx, %edx
leaq (%rax,%rdx,8), %rcx
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x20612(%rip), %rsi     # 0x61939
callq *%rax
jmp 0x4132b
leaq -0xd0(%rbp), %rax
movq %rax, -0x208(%rbp)
addq $0x20, %rax
movq %rax, -0x200(%rbp)
movq -0x200(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x210(%rbp)
callq 0x40b20
movq -0x208(%rbp), %rcx
movq -0x210(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x200(%rbp)
jne 0x41344
jmp 0x41377
movl -0xb0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb0(%rbp)
jmp 0x411e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
movq -0xd8(%rbp), %rax
leaq -0xd0(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x218(%rbp)
je 0x413e2
movq -0x218(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x220(%rbp)
callq 0x40b20
movq -0x220(%rbp), %rax
leaq -0xd0(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x218(%rbp)
jne 0x413b1
jmp 0x41b62
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x41427
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x4141b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x40b20
leaq -0xe8(%rbp), %rdi
callq 0x40b20
leaq -0xd0(%rbp), %rax
movq %rax, -0x230(%rbp)
addq $0x20, %rax
movq %rax, -0x228(%rbp)
movq -0x228(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x238(%rbp)
callq 0x40b20
movq -0x230(%rbp), %rcx
movq -0x238(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x228(%rbp)
jne 0x41440
jmp 0x41b62
movq -0x20(%rbp), %rsi
leaq -0xf0(%rbp), %rdi
callq 0x44560
jmp 0x41488
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
leaq -0xf8(%rbp), %rdi
callq 0x44560
jmp 0x4149e
movq -0x20(%rbp), %rsi
addq $0x10, %rsi
leaq -0x100(%rbp), %rdi
callq 0x44560
jmp 0x414b4
movq -0x20(%rbp), %rsi
addq $0x18, %rsi
leaq -0x108(%rbp), %rdi
callq 0x44560
jmp 0x414ca
movq -0x20(%rbp), %rsi
addq $0x20, %rsi
leaq -0x110(%rbp), %rdi
callq 0x44560
jmp 0x414e0
movl $0x0, -0x114(%rbp)
movl -0x114(%rbp), %eax
cmpl -0x2c(%rbp), %eax
jae 0x418b3
movq -0x1a0(%rbp), %rsi
movl -0x114(%rbp), %edx
leaq -0x120(%rbp), %rdi
leaq -0xf8(%rbp), %rcx
leaq -0x100(%rbp), %r8
leaq -0x108(%rbp), %r9
callq 0x44660
jmp 0x41529
movq -0x28(%rbp), %rdi
movq -0x98(%rbp), %rdx
shlq $0x4, %rdx
movl -0x114(%rbp), %eax
addq %rax, %rdx
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x203b1(%rip), %rsi     # 0x61900
leaq -0x120(%rbp), %rcx
callq *%rax
jmp 0x4155a
leaq -0x150(%rbp), %rdi
movq %rdi, -0x158(%rbp)
leaq -0xf0(%rbp), %rsi
movl $0x5, %edx
callq 0x44590
jmp 0x4157b
leaq -0x148(%rbp), %rdi
movq %rdi, -0x158(%rbp)
leaq -0x120(%rbp), %rsi
callq 0x44560
jmp 0x41597
leaq -0x140(%rbp), %rdi
movq %rdi, -0x158(%rbp)
leaq -0x110(%rbp), %rsi
callq 0x44560
jmp 0x415b3
movq -0x1b0(%rbp), %rax
leaq -0x138(%rbp), %rdi
movq %rdi, -0x158(%rbp)
movl -0x114(%rbp), %ecx
leaq (%rax,%rcx,8), %rsi
callq 0x44560
jmp 0x415d9
leaq -0x130(%rbp), %rdi
movq %rdi, -0x158(%rbp)
movl -0x114(%rbp), %eax
movl $0xcccccccd, %ecx       # imm = 0xCCCCCCCD
imulq %rcx, %rax
shrq $0x21, %rax
andl $-0x8, %eax
leaq -0x50(%rbp,%rax), %rsi
callq 0x44560
jmp 0x41609
leaq -0x160(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x44740
jmp 0x4161e
leaq -0x110(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x44530
jmp 0x41633
leaq -0x108(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x44530
jmp 0x41648
leaq -0x168(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
movl $0x1e, %edx
callq 0x44590
jmp 0x41662
leaq -0x100(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x44630
jmp 0x41677
leaq -0x168(%rbp), %rdi
callq 0x40b20
leaq -0xf8(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x44530
jmp 0x41698
leaq -0xf0(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x44530
jmp 0x416ad
movq -0x28(%rbp), %rdi
movq -0x98(%rbp), %rdx
shlq $0x4, %rdx
movl -0x114(%rbp), %eax
addq %rax, %rdx
movq (%rdi), %rax
movq 0x8(%rax), %rax
leaq 0x24254(%rip), %rsi     # 0x65927
leaq -0xf0(%rbp), %rcx
callq *%rax
jmp 0x416de
leaq -0x160(%rbp), %rdi
callq 0x40b20
leaq -0x150(%rbp), %rax
movq %rax, -0x248(%rbp)
addq $0x28, %rax
movq %rax, -0x240(%rbp)
movq -0x240(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x250(%rbp)
callq 0x40b20
movq -0x248(%rbp), %rcx
movq -0x250(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x240(%rbp)
jne 0x41703
leaq -0x120(%rbp), %rdi
callq 0x40b20
movl -0x114(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x114(%rbp)
jmp 0x414ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x41b56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x41b4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x41b3e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x41b32
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x41b26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x418a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
movq -0x158(%rbp), %rax
leaq -0x150(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x258(%rbp)
je 0x41811
movq -0x258(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x260(%rbp)
callq 0x40b20
movq -0x260(%rbp), %rax
leaq -0x150(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x258(%rbp)
jne 0x417e0
jmp 0x418a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x41856
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x4184a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x40b20
leaq -0x160(%rbp), %rdi
callq 0x40b20
leaq -0x150(%rbp), %rax
movq %rax, -0x270(%rbp)
addq $0x28, %rax
movq %rax, -0x268(%rbp)
movq -0x268(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x278(%rbp)
callq 0x40b20
movq -0x270(%rbp), %rcx
movq -0x278(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x268(%rbp)
jne 0x4186f
jmp 0x418a2
leaq -0x120(%rbp), %rdi
callq 0x40b20
jmp 0x41b26
movq -0x20(%rbp), %rsi
leaq -0x170(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x44790
jmp 0x418cc
movq -0x20(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x44630
jmp 0x418de
leaq -0x170(%rbp), %rdi
callq 0x40b20
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
leaq -0x178(%rbp), %rdi
leaq -0xf8(%rbp), %rdx
callq 0x44790
jmp 0x41907
movq -0x20(%rbp), %rdi
addq $0x8, %rdi
leaq -0x178(%rbp), %rsi
callq 0x44630
jmp 0x4191d
leaq -0x178(%rbp), %rdi
callq 0x40b20
movq -0x20(%rbp), %rsi
addq $0x10, %rsi
leaq -0x180(%rbp), %rdi
leaq -0x100(%rbp), %rdx
callq 0x44790
jmp 0x41946
movq -0x20(%rbp), %rdi
addq $0x10, %rdi
leaq -0x180(%rbp), %rsi
callq 0x44630
jmp 0x4195c
leaq -0x180(%rbp), %rdi
callq 0x40b20
movq -0x20(%rbp), %rsi
addq $0x18, %rsi
leaq -0x188(%rbp), %rdi
leaq -0x108(%rbp), %rdx
callq 0x44790
jmp 0x41985
movq -0x20(%rbp), %rdi
addq $0x18, %rdi
leaq -0x188(%rbp), %rsi
callq 0x44630
jmp 0x4199b
leaq -0x188(%rbp), %rdi
callq 0x40b20
movq -0x20(%rbp), %rsi
addq $0x20, %rsi
leaq -0x190(%rbp), %rdi
leaq -0x110(%rbp), %rdx
callq 0x44790
jmp 0x419c4
movq -0x20(%rbp), %rdi
addq $0x20, %rdi
leaq -0x190(%rbp), %rsi
callq 0x44630
jmp 0x419da
leaq -0x190(%rbp), %rdi
callq 0x40b20
movq -0x10(%rbp), %rax
addq $0x80, %rax
movq %rax, -0x10(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x40b20
leaq -0x108(%rbp), %rdi
callq 0x40b20
leaq -0x100(%rbp), %rdi
callq 0x40b20
leaq -0xf8(%rbp), %rdi
callq 0x40b20
leaq -0xf0(%rbp), %rdi
callq 0x40b20
movq -0x1b8(%rbp), %rdx
movq -0x1b0(%rbp), %rcx
shlq $0x3, %rdx
movq %rcx, %rax
addq %rdx, %rax
cmpq %rax, %rcx
movq %rax, -0x280(%rbp)
je 0x41a85
movq -0x280(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x288(%rbp)
callq 0x40b20
movq -0x1b0(%rbp), %rcx
movq -0x288(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x280(%rbp)
jne 0x41a54
movq -0xa0(%rbp), %rax
movq %rax, %rsp
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x40f7a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x40b20
jmp 0x41b26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x40b20
jmp 0x41b26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x180(%rbp), %rdi
callq 0x40b20
jmp 0x41b26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x40b20
jmp 0x41b26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x40b20
leaq -0x110(%rbp), %rdi
callq 0x40b20
leaq -0x108(%rbp), %rdi
callq 0x40b20
leaq -0x100(%rbp), %rdi
callq 0x40b20
leaq -0xf8(%rbp), %rdi
callq 0x40b20
leaq -0xf0(%rbp), %rdi
callq 0x40b20
movq -0x1b0(%rbp), %rcx
movq -0x1b8(%rbp), %rdx
shlq $0x3, %rdx
movq %rcx, %rax
addq %rdx, %rax
cmpq %rax, %rcx
movq %rax, -0x290(%rbp)
je 0x41bb7
movq -0x290(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x298(%rbp)
callq 0x40b20
movq -0x1b0(%rbp), %rcx
movq -0x298(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x290(%rbp)
jne 0x41b86
jmp 0x41c1b
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rdx
leaq 0x23d61(%rip), %rsi     # 0x65929
callq 0x447f0
jmp 0x41bcf
leaq -0x50(%rbp), %rax
movq %rax, -0x2a8(%rbp)
addq $0x20, %rax
movq %rax, -0x2a0(%rbp)
movq -0x2a0(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x2b0(%rbp)
callq 0x40b20
movq -0x2a8(%rbp), %rcx
movq -0x2b0(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x2a0(%rbp)
jne 0x41be5
movq %rbp, %rsp
popq %rbp
retq
leaq -0x50(%rbp), %rax
movq %rax, -0x2c0(%rbp)
addq $0x20, %rax
movq %rax, -0x2b8(%rbp)
movq -0x2b8(%rbp), %rdi
addq $-0x8, %rdi
movq %rdi, -0x2c8(%rbp)
callq 0x40b20
movq -0x2c0(%rbp), %rcx
movq -0x2c8(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x2b8(%rbp)
jne 0x41c31
jmp 0x41c64
movq -0x68(%rbp), %rdi
callq 0xd5a0
nopl (%rax)