// File: /workspace/github_cpp_makefile_star2_O3/BGI-Qingdao[P]ExtractNGSReads/filterPairFQ.cpp
// Function: main
int main(int argc , char ** argv )
{
    
    START_PARSE_ARGS
        DEFINE_ARG_REQUIRED(std::string,input_r1,"the input read1");
        DEFINE_ARG_REQUIRED(std::string,input_r2,"the input read2");
        DEFINE_ARG_REQUIRED(std::string,output_r1,"the output read1");
        DEFINE_ARG_REQUIRED(std::string,output_r2,"the output read2");
        DEFINE_ARG_REQUIRED(std::string,output_rs,"the output singlenton reads");
    END_PARSE_ARGS

    auto i_r1 = BGIQD::FILES::FileReaderFactory::GenerateReaderFromFileName(input_r1.to_string());
    auto i_r2 = BGIQD::FILES::FileReaderFactory::GenerateReaderFromFileName(input_r2.to_string());
    auto o_r1 = BGIQD::FILES::FileWriterFactory::GenerateWriterFromFileName(output_r1.to_string());
    auto o_r2 = BGIQD::FILES::FileWriterFactory::GenerateWriterFromFileName(output_r2.to_string());
    auto o_rs = BGIQD::FILES::FileWriterFactory::GenerateWriterFromFileName(output_rs.to_string());
    if( i_r1 == NULL )
        FATAL("input_r1 failed to open !!");
    if( ! o_r1 || !o_r2 || ! o_rs )
        FATAL("open output file failed !! ");
    if( i_r2 == NULL )
        FATAL("input_r2 failed to open !!");

    std::vector<Read> buffer;
    // Load read1
    Reader reader1;
    reader1.LoadAllFastq(*i_r1,buffer);
    std::cerr<<" Load "<<buffer.size()<<" reads from read1. "<<std::endl;
    for( const auto & r : buffer )
    {
        reads1[r.head.readName] = r ;
    }
    buffer.clear();
    delete i_r1 ;
    // Load read2
    Reader reader2;
    reader2.LoadAllFastq(*i_r2,buffer);
    std::cerr<<" Load "<<buffer.size()<<" reads from read2. "<<std::endl;
    for( const auto & r : buffer )
    {
        reads2[r.head.readName] = r ;
    }
    buffer.clear();
    delete i_r2 ;
    // find common ;
    std::set<std::string> common ;
    for( const auto & pair : reads1 )
    {
        if( reads2.find( pair.first ) != reads2.end() )
        {
            common.insert(pair.first) ;
        }
    }
    
    std::cerr<<" Total "<<common.size()<<" read pair detected. "<<std::endl;
    auto print_stlfr_reads = []( const Read & r , std::ostream & ost ) {
            ost<<r.head.Head()<<'\n'<<r.seq.atcgs<<"\n+\n"<<std::string(r.seq.atcgs.size() , 'F')<<'\n';
    };
    std::cerr<<"Start print read1 ... "<<std::endl;
    // print read1 
    for( const auto & pair : reads1 )
        if( common.find(pair.first) != common.end() )
            print_stlfr_reads(pair.second , *o_r1);
    delete o_r1 ;
    std::cerr<<"Start print read2 ... "<<std::endl;
    // print read2 
    for( const auto & pair : reads2 )
        if( common.find(pair.first) != common.end() )
            print_stlfr_reads(pair.second , *o_r2);
    delete o_r2 ;
    std::cerr<<"Start print singleton ... "<<std::endl;
    // print singleton
    for( const auto & pair : reads1 )
        if( common.find(pair.first) == common.end() )
            print_stlfr_reads(pair.second , *o_rs);
    for( const auto & pair : reads2 )
        if( common.find(pair.first) == common.end() )
            print_stlfr_reads(pair.second , *o_rs);
    delete o_rs ;
    std::cerr<<"Done ! "<<std::endl;
    return 0 ;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2f8, %rsp            # imm = 0x2F8
movq %rsi, -0x60(%rbp)
movl %edi, %r14d
leaq 0xba9a(%rip), %rdi      # 0x10298
callq 0x7606
movl $0x0, 0xbb1b(%rip)      # 0x10328
leaq -0x298(%rbp), %r13
movq %r13, -0x10(%r13)
leaq 0x6825(%rip), %rsi      # 0xb044
leaq 0x6826(%rip), %rdx      # 0xb04c
leaq -0x2a8(%rbp), %rdi
callq 0x7568
leaq -0x220(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x68aa(%rip), %rdx      # 0xb0ee
leaq -0x230(%rbp), %rdi
movq %rdx, %rsi
callq 0x7568
leaq -0x1a8(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x67e7(%rip), %rsi      # 0xb04d
leaq 0x67ef(%rip), %rdx      # 0xb05c
leaq -0x1b8(%rbp), %rdi
callq 0x7568
leaq -0x320(%rbp), %r15
leaq -0x2a8(%rbp), %rdx
leaq -0x230(%rbp), %r8
leaq -0x1b8(%rbp), %r9
movq %r15, %rdi
movl $0x1, %esi
xorl %ecx, %ecx
callq 0x5fc0
movq -0x1b8(%rbp), %rdi
cmpq %r12, %rdi
je 0x48b5
callq 0x4240
movq -0x230(%rbp), %rdi
cmpq %rbx, %rdi
je 0x48c6
callq 0x4240
movq -0x2a8(%rbp), %rdi
cmpq %r13, %rdi
je 0x48d7
callq 0x4240
leaq 0xb9ba(%rip), %rdi      # 0x10298
leaq 0xba43(%rip), %rsi      # 0x10328
callq 0x6130
movq %r15, (%rax)
incl 0xba35(%rip)            # 0x10328
leaq -0x230(%rbp), %rdi
movq %rbx, (%rdi)
leaq 0x6759(%rip), %rsi      # 0xb05d
leaq 0x675a(%rip), %rdx      # 0xb065
callq 0x7568
leaq -0x1b8(%rbp), %rdi
movq %r12, (%rdi)
leaq 0x67cd(%rip), %rdx      # 0xb0ee
movq %rdx, %rsi
callq 0x7568
leaq -0x130(%rbp), %r13
movq %r13, -0x10(%r13)
leaq 0x672b(%rip), %rsi      # 0xb066
leaq 0x6733(%rip), %rdx      # 0xb075
leaq -0x140(%rbp), %rdi
callq 0x7568
leaq -0x2a8(%rbp), %r15
leaq -0x230(%rbp), %rdx
leaq -0x1b8(%rbp), %r8
leaq -0x140(%rbp), %r9
movq %r15, %rdi
movl $0x1, %esi
xorl %ecx, %ecx
callq 0x5fc0
movq -0x140(%rbp), %rdi
cmpq %r13, %rdi
je 0x498a
callq 0x4240
movq -0x1b8(%rbp), %rdi
cmpq %r12, %rdi
je 0x499b
callq 0x4240
movq -0x230(%rbp), %rdi
cmpq %rbx, %rdi
je 0x49ac
callq 0x4240
leaq 0xb8e5(%rip), %rdi      # 0x10298
leaq 0xb96e(%rip), %rsi      # 0x10328
callq 0x6130
movq %r15, (%rax)
incl 0xb960(%rip)            # 0x10328
leaq -0x1b8(%rbp), %rdi
movq %r12, (%rdi)
leaq 0x669d(%rip), %rsi      # 0xb076
leaq 0x669f(%rip), %rdx      # 0xb07f
callq 0x7568
leaq -0x140(%rbp), %rdi
movq %r13, (%rdi)
leaq 0x66f8(%rip), %rdx      # 0xb0ee
movq %rdx, %rsi
callq 0x7568
leaq -0x48(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x6673(%rip), %rsi      # 0xb080
leaq 0x667c(%rip), %rdx      # 0xb090
leaq -0x58(%rbp), %rdi
callq 0x7568
leaq -0x230(%rbp), %r15
leaq -0x1b8(%rbp), %rdx
leaq -0x140(%rbp), %r8
leaq -0x58(%rbp), %r9
movq %r15, %rdi
movl $0x1, %esi
xorl %ecx, %ecx
callq 0x5fc0
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x4a57
callq 0x4240
movq -0x140(%rbp), %rdi
cmpq %r13, %rdi
je 0x4a68
callq 0x4240
movq -0x1b8(%rbp), %rdi
cmpq %r12, %rdi
je 0x4a79
callq 0x4240
leaq 0xb818(%rip), %rdi      # 0x10298
leaq 0xb8a1(%rip), %rsi      # 0x10328
callq 0x6130
movq %r15, (%rax)
incl 0xb893(%rip)            # 0x10328
leaq -0x140(%rbp), %rdi
movq %r13, (%rdi)
leaq 0x65eb(%rip), %rsi      # 0xb091
leaq 0x65ed(%rip), %rdx      # 0xb09a
callq 0x7568
leaq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
movq %rax, (%rdi)
leaq 0x662a(%rip), %rdx      # 0xb0ee
movq %rdx, %rsi
callq 0x7568
leaq -0x80(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x65bf(%rip), %rsi      # 0xb09b
leaq 0x65c8(%rip), %rdx      # 0xb0ab
leaq -0x90(%rbp), %rdi
callq 0x7568
leaq -0x1b8(%rbp), %r15
leaq -0x140(%rbp), %rdx
leaq -0x58(%rbp), %r8
leaq -0x90(%rbp), %r9
movq %r15, %rdi
movl $0x1, %esi
xorl %ecx, %ecx
callq 0x5fc0
movq -0x90(%rbp), %rdi
cmpq %r12, %rdi
je 0x4b28
callq 0x4240
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x4b3a
callq 0x4240
movq -0x140(%rbp), %rdi
cmpq %r13, %rdi
je 0x4b4b
callq 0x4240
leaq 0xb746(%rip), %rdi      # 0x10298
leaq 0xb7cf(%rip), %rsi      # 0x10328
callq 0x6130
movq %r15, (%rax)
incl 0xb7c1(%rip)            # 0x10328
leaq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
movq %rax, (%rdi)
leaq 0x6533(%rip), %rsi      # 0xb0ac
leaq 0x6535(%rip), %rdx      # 0xb0b5
callq 0x7568
leaq -0x90(%rbp), %rdi
movq %r12, (%rdi)
leaq 0x6558(%rip), %rdx      # 0xb0ee
movq %rdx, %rsi
callq 0x7568
leaq -0xa0(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x6506(%rip), %rsi      # 0xb0b6
leaq 0x651a(%rip), %rdx      # 0xb0d1
leaq -0xb0(%rbp), %rdi
callq 0x7568
leaq -0x140(%rbp), %r15
leaq -0x58(%rbp), %rdx
leaq -0x90(%rbp), %r8
leaq -0xb0(%rbp), %r9
movq %r15, %rdi
movl $0x1, %esi
xorl %ecx, %ecx
callq 0x5fc0
movq -0xb0(%rbp), %rdi
cmpq %rbx, %rdi
je 0x4bfc
callq 0x4240
movq -0x90(%rbp), %rdi
cmpq %r12, %rdi
je 0x4c0d
callq 0x4240
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x4c1f
callq 0x4240
leaq 0xb672(%rip), %rdi      # 0x10298
leaq 0xb6fb(%rip), %rsi      # 0x10328
callq 0x6130
movq %r15, (%rax)
incl 0xb6ed(%rip)            # 0x10328
cmpl $0x2, %r14d
jl 0x4d14
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x58(%rbp), %rdi
leaq -0x63(%rbp), %rdx
callq 0x4100
leaq 0x6471(%rip), %rsi      # 0xb0d2
leaq -0x58(%rbp), %rdi
callq 0x4090
testl %eax, %eax
je 0x4ce0
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0x90(%rbp), %rdi
leaq -0x62(%rbp), %rdx
callq 0x4100
leaq 0x6448(%rip), %rsi      # 0xb0d5
leaq -0x90(%rbp), %rdi
callq 0x4090
testl %eax, %eax
je 0x4ce5
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rsi
leaq -0xb0(%rbp), %rdi
leaq -0x61(%rbp), %rdx
callq 0x4100
leaq 0x641b(%rip), %rsi      # 0xb0d7
leaq -0xb0(%rbp), %r15
movq %r15, %rdi
callq 0x4090
testl %eax, %eax
sete %r13b
movq (%r15), %rdi
cmpq %rbx, %rdi
je 0x4ce8
callq 0x4240
jmp 0x4ce8
movb $0x1, %r13b
jmp 0x4cf9
movb $0x1, %r13b
movq -0x90(%rbp), %rdi
cmpq %r12, %rdi
je 0x4cf9
callq 0x4240
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x4d0b
callq 0x4240
testb %r13b, %r13b
je 0x4f36
movq 0xb2d5(%rip), %r14      # 0xfff0
leaq 0x63ba(%rip), %rsi      # 0xb0dc
movl $0x8, %edx
movq %r14, %rdi
callq 0x42d0
movq -0x60(%rbp), %rax
movq (%rax), %rbx
testq %rbx, %rbx
je 0x4d57
movq %rbx, %rdi
callq 0x4120
movq 0xb2a6(%rip), %rdi      # 0xfff0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x42d0
jmp 0x4d6f
movq (%r14), %rax
movq -0x18(%rax), %rax
leaq (%r14,%rax), %rdi
movl 0x20(%r14,%rax), %esi
orl $0x1, %esi
callq 0x4420
movq 0xb27a(%rip), %rbx      # 0xfff0
leaq 0x6368(%rip), %rsi      # 0xb0e5
movl $0x6, %edx
movq %rbx, %rdi
callq 0x42d0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq 0xb248(%rip), %rbx      # 0xfff0
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq 0xb4f1(%rip), %r14      # 0x102b0
leaq 0xb4da(%rip), %r12      # 0x102a0
cmpq %r12, %r14
je 0x5b4c
leaq 0x6317(%rip), %r13      # 0xb0ed
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x6307(%rip), %rsi      # 0xb0ec
callq 0x42d0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x633c(%rip), %rsi      # 0xb135
callq 0x42d0
movq 0x28(%r14), %rax
movq 0x28(%rax), %rsi
movq 0x30(%rax), %rdx
movq %rbx, %rdi
callq 0x42d0
movq 0x28(%r14), %rax
movb (%rax), %r15b
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x42d0
testb %r15b, %r15b
leaq 0x62c7(%rip), %rsi      # 0xb0fa
leaq 0x62b5(%rip), %rax      # 0xb0ef
cmovneq %rax, %rsi
movl $0xa, %edx
movq %rbx, %rdi
callq 0x42d0
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x42d0
movq 0x28(%r14), %rax
movl 0x68(%rax), %esi
leaq -0x58(%rbp), %rdi
callq 0x6198
movq -0x58(%rbp), %rsi
movq -0x50(%rbp), %rdx
movq %rbx, %rdi
callq 0x42d0
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x4e8d
callq 0x4240
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x42d0
movq 0x28(%r14), %rax
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
movq %rbx, %rdi
callq 0x42d0
movq 0x28(%r14), %rax
cmpb $0x1, (%rax)
jne 0x4ef6
movl $0xd, %edx
movq %rbx, %rdi
leaq 0x623c(%rip), %rsi      # 0xb105
callq 0x42d0
movq 0x28(%r14), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
movq %rbx, %rdi
callq 0x42d0
movl $0x2, %edx
movq %rax, %rdi
leaq 0x63dc(%rip), %rsi      # 0xb2cd
callq 0x42d0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %r14, %rdi
callq 0x41d0
movq %rax, %r14
cmpq %r12, %rax
jne 0x4dd6
jmp 0x5b4c
movq 0xb373(%rip), %rax      # 0x102b0
xorl %r15d, %r15d
leaq 0xb359(%rip), %rbx      # 0x102a0
movl $0x0, %r12d
cmpq %rbx, %rax
je 0x4f9f
leaq 0xb3d7(%rip), %r13      # 0x10330
movslq 0x20(%rax), %r12
movq 0x28(%rax), %rcx
movq 0x28(%rcx), %rdx
movq %r12, %rsi
shlq $0x5, %rsi
movq %rdx, (%rsi,%r13)
xorl %edx, %edx
cmpl $0x0, 0x68(%rcx)
setne %dl
movl %edx, 0x8(%rsi,%r13)
movq $0x0, 0x10(%rsi,%r13)
movl %r12d, 0x18(%rsi,%r13)
movq %rax, %rdi
callq 0x41d0
cmpq %rbx, %rax
jne 0x4f59
cmpl $0x8, %r12d
jg 0x4fd0
movslq %r12d, %rcx
leaq -0x9(%rcx), %rax
shlq $0x5, %rcx
leaq 0xb37f(%rip), %rdx      # 0x10330
addq %rdx, %rcx
addq $0x38, %rcx
movq %r15, -0x18(%rcx)
movl %r15d, -0x10(%rcx)
movq %r15, -0x8(%rcx)
movl %r15d, (%rcx)
addq $0x20, %rcx
incq %rax
jne 0x4fb8
leaq -0xb0(%rbp), %r8
movl $0x0, (%r8)
leaq 0x6109(%rip), %rdx      # 0xb0ee
leaq 0xb344(%rip), %rcx      # 0x10330
movl %r14d, %edi
movq -0x60(%rbp), %rsi
callq 0x4070
cmpl $-0x1, %eax
je 0x5075
leaq 0x60ea(%rip), %r15      # 0xb0ee
leaq 0xb325(%rip), %r12      # 0x10330
leaq -0xb0(%rbp), %r13
movq 0xb28f(%rip), %rdx      # 0x102a8
testq %rdx, %rdx
je 0x505b
movq %rbx, %rcx
xorl %esi, %esi
cmpl %eax, 0x20(%rdx)
setl %sil
cmovgeq %rdx, %rcx
movq 0x10(%rdx,%rsi,8), %rdx
testq %rdx, %rdx
jne 0x5021
cmpq %rbx, %rcx
je 0x505b
cmpl 0x20(%rcx), %eax
jl 0x505b
movq 0x28(%rcx), %rdi
movb $0x1, 0x1(%rdi)
movq 0xaf5f(%rip), %rax      # 0xffb0
movq (%rax), %rsi
xorl %edx, %edx
callq 0x6242
movl %r14d, %edi
movq -0x60(%rbp), %rsi
movq %r15, %rdx
movq %r12, %rcx
movq %r13, %r8
callq 0x4070
cmpl $-0x1, %eax
jne 0x5012
movq 0xb234(%rip), %r14      # 0x102b0
leaq 0xb21d(%rip), %r12      # 0x102a0
cmpq %r12, %r14
je 0x5130
movb $0x1, %bl
movq 0xaf5b(%rip), %r15      # 0xfff0
movq 0x28(%r14), %rdi
movb (%rdi), %al
testb %al, %al
jne 0x50ff
cmpb $0x0, 0x1(%rdi)
jne 0x50ff
movl $0x20, %edx
movq %r15, %rdi
leaq 0x605f(%rip), %rsi      # 0xb113
callq 0x42d0
movq 0x28(%r14), %rax
movq 0x28(%rax), %rsi
movq 0x30(%rax), %rdx
movq %r15, %rdi
callq 0x42d0
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r13, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq 0x28(%r14), %rdi
movb (%rdi), %al
xorl %ebx, %ebx
testb $0x1, %al
je 0x5117
cmpb $0x0, 0x1(%rdi)
jne 0x5117
movq 0x48(%rdi), %rsi
movl $0x1, %edx
callq 0x6242
movq %r14, %rdi
callq 0x41d0
movq %rax, %r14
cmpq %r12, %rax
jne 0x5095
testb $0x1, %bl
je 0x5158
movq -0x60(%rbp), %rax
movq (%rax), %rbx
testq %rbx, %rbx
je 0x51a2
movq %rbx, %rdi
callq 0x4120
movq 0xaea5(%rip), %rdi      # 0xfff0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x42d0
jmp 0x51c0
movq 0xae91(%rip), %r14      # 0xfff0
leaq 0x5f76(%rip), %rsi      # 0xb0dc
movl $0x8, %edx
movq %r14, %rdi
callq 0x42d0
movq -0x60(%rbp), %rax
movq (%rax), %rbx
testq %rbx, %rbx
je 0x5979
movq %rbx, %rdi
callq 0x4120
movq 0xae5e(%rip), %rdi      # 0xfff0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x42d0
jmp 0x5991
movq 0xae47(%rip), %rax      # 0xfff0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
leaq (%rax,%rcx), %rdi
movl 0x20(%rax,%rcx), %esi
orl $0x1, %esi
callq 0x4420
movq 0xb0e9(%rip), %rbx      # 0x102b0
cmpq %r12, %rbx
je 0x5266
movq 0xae19(%rip), %r14      # 0xfff0
leaq -0x58(%rbp), %r13
movq 0x28(%rbx), %rax
cmpb $0x1, 0x1(%rax)
jne 0x5252
movl $0x3, %edx
movq %r14, %rdi
leaq 0x5f40(%rip), %rsi      # 0xb134
callq 0x42d0
movq 0x28(%rbx), %rax
movq 0x28(%rax), %rsi
movq 0x30(%rax), %rdx
movq %r14, %rdi
callq 0x42d0
movq %rax, %r15
movl $0x1, %edx
movq %rax, %rdi
leaq 0x6044(%rip), %rsi      # 0xb263
callq 0x42d0
movq 0x28(%rbx), %rsi
movq %r13, %rdi
callq 0x6506
movq -0x58(%rbp), %rsi
movq -0x50(%rbp), %rdx
movq %r15, %rdi
callq 0x42d0
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x5252
callq 0x4240
movq %rbx, %rdi
callq 0x41d0
movq %rax, %rbx
cmpq %r12, %rax
jne 0x51db
movq 0xad83(%rip), %rdi      # 0xfff0
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq 0xad68(%rip), %rdi      # 0xfff0
callq 0x4030
movq %rax, %rdi
callq 0x41c0
leaq -0x58(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x67a6
leaq -0x58(%rbp), %rdi
callq 0x8af8
movq %rax, %r15
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x52c3
callq 0x4240
leaq -0x58(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x67a6
leaq -0x58(%rbp), %rdi
callq 0x8af8
movq %rax, %r13
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x52f1
callq 0x4240
leaq -0x58(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x67a6
leaq -0x58(%rbp), %rdi
callq 0x8fa0
movq %rax, %r14
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x531f
callq 0x4240
leaq -0x58(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x67a6
leaq -0x58(%rbp), %rdi
callq 0x8fa0
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x534e
callq 0x4240
leaq -0x58(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x67a6
leaq -0x58(%rbp), %rdi
callq 0x8fa0
movq %rax, %rbx
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x537c
callq 0x4240
testq %r15, %r15
je 0x5b9c
testq %r14, %r14
je 0x5bbb
cmpq $0x0, -0x60(%rbp)
je 0x5bbb
testq %rbx, %rbx
je 0x5bbb
testq %r13, %r13
je 0x5bda
movq %r14, -0xc8(%rbp)
movq %rbx, -0xc0(%rbp)
xorps %xmm0, %xmm0
leaq -0x90(%rbp), %rsi
movaps %xmm0, (%rsi)
movq $0x0, 0x10(%rsi)
movq %r15, %rdi
callq 0x67fe
movq 0xac13(%rip), %rdi      # 0xfff0
leaq 0x5de3(%rip), %rsi      # 0xb1c7
movl $0x6, %edx
callq 0x42d0
movq -0x88(%rbp), %rsi
subq -0x90(%rbp), %rsi
sarq $0x3, %rsi
movabsq $-0x79435e50d79435e5, %rax # imm = 0x86BCA1AF286BCA1B
imulq %rax, %rsi
movq 0xabdb(%rip), %rdi      # 0xfff0
callq 0x41b0
movq %rax, %r14
leaq 0x5daa(%rip), %rsi      # 0xb1ce
movl $0x13, %edx
movq %rax, %rdi
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq -0x90(%rbp), %r12
movq -0x88(%rbp), %rbx
cmpq %rbx, %r12
je 0x54dd
movq %r15, -0xb8(%rbp)
movq %r13, %r15
leaq 0xae4c(%rip), %r13      # 0x102c8
leaq 0x38(%r12), %rsi
movq %r13, %rdi
callq 0x6b16
movq %rax, %r14
movq (%r12), %rax
movq %rax, (%r14)
leaq 0x8(%r14), %rdi
leaq 0x8(%r12), %rsi
callq 0x74b6
leaq 0x58(%r14), %rdi
leaq 0x58(%r12), %rsi
callq 0x4160
addq $0x78, %r14
leaq 0x78(%r12), %rsi
movq %r14, %rdi
callq 0x4160
addq $0x98, %r12
cmpq %rbx, %r12
jne 0x547c
movq -0x90(%rbp), %r12
movq %r15, %r13
movq -0xb8(%rbp), %r15
leaq -0x90(%rbp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
callq 0x82ce
movq (%r15), %rax
movq %r15, %rdi
callq *0x8(%rax)
movq %r13, %rdi
movq %rbx, %rsi
callq 0x67fe
movq 0xaae6(%rip), %rdi      # 0xfff0
leaq 0x5cb6(%rip), %rsi      # 0xb1c7
movl $0x6, %edx
callq 0x42d0
movq -0x88(%rbp), %rsi
subq -0x90(%rbp), %rsi
sarq $0x3, %rsi
movabsq $-0x79435e50d79435e5, %rax # imm = 0x86BCA1AF286BCA1B
imulq %rax, %rsi
movq 0xaaae(%rip), %rdi      # 0xfff0
callq 0x41b0
movq %rax, %r14
leaq 0x5c91(%rip), %rsi      # 0xb1e2
movl $0x13, %edx
movq %rax, %rdi
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq -0x90(%rbp), %r12
movq -0x88(%rbp), %rbx
cmpq %rbx, %r12
je 0x55fc
movq %r13, %r15
leaq 0xad56(%rip), %r13      # 0x102f8
leaq 0x38(%r12), %rsi
movq %r13, %rdi
callq 0x6b16
movq %rax, %r14
movq (%r12), %rax
movq %rax, (%r14)
leaq 0x8(%r14), %rdi
leaq 0x8(%r12), %rsi
callq 0x74b6
leaq 0x58(%r14), %rdi
leaq 0x58(%r12), %rsi
callq 0x4160
addq $0x78, %r14
leaq 0x78(%r12), %rsi
movq %r14, %rdi
callq 0x4160
addq $0x98, %r12
cmpq %rbx, %r12
jne 0x55a2
movq -0x90(%rbp), %r12
movq %r15, %r13
leaq -0x90(%rbp), %rdi
movq %r12, %rsi
callq 0x82ce
movq (%r13), %rax
movq %r13, %rdi
callq *0x8(%rax)
leaq -0x50(%rbp), %rcx
movl $0x0, (%rcx)
xorl %eax, %eax
movq %rax, 0x8(%rcx)
movq %rcx, 0x10(%rcx)
movq %rcx, 0x18(%rcx)
movq %rax, 0x20(%rcx)
movq 0xaca8(%rip), %r12      # 0x102e0
leaq 0xac91(%rip), %rax      # 0x102d0
cmpq %rax, %r12
je 0x568d
leaq 0xacad(%rip), %r13      # 0x102f8
leaq 0xacae(%rip), %r15      # 0x10300
leaq -0x58(%rbp), %r14
leaq 0x20(%r12), %rbx
movq %r13, %rdi
movq %rbx, %rsi
callq 0x82fe
cmpq %r15, %rax
je 0x5676
movq %r14, %rdi
movq %rbx, %rsi
callq 0x834e
movq %r12, %rdi
callq 0x41d0
movq %rax, %r12
leaq 0xac48(%rip), %rax      # 0x102d0
cmpq %rax, %r12
jne 0x5656
movq 0xa95c(%rip), %rdi      # 0xfff0
leaq 0x5b5b(%rip), %rsi      # 0xb1f6
movl $0x7, %edx
callq 0x42d0
movq -0x30(%rbp), %rsi
movq 0xa940(%rip), %rdi      # 0xfff0
callq 0x41b0
movq %rax, %r14
leaq 0x5b3f(%rip), %rsi      # 0xb1fe
movl $0x15, %edx
movq %rax, %rdi
callq 0x42d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq 0xa8f6(%rip), %rbx      # 0xfff0
leaq 0x5b13(%rip), %rsi      # 0xb214
movl $0x16, %edx
movq %rbx, %rdi
callq 0x42d0
movq -0xc8(%rbp), %r14
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq 0xa8bd(%rip), %rdi      # 0xfff0
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq 0xab99(%rip), %r12      # 0x102e0
leaq 0xab82(%rip), %rax      # 0x102d0
cmpq %rax, %r12
je 0x5791
leaq -0x58(%rbp), %r13
leaq 0x20(%r12), %rsi
movq %r13, %rdi
callq 0x850e
leaq -0x50(%rbp), %rcx
cmpq %rcx, %rax
je 0x577a
leaq 0x40(%r12), %rdi
movq %r14, %rsi
callq 0x5ea4
movq %r12, %rdi
callq 0x41d0
movq %rax, %r12
leaq 0xab44(%rip), %rax      # 0x102d0
cmpq %rax, %r12
jne 0x5757
movq (%r14), %rax
movq %r14, %rdi
callq *0x8(%rax)
movq 0xa84f(%rip), %rbx      # 0xfff0
leaq 0x5a83(%rip), %rsi      # 0xb22b
movl $0x16, %edx
movq %rbx, %rdi
callq 0x42d0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq 0xa81d(%rip), %rdi      # 0xfff0
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq 0xab29(%rip), %r15      # 0x10310
leaq 0xab12(%rip), %r13      # 0x10300
cmpq %r13, %r15
je 0x5829
leaq -0x58(%rbp), %r12
leaq 0x20(%r15), %rsi
movq %r12, %rdi
callq 0x850e
leaq -0x50(%rbp), %rcx
cmpq %rcx, %rax
je 0x5819
leaq 0x40(%r15), %rdi
movq -0x60(%rbp), %rsi
callq 0x5ea4
movq %r15, %rdi
callq 0x41d0
movq %rax, %r15
cmpq %r13, %rax
jne 0x57f7
movq -0x60(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movq 0xa7b6(%rip), %rbx      # 0xfff0
leaq 0x5a01(%rip), %rsi      # 0xb242
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x42d0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq 0xa784(%rip), %rdi      # 0xfff0
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq 0xaa60(%rip), %r14      # 0x102e0
leaq 0xaa49(%rip), %rax      # 0x102d0
cmpq %rax, %r14
movq -0xc0(%rbp), %rbx
je 0x58cf
leaq -0x58(%rbp), %r15
leaq 0x20(%r14), %rsi
movq %r15, %rdi
callq 0x850e
leaq -0x50(%rbp), %rcx
cmpq %rcx, %rax
jne 0x58b8
leaq 0x40(%r14), %rdi
movq %rbx, %rsi
callq 0x5ea4
movq %r14, %rdi
callq 0x41d0
movq %rax, %r14
leaq 0xaa06(%rip), %rax      # 0x102d0
cmpq %rax, %r14
jne 0x5897
movq 0xaa3a(%rip), %r14      # 0x10310
cmpq %r13, %r14
je 0x5910
leaq -0x58(%rbp), %r15
leaq 0x20(%r14), %rsi
movq %r15, %rdi
callq 0x850e
leaq -0x50(%rbp), %rcx
cmpq %rcx, %rax
jne 0x5900
leaq 0x40(%r14), %rdi
movq %rbx, %rsi
callq 0x5ea4
movq %r14, %rdi
callq 0x41d0
movq %rax, %r14
cmpq %r13, %rax
jne 0x58df
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x8(%rax)
movq 0xa6d0(%rip), %rbx      # 0xfff0
leaq 0x5936(%rip), %rsi      # 0xb25d
movl $0x7, %edx
movq %rbx, %rdi
callq 0x42d0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq 0xa69e(%rip), %rdi      # 0xfff0
callq 0x4030
movq %rax, %rdi
callq 0x41c0
leaq -0x58(%rbp), %rdi
callq 0x74fe
leaq -0x90(%rbp), %rdi
callq 0x6b96
jmp 0x5b4c
movq (%r14), %rax
movq -0x18(%rax), %rax
leaq (%r14,%rax), %rdi
movl 0x20(%r14,%rax), %esi
orl $0x1, %esi
callq 0x4420
movq 0xa658(%rip), %rbx      # 0xfff0
leaq 0x5746(%rip), %rsi      # 0xb0e5
movl $0x6, %edx
movq %rbx, %rdi
callq 0x42d0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq 0xa626(%rip), %rbx      # 0xfff0
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq 0xa8cf(%rip), %r14      # 0x102b0
cmpq %r12, %r14
je 0x5b4c
leaq 0x56fc(%rip), %r13      # 0xb0ed
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x56ec(%rip), %rsi      # 0xb0ec
callq 0x42d0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x5721(%rip), %rsi      # 0xb135
callq 0x42d0
movq 0x28(%r14), %rax
movq 0x28(%rax), %rsi
movq 0x30(%rax), %rdx
movq %rbx, %rdi
callq 0x42d0
movq 0x28(%r14), %rax
movb (%rax), %r15b
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x42d0
testb %r15b, %r15b
leaq 0x56ac(%rip), %rsi      # 0xb0fa
leaq 0x569a(%rip), %rax      # 0xb0ef
cmovneq %rax, %rsi
movl $0xa, %edx
movq %rbx, %rdi
callq 0x42d0
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x42d0
movq 0x28(%r14), %rax
movl 0x68(%rax), %esi
leaq -0x58(%rbp), %rdi
callq 0x6198
movq -0x58(%rbp), %rsi
movq -0x50(%rbp), %rdx
movq %rbx, %rdi
callq 0x42d0
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x5aa8
callq 0x4240
movl $0x1, %edx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x42d0
movq 0x28(%r14), %rax
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
movq %rbx, %rdi
callq 0x42d0
movq 0x28(%r14), %rax
cmpb $0x1, (%rax)
jne 0x5b11
movl $0xd, %edx
movq %rbx, %rdi
leaq 0x5621(%rip), %rsi      # 0xb105
callq 0x42d0
movq 0x28(%r14), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
movq %rbx, %rdi
callq 0x42d0
movl $0x2, %edx
movq %rax, %rdi
leaq 0x57c1(%rip), %rsi      # 0xb2cd
callq 0x42d0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4250
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %r14, %rdi
callq 0x41d0
movq %rax, %r14
cmpq %r12, %rax
jne 0x59f1
leaq -0x140(%rbp), %rdi
callq 0x6bca
leaq -0x1b8(%rbp), %rdi
callq 0x6bca
leaq -0x230(%rbp), %rdi
callq 0x6bca
leaq -0x2a8(%rbp), %rdi
callq 0x6bca
leaq -0x320(%rbp), %rdi
callq 0x6bca
xorl %eax, %eax
addq $0x2f8, %rsp            # imm = 0x2F8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x5595(%rip), %rdi      # 0xb138
leaq 0x55b0(%rip), %rsi      # 0xb15a
leaq 0x55ba(%rip), %rcx      # 0xb16b
movl $0x21, %edx
callq 0x4190
leaq 0x55c0(%rip), %rdi      # 0xb182
leaq 0x5591(%rip), %rsi      # 0xb15a
leaq 0x559b(%rip), %rcx      # 0xb16b
movl $0x23, %edx
callq 0x4190
leaq 0x55c4(%rip), %rdi      # 0xb1a5
leaq 0x5572(%rip), %rsi      # 0xb15a
leaq 0x557c(%rip), %rcx      # 0xb16b
movl $0x25, %edx
callq 0x4190
jmp 0x5e44
jmp 0x5e5d
jmp 0x5e44
jmp 0x5e5d
jmp 0x5e44
jmp 0x5e5d
jmp 0x5e44
jmp 0x5e5d
jmp 0x5e44
jmp 0x5e5d
movq %rax, %r14
movq -0x90(%rbp), %rdi
cmpq %r12, %rdi
je 0x5e47
callq 0x4240
jmp 0x5e47
jmp 0x5e44
jmp 0x5e5d
jmp 0x5e5d
movq %rax, %r14
movq -0xb0(%rbp), %rdi
cmpq %rbx, %rdi
je 0x5c70
callq 0x4240
jmp 0x5c70
movq %rax, %r14
movq -0x90(%rbp), %rdi
cmpq %r12, %rdi
je 0x5c86
callq 0x4240
jmp 0x5c86
movq %rax, %r14
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x5e6c
callq 0x4240
jmp 0x5e6c
jmp 0x5ca3
movq %rax, %r14
jmp 0x5e6c
movq %rax, %r14
movq -0x90(%rbp), %rdi
cmpq %r12, %rdi
je 0x5cc4
callq 0x4240
jmp 0x5cc4
movq %rax, %r14
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x5cdb
callq 0x4240
jmp 0x5cdb
movq %rax, %r14
movq -0x140(%rbp), %rdi
cmpq %r13, %rdi
je 0x5e78
callq 0x4240
jmp 0x5e78
jmp 0x5cf7
movq %rax, %r14
jmp 0x5e78
movq %rax, %r14
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x5d19
callq 0x4240
jmp 0x5d19
movq %rax, %r14
movq -0x140(%rbp), %rdi
cmpq %r13, %rdi
je 0x5d2f
callq 0x4240
jmp 0x5d2f
movq %rax, %r14
movq -0x1b8(%rbp), %rdi
cmpq %r12, %rdi
je 0x5e84
callq 0x4240
jmp 0x5e84
jmp 0x5d4b
movq %rax, %r14
jmp 0x5e84
movq %rax, %r14
movq -0x140(%rbp), %rdi
cmpq %r13, %rdi
je 0x5d6c
callq 0x4240
jmp 0x5d6c
movq %rax, %r14
movq -0x1b8(%rbp), %rdi
cmpq %r12, %rdi
je 0x5d82
callq 0x4240
jmp 0x5d82
movq %rax, %r14
movq -0x230(%rbp), %rdi
cmpq %rbx, %rdi
je 0x5e90
callq 0x4240
jmp 0x5e90
jmp 0x5d9e
movq %rax, %r14
jmp 0x5e90
movq %rax, %r14
movq -0x1b8(%rbp), %rdi
cmpq %r12, %rdi
je 0x5dbf
callq 0x4240
jmp 0x5dbf
movq %rax, %r14
movq -0x230(%rbp), %rdi
cmpq %rbx, %rdi
je 0x5dd5
callq 0x4240
jmp 0x5dd5
movq %rax, %r14
movq -0x2a8(%rbp), %rdi
cmpq %r13, %rdi
je 0x5e9c
callq 0x4240
jmp 0x5e9c
movq %rax, %r14
jmp 0x5e9c
jmp 0x5e1b
jmp 0x5e5d
jmp 0x5e31
jmp 0x5e31
jmp 0x5e1b
jmp 0x5e1b
jmp 0x5e5d
jmp 0x5e44
jmp 0x5e5d
jmp 0x5e44
jmp 0x5e1b
jmp 0x5e1b
jmp 0x5e1b
jmp 0x5e1b
jmp 0x5e1b
jmp 0x5e1b
jmp 0x5e1b
jmp 0x5e1b
movq %rax, %r14
leaq -0x58(%rbp), %rdi
callq 0x74fe
jmp 0x5e34
jmp 0x5e5d
jmp 0x5e5d
jmp 0x5e5d
jmp 0x5e31
movq %rax, %r14
leaq -0x90(%rbp), %rdi
callq 0x6b96
jmp 0x5e60
jmp 0x5e5d
movq %rax, %r14
movq -0x58(%rbp), %rdi
leaq -0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x5e60
callq 0x4240
jmp 0x5e60
jmp 0x5e5d
movq %rax, %r14
leaq -0x140(%rbp), %rdi
callq 0x6bca
leaq -0x1b8(%rbp), %rdi
callq 0x6bca
leaq -0x230(%rbp), %rdi
callq 0x6bca
leaq -0x2a8(%rbp), %rdi
callq 0x6bca
leaq -0x320(%rbp), %rdi
callq 0x6bca
movq %r14, %rdi
callq 0x4450