// File: /workspace/github_c_makefile_star2_O3/richarddurbin[P]hash10x/hash10x.c
// Function: main
int main (int argc, char *argv[])
{
  --argc ; ++argv ;		/* eat program name */

  outFile = stdout ;
  
  timeUpdate (stdout) ;		/* initialise timer */

  /* command line parameters */
  params.k = 21 ;
  params.w = 31 ;
  params.r = 17 ;
  params.B = 28 ;
  params.N = 0 ;
  params.chunkSize = 100000 ;
  params.clusterThreshold = 5 ;
#ifdef OMP
  numThreads = omp_get_max_threads () ;
  omp_set_num_threads (numThreads) ;
#endif
  
  if (!argc) usage () ;

#ifdef SIZES
  printf ("sizeof ClusterBlock is %d\n", sizeof(ClusterBlock)) ;
  printf ("sizeof ClusterHash is %d\n", sizeof(ClusterHash)) ;
  exit (0) ;
#endif

  clusterBlocks = arrayCreate (1200, ClusterBlock) ;

  FILE *f ;
  char inputBuffer[1024] ;	/* use these for interactive mode */
  char *inputArgs[32] ;
  Array inputArray = arrayCreate (1024, char) ;
  
  while (argc) {
    if (**argv != '-')
      die ("option/command %s does not start with '-': run without arguments for usage", *argv) ;
    if (!isInteractive)
      { fprintf (outFile, "COMMAND %s", *argv) ;
	int i ;
	for (i = 1 ; i < argc && *argv[i] != '-' ; ++i) fprintf (outFile, " %s", argv[i]) ;
	fputc ('\n', outFile) ;
	if (outFile != stdout)
	  { printf ("COMMAND %s", *argv) ;
	    int i ;
	    for (i = 1 ; i < argc && *argv[i] != '-' ; ++i) fprintf (outFile, " %s", argv[i]) ;
	    putchar ('\n') ;
	  }
      }
#define ARGMATCH(x,n)	(!strcmp (*argv, x) && argc >= n && (argc -= n, argv += n))
    if (ARGMATCH("-k",2)) params.k = atoi(argv[-1]) ;
    else if (ARGMATCH("-w",2)) params.w = atoi(argv[-1]) ;
    else if (ARGMATCH("-r",2)) params.r = atoi(argv[-1]) ;
    else if (ARGMATCH("-B",2)) params.B = atoi(argv[-1]) ;
    else if (ARGMATCH("-N",2)) params.N = atoi(argv[-1]) ;
    else if (ARGMATCH("-c",2)) params.chunkSize = atoi(argv[-1]) ;
    else if (ARGMATCH("-t",2) || ARGMATCH ("--threads",2))
      {
#ifdef OMP
	numThreads = atoi(argv[-1]) ;
	if (numThreads > omp_get_max_threads ()) numThreads = omp_get_max_threads () ;
	omp_set_num_threads (numThreads) ;
	fprintf (outFile, "  setting number of threads to %d\n", numThreads) ;
#else
	fprintf (stderr, "  can't set thread number - not compiled with OMP\n") ;
#endif
      }
    else if (ARGMATCH("-o",2) || ARGMATCH("--output",2))
      { if (!strcmp (argv[-1], "-"))
	  outFile = stdout ;
	else if (!(outFile = fopen (argv[-1], "w")))
	  { fprintf (stderr, "can't open output file %s\n", argv[-1]) ; outFile = stdout ; }
      }
    else if (ARGMATCH("--interactive",1)) isInteractive = TRUE ;
    else if (ARGMATCH("--tables",1)) isPrintTables = !isPrintTables ;
    else if (ARGMATCH("--verbose",1)) isVerbose = !isVerbose ;
    else if (ARGMATCH("--readFQB",2))
      { if (!(f = fopen (argv[-1], "r"))) die ("failed to open fqb file %s", argv[-1]) ;
	initialise (params.k, params.w, params.r, params.B) ;
        readFQB (f, params.N, params.chunkSize) ;
	fillHashTable () ;
      }
    else if (ARGMATCH("--readHash",2))
      { if (!(f = fopen (argv[-1], "r"))) die ("failed to open hash file %s", argv[-1]) ;
	initialise (params.k, params.w, params.r, params.B) ;
	readHashFile (f) ;
	fillHashTable () ;
      }
    else if (ARGMATCH("--writeHash",2))
      { if (!(f = fopen (argv[-1], "w"))) die ("failed to open hash file %s", argv[-1]) ;
	writeHashFile (f) ;
      }
    else if (ARGMATCH("--hashDepthRange",3))
      { hashWithinRangeBuild (atoi(argv[-2]), atoi(argv[-1])) ;
	goodHashesBuild () ;
      }
    else if (ARGMATCH("--hashInfo",4))
      hashInfo (atoi(argv[-3]), atoi(argv[-2]), atoi(argv[-1])) ;
    else if (ARGMATCH("--hashExplore",2))
      exploreHash (atoi(argv[-1])) ;
    else if (ARGMATCH("--doubleShared",3))
      doubleShared (atoi(argv[-2]), atoi(argv[-1])) ;
    else if (ARGMATCH("--codeExplore",2))
      if (goodHashes)
	codeExplore (atoi(argv[-1]), params.clusterThreshold) ;
      else
	{ fprintf (outFile, "!! you must set hashDepthRange before codeExplore\n") ;
	  if (outFile != stdout) fprintf (stderr, "!! you must set hashDepthRange before codeExplore\n") ;
	}
    else if (ARGMATCH("--cribBuild",3))
      { FILE *f1, *f2 ;
	if (!(f1 = fopen (argv[-2], "r"))) die ("failed to open .fa file %s", argv[-2]) ;
	if (!(f2 = fopen (argv[-1], "r"))) die ("failed to open .fa file %s", argv[-1]) ;
	cribBuild (f1, f2) ;
      }
    else if (ARGMATCH("-ct",2) || ARGMATCH ("--clusterThreshold",2))
      params.clusterThreshold = atoi(argv[-1]) ;
    else if (ARGMATCH("--cluster",3))
      { int code, codeMin = atoi(argv[-2]), codeMax = atoi(argv[-1]) ;
	if (!codeMin) codeMin = 1 ;
	if (!codeMax) codeMax = arrayMax(clusterBlocks) ;
	if (goodHashes)
	  {
#ifdef OMP
#pragma omp parallel for
#endif
	    for (code = codeMin ; code < codeMax ; ++code)
	      { codeClusterFind (code, params.clusterThreshold) ;
		codeClusterReadMerge (code) ;
	      }
	    fprintf (outFile, "  clustered codes %d to %d\n", codeMin, codeMax) ;
	    if (outFile != stdout) printf ("  clustered codes %d to %d\n", codeMin, codeMax) ;
	  }
      else
	{ fprintf (outFile, "!! you must set hashDepthRange before cluster\n") ;
	  if (outFile != stdout) fprintf (stderr, "!! you must set hashDepthRange before cluster\n") ;
	}
      }
    else if (ARGMATCH("--clusterReport",3))
      { int code, codeMin = atoi(argv[-2]), codeMax = atoi(argv[-1]) ;
	if (!codeMax) codeMax = arrayMax(clusterBlocks) ;
	codeClusterReport (codeMin, codeMax) ;
      }
    else if (ARGMATCH("--clusterSplit",1)) clusterSplitCodes () ;
    else if (ARGMATCH("--hashStats",1)) hashDepthHist () ;
    else if (ARGMATCH("--codeStats",1)) codeSizeHist () ;
    else if (ARGMATCH("--cribSummary",1)) cribSummary () ;
    else if (ARGMATCH("--errorFix",3)) errorFix (atoi(argv[-2]), atoi(argv[-1])) ;
    else if (ARGMATCH("--shareScan",3)) shareScan (atoi(argv[-2]), atoi(argv[-1])) ;
    else if (ARGMATCH("--help",1)) usage () ;
    else if (ARGMATCH("--quit",1) || ARGMATCH("--exit",1)) break ; /* end loop */
    else
      if (isInteractive) fprintf (stderr, "  unknown option/command %s", (*argv)+2) ;
      else die ("unknown option/command %s; run without arguments for usage", *argv) ;

    printf ("  ") ; timeUpdate (stdout) ; fflush (stdout) ;
    
    if (isInteractive)		/* get an input line from stdin and convert to *argv */
      { if (argc) fprintf (stderr, "INPUT ERROR - ignoring arguments starting %s\n", *argv) ;
	char c ;
	printf ("> ") ; fflush (stdout) ;
	while ((c = getchar())) if (!isspace (c) || c == '\n') break ; /* remove leading space */
	if (c == '\n') { argc = 1 ; argv = inputArgs ; *argv = "--help" ; continue ; }
	arr(inputArray,0,char) = '-' ; arr(inputArray,1,char) = '-' ; arrayMax(inputArray) = 2 ;
	while (c != '\n' && c != EOF)
	  { for ( ; isgraph(c) ; c = getchar ())
	      array(inputArray, arrayMax(inputArray), char) = c ;
	    array(inputArray, arrayMax(inputArray), char) = 0 ; /* string terminator */
	    while (isspace (c) && c != '\n') c = getchar() ;	/* eat whitespace separator */
	  }
	if (c == EOF) break ;	       /* end of file or error - exit program */
	argv = inputArgs ; argc = 0 ; int i = 0 ;
	while (i < arrayMax(inputArray))
	  { argv[argc++] = arrp(inputArray,i,char) ;
	    while (*arrp(inputArray,i++,char)) ;
	  }
      }
  }

  fprintf (outFile, "total resources used: ") ; timeTotal (outFile) ;
  if (outFile != stdout) { printf ("total resources used: ") ; timeTotal (stdout) ; }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rsi, %r14
movl %edi, %r12d
movq 0x9b81(%rip), %r13      # 0xefc8
movq (%r13), %rdi
movq %rdi, 0xaf3e(%rip)      # 0x10390
callq 0x98d9
movaps 0x4c12(%rip), %xmm0     # 0xa070
movaps %xmm0, 0xafcb(%rip)     # 0x10430
movabsq $0x186a000000000, %rax  # imm = 0x186A000000000
movq %rax, 0xafca(%rip)      # 0x10440
movl $0x5, 0xafc8(%rip)      # 0x10448
decl %r12d
je 0x623d
movl $0x4b0, %edi            # imm = 0x4B0
movl $0x20, %esi
callq 0x8e88
movq %rax, 0xaee9(%rip)      # 0x10388
movl $0x400, %edi            # imm = 0x400
movl $0x1, %esi
callq 0x8e88
testl %r12d, %r12d
je 0x61dc
movq %rax, %rbx
addq $0x8, %r14
movq (%r14), %rbp
cmpb $0x2d, (%rbp)
je 0x54db
leaq 0x5d4d(%rip), %rdi      # 0xb21b
movq %rbp, %rsi
xorl %eax, %eax
callq 0x95f8
movq (%r14), %rbp
cmpb $0x0, 0xae90(%rip)      # 0x10372
jne 0x55b5
movq 0xaea1(%rip), %rdi      # 0x10390
leaq 0x5d70(%rip), %rsi      # 0xb266
movq %rbp, %rdx
xorl %eax, %eax
callq 0x1150
cmpl $0x2, %r12d
leaq 0x5267(%rip), %rbp      # 0xa772
jl 0x5538
movl %r12d, %r15d
movl $0x1, %r13d
movq (%r14,%r13,8), %rdx
cmpb $0x2d, (%rdx)
je 0x5538
movq 0xae6a(%rip), %rdi      # 0x10390
movq %rbp, %rsi
xorl %eax, %eax
callq 0x1150
incq %r13
cmpq %r13, %r15
jne 0x5516
movq 0xae51(%rip), %rsi      # 0x10390
movl $0xa, %edi
callq 0x1100
movq 0xae40(%rip), %rax      # 0x10390
movq (%r14), %rbp
movq 0x9a6e(%rip), %rcx      # 0xefc8
cmpq (%rcx), %rax
je 0x55b5
leaq 0x5d00(%rip), %rdi      # 0xb266
movq %rbp, %rsi
xorl %eax, %eax
callq 0x10d0
cmpl $0x2, %r12d
leaq 0x51f7(%rip), %rbp      # 0xa772
jl 0x55a8
movl %r12d, %r15d
movl $0x1, %r13d
movq (%r14,%r13,8), %rdx
cmpb $0x2d, (%rdx)
je 0x55a8
movq 0xadfa(%rip), %rdi      # 0x10390
movq %rbp, %rsi
xorl %eax, %eax
callq 0x1150
incq %r13
cmpq %r13, %r15
jne 0x5586
movl $0xa, %edi
callq 0x1050
movq (%r14), %rbp
movb (%rbp), %r15b
cmpb $0x2d, %r15b
jne 0x55fd
cmpb $0x6b, 0x1(%rbp)
jne 0x56b8
cmpl $0x2, %r12d
setge %r13b
jl 0x56c0
cmpb $0x0, 0x2(%rbp)
jne 0x56c0
addl $-0x2, %r12d
movq 0x8(%r14), %rdi
addq $0x10, %r14
callq 0x1210
movl %eax, 0xae38(%rip)      # 0x10430
jmp 0x58e7
movq %rbp, %rdi
leaq 0x5c6a(%rip), %rsi      # 0xb271
callq 0x1130
cmpl $0x2, %r12d
setge %r13b
jl 0x561e
testl %eax, %eax
je 0x58bf
movq %rbp, %rdi
leaq 0x5c86(%rip), %rsi      # 0xb2ae
callq 0x1130
testb %r13b, %r13b
je 0x5685
testl %eax, %eax
jne 0x5685
addl $-0x2, %r12d
leaq 0x10(%r14), %rbp
movq 0x8(%r14), %rdi
cmpb $0x2d, (%rdi)
jne 0x5651
cmpb $0x0, 0x1(%rdi)
je 0x5869
leaq 0x5f58(%rip), %rsi      # 0xb5b0
callq 0x11e0
movq %rax, 0xad2c(%rip)      # 0x10390
testq %rax, %rax
movq 0x995a(%rip), %r13      # 0xefc8
jne 0x58f1
addq $0x8, %r14
movq %r14, %rdi
callq 0x198f
jmp 0x58f1
movq %rbp, %rdi
leaq 0x5c43(%rip), %rsi      # 0xb2d2
callq 0x1130
testl %r12d, %r12d
jle 0x578c
testl %eax, %eax
jne 0x578c
addq $0x8, %r14
decl %r12d
movb $0x1, 0xacbf(%rip)      # 0x10372
jmp 0x58e7
cmpl $0x2, %r12d
setge %r13b
cmpb $0x77, 0x1(%rbp)
jne 0x56f3
cmpb $0x0, 0x2(%rbp)
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x56f3
addl $-0x2, %r12d
movq 0x8(%r14), %rdi
addq $0x10, %r14
callq 0x1210
movl %eax, 0xad46(%rip)      # 0x10434
jmp 0x58e7
cmpb $0x72, 0x1(%rbp)
jne 0x5726
cmpb $0x0, 0x2(%rbp)
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x5726
addl $-0x2, %r12d
movq 0x8(%r14), %rdi
addq $0x10, %r14
callq 0x1210
movl %eax, 0xad17(%rip)      # 0x10438
jmp 0x58e7
cmpb $0x42, 0x1(%rbp)
jne 0x5759
cmpb $0x0, 0x2(%rbp)
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x5759
addl $-0x2, %r12d
movq 0x8(%r14), %rdi
addq $0x10, %r14
callq 0x1210
movl %eax, 0xace8(%rip)      # 0x1043c
jmp 0x58e7
cmpb $0x4e, 0x1(%rbp)
jne 0x57c6
cmpb $0x0, 0x2(%rbp)
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x57c6
addl $-0x2, %r12d
movq 0x8(%r14), %rdi
addq $0x10, %r14
callq 0x1210
movl %eax, 0xacb9(%rip)      # 0x10440
jmp 0x58e7
movq %rbp, %rdi
leaq 0x5b4a(%rip), %rsi      # 0xb2e0
callq 0x1130
testl %r12d, %r12d
jle 0x5832
testl %eax, %eax
jne 0x5832
addq $0x8, %r14
decl %r12d
cmpb $0x0, 0xabb6(%rip)      # 0x10370
sete 0xabaf(%rip)            # 0x10370
jmp 0x58e7
cmpb $0x63, 0x1(%rbp)
jne 0x57f9
cmpb $0x0, 0x2(%rbp)
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x57f9
addl $-0x2, %r12d
movq 0x8(%r14), %rdi
addq $0x10, %r14
callq 0x1210
movl %eax, 0xac50(%rip)      # 0x10444
jmp 0x58e7
cmpb $0x74, 0x1(%rbp)
jne 0x587d
cmpb $0x0, 0x2(%rbp)
sete %al
testb %al, %r13b
jne 0x58bf
movq %rbp, %rdi
leaq 0x5a58(%rip), %rsi      # 0xb271
callq 0x1130
testl %eax, %eax
setne %al
movl %r13d, %ecx
xorb $0x1, %cl
orb %al, %cl
jne 0x58a0
jmp 0x58bf
movq %rbp, %rdi
leaq 0x5aad(%rip), %rsi      # 0xb2e9
callq 0x1130
testl %r12d, %r12d
jle 0x5aa9
testl %eax, %eax
jne 0x5aa9
addq $0x8, %r14
decl %r12d
cmpb $0x0, 0xab11(%rip)      # 0x10371
sete 0xab0a(%rip)            # 0x10371
jmp 0x58e7
movq 0x9758(%rip), %r13      # 0xefc8
movq (%r13), %rax
movq %rax, 0xab15(%rip)      # 0x10390
jmp 0x58f1
movq %rbp, %rdi
leaq 0x59ea(%rip), %rsi      # 0xb271
callq 0x1130
testl %eax, %eax
sete %al
testb %al, %r13b
jne 0x58bf
cmpb $0x2d, %r15b
jne 0x561e
cmpb $0x6f, 0x1(%rbp)
jne 0x561e
cmpb $0x0, 0x2(%rbp)
sete %al
testb %al, %r13b
je 0x561e
jmp 0x5636
addl $-0x2, %r12d
addq $0x10, %r14
movq 0x9722(%rip), %rax      # 0xeff0
movq (%rax), %rcx
movl $0x32, %esi
movl $0x1, %edx
leaq 0x5999(%rip), %rdi      # 0xb27b
callq 0x1250
movq %r14, %rbp
movq 0x96d7(%rip), %r13      # 0xefc8
leaq 0x4f9a(%rip), %rdi      # 0xa892
xorl %eax, %eax
callq 0x10d0
movq (%r13), %rdi
callq 0x98d9
movq (%r13), %rdi
callq 0x11a0
cmpb $0x0, 0xaa5a(%rip)      # 0x10372
je 0x5a8b
testl %r12d, %r12d
jne 0x5a9c
leaq 0x5c20(%rip), %rdi      # 0xb54e
xorl %eax, %eax
callq 0x10d0
movq (%r13), %rdi
callq 0x11a0
callq 0x1140
movl %eax, %r14d
testb %r14b, %r14b
je 0x5970
callq 0x1270
movl %r14d, %ecx
shll $0x18, %ecx
cmpl $0xa000000, %ecx        # imm = 0xA000000
je 0x5970
movq (%rax), %rax
movsbq %r14b, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x2000, %eax           # imm = 0x2000
jne 0x593e
cmpb $0xa, %r14b
jne 0x598c
leaq 0x5b37(%rip), %rax      # 0xb4b4
movq %rax, (%rsp)
movl $0x1, %r12d
jmp 0x5a88
movq 0x8(%rbx), %rax
movb $0x2d, %dl
movb %dl, (%rax)
movq 0x8(%rbx), %rax
movslq 0x14(%rbx), %rcx
movb %dl, (%rax,%rcx)
movl $0x2, 0x18(%rbx)
cmpb $-0x1, %r14b
je 0x61dc
movzbl %r14b, %eax
cmpl $0xa, %eax
je 0x5a41
callq 0x1270
movq %rax, %r12
movq (%rax), %rax
movsbq %r14b, %r15
cmpw $0x0, (%rax,%r15,2)
jns 0x59f0
movl 0x18(%rbx), %esi
movq %rbx, %rdi
callq 0x9131
movb %r14b, (%rax)
callq 0x1140
movl %eax, %r14d
movq (%r12), %rax
jmp 0x59c8
movl 0x18(%rbx), %esi
movq %rbx, %rdi
callq 0x9131
movb $0x0, (%rax)
cmpb $0xa, %r14b
je 0x59a6
movq (%r12), %rax
movzwl (%rax,%r15,2), %eax
andl $0x2000, %eax           # imm = 0x2000
je 0x59a6
callq 0x1140
movl %eax, %r14d
movq (%r12), %rax
movsbq %r14b, %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x2000, %eax           # imm = 0x2000
cmpb $0xa, %r14b
je 0x59a6
testw %ax, %ax
jne 0x5a14
jmp 0x59a6
movl 0x18(%rbx), %eax
testl %eax, %eax
jle 0x61dc
movslq 0x14(%rbx), %rcx
movq 0x8(%rbx), %rdx
xorl %r12d, %r12d
xorl %esi, %esi
movl %ecx, %edi
imull %esi, %edi
movslq %edi, %rdi
addq %rdx, %rdi
movq %rdi, (%rsp,%r12,8)
movq 0x8(%rbx), %rdx
movslq %esi, %rdi
imulq %rcx, %rdi
addq %rdx, %rdi
incl %esi
cmpb $0x0, (%rdi)
leaq (%rdi,%rcx), %rdi
jne 0x5a76
incq %r12
cmpl %esi, %eax
jg 0x5a59
movq %rsp, %rbp
movq %rbp, %r14
testl %r12d, %r12d
jne 0x54be
jmp 0x61dc
movq %rbp, %rdi
callq 0x19c4
jmp 0x5927
movq %rbp, %rdi
leaq 0x5840(%rip), %rsi      # 0xb2f3
callq 0x1130
testl %eax, %eax
setne %al
movl %r13d, %r15d
xorb $0x1, %r15b
orb %r15b, %al
jne 0x5b40
movq 0x8(%r14), %rdi
leaq 0x48f5(%rip), %rsi      # 0xa3c9
callq 0x11e0
movq %rax, %rbp
testq %rax, %rax
movq 0x94e2(%rip), %r13      # 0xefc8
jne 0x5afa
movq 0x8(%r14), %rsi
leaq 0x580a(%rip), %rdi      # 0xb2fd
xorl %eax, %eax
callq 0x95f8
addl $-0x2, %r12d
addq $0x10, %r14
movl 0xa928(%rip), %edi      # 0x10430
movl 0xa926(%rip), %esi      # 0x10434
movl 0xa924(%rip), %edx      # 0x10438
movl 0xa922(%rip), %ecx      # 0x1043c
callq 0x5323
movl 0xa91b(%rip), %esi      # 0x10440
movl 0xa919(%rip), %edx      # 0x10444
movq %rbp, %rdi
callq 0x2058
callq 0x2957
movq %r14, %rbp
jmp 0x58f1
movq %rbp, %rdi
leaq 0x57ce(%rip), %rsi      # 0xb318
callq 0x1130
testl %eax, %eax
setne %al
orb %r15b, %al
jne 0x5bba
movq 0x8(%r14), %rdi
leaq 0x4865(%rip), %rsi      # 0xa3c9
callq 0x11e0
movq %rax, %rbp
testq %rax, %rax
jne 0x5b83
movq 0x8(%r14), %rsi
leaq 0x57a7(%rip), %rdi      # 0xb323
xorl %eax, %eax
callq 0x95f8
addl $-0x2, %r12d
addq $0x10, %r14
movl 0xa89f(%rip), %edi      # 0x10430
movl 0xa89d(%rip), %esi      # 0x10434
movl 0xa89b(%rip), %edx      # 0x10438
movl 0xa899(%rip), %ecx      # 0x1043c
callq 0x5323
movq %rbp, %rdi
callq 0x25b5
callq 0x2957
jmp 0x58e7
movq %rbp, %rdi
leaq 0x577b(%rip), %rsi      # 0xb33f
callq 0x1130
testl %eax, %eax
setne %al
orb %r15b, %al
jne 0x5c03
addl $-0x2, %r12d
leaq 0x10(%r14), %rbp
movq 0x8(%r14), %rdi
leaq 0x59ca(%rip), %rsi      # 0xb5b0
callq 0x11e0
testq %rax, %rax
movq 0x93d3(%rip), %r13      # 0xefc8
je 0x5ca1
movq %rax, %rdi
jmp 0x5cb5
movq %rbp, %rdi
leaq 0x573e(%rip), %rsi      # 0xb34b
callq 0x1130
cmpl $0x3, %r12d
jl 0x5c4d
testl %eax, %eax
jne 0x5c4d
leaq 0x18(%r14), %rbp
addl $-0x3, %r12d
movq 0x8(%r14), %rdi
callq 0x1210
movl %eax, %r15d
movq 0x10(%r14), %rdi
callq 0x1210
movl %r15d, %edi
movl %eax, %esi
callq 0x35e5
callq 0x43b5
jmp 0x58ea
movq %rbp, %rdi
leaq 0x5705(%rip), %rsi      # 0xb35c
callq 0x1130
cmpl $0x4, %r12d
jl 0x5cbf
testl %eax, %eax
jne 0x5cbf
leaq 0x20(%r14), %rbp
addl $-0x4, %r12d
movq 0x8(%r14), %rdi
callq 0x1210
movl %eax, %r15d
movq 0x10(%r14), %rdi
callq 0x1210
movl %eax, %r13d
movq 0x18(%r14), %rdi
callq 0x1210
movl %r15d, %edi
movl %r13d, %esi
movl %eax, %edx
callq 0x3c80
jmp 0x58ea
movq 0x8(%r14), %rsi
leaq 0x5677(%rip), %rdi      # 0xb323
xorl %eax, %eax
callq 0x95f8
xorl %edi, %edi
callq 0x235b
jmp 0x58f1
movq %rbp, %rdi
leaq 0x569e(%rip), %rsi      # 0xb367
callq 0x1130
testl %eax, %eax
setne %al
orb %r15b, %al
jne 0x5cf5
addl $-0x2, %r12d
movq 0x8(%r14), %rdi
addq $0x10, %r14
callq 0x1210
movl %eax, %edi
callq 0x3995
jmp 0x58e7
movq %rbp, %rdi
leaq 0x5676(%rip), %rsi      # 0xb375
callq 0x1130
cmpl $0x3, %r12d
jl 0x5d3a
testl %eax, %eax
jne 0x5d3a
leaq 0x18(%r14), %rbp
addl $-0x3, %r12d
movq 0x8(%r14), %rdi
callq 0x1210
movl %eax, %r15d
movq 0x10(%r14), %rdi
callq 0x1210
movl %r15d, %edi
movl %eax, %esi
callq 0x3b1b
jmp 0x58ea
movq %rbp, %rdi
leaq 0x5640(%rip), %rsi      # 0xb384
callq 0x1130
testl %eax, %eax
setne %al
orb %r15b, %al
jne 0x5d84
addl $-0x2, %r12d
leaq 0x10(%r14), %rbp
cmpq $0x0, 0xa6ad(%rip)      # 0x10410
je 0x5e48
movq 0x8(%r14), %rdi
callq 0x1210
movl 0xa6d0(%rip), %esi      # 0x10448
movl %eax, %edi
callq 0x6247
jmp 0x58ea
movq %rbp, %rdi
leaq 0x5637(%rip), %rsi      # 0xb3c5
callq 0x1130
cmpl $0x3, %r12d
jl 0x5dfa
testl %eax, %eax
jne 0x5dfa
movq 0x8(%r14), %rdi
leaq 0x4621(%rip), %rsi      # 0xa3c9
callq 0x11e0
movq %rax, %r15
testq %rax, %rax
jne 0x5dc7
movq 0x8(%r14), %rsi
leaq 0x5611(%rip), %rdi      # 0xb3d1
xorl %eax, %eax
callq 0x95f8
addl $-0x3, %r12d
leaq 0x18(%r14), %rbp
movq 0x10(%r14), %rdi
leaq 0x45ef(%rip), %rsi      # 0xa3c9
callq 0x11e0
testq %rax, %rax
movq 0x91df(%rip), %r13      # 0xefc8
je 0x5e87
movq %r15, %rdi
movq %rax, %rsi
jmp 0x5e9e
movq %rbp, %rdi
leaq 0x55e8(%rip), %rsi      # 0xb3ec
callq 0x1130
testl %eax, %eax
sete %al
testb %al, %r13b
jne 0x5e2c
movq %rbp, %rdi
leaq 0x55d3(%rip), %rsi      # 0xb3f0
callq 0x1130
testl %eax, %eax
setne %al
orb %al, %r15b
jne 0x5ea8
addl $-0x2, %r12d
movq 0x8(%r14), %rdi
addq $0x10, %r14
callq 0x1210
movl %eax, 0xa605(%rip)      # 0x10448
jmp 0x58e7
movq 0xa541(%rip), %rcx      # 0x10390
movl $0x32, %esi
movl $0x1, %edx
leaq 0x5532(%rip), %rdi      # 0xb392
callq 0x1250
movq 0xa524(%rip), %rax      # 0x10390
movq 0x9155(%rip), %r13      # 0xefc8
cmpq (%r13), %rax
je 0x58f1
callq 0x1973
jmp 0x58f1
movq 0x10(%r14), %rsi
leaq 0x553f(%rip), %rdi      # 0xb3d1
xorl %eax, %eax
callq 0x95f8
movq %r15, %rdi
xorl %esi, %esi
callq 0x2f52
jmp 0x58f1
movq %rbp, %rdi
leaq 0x5551(%rip), %rsi      # 0xb403
callq 0x1130
cmpl $0x3, %r12d
jl 0x5f7c
testl %eax, %eax
jne 0x5f7c
movq 0x8(%r14), %rdi
callq 0x1210
movl %eax, %r15d
movq 0x10(%r14), %rdi
callq 0x1210
movl %eax, %r13d
cmpl $0x1, %r15d
adcl $0x0, %r15d
testl %eax, %eax
jne 0x5ef8
movq 0xa494(%rip), %rax      # 0x10388
movl 0x18(%rax), %r13d
addl $-0x3, %r12d
addq $0x18, %r14
cmpq $0x0, 0xa508(%rip)      # 0x10410
je 0x5ff6
cmpl %r13d, %r15d
jge 0x5f31
movl %r15d, %ebp
movl 0xa52c(%rip), %esi      # 0x10448
movl %ebp, %edi
callq 0x456f
movl %ebp, %edi
callq 0x4936
incl %ebp
cmpl %ebp, %r13d
jne 0x5f16
movq 0xa458(%rip), %rdi      # 0x10390
leaq 0x54ce(%rip), %rsi      # 0xb40d
movl %r15d, %edx
movl %r13d, %ecx
xorl %eax, %eax
callq 0x1150
movq 0xa43d(%rip), %rax      # 0x10390
movq 0x906e(%rip), %rcx      # 0xefc8
cmpq (%rcx), %rax
je 0x58e7
leaq 0x54a3(%rip), %rdi      # 0xb40d
movl %r15d, %esi
movl %r13d, %edx
xorl %eax, %eax
callq 0x10d0
jmp 0x58e7
movq %rbp, %rdi
leaq 0x54d2(%rip), %rsi      # 0xb458
callq 0x1130
cmpl $0x3, %r12d
jl 0x5fcd
testl %eax, %eax
jne 0x5fcd
movq 0x8(%r14), %rdi
callq 0x1210
movl %eax, %ebp
movq 0x10(%r14), %rdi
callq 0x1210
testl %eax, %eax
jne 0x5fb7
movq 0xa3d4(%rip), %rax      # 0x10388
movl 0x18(%rax), %eax
addl $-0x3, %r12d
addq $0x18, %r14
movl %ebp, %edi
movl %eax, %esi
callq 0x4b09
jmp 0x58e7
movq %rbp, %rdi
leaq 0x5491(%rip), %rsi      # 0xb468
callq 0x1130
testl %r12d, %r12d
jle 0x6034
testl %eax, %eax
jne 0x6034
addq $0x8, %r14
decl %r12d
callq 0x4f75
jmp 0x58e7
movq 0xa393(%rip), %rcx      # 0x10390
movl $0x2e, %esi
movl $0x1, %edx
leaq 0x541b(%rip), %rdi      # 0xb429
callq 0x1250
movq 0xa376(%rip), %rax      # 0x10390
movq 0x8fa7(%rip), %rcx      # 0xefc8
cmpq (%rcx), %rax
je 0x58e7
callq 0x1957
jmp 0x58e7
movq %rbp, %rdi
leaq 0x5439(%rip), %rsi      # 0xb477
callq 0x1130
testl %r12d, %r12d
jle 0x605d
testl %eax, %eax
jne 0x605d
addq $0x8, %r14
decl %r12d
callq 0x2d89
jmp 0x58e7
movq %rbp, %rdi
leaq 0x541c(%rip), %rsi      # 0xb483
callq 0x1130
testl %r12d, %r12d
jle 0x6086
testl %eax, %eax
jne 0x6086
addq $0x8, %r14
decl %r12d
callq 0x2e13
jmp 0x58e7
movq %rbp, %rdi
leaq 0x53ff(%rip), %rsi      # 0xb48f
callq 0x1130
testl %r12d, %r12d
jle 0x60af
testl %eax, %eax
jne 0x60af
addq $0x8, %r14
decl %r12d
callq 0x530a
jmp 0x58e7
movq %rbp, %rdi
leaq 0x53e4(%rip), %rsi      # 0xb49d
callq 0x1130
cmpl $0x3, %r12d
jl 0x60f4
testl %eax, %eax
jne 0x60f4
leaq 0x18(%r14), %rbp
addl $-0x3, %r12d
movq 0x8(%r14), %rdi
callq 0x1210
movl %eax, %r15d
movq 0x10(%r14), %rdi
callq 0x1210
movl %r15d, %edi
movl %eax, %esi
callq 0x3d81
jmp 0x58ea
movq %rbp, %rdi
leaq 0x53aa(%rip), %rsi      # 0xb4a8
callq 0x1130
cmpl $0x3, %r12d
jl 0x6139
testl %eax, %eax
jne 0x6139
leaq 0x18(%r14), %rbp
addl $-0x3, %r12d
movq 0x8(%r14), %rdi
callq 0x1210
movl %eax, %r15d
movq 0x10(%r14), %rdi
callq 0x1210
movl %r15d, %edi
movl %eax, %esi
callq 0x411f
jmp 0x58ea
movq %rbp, %rdi
leaq 0x5371(%rip), %rsi      # 0xb4b4
callq 0x1130
testl %r12d, %r12d
jle 0x6151
testl %eax, %eax
je 0x61a7
movq %rbp, %rdi
leaq 0x5360(%rip), %rsi      # 0xb4bb
callq 0x1130
testl %r12d, %r12d
movq 0x8e5e(%rip), %r13      # 0xefc8
jle 0x6170
testl %eax, %eax
je 0x61dc
movq %rbp, %rdi
leaq 0x5348(%rip), %rsi      # 0xb4c2
callq 0x1130
testl %r12d, %r12d
jle 0x6188
testl %eax, %eax
je 0x61dc
cmpb $0x0, 0xa1e3(%rip)      # 0x10372
jne 0x61b8
leaq 0x534d(%rip), %rdi      # 0xb4e5
movq %rbp, %rsi
xorl %eax, %eax
callq 0x95f8
jmp 0x58e7
addq $0x8, %r14
decl %r12d
callq 0x1290
jmp 0x58e7
movq 0x8e31(%rip), %rax      # 0xeff0
movq (%rax), %rdi
addq $0x2, %rbp
leaq 0x52fc(%rip), %rsi      # 0xb4c9
movq %rbp, %rdx
xorl %eax, %eax
callq 0x1150
jmp 0x58e7
movq 0xa1ad(%rip), %rcx      # 0x10390
leaq 0x5367(%rip), %rdi      # 0xb551
movl $0x16, %esi
movl $0x1, %edx
callq 0x1250
movq 0xa190(%rip), %rdi      # 0x10390
callq 0x99f4
movq 0xa184(%rip), %rax      # 0x10390
cmpq (%r13), %rax
je 0x6229
leaq 0x5338(%rip), %rdi      # 0xb551
xorl %eax, %eax
callq 0x10d0
movq (%r13), %rdi
callq 0x99f4
xorl %eax, %eax
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x1290
jmp 0x5489