// File: tedsharpe[P]ORFCall/ORFCall.cc
// Function: (anonymous namespace)::ORFCaller::findAlternateCodons(std::vector<unsigned char, std::allocator<unsigned char>> const&, std::vector<unsigned char, std::allocator<unsigned char>> const&, (anonymous namespace)::Alignment const&)
ReadReport findAlternateCodons( Sequence const& seq,
                                    Quals const& quals,
                                    Alignment const& aln )
    {
        AlignmentScorer alignmentScorer(mRef,aln.getRefStart(),mMinQ);
        auto refItr(mRef.getRef().begin()+aln.getRefStart());
        auto refEnd(mRef.getRef().begin()+aln.getRefEnd());
        if ( !aln.isReadRC() )
        {
            auto readItr(seq.begin()+aln.getReadStart());
            auto qualItr(quals.begin()+aln.getReadStart());
            while ( refItr != refEnd )
            {
                alignmentScorer(*refItr,*readItr,*qualItr);
                ++refItr; ++readItr; ++qualItr;
            }
        }
        else
        {
            auto readItr(seq.rbegin()+aln.getReadStart());
            auto qualItr(quals.rbegin()+aln.getReadStart());
            while ( refItr != refEnd )
            {
                alignmentScorer(*refItr,complement(*readItr),*qualItr);
                ++refItr; ++readItr; ++qualItr;
            }
        }
        return alignmentScorer.getReport();
    }

// Assembly:
subq $0x1a8, %rsp            # imm = 0x1A8
movq %rdi, 0x70(%rsp)
movq %rdi, %rax
movq %rax, 0x78(%rsp)
movq %rdi, 0x1a0(%rsp)
movq %rsi, 0x198(%rsp)
movq %rdx, 0x190(%rsp)
movq %rcx, 0x188(%rsp)
movq %r8, 0x180(%rsp)
movq 0x198(%rsp), %rax
movq %rax, 0x88(%rsp)
movq (%rax), %rax
movq %rax, 0x80(%rsp)
movq 0x180(%rsp), %rdi
callq 0xef90
movq 0x80(%rsp), %rsi
movq %rax, %rdx
movq 0x88(%rsp), %rax
movzbl 0x8(%rax), %ecx
leaq 0x108(%rsp), %rdi
callq 0xefa0
movq 0x88(%rsp), %rax
movq (%rax), %rdi
callq 0xf250
movq %rax, 0x90(%rsp)
jmp 0xde92
movq 0x90(%rsp), %rdi
callq 0x1dc60
movq %rax, 0xf8(%rsp)
movq 0x180(%rsp), %rdi
callq 0xef90
movq %rax, 0x68(%rsp)
jmp 0xdebb
movq 0x68(%rsp), %rsi
leaq 0xf8(%rsp), %rdi
callq 0x1a140
movq %rax, %rcx
movq 0x88(%rsp), %rax
movq %rcx, 0x100(%rsp)
movq (%rax), %rdi
callq 0xf250
movq %rax, 0x60(%rsp)
jmp 0xdeef
movq 0x60(%rsp), %rdi
callq 0x1dc60
movq %rax, 0xd8(%rsp)
movq 0x180(%rsp), %rdi
callq 0xf260
movq %rax, 0x58(%rsp)
jmp 0xdf15
movq 0x58(%rsp), %rsi
leaq 0xd8(%rsp), %rdi
callq 0x1a140
movq %rax, 0xe0(%rsp)
movq 0x180(%rsp), %rdi
callq 0xf270
movb %al, 0x57(%rsp)
jmp 0xdf42
movb 0x57(%rsp), %al
testb $0x1, %al
jne 0xe09a
jmp 0xdf50
movq 0x190(%rsp), %rdi
callq 0x1dc60
movq %rax, 0xc8(%rsp)
movq 0x180(%rsp), %rdi
callq 0xf280
movq %rax, 0x48(%rsp)
jmp 0xdf79
movq 0x48(%rsp), %rsi
leaq 0xc8(%rsp), %rdi
callq 0x1a140
movq %rax, 0xd0(%rsp)
movq 0x188(%rsp), %rdi
callq 0x1dc60
movq %rax, 0xb8(%rsp)
movq 0x180(%rsp), %rdi
callq 0xf280
movq %rax, 0x40(%rsp)
jmp 0xdfbc
movq 0x40(%rsp), %rsi
leaq 0xb8(%rsp), %rdi
callq 0x1a140
movq %rax, 0xc0(%rsp)
leaq 0x100(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x19f20
testb $0x1, %al
jne 0xdff4
jmp 0xe095
leaq 0x100(%rsp), %rdi
callq 0x1a180
movzbl (%rax), %eax
movl %eax, 0x38(%rsp)
leaq 0xd0(%rsp), %rdi
callq 0x1a180
movzbl (%rax), %eax
movl %eax, 0x3c(%rsp)
leaq 0xc0(%rsp), %rdi
callq 0x1a180
movl 0x38(%rsp), %esi
movl 0x3c(%rsp), %edx
movzbl (%rax), %ecx
leaq 0x108(%rsp), %rdi
callq 0xf290
jmp 0xe043
leaq 0x100(%rsp), %rdi
callq 0x19f60
leaq 0xd0(%rsp), %rdi
callq 0x19f60
leaq 0xc0(%rsp), %rdi
callq 0x19f60
jmp 0xdfd6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xf0(%rsp)
movl %eax, 0xec(%rsp)
leaq 0x108(%rsp), %rdi
callq 0xf530
jmp 0xe215
jmp 0xe1e7
movq 0x190(%rsp), %rsi
leaq 0xa8(%rsp), %rdi
callq 0x1e2c0
movq 0x180(%rsp), %rdi
callq 0xf280
movq %rax, 0x30(%rsp)
jmp 0xe0c3
movq 0x30(%rsp), %rdx
leaq 0xb0(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x1e310
jmp 0xe0df
movq 0x188(%rsp), %rsi
leaq 0x98(%rsp), %rdi
callq 0x1e2c0
movq 0x180(%rsp), %rdi
callq 0xf280
movq %rax, 0x28(%rsp)
jmp 0xe108
movq 0x28(%rsp), %rdx
leaq 0xa0(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x1e310
jmp 0xe124
jmp 0xe126
leaq 0x100(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x19f20
testb $0x1, %al
jne 0xe144
jmp 0xe1e5
leaq 0x100(%rsp), %rdi
callq 0x1a180
movb (%rax), %al
movb %al, 0x1f(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x1e360
movq %rax, 0x20(%rsp)
jmp 0xe16b
movq 0x20(%rsp), %rax
movzbl (%rax), %edi
callq 0xa980
movb %al, 0xf(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x1e360
movq %rax, 0x10(%rsp)
jmp 0xe190
movb 0xf(%rsp), %al
movb 0x1f(%rsp), %dl
movq 0x10(%rsp), %rcx
movzbl (%rcx), %ecx
movzbl %dl, %esi
movzbl %al, %edx
leaq 0x108(%rsp), %rdi
callq 0xf290
jmp 0xe1b5
leaq 0x100(%rsp), %rdi
callq 0x19f60
leaq 0xb0(%rsp), %rdi
callq 0x1e390
jmp 0xe1d1
leaq 0xa0(%rsp), %rdi
callq 0x1e390
jmp 0xe1e0
jmp 0xe126
jmp 0xe1e7
movq 0x70(%rsp), %rdi
leaq 0x108(%rsp), %rsi
callq 0xf4c0
jmp 0xe1fb
leaq 0x108(%rsp), %rdi
callq 0xf530
movq 0x78(%rsp), %rax
addq $0x1a8, %rsp            # imm = 0x1A8
retq
movq 0xf0(%rsp), %rdi
callq 0x4510
nopw %cs:(%rax,%rax)