LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_cpp_makefile_star2_O1/nicoeps[P]NicoGB/src/nicogb.cpp
// Function: NicoGB::NicoGB()
NicoGB::NicoGB() :
    memory(cartridge, joypad, timer),
    ppu(memory),
    cpu(memory, ppu),
    loaded(cartridge.loaded),
    title(cartridge.title),
    framebuffer(ppu.framebuffer) {
        timer = Timer();
        joypad = Joypad();
        cartridge = Cartridge();
        speed = 0;
        epoch = std::chrono::high_resolution_clock::from_time_t(0);
        last = millis();
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x80, %rsp
movq %rdi, %rbx
callq 0x9030
leaq 0x8(%rbx), %r14
movq %r14, %rdi
callq 0x241c
leaq 0x80(%rbx), %r13
movq %r13, %rdi
callq 0x5edc
leaq 0x88(%rbx), %r15
movq %r15, %rdi
movq %r14, %rsi
movq %r13, %rdx
movq %rbx, %rcx
callq 0x6c18
leaq 0x140(%rbx), %r12
movq %r12, %rdi
movq %r15, %rsi
callq 0x7974
leaq 0x200(%rbx), %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0x2acc
movq $0x0, 0x298(%rbx)
leaq 0x28(%rbx), %rax
movq %rax, 0x2b0(%rbx)
movq %r14, 0x2b8(%rbx)
leaq 0x148(%rbx), %rax
movq %rax, 0x2c0(%rbx)
leaq 0x8(%rsp), %rdi
callq 0x9030
leaq 0x8(%rsp), %rdi
movl (%rdi), %eax
movl 0x3(%rdi), %ecx
movl %ecx, 0x3(%rbx)
movl %eax, (%rbx)
callq 0x5edc
leaq 0x8(%rsp), %rdi
movl (%rdi), %eax
movl %eax, (%r13)
callq 0x241c
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x21e0
movb 0x20(%r15), %al
movb %al, 0x28(%rbx)
movq 0x28(%r15), %rax
movq $0x0, 0x28(%r15)
movq 0x30(%rbx), %rdi
movq %rax, 0x30(%rbx)
testq %rdi, %rdi
je 0x7576
movq (%rdi), %rax
callq *0x18(%rax)
leaq 0x38(%rbx), %rdi
leaq 0x38(%rsp), %rsi
callq 0x285c
leaq 0x50(%rbx), %rdi
leaq 0x50(%rsp), %r14
movq %r14, %rsi
callq 0x285c
movl 0x28(%r14), %eax
movl %eax, 0x78(%rbx)
movups 0x18(%r14), %xmm0
movups %xmm0, 0x68(%rbx)
movq (%r14), %rdi
testq %rdi, %rdi
je 0x75ba
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x21c0
movq 0x38(%rsp), %rdi
testq %rdi, %rdi
je 0x75d1
movq 0x48(%rsp), %rsi
subq %rdi, %rsi
callq 0x21c0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x75e1
movq (%rdi), %rax
callq *0x18(%rax)
leaq 0x18(%rsp), %rax
movq $0x0, 0x18(%rax)
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7604
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x21c0
movb $0x0, 0x2a8(%rbx)
movq $0x0, 0x298(%rbx)
callq 0x2060
subq 0x298(%rbx), %rax
movabsq $0x431bde82d7b634db, %rcx # imm = 0x431BDE82D7B634DB
imulq %rcx
movq %rdx, %rax
shrq $0x3f, %rax
sarq $0x12, %rdx
addq %rax, %rdx
movq %rdx, 0x2a0(%rbx)
addq $0x80, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
jmp 0x765b
jmp 0x765b
jmp 0x765b
movq %rax, %rbx
movq %r12, %rdi
callq 0x7920
jmp 0x766b
movq %rax, %rbx
movq %r15, %rdi
callq 0x65ea
jmp 0x7678
movq %rax, %rbx
movq %r14, %rdi
callq 0x78c0
movq %rbx, %rdi
callq 0x2270
// File: /workspace/github_cpp_makefile_star2_O1/nicoeps[P]NicoGB/src/nicogb.cpp
// Function: NicoGB::init()
void NicoGB::init() {
    cpu.init();
    timer.init();
    joypad.reset();
    memory.init();
    ppu.init();
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
addq $0x200, %rdi            # imm = 0x200
callq 0x2b46
movq %rbx, %rdi
callq 0x9038
leaq 0x80(%rbx), %rdi
callq 0x5ee4
leaq 0x88(%rbx), %rdi
callq 0x6d92
addq $0x140, %rbx            # imm = 0x140
movq %rbx, %rdi
popq %rbx
jmp 0x7bf4
// File: /workspace/github_cpp_makefile_star2_O1/nicoeps[P]NicoGB/src/nicogb.cpp
// Function: NicoGB::tick()
void NicoGB::tick() {
    if (speed) {
        cpu.totalCycles = 0;
    }

    if (cartridge.loaded && cpu.totalCycles < 70224) {
        cpu.cycle();
    }

    if (millis() - last >= 1000/60) {
        last = millis();
        if (cartridge.loaded && !speed) {
            cpu.totalCycles -= 70224;
        }
    }
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
cmpb $0x1, 0x2a8(%rdi)
jne 0x7799
movq $0x0, 0x210(%rbx)
cmpb $0x1, 0x28(%rbx)
jne 0x77b8
cmpq $0x1124f, 0x210(%rbx) # imm = 0x1124F
jg 0x77b8
leaq 0x200(%rbx), %rdi
callq 0x33e6
callq 0x2060
subq 0x298(%rbx), %rax
movabsq $0x431bde82d7b634db, %r14 # imm = 0x431BDE82D7B634DB
imulq %r14
movq %rdx, %rax
shrq $0x3f, %rax
sarq $0x12, %rdx
addq %rax, %rdx
subq 0x2a0(%rbx), %rdx
cmpq $0x10, %rdx
jl 0x782a
callq 0x2060
subq 0x298(%rbx), %rax
imulq %r14
movq %rdx, %rax
shrq $0x3f, %rax
sarq $0x12, %rdx
addq %rax, %rdx
movq %rdx, 0x2a0(%rbx)
cmpb $0x1, 0x28(%rbx)
jne 0x782a
cmpb $0x0, 0x2a8(%rbx)
jne 0x782a
addq $-0x11250, 0x210(%rbx) # imm = 0xFFFEEDB0
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_cpp_makefile_star2_O1/nicoeps[P]NicoGB/src/ppu.cpp
// Function: PPU::init()
void PPU::init() {
    std::fill_n(framebuffer.begin(), 160*144, 0);
    std::fill_n(writebuffer.begin(), 160*144, 0);
    std::fill_n(line.begin(), 160, 0);
    mode = 4;
    totalCycles = 0;
    interrupt = false;
    windowCounter = 0;
    clear = true;
}

// Assembly:
pushq %rbp
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x8(%rdi), %rdi
xorl %ebp, %ebp
movl $0x16800, %edx          # imm = 0x16800
xorl %esi, %esi
callq 0x2120
movq 0x88(%rbx), %rdi
movl $0x16800, %edx          # imm = 0x16800
xorl %esi, %esi
callq 0x2120
movq 0xa0(%rbx), %rdi
movl $0xa0, %edx
xorl %esi, %esi
callq 0x2120
movb $0x4, 0x80(%rbx)
movl %ebp, 0x20(%rbx)
movb $0x0, 0x24(%rbx)
movl %ebp, 0x84(%rbx)
movb $0x1, 0xb8(%rbx)
addq $0x8, %rsp
popq %rbx
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/nicoeps[P]NicoGB/src/ppu.cpp
// Function: PPU::getPalette(unsigned char)
std::vector<uint32_t> PPU::getPalette(uint8_t palette) {
    const std::vector<uint32_t> PALETTE = {0xfffff6d3, 0xfff9a875, 0xffeb6b6f, 0xff7c3f58};
    std::vector<uint32_t> col = {0, 0, 0, 0};
    for (int i = 0; i <= 6; i += 2) {
        switch ((palette >> i) & 0x3) {
            case 0:
                col[i/2] = PALETTE[0];
                break;
            case 1:
                col[i/2] = PALETTE[1];
                break;
            case 2:
                col[i/2] = PALETTE[2];
                break;
            case 3:
                col[i/2] = PALETTE[3];
                break;
        }
    }
    return col;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x30, %rsp
movl %edx, %ebp
movq %rdi, %rbx
movaps 0x2c82(%rip), %xmm0     # 0xaba0
leaq 0x20(%rsp), %r14
movaps %xmm0, (%r14)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
movl $0x4, %edx
movq %r14, %rsi
callq 0x8c7e
xorps %xmm0, %xmm0
movaps %xmm0, (%r14)
leaq 0x20(%rsp), %rsi
leaq 0x7(%rsp), %rcx
movl $0x4, %edx
movq %rbx, %rdi
callq 0x8c7e
movzbl %bpl, %edx
movq 0x8(%rsp), %rsi
leaq 0xc(%rsi), %rdi
movq (%rbx), %r8
leaq 0x8(%rsi), %r9
leaq 0x4(%rsi), %r10
xorl %eax, %eax
movl %edx, %r14d
xorl %ecx, %ecx
shrl %cl, %r14d
andl $0x3, %r14d
leaq 0x2c07(%rip), %r11      # 0xab90
movslq (%r11,%r14,4), %r14
addq %r11, %r14
movq %rsi, %rcx
jmpq *%r14
movq %rax, %rbx
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x7fb0
movq 0x18(%rsp), %rsi
subq %rdi, %rsi
callq 0x21c0
movq %rbx, %rdi
callq 0x2270
movl (%rcx), %ecx
movl %ecx, (%r8,%rax,2)
cmpq $0x5, %rax
jae 0x7ff0
addq $0x2, %rax
movl %edx, %r14d
movl %eax, %ecx
shrl %cl, %r14d
andl $0x3, %r14d
movslq (%r11,%r14,4), %r14
addq %r11, %r14
movq %rsi, %rcx
jmpq *%r14
movq %r10, %rcx
jmp 0x7fb8
movq %rdi, %rcx
jmp 0x7fb8
movq %r9, %rcx
jmp 0x7fb8
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x8007
movq 0x18(%rsp), %rsi
subq %rdi, %rsi
callq 0x21c0
movq %rbx, %rax
addq $0x30, %rsp
popq %rbx
popq %r14
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/sharmaeklavya2[P]ddos-on-anycast/src/lib/segtree.cpp
// Function: SegTree::_init(int, int, int, double const*)
void SegTree::_init(int root, int first, int last, const value_type* a) {
    if(first == last) {
        v[root] = a[first];
    }
    else {
        int mid = (first + last) / 2;
        int left = 2 * root + 1;
        _init(left, first, mid, a);
        _init(left+1, mid+1, last, a);
        v[root] = segtree_join(v[left], v[left+1]);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r15
movl %esi, %ebx
movq %rdi, %r14
cmpl %ecx, %edx
jne 0x12d5
movslq %edx, %rax
movsd (%r15,%rax,8), %xmm0
movslq %ebx, %rax
movq 0x8(%r14), %rcx
jmp 0x1337
movl %ecx, %r12d
leal (%r12,%rdx), %eax
movl %eax, %ebp
shrl $0x1f, %ebp
addl %eax, %ebp
sarl %ebp
leal (%rbx,%rbx), %eax
movl %eax, 0x4(%rsp)
leal 0x1(,%rbx,2), %r13d
movq %r14, %rdi
movl %r13d, %esi
movl %ebp, %ecx
movq %r15, %r8
callq 0x12ac
leal 0x2(,%rbx,2), %esi
incl %ebp
movq %r14, %rdi
movl %ebp, %edx
movl %r12d, %ecx
movq %r15, %r8
callq 0x12ac
movslq %r13d, %rax
movq 0x8(%r14), %rcx
movsd (%rcx,%rax,8), %xmm0
movslq 0x4(%rsp), %rax
addsd 0x10(%rcx,%rax,8), %xmm0
movslq %ebx, %rax
movsd %xmm0, (%rcx,%rax,8)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/sharmaeklavya2[P]ddos-on-anycast/src/lib/segtree.cpp
// Function: SegTree::_print(_IO_FILE*, int, int, int, int) const
void SegTree::_print(FILE* fp, int root, int first, int last, int indent) const {
    for(int i=0; i<indent; ++i) {
        fprintf(fp, "  ");
    }
    fprintf(fp, "%d(%d-%d): %lf\n", root, first, last, v[root]);
    if(first != last) {
        int mid = (first + last) / 2;
        int left = 2 * root + 1;
        _print(fp, left, first, mid, indent+1);
        _print(fp, left+1, mid+1, last, indent+1);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movl %r9d, %ebx
movq %r8, 0x10(%rsp)
movl %ecx, %r13d
movl %edx, %r15d
movq %rsi, %r12
movq %rdi, 0x8(%rsp)
leaq 0xc8d(%rip), %rbp       # 0x2004
movl %ebx, %r14d
movl %ebx, 0x4(%rsp)
testl %ebx, %ebx
jle 0x139c
movl $0x2, %esi
movl $0x1, %edx
movq %rbp, %rdi
movq %r12, %rcx
callq 0x1120
decl %r14d
jne 0x1382
movslq %r15d, %rdx
movq 0x8(%rsp), %rbx
movq 0x8(%rbx), %rax
movsd (%rax,%rdx,8), %xmm0
movq %r12, %rdi
leaq 0xc50(%rip), %rsi       # 0x2007
movl %r13d, %ecx
movq 0x10(%rsp), %r14
movl %r14d, %r8d
movb $0x1, %al
callq 0x10e0
cmpl %r14d, %r13d
je 0x1416
leal (%r14,%r13), %eax
movl %eax, %r14d
shrl $0x1f, %r14d
addl %eax, %r14d
sarl %r14d
leal 0x1(,%r15,2), %edx
movl 0x4(%rsp), %eax
incl %eax
movq %rbx, %rdi
movl %eax, %ebx
movq %r12, %rsi
movl %r13d, %ecx
movl %r14d, %r8d
movl %eax, %r9d
callq 0x134c
leal 0x2(,%r15,2), %r15d
incl %r14d
movl %r14d, %r13d
jmp 0x1377
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/sharmaeklavya2[P]ddos-on-anycast/src/lib/segtree.cpp
// Function: SegTree::_query(int, int, int, int) const
typename SegTree::value_type SegTree::_query(int root, int first, int last, int index) const {
    if(index < first || index > last) {
        return segtree_zero;
    }
    else if(first == last) {
        return v[root];
    }
    else {
        int mid = (first+last) / 2;
        int left = 2 * root + 1;
        return _query(left, first, mid, index) + _query(left+1, mid+1, last, index);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movl %ecx, %r14d
cmpl %edx, %r8d
setl %al
cmpl %ecx, %r8d
setg %cl
orb %al, %cl
xorpd %xmm0, %xmm0
jne 0x14aa
movl %esi, %r12d
movq %rdi, %r15
cmpl %r14d, %edx
jne 0x1462
movslq %r12d, %rax
movq 0x8(%r15), %rcx
movsd (%rcx,%rax,8), %xmm0
jmp 0x14aa
movl %r8d, %ebx
leal (%r14,%rdx), %eax
movl %eax, %ebp
shrl $0x1f, %ebp
addl %eax, %ebp
sarl %ebp
leal 0x1(,%r12,2), %esi
movq %r15, %rdi
movl %ebp, %ecx
callq 0x1426
movsd %xmm0, 0x8(%rsp)
leal 0x2(,%r12,2), %esi
incl %ebp
movq %r15, %rdi
movl %ebp, %edx
movl %r14d, %ecx
movl %ebx, %r8d
callq 0x1426
addsd 0x8(%rsp), %xmm0
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/sharmaeklavya2[P]ddos-on-anycast/src/lib/segtree.cpp
// Function: SegTree::_update(int, int, int, int, double)
void SegTree::_update(int root, int first, int last, int index, value_type x) {
    if(index < first || index > last) {
        return;
    }
    else if(first == last) {
        v[root] = x;
    }
    else {
        int mid = (first + last) / 2;
        int left = 2 * root + 1;
        _update(left, first, mid, index, x);
        _update(left+1, mid+1, last, index, x);
        v[root] = segtree_join(v[left], v[left+1]);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movl %ecx, %r15d
cmpl %edx, %r8d
setl %al
cmpl %ecx, %r8d
setg %cl
orb %al, %cl
jne 0x1567
movl %esi, %ebx
movq %rdi, %r14
cmpl %r15d, %edx
jne 0x14f0
movslq %ebx, %rax
movq 0x8(%r14), %rcx
jmp 0x1562
movl %r8d, %ebp
leal (%r15,%rdx), %eax
movl %eax, %r12d
shrl $0x1f, %r12d
addl %eax, %r12d
sarl %r12d
leal (%rbx,%rbx), %eax
movl %eax, 0xc(%rsp)
leal 0x1(,%rbx,2), %r13d
movq %r14, %rdi
movl %r13d, %esi
movl %r12d, %ecx
movsd %xmm0, 0x10(%rsp)
callq 0x14b8
leal 0x2(,%rbx,2), %esi
incl %r12d
movq %r14, %rdi
movl %r12d, %edx
movl %r15d, %ecx
movl %ebp, %r8d
movsd 0x10(%rsp), %xmm0
callq 0x14b8
movslq %r13d, %rax
movq 0x8(%r14), %rcx
movsd (%rcx,%rax,8), %xmm0
movslq 0xc(%rsp), %rax
addsd 0x10(%rcx,%rax,8), %xmm0
movslq %ebx, %rax
movsd %xmm0, (%rcx,%rax,8)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/sharmaeklavya2[P]ddos-on-anycast/src/lib/segtree.cpp
// Function: SegTree::_cumsum_search(int, int, int, double) const
int SegTree::_cumsum_search(int root, int first, int last, value_type x) const {
    if(x > v[root]) {
        return -1;
    }
    else if(first == last) {
        return first;
    }
    int left = 2 * root + 1;
    int mid = (first + last) / 2;
    if(x <= v[left]) {
        return _cumsum_search(left, first, mid, x);
    }
    else {
        return _cumsum_search(left+1, mid+1, last, x-v[left]);
    }
}

// Assembly:
movl %edx, %eax
movq 0x8(%rdi), %rdx
movl %ecx, %r8d
movl %esi, %edi
movslq %esi, %rsi
ucomisd (%rdx,%rsi,8), %xmm0
ja 0x15cd
movl %r8d, %ecx
cmpl %r8d, %eax
je 0x15d2
leal 0x1(,%rdi,2), %esi
leal (%rcx,%rax), %r9d
movl %r9d, %r8d
shrl $0x1f, %r8d
addl %r9d, %r8d
sarl %r8d
movslq %esi, %r9
movsd (%rdx,%r9,8), %xmm1
ucomisd %xmm0, %xmm1
jae 0x157f
addl %edi, %edi
addl $0x2, %edi
incl %r8d
subsd %xmm1, %xmm0
movl %edi, %esi
movl %r8d, %eax
jmp 0x157c
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/BamAlignment.cpp
// Function: BamTools::BamAlignment::FindTag(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, char*&, unsigned int const&, unsigned int&) const
bool BamAlignment::FindTag(const std::string& tag,
                           char*& pTagData,
                           const unsigned int& tagDataLength,
                           unsigned int& numBytesParsed) const
{

    while ( numBytesParsed < tagDataLength ) {

        const char* pTagType        = pTagData;
        const char* pTagStorageType = pTagData + 2;
        pTagData       += 3;
        numBytesParsed += 3;

        // check the current tag, return true on match
        if ( strncmp(pTagType, tag.c_str(), 2) == 0 )
            return true;

        // get the storage class and find the next tag
        if ( *pTagStorageType == '\0' ) return false;
        if ( !SkipToNextTag(*pTagStorageType, pTagData, numBytesParsed) ) return false;
        if ( *pTagData == '\0' ) return false;
    }

    // checked all tags, none match
    return false;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %rbx
movq %rcx, %r14
movq %rdx, %r15
movq %rsi, %r12
movq %rdi, (%rsp)
movl (%rbx), %eax
cmpl (%r14), %eax
jae 0x2e567
movq (%r15), %r13
leaq 0x3(%r13), %rcx
movq %rcx, (%r15)
addl $0x3, %eax
movl %eax, (%rbx)
movq (%r12), %rsi
movl $0x2, %edx
movq %r13, %rdi
callq 0x26930
testl %eax, %eax
je 0x2e55c
movb 0x2(%r13), %al
testb %al, %al
je 0x2e558
movsbl %al, %esi
movq (%rsp), %rdi
movq %r15, %rdx
movq %rbx, %rcx
callq 0x26ca0
testb %al, %al
je 0x2e558
movq (%r15), %rax
cmpb $0x0, (%rax)
setne %al
andb %al, %bpl
jmp 0x2e561
xorl %ebp, %ebp
jmp 0x2e55f
movb $0x1, %bpl
xorl %eax, %eax
testb %al, %al
jne 0x2e501
jmp 0x2e569
xorl %ebp, %ebp
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/BamAlignment.cpp
// Function: BamTools::BamAlignment::GetTagNames[abi:cxx11]() const
std::vector<std::string> BamAlignment::GetTagNames(void) const {

    std::vector<std::string> result;
    if ( SupportData.HasCoreOnly || TagData.empty() )
        return result;

    char* pTagData = (char*)TagData.data();
    const unsigned int tagDataLength = TagData.size();
    unsigned int numBytesParsed = 0;
    while ( numBytesParsed < tagDataLength ) {

        // get current tag name & type
        const char* pTagName = pTagData;
        const char* pTagType = pTagData + 2;
        pTagData       += 3;
        numBytesParsed +=3;

        // store tag name
        result.push_back( std::string(pTagName, 2)  );

        // find the next tag
        if ( *pTagType == '\0' ) break;
        if ( !SkipToNextTag(*pTagType, pTagData, numBytesParsed) ) break;
        if ( *pTagData == '\0' ) break;
    }

    return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
cmpb $0x0, 0x130(%rsi)
jne 0x2ebce
movq %rsi, %r14
movq 0x90(%rsi), %rbp
testq %rbp, %rbp
je 0x2ebce
movq 0x88(%r14), %rax
movq %rax, 0x10(%rsp)
movl $0x0, 0xc(%rsp)
testl %ebp, %ebp
je 0x2ebce
leaq 0x28(%rsp), %r12
leaq 0x18(%rsp), %r15
movq 0x10(%rsp), %r13
addl $0x3, 0xc(%rsp)
leaq 0x3(%r13), %rax
movq %rax, 0x10(%rsp)
movq %r12, 0x18(%rsp)
testq %r13, %r13
je 0x2ebe0
movzwl (%r13), %eax
movw %ax, 0x28(%rsp)
movq $0x2, 0x20(%rsp)
movb $0x0, 0x2a(%rsp)
movq %rbx, %rdi
movq %r15, %rsi
callq 0x26ab0
movq 0x18(%rsp), %rdi
cmpq %r12, %rdi
je 0x2eb90
callq 0x27560
movb 0x2(%r13), %al
testb %al, %al
je 0x2ebbe
movsbl %al, %esi
movq %r14, %rdi
leaq 0x10(%rsp), %rdx
leaq 0xc(%rsp), %rcx
callq 0x26ca0
testb %al, %al
je 0x2ebbe
movq 0x10(%rsp), %rax
cmpb $0x0, (%rax)
setne %al
jmp 0x2ebc0
xorl %eax, %eax
testb %al, %al
je 0x2ebce
cmpl %ebp, 0xc(%rsp)
jb 0x2eb3d
movq %rbx, %rax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x26533(%rip), %rdi     # 0x5511a
callq 0x27050
jmp 0x2ebee
movq %rax, %r14
jmp 0x2ec05
movq %rax, %r14
movq 0x18(%rsp), %rdi
cmpq %r12, %rdi
je 0x2ec05
callq 0x27560
movq %rbx, %rdi
callq 0x270a0
movq %r14, %rdi
callq 0x28c20
movq %rax, %rdi
callq 0x2f0bd
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/BamAlignment.cpp
// Function: BamTools::BamAlignment::HasTag(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const
bool BamAlignment::HasTag(const std::string& tag) const {

    // return false if no tag data present
    if ( SupportData.HasCoreOnly || TagData.empty() )
        return false;

    // localize the tag data for lookup
    char* pTagData = (char*)TagData.data();
    const unsigned int tagDataLength = TagData.size();
    unsigned int numBytesParsed = 0;

    // if result of tag lookup
    return FindTag(tag, pTagData, tagDataLength, numBytesParsed);
}

// Assembly:
cmpb $0x0, 0x130(%rdi)
jne 0x2edc5
movq 0x90(%rdi), %rax
testq %rax, %rax
je 0x2edc5
subq $0x18, %rsp
movq 0x88(%rdi), %rcx
leaq 0x10(%rsp), %rdx
movq %rcx, (%rdx)
leaq 0xc(%rsp), %rcx
movl %eax, (%rcx)
leaq 0x8(%rsp), %r8
movl $0x0, (%r8)
callq 0x27c10
addq $0x18, %rsp
retq
xorl %eax, %eax
retq
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamHeader.cpp
// Function: BamTools::SamHeader::SetHeaderText(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void SamHeader::SetHeaderText(const std::string& headerText) {

    // clear prior data
    Clear();

    try {
        SamFormatParser parser(*this);
        parser.Parse(headerText);
    } catch ( BamException& e ) {

        // clear anything parsed so far
        // no telling what's valid and what's partially parsed
        Clear();

        // set error string
        m_errorString = e.what();
    }
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rsi, %r14
movq %rdi, %rbx
callq 0x29180
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x26fe0
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0x270f0
leaq 0x8(%rsp), %rdi
callq 0x27100
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rdx, %r15
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0x27100
jmp 0x2fdde
movq %rdx, %r15
movq %rax, %r14
cmpl $0x1, %r15d
jne 0x2fe21
movq %r14, %rdi
callq 0x267d0
movq %rax, %r14
movq %rbx, %rdi
callq 0x29180
movq (%r14), %rax
movq %r14, %rdi
callq *0x10(%rax)
addq $0x138, %rbx            # imm = 0x138
movq %rbx, %rdi
movq %rax, %rsi
callq 0x28000
callq 0x287e0
jmp 0x2fdbc
movq %rax, %r14
callq 0x287e0
movq %r14, %rdi
callq 0x28c20
movq %rax, %rdi
callq 0x2f0bd
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamHeader.cpp
// Function: BamTools::SamHeader::Clear()
void SamHeader::Clear(void) {

    // clear SAM header components
    Version.clear();
    SortOrder.clear();
    GroupOrder.clear();
    CustomTags.clear();
    Sequences.Clear();
    ReadGroups.Clear();
    Programs.Clear();
    Comments.clear();

    // clear error string
    m_errorString.clear();
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
xorl %eax, %eax
movq %rax, 0x8(%rdi)
movq (%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x28(%rdi)
movq 0x20(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x48(%rdi)
movq 0x40(%rdi), %rcx
movb %al, (%rcx)
movq 0x60(%rdi), %r14
movq 0x68(%rdi), %rsi
cmpq %r14, %rsi
je 0x30167
movq %r14, %rdi
callq 0x26a20
movq %r14, 0x68(%rbx)
leaq 0x78(%rbx), %rdi
callq 0x26510
leaq 0xc0(%rbx), %rdi
callq 0x27630
leaq 0x108(%rbx), %rdi
callq 0x276f0
leaq 0x120(%rbx), %rdi
callq 0x275c0
movq $0x0, 0x140(%rbx)
movq 0x138(%rbx), %rax
movb $0x0, (%rax)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamHeader.cpp
// Function: BamTools::SamHeader::IsValid(bool) const
bool SamHeader::IsValid(bool verbose) const {

    SamHeaderValidator validator(*this);

    // if SAM header is valid, return success
    if ( validator.Validate() )
        return true;

    // otherwiser
    else {

        // print messages to stderr
        if ( verbose )
            validator.PrintMessages(std::cerr);

        // or catch in local error string
        else {
            stringstream errorStream("");
            validator.PrintMessages(errorStream);
            m_errorString = errorStream.str();
        }
        return false;
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x1e8, %rsp            # imm = 0x1E8
movl %esi, %ebp
movq %rdi, %r14
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x26220
movq %rbx, %rdi
callq 0x27520
movl %eax, %ebx
testb %al, %al
jne 0x302fa
testb %bpl, %bpl
je 0x3026f
movq 0x3ad88(%rip), %rsi     # 0x6afe8
leaq 0x28(%rsp), %rdi
callq 0x285d0
jmp 0x302fa
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x25c10(%rip), %rdx     # 0x55e8f
leaq 0x8(%rsp), %rdi
movq %rdx, %rsi
callq 0x26750
leaq 0x60(%rsp), %rdi
leaq 0x8(%rsp), %rsi
movl $0x18, %edx
callq 0x28750
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x302af
callq 0x27560
leaq 0x70(%rsp), %rsi
leaq 0x28(%rsp), %rdi
callq 0x285d0
leaq 0x78(%rsp), %rsi
leaq 0x8(%rsp), %rdi
callq 0x28740
addq $0x138, %r14            # imm = 0x138
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0x26b80
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x302f0
callq 0x27560
leaq 0x60(%rsp), %rdi
callq 0x270d0
leaq 0x28(%rsp), %rdi
callq 0x26390
movl %ebx, %eax
addq $0x1e8, %rsp            # imm = 0x1E8
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
jmp 0x30351
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x3032f
callq 0x27560
jmp 0x3032f
jmp 0x3032c
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x270d0
jmp 0x30354
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x30354
callq 0x27560
jmp 0x30354
jmp 0x30351
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x26390
movq %rbx, %rdi
callq 0x28c20
movq %rax, %rdi
callq 0x2f0bd
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamProgram.cpp
// Function: BamTools::SamProgram::Clear()
void SamProgram::Clear(void) {
    CommandLine.clear();
    ID.clear();
    Name.clear();
    PreviousProgramID.clear();
    Version.clear();
    NextProgramID.clear();
}

// Assembly:
xorl %eax, %eax
movq %rax, 0x8(%rdi)
movq (%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x28(%rdi)
movq 0x20(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x48(%rdi)
movq 0x40(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x68(%rdi)
movq 0x60(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x88(%rdi)
movq 0x80(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0xc0(%rdi)
movq 0xb8(%rdi), %rcx
movb %al, (%rcx)
retq
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamProgramChain.cpp
// Function: BamTools::SamProgramChain::Add(BamTools::SamProgram&)
void SamProgramChain::Add(SamProgram& program) {

    // ignore duplicated records
    if ( Contains(program) )
        return;

    // if other programs already in chain, try to find the "next" record
    // tries to match another record's PPID with @program's ID
    if ( !IsEmpty() )
        program.NextProgramID = NextIdFor(program.ID);

    // store program record
    m_data.push_back(program);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x20(%rsi), %r15
movq %r15, %rsi
callq 0x29080
movq (%r14), %rcx
movq 0x8(%r14), %rdx
movq %rdx, %rsi
subq %rcx, %rsi
shrq $0x3, %rsi
imull $0x684bda13, %esi, %esi # imm = 0x684BDA13
cmpl %esi, %eax
jne 0x30dd5
cmpq %rdx, %rcx
je 0x30dca
leaq 0x8(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x26b50
leaq 0xb8(%rbx), %rdi
movq %r12, %rsi
callq 0x26b80
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x30dca
callq 0x27560
movq %r14, %rdi
movq %rbx, %rsi
callq 0x28880
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x30df7
callq 0x27560
movq %rbx, %rdi
callq 0x28c20
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamProgramChain.cpp
// Function: BamTools::SamProgramChain::NextIdFor(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const
const std::string SamProgramChain::NextIdFor(const std::string& programId) const {

    // find first record in container whose PreviousProgramID matches @programId
    SamProgramConstIterator iter = ConstBegin();
    SamProgramConstIterator end  = ConstEnd();
    for ( ; iter != end; ++iter ) {
        const SamProgram& current = (*iter);
        if ( !current.HasPreviousProgramID() &&
              current.PreviousProgramID == programId
           )
        {
            return current.ID;
        }
    }

    // none found
    return string();
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq (%rsi), %r14
movq 0x8(%rsi), %r12
cmpq %r12, %r14
je 0x30e83
movq %rdx, %r15
movq %r14, %rdi
callq 0x28200
testb %al, %al
jne 0x30e77
movq 0x68(%r14), %rdx
cmpq 0x8(%r15), %rdx
jne 0x30e77
testq %rdx, %rdx
je 0x30e98
movq (%r15), %rsi
movq 0x60(%r14), %rdi
callq 0x277e0
testl %eax, %eax
je 0x30e98
addq $0xd8, %r14
cmpq %r12, %r14
jne 0x30e4c
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq $0x0, 0x8(%rbx)
movb $0x0, 0x10(%rbx)
jmp 0x30eb2
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq 0x20(%r14), %rsi
movq 0x28(%r14), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0x267c0
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamProgramChain.cpp
// Function: BamTools::SamProgramChain::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
SamProgram& SamProgramChain::operator[](const std::string& programId) {

    // look up program record matching this ID
    int index = IndexOf(programId);

    // if record not found
    if ( index == (int)m_data.size() ) {
        cerr << "SamProgramChain::operator[] - unknown programId: " << programId << endl;
        exit(1);
    }

    // otherwise return program record at index
    return m_data.at(index);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x29080
movl %eax, %ecx
movq (%r14), %rax
movq 0x8(%r14), %rsi
subq %rax, %rsi
sarq $0x3, %rsi
movabsq $-0x7b425ed097b425ed, %rdx # imm = 0x84BDA12F684BDA13
imulq %rsi, %rdx
cmpl %edx, %ecx
je 0x311a3
movslq %ecx, %rsi
cmpq %rsi, %rdx
jbe 0x311d3
imulq $0xd8, %rsi, %rcx
addq %rcx, %rax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movq 0x39e3e(%rip), %rdi     # 0x6afe8
leaq 0x240bf(%rip), %rsi     # 0x55270
callq 0x27670
movq %rax, %rdi
movq %rbx, %rsi
callq 0x273e0
movq %rax, %rdi
callq 0x269c0
movl $0x1, %edi
callq 0x27c70
leaq 0x240c8(%rip), %rdi     # 0x552a2
xorl %eax, %eax
callq 0x284f0
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamReadGroup.cpp
// Function: BamTools::SamReadGroup::Clear()
void SamReadGroup::Clear(void) {
    Description.clear();
    FlowOrder.clear();
    ID.clear();
    KeySequence.clear();
    Library.clear();
    PlatformUnit.clear();
    PredictedInsertSize.clear();
    ProductionDate.clear();
    Program.clear();
    Sample.clear();
    SequencingCenter.clear();
    SequencingTechnology.clear();
    CustomTags.clear();
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
xorl %eax, %eax
movq %rax, 0x8(%rdi)
movq (%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x28(%rdi)
movq 0x20(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x48(%rdi)
movq 0x40(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x68(%rdi)
movq 0x60(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x88(%rdi)
movq 0x80(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0xa8(%rdi)
movq 0xa0(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0xc8(%rdi)
movq 0xc0(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0xe8(%rdi)
movq 0xe0(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x108(%rdi)
movq 0x100(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x128(%rdi)
movq 0x120(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x148(%rdi)
movq 0x140(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x168(%rdi)
movq 0x160(%rdi), %rcx
movb %al, (%rcx)
movq 0x180(%rdi), %r14
movq 0x188(%rdi), %rsi
cmpq %r14, %rsi
je 0x3222a
movq %rdi, %rbx
movq %r14, %rdi
callq 0x26a20
movq %r14, 0x188(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamReadGroupDictionary.cpp
// Function: BamTools::SamReadGroupDictionary::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
SamReadGroup& SamReadGroupDictionary::operator[](const std::string& readGroupId) {

    if ( !Contains(readGroupId) ) {
        SamReadGroup rg(readGroupId);
        m_data.push_back(rg);
        m_lookupData[readGroupId] = m_data.size() - 1;
    }

    const size_t index = m_lookupData[readGroupId];
    return m_data.at(index);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x198, %rsp            # imm = 0x198
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x18(%rdi), %r15
movq %r15, %rdi
callq 0x26b20
leaq 0x20(%rbx), %rcx
movabsq $-0x505050505050505, %r13 # imm = 0xFAFAFAFAFAFAFAFB
cmpq %rcx, %rax
jne 0x32782
movq %rsp, %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x28530
movq %rbx, %rdi
movq %r12, %rsi
callq 0x28830
movq (%rbx), %rbp
movq 0x8(%rbx), %r12
movq %r15, %rdi
movq %r14, %rsi
callq 0x28c00
subq %rbp, %r12
sarq $0x3, %r12
imulq %r13, %r12
decq %r12
movq %r12, (%rax)
movq %rsp, %rdi
callq 0x28d80
movq %r15, %rdi
movq %r14, %rsi
callq 0x28c00
movq (%rax), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %r13, %rdx
cmpq %rsi, %rdx
jbe 0x327c3
imulq $0x198, %rsi, %rcx      # imm = 0x198
addq %rcx, %rax
addq $0x198, %rsp            # imm = 0x198
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x22ad8(%rip), %rdi     # 0x552a2
xorl %eax, %eax
callq 0x284f0
movq %rax, %rbx
movq %rsp, %rdi
callq 0x28d80
movq %rbx, %rdi
callq 0x28c20
movq %rax, %rdi
callq 0x2f0bd
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamSequence.cpp
// Function: BamTools::SamSequence::Clear()
void SamSequence::Clear(void) {
    AssemblyID.clear();
    Checksum.clear();
    Length.clear();
    Name.clear();
    Species.clear();
    URI.clear();
    CustomTags.clear();
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
xorl %eax, %eax
movq %rax, 0x8(%rdi)
movq (%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x28(%rdi)
movq 0x20(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x48(%rdi)
movq 0x40(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x68(%rdi)
movq 0x60(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0x88(%rdi)
movq 0x80(%rdi), %rcx
movb %al, (%rcx)
movq %rax, 0xa8(%rdi)
movq 0xa0(%rdi), %rcx
movb %al, (%rcx)
movq 0xc0(%rdi), %r14
movq 0xc8(%rdi), %rsi
cmpq %r14, %rsi
je 0x33fe4
movq %rdi, %rbx
movq %r14, %rdi
callq 0x26a20
movq %r14, 0xc8(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamSequenceDictionary.cpp
// Function: BamTools::SamSequenceDictionary::Add(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>> const&)
void SamSequenceDictionary::Add(const std::map<std::string, int>& sequenceMap) {
    map<string, int>::const_iterator seqIter = sequenceMap.begin();
    map<string, int>::const_iterator seqEnd  = sequenceMap.end();
    for ( ; seqIter != seqEnd; ++seqIter ) {
        const string& name = (*seqIter).first;
        const int& length = (*seqIter).second;
        Add( SamSequence(name, length) );
    }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xd8, %rsp
movq %rsi, %rbx
movq 0x18(%rsi), %r15
addq $0x8, %rbx
cmpq %rbx, %r15
je 0x34283
movq %rdi, %r14
movq %rsp, %r12
leaq 0x20(%r15), %rsi
leaq 0x40(%r15), %rdx
movq %r12, %rdi
callq 0x274e0
movq %r14, %rdi
movq %r12, %rsi
callq 0x28230
movq %r12, %rdi
callq 0x29040
movq %r15, %rdi
callq 0x27ae0
movq %rax, %r15
cmpq %rbx, %rax
jne 0x34250
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %rax, %rbx
movq %rsp, %rdi
callq 0x29040
movq %rbx, %rdi
callq 0x28c20
movq %rax, %rdi
callq 0x2f0bd
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/SamSequenceDictionary.cpp
// Function: BamTools::SamSequenceDictionary::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
SamSequence& SamSequenceDictionary::operator[](const std::string& sequenceName) {

    if ( !Contains(sequenceName) ) {
        SamSequence seq(sequenceName, 0);
        m_data.push_back(seq);
        m_lookupData[sequenceName] = m_data.size() - 1;
    }

    const size_t index = m_lookupData[sequenceName];
    return m_data.at(index);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xe8, %rsp
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x18(%rdi), %r15
movq %r15, %rdi
callq 0x26b20
leaq 0x20(%rbx), %rcx
movabsq $-0x7b425ed097b425ed, %r13 # imm = 0x84BDA12F684BDA13
cmpq %rcx, %rax
jne 0x34555
leaq 0xc(%rsp), %rdx
movl $0x0, (%rdx)
leaq 0x10(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x274e0
movq %rbx, %rdi
movq %r12, %rsi
callq 0x26c80
movq (%rbx), %rbp
movq 0x8(%rbx), %r12
movq %r15, %rdi
movq %r14, %rsi
callq 0x28c00
subq %rbp, %r12
sarq $0x3, %r12
imulq %r13, %r12
decq %r12
movq %r12, (%rax)
leaq 0x10(%rsp), %rdi
callq 0x29040
movq %r15, %rdi
movq %r14, %rsi
callq 0x28c00
movq (%rax), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %r13, %rdx
cmpq %rsi, %rdx
jbe 0x34596
imulq $0xd8, %rsi, %rcx
addq %rcx, %rax
addq $0xe8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x20d05(%rip), %rdi     # 0x552a2
xorl %eax, %eax
callq 0x284f0
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x29040
movq %rbx, %rdi
callq 0x28c20
movq %rax, %rdi
callq 0x2f0bd
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/internal/bam/BamHeader_p.cpp
// Function: BamTools::Internal::BamHeader::CheckMagicNumber(BamTools::Internal::BgzfStream*)
void BamHeader::CheckMagicNumber(BgzfStream* stream) {

    // try to read magic number
    char buffer[Constants::BAM_HEADER_MAGIC_LENGTH];
    const size_t numBytesRead = stream->Read(buffer, Constants::BAM_HEADER_MAGIC_LENGTH);
    if ( numBytesRead != (int)Constants::BAM_HEADER_MAGIC_LENGTH )
        throw BamException("BamHeader::CheckMagicNumber", "could not read magic number");

    // validate magic number
    if ( !isValidMagicNumber(buffer) )
        throw BamException("BamHeader::CheckMagicNumber", "invalid magic number");
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x50, %rsp
movq %rsi, %rdi
leaq 0xc(%rsp), %rsi
movl $0x4, %edx
callq 0x283d0
cmpq $0x4, %rax
jne 0x34b8f
cmpl $0x14d4142, 0xc(%rsp)   # imm = 0x14D4142
jne 0x34c0e
addq $0x50, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movl $0x28, %edi
callq 0x269d0
movq %rax, %rbx
leaq 0x40(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x20754(%rip), %rsi     # 0x55300
leaq 0x20768(%rip), %rdx     # 0x5531b
leaq 0x30(%rsp), %rdi
callq 0x26750
leaq 0x20(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x2074e(%rip), %rsi     # 0x5531c
leaq 0x20762(%rip), %rdx     # 0x55337
leaq 0x10(%rsp), %rdi
callq 0x26750
movb $0x1, %bpl
leaq 0x30(%rsp), %rsi
leaq 0x10(%rsp), %rdx
movq %rbx, %rdi
callq 0x28490
xorl %ebp, %ebp
movq 0x3633b(%rip), %rsi     # 0x6af38
movq 0x36374(%rip), %rdx     # 0x6af78
movq %rbx, %rdi
callq 0x28a30
jmp 0x34c8b
movl $0x28, %edi
callq 0x269d0
movq %rax, %rbx
leaq 0x40(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x206d5(%rip), %rsi     # 0x55300
leaq 0x206e9(%rip), %rdx     # 0x5531b
leaq 0x30(%rsp), %rdi
callq 0x26750
leaq 0x20(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x206eb(%rip), %rsi     # 0x55338
leaq 0x206f8(%rip), %rdx     # 0x5534c
leaq 0x10(%rsp), %rdi
callq 0x26750
movb $0x1, %bpl
leaq 0x30(%rsp), %rsi
leaq 0x10(%rsp), %rdx
movq %rbx, %rdi
callq 0x28490
xorl %ebp, %ebp
movq 0x362bc(%rip), %rsi     # 0x6af38
movq 0x362f5(%rip), %rdx     # 0x6af78
movq %rbx, %rdi
callq 0x28a30
jmp 0x34c8f
jmp 0x34ca3
movq %rax, %r14
movq 0x10(%rsp), %rdi
cmpq %r12, %rdi
je 0x34ca9
callq 0x27560
jmp 0x34ca9
movq %rax, %r14
movb $0x1, %bpl
movq 0x30(%rsp), %rdi
cmpq %r15, %rdi
je 0x34cc2
callq 0x27560
jmp 0x34cc2
jmp 0x34cbc
movq %rax, %r14
movb $0x1, %bpl
testb %bpl, %bpl
je 0x34ccf
movq %rbx, %rdi
callq 0x27070
movq %r14, %rdi
callq 0x28c20
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/internal/bam/BamHeader_p.cpp
// Function: BamTools::Internal::BamHeader::Load(BamTools::Internal::BgzfStream*)
void BamHeader::Load(BgzfStream* stream) {

    // read & check magic number
    CheckMagicNumber(stream);

    // read header (length, then actual text)
    uint32_t length(0);
    ReadHeaderLength(stream, length);
    ReadHeaderText(stream, length);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rsi, %rbx
movq %rdi, %r14
callq 0x26530
leaq 0xc(%rsp), %r15
movl $0x0, (%r15)
movq %rbx, %rsi
movq %r15, %rdx
callq 0x28680
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x26320
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/internal/bam/BamHeader_p.cpp
// Function: BamTools::Internal::BamHeader::ReadHeaderLength(BamTools::Internal::BgzfStream*, unsigned int&)
void BamHeader::ReadHeaderLength(BgzfStream* stream, uint32_t& length) {

    // read BAM header text length
    char buffer[sizeof(uint32_t)];
    const size_t numBytesRead = stream->Read(buffer, sizeof(uint32_t));
    if ( numBytesRead != sizeof(uint32_t) )
        throw BamException("BamHeader::ReadHeaderLength", "could not read header length");

    // convert char buffer to length
    length = BamTools::UnpackUnsignedInt(buffer);
    if ( BamTools::SystemIsBigEndian() )
        BamTools::SwapEndian_32(length);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x50, %rsp
movq %rdx, %rbx
movq %rsi, %rdi
leaq 0xc(%rsp), %rsi
movl $0x4, %edx
callq 0x283d0
cmpq $0x4, %rax
jne 0x34d64
movl 0xc(%rsp), %eax
movl %eax, (%rbx)
addq $0x50, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movl $0x28, %edi
callq 0x269d0
movq %rax, %rbx
leaq 0x40(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x205cc(%rip), %rsi     # 0x5534d
leaq 0x205e0(%rip), %rdx     # 0x55368
leaq 0x30(%rsp), %rdi
callq 0x26750
leaq 0x20(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x205c6(%rip), %rsi     # 0x55369
leaq 0x205db(%rip), %rdx     # 0x55385
leaq 0x10(%rsp), %rdi
callq 0x26750
movb $0x1, %bpl
leaq 0x30(%rsp), %rsi
leaq 0x10(%rsp), %rdx
movq %rbx, %rdi
callq 0x28490
xorl %ebp, %ebp
movq 0x36166(%rip), %rsi     # 0x6af38
movq 0x3619f(%rip), %rdx     # 0x6af78
movq %rbx, %rdi
callq 0x28a30
movq %rax, %r14
movq 0x10(%rsp), %rdi
cmpq %r12, %rdi
je 0x34dfb
callq 0x27560
jmp 0x34dfb
movq %rax, %r14
movb $0x1, %bpl
movq 0x30(%rsp), %rdi
cmpq %r15, %rdi
je 0x34e12
callq 0x27560
jmp 0x34e12
movq %rax, %r14
movb $0x1, %bpl
testb %bpl, %bpl
je 0x34e1f
movq %rbx, %rdi
callq 0x27070
movq %r14, %rdi
callq 0x28c20
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/internal/bam/BamHeader_p.cpp
// Function: BamTools::Internal::BamHeader::ReadHeaderText(BamTools::Internal::BgzfStream*, unsigned int const&)
void BamHeader::ReadHeaderText(BgzfStream* stream, const uint32_t& length) {

    // read header text
    char* headerText = (char*)calloc(length + 1, 1);
    const size_t bytesRead = stream->Read(headerText, length);

    // if error reading, clean up buffer & throw
    if ( bytesRead != length ) {
        free(headerText);
        throw BamException("BamHeader::ReadHeaderText", "could not read header text");
    }

    // otherwise, text was read OK
    // store & cleanup
    m_header.SetHeaderText( (string)((const char*)headerText) );
    free(headerText);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %rdx, %r15
movq %rsi, %r12
movq %rdi, %r14
movl (%rdx), %r13d
leal 0x1(%r13), %edi
movl $0x1, %esi
callq 0x26ec0
movq %rax, %rbx
movq %r12, %rdi
movq %rax, %rsi
movq %r13, %rdx
callq 0x283d0
movl (%r15), %ecx
cmpq %rcx, %rax
jne 0x34eb2
leaq 0x8(%rsp), %rdi
leaq 0x28(%rsp), %rdx
movq %rbx, %rsi
callq 0x26770
leaq 0x8(%rsp), %rsi
movq %r14, %rdi
callq 0x284e0
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x34e9b
callq 0x27560
movq %rbx, %rdi
callq 0x27bd0
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbx, %rdi
callq 0x27bd0
movl $0x28, %edi
callq 0x269d0
movq %rax, %rbx
leaq 0x18(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x204af(%rip), %rsi     # 0x55386
leaq 0x204c1(%rip), %rdx     # 0x5539f
leaq 0x8(%rsp), %rdi
callq 0x26750
leaq 0x38(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x204a7(%rip), %rsi     # 0x553a0
leaq 0x204ba(%rip), %rdx     # 0x553ba
leaq 0x28(%rsp), %rdi
callq 0x26750
movb $0x1, %bpl
leaq 0x8(%rsp), %rsi
leaq 0x28(%rsp), %rdx
movq %rbx, %rdi
callq 0x28490
xorl %ebp, %ebp
movq 0x36010(%rip), %rsi     # 0x6af38
movq 0x36049(%rip), %rdx     # 0x6af78
movq %rbx, %rdi
callq 0x28a30
movq %rax, %r14
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x34f51
callq 0x27560
jmp 0x34f51
movq %rax, %r14
movb $0x1, %bpl
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x34f68
callq 0x27560
jmp 0x34f68
movq %rax, %r14
movb $0x1, %bpl
testb %bpl, %bpl
je 0x34f92
movq %rbx, %rdi
callq 0x27070
jmp 0x34f92
movq %rax, %r14
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x34f92
callq 0x27560
jmp 0x34f92
movq %rax, %r14
movq %r14, %rdi
callq 0x28c20
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/internal/bam/BamMultiReader_p.cpp
// Function: BamTools::Internal::BamMultiReaderPrivate::Close()
bool BamMultiReaderPrivate::Close(void) {

    m_errorString.clear();

    if ( CloseFiles(Filenames()) )
        return true;
    else {
        const string currentError = m_errorString;
        const string message = string("error encountered while closing all files: \n\t") + currentError;
        SetErrorString("BamMultiReader::Close", message);
        return false;
    }
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x68, %rsp
movq %rdi, %r14
movq $0x0, 0x30(%rdi)
movq 0x28(%rdi), %rax
movb $0x0, (%rax)
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x27e40
movq %r14, %rdi
movq %rbx, %rsi
callq 0x28f40
movl %eax, %ebx
leaq 0x28(%rsp), %rdi
callq 0x270a0
testb %bl, %bl
jne 0x3523f
leaq 0x38(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x28(%r14), %rsi
movq 0x30(%r14), %rdx
addq %rsi, %rdx
leaq 0x28(%rsp), %rdi
callq 0x267c0
leaq 0x18(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x20213(%rip), %rsi     # 0x553c0
leaq 0x20239(%rip), %rdx     # 0x553ed
leaq 0x8(%rsp), %rdi
callq 0x26750
leaq 0x48(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x28(%rsp), %rdx
callq 0x29130
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x351e1
callq 0x27560
leaq 0x8(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x201fe(%rip), %rsi     # 0x553ee
leaq 0x2020c(%rip), %rdx     # 0x55403
callq 0x26750
leaq 0x8(%rsp), %rsi
leaq 0x48(%rsp), %rdx
movq %r14, %rdi
callq 0x27be0
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x3521d
callq 0x27560
leaq 0x58(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x35230
callq 0x27560
movq 0x28(%rsp), %rdi
cmpq %r15, %rdi
je 0x3523f
callq 0x27560
movl %ebx, %eax
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x35264
callq 0x27560
jmp 0x35264
movq %rax, %rbx
leaq 0x58(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x35281
jmp 0x3528b
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x3528b
callq 0x27560
jmp 0x3528b
movq %rax, %rbx
movq 0x28(%rsp), %rdi
cmpq %r15, %rdi
je 0x352a9
callq 0x27560
jmp 0x352a9
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x270a0
movq %rbx, %rdi
callq 0x28c20
movq %rax, %rdi
callq 0x2f0bd
nop
// File: /workspace/github_cpp_makefile_star2_O1/zeeev[P]DASVC/bamtools/src/api/internal/bam/BamMultiReader_p.cpp
// Function: BamTools::Internal::BamMultiReaderPrivate::Filenames[abi:cxx11]() const
const vector<string> BamMultiReaderPrivate::Filenames(void) const {

    // init filename container
    vector<string> filenames;
    filenames.reserve( m_readers.size() );

    // iterate over readers
    vector<MergeItem>::const_iterator itemIter = m_readers.begin();
    vector<MergeItem>::const_iterator itemEnd  = m_readers.end();
    for ( ; itemIter != itemEnd; ++itemIter ) {
        const MergeItem& item = (*itemIter);
        const BamReader* reader = item.Reader;
        if ( reader == 0 ) continue;

        // store filename if not empty
        const string& filename = reader->GetFilename();
        if ( !filename.empty() )
            filenames.push_back(filename);
    }

    // return result
    return filenames;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x20, %rsp
movq %rsi, %r14
movq %rdi, %rbx
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
movq 0x8(%rsi), %rsi
subq (%r14), %rsi
sarq $0x4, %rsi
callq 0x27ce0
movq (%r14), %r15
movq 0x8(%r14), %r12
cmpq %r12, %r15
je 0x355bf
leaq 0x10(%rsp), %r13
movq %rsp, %r14
movq (%r15), %rsi
testq %rsi, %rsi
je 0x355b6
movq %r14, %rdi
callq 0x26c90
cmpq $0x0, 0x8(%rsp)
je 0x355a8
movq %rbx, %rdi
movq %r14, %rsi
callq 0x26ab0
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x355b6
callq 0x27560
addq $0x10, %r15
cmpq %r12, %r15
jne 0x35585
movq %rbx, %rax
addq $0x20, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
jmp 0x355e5
movq %rax, %r14
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x355e8
callq 0x27560
jmp 0x355e8
movq %rax, %r14
movq %rbx, %rdi
callq 0x270a0
movq %r14, %rdi
callq 0x28c20
movq %rax, %rdi
callq 0x2f0bd