// File: /workspace/github_c_makefile_star2_O0/canboat[P]canboat/analyzer/analyzer-explain.c
// Function: main
int main(int argc, char **argv)
{
  int    ac           = argc;
  char **av           = argv;
  bool   doExplain    = false;
  bool   doExplainXML = false;
  bool   doExplainNGT = false;
  bool   doExplainIK  = false;

  setProgName(argv[0]);

  for (; ac > 1; ac--, av++)
  {
    if (strcasecmp(av[1], "-version") == 0)
    {
      printf("%s\n", VERSION);
      exit(0);
    }
    else if (strcasecmp(av[1], "-camel") == 0)
    {
      camelCase(false);
    }
    else if (strcasecmp(av[1], "-upper-camel") == 0)
    {
      camelCase(true);
    }
    else if (strcasecmp(av[1], "-explain-xml") == 0)
    {
      doExplainXML = true;
    }
    else if (strcasecmp(av[1], "-explain-ngt-xml") == 0)
    {
      doExplainNGT = true;
    }
    else if (strcasecmp(av[1], "-explain-ik-xml") == 0)
    {
      doExplainIK = true;
    }
    else if (strcasecmp(av[1], "-explain") == 0)
    {
      doExplain = true;
    }
    else if (strcasecmp(av[1], "-v1") == 0)
    {
      doV1 = true;
    }
    else if (strcasecmp(av[1], "-d") == 0)
    {
      setLogLevel(LOGLEVEL_DEBUG);
      logDebug("Logging at debug level\n");
    }
    else
    {
      usage(argv, av + 1);
    }
  }

  fillLookups();
  fillFieldType(true);

  if (doExplain)
  {
    explain();
    exit(0);
  }
  if (doExplainXML || doExplainNGT || doExplainIK)
  {
    explainXML(doExplainXML, doExplainNGT, doExplainIK);
    exit(0);
  }
  usage(argv, NULL);
  exit(1);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl -0x8(%rbp), %eax
movl %eax, -0x14(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
movb $0x0, -0x21(%rbp)
movb $0x0, -0x22(%rbp)
movb $0x0, -0x23(%rbp)
movb $0x0, -0x24(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x1f9a0
cmpl $0x1, -0x14(%rbp)
jle 0xe263
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x190f9(%rip), %rsi     # 0x271d2
callq 0xd050
cmpl $0x0, %eax
jne 0xe0ff
leaq 0x27d94(%rip), %rdi     # 0x35e7e
leaq 0x190ea(%rip), %rsi     # 0x271db
movb $0x0, %al
callq 0xd0f0
xorl %edi, %edi
callq 0xd2e0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x190d9(%rip), %rsi     # 0x271e7
callq 0xd050
cmpl $0x0, %eax
jne 0xe124
xorl %edi, %edi
callq 0xdc80
jmp 0xe245
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x190ae(%rip), %rsi     # 0x271e1
callq 0xd050
cmpl $0x0, %eax
jne 0xe14c
movl $0x1, %edi
callq 0xdc80
jmp 0xe243
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x19093(%rip), %rsi     # 0x271ee
callq 0xd050
cmpl $0x0, %eax
jne 0xe16e
movb $0x1, -0x22(%rbp)
jmp 0xe241
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1907e(%rip), %rsi     # 0x271fb
callq 0xd050
cmpl $0x0, %eax
jne 0xe190
movb $0x1, -0x23(%rbp)
jmp 0xe23f
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1906d(%rip), %rsi     # 0x2720c
callq 0xd050
cmpl $0x0, %eax
jne 0xe1b2
movb $0x1, -0x24(%rbp)
jmp 0xe23d
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1905b(%rip), %rsi     # 0x2721c
callq 0xd050
cmpl $0x0, %eax
jne 0xe1d1
movb $0x1, -0x21(%rbp)
jmp 0xe23b
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x19045(%rip), %rsi     # 0x27225
callq 0xd050
cmpl $0x0, %eax
jne 0xe1f3
movb $0x1, 0x8348b(%rip)     # 0x9167c
jmp 0xe239
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x19027(%rip), %rsi     # 0x27229
callq 0xd050
cmpl $0x0, %eax
jne 0xe226
movl $0x3, %edi
callq 0x1f900
leaq 0x1900f(%rip), %rdi     # 0x2722c
movb $0x0, %al
callq 0x1f670
jmp 0xe237
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
callq 0xe2e0
jmp 0xe239
jmp 0xe23b
jmp 0xe23d
jmp 0xe23f
jmp 0xe241
jmp 0xe243
jmp 0xe245
jmp 0xe247
jmp 0xe249
movl -0x14(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x14(%rbp)
movq -0x20(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x20(%rbp)
jmp 0xe0c0
callq 0x1ace0
movl $0x1, %edi
callq 0x1e250
testb $0x1, -0x21(%rbp)
je 0xe284
callq 0xe3c0
xorl %edi, %edi
callq 0xd2e0
testb $0x1, -0x22(%rbp)
jne 0xe296
testb $0x1, -0x23(%rbp)
jne 0xe296
testb $0x1, -0x24(%rbp)
je 0xe2bc
movb -0x22(%rbp), %dl
movb -0x23(%rbp), %cl
movb -0x24(%rbp), %al
andb $0x1, %dl
andb $0x1, %cl
andb $0x1, %al
movzbl %dl, %edi
movzbl %cl, %esi
movzbl %al, %edx
callq 0xe500
xorl %edi, %edi
callq 0xd2e0
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xe2e0
movl $0x1, %edi
callq 0xd2e0
nopw %cs:(%rax,%rax)