// File: lvandeve[P]lodepng/pngdetail.cpp
// Function: displayChunkNames(Data&, Options const&)
void displayChunkNames(Data& data, const Options& options) {
  data.loadInspect();
  if(!data.is_png) return;
  data.loadFile();
  if(data.error) return;
  std::cout << (options.use_hex ? std::hex: std::dec);
  const std::vector<unsigned char>& buffer = data.buffer;
  std::vector<std::string> names;
  std::vector<size_t> sizes;
  unsigned error = lodepng::getChunkInfo(names, sizes, buffer);
  if(error) {
    if(!names.empty() && names.back() == "IEND" && sizes.back() == 0) {
      std::cout << "Corruption or superfluous data detected after the IEND chunk" << std::endl;
    } else {
      std::cout << "Error while identifying chunks. Listing identified chunks anyway." << std::endl;
    }
  }

  if(options.show_chunks2) {
    std::cout << "Chunk types: ";
    for(size_t i = 0; i < names.size(); i++) std::cout << names[i] << " ";
    std::cout << std::endl;
    std::cout << "Chunk sizes: ";
    for(size_t i = 0; i < sizes.size(); i++) std::cout << sizes[i] << " ";
    std::cout << std::endl;
  } else {
    std::cout << "Chunks (type: lengths):";
    std::string last_type;
    for(size_t i = 0; i < names.size(); i++) {
      if(last_type != names[i]) {
        std::cout << std::endl;
        std::cout << " " << names[i] << ": ";
      }
      last_type = names[i];

      std::cout << sizes[i] << " ";
    }
    std::cout << std::endl;
  }

  std::map<std::string, bool> typedict;
  for(size_t i = 0; i < names.size(); i++) {
    typedict[names[i]] = true;
  }

  if(!error) {
    if(!typedict["IHDR"]) std::cout << "Error: no IHDR chunk" << std::endl;
    if(!typedict["IDAT"]) std::cout << "Error: no IDAT chunk" << std::endl;
    if(!typedict["IEND"]) std::cout << "Error: no IEND chunk" << std::endl;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x290, %rsp            # imm = 0x290
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
callq 0x317c0
movq -0x8(%rbp), %rax
testb $0x1, 0x2dd(%rax)
jne 0x27e2e
jmp 0x28711
movq -0x8(%rbp), %rdi
callq 0x31bf0
movq -0x8(%rbp), %rax
cmpl $0x0, 0x2d8(%rax)
je 0x27e49
jmp 0x28711
movq -0x10(%rbp), %rax
testb $0x1, 0x24(%rax)
je 0x27e63
leaq 0x9df6(%rip), %rax      # 0x31c50
movq %rax, -0x148(%rbp)
jmp 0x27e73
leaq 0x9e16(%rip), %rax      # 0x31c80
movq %rax, -0x148(%rbp)
jmp 0x27e73
movq -0x148(%rbp), %rsi
movq 0x1f14f(%rip), %rdi     # 0x46fd0
callq 0x20b0
movq -0x8(%rbp), %rax
addq $0x20, %rax
movq %rax, -0x18(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x31cb0
leaq -0x48(%rbp), %rdi
callq 0x31cd0
jmp 0x27ea6
movq -0x18(%rbp), %rdx
leaq -0x30(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x1b150
movl %eax, -0x14c(%rbp)
jmp 0x27ebf
movl -0x14c(%rbp), %eax
movl %eax, -0x58(%rbp)
cmpl $0x0, -0x58(%rbp)
je 0x27fd5
leaq -0x30(%rbp), %rdi
callq 0x31cf0
movb %al, -0x14d(%rbp)
jmp 0x27ee3
movb -0x14d(%rbp), %al
testb $0x1, %al
jne 0x27fa0
jmp 0x27ef3
leaq -0x30(%rbp), %rdi
callq 0x31d30
movq %rax, -0x158(%rbp)
jmp 0x27f05
movq -0x158(%rbp), %rdi
leaq 0x11a9c(%rip), %rsi     # 0x399af
callq 0x22220
movb %al, -0x159(%rbp)
jmp 0x27f20
movb -0x159(%rbp), %al
testb $0x1, %al
jne 0x27f2c
jmp 0x27fa0
leaq -0x48(%rbp), %rdi
callq 0x31d70
movq %rax, -0x168(%rbp)
jmp 0x27f3e
movq -0x168(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x27fa0
movq 0x1f07e(%rip), %rdi     # 0x46fd0
leaq 0x124bb(%rip), %rsi     # 0x3a414
callq 0x2250
movq %rax, -0x170(%rbp)
jmp 0x27f67
movq -0x170(%rbp), %rdi
movq 0x1f04b(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x27f7c
jmp 0x27fd3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x28737
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2872a
movq 0x1f029(%rip), %rdi     # 0x46fd0
leaq 0x124a3(%rip), %rsi     # 0x3a451
callq 0x2250
movq %rax, -0x178(%rbp)
jmp 0x27fbc
movq -0x178(%rbp), %rdi
movq 0x1eff6(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x27fd1
jmp 0x27fd3
jmp 0x27fd5
movq -0x10(%rbp), %rax
testb $0x1, 0x21(%rax)
je 0x28163
movq 0x1efe6(%rip), %rdi     # 0x46fd0
leaq 0x124a2(%rip), %rsi     # 0x3a493
callq 0x2250
jmp 0x27ff8
movq $0x0, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x188(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x22fe0
movq %rax, -0x180(%rbp)
jmp 0x2801d
movq -0x188(%rbp), %rax
movq -0x180(%rbp), %rcx
cmpq %rcx, %rax
jae 0x2808a
movq -0x60(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x31db0
movq %rax, -0x190(%rbp)
jmp 0x28046
movq -0x190(%rbp), %rsi
movq 0x1ef7c(%rip), %rdi     # 0x46fd0
callq 0x2210
movq %rax, -0x198(%rbp)
jmp 0x28062
movq -0x198(%rbp), %rdi
leaq 0x12d7d(%rip), %rsi     # 0x3aded
callq 0x2250
jmp 0x28077
jmp 0x28079
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x28000
movq 0x1ef3f(%rip), %rdi     # 0x46fd0
movq 0x1ef28(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2809f
movq 0x1ef2a(%rip), %rdi     # 0x46fd0
leaq 0x123f4(%rip), %rsi     # 0x3a4a1
callq 0x2250
jmp 0x280b4
movq $0x0, -0x68(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x1a8(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x239e0
movq %rax, -0x1a0(%rbp)
jmp 0x280d9
movq -0x1a8(%rbp), %rax
movq -0x1a0(%rbp), %rcx
cmpq %rcx, %rax
jae 0x28149
movq -0x68(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x31dd0
movq %rax, -0x1b0(%rbp)
jmp 0x28102
movq -0x1b0(%rbp), %rax
movq (%rax), %rsi
movq 0x1eebd(%rip), %rdi     # 0x46fd0
callq 0x2080
movq %rax, -0x1b8(%rbp)
jmp 0x28121
movq -0x1b8(%rbp), %rdi
leaq 0x12cbe(%rip), %rsi     # 0x3aded
callq 0x2250
jmp 0x28136
jmp 0x28138
movq -0x68(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x68(%rbp)
jmp 0x280bc
movq 0x1ee80(%rip), %rdi     # 0x46fd0
movq 0x1ee69(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2815e
jmp 0x28363
movq 0x1ee66(%rip), %rdi     # 0x46fd0
leaq 0x1233e(%rip), %rsi     # 0x3a4af
callq 0x2250
jmp 0x28178
leaq -0x88(%rbp), %rdi
callq 0x2370
jmp 0x28186
movq $0x0, -0x90(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x1c8(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x22fe0
movq %rax, -0x1c0(%rbp)
jmp 0x281b1
movq -0x1c8(%rbp), %rax
movq -0x1c0(%rbp), %rcx
cmpq %rcx, %rax
jae 0x28339
movq -0x90(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x31db0
movq %rax, -0x1d0(%rbp)
jmp 0x281e1
movq -0x1d0(%rbp), %rsi
leaq -0x88(%rbp), %rdi
callq 0x31df0
movb %al, -0x1d1(%rbp)
jmp 0x281fc
movb -0x1d1(%rbp), %al
testb $0x1, %al
jne 0x2820b
jmp 0x282a5
movq 0x1edbe(%rip), %rdi     # 0x46fd0
movq 0x1eda7(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x28220
movq 0x1eda9(%rip), %rdi     # 0x46fd0
leaq 0x12bbf(%rip), %rsi     # 0x3aded
callq 0x2250
movq %rax, -0x1e0(%rbp)
jmp 0x2823c
movq -0x90(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x31db0
movq %rax, -0x1e8(%rbp)
jmp 0x28255
movq -0x1e8(%rbp), %rsi
movq -0x1e0(%rbp), %rdi
callq 0x2210
movq %rax, -0x1f0(%rbp)
jmp 0x28271
movq -0x1f0(%rbp), %rdi
leaq 0x12d7a(%rip), %rsi     # 0x3aff9
callq 0x2250
jmp 0x28286
jmp 0x282a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x2170
jmp 0x2835e
movq -0x90(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x31db0
movq %rax, -0x1f8(%rbp)
jmp 0x282be
movq -0x1f8(%rbp), %rsi
leaq -0x88(%rbp), %rdi
callq 0x2050
jmp 0x282d3
movq -0x90(%rbp), %rsi
leaq -0x48(%rbp), %rdi
callq 0x31dd0
movq %rax, -0x200(%rbp)
jmp 0x282ec
movq -0x200(%rbp), %rax
movq (%rax), %rsi
movq 0x1ecd3(%rip), %rdi     # 0x46fd0
callq 0x2080
movq %rax, -0x208(%rbp)
jmp 0x2830b
movq -0x208(%rbp), %rdi
leaq 0x12ad4(%rip), %rsi     # 0x3aded
callq 0x2250
jmp 0x28320
jmp 0x28322
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x28191
movq 0x1ec90(%rip), %rdi     # 0x46fd0
movq 0x1ec79(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x2834e
leaq -0x88(%rbp), %rdi
callq 0x2170
jmp 0x2835c
jmp 0x28363
jmp 0x2872a
leaq -0xc0(%rbp), %rdi
callq 0x31e20
jmp 0x28371
movq $0x0, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
movq %rax, -0x218(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x22fe0
movq %rax, -0x210(%rbp)
jmp 0x2839c
movq -0x218(%rbp), %rax
movq -0x210(%rbp), %rcx
cmpq %rcx, %rax
jae 0x28416
movq -0xc8(%rbp), %rsi
leaq -0x30(%rbp), %rdi
callq 0x31db0
movq %rax, -0x220(%rbp)
jmp 0x283c8
movq -0x220(%rbp), %rsi
leaq -0xc0(%rbp), %rdi
callq 0x31e40
movq %rax, -0x228(%rbp)
jmp 0x283e4
movq -0x228(%rbp), %rax
movb $0x1, (%rax)
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xc8(%rbp)
jmp 0x2837c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x2871a
cmpl $0x0, -0x58(%rbp)
jne 0x286ef
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x230(%rbp)
callq 0x2440
movq -0x230(%rbp), %rdx
leaq 0x1011a(%rip), %rsi     # 0x3855b
leaq -0xe8(%rbp), %rdi
callq 0x2360
jmp 0x2844f
leaq -0xc0(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x31e40
movq %rax, -0x238(%rbp)
jmp 0x2846b
movq -0x238(%rbp), %rax
movb (%rax), %al
xorb $0x1, %al
movb %al, -0x239(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x2170
jmp 0x2848a
leaq -0xe9(%rbp), %rdi
callq 0x22b0
movb -0x239(%rbp), %al
testb $0x1, %al
jne 0x284a2
jmp 0x28510
movq 0x1eb27(%rip), %rdi     # 0x46fd0
leaq 0x12017(%rip), %rsi     # 0x3a4c7
callq 0x2250
movq %rax, -0x248(%rbp)
jmp 0x284be
movq -0x248(%rbp), %rdi
movq 0x1eaf4(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x284d3
jmp 0x28510
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x284ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x2170
jmp 0x284fd
jmp 0x284ff
leaq -0xe9(%rbp), %rdi
callq 0x22b0
jmp 0x2871a
leaq -0x111(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x2440
movq -0x250(%rbp), %rdx
leaq 0x11479(%rip), %rsi     # 0x399aa
leaq -0x110(%rbp), %rdi
callq 0x2360
jmp 0x2853f
leaq -0xc0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x31e40
movq %rax, -0x258(%rbp)
jmp 0x2855b
movq -0x258(%rbp), %rax
movb (%rax), %al
xorb $0x1, %al
movb %al, -0x259(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x2170
jmp 0x2857a
leaq -0x111(%rbp), %rdi
callq 0x22b0
movb -0x259(%rbp), %al
testb $0x1, %al
jne 0x28592
jmp 0x28600
movq 0x1ea37(%rip), %rdi     # 0x46fd0
leaq 0x11f3c(%rip), %rsi     # 0x3a4dc
callq 0x2250
movq %rax, -0x268(%rbp)
jmp 0x285ae
movq -0x268(%rbp), %rdi
movq 0x1ea04(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x285c3
jmp 0x28600
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x285ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x2170
jmp 0x285ed
jmp 0x285ef
leaq -0x111(%rbp), %rdi
callq 0x22b0
jmp 0x2871a
leaq -0x139(%rbp), %rdi
movq %rdi, -0x270(%rbp)
callq 0x2440
movq -0x270(%rbp), %rdx
leaq 0x1138e(%rip), %rsi     # 0x399af
leaq -0x138(%rbp), %rdi
callq 0x2360
jmp 0x2862f
leaq -0xc0(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x31e40
movq %rax, -0x278(%rbp)
jmp 0x2864b
movq -0x278(%rbp), %rax
movb (%rax), %al
xorb $0x1, %al
movb %al, -0x279(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x2170
jmp 0x2866a
leaq -0x139(%rbp), %rdi
callq 0x22b0
movb -0x279(%rbp), %al
testb $0x1, %al
jne 0x28682
jmp 0x286ed
movq 0x1e947(%rip), %rdi     # 0x46fd0
leaq 0x11e61(%rip), %rsi     # 0x3a4f1
callq 0x2250
movq %rax, -0x288(%rbp)
jmp 0x2869e
movq -0x288(%rbp), %rdi
movq 0x1e914(%rip), %rsi     # 0x46fc0
callq 0x22a0
jmp 0x286b3
jmp 0x286ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x286df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x2170
jmp 0x286dd
jmp 0x286df
leaq -0x139(%rbp), %rdi
callq 0x22b0
jmp 0x2871a
jmp 0x286ef
leaq -0xc0(%rbp), %rdi
callq 0x31f70
jmp 0x286fd
leaq -0x48(%rbp), %rdi
callq 0x31f90
jmp 0x28708
leaq -0x30(%rbp), %rdi
callq 0x32010
addq $0x290, %rsp            # imm = 0x290
popq %rbp
retq
leaq -0xc0(%rbp), %rdi
callq 0x31f70
jmp 0x28728
jmp 0x2872a
leaq -0x48(%rbp), %rdi
callq 0x31f90
jmp 0x28735
jmp 0x28737
leaq -0x30(%rbp), %rdi
callq 0x32010
jmp 0x28742
jmp 0x28744
movq -0x50(%rbp), %rdi
callq 0x2430
movq %rax, %rdi
callq 0x19400
nopw %cs:(%rax,%rax)