// File: chhylp123[P]hifiasm/hic.cpp
// Function: collect_votes(s_hit*, unsigned long)
inline uint64_t collect_votes(s_hit* a, uint64_t n)
{
    if(n == 0) return 0;
    if(n == 1) return (a[0].off_cnt>>32); //seed length, is right
    long long i = 0;
    uint64_t cur_beg, cur_end, beg, end, ovlp = 0, tLen = 0; 
    cur_end = (uint32_t)a[n-1].off_cnt;
    cur_beg = cur_end + 1 - (a[n-1].off_cnt>>32);
    
    if(n >= 2)
    {
        for (i = n - 2; i >= 0; i--)
        {
            end = (uint32_t)a[i].off_cnt;
            beg = end + 1 - (a[i].off_cnt>>32);
            if(MAX(cur_beg, beg) <= MIN(cur_end, end))
            {
                cur_beg = MIN(cur_beg, beg);
                ///cur_end = MAX(cur_end, end);
            }
            else
            {
                ovlp += (cur_end + 1 - cur_beg);
                cur_beg = beg;
                cur_end = end;
            }
        }
    }
    
    ovlp += (cur_end + 1 - cur_beg);
    tLen = (uint32_t)a[n-1].off_cnt + 1 - cur_beg;
    tLen = tLen - ovlp;
    tLen = tLen << 16;
    return ovlp | tLen;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x2136a0
movq $0x0, -0x8(%rbp)
jmp 0x213884
cmpq $0x1, -0x18(%rbp)
jne 0x2136bc
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
shrq $0x20, %rax
movq %rax, -0x8(%rbp)
jmp 0x213884
movq $0x0, -0x20(%rbp)
movq $0x0, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
subq $0x1, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
movl %eax, %eax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rdx
subq $0x1, %rdx
shlq $0x4, %rdx
addq %rdx, %rcx
movq 0x8(%rcx), %rcx
shrq $0x20, %rcx
subq %rcx, %rax
movq %rax, -0x28(%rbp)
cmpq $0x2, -0x18(%rbp)
jb 0x213828
movq -0x18(%rbp), %rax
subq $0x2, %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jl 0x213826
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
movl %eax, %eax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq -0x10(%rbp), %rcx
movq -0x20(%rbp), %rdx
shlq $0x4, %rdx
addq %rdx, %rcx
movq 0x8(%rcx), %rcx
shrq $0x20, %rcx
subq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x38(%rbp), %rax
jb 0x213790
movq -0x28(%rbp), %rax
movq %rax, -0x58(%rbp)
jmp 0x213798
movq -0x38(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x30(%rbp), %rax
cmpq -0x40(%rbp), %rax
ja 0x2137b4
movq -0x30(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x2137bc
movq -0x40(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
movq -0x68(%rbp), %rcx
cmpq %rcx, %rax
ja 0x2137ef
movq -0x28(%rbp), %rax
cmpq -0x38(%rbp), %rax
ja 0x2137dd
movq -0x28(%rbp), %rax
movq %rax, -0x70(%rbp)
jmp 0x2137e5
movq -0x38(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0x213813
movq -0x30(%rbp), %rax
addq $0x1, %rax
subq -0x28(%rbp), %rax
addq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0x213815
movq -0x20(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x213732
jmp 0x213828
movq -0x30(%rbp), %rax
addq $0x1, %rax
subq -0x28(%rbp), %rax
addq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
subq $0x1, %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
addl $0x1, %eax
movl %eax, %eax
subq -0x28(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
subq -0x48(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
shlq $0x10, %rax
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
orq -0x50(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
popq %rbp
retq
nopw (%rax,%rax)