// File: ikatanic[P]lcskpp/lcskpp.cpp
// Function: lcskpp(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int, std::vector<std::pair<int, int>, std::allocator<std::pair<int, int>>>*)
int lcskpp(const string& a, const string& b, int k,
          vector<pair<int, int>>* reconstruction) {
  int m = b.size();
  vector<pair<int, int>> matches;
  calc_matches(a, b, k, &matches);

  int n_matches = matches.size();
  vector<pair<int, int>> MinYPrefix(m + 1, {m+1, -1});
  MinYPrefix[0].first = -1;

  int r = 0;  // current lcsk++ length
  int log_r = 1;  // log(r+1) + 1

  vector<int> match_dp(matches.size());
  vector<int> recon(matches.size());

  int ptr = 0;
  int query_ptr = 0;
  int cont_ptr = 0;
  int last_idx = -1;

  // We process matches row by row (while loop).
  // When at row i, we also handle queries on MinYPrefix for matches
  // in row i+k-1 (query_ptr).
  // cont_ptr points to ptr's possible continuation (applicable only to k > 1).
  while (ptr < n_matches) {
    int i = matches[ptr].first;  // current row index
    int i_row_ptr = ptr;


    while (query_ptr < n_matches && matches[query_ptr].first < i+k) {
      int query_row_i = matches[query_ptr].first;

      // count matches in row query_row_i
      int query_row_end = query_ptr;
      while (query_row_end < n_matches &&
             matches[query_row_end].first == query_row_i) query_row_end++;
      int row_count = query_row_end - query_ptr;

      // decide between binary search for each match (Hunt and Szymanski) and
      // sweep through MinYPrefix (Kuo and Cross).
      if (row_count * log_r * 6 < r) {
        int last_l = 0;
        while (query_ptr < query_row_end) {
          int j = matches[query_ptr].second;

          if (MinYPrefix[last_l].first < j-k+1) {
            int lo = last_l+1, hi = r+1;
            while (lo < hi) {
              int mid = (lo + hi) / 2;
              if (MinYPrefix[mid].first < j - k + 1)
                lo = mid + 1;
              else
                hi = mid;
            }
            last_l = lo;
          }

          recon[query_ptr] = MinYPrefix[last_l-1].second;
          match_dp[query_ptr++] = last_l-1+k;
        }
      } else {
        int l = 0;
        while (query_ptr < query_row_end) {
          int j = matches[query_ptr].second;
          while (MinYPrefix[l].first < j-k+1) l++;
          recon[query_ptr] = MinYPrefix[l-1].second;
          match_dp[query_ptr++] = l-1+k;
        }
      }
    }

    if (k > 1) {
      while (cont_ptr < i_row_ptr && matches[cont_ptr].first < i-1) cont_ptr++;
    }

    // now the main loop through matches in row i, finishing off their
    // dp calculation and doing updates to MinYPrefix
    while (ptr < n_matches && matches[ptr].first == i) {
      int j = matches[ptr].second;
      int& ptr_dp = match_dp[ptr];

      // update MinYPrefix
      for (int s = ptr_dp; s > ptr_dp-k && MinYPrefix[s].first > j; --s) {
        MinYPrefix[s] = {j, ptr};
      }

      // Try continuation
      if (k > 1) {
        while (cont_ptr < i_row_ptr && matches[cont_ptr].second < j-1)
          cont_ptr++;
        if (cont_ptr < i_row_ptr && matches[cont_ptr].second == j-1 &&
            match_dp[cont_ptr] + 1 > ptr_dp) {
                ptr_dp = match_dp[cont_ptr] + 1;
                recon[ptr] = cont_ptr;
                MinYPrefix[ptr_dp] = min(MinYPrefix[ptr_dp], {j, ptr});
              }
      }

      if (ptr_dp > r) {
        r = ptr_dp;
        last_idx = ptr;
        while ((1 << log_r) < r+1) log_r++;
      }

      ptr++;
    }
  }

  if (reconstruction) {
    reconstruction->clear();

    int i = last_idx;
    while (i != -1) {
      assert(0 <= i && i < matches.size());

      if (recon[i] != -1 &&
          matches[recon[i]].first+1 == matches[i].first &&
          matches[recon[i]].second+1 == matches[i].second) {
        // continuation
        reconstruction->push_back({matches[i].first, matches[i].second});
      } else {
        // non-overlapping match
        assert(recon[i] == -1 ||
          (matches[recon[i]].first + k <= matches[i].first &&
           matches[recon[i]].second + k <= matches[i].second));
        for (int j = 0; j < k; ++j) {
          reconstruction->push_back({matches[i].first-j, matches[i].second-j});
        }
      }

      i = recon[i];
    }
    reverse(reconstruction->begin(), reconstruction->end());
  }

  return r;
}

// Assembly:
subq $0x218, %rsp            # imm = 0x218
movq %rdi, 0x210(%rsp)
movq %rsi, 0x208(%rsp)
movl %edx, 0x204(%rsp)
movq %rcx, 0x1f8(%rsp)
movq 0x208(%rsp), %rdi
callq 0x2120
movl %eax, 0x1f4(%rsp)
leaq 0x1d8(%rsp), %rdi
movq %rdi, 0xb8(%rsp)
callq 0x6260
movq 0xb8(%rsp), %rcx
movq 0x210(%rsp), %rdi
movq 0x208(%rsp), %rsi
movl 0x204(%rsp), %edx
callq 0x2b80
jmp 0x4595
leaq 0x1d8(%rsp), %rdi
callq 0x5ae0
movl %eax, 0x1c8(%rsp)
movl 0x1f4(%rsp), %eax
incl %eax
movslq %eax, %rcx
movq %rcx, 0xb0(%rsp)
movl %eax, 0x1a4(%rsp)
movl $0xffffffff, 0x1a0(%rsp) # imm = 0xFFFFFFFF
leaq 0x1a8(%rsp), %rdi
leaq 0x1a4(%rsp), %rsi
leaq 0x1a0(%rsp), %rdx
callq 0x6270
jmp 0x45ee
leaq 0x19f(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x6040
movq 0xb0(%rsp), %rsi
movq 0xa8(%rsp), %rcx
leaq 0x1b0(%rsp), %rdi
leaq 0x1a8(%rsp), %rdx
callq 0x62a0
jmp 0x462a
leaq 0x19f(%rsp), %rdi
callq 0x60d0
xorl %eax, %eax
movl %eax, %esi
leaq 0x1b0(%rsp), %rdi
callq 0x6150
movl $0xffffffff, (%rax)     # imm = 0xFFFFFFFF
movl $0x0, 0x198(%rsp)
movl $0x1, 0x194(%rsp)
leaq 0x1d8(%rsp), %rdi
callq 0x5ae0
movq %rax, 0x98(%rsp)
leaq 0x177(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x59a0
movq 0x98(%rsp), %rsi
movq 0xa0(%rsp), %rdx
leaq 0x178(%rsp), %rdi
callq 0x5a60
jmp 0x46ad
leaq 0x177(%rsp), %rdi
callq 0x5a30
leaq 0x1d8(%rsp), %rdi
callq 0x5ae0
movq %rax, 0x88(%rsp)
leaq 0x157(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x59a0
movq 0x88(%rsp), %rsi
movq 0x90(%rsp), %rdx
leaq 0x158(%rsp), %rdi
callq 0x5a60
jmp 0x4703
leaq 0x157(%rsp), %rdi
callq 0x5a30
movl $0x0, 0x150(%rsp)
movl $0x0, 0x14c(%rsp)
movl $0x0, 0x148(%rsp)
movl $0xffffffff, 0x144(%rsp) # imm = 0xFFFFFFFF
movl 0x150(%rsp), %eax
cmpl 0x1c8(%rsp), %eax
jge 0x4fbf
movslq 0x150(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
movl %eax, 0x140(%rsp)
movl 0x150(%rsp), %eax
movl %eax, 0x13c(%rsp)
movl 0x14c(%rsp), %ecx
xorl %eax, %eax
cmpl 0x1c8(%rsp), %ecx
movb %al, 0x87(%rsp)
jge 0x47c6
movslq 0x14c(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
movl 0x140(%rsp), %ecx
addl 0x204(%rsp), %ecx
cmpl %ecx, %eax
setl %al
movb %al, 0x87(%rsp)
movb 0x87(%rsp), %al
testb $0x1, %al
jne 0x47d6
jmp 0x4bcc
movslq 0x14c(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
movl %eax, 0x138(%rsp)
movl 0x14c(%rsp), %eax
movl %eax, 0x134(%rsp)
movl 0x134(%rsp), %ecx
xorl %eax, %eax
cmpl 0x1c8(%rsp), %ecx
movb %al, 0x86(%rsp)
jge 0x4843
movslq 0x134(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
cmpl 0x138(%rsp), %eax
sete %al
movb %al, 0x86(%rsp)
movb 0x86(%rsp), %al
testb $0x1, %al
jne 0x4853
jmp 0x48f1
movl 0x134(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x134(%rsp)
jmp 0x4802
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
jmp 0x5431
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0x19f(%rsp), %rdi
callq 0x60d0
jmp 0x5431
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0x177(%rsp), %rdi
callq 0x5a30
jmp 0x5424
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0x157(%rsp), %rdi
callq 0x5a30
jmp 0x5417
movl 0x134(%rsp), %eax
subl 0x14c(%rsp), %eax
movl %eax, 0x130(%rsp)
movl 0x130(%rsp), %eax
imull 0x194(%rsp), %eax
imull $0x6, %eax, %eax
cmpl 0x198(%rsp), %eax
jge 0x4ac9
movl $0x0, 0x12c(%rsp)
movl 0x14c(%rsp), %eax
cmpl 0x134(%rsp), %eax
jge 0x4ac4
movslq 0x14c(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl 0x4(%rax), %eax
movl %eax, 0x128(%rsp)
movslq 0x12c(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
movl 0x128(%rsp), %ecx
subl 0x204(%rsp), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jge 0x4a3f
movl 0x12c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x124(%rsp)
movl 0x198(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x120(%rsp)
movl 0x124(%rsp), %eax
cmpl 0x120(%rsp), %eax
jge 0x4a31
movl 0x124(%rsp), %eax
addl 0x120(%rsp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movl %eax, 0x11c(%rsp)
movslq 0x11c(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
movl 0x128(%rsp), %ecx
subl 0x204(%rsp), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jge 0x4a21
movl 0x11c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x124(%rsp)
jmp 0x4a2f
movl 0x11c(%rsp), %eax
movl %eax, 0x120(%rsp)
jmp 0x49b5
movl 0x124(%rsp), %eax
movl %eax, 0x12c(%rsp)
movl 0x12c(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x6150
movl 0x4(%rax), %eax
movl %eax, 0x7c(%rsp)
movslq 0x14c(%rsp), %rsi
leaq 0x158(%rsp), %rdi
callq 0x5a40
movl 0x7c(%rsp), %ecx
movl %ecx, (%rax)
movl 0x12c(%rsp), %eax
subl $0x1, %eax
addl 0x204(%rsp), %eax
movl %eax, 0x80(%rsp)
movl 0x14c(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x14c(%rsp)
movslq %eax, %rsi
leaq 0x178(%rsp), %rdi
callq 0x5a40
movl 0x80(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x4930
jmp 0x4bc7
movl $0x0, 0x118(%rsp)
movl 0x14c(%rsp), %eax
cmpl 0x134(%rsp), %eax
jge 0x4bc5
movslq 0x14c(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl 0x4(%rax), %eax
movl %eax, 0x114(%rsp)
movslq 0x118(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
movl 0x114(%rsp), %ecx
subl 0x204(%rsp), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jge 0x4b46
movl 0x118(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x118(%rsp)
jmp 0x4b07
movl 0x118(%rsp), %eax
subl $0x1, %eax
movslq %eax, %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x6150
movl 0x4(%rax), %eax
movl %eax, 0x74(%rsp)
movslq 0x14c(%rsp), %rsi
leaq 0x158(%rsp), %rdi
callq 0x5a40
movl 0x74(%rsp), %ecx
movl %ecx, (%rax)
movl 0x118(%rsp), %eax
subl $0x1, %eax
addl 0x204(%rsp), %eax
movl %eax, 0x78(%rsp)
movl 0x14c(%rsp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, 0x14c(%rsp)
movslq %eax, %rsi
leaq 0x178(%rsp), %rdi
callq 0x5a40
movl 0x78(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x4ad4
jmp 0x4bc7
jmp 0x477c
cmpl $0x1, 0x204(%rsp)
jle 0x4c37
jmp 0x4bd8
movl 0x148(%rsp), %ecx
xorl %eax, %eax
cmpl 0x13c(%rsp), %ecx
movb %al, 0x73(%rsp)
jge 0x4c18
movslq 0x148(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
movl 0x140(%rsp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
setl %al
movb %al, 0x73(%rsp)
movb 0x73(%rsp), %al
testb $0x1, %al
jne 0x4c22
jmp 0x4c35
movl 0x148(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x148(%rsp)
jmp 0x4bd8
jmp 0x4c37
jmp 0x4c39
movl 0x150(%rsp), %ecx
xorl %eax, %eax
cmpl 0x1c8(%rsp), %ecx
movb %al, 0x72(%rsp)
jge 0x4c74
movslq 0x150(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
cmpl 0x140(%rsp), %eax
sete %al
movb %al, 0x72(%rsp)
movb 0x72(%rsp), %al
testb $0x1, %al
jne 0x4c81
jmp 0x4fba
movslq 0x150(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl 0x4(%rax), %eax
movl %eax, 0x110(%rsp)
movslq 0x150(%rsp), %rsi
leaq 0x178(%rsp), %rdi
callq 0x5a40
movq %rax, 0x108(%rsp)
movq 0x108(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x104(%rsp)
movl 0x104(%rsp), %ecx
movq 0x108(%rsp), %rax
movl (%rax), %edx
subl 0x204(%rsp), %edx
xorl %eax, %eax
cmpl %edx, %ecx
movb %al, 0x71(%rsp)
jle 0x4d15
movslq 0x104(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
cmpl 0x110(%rsp), %eax
setg %al
movb %al, 0x71(%rsp)
movb 0x71(%rsp), %al
testb $0x1, %al
jne 0x4d22
jmp 0x4da2
leaq 0xfc(%rsp), %rdi
leaq 0x110(%rsp), %rsi
leaq 0x150(%rsp), %rdx
callq 0x5b30
jmp 0x4d41
movslq 0x104(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x6150
movq %rax, %rdi
leaq 0xfc(%rsp), %rsi
callq 0x6320
movl 0x104(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x104(%rsp)
jmp 0x4cce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1d0(%rsp)
movl %eax, 0x1cc(%rsp)
leaq 0x158(%rsp), %rdi
callq 0x5c40
jmp 0x5417
cmpl $0x1, 0x204(%rsp)
jle 0x4f41
jmp 0x4db2
movl 0x148(%rsp), %ecx
xorl %eax, %eax
cmpl 0x13c(%rsp), %ecx
movb %al, 0x70(%rsp)
jge 0x4df3
movslq 0x148(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl 0x4(%rax), %eax
movl 0x110(%rsp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
setl %al
movb %al, 0x70(%rsp)
movb 0x70(%rsp), %al
testb $0x1, %al
jne 0x4dfd
jmp 0x4e10
movl 0x148(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x148(%rsp)
jmp 0x4db2
movl 0x148(%rsp), %eax
cmpl 0x13c(%rsp), %eax
jge 0x4f3f
movslq 0x148(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl 0x4(%rax), %eax
movl 0x110(%rsp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0x4f3f
movslq 0x148(%rsp), %rsi
leaq 0x178(%rsp), %rdi
callq 0x5a40
movl (%rax), %eax
addl $0x1, %eax
movq 0x108(%rsp), %rcx
cmpl (%rcx), %eax
jle 0x4f3f
movslq 0x148(%rsp), %rsi
leaq 0x178(%rsp), %rdi
callq 0x5a40
movl (%rax), %ecx
incl %ecx
movq 0x108(%rsp), %rax
movl %ecx, (%rax)
movl 0x148(%rsp), %eax
movl %eax, 0x64(%rsp)
movslq 0x150(%rsp), %rsi
leaq 0x158(%rsp), %rdi
callq 0x5a40
movl 0x64(%rsp), %ecx
movl %ecx, (%rax)
movq 0x108(%rsp), %rax
movslq (%rax), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x6150
movq %rax, 0x68(%rsp)
leaq 0xf4(%rsp), %rdi
leaq 0x110(%rsp), %rsi
leaq 0x150(%rsp), %rdx
callq 0x5b30
jmp 0x4efd
movq 0x68(%rsp), %rdi
leaq 0xf4(%rsp), %rsi
callq 0x6350
movq %rax, 0x58(%rsp)
jmp 0x4f16
movq 0x108(%rsp), %rax
movslq (%rax), %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x6150
movq 0x58(%rsp), %rsi
movq %rax, %rdi
callq 0x6170
jmp 0x4f3d
jmp 0x4f3f
jmp 0x4f41
movq 0x108(%rsp), %rax
movl (%rax), %eax
cmpl 0x198(%rsp), %eax
jle 0x4fa4
movq 0x108(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x198(%rsp)
movl 0x150(%rsp), %eax
movl %eax, 0x144(%rsp)
movl 0x194(%rsp), %ecx
movl $0x1, %eax
shll %cl, %eax
movl 0x198(%rsp), %ecx
addl $0x1, %ecx
cmpl %ecx, %eax
jge 0x4fa2
movl 0x194(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x194(%rsp)
jmp 0x4f73
jmp 0x4fa4
movl 0x150(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x150(%rsp)
jmp 0x4c39
jmp 0x473c
cmpq $0x0, 0x1f8(%rsp)
je 0x53cc
movq 0x1f8(%rsp), %rdi
callq 0x6390
movl 0x144(%rsp), %eax
movl %eax, 0xf0(%rsp)
cmpl $-0x1, 0xf0(%rsp)
je 0x5389
xorl %eax, %eax
xorl %ecx, %ecx
cmpl 0xf0(%rsp), %ecx
movb %al, 0x57(%rsp)
jg 0x5034
movslq 0xf0(%rsp), %rax
movq %rax, 0x48(%rsp)
leaq 0x1d8(%rsp), %rdi
callq 0x5ae0
movq %rax, %rcx
movq 0x48(%rsp), %rax
cmpq %rcx, %rax
setb %al
movb %al, 0x57(%rsp)
movb 0x57(%rsp), %al
testb $0x1, %al
jne 0x503e
jmp 0x5040
jmp 0x505f
leaq 0x7ff1(%rip), %rdi      # 0xd038
leaq 0x8007(%rip), %rsi      # 0xd055
movl $0x81, %edx
leaq 0x8006(%rip), %rcx      # 0xd060
callq 0x2110
movslq 0xf0(%rsp), %rsi
leaq 0x158(%rsp), %rdi
callq 0x5a40
cmpl $-0x1, (%rax)
je 0x5191
movslq 0xf0(%rsp), %rsi
leaq 0x158(%rsp), %rdi
callq 0x5a40
movslq (%rax), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
addl $0x1, %eax
movl %eax, 0x44(%rsp)
movslq 0xf0(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movq %rax, %rcx
movl 0x44(%rsp), %eax
cmpl (%rcx), %eax
jne 0x5191
movslq 0xf0(%rsp), %rsi
leaq 0x158(%rsp), %rdi
callq 0x5a40
movslq (%rax), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl 0x4(%rax), %eax
addl $0x1, %eax
movl %eax, 0x40(%rsp)
movslq 0xf0(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movq %rax, %rcx
movl 0x40(%rsp), %eax
cmpl 0x4(%rcx), %eax
jne 0x5191
movq 0x1f8(%rsp), %rax
movq %rax, 0x28(%rsp)
movslq 0xf0(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0x6150
movq 0x30(%rsp), %rdi
movq %rax, 0x38(%rsp)
movslq 0xf0(%rsp), %rsi
callq 0x6150
movq 0x38(%rsp), %rsi
movq %rax, %rdx
addq $0x4, %rdx
leaq 0xe8(%rsp), %rdi
callq 0x5b30
jmp 0x5178
movq 0x28(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x5b00
jmp 0x518c
jmp 0x5366
movslq 0xf0(%rsp), %rsi
leaq 0x158(%rsp), %rdi
callq 0x5a40
movq %rax, %rcx
movb $0x1, %al
cmpl $-0x1, (%rcx)
movb %al, 0x27(%rsp)
je 0x5271
movslq 0xf0(%rsp), %rsi
leaq 0x158(%rsp), %rdi
callq 0x5a40
movslq (%rax), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl (%rax), %eax
addl 0x204(%rsp), %eax
movl %eax, 0x20(%rsp)
movslq 0xf0(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl 0x20(%rsp), %ecx
movq %rax, %rdx
xorl %eax, %eax
cmpl (%rdx), %ecx
movb %al, 0x26(%rsp)
jg 0x5269
movslq 0xf0(%rsp), %rsi
leaq 0x158(%rsp), %rdi
callq 0x5a40
movslq (%rax), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movl 0x4(%rax), %eax
addl 0x204(%rsp), %eax
movl %eax, 0x1c(%rsp)
movslq 0xf0(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
callq 0x6150
movq %rax, %rcx
movl 0x1c(%rsp), %eax
cmpl 0x4(%rcx), %eax
setle %al
movb %al, 0x26(%rsp)
movb 0x26(%rsp), %al
movb %al, 0x27(%rsp)
movb 0x27(%rsp), %al
testb $0x1, %al
jne 0x527b
jmp 0x527d
jmp 0x529c
leaq 0x7e26(%rip), %rdi      # 0xd0aa
leaq 0x7dca(%rip), %rsi      # 0xd055
movl $0x8c, %edx
leaq 0x7dc9(%rip), %rcx      # 0xd060
callq 0x2110
movl $0x0, 0xe4(%rsp)
movl 0xe4(%rsp), %eax
cmpl 0x204(%rsp), %eax
jge 0x5364
movq 0x1f8(%rsp), %rax
movq %rax, 0x8(%rsp)
movslq 0xf0(%rsp), %rsi
leaq 0x1d8(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x6150
movq 0x10(%rsp), %rdi
movl (%rax), %eax
movl 0xe4(%rsp), %ecx
subl %ecx, %eax
movl %eax, 0xd8(%rsp)
movslq 0xf0(%rsp), %rsi
callq 0x6150
movl 0x4(%rax), %eax
movl 0xe4(%rsp), %ecx
subl %ecx, %eax
movl %eax, 0xd4(%rsp)
leaq 0xdc(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
leaq 0xd4(%rsp), %rdx
callq 0x6270
jmp 0x5338
movq 0x8(%rsp), %rdi
leaq 0xdc(%rsp), %rsi
callq 0x5b00
jmp 0x534c
jmp 0x534e
movl 0xe4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xe4(%rsp)
jmp 0x52a7
jmp 0x5366
movslq 0xf0(%rsp), %rsi
leaq 0x158(%rsp), %rdi
callq 0x5a40
movl (%rax), %eax
movl %eax, 0xf0(%rsp)
jmp 0x4fe9
movq 0x1f8(%rsp), %rdi
callq 0x5ba0
movq %rax, 0xc8(%rsp)
movq 0x1f8(%rsp), %rdi
callq 0x5c10
movq %rax, 0xc0(%rsp)
movq 0xc8(%rsp), %rdi
movq 0xc0(%rsp), %rsi
callq 0x5b60
jmp 0x53ca
jmp 0x53cc
movl 0x198(%rsp), %eax
movl %eax, 0x4(%rsp)
leaq 0x158(%rsp), %rdi
callq 0x5c40
leaq 0x178(%rsp), %rdi
callq 0x5c40
leaq 0x1b0(%rsp), %rdi
callq 0x6200
leaq 0x1d8(%rsp), %rdi
callq 0x6200
movl 0x4(%rsp), %eax
addq $0x218, %rsp            # imm = 0x218
retq
leaq 0x178(%rsp), %rdi
callq 0x5c40
leaq 0x1b0(%rsp), %rdi
callq 0x6200
leaq 0x1d8(%rsp), %rdi
callq 0x6200
movq 0x1d0(%rsp), %rdi
callq 0x2260
nopl (%rax,%rax)