// File: Alcaro[P]bridges/arlib/image-png-decode.cpp
// Function: oimage::init_decode_png(arrayview<unsigned char>)::pngreader::chunk_raw()
pngchunk chunk_raw()
		{
			pngchunk ret;
			ret.type = 0; // invalid value, looks like an unrecognized critical chunk and will propagate outwards
			
			if (remaining() < 12) return ret;
			ret.len = u32b();
			
			if (ret.len >= 0x80000000 || remaining()-8 < ret.len) return ret;
			
			uint32_t crc32_actual = crc32(peekbytes(4+ret.len));
			
			ret.type = u32b();
			ret.init(bytes(ret.len));
			
			uint32_t crc32_exp = u32b();
			if (crc32_actual != crc32_exp) ret.type = 0;
			
			return ret;
		}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1a0, %rsp            # imm = 0x1A0
movq %rdi, -0x178(%rbp)
movq %rdi, %rax
movq %rax, -0x180(%rbp)
movq %rdi, -0x130(%rbp)
movq %rsi, -0x138(%rbp)
movq -0x138(%rbp), %rax
movq %rax, -0x170(%rbp)
callq 0x15f00
movq -0x178(%rbp), %rdi
movq -0x170(%rbp), %rax
movl $0x0, 0x18(%rdi)
movq %rax, -0x120(%rbp)
movq -0x120(%rbp), %rcx
movq 0x10(%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rcx, %rax
cmpq $0xc, %rax
jae 0x15b66
jmp 0x15e8c
movq -0x170(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x98(%rbp)
movq $0x4, -0xa0(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0x188(%rbp)
movq 0x8(%rax), %rsi
movq -0xa0(%rbp), %rdx
leaq -0x90(%rbp), %rdi
callq 0x5d70
movq -0x188(%rbp), %rax
movq -0xa0(%rbp), %rdx
movq 0x8(%rax), %rcx
addq %rdx, %rcx
movq %rcx, 0x8(%rax)
movq -0x90(%rbp), %rcx
movq -0x88(%rbp), %rax
movq %rcx, -0xe8(%rbp)
movq %rax, -0xe0(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x62c0
movq %rax, %rcx
movq -0x178(%rbp), %rax
movq %rcx, -0xc8(%rbp)
movq -0xc8(%rbp), %rcx
movl (%rcx), %ecx
movl %ecx, -0xcc(%rbp)
movl -0xcc(%rbp), %ecx
bswapl %ecx
movl %ecx, 0x1c(%rax)
cmpl $0x80000000, 0x1c(%rax) # imm = 0x80000000
jae 0x15c5a
movq -0x178(%rbp), %rcx
movq -0x170(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0x128(%rbp), %rdx
movq 0x10(%rdx), %rax
movq 0x8(%rdx), %rdx
subq %rdx, %rax
subq $0x8, %rax
movl 0x1c(%rcx), %ecx
cmpq %rcx, %rax
jae 0x15c5f
jmp 0x15e8c
movq -0x170(%rbp), %rcx
movq -0x178(%rbp), %rax
movl 0x1c(%rax), %eax
addl $0x4, %eax
movq %rcx, -0x18(%rbp)
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x20(%rbp), %rdx
leaq -0x10(%rbp), %rdi
callq 0x5d70
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, -0x150(%rbp)
movq %rax, -0x148(%rbp)
movq -0x150(%rbp), %rdi
movq -0x148(%rbp), %rsi
callq 0x16fd0
movl %eax, %ecx
movq -0x170(%rbp), %rax
movl %ecx, -0x13c(%rbp)
movq %rax, -0xf0(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0x78(%rbp)
movq $0x4, -0x80(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq 0x8(%rax), %rsi
movq -0x80(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x5d70
movq -0x1a0(%rbp), %rax
movq -0x80(%rbp), %rdx
movq 0x8(%rax), %rcx
addq %rdx, %rcx
movq %rcx, 0x8(%rax)
movq -0x70(%rbp), %rcx
movq -0x68(%rbp), %rax
movq %rcx, -0x100(%rbp)
movq %rax, -0xf8(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x62c0
movq -0x170(%rbp), %rcx
movq %rax, %rdx
movq -0x178(%rbp), %rax
movq %rdx, -0xb8(%rbp)
movq -0xb8(%rbp), %rdx
movl (%rdx), %edx
movl %edx, -0xbc(%rbp)
movl -0xbc(%rbp), %edx
bswapl %edx
movl %edx, 0x18(%rax)
movl 0x1c(%rax), %eax
movq %rcx, -0x38(%rbp)
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x198(%rbp)
movq 0x8(%rax), %rsi
movq -0x40(%rbp), %rdx
leaq -0x30(%rbp), %rdi
callq 0x5d70
movq -0x198(%rbp), %rax
movq -0x178(%rbp), %rdi
movq -0x40(%rbp), %rdx
movq 0x8(%rax), %rcx
addq %rdx, %rcx
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, -0x160(%rbp)
movq %rax, -0x158(%rbp)
movq -0x160(%rbp), %rsi
movq -0x158(%rbp), %rdx
callq 0x18230
movq -0x170(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0x58(%rbp)
movq $0x4, -0x60(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x190(%rbp)
movq 0x8(%rax), %rsi
movq -0x60(%rbp), %rdx
leaq -0x50(%rbp), %rdi
callq 0x5d70
movq -0x190(%rbp), %rax
movq -0x60(%rbp), %rdx
movq 0x8(%rax), %rcx
addq %rdx, %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rcx
movq -0x48(%rbp), %rax
movq %rcx, -0x118(%rbp)
movq %rax, -0x110(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x62c0
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xac(%rbp)
movl -0xac(%rbp), %eax
bswapl %eax
movl %eax, -0x164(%rbp)
movl -0x13c(%rbp), %eax
cmpl -0x164(%rbp), %eax
je 0x15e8a
movq -0x178(%rbp), %rax
movl $0x0, 0x18(%rax)
jmp 0x15e8c
movq -0x180(%rbp), %rax
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbp
retq
nopl (%rax)