#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 */
typedef int /*<<< orphan*/ mime_types;

/* Variables and functions */
int /*<<< orphan*/ strcasecmp(char const *, char const *);
char *strrchr(char const *, char);
const char *cttype_getContentTypeByFileExt(const char *fname) {
  static struct mime_type {
    const char *ext, *mime;
  } mime_types[] = {{"aac", "audio/x-hx-aac-adts"},
                    {"avi", "video/x-msvideo"},
                    {"bmp", "image/bmp"},
                    {"bz2", "application/x-bzip2"},
                    {"c", "text/x-c"},
                    {"conf", "text/plain"},
                    {"css", "text/css"},
                    {"csv", "text/csv"},
                    {"deb", "application/x-debian-package"},
                    {"doc", "application/msword"},
                    {"flv", "video/x-flv"},
                    {"gif", "image/gif"},
                    {"gz", "application/gzip"},
                    {"jsp", "text/html; charset=utf-8"},
                    {"htm", "text/html; charset=utf-8"},
                    {"html", "text/html; charset=utf-8"},
                    {"java", "text/plain"},
                    {"jar", "application/jar"},
                    {"jpe", "image/jpeg"},
                    {"jpeg", "image/jpeg"},
                    {"jpg", "image/jpeg"},
                    {"json", "application/json"},
                    {"m3u", "audio/x-mpegurl"},
                    {"mid", "audio/midi"},
                    {"midi", "audio/midi"},
                    {"mov", "video/quicktime"},
                    {"mp2", "audio/mpeg"},
                    {"mp3", "audio/mpeg"},
                    {"mp4", "video/mp4"},
                    {"mpe", "video/mpeg"},
                    {"mpeg", "video/mpeg"},
                    {"mpg", "video/mpeg"},
                    {"ogg", "video/ogg"},
                    {"pdf", "application/pdf"},
                    {"png", "image/png"},
                    {"ppt", "application/vnd.ms-powerpoint"},
                    {"ps", "application/postscript"},
                    {"qt", "video/quicktime"},
                    {"ra", "audio/x-realaudio"},
                    {"ram", "audio/x-pn-realaudio"},
                    {"rtf", "text/rtf"},
                    {"sh", "text/plain; charset=utf-8"},
                    {"sql", "application/sql"},
                    {"svg", "image/svg+xml"},
                    {"svgz", "image/svg+xml"},
                    {"tar", "application/x-tar"},
                    {"tif", "image/tiff"},
                    {"tiff", "image/tiff"},
                    {"tsv", "text/tab-separated-values; charset=utf-8"},
                    {"txt", "text/plain; charset=utf-8"},
                    {"wav", "audio/x-wav"},
                    {"wma", "audio/x-ms-wma"},
                    {"wmv", "video/x-ms-wmv"},
                    {"wmx", "video/x-ms-wmx"},
                    {"xls", "application/vnd.ms-excel"},
                    {"xml", "text/xml; charset=utf-8"},
                    {"xpm", "image/x-xpmi"},
                    {"xsl", "text/xml; charset=utf-8"},
                    {"zip", "application/zip"}};
  const char *ext, *res = NULL;
  int i;
  if ((ext = strrchr(fname, '/')) == NULL)
    ext = fname;
  if ((ext = strrchr(ext, '.')) == NULL || ext == fname || ext[-1] == '/')
    ext = ".txt";
  ++ext;
  for (i = 0; i < sizeof(mime_types) / sizeof(mime_types[0]) && res == NULL;
       ++i) {
    if (!strcasecmp(ext, mime_types[i].ext))
      res = mime_types[i].mime;
  }
  if (res == NULL)
    res = "application/octet-stream";
  return res;
}


x86 assembly (clang, -O0):
<cttype_getContentTypeByFileExt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
movq   $0x0,-0x18(%rbp)
mov    -0x8(%rbp),%rdi
mov    $0x2f,%esi
call   1040 <strrchr@plt>
mov    %rax,-0x10(%rbp)
cmp    $0x0,%rax
jne    1158 <cttype_getContentTypeByFileExt+0x38>
mov    -0x8(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
mov    $0x2e,%esi
call   1040 <strrchr@plt>
mov    %rax,-0x10(%rbp)
cmp    $0x0,%rax
je     1193 <cttype_getContentTypeByFileExt+0x73>
mov    -0x10(%rbp),%rax
cmp    -0x8(%rbp),%rax
je     1193 <cttype_getContentTypeByFileExt+0x73>
mov    -0x10(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    119e <cttype_getContentTypeByFileExt+0x7e>
lea    0x11c3(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x1c(%rbp)
movslq -0x1c(%rbp),%rcx
xor    %eax,%eax
cmp    $0x3b,%rcx
mov    %al,-0x1d(%rbp)
jae    11cf <cttype_getContentTypeByFileExt+0xaf>
cmpq   $0x0,-0x18(%rbp)
sete   %al
mov    %al,-0x1d(%rbp)
mov    -0x1d(%rbp),%al
test   $0x1,%al
jne    11df <cttype_getContentTypeByFileExt+0xbf>
jmp    1233 <cttype_getContentTypeByFileExt+0x113>
mov    -0x10(%rbp),%rdi
movslq -0x1c(%rbp),%rcx
lea    0x2e52(%rip),%rax
shl    $0x4,%rcx
add    %rcx,%rax
mov    (%rax),%rsi
call   1030 <strcasecmp@plt>
cmp    $0x0,%eax
jne    1220 <cttype_getContentTypeByFileExt+0x100>
movslq -0x1c(%rbp),%rcx
lea    0x2e2f(%rip),%rax
shl    $0x4,%rcx
add    %rcx,%rax
mov    0x8(%rax),%rax
mov    %rax,-0x18(%rbp)
jmp    1225 <cttype_getContentTypeByFileExt+0x105>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11b1 <cttype_getContentTypeByFileExt+0x91>
cmpq   $0x0,-0x18(%rbp)
jne    1249 <cttype_getContentTypeByFileExt+0x129>
lea    0x111d(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cttype_getContentTypeByFileExt>:
push   %r15
push   %r14
push   %rbx
mov    %rdi,%r14
mov    $0x2f,%esi
call   1040 <strrchr@plt>
test   %rax,%rax
cmove  %r14,%rax
mov    %rax,%rdi
mov    $0x2e,%esi
call   1040 <strrchr@plt>
test   %rax,%rax
je     115a <cttype_getContentTypeByFileExt+0x3a>
mov    %rax,%r15
cmp    %r14,%rax
je     115a <cttype_getContentTypeByFileExt+0x3a>
cmpb   $0x2f,-0x1(%r15)
jne    1161 <cttype_getContentTypeByFileExt+0x41>
lea    0x11fc(%rip),%r15
add    $0x1,%r15
lea    0x290c(%rip),%rbx
xor    %r14d,%r14d
nop
mov    -0x8(%rbx),%rsi
mov    %r15,%rdi
call   1030 <strcasecmp@plt>
test   %eax,%eax
je     1190 <cttype_getContentTypeByFileExt+0x70>
xor    %ecx,%ecx
cmp    $0x39,%r14
jbe    1199 <cttype_getContentTypeByFileExt+0x79>
jmp    11a6 <cttype_getContentTypeByFileExt+0x86>
nopw   0x0(%rax,%rax,1)
mov    (%rbx),%rcx
cmp    $0x39,%r14
ja     11a6 <cttype_getContentTypeByFileExt+0x86>
add    $0x1,%r14
add    $0x10,%rbx
test   %rcx,%rcx
je     1170 <cttype_getContentTypeByFileExt+0x50>
test   %rcx,%rcx
lea    0x11b2(%rip),%rax
cmovne %rcx,%rax
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
%struct.mime_type = type { i8*, i8* }
@cttype_getContentTypeByFileExt.mime_types = internal global [59 x %struct.mime_type] [%struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.1, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.3, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.7, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.9, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.11, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.13, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.17, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.19, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.21, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.23, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.25, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.27, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.28, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.27, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.29, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.27, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.30, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.11, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.31, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.32, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.33, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.34, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.35, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.34, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.36, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.34, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.37, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.38, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.39, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.40, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.41, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.42, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.43, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.42, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.44, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.45, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.46, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.47, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.48, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.47, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.49, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.50, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.51, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.52, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.53, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.52, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.54, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.52, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.55, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.56, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.57, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.58, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.59, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.60, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.61, i32 0, i32 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.62, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.63, i32 0, i32 0), i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.64, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.65, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.45, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.66, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.67, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.68, i32 0, i32 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.69, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.70, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.71, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.72, i32 0, i32 0), i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.73, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.74, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.75, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.76, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.77, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.78, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.77, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.79, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.80, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.81, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.82, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.83, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.82, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.84, i32 0, i32 0), i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.85, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.86, i32 0, i32 0), i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.73, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.87, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.88, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.89, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.90, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.91, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.92, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.93, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.94, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.95, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.96, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.97, i32 0, i32 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.98, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.99, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.100, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.101, i32 0, i32 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.98, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.102, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.103, i32 0, i32 0) }]
@.str = [4 x i8] c"aac\00"
@.str.1 = [20 x i8] c"audio/x-hx-aac-adts\00"
@.str.2 = [4 x i8] c"avi\00"
@.str.3 = [16 x i8] c"video/x-msvideo\00"
@.str.4 = [4 x i8] c"bmp\00"
@.str.5 = [10 x i8] c"image/bmp\00"
@.str.6 = [4 x i8] c"bz2\00"
@.str.7 = [20 x i8] c"application/x-bzip2\00"
@.str.8 = [2 x i8] c"c\00"
@.str.9 = [9 x i8] c"text/x-c\00"
@.str.10 = [5 x i8] c"conf\00"
@.str.11 = [11 x i8] c"text/plain\00"
@.str.12 = [4 x i8] c"css\00"
@.str.13 = [9 x i8] c"text/css\00"
@.str.14 = [4 x i8] c"csv\00"
@.str.15 = [9 x i8] c"text/csv\00"
@.str.16 = [4 x i8] c"deb\00"
@.str.17 = [29 x i8] c"application/x-debian-package\00"
@.str.18 = [4 x i8] c"doc\00"
@.str.19 = [19 x i8] c"application/msword\00"
@.str.20 = [4 x i8] c"flv\00"
@.str.21 = [12 x i8] c"video/x-flv\00"
@.str.22 = [4 x i8] c"gif\00"
@.str.23 = [10 x i8] c"image/gif\00"
@.str.24 = [3 x i8] c"gz\00"
@.str.25 = [17 x i8] c"application/gzip\00"
@.str.26 = [4 x i8] c"jsp\00"
@.str.27 = [25 x i8] c"text/html; charset=utf-8\00"
@.str.28 = [4 x i8] c"htm\00"
@.str.29 = [5 x i8] c"html\00"
@.str.30 = [5 x i8] c"java\00"
@.str.31 = [4 x i8] c"jar\00"
@.str.32 = [16 x i8] c"application/jar\00"
@.str.33 = [4 x i8] c"jpe\00"
@.str.34 = [11 x i8] c"image/jpeg\00"
@.str.35 = [5 x i8] c"jpeg\00"
@.str.36 = [4 x i8] c"jpg\00"
@.str.37 = [5 x i8] c"json\00"
@.str.38 = [17 x i8] c"application/json\00"
@.str.39 = [4 x i8] c"m3u\00"
@.str.40 = [16 x i8] c"audio/x-mpegurl\00"
@.str.41 = [4 x i8] c"mid\00"
@.str.42 = [11 x i8] c"audio/midi\00"
@.str.43 = [5 x i8] c"midi\00"
@.str.44 = [4 x i8] c"mov\00"
@.str.45 = [16 x i8] c"video/quicktime\00"
@.str.46 = [4 x i8] c"mp2\00"
@.str.47 = [11 x i8] c"audio/mpeg\00"
@.str.48 = [4 x i8] c"mp3\00"
@.str.49 = [4 x i8] c"mp4\00"
@.str.50 = [10 x i8] c"video/mp4\00"
@.str.51 = [4 x i8] c"mpe\00"
@.str.52 = [11 x i8] c"video/mpeg\00"
@.str.53 = [5 x i8] c"mpeg\00"
@.str.54 = [4 x i8] c"mpg\00"
@.str.55 = [4 x i8] c"ogg\00"
@.str.56 = [10 x i8] c"video/ogg\00"
@.str.57 = [4 x i8] c"pdf\00"
@.str.58 = [16 x i8] c"application/pdf\00"
@.str.59 = [4 x i8] c"png\00"
@.str.60 = [10 x i8] c"image/png\00"
@.str.61 = [4 x i8] c"ppt\00"
@.str.62 = [30 x i8] c"application/vnd.ms-powerpoint\00"
@.str.63 = [3 x i8] c"ps\00"
@.str.64 = [23 x i8] c"application/postscript\00"
@.str.65 = [3 x i8] c"qt\00"
@.str.66 = [3 x i8] c"ra\00"
@.str.67 = [18 x i8] c"audio/x-realaudio\00"
@.str.68 = [4 x i8] c"ram\00"
@.str.69 = [21 x i8] c"audio/x-pn-realaudio\00"
@.str.70 = [4 x i8] c"rtf\00"
@.str.71 = [9 x i8] c"text/rtf\00"
@.str.72 = [3 x i8] c"sh\00"
@.str.73 = [26 x i8] c"text/plain; charset=utf-8\00"
@.str.74 = [4 x i8] c"sql\00"
@.str.75 = [16 x i8] c"application/sql\00"
@.str.76 = [4 x i8] c"svg\00"
@.str.77 = [14 x i8] c"image/svg+xml\00"
@.str.78 = [5 x i8] c"svgz\00"
@.str.79 = [4 x i8] c"tar\00"
@.str.80 = [18 x i8] c"application/x-tar\00"
@.str.81 = [4 x i8] c"tif\00"
@.str.82 = [11 x i8] c"image/tiff\00"
@.str.83 = [5 x i8] c"tiff\00"
@.str.84 = [4 x i8] c"tsv\00"
@.str.85 = [41 x i8] c"text/tab-separated-values; charset=utf-8\00"
@.str.86 = [4 x i8] c"txt\00"
@.str.87 = [4 x i8] c"wav\00"
@.str.88 = [12 x i8] c"audio/x-wav\00"
@.str.89 = [4 x i8] c"wma\00"
@.str.90 = [15 x i8] c"audio/x-ms-wma\00"
@.str.91 = [4 x i8] c"wmv\00"
@.str.92 = [15 x i8] c"video/x-ms-wmv\00"
@.str.93 = [4 x i8] c"wmx\00"
@.str.94 = [15 x i8] c"video/x-ms-wmx\00"
@.str.95 = [4 x i8] c"xls\00"
@.str.96 = [25 x i8] c"application/vnd.ms-excel\00"
@.str.97 = [4 x i8] c"xml\00"
@.str.98 = [24 x i8] c"text/xml; charset=utf-8\00"
@.str.99 = [4 x i8] c"xpm\00"
@.str.100 = [13 x i8] c"image/x-xpmi\00"
@.str.101 = [4 x i8] c"xsl\00"
@.str.102 = [4 x i8] c"zip\00"
@.str.103 = [16 x i8] c"application/zip\00"
@.str.104 = [5 x i8] c".txt\00"
@.str.105 = [25 x i8] c"application/octet-stream\00"
define i8* @cttype_getContentTypeByFileExt(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i32
store i8* %0, i8** %2
store i8* null, i8** %4
%6 = load i8*, i8** %2
%7 = call i8* @strrchr(i8* %6, i8 signext 47)
store i8* %7, i8** %3
%8 = icmp eq i8* %7, null
br i1 %8, label %9, label %11
9: ; preds = %1
%10 = load i8*, i8** %2
store i8* %10, i8** %3
br label %11
11: ; preds = %9, %1
%12 = load i8*, i8** %3
%13 = call i8* @strrchr(i8* %12, i8 signext 46)
store i8* %13, i8** %3
%14 = icmp eq i8* %13, null
br i1 %14, label %25, label %15
15: ; preds = %11
%16 = load i8*, i8** %3
%17 = load i8*, i8** %2
%18 = icmp eq i8* %16, %17
br i1 %18, label %25, label %19
19: ; preds = %15
%20 = load i8*, i8** %3
%21 = getelementptr inbounds i8, i8* %20, i64 -1
%22 = load i8, i8* %21
%23 = sext i8 %22 to i32
%24 = icmp eq i32 %23, 47
br i1 %24, label %25, label %26
25: ; preds = %19, %15, %11
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.104, i64 0, i64 0), i8** %3
br label %26
26: ; preds = %25, %19
%27 = load i8*, i8** %3
%28 = getelementptr inbounds i8, i8* %27, i32 1
store i8* %28, i8** %3
store i32 0, i32* %5
br label %29
29: ; preds = %54, %26
%30 = load i32, i32* %5
%31 = sext i32 %30 to i64
%32 = icmp ult i64 %31, 59
br i1 %32, label %33, label %36
33: ; preds = %29
%34 = load i8*, i8** %4
%35 = icmp eq i8* %34, null
br label %36
36: ; preds = %33, %29
%37 = phi i1 [ false, %29 ], [ %35, %33 ]
br i1 %37, label %38, label %57
38: ; preds = %36
%39 = load i8*, i8** %3
%40 = load i32, i32* %5
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [59 x %struct.mime_type], [59 x %struct.mime_type]* @cttype_getContentTypeByFileExt.mime_types, i64 0, i64 %41
%43 = getelementptr inbounds %struct.mime_type, %struct.mime_type* %42, i32 0, i32 0
%44 = load i8*, i8** %43
%45 = call i32 @strcasecmp(i8* %39, i8* %44)
%46 = icmp ne i32 %45, 0
br i1 %46, label %53, label %47
47: ; preds = %38
%48 = load i32, i32* %5
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds [59 x %struct.mime_type], [59 x %struct.mime_type]* @cttype_getContentTypeByFileExt.mime_types, i64 0, i64 %49
%51 = getelementptr inbounds %struct.mime_type, %struct.mime_type* %50, i32 0, i32 1
%52 = load i8*, i8** %51
store i8* %52, i8** %4
br label %53
53: ; preds = %47, %38
br label %54
54: ; preds = %53
%55 = load i32, i32* %5
%56 = add nsw i32 %55, 1
store i32 %56, i32* %5
br label %29
57: ; preds = %36
%58 = load i8*, i8** %4
%59 = icmp eq i8* %58, null
br i1 %59, label %60, label %61
60: ; preds = %57
store i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.105, i64 0, i64 0), i8** %4
br label %61
61: ; preds = %60, %57
%62 = load i8*, i8** %4
ret i8* %62
}

LLVM IR (-O2):
%struct.mime_type = type { i8*, i8* }
@cttype_getContentTypeByFileExt.mime_types = internal unnamed_addr constant [59 x %struct.mime_type] [%struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.1, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.3, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.7, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.9, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.11, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.13, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.17, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.19, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.21, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.23, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.25, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.27, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.28, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.27, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.29, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.27, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.30, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.11, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.31, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.32, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.33, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.34, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.35, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.34, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.36, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.34, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.37, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.38, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.39, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.40, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.41, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.42, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.43, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.42, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.44, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.45, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.46, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.47, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.48, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.47, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.49, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.50, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.51, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.52, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.53, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.52, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.54, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.52, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.55, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.56, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.57, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.58, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.59, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.60, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.61, i32 0, i32 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.62, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.63, i32 0, i32 0), i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.64, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.65, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.45, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.66, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.67, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.68, i32 0, i32 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.69, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.70, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.71, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.72, i32 0, i32 0), i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.73, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.74, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.75, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.76, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.77, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.78, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.77, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.79, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.80, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.81, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.82, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.83, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.82, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.84, i32 0, i32 0), i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.85, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.86, i32 0, i32 0), i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.73, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.87, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.88, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.89, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.90, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.91, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.92, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.93, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.94, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.95, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.96, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.97, i32 0, i32 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.98, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.99, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.100, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.101, i32 0, i32 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.98, i32 0, i32 0) }, %struct.mime_type { i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.102, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.103, i32 0, i32 0) }]
@.str = [4 x i8] c"aac\00"
@.str.1 = [20 x i8] c"audio/x-hx-aac-adts\00"
@.str.2 = [4 x i8] c"avi\00"
@.str.3 = [16 x i8] c"video/x-msvideo\00"
@.str.4 = [4 x i8] c"bmp\00"
@.str.5 = [10 x i8] c"image/bmp\00"
@.str.6 = [4 x i8] c"bz2\00"
@.str.7 = [20 x i8] c"application/x-bzip2\00"
@.str.8 = [2 x i8] c"c\00"
@.str.9 = [9 x i8] c"text/x-c\00"
@.str.10 = [5 x i8] c"conf\00"
@.str.11 = [11 x i8] c"text/plain\00"
@.str.12 = [4 x i8] c"css\00"
@.str.13 = [9 x i8] c"text/css\00"
@.str.14 = [4 x i8] c"csv\00"
@.str.15 = [9 x i8] c"text/csv\00"
@.str.16 = [4 x i8] c"deb\00"
@.str.17 = [29 x i8] c"application/x-debian-package\00"
@.str.18 = [4 x i8] c"doc\00"
@.str.19 = [19 x i8] c"application/msword\00"
@.str.20 = [4 x i8] c"flv\00"
@.str.21 = [12 x i8] c"video/x-flv\00"
@.str.22 = [4 x i8] c"gif\00"
@.str.23 = [10 x i8] c"image/gif\00"
@.str.24 = [3 x i8] c"gz\00"
@.str.25 = [17 x i8] c"application/gzip\00"
@.str.26 = [4 x i8] c"jsp\00"
@.str.27 = [25 x i8] c"text/html; charset=utf-8\00"
@.str.28 = [4 x i8] c"htm\00"
@.str.29 = [5 x i8] c"html\00"
@.str.30 = [5 x i8] c"java\00"
@.str.31 = [4 x i8] c"jar\00"
@.str.32 = [16 x i8] c"application/jar\00"
@.str.33 = [4 x i8] c"jpe\00"
@.str.34 = [11 x i8] c"image/jpeg\00"
@.str.35 = [5 x i8] c"jpeg\00"
@.str.36 = [4 x i8] c"jpg\00"
@.str.37 = [5 x i8] c"json\00"
@.str.38 = [17 x i8] c"application/json\00"
@.str.39 = [4 x i8] c"m3u\00"
@.str.40 = [16 x i8] c"audio/x-mpegurl\00"
@.str.41 = [4 x i8] c"mid\00"
@.str.42 = [11 x i8] c"audio/midi\00"
@.str.43 = [5 x i8] c"midi\00"
@.str.44 = [4 x i8] c"mov\00"
@.str.45 = [16 x i8] c"video/quicktime\00"
@.str.46 = [4 x i8] c"mp2\00"
@.str.47 = [11 x i8] c"audio/mpeg\00"
@.str.48 = [4 x i8] c"mp3\00"
@.str.49 = [4 x i8] c"mp4\00"
@.str.50 = [10 x i8] c"video/mp4\00"
@.str.51 = [4 x i8] c"mpe\00"
@.str.52 = [11 x i8] c"video/mpeg\00"
@.str.53 = [5 x i8] c"mpeg\00"
@.str.54 = [4 x i8] c"mpg\00"
@.str.55 = [4 x i8] c"ogg\00"
@.str.56 = [10 x i8] c"video/ogg\00"
@.str.57 = [4 x i8] c"pdf\00"
@.str.58 = [16 x i8] c"application/pdf\00"
@.str.59 = [4 x i8] c"png\00"
@.str.60 = [10 x i8] c"image/png\00"
@.str.61 = [4 x i8] c"ppt\00"
@.str.62 = [30 x i8] c"application/vnd.ms-powerpoint\00"
@.str.63 = [3 x i8] c"ps\00"
@.str.64 = [23 x i8] c"application/postscript\00"
@.str.65 = [3 x i8] c"qt\00"
@.str.66 = [3 x i8] c"ra\00"
@.str.67 = [18 x i8] c"audio/x-realaudio\00"
@.str.68 = [4 x i8] c"ram\00"
@.str.69 = [21 x i8] c"audio/x-pn-realaudio\00"
@.str.70 = [4 x i8] c"rtf\00"
@.str.71 = [9 x i8] c"text/rtf\00"
@.str.72 = [3 x i8] c"sh\00"
@.str.73 = [26 x i8] c"text/plain; charset=utf-8\00"
@.str.74 = [4 x i8] c"sql\00"
@.str.75 = [16 x i8] c"application/sql\00"
@.str.76 = [4 x i8] c"svg\00"
@.str.77 = [14 x i8] c"image/svg+xml\00"
@.str.78 = [5 x i8] c"svgz\00"
@.str.79 = [4 x i8] c"tar\00"
@.str.80 = [18 x i8] c"application/x-tar\00"
@.str.81 = [4 x i8] c"tif\00"
@.str.82 = [11 x i8] c"image/tiff\00"
@.str.83 = [5 x i8] c"tiff\00"
@.str.84 = [4 x i8] c"tsv\00"
@.str.85 = [41 x i8] c"text/tab-separated-values; charset=utf-8\00"
@.str.86 = [4 x i8] c"txt\00"
@.str.87 = [4 x i8] c"wav\00"
@.str.88 = [12 x i8] c"audio/x-wav\00"
@.str.89 = [4 x i8] c"wma\00"
@.str.90 = [15 x i8] c"audio/x-ms-wma\00"
@.str.91 = [4 x i8] c"wmv\00"
@.str.92 = [15 x i8] c"video/x-ms-wmv\00"
@.str.93 = [4 x i8] c"wmx\00"
@.str.94 = [15 x i8] c"video/x-ms-wmx\00"
@.str.95 = [4 x i8] c"xls\00"
@.str.96 = [25 x i8] c"application/vnd.ms-excel\00"
@.str.97 = [4 x i8] c"xml\00"
@.str.98 = [24 x i8] c"text/xml; charset=utf-8\00"
@.str.99 = [4 x i8] c"xpm\00"
@.str.100 = [13 x i8] c"image/x-xpmi\00"
@.str.101 = [4 x i8] c"xsl\00"
@.str.102 = [4 x i8] c"zip\00"
@.str.103 = [16 x i8] c"application/zip\00"
@.str.104 = [5 x i8] c".txt\00"
@.str.105 = [25 x i8] c"application/octet-stream\00"
define i8* @cttype_getContentTypeByFileExt(i8* %0) {
%2 = tail call i8* @strrchr(i8* dereferenceable(1) %0, i8 signext 47)
%3 = icmp eq i8* %2, null
%4 = select i1 %3, i8* %0, i8* %2
%5 = tail call i8* @strrchr(i8* dereferenceable(1) %4, i8 signext 46)
%6 = icmp eq i8* %5, null
%7 = icmp eq i8* %5, %0
%8 = or i1 %6, %7
br i1 %8, label %13, label %9
9: ; preds = %1
%10 = getelementptr inbounds i8, i8* %5, i64 -1
%11 = load i8, i8* %10
%12 = icmp eq i8 %11, 47
br i1 %12, label %13, label %14
13: ; preds = %9, %1
br label %14
14: ; preds = %13, %9
%15 = phi i8* [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.104, i64 0, i64 0), %13 ], [ %5, %9 ]
%16 = getelementptr inbounds i8, i8* %15, i64 1
br label %17
17: ; preds = %14, %26
%18 = phi i64 [ 0, %14 ], [ %28, %26 ]
%19 = getelementptr inbounds [59 x %struct.mime_type], [59 x %struct.mime_type]* @cttype_getContentTypeByFileExt.mime_types, i64 0, i64 %18, i32 0
%20 = load i8*, i8** %19
%21 = tail call i32 @strcasecmp(i8* %16, i8* %20)
%22 = icmp eq i32 %21, 0
br i1 %22, label %23, label %26
23: ; preds = %17
%24 = getelementptr inbounds [59 x %struct.mime_type], [59 x %struct.mime_type]* @cttype_getContentTypeByFileExt.mime_types, i64 0, i64 %18, i32 1
%25 = load i8*, i8** %24
br label %26
26: ; preds = %17, %23
%27 = phi i8* [ null, %17 ], [ %25, %23 ]
%28 = add nuw nsw i64 %18, 1
%29 = icmp ult i64 %18, 58
%30 = icmp eq i8* %27, null
%31 = select i1 %29, i1 %30, i1 false
br i1 %31, label %17, label %32
32: ; preds = %26
%33 = select i1 %30, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.105, i64 0, i64 0), i8* %27
ret i8* %33
}