#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ CorrectAsn(char *, int, char, char, int);
int FullElement(char *Asn1, char *Asn2, char *Asn3, int Length, char SecStrType,
                int ElemLength, char EditChar, int *YYN, int *NYY, int *YNN,
                int *NNY) {
  register int i, j, Count1, Count2, Count3;
  int Beg, ElLength;
  *YYN = 0;
  *NYY = 0;
  *YNN = 0;
  *NNY = 0;
  if (ElemLength >= Length)
    return (0);
  ElLength = ElemLength - 1;
  Count1 = 0;
  Count2 = 0;
  Count3 = 0;
  Beg = -1;
  for (i = 1; i < Length; i++) {
    if ((i == 0 && (Asn1[i] == SecStrType && Asn2[i] == SecStrType &&
                    Asn3[i] == SecStrType) ||
         (Asn1[i] != SecStrType && Asn2[i] != SecStrType &&
          Asn3[i] != SecStrType)) ||
        (i > 0 && (Asn1[i] != Asn1[i - 1] || Asn2[i] != Asn2[i - 1] ||
                   Asn3[i] != Asn3[i - 1])) ||
        i == Length - 1) {
      if (Count1 >= ElLength && Count2 >= ElLength && Count3 < ElLength)
        (*YYN)++;
      else if (Count1 < ElLength && Count2 >= ElLength && Count3 >= ElLength)
        (*NYY)++;
      else if (Count1 >= ElLength && Count2 < ElLength && Count3 < ElLength)
        (*YNN)++;
      else if (Count1 < ElLength && Count2 < ElLength && Count3 >= ElLength)
        (*NNY)++;
      if (Count1 >= ElLength && (Count2 < ElLength || Count3 < ElLength))
        for (j = Beg - 1; j < i; j++)
          Asn1[j] = EditChar;
      if (Count2 >= ElLength && (Count1 < ElLength || Count3 < ElLength))
        for (j = Beg - 1; j < i; j++)
          Asn2[j] = EditChar;
      if (Count3 >= ElLength && (Count1 < ElLength || Count2 < ElLength))
        for (j = Beg - 1; j < i; j++)
          Asn3[j] = EditChar;
      Count1 = 0;
      Count2 = 0;
      Count3 = 0;
      Beg = -1;
    } else {
      if (Asn1[i] == SecStrType)
        Count1++;
      if (Asn2[i] == SecStrType)
        Count2++;
      if (Asn3[i] == SecStrType)
        Count3++;
      if (Beg == -1 && (Count1 == 1 || Count2 == 1 || Count3 == 1))
        Beg = i;
    }
  }
  CorrectAsn(Asn1, Length, SecStrType, EditChar, ElLength);
  CorrectAsn(Asn2, Length, SecStrType, EditChar, ElLength);
  CorrectAsn(Asn3, Length, SecStrType, EditChar, ElLength);
  return ((*YYN) * (*NYY) * (*YNN) * (*NNY));
}


x86 assembly (clang, -O0):
<FullElement>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %r8b,%al
mov    0x30(%rbp),%r8
mov    0x28(%rbp),%r8
mov    0x20(%rbp),%r8
mov    0x18(%rbp),%r8
mov    0x10(%rbp),%r8b
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %al,-0x25(%rbp)
mov    %r9d,-0x2c(%rbp)
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    0x20(%rbp),%rax
movl   $0x0,(%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x2c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jl     1185 <FullElement+0x75>
movl   $0x0,-0x4(%rbp)
jmp    1605 <FullElement+0x4f5>
mov    -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x48(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0xffffffff,-0x44(%rbp)
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1593 <FullElement+0x483>
cmpl   $0x0,-0x30(%rbp)
jne    120f <FullElement+0xff>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x25(%rbp),%ecx
cmp    %ecx,%eax
jne    120f <FullElement+0xff>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x25(%rbp),%ecx
cmp    %ecx,%eax
jne    120f <FullElement+0xff>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x25(%rbp),%ecx
cmp    %ecx,%eax
je     12e1 <FullElement+0x1d1>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x25(%rbp),%ecx
cmp    %ecx,%eax
je     1257 <FullElement+0x147>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x25(%rbp),%ecx
cmp    %ecx,%eax
je     1257 <FullElement+0x147>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x25(%rbp),%ecx
cmp    %ecx,%eax
jne    12e1 <FullElement+0x1d1>
cmpl   $0x0,-0x30(%rbp)
jle    12d0 <FullElement+0x1c0>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
mov    -0x30(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    12e1 <FullElement+0x1d1>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x18(%rbp),%rcx
mov    -0x30(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    12e1 <FullElement+0x1d1>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x20(%rbp),%rcx
mov    -0x30(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    12e1 <FullElement+0x1d1>
mov    -0x30(%rbp),%eax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    14ea <FullElement+0x3da>
mov    -0x38(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     1315 <FullElement+0x205>
mov    -0x3c(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     1315 <FullElement+0x205>
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    1315 <FullElement+0x205>
mov    0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    13bb <FullElement+0x2ab>
mov    -0x38(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    1349 <FullElement+0x239>
mov    -0x3c(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     1349 <FullElement+0x239>
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     1349 <FullElement+0x239>
mov    0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    13b6 <FullElement+0x2a6>
mov    -0x38(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     137d <FullElement+0x26d>
mov    -0x3c(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    137d <FullElement+0x26d>
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    137d <FullElement+0x26d>
mov    0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    13b1 <FullElement+0x2a1>
mov    -0x38(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    13ac <FullElement+0x29c>
mov    -0x3c(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    13ac <FullElement+0x29c>
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     13ac <FullElement+0x29c>
mov    0x30(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    13b1 <FullElement+0x2a1>
jmp    13b6 <FullElement+0x2a6>
jmp    13bb <FullElement+0x2ab>
mov    -0x38(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     1415 <FullElement+0x305>
mov    -0x3c(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     13df <FullElement+0x2cf>
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    1415 <FullElement+0x305>
mov    -0x44(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1410 <FullElement+0x300>
mov    0x10(%rbp),%dl
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    13e8 <FullElement+0x2d8>
jmp    1415 <FullElement+0x305>
mov    -0x3c(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     146f <FullElement+0x35f>
mov    -0x38(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     1439 <FullElement+0x329>
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    146f <FullElement+0x35f>
mov    -0x44(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    146a <FullElement+0x35a>
mov    0x10(%rbp),%dl
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1442 <FullElement+0x332>
jmp    146f <FullElement+0x35f>
mov    -0x40(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     14c9 <FullElement+0x3b9>
mov    -0x38(%rbp),%eax
cmp    -0x48(%rbp),%eax
jl     1493 <FullElement+0x383>
mov    -0x3c(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    14c9 <FullElement+0x3b9>
mov    -0x44(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    14c4 <FullElement+0x3b4>
mov    0x10(%rbp),%dl
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    149c <FullElement+0x38c>
jmp    14c9 <FullElement+0x3b9>
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0xffffffff,-0x44(%rbp)
jmp    1580 <FullElement+0x470>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x25(%rbp),%ecx
cmp    %ecx,%eax
jne    150b <FullElement+0x3fb>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x25(%rbp),%ecx
cmp    %ecx,%eax
jne    152c <FullElement+0x41c>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x25(%rbp),%ecx
cmp    %ecx,%eax
jne    154d <FullElement+0x43d>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
cmpl   $0xffffffff,-0x44(%rbp)
jne    157b <FullElement+0x46b>
cmpl   $0x1,-0x38(%rbp)
je     1575 <FullElement+0x465>
cmpl   $0x1,-0x3c(%rbp)
je     1575 <FullElement+0x465>
cmpl   $0x1,-0x40(%rbp)
jne    157b <FullElement+0x46b>
mov    -0x30(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    1580 <FullElement+0x470>
jmp    1585 <FullElement+0x475>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    11b1 <FullElement+0xa1>
mov    -0x10(%rbp),%rdi
mov    -0x24(%rbp),%esi
mov    -0x25(%rbp),%cl
mov    0x10(%rbp),%al
mov    -0x48(%rbp),%r8d
movsbl %cl,%edx
movsbl %al,%ecx
call   1030 <CorrectAsn@plt>
mov    -0x18(%rbp),%rdi
mov    -0x24(%rbp),%esi
mov    -0x25(%rbp),%cl
mov    0x10(%rbp),%al
mov    -0x48(%rbp),%r8d
movsbl %cl,%edx
movsbl %al,%ecx
call   1030 <CorrectAsn@plt>
mov    -0x20(%rbp),%rdi
mov    -0x24(%rbp),%esi
mov    -0x25(%rbp),%cl
mov    0x10(%rbp),%al
mov    -0x48(%rbp),%r8d
movsbl %cl,%edx
movsbl %al,%ecx
call   1030 <CorrectAsn@plt>
mov    0x18(%rbp),%rax
mov    (%rax),%eax
mov    0x20(%rbp),%rcx
imul   (%rcx),%eax
mov    0x28(%rbp),%rcx
imul   (%rcx),%eax
mov    0x30(%rbp),%rcx
imul   (%rcx),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<FullElement>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9d,%ebx
mov    %rdx,0x10(%rsp)
mov    %rsi,0x18(%rsp)
mov    %rdi,%r9
mov    0xa0(%rsp),%rax
mov    0x98(%rsp),%rdi
mov    0x90(%rsp),%rsi
mov    0x88(%rsp),%rdx
movl   $0x0,(%rdx)
movl   $0x0,(%rsi)
movl   $0x0,(%rdi)
movl   $0x0,(%rax)
xor    %eax,%eax
cmp    %ecx,%ebx
jge    148f <FullElement+0x36f>
add    $0xffffffff,%ebx
mov    %rcx,0x30(%rsp)
cmp    $0x2,%ecx
jl     1415 <FullElement+0x2f5>
mov    0x30(%rsp),%rax
lea    -0x1(%rax),%ecx
mov    %rcx,0x38(%rsp)
mov    %eax,%eax
mov    %rax,0x40(%rsp)
xor    %edi,%edi
mov    $0xffffffff,%r13d
mov    $0x1,%r15d
xor    %r10d,%r10d
xor    %ebp,%ebp
mov    %r8d,0xc(%rsp)
mov    %r9,0x20(%rsp)
jmp    11e7 <FullElement+0xc7>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xor    %r10d,%r10d
xor    %edi,%edi
add    $0x1,%r15
mov    %r14d,%r13d
cmp    %r15,0x40(%rsp)
je     1415 <FullElement+0x2f5>
movzbl (%r9,%r15,1),%eax
cmp    %r8b,%al
je     1210 <FullElement+0xf0>
mov    0x18(%rsp),%rcx
cmp    %r8b,(%rcx,%r15,1)
je     1210 <FullElement+0xf0>
mov    0x10(%rsp),%rcx
cmp    %r8b,(%rcx,%r15,1)
jne    1280 <FullElement+0x160>
nopw   0x0(%rax,%rax,1)
cmp    -0x1(%r9,%r15,1),%al
jne    1280 <FullElement+0x160>
mov    0x18(%rsp),%rcx
movzbl (%rcx,%r15,1),%edx
cmp    -0x1(%rcx,%r15,1),%dl
jne    1280 <FullElement+0x160>
mov    0x10(%rsp),%rsi
movzbl (%rsi,%r15,1),%ecx
cmp    -0x1(%rsi,%r15,1),%cl
jne    1280 <FullElement+0x160>
cmp    %r15,0x38(%rsp)
je     1280 <FullElement+0x160>
xor    %esi,%esi
cmp    %r8b,%al
sete   %sil
add    %esi,%ebp
xor    %eax,%eax
cmp    %r8b,%dl
sete   %al
add    %eax,%r10d
xor    %eax,%eax
cmp    %r8b,%cl
sete   %al
add    %eax,%edi
cmp    $0xffffffff,%r13d
je     13f3 <FullElement+0x2d3>
mov    %r13d,%r14d
jmp    11d5 <FullElement+0xb5>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    %ebx,%ebp
setl   %al
cmp    %ebx,%r10d
setl   %r12b
or     %al,%r12b
cmp    $0x1,%r12b
je     12a1 <FullElement+0x181>
mov    0x88(%rsp),%rcx
cmp    %ebx,%edi
jl     12f0 <FullElement+0x1d0>
cmp    %ebx,%ebp
setge  %al
jge    12b9 <FullElement+0x199>
cmp    %ebx,%r10d
jl     12b9 <FullElement+0x199>
mov    0x90(%rsp),%rcx
cmp    %ebx,%edi
jge    12f0 <FullElement+0x1d0>
cmp    %ebx,%r10d
setl   %cl
and    %cl,%al
cmp    $0x1,%al
jne    12d1 <FullElement+0x1b1>
mov    0x98(%rsp),%rcx
cmp    %ebx,%edi
jl     12f0 <FullElement+0x1d0>
cmp    %ebx,%ebp
jge    12f3 <FullElement+0x1d3>
cmp    %ebx,%r10d
jge    12f3 <FullElement+0x1d3>
mov    0xa0(%rsp),%rcx
cmp    %ebx,%edi
jl     12f3 <FullElement+0x1d3>
cs nopw 0x0(%rax,%rax,1)
addl   $0x1,(%rcx)
cmp    %ebx,%ebp
jl     134a <FullElement+0x22a>
cmp    %ebx,%edi
setl   %al
cmp    %ebx,%r10d
setl   %cl
or     %al,%cl
cmp    $0x1,%cl
jne    134a <FullElement+0x22a>
movslq %r13d,%rax
cmp    %rax,%r15
jl     134a <FullElement+0x22a>
lea    -0x1(%r13),%eax
mov    %edi,0x2c(%rsp)
movslq %eax,%rdi
add    %r9,%rdi
mov    %r15d,%edx
sub    %r13d,%edx
add    $0x1,%rdx
movzbl 0x80(%rsp),%esi
mov    %r10d,%r14d
call   1030 <memset@plt>
mov    %r14d,%r10d
mov    0x2c(%rsp),%edi
mov    0x20(%rsp),%r9
mov    0xc(%rsp),%r8d
cmp    %ebx,%r10d
jl     1399 <FullElement+0x279>
cmp    %ebx,%edi
setl   %al
cmp    %ebx,%ebp
setl   %cl
or     %al,%cl
cmp    $0x1,%cl
jne    1399 <FullElement+0x279>
movslq %r13d,%rax
cmp    %rax,%r15
jl     1399 <FullElement+0x279>
lea    -0x1(%r13),%eax
mov    %edi,%ebp
movslq %eax,%rdi
add    0x18(%rsp),%rdi
mov    %r15d,%edx
sub    %r13d,%edx
add    $0x1,%rdx
movzbl 0x80(%rsp),%esi
call   1030 <memset@plt>
mov    %ebp,%edi
mov    0x20(%rsp),%r9
mov    0xc(%rsp),%r8d
mov    $0xffffffff,%r14d
xor    %ebp,%ebp
cmp    %ebx,%edi
jl     11d0 <FullElement+0xb0>
movslq %r13d,%rax
cmp    %rax,%r15
setge  %al
and    %al,%r12b
cmp    $0x1,%r12b
jne    11d0 <FullElement+0xb0>
lea    -0x1(%r13),%eax
movslq %eax,%rdi
add    0x10(%rsp),%rdi
mov    %r15d,%edx
sub    %r13d,%edx
add    $0x1,%rdx
movzbl 0x80(%rsp),%esi
call   1030 <memset@plt>
xor    %ebp,%ebp
mov    0x20(%rsp),%r9
mov    0xc(%rsp),%r8d
jmp    11d0 <FullElement+0xb0>
mov    %r15d,%r14d
cmp    $0x1,%edi
je     1401 <FullElement+0x2e1>
mov    $0xffffffff,%r14d
cmp    $0x1,%r10d
cmove  %r15d,%r14d
cmp    $0x1,%ebp
cmove  %r15d,%r14d
jmp    11d5 <FullElement+0xb5>
movsbl %r8b,%r13d
movsbl 0x80(%rsp),%r14d
mov    %r9,%rdi
mov    0x30(%rsp),%rbp
mov    %ebp,%esi
mov    %r13d,%edx
mov    %r14d,%ecx
mov    %ebx,%r8d
call   1040 <CorrectAsn@plt>
mov    0x18(%rsp),%rdi
mov    %ebp,%esi
mov    %r13d,%edx
mov    %r14d,%ecx
mov    %ebx,%r8d
call   1040 <CorrectAsn@plt>
mov    0x10(%rsp),%rdi
mov    %ebp,%esi
mov    %r13d,%edx
mov    %r14d,%ecx
mov    %ebx,%r8d
call   1040 <CorrectAsn@plt>
mov    0x90(%rsp),%rax
mov    (%rax),%eax
mov    0x88(%rsp),%rcx
imul   (%rcx),%eax
mov    0x98(%rsp),%rcx
imul   (%rcx),%eax
mov    0xa0(%rsp),%rcx
imul   (%rcx),%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @FullElement(i8* %0, i8* %1, i8* %2, i32 %3, i8 signext %4, i32 %5, i8 signext %6, i32* %7, i32* %8, i32* %9, i32* %10) {
%12 = alloca i32
%13 = alloca i8*
%14 = alloca i8*
%15 = alloca i8*
%16 = alloca i32
%17 = alloca i8
%18 = alloca i32
%19 = alloca i8
%20 = alloca i32*
%21 = alloca i32*
%22 = alloca i32*
%23 = alloca i32*
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca i32
%30 = alloca i32
store i8* %0, i8** %13
store i8* %1, i8** %14
store i8* %2, i8** %15
store i32 %3, i32* %16
store i8 %4, i8* %17
store i32 %5, i32* %18
store i8 %6, i8* %19
store i32* %7, i32** %20
store i32* %8, i32** %21
store i32* %9, i32** %22
store i32* %10, i32** %23
%31 = load i32*, i32** %20
store i32 0, i32* %31
%32 = load i32*, i32** %21
store i32 0, i32* %32
%33 = load i32*, i32** %22
store i32 0, i32* %33
%34 = load i32*, i32** %23
store i32 0, i32* %34
%35 = load i32, i32* %18
%36 = load i32, i32* %16
%37 = icmp sge i32 %35, %36
br i1 %37, label %38, label %39
38: ; preds = %11
store i32 0, i32* %12
br label %405
39: ; preds = %11
%40 = load i32, i32* %18
%41 = sub nsw i32 %40, 1
store i32 %41, i32* %30
store i32 0, i32* %26
store i32 0, i32* %27
store i32 0, i32* %28
store i32 -1, i32* %29
store i32 1, i32* %24
br label %42
42: ; preds = %372, %39
%43 = load i32, i32* %24
%44 = load i32, i32* %16
%45 = icmp slt i32 %43, %44
br i1 %45, label %46, label %375
46: ; preds = %42
%47 = load i32, i32* %24
%48 = icmp eq i32 %47, 0
br i1 %48, label %49, label %79
49: ; preds = %46
%50 = load i8*, i8** %13
%51 = load i32, i32* %24
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds i8, i8* %50, i64 %52
%54 = load i8, i8* %53
%55 = sext i8 %54 to i32
%56 = load i8, i8* %17
%57 = sext i8 %56 to i32
%58 = icmp eq i32 %55, %57
br i1 %58, label %59, label %79
59: ; preds = %49
%60 = load i8*, i8** %14
%61 = load i32, i32* %24
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds i8, i8* %60, i64 %62
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = load i8, i8* %17
%67 = sext i8 %66 to i32
%68 = icmp eq i32 %65, %67
br i1 %68, label %69, label %79
69: ; preds = %59
%70 = load i8*, i8** %15
%71 = load i32, i32* %24
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds i8, i8* %70, i64 %72
%74 = load i8, i8* %73
%75 = sext i8 %74 to i32
%76 = load i8, i8* %17
%77 = sext i8 %76 to i32
%78 = icmp eq i32 %75, %77
br i1 %78, label %162, label %79
79: ; preds = %69, %59, %49, %46
%80 = load i8*, i8** %13
%81 = load i32, i32* %24
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds i8, i8* %80, i64 %82
%84 = load i8, i8* %83
%85 = sext i8 %84 to i32
%86 = load i8, i8* %17
%87 = sext i8 %86 to i32
%88 = icmp ne i32 %85, %87
br i1 %88, label %89, label %109
89: ; preds = %79
%90 = load i8*, i8** %14
%91 = load i32, i32* %24
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds i8, i8* %90, i64 %92
%94 = load i8, i8* %93
%95 = sext i8 %94 to i32
%96 = load i8, i8* %17
%97 = sext i8 %96 to i32
%98 = icmp ne i32 %95, %97
br i1 %98, label %99, label %109
99: ; preds = %89
%100 = load i8*, i8** %15
%101 = load i32, i32* %24
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds i8, i8* %100, i64 %102
%104 = load i8, i8* %103
%105 = sext i8 %104 to i32
%106 = load i8, i8* %17
%107 = sext i8 %106 to i32
%108 = icmp ne i32 %105, %107
br i1 %108, label %162, label %109
109: ; preds = %99, %89, %79
%110 = load i32, i32* %24
%111 = icmp sgt i32 %110, 0
br i1 %111, label %112, label %157
112: ; preds = %109
%113 = load i8*, i8** %13
%114 = load i32, i32* %24
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds i8, i8* %113, i64 %115
%117 = load i8, i8* %116
%118 = sext i8 %117 to i32
%119 = load i8*, i8** %13
%120 = load i32, i32* %24
%121 = sub nsw i32 %120, 1
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i8, i8* %119, i64 %122
%124 = load i8, i8* %123
%125 = sext i8 %124 to i32
%126 = icmp ne i32 %118, %125
br i1 %126, label %162, label %127
127: ; preds = %112
%128 = load i8*, i8** %14
%129 = load i32, i32* %24
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds i8, i8* %128, i64 %130
%132 = load i8, i8* %131
%133 = sext i8 %132 to i32
%134 = load i8*, i8** %14
%135 = load i32, i32* %24
%136 = sub nsw i32 %135, 1
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds i8, i8* %134, i64 %137
%139 = load i8, i8* %138
%140 = sext i8 %139 to i32
%141 = icmp ne i32 %133, %140
br i1 %141, label %162, label %142
142: ; preds = %127
%143 = load i8*, i8** %15
%144 = load i32, i32* %24
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds i8, i8* %143, i64 %145
%147 = load i8, i8* %146
%148 = sext i8 %147 to i32
%149 = load i8*, i8** %15
%150 = load i32, i32* %24
%151 = sub nsw i32 %150, 1
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds i8, i8* %149, i64 %152
%154 = load i8, i8* %153
%155 = sext i8 %154 to i32
%156 = icmp ne i32 %148, %155
br i1 %156, label %162, label %157
157: ; preds = %142, %109
%158 = load i32, i32* %24
%159 = load i32, i32* %16
%160 = sub nsw i32 %159, 1
%161 = icmp eq i32 %158, %160
br i1 %161, label %162, label %317
162: ; preds = %157, %142, %127, %112, %99, %69
%163 = load i32, i32* %26
%164 = load i32, i32* %30
%165 = icmp sge i32 %163, %164
br i1 %165, label %166, label %178
166: ; preds = %162
%167 = load i32, i32* %27
%168 = load i32, i32* %30
%169 = icmp sge i32 %167, %168
br i1 %169, label %170, label %178
170: ; preds = %166
%171 = load i32, i32* %28
%172 = load i32, i32* %30
%173 = icmp slt i32 %171, %172
br i1 %173, label %174, label %178
174: ; preds = %170
%175 = load i32*, i32** %20
%176 = load i32, i32* %175
%177 = add nsw i32 %176, 1
store i32 %177, i32* %175
br label %229
178: ; preds = %170, %166, %162
%179 = load i32, i32* %26
%180 = load i32, i32* %30
%181 = icmp slt i32 %179, %180
br i1 %181, label %182, label %194
182: ; preds = %178
%183 = load i32, i32* %27
%184 = load i32, i32* %30
%185 = icmp sge i32 %183, %184
br i1 %185, label %186, label %194
186: ; preds = %182
%187 = load i32, i32* %28
%188 = load i32, i32* %30
%189 = icmp sge i32 %187, %188
br i1 %189, label %190, label %194
190: ; preds = %186
%191 = load i32*, i32** %21
%192 = load i32, i32* %191
%193 = add nsw i32 %192, 1
store i32 %193, i32* %191
br label %228
194: ; preds = %186, %182, %178
%195 = load i32, i32* %26
%196 = load i32, i32* %30
%197 = icmp sge i32 %195, %196
br i1 %197, label %198, label %210
198: ; preds = %194
%199 = load i32, i32* %27
%200 = load i32, i32* %30
%201 = icmp slt i32 %199, %200
br i1 %201, label %202, label %210
202: ; preds = %198
%203 = load i32, i32* %28
%204 = load i32, i32* %30
%205 = icmp slt i32 %203, %204
br i1 %205, label %206, label %210
206: ; preds = %202
%207 = load i32*, i32** %22
%208 = load i32, i32* %207
%209 = add nsw i32 %208, 1
store i32 %209, i32* %207
br label %227
210: ; preds = %202, %198, %194
%211 = load i32, i32* %26
%212 = load i32, i32* %30
%213 = icmp slt i32 %211, %212
br i1 %213, label %214, label %226
214: ; preds = %210
%215 = load i32, i32* %27
%216 = load i32, i32* %30
%217 = icmp slt i32 %215, %216
br i1 %217, label %218, label %226
218: ; preds = %214
%219 = load i32, i32* %28
%220 = load i32, i32* %30
%221 = icmp sge i32 %219, %220
br i1 %221, label %222, label %226
222: ; preds = %218
%223 = load i32*, i32** %23
%224 = load i32, i32* %223
%225 = add nsw i32 %224, 1
store i32 %225, i32* %223
br label %226
226: ; preds = %222, %218, %214, %210
br label %227
227: ; preds = %226, %206
br label %228
228: ; preds = %227, %190
br label %229
229: ; preds = %228, %174
%230 = load i32, i32* %26
%231 = load i32, i32* %30
%232 = icmp sge i32 %230, %231
br i1 %232, label %233, label %258
233: ; preds = %229
%234 = load i32, i32* %27
%235 = load i32, i32* %30
%236 = icmp slt i32 %234, %235
br i1 %236, label %241, label %237
237: ; preds = %233
%238 = load i32, i32* %28
%239 = load i32, i32* %30
%240 = icmp slt i32 %238, %239
br i1 %240, label %241, label %258
241: ; preds = %237, %233
%242 = load i32, i32* %29
%243 = sub nsw i32 %242, 1
store i32 %243, i32* %25
br label %244
244: ; preds = %254, %241
%245 = load i32, i32* %25
%246 = load i32, i32* %24
%247 = icmp slt i32 %245, %246
br i1 %247, label %248, label %257
248: ; preds = %244
%249 = load i8, i8* %19
%250 = load i8*, i8** %13
%251 = load i32, i32* %25
%252 = sext i32 %251 to i64
%253 = getelementptr inbounds i8, i8* %250, i64 %252
store i8 %249, i8* %253
br label %254
254: ; preds = %248
%255 = load i32, i32* %25
%256 = add nsw i32 %255, 1
store i32 %256, i32* %25
br label %244
257: ; preds = %244
br label %258
258: ; preds = %257, %237, %229
%259 = load i32, i32* %27
%260 = load i32, i32* %30
%261 = icmp sge i32 %259, %260
br i1 %261, label %262, label %287
262: ; preds = %258
%263 = load i32, i32* %26
%264 = load i32, i32* %30
%265 = icmp slt i32 %263, %264
br i1 %265, label %270, label %266
266: ; preds = %262
%267 = load i32, i32* %28
%268 = load i32, i32* %30
%269 = icmp slt i32 %267, %268
br i1 %269, label %270, label %287
270: ; preds = %266, %262
%271 = load i32, i32* %29
%272 = sub nsw i32 %271, 1
store i32 %272, i32* %25
br label %273
273: ; preds = %283, %270
%274 = load i32, i32* %25
%275 = load i32, i32* %24
%276 = icmp slt i32 %274, %275
br i1 %276, label %277, label %286
277: ; preds = %273
%278 = load i8, i8* %19
%279 = load i8*, i8** %14
%280 = load i32, i32* %25
%281 = sext i32 %280 to i64
%282 = getelementptr inbounds i8, i8* %279, i64 %281
store i8 %278, i8* %282
br label %283
283: ; preds = %277
%284 = load i32, i32* %25
%285 = add nsw i32 %284, 1
store i32 %285, i32* %25
br label %273
286: ; preds = %273
br label %287
287: ; preds = %286, %266, %258
%288 = load i32, i32* %28
%289 = load i32, i32* %30
%290 = icmp sge i32 %288, %289
br i1 %290, label %291, label %316
291: ; preds = %287
%292 = load i32, i32* %26
%293 = load i32, i32* %30
%294 = icmp slt i32 %292, %293
br i1 %294, label %299, label %295
295: ; preds = %291
%296 = load i32, i32* %27
%297 = load i32, i32* %30
%298 = icmp slt i32 %296, %297
br i1 %298, label %299, label %316
299: ; preds = %295, %291
%300 = load i32, i32* %29
%301 = sub nsw i32 %300, 1
store i32 %301, i32* %25
br label %302
302: ; preds = %312, %299
%303 = load i32, i32* %25
%304 = load i32, i32* %24
%305 = icmp slt i32 %303, %304
br i1 %305, label %306, label %315
306: ; preds = %302
%307 = load i8, i8* %19
%308 = load i8*, i8** %15
%309 = load i32, i32* %25
%310 = sext i32 %309 to i64
%311 = getelementptr inbounds i8, i8* %308, i64 %310
store i8 %307, i8* %311
br label %312
312: ; preds = %306
%313 = load i32, i32* %25
%314 = add nsw i32 %313, 1
store i32 %314, i32* %25
br label %302
315: ; preds = %302
br label %316
316: ; preds = %315, %295, %287
store i32 0, i32* %26
store i32 0, i32* %27
store i32 0, i32* %28
store i32 -1, i32* %29
br label %371
317: ; preds = %157
%318 = load i8*, i8** %13
%319 = load i32, i32* %24
%320 = sext i32 %319 to i64
%321 = getelementptr inbounds i8, i8* %318, i64 %320
%322 = load i8, i8* %321
%323 = sext i8 %322 to i32
%324 = load i8, i8* %17
%325 = sext i8 %324 to i32
%326 = icmp eq i32 %323, %325
br i1 %326, label %327, label %330
327: ; preds = %317
%328 = load i32, i32* %26
%329 = add nsw i32 %328, 1
store i32 %329, i32* %26
br label %330
330: ; preds = %327, %317
%331 = load i8*, i8** %14
%332 = load i32, i32* %24
%333 = sext i32 %332 to i64
%334 = getelementptr inbounds i8, i8* %331, i64 %333
%335 = load i8, i8* %334
%336 = sext i8 %335 to i32
%337 = load i8, i8* %17
%338 = sext i8 %337 to i32
%339 = icmp eq i32 %336, %338
br i1 %339, label %340, label %343
340: ; preds = %330
%341 = load i32, i32* %27
%342 = add nsw i32 %341, 1
store i32 %342, i32* %27
br label %343
343: ; preds = %340, %330
%344 = load i8*, i8** %15
%345 = load i32, i32* %24
%346 = sext i32 %345 to i64
%347 = getelementptr inbounds i8, i8* %344, i64 %346
%348 = load i8, i8* %347
%349 = sext i8 %348 to i32
%350 = load i8, i8* %17
%351 = sext i8 %350 to i32
%352 = icmp eq i32 %349, %351
br i1 %352, label %353, label %356
353: ; preds = %343
%354 = load i32, i32* %28
%355 = add nsw i32 %354, 1
store i32 %355, i32* %28
br label %356
356: ; preds = %353, %343
%357 = load i32, i32* %29
%358 = icmp eq i32 %357, -1
br i1 %358, label %359, label %370
359: ; preds = %356
%360 = load i32, i32* %26
%361 = icmp eq i32 %360, 1
br i1 %361, label %368, label %362
362: ; preds = %359
%363 = load i32, i32* %27
%364 = icmp eq i32 %363, 1
br i1 %364, label %368, label %365
365: ; preds = %362
%366 = load i32, i32* %28
%367 = icmp eq i32 %366, 1
br i1 %367, label %368, label %370
368: ; preds = %365, %362, %359
%369 = load i32, i32* %24
store i32 %369, i32* %29
br label %370
370: ; preds = %368, %365, %356
br label %371
371: ; preds = %370, %316
br label %372
372: ; preds = %371
%373 = load i32, i32* %24
%374 = add nsw i32 %373, 1
store i32 %374, i32* %24
br label %42
375: ; preds = %42
%376 = load i8*, i8** %13
%377 = load i32, i32* %16
%378 = load i8, i8* %17
%379 = load i8, i8* %19
%380 = load i32, i32* %30
%381 = call i32 @CorrectAsn(i8* %376, i32 %377, i8 signext %378, i8 signext %379, i32 %380)
%382 = load i8*, i8** %14
%383 = load i32, i32* %16
%384 = load i8, i8* %17
%385 = load i8, i8* %19
%386 = load i32, i32* %30
%387 = call i32 @CorrectAsn(i8* %382, i32 %383, i8 signext %384, i8 signext %385, i32 %386)
%388 = load i8*, i8** %15
%389 = load i32, i32* %16
%390 = load i8, i8* %17
%391 = load i8, i8* %19
%392 = load i32, i32* %30
%393 = call i32 @CorrectAsn(i8* %388, i32 %389, i8 signext %390, i8 signext %391, i32 %392)
%394 = load i32*, i32** %20
%395 = load i32, i32* %394
%396 = load i32*, i32** %21
%397 = load i32, i32* %396
%398 = mul nsw i32 %395, %397
%399 = load i32*, i32** %22
%400 = load i32, i32* %399
%401 = mul nsw i32 %398, %400
%402 = load i32*, i32** %23
%403 = load i32, i32* %402
%404 = mul nsw i32 %401, %403
store i32 %404, i32* %12
br label %405
405: ; preds = %375, %38
%406 = load i32, i32* %12
ret i32 %406
}

LLVM IR (-O2):
define i32 @FullElement(i8* %0, i8* %1, i8* %2, i32 %3, i8 signext %4, i32 %5, i8 signext %6, i32* nocapture %7, i32* nocapture %8, i32* nocapture %9, i32* nocapture %10) {
store i32 0, i32* %7
store i32 0, i32* %8
store i32 0, i32* %9
store i32 0, i32* %10
%12 = icmp slt i32 %5, %3
br i1 %12, label %13, label %155
13: ; preds = %11
%14 = add nsw i32 %5, -1
%15 = icmp sgt i32 %3, 1
br i1 %15, label %16, label %144
16: ; preds = %13
%17 = add nsw i32 %3, -1
%18 = zext i32 %17 to i64
%19 = zext i32 %3 to i64
br label %20
20: ; preds = %16, %137
%21 = phi i64 [ 1, %16 ], [ %142, %137 ]
%22 = phi i32 [ -1, %16 ], [ %141, %137 ]
%23 = phi i32 [ 0, %16 ], [ %140, %137 ]
%24 = phi i32 [ 0, %16 ], [ %139, %137 ]
%25 = phi i32 [ 0, %16 ], [ %138, %137 ]
%26 = getelementptr inbounds i8, i8* %0, i64 %21
%27 = load i8, i8* %26
%28 = icmp eq i8 %27, %4
br i1 %28, label %37, label %29
29: ; preds = %20
%30 = getelementptr inbounds i8, i8* %1, i64 %21
%31 = load i8, i8* %30
%32 = icmp eq i8 %31, %4
br i1 %32, label %37, label %33
33: ; preds = %29
%34 = getelementptr inbounds i8, i8* %2, i64 %21
%35 = load i8, i8* %34
%36 = icmp eq i8 %35, %4
br i1 %36, label %37, label %56
37: ; preds = %20, %29, %33
%38 = add nsw i64 %21, -1
%39 = getelementptr inbounds i8, i8* %0, i64 %38
%40 = load i8, i8* %39
%41 = icmp eq i8 %27, %40
br i1 %41, label %42, label %56
42: ; preds = %37
%43 = getelementptr inbounds i8, i8* %1, i64 %21
%44 = load i8, i8* %43
%45 = getelementptr inbounds i8, i8* %1, i64 %38
%46 = load i8, i8* %45
%47 = icmp eq i8 %44, %46
br i1 %47, label %48, label %56
48: ; preds = %42
%49 = getelementptr inbounds i8, i8* %2, i64 %21
%50 = load i8, i8* %49
%51 = getelementptr inbounds i8, i8* %2, i64 %38
%52 = load i8, i8* %51
%53 = icmp ne i8 %50, %52
%54 = icmp eq i64 %21, %18
%55 = select i1 %53, i1 true, i1 %54
br i1 %55, label %56, label %119
56: ; preds = %48, %42, %37, %33
%57 = icmp slt i32 %25, %14
%58 = icmp slt i32 %24, %14
%59 = select i1 %57, i1 true, i1 %58
%60 = xor i1 %59, true
%61 = icmp slt i32 %23, %14
%62 = select i1 %60, i1 %61, i1 false
br i1 %62, label %74, label %63
63: ; preds = %56
%64 = xor i1 %57, true
%65 = select i1 %64, i1 true, i1 %58
%66 = select i1 %65, i1 true, i1 %61
br i1 %66, label %67, label %74
67: ; preds = %63
%68 = select i1 %64, i1 %58, i1 false
%69 = select i1 %68, i1 %61, i1 false
br i1 %69, label %74, label %70
70: ; preds = %67
%71 = select i1 %57, i1 %58, i1 false
%72 = xor i1 %71, true
%73 = select i1 %72, i1 true, i1 %61
br i1 %73, label %78, label %74
74: ; preds = %70, %67, %63, %56
%75 = phi i32* [ %7, %56 ], [ %8, %63 ], [ %9, %67 ], [ %10, %70 ]
%76 = load i32, i32* %75
%77 = add nsw i32 %76, 1
store i32 %77, i32* %75
br label %78
78: ; preds = %74, %70
br i1 %57, label %92, label %79
79: ; preds = %78
%80 = select i1 %58, i1 true, i1 %61
%81 = sext i32 %22 to i64
%82 = icmp sge i64 %21, %81
%83 = select i1 %80, i1 %82, i1 false
br i1 %83, label %84, label %92
84: ; preds = %79
%85 = add i32 %22, -1
%86 = sext i32 %85 to i64
%87 = getelementptr i8, i8* %0, i64 %86
%88 = trunc i64 %21 to i32
%89 = sub i32 %88, %22
%90 = zext i32 %89 to i64
%91 = add nuw nsw i64 %90, 1
br label %92
92: ; preds = %84, %79, %78
br i1 %58, label %106, label %93
93: ; preds = %92
%94 = select i1 %57, i1 true, i1 %61
%95 = sext i32 %22 to i64
%96 = icmp sge i64 %21, %95
%97 = select i1 %94, i1 %96, i1 false
br i1 %97, label %98, label %106
98: ; preds = %93
%99 = add i32 %22, -1
%100 = sext i32 %99 to i64
%101 = getelementptr i8, i8* %1, i64 %100
%102 = trunc i64 %21 to i32
%103 = sub i32 %102, %22
%104 = zext i32 %103 to i64
%105 = add nuw nsw i64 %104, 1
br label %106
106: ; preds = %98, %93, %92
br i1 %61, label %137, label %107
107: ; preds = %106
%108 = sext i32 %22 to i64
%109 = icmp sge i64 %21, %108
%110 = select i1 %59, i1 %109, i1 false
br i1 %110, label %111, label %137
111: ; preds = %107
%112 = add i32 %22, -1
%113 = sext i32 %112 to i64
%114 = getelementptr i8, i8* %2, i64 %113
%115 = trunc i64 %21 to i32
%116 = sub i32 %115, %22
%117 = zext i32 %116 to i64
%118 = add nuw nsw i64 %117, 1
br label %137
119: ; preds = %48
%120 = zext i1 %28 to i32
%121 = add nsw i32 %25, %120
%122 = icmp eq i8 %44, %4
%123 = zext i1 %122 to i32
%124 = add nsw i32 %24, %123
%125 = icmp eq i8 %50, %4
%126 = zext i1 %125 to i32
%127 = add nsw i32 %23, %126
%128 = icmp eq i32 %22, -1
br i1 %128, label %129, label %137
129: ; preds = %119
%130 = icmp eq i32 %121, 1
%131 = icmp eq i32 %124, 1
%132 = select i1 %130, i1 true, i1 %131
%133 = icmp eq i32 %127, 1
%134 = select i1 %132, i1 true, i1 %133
%135 = trunc i64 %21 to i32
%136 = select i1 %134, i32 %135, i32 -1
br label %137
137: ; preds = %111, %129, %106, %107, %119
%138 = phi i32 [ %121, %119 ], [ 0, %107 ], [ 0, %106 ], [ %121, %129 ], [ 0, %111 ]
%139 = phi i32 [ %124, %119 ], [ 0, %107 ], [ 0, %106 ], [ %124, %129 ], [ 0, %111 ]
%140 = phi i32 [ %127, %119 ], [ 0, %107 ], [ 0, %106 ], [ %127, %129 ], [ 0, %111 ]
%141 = phi i32 [ %22, %119 ], [ -1, %107 ], [ -1, %106 ], [ %136, %129 ], [ -1, %111 ]
%142 = add nuw nsw i64 %21, 1
%143 = icmp eq i64 %142, %19
br i1 %143, label %144, label %20
144: ; preds = %137, %13
%145 = tail call i32 @CorrectAsn(i8* %0, i32 %3, i8 signext %4, i8 signext %6, i32 %14)
%146 = tail call i32 @CorrectAsn(i8* %1, i32 %3, i8 signext %4, i8 signext %6, i32 %14)
%147 = tail call i32 @CorrectAsn(i8* %2, i32 %3, i8 signext %4, i8 signext %6, i32 %14)
%148 = load i32, i32* %7
%149 = load i32, i32* %8
%150 = mul nsw i32 %149, %148
%151 = load i32, i32* %9
%152 = mul nsw i32 %150, %151
%153 = load i32, i32* %10
%154 = mul nsw i32 %152, %153
br label %155
155: ; preds = %11, %144
%156 = phi i32 [ %154, %144 ], [ 0, %11 ]
ret i32 %156
}