// File: BenLangmead[P]bowtie/./ebwt.h
// Function: Ebwt::checkOrigs(EList<SString<char>, 128> const&, bool) const
void Ebwt::checkOrigs(const EList<BTRefString >& os, bool mirror) const
{
	BTRefString rest;
	restore(rest);
	TIndexOffU restOff = 0;
	size_t i = 0, j = 0;
	if(mirror) {
		// TODO: FIXME
		return;
	}
	while(i < os.size()) {
		size_t olen = os[i].length();
		for(; j < olen; j++) {
			size_t joff = j;
			if(mirror) joff = olen - j - 1;
			if((int)os[i][joff] == 4) {
				// Skip over Ns
				if(!mirror) {
					while(j < olen && (int)os[i][j] == 4) j++;
				} else {
					while(j < olen && (int)os[i][olen-j-1] == 4) j++;
				}
				j--;
				continue;
			}

			assert_eq(os[i][joff], rest[restOff]);
			restOff++;
		}
		if(j == os[i].length()) {
			// Moved to next sequence
			i++;
			j = 0;
		} else {
			// Just jumped over a gap
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1d0, %rsp            # imm = 0x1D0
movb %dl, %al
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
andb $0x1, %al
movb %al, -0x11(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq -0x38(%rbp), %rdi
movq %rdi, -0x80(%rbp)
callq 0x19450
movq -0x88(%rbp), %rdi
movq -0x80(%rbp), %rsi
callq 0x8e60
jmp 0x9324
movq $0x0, -0x50(%rbp)
movq $0x0, -0x58(%rbp)
movq $0x0, -0x60(%rbp)
testb $0x1, -0x11(%rbp)
je 0x9368
movl $0x1, -0x64(%rbp)
jmp 0x98e1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x196d0
jmp 0x98f3
jmp 0x936a
movq -0x58(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x10(%rbp), %rdi
callq 0x19490
movq %rax, -0x90(%rbp)
jmp 0x9387
movq -0x98(%rbp), %rax
movq -0x90(%rbp), %rcx
cmpq %rcx, %rax
jae 0x98da
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x194b0
movq %rax, -0xa0(%rbp)
jmp 0x93b4
movq -0xa0(%rbp), %rdi
callq 0x195b0
movq %rax, -0xa8(%rbp)
jmp 0x93c9
movq -0xa8(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x60(%rbp), %rax
cmpq -0x70(%rbp), %rax
jae 0x9874
movq -0x60(%rbp), %rax
movq %rax, -0x78(%rbp)
testb $0x1, -0x11(%rbp)
je 0x9400
movq -0x70(%rbp), %rax
subq -0x60(%rbp), %rax
subq $0x1, %rax
movq %rax, -0x78(%rbp)
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x194b0
movq %rax, -0xb0(%rbp)
jmp 0x9416
movq -0xb0(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x195d0
movq %rax, -0xb8(%rbp)
jmp 0x942f
movq -0xb8(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x4, %eax
jne 0x954d
testb $0x1, -0x11(%rbp)
jne 0x94bd
jmp 0x944a
movq -0x60(%rbp), %rcx
xorl %eax, %eax
cmpq -0x70(%rbp), %rcx
movb %al, -0xb9(%rbp)
jae 0x94a1
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x194b0
movq %rax, -0xc8(%rbp)
jmp 0x9472
movq -0xc8(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0x195d0
movq %rax, -0xd0(%rbp)
jmp 0x948b
movq -0xd0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x4, %eax
sete %al
movb %al, -0xb9(%rbp)
movb -0xb9(%rbp), %al
testb $0x1, %al
jne 0x94ad
jmp 0x94bb
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x944a
jmp 0x953c
jmp 0x94bf
movq -0x60(%rbp), %rcx
xorl %eax, %eax
cmpq -0x70(%rbp), %rcx
movb %al, -0xd1(%rbp)
jae 0x9520
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x194b0
movq %rax, -0xe0(%rbp)
jmp 0x94e7
movq -0xe0(%rbp), %rdi
movq -0x70(%rbp), %rax
movq -0x60(%rbp), %rsi
notq %rsi
addq %rax, %rsi
callq 0x195d0
movq %rax, -0xe8(%rbp)
jmp 0x950a
movq -0xe8(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x4, %eax
sete %al
movb %al, -0xd1(%rbp)
movb -0xd1(%rbp), %al
testb $0x1, %al
jne 0x952c
jmp 0x953a
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x94bf
jmp 0x953c
movq -0x60(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x9863
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x194b0
movq %rax, -0xf0(%rbp)
jmp 0x9563
movq -0xf0(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x195d0
movq %rax, -0xf8(%rbp)
jmp 0x957c
movq -0xf8(%rbp), %rax
movsbl (%rax), %eax
movl %eax, -0x104(%rbp)
movq -0x50(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x18f90
movq %rax, -0x100(%rbp)
jmp 0x95a2
movl -0x104(%rbp), %eax
movq -0x100(%rbp), %rcx
movsbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x9857
movq 0x409ff(%rip), %rdi     # 0x49fc0
leaq 0x35b51(%rip), %rsi     # 0x3f119
callq 0x5360
movq %rax, -0x110(%rbp)
jmp 0x95d6
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x194b0
movq %rax, -0x118(%rbp)
jmp 0x95ec
movq -0x118(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x195d0
movq %rax, -0x120(%rbp)
jmp 0x9605
movq -0x110(%rbp), %rdi
movq -0x120(%rbp), %rax
movsbl (%rax), %esi
callq 0x54a0
movq %rax, -0x128(%rbp)
jmp 0x9624
movq -0x128(%rbp), %rdi
leaq 0x35afd(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, -0x130(%rbp)
jmp 0x9640
movq -0x130(%rbp), %rdi
leaq 0xf192(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, -0x138(%rbp)
jmp 0x965c
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x194b0
movq %rax, -0x140(%rbp)
jmp 0x9672
movq -0x140(%rbp), %rdi
movq -0x78(%rbp), %rsi
callq 0x195d0
movq %rax, -0x148(%rbp)
jmp 0x968b
movq -0x138(%rbp), %rdi
movq -0x148(%rbp), %rax
movsbl (%rax), %esi
callq 0x54a0
movq %rax, -0x150(%rbp)
jmp 0x96aa
movq -0x150(%rbp), %rdi
leaq 0xf158(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, -0x158(%rbp)
jmp 0x96c6
movq -0x158(%rbp), %rdi
leaq 0x35a60(%rip), %rsi     # 0x3f134
callq 0x5360
movq %rax, -0x160(%rbp)
jmp 0x96e2
movq -0x50(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x18f90
movq %rax, -0x168(%rbp)
jmp 0x96f8
movq -0x160(%rbp), %rdi
movq -0x168(%rbp), %rax
movsbl (%rax), %esi
callq 0x54a0
movq %rax, -0x170(%rbp)
jmp 0x9717
movq -0x170(%rbp), %rdi
leaq 0x35a0a(%rip), %rsi     # 0x3f12f
callq 0x5360
movq %rax, -0x178(%rbp)
jmp 0x9733
movq -0x178(%rbp), %rdi
leaq 0xf09f(%rip), %rsi      # 0x187e0
callq 0x5120
movq %rax, -0x180(%rbp)
jmp 0x974f
movq -0x50(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x18f90
movq %rax, -0x188(%rbp)
jmp 0x9765
movq -0x180(%rbp), %rdi
movq -0x188(%rbp), %rax
movsbl (%rax), %esi
callq 0x54a0
movq %rax, -0x190(%rbp)
jmp 0x9784
movq -0x190(%rbp), %rdi
leaq 0xf07e(%rip), %rsi      # 0x18810
callq 0x5120
movq %rax, -0x198(%rbp)
jmp 0x97a0
movq -0x198(%rbp), %rdi
leaq 0x37e0a(%rip), %rsi     # 0x415b8
callq 0x5360
movq %rax, -0x1a0(%rbp)
jmp 0x97bc
movq -0x1a0(%rbp), %rdi
movq 0x407b6(%rip), %rsi     # 0x49f80
callq 0x53c0
jmp 0x97d1
movq 0x407e8(%rip), %rdi     # 0x49fc0
leaq 0x358de(%rip), %rsi     # 0x3f0bd
callq 0x5360
movq %rax, -0x1a8(%rbp)
jmp 0x97ed
movq -0x1a8(%rbp), %rdi
leaq 0x36f8f(%rip), %rsi     # 0x4078a
callq 0x5360
movq %rax, -0x1b0(%rbp)
jmp 0x9809
movq -0x1b0(%rbp), %rdi
movl $0xafd, %esi            # imm = 0xAFD
callq 0x5750
movq %rax, -0x1b8(%rbp)
jmp 0x9823
movq -0x1b8(%rbp), %rdi
movq 0x4074f(%rip), %rsi     # 0x49f80
callq 0x53c0
jmp 0x9838
leaq 0x36e2b(%rip), %rdi     # 0x4066a
leaq 0x35877(%rip), %rsi     # 0x3f0bd
movl $0xafd, %edx            # imm = 0xAFD
leaq 0x35b3e(%rip), %rcx     # 0x3f390
callq 0x51e0
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x93d4
movq -0x60(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x194b0
movq %rax, -0x1c0(%rbp)
jmp 0x9895
movq -0x1c0(%rbp), %rdi
callq 0x195b0
movq %rax, -0x1d0(%rbp)
jmp 0x98aa
movq -0x1c8(%rbp), %rax
movq -0x1d0(%rbp), %rcx
cmpq %rcx, %rax
jne 0x98d3
movq -0x58(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
movq $0x0, -0x60(%rbp)
jmp 0x98d5
jmp 0x98d5
jmp 0x936a
movl $0x0, -0x64(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x196d0
addq $0x1d0, %rsp            # imm = 0x1D0
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x5760
nopl (%rax)