// File: /workspace/github_c_makefile_star2_O3/nh13[P]ksw/src/parasail/src/nw_trace_scan_avx2_256_8.c
// Function: parasail_nw_trace_scan_profile_avx2_256_8
parasail_result_t* PNAME(
        const parasail_profile_t * const restrict profile,
        const char * const restrict s2, const int s2Len,
        const int open, const int gap)
{
    /* declare local variables */
    int32_t i = 0;
    int32_t j = 0;
    int32_t k = 0;
    int32_t s1Len = 0;
    int32_t end_query = 0;
    int32_t end_ref = 0;
    const parasail_matrix_t *matrix = NULL;
    int32_t segWidth = 0;
    int32_t segLen = 0;
    int32_t offset = 0;
    int32_t position = 0;
    __m256i* restrict pvP = NULL;
    __m256i* restrict pvE = NULL;
    int8_t* restrict boundary = NULL;
    __m256i* restrict pvHt = NULL;
    __m256i* restrict pvH = NULL;
    __m256i* restrict pvGapper = NULL;
    __m256i vGapO;
    __m256i vGapE;
    int8_t NEG_LIMIT = 0;
    int8_t POS_LIMIT = 0;
    __m256i vZero;
    int8_t score = 0;
    __m256i vNegLimit;
    __m256i vPosLimit;
    __m256i vSaturationCheckMin;
    __m256i vSaturationCheckMax;
    __m256i vNegInfFront;
    __m256i vSegLenXgap;
    parasail_result_t *result = NULL;
    __m256i vTIns;
    __m256i vTDel;
    __m256i vTDiag;
    __m256i vTDiagE;
    __m256i vTInsE;
    __m256i vTDiagF;
    __m256i vTDelF;

    /* validate inputs */
    PARASAIL_CHECK_NULL(profile);
    PARASAIL_CHECK_NULL(profile->profile8.score);
    PARASAIL_CHECK_NULL(profile->matrix);
    PARASAIL_CHECK_GT0(profile->s1Len);
    PARASAIL_CHECK_NULL(s2);
    PARASAIL_CHECK_GT0(s2Len);
    PARASAIL_CHECK_GE0(open);
    PARASAIL_CHECK_GE0(gap);

    /* initialize stack variables */
    i = 0;
    j = 0;
    k = 0;
    s1Len = profile->s1Len;
    end_query = s1Len-1;
    end_ref = s2Len-1;
    matrix = profile->matrix;
    segWidth = 32; /* number of values in vector unit */
    segLen = (s1Len + segWidth - 1) / segWidth;
    offset = (s1Len - 1) % segLen;
    position = (segWidth - 1) - (s1Len - 1) / segLen;
    pvP = (__m256i*)profile->profile8.score;
    vGapO = _mm256_set1_epi8(open);
    vGapE = _mm256_set1_epi8(gap);
    NEG_LIMIT = (-open < matrix->min ? INT8_MIN + open : INT8_MIN - matrix->min) + 1;
    POS_LIMIT = INT8_MAX - matrix->max - 1;
    vZero = _mm256_setzero_si256();
    score = NEG_LIMIT;
    vNegLimit = _mm256_set1_epi8(NEG_LIMIT);
    vPosLimit = _mm256_set1_epi8(POS_LIMIT);
    vSaturationCheckMin = vPosLimit;
    vSaturationCheckMax = vNegLimit;
    vNegInfFront = vZero;
    vTIns  = _mm256_set1_epi8(PARASAIL_INS);
    vTDel  = _mm256_set1_epi8(PARASAIL_DEL);
    vTDiag = _mm256_set1_epi8(PARASAIL_DIAG);
    vTDiagE = _mm256_set1_epi8(PARASAIL_DIAG_E);
    vTInsE = _mm256_set1_epi8(PARASAIL_INS_E);
    vTDiagF = _mm256_set1_epi8(PARASAIL_DIAG_F);
    vTDelF = _mm256_set1_epi8(PARASAIL_DEL_F);
    vNegInfFront = _mm256_insert_epi8_rpl(vNegInfFront, NEG_LIMIT, 0);
    vSegLenXgap = _mm256_adds_epi8(vNegInfFront,
            _mm256_slli_si256_rpl(_mm256_set1_epi8(-segLen*gap), 1));

    /* initialize result */
    result = parasail_result_new_trace(segLen, s2Len, 32, sizeof(__m256i));
    if (!result) return NULL;

    /* set known flags */
    result->flag |= PARASAIL_FLAG_NW | PARASAIL_FLAG_SCAN
        | PARASAIL_FLAG_TRACE
        | PARASAIL_FLAG_BITS_8 | PARASAIL_FLAG_LANES_32;

    /* initialize heap variables */
    pvE = parasail_memalign___m256i(32, segLen);
    boundary = parasail_memalign_int8_t(32, s2Len+1);
    pvHt= parasail_memalign___m256i(32, segLen);
    pvH = parasail_memalign___m256i(32, segLen);
    pvGapper = parasail_memalign___m256i(32, segLen);

    /* validate heap variables */
    if (!pvE) return NULL;
    if (!boundary) return NULL;
    if (!pvHt) return NULL;
    if (!pvH) return NULL;
    if (!pvGapper) return NULL;

    /* initialize H and E */
    {
        int32_t index = 0;
        for (i=0; i<segLen; ++i) {
            int32_t segNum = 0;
            __m256i_8_t h;
            __m256i_8_t e;
            for (segNum=0; segNum<segWidth; ++segNum) {
                int64_t tmp = -open-gap*(segNum*segLen+i);
                h.v[segNum] = tmp < INT8_MIN ? INT8_MIN : tmp;
                tmp = tmp - open;
                e.v[segNum] = tmp < INT8_MIN ? INT8_MIN : tmp;
            }
            _mm256_store_si256(&pvH[index], h.m);
            _mm256_store_si256(&pvE[index], e.m);
            ++index;
        }
    }

    /* initialize uppder boundary */
    {
        boundary[0] = 0;
        for (i=1; i<=s2Len; ++i) {
            int64_t tmp = -open-gap*(i-1);
            boundary[i] = tmp < INT8_MIN ? INT8_MIN : tmp;
        }
    }

    {
        __m256i vGapper = _mm256_subs_epi8(vZero,vGapO);
        for (i=segLen-1; i>=0; --i) {
            _mm256_store_si256(pvGapper+i, vGapper);
            vGapper = _mm256_subs_epi8(vGapper, vGapE);
        }
    }

    /* outer loop over database sequence */
    for (j=0; j<s2Len; ++j) {
        __m256i vE;
        __m256i vE_ext;
        __m256i vE_opn;
        __m256i vHt;
        __m256i vF;
        __m256i vF_ext;
        __m256i vF_opn;
        __m256i vH;
        __m256i vHp;
        __m256i *pvW;
        __m256i vW;
        __m256i case1;
        __m256i case2;
        __m256i vGapper;
        __m256i vT;
        __m256i vET;
        __m256i vFT;

        /* calculate E */
        /* calculate Ht */
        /* calculate F and H first pass */
        vHp = _mm256_load_si256(pvH+(segLen-1));
        vHp = _mm256_slli_si256_rpl(vHp, 1);
        vHp = _mm256_insert_epi8_rpl(vHp, boundary[j], 0);
        pvW = pvP + matrix->mapper[(unsigned char)s2[j]]*segLen;
        vHt = _mm256_subs_epi8(vNegLimit, pvGapper[0]);
        vF = vNegLimit;
        for (i=0; i<segLen; ++i) {
            vH = _mm256_load_si256(pvH+i);
            vE = _mm256_load_si256(pvE+i);
            vW = _mm256_load_si256(pvW+i);
            vGapper = _mm256_load_si256(pvGapper+i);
            vE_opn = _mm256_subs_epi8(vH, vGapO);
            vE_ext = _mm256_subs_epi8(vE, vGapE);
            case1 = _mm256_cmpgt_epi8(vE_opn, vE_ext);
            vET = _mm256_blendv_epi8(vTInsE, vTDiagE, case1);
            arr_store(result->trace->trace_table, vET, i, segLen, j);
            vE = _mm256_max_epi8(vE_opn, vE_ext);
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vE);
            vGapper = _mm256_adds_epi8(vHt, vGapper);
            vF = _mm256_max_epi8(vF, vGapper);
            vHp = _mm256_adds_epi8(vHp, vW);
            vHt = _mm256_max_epi8(vE, vHp);
            _mm256_store_si256(pvE+i, vE);
            _mm256_store_si256(pvHt+i, vHt);
            _mm256_store_si256(pvH+i, vHp);
            vHp = vH;
        }

        /* pseudo prefix scan on F and H */
        vHt = _mm256_slli_si256_rpl(vHt, 1);
        vHt = _mm256_insert_epi8_rpl(vHt, boundary[j+1], 0);
        vGapper = _mm256_load_si256(pvGapper);
        vGapper = _mm256_adds_epi8(vHt, vGapper);
        vF = _mm256_max_epi8(vF, vGapper);
        for (i=0; i<segWidth-2; ++i) {
            __m256i vFt = _mm256_slli_si256_rpl(vF, 1);
            vFt = _mm256_adds_epi8(vFt, vSegLenXgap);
            vF = _mm256_max_epi8(vF, vFt);
        }

        /* calculate final H */
        vF = _mm256_slli_si256_rpl(vF, 1);
        vF = _mm256_adds_epi8(vF, vNegInfFront);
        vH = _mm256_max_epi8(vF, vHt);
        for (i=0; i<segLen; ++i) {
            vET = arr_load(result->trace->trace_table, i, segLen, j);
            vHp = _mm256_load_si256(pvH+i);
            vHt = _mm256_load_si256(pvHt+i);
            vF_opn = _mm256_subs_epi8(vH, vGapO);
            vF_ext = _mm256_subs_epi8(vF, vGapE);
            vF = _mm256_max_epi8(vF_opn, vF_ext);
            case1 = _mm256_cmpgt_epi8(vF_opn, vF_ext);
            vFT = _mm256_blendv_epi8(vTDelF, vTDiagF, case1);
            vH = _mm256_max_epi8(vHt, vF);
            case1 = _mm256_cmpeq_epi8(vH, vHp);
            case2 = _mm256_cmpeq_epi8(vH, vF);
            vT = _mm256_blendv_epi8(
                    _mm256_blendv_epi8(vTIns, vTDel, case2),
                    vTDiag, case1);
            vT = _mm256_or_si256(vT, vET);
            vT = _mm256_or_si256(vT, vFT);
            arr_store(result->trace->trace_table, vT, i, segLen, j);
            _mm256_store_si256(pvH+i, vH);
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vH);
            vSaturationCheckMin = _mm256_min_epi8(vSaturationCheckMin, vF);
            vSaturationCheckMax = _mm256_max_epi8(vSaturationCheckMax, vH);
        }
    }

    /* extract last value from the last column */
    {
        __m256i vH = _mm256_load_si256(pvH + offset);
        for (k=0; k<position; ++k) {
            vH = _mm256_slli_si256_rpl(vH, 1);
        }
        score = (int8_t) _mm256_extract_epi8_rpl (vH, 31);
    }

    if (_mm256_movemask_epi8(_mm256_or_si256(
            _mm256_cmplt_epi8_rpl(vSaturationCheckMin, vNegLimit),
            _mm256_cmpgt_epi8(vSaturationCheckMax, vPosLimit)))) {
        result->flag |= PARASAIL_FLAG_SATURATED;
        score = 0;
        end_query = 0;
        end_ref = 0;
    }

    result->score = score;
    result->end_query = end_query;
    result->end_ref = end_ref;

    parasail_free(pvGapper);
    parasail_free(pvH);
    parasail_free(pvHt);
    parasail_free(boundary);
    parasail_free(pvE);

    return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x248, %rsp            # imm = 0x248
movq %rsi, 0x50(%rsp)
testq %rdi, %rdi
je 0x5ae36a
movq 0x18(%rdi), %rax
movq %rax, 0x58(%rsp)
testq %rax, %rax
je 0x5ae371
movq 0x10(%rdi), %rax
movq %rax, 0x48(%rsp)
testq %rax, %rax
je 0x5ae378
movl 0x8(%rdi), %r15d
testl %r15d, %r15d
jle 0x5ae37f
cmpq $0x0, 0x50(%rsp)
je 0x5ae386
movl %edx, %r9d
testl %edx, %edx
jle 0x5ae38d
testl %ecx, %ecx
js 0x5ae394
testl %r8d, %r8d
js 0x5ae39b
movl %r8d, 0x1c(%rsp)
leal -0x1(%r15), %ebp
addq $0x1f, %r15
shrq $0x5, %r15
movl %ebp, %eax
xorl %edx, %edx
divl %r15d
movl %eax, %r14d
movl %edx, %r12d
movq 0x48(%rsp), %rdx
movl 0x20(%rdx), %eax
movl %eax, %esi
negb %sil
movzbl %sil, %esi
movl %ecx, %r13d
negl %r13d
cmpl %r13d, %eax
movl %ecx, 0x20(%rsp)
cmovgl %ecx, %esi
movl %esi, 0x80(%rsp)
movb $0x7e, %al
subb 0x1c(%rdx), %al
movl %eax, 0x60(%rsp)
movl $0x20, %edx
movl $0x20, %ecx
movl %r15d, %edi
movl %r9d, %esi
movq %r9, 0x40(%rsp)
callq 0x20adf4
testq %rax, %rax
je 0x5ae3a0
movq %rax, %rbx
movl %r13d, 0xc(%rsp)
movl %r12d, 0x18(%rsp)
movl %r14d, 0x10(%rsp)
movl %ebp, 0x14(%rsp)
orl $0x20180401, 0xc(%rax)  # imm = 0x20180401
movl $0x20, %edi
movq %r15, %rsi
callq 0x4f1904
movq %rax, %r12
movq 0x40(%rsp), %rax
leal 0x1(%rax), %esi
movl $0x20, %edi
callq 0x20a620
movq %rax, %r13
movl $0x20, %edi
movq %r15, %rsi
callq 0x4f1904
movq %rax, %rbp
movl $0x20, %edi
movq %r15, %rsi
callq 0x4f1904
movq %rax, %r14
movl $0x20, %edi
movq %r15, %rsi
callq 0x4f1904
testq %r12, %r12
sete %cl
testq %r13, %r13
sete %dl
orb %cl, %dl
testq %rbp, %rbp
sete %cl
testq %r14, %r14
sete %sil
orb %cl, %sil
orb %dl, %sil
testq %rax, %rax
sete %cl
orb %sil, %cl
jne 0x5ae3a0
movq 0x40(%rsp), %r10
leal -0x1(%r10), %ecx
movl %ecx, 0x8(%rsp)
movl $0x1f, %edx
subl 0x10(%rsp), %edx
movl 0x20(%rsp), %esi
vmovd %esi, %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x1a0(%rsp)
movl 0x1c(%rsp), %r11d
vmovd %r11d, %xmm0
vpbroadcastb %xmm0, %ymm3
movl 0x80(%rsp), %ecx
addb $-0x7f, %cl
vmovd %ecx, %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x160(%rsp)
vmovd 0x60(%rsp), %xmm0
vpbroadcastb %xmm0, %ymm0
vmovdqu %ymm0, 0x1c0(%rsp)
movzbl %cl, %ecx
vmovd %ecx, %xmm1
movl %r15d, %ecx
imull %r11d, %ecx
negb %cl
vmovd %ecx, %xmm0
vpbroadcastb %xmm0, %ymm0
vpand 0x80bd5(%rip), %ymm0, %ymm0 # 0x62dee0
vmovdqu %ymm1, 0x220(%rsp)
vpaddsb %ymm0, %ymm1, %ymm0
vmovdqu %ymm0, 0x200(%rsp)
movl %esi, %ecx
movl %r15d, %esi
movl %r11d, %edi
movslq 0xc(%rsp), %r8
vmovq %rdi, %xmm0
vpbroadcastq %xmm0, %ymm0
vmovq %r8, %xmm1
vmovq %rsi, %xmm4
vpbroadcastq %xmm4, %ymm4
vpmuldq 0x80bb0(%rip), %ymm4, %ymm2 # 0x62df00
vmovdqu %ymm2, 0xc0(%rsp)
vpmuldq 0x80bbe(%rip), %ymm4, %ymm5 # 0x62df20
vmovdqu %ymm5, 0x60(%rsp)
vpmuldq 0x80bcf(%rip), %ymm4, %ymm5 # 0x62df40
vmovdqu %ymm5, 0x180(%rsp)
vpmuldq 0x80bdd(%rip), %ymm4, %ymm5 # 0x62df60
vmovdqu %ymm5, 0x140(%rsp)
vpmuldq 0x80a4b(%rip), %ymm4, %ymm5 # 0x62dde0
vmovdqu %ymm5, 0x120(%rsp)
vpmuldq 0x80a59(%rip), %ymm4, %ymm5 # 0x62de00
vmovdqu %ymm5, 0x100(%rsp)
vpmuldq 0x80887(%rip), %ymm4, %ymm5 # 0x62dc40
vmovdqu %ymm5, 0xe0(%rsp)
vpbroadcastq %xmm1, %ymm1
vmovdqu %ymm1, 0x1e0(%rsp)
vpmuldq 0x80767(%rip), %ymm4, %ymm1 # 0x62db40
vmovdqu %ymm1, 0xa0(%rsp)
vmovq %rcx, %xmm1
vpbroadcastq %xmm1, %ymm2
xorl %edi, %edi
movq %r14, %r8
movq %r12, %r9
vpbroadcastq 0x80bc3(%rip), %ymm14 # 0x62dfc0
vbroadcastsd 0x80bc2(%rip), %ymm15 # 0x62dfc8
vmovq %rdi, %xmm1
vpbroadcastq %xmm1, %ymm5
vpaddq 0xe0(%rsp), %ymm5, %ymm1
vpaddq 0xa0(%rsp), %ymm5, %ymm4
vpaddq 0x100(%rsp), %ymm5, %ymm6
vpaddq 0x120(%rsp), %ymm5, %ymm7
vpaddq 0x140(%rsp), %ymm5, %ymm8
vpaddq 0x180(%rsp), %ymm5, %ymm9
vpaddq 0x60(%rsp), %ymm5, %ymm10
vpaddq 0xc0(%rsp), %ymm5, %ymm5
vpmuludq %ymm0, %ymm5, %ymm12
vpsrlq $0x20, %ymm5, %ymm5
vpmuludq %ymm0, %ymm5, %ymm5
vpsllq $0x20, %ymm5, %ymm5
vpaddq %ymm5, %ymm12, %ymm11
vpmuludq %ymm0, %ymm10, %ymm12
vpsrlq $0x20, %ymm10, %ymm10
vpmuludq %ymm0, %ymm10, %ymm10
vpsllq $0x20, %ymm10, %ymm10
vpaddq %ymm10, %ymm12, %ymm5
vmovdqu %ymm5, 0x20(%rsp)
vpmuludq %ymm0, %ymm9, %ymm10
vpsrlq $0x20, %ymm9, %ymm9
vpmuludq %ymm0, %ymm9, %ymm9
vpsllq $0x20, %ymm9, %ymm9
vpaddq %ymm9, %ymm10, %ymm12
vpmuludq %ymm0, %ymm8, %ymm9
vpsrlq $0x20, %ymm8, %ymm8
vpmuludq %ymm0, %ymm8, %ymm8
vpsllq $0x20, %ymm8, %ymm8
vpaddq %ymm8, %ymm9, %ymm5
vpmuludq %ymm0, %ymm7, %ymm8
vpsrlq $0x20, %ymm7, %ymm7
vpmuludq %ymm0, %ymm7, %ymm7
vpsllq $0x20, %ymm7, %ymm7
vpaddq %ymm7, %ymm8, %ymm9
vpmuludq %ymm0, %ymm6, %ymm7
vpsrlq $0x20, %ymm6, %ymm6
vpmuludq %ymm0, %ymm6, %ymm6
vpsllq $0x20, %ymm6, %ymm6
vpaddq %ymm6, %ymm7, %ymm6
vpmuludq %ymm0, %ymm4, %ymm7
vpsrlq $0x20, %ymm4, %ymm4
vpmuludq %ymm0, %ymm4, %ymm4
vpsllq $0x20, %ymm4, %ymm4
vpaddq %ymm4, %ymm7, %ymm4
vpmuludq %ymm0, %ymm1, %ymm7
vpsrlq $0x20, %ymm1, %ymm1
vpmuludq %ymm0, %ymm1, %ymm1
vpsllq $0x20, %ymm1, %ymm1
vpaddq %ymm1, %ymm7, %ymm1
vmovdqu 0x1e0(%rsp), %ymm10
vpsubq %ymm1, %ymm10, %ymm7
vpsubq %ymm4, %ymm10, %ymm8
vpsubq %ymm6, %ymm10, %ymm1
vpsubq %ymm9, %ymm10, %ymm4
vpsubq %ymm11, %ymm10, %ymm9
vpcmpgtq %ymm14, %ymm9, %ymm6
vblendvpd %ymm6, %ymm9, %ymm14, %ymm6
vmovupd %ymm6, 0x80(%rsp)
vpsubq %ymm5, %ymm10, %ymm6
vpcmpgtq %ymm14, %ymm4, %ymm5
vblendvpd %ymm5, %ymm4, %ymm14, %ymm11
vpsubq %ymm12, %ymm10, %ymm12
vpcmpgtq %ymm14, %ymm8, %ymm5
vblendvpd %ymm5, %ymm8, %ymm14, %ymm13
vpsubq 0x20(%rsp), %ymm10, %ymm5
vpcmpgtq %ymm14, %ymm7, %ymm10
vblendvpd %ymm10, %ymm7, %ymm14, %ymm10
vandpd %ymm15, %ymm10, %ymm10
vandpd %ymm15, %ymm13, %ymm13
vpackusdw %ymm10, %ymm13, %ymm10
vpcmpgtq %ymm14, %ymm1, %ymm13
vblendvpd %ymm13, %ymm1, %ymm14, %ymm13
vandpd %ymm15, %ymm13, %ymm13
vandpd %ymm15, %ymm11, %ymm11
vpackusdw %ymm11, %ymm13, %ymm11
vpcmpgtq %ymm14, %ymm12, %ymm13
vblendvpd %ymm13, %ymm12, %ymm14, %ymm13
vpermq $0xd8, %ymm10, %ymm10   # ymm10 = ymm10[0,2,1,3]
vpermq $0xd8, %ymm11, %ymm11   # ymm11 = ymm11[0,2,1,3]
vpackusdw %ymm11, %ymm10, %ymm10
vmovdqu %ymm10, 0x20(%rsp)
vpcmpgtq %ymm14, %ymm6, %ymm10
vblendvpd %ymm10, %ymm6, %ymm14, %ymm10
vandpd %ymm15, %ymm10, %ymm10
vandpd %ymm15, %ymm13, %ymm11
vpackusdw %ymm11, %ymm10, %ymm10
vpcmpgtq %ymm14, %ymm5, %ymm11
vblendvpd %ymm11, %ymm5, %ymm14, %ymm11
vandpd %ymm15, %ymm11, %ymm11
vandpd 0x80(%rsp), %ymm15, %ymm13
vpackusdw %ymm13, %ymm11, %ymm11
vpermq $0xd8, %ymm10, %ymm10   # ymm10 = ymm10[0,2,1,3]
vpermq $0xd8, %ymm11, %ymm11   # ymm11 = ymm11[0,2,1,3]
vpackusdw %ymm11, %ymm10, %ymm10
vpsubq %ymm2, %ymm7, %ymm11
vpsubq %ymm2, %ymm8, %ymm8
vpsubq %ymm2, %ymm9, %ymm7
vpcmpgtq %ymm14, %ymm7, %ymm9
vblendvpd %ymm9, %ymm7, %ymm14, %ymm7
vpsubq %ymm2, %ymm5, %ymm5
vpcmpgtq %ymm14, %ymm5, %ymm9
vblendvpd %ymm9, %ymm5, %ymm14, %ymm5
vpsubq %ymm2, %ymm12, %ymm9
vpcmpgtq %ymm14, %ymm9, %ymm12
vblendvpd %ymm12, %ymm9, %ymm14, %ymm9
vpsubq %ymm2, %ymm6, %ymm6
vpcmpgtq %ymm14, %ymm6, %ymm12
vblendvpd %ymm12, %ymm6, %ymm14, %ymm6
vpsubq %ymm2, %ymm4, %ymm4
vpcmpgtq %ymm14, %ymm4, %ymm12
vblendvpd %ymm12, %ymm4, %ymm14, %ymm4
vpsubq %ymm2, %ymm1, %ymm1
vpcmpgtq %ymm14, %ymm1, %ymm12
vblendvpd %ymm12, %ymm1, %ymm14, %ymm1
vpcmpgtq %ymm14, %ymm8, %ymm12
vblendvpd %ymm12, %ymm8, %ymm14, %ymm8
vpcmpgtq %ymm14, %ymm11, %ymm12
vblendvpd %ymm12, %ymm11, %ymm14, %ymm11
vpermq $0xd8, 0x20(%rsp), %ymm12 # ymm12 = mem[0,2,1,3]
vpermq $0xd8, %ymm10, %ymm10   # ymm10 = ymm10[0,2,1,3]
vpackuswb %ymm10, %ymm12, %ymm10
vandpd %ymm15, %ymm11, %ymm11
vandpd %ymm15, %ymm8, %ymm8
vpackusdw %ymm11, %ymm8, %ymm8
vandpd %ymm1, %ymm15, %ymm1
vandpd %ymm4, %ymm15, %ymm4
vpackusdw %ymm4, %ymm1, %ymm1
vpermq $0xd8, %ymm8, %ymm4     # ymm4 = ymm8[0,2,1,3]
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpackusdw %ymm1, %ymm4, %ymm1
vandpd %ymm6, %ymm15, %ymm4
vandpd %ymm15, %ymm9, %ymm6
vpackusdw %ymm6, %ymm4, %ymm4
vandpd %ymm5, %ymm15, %ymm5
vandpd %ymm7, %ymm15, %ymm6
vpackusdw %ymm6, %ymm5, %ymm5
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpermq $0xd8, %ymm5, %ymm5     # ymm5 = ymm5[0,2,1,3]
vpackusdw %ymm5, %ymm4, %ymm4
vpermq $0xd8, %ymm10, %ymm5    # ymm5 = ymm10[0,2,1,3]
vmovdqa %ymm5, (%r8)
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vpermq $0xd8, %ymm4, %ymm4     # ymm4 = ymm4[0,2,1,3]
vpackuswb %ymm4, %ymm1, %ymm1
vpermq $0xd8, %ymm1, %ymm1     # ymm1 = ymm1[0,2,1,3]
vmovdqa %ymm1, (%r9)
incq %rdi
addq $0x20, %r9
addq $0x20, %r8
cmpq %rdi, %r15
jne 0x5ad406
movb $0x0, (%r13)
movl %r10d, %edi
addl $0x1f, %r10d
andl $-0x20, %r10d
leaq -0x1(%rdi), %rcx
vmovq %rcx, %xmm0
vpbroadcastq %xmm0, %ymm6
vmovd %r11d, %xmm0
vpbroadcastd %xmm0, %ymm0
vmovdqu %ymm0, 0x140(%rsp)
vmovss 0xc(%rsp), %xmm0
vbroadcastss %xmm0, %ymm0
vmovups %ymm0, 0x120(%rsp)
vpmovsxbd 0x80859(%rip), %ymm2 # 0x62dfd0
vmovaps 0x80821(%rip), %ymm0    # 0x62dfa0
vmovups %ymm0, 0x20(%rsp)
vpmovsxbd 0x806ba(%rip), %ymm9 # 0x62de48
vpmovsxbd 0x80539(%rip), %ymm7 # 0x62dcd0
xorl %r8d, %r8d
vpbroadcastq 0x803dd(%rip), %xmm13 # 0x62db80
vbroadcastss 0x8082c(%rip), %ymm0 # 0x62dfd8
vmovups %ymm0, 0x100(%rsp)
vbroadcastss 0x8081e(%rip), %ymm0 # 0x62dfdc
vmovups %ymm0, 0xe0(%rsp)
vpbroadcastq 0x803b0(%rip), %ymm10 # 0x62db80
vpbroadcastd 0x803e7(%rip), %xmm12 # 0x62dbc0
vpbroadcastd 0x807fe(%rip), %ymm0 # 0x62dfe0
vmovdqu %ymm0, 0xa0(%rsp)
vmovdqu %ymm12, 0xc0(%rsp)
vmovdqa %ymm10, %ymm12
vmovq %r8, %xmm1
vpbroadcastq %xmm1, %ymm0
vmovdqu %ymm0, 0x180(%rsp)
vpor 0x8032c(%rip), %ymm0, %ymm8 # 0x62db40
vpxor %xmm6, %xmm13, %xmm4
vpxor %xmm13, %xmm8, %xmm5
vmovdqu %ymm7, 0x60(%rsp)
vpaddd 0x80a35(%rip), %ymm7, %ymm7 # 0x62e260
vpcmpeqd %ymm10, %ymm10, %ymm10
vmovdqu %ymm9, 0x80(%rsp)
vpaddd %ymm10, %ymm9, %ymm15
vmovdqa %ymm2, %ymm11
vpaddd %ymm2, %ymm10, %ymm9
vmovdqu 0x140(%rsp), %ymm2
vpmulld %ymm2, %ymm9, %ymm9
vpmulld %ymm2, %ymm15, %ymm15
vpmulld %ymm2, %ymm7, %ymm7
vpcmpgtq %xmm4, %xmm5, %xmm4
vmovdqu 0x120(%rsp), %ymm10
vpsubd %ymm7, %ymm10, %ymm5
vpsubd %ymm15, %ymm10, %ymm7
vmovdqu 0x20(%rsp), %ymm1
vpcmpeqd %ymm14, %ymm14, %ymm14
vmovdqu 0x100(%rsp), %ymm0
vpmaxsd %ymm0, %ymm7, %ymm7
vpmaxsd %ymm0, %ymm5, %ymm5
vmovdqu 0xe0(%rsp), %ymm15
vpand %ymm5, %ymm15, %ymm5
vpand %ymm7, %ymm15, %ymm7
vpackusdw %ymm7, %ymm5, %ymm5
vpaddd %ymm1, %ymm14, %ymm7
vpcmpeqd %xmm14, %xmm14, %xmm14
vpmulld %ymm2, %ymm7, %ymm7
vpsubd %ymm7, %ymm10, %ymm7
vpsubd %ymm9, %ymm10, %ymm9
vpmaxsd %ymm0, %ymm9, %ymm9
vpmaxsd %ymm0, %ymm7, %ymm7
vpand %ymm7, %ymm15, %ymm7
vpand %ymm15, %ymm9, %ymm9
vpackusdw %ymm9, %ymm7, %ymm7
vpermq $0xd8, %ymm5, %ymm5     # ymm5 = ymm5[0,2,1,3]
vpermq $0xd8, %ymm7, %ymm7     # ymm7 = ymm7[0,2,1,3]
vpackuswb %ymm7, %ymm5, %ymm5
vpackssdw %xmm4, %xmm4, %xmm4
vpxor %xmm4, %xmm14, %xmm4
vpackssdw %xmm4, %xmm4, %xmm4
vpacksswb %xmm4, %xmm4, %xmm4
vmovd %xmm4, %ecx
vpermq $0xd8, %ymm5, %ymm7     # ymm7 = ymm5[0,2,1,3]
testb $0x1, %cl
je 0x5ad90f
vpextrb $0x0, %xmm7, 0x1(%r13,%r8)
vpxor %xmm6, %xmm13, %xmm4
vpxor %xmm13, %xmm8, %xmm5
vpcmpgtq %xmm4, %xmm5, %xmm4
vpackssdw %xmm4, %xmm4, %xmm4
vpxor %xmm4, %xmm14, %xmm4
vpackssdw %xmm4, %xmm4, %xmm4
vpacksswb %xmm4, %xmm4, %xmm4
vpextrb $0x1, %xmm4, %ecx
testb $0x1, %cl
vmovdqa %ymm12, %ymm10
je 0x5ad945
vpextrb $0x1, %xmm7, 0x2(%r13,%r8)
vpxor %ymm6, %ymm10, %ymm4
vpxor %ymm10, %ymm8, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm8     # ymm8 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0x80900(%rip), %ymm8, %ymm8 # 0x62e260
vmovdqu 0xc0(%rsp), %ymm12
vpermd %ymm8, %ymm12, %ymm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0x2, %xmm8, %ecx
testb $0x1, %cl
vmovdqa %ymm11, %ymm2
vmovdqu 0x180(%rsp), %ymm0
je 0x5ad998
vpextrb $0x2, %xmm7, 0x3(%r13,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm14, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x3, %xmm5, %ecx
testb $0x1, %cl
je 0x5ad9c1
vpextrb $0x3, %xmm7, 0x4(%r13,%r8)
vpor 0x80277(%rip), %ymm0, %ymm8 # 0x62dc40
vpxor %xmm6, %xmm13, %xmm5
vpxor %xmm13, %xmm8, %xmm9
vpcmpgtq %xmm5, %xmm9, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm14, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpbroadcastw %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x4, %xmm5, %ecx
testb $0x1, %cl
je 0x5ada0b
vpextrb $0x4, %xmm7, 0x5(%r13,%r8)
vpxor %xmm6, %xmm13, %xmm5
vpxor %xmm13, %xmm8, %xmm9
vpcmpgtq %xmm5, %xmm9, %xmm5
vpshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
vpxor %xmm5, %xmm14, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpbroadcastd %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x5, %xmm5, %ecx
testb $0x1, %cl
je 0x5ada4e
vpextrb $0x5, %xmm7, 0x6(%r13,%r8)
vpxor %ymm10, %ymm8, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpackssdw %ymm5, %ymm0, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0x6, %xmm8, %ecx
testb $0x1, %cl
je 0x5ada84
vpextrb $0x6, %xmm7, 0x7(%r13,%r8)
vpshufhw $0x84, %ymm5, %ymm5     # ymm5 = ymm5[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vextracti128 $0x1, %ymm5, %xmm5
vpxor %xmm5, %xmm14, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0x7, %xmm5, %ecx
testb $0x1, %cl
je 0x5adaae
vpextrb $0x7, %xmm7, 0x8(%r13,%r8)
vpor 0x8034a(%rip), %ymm0, %ymm5 # 0x62de00
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpmovzxwd %xmm8, %ymm8    # ymm8 = xmm8[0],zero,xmm8[1],zero,xmm8[2],zero,xmm8[3],zero,xmm8[4],zero,xmm8[5],zero,xmm8[6],zero,xmm8[7],zero
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vmovd %xmm8, %ecx
testb $0x1, %cl
je 0x5adaf2
vpextrb $0x8, %xmm7, 0x9(%r13,%r8)
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x1, %xmm8, %ecx
testb $0x1, %cl
je 0x5adb31
vpextrb $0x9, %xmm7, 0xa(%r13,%r8)
vpxor %ymm5, %ymm10, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm8     # ymm8 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0x80719(%rip), %ymm8, %ymm8 # 0x62e260
vpermd %ymm8, %ymm12, %ymm8
vpackssdw %xmm8, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x2, %xmm8, %ecx
testb $0x1, %cl
je 0x5adb74
vpextrb $0xa, %xmm7, 0xb(%r13,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm14, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x3, %xmm5, %ecx
testb $0x1, %cl
je 0x5adba9
vpextrb $0xb, %xmm7, 0xc(%r13,%r8)
vpor 0x8022f(%rip), %ymm0, %ymm5 # 0x62dde0
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpackssdw %ymm8, %ymm0, %ymm8
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x4, %xmm8, %ecx
testb $0x1, %cl
je 0x5adbf0
vpextrb $0xc, %xmm7, 0xd(%r13,%r8)
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpshufhw $0x84, %xmm8, %xmm8     # xmm8 = xmm8[0,1,2,3,4,5,4,6]
vpxor %xmm14, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpackssdw %ymm8, %ymm0, %ymm8
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x5, %xmm8, %ecx
testb $0x1, %cl
je 0x5adc30
vpextrb $0xd, %xmm7, 0xe(%r13,%r8)
vpxor %ymm5, %ymm10, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpackssdw %ymm5, %ymm0, %ymm8
vpxor 0x8061b(%rip), %ymm8, %ymm8 # 0x62e260
vpackssdw %ymm8, %ymm0, %ymm8
vpacksswb %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x6, %xmm8, %ecx
testb $0x1, %cl
je 0x5adc67
vpextrb $0xe, %xmm7, 0xf(%r13,%r8)
vpshufhw $0x84, %ymm5, %ymm5     # ymm5 = ymm5[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vpxor 0x805ec(%rip), %ymm5, %ymm5 # 0x62e260
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm0, %ymm5, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0x7, %xmm5, %ecx
testb $0x1, %cl
je 0x5adc95
vpextrb $0xf, %xmm7, 0x10(%r13,%r8)
vpor 0x802c3(%rip), %ymm0, %ymm5 # 0x62df60
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0x8, %xmm8, %ecx
vextracti128 $0x1, %ymm7, %xmm7
testb $0x1, %cl
je 0x5adcd7
vpextrb $0x0, %xmm7, 0x11(%r13,%r8)
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0x9, %xmm8, %ecx
testb $0x1, %cl
je 0x5add0b
vpextrb $0x1, %xmm7, 0x12(%r13,%r8)
vpxor %ymm5, %ymm10, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm8     # ymm8 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0x8053f(%rip), %ymm8, %ymm8 # 0x62e260
vpermd %ymm8, %ymm12, %ymm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0xa, %xmm8, %ecx
testb $0x1, %cl
je 0x5add43
vpextrb $0x2, %xmm7, 0x13(%r13,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm14, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0xb, %xmm5, %ecx
testb $0x1, %cl
je 0x5add6c
vpextrb $0x3, %xmm7, 0x14(%r13,%r8)
vpor 0x801cc(%rip), %ymm0, %ymm5 # 0x62df40
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpackssdw %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpbroadcastw %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0xc, %xmm8, %ecx
testb $0x1, %cl
je 0x5addb8
vpextrb $0x4, %xmm7, 0x15(%r13,%r8)
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpshufhw $0x84, %xmm8, %xmm8     # xmm8 = xmm8[0,1,2,3,4,5,4,6]
vpxor %xmm14, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpackssdw %ymm0, %ymm8, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpbroadcastd %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0xd, %xmm8, %ecx
testb $0x1, %cl
je 0x5addfd
vpextrb $0x5, %xmm7, 0x16(%r13,%r8)
vpxor %ymm5, %ymm10, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpackssdw %ymm5, %ymm0, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpacksswb %xmm8, %xmm8, %xmm8
vpextrb $0xe, %xmm8, %ecx
testb $0x1, %cl
je 0x5ade32
vpextrb $0x6, %xmm7, 0x17(%r13,%r8)
vpshufhw $0x84, %ymm5, %ymm5     # ymm5 = ymm5[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vextracti128 $0x1, %ymm5, %xmm5
vpxor %xmm5, %xmm14, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpacksswb %xmm5, %xmm5, %xmm5
vpextrb $0xf, %xmm5, %ecx
testb $0x1, %cl
je 0x5ade5c
vpextrb $0x7, %xmm7, 0x18(%r13,%r8)
vpor 0x800bc(%rip), %ymm0, %ymm5 # 0x62df20
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpmovzxwd %xmm8, %ymm8    # ymm8 = xmm8[0],zero,xmm8[1],zero,xmm8[2],zero,xmm8[3],zero,xmm8[4],zero,xmm8[5],zero,xmm8[6],zero,xmm8[7],zero
vpacksswb %ymm8, %ymm0, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x8, %xmm8, %ecx
testb $0x1, %cl
je 0x5adea3
vpextrb $0x8, %xmm7, 0x19(%r13,%r8)
vpxor %xmm6, %xmm13, %xmm8
vpxor %xmm5, %xmm13, %xmm9
vpcmpgtq %xmm8, %xmm9, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpxor %xmm14, %xmm8, %xmm8
vpackssdw %xmm8, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpacksswb %ymm8, %ymm0, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0x9, %xmm8, %ecx
testb $0x1, %cl
je 0x5adee3
vpextrb $0x9, %xmm7, 0x1a(%r13,%r8)
vpxor %ymm5, %ymm10, %ymm5
vpcmpgtq %ymm4, %ymm5, %ymm5
vpshuflw $0xe8, %ymm5, %ymm8     # ymm8 = ymm5[0,2,2,3,4,5,6,7,8,10,10,11,12,13,14,15]
vpxor 0x80367(%rip), %ymm8, %ymm8 # 0x62e260
vpermd %ymm8, %ymm12, %ymm8
vpackssdw %xmm8, %xmm8, %xmm8
vpermq $0x55, %ymm8, %ymm8     # ymm8 = ymm8[1,1,1,1]
vpacksswb %ymm8, %ymm0, %ymm8
vextracti128 $0x1, %ymm8, %xmm8
vpextrb $0xa, %xmm8, %ecx
testb $0x1, %cl
vmovdqu 0x80(%rsp), %ymm9
je 0x5adf30
vpextrb $0xa, %xmm7, 0x1b(%r13,%r8)
vextracti128 $0x1, %ymm5, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm14, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xb, %xmm5, %ecx
testb $0x1, %cl
je 0x5adf65
vpextrb $0xb, %xmm7, 0x1c(%r13,%r8)
vpor 0x7ff93(%rip), %ymm0, %ymm1 # 0x62df00
vpxor %xmm6, %xmm13, %xmm5
vpxor %xmm1, %xmm13, %xmm8
vpcmpgtq %xmm5, %xmm8, %xmm5
vpackssdw %xmm5, %xmm5, %xmm5
vpxor %xmm5, %xmm14, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xc, %xmm5, %ecx
testb $0x1, %cl
je 0x5adfa9
vpextrb $0xc, %xmm7, 0x1d(%r13,%r8)
vpxor %xmm6, %xmm13, %xmm5
vpxor %xmm1, %xmm13, %xmm8
vpcmpgtq %xmm5, %xmm8, %xmm5
vpshufhw $0x84, %xmm5, %xmm5     # xmm5 = xmm5[0,1,2,3,4,5,4,6]
vpxor %xmm5, %xmm14, %xmm5
vpermq $0x55, %ymm5, %ymm5     # ymm5 = ymm5[1,1,1,1]
vpackssdw %ymm5, %ymm0, %ymm5
vpacksswb %ymm5, %ymm0, %ymm5
vextracti128 $0x1, %ymm5, %xmm5
vpextrb $0xd, %xmm5, %ecx
testb $0x1, %cl
je 0x5adfe6
vpextrb $0xd, %xmm7, 0x1e(%r13,%r8)
vpxor %ymm1, %ymm10, %ymm1
vpcmpgtq %ymm4, %ymm1, %ymm1
vpackssdw %ymm1, %ymm0, %ymm4
vpxor 0x80265(%rip), %ymm4, %ymm4 # 0x62e260
vpackssdw %ymm4, %ymm0, %ymm4
vpacksswb %ymm4, %ymm0, %ymm4
vextracti128 $0x1, %ymm4, %xmm4
vpextrb $0xe, %xmm4, %ecx
testb $0x1, %cl
je 0x5ae01c
vpextrb $0xe, %xmm7, 0x1f(%r13,%r8)
vpshufhw $0x84, %ymm1, %ymm1     # ymm1 = ymm1[0,1,2,3,4,5,4,6,8,9,10,11,12,13,12,14]
vpxor 0x80237(%rip), %ymm1, %ymm1 # 0x62e260
vpackssdw %ymm1, %ymm0, %ymm1
vpacksswb %ymm1, %ymm0, %ymm1
vextracti128 $0x1, %ymm1, %xmm1
vpextrb $0xf, %xmm1, %ecx
testb $0x1, %cl
je 0x5ae04a
vpextrb $0xf, %xmm7, 0x20(%r13,%r8)
addq $0x20, %r8
vmovdqu 0x60(%rsp), %ymm7
vmovdqu 0xa0(%rsp), %ymm1
vpaddd %ymm1, %ymm7, %ymm7
vpaddd %ymm1, %ymm9, %ymm9
vmovdqu 0x20(%rsp), %ymm0
vpaddd %ymm1, %ymm0, %ymm0
vmovdqu %ymm0, 0x20(%rsp)
vpaddd %ymm1, %ymm2, %ymm2
cmpq %r8, %r10
jne 0x5ad7f4
movl %edx, 0x20(%rsp)
vpxor %xmm0, %xmm0, %xmm0
vpsubsb 0x1a0(%rsp), %ymm0, %ymm0
leal -0x1(%r15), %ecx
shlq $0x5, %rcx
movq %rax, %r8
addq %rcx, %r8
movl %r15d, %r9d
vmovdqa %ymm0, (%r8)
vpsubsb %ymm3, %ymm0, %ymm0
addq $-0x20, %r8
decl %r9d
jg 0x5ae0a4
vpbroadcastb 0x81d4d(%rip), %ymm4 # 0x62fe0c
movq %r14, %r8
vpbroadcastb 0x81d42(%rip), %ymm6 # 0x62fe0d
addq %rcx, %r8
vpbroadcastb 0x81d37(%rip), %ymm7 # 0x62fe0e
shlq $0x5, %r15
vpbroadcastb 0x81d2b(%rip), %ymm8 # 0x62fe0f
xorl %r9d, %r9d
vpbroadcastb 0x81d20(%rip), %ymm9 # 0x62fe10
vpbroadcastb 0x81d18(%rip), %ymm10 # 0x62fe11
xorl %r10d, %r10d
vmovdqu 0x160(%rsp), %ymm0
vmovdqu 0x1c0(%rsp), %ymm1
vmovdqa (%r8), %ymm5
vinserti128 $0x1, %xmm5, %ymm0, %ymm11
vpalignr $0xf, %ymm11, %ymm5, %ymm5 # ymm5 = ymm11[15],ymm5[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm11[31],ymm5[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpinsrb $0x0, (%r13,%r10), %xmm5, %xmm11
vpblendd $0xf, %ymm11, %ymm5, %ymm5 # ymm5 = ymm11[0,1,2,3],ymm5[4,5,6,7]
movq 0x48(%rsp), %rcx
movq 0x10(%rcx), %rcx
movq 0x50(%rsp), %rdx
movzbl (%rdx,%r10), %r11d
movslq (%rcx,%r11,4), %r11
imulq %rsi, %r11
shlq $0x5, %r11
addq 0x58(%rsp), %r11
vmovdqu 0x160(%rsp), %ymm11
vpsubsb (%rax), %ymm11, %ymm12
xorl %ecx, %ecx
vpaddsb (%r11,%rcx), %ymm5, %ymm5
vmovdqa (%r14,%rcx), %ymm13
vmovdqa (%r12,%rcx), %ymm14
vpsubsb 0x1a0(%rsp), %ymm13, %ymm15
vpsubsb %ymm3, %ymm14, %ymm14
vpcmpgtb %ymm14, %ymm15, %ymm2
vpblendvb %ymm2, %ymm4, %ymm6, %ymm2
movq 0x10(%rbx), %rdx
movq (%rdx), %rdx
addq %r9, %rdx
vpaddsb (%rax,%rcx), %ymm12, %ymm12
vmovdqa %ymm2, (%rcx,%rdx)
vpmaxsb %ymm12, %ymm11, %ymm11
vpmaxsb %ymm14, %ymm15, %ymm2
vmovdqu 0x1a0(%rsp), %ymm14
vpminsb %ymm2, %ymm1, %ymm1
vpmaxsb %ymm5, %ymm2, %ymm12
vmovdqa %ymm2, (%r12,%rcx)
vmovdqa %ymm12, (%rbp,%rcx)
vmovdqa %ymm5, (%r14,%rcx)
addq $0x20, %rcx
vmovdqa %ymm13, %ymm5
cmpq %rcx, %r15
jne 0x5ae160
vinserti128 $0x1, %xmm12, %ymm0, %ymm2
vpalignr $0xf, %ymm2, %ymm12, %ymm2 # ymm2 = ymm2[15],ymm12[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm2[31],ymm12[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpinsrb $0x0, 0x1(%r13,%r10), %xmm2, %xmm5
incq %r10
vpblendd $0xf, %ymm5, %ymm2, %ymm12 # ymm12 = ymm5[0,1,2,3],ymm2[4,5,6,7]
vpaddsb (%rax), %ymm12, %ymm2
vpmaxsb %ymm2, %ymm11, %ymm5
movl $0x1e, %ecx
vmovdqu 0x200(%rsp), %ymm11
vperm2i128 $0x28, %ymm5, %ymm5, %ymm2 # ymm2 = zero,zero,ymm5[0,1]
vpalignr $0xf, %ymm2, %ymm5, %ymm2 # ymm2 = ymm2[15],ymm5[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm2[31],ymm5[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpaddsb %ymm2, %ymm11, %ymm2
vpmaxsb %ymm2, %ymm5, %ymm5
decl %ecx
jne 0x5ae20e
vperm2i128 $0x28, %ymm5, %ymm5, %ymm2 # ymm2 = zero,zero,ymm5[0,1]
vpalignr $0xf, %ymm2, %ymm5, %ymm2 # ymm2 = ymm2[15],ymm5[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm2[31],ymm5[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
vpaddsb 0x220(%rsp), %ymm2, %ymm5
vpmaxsb %ymm12, %ymm5, %ymm11
xorl %ecx, %ecx
movq 0x10(%rbx), %rdx
movq (%rdx), %rdx
addq %r9, %rdx
vmovdqa (%rbp,%rcx), %ymm2
vpsubsb %ymm14, %ymm11, %ymm11
vpsubsb %ymm3, %ymm5, %ymm12
vpmaxsb %ymm12, %ymm11, %ymm5
vpcmpgtb %ymm12, %ymm11, %ymm11
vpblendvb %ymm11, %ymm7, %ymm8, %ymm12
vpmaxsb %ymm5, %ymm2, %ymm11
vpcmpeqb (%r14,%rcx), %ymm11, %ymm13
vpcmpgtb %ymm5, %ymm2, %ymm2
vpaddb %ymm2, %ymm9, %ymm2
vpblendvb %ymm13, %ymm10, %ymm2, %ymm2
vpor (%rcx,%rdx), %ymm12, %ymm12
vpor %ymm2, %ymm12, %ymm2
vmovdqa %ymm2, (%rcx,%rdx)
vmovdqa %ymm11, (%r14,%rcx)
vpminsb %ymm5, %ymm1, %ymm1
vpminsb %ymm11, %ymm1, %ymm1
vpmaxsb %ymm11, %ymm0, %ymm0
addq $0x20, %rcx
cmpq %rcx, %r15
jne 0x5ae243
addq %r15, %r9
cmpq %rdi, %r10
jne 0x5ae10e
movl 0x18(%rsp), %ecx
shlq $0x5, %rcx
vmovdqa (%r14,%rcx), %ymm2
cmpl $0x1e, 0x10(%rsp)
jg 0x5ae2f0
xorl %ecx, %ecx
movl 0x8(%rsp), %esi
movl 0x20(%rsp), %edx
vperm2i128 $0x28, %ymm2, %ymm2, %ymm3 # ymm3 = zero,zero,ymm2[0,1]
vpalignr $0xf, %ymm3, %ymm2, %ymm2 # ymm2 = ymm3[15],ymm2[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],ymm3[31],ymm2[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
incl %ecx
cmpl %edx, %ecx
jl 0x5ae2dc
jmp 0x5ae2f4
movl 0x8(%rsp), %esi
vmovdqu 0x160(%rsp), %ymm3
vpcmpgtb %ymm1, %ymm3, %ymm1
vpcmpgtb 0x1c0(%rsp), %ymm0, %ymm0
vpor %ymm1, %ymm0, %ymm0
vpmovmskb %ymm0, %ecx
testl %ecx, %ecx
je 0x5ae322
orb $0x40, 0xc(%rbx)
xorl %ecx, %ecx
xorl %esi, %esi
xorl %edx, %edx
jmp 0x5ae332
vextracti128 $0x1, %ymm2, %xmm0
vpextrb $0xf, %xmm0, %ecx
movl 0x14(%rsp), %edx
movsbl %cl, %ecx
movl %ecx, (%rbx)
movl %edx, 0x4(%rbx)
movl %esi, 0x8(%rbx)
movq %rax, %rdi
vzeroupper
callq 0x20a60d
movq %r14, %rdi
callq 0x20a60d
movq %rbp, %rdi
callq 0x20a60d
movq %r13, %rdi
callq 0x20a60d
movq %r12, %rdi
callq 0x20a60d
jmp 0x5ae3a2
callq 0x1f8ca3
jmp 0x5ae3a0
callq 0x1f8c7d
jmp 0x5ae3a0
callq 0x1f8c57
jmp 0x5ae3a0
callq 0x1f8c31
jmp 0x5ae3a0
callq 0x1f8c0b
jmp 0x5ae3a0
callq 0x1f8be5
jmp 0x5ae3a0
callq 0x1f8bbf
jmp 0x5ae3a0
callq 0x1f8b99
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x248, %rsp            # imm = 0x248
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop