// File: /workspace/github_c_makefile_star2_O0/sheneman[P]clearcut/dmat.c
// Function: NJ_parse_distance_matrix
DMAT *
NJ_parse_distance_matrix(NJ_ARGS *nj_args) {
  
  DMAT *dmat           = NULL;
  FILE *fp            = NULL;
  NJ_DIST_TOKEN *token = NULL;

  int state, dmat_type;
  int row;
  int fltcnt;
  int x, y, i;
  int numvalread;
  int expectedvalues = -1;
  float val;
  int first_state = 0;


  /* allocate our distance matrix and token structure */
  dmat = (DMAT *)calloc(1, sizeof(DMAT));
  token = (NJ_DIST_TOKEN *)calloc(1, sizeof(NJ_DIST_TOKEN));
  if(token) {
    token->bufsize = NJ_INITIAL_BUFSIZE;
    token->buf     = (char *)calloc(token->bufsize, sizeof(char));
  }
  if(!dmat || !token || !token->buf) {
    fprintf(stderr, "Clearcut: Memory allocation error in NJ_parse_distance_matrix()\n");
    goto XIT_BAD;
  }
  
  /* open distance matrix file here */
  if(nj_args->stdin_flag) {
    fp = stdin;
  } else {
    fp = fopen(nj_args->infilename, "r");
    if(!fp) {
      fprintf(stderr, "Clearcut: Could not open distance matrix: %s\n", nj_args->infilename);
      perror("Clearcut");
      goto XIT_BAD;
    }
  }

  /* get the number of taxa in this file */
  fscanf(fp, "%ld\n", &dmat->ntaxa);
  if(dmat->ntaxa < 2) {
    fprintf(stderr, "Clearcut: Invalid number of taxa in distance matrix\n");

    goto XIT_BAD;
  }

  /* set our initial working size according to the # of taxa */
  dmat->size = dmat->ntaxa;

  /* allocate space for the distance matrix values here */
  dmat->val = 
    (float *)calloc(NJ_NCELLS(dmat->ntaxa), sizeof(float));
  if(!dmat->val) {
    fprintf(stderr, "Clearcut: Memory allocation error in NJ_parse_distance_matrix()\n");
    goto XIT_BAD;
  }

  /*  taxa names */
  dmat->taxaname = (char **)calloc(dmat->ntaxa, sizeof(char *));
  if(!dmat->taxaname) {
    fprintf(stderr, "Clearcut: Memory allocation error in NJ_parse_distance_matrix()\n");
    goto XIT_BAD;
  }

  /* set the initial state of our state machine */
  dmat_type   = NJ_PARSE_UNKNOWN;
  row         = -1;
  fltcnt      = 0;
  numvalread  = 0;


  /* read the input one character at a time to drive simple state machine */
  state = NJ_get_token(fp, token);
  while(state != NJ_EOF_STATE) {
    
    switch(state) {

    case NJ_NAME_STATE:
      
      if(first_state == 0) {
	first_state = 1;
      }

      row++;

      if(row > 0 && dmat_type == NJ_PARSE_UNKNOWN) {

	if(fltcnt == dmat->ntaxa) {

	  dmat_type = NJ_PARSE_SYMMETRIC;
	  expectedvalues = dmat->ntaxa * dmat->ntaxa;

	} else if (fltcnt == dmat->ntaxa-1) {

	  dmat_type = NJ_PARSE_UPPER;
	  expectedvalues = ((dmat->ntaxa) * (dmat->ntaxa-1)) / 2;

	  /* shift everything in first row by one char */
	  for(i=dmat->ntaxa-2;i>=0;i--) {
	    dmat->val[i+1] = dmat->val[i];
	  }

	} else if (fltcnt == 0) {

	  dmat_type = NJ_PARSE_LOWER;
	  expectedvalues = ((dmat->ntaxa) * (dmat->ntaxa-1)) / 2;

	} else {
	  goto XIT_BAD;
	}
      }
      
      if(row >= dmat->ntaxa) {
	goto XIT_BAD;
      }
      
      /* allocate space for this taxon label */
      dmat->taxaname[row] = (char *)calloc(strlen(token->buf)+1, sizeof(char));
      if(!dmat->taxaname[row]) {
	fprintf(stderr, "Clearcut: Memory allocation error in NJ_parse_distance_matrix()\n");
	goto XIT_BAD;
      }
      
      strcpy(dmat->taxaname[row], token->buf); 
      
      fltcnt = 0;

      break;


    case NJ_FLOAT_STATE:

      if(first_state == 0) {
	goto XIT_BAD;
      }

      val = atof(token->buf);
      if(errno) {
	fprintf(stderr, "Clearcut: Distance value out-of-range.\n");
	goto XIT_BAD;
      }
      
      x = row;
      y = fltcnt;

      switch(dmat_type) {

      case NJ_PARSE_UNKNOWN:

	dmat->val[NJ_MAP(x, y, dmat->size)] = val;

	break;

      case NJ_PARSE_SYMMETRIC:
	
	if(fltcnt >= dmat->ntaxa) {
	  fprintf(stderr, "Clearcut: Incorrect number of distance values on row.\n");
	  goto XIT_BAD;
	}

	if(x < y) {
	  dmat->val[NJ_MAP(x, y, dmat->size)] = val;
	} else if(x > y) {
	  if(!NJ_FLT_EQ(val, dmat->val[NJ_MAP(y, x, dmat->size)])) {
	    fprintf(stderr, "Clearcut: Full matrices must be symmetric.\n");
	    goto XIT_BAD;
	  }
	} else {
	  if(!NJ_FLT_EQ(val, 0.0)) {
	    fprintf(stderr, "Clearcut: Values along the diagonal in a symmetric matrix must be zero.\n");
	    goto XIT_BAD;

            }
	}

	break;
	
      case NJ_PARSE_UPPER:

	if(fltcnt > dmat->ntaxa-row) {
	  fprintf(stderr, "Clearcut: Incorrect number of distance values on row.\n");
	  goto XIT_BAD;
	}
	
	dmat->val[NJ_MAP(x, x+y+1, dmat->size)] = val;
	
	break;

      case NJ_PARSE_LOWER:
	
	if(fltcnt > row-1) {
	  fprintf(stderr, "Clearcut: Incorrect number of distance values on row.\n");
	  goto XIT_BAD;
	}

	dmat->val[NJ_MAP(y, x, dmat->size)] = val;
	
	break;
	
      default:
	
	goto XIT_BAD;
	
	break;
      }

      fltcnt++;
      numvalread++;
      
      break;

    case NJ_WS_STATE:

      break;

    case NJ_EOF_STATE:

      if(first_state == 0) {
	goto XIT_BAD;
      }

      break;

    default:

      fprintf(stderr, "Clearcut: Unknown state in distance matrix parser.\n");
      break;

    }

    /* get next token from stream */
    state = NJ_get_token(fp, token);
  }


  /* 
   * At the end, if we have not read the number of values that we predicted
   * we would need, then there was a problem and we need to punt.
   */
  if(numvalread != expectedvalues) {
    fprintf(stderr, "Clearcut: Incorrect number of values in the distance matrix.\n");
    goto XIT_BAD;
  }
  
  /* special check to make sure first value read is 0.0 */
  if(dmat_type == NJ_PARSE_SYMMETRIC) {
    if(!NJ_FLT_EQ(dmat->val[NJ_MAP(0, 0, dmat->size)], 0.0)) {
      fprintf(stderr, "Clearcut: Values along the diagonal in a symmetric matrix must be zero.\n");
      goto XIT_BAD;
    }
  }

  
  /* now lets allocate space for the r and r2 columns */
  dmat->r  = (float *)calloc(dmat->ntaxa, sizeof(float));
  dmat->r2 = (float *)calloc(dmat->ntaxa, sizeof(float));
  if(!dmat->r || !dmat->r2) {
    fprintf(stderr, "Clearcut: Memory allocation error in NJ_parse_distance_matrix()\n");
    goto XIT_BAD;
  }
  
  /* track some memory addresses */
  dmat->rhandle   = dmat->r;
  dmat->r2handle  = dmat->r2;
  dmat->valhandle = dmat->val;

  /* close matrix file here */
  if(!nj_args->stdin_flag) {
    fclose(fp);
  }
  
  if(token) {
    if(token->buf) {
      free(token->buf);
    }
    free(token);
  }

  return(dmat);



  /* clean up our partial progress */
 XIT_BAD:

  if(fp) {
    fprintf(stderr, "Clearcut: Syntax error in distance matrix at offset %ld.\n", ftell(fp));
  }

  /* close matrix file here */
  if(!nj_args->stdin_flag) {
    if(fp) {
      fclose(fp);
    }
  }

  /* if we have a valid dmat (partial or complete), we need to free it */
  if(dmat) {
    NJ_free_dmat(dmat);
  }
  
  if(token) {
    if(token->buf) {
      free(token->buf);
    }
    free(token);
  }
  
  return(NULL);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq $0x0, -0x28(%rbp)
movl $0xffffffff, -0x4c(%rbp) # imm = 0xFFFFFFFF
movl $0x0, -0x54(%rbp)
movl $0x1, %edi
movl $0x48, %esi
callq 0x2130
movq %rax, -0x18(%rbp)
movl $0x1, %edi
movl $0x18, %esi
callq 0x2130
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x657a
movq -0x28(%rbp), %rax
movq $0x20, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rdi
movl $0x1, %esi
callq 0x2130
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
cmpq $0x0, -0x18(%rbp)
je 0x6592
cmpq $0x0, -0x28(%rbp)
je 0x6592
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x65af
movq 0x8a5f(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4fd5(%rip), %rsi      # 0xb578
movb $0x0, %al
callq 0x2150
jmp 0x6db7
movq -0x10(%rbp), %rax
cmpl $0x0, 0x28(%rax)
je 0x65c9
movq 0x8a18(%rip), %rax      # 0xefd8
movq (%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x6619
movq -0x10(%rbp), %rax
movq (%rax), %rdi
leaq 0x573a(%rip), %rsi      # 0xbd11
callq 0x21c0
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
jne 0x6617
movq 0x8a0a(%rip), %rax      # 0xeff8
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rdx
leaq 0x4fba(%rip), %rsi      # 0xb5b9
movb $0x0, %al
callq 0x2150
leaq 0x4fda(%rip), %rdi      # 0xb5e7
callq 0x21d0
jmp 0x6db7
jmp 0x6619
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rdx
leaq 0x51b5(%rip), %rsi      # 0xb7dd
movb $0x0, %al
callq 0x2080
movq -0x18(%rbp), %rax
cmpq $0x2, (%rax)
jge 0x6656
movq 0x89b8(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4fa6(%rip), %rsi      # 0xb5f0
movb $0x0, %al
callq 0x2150
jmp 0x6db7
movq -0x18(%rbp), %rax
movq (%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
addq $0x1, %rcx
imulq %rcx, %rax
movl $0x2, %ecx
cqto
idivq %rcx
movq %rax, %rdi
movl $0x4, %esi
callq 0x2130
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x66c5
movq 0x8949(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4ebf(%rip), %rsi      # 0xb578
movb $0x0, %al
callq 0x2150
jmp 0x6db7
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movl $0x8, %esi
callq 0x2130
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x6709
movq 0x8905(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4e7b(%rip), %rsi      # 0xb578
movb $0x0, %al
callq 0x2150
jmp 0x6db7
movl $0x67, -0x30(%rbp)
movl $0xffffffff, -0x34(%rbp) # imm = 0xFFFFFFFF
movl $0x0, -0x38(%rbp)
movl $0x0, -0x48(%rbp)
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x6e60
movl %eax, -0x2c(%rbp)
cmpl $0x67, -0x2c(%rbp)
je 0x6c50
movl -0x2c(%rbp), %eax
addl $-0x64, %eax
movl %eax, %ecx
movq %rcx, -0x60(%rbp)
subl $0x3, %eax
ja 0x6c23
movq -0x60(%rbp), %rax
leaq 0x4df9(%rip), %rcx      # 0xb558
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpl $0x0, -0x54(%rbp)
jne 0x6775
movl $0x1, -0x54(%rbp)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
cmpl $0x0, -0x34(%rbp)
jle 0x6880
cmpl $0x67, -0x30(%rbp)
jne 0x6880
movslq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
jne 0x67bd
movl $0x64, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
imulq (%rcx), %rax
movl %eax, -0x4c(%rbp)
jmp 0x687e
movslq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jne 0x6843
movl $0x66, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
subq $0x1, %rcx
imulq %rcx, %rax
movl $0x2, %ecx
cqto
idivq %rcx
movl %eax, -0x4c(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
subq $0x2, %rax
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
jl 0x6841
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movslq -0x44(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movl -0x44(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movss %xmm0, (%rax,%rcx,4)
movl -0x44(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x6809
jmp 0x687c
cmpl $0x0, -0x38(%rbp)
jne 0x6875
movl $0x65, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
subq $0x1, %rcx
imulq %rcx, %rax
movl $0x2, %ecx
cqto
idivq %rcx
movl %eax, -0x4c(%rbp)
jmp 0x687a
jmp 0x6db7
jmp 0x687c
jmp 0x687e
jmp 0x6880
movslq -0x34(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
jl 0x6892
jmp 0x6db7
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0x20c0
movq %rax, %rdi
addq $0x1, %rdi
movl $0x1, %esi
callq 0x2130
movq %rax, %rdx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x34(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x34(%rbp), %rcx
cmpq $0x0, (%rax,%rcx,8)
jne 0x68f2
movq 0x871c(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4c92(%rip), %rsi      # 0xb578
movb $0x0, %al
callq 0x2150
jmp 0x6db7
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movq -0x28(%rbp), %rax
movq (%rax), %rsi
callq 0x2070
movl $0x0, -0x38(%rbp)
jmp 0x6c3b
cmpl $0x0, -0x54(%rbp)
jne 0x6925
jmp 0x6db7
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0x20a0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x50(%rbp)
callq 0x2040
cmpl $0x0, (%rax)
je 0x6961
movq 0x86ad(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4cd0(%rip), %rsi      # 0xb625
movb $0x0, %al
callq 0x2150
jmp 0x6db7
movl -0x34(%rbp), %eax
movl %eax, -0x3c(%rbp)
movl -0x38(%rbp), %eax
movl %eax, -0x40(%rbp)
movl -0x30(%rbp), %eax
addl $-0x64, %eax
movl %eax, %ecx
movq %rcx, -0x68(%rbp)
subl $0x3, %eax
ja 0x6bfb
movq -0x68(%rbp), %rax
leaq 0x4bdb(%rip), %rcx      # 0xb568
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movss -0x50(%rbp), %xmm0
movss %xmm0, -0x74(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x70(%rbp)
movslq -0x3c(%rbp), %rdi
movslq -0x40(%rbp), %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdx
callq 0x7010
movss -0x74(%rbp), %xmm0
movq %rax, %rcx
movq -0x70(%rbp), %rax
movss %xmm0, (%rax,%rcx,4)
jmp 0x6c00
movslq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
jl 0x6a01
movq 0x860d(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4c58(%rip), %rsi      # 0xb64d
movb $0x0, %al
callq 0x2150
jmp 0x6db7
movl -0x3c(%rbp), %eax
cmpl -0x40(%rbp), %eax
jge 0x6a50
movss -0x50(%rbp), %xmm0
movss %xmm0, -0x84(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x80(%rbp)
movslq -0x3c(%rbp), %rdi
movslq -0x40(%rbp), %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdx
callq 0x7010
movss -0x84(%rbp), %xmm0
movq %rax, %rcx
movq -0x80(%rbp), %rax
movss %xmm0, (%rax,%rcx,4)
jmp 0x6afc
movl -0x3c(%rbp), %eax
cmpl -0x40(%rbp), %eax
jle 0x6ac9
movss -0x50(%rbp), %xmm0
movss %xmm0, -0x94(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x90(%rbp)
movslq -0x40(%rbp), %rdi
movslq -0x3c(%rbp), %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdx
callq 0x7010
movss -0x94(%rbp), %xmm0
movq %rax, %rcx
movq -0x90(%rbp), %rax
movss (%rax,%rcx,4), %xmm1
callq 0x7050
cmpl $0x0, %eax
jne 0x6ac7
movq 0x8547(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4bc9(%rip), %rsi      # 0xb684
movb $0x0, %al
callq 0x2150
jmp 0x6db7
jmp 0x6afa
movss -0x50(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x7050
cmpl $0x0, %eax
jne 0x6af8
movq 0x8516(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4bc4(%rip), %rsi      # 0xb6b0
movb $0x0, %al
callq 0x2150
jmp 0x6db7
jmp 0x6afa
jmp 0x6afc
jmp 0x6c00
movslq -0x38(%rbp), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movslq -0x34(%rbp), %rdx
subq %rdx, %rcx
cmpq %rcx, %rax
jle 0x6b35
movq 0x84d9(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4b24(%rip), %rsi      # 0xb64d
movb $0x0, %al
callq 0x2150
jmp 0x6db7
movss -0x50(%rbp), %xmm0
movss %xmm0, -0xa4(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0xa0(%rbp)
movslq -0x3c(%rbp), %rdi
movl -0x3c(%rbp), %eax
addl -0x40(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdx
callq 0x7010
movss -0xa4(%rbp), %xmm0
movq %rax, %rcx
movq -0xa0(%rbp), %rax
movss %xmm0, (%rax,%rcx,4)
jmp 0x6c00
movl -0x38(%rbp), %eax
movl -0x34(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jle 0x6bb1
movq 0x845d(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4aa8(%rip), %rsi      # 0xb64d
movb $0x0, %al
callq 0x2150
jmp 0x6db7
movss -0x50(%rbp), %xmm0
movss %xmm0, -0xb4(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0xb0(%rbp)
movslq -0x40(%rbp), %rdi
movslq -0x3c(%rbp), %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdx
callq 0x7010
movss -0xb4(%rbp), %xmm0
movq %rax, %rcx
movq -0xb0(%rbp), %rax
movss %xmm0, (%rax,%rcx,4)
jmp 0x6c00
jmp 0x6db7
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
jmp 0x6c3b
jmp 0x6c3b
cmpl $0x0, -0x54(%rbp)
jne 0x6c21
jmp 0x6db7
jmp 0x6c3b
movq 0x83ce(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4ac5(%rip), %rsi      # 0xb6f9
movb $0x0, %al
callq 0x2150
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x6e60
movl %eax, -0x2c(%rbp)
jmp 0x6735
movl -0x48(%rbp), %eax
cmpl -0x4c(%rbp), %eax
je 0x6c75
movq 0x8399(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4ac4(%rip), %rsi      # 0xb72d
movb $0x0, %al
callq 0x2150
jmp 0x6db7
cmpl $0x64, -0x30(%rbp)
jne 0x6cd9
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0xc0(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdx
xorl %eax, %eax
movl %eax, %esi
movq %rsi, %rdi
callq 0x7010
movq %rax, %rcx
movq -0xc0(%rbp), %rax
movss (%rax,%rcx,4), %xmm0
xorps %xmm1, %xmm1
callq 0x7050
cmpl $0x0, %eax
jne 0x6cd7
movq 0x8337(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x49e5(%rip), %rsi      # 0xb6b0
movb $0x0, %al
callq 0x2150
jmp 0x6db7
jmp 0x6cd9
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movl $0x4, %esi
callq 0x2130
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movl $0x4, %esi
callq 0x2130
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x6d27
movq -0x18(%rbp), %rax
cmpq $0x0, 0x30(%rax)
jne 0x6d41
movq 0x82ca(%rip), %rax      # 0xeff8
movq (%rax), %rdi
leaq 0x4840(%rip), %rsi      # 0xb578
movb $0x0, %al
callq 0x2150
jmp 0x6db7
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0x6d84
movq -0x20(%rbp), %rdi
callq 0x20b0
cmpq $0x0, -0x28(%rbp)
je 0x6daa
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
je 0x6da1
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0x2030
movq -0x28(%rbp), %rdi
callq 0x2030
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x6e4a
cmpq $0x0, -0x20(%rbp)
je 0x6df0
movq 0x8233(%rip), %rax      # 0xeff8
movq (%rax), %rax
movq %rax, -0xc8(%rbp)
movq -0x20(%rbp), %rdi
callq 0x2160
movq -0xc8(%rbp), %rdi
movq %rax, %rdx
leaq 0x4982(%rip), %rsi      # 0xb76b
movb $0x0, %al
callq 0x2150
movq -0x10(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0x6e0c
cmpq $0x0, -0x20(%rbp)
je 0x6e0a
movq -0x20(%rbp), %rdi
callq 0x20b0
jmp 0x6e0c
cmpq $0x0, -0x18(%rbp)
je 0x6e1c
movq -0x18(%rbp), %rdi
callq 0x3370
cmpq $0x0, -0x28(%rbp)
je 0x6e42
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
je 0x6e39
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0x2030
movq -0x28(%rbp), %rdi
callq 0x2030
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0xd0, %rsp
popq %rbp
retq
nopw (%rax,%rax)