// File: /workspace/github_c_makefile_star2_O2/genometools[P]genometools/src/extended/condenseq_creator.c
// Function: gt_condenseq_creator_create
int gt_condenseq_creator_create(GtCondenseqCreator *condenseq_creator,
                                GtStr *basename,
                                GtEncseq *encseq,
                                GtLogger *logger,
                                GtLogger *kdb_logger,
                                GtError *err)
{
  int had_err = 0;
  GtCondenseq *ces;
  FILE *fp = NULL;
  GtUword buffersize;
  GtTimer *timer = NULL;
  gt_assert(condenseq_creator != NULL);
  gt_assert(encseq != NULL);

  gt_logger_log(logger, "number of kmer-pos cutoff setting:");
  if (condenseq_creator->cutoff_value == GT_UNDEF_UWORD)
    gt_logger_log(logger, "mean/" GT_WU, condenseq_creator->mean_fraction);
  else if (condenseq_creator->cutoff_value == 0)
    gt_logger_log(logger, "disabled");
  else
    gt_logger_log(logger, GT_WU, condenseq_creator->cutoff_value);

  gt_logger_log(logger, "xdrop extension settings:");
  if (condenseq_creator->use_diagonals) {
    if (condenseq_creator->use_full_diags)
      gt_logger_log(logger, "use full diagonals");
    else
      gt_logger_log(logger, "use sparse diagonals");
  }
  else if (condenseq_creator->extend_all_kmers)
    gt_logger_log(logger, "brute force xdrop extension");
  else
    gt_logger_log(logger, "filtered xdrop extension");

  if (gt_showtime_enabled()) {
    timer = gt_timer_new_with_progress_description("create condenseq");
    gt_timer_start(timer);
  }
  condenseq_creator->input_es = encseq;
  ces = gt_condenseq_new(encseq, logger);
  /* TODO DW: check if these values make sense. and if after init the buffer is
     always flushed! -> should be -> init_kmer_db*/
  buffersize = condenseq_creator->initsize * 100;
  if (buffersize > (GtUword) 100000)
    buffersize = (GtUword) 100000;
  gt_log_log("buffersize for kmer-db: " GT_WU, buffersize);
  if (gt_showtime_enabled())
    gt_timer_show_progress(timer, "create kmer db", stderr);
  condenseq_creator->kmer_db =
    gt_kmer_database_new(gt_alphabet_num_of_chars(ces->alphabet),
                         condenseq_creator->kmersize,
                         buffersize,
                         encseq);
  if (condenseq_creator->use_cutoff) {
    if (condenseq_creator->mean_cutoff)
      gt_kmer_database_use_mean_cutoff(condenseq_creator->kmer_db,
                                       condenseq_creator->mean_fraction,
                                       GT_CES_C_MIN_POS_NUM_CUTOFF);
    else
      gt_kmer_database_set_cutoff(condenseq_creator->kmer_db,
                                  condenseq_creator->cutoff_value);
    if (condenseq_creator->prune_kmer_db)
      gt_kmer_database_set_prune(condenseq_creator->kmer_db);
  }
  condenseq_creator->ces = ces;
  if (condenseq_creator->use_diagonals || condenseq_creator->use_full_diags) {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "create diagonals", stderr);
    condenseq_creator->diagonals =
      gt_malloc(sizeof (*condenseq_creator->diagonals));
    if (condenseq_creator->use_full_diags) {
      condenseq_creator->diagonals->full =
        ces_c_diagonals_full_new((size_t) gt_encseq_total_length(encseq));
    }
    else
      condenseq_creator->diagonals->full = NULL;
    if (condenseq_creator->use_diagonals) {
      condenseq_creator->diagonals->sparse =
        ces_c_sparse_diags_new((size_t) condenseq_creator->initsize);
    }
    else
      condenseq_creator->diagonals->sparse = NULL;
  }
  else
    condenseq_creator->diagonals = NULL;

  ces_c_xdrops = 0;
  had_err = ces_c_analyse(condenseq_creator, timer, err);

  if (!had_err) {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, alphabet", stderr);
    gt_log_log(GT_WU " kmer positions in final kmer_db",
               gt_kmer_database_get_kmer_count(condenseq_creator->kmer_db));
    gt_log_log(GT_WU " xdrop calls.", ces_c_xdrops);
    gt_log_log(GT_WU " uniques", condenseq_creator->ces->uds_nelems);
    gt_log_log(GT_WU " links", condenseq_creator->ces->lds_nelems);
    gt_log_log(GT_WU " bytes in final kmer_db",
               gt_kmer_database_get_used_size(condenseq_creator->kmer_db));
    gt_log_log(GT_WU " bytes allocated for kmer_db",
               gt_kmer_database_get_byte_size(condenseq_creator->kmer_db));

    if (gt_log_enabled() &&
        (condenseq_creator->use_diagonals ||
         condenseq_creator->use_full_diags)) {
#ifdef GT_CONDENSEQ_CREATOR_DIST_DEBUG
      GtFile *out = gt_file_new_from_fileptr(gt_log_fp());
      gt_log_log("dist of number added:");
      gt_disc_distri_show(condenseq_creator->add, out);
      gt_log_log("dist of number replaced:");
      gt_disc_distri_show(condenseq_creator->replace, out);
      gt_log_log("dist of number deleted:");
      gt_disc_distri_show(condenseq_creator->delete, out);
      gt_file_delete_without_handle(out);
#endif
      gt_log_log("min_d: " GT_WU ", max_d: " GT_WU " (# diagonals: " GT_WU ") ",
                 condenseq_creator->min_d,
                 condenseq_creator->max_d,
                 condenseq_creator->max_d - condenseq_creator->min_d + 1);
      if (condenseq_creator->diagonals != NULL) {
        if (condenseq_creator->diagonals->sparse != NULL)
          gt_log_log("Sparse diagonals allocated: " GT_WU ", max used: " GT_WU,
                     condenseq_creator->diagonals->sparse->allocated,
                     condenseq_creator->diagonals->sparse->max);
        if (condenseq_creator->diagonals->full != NULL)
          gt_log_log("Full diagonals allocated: " GT_WU,
                     condenseq_creator->diagonals->full->allocated);
      }
    }
    had_err = gt_alphabet_to_file(ces->alphabet,
                                  gt_str_get(basename), err);
  }
  if (!had_err) {
    fp = gt_fa_fopen_with_suffix(gt_str_get(basename),
                                 GT_CONDENSEQ_FILE_SUFFIX,
                                 "w", err);
    if (fp == NULL)
      had_err = -1;
  }
  if (!had_err) {
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, condenseq", stderr);
    had_err = gt_condenseq_write(condenseq_creator->ces, fp, err);
    gt_fa_xfclose(fp);
    fp = NULL;
  }
  if (!had_err) {
    fp = gt_fa_fopen_with_suffix(gt_str_get(basename), ".fas", "w", err);
    if (fp == NULL)
      had_err = -1;
  }
  if (!had_err) {
    GtEncseqEncoder *es_enc;
    GtStrArray *toencode;
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, unique fasta", stderr);
    ces_c_write_unique_fasta(condenseq_creator, fp);
    gt_fa_xfclose(fp);
    /*encoding of unique_es*/
    if (gt_showtime_enabled())
      gt_timer_show_progress(timer, "write data, unique encseq", stderr);
    es_enc = gt_encseq_encoder_new();
    gt_encseq_encoder_disable_description_support(es_enc);
    gt_encseq_encoder_do_not_create_md5_tab(es_enc);
    toencode = gt_str_array_new();
    gt_str_array_add(toencode, basename);
    gt_str_append_cstr(gt_str_array_get_str(toencode, 0), ".fas");
    had_err = gt_encseq_encoder_encode(es_enc,
                                       toencode,
                                       gt_str_get(basename),
                                       err);
    gt_encseq_encoder_delete(es_enc);
    gt_str_array_delete(toencode);
  }
  condenseq_creator->input_es = NULL;
  gt_condenseq_delete(ces);
  condenseq_creator->ces = NULL;
  ces_c_diags_delete(condenseq_creator->diagonals);
  condenseq_creator->diagonals = NULL;
  gt_kmer_database_print(condenseq_creator->kmer_db,
                         kdb_logger,
                         gt_logger_enabled(logger));
  gt_kmer_database_delete(condenseq_creator->kmer_db);
  condenseq_creator->kmer_db = NULL;
  if (gt_showtime_enabled())
    gt_timer_show_progress_final(timer, stderr);
  gt_timer_delete(timer);
  return had_err;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq %r9, 0x30(%rsp)
movq %rsi, 0x78(%rsp)
testq %rdi, %rdi
je 0xc66d7
movq %rdx, %r14
testq %rdx, %rdx
je 0xc6705
movq %r8, %r15
movq %rdi, %rbx
leaq 0x2546e0(%rip), %rsi    # 0x319c32
movq %rcx, 0x40(%rsp)
movq %rcx, %rdi
xorl %eax, %eax
callq 0x92e71
movq 0x108(%rbx), %rdx
testq %rdx, %rdx
je 0xc5583
cmpq $-0x1, %rdx
jne 0xc559b
movq 0x118(%rbx), %rdx
leaq 0x2546d4(%rip), %rsi    # 0x319c55
jmp 0xc55a2
leaq 0x232c36(%rip), %rsi    # 0x2f81c0
movq 0x40(%rsp), %r12
movq %r12, %rdi
xorl %eax, %eax
callq 0x92e71
jmp 0xc55b1
leaq 0x296e6c(%rip), %rsi    # 0x35c40e
movq 0x40(%rsp), %r12
movq %r12, %rdi
xorl %eax, %eax
callq 0x92e71
leaq 0x2546a6(%rip), %rsi    # 0x319c5e
movq %r12, %rdi
xorl %eax, %eax
callq 0x92e71
cmpb $0x1, 0x144(%rbx)
jne 0xc55e2
leaq 0x2546a6(%rip), %rax    # 0x319c78
leaq 0x2546b2(%rip), %rsi    # 0x319c8b
cmpb $0x0, 0x145(%rbx)
jmp 0xc55f7
leaq 0x2546b7(%rip), %rax    # 0x319ca0
leaq 0x2546cc(%rip), %rsi    # 0x319cbc
cmpb $0x0, 0x146(%rbx)
cmovneq %rax, %rsi
movq $0x0, 0x20(%rsp)
movq 0x40(%rsp), %rdi
xorl %eax, %eax
callq 0x92e71
callq 0xaaf34
testb %al, %al
movq %r15, 0x88(%rsp)
je 0xc563a
leaq 0x2546ad(%rip), %rdi    # 0x319cd5
callq 0xaf4a5
movq %rax, 0x20(%rsp)
movq %rax, %rdi
callq 0xaf4d6
movq %r14, (%rbx)
movq %r14, %rdi
movq 0x40(%rsp), %rsi
callq 0xc1339
movq %rax, 0x48(%rsp)
imulq $0x64, 0xe8(%rbx), %rax
movl $0x186a0, %r15d         # imm = 0x186A0
cmpq %r15, %rax
cmovbq %rax, %r15
leaq 0x25467b(%rip), %rdi    # 0x319ce6
movq %r15, %rsi
xorl %eax, %eax
callq 0x92a82
callq 0xaaf34
testb %al, %al
je 0xc5699
movq 0x3728e3(%rip), %rax    # 0x437f68
movq (%rax), %rdx
leaq 0x254673(%rip), %rsi    # 0x319d02
movq 0x20(%rsp), %rdi
callq 0xaf86f
movq 0x48(%rsp), %rax
movq (%rax), %rdi
callq 0x56c8e
movl 0x138(%rbx), %esi
movl %eax, %edi
movq %r15, %rdx
movq %r14, %rcx
callq 0xf3f4c
movq %rax, 0x8(%rbx)
cmpb $0x1, 0x147(%rbx)
jne 0xc5704
cmpb $0x1, 0x148(%rbx)
jne 0xc56e3
movq 0x118(%rbx), %rsi
pushq $0x1e
popq %rdx
movq %rax, %rdi
callq 0xf52e4
jmp 0xc56f2
movq 0x108(%rbx), %rsi
movq %rax, %rdi
callq 0xf5226
cmpb $0x1, 0x149(%rbx)
jne 0xc5704
movq 0x8(%rbx), %rdi
callq 0xf5398
movq 0x48(%rsp), %rax
movq %rax, 0x28(%rbx)
cmpb $0x0, 0x144(%rbx)
jne 0xc5723
cmpb $0x1, 0x145(%rbx)
jne 0xc585c
callq 0xaaf34
testb %al, %al
je 0xc5747
movq 0x372835(%rip), %rax    # 0x437f68
movq (%rax), %rdx
leaq 0x2545d4(%rip), %rsi    # 0x319d11
movq 0x20(%rsp), %rdi
callq 0xaf86f
leaq 0x254286(%rip), %rsi    # 0x3199d4
pushq $0x10
popq %rdi
movl $0x6af, %edx            # imm = 0x6AF
callq 0x93160
movq %rax, 0x30(%rbx)
cmpb $0x1, 0x145(%rbx)
jne 0xc57b2
movq %r14, %rdi
callq 0x7055e
movq %rax, %r14
leaq 0x25425a(%rip), %r12    # 0x3199d4
pushq $0x18
popq %rdi
pushq $0x5d
popq %rdx
movq %r12, %rsi
callq 0x93160
movq %rax, %r15
leaq (,%r14,8), %rdi
pushq $0x5e
popq %rdx
movq %r12, %rsi
callq 0x93160
movq %rax, (%r15)
xorl %ecx, %ecx
cmpq %rcx, %r14
je 0xc57b8
orq $-0x1, (%rax,%rcx,8)
incq %rcx
jmp 0xc57a3
andq $0x0, (%rax)
jmp 0xc57c7
movq %r14, 0x8(%r15)
movq %r14, 0x10(%r15)
movq 0x30(%rbx), %rax
movq %r15, (%rax)
cmpb $0x1, 0x144(%rbx)
jne 0xc5855
movq 0xe8(%rbx), %r13
leaq 0x2541f2(%rip), %r15    # 0x3199d4
pushq $0x50
popq %rdi
pushq $0x75
popq %rdx
movq %r15, %rsi
callq 0x93160
movq %rax, %r14
movq %r13, %r12
shlq $0x4, %r12
pushq $0x76
popq %rdx
movq %r12, %rdi
movq %r15, %rsi
callq 0x93160
movq %rax, 0x8(%r14)
movq %r13, 0x30(%r14)
andq $0x0, 0x48(%r14)
pushq $0x79
popq %rdx
movq %r12, %rdi
movq %r15, %rsi
callq 0x93160
movq %rax, (%r14)
movq %r13, 0x28(%r14)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%r14)
movups %xmm0, 0x38(%r14)
leaq 0x1272(%rip), %rdi      # 0xc6ab0
xorl %esi, %esi
xorl %edx, %edx
callq 0x106594
movq %rax, 0x10(%r14)
movq 0x30(%rbx), %rax
movq %r14, 0x8(%rax)
jmp 0xc5861
andq $0x0, 0x8(%rax)
jmp 0xc5861
andq $0x0, 0x30(%rbx)
andq $0x0, 0x377e2f(%rip)    # 0x43d698
movl 0x138(%rbx), %edx
movq (%rbx), %rdi
movq 0xf0(%rbx), %rcx
xorl %esi, %esi
callq 0x19f20f
movq %rax, 0x18(%rbx)
callq 0xaaf34
testb %al, %al
je 0xc58a8
movq 0x3726d4(%rip), %rax    # 0x437f68
movq (%rax), %rdx
leaq 0x254ade(%rip), %rsi    # 0x31a37c
movq 0x20(%rsp), %rdi
callq 0xaf86f
movl 0x138(%rbx), %eax
movq %rax, 0x38(%rsp)
cmpb $0x1, 0x147(%rbx)
jne 0xc58ce
cmpb $0x1, 0x149(%rbx)
jne 0xc58ce
movq 0x8(%rbx), %rdi
callq 0xf5410
movq %rbx, %rdi
callq 0xc6b03
pushq $0x1
popq %rbp
testl %eax, %eax
jne 0xc58e7
movq %rbx, %rdi
callq 0xc6b79
movl %eax, %ebp
movq 0x38(%rsp), %rax
decq %rax
movq %rax, 0x28(%rsp)
movb $0x1, %r14b
testb $0x1, %r14b
je 0xc5b31
cmpl $0x1, %ebp
je 0xc5b31
movq 0x8(%rbx), %rdi
movq 0xe8(%rbx), %r14
callq 0xf5453
cmpq %rax, %r14
jbe 0xc5b71
movq 0x8(%rbx), %rdi
movq 0xe8(%rbx), %r12
callq 0xf5453
subq %rax, %r12
movq 0x8(%rbx), %rdi
movq 0xd0(%rbx), %rax
movq 0xd8(%rbx), %rcx
addq 0x38(%rsp), %rcx
negq %rcx
leaq (%rax,%rcx), %r15
incq %r15
movq 0xf0(%rbx), %r14
movq 0xf8(%rbx), %r13
callq 0xf5453
leaq 0x254b56(%rip), %rdi    # 0x31a4c7
movq %r14, %rsi
movq %r13, %rdx
movq %r12, %rcx
movq %rax, %r8
xorl %eax, %eax
callq 0x92a82
movq 0x100(%rbx), %rax
cmpq %rax, %r12
cmovbeq %rax, %r12
movq %r15, %rcx
subq %r12, %rcx
jae 0xc59d4
leaq 0x254ba1(%rip), %rdi    # 0x31a542
movq %r15, %rsi
xorl %eax, %eax
callq 0x92a82
movq %r15, %rax
shrq $0x20, %rax
je 0xc5a67
xorl %r14d, %r14d
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq 0x30(%rsp), %rdi
leaq 0x2546ee(%rip), %rsi    # 0x31a0ba
movq %r15, %rdx
jmp 0xc5a5b
cmpq %rax, %rcx
jae 0xc5a1e
movq 0xd0(%rbx), %rdx
movq %rdx, %rax
shrq $0x20, %rax
je 0xc5a7c
xorl %r14d, %r14d
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq 0x30(%rsp), %rdi
leaq 0x2546b9(%rip), %rsi    # 0x31a0ba
xorl %eax, %eax
callq 0x89dbb
leaq 0x254af4(%rip), %rdi    # 0x31a503
movq %r15, %rsi
xorl %eax, %eax
callq 0x92a82
jmp 0xc58f7
addq 0x28(%rsp), %r12
leaq 0x254afd(%rip), %rdi    # 0x31a527
movq %r15, %rsi
movq %r12, %rdx
xorl %eax, %eax
callq 0x92a82
movq %r12, %rax
shrq $0x20, %rax
je 0xc5adb
xorl %r14d, %r14d
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq 0x30(%rsp), %rdi
leaq 0x254662(%rip), %rsi    # 0x31a0ba
movq %r12, %rdx
xorl %eax, %eax
callq 0x89dbb
jmp 0xc58f7
movq 0x28(%rbx), %rdi
movq 0xf0(%rbx), %rsi
addq 0x28(%rsp), %r15
movl %r15d, %edx
jmp 0xc5aa1
leaq 0x254a80(%rip), %rdi    # 0x31a503
movq %r15, %rsi
xorl %eax, %eax
callq 0x92a82
movq 0x28(%rbx), %rdi
movq 0xf0(%rbx), %rsi
movq 0x28(%rsp), %rax
leal (%r15,%rax), %edx
callq 0xc17d8
movq 0xf0(%rbx), %rsi
addq %rsi, %r15
movq %rbx, %rdi
movq %r15, %rdx
callq 0xc6bab
incq 0xf8(%rbx)
movq %rbx, %rdi
callq 0xc6b03
pushq $0x1
popq %rbp
testl %eax, %eax
jne 0xc5b23
movq %rbx, %rdi
callq 0xc6b79
jmp 0xc5b21
movq 0x28(%rbx), %rdi
movq 0xf0(%rbx), %rsi
movl %r12d, %edx
callq 0xc17d8
movq 0xf0(%rbx), %rsi
leaq (%rsi,%r12), %rdx
movq %rbx, %rdi
callq 0xc6bab
movq 0xf0(%rbx), %rsi
addq %r12, %rsi
movq %rsi, 0xf0(%rbx)
addq %r12, 0xd8(%rbx)
movq %rbx, %rdi
callq 0xc6c16
movl %eax, %ebp
movq 0x8(%rbx), %rdi
callq 0xf4282
jmp 0xc58f4
cmpl $0x1, %ebp
sete %al
andb %r14b, %al
cmpb $0x1, %al
jne 0xc5b6b
movq 0x8(%rbx), %rdi
callq 0xf5453
movq 0xf0(%rbx), %rcx
leaq 0x254a03(%rip), %rsi    # 0x31a558
xorl %ebp, %ebp
movq 0x30(%rsp), %r14
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x89dbb
jmp 0xc5bcd
testb $0x1, %r14b
je 0xc5bc6
movq 0x8(%rbx), %rdi
movq 0xe8(%rbx), %r14
callq 0xf5453
cmpq %rax, %r14
jbe 0xc5bac
movq 0x8(%rbx), %rdi
callq 0xf5453
leaq 0x254a1f(%rip), %rsi    # 0x31a5b5
xorl %ebp, %ebp
movq 0x30(%rsp), %r14
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x89dbb
jmp 0xc5bcd
movq 0xf0(%rbx), %rsi
leaq 0x254a53(%rip), %rdi    # 0x31a60d
xorl %eax, %eax
callq 0x92a82
movb $0x1, %bpl
jmp 0xc5bc8
xorl %ebp, %ebp
movq 0x30(%rsp), %r14
cmpb $0x1, 0x147(%rbx)
jne 0xc5be8
cmpb $0x1, 0x149(%rbx)
jne 0xc5be8
movq 0x8(%rbx), %rdi
callq 0xf5398
testb %bpl, %bpl
je 0xc6154
movq 0x18(%rbx), %rdi
callq 0x19f955
xorl %r12d, %r12d
testb %al, %al
jne 0xc6158
movq 0x8(%rbx), %rdi
movq 0x28(%rbx), %rax
movq 0x78(%rax), %rax
pushq $0x64
popq %rcx
xorl %edx, %edx
divq %rcx
movq %rax, %r15
callq 0xf5453
leaq 0x25476f(%rip), %rdi    # 0x31a397
movq %rax, %rsi
xorl %eax, %eax
callq 0x92a82
movq 0x8(%rbx), %rdi
callq 0xf58aa
leaq 0x25477b(%rip), %rdi    # 0x31a3bd
movq %rax, %rsi
xorl %eax, %eax
callq 0x92a82
movq 0x8(%rbx), %rdi
callq 0xf5854
leaq 0x25477f(%rip), %rdi    # 0x31a3db
movq %rax, %rsi
xorl %eax, %eax
callq 0x92a82
movq 0xf0(%rbx), %rax
xorl %edx, %edx
movq %r15, 0x80(%rsp)
divq %r15
movq %rax, 0x28(%rsp)
callq 0xaaf34
testb %al, %al
je 0xc5cae
movq 0x3722d9(%rip), %rax    # 0x437f68
movq (%rax), %rsi
movq 0x28(%rsp), %rax
leaq 0x1(%rax), %rcx
leaq 0x254765(%rip), %rdx    # 0x31a407
movq 0x20(%rsp), %rdi
xorl %eax, %eax
callq 0xaf886
pushq $0x3
popq %r13
xorl %r15d, %r15d
movl $0x0, 0x38(%rsp)
testl %r15d, %r15d
jne 0xc6123
movq 0x18(%rbx), %rdi
callq 0x19f495
testq %rax, %rax
je 0xc6123
cmpb $0x0, (%rax)
je 0xc5d1a
movl 0x138(%rbx), %eax
addq 0xd8(%rbx), %rax
cmpq 0xd0(%rbx), %rax
jbe 0xc6010
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc6c87
cmpl $0x3, %eax
je 0xc6015
movl %eax, %r15d
andl $0x0, 0xc4(%rbx)
jmp 0xc5ff2
movq 0x8(%rbx), %rsi
movq 0x8(%rax), %rdx
leaq 0x90(%rsp), %rdi
callq 0xf50ed
movl 0xc0(%rbx), %eax
testq %rax, %rax
jne 0xc5d50
movl 0xc4(%rbx), %ecx
testl %ecx, %ecx
je 0xc5d50
cmpl 0x13c(%rbx), %ecx
jne 0xc669f
movq 0xb0(%rbx), %rcx
imulq $0x18, %rax, %rax
movups 0x90(%rsp), %xmm0
movq 0xa0(%rsp), %rdx
movq %rdx, 0x10(%rcx,%rax)
movups %xmm0, (%rcx,%rax)
movl 0xc0(%rbx), %ecx
movl 0xc4(%rbx), %eax
incl %ecx
movl 0x13c(%rbx), %edx
cmpl %edx, %ecx
movl $0x0, %esi
cmovel %esi, %ecx
movl %ecx, 0xc0(%rbx)
cmpl %edx, %eax
jae 0xc5da4
incl %eax
movl %eax, 0xc4(%rbx)
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
movq %rbx, %rdi
leaq 0x50(%rsp), %rsi
movq %r14, %rdx
callq *0x50(%rbx)
movl %r13d, %r15d
testl %eax, %eax
jne 0xc5ff2
movl 0x60(%rsp), %eax
xorl %r15d, %r15d
cmpq %rax, 0x100(%rbx)
ja 0xc5ff2
movq 0x68(%rbx), %r15
movq 0x70(%rbx), %rdi
movq 0x98(%rbx), %r12
movq 0xa0(%rbx), %rsi
cmpq $0x0, (%rsi)
jne 0xc5e05
cmpq $0x0, 0x8(%rsi)
je 0xc5eb0
callq 0x1b80c8
movq %rax, %r14
cmpq $0x0, (%r12)
je 0xc5e37
movq %r15, %rdi
movq %r12, %rsi
callq 0x1b80c8
movq %rax, %r15
movq %r14, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x101d7f
movq %r15, %rdi
callq 0x101766
movq 0xc8(%rbx), %rsi
movq 0x58(%rsp), %rcx
movq %rcx, %r12
subq %rsi, %r12
jbe 0xc5edf
movl 0x138(%rbx), %eax
cmpq %rax, %r12
jbe 0xc5e89
movq %r12, %rax
shrq $0x20, %rax
je 0xc5eba
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq 0x30(%rsp), %r14
movq %r14, %rdi
leaq 0x254243(%rip), %rsi    # 0x31a0ba
movq %r12, %rdx
xorl %eax, %eax
callq 0x89dbb
movl %r13d, %r15d
jmp 0xc5ff2
movq %r12, %r15
subq $0x1, %r15
jb 0xc5e9c
movq %r14, %rdi
callq 0x101961
jmp 0xc5e8c
movq 0x58(%rsp), %rcx
subq %r12, %rcx
movq %rcx, 0x58(%rsp)
addl %r12d, 0x60(%rsp)
jmp 0xc5edf
callq 0x101648
jmp 0xc5e0a
movq 0x28(%rbx), %rdi
movl %r12d, %edx
callq 0xc17d8
movq 0xc8(%rbx), %rsi
movq 0x58(%rsp), %rdx
movq %rbx, %rdi
callq 0xc6bab
movq 0x58(%rsp), %rcx
movq 0xf0(%rbx), %rax
movl 0x60(%rsp), %r12d
addq %rcx, %r12
cmpq %r12, %rax
jae 0xc5f10
movq %rbx, %rdi
movq %r12, %rsi
callq 0xc6c16
movl %eax, %ebp
movq 0xc8(%rbx), %r12
movq 0xf0(%rbx), %rax
jmp 0xc5f21
movq %r12, 0xc8(%rbx)
andq $0x0, 0xc0(%rbx)
xorl %ebp, %ebp
addq 0xd0(%rbx), %r12
addq 0xd8(%rbx), %rax
subq %rax, %r12
je 0xc5f8c
movl 0x138(%rbx), %eax
cmpq %rax, %r12
ja 0xc5f8f
callq 0x101648
movq %rax, %r15
movq %r12, %rbp
movq %r15, %rdi
subq $0x1, %rbp
jb 0xc5f5a
callq 0x101961
jmp 0xc5f4a
movq %r14, %rsi
pushq $0x1
popq %rdx
callq 0x101d7f
movq %r14, %rdi
callq 0x101766
addl 0x60(%rsp), %r12d
movl %r12d, 0x60(%rsp)
addq 0x58(%rsp), %r12
movq %rbx, %rdi
movq %r12, %rsi
callq 0xc6c16
movl %eax, %ebp
movq %r15, %r14
xorl %r12d, %r12d
movq (%rbx), %rdi
movq 0x58(%rsp), %rdx
movq %r14, %rsi
xorl %ecx, %ecx
callq 0xce51d
movq %rax, 0x50(%rsp)
movq %r14, %rdi
callq 0x101766
movq 0x28(%rbx), %rdi
movaps 0x50(%rsp), %xmm0
movaps 0x60(%rsp), %xmm1
movups %xmm1, 0x10(%rsp)
movups %xmm0, (%rsp)
callq 0xc198a
pushq $0x1
popq %r15
cmpl $0x1, %ebp
movq 0x30(%rsp), %r14
je 0xc5ff2
movl %ebp, %r15d
cmpq 0x100(%rbx), %r12
jae 0xc5ff2
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc6c87
movl %eax, %r15d
cmpl $0x2, %r15d
jne 0xc6018
movq 0x18(%rbx), %rdi
callq 0x19f495
testq %rax, %rax
jne 0xc5cd8
pushq $0x2
popq %r15
jmp 0xc6018
xorl %r15d, %r15d
jmp 0xc6018
movl %r13d, %r15d
movl %r15d, %eax
xorl $0x3, %eax
movl 0x38(%rsp), %ecx
orl %ecx, %eax
pushq $-0x1
popq %rax
cmovel %eax, %ecx
movl %ecx, 0x38(%rsp)
testl %ecx, %ecx
jne 0xc5cbd
movq 0xf0(%rbx), %rax
incq %rax
movq %rax, 0xf0(%rbx)
incq 0xd8(%rbx)
xorl %edx, %edx
divq 0x80(%rsp)
cmpq %rax, 0x28(%rsp)
jae 0xc5cbd
movq %rax, %r12
leaq 0x2543ce(%rip), %rdi    # 0x31a43b
movq %rax, %rsi
xorl %eax, %eax
callq 0x92a82
movq 0x8(%rbx), %rdi
callq 0xf5453
leaq 0x2543c5(%rip), %rdi    # 0x31a44c
movq %rax, %rsi
xorl %eax, %eax
callq 0x92a82
movq 0x377600(%rip), %rsi    # 0x43d698
leaq 0x2543d4(%rip), %rdi    # 0x31a473
xorl %eax, %eax
callq 0x92a82
movq 0x28(%rbx), %rax
movq 0x98(%rax), %rsi
leaq 0x253cb4(%rip), %rdi    # 0x319d6c
xorl %eax, %eax
callq 0x92a82
movq 0x28(%rbx), %rax
movq 0x70(%rax), %rsi
leaq 0x253caa(%rip), %rdi    # 0x319d78
xorl %eax, %eax
callq 0x92a82
callq 0xaaf34
movq %r12, 0x28(%rsp)
testb %al, %al
je 0xc5cbd
movq %r12, %rcx
incq %rcx
movq %r12, 0x28(%rsp)
cmpq $0x64, %rcx
ja 0xc5cbd
movq 0x371e65(%rip), %rax    # 0x437f68
movq (%rax), %rsi
movq 0x20(%rsp), %rdi
leaq 0x2542f5(%rip), %rdx    # 0x31a407
xorl %eax, %eax
callq 0xaf886
movq %r12, 0x28(%rsp)
jmp 0xc5cbd
movl %r15d, %eax
xorl $0x3, %eax
movl 0x38(%rsp), %r12d
orl %r12d, %eax
pushq $-0x1
popq %rax
cmovel %eax, %r12d
cmpl $0x1, %r15d
je 0xc6158
testl %r12d, %r12d
jne 0xc6158
leaq 0x254344(%rip), %rsi    # 0x31a48e
movq %r14, %rdi
xorl %eax, %eax
callq 0x89dbb
pushq $-0x1
popq %r12
movq 0x18(%rbx), %rdi
callq 0x19f83e
movq 0x10(%rbx), %rdi
callq 0x19f83e
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rbx)
testl %r12d, %r12d
jne 0xc62e9
callq 0xaaf34
testb %al, %al
je 0xc619e
movq 0x371dde(%rip), %rax    # 0x437f68
movq (%rax), %rdx
leaq 0x253b8e(%rip), %rsi    # 0x319d22
movq 0x20(%rsp), %rdi
callq 0xaf86f
movq 0x8(%rbx), %rdi
callq 0xf5453
leaq 0x253b89(%rip), %rdi    # 0x319d37
movq %rax, %rsi
xorl %eax, %eax
callq 0x92a82
movq 0x3774d9(%rip), %rsi    # 0x43d698
leaq 0x253b95(%rip), %rdi    # 0x319d5b
xorl %eax, %eax
callq 0x92a82
movq 0x28(%rbx), %rax
movq 0x98(%rax), %rsi
leaq 0x253b8d(%rip), %rdi    # 0x319d6c
xorl %eax, %eax
callq 0x92a82
movq 0x28(%rbx), %rax
movq 0x70(%rax), %rsi
leaq 0x253b83(%rip), %rdi    # 0x319d78
xorl %eax, %eax
callq 0x92a82
movq 0x8(%rbx), %rdi
callq 0xf58aa
leaq 0x253b76(%rip), %rdi    # 0x319d82
movq %rax, %rsi
xorl %eax, %eax
callq 0x92a82
movq 0x8(%rbx), %rdi
callq 0xf5854
leaq 0x253b77(%rip), %rdi    # 0x319d9d
movq %rax, %rsi
xorl %eax, %eax
callq 0x92a82
callq 0x92a76
testb %al, %al
movq 0x78(%rsp), %r15
je 0xc62bb
cmpb $0x0, 0x144(%rbx)
jne 0xc6250
cmpb $0x1, 0x145(%rbx)
jne 0xc62bb
movq 0x120(%rbx), %rsi
movq 0x128(%rbx), %rdx
movq %rdx, %rcx
subq %rsi, %rcx
incq %rcx
leaq 0x253b4f(%rip), %rdi    # 0x319dbd
xorl %eax, %eax
callq 0x92a82
movq 0x30(%rbx), %rax
testq %rax, %rax
je 0xc62bb
movq 0x8(%rax), %rcx
testq %rcx, %rcx
je 0xc62a1
movq 0x30(%rcx), %rsi
movq 0x40(%rcx), %rdx
leaq 0x253b52(%rip), %rdi    # 0x319de8
xorl %eax, %eax
callq 0x92a82
movq 0x30(%rbx), %rax
movq (%rax), %rax
testq %rax, %rax
je 0xc62bb
movq 0x8(%rax), %rsi
leaq 0x253b63(%rip), %rdi    # 0x319e17
xorl %eax, %eax
callq 0x92a82
movq 0x48(%rsp), %rax
movq (%rax), %r14
movq %r15, %rdi
callq 0xad1fa
movq %r14, %rdi
movq %rax, %rsi
movq 0x30(%rsp), %r14
movq %r14, %rdx
callq 0x57e06
testl %eax, %eax
je 0xc641c
movl %eax, %r12d
andq $0x0, (%rbx)
movq 0x48(%rsp), %rdi
callq 0xc1b0c
andq $0x0, 0x28(%rbx)
movq 0x30(%rbx), %r15
testq %r15, %r15
je 0xc63ac
movq (%r15), %rax
testq %rax, %rax
je 0xc6338
movq (%rax), %rdi
leaq 0x2536b9(%rip), %r14    # 0x3199d4
movq %r14, %rsi
movl $0x87, %edx
callq 0x936f9
movq (%r15), %rdi
movq %r14, %rsi
movl $0x88, %edx
callq 0x936f9
movq 0x8(%r15), %rax
testq %rax, %rax
je 0xc6398
movq 0x8(%rax), %rdi
leaq 0x253688(%rip), %r14    # 0x3199d4
movq %r14, %rsi
movl $0x8b, %edx
callq 0x936f9
movq 0x8(%r15), %rax
movq 0x10(%rax), %rdi
callq 0x10660a
movq 0x8(%r15), %rax
movq 0x18(%rax), %rdi
callq 0x107da8
movq 0x8(%r15), %rax
movq (%rax), %rdi
movq %r14, %rsi
movl $0x8e, %edx
callq 0x936f9
movq 0x8(%r15), %rdi
movq %r14, %rsi
movl $0x8f, %edx
callq 0x936f9
leaq 0x253635(%rip), %rsi    # 0x3199d4
movq %r15, %rdi
movl $0x91, %edx
callq 0x936f9
andq $0x0, 0x30(%rbx)
movq 0x8(%rbx), %r14
movq 0x40(%rsp), %rdi
callq 0x92c18
movzbl %al, %edx
movq %r14, %rdi
movq 0x88(%rsp), %rsi
callq 0xf5900
movq 0x8(%rbx), %rdi
callq 0xf414c
andq $0x0, 0x8(%rbx)
callq 0xaaf34
testb %al, %al
je 0xc63fd
movq 0x371b78(%rip), %rax    # 0x437f68
movq (%rax), %rsi
movq 0x20(%rsp), %rdi
callq 0xafb49
movq 0x20(%rsp), %rdi
callq 0xafc5b
movl %r12d, %eax
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %r15, %rdi
callq 0xad1fa
leaq 0x252ea3(%rip), %rsi    # 0x3192ce
leaq 0x26d4dc(%rip), %rdx    # 0x33390e
leaq 0x25359b(%rip), %rcx    # 0x3199d4
movq %rax, %rdi
movl $0x6f1, %r8d            # imm = 0x6F1
movq %r14, %r9
callq 0x8a449
pushq $-0x1
popq %r12
testq %rax, %rax
je 0xc62e9
movq %rax, %r14
callq 0xaaf34
testb %al, %al
je 0xc647e
movq 0x371afe(%rip), %rax    # 0x437f68
movq (%rax), %rdx
leaq 0x2539c1(%rip), %rsi    # 0x319e35
movq 0x20(%rsp), %rdi
callq 0xaf86f
movq 0x28(%rbx), %rdi
movq %r14, %rsi
movq 0x30(%rsp), %r15
movq %r15, %rdx
callq 0xc1c39
movl %eax, %ebp
movq %r14, %rdi
callq 0x8a5e5
testl %ebp, %ebp
je 0xc64a8
movl %ebp, %r12d
jmp 0xc62e9
movq 0x78(%rsp), %rdi
callq 0xad1fa
leaq 0x299f59(%rip), %rsi    # 0x360412
leaq 0x26d44e(%rip), %rdx    # 0x33390e
leaq 0x25350d(%rip), %rcx    # 0x3199d4
movq %rax, %rdi
movl $0x6fd, %r8d            # imm = 0x6FD
movq %r15, %r9
callq 0x8a449
movq %rax, 0x38(%rsp)
testq %rax, %rax
je 0xc62e9
callq 0xaaf34
testb %al, %al
je 0xc650a
movq 0x371a72(%rip), %rax    # 0x437f68
movq (%rax), %rdx
leaq 0x25394b(%rip), %rsi    # 0x319e4b
movq 0x20(%rsp), %rdi
callq 0xaf86f
pushq $0x20
popq %r13
movq $0x0, 0x28(%rsp)
xorl %ebp, %ebp
xorl %r12d, %r12d
movq 0x28(%rbx), %rax
cmpq 0x98(%rax), %r12
jae 0xc65e1
movq 0x10(%rax), %rax
movl (%rax,%r13), %r15d
testq %r15, %r15
je 0xc6733
movq -0x8(%rax,%r13), %r14
callq 0x92a76
testb %al, %al
je 0xc656a
movq 0x38(%rsp), %rdi
leaq 0x254171(%rip), %rsi    # 0x31a6c9
movq %r12, %rdx
movq %r14, %rcx
movq %r15, %r8
xorl %eax, %eax
callq 0x17a50
jmp 0xc6580
movq 0x38(%rsp), %rdi
leaq 0x254174(%rip), %rsi    # 0x31a6ea
movq %r12, %rdx
xorl %eax, %eax
callq 0x17a50
cmpl %r15d, 0x28(%rsp)
jae 0xc65a7
leal 0x1(%r15), %esi
movq %rbp, %rdi
movq %rsi, 0x28(%rsp)
leaq 0x25343a(%rip), %rdx    # 0x3199d4
movl $0x65e, %ecx            # imm = 0x65E
callq 0x93472
movq %rax, %rbp
movq (%rbx), %rdi
leaq (%r14,%r15), %rcx
decq %rcx
movq %rbp, %rsi
movq %r14, %rdx
callq 0x7239d
movq 0x38(%rsp), %rdi
leaq 0x254129(%rip), %rsi    # 0x31a6f1
movl %r15d, %edx
movq %rbp, %rcx
xorl %eax, %eax
callq 0x17a50
incq %r12
addq $0x28, %r13
jmp 0xc651c
leaq 0x2533ec(%rip), %rsi    # 0x3199d4
movq %rbp, %rdi
movl $0x666, %edx            # imm = 0x666
callq 0x936f9
movq 0x38(%rsp), %rdi
callq 0x8a5e5
callq 0xaaf34
testb %al, %al
je 0xc6623
movq 0x371959(%rip), %rax    # 0x437f68
movq (%rax), %rdx
leaq 0x25384b(%rip), %rsi    # 0x319e64
movq 0x20(%rsp), %rdi
callq 0xaf86f
callq 0x7a05b
movq %rax, %r15
movq %rax, %rdi
callq 0x7a3b7
movq %r15, %rdi
callq 0x7ab1b
callq 0xae154
movq %rax, %r14
movq %rax, %rdi
movq 0x78(%rsp), %r12
movq %r12, %rsi
callq 0xae31d
movq %r14, %rdi
xorl %esi, %esi
callq 0xae3f2
leaq 0x299dae(%rip), %rsi    # 0x360412
movq %rax, %rdi
callq 0xacbfb
movq %r12, %rdi
callq 0xad1fa
movq %r15, %rdi
movq %r14, %rsi
movq %rax, %rdx
movq 0x30(%rsp), %rcx
callq 0x7adb8
movl %eax, %r12d
movq %r15, %rdi
callq 0x7a80c
movq %r14, %rdi
callq 0xae662
jmp 0xc62e9
movq 0x3718c2(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x21e963(%rip), %rsi    # 0x2e5013
leaq 0x253f8c(%rip), %rdx    # 0x31a643
leaq 0x253fcc(%rip), %rcx    # 0x31a68a
leaq 0x25330f(%rip), %r8     # 0x3199d4
movl $0x566, %r9d            # imm = 0x566
xorl %eax, %eax
callq 0x17a50
callq 0x17390
movq 0x37188a(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x21e92b(%rip), %rsi    # 0x2e5013
leaq 0x25344d(%rip), %rdx    # 0x319b3c
leaq 0x253520(%rip), %rcx    # 0x319c16
leaq 0x2532d7(%rip), %r8     # 0x3199d4
movl $0x675, %r9d            # imm = 0x675
jmp 0xc66cb
movq 0x37185c(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x21e8fd(%rip), %rsi    # 0x2e5013
leaq 0x279b95(%rip), %rdx    # 0x3402b2
leaq 0x2534f2(%rip), %rcx    # 0x319c16
leaq 0x2532a9(%rip), %r8     # 0x3199d4
movl $0x676, %r9d            # imm = 0x676
jmp 0xc66cb
movq 0x37182e(%rip), %rax    # 0x437f68
movq (%rax), %rdi
leaq 0x21e8cf(%rip), %rsi    # 0x2e5013
leaq 0x253f54(%rip), %rdx    # 0x31a69f
leaq 0x253f5e(%rip), %rcx    # 0x31a6b0
leaq 0x25327b(%rip), %r8     # 0x3199d4
movl $0x654, %r9d            # imm = 0x654
jmp 0xc66cb