// File: /workspace/github_cpp_makefile_star2_O2/Infinidat[P]slimfastq/usrs.cpp
// Function: UsrSave::get_record()
bool UsrSave::get_record() {

    load_check();

#define CHECK_OVERFLOW rarely_if (m_cur >= m_end) return mid_rec_msg()

    if (m_cur >= m_end) return m_valid = false;

    int currec = m_cur;
    expect('@');
    int sanity = MAX_ID_LLEN;
    while (--  sanity and m_buff[m_cur] != '\n')
        m_cur ++ ;
    rarely_if( not sanity)
        // croak("record %llu: rec line too long", g_record_count);
        return get_oversized_record(currec);

    mp.rec_end = &(m_buff[m_cur]);
    CHECK_OVERFLOW ;
    expect('\n');

    UCHAR update_solid_pf = 0;
    if (m_solid) {
        rarely_if (m_last.solid_pf_gen != m_buff[m_cur])
            update_solid_pf = m_buff[m_cur];
        m_cur++;
    }

    mp.gen = &(m_buff[m_cur]);
    const int gi = m_cur ;
    sanity = MAX_GN_LLEN;
    while (-- sanity and m_buff[m_cur] != '\n')
        m_cur ++;

    rarely_if( not sanity)
        return get_oversized_record(currec);

    rarely_if(update_solid_pf)  // update only after last potential get_oversized_record
        update(ET_SOLPF_GEN, update_solid_pf);

    CHECK_OVERFLOW;
    rarely_if(m_llen != m_cur-gi)
        update(ET_LLEN, m_cur-gi);

    expect('\n');
    expect('+' );
    for (sanity = MAX_ID_LLEN;
         --  sanity and m_buff[m_cur] != '\n';
         m_cur ++ );
    CHECK_OVERFLOW;
    rarely_if(not sanity)
        croak("wierd second id at record %llu", g_record_count);

    expect('\n');

    if (m_solid) {
        rarely_if (m_last.solid_pf_qlt != m_buff[m_cur])
            update(ET_SOLPF_QLT, m_buff[m_cur]);

        m_cur++;
    }

    mp.qlt = &(m_buff[m_cur]);
    // m_cur += m_llen;
    m_qlen = 0;
    for (sanity = MAX_GN_LLEN;
         -- sanity and m_buff[m_cur+m_qlen] != '\n';
         m_qlen++);

    rarely_if( not sanity)
        return get_oversized_record(currec);

    rarely_if( m_qlen != m_llen)
        update(ET_QLEN, m_qlen);

    m_cur += m_qlen;
    CHECK_OVERFLOW;

    expect('\n');

    mp.prev_rec = mp.rec;
    mp.prev_rec_end = mp.rec_end;
    mp.rec = &(m_buff[currec+1]);

    return true;

#undef  CHECK_OVERFLOW
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x8398
movslq 0x124048(%rbx), %r14
cmpl 0x12404c(%rbx), %r14d
jge 0x77e1
pushq $0x40
popq %rsi
movq %rbx, %rdi
callq 0x83d0
movl 0x124048(%rbx), %edx
leaq 0x31(%rbx), %r15
movslq %edx, %rax
leaq (%rbx,%rax), %rsi
addq $0x31, %rsi
xorl %ecx, %ecx
cmpl $0x1fff, %ecx           # imm = 0x1FFF
je 0x7957
cmpb $0xa, (%rsi,%rcx)
je 0x77f2
leal (%rdx,%rcx), %edi
incl %edi
movl %edi, 0x124048(%rbx)
incq %rcx
jmp 0x77bf
movb $0x0, 0x30(%rbx)
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq (%rax,%rbx), %rdx
addq %rcx, %rdx
addq $0x31, %rdx
addl %ecx, %eax
movq %rdx, 0x1240a8(%rbx)
cmpl %eax, 0x12404c(%rbx)
jle 0x7a40
pushq $0xa
popq %rsi
movq %rbx, %rdi
callq 0x83d0
movl 0x124048(%rbx), %ebp
cmpb $0x1, 0x124064(%rbx)
jne 0x7844
movslq %ebp, %rax
movb 0x31(%rbx,%rax), %al
cmpb %al, 0x28(%rbx)
jne 0x783a
xorl %eax, %eax
incl %ebp
movl %ebp, 0x124048(%rbx)
jmp 0x7846
xorl %eax, %eax
movslq %ebp, %rcx
leaq (%r15,%rcx), %rdx
movq %rdx, 0x1240c0(%rbx)
leaq (%rcx,%rbx), %rdx
addq $0x31, %rdx
xorl %esi, %esi
movl %ebp, %ecx
cmpl $0xffff, %esi           # imm = 0xFFFF
je 0x7957
cmpb $0xa, (%rdx,%rsi)
je 0x787f
incl %ecx
movl %ecx, 0x124048(%rbx)
incq %rsi
jmp 0x7860
testb %al, %al
jne 0x79bd
cmpl 0x12404c(%rbx), %ecx
jge 0x7a40
subl %ebp, %ecx
cmpl %ecx, 0x12405c(%rbx)
jne 0x79d6
pushq $0xa
popq %rsi
movq %rbx, %rdi
callq 0x83d0
pushq $0x2b
popq %rsi
movq %rbx, %rdi
callq 0x83d0
movslq 0x124048(%rbx), %rax
leaq (%rax,%rbx), %rcx
addq $0x31, %rcx
xorl %edx, %edx
cmpl $0x1fff, %edx           # imm = 0x1FFF
je 0x7a20
cmpb $0xa, (%rcx,%rdx)
je 0x78e7
incl %eax
movl %eax, 0x124048(%rbx)
incq %rdx
jmp 0x78c8
cmpl 0x12404c(%rbx), %eax
jge 0x7a40
pushq $0xa
popq %rsi
movq %rbx, %rdi
callq 0x83d0
movl 0x124048(%rbx), %eax
cmpb $0x1, 0x124064(%rbx)
jne 0x7926
movslq %eax, %rcx
movzbl 0x31(%rbx,%rcx), %ecx
cmpb %cl, 0x29(%rbx)
jne 0x79e8
incl %eax
movl %eax, 0x124048(%rbx)
movslq %eax, %rcx
leaq (%r15,%rcx), %rdx
movq %rdx, 0x1240c8(%rbx)
leaq (%rcx,%rbx), %rdx
addq $0x31, %rdx
xorl %ecx, %ecx
movl %ecx, 0x124060(%rbx)
cmpl $0xffff, %ecx           # imm = 0xFFFF
je 0x7957
cmpb $0xa, (%rdx,%rcx)
je 0x796f
incq %rcx
jmp 0x793e
pushq $0x1
popq %rdx
movq %rbx, %rdi
movl %r14d, %esi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x7648
cmpl %ecx, 0x12405c(%rbx)
jne 0x7a01
addl %ecx, %eax
movl %eax, 0x124048(%rbx)
cmpl 0x12404c(%rbx), %eax
jge 0x7a40
pushq $0xa
popq %rsi
movq %rbx, %rdi
callq 0x83d0
movups 0x1240a0(%rbx), %xmm0
movups %xmm0, 0x1240b0(%rbx)
leaq (%r14,%r15), %rax
incq %rax
movq %rax, 0x1240a0(%rbx)
movb $0x1, %al
jmp 0x77e7
movzbl %al, %edx
pushq $0x2
popq %rsi
movq %rbx, %rdi
callq 0x7500
movl 0x124048(%rbx), %ecx
jmp 0x7887
movzwl %cx, %edx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x7500
jmp 0x78a1
movzwl %cx, %edx
pushq $0x3
popq %rsi
movq %rbx, %rdi
callq 0x7500
movl 0x124048(%rbx), %eax
jmp 0x791e
movzwl %cx, %edx
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0x7500
movl 0x124048(%rbx), %eax
movl 0x124060(%rbx), %ecx
jmp 0x797b
cmpl 0x12404c(%rbx), %eax
jge 0x7a40
leaq 0x77a1(%rip), %rax      # 0xf1d0
movq (%rax), %rsi
leaq 0x2846(%rip), %rdi      # 0xa27f
xorl %eax, %eax
callq 0x2350
callq 0x762e
nop