#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 */
int /*<<< orphan*/ end();
int /*<<< orphan*/ fclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int getcommand();
char *getdata();
int /*<<< orphan*/ getthing(int /*<<< orphan*/ *);
int /*<<< orphan*/ gotoline();
int /*<<< orphan*/ istag();
int /*<<< orphan*/ nextline();
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ readcfg(int /*<<< orphan*/ *);
int /*<<< orphan*/ stderr;
int /*<<< orphan*/ strcmp(char *, char *);
char *thing();
char *thingattribute(char *);
int main(int argc, char *argv[]) {
  FILE *src, *cfg;
  int finished = (1 == 0);
  if (argc < 3) {
    printf("xmlparse parse.cfg filename [arg0 ... ]\n\n");
    printf("parse.cfg format\n---------------\n\n");
    printf("  :label\n");
    printf("  searchfortag tag\n");
    printf("  printuntiltag tag\n");
    printf("  printattribute attributename\n");
    printf("  print string\n");
    printf("  searchforstring string\n");
    printf("  printuntilstring string\n");
    printf("  loopuntileof label\n");
    printf("  end\n\n");
    printf("  arg0-arg9 can be referred to in print command as $0-$9\n");
    printf("  also, $. => space, $$ => $ and $n => \\n\n\n");
    return 1;
  }
  src = fopen(argv[2], "r");
  cfg = fopen(argv[1], "r");
  if (src == NULL || cfg == NULL) {
    fprintf(stderr, "xmlparse: unable to open file(s)\n");
    return 1;
  }
  readcfg(cfg);
  do {
    switch (getcommand()) {
    case 1:
    case 0:
      nextline();
      break;
    case 2:
      do {
        getthing(src);
      } while ((!istag() || strcmp(thing(), getdata()) != 0) && !end());
      nextline();
      break;
    case 3:
      getthing(src);
      if (!end() && !istag())
        printf("%s", thing());
      while (!end() && !(istag() && strcmp(thing(), getdata()) == 0)) {
        getthing(src);
        if (!istag())
          printf(" %s", thing());
      }
      nextline();
      break;
    case 4:
      printf("%s", thingattribute(getdata()));
      nextline();
      break;
    case 5: {
      char *b;
      for (b = getdata(); *b != '\0'; b++) {
        if (*b == '$') {
          if (*(b + 1) != '\0')
            b++;
          switch (*b) {
          case '$':
            printf("$");
            break;
          case '0':
            if (argc >= 3)
              printf(argv[3]);
            break;
          case '1':
            if (argc >= 4)
              printf(argv[4]);
            break;
          case '2':
            if (argc >= 5)
              printf(argv[5]);
            break;
          case '3':
            if (argc >= 6)
              printf(argv[6]);
            break;
          case '4':
            if (argc >= 7)
              printf(argv[7]);
            break;
          case '5':
            if (argc >= 8)
              printf(argv[8]);
            break;
          case '6':
            if (argc >= 9)
              printf(argv[9]);
            break;
          case '7':
            if (argc >= 10)
              printf(argv[10]);
            break;
          case '8':
            if (argc >= 11)
              printf(argv[11]);
            break;
          case '9':
            if (argc >= 12)
              printf(argv[12]);
            break;
          case 'n':
            printf("\n");
            break;
          case '.':
            printf(" ");
            break;
          }
        } else {
          printf("%c", *b);
        }
      }
    }
      nextline();
      break;
    case 6:
      do {
        getthing(src);
      } while (strcmp(thing(), getdata()) == 0 && !end());
      nextline();
      break;
    case 7:
      getthing(src);
      while (!end() && strcmp(thing(), getdata()) != 0) {
        printf(" %s", thing());
        getthing(src);
      }
      nextline();
      break;
    case 8:
      if (!end())
        gotoline();
      else
        nextline();
      break;
    case 9:
      finished = (1 == 1);
      break;
    }
  } while (!end() && !finished);
  fclose(src);
  fclose(cfg);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x24(%rbp)
cmpl   $0x3,-0x8(%rbp)
jge    12dc <main+0xec>
lea    0xf33(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf4f(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf64(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf60(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf66(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf6d(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf7f(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf81(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf8d(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf9a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xfa2(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xf9c(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xfc8(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    189b <main+0x6ab>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
lea    0xfd2(%rip),%rsi
call   1100 <fopen@plt>
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xfba(%rip),%rsi
call   1100 <fopen@plt>
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1322 <main+0x132>
cmpq   $0x0,-0x20(%rbp)
jne    1343 <main+0x153>
mov    0x2cb7(%rip),%rax
mov    (%rax),%edi
lea    0xf8d(%rip),%rsi
call   10b0 <fprintf@plt>
movl   $0x1,-0x4(%rbp)
jmp    189b <main+0x6ab>
mov    -0x20(%rbp),%rdi
call   10c0 <readcfg@plt>
xor    %eax,%eax
call   10e0 <getcommand@plt>
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x9,%eax
ja     1846 <main+0x656>
mov    -0x38(%rbp),%rax
lea    0xc93(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    $0x0,%al
call   10a0 <nextline@plt>
jmp    1846 <main+0x656>
jmp    1387 <main+0x197>
mov    -0x18(%rbp),%rdi
call   1080 <getthing@plt>
mov    $0x0,%al
call   1110 <istag@plt>
cmp    $0x0,%eax
je     13ce <main+0x1de>
mov    $0x0,%al
call   1030 <thing@plt>
mov    %rax,-0x48(%rbp)
mov    $0x0,%al
call   10d0 <getdata@plt>
mov    -0x48(%rbp),%rdi
mov    %rax,%rsi
call   1090 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x39(%rbp)
je     13e0 <main+0x1f0>
mov    $0x0,%al
call   1070 <end@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    1387 <main+0x197>
mov    $0x0,%al
call   10a0 <nextline@plt>
jmp    1846 <main+0x656>
mov    -0x18(%rbp),%rdi
call   1080 <getthing@plt>
mov    $0x0,%al
call   1070 <end@plt>
cmp    $0x0,%eax
jne    1438 <main+0x248>
mov    $0x0,%al
call   1110 <istag@plt>
cmp    $0x0,%eax
jne    1438 <main+0x248>
mov    $0x0,%al
call   1030 <thing@plt>
mov    %rax,%rsi
lea    0xeb1(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    143d <main+0x24d>
mov    $0x0,%al
call   1070 <end@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x49(%rbp)
jne    149a <main+0x2aa>
mov    $0x0,%al
call   1110 <istag@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x4a(%rbp)
je     1492 <main+0x2a2>
mov    $0x0,%al
call   1030 <thing@plt>
mov    %rax,-0x58(%rbp)
mov    $0x0,%al
call   10d0 <getdata@plt>
mov    -0x58(%rbp),%rdi
mov    %rax,%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
sete   %al
mov    %al,-0x4a(%rbp)
mov    -0x4a(%rbp),%al
xor    $0xff,%al
mov    %al,-0x49(%rbp)
mov    -0x49(%rbp),%al
test   $0x1,%al
jne    14aa <main+0x2ba>
jmp    14e0 <main+0x2f0>
mov    -0x18(%rbp),%rdi
call   1080 <getthing@plt>
mov    $0x0,%al
call   1110 <istag@plt>
cmp    $0x0,%eax
jne    14db <main+0x2eb>
mov    $0x0,%al
call   1030 <thing@plt>
mov    %rax,%rsi
lea    0xe0d(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    143d <main+0x24d>
mov    $0x0,%al
call   10a0 <nextline@plt>
jmp    1846 <main+0x656>
mov    $0x0,%al
call   10d0 <getdata@plt>
mov    %rax,%rdi
call   1060 <thingattribute@plt>
mov    %rax,%rsi
lea    0xddd(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    $0x0,%al
call   10a0 <nextline@plt>
jmp    1846 <main+0x656>
mov    $0x0,%al
call   10d0 <getdata@plt>
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     171d <main+0x52d>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
jne    16f2 <main+0x502>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1560 <main+0x370>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
add    $0xffffffdc,%eax
mov    %eax,%ecx
mov    %rcx,-0x60(%rbp)
sub    $0x4a,%eax
ja     16ed <main+0x4fd>
mov    -0x60(%rbp),%rax
lea    0xaa4(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xd51(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
cmpl   $0x3,-0x8(%rbp)
jl     15b9 <main+0x3c9>
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
cmpl   $0x4,-0x8(%rbp)
jl     15d7 <main+0x3e7>
mov    -0x10(%rbp),%rax
mov    0x20(%rax),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
cmpl   $0x5,-0x8(%rbp)
jl     15f5 <main+0x405>
mov    -0x10(%rbp),%rax
mov    0x28(%rax),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
cmpl   $0x6,-0x8(%rbp)
jl     1613 <main+0x423>
mov    -0x10(%rbp),%rax
mov    0x30(%rax),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
cmpl   $0x7,-0x8(%rbp)
jl     1631 <main+0x441>
mov    -0x10(%rbp),%rax
mov    0x38(%rax),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
cmpl   $0x8,-0x8(%rbp)
jl     164f <main+0x45f>
mov    -0x10(%rbp),%rax
mov    0x40(%rax),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
cmpl   $0x9,-0x8(%rbp)
jl     166d <main+0x47d>
mov    -0x10(%rbp),%rax
mov    0x48(%rax),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
cmpl   $0xa,-0x8(%rbp)
jl     168b <main+0x49b>
mov    -0x10(%rbp),%rax
mov    0x50(%rax),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
cmpl   $0xb,-0x8(%rbp)
jl     16a9 <main+0x4b9>
mov    -0x10(%rbp),%rax
mov    0x58(%rax),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
cmpl   $0xc,-0x8(%rbp)
jl     16c7 <main+0x4d7>
mov    -0x10(%rbp),%rax
mov    0x60(%rax),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
lea    0xacc(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    16ed <main+0x4fd>
lea    0xc01(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    1707 <main+0x517>
mov    -0x30(%rbp),%rax
movsbl (%rax),%esi
lea    0xbe9(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    170c <main+0x51c>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1523 <main+0x333>
mov    $0x0,%al
call   10a0 <nextline@plt>
jmp    1846 <main+0x656>
jmp    172e <main+0x53e>
mov    -0x18(%rbp),%rdi
call   1080 <getthing@plt>
mov    $0x0,%al
call   1030 <thing@plt>
mov    %rax,-0x70(%rbp)
mov    $0x0,%al
call   10d0 <getdata@plt>
mov    -0x70(%rbp),%rdi
mov    %rax,%rsi
call   1090 <strcmp@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x61(%rbp)
jne    1777 <main+0x587>
mov    $0x0,%al
call   1070 <end@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
mov    %al,-0x61(%rbp)
mov    -0x61(%rbp),%al
test   $0x1,%al
jne    172e <main+0x53e>
mov    $0x0,%al
call   10a0 <nextline@plt>
jmp    1846 <main+0x656>
mov    -0x18(%rbp),%rdi
call   1080 <getthing@plt>
mov    $0x0,%al
call   1070 <end@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x71(%rbp)
jne    17d5 <main+0x5e5>
mov    $0x0,%al
call   1030 <thing@plt>
mov    %rax,-0x80(%rbp)
mov    $0x0,%al
call   10d0 <getdata@plt>
mov    -0x80(%rbp),%rdi
mov    %rax,%rsi
call   1090 <strcmp@plt>
cmp    $0x0,%eax
setne  %al
mov    %al,-0x71(%rbp)
mov    -0x71(%rbp),%al
test   $0x1,%al
jne    17e5 <main+0x5f5>
jmp    180b <main+0x61b>
mov    $0x0,%al
call   1030 <thing@plt>
mov    %rax,%rsi
lea    0xaeb(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x18(%rbp),%rdi
call   1080 <getthing@plt>
jmp    1797 <main+0x5a7>
mov    $0x0,%al
call   10a0 <nextline@plt>
jmp    1846 <main+0x656>
mov    $0x0,%al
call   1070 <end@plt>
cmp    $0x0,%eax
jne    1833 <main+0x643>
mov    $0x0,%al
call   10f0 <gotoline@plt>
jmp    183a <main+0x64a>
mov    $0x0,%al
call   10a0 <nextline@plt>
jmp    1846 <main+0x656>
movl   $0x1,-0x24(%rbp)
jmp    184b <main+0x65b>
mov    $0x0,%al
call   1070 <end@plt>
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x81(%rbp)
jne    1874 <main+0x684>
cmpl   $0x0,-0x24(%rbp)
setne  %al
xor    $0xff,%al
mov    %al,-0x81(%rbp)
mov    -0x81(%rbp),%al
test   $0x1,%al
jne    134c <main+0x15c>
mov    -0x18(%rbp),%rdi
call   1040 <fclose@plt>
mov    -0x20(%rbp),%rdi
call   1040 <fclose@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
cmp    $0x2,%edi
jg     12ca <main+0xba>
lea    0xf51(%rip),%rdi
call   1040 <puts@plt>
lea    0xf6e(%rip),%rdi
call   1040 <puts@plt>
lea    0xf84(%rip),%rdi
call   1040 <puts@plt>
lea    0xf81(%rip),%rdi
call   1040 <puts@plt>
lea    0xf88(%rip),%rdi
call   1040 <puts@plt>
lea    0xf90(%rip),%rdi
call   1040 <puts@plt>
lea    0xfa3(%rip),%rdi
call   1040 <puts@plt>
lea    0xfa6(%rip),%rdi
call   1040 <puts@plt>
lea    0xfb3(%rip),%rdi
call   1040 <puts@plt>
lea    0xfc1(%rip),%rdi
call   1040 <puts@plt>
lea    0xfca(%rip),%rdi
call   1040 <puts@plt>
lea    0xfc5(%rip),%rdi
call   1040 <puts@plt>
lea    0xff2(%rip),%rdi
call   1040 <puts@plt>
mov    $0x1,%eax
jmp    1661 <main+0x451>
mov    %rsi,%r14
mov    %edi,%r13d
mov    0x10(%rsi),%rdi
lea    0xe79(%rip),%r15
mov    %r15,%rsi
call   1120 <fopen@plt>
mov    %rax,%rbx
mov    0x8(%r14),%rdi
mov    %r15,%rsi
call   1120 <fopen@plt>
test   %rbx,%rbx
je     162b <main+0x41b>
test   %rax,%rax
je     162b <main+0x41b>
mov    %rax,(%rsp)
mov    %rax,%rdi
call   10e0 <readcfg@plt>
lea    0xce9(%rip),%r12
lea    0xd0a(%rip),%r15
jmp    1356 <main+0x146>
xor    %eax,%eax
call   10f0 <getdata@plt>
mov    %rax,%rdi
call   1080 <thingattribute@plt>
lea    0xe43(%rip),%rdi
mov    %rax,%rsi
xor    %eax,%eax
call   1070 <printf@plt>
xor    %eax,%eax
call   10c0 <nextline@plt>
xor    %eax,%eax
call   1090 <end@plt>
test   %eax,%eax
jne    164e <main+0x43e>
xor    %eax,%eax
call   1100 <getcommand@plt>
cmp    $0x9,%eax
ja     1347 <main+0x137>
mov    %eax,%eax
movslq (%r12,%rax,4),%rax
add    %r12,%rax
jmp    *%rax
mov    %rbx,%rdi
call   10a0 <getthing@plt>
xor    %eax,%eax
call   1090 <end@plt>
test   %eax,%eax
jne    15ca <main+0x3ba>
xor    %eax,%eax
call   1130 <istag@plt>
test   %eax,%eax
jne    15ca <main+0x3ba>
xor    %eax,%eax
call   1050 <thing@plt>
lea    0xdd8(%rip),%rdi
jmp    15c0 <main+0x3b0>
cs nopw 0x0(%rax,%rax,1)
xor    %eax,%eax
call   1090 <end@plt>
test   %eax,%eax
jne    1340 <main+0x130>
mov    %rbx,%rdi
call   10a0 <getthing@plt>
xor    %eax,%eax
call   1130 <istag@plt>
test   %eax,%eax
je     13b0 <main+0x1a0>
xor    %eax,%eax
call   1050 <thing@plt>
mov    %rax,%rbp
xor    %eax,%eax
call   10f0 <getdata@plt>
mov    %rbp,%rdi
mov    %rax,%rsi
call   10b0 <strcmp@plt>
test   %eax,%eax
jne    13b0 <main+0x1a0>
jmp    1340 <main+0x130>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rbx,%rdi
call   10a0 <getthing@plt>
xor    %eax,%eax
call   1050 <thing@plt>
mov    %rax,%rbp
xor    %eax,%eax
call   10f0 <getdata@plt>
mov    %rbp,%rdi
mov    %rax,%rsi
call   10b0 <strcmp@plt>
test   %eax,%eax
jne    1340 <main+0x130>
xor    %eax,%eax
call   1090 <end@plt>
test   %eax,%eax
je     1400 <main+0x1f0>
jmp    1340 <main+0x130>
nopl   0x0(%rax)
xor    %eax,%eax
call   1050 <thing@plt>
lea    0xd2a(%rip),%rdi
mov    %rax,%rsi
xor    %eax,%eax
call   1070 <printf@plt>
mov    %rbx,%rdi
call   10a0 <getthing@plt>
xor    %eax,%eax
call   1090 <end@plt>
test   %eax,%eax
jne    1340 <main+0x130>
xor    %eax,%eax
call   1050 <thing@plt>
mov    %rax,%rbp
xor    %eax,%eax
call   10f0 <getdata@plt>
mov    %rbp,%rdi
mov    %rax,%rsi
call   10b0 <strcmp@plt>
test   %eax,%eax
jne    1440 <main+0x230>
jmp    1340 <main+0x130>
mov    %r12,%rbp
xor    %eax,%eax
call   10f0 <getdata@plt>
mov    %rax,%r12
jmp    14c2 <main+0x2b2>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
test   %dil,%dil
je     15b1 <main+0x3a1>
call   1030 <putchar@plt>
add    $0x1,%r12
movsbl (%r12),%edi
cmp    $0x24,%edi
jne    14b0 <main+0x2a0>
cmpb   $0x0,0x1(%r12)
je     14d8 <main+0x2c8>
add    $0x1,%r12
movsbl (%r12),%eax
add    $0xffffffdc,%eax
cmp    $0x4a,%eax
ja     14be <main+0x2ae>
movslq (%r15,%rax,4),%rax
add    %r15,%rax
jmp    *%rax
mov    $0x24,%edi
jmp    14b9 <main+0x2a9>
mov    $0x20,%edi
jmp    14b9 <main+0x2a9>
mov    0x18(%r14),%rdi
jmp    157c <main+0x36c>
cmp    $0x4,%r13d
jb     14be <main+0x2ae>
mov    0x20(%r14),%rdi
jmp    157c <main+0x36c>
cmp    $0x5,%r13d
jb     14be <main+0x2ae>
mov    0x28(%r14),%rdi
jmp    157c <main+0x36c>
cmp    $0x6,%r13d
jb     14be <main+0x2ae>
mov    0x30(%r14),%rdi
jmp    157c <main+0x36c>
cmp    $0x7,%r13d
jb     14be <main+0x2ae>
mov    0x38(%r14),%rdi
jmp    157c <main+0x36c>
cmp    $0x8,%r13d
jb     14be <main+0x2ae>
mov    0x40(%r14),%rdi
jmp    157c <main+0x36c>
cmp    $0x9,%r13d
jb     14be <main+0x2ae>
mov    0x48(%r14),%rdi
jmp    157c <main+0x36c>
cmp    $0xa,%r13d
jb     14be <main+0x2ae>
mov    0x50(%r14),%rdi
jmp    157c <main+0x36c>
cmp    $0xb,%r13d
jb     14be <main+0x2ae>
mov    0x58(%r14),%rdi
jmp    157c <main+0x36c>
cmp    $0xc,%r13d
jb     14be <main+0x2ae>
mov    0x60(%r14),%rdi
xor    %eax,%eax
call   1070 <printf@plt>
add    $0x1,%r12
jmp    14c2 <main+0x2b2>
mov    $0xa,%edi
jmp    14b9 <main+0x2a9>
xor    %eax,%eax
call   1090 <end@plt>
test   %eax,%eax
jne    1340 <main+0x130>
xor    %eax,%eax
call   1110 <gotoline@plt>
jmp    1347 <main+0x137>
xor    %eax,%eax
call   10c0 <nextline@plt>
mov    %rbp,%r12
jmp    1347 <main+0x137>
mov    %rax,%rsi
xor    %eax,%eax
call   1070 <printf@plt>
xor    %eax,%eax
call   1090 <end@plt>
test   %eax,%eax
jne    1340 <main+0x130>
xor    %eax,%eax
call   1130 <istag@plt>
test   %eax,%eax
je     1608 <main+0x3f8>
xor    %eax,%eax
call   1050 <thing@plt>
mov    %rax,%rbp
xor    %eax,%eax
call   10f0 <getdata@plt>
mov    %rbp,%rdi
mov    %rax,%rsi
call   10b0 <strcmp@plt>
test   %eax,%eax
je     1340 <main+0x130>
mov    %rbx,%rdi
call   10a0 <getthing@plt>
xor    %eax,%eax
call   1130 <istag@plt>
test   %eax,%eax
jne    15ca <main+0x3ba>
xor    %eax,%eax
call   1050 <thing@plt>
lea    0xb4f(%rip),%rdi
jmp    15c0 <main+0x3b0>
mov    0x29ae(%rip),%rax
mov    (%rax),%edi
lea    0xb1b(%rip),%rsi
call   10d0 <fprintf@plt>
mov    $0x1,%eax
jmp    1661 <main+0x451>
xor    %eax,%eax
call   1090 <end@plt>
mov    %rbx,%rdi
call   1060 <fclose@plt>
mov    (%rsp),%rdi
call   1060 <fclose@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [42 x i8] c"xmlparse parse.cfg filename [arg0 ... ]\0A\0A\00"
@.str.1 = [35 x i8] c"parse.cfg format\0A---------------\0A\0A\00"
@.str.2 = [10 x i8] c" :label\0A\00"
@.str.3 = [20 x i8] c" searchfortag tag\0A\00"
@.str.4 = [21 x i8] c" printuntiltag tag\0A\00"
@.str.5 = [32 x i8] c" printattribute attributename\0A\00"
@.str.6 = [16 x i8] c" print string\0A\00"
@.str.7 = [26 x i8] c" searchforstring string\0A\00"
@.str.8 = [27 x i8] c" printuntilstring string\0A\00"
@.str.9 = [22 x i8] c" loopuntileof label\0A\00"
@.str.10 = [8 x i8] c" end\0A\0A\00"
@.str.11 = [58 x i8] c" arg0-arg9 can be referred to in print command as $0-$9\0A\00"
@.str.12 = [44 x i8] c" also, $. => space, $$ => $ and $n => \\n\0A\0A\00"
@.str.13 = [2 x i8] c"r\00"
@stderr = global i32 0
@.str.14 = [34 x i8] c"xmlparse: unable to open file(s)\0A\00"
@.str.15 = [3 x i8] c"%s\00"
@.str.16 = [4 x i8] c" %s\00"
@.str.17 = [2 x i8] c"$\00"
@.str.18 = [2 x i8] c"\0A\00"
@.str.19 = [2 x i8] c" \00"
@.str.20 = [3 x i8] c"%c\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i32*
%7 = alloca i32*
%8 = alloca i32
%9 = alloca i8*
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store i32 0, i32* %8
%10 = load i32, i32* %4
%11 = icmp slt i32 %10, 3
br i1 %11, label %12, label %26
12: ; preds = %2
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str, i64 0, i64 0))
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0))
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.2, i64 0, i64 0))
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.3, i64 0, i64 0))
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.4, i64 0, i64 0))
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.5, i64 0, i64 0))
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.6, i64 0, i64 0))
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.7, i64 0, i64 0))
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.8, i64 0, i64 0))
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.9, i64 0, i64 0))
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i64 0, i64 0))
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.11, i64 0, i64 0))
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.12, i64 0, i64 0))
store i32 1, i32* %3
br label %308
26: ; preds = %2
%27 = load i8**, i8*** %5
%28 = getelementptr inbounds i8*, i8** %27, i64 2
%29 = load i8*, i8** %28
%30 = call i32* @fopen(i8* %29, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.13, i64 0, i64 0))
store i32* %30, i32** %6
%31 = load i8**, i8*** %5
%32 = getelementptr inbounds i8*, i8** %31, i64 1
%33 = load i8*, i8** %32
%34 = call i32* @fopen(i8* %33, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.13, i64 0, i64 0))
store i32* %34, i32** %7
%35 = load i32*, i32** %6
%36 = icmp eq i32* %35, null
br i1 %36, label %40, label %37
37: ; preds = %26
%38 = load i32*, i32** %7
%39 = icmp eq i32* %38, null
br i1 %39, label %40, label %43
40: ; preds = %37, %26
%41 = load i32, i32* @stderr
%42 = call i32 @fprintf(i32 %41, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.14, i64 0, i64 0))
store i32 1, i32* %3
br label %308
43: ; preds = %37
%44 = load i32*, i32** %7
%45 = call i32 @readcfg(i32* %44)
br label %46
46: ; preds = %301, %43
%47 = call i32 (...) @getcommand()
switch i32 %47, label %293 [
i32 1, label %48
i32 0, label %48
i32 2, label %50
i32 3, label %70
i32 4, label %109
i32 5, label %114
i32 6, label %247
i32 7, label %264
i32 8, label %284
i32 9, label %292
]
48: ; preds = %46, %46
%49 = call i32 (...) @nextline()
br label %293
50: ; preds = %46
br label %51
51: ; preds = %66, %50
%52 = load i32*, i32** %6
%53 = call i32 @getthing(i32* %52)
br label %54
54: ; preds = %51
%55 = call i32 (...) @istag()
%56 = icmp ne i32 %55, 0
br i1 %56, label %57, label %62
57: ; preds = %54
%58 = call i8* (...) @thing()
%59 = call i8* (...) @getdata()
%60 = call i32 @strcmp(i8* %58, i8* %59)
%61 = icmp ne i32 %60, 0
br i1 %61, label %62, label %66
62: ; preds = %57, %54
%63 = call i32 (...) @end()
%64 = icmp ne i32 %63, 0
%65 = xor i1 %64, true
br label %66
66: ; preds = %62, %57
%67 = phi i1 [ false, %57 ], [ %65, %62 ]
br i1 %67, label %51, label %68
68: ; preds = %66
%69 = call i32 (...) @nextline()
br label %293
70: ; preds = %46
%71 = load i32*, i32** %6
%72 = call i32 @getthing(i32* %71)
%73 = call i32 (...) @end()
%74 = icmp ne i32 %73, 0
br i1 %74, label %81, label %75
75: ; preds = %70
%76 = call i32 (...) @istag()
%77 = icmp ne i32 %76, 0
br i1 %77, label %81, label %78
78: ; preds = %75
%79 = call i8* (...) @thing()
%80 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0), i8* %79)
br label %81
81: ; preds = %78, %75, %70
br label %82
82: ; preds = %106, %81
%83 = call i32 (...) @end()
%84 = icmp ne i32 %83, 0
br i1 %84, label %96, label %85
85: ; preds = %82
%86 = call i32 (...) @istag()
%87 = icmp ne i32 %86, 0
br i1 %87, label %88, label %93
88: ; preds = %85
%89 = call i8* (...) @thing()
%90 = call i8* (...) @getdata()
%91 = call i32 @strcmp(i8* %89, i8* %90)
%92 = icmp eq i32 %91, 0
br label %93
93: ; preds = %88, %85
%94 = phi i1 [ false, %85 ], [ %92, %88 ]
%95 = xor i1 %94, true
br label %96
96: ; preds = %93, %82
%97 = phi i1 [ false, %82 ], [ %95, %93 ]
br i1 %97, label %98, label %107
98: ; preds = %96
%99 = load i32*, i32** %6
%100 = call i32 @getthing(i32* %99)
%101 = call i32 (...) @istag()
%102 = icmp ne i32 %101, 0
br i1 %102, label %106, label %103
103: ; preds = %98
%104 = call i8* (...) @thing()
%105 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i8* %104)
br label %106
106: ; preds = %103, %98
br label %82
107: ; preds = %96
%108 = call i32 (...) @nextline()
br label %293
109: ; preds = %46
%110 = call i8* (...) @getdata()
%111 = call i8* @thingattribute(i8* %110)
%112 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0), i8* %111)
%113 = call i32 (...) @nextline()
br label %293
114: ; preds = %46
%115 = call i8* (...) @getdata()
store i8* %115, i8** %9
br label %116
116: ; preds = %242, %114
%117 = load i8*, i8** %9
%118 = load i8, i8* %117
%119 = sext i8 %118 to i32
%120 = icmp ne i32 %119, 0
br i1 %120, label %121, label %245
121: ; preds = %116
%122 = load i8*, i8** %9
%123 = load i8, i8* %122
%124 = sext i8 %123 to i32
%125 = icmp eq i32 %124, 36
br i1 %125, label %126, label %236
126: ; preds = %121
%127 = load i8*, i8** %9
%128 = getelementptr inbounds i8, i8* %127, i64 1
%129 = load i8, i8* %128
%130 = sext i8 %129 to i32
%131 = icmp ne i32 %130, 0
br i1 %131, label %132, label %135
132: ; preds = %126
%133 = load i8*, i8** %9
%134 = getelementptr inbounds i8, i8* %133, i32 1
store i8* %134, i8** %9
br label %135
135: ; preds = %132, %126
%136 = load i8*, i8** %9
%137 = load i8, i8* %136
%138 = sext i8 %137 to i32
switch i32 %138, label %235 [
i32 36, label %139
i32 48, label %141
i32 49, label %150
i32 50, label %159
i32 51, label %168
i32 52, label %177
i32 53, label %186
i32 54, label %195
i32 55, label %204
i32 56, label %213
i32 57, label %222
i32 110, label %231
i32 46, label %233
]
139: ; preds = %135
%140 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.17, i64 0, i64 0))
br label %235
141: ; preds = %135
%142 = load i32, i32* %4
%143 = icmp sge i32 %142, 3
br i1 %143, label %144, label %149
144: ; preds = %141
%145 = load i8**, i8*** %5
%146 = getelementptr inbounds i8*, i8** %145, i64 3
%147 = load i8*, i8** %146
%148 = call i32 (i8*, ...) @printf(i8* %147)
br label %149
149: ; preds = %144, %141
br label %235
150: ; preds = %135
%151 = load i32, i32* %4
%152 = icmp sge i32 %151, 4
br i1 %152, label %153, label %158
153: ; preds = %150
%154 = load i8**, i8*** %5
%155 = getelementptr inbounds i8*, i8** %154, i64 4
%156 = load i8*, i8** %155
%157 = call i32 (i8*, ...) @printf(i8* %156)
br label %158
158: ; preds = %153, %150
br label %235
159: ; preds = %135
%160 = load i32, i32* %4
%161 = icmp sge i32 %160, 5
br i1 %161, label %162, label %167
162: ; preds = %159
%163 = load i8**, i8*** %5
%164 = getelementptr inbounds i8*, i8** %163, i64 5
%165 = load i8*, i8** %164
%166 = call i32 (i8*, ...) @printf(i8* %165)
br label %167
167: ; preds = %162, %159
br label %235
168: ; preds = %135
%169 = load i32, i32* %4
%170 = icmp sge i32 %169, 6
br i1 %170, label %171, label %176
171: ; preds = %168
%172 = load i8**, i8*** %5
%173 = getelementptr inbounds i8*, i8** %172, i64 6
%174 = load i8*, i8** %173
%175 = call i32 (i8*, ...) @printf(i8* %174)
br label %176
176: ; preds = %171, %168
br label %235
177: ; preds = %135
%178 = load i32, i32* %4
%179 = icmp sge i32 %178, 7
br i1 %179, label %180, label %185
180: ; preds = %177
%181 = load i8**, i8*** %5
%182 = getelementptr inbounds i8*, i8** %181, i64 7
%183 = load i8*, i8** %182
%184 = call i32 (i8*, ...) @printf(i8* %183)
br label %185
185: ; preds = %180, %177
br label %235
186: ; preds = %135
%187 = load i32, i32* %4
%188 = icmp sge i32 %187, 8
br i1 %188, label %189, label %194
189: ; preds = %186
%190 = load i8**, i8*** %5
%191 = getelementptr inbounds i8*, i8** %190, i64 8
%192 = load i8*, i8** %191
%193 = call i32 (i8*, ...) @printf(i8* %192)
br label %194
194: ; preds = %189, %186
br label %235
195: ; preds = %135
%196 = load i32, i32* %4
%197 = icmp sge i32 %196, 9
br i1 %197, label %198, label %203
198: ; preds = %195
%199 = load i8**, i8*** %5
%200 = getelementptr inbounds i8*, i8** %199, i64 9
%201 = load i8*, i8** %200
%202 = call i32 (i8*, ...) @printf(i8* %201)
br label %203
203: ; preds = %198, %195
br label %235
204: ; preds = %135
%205 = load i32, i32* %4
%206 = icmp sge i32 %205, 10
br i1 %206, label %207, label %212
207: ; preds = %204
%208 = load i8**, i8*** %5
%209 = getelementptr inbounds i8*, i8** %208, i64 10
%210 = load i8*, i8** %209
%211 = call i32 (i8*, ...) @printf(i8* %210)
br label %212
212: ; preds = %207, %204
br label %235
213: ; preds = %135
%214 = load i32, i32* %4
%215 = icmp sge i32 %214, 11
br i1 %215, label %216, label %221
216: ; preds = %213
%217 = load i8**, i8*** %5
%218 = getelementptr inbounds i8*, i8** %217, i64 11
%219 = load i8*, i8** %218
%220 = call i32 (i8*, ...) @printf(i8* %219)
br label %221
221: ; preds = %216, %213
br label %235
222: ; preds = %135
%223 = load i32, i32* %4
%224 = icmp sge i32 %223, 12
br i1 %224, label %225, label %230
225: ; preds = %222
%226 = load i8**, i8*** %5
%227 = getelementptr inbounds i8*, i8** %226, i64 12
%228 = load i8*, i8** %227
%229 = call i32 (i8*, ...) @printf(i8* %228)
br label %230
230: ; preds = %225, %222
br label %235
231: ; preds = %135
%232 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i64 0, i64 0))
br label %235
233: ; preds = %135
%234 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.19, i64 0, i64 0))
br label %235
235: ; preds = %135, %233, %231, %230, %221, %212, %203, %194, %185, %176, %167, %158, %149, %139
br label %241
236: ; preds = %121
%237 = load i8*, i8** %9
%238 = load i8, i8* %237
%239 = sext i8 %238 to i32
%240 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.20, i64 0, i64 0), i32 %239)
br label %241
241: ; preds = %236, %235
br label %242
242: ; preds = %241
%243 = load i8*, i8** %9
%244 = getelementptr inbounds i8, i8* %243, i32 1
store i8* %244, i8** %9
br label %116
245: ; preds = %116
%246 = call i32 (...) @nextline()
br label %293
247: ; preds = %46
br label %248
248: ; preds = %260, %247
%249 = load i32*, i32** %6
%250 = call i32 @getthing(i32* %249)
br label %251
251: ; preds = %248
%252 = call i8* (...) @thing()
%253 = call i8* (...) @getdata()
%254 = call i32 @strcmp(i8* %252, i8* %253)
%255 = icmp eq i32 %254, 0
br i1 %255, label %256, label %260
256: ; preds = %251
%257 = call i32 (...) @end()
%258 = icmp ne i32 %257, 0
%259 = xor i1 %258, true
br label %260
260: ; preds = %256, %251
%261 = phi i1 [ false, %251 ], [ %259, %256 ]
br i1 %261, label %248, label %262
262: ; preds = %260
%263 = call i32 (...) @nextline()
br label %293
264: ; preds = %46
%265 = load i32*, i32** %6
%266 = call i32 @getthing(i32* %265)
br label %267
267: ; preds = %277, %264
%268 = call i32 (...) @end()
%269 = icmp ne i32 %268, 0
br i1 %269, label %275, label %270
270: ; preds = %267
%271 = call i8* (...) @thing()
%272 = call i8* (...) @getdata()
%273 = call i32 @strcmp(i8* %271, i8* %272)
%274 = icmp ne i32 %273, 0
br label %275
275: ; preds = %270, %267
%276 = phi i1 [ false, %267 ], [ %274, %270 ]
br i1 %276, label %277, label %282
277: ; preds = %275
%278 = call i8* (...) @thing()
%279 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i8* %278)
%280 = load i32*, i32** %6
%281 = call i32 @getthing(i32* %280)
br label %267
282: ; preds = %275
%283 = call i32 (...) @nextline()
br label %293
284: ; preds = %46
%285 = call i32 (...) @end()
%286 = icmp ne i32 %285, 0
br i1 %286, label %289, label %287
287: ; preds = %284
%288 = call i32 (...) @gotoline()
br label %291
289: ; preds = %284
%290 = call i32 (...) @nextline()
br label %291
291: ; preds = %289, %287
br label %293
292: ; preds = %46
store i32 1, i32* %8
br label %293
293: ; preds = %46, %292, %291, %282, %262, %245, %109, %107, %68, %48
br label %294
294: ; preds = %293
%295 = call i32 (...) @end()
%296 = icmp ne i32 %295, 0
br i1 %296, label %301, label %297
297: ; preds = %294
%298 = load i32, i32* %8
%299 = icmp ne i32 %298, 0
%300 = xor i1 %299, true
br label %301
301: ; preds = %297, %294
%302 = phi i1 [ false, %294 ], [ %300, %297 ]
br i1 %302, label %46, label %303
303: ; preds = %301
%304 = load i32*, i32** %6
%305 = call i32 @fclose(i32* %304)
%306 = load i32*, i32** %7
%307 = call i32 @fclose(i32* %306)
store i32 0, i32* %3
br label %308
308: ; preds = %303, %40, %12
%309 = load i32, i32* %3
ret i32 %309
}

LLVM IR (-O2):
@.str.13 = [2 x i8] c"r\00"
@stderr = global i32 0
@.str.14 = [34 x i8] c"xmlparse: unable to open file(s)\0A\00"
@.str.15 = [3 x i8] c"%s\00"
@.str.16 = [4 x i8] c" %s\00"
@str = [41 x i8] c"xmlparse parse.cfg filename [arg0 ... ]\0A\00"
@str.21 = [34 x i8] c"parse.cfg format\0A---------------\0A\00"
@str.22 = [9 x i8] c" :label\00"
@str.23 = [19 x i8] c" searchfortag tag\00"
@str.24 = [20 x i8] c" printuntiltag tag\00"
@str.25 = [31 x i8] c" printattribute attributename\00"
@str.26 = [15 x i8] c" print string\00"
@str.27 = [25 x i8] c" searchforstring string\00"
@str.28 = [26 x i8] c" printuntilstring string\00"
@str.29 = [21 x i8] c" loopuntileof label\00"
@str.30 = [7 x i8] c" end\0A\00"
@str.31 = [57 x i8] c" arg0-arg9 can be referred to in print command as $0-$9\00"
@str.32 = [43 x i8] c" also, $. => space, $$ => $ and $n => \\n\0A\00"
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = icmp slt i32 %0, 3
br i1 %3, label %4, label %18
4: ; preds = %2
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.21, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.22, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.23, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.24, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @str.25, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.26, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.27, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.28, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str.29, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.30, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @str.31, i64 0, i64 0))
%17 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str.32, i64 0, i64 0))
br label %216
18: ; preds = %2
%19 = getelementptr inbounds i8*, i8** %1, i64 2
%20 = load i8*, i8** %19
%21 = tail call i32* @fopen(i8* %20, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.13, i64 0, i64 0))
%22 = getelementptr inbounds i8*, i8** %1, i64 1
%23 = load i8*, i8** %22
%24 = tail call i32* @fopen(i8* %23, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.13, i64 0, i64 0))
%25 = icmp eq i32* %21, null
%26 = icmp eq i32* %24, null
%27 = or i1 %25, %26
br i1 %27, label %28, label %31
28: ; preds = %18
%29 = load i32, i32* @stderr
%30 = tail call i32 @fprintf(i32 %29, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.14, i64 0, i64 0))
br label %216
31: ; preds = %18
%32 = tail call i32 @readcfg(i32* %24)
%33 = icmp ugt i32 %0, 11
%34 = getelementptr inbounds i8*, i8** %1, i64 12
%35 = icmp ugt i32 %0, 10
%36 = getelementptr inbounds i8*, i8** %1, i64 11
%37 = icmp ugt i32 %0, 9
%38 = getelementptr inbounds i8*, i8** %1, i64 10
%39 = icmp ugt i32 %0, 8
%40 = getelementptr inbounds i8*, i8** %1, i64 9
%41 = icmp ugt i32 %0, 7
%42 = getelementptr inbounds i8*, i8** %1, i64 8
%43 = icmp ugt i32 %0, 6
%44 = getelementptr inbounds i8*, i8** %1, i64 7
%45 = icmp ugt i32 %0, 5
%46 = getelementptr inbounds i8*, i8** %1, i64 6
%47 = icmp ugt i32 %0, 4
%48 = getelementptr inbounds i8*, i8** %1, i64 5
%49 = icmp ugt i32 %0, 3
%50 = getelementptr inbounds i8*, i8** %1, i64 4
%51 = getelementptr inbounds i8*, i8** %1, i64 3
br label %52
52: ; preds = %210, %31
%53 = tail call i32 (...) @getcommand()
switch i32 %53, label %210 [
i32 1, label %54
i32 0, label %54
i32 2, label %56
i32 3, label %70
i32 4, label %103
i32 5, label %108
i32 6, label %173
i32 7, label %184
i32 8, label %201
i32 9, label %208
]
54: ; preds = %52, %52
%55 = tail call i32 (...) @nextline()
br label %210
56: ; preds = %52, %65
%57 = tail call i32 @getthing(i32* %21)
%58 = tail call i32 (...) @istag()
%59 = icmp eq i32 %58, 0
br i1 %59, label %65, label %60
60: ; preds = %56
%61 = tail call i8* (...) @thing()
%62 = tail call i8* (...) @getdata()
%63 = tail call i32 @strcmp(i8* dereferenceable(1) %61, i8* dereferenceable(1) %62)
%64 = icmp eq i32 %63, 0
br i1 %64, label %68, label %65
65: ; preds = %60, %56
%66 = tail call i32 (...) @end()
%67 = icmp eq i32 %66, 0
br i1 %67, label %56, label %68
68: ; preds = %60, %65
%69 = tail call i32 (...) @nextline()
br label %210
70: ; preds = %52
%71 = tail call i32 @getthing(i32* %21)
%72 = tail call i32 (...) @end()
%73 = icmp eq i32 %72, 0
br i1 %73, label %74, label %80
74: ; preds = %70
%75 = tail call i32 (...) @istag()
%76 = icmp eq i32 %75, 0
br i1 %76, label %77, label %80
77: ; preds = %74
%78 = tail call i8* (...) @thing()
%79 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0), i8* %78)
br label %80
80: ; preds = %77, %74, %70
%81 = tail call i32 (...) @end()
%82 = icmp eq i32 %81, 0
br i1 %82, label %83, label %101
83: ; preds = %80, %98
%84 = tail call i32 (...) @istag()
%85 = icmp eq i32 %84, 0
br i1 %85, label %91, label %86
86: ; preds = %83
%87 = tail call i8* (...) @thing()
%88 = tail call i8* (...) @getdata()
%89 = tail call i32 @strcmp(i8* dereferenceable(1) %87, i8* dereferenceable(1) %88)
%90 = icmp eq i32 %89, 0
br i1 %90, label %101, label %91
91: ; preds = %83, %86
%92 = tail call i32 @getthing(i32* %21)
%93 = tail call i32 (...) @istag()
%94 = icmp eq i32 %93, 0
br i1 %94, label %95, label %98
95: ; preds = %91
%96 = tail call i8* (...) @thing()
%97 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i8* %96)
br label %98
98: ; preds = %95, %91
%99 = tail call i32 (...) @end()
%100 = icmp eq i32 %99, 0
br i1 %100, label %83, label %101
101: ; preds = %86, %98, %80
%102 = tail call i32 (...) @nextline()
br label %210
103: ; preds = %52
%104 = tail call i8* (...) @getdata()
%105 = tail call i8* @thingattribute(i8* %104)
%106 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0), i8* %105)
%107 = tail call i32 (...) @nextline()
br label %210
108: ; preds = %52
%109 = tail call i8* (...) @getdata()
br label %110
110: ; preds = %168, %108
%111 = phi i8* [ %109, %108 ], [ %170, %168 ]
%112 = load i8, i8* %111
switch i8 %112, label %165 [
i8 0, label %171
i8 36, label %113
]
113: ; preds = %110
%114 = getelementptr inbounds i8, i8* %111, i64 1
%115 = load i8, i8* %114
%116 = icmp eq i8 %115, 0
%117 = select i1 %116, i8* %111, i8* %114
%118 = load i8, i8* %117
%119 = sext i8 %118 to i32
switch i32 %119, label %168 [
i32 36, label %120
i32 48, label %122
i32 49, label %125
i32 50, label %129
i32 51, label %133
i32 52, label %137
i32 53, label %141
i32 54, label %145
i32 55, label %149
i32 56, label %153
i32 57, label %157
i32 110, label %161
i32 46, label %163
]
120: ; preds = %113
%121 = tail call i32 @putchar(i32 36)
br label %168
122: ; preds = %113
%123 = load i8*, i8** %51
%124 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %123)
br label %168
125: ; preds = %113
br i1 %49, label %126, label %168
126: ; preds = %125
%127 = load i8*, i8** %50
%128 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %127)
br label %168
129: ; preds = %113
br i1 %47, label %130, label %168
130: ; preds = %129
%131 = load i8*, i8** %48
%132 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %131)
br label %168
133: ; preds = %113
br i1 %45, label %134, label %168
134: ; preds = %133
%135 = load i8*, i8** %46
%136 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %135)
br label %168
137: ; preds = %113
br i1 %43, label %138, label %168
138: ; preds = %137
%139 = load i8*, i8** %44
%140 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %139)
br label %168
141: ; preds = %113
br i1 %41, label %142, label %168
142: ; preds = %141
%143 = load i8*, i8** %42
%144 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %143)
br label %168
145: ; preds = %113
br i1 %39, label %146, label %168
146: ; preds = %145
%147 = load i8*, i8** %40
%148 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %147)
br label %168
149: ; preds = %113
br i1 %37, label %150, label %168
150: ; preds = %149
%151 = load i8*, i8** %38
%152 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %151)
br label %168
153: ; preds = %113
br i1 %35, label %154, label %168
154: ; preds = %153
%155 = load i8*, i8** %36
%156 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %155)
br label %168
157: ; preds = %113
br i1 %33, label %158, label %168
158: ; preds = %157
%159 = load i8*, i8** %34
%160 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %159)
br label %168
161: ; preds = %113
%162 = tail call i32 @putchar(i32 10)
br label %168
163: ; preds = %113
%164 = tail call i32 @putchar(i32 32)
br label %168
165: ; preds = %110
%166 = sext i8 %112 to i32
%167 = tail call i32 @putchar(i32 %166)
br label %168
168: ; preds = %165, %157, %158, %153, %154, %149, %150, %145, %146, %141, %142, %137, %138, %133, %134, %129, %130, %125, %126, %122, %113, %163, %161, %120
%169 = phi i8* [ %117, %113 ], [ %117, %163 ], [ %117, %161 ], [ %117, %158 ], [ %117, %157 ], [ %117, %154 ], [ %117, %153 ], [ %117, %150 ], [ %117, %149 ], [ %117, %146 ], [ %117, %145 ], [ %117, %142 ], [ %117, %141 ], [ %117, %138 ], [ %117, %137 ], [ %117, %134 ], [ %117, %133 ], [ %117, %130 ], [ %117, %129 ], [ %117, %126 ], [ %117, %125 ], [ %117, %122 ], [ %117, %120 ], [ %111, %165 ]
%170 = getelementptr inbounds i8, i8* %169, i64 1
br label %110
171: ; preds = %110
%172 = tail call i32 (...) @nextline()
br label %210
173: ; preds = %52, %179
%174 = tail call i32 @getthing(i32* %21)
%175 = tail call i8* (...) @thing()
%176 = tail call i8* (...) @getdata()
%177 = tail call i32 @strcmp(i8* dereferenceable(1) %175, i8* dereferenceable(1) %176)
%178 = icmp eq i32 %177, 0
br i1 %178, label %179, label %182
179: ; preds = %173
%180 = tail call i32 (...) @end()
%181 = icmp eq i32 %180, 0
br i1 %181, label %173, label %182
182: ; preds = %173, %179
%183 = tail call i32 (...) @nextline()
br label %210
184: ; preds = %52
%185 = tail call i32 @getthing(i32* %21)
%186 = tail call i32 (...) @end()
%187 = icmp eq i32 %186, 0
br i1 %187, label %188, label %199
188: ; preds = %184, %193
%189 = tail call i8* (...) @thing()
%190 = tail call i8* (...) @getdata()
%191 = tail call i32 @strcmp(i8* dereferenceable(1) %189, i8* dereferenceable(1) %190)
%192 = icmp eq i32 %191, 0
br i1 %192, label %199, label %193
193: ; preds = %188
%194 = tail call i8* (...) @thing()
%195 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i64 0, i64 0), i8* %194)
%196 = tail call i32 @getthing(i32* %21)
%197 = tail call i32 (...) @end()
%198 = icmp eq i32 %197, 0
br i1 %198, label %188, label %199
199: ; preds = %188, %193, %184
%200 = tail call i32 (...) @nextline()
br label %210
201: ; preds = %52
%202 = tail call i32 (...) @end()
%203 = icmp eq i32 %202, 0
br i1 %203, label %204, label %206
204: ; preds = %201
%205 = tail call i32 (...) @gotoline()
br label %210
206: ; preds = %201
%207 = tail call i32 (...) @nextline()
br label %210
208: ; preds = %52
%209 = tail call i32 (...) @end()
br label %213
210: ; preds = %54, %68, %101, %103, %171, %182, %199, %52, %206, %204
%211 = tail call i32 (...) @end()
%212 = icmp eq i32 %211, 0
br i1 %212, label %52, label %213
213: ; preds = %210, %208
%214 = tail call i32 @fclose(i32* %21)
%215 = tail call i32 @fclose(i32* %24)
br label %216
216: ; preds = %213, %28, %4
%217 = phi i32 [ 1, %4 ], [ 1, %28 ], [ 0, %213 ]
ret i32 %217
}