// File: /workspace/github_cpp_makefile_star2_O2/BenLangmead[P]bowtie/./ebwt_search_backtrack.h
// Function: GreedyDFSRangeSource::reportFullAlignment(unsigned int, unsigned int, unsigned int, int, unsigned short)
bool reportFullAlignment(uint32_t stackDepth,
			TIndexOffU top,
			TIndexOffU bot,
	                         int stratum,
	                         uint16_t cost)
	{
		assert_gt(bot, top);
		if(stackDepth == 0 && !_reportExacts) {
			// We are not reporting exact hits (usually because we've
			// already reported them as part of a previous invocation
			// of the backtracker)
			return false;
		}
		assert(!_reportRanges);
		TIndexOffU spread = bot - top;
		// Pick a random spot in the range to begin report
		TIndexOffU r = top + (_rand.nextU<TIndexOffU>() % spread);
		for(TIndexOffU i = 0; i < spread; i++) {
			TIndexOffU ri = r + i;
			if(ri >= bot) ri -= spread;
			// reportChaseOne takes the _mms[] list in terms of
			// their indices into the query string; not in terms
			// of their offset from the 3' or 5' end.
			assert_geq(cost, (uint32_t)(stratum << 14));
			if(_ebwt->reportChaseOne((*_qry), _qual, _name,
			                         _mms, _refcs,
			                         stackDepth, ri, top, bot,
			                         (uint32_t)_qlen, stratum, cost, _patid,
			                         _seed, _params))
			{
				// Return value of true means that we can stop
				return true;
			}
			// Return value of false means that we should continue
			// searching.  This could happen if we the call to
			// reportChaseOne() reported a hit, but the user asked for
			// multiple hits and we haven't reached the ceiling yet.
			// This might also happen if the call to reportChaseOne()
			// didn't report a hit because the alignment was spurious
			// (i.e. overlapped some padding).
		}
		// All range elements were examined and we should keep going
		return false;
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movl %r9d, %r13d
movq %r8, 0x30(%rsp)
movl %ecx, %r14d
movl %edx, %r15d
movl %esi, %ebp
movq %rdi, %r12
testl %esi, %esi
jne 0x36914
cmpb $0x1, 0xa4(%r12)
jne 0x36a00
movl %r14d, %ebx
subl %r15d, %ebx
leaq 0x134(%r12), %rdi
callq 0x264f6
xorl %edx, %edx
movl %ebx, 0x4(%rsp)
divl %ebx
addl %r15d, %edx
movq %rdx, 0x28(%rsp)
leaq 0x58(%r12), %rax
movq %rax, 0x20(%rsp)
leaq 0x78(%r12), %rax
movq %rax, 0x18(%rsp)
movl %ebp, %eax
movq %rax, 0x10(%rsp)
movzwl %r13w, %eax
movq %rax, 0x8(%rsp)
movl %r14d, %ebx
xorl %r13d, %r13d
cmpl %ebx, %r15d
setne %al
movl %eax, (%rsp)
je 0x36a07
movq 0x28(%rsp), %rax
addl %r13d, %eax
cmpl %r14d, %eax
movl 0x4(%rsp), %ecx
movl $0x0, %edx
cmovbl %edx, %ecx
subl %ecx, %eax
movq 0x20(%r12), %rdi
movq (%r12), %rsi
movq 0x10(%r12), %rdx
movq 0x18(%r12), %rcx
movl 0x8(%r12), %r10d
movl 0x1d8(%r12), %r11d
movq %r15, %rbp
movq %r14, %r15
movl 0x1dc(%r12), %r14d
subq $0x8, %rsp
movq 0x28(%rsp), %r8
movq 0x20(%rsp), %r9
pushq $0x0
pushq 0x28(%r12)
pushq %r14
movq %r15, %r14
movq %rbp, %r15
pushq %r11
pushq 0x30(%rsp)
pushq 0x60(%rsp)
pushq %r10
pushq %r14
pushq %rbp
pushq %rax
pushq 0x68(%rsp)
callq 0x36a52
addq $0x60, %rsp
incl %r13d
decl %ebx
testb %al, %al
je 0x36961
jmp 0x36a07
movl $0x0, (%rsp)
movl (%rsp), %eax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop