// File: /workspace/github_c_makefile_star2_O3/mjosaarinen[P]brutus/crypto_aead/minalpherv11/avx2/MinalpherMode.cpp
// Function: minalpher_mode_decryption(unsigned char const*, unsigned char const*, unsigned char const*, unsigned long long, unsigned char*, unsigned long long*)
int minalpher_mode_decryption(
  const unsigned char     *_K,    /* I    Secret key                */
  const unsigned char     *_N,    /* I    Nonce                     */
  const unsigned char     *_C,    /* I    Ciphertext                */
  unsigned long long      _clen,  /* I    Length of Ciphertext      */
  unsigned char           *M_,    /* O    Message                   */
  unsigned long long      *mlen_  /* O    Length of Message         */
  ){
  /*==== Prepare ====*/
  __m256i ymmTagA[4];
  __m256i ymmTagB[4];
  for (int i = 0; i<4; i++){
    ymmTagA[i] = _mm256_setzero_si256();
    ymmTagB[i] = _mm256_setzero_si256();
  }
  __m256i DATA;
  __m256i DATA1, DATA2, DATA3, DATA4;

  /*==== Process Message ====*/
  int mblock = (int)((_clen) / 32);

  /*==== Create L ====*/
  int cnt = 0;
  __m256i ymmL, ymmL_H;
  create_l(ymmL, _K, _N);

  //Main loop
  int p = 0;
  for (p = 0; p < ((long long)(_clen)-128); p += 128)
  {
    //Encryption
    DATA1 = _mm256_load_si256((const __m256i*)(_C + p));
    DATA2 = _mm256_load_si256((const __m256i*)(_C + p + 32));
    DATA3 = _mm256_load_si256((const __m256i*)(_C + p + 64));
    DATA4 = _mm256_load_si256((const __m256i*)(_C + p + 96));

    __m256i tweak1, tweak2, tweak3, tweak4, tweak5, tweak6, tweak7, tweak8;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak1 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak5 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak2 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak6 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak3 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak7 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak4 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak8 = ymmL;

    DATA1 = _mm256_xor_si256(DATA1, tweak1);
    DATA2 = _mm256_xor_si256(DATA2, tweak2);
    DATA3 = _mm256_xor_si256(DATA3, tweak3);
    DATA4 = _mm256_xor_si256(DATA4, tweak4);
    minalpher_core_quadruple_block_inverse(DATA1, DATA2, DATA3, DATA4);
    DATA1 = _mm256_xor_si256(DATA1, tweak1);
    DATA2 = _mm256_xor_si256(DATA2, tweak2);
    DATA3 = _mm256_xor_si256(DATA3, tweak3);
    DATA4 = _mm256_xor_si256(DATA4, tweak4);
    _mm256_store_si256((__m256i *)(M_ + p), DATA1);
    _mm256_store_si256((__m256i *)(M_ + p + 32), DATA2);
    _mm256_store_si256((__m256i *)(M_ + p + 64), DATA3);
    _mm256_store_si256((__m256i *)(M_ + p + 96), DATA4);
  }

  //length update
  *mlen_ = p;

  if ((mblock % 4) == 0){
    //padding
    DATA1 = _mm256_load_si256((const __m256i*)(_C + p));
    DATA2 = _mm256_load_si256((const __m256i*)(_C + p + 32));
    DATA3 = _mm256_load_si256((const __m256i*)(_C + p + 64));
    DATA4 = _mm256_load_si256((const __m256i*)(_C + p + 96));

    //tweak update
    __m256i tweak1, tweak2, tweak3, tweak4, tweak5, tweak6, tweak7, tweak8;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak1 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak5 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak2 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak6 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak3 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak7 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak4 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak8 = ymmL;

    DATA1 = _mm256_xor_si256(DATA1, tweak1);
    DATA2 = _mm256_xor_si256(DATA2, tweak2);
    DATA3 = _mm256_xor_si256(DATA3, tweak3);
    DATA4 = _mm256_xor_si256(DATA4, tweak4);
    minalpher_core_quadruple_block_inverse(DATA1, DATA2, DATA3, DATA4);
    DATA1 = _mm256_xor_si256(DATA1, tweak1);
    DATA2 = _mm256_xor_si256(DATA2, tweak2);
    DATA3 = _mm256_xor_si256(DATA3, tweak3);
    DATA4 = _mm256_xor_si256(DATA4, tweak4);

    _mm256_store_si256((__m256i *)(M_ + p), DATA1);
    _mm256_store_si256((__m256i *)(M_ + p + 32), DATA2);
    _mm256_store_si256((__m256i *)(M_ + p + 64), DATA3);
    _mm256_store_si256((__m256i *)(M_ + p + 96), DATA4);

    //Format Verification
    for (int d = BLOCK_SIZE - 1; d >= 0; d--){
      if ( (M_ + p + 96)[d] == 0x80){
        *mlen_ += 96 + d;
        return 0;
      }
      if ((M_ + p + 96)[d] != 0x00){
        break;
      }
    }
  }
  else if ((mblock % 4) == 3){
    //padding
    DATA1 = _mm256_load_si256((const __m256i*)(_C + p));
    DATA2 = _mm256_load_si256((const __m256i*)(_C + p + 32));
    DATA3 = _mm256_load_si256((const __m256i*)(_C + p + 64));

    //tweak update
    __m256i tweak1, tweak2, tweak3, tweak4, tweak5, tweak6;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak1 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak4 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak2 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak5 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak3 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak6 = ymmL;

    DATA1 = _mm256_xor_si256(DATA1, tweak1);
    DATA2 = _mm256_xor_si256(DATA2, tweak2);
    DATA3 = _mm256_xor_si256(DATA3, tweak3);
    minalpher_core_quadruple_block_inverse(DATA1, DATA2, DATA3);
    DATA1 = _mm256_xor_si256(DATA1, tweak1);
    DATA2 = _mm256_xor_si256(DATA2, tweak2);
    DATA3 = _mm256_xor_si256(DATA3, tweak3);

    _mm256_store_si256((__m256i *)(M_ + p), DATA1);
    _mm256_store_si256((__m256i *)(M_ + p + 32), DATA2);
    _mm256_store_si256((__m256i *)(M_ + p + 64), DATA3);

    //Format Verification
    for (int d = BLOCK_SIZE - 1; d >= 0; d--){
      if ((M_ + p + 64)[d] == 0x80){
        *mlen_ += 64 + d;
        return 0;
      }
      if ((M_ + p + 64)[d] != 0x00){
        break;
      }
    }
  }
  else if ((mblock % 4) == 2){
    //padding
    DATA1 = _mm256_load_si256((const __m256i*)(_C + p));
    DATA2 = _mm256_load_si256((const __m256i*)(_C + p + 32));

    //tweak update
    __m256i tweak1, tweak2, tweak3, tweak4;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak1 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak3 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak2 = ymmL;
    tweak_update(ymmL, ymmL_H, cnt);
    tweak4 = ymmL;

    DATA1 = _mm256_xor_si256(DATA1, tweak1);
    DATA2 = _mm256_xor_si256(DATA2, tweak2);
    minalpher_core_double_block_inverse(DATA1, DATA2);
    DATA1 = _mm256_xor_si256(DATA1, tweak1);
    DATA2 = _mm256_xor_si256(DATA2, tweak2);

    _mm256_store_si256((__m256i *)(M_ + p), DATA1);
    _mm256_store_si256((__m256i *)(M_ + p + 32), DATA2);

    //Format Verification
    for (int d = BLOCK_SIZE - 1; d >= 0; d--){
      if ((M_ + p + 32)[d] == 0x80){
        *mlen_ += 32 + d;
        return 0;
      }
      if ((M_ + p + 32)[d] != 0x00){
        break;
      }
    }
  }
  else{
    //padding
    DATA1 = _mm256_load_si256((const __m256i*)(_C + p));

    //Encryption
    tweak_update(ymmL, ymmL_H, cnt);
    DATA1 = _mm256_xor_si256(DATA1, ymmL);
    minalpher_core_single_block_inverse(DATA1);
    DATA = _mm256_xor_si256(DATA1, ymmL);
    _mm256_store_si256((__m256i *)(M_ + p), DATA);

    //Format Verification
    for (int d = BLOCK_SIZE - 1; d >= 0; d--){
      if ((M_ + p)[d] == 0x80){
        *mlen_ += d;
        return 0;
      }
      if ((M_ + p)[d] != 0x00){
        break;
      }
    }
  }

  return -1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
andq $-0x20, %rsp
subq $0x1a0, %rsp            # imm = 0x1A0
movq %r9, 0x38(%rsp)
movq %r8, %r14
movq %rcx, %r12
movq %rdx, %r15
movq %rcx, %rax
shrq $0x5, %rax
movq %rax, 0xb8(%rsp)
vmovdqu (%rdi), %xmm0
vpblendd $0xf0, 0x23e6(%rip), %ymm0, %ymm2 # ymm2 = ymm0[0,1,2,3],mem[4,5,6,7]
movq (%rsi), %rax
vmovq %rax, %xmm0
vpinsrd $0x2, 0x8(%rsi), %xmm0, %xmm0
vpxor %xmm1, %xmm1, %xmm1
vpinsrb $0x3, %eax, %xmm1, %xmm1
movl %eax, %ecx
shrl $0x8, %ecx
vpinsrb $0x4, %ecx, %xmm1, %xmm1
movl %eax, %ecx
shrl $0x10, %ecx
vpinsrb $0x5, %ecx, %xmm1, %xmm1
movl %eax, %ecx
shrl $0x18, %ecx
vpinsrb $0x6, %ecx, %xmm1, %xmm1
movq %rax, %rcx
shrq $0x20, %rcx
vpinsrb $0x7, %ecx, %xmm1, %xmm1
movq %rax, %rcx
shrq $0x28, %rcx
vpinsrb $0x8, %ecx, %xmm1, %xmm1
movq %rax, %rcx
shrq $0x30, %rcx
vpinsrb $0x9, %ecx, %xmm1, %xmm1
shrq $0x38, %rax
vpinsrb $0xa, %eax, %xmm1, %xmm1
vpextrb $0x8, %xmm0, %eax
vpinsrb $0xb, %eax, %xmm1, %xmm1
vpextrb $0x9, %xmm0, %eax
vpinsrb $0xc, %eax, %xmm1, %xmm1
vpextrb $0xa, %xmm0, %eax
vpinsrb $0xd, %eax, %xmm1, %xmm1
vpextrb $0xb, %xmm0, %eax
vpinsrb $0xe, %eax, %xmm1, %xmm0
vpinsrb $0xf, 0xc(%rsi), %xmm0, %xmm0
vinserti128 $0x1, %xmm0, %ymm0, %ymm0
movl $0xfff80000, %eax       # imm = 0xFFF80000
kmovd %eax, %k1
vmovdqu8 %ymm0, %ymm2 {%k1}
vmovdqa %ymm2, 0x40(%rsp)
movq %rsp, %rbx
vmovdqa %ymm2, (%rbx)
movq %rbx, %rdi
vzeroupper
callq 0x2030
vmovaps 0x40(%rsp), %ymm0
vxorps (%rbx), %ymm0, %ymm0
vmovaps %ymm0, (%rbx)
cmpq $0x81, %r12
jl 0xa54a
addq $-0x80, %r12
xorl %r13d, %r13d
xorl %ebx, %ebx
testb $0x8, %bl
jne 0xa2f0
vmovdqa (%rsp), %ymm4
vpxor %xmm0, %xmm0, %xmm0
vpcmpgtb %ymm4, %ymm0, %ymm0
vpaddb %ymm4, %ymm4, %ymm6
vpternlogq $0x78, 0x22a2(%rip){1to4}, %ymm0, %ymm6 # 0xc590
jmp 0xa2fe
vmovdqa (%rsp), %ymm4
vmovdqa 0x140(%rsp), %ymm6
vmovdqa (%r15,%r13), %ymm3
vmovdqa 0x20(%r15,%r13), %ymm2
vmovdqa 0x40(%r15,%r13), %ymm1
vmovdqa 0x60(%r15,%r13), %ymm0
vperm2i128 $0x21, %ymm6, %ymm4, %ymm5 # ymm5 = ymm4[2,3],ymm6[0,1]
vpalignr $0x1, %ymm4, %ymm5, %ymm5 # ymm5 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vpalignr $0x1, %ymm6, %ymm4, %ymm4 # ymm4 = ymm6[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm4[0],ymm6[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm4[16]
vmovdqa 0x226d(%rip), %xmm7     # 0xc5a0
vpshufb %xmm7, %xmm4, %xmm6
vperm2i128 $0x28, %ymm6, %ymm6, %ymm6 # ymm6 = zero,zero,ymm6[0,1]
vpxor %ymm5, %ymm6, %ymm6
vperm2i128 $0x21, %ymm4, %ymm6, %ymm5 # ymm5 = ymm6[2,3],ymm4[0,1]
vpalignr $0x1, %ymm4, %ymm6, %ymm4 # ymm4 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm6[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm6[16]
vpalignr $0x1, %ymm6, %ymm5, %ymm5 # ymm5 = ymm6[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm6[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vmovdqa %ymm6, %ymm8
vmovdqa %ymm6, 0x40(%rsp)
vpshufb %xmm7, %xmm4, %xmm6
vperm2i128 $0x28, %ymm6, %ymm6, %ymm6 # ymm6 = zero,zero,ymm6[0,1]
vpxor %ymm5, %ymm6, %ymm5
vperm2i128 $0x21, %ymm4, %ymm5, %ymm6 # ymm6 = ymm5[2,3],ymm4[0,1]
vpalignr $0x1, %ymm4, %ymm5, %ymm4 # ymm4 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vpalignr $0x1, %ymm5, %ymm6, %ymm5 # ymm5 = ymm5[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm6[0],ymm5[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm6[16]
vpshufb %xmm7, %xmm4, %xmm6
vperm2i128 $0x28, %ymm6, %ymm6, %ymm6 # ymm6 = zero,zero,ymm6[0,1]
vpxor %ymm5, %ymm6, %ymm6
vperm2i128 $0x21, %ymm4, %ymm6, %ymm5 # ymm5 = ymm6[2,3],ymm4[0,1]
vpalignr $0x1, %ymm4, %ymm6, %ymm4 # ymm4 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm6[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm6[16]
vpalignr $0x1, %ymm6, %ymm5, %ymm5 # ymm5 = ymm6[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm6[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vmovdqa %ymm6, %ymm9
vmovdqa %ymm6, 0x80(%rsp)
vpshufb %xmm7, %xmm4, %xmm6
vperm2i128 $0x28, %ymm6, %ymm6, %ymm6 # ymm6 = zero,zero,ymm6[0,1]
vpxor %ymm5, %ymm6, %ymm5
vperm2i128 $0x21, %ymm4, %ymm5, %ymm6 # ymm6 = ymm5[2,3],ymm4[0,1]
vpalignr $0x1, %ymm4, %ymm5, %ymm4 # ymm4 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vpalignr $0x1, %ymm5, %ymm6, %ymm5 # ymm5 = ymm5[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm6[0],ymm5[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm6[16]
vpshufb %xmm7, %xmm4, %xmm6
vperm2i128 $0x28, %ymm6, %ymm6, %ymm6 # ymm6 = zero,zero,ymm6[0,1]
vpxor %ymm5, %ymm6, %ymm6
vperm2i128 $0x21, %ymm4, %ymm6, %ymm5 # ymm5 = ymm6[2,3],ymm4[0,1]
vpalignr $0x1, %ymm4, %ymm6, %ymm4 # ymm4 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm6[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm6[16]
vpalignr $0x1, %ymm6, %ymm5, %ymm5 # ymm5 = ymm6[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm6[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vmovdqa %ymm6, %ymm10
vmovdqa %ymm6, 0xe0(%rsp)
vpshufb %xmm7, %xmm4, %xmm6
vperm2i128 $0x28, %ymm6, %ymm6, %ymm6 # ymm6 = zero,zero,ymm6[0,1]
vpxor %ymm5, %ymm6, %ymm5
vperm2i128 $0x21, %ymm4, %ymm5, %ymm6 # ymm6 = ymm5[2,3],ymm4[0,1]
vpalignr $0x1, %ymm4, %ymm5, %ymm4 # ymm4 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vpalignr $0x1, %ymm5, %ymm6, %ymm5 # ymm5 = ymm5[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm6[0],ymm5[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm6[16]
vpshufb %xmm7, %xmm4, %xmm6
vperm2i128 $0x28, %ymm6, %ymm6, %ymm6 # ymm6 = zero,zero,ymm6[0,1]
vpxor %ymm5, %ymm6, %ymm11
addl $0x8, %ebx
vperm2i128 $0x21, %ymm4, %ymm11, %ymm5 # ymm5 = ymm11[2,3],ymm4[0,1]
vpalignr $0x1, %ymm4, %ymm11, %ymm6 # ymm6 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm11[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm11[16]
vpalignr $0x1, %ymm11, %ymm5, %ymm4 # ymm4 = ymm11[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm11[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vmovdqa %ymm11, 0x160(%rsp)
vmovdqa %ymm6, 0x140(%rsp)
vpshufb %xmm7, %xmm6, %xmm5
vperm2i128 $0x28, %ymm5, %ymm5, %ymm5 # ymm5 = zero,zero,ymm5[0,1]
vpxor %ymm4, %ymm5, %ymm4
vmovdqa %ymm4, (%rsp)
vpxor %ymm3, %ymm8, %ymm3
vmovdqa %ymm3, 0x60(%rsp)
vpxor %ymm2, %ymm9, %ymm2
vmovdqa %ymm2, 0xc0(%rsp)
vpxor %ymm1, %ymm10, %ymm1
vmovdqa %ymm1, 0x100(%rsp)
vpxor %ymm0, %ymm11, %ymm0
vmovdqa %ymm0, 0x120(%rsp)
leaq 0x60(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
leaq 0x100(%rsp), %rdx
leaq 0x120(%rsp), %rcx
vzeroupper
callq 0x2080
vmovaps 0x40(%rsp), %ymm0
vxorps 0x60(%rsp), %ymm0, %ymm0
vmovaps %ymm0, 0x60(%rsp)
vmovdqa 0x80(%rsp), %ymm1
vpxor 0xc0(%rsp), %ymm1, %ymm1
vmovdqa %ymm1, 0xc0(%rsp)
vmovdqa 0xe0(%rsp), %ymm2
vpxor 0x100(%rsp), %ymm2, %ymm2
vmovdqa %ymm2, 0x100(%rsp)
vmovaps 0x160(%rsp), %ymm3
vxorps 0x120(%rsp), %ymm3, %ymm3
vmovaps %ymm3, 0x120(%rsp)
vmovaps %ymm0, (%r14,%r13)
vmovdqa %ymm1, 0x20(%r14,%r13)
vmovdqa %ymm2, 0x40(%r14,%r13)
vmovaps %ymm3, 0x60(%r14,%r13)
subq $-0x80, %r13
cmpq %r13, %r12
jg 0xa2cd
jmp 0xa54f
xorl %ebx, %ebx
xorl %r13d, %r13d
movq 0x38(%rsp), %rax
movq %r13, (%rax)
movq 0xb8(%rsp), %rcx
leal 0x3(%rcx), %eax
testl %ecx, %ecx
cmovnsl %ecx, %eax
andl $-0x4, %eax
subl %eax, %ecx
vmovdqa (%r15,%r13), %ymm0
cmpl $0x3, %ecx
je 0xa5a8
cmpl $0x2, %ecx
vmovdqa 0x140(%rsp), %ymm3
je 0xa59c
testl %ecx, %ecx
jne 0xa5c4
testb $0xf, %bl
je 0xa9ca
vmovdqa (%rsp), %ymm1
jmp 0xa9e6
testb $0xf, %bl
je 0xa5d7
vmovdqa (%rsp), %ymm1
jmp 0xa5f3
testb $0xf, %bl
vmovdqa 0x140(%rsp), %ymm3
je 0xa770
vmovdqa (%rsp), %ymm1
jmp 0xa78c
testb $0xf, %bl
je 0xacea
vmovdqa (%rsp), %ymm1
jmp 0xad06
vmovdqa (%rsp), %ymm1
vpxor %xmm2, %xmm2, %xmm2
vpcmpgtb %ymm1, %ymm2, %ymm2
vpaddb %ymm1, %ymm1, %ymm3
vpternlogq $0x78, 0x1f9d(%rip){1to4}, %ymm2, %ymm3 # 0xc590
leal 0x1(%rbx), %eax
vperm2i128 $0x21, %ymm3, %ymm1, %ymm2 # ymm2 = ymm1[2,3],ymm3[0,1]
vpalignr $0x1, %ymm1, %ymm2, %ymm2 # ymm2 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpalignr $0x1, %ymm3, %ymm1, %ymm1 # ymm1 = ymm3[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm1[0],ymm3[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm1[16]
vpshufb 0x1f8f(%rip), %xmm1, %xmm3 # 0xc5a0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm2, %ymm3, %ymm5
testb $0xf, %al
jne 0xa636
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm5, %ymm1, %ymm2
vpaddb %ymm5, %ymm5, %ymm1
vpternlogq $0x78, 0x1f5a(%rip){1to4}, %ymm2, %ymm1 # 0xc590
leal 0x2(%rbx), %eax
vperm2i128 $0x21, %ymm1, %ymm5, %ymm3 # ymm3 = ymm5[2,3],ymm1[0,1]
vpalignr $0x1, %ymm1, %ymm5, %ymm2 # ymm2 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vpalignr $0x1, %ymm5, %ymm3, %ymm1 # ymm1 = ymm5[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm3[0],ymm5[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm3[16]
vpshufb 0x1f4c(%rip), %xmm2, %xmm3 # 0xc5a0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm1, %ymm3, %ymm3
testb $0xf, %al
jne 0xa679
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm3, %ymm1, %ymm1
vpaddb %ymm3, %ymm3, %ymm2
vpternlogq $0x78, 0x1f17(%rip){1to4}, %ymm1, %ymm2 # 0xc590
vmovdqa 0x20(%r15,%r13), %ymm1
addl $0x3, %ebx
vperm2i128 $0x21, %ymm2, %ymm3, %ymm4 # ymm4 = ymm3[2,3],ymm2[0,1]
vpalignr $0x1, %ymm2, %ymm3, %ymm2 # ymm2 = ymm2[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm3[0],ymm2[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm3[16]
vpalignr $0x1, %ymm3, %ymm4, %ymm3 # ymm3 = ymm3[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm4[0],ymm3[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm4[16]
vpshufb 0x1f02(%rip), %xmm2, %xmm4 # 0xc5a0
vperm2i128 $0x28, %ymm4, %ymm4, %ymm4 # ymm4 = zero,zero,ymm4[0,1]
vpxor %ymm3, %ymm4, %ymm4
testb $0xf, %bl
jne 0xa6c4
vpxor %xmm2, %xmm2, %xmm2
vpcmpgtb %ymm4, %ymm2, %ymm3
vpaddb %ymm4, %ymm4, %ymm2
vpternlogq $0x78, 0x1ecc(%rip){1to4}, %ymm3, %ymm2 # 0xc590
vperm2i128 $0x21, %ymm2, %ymm4, %ymm2 # ymm2 = ymm4[2,3],ymm2[0,1]
vpalignr $0x1, %ymm4, %ymm2, %ymm2 # ymm2 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpshufb 0x1ed7(%rip), %xmm4, %xmm3 # 0xc5b0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm2, %ymm3, %ymm2
vmovdqa %ymm2, (%rsp)
vpxor %ymm0, %ymm5, %ymm0
leaq 0x60(%rsp), %rbx
vmovdqa %ymm0, (%rbx)
vpxor %ymm1, %ymm4, %ymm0
leaq 0xc0(%rsp), %r15
vmovdqa %ymm0, (%r15)
movq %rbx, %rdi
movq %r15, %rsi
vmovdqa %ymm5, 0x80(%rsp)
vmovdqa %ymm4, 0x40(%rsp)
vzeroupper
callq 0x2140
vmovaps 0x80(%rsp), %ymm0
vxorps (%rbx), %ymm0, %ymm0
vmovdqa 0x40(%rsp), %ymm1
vpxor (%r15), %ymm1, %ymm1
leaq (%r14,%r13), %rdx
vmovaps %ymm0, (%r14,%r13)
vmovdqa %ymm1, 0x20(%r14,%r13)
movl $0x3f, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movzbl (%rdx,%rcx), %esi
testl %esi, %esi
jne 0xad6f
decq %rcx
cmpq $0x1f, %rcx
jne 0xa756
jmp 0xad81
vmovdqa (%rsp), %ymm1
vpxor %xmm2, %xmm2, %xmm2
vpcmpgtb %ymm1, %ymm2, %ymm2
vpaddb %ymm1, %ymm1, %ymm3
vpternlogq $0x78, 0x1e04(%rip){1to4}, %ymm2, %ymm3 # 0xc590
leal 0x1(%rbx), %eax
vperm2i128 $0x21, %ymm3, %ymm1, %ymm2 # ymm2 = ymm1[2,3],ymm3[0,1]
vpalignr $0x1, %ymm1, %ymm2, %ymm2 # ymm2 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpalignr $0x1, %ymm3, %ymm1, %ymm1 # ymm1 = ymm3[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm1[0],ymm3[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm1[16]
vpshufb 0x1df6(%rip), %xmm1, %xmm3 # 0xc5a0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm2, %ymm3, %ymm6
testb $0xf, %al
jne 0xa7cf
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm6, %ymm1, %ymm2
vpaddb %ymm6, %ymm6, %ymm1
vpternlogq $0x78, 0x1dc1(%rip){1to4}, %ymm2, %ymm1 # 0xc590
leal 0x2(%rbx), %eax
vperm2i128 $0x21, %ymm1, %ymm6, %ymm2 # ymm2 = ymm6[2,3],ymm1[0,1]
vpalignr $0x1, %ymm1, %ymm6, %ymm1 # ymm1 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm6[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm6[16]
vpalignr $0x1, %ymm6, %ymm2, %ymm2 # ymm2 = ymm6[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm6[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpshufb 0x1db3(%rip), %xmm1, %xmm3 # 0xc5a0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm2, %ymm3, %ymm2
testb $0xf, %al
jne 0xa812
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm2, %ymm1, %ymm3
vpaddb %ymm2, %ymm2, %ymm1
vpternlogq $0x78, 0x1d7e(%rip){1to4}, %ymm3, %ymm1 # 0xc590
leal 0x3(%rbx), %eax
vperm2i128 $0x21, %ymm1, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm1[0,1]
vpalignr $0x1, %ymm1, %ymm2, %ymm1 # ymm1 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpalignr $0x1, %ymm2, %ymm3, %ymm2 # ymm2 = ymm2[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm3[0],ymm2[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm3[16]
vpshufb 0x1d70(%rip), %xmm1, %xmm3 # 0xc5a0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm2, %ymm3, %ymm7
testb $0xf, %al
jne 0xa855
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm7, %ymm1, %ymm2
vpaddb %ymm7, %ymm7, %ymm1
vpternlogq $0x78, 0x1d3b(%rip){1to4}, %ymm2, %ymm1 # 0xc590
leal 0x4(%rbx), %eax
vperm2i128 $0x21, %ymm1, %ymm7, %ymm2 # ymm2 = ymm7[2,3],ymm1[0,1]
vpalignr $0x1, %ymm1, %ymm7, %ymm3 # ymm3 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm7[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm7[16]
vpalignr $0x1, %ymm7, %ymm2, %ymm1 # ymm1 = ymm7[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm7[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpshufb 0x1d2d(%rip), %xmm3, %xmm2 # 0xc5a0
vperm2i128 $0x28, %ymm2, %ymm2, %ymm2 # ymm2 = zero,zero,ymm2[0,1]
vpxor %ymm1, %ymm2, %ymm4
testb $0xf, %al
jne 0xa898
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm4, %ymm1, %ymm1
vpaddb %ymm4, %ymm4, %ymm3
vpternlogq $0x78, 0x1cf8(%rip){1to4}, %ymm1, %ymm3 # 0xc590
vmovdqa 0x20(%r15,%r13), %ymm2
vmovdqa 0x40(%r15,%r13), %ymm1
addl $0x5, %ebx
vperm2i128 $0x21, %ymm3, %ymm4, %ymm5 # ymm5 = ymm4[2,3],ymm3[0,1]
vpalignr $0x1, %ymm3, %ymm4, %ymm3 # ymm3 = ymm3[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm4[0],ymm3[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm4[16]
vpalignr $0x1, %ymm4, %ymm5, %ymm4 # ymm4 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vpshufb 0x1cdc(%rip), %xmm3, %xmm5 # 0xc5a0
vperm2i128 $0x28, %ymm5, %ymm5, %ymm5 # ymm5 = zero,zero,ymm5[0,1]
vpxor %ymm4, %ymm5, %ymm5
testb $0xf, %bl
jne 0xa8ea
vpxor %xmm3, %xmm3, %xmm3
vpcmpgtb %ymm5, %ymm3, %ymm4
vpaddb %ymm5, %ymm5, %ymm3
vpternlogq $0x78, 0x1ca6(%rip){1to4}, %ymm4, %ymm3 # 0xc590
vperm2i128 $0x21, %ymm3, %ymm5, %ymm3 # ymm3 = ymm5[2,3],ymm3[0,1]
vpalignr $0x1, %ymm5, %ymm3, %ymm3 # ymm3 = ymm5[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm3[0],ymm5[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm3[16]
vpshufb 0x1cb1(%rip), %xmm5, %xmm4 # 0xc5b0
vperm2i128 $0x28, %ymm4, %ymm4, %ymm4 # ymm4 = zero,zero,ymm4[0,1]
vpxor %ymm3, %ymm4, %ymm3
vmovdqa %ymm3, (%rsp)
vpxor %ymm0, %ymm6, %ymm0
leaq 0x60(%rsp), %rbx
vmovdqa %ymm0, (%rbx)
vpxor %ymm2, %ymm7, %ymm0
leaq 0xc0(%rsp), %r15
vmovdqa %ymm0, (%r15)
vpxor %ymm1, %ymm5, %ymm0
leaq 0x100(%rsp), %r12
vmovdqa %ymm0, (%r12)
movq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
vmovdqa %ymm6, 0xe0(%rsp)
vmovdqa %ymm7, 0x80(%rsp)
vmovdqa %ymm5, 0x40(%rsp)
vzeroupper
callq 0x2190
vmovaps 0xe0(%rsp), %ymm0
vxorps (%rbx), %ymm0, %ymm0
vmovdqa 0x80(%rsp), %ymm1
vpxor (%r15), %ymm1, %ymm1
vmovdqa 0x40(%rsp), %ymm2
vpxor (%r12), %ymm2, %ymm2
vmovaps %ymm0, (%r14,%r13)
leaq (%r14,%r13), %rdx
vmovdqa %ymm1, 0x20(%r14,%r13)
vmovdqa %ymm2, 0x40(%r14,%r13)
movl $0x5f, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movzbl (%rdx,%rcx), %esi
testl %esi, %esi
jne 0xad6f
decq %rcx
cmpq $0x3f, %rcx
jne 0xa9b0
jmp 0xad81
vmovdqa (%rsp), %ymm1
vpxor %xmm2, %xmm2, %xmm2
vpcmpgtb %ymm1, %ymm2, %ymm2
vpaddb %ymm1, %ymm1, %ymm3
vpternlogq $0x78, 0x1baa(%rip){1to4}, %ymm2, %ymm3 # 0xc590
leal 0x1(%rbx), %eax
vperm2i128 $0x21, %ymm3, %ymm1, %ymm2 # ymm2 = ymm1[2,3],ymm3[0,1]
vpalignr $0x1, %ymm1, %ymm2, %ymm2 # ymm2 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpalignr $0x1, %ymm3, %ymm1, %ymm1 # ymm1 = ymm3[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm1[0],ymm3[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm1[16]
vpshufb 0x1b9c(%rip), %xmm1, %xmm3 # 0xc5a0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm2, %ymm3, %ymm7
testb $0xf, %al
jne 0xaa29
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm7, %ymm1, %ymm2
vpaddb %ymm7, %ymm7, %ymm1
vpternlogq $0x78, 0x1b67(%rip){1to4}, %ymm2, %ymm1 # 0xc590
leal 0x2(%rbx), %eax
vperm2i128 $0x21, %ymm1, %ymm7, %ymm2 # ymm2 = ymm7[2,3],ymm1[0,1]
vpalignr $0x1, %ymm1, %ymm7, %ymm1 # ymm1 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm7[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm7[16]
vpalignr $0x1, %ymm7, %ymm2, %ymm2 # ymm2 = ymm7[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm7[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpshufb 0x1b59(%rip), %xmm1, %xmm3 # 0xc5a0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm2, %ymm3, %ymm2
testb $0xf, %al
jne 0xaa6c
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm2, %ymm1, %ymm3
vpaddb %ymm2, %ymm2, %ymm1
vpternlogq $0x78, 0x1b24(%rip){1to4}, %ymm3, %ymm1 # 0xc590
leal 0x3(%rbx), %eax
vperm2i128 $0x21, %ymm1, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm1[0,1]
vpalignr $0x1, %ymm1, %ymm2, %ymm1 # ymm1 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpalignr $0x1, %ymm2, %ymm3, %ymm2 # ymm2 = ymm2[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm3[0],ymm2[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm3[16]
vpshufb 0x1b16(%rip), %xmm1, %xmm3 # 0xc5a0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm2, %ymm3, %ymm8
testb $0xf, %al
jne 0xaab1
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm8, %ymm1, %ymm2
vpaddb %ymm8, %ymm8, %ymm1
vpternlogq $0x78, 0x1adf(%rip){1to4}, %ymm2, %ymm1 # 0xc590
leal 0x4(%rbx), %eax
vperm2i128 $0x21, %ymm1, %ymm8, %ymm2 # ymm2 = ymm8[2,3],ymm1[0,1]
vpalignr $0x1, %ymm1, %ymm8, %ymm1 # ymm1 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm8[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm8[16]
vpalignr $0x1, %ymm8, %ymm2, %ymm2 # ymm2 = ymm8[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm8[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpshufb 0x1ad1(%rip), %xmm1, %xmm3 # 0xc5a0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm2, %ymm3, %ymm2
testb $0xf, %al
jne 0xaaf4
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm2, %ymm1, %ymm3
vpaddb %ymm2, %ymm2, %ymm1
vpternlogq $0x78, 0x1a9c(%rip){1to4}, %ymm3, %ymm1 # 0xc590
leal 0x5(%rbx), %eax
vperm2i128 $0x21, %ymm1, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm1[0,1]
vpalignr $0x1, %ymm1, %ymm2, %ymm1 # ymm1 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpalignr $0x1, %ymm2, %ymm3, %ymm2 # ymm2 = ymm2[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm3[0],ymm2[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm3[16]
vpshufb 0x1a8e(%rip), %xmm1, %xmm3 # 0xc5a0
vperm2i128 $0x28, %ymm3, %ymm3, %ymm3 # ymm3 = zero,zero,ymm3[0,1]
vpxor %ymm2, %ymm3, %ymm9
testb $0xf, %al
jne 0xab39
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm9, %ymm1, %ymm2
vpaddb %ymm9, %ymm9, %ymm1
vpternlogq $0x78, 0x1a57(%rip){1to4}, %ymm2, %ymm1 # 0xc590
leal 0x6(%rbx), %eax
vperm2i128 $0x21, %ymm1, %ymm9, %ymm2 # ymm2 = ymm9[2,3],ymm1[0,1]
vpalignr $0x1, %ymm1, %ymm9, %ymm4 # ymm4 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm9[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm9[16]
vpalignr $0x1, %ymm9, %ymm2, %ymm1 # ymm1 = ymm9[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm9[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpshufb 0x1a49(%rip), %xmm4, %xmm2 # 0xc5a0
vperm2i128 $0x28, %ymm2, %ymm2, %ymm2 # ymm2 = zero,zero,ymm2[0,1]
vpxor %ymm1, %ymm2, %ymm5
testb $0xf, %al
jne 0xab7c
vpxor %xmm1, %xmm1, %xmm1
vpcmpgtb %ymm5, %ymm1, %ymm1
vpaddb %ymm5, %ymm5, %ymm4
vpternlogq $0x78, 0x1a14(%rip){1to4}, %ymm1, %ymm4 # 0xc590
vmovdqa 0x20(%r15,%r13), %ymm3
vmovdqa 0x40(%r15,%r13), %ymm2
vmovdqa 0x60(%r15,%r13), %ymm1
addl $0x7, %ebx
vperm2i128 $0x21, %ymm4, %ymm5, %ymm6 # ymm6 = ymm5[2,3],ymm4[0,1]
vpalignr $0x1, %ymm4, %ymm5, %ymm4 # ymm4 = ymm4[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm5[0],ymm4[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm5[16]
vpalignr $0x1, %ymm5, %ymm6, %ymm5 # ymm5 = ymm5[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm6[0],ymm5[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm6[16]
vpshufb 0x19f1(%rip), %xmm4, %xmm6 # 0xc5a0
vperm2i128 $0x28, %ymm6, %ymm6, %ymm6 # ymm6 = zero,zero,ymm6[0,1]
vpxor %ymm5, %ymm6, %ymm6
testb $0xf, %bl
jne 0xabd5
vpxor %xmm4, %xmm4, %xmm4
vpcmpgtb %ymm6, %ymm4, %ymm5
vpaddb %ymm6, %ymm6, %ymm4
vpternlogq $0x78, 0x19bb(%rip){1to4}, %ymm5, %ymm4 # 0xc590
vperm2i128 $0x21, %ymm4, %ymm6, %ymm4 # ymm4 = ymm6[2,3],ymm4[0,1]
vpalignr $0x1, %ymm6, %ymm4, %ymm4 # ymm4 = ymm6[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm4[0],ymm6[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm4[16]
vpshufb 0x19c6(%rip), %xmm6, %xmm5 # 0xc5b0
vperm2i128 $0x28, %ymm5, %ymm5, %ymm5 # ymm5 = zero,zero,ymm5[0,1]
vpxor %ymm4, %ymm5, %ymm4
vmovdqa %ymm4, (%rsp)
vpxor %ymm0, %ymm7, %ymm0
leaq 0x60(%rsp), %rax
vmovdqa %ymm0, (%rax)
movq %rax, %rdi
vpxor %ymm3, %ymm8, %ymm0
leaq 0xc0(%rsp), %r15
vmovdqa %ymm0, (%r15)
vpxor %ymm2, %ymm9, %ymm0
leaq 0x100(%rsp), %r12
vmovdqa %ymm0, (%r12)
vpxor %ymm1, %ymm6, %ymm0
leaq 0x120(%rsp), %rbx
vmovdqa %ymm0, (%rbx)
movq %r15, %rsi
movq %r12, %rdx
movq %rbx, %rcx
vmovdqa %ymm7, 0x160(%rsp)
vmovdqa %ymm8, 0xe0(%rsp)
vmovdqa %ymm9, 0x80(%rsp)
vmovdqa %ymm6, 0x40(%rsp)
vzeroupper
callq 0x2080
leaq 0x60(%rsp), %rax
vmovaps 0x160(%rsp), %ymm0
vxorps (%rax), %ymm0, %ymm0
vmovdqa 0xe0(%rsp), %ymm1
vpxor (%r15), %ymm1, %ymm1
vmovdqa 0x80(%rsp), %ymm2
vpxor (%r12), %ymm2, %ymm2
vmovdqa 0x40(%rsp), %ymm3
vpxor (%rbx), %ymm3, %ymm3
vmovaps %ymm0, (%r14,%r13)
vmovdqa %ymm1, 0x20(%r14,%r13)
leaq (%r14,%r13), %rdx
vmovdqa %ymm2, 0x40(%r14,%r13)
vmovdqa %ymm3, 0x60(%r14,%r13)
movl $0x7f, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movzbl (%rdx,%rcx), %esi
testl %esi, %esi
jne 0xad6f
decq %rcx
cmpq $0x5f, %rcx
jne 0xacd0
jmp 0xad81
vmovdqa (%rsp), %ymm1
vpxor %xmm2, %xmm2, %xmm2
vpcmpgtb %ymm1, %ymm2, %ymm2
vpaddb %ymm1, %ymm1, %ymm3
vpternlogq $0x78, 0x188a(%rip){1to4}, %ymm2, %ymm3 # 0xc590
vperm2i128 $0x21, %ymm3, %ymm1, %ymm2 # ymm2 = ymm1[2,3],ymm3[0,1]
vpalignr $0x1, %ymm1, %ymm2, %ymm2 # ymm2 = ymm1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],ymm2[0],ymm1[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],ymm2[16]
vpshufb 0x1895(%rip), %xmm1, %xmm1 # 0xc5b0
vperm2i128 $0x28, %ymm1, %ymm1, %ymm1 # ymm1 = zero,zero,ymm1[0,1]
vpxor %ymm2, %ymm1, %ymm1
vmovdqa %ymm1, (%rsp)
vpxor %ymm0, %ymm1, %ymm0
leaq 0x60(%rsp), %rbx
vmovdqa %ymm0, (%rbx)
movq %rbx, %rdi
vzeroupper
callq 0x21a0
vmovaps (%rsp), %ymm0
vxorps (%rbx), %ymm0, %ymm0
leaq (%r14,%r13), %rdx
vmovaps %ymm0, (%r14,%r13)
movl $0x1f, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movzbl (%rdx,%rcx), %esi
testl %esi, %esi
jne 0xad6f
addq $-0x1, %rcx
jb 0xad5f
jmp 0xad81
cmpl $0x80, %esi
jne 0xad81
movq 0x38(%rsp), %rax
addq %rcx, (%rax)
xorl %eax, %eax
leaq -0x28(%rbp), %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
vzeroupper
retq
nop