// File: gasparfm[P]anapache/./lib/ini/ini.hpp
// Function: INI::Parser::parse(INI::Level&)
inline void
Parser::parse(Level& l)
{
  while (std::getline(*f_, line_)) {
    ++ln_;
    if (line_[0] == '#' || line_[0] == ';') continue;
    line_ = trim(line_);
    if (line_.empty()) continue;
    if (line_[0] == '[') {
      size_t depth;
      std::string sname;
      parseSLine(sname, depth);
      Level* lp = NULL;
      Level* parent = &l;
      if (depth > l.depth + 1)
        err("section with wrong depth");
      if (l.depth == depth-1)
        lp = &l.sections[sname];
      else {
        lp = l.parent;
        size_t n = l.depth - depth;
        for (size_t i = 0; i < n; ++i) lp = lp->parent;
        parent = lp;
        lp = &lp->sections[sname];
      }
      if (lp->depth != 0)
        err("duplicate section name on the same level");
      if (!lp->parent) {
        lp->depth = depth;
        lp->parent = parent;
      }
      parent->ordered_sections.push_back(parent->sections.find(sname));
      parse(*lp);
    } else {
      size_t n = line_.find('=');
      if (n == std::string::npos)
        err("no '=' found");
      std::pair<Level::value_map_t::const_iterator, bool> res = 
        l.values.insert(std::make_pair(trim(line_.substr(0, n)), 
              trim(line_.substr(n+1, line_.length()-n-1))));
      if (!res.second)
        err("duplicated key found");
      l.ordered_values.push_back(res.first);
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x200, %rsp            # imm = 0x200
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x198(%rbp)
movq -0x198(%rbp), %rsi
movq 0x2a8(%rsi), %rdi
addq $0x2b0, %rsi            # imm = 0x2B0
callq 0x40e0
movq %rax, %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
callq 0x4580
testb $0x1, %al
jne 0x95e0
jmp 0x9b49
movq -0x198(%rbp), %rdi
movq 0x2d0(%rdi), %rax
addq $0x1, %rax
movq %rax, 0x2d0(%rdi)
addq $0x2b0, %rdi            # imm = 0x2B0
xorl %eax, %eax
movl %eax, %esi
callq 0x4780
movsbl (%rax), %eax
cmpl $0x23, %eax
je 0x9630
movq -0x198(%rbp), %rdi
addq $0x2b0, %rdi            # imm = 0x2B0
xorl %eax, %eax
movl %eax, %esi
callq 0x4780
movsbl (%rax), %eax
cmpl $0x3b, %eax
jne 0x9635
jmp 0x95ae
movq -0x198(%rbp), %rsi
addq $0x2b0, %rsi            # imm = 0x2B0
leaq -0x30(%rbp), %rdi
callq 0x9da0
movq -0x198(%rbp), %rdi
addq $0x2b0, %rdi            # imm = 0x2B0
leaq -0x30(%rbp), %rsi
callq 0x4560
leaq -0x30(%rbp), %rdi
callq 0x47a8
movq -0x198(%rbp), %rdi
addq $0x2b0, %rdi            # imm = 0x2B0
callq 0x4690
testb $0x1, %al
jne 0x9685
jmp 0x968a
jmp 0x95ae
movq -0x198(%rbp), %rdi
addq $0x2b0, %rdi            # imm = 0x2B0
xorl %eax, %eax
movl %eax, %esi
callq 0x4780
movsbl (%rax), %eax
cmpl $0x5b, %eax
jne 0x98d1
leaq -0x58(%rbp), %rdi
movq %rdi, -0x1a0(%rbp)
callq 0x45e0
movq -0x198(%rbp), %rdi
movq -0x1a0(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0x9ea0
jmp 0x96d6
movq $0x0, -0x70(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x38(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x98(%rcx), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jbe 0x972f
movq -0x198(%rbp), %rdi
leaq 0x9c55(%rip), %rsi      # 0x13361
callq 0x9f90
jmp 0x9713
jmp 0x972f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x47a8
jmp 0x9b52
movq -0x10(%rbp), %rax
movq 0x98(%rax), %rax
movq -0x38(%rbp), %rcx
subq $0x1, %rcx
cmpq %rcx, %rax
jne 0x9771
movq -0x10(%rbp), %rdi
addq $0x30, %rdi
leaq -0x58(%rbp), %rsi
callq 0xa040
movq %rax, -0x1a8(%rbp)
jmp 0x9761
movq -0x1a8(%rbp), %rax
movq %rax, -0x70(%rbp)
jmp 0x97fb
movq -0x10(%rbp), %rax
movq 0x90(%rax), %rax
movq %rax, -0x70(%rbp)
movq -0x10(%rbp), %rax
movq 0x98(%rax), %rax
subq -0x38(%rbp), %rax
movq %rax, -0x80(%rbp)
movq $0x0, -0x88(%rbp)
movq -0x88(%rbp), %rax
cmpq -0x80(%rbp), %rax
jae 0x97ce
movq -0x70(%rbp), %rax
movq 0x90(%rax), %rax
movq %rax, -0x70(%rbp)
movq -0x88(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
jmp 0x979e
movq -0x70(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x70(%rbp), %rdi
addq $0x30, %rdi
leaq -0x58(%rbp), %rsi
callq 0xa040
movq %rax, -0x1b0(%rbp)
jmp 0x97f0
movq -0x1b0(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
cmpq $0x0, 0x98(%rax)
je 0x9820
movq -0x198(%rbp), %rdi
leaq 0x9b63(%rip), %rsi      # 0x1337a
callq 0x9f90
jmp 0x981e
jmp 0x9820
movq -0x70(%rbp), %rax
cmpq $0x0, 0x90(%rax)
jne 0x984c
movq -0x38(%rbp), %rcx
movq -0x70(%rbp), %rax
movq %rcx, 0x98(%rax)
movq -0x78(%rbp), %rcx
movq -0x70(%rbp), %rax
movq %rcx, 0x90(%rax)
movq -0x78(%rbp), %rdi
movq %rdi, %rax
addq $0x78, %rax
movq %rax, -0x1c0(%rbp)
addq $0x30, %rdi
leaq -0x58(%rbp), %rsi
callq 0xa160
movq %rax, -0x1b8(%rbp)
jmp 0x9874
movq -0x1b8(%rbp), %rax
movq %rax, -0x98(%rbp)
leaq -0x90(%rbp), %rdi
movq %rdi, -0x1c8(%rbp)
leaq -0x98(%rbp), %rsi
callq 0xa190
movq -0x1c0(%rbp), %rdi
movq -0x1c8(%rbp), %rsi
callq 0xa120
jmp 0x98b1
movq -0x198(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0x9590
jmp 0x98c3
leaq -0x58(%rbp), %rdi
callq 0x47a8
jmp 0x9b44
movq -0x198(%rbp), %rdi
addq $0x2b0, %rdi            # imm = 0x2B0
movl $0x3d, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x4590
movq %rax, -0xa0(%rbp)
cmpq $-0x1, -0xa0(%rbp)
jne 0x9911
movq -0x198(%rbp), %rdi
leaq 0x9a97(%rip), %rsi      # 0x133a3
callq 0x9f90
movq -0x198(%rbp), %rsi
movq -0x10(%rbp), %rax
movq %rax, -0x1d8(%rbp)
addq $0x2b0, %rsi            # imm = 0x2B0
movq -0xa0(%rbp), %rcx
xorl %eax, %eax
movl %eax, %edx
leaq -0x140(%rbp), %rdi
movq %rdi, -0x1d0(%rbp)
callq 0x4450
movq -0x1d0(%rbp), %rsi
leaq -0x120(%rbp), %rdi
callq 0x9da0
jmp 0x995d
movq -0x198(%rbp), %rdi
addq $0x2b0, %rdi            # imm = 0x2B0
movq %rdi, -0x1e8(%rbp)
movq -0xa0(%rbp), %rax
incq %rax
movq %rax, -0x1e0(%rbp)
callq 0x4630
movq -0x1e8(%rbp), %rsi
movq -0x1e0(%rbp), %rdx
movq -0xa0(%rbp), %rcx
notq %rcx
addq %rax, %rcx
leaq -0x180(%rbp), %rdi
callq 0x4450
jmp 0x99b1
leaq -0x160(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x9da0
jmp 0x99c6
leaq -0x100(%rbp), %rdi
leaq -0x120(%rbp), %rsi
leaq -0x160(%rbp), %rdx
callq 0xa1f0
jmp 0x99e2
movq -0x1d8(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0xa1b0
movb %dl, -0x1f1(%rbp)
movq %rax, -0x1f0(%rbp)
jmp 0x9a04
movb -0x1f1(%rbp), %al
movq -0x1f0(%rbp), %rcx
movq %rcx, -0x190(%rbp)
movb %al, -0x188(%rbp)
movb -0x188(%rbp), %al
movb %al, -0xb8(%rbp)
movq -0x190(%rbp), %rax
movq %rax, -0xc0(%rbp)
leaq -0xb0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0xa230
jmp 0x9a4d
leaq -0x100(%rbp), %rdi
callq 0xa270
leaq -0x160(%rbp), %rdi
callq 0x47a8
leaq -0x180(%rbp), %rdi
callq 0x47a8
leaq -0x120(%rbp), %rdi
callq 0x47a8
leaq -0x140(%rbp), %rdi
callq 0x47a8
testb $0x1, -0xa8(%rbp)
jne 0x9b30
movq -0x198(%rbp), %rdi
leaq 0x990c(%rip), %rsi      # 0x133b0
callq 0x9f90
jmp 0x9b30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x9b22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x9b16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x9b0a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x9afe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x100(%rbp), %rdi
callq 0xa270
leaq -0x160(%rbp), %rdi
callq 0x47a8
leaq -0x180(%rbp), %rdi
callq 0x47a8
leaq -0x120(%rbp), %rdi
callq 0x47a8
leaq -0x140(%rbp), %rdi
callq 0x47a8
jmp 0x9b52
movq -0x10(%rbp), %rdi
addq $0x60, %rdi
leaq -0xb0(%rbp), %rsi
callq 0xa2a0
jmp 0x95ae
addq $0x200, %rsp            # imm = 0x200
popq %rbp
retq
movq -0x60(%rbp), %rdi
callq 0x46c0
nopl (%rax,%rax)