// File: /workspace/github_c_makefile_star2_O0/LPD-EPFL[P]mctop/src/mctop.c
// Function: crawl
void*
crawl(void* param)
{
  tld_t* tld = (tld_t*) param;
  const int tid = tld->id;
  pthread_barrier_t* barrier_sleep = tld->barrier;
  barrier2_t* barrier2 = tld->barrier2;
  
  const double test_completion_perc_step = 100.0 / test_num_hw_ctx;
  double test_completion_perc = 0;
  double test_completion_time = 0;

  const uint _num_reps = test_num_reps; /* local copy */
  const uint _num_warmup_reps = test_num_warmup_reps; /* local copy */
  const uint _test_cl_size = test_num_cache_lines * sizeof(cache_line_t);
  const uint _num_sockets = test_num_sockets;
  mctop_test_mem_type_t _do_mem = test_do_mem;
  uint _mem_on_demand = test_mem_on_demand;
  const uint _num_hw_ctx = test_num_hw_ctx;
  const uint _verbose = test_verbose;
  const int _do_dvfs = test_dvfs;
  int max_stdev = test_max_stdev;
  uint n_retries = 0;

  mctop_prof_t* profiler = mctop_prof_create(_num_reps);
  mctop_prof_stats_t* stats = malloc_assert(sizeof(mctop_prof_stats_t));

  volatile size_t sum = 0;
  int node_local = -1;
  for (int x = 0; x < _num_hw_ctx; x++)
    {
      clock_t _clock_start = clock();
      if (tid == 0)
	{
	  mctop_set_cpu(NULL, x); 
	  if (_do_dvfs)
	    {
	      dvfs_scale_up(test_num_dvfs_reps, test_dvfs_ratio, NULL);
	    }

	  /* mem. latency measurements */
	  node_local = -1;
	  if (unlikely(_do_mem == ON_TIME))
	    {
	      volatile ticks mem_lats[_num_sockets];
	      for (int n = 0; n < _num_sockets; n++)
		{
		  volatile uint64_t* l = node_mem[n];
		  volatile uint64_t* mem = NULL;
		  if (unlikely(_mem_on_demand))
		    {
		      mem = numa_alloc_onnode(test_mem_size, n);
		      ll_random_create(mem, test_mem_size);
		      l = mem;
		    }
		  mem_lats[n] = ll_random_traverse(l, test_mem_reps);
		  if (unlikely(_mem_on_demand))
		    {
		      numa_free((void*) mem, test_mem_size);
		    }
		}
	      ticks mem_lat_min = -1;
	      for (int n = 0; n < _num_sockets; n++)
		{
		  if (mem_lats[n] < mem_lat_min)
		    {
		      mem_lat_min = mem_lats[n];
		      node_local = n;
		    }
		  mem_lat_table[x][n] = mem_lats[n];
		}
	      numa_set_preferred(mem_lat_min);
	    }
	  cache_lines_destroy(test_cache_line, _test_cl_size, _do_mem == ON_TIME);
	  test_cache_line = cache_lines_create(_test_cl_size, node_local);
	}

      pthread_barrier_wait(barrier_sleep);
      volatile cache_line_t* cache_line = test_cache_line;

      size_t history_med[2] = { 0 };
      for (int y = x + 1; y < _num_hw_ctx; y++)
	{
	  ID1_DO(
		 mctop_set_cpu(NULL, y);
		 if (_do_dvfs)
		   {
		     dvfs_scale_up(test_num_dvfs_reps, test_dvfs_ratio, NULL);
		   }
		 );

	  hw_warmup(cache_line, _num_warmup_reps, barrier2, tid, profiler);

	  for (size_t rep = 0; rep < _num_reps; rep++)
	    {
	      barrier2_cross_explicit(barrier2, tid, 5);

	      if (likely(tid == 0))
		{
		  barrier2_cross(barrier2, tid, rep);
		  sum += ATOMIC_OP(cache_line, rep, profiler);
		}
	      else
		{
		  sum += ATOMIC_OP(cache_line, rep, profiler);
		  barrier2_cross(barrier2, tid, rep);
		}
	    }

	  mctop_prof_stats_calc(profiler, stats);
	  double stdev = stats->std_dev_perc;
	  int64_t median = stats->median;
	  if (likely(tid == 0))
	    {
	      if (unlikely(median < 0))
		{
		  high_stdev_retry = 1;
		  cache_lines_destroy(test_cache_line, _test_cl_size, _do_mem == ON_TIME);
		  test_cache_line = cache_lines_create(_test_cl_size, node_local);
		  if (n_retries == 100)
		    {
		      printf("100 retries!\n");
		      sleep(1);
		      /* for (uint i = 0; i < _num_reps; i++) */
		      /* 	{ */
		      /* 	  printf("%zd \n", profiler->latencies[i]); */
		      /* 	} */
		      /* printf("\n"); */

		      /* exit(-1); */
		    }
		}
	      else
		{
		  if (stdev > max_stdev && (history_med[0] != median || history_med[1] != median))
		    {
		      high_stdev_retry = 1;
		      cache_lines_destroy(test_cache_line, _test_cl_size, _do_mem == ON_TIME);
		      test_cache_line = cache_lines_create(_test_cl_size, node_local);
		    }

		  lat_table_2d_set(lat_table, _num_hw_ctx, x, y, median);
		  history_med[0] = history_med[1];
		  history_med[1] = median;
		}

	      if (unlikely(_verbose))
		{
		  printf(" [%02d->%02d] median %-4zd with stdv %-7.2f%% | limit %2d%% %s\n",
			 x, y, median, stdev, max_stdev,  high_stdev_retry ? "(high)" : "");
		}
	    }
	  else
	    {
	      lat_table_2d_set(lat_table, _num_hw_ctx, y, x, median);
	    }

	  barrier2_cross_explicit(barrier2, tid, 6);

	  if (unlikely(high_stdev_retry))
	    {
	      barrier2_cross_explicit(barrier2, tid, 7);
	      if (++max_stdev > test_max_stdev_max)
		{
		  max_stdev = test_max_stdev_max;
		}
	      high_stdev_retry = 0;
	      y--;
	      n_retries++;
	    }
	  else
	    {
	      max_stdev = test_max_stdev;
	      history_med[0] = history_med[1] = 0;
	      n_retries = 0;
	    }
	}

      if (tid == 0)
	{
	  clock_t _clock_stop = clock();
	  double sec = (_clock_stop - _clock_start) / (double) CLOCKS_PER_SEC;
	  test_completion_time += sec;
	  test_completion_perc += test_completion_perc_step;
	  NOT_VERBOSE(printf("\r# Progress : %6.1f%% completed in %8.1f secs (step took %7.1f secs)",
			     test_completion_perc, test_completion_time, sec);
		      fflush(stdout);
		      );
	  assert(sum != 0);
	}
    }

  if (tid == 0)
    {
      printf("\n");
      cache_lines_destroy(test_cache_line, _test_cl_size, _do_mem == ON_TIME);
      for (int x = 0; x < _num_hw_ctx; x++)
	{
	  for (int y = x + 1; y < _num_hw_ctx; y++)
	    {
	      ticks xy = lat_table_2d_get(lat_table, _num_hw_ctx, x, y);
	      lat_table_2d_set(lat_table, _num_hw_ctx, y, x, xy);
	    }
	}
    }

  mctop_prof_free(profiler);
  free(stats);
  return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x14(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
cvtsi2sdl 0x12e90(%rip), %xmm1 # 0x152d0
movsd 0xcbc0(%rip), %xmm0     # 0xf008
divsd %xmm1, %xmm0
movsd %xmm0, -0x30(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x38(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x40(%rbp)
movq 0x12d68(%rip), %rax     # 0x151d0
movl %eax, -0x44(%rbp)
movq 0x12e2e(%rip), %rax     # 0x152a0
movl %eax, -0x48(%rbp)
movq 0x12d6c(%rip), %rax     # 0x151e8
shlq $0x6, %rax
movl %eax, -0x4c(%rbp)
movl 0x12d7f(%rip), %eax     # 0x15208
movl %eax, -0x50(%rbp)
movl 0x12d6a(%rip), %eax     # 0x151fc
movl %eax, -0x54(%rbp)
movl 0x12e1d(%rip), %eax     # 0x152b8
movl %eax, -0x58(%rbp)
movl 0x12e2c(%rip), %eax     # 0x152d0
movl %eax, -0x5c(%rbp)
movl 0x12deb(%rip), %eax     # 0x15298
movl %eax, -0x60(%rbp)
movl 0x12de6(%rip), %eax     # 0x1529c
movl %eax, -0x64(%rbp)
movq 0x12d20(%rip), %rax     # 0x151e0
movl %eax, -0x68(%rbp)
movl $0x0, -0x6c(%rbp)
movl -0x44(%rbp), %eax
movl %eax, %edi
callq 0x67d0
movq %rax, -0x78(%rbp)
movl $0x28, %edi
callq 0x2da0
movq %rax, -0x80(%rbp)
movq $0x0, -0x88(%rbp)
movl $0xffffffff, -0x8c(%rbp) # imm = 0xFFFFFFFF
movl $0x0, -0x90(%rbp)
movl -0x90(%rbp), %eax
cmpl -0x5c(%rbp), %eax
jae 0x2caa
callq 0x20a0
movq %rax, -0x98(%rbp)
cmpl $0x0, -0x14(%rbp)
jne 0x278e
movl -0x90(%rbp), %esi
xorl %eax, %eax
movl %eax, %edi
callq 0xc9b0
cmpl $0x0, -0x64(%rbp)
je 0x2555
movl $0x6acfc0, %edi         # imm = 0x6ACFC0
movsd 0xcac4(%rip), %xmm0     # 0xf010
xorl %eax, %eax
movl %eax, %esi
callq 0x7160
movl $0xffffffff, -0x8c(%rbp) # imm = 0xFFFFFFFF
cmpl $0x1, -0x54(%rbp)
sete %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x275a
movl -0x50(%rbp), %eax
movq %rsp, %rcx
movq %rcx, -0xa0(%rbp)
leaq 0xf(,%rax,8), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0x138(%rbp)
movq %rcx, %rsp
movq %rax, -0xa8(%rbp)
movl $0x0, -0xac(%rbp)
movl -0xac(%rbp), %eax
cmpl -0x50(%rbp), %eax
jae 0x269b
movq 0x12d0d(%rip), %rax     # 0x152d8
movslq -0xac(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xb8(%rbp)
movq $0x0, -0xc0(%rbp)
cmpl $0x0, -0x58(%rbp)
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2636
movl -0xac(%rbp), %esi
movl $0x20000000, %edi       # imm = 0x20000000
callq 0x21c0
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rdi
movl $0x20000000, %esi       # imm = 0x20000000
callq 0x6f20
movq -0xc0(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rdi
movl $0xf4240, %esi          # imm = 0xF4240
callq 0x6e70
movq %rax, %rdx
movq -0x138(%rbp), %rax
movslq -0xac(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
cmpl $0x0, -0x58(%rbp)
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2685
movq -0xc0(%rbp), %rdi
movl $0x20000000, %esi       # imm = 0x20000000
callq 0x2090
jmp 0x2687
movl -0xac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac(%rbp)
jmp 0x25b5
movq $-0x1, -0xc8(%rbp)
movl $0x0, -0xcc(%rbp)
movl -0xcc(%rbp), %eax
cmpl -0x50(%rbp), %eax
jae 0x2742
movq -0x138(%rbp), %rax
movslq -0xcc(%rbp), %rcx
movq (%rax,%rcx,8), %rax
cmpq -0xc8(%rbp), %rax
jae 0x26ff
movq -0x138(%rbp), %rax
movslq -0xcc(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xc8(%rbp)
movl -0xcc(%rbp), %eax
movl %eax, -0x8c(%rbp)
movq -0x138(%rbp), %rax
movslq -0xcc(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movq 0x12b98(%rip), %rax     # 0x152b0
movslq -0x90(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0xcc(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0xcc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xcc(%rbp)
jmp 0x26b0
movq -0xc8(%rbp), %rax
movl %eax, %edi
callq 0x2270
movq -0xa0(%rbp), %rax
movq %rax, %rsp
movq 0x12b5f(%rip), %rdi     # 0x152c0
movl -0x4c(%rbp), %eax
movl %eax, %esi
cmpl $0x1, -0x54(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %edx
callq 0x2df0
movl -0x4c(%rbp), %eax
movl %eax, %edi
movl -0x8c(%rbp), %esi
callq 0x2e40
movq %rax, 0x12b32(%rip)     # 0x152c0
movq -0x20(%rbp), %rdi
callq 0x2060
movq 0x12b22(%rip), %rax     # 0x152c0
movq %rax, -0xd8(%rbp)
leaq -0xf0(%rbp), %rdi
xorl %esi, %esi
movl $0x10, %edx
callq 0x20f0
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
movl -0xf4(%rbp), %eax
cmpl -0x5c(%rbp), %eax
jae 0x2bba
cmpl $0x1, -0x14(%rbp)
jne 0x2809
movl -0xf4(%rbp), %esi
xorl %eax, %eax
movl %eax, %edi
callq 0xc9b0
cmpl $0x0, -0x64(%rbp)
je 0x2807
movl $0x6acfc0, %edi         # imm = 0x6ACFC0
movsd 0xc812(%rip), %xmm0     # 0xf010
xorl %eax, %eax
movl %eax, %esi
callq 0x7160
jmp 0x2809
movq -0xd8(%rbp), %rdi
movl -0x48(%rbp), %eax
movl %eax, %esi
movq -0x28(%rbp), %rdx
movl -0x14(%rbp), %ecx
movq -0x78(%rbp), %r8
callq 0x2e70
movq $0x0, -0x100(%rbp)
movq -0x100(%rbp), %rax
movl -0x44(%rbp), %ecx
cmpq %rcx, %rax
jae 0x2903
movq -0x28(%rbp), %rdi
movl -0x14(%rbp), %esi
movl $0x5, %edx
callq 0x7500
cmpl $0x0, -0x14(%rbp)
sete %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x28ac
movq -0x28(%rbp), %rdi
movl -0x14(%rbp), %esi
movq -0x100(%rbp), %rdx
callq 0x74a0
movq -0xd8(%rbp), %rdi
movq -0x100(%rbp), %rsi
movq -0x78(%rbp), %rdx
callq 0x2f10
movq %rax, %rcx
movq -0x88(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x88(%rbp)
jmp 0x28ea
movq -0xd8(%rbp), %rdi
movq -0x100(%rbp), %rsi
movq -0x78(%rbp), %rdx
callq 0x2f10
movq %rax, %rcx
movq -0x88(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x88(%rbp)
movq -0x28(%rbp), %rdi
movl -0x14(%rbp), %esi
movq -0x100(%rbp), %rdx
callq 0x74a0
jmp 0x28ec
movq -0x100(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x100(%rbp)
jmp 0x2830
movq -0x78(%rbp), %rdi
movq -0x80(%rbp), %rsi
callq 0x6990
movq -0x80(%rbp), %rax
movsd 0x20(%rax), %xmm0
movsd %xmm0, -0x108(%rbp)
movq -0x80(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x110(%rbp)
cmpl $0x0, -0x14(%rbp)
sete %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2ada
cmpq $0x0, -0x110(%rbp)
setl %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x29c9
movl $0x1, 0x12956(%rip)     # 0x152c8
movq 0x12947(%rip), %rdi     # 0x152c0
movl -0x4c(%rbp), %eax
movl %eax, %esi
cmpl $0x1, -0x54(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %edx
callq 0x2df0
movl -0x4c(%rbp), %eax
movl %eax, %edi
movl -0x8c(%rbp), %esi
callq 0x2e40
movq %rax, 0x1291a(%rip)     # 0x152c0
cmpl $0x64, -0x6c(%rbp)
jne 0x29c4
leaq 0xc991(%rip), %rdi      # 0xf344
movb $0x0, %al
callq 0x20d0
movl $0x1, %edi
callq 0x22e0
jmp 0x2a78
movsd -0x108(%rbp), %xmm0
cvtsi2sdl -0x68(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x2a3a
movq -0xf0(%rbp), %rax
cmpq -0x110(%rbp), %rax
jne 0x29fc
movq -0xe8(%rbp), %rax
cmpq -0x110(%rbp), %rax
je 0x2a3a
movl $0x1, 0x128c2(%rip)     # 0x152c8
movq 0x128b3(%rip), %rdi     # 0x152c0
movl -0x4c(%rbp), %eax
movl %eax, %esi
cmpl $0x1, -0x54(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %edx
callq 0x2df0
movl -0x4c(%rbp), %eax
movl %eax, %edi
movl -0x8c(%rbp), %esi
callq 0x2e40
movq %rax, 0x12886(%rip)     # 0x152c0
movq 0x12867(%rip), %rdi     # 0x152a8
movl -0x5c(%rbp), %esi
movl -0x90(%rbp), %edx
movl -0xf4(%rbp), %ecx
movq -0x110(%rbp), %r8
callq 0x2f80
movq -0xe8(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0x110(%rbp), %rax
movq %rax, -0xe8(%rbp)
cmpl $0x0, -0x60(%rbp)
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2ad8
movl -0x90(%rbp), %esi
movl -0xf4(%rbp), %edx
movq -0x110(%rbp), %rcx
movsd -0x108(%rbp), %xmm0
movl -0x68(%rbp), %r8d
movl 0x12813(%rip), %edi     # 0x152c8
leaq 0xc9b0(%rip), %r9       # 0xf46c
leaq 0xc8cf(%rip), %rax      # 0xf392
cmpl $0x0, %edi
cmovneq %rax, %r9
leaq 0xc881(%rip), %rdi      # 0xf352
movb $0x1, %al
callq 0x20d0
jmp 0x2afc
movq 0x127c7(%rip), %rdi     # 0x152a8
movl -0x5c(%rbp), %esi
movl -0xf4(%rbp), %edx
movl -0x90(%rbp), %ecx
movq -0x110(%rbp), %r8
callq 0x2f80
movq -0x28(%rbp), %rdi
movl -0x14(%rbp), %esi
movl $0x6, %edx
callq 0x7500
movl 0x127b5(%rip), %eax     # 0x152c8
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2b7d
movq -0x28(%rbp), %rdi
movl -0x14(%rbp), %esi
movl $0x7, %edx
callq 0x7500
movl -0x68(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x68(%rbp)
cltq
cmpq 0x12793(%rip), %rax     # 0x152e0
jbe 0x2b59
movq 0x1278a(%rip), %rax     # 0x152e0
movl %eax, -0x68(%rbp)
movl $0x0, 0x12765(%rip)     # 0x152c8
movl -0xf4(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0xf4(%rbp)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6c(%rbp)
jmp 0x2ba4
movq 0x1265c(%rip), %rax     # 0x151e0
movl %eax, -0x68(%rbp)
movq $0x0, -0xe8(%rbp)
movq $0x0, -0xf0(%rbp)
movl $0x0, -0x6c(%rbp)
jmp 0x2ba6
movl -0xf4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xf4(%rbp)
jmp 0x27c7
cmpl $0x0, -0x14(%rbp)
jne 0x2c94
callq 0x20a0
movq %rax, -0x118(%rbp)
movq -0x118(%rbp), %rax
subq -0x98(%rbp), %rax
cvtsi2sd %rax, %xmm0
movsd 0xc42d(%rip), %xmm1     # 0xf018
divsd %xmm1, %xmm0
movsd %xmm0, -0x120(%rbp)
movsd -0x120(%rbp), %xmm0
addsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x30(%rbp), %xmm0
addsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
cmpl $0x0, 0x12679(%rip)     # 0x15298
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2c64
movsd -0x38(%rbp), %xmm0
movsd -0x40(%rbp), %xmm1
movsd -0x120(%rbp), %xmm2
leaq 0xc74b(%rip), %rdi      # 0xf399
movb $0x3, %al
callq 0x20d0
movq 0x12374(%rip), %rax     # 0x14fd0
movq (%rax), %rdi
callq 0x21b0
movq -0x88(%rbp), %rax
cmpq $0x0, %rax
je 0x2c73
jmp 0x2c92
leaq 0xc764(%rip), %rdi      # 0xf3de
leaq 0xc766(%rip), %rsi      # 0xf3e7
movl $0x140, %edx            # imm = 0x140
leaq 0xc766(%rip), %rcx      # 0xf3f3
callq 0x20e0
jmp 0x2c94
jmp 0x2c96
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0x2505
cmpl $0x0, -0x14(%rbp)
jne 0x2d7f
leaq 0xc7b0(%rip), %rdi      # 0xf46b
movb $0x0, %al
callq 0x20d0
movq 0x125f7(%rip), %rdi     # 0x152c0
movl -0x4c(%rbp), %eax
movl %eax, %esi
cmpl $0x1, -0x54(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %edx
callq 0x2df0
movl $0x0, -0x124(%rbp)
movl -0x124(%rbp), %eax
cmpl -0x5c(%rbp), %eax
jae 0x2d7d
movl -0x124(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x128(%rbp)
movl -0x128(%rbp), %eax
cmpl -0x5c(%rbp), %eax
jae 0x2d67
movq 0x1258f(%rip), %rdi     # 0x152a8
movl -0x5c(%rbp), %esi
movl -0x124(%rbp), %edx
movl -0x128(%rbp), %ecx
callq 0x2fb0
movq %rax, -0x130(%rbp)
movq 0x1256d(%rip), %rdi     # 0x152a8
movl -0x5c(%rbp), %esi
movl -0x128(%rbp), %edx
movl -0x124(%rbp), %ecx
movq -0x130(%rbp), %r8
callq 0x2f80
movl -0x128(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x128(%rbp)
jmp 0x2d07
jmp 0x2d69
movl -0x124(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x124(%rbp)
jmp 0x2ce9
jmp 0x2d7f
movq -0x78(%rbp), %rdi
callq 0x6960
movq -0x80(%rbp), %rdi
callq 0x2030
xorl %eax, %eax
movq %rbp, %rsp
popq %rbp
retq
nopl (%rax,%rax)