// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/comicchat.c
// Function: comicchat_read_chunk
static void comicchat_read_chunk(deark *c, lctx *d, i64 pos1)
{
	struct chunk_ctx *cctx = NULL;
	int ret;
	i64 foundpos = 0;
	i64 n;
	int saved_indent_level;

	de_dbg_indent_save(c, &saved_indent_level);
	cctx = de_malloc(c, sizeof(struct chunk_ctx));
	cctx->ck_pos = pos1;
	d->last_chunklen = 0;
	if(cctx->ck_pos+2 > c->infile->len) goto done;
	cctx->ck_type = (UI)de_getu16le(cctx->ck_pos);
	de_dbg(c, "chunk at %"I64_FMT", type=0x%04x (%s)", cctx->ck_pos, (UI)cctx->ck_type,
		get_chunk_type_name(cctx->ck_type));
	de_dbg_indent(c, 1);

	if(cctx->ck_type==0x0001) {
		ret = dbuf_search_byte(c->infile, 0x00, cctx->ck_pos+2, 4096, &foundpos);
		if(ret) {
			cctx->ck_len = foundpos + 1 - cctx->ck_pos;
			handle_chunk_string(c, d, cctx->ck_pos+2, cctx->ck_len-2,
				d->char_name, "char name");
		}
	}
	else if(cctx->ck_type==0x0002) {
		cctx->ck_len = 4;
	}
	else if(cctx->ck_type==0x0003) {
		cctx->ck_len = 6;
		handle_chunk_1imageptr(c, d, cctx, 2);
	}
	else if(cctx->ck_type==0x0004) {
		n = de_getu16le(cctx->ck_pos+2);
		cctx->ck_len = 4 + 43*n;
		handle_chunk_multiimageptr(c, d, cctx, 4, 43, n);
	}
	else if(cctx->ck_type==0x0005 || cctx->ck_type==0x0009) {
		n = de_getu16le(cctx->ck_pos+2);
		cctx->ck_len = 4 + 35*n;
		handle_chunk_multiimageptr(c, d, cctx, 4, 35, n);
	}
	else if(cctx->ck_type==0x0006 || cctx->ck_type==0x0007) {
		cctx->ck_len = 2;
		d->stopflag = 1;
		goto done;
	}
	else if(cctx->ck_type==0x0008) {
		cctx->ck_len = 4;
	}
	else if(cctx->ck_type==0x000a) {
		n = de_getu16le(cctx->ck_pos+2);
		cctx->ck_len = 4 + 33*n;
		handle_chunk_multiimageptr(c, d, cctx, 4, 33, n);
	}
	else if(cctx->ck_type==0x000b || cctx->ck_type==0x000c) {
		n = de_getu16le(cctx->ck_pos+2);
		cctx->ck_len = 4 + 25*n;
		handle_chunk_multiimageptr(c, d, cctx, 4, 25, n);
	}
	else if(cctx->ck_type>=0x0100 && cctx->ck_type<=0x01ff) {
		i64 dlen_field;

		dlen_field = de_getu16le(cctx->ck_pos+2);
		cctx->ck_len = dlen_field + 4;

		if(cctx->ck_type==0x0100 || cctx->ck_type==0x0102) {
			handle_chunk_1imageptr(c, d, cctx, 4);
		}
		else if(cctx->ck_type==0x0103) {
			handle_chunk_string(c, d, cctx->ck_pos+4, cctx->ck_len-4, d->tmpstr,
				"copyright/author");
		}
		else if(cctx->ck_type==0x0104) {
			handle_chunk_string(c, d, cctx->ck_pos+4, cctx->ck_len-4, d->tmpstr, "url1");
		}
		else if(cctx->ck_type==0x0105) {
			handle_chunk_string(c, d, cctx->ck_pos+4, cctx->ck_len-4, d->tmpstr, "url2");
		}
		else if(cctx->ck_type==0x0107) {
			n = de_getu32le(cctx->ck_pos+4);
			d->img_ptr_bias += n;
			de_sanitize_offset(&d->img_ptr_bias);
			de_dbg(c, "image pointer bias: %"I64_FMT, n);
		}
	}

	if(cctx->ck_len<2) {
		de_err(c, "Invalid file or unsupported chunk (0x%04x); can't continue",
			cctx->ck_type);
		d->stopflag = 1;
		goto done;
	}

	de_dbg(c, "chunk len: %"I64_FMT, cctx->ck_len);
	if(c->debug_level>=3) {
		de_dbg_hexdump(c, c->infile, cctx->ck_pos, cctx->ck_len, 256, NULL, 0x1);
	}
	d->last_chunklen = cctx->ck_len;

done:
	de_free(c, cctx);
	de_dbg_indent_restore(c, saved_indent_level);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x8(%rbp), %rdi
leaq -0x3c(%rbp), %rsi
callq 0x15b580
movq -0x8(%rbp), %rdi
movl $0x18, %esi
callq 0x15b780
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq $0x0, 0x18(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
addq $0x2, %rax
movq -0x8(%rbp), %rcx
movq 0x18(%rcx), %rcx
cmpq 0x18(%rcx), %rax
jle 0x8a26a
jmp 0x8a7c8
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x165280
movl %eax, %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movq -0x8(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x58(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x4c(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %edi
callq 0x8a7f0
movq -0x60(%rbp), %rdi
movq -0x58(%rbp), %rdx
movl -0x4c(%rbp), %ecx
movq %rax, %r8
leaq 0x124c1f(%rip), %rsi    # 0x1aeee3
movb $0x0, %al
callq 0x15b0d0
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0x15b560
movq -0x20(%rbp), %rax
cmpl $0x1, (%rax)
jne 0x8a360
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdx
addq $0x2, %rdx
xorl %esi, %esi
movl $0x1000, %ecx           # imm = 0x1000
leaq -0x30(%rbp), %r8
callq 0x1667a0
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x8a35b
movq -0x30(%rbp), %rcx
addq $0x1, %rcx
movq -0x20(%rbp), %rax
subq 0x8(%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdx
addq $0x2, %rdx
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
subq $0x2, %rcx
movq -0x10(%rbp), %rax
movq 0x28(%rax), %r8
leaq 0x124bac(%rip), %r9     # 0x1aef02
callq 0x8a950
jmp 0x8a735
movq -0x20(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x8a37a
movq -0x20(%rbp), %rax
movq $0x4, 0x10(%rax)
jmp 0x8a733
movq -0x20(%rbp), %rax
cmpl $0x3, (%rax)
jne 0x8a3aa
movq -0x20(%rbp), %rax
movq $0x6, 0x10(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movl $0x2, %ecx
callq 0x8a9e0
jmp 0x8a731
movq -0x20(%rbp), %rax
cmpl $0x4, (%rax)
jne 0x8a406
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
addq $0x2, %rsi
callq 0x165280
movq %rax, -0x38(%rbp)
imulq $0x2b, -0x38(%rbp), %rcx
addq $0x4, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %r9
movl $0x4, %ecx
movl $0x2b, %r8d
callq 0x8aa40
jmp 0x8a72f
movq -0x20(%rbp), %rax
cmpl $0x5, (%rax)
je 0x8a418
movq -0x20(%rbp), %rax
cmpl $0x9, (%rax)
jne 0x8a46b
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
addq $0x2, %rsi
callq 0x165280
movq %rax, -0x38(%rbp)
imulq $0x23, -0x38(%rbp), %rcx
addq $0x4, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %r9
movl $0x4, %ecx
movl $0x23, %r8d
callq 0x8aa40
jmp 0x8a72d
movq -0x20(%rbp), %rax
cmpl $0x6, (%rax)
je 0x8a47d
movq -0x20(%rbp), %rax
cmpl $0x7, (%rax)
jne 0x8a496
movq -0x20(%rbp), %rax
movq $0x2, 0x10(%rax)
movq -0x10(%rbp), %rax
movb $0x1, 0x4(%rax)
jmp 0x8a7c8
movq -0x20(%rbp), %rax
cmpl $0x8, (%rax)
jne 0x8a4b0
movq -0x20(%rbp), %rax
movq $0x4, 0x10(%rax)
jmp 0x8a729
movq -0x20(%rbp), %rax
cmpl $0xa, (%rax)
jne 0x8a50c
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
addq $0x2, %rsi
callq 0x165280
movq %rax, -0x38(%rbp)
imulq $0x21, -0x38(%rbp), %rcx
addq $0x4, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %r9
movl $0x4, %ecx
movl $0x21, %r8d
callq 0x8aa40
jmp 0x8a727
movq -0x20(%rbp), %rax
cmpl $0xb, (%rax)
je 0x8a51e
movq -0x20(%rbp), %rax
cmpl $0xc, (%rax)
jne 0x8a571
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
addq $0x2, %rsi
callq 0x165280
movq %rax, -0x38(%rbp)
imulq $0x19, -0x38(%rbp), %rcx
addq $0x4, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x38(%rbp), %r9
movl $0x4, %ecx
movl $0x19, %r8d
callq 0x8aa40
jmp 0x8a725
movq -0x20(%rbp), %rax
cmpl $0x100, (%rax)          # imm = 0x100
jb 0x8a723
movq -0x20(%rbp), %rax
cmpl $0x1ff, (%rax)          # imm = 0x1FF
ja 0x8a723
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
addq $0x2, %rsi
callq 0x165280
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rcx
addq $0x4, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x20(%rbp), %rax
cmpl $0x100, (%rax)          # imm = 0x100
je 0x8a5d6
movq -0x20(%rbp), %rax
cmpl $0x102, (%rax)          # imm = 0x102
jne 0x8a5f1
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movl $0x4, %ecx
callq 0x8a9e0
jmp 0x8a721
movq -0x20(%rbp), %rax
cmpl $0x103, (%rax)          # imm = 0x103
jne 0x8a636
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdx
addq $0x4, %rdx
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
subq $0x4, %rcx
movq -0x10(%rbp), %rax
movq 0x30(%rax), %r8
leaq 0x1248e0(%rip), %r9     # 0x1aef0c
callq 0x8a950
jmp 0x8a71f
movq -0x20(%rbp), %rax
cmpl $0x104, (%rax)          # imm = 0x104
jne 0x8a67b
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdx
addq $0x4, %rdx
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
subq $0x4, %rcx
movq -0x10(%rbp), %rax
movq 0x30(%rax), %r8
leaq 0x1248ac(%rip), %r9     # 0x1aef1d
callq 0x8a950
jmp 0x8a71d
movq -0x20(%rbp), %rax
cmpl $0x105, (%rax)          # imm = 0x105
jne 0x8a6bd
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdx
addq $0x4, %rdx
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
subq $0x4, %rcx
movq -0x10(%rbp), %rax
movq 0x30(%rax), %r8
leaq 0x12486c(%rip), %r9     # 0x1aef22
callq 0x8a950
jmp 0x8a71b
movq -0x20(%rbp), %rax
cmpl $0x107, (%rax)          # imm = 0x107
jne 0x8a719
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
addq $0x4, %rsi
callq 0x165540
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rcx
movq -0x10(%rbp), %rax
addq 0x20(%rax), %rcx
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rdi
addq $0x20, %rdi
callq 0x15f830
movq -0x8(%rbp), %rdi
movq -0x38(%rbp), %rdx
leaq 0x124815(%rip), %rsi    # 0x1aef27
movb $0x0, %al
callq 0x15b0d0
jmp 0x8a71b
jmp 0x8a71d
jmp 0x8a71f
jmp 0x8a721
jmp 0x8a723
jmp 0x8a725
jmp 0x8a727
jmp 0x8a729
jmp 0x8a72b
jmp 0x8a72d
jmp 0x8a72f
jmp 0x8a731
jmp 0x8a733
jmp 0x8a735
movq -0x20(%rbp), %rax
cmpq $0x2, 0x10(%rax)
jge 0x8a762
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %edx
leaq 0x1247ee(%rip), %rsi    # 0x1aef3f
movb $0x0, %al
callq 0x15bfb0
movq -0x10(%rbp), %rax
movb $0x1, 0x4(%rax)
jmp 0x8a7c8
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rdx
leaq 0x123359(%rip), %rsi    # 0x1adace
movb $0x0, %al
callq 0x15b0d0
movq -0x8(%rbp), %rax
cmpl $0x3, (%rax)
jl 0x8a7b8
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
movl $0x100, %r8d            # imm = 0x100
xorl %eax, %eax
movl %eax, %r9d
movl $0x1, (%rsp)
callq 0x15b840
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x15b820
movq -0x8(%rbp), %rdi
movl -0x3c(%rbp), %esi
callq 0x15b5a0
addq $0x70, %rsp
popq %rbp
retq
nopw (%rax,%rax)