#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*/ gui_color_attr_get_flag(unsigned char const);
int /*<<< orphan*/ isdigit(unsigned char const);
unsigned char *malloc(int);
int /*<<< orphan*/ memcpy(unsigned char *, unsigned char const *, int);
int strlen(char *);
int utf8_char_size(char *);
char *gui_color_decode(const char *string, const char *replacement) {
  const unsigned char *ptr_string;
  unsigned char *out;
  int out_length, out_pos, length;
  if (!string)
    return NULL;
  out_length = (strlen((char *)string) * 2) + 1;
  out = malloc(out_length);
  if (!out)
    return NULL;
  ptr_string = (unsigned char *)string;
  out_pos = 0;
  while (ptr_string && ptr_string[0] && (out_pos < out_length - 1)) {
    switch (ptr_string[0]) {
    case '\x19':
      ptr_string++;
      switch (ptr_string[0]) {
      case 'F':
        ptr_string++;
        if (ptr_string[0] == '@') {
          ptr_string++;
          while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
            ptr_string++;
          }
          if (ptr_string[0] && ptr_string[1] && ptr_string[2] &&
              ptr_string[3] && ptr_string[4]) {
            ptr_string += 5;
          }
        } else {
          while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
            ptr_string++;
          }
          if (ptr_string[0] && ptr_string[1])
            ptr_string += 2;
        }
        break;
      case 'B':
        ptr_string++;
        if (ptr_string[0] == '@') {
          ptr_string++;
          if (ptr_string[0] && ptr_string[1] && ptr_string[2] &&
              ptr_string[3] && ptr_string[4]) {
            ptr_string += 5;
          }
        } else {
          if (ptr_string[0] && ptr_string[1])
            ptr_string += 2;
        }
        break;
      case '*':
        ptr_string++;
        if (ptr_string[0] == '@') {
          ptr_string++;
          while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
            ptr_string++;
          }
          if (ptr_string[0] && ptr_string[1] && ptr_string[2] &&
              ptr_string[3] && ptr_string[4]) {
            ptr_string += 5;
          }
        } else {
          while (gui_color_attr_get_flag(ptr_string[0]) > 0) {
            ptr_string++;
          }
          if (ptr_string[0] && ptr_string[1])
            ptr_string += 2;
        }
        if (ptr_string[0] == ',') {
          if (ptr_string[1] == '@') {
            if (ptr_string[2] && ptr_string[3] && ptr_string[4] &&
                ptr_string[5] && ptr_string[6]) {
              ptr_string += 7;
            }
          } else {
            if (ptr_string[1] && ptr_string[2])
              ptr_string += 3;
          }
        }
        break;
      case '@':
        if ((isdigit(ptr_string[1])) && (isdigit(ptr_string[2])) &&
            (isdigit(ptr_string[3])) && (isdigit(ptr_string[4])) &&
            (isdigit(ptr_string[5])))
          ptr_string += 6;
        break;
      case 'E':
        ptr_string++;
        break;
      case 'b':
        ptr_string++;
        switch (ptr_string[0]) {
        case 'F':
        case 'B':
        case 'D':
        case '_':
        case '-':
        case '#':
        case 'i':
        case 'l':
          ptr_string++;
          break;
        }
        break;
      case '\x1C':
        ptr_string++;
        break;
      default:
        if (isdigit(ptr_string[0]) && isdigit(ptr_string[1]))
          ptr_string += 2;
        break;
      }
      if (replacement && replacement[0]) {
        out[out_pos] = replacement[0];
        out_pos++;
      }
      break;
    case '\x1A':
    case '\x1B':
      ptr_string++;
      if (ptr_string[0])
        ptr_string++;
      if (replacement && replacement[0]) {
        out[out_pos] = replacement[0];
        out_pos++;
      }
      break;
    case '\x1C':
      ptr_string++;
      if (replacement && replacement[0]) {
        out[out_pos] = replacement[0];
        out_pos++;
      }
      break;
    default:
      length = utf8_char_size((char *)ptr_string);
      if (length == 0)
        length = 1;
      memcpy(out + out_pos, ptr_string, length);
      out_pos += length;
      ptr_string += length;
      break;
    }
  }
  out[out_pos] = '\0';
  return (char *)out;
}


x86 assembly (clang, -O0):
<gui_color_decode>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    1188 <gui_color_decode+0x28>
movq   $0x0,-0x8(%rbp)
jmp    18f4 <gui_color_decode+0x794>
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
shl    $0x1,%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%edi
call   1070 <malloc@plt>
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    11be <gui_color_decode+0x5e>
movq   $0x0,-0x8(%rbp)
jmp    18f4 <gui_color_decode+0x794>
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x30(%rbp)
xor    %eax,%eax
cmpq   $0x0,-0x20(%rbp)
mov    %al,-0x35(%rbp)
je     1203 <gui_color_decode+0xa3>
mov    -0x20(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x35(%rbp)
je     1203 <gui_color_decode+0xa3>
mov    -0x30(%rbp),%eax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
setl   %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    1213 <gui_color_decode+0xb3>
jmp    18e0 <gui_color_decode+0x780>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
sub    $0x19,%eax
je     1250 <gui_color_decode+0xf0>
jmp    122b <gui_color_decode+0xcb>
mov    -0x3c(%rbp),%eax
add    $0xffffffe6,%eax
sub    $0x2,%eax
jb     17e8 <gui_color_decode+0x688>
jmp    123f <gui_color_decode+0xdf>
mov    -0x3c(%rbp),%eax
sub    $0x1c,%eax
je     1847 <gui_color_decode+0x6e7>
jmp    188d <gui_color_decode+0x72d>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x40(%rbp)
sub    $0x1c,%eax
je     1761 <gui_color_decode+0x601>
jmp    1274 <gui_color_decode+0x114>
mov    -0x40(%rbp),%eax
sub    $0x2a,%eax
je     14b3 <gui_color_decode+0x353>
jmp    1285 <gui_color_decode+0x125>
mov    -0x40(%rbp),%eax
sub    $0x40,%eax
je     1687 <gui_color_decode+0x527>
jmp    1296 <gui_color_decode+0x136>
mov    -0x40(%rbp),%eax
sub    $0x42,%eax
je     13ef <gui_color_decode+0x28f>
jmp    12a7 <gui_color_decode+0x147>
mov    -0x40(%rbp),%eax
sub    $0x45,%eax
je     1706 <gui_color_decode+0x5a6>
jmp    12b8 <gui_color_decode+0x158>
mov    -0x40(%rbp),%eax
sub    $0x46,%eax
je     12da <gui_color_decode+0x17a>
jmp    12c9 <gui_color_decode+0x169>
mov    -0x40(%rbp),%eax
sub    $0x62,%eax
je     1717 <gui_color_decode+0x5b7>
jmp    1772 <gui_color_decode+0x612>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x40,%eax
jne    138d <gui_color_decode+0x22d>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1050 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    1328 <gui_color_decode+0x1c8>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1302 <gui_color_decode+0x1a2>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     1388 <gui_color_decode+0x228>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1388 <gui_color_decode+0x228>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1388 <gui_color_decode+0x228>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     1388 <gui_color_decode+0x228>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     1388 <gui_color_decode+0x228>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
jmp    13ea <gui_color_decode+0x28a>
jmp    1392 <gui_color_decode+0x232>
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1050 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    13b8 <gui_color_decode+0x258>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1392 <gui_color_decode+0x232>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     13e5 <gui_color_decode+0x285>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     13e5 <gui_color_decode+0x285>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    13ea <gui_color_decode+0x28a>
jmp    17ae <gui_color_decode+0x64e>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x40,%eax
jne    147c <gui_color_decode+0x31c>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     1477 <gui_color_decode+0x317>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1477 <gui_color_decode+0x317>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1477 <gui_color_decode+0x317>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     1477 <gui_color_decode+0x317>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     1477 <gui_color_decode+0x317>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
jmp    14ae <gui_color_decode+0x34e>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     14a9 <gui_color_decode+0x349>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     14a9 <gui_color_decode+0x349>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    14ae <gui_color_decode+0x34e>
jmp    17ae <gui_color_decode+0x64e>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x40,%eax
jne    1566 <gui_color_decode+0x406>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1050 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    1501 <gui_color_decode+0x3a1>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    14db <gui_color_decode+0x37b>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     1561 <gui_color_decode+0x401>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1561 <gui_color_decode+0x401>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1561 <gui_color_decode+0x401>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     1561 <gui_color_decode+0x401>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     1561 <gui_color_decode+0x401>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
jmp    15c3 <gui_color_decode+0x463>
jmp    156b <gui_color_decode+0x40b>
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1050 <gui_color_attr_get_flag@plt>
cmp    $0x0,%eax
jle    1591 <gui_color_decode+0x431>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    156b <gui_color_decode+0x40b>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
je     15be <gui_color_decode+0x45e>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     15be <gui_color_decode+0x45e>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    15c3 <gui_color_decode+0x463>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x2c,%eax
jne    1682 <gui_color_decode+0x522>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x40,%eax
jne    164a <gui_color_decode+0x4ea>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1645 <gui_color_decode+0x4e5>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x0,%eax
je     1645 <gui_color_decode+0x4e5>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
cmp    $0x0,%eax
je     1645 <gui_color_decode+0x4e5>
mov    -0x20(%rbp),%rax
movzbl 0x5(%rax),%eax
cmp    $0x0,%eax
je     1645 <gui_color_decode+0x4e5>
mov    -0x20(%rbp),%rax
movzbl 0x6(%rax),%eax
cmp    $0x0,%eax
je     1645 <gui_color_decode+0x4e5>
mov    -0x20(%rbp),%rax
add    $0x7,%rax
mov    %rax,-0x20(%rbp)
jmp    167d <gui_color_decode+0x51d>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1678 <gui_color_decode+0x518>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x0,%eax
je     1678 <gui_color_decode+0x518>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x20(%rbp)
jmp    167d <gui_color_decode+0x51d>
jmp    1682 <gui_color_decode+0x522>
jmp    17ae <gui_color_decode+0x64e>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1701 <gui_color_decode+0x5a1>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1701 <gui_color_decode+0x5a1>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1701 <gui_color_decode+0x5a1>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1701 <gui_color_decode+0x5a1>
mov    -0x20(%rbp),%rax
movzbl 0x5(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     1701 <gui_color_decode+0x5a1>
mov    -0x20(%rbp),%rax
add    $0x6,%rax
mov    %rax,-0x20(%rbp)
jmp    17ae <gui_color_decode+0x64e>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    17ae <gui_color_decode+0x64e>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
add    $0xffffffdd,%eax
mov    %eax,%ecx
mov    %rcx,-0x48(%rbp)
sub    $0x49,%eax
ja     175c <gui_color_decode+0x5fc>
mov    -0x48(%rbp),%rax
lea    0x8b9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    17ae <gui_color_decode+0x64e>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    17ae <gui_color_decode+0x64e>
mov    -0x20(%rbp),%rax
movzbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     17a9 <gui_color_decode+0x649>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     17a9 <gui_color_decode+0x649>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
jmp    17ae <gui_color_decode+0x64e>
cmpq   $0x0,-0x18(%rbp)
je     17e3 <gui_color_decode+0x683>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     17e3 <gui_color_decode+0x683>
mov    -0x18(%rbp),%rax
mov    (%rax),%dl
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    18db <gui_color_decode+0x77b>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmpb   $0x0,(%rax)
je     180d <gui_color_decode+0x6ad>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1842 <gui_color_decode+0x6e2>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1842 <gui_color_decode+0x6e2>
mov    -0x18(%rbp),%rax
mov    (%rax),%dl
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    18db <gui_color_decode+0x77b>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1888 <gui_color_decode+0x728>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1888 <gui_color_decode+0x728>
mov    -0x18(%rbp),%rax
mov    (%rax),%dl
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    18db <gui_color_decode+0x77b>
mov    -0x20(%rbp),%rdi
call   1080 <utf8_char_size@plt>
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
jne    18aa <gui_color_decode+0x74a>
movl   $0x1,-0x34(%rbp)
mov    -0x28(%rbp),%rdi
movslq -0x30(%rbp),%rax
add    %rax,%rdi
mov    -0x20(%rbp),%rsi
mov    -0x34(%rbp),%edx
call   1060 <memcpy@plt>
mov    -0x34(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
jmp    11cd <gui_color_decode+0x6d>
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gui_color_decode>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
test   %rdi,%rdi
je     15e9 <gui_color_decode+0x489>
mov    %rsi,%r12
mov    %rdi,%r14
call   1040 <strlen@plt>
mov    %eax,%r15d
lea    (%r15,%r15,1),%edi
add    $0x1,%edi
call   1070 <malloc@plt>
xor    %r13d,%r13d
test   %rax,%rax
je     15e9 <gui_color_decode+0x489>
mov    %rax,%rbx
mov    (%r14),%al
test   %al,%al
je     15e0 <gui_color_decode+0x480>
test   %r15d,%r15d
jle    15e0 <gui_color_decode+0x480>
add    %r15d,%r15d
xor    %r13d,%r13d
mov    %rbx,(%rsp)
nopl   0x0(%rax,%rax,1)
lea    -0x1a(%rax),%ecx
cmp    $0x2,%cl
jb     1270 <gui_color_decode+0x110>
cmp    $0x1c,%al
je     12a0 <gui_color_decode+0x140>
cmp    $0x19,%al
jne    12d0 <gui_color_decode+0x170>
lea    0x1(%r14),%rbp
mov    0x1(%r14),%al
lea    -0x2a(%rax),%ecx
cmp    $0x38,%cl
ja     1302 <gui_color_decode+0x1a2>
movzbl %cl,%ecx
lea    0xe06(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
mov    0x2(%r14),%al
cmp    $0x40,%al
jne    1495 <gui_color_decode+0x335>
add    $0x6,%r14
mov    %r14,%rbx
cs nopw 0x0(%rax,%rax,1)
movzbl -0x3(%rbx),%edi
call   1050 <gui_color_attr_get_flag@plt>
add    $0x1,%rbx
test   %eax,%eax
jg     1220 <gui_color_decode+0xc0>
lea    -0x4(%rbx),%rbp
mov    -0x4(%rbx),%al
test   %al,%al
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,-0x3(%rbx)
je     1542 <gui_color_decode+0x3e2>
cmpb   $0x0,-0x2(%rbx)
je     153f <gui_color_decode+0x3df>
mov    $0x5,%eax
cmpb   $0x0,-0x1(%rbx)
jne    1530 <gui_color_decode+0x3d0>
jmp    153f <gui_color_decode+0x3df>
nopl   0x0(%rax,%rax,1)
lea    0x1(%r14),%rax
cmpb   $0x0,0x1(%r14)
lea    0x2(%r14),%r14
cmove  %rax,%r14
test   %r12,%r12
je     15d0 <gui_color_decode+0x470>
mov    (%r12),%al
test   %al,%al
je     15d0 <gui_color_decode+0x470>
movslq %r13d,%rcx
mov    %al,(%rbx,%rcx,1)
jmp    12c0 <gui_color_decode+0x160>
xchg   %ax,%ax
add    $0x1,%r14
test   %r12,%r12
je     15d0 <gui_color_decode+0x470>
mov    (%r12),%al
test   %al,%al
je     15d0 <gui_color_decode+0x470>
movslq %r13d,%r13
mov    %al,(%rbx,%r13,1)
add    $0x1,%r13d
jmp    15d0 <gui_color_decode+0x470>
nopl   0x0(%rax)
mov    %r14,%rdi
call   1080 <utf8_char_size@plt>
mov    %eax,%ebp
test   %eax,%eax
mov    $0x1,%eax
cmove  %eax,%ebp
movslq %r13d,%rdi
add    %rbx,%rdi
mov    %r14,%rsi
mov    %ebp,%edx
call   1060 <memcpy@plt>
add    %ebp,%r13d
movslq %ebp,%rax
add    %rax,%r14
jmp    15d0 <gui_color_decode+0x470>
cmp    $0x1c,%al
jne    130f <gui_color_decode+0x1af>
add    $0x2,%r14
jmp    1484 <gui_color_decode+0x324>
movzbl %al,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1590 <gui_color_decode+0x430>
movzbl 0x2(%r14),%edi
call   1030 <isdigit@plt>
add    $0x3,%r14
test   %eax,%eax
cmovne %r14,%rbp
test   %r12,%r12
jne    1595 <gui_color_decode+0x435>
jmp    15c5 <gui_color_decode+0x465>
movzbl 0x2(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1590 <gui_color_decode+0x430>
movzbl 0x3(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1590 <gui_color_decode+0x430>
movzbl 0x4(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1590 <gui_color_decode+0x430>
movzbl 0x5(%r14),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1590 <gui_color_decode+0x430>
movzbl 0x6(%r14),%edi
call   1030 <isdigit@plt>
add    $0x7,%r14
jmp    132d <gui_color_decode+0x1cd>
lea    0x2(%r14),%rbp
mov    0x2(%r14),%al
test   %al,%al
je     1590 <gui_color_decode+0x430>
cmp    $0x40,%al
jne    1503 <gui_color_decode+0x3a3>
lea    0x3(%r14),%rbp
cmpb   $0x0,0x3(%r14)
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,0x4(%r14)
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,0x5(%r14)
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,0x6(%r14)
je     1590 <gui_color_decode+0x430>
lea    0x8(%r14),%rax
cmpb   $0x0,0x7(%r14)
jmp    150c <gui_color_decode+0x3ac>
mov    0x2(%r14),%al
cmp    $0x40,%al
jne    14c6 <gui_color_decode+0x366>
add    $0x2,%r14
mov    %r14,%rbp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl 0x1(%rbp),%edi
add    $0x1,%rbp
call   1050 <gui_color_attr_get_flag@plt>
test   %eax,%eax
jg     1410 <gui_color_decode+0x2b0>
cmpb   $0x0,0x0(%rbp)
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,0x1(%rbp)
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,0x2(%rbp)
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,0x3(%rbp)
je     1590 <gui_color_decode+0x430>
xor    %eax,%eax
cmpb   $0x0,0x4(%rbp)
setne  %al
lea    (%rax,%rax,4),%rax
jmp    15bd <gui_color_decode+0x45d>
lea    0x2(%r14),%rbp
mov    0x2(%r14),%al
add    $0xdd,%al
cmp    $0x49,%al
ja     1590 <gui_color_decode+0x430>
movzbl %al,%eax
lea    0xc6d(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
add    $0x3,%r14
mov    %r14,%rbp
test   %r12,%r12
jne    1595 <gui_color_decode+0x435>
jmp    15c5 <gui_color_decode+0x465>
movzbl %al,%edi
call   1050 <gui_color_attr_get_flag@plt>
lea    0x3(%r14),%rbx
test   %eax,%eax
jle    151e <gui_color_decode+0x3be>
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%rbx),%edi
call   1050 <gui_color_attr_get_flag@plt>
add    $0x1,%rbx
test   %eax,%eax
jg     14b0 <gui_color_decode+0x350>
lea    -0x1(%rbx),%rbp
jmp    1525 <gui_color_decode+0x3c5>
movzbl %al,%edi
call   1050 <gui_color_attr_get_flag@plt>
lea    0x3(%r14),%rbx
test   %eax,%eax
jle    1573 <gui_color_decode+0x413>
nopw   0x0(%rax,%rax,1)
movzbl (%rbx),%edi
call   1050 <gui_color_attr_get_flag@plt>
add    $0x1,%rbx
test   %eax,%eax
jg     14e0 <gui_color_decode+0x380>
lea    -0x1(%rbx),%rbp
cmpb   $0x0,0x0(%rbp)
jne    1580 <gui_color_decode+0x420>
jmp    1590 <gui_color_decode+0x430>
lea    0x4(%r14),%rax
cmpb   $0x0,0x3(%r14)
cmovne %rax,%rbp
test   %r12,%r12
jne    1595 <gui_color_decode+0x435>
jmp    15c5 <gui_color_decode+0x465>
add    $0x2,%r14
mov    %r14,%rbp
mov    $0x2,%eax
cmpb   $0x0,0x0(%rbp)
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,(%rbx)
mov    $0x0,%ecx
cmovne %rax,%rcx
add    %rcx,%rbp
mov    0x0(%rbp),%al
cmp    $0x2c,%al
jne    1590 <gui_color_decode+0x430>
mov    0x1(%rbp),%al
test   %al,%al
je     1590 <gui_color_decode+0x430>
cmp    $0x40,%al
jne    15b0 <gui_color_decode+0x450>
cmpb   $0x0,0x2(%rbp)
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,0x3(%rbp)
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,0x4(%rbp)
je     1590 <gui_color_decode+0x430>
cmpb   $0x0,0x5(%rbp)
je     1590 <gui_color_decode+0x430>
lea    0x7(%rbp),%rax
cmpb   $0x0,0x6(%rbp)
jmp    150c <gui_color_decode+0x3ac>
add    $0x2,%r14
mov    %r14,%rbp
cmpb   $0x0,0x0(%rbp)
je     1590 <gui_color_decode+0x430>
xor    %eax,%eax
cmpb   $0x0,(%rbx)
setne  %al
lea    0x0(%rbp,%rax,2),%rbp
nopl   (%rax)
test   %r12,%r12
je     15c5 <gui_color_decode+0x465>
mov    (%r12),%al
test   %al,%al
je     15c5 <gui_color_decode+0x465>
movslq %r13d,%rcx
mov    (%rsp),%rbx
mov    %al,(%rbx,%rcx,1)
add    $0x1,%r13d
mov    %rbp,%r14
jmp    15d0 <gui_color_decode+0x470>
xor    %eax,%eax
cmpb   $0x0,0x2(%rbp)
setne  %al
lea    (%rax,%rax,2),%rax
add    %rax,%rbp
test   %r12,%r12
jne    1595 <gui_color_decode+0x435>
mov    %rbp,%r14
mov    (%rsp),%rbx
nopl   0x0(%rax)
mov    (%r14),%al
test   %al,%al
je     15e0 <gui_color_decode+0x480>
cmp    %r15d,%r13d
jl     11c0 <gui_color_decode+0x60>
movslq %r13d,%rax
movb   $0x0,(%rbx,%rax,1)
jmp    15eb <gui_color_decode+0x48b>
xor    %ebx,%ebx
mov    %rbx,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i8* @gui_color_decode(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i8* %0, i8** %4
store i8* %1, i8** %5
%11 = load i8*, i8** %4
%12 = icmp ne i8* %11, null
br i1 %12, label %14, label %13
13: ; preds = %2
store i8* null, i8** %3
br label %507
14: ; preds = %2
%15 = load i8*, i8** %4
%16 = call i32 @strlen(i8* %15)
%17 = mul nsw i32 %16, 2
%18 = add nsw i32 %17, 1
store i32 %18, i32* %8
%19 = load i32, i32* %8
%20 = call i8* @malloc(i32 %19)
store i8* %20, i8** %7
%21 = load i8*, i8** %7
%22 = icmp ne i8* %21, null
br i1 %22, label %24, label %23
23: ; preds = %14
store i8* null, i8** %3
br label %507
24: ; preds = %14
%25 = load i8*, i8** %4
store i8* %25, i8** %6
store i32 0, i32* %9
br label %26
26: ; preds = %500, %24
%27 = load i8*, i8** %6
%28 = icmp ne i8* %27, null
br i1 %28, label %29, label %40
29: ; preds = %26
%30 = load i8*, i8** %6
%31 = getelementptr inbounds i8, i8* %30, i64 0
%32 = load i8, i8* %31
%33 = zext i8 %32 to i32
%34 = icmp ne i32 %33, 0
br i1 %34, label %35, label %40
35: ; preds = %29
%36 = load i32, i32* %9
%37 = load i32, i32* %8
%38 = sub nsw i32 %37, 1
%39 = icmp slt i32 %36, %38
br label %40
40: ; preds = %35, %29, %26
%41 = phi i1 [ false, %29 ], [ false, %26 ], [ %39, %35 ]
br i1 %41, label %42, label %501
42: ; preds = %40
%43 = load i8*, i8** %6
%44 = getelementptr inbounds i8, i8* %43, i64 0
%45 = load i8, i8* %44
%46 = zext i8 %45 to i32
switch i32 %46, label %479 [
i32 25, label %47
i32 26, label %427
i32 27, label %427
i32 28, label %457
]
47: ; preds = %42
%48 = load i8*, i8** %6
%49 = getelementptr inbounds i8, i8* %48, i32 1
store i8* %49, i8** %6
%50 = load i8*, i8** %6
%51 = getelementptr inbounds i8, i8* %50, i64 0
%52 = load i8, i8* %51
%53 = zext i8 %52 to i32
switch i32 %53, label %391 [
i32 70, label %54
i32 66, label %135
i32 42, label %196
i32 64, label %340
i32 69, label %374
i32 98, label %377
i32 28, label %388
]
54: ; preds = %47
%55 = load i8*, i8** %6
%56 = getelementptr inbounds i8, i8* %55, i32 1
store i8* %56, i8** %6
%57 = load i8*, i8** %6
%58 = getelementptr inbounds i8, i8* %57, i64 0
%59 = load i8, i8* %58
%60 = zext i8 %59 to i32
%61 = icmp eq i32 %60, 64
br i1 %61, label %62, label %108
62: ; preds = %54
%63 = load i8*, i8** %6
%64 = getelementptr inbounds i8, i8* %63, i32 1
store i8* %64, i8** %6
br label %65
65: ; preds = %71, %62
%66 = load i8*, i8** %6
%67 = getelementptr inbounds i8, i8* %66, i64 0
%68 = load i8, i8* %67
%69 = call i32 @gui_color_attr_get_flag(i8 zeroext %68)
%70 = icmp sgt i32 %69, 0
br i1 %70, label %71, label %74
71: ; preds = %65
%72 = load i8*, i8** %6
%73 = getelementptr inbounds i8, i8* %72, i32 1
store i8* %73, i8** %6
br label %65
74: ; preds = %65
%75 = load i8*, i8** %6
%76 = getelementptr inbounds i8, i8* %75, i64 0
%77 = load i8, i8* %76
%78 = zext i8 %77 to i32
%79 = icmp ne i32 %78, 0
br i1 %79, label %80, label %107
80: ; preds = %74
%81 = load i8*, i8** %6
%82 = getelementptr inbounds i8, i8* %81, i64 1
%83 = load i8, i8* %82
%84 = zext i8 %83 to i32
%85 = icmp ne i32 %84, 0
br i1 %85, label %86, label %107
86: ; preds = %80
%87 = load i8*, i8** %6
%88 = getelementptr inbounds i8, i8* %87, i64 2
%89 = load i8, i8* %88
%90 = zext i8 %89 to i32
%91 = icmp ne i32 %90, 0
br i1 %91, label %92, label %107
92: ; preds = %86
%93 = load i8*, i8** %6
%94 = getelementptr inbounds i8, i8* %93, i64 3
%95 = load i8, i8* %94
%96 = zext i8 %95 to i32
%97 = icmp ne i32 %96, 0
br i1 %97, label %98, label %107
98: ; preds = %92
%99 = load i8*, i8** %6
%100 = getelementptr inbounds i8, i8* %99, i64 4
%101 = load i8, i8* %100
%102 = zext i8 %101 to i32
%103 = icmp ne i32 %102, 0
br i1 %103, label %104, label %107
104: ; preds = %98
%105 = load i8*, i8** %6
%106 = getelementptr inbounds i8, i8* %105, i64 5
store i8* %106, i8** %6
br label %107
107: ; preds = %104, %98, %92, %86, %80, %74
br label %134
108: ; preds = %54
br label %109
109: ; preds = %115, %108
%110 = load i8*, i8** %6
%111 = getelementptr inbounds i8, i8* %110, i64 0
%112 = load i8, i8* %111
%113 = call i32 @gui_color_attr_get_flag(i8 zeroext %112)
%114 = icmp sgt i32 %113, 0
br i1 %114, label %115, label %118
115: ; preds = %109
%116 = load i8*, i8** %6
%117 = getelementptr inbounds i8, i8* %116, i32 1
store i8* %117, i8** %6
br label %109
118: ; preds = %109
%119 = load i8*, i8** %6
%120 = getelementptr inbounds i8, i8* %119, i64 0
%121 = load i8, i8* %120
%122 = zext i8 %121 to i32
%123 = icmp ne i32 %122, 0
br i1 %123, label %124, label %133
124: ; preds = %118
%125 = load i8*, i8** %6
%126 = getelementptr inbounds i8, i8* %125, i64 1
%127 = load i8, i8* %126
%128 = zext i8 %127 to i32
%129 = icmp ne i32 %128, 0
br i1 %129, label %130, label %133
130: ; preds = %124
%131 = load i8*, i8** %6
%132 = getelementptr inbounds i8, i8* %131, i64 2
store i8* %132, i8** %6
br label %133
133: ; preds = %130, %124, %118
br label %134
134: ; preds = %133, %107
br label %407
135: ; preds = %47
%136 = load i8*, i8** %6
%137 = getelementptr inbounds i8, i8* %136, i32 1
store i8* %137, i8** %6
%138 = load i8*, i8** %6
%139 = getelementptr inbounds i8, i8* %138, i64 0
%140 = load i8, i8* %139
%141 = zext i8 %140 to i32
%142 = icmp eq i32 %141, 64
br i1 %142, label %143, label %179
143: ; preds = %135
%144 = load i8*, i8** %6
%145 = getelementptr inbounds i8, i8* %144, i32 1
store i8* %145, i8** %6
%146 = load i8*, i8** %6
%147 = getelementptr inbounds i8, i8* %146, i64 0
%148 = load i8, i8* %147
%149 = zext i8 %148 to i32
%150 = icmp ne i32 %149, 0
br i1 %150, label %151, label %178
151: ; preds = %143
%152 = load i8*, i8** %6
%153 = getelementptr inbounds i8, i8* %152, i64 1
%154 = load i8, i8* %153
%155 = zext i8 %154 to i32
%156 = icmp ne i32 %155, 0
br i1 %156, label %157, label %178
157: ; preds = %151
%158 = load i8*, i8** %6
%159 = getelementptr inbounds i8, i8* %158, i64 2
%160 = load i8, i8* %159
%161 = zext i8 %160 to i32
%162 = icmp ne i32 %161, 0
br i1 %162, label %163, label %178
163: ; preds = %157
%164 = load i8*, i8** %6
%165 = getelementptr inbounds i8, i8* %164, i64 3
%166 = load i8, i8* %165
%167 = zext i8 %166 to i32
%168 = icmp ne i32 %167, 0
br i1 %168, label %169, label %178
169: ; preds = %163
%170 = load i8*, i8** %6
%171 = getelementptr inbounds i8, i8* %170, i64 4
%172 = load i8, i8* %171
%173 = zext i8 %172 to i32
%174 = icmp ne i32 %173, 0
br i1 %174, label %175, label %178
175: ; preds = %169
%176 = load i8*, i8** %6
%177 = getelementptr inbounds i8, i8* %176, i64 5
store i8* %177, i8** %6
br label %178
178: ; preds = %175, %169, %163, %157, %151, %143
br label %195
179: ; preds = %135
%180 = load i8*, i8** %6
%181 = getelementptr inbounds i8, i8* %180, i64 0
%182 = load i8, i8* %181
%183 = zext i8 %182 to i32
%184 = icmp ne i32 %183, 0
br i1 %184, label %185, label %194
185: ; preds = %179
%186 = load i8*, i8** %6
%187 = getelementptr inbounds i8, i8* %186, i64 1
%188 = load i8, i8* %187
%189 = zext i8 %188 to i32
%190 = icmp ne i32 %189, 0
br i1 %190, label %191, label %194
191: ; preds = %185
%192 = load i8*, i8** %6
%193 = getelementptr inbounds i8, i8* %192, i64 2
store i8* %193, i8** %6
br label %194
194: ; preds = %191, %185, %179
br label %195
195: ; preds = %194, %178
br label %407
196: ; preds = %47
%197 = load i8*, i8** %6
%198 = getelementptr inbounds i8, i8* %197, i32 1
store i8* %198, i8** %6
%199 = load i8*, i8** %6
%200 = getelementptr inbounds i8, i8* %199, i64 0
%201 = load i8, i8* %200
%202 = zext i8 %201 to i32
%203 = icmp eq i32 %202, 64
br i1 %203, label %204, label %250
204: ; preds = %196
%205 = load i8*, i8** %6
%206 = getelementptr inbounds i8, i8* %205, i32 1
store i8* %206, i8** %6
br label %207
207: ; preds = %213, %204
%208 = load i8*, i8** %6
%209 = getelementptr inbounds i8, i8* %208, i64 0
%210 = load i8, i8* %209
%211 = call i32 @gui_color_attr_get_flag(i8 zeroext %210)
%212 = icmp sgt i32 %211, 0
br i1 %212, label %213, label %216
213: ; preds = %207
%214 = load i8*, i8** %6
%215 = getelementptr inbounds i8, i8* %214, i32 1
store i8* %215, i8** %6
br label %207
216: ; preds = %207
%217 = load i8*, i8** %6
%218 = getelementptr inbounds i8, i8* %217, i64 0
%219 = load i8, i8* %218
%220 = zext i8 %219 to i32
%221 = icmp ne i32 %220, 0
br i1 %221, label %222, label %249
222: ; preds = %216
%223 = load i8*, i8** %6
%224 = getelementptr inbounds i8, i8* %223, i64 1
%225 = load i8, i8* %224
%226 = zext i8 %225 to i32
%227 = icmp ne i32 %226, 0
br i1 %227, label %228, label %249
228: ; preds = %222
%229 = load i8*, i8** %6
%230 = getelementptr inbounds i8, i8* %229, i64 2
%231 = load i8, i8* %230
%232 = zext i8 %231 to i32
%233 = icmp ne i32 %232, 0
br i1 %233, label %234, label %249
234: ; preds = %228
%235 = load i8*, i8** %6
%236 = getelementptr inbounds i8, i8* %235, i64 3
%237 = load i8, i8* %236
%238 = zext i8 %237 to i32
%239 = icmp ne i32 %238, 0
br i1 %239, label %240, label %249
240: ; preds = %234
%241 = load i8*, i8** %6
%242 = getelementptr inbounds i8, i8* %241, i64 4
%243 = load i8, i8* %242
%244 = zext i8 %243 to i32
%245 = icmp ne i32 %244, 0
br i1 %245, label %246, label %249
246: ; preds = %240
%247 = load i8*, i8** %6
%248 = getelementptr inbounds i8, i8* %247, i64 5
store i8* %248, i8** %6
br label %249
249: ; preds = %246, %240, %234, %228, %222, %216
br label %276
250: ; preds = %196
br label %251
251: ; preds = %257, %250
%252 = load i8*, i8** %6
%253 = getelementptr inbounds i8, i8* %252, i64 0
%254 = load i8, i8* %253
%255 = call i32 @gui_color_attr_get_flag(i8 zeroext %254)
%256 = icmp sgt i32 %255, 0
br i1 %256, label %257, label %260
257: ; preds = %251
%258 = load i8*, i8** %6
%259 = getelementptr inbounds i8, i8* %258, i32 1
store i8* %259, i8** %6
br label %251
260: ; preds = %251
%261 = load i8*, i8** %6
%262 = getelementptr inbounds i8, i8* %261, i64 0
%263 = load i8, i8* %262
%264 = zext i8 %263 to i32
%265 = icmp ne i32 %264, 0
br i1 %265, label %266, label %275
266: ; preds = %260
%267 = load i8*, i8** %6
%268 = getelementptr inbounds i8, i8* %267, i64 1
%269 = load i8, i8* %268
%270 = zext i8 %269 to i32
%271 = icmp ne i32 %270, 0
br i1 %271, label %272, label %275
272: ; preds = %266
%273 = load i8*, i8** %6
%274 = getelementptr inbounds i8, i8* %273, i64 2
store i8* %274, i8** %6
br label %275
275: ; preds = %272, %266, %260
br label %276
276: ; preds = %275, %249
%277 = load i8*, i8** %6
%278 = getelementptr inbounds i8, i8* %277, i64 0
%279 = load i8, i8* %278
%280 = zext i8 %279 to i32
%281 = icmp eq i32 %280, 44
br i1 %281, label %282, label %339
282: ; preds = %276
%283 = load i8*, i8** %6
%284 = getelementptr inbounds i8, i8* %283, i64 1
%285 = load i8, i8* %284
%286 = zext i8 %285 to i32
%287 = icmp eq i32 %286, 64
br i1 %287, label %288, label %322
288: ; preds = %282
%289 = load i8*, i8** %6
%290 = getelementptr inbounds i8, i8* %289, i64 2
%291 = load i8, i8* %290
%292 = zext i8 %291 to i32
%293 = icmp ne i32 %292, 0
br i1 %293, label %294, label %321
294: ; preds = %288
%295 = load i8*, i8** %6
%296 = getelementptr inbounds i8, i8* %295, i64 3
%297 = load i8, i8* %296
%298 = zext i8 %297 to i32
%299 = icmp ne i32 %298, 0
br i1 %299, label %300, label %321
300: ; preds = %294
%301 = load i8*, i8** %6
%302 = getelementptr inbounds i8, i8* %301, i64 4
%303 = load i8, i8* %302
%304 = zext i8 %303 to i32
%305 = icmp ne i32 %304, 0
br i1 %305, label %306, label %321
306: ; preds = %300
%307 = load i8*, i8** %6
%308 = getelementptr inbounds i8, i8* %307, i64 5
%309 = load i8, i8* %308
%310 = zext i8 %309 to i32
%311 = icmp ne i32 %310, 0
br i1 %311, label %312, label %321
312: ; preds = %306
%313 = load i8*, i8** %6
%314 = getelementptr inbounds i8, i8* %313, i64 6
%315 = load i8, i8* %314
%316 = zext i8 %315 to i32
%317 = icmp ne i32 %316, 0
br i1 %317, label %318, label %321
318: ; preds = %312
%319 = load i8*, i8** %6
%320 = getelementptr inbounds i8, i8* %319, i64 7
store i8* %320, i8** %6
br label %321
321: ; preds = %318, %312, %306, %300, %294, %288
br label %338
322: ; preds = %282
%323 = load i8*, i8** %6
%324 = getelementptr inbounds i8, i8* %323, i64 1
%325 = load i8, i8* %324
%326 = zext i8 %325 to i32
%327 = icmp ne i32 %326, 0
br i1 %327, label %328, label %337
328: ; preds = %322
%329 = load i8*, i8** %6
%330 = getelementptr inbounds i8, i8* %329, i64 2
%331 = load i8, i8* %330
%332 = zext i8 %331 to i32
%333 = icmp ne i32 %332, 0
br i1 %333, label %334, label %337
334: ; preds = %328
%335 = load i8*, i8** %6
%336 = getelementptr inbounds i8, i8* %335, i64 3
store i8* %336, i8** %6
br label %337
337: ; preds = %334, %328, %322
br label %338
338: ; preds = %337, %321
br label %339
339: ; preds = %338, %276
br label %407
340: ; preds = %47
%341 = load i8*, i8** %6
%342 = getelementptr inbounds i8, i8* %341, i64 1
%343 = load i8, i8* %342
%344 = call i32 @isdigit(i8 zeroext %343)
%345 = icmp ne i32 %344, 0
br i1 %345, label %346, label %373
346: ; preds = %340
%347 = load i8*, i8** %6
%348 = getelementptr inbounds i8, i8* %347, i64 2
%349 = load i8, i8* %348
%350 = call i32 @isdigit(i8 zeroext %349)
%351 = icmp ne i32 %350, 0
br i1 %351, label %352, label %373
352: ; preds = %346
%353 = load i8*, i8** %6
%354 = getelementptr inbounds i8, i8* %353, i64 3
%355 = load i8, i8* %354
%356 = call i32 @isdigit(i8 zeroext %355)
%357 = icmp ne i32 %356, 0
br i1 %357, label %358, label %373
358: ; preds = %352
%359 = load i8*, i8** %6
%360 = getelementptr inbounds i8, i8* %359, i64 4
%361 = load i8, i8* %360
%362 = call i32 @isdigit(i8 zeroext %361)
%363 = icmp ne i32 %362, 0
br i1 %363, label %364, label %373
364: ; preds = %358
%365 = load i8*, i8** %6
%366 = getelementptr inbounds i8, i8* %365, i64 5
%367 = load i8, i8* %366
%368 = call i32 @isdigit(i8 zeroext %367)
%369 = icmp ne i32 %368, 0
br i1 %369, label %370, label %373
370: ; preds = %364
%371 = load i8*, i8** %6
%372 = getelementptr inbounds i8, i8* %371, i64 6
store i8* %372, i8** %6
br label %373
373: ; preds = %370, %364, %358, %352, %346, %340
br label %407
374: ; preds = %47
%375 = load i8*, i8** %6
%376 = getelementptr inbounds i8, i8* %375, i32 1
store i8* %376, i8** %6
br label %407
377: ; preds = %47
%378 = load i8*, i8** %6
%379 = getelementptr inbounds i8, i8* %378, i32 1
store i8* %379, i8** %6
%380 = load i8*, i8** %6
%381 = getelementptr inbounds i8, i8* %380, i64 0
%382 = load i8, i8* %381
%383 = zext i8 %382 to i32
switch i32 %383, label %387 [
i32 70, label %384
i32 66, label %384
i32 68, label %384
i32 95, label %384
i32 45, label %384
i32 35, label %384
i32 105, label %384
i32 108, label %384
]
384: ; preds = %377, %377, %377, %377, %377, %377, %377, %377
%385 = load i8*, i8** %6
%386 = getelementptr inbounds i8, i8* %385, i32 1
store i8* %386, i8** %6
br label %387
387: ; preds = %377, %384
br label %407
388: ; preds = %47
%389 = load i8*, i8** %6
%390 = getelementptr inbounds i8, i8* %389, i32 1
store i8* %390, i8** %6
br label %407
391: ; preds = %47
%392 = load i8*, i8** %6
%393 = getelementptr inbounds i8, i8* %392, i64 0
%394 = load i8, i8* %393
%395 = call i32 @isdigit(i8 zeroext %394)
%396 = icmp ne i32 %395, 0
br i1 %396, label %397, label %406
397: ; preds = %391
%398 = load i8*, i8** %6
%399 = getelementptr inbounds i8, i8* %398, i64 1
%400 = load i8, i8* %399
%401 = call i32 @isdigit(i8 zeroext %400)
%402 = icmp ne i32 %401, 0
br i1 %402, label %403, label %406
403: ; preds = %397
%404 = load i8*, i8** %6
%405 = getelementptr inbounds i8, i8* %404, i64 2
store i8* %405, i8** %6
br label %406
406: ; preds = %403, %397, %391
br label %407
407: ; preds = %406, %388, %387, %374, %373, %339, %195, %134
%408 = load i8*, i8** %5
%409 = icmp ne i8* %408, null
br i1 %409, label %410, label %426
410: ; preds = %407
%411 = load i8*, i8** %5
%412 = getelementptr inbounds i8, i8* %411, i64 0
%413 = load i8, i8* %412
%414 = sext i8 %413 to i32
%415 = icmp ne i32 %414, 0
br i1 %415, label %416, label %426
416: ; preds = %410
%417 = load i8*, i8** %5
%418 = getelementptr inbounds i8, i8* %417, i64 0
%419 = load i8, i8* %418
%420 = load i8*, i8** %7
%421 = load i32, i32* %9
%422 = sext i32 %421 to i64
%423 = getelementptr inbounds i8, i8* %420, i64 %422
store i8 %419, i8* %423
%424 = load i32, i32* %9
%425 = add nsw i32 %424, 1
store i32 %425, i32* %9
br label %426
426: ; preds = %416, %410, %407
br label %500
427: ; preds = %42, %42
%428 = load i8*, i8** %6
%429 = getelementptr inbounds i8, i8* %428, i32 1
store i8* %429, i8** %6
%430 = load i8*, i8** %6
%431 = getelementptr inbounds i8, i8* %430, i64 0
%432 = load i8, i8* %431
%433 = icmp ne i8 %432, 0
br i1 %433, label %434, label %437
434: ; preds = %427
%435 = load i8*, i8** %6
%436 = getelementptr inbounds i8, i8* %435, i32 1
store i8* %436, i8** %6
br label %437
437: ; preds = %434, %427
%438 = load i8*, i8** %5
%439 = icmp ne i8* %438, null
br i1 %439, label %440, label %456
440: ; preds = %437
%441 = load i8*, i8** %5
%442 = getelementptr inbounds i8, i8* %441, i64 0
%443 = load i8, i8* %442
%444 = sext i8 %443 to i32
%445 = icmp ne i32 %444, 0
br i1 %445, label %446, label %456
446: ; preds = %440
%447 = load i8*, i8** %5
%448 = getelementptr inbounds i8, i8* %447, i64 0
%449 = load i8, i8* %448
%450 = load i8*, i8** %7
%451 = load i32, i32* %9
%452 = sext i32 %451 to i64
%453 = getelementptr inbounds i8, i8* %450, i64 %452
store i8 %449, i8* %453
%454 = load i32, i32* %9
%455 = add nsw i32 %454, 1
store i32 %455, i32* %9
br label %456
456: ; preds = %446, %440, %437
br label %500
457: ; preds = %42
%458 = load i8*, i8** %6
%459 = getelementptr inbounds i8, i8* %458, i32 1
store i8* %459, i8** %6
%460 = load i8*, i8** %5
%461 = icmp ne i8* %460, null
br i1 %461, label %462, label %478
462: ; preds = %457
%463 = load i8*, i8** %5
%464 = getelementptr inbounds i8, i8* %463, i64 0
%465 = load i8, i8* %464
%466 = sext i8 %465 to i32
%467 = icmp ne i32 %466, 0
br i1 %467, label %468, label %478
468: ; preds = %462
%469 = load i8*, i8** %5
%470 = getelementptr inbounds i8, i8* %469, i64 0
%471 = load i8, i8* %470
%472 = load i8*, i8** %7
%473 = load i32, i32* %9
%474 = sext i32 %473 to i64
%475 = getelementptr inbounds i8, i8* %472, i64 %474
store i8 %471, i8* %475
%476 = load i32, i32* %9
%477 = add nsw i32 %476, 1
store i32 %477, i32* %9
br label %478
478: ; preds = %468, %462, %457
br label %500
479: ; preds = %42
%480 = load i8*, i8** %6
%481 = call i32 @utf8_char_size(i8* %480)
store i32 %481, i32* %10
%482 = load i32, i32* %10
%483 = icmp eq i32 %482, 0
br i1 %483, label %484, label %485
484: ; preds = %479
store i32 1, i32* %10
br label %485
485: ; preds = %484, %479
%486 = load i8*, i8** %7
%487 = load i32, i32* %9
%488 = sext i32 %487 to i64
%489 = getelementptr inbounds i8, i8* %486, i64 %488
%490 = load i8*, i8** %6
%491 = load i32, i32* %10
%492 = call i32 @memcpy(i8* %489, i8* %490, i32 %491)
%493 = load i32, i32* %10
%494 = load i32, i32* %9
%495 = add nsw i32 %494, %493
store i32 %495, i32* %9
%496 = load i32, i32* %10
%497 = load i8*, i8** %6
%498 = sext i32 %496 to i64
%499 = getelementptr inbounds i8, i8* %497, i64 %498
store i8* %499, i8** %6
br label %500
500: ; preds = %485, %478, %456, %426
br label %26
501: ; preds = %40
%502 = load i8*, i8** %7
%503 = load i32, i32* %9
%504 = sext i32 %503 to i64
%505 = getelementptr inbounds i8, i8* %502, i64 %504
store i8 0, i8* %505
%506 = load i8*, i8** %7
store i8* %506, i8** %3
br label %507
507: ; preds = %501, %23, %13
%508 = load i8*, i8** %3
ret i8* %508
}

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