#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*/ FILE;

/* Variables and functions */
unsigned int cpl_expr(char **, char *);
int /*<<< orphan*/ fclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fgets(char *, int, int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ free(char *);
int /*<<< orphan*/ fwrite(char *, int, int, int /*<<< orphan*/ *);
int /*<<< orphan*/ is_separator(char);
scalar_t__ isspace(char);
scalar_t__ malloc(int);
int /*<<< orphan*/ remtail(char *);
int /*<<< orphan*/ skip_space(char **);
int splitstt(char *, char *, char **);
int /*<<< orphan*/ strcat(char *, char *);
scalar_t__ strcmp(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
int strlen(char *);
char *strrchr(char *, char);
scalar_t__ strtol(char *, char **, int);
int /*<<< orphan*/ zraiseOpenFileError(char *);
int /*<<< orphan*/ zraiseOutOfMemory(char *);
int /*<<< orphan*/ zraisecpl(char *, char *, unsigned int);
int cpl_mod(char *srcname) {
  FILE *fsrc, *fbin;
  char *binname, *expr_entry, *def, *ext;
  char *assign, *stt;
  char line[256], bin[256], splitbuffer[256];
  char *parts[16];
  unsigned int length, linum;
  int identlevel, identwidth, ident, splitlen;
  fsrc = fopen(srcname, "r");
  if (fsrc == NULL) {
    zraiseOpenFileError(srcname);
    return 0;
  }
  binname = (char *)malloc(strlen(srcname) + 5);
  if (binname == NULL) {
    zraiseOutOfMemory("cpl_mod");
    fclose(fsrc);
    return 0;
  }
  strcpy(binname, srcname);
  ext = strrchr(binname, '.');
  if (ext != NULL)
    *ext = '\0';
  strcat(binname, ".zbc");
  fbin = fopen(binname, "wb");
  ext = NULL;
  if (fbin == NULL) {
    zraiseOpenFileError(binname);
    fclose(fsrc);
    free(binname);
    binname = NULL;
    return 0;
  }
  identlevel = 0;
  identwidth = 0;
  for (linum = 1; fgets(line, 256, fsrc) != NULL; linum++) {
    remtail(line);
    if (strlen(line) == 0)
      continue;
    ident = 0;
    stt = line;
    while (isspace(*stt)) {
      stt++;
      ident++;
    }
    if (identwidth > 0) {
      int level;
      level = ident / identwidth;
      if (ident % identwidth != 0) {
        zraisecpl("Incorrect identation.", srcname, linum);
        break;
      }
      if (level > identlevel) {
        zraisecpl("Incorrect identation.", srcname, linum);
        break;
      }
      for (; level < identlevel; identlevel--)
        fwrite("\xBE\x01", 1, 2, fbin);
    } else if (identlevel > 0) {
      if (ident == 0) {
        zraisecpl("Incorrect identation.", srcname, linum);
        break;
      } else
        identwidth = ident;
    }
    splitlen = splitstt(stt, splitbuffer, parts);
    expr_entry = parts[splitlen - 1];
    if (*parts[0] == '\\') {
      if (strcmp(parts[0], "\\del") == 0) {
        fwrite("\xDE", 1, 1, fbin);
        for (splitlen -= 1; splitlen > 0; splitlen--) {
          char *name = parts[splitlen];
          fwrite(name, 1, strlen(name) + 1, fbin);
        }
        fwrite("\0", 1, 1, fbin);
      } else if (strcmp(parts[0], "\\break") == 0) {
        if (splitlen == 1) {
          fwrite("\xBE\x02\x00", 1, 3, fbin);
        } else {
          char blevel;
          fwrite("\xBE\x02", 1, 2, fbin);
          blevel = (char)strtol(parts[1], (char **)NULL, 16);
          fwrite(&blevel, 1, 1, fbin);
        }
      } else if (strcmp(parts[0], "\\cont") == 0) {
        if (splitlen == 1) {
          fwrite("\xBE\x03\x00", 1, 3, fbin);
        } else {
          char blevel;
          fwrite("\xBE\x03", 1, 2, fbin);
          blevel = (char)strtol(parts[1], (char **)NULL, 16);
          fwrite(&blevel, 1, 1, fbin);
        }
      } else if (strcmp(parts[0], "\\ret") == 0) {
        if (splitlen == 1) {
          fwrite("\xBE\x04\x01", 1, 3, fbin);
        } else {
          fwrite("\xBE\x04", 1, 2, fbin);
          length = cpl_expr(&expr_entry, bin);
          fwrite(bin, 1, length, fbin);
        }
      } else if (strcmp(parts[0], "\\while") == 0) {
        identlevel++;
        fwrite("\xB0\x04", 1, 2, fbin);
        length = cpl_expr(&expr_entry, bin);
        fwrite(bin, 1, length, fbin);
      } else if (strcmp(parts[0], "\\if") == 0) {
        identlevel++;
        fwrite("\xB0\x01", 1, 2, fbin);
        length = cpl_expr(&expr_entry, bin);
        fwrite(bin, 1, length, fbin);
      } else if (strcmp(parts[0], "\\elif") == 0) {
        identlevel++;
        fwrite("\xB0\x02", 1, 2, fbin);
        length = cpl_expr(&expr_entry, bin);
        fwrite(bin, 1, length, fbin);
      } else if (strcmp(parts[0], "\\else") == 0) {
        identlevel++;
        fwrite("\xB0\x03", 1, 2, fbin);
      } else if (strcmp(parts[0], "\\def") == 0) {
        identlevel++;
        fwrite("\xB0\x05", 1, 2, fbin);
        def = parts[1];
        while (*def != '(') {
          fwrite(def, 1, 1, fbin);
          def++;
        }
        fwrite("\0", 1, 1, fbin);
        def++;
        while (*def != ')') {
          skip_space(&def);
          while (!is_separator(*def)) {
            fwrite(def, 1, 1, fbin);
            def++;
          }
          fwrite("\0", 1, 1, fbin);
          skip_space(&def);
        }
        fwrite("\0", 1, 1, fbin);
      } else {
        zraisecpl("Unknown instruction.", srcname, linum);
        break;
      }
    } else {
      length = cpl_expr(&expr_entry, bin);
      fwrite(bin, 1, length, fbin);
      for (splitlen -= 1; splitlen > 0; splitlen--) {
        assign = parts[splitlen - 1];
        if (*assign == '(') {
          int depth = 1;
          int namelen;
          char *namechar;
          fwrite("\x10", 1, 1, fbin);
          assign++;
          while (depth > 0) {
            skip_space(&assign);
            if (*assign == '(') {
              fwrite("\x10", 1, 1, fbin);
              depth++;
              assign++;
              continue;
            }
            namechar = assign;
            namelen = 0;
            while (!isspace(*namechar) && *namechar != ')') {
              namechar++;
              namelen++;
            }
            fwrite(assign, 1, namelen, fbin);
            fwrite("\0", 1, 1, fbin);
            assign += namelen;
            skip_space(&assign);
            while (*assign == ')') {
              fwrite("\x01", 1, 1, fbin);
              depth--;
              assign++;
              skip_space(&assign);
            }
          }
        } else
          fwrite(assign, 1, strlen(assign) + 1, fbin);
      }
      fwrite("\0", 1, 1, fbin);
    }
  }
  fclose(fsrc);
  while (identlevel >= 0) {
    fwrite("\xBE\x01", 1, 2, fbin);
    identlevel--;
  }
  fclose(fbin);
  free(binname);
  binname = NULL;
  return 1;
}


x86 assembly (clang, -O0):
<cpl_mod>:
push   %rbp
mov    %rsp,%rbp
sub    $0x430,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
lea    0xd96(%rip),%rsi
call   1150 <fopen@plt>
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    1293 <cpl_mod+0x43>
mov    -0x10(%rbp),%rdi
call   1070 <zraiseOpenFileError@plt>
movl   $0x0,-0x4(%rbp)
jmp    1e64 <cpl_mod+0xc14>
mov    -0x10(%rbp),%rdi
call   10a0 <strlen@plt>
mov    %eax,%edi
add    $0x5,%edi
call   1120 <malloc@plt>
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    12d6 <cpl_mod+0x86>
lea    0xd46(%rip),%rdi
call   1130 <zraiseOutOfMemory@plt>
mov    -0x18(%rbp),%rdi
call   1090 <fclose@plt>
movl   $0x0,-0x4(%rbp)
jmp    1e64 <cpl_mod+0xc14>
mov    -0x28(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <strcpy@plt>
mov    -0x28(%rbp),%rdi
mov    $0x2e,%esi
call   10c0 <strrchr@plt>
mov    %rax,-0x40(%rbp)
cmpq   $0x0,-0x40(%rbp)
je     1307 <cpl_mod+0xb7>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x28(%rbp),%rdi
lea    0xcf8(%rip),%rsi
call   1160 <strcat@plt>
mov    -0x28(%rbp),%rdi
lea    0xced(%rip),%rsi
call   1150 <fopen@plt>
mov    %rax,-0x20(%rbp)
movq   $0x0,-0x40(%rbp)
cmpq   $0x0,-0x20(%rbp)
jne    136d <cpl_mod+0x11d>
mov    -0x28(%rbp),%rdi
call   1070 <zraiseOpenFileError@plt>
mov    -0x18(%rbp),%rdi
call   1090 <fclose@plt>
mov    -0x28(%rbp),%rdi
call   1040 <free@plt>
movq   $0x0,-0x28(%rbp)
movl   $0x0,-0x4(%rbp)
jmp    1e64 <cpl_mod+0xc14>
movl   $0x0,-0x3dc(%rbp)
movl   $0x0,-0x3e0(%rbp)
movl   $0x1,-0x3d8(%rbp)
lea    -0x150(%rbp),%rdi
mov    -0x18(%rbp),%rdx
mov    $0x100,%esi
call   10f0 <fgets@plt>
cmp    $0x0,%rax
je     1dff <cpl_mod+0xbaf>
lea    -0x150(%rbp),%rdi
call   10b0 <remtail@plt>
lea    -0x150(%rbp),%rdi
call   10a0 <strlen@plt>
cmp    $0x0,%eax
jne    13d0 <cpl_mod+0x180>
jmp    1deb <cpl_mod+0xb9b>
movl   $0x0,-0x3e4(%rbp)
lea    -0x150(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
movsbl (%rax),%edi
call   10e0 <isspace@plt>
cmp    $0x0,%rax
je     141b <cpl_mod+0x1cb>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
mov    -0x3e4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3e4(%rbp)
jmp    13e5 <cpl_mod+0x195>
cmpl   $0x0,-0x3e0(%rbp)
jle    14e3 <cpl_mod+0x293>
mov    -0x3e4(%rbp),%eax
cltd
idivl  -0x3e0(%rbp)
mov    %eax,-0x3ec(%rbp)
mov    -0x3e4(%rbp),%eax
cltd
idivl  -0x3e0(%rbp)
cmp    $0x0,%edx
je     146c <cpl_mod+0x21c>
mov    -0x10(%rbp),%rsi
mov    -0x3d8(%rbp),%edx
lea    0xbb0(%rip),%rdi
call   1140 <zraisecpl@plt>
jmp    1dff <cpl_mod+0xbaf>
mov    -0x3ec(%rbp),%eax
cmp    -0x3dc(%rbp),%eax
jle    1499 <cpl_mod+0x249>
mov    -0x10(%rbp),%rsi
mov    -0x3d8(%rbp),%edx
lea    0xb83(%rip),%rdi
call   1140 <zraisecpl@plt>
jmp    1dff <cpl_mod+0xbaf>
jmp    149e <cpl_mod+0x24e>
mov    -0x3ec(%rbp),%eax
cmp    -0x3dc(%rbp),%eax
jge    14de <cpl_mod+0x28e>
mov    -0x20(%rbp),%rcx
lea    0xb6d(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
call   1170 <fwrite@plt>
mov    -0x3dc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x3dc(%rbp)
jmp    149e <cpl_mod+0x24e>
jmp    152e <cpl_mod+0x2de>
cmpl   $0x0,-0x3dc(%rbp)
jle    1529 <cpl_mod+0x2d9>
cmpl   $0x0,-0x3e4(%rbp)
jne    1518 <cpl_mod+0x2c8>
mov    -0x10(%rbp),%rsi
mov    -0x3d8(%rbp),%edx
lea    0xb04(%rip),%rdi
call   1140 <zraisecpl@plt>
jmp    1dff <cpl_mod+0xbaf>
mov    -0x3e4(%rbp),%eax
mov    %eax,-0x3e0(%rbp)
jmp    1529 <cpl_mod+0x2d9>
jmp    152e <cpl_mod+0x2de>
mov    -0x50(%rbp),%rdi
lea    -0x350(%rbp),%rsi
lea    -0x3d0(%rbp),%rdx
call   1050 <splitstt@plt>
mov    %eax,-0x3e8(%rbp)
mov    -0x3e8(%rbp),%eax
sub    $0x1,%eax
cltq
mov    -0x3d0(%rbp,%rax,8),%rax
ff
mov    %rax,-0x30(%rbp)
mov    -0x3d0(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1b5c <cpl_mod+0x90c>
mov    -0x3d0(%rbp),%rdi
lea    0xaa8(%rip),%rsi
call   1100 <strcmp@plt>
cmp    $0x0,%rax
jne    163f <cpl_mod+0x3ef>
mov    -0x20(%rbp),%rcx
lea    0xa93(%rip),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
mov    -0x3e8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x3e8(%rbp)
cmpl   $0x0,-0x3e8(%rbp)
jle    1623 <cpl_mod+0x3d3>
movslq -0x3e8(%rbp),%rax
mov    -0x3d0(%rbp,%rax,8),%rax
ff
mov    %rax,-0x3f8(%rbp)
mov    -0x3f8(%rbp),%rax
mov    %rax,-0x418(%rbp)
mov    -0x3f8(%rbp),%rdi
call   10a0 <strlen@plt>
mov    -0x418(%rbp),%rdi
mov    %eax,%edx
add    $0x1,%edx
mov    -0x20(%rbp),%rcx
mov    $0x1,%esi
call   1170 <fwrite@plt>
mov    -0x3e8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x3e8(%rbp)
jmp    15b8 <cpl_mod+0x368>
mov    -0x20(%rbp),%rcx
lea    0xa65(%rip),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
jmp    1b57 <cpl_mod+0x907>
mov    -0x3d0(%rbp),%rdi
lea    0x9e5(%rip),%rsi
call   1100 <strcmp@plt>
cmp    $0x0,%rax
jne    16d9 <cpl_mod+0x489>
cmpl   $0x1,-0x3e8(%rbp)
jne    1688 <cpl_mod+0x438>
mov    -0x20(%rbp),%rcx
lea    0xa21(%rip),%rdi
mov    $0x1,%esi
mov    $0x3,%edx
call   1170 <fwrite@plt>
jmp    16d4 <cpl_mod+0x484>
mov    -0x20(%rbp),%rcx
lea    0x9a6(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
call   1170 <fwrite@plt>
mov    -0x3c8(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
mov    $0x10,%edx
call   1110 <strtol@plt>
mov    %al,-0x3f9(%rbp)
mov    -0x20(%rbp),%rcx
lea    -0x3f9(%rbp),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
jmp    1b52 <cpl_mod+0x902>
mov    -0x3d0(%rbp),%rdi
lea    0x955(%rip),%rsi
call   1100 <strcmp@plt>
cmp    $0x0,%rax
jne    1773 <cpl_mod+0x523>
cmpl   $0x1,-0x3e8(%rbp)
jne    1722 <cpl_mod+0x4d2>
mov    -0x20(%rbp),%rcx
lea    0x98b(%rip),%rdi
mov    $0x1,%esi
mov    $0x3,%edx
call   1170 <fwrite@plt>
jmp    176e <cpl_mod+0x51e>
mov    -0x20(%rbp),%rcx
lea    0x915(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
call   1170 <fwrite@plt>
mov    -0x3c8(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
mov    $0x10,%edx
call   1110 <strtol@plt>
mov    %al,-0x3fa(%rbp)
mov    -0x20(%rbp),%rcx
lea    -0x3fa(%rbp),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
jmp    1b4d <cpl_mod+0x8fd>
mov    -0x3d0(%rbp),%rdi
lea    0x8c4(%rip),%rsi
call   1100 <strcmp@plt>
cmp    $0x0,%rax
jne    180c <cpl_mod+0x5bc>
cmpl   $0x1,-0x3e8(%rbp)
jne    17bc <cpl_mod+0x56c>
mov    -0x20(%rbp),%rcx
lea    0x8a2(%rip),%rdi
mov    $0x1,%esi
mov    $0x3,%edx
call   1170 <fwrite@plt>
jmp    1807 <cpl_mod+0x5b7>
mov    -0x20(%rbp),%rcx
lea    0x887(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
call   1170 <fwrite@plt>
lea    -0x250(%rbp),%rsi
lea    -0x30(%rbp),%rdi
call   10d0 <cpl_expr@plt>
mov    %eax,-0x3d4(%rbp)
lea    -0x250(%rbp),%rdi
mov    -0x3d4(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    $0x1,%esi
call   1170 <fwrite@plt>
jmp    1b48 <cpl_mod+0x8f8>
mov    -0x3d0(%rbp),%rdi
lea    0x837(%rip),%rsi
call   1100 <strcmp@plt>
cmp    $0x0,%rax
jne    1888 <cpl_mod+0x638>
mov    -0x3dc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3dc(%rbp)
mov    -0x20(%rbp),%rcx
lea    0x815(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
call   1170 <fwrite@plt>
lea    -0x250(%rbp),%rsi
lea    -0x30(%rbp),%rdi
call   10d0 <cpl_expr@plt>
mov    %eax,-0x3d4(%rbp)
lea    -0x250(%rbp),%rdi
mov    -0x3d4(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    $0x1,%esi
call   1170 <fwrite@plt>
jmp    1b43 <cpl_mod+0x8f3>
mov    -0x3d0(%rbp),%rdi
lea    0x7c5(%rip),%rsi
call   1100 <strcmp@plt>
cmp    $0x0,%rax
jne    1904 <cpl_mod+0x6b4>
mov    -0x3dc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3dc(%rbp)
mov    -0x20(%rbp),%rcx
lea    0x7a0(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
call   1170 <fwrite@plt>
lea    -0x250(%rbp),%rsi
lea    -0x30(%rbp),%rdi
call   10d0 <cpl_expr@plt>
mov    %eax,-0x3d4(%rbp)
lea    -0x250(%rbp),%rdi
mov    -0x3d4(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    $0x1,%esi
call   1170 <fwrite@plt>
jmp    1b3e <cpl_mod+0x8ee>
mov    -0x3d0(%rbp),%rdi
lea    0x750(%rip),%rsi
call   1100 <strcmp@plt>
cmp    $0x0,%rax
jne    1980 <cpl_mod+0x730>
mov    -0x3dc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3dc(%rbp)
mov    -0x20(%rbp),%rcx
lea    0x72d(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
call   1170 <fwrite@plt>
lea    -0x250(%rbp),%rsi
lea    -0x30(%rbp),%rdi
call   10d0 <cpl_expr@plt>
mov    %eax,-0x3d4(%rbp)
lea    -0x250(%rbp),%rdi
mov    -0x3d4(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    $0x1,%esi
call   1170 <fwrite@plt>
jmp    1b39 <cpl_mod+0x8e9>
mov    -0x3d0(%rbp),%rdi
lea    0x6dd(%rip),%rsi
call   1100 <strcmp@plt>
cmp    $0x0,%rax
jne    19cb <cpl_mod+0x77b>
mov    -0x3dc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3dc(%rbp)
mov    -0x20(%rbp),%rcx
lea    0x6ba(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
call   1170 <fwrite@plt>
jmp    1b34 <cpl_mod+0x8e4>
mov    -0x3d0(%rbp),%rdi
lea    0x69b(%rip),%rsi
call   1100 <strcmp@plt>
cmp    $0x0,%rax
jne    1b14 <cpl_mod+0x8c4>
mov    -0x3dc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3dc(%rbp)
mov    -0x20(%rbp),%rcx
lea    0x677(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
call   1170 <fwrite@plt>
mov    -0x3c8(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x28,%eax
je     1a51 <cpl_mod+0x801>
mov    -0x38(%rbp),%rdi
mov    -0x20(%rbp),%rcx
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1a1c <cpl_mod+0x7cc>
mov    -0x20(%rbp),%rcx
lea    0x637(%rip),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x29,%eax
je     1af8 <cpl_mod+0x8a8>
lea    -0x38(%rbp),%rdi
call   1080 <skip_space@plt>
mov    -0x38(%rbp),%rax
movsbl (%rax),%edi
call   1030 <is_separator@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
test   $0x1,%al
jne    1aae <cpl_mod+0x85e>
jmp    1ad3 <cpl_mod+0x883>
mov    -0x38(%rbp),%rdi
mov    -0x20(%rbp),%rcx
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1a8d <cpl_mod+0x83d>
mov    -0x20(%rbp),%rcx
lea    0x5b5(%rip),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
lea    -0x38(%rbp),%rdi
call   1080 <skip_space@plt>
jmp    1a74 <cpl_mod+0x824>
mov    -0x20(%rbp),%rcx
lea    0x590(%rip),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
jmp    1b2f <cpl_mod+0x8df>
mov    -0x10(%rbp),%rsi
mov    -0x3d8(%rbp),%edx
lea    0x557(%rip),%rdi
call   1140 <zraisecpl@plt>
jmp    1dff <cpl_mod+0xbaf>
jmp    1b34 <cpl_mod+0x8e4>
jmp    1b39 <cpl_mod+0x8e9>
jmp    1b3e <cpl_mod+0x8ee>
jmp    1b43 <cpl_mod+0x8f3>
jmp    1b48 <cpl_mod+0x8f8>
jmp    1b4d <cpl_mod+0x8fd>
jmp    1b52 <cpl_mod+0x902>
jmp    1b57 <cpl_mod+0x907>
jmp    1de6 <cpl_mod+0xb96>
lea    -0x250(%rbp),%rsi
lea    -0x30(%rbp),%rdi
call   10d0 <cpl_expr@plt>
mov    %eax,-0x3d4(%rbp)
lea    -0x250(%rbp),%rdi
mov    -0x3d4(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    $0x1,%esi
call   1170 <fwrite@plt>
mov    -0x3e8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x3e8(%rbp)
cmpl   $0x0,-0x3e8(%rbp)
jle    1dcf <cpl_mod+0xb7f>
mov    -0x3e8(%rbp),%eax
sub    $0x1,%eax
cltq
mov    -0x3d0(%rbp,%rax,8),%rax
ff
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x28,%eax
jne    1d88 <cpl_mod+0xb38>
movl   $0x1,-0x400(%rbp)
mov    -0x20(%rbp),%rcx
lea    0x4ac(%rip),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
cmpl   $0x0,-0x400(%rbp)
jle    1d83 <cpl_mod+0xb33>
lea    -0x48(%rbp),%rdi
call   1080 <skip_space@plt>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x28,%eax
jne    1c5a <cpl_mod+0xa0a>
mov    -0x20(%rbp),%rcx
lea    0x463(%rip),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
mov    -0x400(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x400(%rbp)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1bfd <cpl_mod+0x9ad>
mov    -0x48(%rbp),%rax
mov    %rax,-0x410(%rbp)
movl   $0x0,-0x404(%rbp)
mov    -0x410(%rbp),%rax
movsbl (%rax),%edi
call   10e0 <isspace@plt>
mov    %rax,%rcx
xor    %eax,%eax
cmp    $0x0,%rcx
mov    %al,-0x419(%rbp)
jne    1ca9 <cpl_mod+0xa59>
mov    -0x410(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x29,%eax
setne  %al
mov    %al,-0x419(%rbp)
mov    -0x419(%rbp),%al
test   $0x1,%al
jne    1cbc <cpl_mod+0xa6c>
jmp    1ce2 <cpl_mod+0xa92>
mov    -0x410(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x410(%rbp)
mov    -0x404(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x404(%rbp)
jmp    1c6f <cpl_mod+0xa1f>
mov    -0x48(%rbp),%rdi
mov    -0x404(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    $0x1,%esi
call   1170 <fwrite@plt>
mov    -0x20(%rbp),%rcx
lea    0x38e(%rip),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
mov    -0x404(%rbp),%ecx
mov    -0x48(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
lea    -0x48(%rbp),%rdi
call   1080 <skip_space@plt>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x29,%eax
jne    1d7e <cpl_mod+0xb2e>
mov    -0x20(%rbp),%rcx
lea    0x303(%rip),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
mov    -0x400(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x400(%rbp)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
lea    -0x48(%rbp),%rdi
call   1080 <skip_space@plt>
jmp    1d2e <cpl_mod+0xade>
jmp    1bfd <cpl_mod+0x9ad>
jmp    1db6 <cpl_mod+0xb66>
mov    -0x48(%rbp),%rax
mov    %rax,-0x428(%rbp)
mov    -0x48(%rbp),%rdi
call   10a0 <strlen@plt>
mov    -0x428(%rbp),%rdi
mov    %eax,%edx
add    $0x1,%edx
mov    -0x20(%rbp),%rcx
mov    $0x1,%esi
call   1170 <fwrite@plt>
jmp    1dbb <cpl_mod+0xb6b>
mov    -0x3e8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x3e8(%rbp)
jmp    1b9c <cpl_mod+0x94c>
mov    -0x20(%rbp),%rcx
lea    0x2b9(%rip),%rdi
mov    $0x1,%edx
mov    %edx,%esi
call   1170 <fwrite@plt>
jmp    1deb <cpl_mod+0xb9b>
mov    -0x3d8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3d8(%rbp)
jmp    138b <cpl_mod+0x13b>
mov    -0x18(%rbp),%rdi
call   1090 <fclose@plt>
cmpl   $0x0,-0x3dc(%rbp)
jl     1e43 <cpl_mod+0xbf3>
mov    -0x20(%rbp),%rcx
lea    0x208(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
call   1170 <fwrite@plt>
mov    -0x3dc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x3dc(%rbp)
jmp    1e08 <cpl_mod+0xbb8>
mov    -0x20(%rbp),%rdi
call   1090 <fclose@plt>
mov    -0x28(%rbp),%rdi
call   1040 <free@plt>
movq   $0x0,-0x28(%rbp)
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x430,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cpl_mod>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x3d8,%rsp
mov    %rdi,%rbp
lea    0xd85(%rip),%rsi
call   1160 <fopen@plt>
test   %rax,%rax
je     19f6 <cpl_mod+0x796>
mov    %rax,%r12
mov    %rbp,%rdi
call   10a0 <strlen@plt>
lea    0x5(%rax),%edi
call   1130 <malloc@plt>
test   %rax,%rax
je     1a05 <cpl_mod+0x7a5>
mov    %rax,%r14
mov    %rax,%rdi
mov    %rbp,%rsi
call   1060 <strcpy@plt>
mov    %r14,%rdi
mov    $0x2e,%esi
call   10c0 <strrchr@plt>
test   %rax,%rax
je     12c8 <cpl_mod+0x68>
movb   $0x0,(%rax)
lea    0xd3b(%rip),%rsi
mov    %r14,%rdi
call   1170 <strcat@plt>
lea    0xd31(%rip),%rsi
mov    %r14,%rdi
call   1160 <fopen@plt>
test   %rax,%rax
je     1a20 <cpl_mod+0x7c0>
mov    %rax,%rbx
lea    0xd0(%rsp),%r15
mov    %r15,%rdi
mov    $0x100,%esi
mov    %r12,%rdx
call   1100 <fgets@plt>
test   %rax,%rax
je     1a3f <cpl_mod+0x7df>
mov    %rbp,0x28(%rsp)
mov    %r14,0x38(%rsp)
mov    $0x1,%r14d
xor    %eax,%eax
mov    %rax,0x30(%rsp)
lea    0xcf7(%rip),%r13
mov    %r15,%rbp
lea    0x18(%rsp),%r15
movl   $0x0,(%rsp)
mov    %r12,0x8(%rsp)
jmp    1389 <cpl_mod+0x129>
nopw   0x0(%rax,%rax,1)
xor    %edi,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
mov    0x8(%rsp),%r12
mov    0x4(%rsp),%r14d
add    $0x1,%r14d
lea    0xd0(%rsp),%rbp
mov    %rbp,%rdi
mov    $0x100,%esi
mov    %r12,%rdx
call   1100 <fgets@plt>
test   %rax,%rax
je     1a69 <cpl_mod+0x809>
mov    %rbp,%rdi
call   10b0 <remtail@plt>
mov    %rbp,%rdi
call   10a0 <strlen@plt>
test   %eax,%eax
je     1364 <cpl_mod+0x104>
movsbl 0xd0(%rsp),%edi
call   10e0 <isspace@plt>
test   %rax,%rax
mov    %r14d,0x4(%rsp)
je     13f0 <cpl_mod+0x190>
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
movsbl 0xd1(%rsp,%rbp,1),%edi
call   10e0 <isspace@plt>
add    $0x1,%rbp
test   %rax,%rax
jne    13c0 <cpl_mod+0x160>
lea    (%rsp,%rbp,1),%r12
add    $0xd0,%r12
jmp    13fa <cpl_mod+0x19a>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xor    %ebp,%ebp
lea    0xd0(%rsp),%r12
mov    0x30(%rsp),%rcx
test   %ecx,%ecx
jle    1460 <cpl_mod+0x200>
mov    %ebp,%eax
cltd
idiv   %ecx
test   %edx,%edx
jne    1a4b <cpl_mod+0x7eb>
mov    %eax,%r14d
cmp    (%rsp),%eax
jg     1a4b <cpl_mod+0x7eb>
jge    1473 <cpl_mod+0x213>
mov    (%rsp),%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %r13,%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
add    $0xffffffff,%ebp
cmp    %ebp,%r14d
jl     1430 <cpl_mod+0x1d0>
mov    %r14d,(%rsp)
jmp    1473 <cpl_mod+0x213>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmpl   $0x0,(%rsp)
jle    1473 <cpl_mod+0x213>
test   %ebp,%ebp
je     1ad1 <cpl_mod+0x871>
mov    %rbp,0x30(%rsp)
mov    %r12,%rdi
lea    0x2d0(%rsp),%rsi
lea    0x50(%rsp),%rdx
call   1050 <splitstt@plt>
mov    %eax,%r12d
lea    -0x1(%r12),%r14d
cltq
mov    0x48(%rsp,%rax,8),%rax
mov    %rax,0x20(%rsp)
mov    0x50(%rsp),%rdi
cmpb   $0x5c,(%rdi)
jne    1630 <cpl_mod+0x3d0>
lea    0xb7a(%rip),%rsi
call   1110 <strcmp@plt>
test   %rax,%rax
je     17be <cpl_mod+0x55e>
mov    0x50(%rsp),%rdi
lea    0xb65(%rip),%rsi
call   1110 <strcmp@plt>
test   %rax,%rax
je     186d <cpl_mod+0x60d>
mov    0x50(%rsp),%rdi
lea    0xb55(%rip),%rsi
call   1110 <strcmp@plt>
test   %rax,%rax
je     1891 <cpl_mod+0x631>
mov    0x50(%rsp),%rdi
lea    0xb44(%rip),%rsi
call   1110 <strcmp@plt>
test   %rax,%rax
mov    0x4(%rsp),%r14d
je     18d7 <cpl_mod+0x677>
mov    0x50(%rsp),%rdi
lea    0xb31(%rip),%rsi
call   1110 <strcmp@plt>
test   %rax,%rax
je     1932 <cpl_mod+0x6d2>
mov    0x50(%rsp),%rdi
lea    0xb21(%rip),%rsi
call   1110 <strcmp@plt>
test   %rax,%rax
mov    0x8(%rsp),%r12
je     1989 <cpl_mod+0x729>
mov    0x50(%rsp),%rdi
lea    0xb09(%rip),%rsi
call   1110 <strcmp@plt>
test   %rax,%rax
je     1996 <cpl_mod+0x736>
mov    0x50(%rsp),%rdi
lea    0xaf8(%rip),%rsi
call   1110 <strcmp@plt>
test   %rax,%rax
je     19df <cpl_mod+0x77f>
mov    0x50(%rsp),%rdi
lea    0xae7(%rip),%rsi
call   1110 <strcmp@plt>
test   %rax,%rax
jne    1af8 <cpl_mod+0x898>
lea    0xad7(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
mov    0x58(%rsp),%rax
mov    %rax,0x10(%rsp)
mov    (%rax),%al
cmp    $0x28,%al
je     15f1 <cpl_mod+0x391>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl %al,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
mov    0x10(%rsp),%rax
lea    0x1(%rax),%rcx
mov    %rcx,0x10(%rsp)
movzbl 0x1(%rax),%eax
cmp    $0x28,%al
jne    15d0 <cpl_mod+0x370>
xor    %edi,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
mov    0x10(%rsp),%rax
lea    0x1(%rax),%rcx
mov    %rcx,0x10(%rsp)
cmpb   $0x29,0x1(%rax)
lea    0x10(%rsp),%rbp
jne    1830 <cpl_mod+0x5d0>
addl   $0x1,(%rsp)
xor    %edi,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
jmp    1364 <cpl_mod+0x104>
nopl   0x0(%rax,%rax,1)
lea    0x20(%rsp),%rdi
lea    0x1d0(%rsp),%rbp
mov    %rbp,%rsi
call   10d0 <cpl_expr@plt>
mov    %rbp,%rdi
mov    $0x1,%esi
mov    %eax,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
cmp    $0x2,%r12d
jl     1350 <cpl_mod+0xf0>
mov    %r14d,%ecx
jmp    169c <cpl_mod+0x43c>
cs nopw 0x0(%rax,%rax,1)
mov    %rbp,%rdi
call   10a0 <strlen@plt>
lea    0x1(%rax),%edx
mov    %rbp,%rdi
mov    $0x1,%esi
mov    %rbx,%rcx
call   1180 <fwrite@plt>
cmpq   $0x1,0x48(%rsp)
mov    0x40(%rsp),%rcx
jle    1350 <cpl_mod+0xf0>
lea    -0x1(%rcx),%rdx
mov    %edx,%eax
mov    0x50(%rsp,%rax,8),%rbp
mov    %rbp,0x18(%rsp)
cmpb   $0x28,0x0(%rbp)
mov    %rcx,0x48(%rsp)
mov    %rdx,0x40(%rsp)
jne    1670 <cpl_mod+0x410>
mov    $0x10,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
addq   $0x1,0x18(%rsp)
mov    $0x1,%r14d
jmp    16ff <cpl_mod+0x49f>
nopw   0x0(%rax,%rax,1)
mov    $0x10,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
add    $0x1,%r14d
addq   $0x1,0x18(%rsp)
mov    %r12,%r13
test   %r14d,%r14d
jle    168b <cpl_mod+0x42b>
mov    %r13,%r12
mov    %r15,%rdi
call   1080 <skip_space@plt>
mov    0x18(%rsp),%r13
mov    0x0(%r13),%al
cmp    $0x28,%al
je     16e0 <cpl_mod+0x480>
movsbl %al,%edi
call   10e0 <isspace@plt>
xor    %ebp,%ebp
test   %rax,%rax
jne    1750 <cpl_mod+0x4f0>
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
cmpb   $0x29,0x0(%r13,%rbp,1)
je     1750 <cpl_mod+0x4f0>
movsbl 0x1(%r13,%rbp,1),%edi
call   10e0 <isspace@plt>
add    $0x1,%rbp
test   %rax,%rax
je     1730 <cpl_mod+0x4d0>
nopl   0x0(%rax)
mov    0x18(%rsp),%rdi
mov    $0x1,%esi
mov    %ebp,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
xor    %edi,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
mov    %ebp,%eax
add    %rax,0x18(%rsp)
mov    %r15,%rdi
call   1080 <skip_space@plt>
mov    0x18(%rsp),%rax
cmpb   $0x29,(%rax)
jne    16f7 <cpl_mod+0x497>
mov    %r12,%r13
xchg   %ax,%ax
mov    $0x1,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
add    $0xffffffff,%r14d
addq   $0x1,0x18(%rsp)
mov    %r15,%rdi
call   1080 <skip_space@plt>
mov    0x18(%rsp),%rax
cmpb   $0x29,(%rax)
je     1790 <cpl_mod+0x530>
jmp    16fa <cpl_mod+0x49a>
mov    $0xffffffde,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
cmp    $0x2,%r12d
jl     1350 <cpl_mod+0xf0>
mov    %r14d,%ebp
add    $0x1,%rbp
nopl   0x0(%rax)
mov    0x48(%rsp,%rbp,8),%r14
mov    %r14,%rdi
call   10a0 <strlen@plt>
lea    0x1(%rax),%edx
mov    %r14,%rdi
mov    $0x1,%esi
mov    %rbx,%rcx
call   1180 <fwrite@plt>
add    $0xffffffffffffffff,%rbp
cmp    $0x1,%rbp
ja     17e0 <cpl_mod+0x580>
jmp    1350 <cpl_mod+0xf0>
nop
xor    %edi,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
mov    %rbp,%rdi
call   1080 <skip_space@plt>
mov    0x10(%rsp),%rax
cmpb   $0x29,(%rax)
je     1618 <cpl_mod+0x3b8>
mov    %rbp,%rdi
call   1080 <skip_space@plt>
mov    0x10(%rsp),%rax
movsbl (%rax),%edi
call   1030 <is_separator@plt>
test   %eax,%eax
jne    1810 <cpl_mod+0x5b0>
mov    0x10(%rsp),%rax
movsbl (%rax),%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
mov    0x10(%rsp),%rax
lea    0x1(%rax),%rcx
mov    %rcx,0x10(%rsp)
movsbl 0x1(%rax),%edi
jmp    1840 <cpl_mod+0x5e0>
cmp    $0x1,%r12d
jne    18a5 <cpl_mod+0x645>
lea    0x815(%rip),%rdi
mov    $0x1,%esi
mov    $0x3,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
jmp    135a <cpl_mod+0xfa>
cmp    $0x1,%r12d
mov    0x4(%rsp),%r14d
jne    18f3 <cpl_mod+0x693>
lea    0x7f0(%rip),%rdi
jmp    18e4 <cpl_mod+0x684>
lea    0x78b(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
mov    0x58(%rsp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1120 <strtol@plt>
movsbl %al,%edi
jmp    1352 <cpl_mod+0xf2>
cmp    $0x1,%r12d
jne    193f <cpl_mod+0x6df>
lea    0x764(%rip),%rdi
mov    $0x1,%esi
mov    $0x3,%edx
jmp    1977 <cpl_mod+0x717>
lea    0x746(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
mov    0x58(%rsp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1120 <strtol@plt>
movsbl %al,%edi
mov    %rbx,%rsi
call   10f0 <fputc@plt>
mov    0x8(%rsp),%r12
jmp    1364 <cpl_mod+0x104>
addl   $0x1,(%rsp)
lea    0x719(%rip),%rdi
jmp    1946 <cpl_mod+0x6e6>
lea    0x706(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
lea    0x20(%rsp),%rdi
lea    0x1d0(%rsp),%rbp
mov    %rbp,%rsi
call   10d0 <cpl_expr@plt>
mov    %rbp,%rdi
mov    $0x1,%esi
mov    %eax,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
mov    0x8(%rsp),%r12
jmp    1364 <cpl_mod+0x104>
addl   $0x1,(%rsp)
lea    0x6c9(%rip),%rdi
jmp    19a1 <cpl_mod+0x741>
addl   $0x1,(%rsp)
lea    0x6c5(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
lea    0x20(%rsp),%rdi
lea    0x1d0(%rsp),%rbp
mov    %rbp,%rsi
call   10d0 <cpl_expr@plt>
mov    %rbp,%rdi
mov    $0x1,%esi
mov    %eax,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
jmp    1364 <cpl_mod+0x104>
addl   $0x1,(%rsp)
lea    0x685(%rip),%rdi
mov    $0x1,%esi
mov    $0x2,%edx
jmp    19d2 <cpl_mod+0x772>
mov    %rbp,%rdi
call   1070 <zraiseOpenFileError@plt>
xor    %eax,%eax
jmp    1abf <cpl_mod+0x85f>
lea    0x5f6(%rip),%rdi
call   1140 <zraiseOutOfMemory@plt>
mov    %r12,%rdi
call   1090 <fclose@plt>
xor    %eax,%eax
jmp    1abf <cpl_mod+0x85f>
mov    %r14,%rdi
call   1070 <zraiseOpenFileError@plt>
mov    %r12,%rdi
call   1090 <fclose@plt>
mov    %r14,%rdi
call   1040 <free@plt>
xor    %eax,%eax
jmp    1abf <cpl_mod+0x85f>
xor    %ebp,%ebp
mov    %r12,%rdi
call   1090 <fclose@plt>
jmp    1a7d <cpl_mod+0x81d>
mov    0x8(%rsp),%r12
mov    0x28(%rsp),%rsi
mov    0x4(%rsp),%r14d
lea    0x5b1(%rip),%rdi
mov    %r14d,%edx
call   1150 <zraisecpl@plt>
mov    %r12,%rdi
call   1090 <fclose@plt>
mov    (%rsp),%ebp
test   %ebp,%ebp
mov    0x38(%rsp),%r14
js     1aaa <cpl_mod+0x84a>
add    $0x1,%ebp
lea    0x5a1(%rip),%r15
nopw   0x0(%rax,%rax,1)
mov    %r15,%rdi
mov    $0x1,%esi
mov    $0x2,%edx
mov    %rbx,%rcx
call   1180 <fwrite@plt>
add    $0xffffffff,%ebp
jne    1a90 <cpl_mod+0x830>
mov    %rbx,%rdi
call   1090 <fclose@plt>
mov    %r14,%rdi
call   1040 <free@plt>
mov    $0x1,%eax
add    $0x3d8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0x53a(%rip),%rdi
mov    0x28(%rsp),%rsi
mov    0x4(%rsp),%edx
call   1150 <zraisecpl@plt>
mov    0x38(%rsp),%r14
mov    0x8(%rsp),%r12
mov    (%rsp),%ebp
jmp    1a41 <cpl_mod+0x7e1>
lea    0x57b(%rip),%rdi
mov    0x28(%rsp),%rsi
jmp    1a61 <cpl_mod+0x801>

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

LLVM IR (-O2):
@.str = [2 x i8] c"r\00"
@.str.1 = [8 x i8] c"cpl_mod\00"
@.str.2 = [5 x i8] c".zbc\00"
@.str.3 = [3 x i8] c"wb\00"
@.str.4 = [22 x i8] c"Incorrect identation.\00"
@.str.5 = [3 x i8] c"\BE\01\00"
@.str.6 = [5 x i8] c"\\del\00"
@.str.9 = [7 x i8] c"\\break\00"
@.str.10 = [4 x i8] c"\BE\02\00\00"
@.str.11 = [3 x i8] c"\BE\02\00"
@.str.12 = [6 x i8] c"\\cont\00"
@.str.13 = [4 x i8] c"\BE\03\00\00"
@.str.14 = [3 x i8] c"\BE\03\00"
@.str.15 = [5 x i8] c"\\ret\00"
@.str.16 = [4 x i8] c"\BE\04\01\00"
@.str.17 = [3 x i8] c"\BE\04\00"
@.str.18 = [7 x i8] c"\\while\00"
@.str.19 = [3 x i8] c"\B0\04\00"
@.str.20 = [4 x i8] c"\\if\00"
@.str.21 = [3 x i8] c"\B0\01\00"
@.str.22 = [6 x i8] c"\\elif\00"
@.str.23 = [3 x i8] c"\B0\02\00"
@.str.24 = [6 x i8] c"\\else\00"
@.str.25 = [3 x i8] c"\B0\03\00"
@.str.26 = [5 x i8] c"\\def\00"
@.str.27 = [3 x i8] c"\B0\05\00"
@.str.28 = [21 x i8] c"Unknown instruction.\00"
define i32 @cpl_mod(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca [256 x i8]
%6 = alloca [256 x i8]
%7 = alloca [256 x i8]
%8 = alloca [16 x i8*]
%9 = bitcast i8** %2 to i8*
%10 = bitcast i8** %3 to i8*
%11 = bitcast i8** %4 to i8*
%12 = getelementptr inbounds [256 x i8], [256 x i8]* %5, i64 0, i64 0
%13 = getelementptr inbounds [256 x i8], [256 x i8]* %6, i64 0, i64 0
%14 = getelementptr inbounds [256 x i8], [256 x i8]* %7, i64 0, i64 0
%15 = bitcast [16 x i8*]* %8 to i8*
%16 = tail call i32* @fopen(i8* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%17 = icmp eq i32* %16, null
br i1 %17, label %18, label %20
18: ; preds = %1
%19 = tail call i32 @zraiseOpenFileError(i8* %0)
br label %349
20: ; preds = %1
%21 = tail call i32 @strlen(i8* %0)
%22 = add nsw i32 %21, 5
%23 = tail call i64 @malloc(i32 %22)
%24 = inttoptr i64 %23 to i8*
%25 = icmp eq i64 %23, 0
br i1 %25, label %26, label %29
26: ; preds = %20
%27 = tail call i32 @zraiseOutOfMemory(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0))
%28 = tail call i32 @fclose(i32* %16)
br label %349
29: ; preds = %20
%30 = tail call i32 @strcpy(i8* %24, i8* %0)
%31 = tail call i8* @strrchr(i8* %24, i8 signext 46)
%32 = icmp eq i8* %31, null
br i1 %32, label %34, label %33
33: ; preds = %29
store i8 0, i8* %31
br label %34
34: ; preds = %33, %29
%35 = tail call i32 @strcat(i8* %24, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
%36 = tail call i32* @fopen(i8* %24, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0))
%37 = icmp eq i32* %36, null
br i1 %37, label %44, label %38
38: ; preds = %34
%39 = call i32* @fgets(i8* %12, i32 256, i32* %16)
%40 = icmp eq i32* %39, null
br i1 %40, label %328, label %41
41: ; preds = %38
%42 = getelementptr inbounds [16 x i8*], [16 x i8*]* %8, i64 0, i64 0
%43 = getelementptr inbounds [16 x i8*], [16 x i8*]* %8, i64 0, i64 1
br label %48
44: ; preds = %34
%45 = tail call i32 @zraiseOpenFileError(i8* %24)
%46 = tail call i32 @fclose(i32* %16)
%47 = tail call i32 @free(i8* %24)
br label %349
48: ; preds = %41, %322
%49 = phi i32 [ 0, %41 ], [ %324, %322 ]
%50 = phi i32 [ 0, %41 ], [ %323, %322 ]
%51 = phi i32 [ 1, %41 ], [ %325, %322 ]
%52 = call i32 @remtail(i8* %12)
%53 = call i32 @strlen(i8* %12)
%54 = icmp eq i32 %53, 0
br i1 %54, label %322, label %55
55: ; preds = %48
%56 = load i8, i8* %12
%57 = call i64 @isspace(i8 signext %56)
%58 = icmp eq i64 %57, 0
br i1 %58, label %67, label %59
59: ; preds = %55, %59
%60 = phi i32 [ %63, %59 ], [ 0, %55 ]
%61 = phi i8* [ %62, %59 ], [ %12, %55 ]
%62 = getelementptr inbounds i8, i8* %61, i64 1
%63 = add nuw nsw i32 %60, 1
%64 = load i8, i8* %62
%65 = call i64 @isspace(i8 signext %64)
%66 = icmp eq i64 %65, 0
br i1 %66, label %67, label %59
67: ; preds = %59, %55
%68 = phi i8* [ %12, %55 ], [ %62, %59 ]
%69 = phi i32 [ 0, %55 ], [ %63, %59 ]
%70 = icmp sgt i32 %49, 0
br i1 %70, label %71, label %84
71: ; preds = %67
%72 = sdiv i32 %69, %49
%73 = srem i32 %69, %49
%74 = icmp ne i32 %73, 0
%75 = icmp sgt i32 %72, %50
%76 = select i1 %74, i1 true, i1 %75
br i1 %76, label %331, label %77
77: ; preds = %71
%78 = icmp slt i32 %72, %50
br i1 %78, label %79, label %90
79: ; preds = %77, %79
%80 = phi i32 [ %82, %79 ], [ %50, %77 ]
%81 = call i32 @fwrite(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i32 1, i32 2, i32* %36)
%82 = add nsw i32 %80, -1
%83 = icmp slt i32 %72, %82
br i1 %83, label %79, label %90
84: ; preds = %67
%85 = icmp sgt i32 %50, 0
br i1 %85, label %86, label %90
86: ; preds = %84
%87 = icmp eq i32 %69, 0
br i1 %87, label %88, label %90
88: ; preds = %86
%89 = call i32 @zraisecpl(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.4, i64 0, i64 0), i8* %0, i32 %51)
br label %328
90: ; preds = %79, %77, %86, %84
%91 = phi i32 [ %50, %84 ], [ %50, %86 ], [ %50, %77 ], [ %72, %79 ]
%92 = phi i32 [ %49, %84 ], [ %69, %86 ], [ %49, %77 ], [ %49, %79 ]
%93 = call i32 @splitstt(i8* %68, i8* %14, i8** %42)
%94 = add nsw i32 %93, -1
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [16 x i8*], [16 x i8*]* %8, i64 0, i64 %95
%97 = load i8*, i8** %96
store i8* %97, i8** %2
%98 = load i8*, i8** %42
%99 = load i8, i8* %98
%100 = icmp eq i8 %99, 92
br i1 %100, label %101, label %246
101: ; preds = %90
%102 = call i64 @strcmp(i8* %98, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0))
%103 = icmp eq i64 %102, 0
br i1 %103, label %104, label %120
104: ; preds = %101
%105 = call i32 @fputc(i32 -34, i32* %36)
%106 = icmp sgt i32 %93, 1
br i1 %106, label %107, label %118
107: ; preds = %104
%108 = zext i32 %94 to i64
br label %109
109: ; preds = %107, %109
%110 = phi i64 [ %108, %107 ], [ %116, %109 ]
%111 = getelementptr inbounds [16 x i8*], [16 x i8*]* %8, i64 0, i64 %110
%112 = load i8*, i8** %111
%113 = call i32 @strlen(i8* %112)
%114 = add nsw i32 %113, 1
%115 = call i32 @fwrite(i8* %112, i32 1, i32 %114, i32* %36)
%116 = add nsw i64 %110, -1
%117 = icmp ugt i64 %110, 1
br i1 %117, label %109, label %118
118: ; preds = %109, %104
%119 = call i32 @fputc(i32 0, i32* %36)
br label %322
120: ; preds = %101
%121 = load i8*, i8** %42
%122 = call i64 @strcmp(i8* %121, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.9, i64 0, i64 0))
%123 = icmp eq i64 %122, 0
br i1 %123, label %124, label %136
124: ; preds = %120
%125 = icmp eq i32 %93, 1
br i1 %125, label %126, label %128
126: ; preds = %124
%127 = call i32 @fwrite(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i64 0, i64 0), i32 1, i32 3, i32* %36)
br label %322
128: ; preds = %124
%129 = call i32 @fwrite(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0), i32 1, i32 2, i32* %36)
%130 = load i8*, i8** %43
%131 = call i64 @strtol(i8* nocapture %130, i8** null, i32 16)
%132 = trunc i64 %131 to i32
%133 = shl i32 %132, 24
%134 = ashr exact i32 %133, 24
%135 = call i32 @fputc(i32 %134, i32* %36)
br label %322
136: ; preds = %120
%137 = load i8*, i8** %42
%138 = call i64 @strcmp(i8* %137, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0))
%139 = icmp eq i64 %138, 0
br i1 %139, label %140, label %152
140: ; preds = %136
%141 = icmp eq i32 %93, 1
br i1 %141, label %142, label %144
142: ; preds = %140
%143 = call i32 @fwrite(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.13, i64 0, i64 0), i32 1, i32 3, i32* %36)
br label %322
144: ; preds = %140
%145 = call i32 @fwrite(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.14, i64 0, i64 0), i32 1, i32 2, i32* %36)
%146 = load i8*, i8** %43
%147 = call i64 @strtol(i8* nocapture %146, i8** null, i32 16)
%148 = trunc i64 %147 to i32
%149 = shl i32 %148, 24
%150 = ashr exact i32 %149, 24
%151 = call i32 @fputc(i32 %150, i32* %36)
br label %322
152: ; preds = %136
%153 = load i8*, i8** %42
%154 = call i64 @strcmp(i8* %153, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0))
%155 = icmp eq i64 %154, 0
br i1 %155, label %156, label %164
156: ; preds = %152
%157 = icmp eq i32 %93, 1
br i1 %157, label %158, label %160
158: ; preds = %156
%159 = call i32 @fwrite(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i32 1, i32 3, i32* %36)
br label %322
160: ; preds = %156
%161 = call i32 @fwrite(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.17, i64 0, i64 0), i32 1, i32 2, i32* %36)
%162 = call i32 @cpl_expr(i8** %2, i8* %13)
%163 = call i32 @fwrite(i8* %13, i32 1, i32 %162, i32* %36)
br label %322
164: ; preds = %152
%165 = load i8*, i8** %42
%166 = call i64 @strcmp(i8* %165, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i64 0, i64 0))
%167 = icmp eq i64 %166, 0
br i1 %167, label %168, label %173
168: ; preds = %164
%169 = add nsw i32 %91, 1
%170 = call i32 @fwrite(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0), i32 1, i32 2, i32* %36)
%171 = call i32 @cpl_expr(i8** %2, i8* %13)
%172 = call i32 @fwrite(i8* %13, i32 1, i32 %171, i32* %36)
br label %322
173: ; preds = %164
%174 = load i8*, i8** %42
%175 = call i64 @strcmp(i8* %174, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i64 0, i64 0))
%176 = icmp eq i64 %175, 0
br i1 %176, label %177, label %182
177: ; preds = %173
%178 = add nsw i32 %91, 1
%179 = call i32 @fwrite(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.21, i64 0, i64 0), i32 1, i32 2, i32* %36)
%180 = call i32 @cpl_expr(i8** %2, i8* %13)
%181 = call i32 @fwrite(i8* %13, i32 1, i32 %180, i32* %36)
br label %322
182: ; preds = %173
%183 = load i8*, i8** %42
%184 = call i64 @strcmp(i8* %183, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.22, i64 0, i64 0))
%185 = icmp eq i64 %184, 0
br i1 %185, label %186, label %191
186: ; preds = %182
%187 = add nsw i32 %91, 1
%188 = call i32 @fwrite(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.23, i64 0, i64 0), i32 1, i32 2, i32* %36)
%189 = call i32 @cpl_expr(i8** %2, i8* %13)
%190 = call i32 @fwrite(i8* %13, i32 1, i32 %189, i32* %36)
br label %322
191: ; preds = %182
%192 = load i8*, i8** %42
%193 = call i64 @strcmp(i8* %192, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.24, i64 0, i64 0))
%194 = icmp eq i64 %193, 0
br i1 %194, label %195, label %198
195: ; preds = %191
%196 = add nsw i32 %91, 1
%197 = call i32 @fwrite(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.25, i64 0, i64 0), i32 1, i32 2, i32* %36)
br label %322
198: ; preds = %191
%199 = load i8*, i8** %42
%200 = call i64 @strcmp(i8* %199, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.26, i64 0, i64 0))
%201 = icmp eq i64 %200, 0
br i1 %201, label %202, label %331
202: ; preds = %198
%203 = add nsw i32 %91, 1
%204 = call i32 @fwrite(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.27, i64 0, i64 0), i32 1, i32 2, i32* %36)
%205 = load i8*, i8** %43
store i8* %205, i8** %3
%206 = load i8, i8* %205
%207 = icmp eq i8 %206, 40
br i1 %207, label %216, label %208
208: ; preds = %202, %208
%209 = phi i8 [ %214, %208 ], [ %206, %202 ]
%210 = sext i8 %209 to i32
%211 = call i32 @fputc(i32 %210, i32* %36)
%212 = load i8*, i8** %3
%213 = getelementptr inbounds i8, i8* %212, i64 1
store i8* %213, i8** %3
%214 = load i8, i8* %213
%215 = icmp eq i8 %214, 40
br i1 %215, label %216, label %208
216: ; preds = %208, %202
%217 = call i32 @fputc(i32 0, i32* %36)
%218 = load i8*, i8** %3
%219 = getelementptr inbounds i8, i8* %218, i64 1
store i8* %219, i8** %3
%220 = load i8, i8* %219
%221 = icmp eq i8 %220, 41
br i1 %221, label %244, label %222
222: ; preds = %216, %238
%223 = call i32 @skip_space(i8** %3)
%224 = load i8*, i8** %3
%225 = load i8, i8* %224
%226 = call i32 @is_separator(i8 signext %225)
%227 = icmp eq i32 %226, 0
br i1 %227, label %228, label %238
228: ; preds = %222, %228
%229 = load i8*, i8** %3
%230 = load i8, i8* %229
%231 = sext i8 %230 to i32
%232 = call i32 @fputc(i32 %231, i32* %36)
%233 = load i8*, i8** %3
%234 = getelementptr inbounds i8, i8* %233, i64 1
store i8* %234, i8** %3
%235 = load i8, i8* %234
%236 = call i32 @is_separator(i8 signext %235)
%237 = icmp eq i32 %236, 0
br i1 %237, label %228, label %238
238: ; preds = %228, %222
%239 = call i32 @fputc(i32 0, i32* %36)
%240 = call i32 @skip_space(i8** %3)
%241 = load i8*, i8** %3
%242 = load i8, i8* %241
%243 = icmp eq i8 %242, 41
br i1 %243, label %244, label %222
244: ; preds = %238, %216
%245 = call i32 @fputc(i32 0, i32* %36)
br label %322
246: ; preds = %90
%247 = call i32 @cpl_expr(i8** %2, i8* %13)
%248 = call i32 @fwrite(i8* %13, i32 1, i32 %247, i32* %36)
%249 = icmp sgt i32 %93, 1
br i1 %249, label %250, label %320
250: ; preds = %246
%251 = zext i32 %94 to i64
br label %252
252: ; preds = %250, %318
%253 = phi i64 [ %251, %250 ], [ %254, %318 ]
%254 = add nsw i64 %253, -1
%255 = and i64 %254, 4294967295
%256 = getelementptr inbounds [16 x i8*], [16 x i8*]* %8, i64 0, i64 %255
%257 = load i8*, i8** %256
store i8* %257, i8** %4
%258 = load i8, i8* %257
%259 = icmp eq i8 %258, 40
br i1 %259, label %260, label %314
260: ; preds = %252
%261 = call i32 @fputc(i32 16, i32* %36)
%262 = load i8*, i8** %4
%263 = getelementptr inbounds i8, i8* %262, i64 1
store i8* %263, i8** %4
br label %264
264: ; preds = %260, %278
%265 = phi i32 [ 1, %260 ], [ %279, %278 ]
%266 = call i32 @skip_space(i8** %4)
%267 = load i8*, i8** %4
%268 = load i8, i8* %267
%269 = icmp eq i8 %268, 40
br i1 %269, label %273, label %270
270: ; preds = %264
%271 = call i64 @isspace(i8 signext %268)
%272 = icmp eq i64 %271, 0
br i1 %272, label %281, label %292
273: ; preds = %264
%274 = call i32 @fputc(i32 16, i32* %36)
%275 = add nuw nsw i32 %265, 1
%276 = load i8*, i8** %4
%277 = getelementptr inbounds i8, i8* %276, i64 1
store i8* %277, i8** %4
br label %278
278: ; preds = %304, %292, %273
%279 = phi i32 [ %275, %273 ], [ %265, %292 ], [ %307, %304 ]
%280 = icmp sgt i32 %279, 0
br i1 %280, label %264, label %318
281: ; preds = %270, %286
%282 = phi i8* [ %287, %286 ], [ %267, %270 ]
%283 = phi i32 [ %288, %286 ], [ 0, %270 ]
%284 = load i8, i8* %282
%285 = icmp eq i8 %284, 41
br i1 %285, label %292, label %286
286: ; preds = %281
%287 = getelementptr inbounds i8, i8* %282, i64 1
%288 = add nuw nsw i32 %283, 1
%289 = load i8, i8* %287
%290 = call i64 @isspace(i8 signext %289)
%291 = icmp eq i64 %290, 0
br i1 %291, label %281, label %292
292: ; preds = %281, %286, %270
%293 = phi i32 [ 0, %270 ], [ %288, %286 ], [ %283, %281 ]
%294 = load i8*, i8** %4
%295 = call i32 @fwrite(i8* %294, i32 1, i32 %293, i32* %36)
%296 = call i32 @fputc(i32 0, i32* %36)
%297 = load i8*, i8** %4
%298 = zext i32 %293 to i64
%299 = getelementptr inbounds i8, i8* %297, i64 %298
store i8* %299, i8** %4
%300 = call i32 @skip_space(i8** %4)
%301 = load i8*, i8** %4
%302 = load i8, i8* %301
%303 = icmp eq i8 %302, 41
br i1 %303, label %304, label %278
304: ; preds = %292, %304
%305 = phi i32 [ %307, %304 ], [ %265, %292 ]
%306 = call i32 @fputc(i32 1, i32* %36)
%307 = add nsw i32 %305, -1
%308 = load i8*, i8** %4
%309 = getelementptr inbounds i8, i8* %308, i64 1
store i8* %309, i8** %4
%310 = call i32 @skip_space(i8** %4)
%311 = load i8*, i8** %4
%312 = load i8, i8* %311
%313 = icmp eq i8 %312, 41
br i1 %313, label %304, label %278
314: ; preds = %252
%315 = call i32 @strlen(i8* %257)
%316 = add nsw i32 %315, 1
%317 = call i32 @fwrite(i8* %257, i32 1, i32 %316, i32* %36)
br label %318
318: ; preds = %278, %314
%319 = icmp sgt i64 %253, 1
br i1 %319, label %252, label %320
320: ; preds = %318, %246
%321 = call i32 @fputc(i32 0, i32* %36)
br label %322
322: ; preds = %320, %128, %126, %160, %158, %177, %195, %244, %186, %168, %142, %144, %118, %48
%323 = phi i32 [ %50, %48 ], [ %91, %118 ], [ %91, %126 ], [ %91, %128 ], [ %91, %142 ], [ %91, %144 ], [ %91, %158 ], [ %91, %160 ], [ %169, %168 ], [ %178, %177 ], [ %187, %186 ], [ %196, %195 ], [ %203, %244 ], [ %91, %320 ]
%324 = phi i32 [ %49, %48 ], [ %92, %118 ], [ %92, %126 ], [ %92, %128 ], [ %92, %142 ], [ %92, %144 ], [ %92, %158 ], [ %92, %160 ], [ %92, %168 ], [ %92, %177 ], [ %92, %186 ], [ %92, %195 ], [ %92, %244 ], [ %92, %320 ]
%325 = add i32 %51, 1
%326 = call i32* @fgets(i8* %12, i32 256, i32* %16)
%327 = icmp eq i32* %326, null
br i1 %327, label %335, label %48
328: ; preds = %88, %38
%329 = phi i32 [ 0, %38 ], [ %50, %88 ]
%330 = call i32 @fclose(i32* %16)
br label %339
331: ; preds = %198, %71
%332 = phi i8* [ getelementptr inbounds ([22 x i8], [22 x i8]* @.str.4, i64 0, i64 0), %71 ], [ getelementptr inbounds ([21 x i8], [21 x i8]* @.str.28, i64 0, i64 0), %198 ]
%333 = phi i32 [ %50, %71 ], [ %91, %198 ]
%334 = call i32 @zraisecpl(i8* %332, i8* %0, i32 %51)
br label %335
335: ; preds = %322, %331
%336 = phi i32 [ %333, %331 ], [ %323, %322 ]
%337 = call i32 @fclose(i32* %16)
%338 = icmp sgt i32 %336, -1
br i1 %338, label %339, label %346
339: ; preds = %328, %335
%340 = phi i32 [ %336, %335 ], [ %329, %328 ]
br label %341
341: ; preds = %339, %341
%342 = phi i32 [ %344, %341 ], [ %340, %339 ]
%343 = call i32 @fwrite(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i32 1, i32 2, i32* %36)
%344 = add nsw i32 %342, -1
%345 = icmp eq i32 %342, 0
br i1 %345, label %346, label %341
346: ; preds = %341, %335
%347 = call i32 @fclose(i32* %36)
%348 = call i32 @free(i8* %24)
br label %349
349: ; preds = %346, %44, %26, %18
%350 = phi i32 [ 0, %18 ], [ 0, %26 ], [ 0, %44 ], [ 1, %346 ]
ret i32 %350
}