#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 */
scalar_t__ strstr(char *, char *);
char tolower(char);
int matchBody(char *sorig, char *p, int nocase) {
  static int dummy = 0;
  char *s = sorig;
  int escaped = 0;
  if (strstr(p, "WS-0000")) {
    if (strstr(s, "ws_ftp_pro.html")) {
      dummy = 1;
    }
  }
  while (1) {
    char *word;
    int wordLen;
    int wordPos;
    if (escaped) {
      escaped = 0;
      if ((*s == '\0') && (*p == '\0')) {
        return 1;
      }
      if ((nocase ? tolower(*p) : (*p)) != (nocase ? tolower(*s) : (*s))) {
        goto nextPattern;
      }
      p++;
      s++;
      continue;
    }
    switch (*p) {
    case '\\':
      escaped = 1;
      p++;
      continue;
    case '*':
      p++;
      wordLen = 0;
      word = p;
      while (1) {
        if ((*p) == '*') {
          break;
        }
        wordLen++;
        if ((*p == '\0') || (*p == '|')) {
          break;
        }
        p++;
      }
      wordPos = 0;
      while (1) {
        if (wordPos == wordLen) {
          if ((*p == '\0') || (*p == '|')) {
            return 1;
          }
          break;
        }
        if (((((nocase ? tolower(*s) : (*s))) ==
              (nocase ? tolower(word[wordPos]) : (word[wordPos]))) ||
             ((*s == '\0') && (word[wordPos] == '|'))) ||
            (((*s != '\0') && (*s != '|')) && (word[wordPos] == '?'))) {
          wordPos++;
          s++;
        } else {
          s -= wordPos;
          if (!(*s)) {
            goto nextPattern;
          }
          s++;
          wordPos = 0;
        }
      }
      break;
    case '?':
      p++;
      s++;
      break;
    default:
      if ((*s == '\0') && ((*p == '\0') || (*p == '|'))) {
        return 1;
      }
      if ((nocase ? tolower(*p) : (*p)) != (nocase ? tolower(*s) : (*s))) {
        goto nextPattern;
      }
      p++;
      s++;
      break;
    }
    continue;
  nextPattern:
    while (1) {
      if (*p == '\0') {
        return 0;
      }
      if (*p == '|') {
        p++;
        s = sorig;
        break;
      }
      p++;
    }
  }
}


x86 assembly (clang, -O0):
<matchBody>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x18(%rbp),%rdi
lea    0xeb3(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     1185 <matchBody+0x65>
mov    -0x28(%rbp),%rdi
lea    0xea1(%rip),%rsi
call   1040 <strstr@plt>
cmp    $0x0,%rax
je     1180 <matchBody+0x60>
movl   $0x1,0x2eb4(%rip)
jmp    1185 <matchBody+0x65>
jmp    118a <matchBody+0x6a>
cmpl   $0x0,-0x2c(%rbp)
je     1253 <matchBody+0x133>
movl   $0x0,-0x2c(%rbp)
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    11c7 <matchBody+0xa7>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    11c7 <matchBody+0xa7>
movl   $0x1,-0x4(%rbp)
jmp    15ca <matchBody+0x4aa>
cmpl   $0x0,-0x1c(%rbp)
je     11e8 <matchBody+0xc8>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1030 <tolower@plt>
movsbl %al,%eax
mov    %eax,-0x44(%rbp)
jmp    11f2 <matchBody+0xd2>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x0,-0x1c(%rbp)
je     1219 <matchBody+0xf9>
mov    -0x28(%rbp),%rax
movsbl (%rax),%edi
call   1030 <tolower@plt>
movsbl %al,%eax
mov    %eax,-0x4c(%rbp)
jmp    1223 <matchBody+0x103>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x4c(%rbp),%ecx
cmp    %ecx,%eax
je     1236 <matchBody+0x116>
jmp    156a <matchBody+0x44a>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    118a <matchBody+0x6a>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x50(%rbp)
sub    $0x2a,%eax
je     12a5 <matchBody+0x185>
jmp    126b <matchBody+0x14b>
mov    -0x50(%rbp),%eax
sub    $0x3f,%eax
je     1485 <matchBody+0x365>
jmp    127c <matchBody+0x15c>
mov    -0x50(%rbp),%eax
sub    $0x5c,%eax
jne    14a2 <matchBody+0x382>
jmp    128d <matchBody+0x16d>
movl   $0x1,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    118a <matchBody+0x6a>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    12d5 <matchBody+0x1b5>
jmp    1314 <matchBody+0x1f4>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     12fe <matchBody+0x1de>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7c,%eax
jne    1303 <matchBody+0x1e3>
jmp    1314 <matchBody+0x1f4>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    12c0 <matchBody+0x1a0>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jne    1358 <matchBody+0x238>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1347 <matchBody+0x227>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7c,%eax
jne    1353 <matchBody+0x233>
movl   $0x1,-0x4(%rbp)
jmp    15ca <matchBody+0x4aa>
jmp    1480 <matchBody+0x360>
cmpl   $0x0,-0x1c(%rbp)
je     1379 <matchBody+0x259>
mov    -0x28(%rbp),%rax
movsbl (%rax),%edi
call   1030 <tolower@plt>
movsbl %al,%eax
mov    %eax,-0x54(%rbp)
jmp    1383 <matchBody+0x263>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x58(%rbp)
cmpl   $0x0,-0x1c(%rbp)
je     13af <matchBody+0x28f>
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <tolower@plt>
movsbl %al,%eax
mov    %eax,-0x5c(%rbp)
jmp    13be <matchBody+0x29e>
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x58(%rbp),%eax
mov    -0x5c(%rbp),%ecx
cmp    %ecx,%eax
je     1426 <matchBody+0x306>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    13f1 <matchBody+0x2d1>
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7c,%eax
je     1426 <matchBody+0x306>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1440 <matchBody+0x320>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7c,%eax
je     1440 <matchBody+0x320>
mov    -0x38(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3f,%eax
jne    1440 <matchBody+0x320>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    147b <matchBody+0x35b>
mov    -0x40(%rbp),%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmpb   $0x0,(%rax)
jne    1468 <matchBody+0x348>
jmp    156a <matchBody+0x44a>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
movl   $0x0,-0x40(%rbp)
jmp    131b <matchBody+0x1fb>
jmp    1565 <matchBody+0x445>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1565 <matchBody+0x445>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    14de <matchBody+0x3be>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     14d2 <matchBody+0x3b2>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7c,%eax
jne    14de <matchBody+0x3be>
movl   $0x1,-0x4(%rbp)
jmp    15ca <matchBody+0x4aa>
cmpl   $0x0,-0x1c(%rbp)
je     14ff <matchBody+0x3df>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edi
call   1030 <tolower@plt>
movsbl %al,%eax
mov    %eax,-0x60(%rbp)
jmp    1509 <matchBody+0x3e9>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x64(%rbp)
cmpl   $0x0,-0x1c(%rbp)
je     1530 <matchBody+0x410>
mov    -0x28(%rbp),%rax
movsbl (%rax),%edi
call   1030 <tolower@plt>
movsbl %al,%eax
mov    %eax,-0x68(%rbp)
jmp    153a <matchBody+0x41a>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x68(%rbp)
mov    -0x64(%rbp),%eax
mov    -0x68(%rbp),%ecx
cmp    %ecx,%eax
je     154d <matchBody+0x42d>
jmp    156a <matchBody+0x44a>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    118a <matchBody+0x6a>
jmp    156f <matchBody+0x44f>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    158b <matchBody+0x46b>
movl   $0x0,-0x4(%rbp)
jmp    15ca <matchBody+0x4aa>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7c,%eax
jne    15b4 <matchBody+0x494>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
jmp    15c5 <matchBody+0x4a5>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    156f <matchBody+0x44f>
jmp    118a <matchBody+0x6a>
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<matchBody>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %edx,0x4(%rsp)
mov    %rsi,%rbp
mov    %rdi,%r14
lea    0xec1(%rip),%rsi
mov    %rbp,%rdi
call   1040 <strstr@plt>
test   %rax,%rax
je     115b <matchBody+0x3b>
lea    0xeb5(%rip),%rsi
mov    %r14,%rdi
call   1040 <strstr@plt>
mov    %r14,%r13
mov    %r14,0x8(%rsp)
jmp    1178 <matchBody+0x58>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rbp
add    $0x1,%r13
mov    $0x1,%cl
test   $0x1,%cl
jne    11a7 <matchBody+0x87>
jmp    11c3 <matchBody+0xa3>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl 0x1(%rbp),%eax
add    $0x1,%rbp
mov    $0x1,%cl
cmp    $0x2a,%al
jne    124e <matchBody+0x12e>
test   $0x1,%cl
je     11c3 <matchBody+0xa3>
movzbl 0x0(%rbp),%ebx
movsbl %bl,%edi
cmp    $0x2a,%edi
je     1190 <matchBody+0x70>
cmp    $0x5c,%edi
jne    1200 <matchBody+0xe0>
add    $0x1,%rbp
xor    %ecx,%ecx
test   $0x1,%cl
jne    11a7 <matchBody+0x87>
mov    0x0(%r13),%al
test   %al,%al
jne    11d5 <matchBody+0xb5>
cmpb   $0x0,0x0(%rbp)
je     137a <matchBody+0x25a>
mov    0x0(%rbp),%bl
cmpl   $0x0,0x4(%rsp)
je     11f3 <matchBody+0xd3>
movsbl %bl,%edi
call   1030 <tolower@plt>
mov    %eax,%ebx
movsbl 0x0(%r13),%edi
call   1030 <tolower@plt>
cmp    %al,%bl
jne    1330 <matchBody+0x210>
jmp    1170 <matchBody+0x50>
cmp    $0x3f,%edi
je     1170 <matchBody+0x50>
mov    0x0(%r13),%cl
test   %cl,%cl
jne    1227 <matchBody+0x107>
mov    $0x1,%eax
test   %bl,%bl
je     136b <matchBody+0x24b>
cmp    $0x7c,%bl
je     136b <matchBody+0x24b>
cmpl   $0x0,0x4(%rsp)
je     1241 <matchBody+0x121>
call   1030 <tolower@plt>
mov    %eax,%ebx
movsbl 0x0(%r13),%edi
call   1030 <tolower@plt>
mov    %eax,%ecx
cmp    %cl,%bl
jne    1330 <matchBody+0x210>
jmp    1170 <matchBody+0x50>
mov    $0x1,%ecx
mov    %rbp,%rsi
cs nopw 0x0(%rax,%rax,1)
mov    %ecx,%edx
test   %al,%al
je     1279 <matchBody+0x159>
cmp    $0x7c,%al
je     1279 <matchBody+0x159>
movzbl 0x1(%rsi),%eax
add    $0x1,%rsi
lea    0x1(%rdx),%ecx
cmp    $0x2a,%al
jne    1260 <matchBody+0x140>
mov    %rsi,0x10(%rsp)
xor    %r15d,%r15d
jmp    12a1 <matchBody+0x181>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r15d
add    $0x1,%r13
cmp    %edx,%r15d
je     1348 <matchBody+0x228>
movzbl 0x0(%r13),%ebx
movslq %r15d,%rcx
cmpl   $0x0,0x4(%rsp)
je     12e0 <matchBody+0x1c0>
movsbl %bl,%edi
mov    %rdx,%r14
mov    %rcx,%r12
call   1030 <tolower@plt>
mov    %eax,%ebx
movsbl 0x0(%rbp,%r12,1),%edi
call   1030 <tolower@plt>
mov    %r12,%rcx
mov    %r14,%rdx
cmp    %al,%bl
je     1290 <matchBody+0x170>
jmp    12ec <matchBody+0x1cc>
nopw   0x0(%rax,%rax,1)
movslq %r15d,%rax
movzbl 0x0(%rbp,%rax,1),%eax
cmp    %al,%bl
je     1290 <matchBody+0x170>
movzbl 0x0(%r13),%eax
test   %al,%al
je     1302 <matchBody+0x1e2>
cmp    $0x7c,%al
je     130c <matchBody+0x1ec>
cmpb   $0x3f,0x0(%rbp,%rcx,1)
je     1290 <matchBody+0x170>
jmp    130c <matchBody+0x1ec>
movslq %r15d,%rcx
cmpb   $0x7c,0x0(%rbp,%rcx,1)
je     1290 <matchBody+0x170>
sub    %rcx,%r13
xor    %r15d,%r15d
cmpb   $0x0,0x0(%r13)
jne    1294 <matchBody+0x174>
mov    0x10(%rsp),%rbp
mov    0x8(%rsp),%r14
nopw   0x0(%rax,%rax,1)
add    $0x1,%rbp
movzbl -0x1(%rbp),%eax
test   %al,%al
je     1369 <matchBody+0x249>
cmp    $0x7c,%al
jne    1330 <matchBody+0x210>
mov    %r14,%r13
jmp    1178 <matchBody+0x58>
mov    0x10(%rsp),%rbp
mov    0x0(%rbp),%cl
mov    $0x1,%eax
test   %cl,%cl
je     136b <matchBody+0x24b>
cmp    $0x7c,%cl
mov    0x8(%rsp),%r14
jne    1178 <matchBody+0x58>
jmp    136b <matchBody+0x24b>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0x1,%eax
jmp    136b <matchBody+0x24b>

LLVM IR (-O0):
@matchBody.dummy = internal global i32 0
@.str = [8 x i8] c"WS-0000\00"
@.str.1 = [16 x i8] c"ws_ftp_pro.html\00"
define i32 @matchBody(i8* %0, i8* %1, i32 %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i32
%10 = alloca i8*
%11 = alloca i32
%12 = alloca i32
store i8* %0, i8** %5
store i8* %1, i8** %6
store i32 %2, i32* %7
%13 = load i8*, i8** %5
store i8* %13, i8** %8
store i32 0, i32* %9
%14 = load i8*, i8** %6
%15 = call i64 @strstr(i8* %14, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0))
%16 = icmp ne i64 %15, 0
br i1 %16, label %17, label %23
17: ; preds = %3
%18 = load i8*, i8** %8
%19 = call i64 @strstr(i8* %18, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.1, i64 0, i64 0))
%20 = icmp ne i64 %19, 0
br i1 %20, label %21, label %22
21: ; preds = %17
store i32 1, i32* @matchBody.dummy
br label %22
22: ; preds = %21, %17
br label %23
23: ; preds = %22, %3
br label %24
24: ; preds = %23, %67, %76, %262, %282
%25 = load i32, i32* %9
%26 = icmp ne i32 %25, 0
br i1 %26, label %27, label %72
27: ; preds = %24
store i32 0, i32* %9
%28 = load i8*, i8** %8
%29 = load i8, i8* %28
%30 = sext i8 %29 to i32
%31 = icmp eq i32 %30, 0
br i1 %31, label %32, label %38
32: ; preds = %27
%33 = load i8*, i8** %6
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = icmp eq i32 %35, 0
br i1 %36, label %37, label %38
37: ; preds = %32
store i32 1, i32* %4
br label %283
38: ; preds = %32, %27
%39 = load i32, i32* %7
%40 = icmp ne i32 %39, 0
br i1 %40, label %41, label %46
41: ; preds = %38
%42 = load i8*, i8** %6
%43 = load i8, i8* %42
%44 = call signext i8 @tolower(i8 signext %43)
%45 = sext i8 %44 to i32
br label %50
46: ; preds = %38
%47 = load i8*, i8** %6
%48 = load i8, i8* %47
%49 = sext i8 %48 to i32
br label %50
50: ; preds = %46, %41
%51 = phi i32 [ %45, %41 ], [ %49, %46 ]
%52 = load i32, i32* %7
%53 = icmp ne i32 %52, 0
br i1 %53, label %54, label %59
54: ; preds = %50
%55 = load i8*, i8** %8
%56 = load i8, i8* %55
%57 = call signext i8 @tolower(i8 signext %56)
%58 = sext i8 %57 to i32
br label %63
59: ; preds = %50
%60 = load i8*, i8** %8
%61 = load i8, i8* %60
%62 = sext i8 %61 to i32
br label %63
63: ; preds = %59, %54
%64 = phi i32 [ %58, %54 ], [ %62, %59 ]
%65 = icmp ne i32 %51, %64
br i1 %65, label %66, label %67
66: ; preds = %63
br label %263
67: ; preds = %63
%68 = load i8*, i8** %6
%69 = getelementptr inbounds i8, i8* %68, i32 1
store i8* %69, i8** %6
%70 = load i8*, i8** %8
%71 = getelementptr inbounds i8, i8* %70, i32 1
store i8* %71, i8** %8
br label %24
72: ; preds = %24
%73 = load i8*, i8** %6
%74 = load i8, i8* %73
%75 = sext i8 %74 to i32
switch i32 %75, label %212 [
i32 92, label %76
i32 42, label %79
i32 63, label %207
]
76: ; preds = %72
store i32 1, i32* %9
%77 = load i8*, i8** %6
%78 = getelementptr inbounds i8, i8* %77, i32 1
store i8* %78, i8** %6
br label %24
79: ; preds = %72
%80 = load i8*, i8** %6
%81 = getelementptr inbounds i8, i8* %80, i32 1
store i8* %81, i8** %6
store i32 0, i32* %11
%82 = load i8*, i8** %6
store i8* %82, i8** %10
br label %83
83: ; preds = %79, %102
%84 = load i8*, i8** %6
%85 = load i8, i8* %84
%86 = sext i8 %85 to i32
%87 = icmp eq i32 %86, 42
br i1 %87, label %88, label %89
88: ; preds = %83
br label %105
89: ; preds = %83
%90 = load i32, i32* %11
%91 = add nsw i32 %90, 1
store i32 %91, i32* %11
%92 = load i8*, i8** %6
%93 = load i8, i8* %92
%94 = sext i8 %93 to i32
%95 = icmp eq i32 %94, 0
br i1 %95, label %101, label %96
96: ; preds = %89
%97 = load i8*, i8** %6
%98 = load i8, i8* %97
%99 = sext i8 %98 to i32
%100 = icmp eq i32 %99, 124
br i1 %100, label %101, label %102
101: ; preds = %96, %89
br label %105
102: ; preds = %96
%103 = load i8*, i8** %6
%104 = getelementptr inbounds i8, i8* %103, i32 1
store i8* %104, i8** %6
br label %83
105: ; preds = %101, %88
store i32 0, i32* %12
br label %106
106: ; preds = %105, %205
%107 = load i32, i32* %12
%108 = load i32, i32* %11
%109 = icmp eq i32 %107, %108
br i1 %109, label %110, label %122
110: ; preds = %106
%111 = load i8*, i8** %6
%112 = load i8, i8* %111
%113 = sext i8 %112 to i32
%114 = icmp eq i32 %113, 0
br i1 %114, label %120, label %115
115: ; preds = %110
%116 = load i8*, i8** %6
%117 = load i8, i8* %116
%118 = sext i8 %117 to i32
%119 = icmp eq i32 %118, 124
br i1 %119, label %120, label %121
120: ; preds = %115, %110
store i32 1, i32* %4
br label %283
121: ; preds = %115
br label %206
122: ; preds = %106
%123 = load i32, i32* %7
%124 = icmp ne i32 %123, 0
br i1 %124, label %125, label %130
125: ; preds = %122
%126 = load i8*, i8** %8
%127 = load i8, i8* %126
%128 = call signext i8 @tolower(i8 signext %127)
%129 = sext i8 %128 to i32
br label %134
130: ; preds = %122
%131 = load i8*, i8** %8
%132 = load i8, i8* %131
%133 = sext i8 %132 to i32
br label %134
134: ; preds = %130, %125
%135 = phi i32 [ %129, %125 ], [ %133, %130 ]
%136 = load i32, i32* %7
%137 = icmp ne i32 %136, 0
br i1 %137, label %138, label %146
138: ; preds = %134
%139 = load i8*, i8** %10
%140 = load i32, i32* %12
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds i8, i8* %139, i64 %141
%143 = load i8, i8* %142
%144 = call signext i8 @tolower(i8 signext %143)
%145 = sext i8 %144 to i32
br label %153
146: ; preds = %134
%147 = load i8*, i8** %10
%148 = load i32, i32* %12
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds i8, i8* %147, i64 %149
%151 = load i8, i8* %150
%152 = sext i8 %151 to i32
br label %153
153: ; preds = %146, %138
%154 = phi i32 [ %145, %138 ], [ %152, %146 ]
%155 = icmp eq i32 %135, %154
br i1 %155, label %187, label %156
156: ; preds = %153
%157 = load i8*, i8** %8
%158 = load i8, i8* %157
%159 = sext i8 %158 to i32
%160 = icmp eq i32 %159, 0
br i1 %160, label %161, label %169
161: ; preds = %156
%162 = load i8*, i8** %10
%163 = load i32, i32* %12
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds i8, i8* %162, i64 %164
%166 = load i8, i8* %165
%167 = sext i8 %166 to i32
%168 = icmp eq i32 %167, 124
br i1 %168, label %187, label %169
169: ; preds = %161, %156
%170 = load i8*, i8** %8
%171 = load i8, i8* %170
%172 = sext i8 %171 to i32
%173 = icmp ne i32 %172, 0
br i1 %173, label %174, label %192
174: ; preds = %169
%175 = load i8*, i8** %8
%176 = load i8, i8* %175
%177 = sext i8 %176 to i32
%178 = icmp ne i32 %177, 124
br i1 %178, label %179, label %192
179: ; preds = %174
%180 = load i8*, i8** %10
%181 = load i32, i32* %12
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i8, i8* %180, i64 %182
%184 = load i8, i8* %183
%185 = sext i8 %184 to i32
%186 = icmp eq i32 %185, 63
br i1 %186, label %187, label %192
187: ; preds = %179, %161, %153
%188 = load i32, i32* %12
%189 = add nsw i32 %188, 1
store i32 %189, i32* %12
%190 = load i8*, i8** %8
%191 = getelementptr inbounds i8, i8* %190, i32 1
store i8* %191, i8** %8
br label %205
192: ; preds = %179, %174, %169
%193 = load i32, i32* %12
%194 = load i8*, i8** %8
%195 = sext i32 %193 to i64
%196 = sub i64 0, %195
%197 = getelementptr inbounds i8, i8* %194, i64 %196
store i8* %197, i8** %8
%198 = load i8*, i8** %8
%199 = load i8, i8* %198
%200 = icmp ne i8 %199, 0
br i1 %200, label %202, label %201
201: ; preds = %192
br label %263
202: ; preds = %192
%203 = load i8*, i8** %8
%204 = getelementptr inbounds i8, i8* %203, i32 1
store i8* %204, i8** %8
store i32 0, i32* %12
br label %205
205: ; preds = %202, %187
br label %106
206: ; preds = %121
br label %262
207: ; preds = %72
%208 = load i8*, i8** %6
%209 = getelementptr inbounds i8, i8* %208, i32 1
store i8* %209, i8** %6
%210 = load i8*, i8** %8
%211 = getelementptr inbounds i8, i8* %210, i32 1
store i8* %211, i8** %8
br label %262
212: ; preds = %72
%213 = load i8*, i8** %8
%214 = load i8, i8* %213
%215 = sext i8 %214 to i32
%216 = icmp eq i32 %215, 0
br i1 %216, label %217, label %228
217: ; preds = %212
%218 = load i8*, i8** %6
%219 = load i8, i8* %218
%220 = sext i8 %219 to i32
%221 = icmp eq i32 %220, 0
br i1 %221, label %227, label %222
222: ; preds = %217
%223 = load i8*, i8** %6
%224 = load i8, i8* %223
%225 = sext i8 %224 to i32
%226 = icmp eq i32 %225, 124
br i1 %226, label %227, label %228
227: ; preds = %222, %217
store i32 1, i32* %4
br label %283
228: ; preds = %222, %212
%229 = load i32, i32* %7
%230 = icmp ne i32 %229, 0
br i1 %230, label %231, label %236
231: ; preds = %228
%232 = load i8*, i8** %6
%233 = load i8, i8* %232
%234 = call signext i8 @tolower(i8 signext %233)
%235 = sext i8 %234 to i32
br label %240
236: ; preds = %228
%237 = load i8*, i8** %6
%238 = load i8, i8* %237
%239 = sext i8 %238 to i32
br label %240
240: ; preds = %236, %231
%241 = phi i32 [ %235, %231 ], [ %239, %236 ]
%242 = load i32, i32* %7
%243 = icmp ne i32 %242, 0
br i1 %243, label %244, label %249
244: ; preds = %240
%245 = load i8*, i8** %8
%246 = load i8, i8* %245
%247 = call signext i8 @tolower(i8 signext %246)
%248 = sext i8 %247 to i32
br label %253
249: ; preds = %240
%250 = load i8*, i8** %8
%251 = load i8, i8* %250
%252 = sext i8 %251 to i32
br label %253
253: ; preds = %249, %244
%254 = phi i32 [ %248, %244 ], [ %252, %249 ]
%255 = icmp ne i32 %241, %254
br i1 %255, label %256, label %257
256: ; preds = %253
br label %263
257: ; preds = %253
%258 = load i8*, i8** %6
%259 = getelementptr inbounds i8, i8* %258, i32 1
store i8* %259, i8** %6
%260 = load i8*, i8** %8
%261 = getelementptr inbounds i8, i8* %260, i32 1
store i8* %261, i8** %8
br label %262
262: ; preds = %257, %207, %206
br label %24
263: ; preds = %256, %201, %66
br label %264
264: ; preds = %263, %279
%265 = load i8*, i8** %6
%266 = load i8, i8* %265
%267 = sext i8 %266 to i32
%268 = icmp eq i32 %267, 0
br i1 %268, label %269, label %270
269: ; preds = %264
store i32 0, i32* %4
br label %283
270: ; preds = %264
%271 = load i8*, i8** %6
%272 = load i8, i8* %271
%273 = sext i8 %272 to i32
%274 = icmp eq i32 %273, 124
br i1 %274, label %275, label %279
275: ; preds = %270
%276 = load i8*, i8** %6
%277 = getelementptr inbounds i8, i8* %276, i32 1
store i8* %277, i8** %6
%278 = load i8*, i8** %5
store i8* %278, i8** %8
br label %282
279: ; preds = %270
%280 = load i8*, i8** %6
%281 = getelementptr inbounds i8, i8* %280, i32 1
store i8* %281, i8** %6
br label %264
282: ; preds = %275
br label %24
283: ; preds = %269, %227, %120, %37
%284 = load i32, i32* %4
ret i32 %284
}

LLVM IR (-O2):
@.str = [8 x i8] c"WS-0000\00"
@.str.1 = [16 x i8] c"ws_ftp_pro.html\00"
define i32 @matchBody(i8* %0, i8* %1, i32 %2) {
%4 = tail call i64 @strstr(i8* %1, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0))
%5 = icmp eq i64 %4, 0
br i1 %5, label %8, label %6
6: ; preds = %3
%7 = tail call i64 @strstr(i8* %0, i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.1, i64 0, i64 0))
br label %8
8: ; preds = %6, %3
%9 = icmp eq i32 %2, 0
br label %10
10: ; preds = %131, %8
%11 = phi i8* [ %1, %8 ], [ %132, %131 ]
%12 = phi i8* [ %0, %8 ], [ %133, %131 ]
br label %13
13: ; preds = %46, %10
%14 = phi i8* [ %11, %10 ], [ %47, %46 ]
%15 = phi i1 [ true, %10 ], [ %48, %46 ]
br i1 %15, label %37, label %16
16: ; preds = %13
%17 = load i8, i8* %12
%18 = icmp eq i8 %17, 0
br i1 %18, label %19, label %22
19: ; preds = %16
%20 = load i8, i8* %14
%21 = icmp eq i8 %20, 0
br i1 %21, label %136, label %22
22: ; preds = %19, %16
%23 = load i8, i8* %14
br i1 %9, label %28, label %24
24: ; preds = %22
%25 = tail call signext i8 @tolower(i8 signext %23)
%26 = load i8, i8* %12
%27 = tail call signext i8 @tolower(i8 signext %26)
br label %28
28: ; preds = %22, %24
%29 = phi i8 [ %25, %24 ], [ %23, %22 ]
%30 = phi i8 [ %27, %24 ], [ %17, %22 ]
%31 = icmp eq i8 %29, %30
br i1 %31, label %34, label %32
32: ; preds = %96, %119, %28
%33 = phi i8* [ %14, %119 ], [ %14, %28 ], [ %59, %96 ]
br label %126
34: ; preds = %28
%35 = getelementptr inbounds i8, i8* %14, i64 1
%36 = getelementptr inbounds i8, i8* %12, i64 1
br label %131
37: ; preds = %13
%38 = load i8, i8* %14
%39 = sext i8 %38 to i32
switch i32 %39, label %110 [
i32 92, label %40
i32 42, label %42
i32 63, label %107
]
40: ; preds = %37
%41 = getelementptr inbounds i8, i8* %14, i64 1
br label %46
42: ; preds = %37
%43 = getelementptr inbounds i8, i8* %14, i64 1
%44 = load i8, i8* %43
%45 = icmp eq i8 %44, 42
br i1 %45, label %46, label %49
46: ; preds = %42, %40
%47 = phi i8* [ %41, %40 ], [ %43, %42 ]
%48 = phi i1 [ false, %40 ], [ true, %42 ]
br label %13
49: ; preds = %42, %54
%50 = phi i8 [ %56, %54 ], [ %44, %42 ]
%51 = phi i32 [ %53, %54 ], [ 0, %42 ]
%52 = phi i8* [ %55, %54 ], [ %43, %42 ]
%53 = add nuw nsw i32 %51, 1
switch i8 %50, label %54 [
i8 0, label %58
i8 124, label %58
]
54: ; preds = %49
%55 = getelementptr inbounds i8, i8* %52, i64 1
%56 = load i8, i8* %55
%57 = icmp eq i8 %56, 42
br i1 %57, label %58, label %49
58: ; preds = %49, %49, %54
%59 = phi i8* [ %52, %49 ], [ %52, %49 ], [ %55, %54 ]
br label %62
60: ; preds = %102
%61 = load i8, i8* %59
switch i8 %61, label %131 [
i8 0, label %136
i8 124, label %136
]
62: ; preds = %58, %102
%63 = phi i32 [ %104, %102 ], [ 0, %58 ]
%64 = phi i8* [ %105, %102 ], [ %12, %58 ]
%65 = load i8, i8* %64
br i1 %9, label %72, label %66
66: ; preds = %62
%67 = tail call signext i8 @tolower(i8 signext %65)
%68 = sext i32 %63 to i64
%69 = getelementptr inbounds i8, i8* %43, i64 %68
%70 = load i8, i8* %69
%71 = tail call signext i8 @tolower(i8 signext %70)
br label %76
72: ; preds = %62
%73 = sext i32 %63 to i64
%74 = getelementptr inbounds i8, i8* %43, i64 %73
%75 = load i8, i8* %74
br label %76
76: ; preds = %72, %66
%77 = phi i8 [ %67, %66 ], [ %65, %72 ]
%78 = phi i8 [ %71, %66 ], [ %75, %72 ]
%79 = icmp eq i8 %77, %78
br i1 %79, label %94, label %80
80: ; preds = %76
%81 = load i8, i8* %64
switch i8 %81, label %89 [
i8 0, label %84
i8 124, label %82
]
82: ; preds = %80
%83 = sext i32 %63 to i64
br label %96
84: ; preds = %80
%85 = sext i32 %63 to i64
%86 = getelementptr inbounds i8, i8* %43, i64 %85
%87 = load i8, i8* %86
%88 = icmp eq i8 %87, 124
br i1 %88, label %94, label %96
89: ; preds = %80
%90 = sext i32 %63 to i64
%91 = getelementptr inbounds i8, i8* %43, i64 %90
%92 = load i8, i8* %91
%93 = icmp eq i8 %92, 63
br i1 %93, label %94, label %96
94: ; preds = %89, %84, %76
%95 = add nsw i32 %63, 1
br label %102
96: ; preds = %82, %84, %89
%97 = phi i64 [ %83, %82 ], [ %85, %84 ], [ %90, %89 ]
%98 = sub nsw i64 0, %97
%99 = getelementptr inbounds i8, i8* %64, i64 %98
%100 = load i8, i8* %99
%101 = icmp eq i8 %100, 0
br i1 %101, label %32, label %102
102: ; preds = %96, %94
%103 = phi i8* [ %64, %94 ], [ %99, %96 ]
%104 = phi i32 [ %95, %94 ], [ 0, %96 ]
%105 = getelementptr inbounds i8, i8* %103, i64 1
%106 = icmp eq i32 %104, %53
br i1 %106, label %60, label %62
107: ; preds = %37
%108 = getelementptr inbounds i8, i8* %14, i64 1
%109 = getelementptr inbounds i8, i8* %12, i64 1
br label %131
110: ; preds = %37
%111 = load i8, i8* %12
%112 = icmp eq i8 %111, 0
br i1 %112, label %113, label %114
113: ; preds = %110
switch i8 %38, label %114 [
i8 0, label %136
i8 124, label %136
]
114: ; preds = %113, %110
br i1 %9, label %119, label %115
115: ; preds = %114
%116 = tail call signext i8 @tolower(i8 signext %38)
%117 = load i8, i8* %12
%118 = tail call signext i8 @tolower(i8 signext %117)
br label %119
119: ; preds = %114, %115
%120 = phi i8 [ %116, %115 ], [ %38, %114 ]
%121 = phi i8 [ %118, %115 ], [ %111, %114 ]
%122 = icmp eq i8 %120, %121
br i1 %122, label %123, label %32
123: ; preds = %119
%124 = getelementptr inbounds i8, i8* %14, i64 1
%125 = getelementptr inbounds i8, i8* %12, i64 1
br label %131
126: ; preds = %32, %134
%127 = phi i8* [ %135, %134 ], [ %33, %32 ]
%128 = load i8, i8* %127
switch i8 %128, label %134 [
i8 0, label %136
i8 124, label %129
]
129: ; preds = %126
%130 = getelementptr inbounds i8, i8* %127, i64 1
br label %131
131: ; preds = %129, %34, %123, %107, %60
%132 = phi i8* [ %59, %60 ], [ %108, %107 ], [ %124, %123 ], [ %35, %34 ], [ %130, %129 ]
%133 = phi i8* [ %105, %60 ], [ %109, %107 ], [ %125, %123 ], [ %36, %34 ], [ %0, %129 ]
br label %10
134: ; preds = %126
%135 = getelementptr inbounds i8, i8* %127, i64 1
br label %126
136: ; preds = %19, %60, %60, %113, %113, %126
%137 = phi i32 [ 0, %126 ], [ 1, %113 ], [ 1, %113 ], [ 1, %60 ], [ 1, %60 ], [ 1, %19 ]
ret i32 %137
}