// File: /workspace/github_c_makefile_star2_O0/icebert[P]pblat/blatSrc/blat.c
// Function: performSearch
void* performSearch(void* args)
{
    int             id=*((int*)(((void**)args)[0]));
    int             queryCount=*((int*)(((void**)args)[1]));
    char            **files=(char**)(((void**)args)[2]);
    struct lineFile *lf=(struct lineFile *)(((void**)args)[3]);
    struct genoFind *gf=(struct genoFind *)(((void**)args)[4]);
    boolean         isProt=*((boolean*)(((void**)args)[5]));
    struct hash     *maskHash=(struct hash *)(((void**)args)[6]);
    FILE            *outFile=(FILE *)(((void**)args)[7]);
    boolean         showStatus=*((boolean*)(((void**)args)[8]));
    struct gfOutput *gvo=(struct gfOutput *)(((void**)args)[9]);

    int             i;
    char            *fileName;
    int             count = 0;
    long long   totalSize = 0;

    unsigned faFastBufSize = 0;
    DNA *faFastBuf = NULL;


    if (id==0)
        gfOutputHead(gvo, outFile);
//for (i=0; i<queryCount; ++i)
    {
        fileName = files[0];
        if (nibIsFile(fileName))
        {
            struct dnaSeq *seq;

            if (isProt)
                errAbort("%s: Can't use .nib files with -prot or d=prot option\n", fileName);
            seq = nibLoadAllMasked(NIB_MASK_MIXED, fileName);
            freez(&seq->name);
            seq->name = cloneString(fileName);
            searchOneMaskTrim(seq, isProt, gf, outFile,
                              maskHash, &totalSize, &count, gvo);
            freeDnaSeq(&seq);
        }
        else if (twoBitIsSpec(fileName))
        {
            struct twoBitSpec *tbs = twoBitSpecNew(fileName);
            struct twoBitFile *tbf = twoBitOpen(tbs->fileName);
            if (isProt)
                errAbort("%s is a two bit file, which doesn't work for proteins.",
                         fileName);
            if (tbs->seqs != NULL)
            {
                struct twoBitSeqSpec *ss = NULL;
                for (ss = tbs->seqs;  ss != NULL;  ss = ss->next)
                {
                    struct dnaSeq *seq = twoBitReadSeqFrag(tbf, ss->name,
                                                           ss->start, ss->end);
                    searchOneMaskTrim(seq, isProt, gf, outFile,
                                      maskHash, &totalSize, &count, gvo);
                    dnaSeqFree(&seq);
                }
            }
            else
            {
                struct twoBitIndex *index = NULL;
                for (index = tbf->indexList; index != NULL; index = index->next)
                {
                    struct dnaSeq *seq = twoBitReadSeqFrag(tbf, index->name, 0, 0);
                    searchOneMaskTrim(seq, isProt, gf, outFile,
                                      maskHash, &totalSize, &count, gvo);
                    dnaSeqFree(&seq);
                }
            }
            twoBitClose(&tbf);
        }
        else
        {
            struct dnaSeq seq;
            seq.name=(char*)malloc(sizeof(char)*512);
            while (queryCount-- && faMixedSpeedReadNext(lf, &seq.dna, &seq.size, &seq.name, &faFastBuf, &faFastBufSize))
            {
                searchOneMaskTrim(&seq, isProt, gf, outFile,
                                  maskHash, &totalSize, &count, gvo);
            }
            free(seq.name);
            faFreeFastBuf(&faFastBuf, &faFastBufSize);
        }
    }
    if (showStatus)
        printf("Searched %lld bases in %d sequences\n", totalSize, count);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movl (%rax), %eax
movl %eax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movl (%rax), %eax
movl %eax, -0x34(%rbp)
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movl (%rax), %eax
movl %eax, -0x4c(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq %rax, -0x58(%rbp)
movl $0x0, -0x6c(%rbp)
movq $0x0, -0x78(%rbp)
movl $0x0, -0x7c(%rbp)
movq $0x0, -0x88(%rbp)
cmpl $0x0, -0x14(%rbp)
jne 0x75ee
movq -0x58(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x17640
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rdi
callq 0x472b0
cmpl $0x0, %eax
je 0x76a0
cmpl $0x0, -0x34(%rbp)
je 0x7623
movq -0x68(%rbp), %rsi
leaq 0xcff6d(%rip), %rdi     # 0xd7589
movb $0x0, %al
callq 0x35d40
movq -0x68(%rbp), %rsi
movl $0x1, %edi
callq 0x46d30
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rdi
addq $0x8, %rdi
callq 0x40d70
movq -0x68(%rbp), %rdi
callq 0x2a450
movq %rax, %rcx
movq -0x90(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x90(%rbp), %rdi
movl -0x34(%rbp), %esi
movq -0x30(%rbp), %rdx
movq -0x48(%rbp), %rcx
movq -0x40(%rbp), %r8
movq -0x58(%rbp), %rax
leaq -0x78(%rbp), %r9
leaq -0x6c(%rbp), %r10
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x73d0
leaq -0x90(%rbp), %rdi
callq 0x327f0
jmp 0x792a
movq -0x68(%rbp), %rdi
callq 0x5ad50
cmpl $0x0, %eax
je 0x7861
movq -0x68(%rbp), %rdi
callq 0x5a750
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
movq (%rax), %rdi
callq 0x59660
movq %rax, -0xa0(%rbp)
cmpl $0x0, -0x34(%rbp)
je 0x76f0
movq -0x68(%rbp), %rsi
leaq 0xcfed6(%rip), %rdi     # 0xd75bf
movb $0x0, %al
callq 0x35d40
movq -0x98(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x77b6
movq $0x0, -0xa8(%rbp)
movq -0x98(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0xa8(%rbp)
cmpq $0x0, -0xa8(%rbp)
je 0x77b1
movq -0xa0(%rbp), %rdi
movq -0xa8(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0xa8(%rbp), %rax
movl 0x10(%rax), %edx
movq -0xa8(%rbp), %rax
movl 0x14(%rax), %ecx
callq 0x5a420
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rdi
movl -0x34(%rbp), %esi
movq -0x30(%rbp), %rdx
movq -0x48(%rbp), %rcx
movq -0x40(%rbp), %r8
movq -0x58(%rbp), %rax
leaq -0x78(%rbp), %r9
leaq -0x6c(%rbp), %r10
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x73d0
leaq -0xb0(%rbp), %rdi
callq 0x327f0
movq -0xa8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa8(%rbp)
jmp 0x771f
jmp 0x7850
movq $0x0, -0xb8(%rbp)
movq -0xa0(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0xb8(%rbp)
cmpq $0x0, -0xb8(%rbp)
je 0x784e
movq -0xa0(%rbp), %rdi
movq -0xb8(%rbp), %rax
movq 0x8(%rax), %rsi
xorl %ecx, %ecx
movl %ecx, %edx
callq 0x5a420
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rdi
movl -0x34(%rbp), %esi
movq -0x30(%rbp), %rdx
movq -0x48(%rbp), %rcx
movq -0x40(%rbp), %r8
movq -0x58(%rbp), %rax
leaq -0x78(%rbp), %r9
leaq -0x6c(%rbp), %r10
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x73d0
leaq -0xc0(%rbp), %rdi
callq 0x327f0
movq -0xb8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xb8(%rbp)
jmp 0x77d3
jmp 0x7850
leaq -0xa0(%rbp), %rdi
callq 0x594f0
jmp 0x7928
movl $0x200, %edi            # imm = 0x200
callq 0x69c0
movq %rax, -0xe0(%rbp)
movl -0x18(%rbp), %ecx
movl %ecx, %eax
addl $-0x1, %eax
movl %eax, -0x18(%rbp)
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0xe9(%rbp)
je 0x78cb
movq -0x28(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
addq $0x10, %rsi
leaq -0xe8(%rbp), %rdx
addq $0x18, %rdx
leaq -0xe8(%rbp), %rcx
addq $0x8, %rcx
leaq -0x88(%rbp), %r8
leaq -0x7c(%rbp), %r9
callq 0x37230
cmpl $0x0, %eax
setne %al
movb %al, -0xe9(%rbp)
movb -0xe9(%rbp), %al
testb $0x1, %al
jne 0x78d7
jmp 0x790c
movl -0x34(%rbp), %esi
movq -0x30(%rbp), %rdx
movq -0x48(%rbp), %rcx
movq -0x40(%rbp), %r8
movq -0x58(%rbp), %rax
leaq -0xe8(%rbp), %rdi
leaq -0x78(%rbp), %r9
leaq -0x6c(%rbp), %r10
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x73d0
jmp 0x7872
movq -0xe0(%rbp), %rdi
callq 0x6880
leaq -0x88(%rbp), %rdi
leaq -0x7c(%rbp), %rsi
callq 0x36da0
jmp 0x792a
cmpl $0x0, -0x4c(%rbp)
je 0x7945
movq -0x78(%rbp), %rsi
movl -0x6c(%rbp), %edx
leaq 0xcfcb8(%rip), %rdi     # 0xd75f6
movb $0x0, %al
callq 0x6070
movq -0x8(%rbp), %rax
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
nopw %cs:(%rax,%rax)