// File: /workspace/github_cpp_makefile_star2_O2/tanakh[P]icfpc2015/./picojson.h
// Function: void picojson::value::_serialize<std::ostream_iterator<char, char, std::char_traits<char>>>(std::ostream_iterator<char, char, std::char_traits<char>>, int) const
void value::_serialize(Iter oi, int indent) const {
    switch (type_) {
    case string_type:
      serialize_str(*u_.string_, oi);
      break;
    case array_type: {
      *oi++ = '[';
      if (indent != -1) {
        ++indent;
      }
      for (array::const_iterator i = u_.array_->begin();
           i != u_.array_->end();
           ++i) {
	if (i != u_.array_->begin()) {
	  *oi++ = ',';
	}
        if (indent != -1) {
          _indent(oi, indent);
        }
	i->_serialize(oi, indent);
      }
      if (indent != -1) {
        --indent;
        if (! u_.array_->empty()) {
          _indent(oi, indent);
        }
      }
      *oi++ = ']';
      break;
    }
    case object_type: {
      *oi++ = '{';
      if (indent != -1) {
        ++indent;
      }
      for (object::const_iterator i = u_.object_->begin();
	   i != u_.object_->end();
	   ++i) {
	if (i != u_.object_->begin()) {
	  *oi++ = ',';
	}
        if (indent != -1) {
          _indent(oi, indent);
        }
	serialize_str(i->first, oi);
	*oi++ = ':';
        if (indent != -1) {
          *oi++ = ' ';
        }
        i->second._serialize(oi, indent);
      }
      if (indent != -1) {
        --indent;
        if (! u_.object_->empty()) {
          _indent(oi, indent);
        }
      }
      *oi++ = '}';
      break;
    }
    default:
      copy(to_str(), oi);
      break;
    }
    if (indent == 0) {
      *oi++ = '\n';
    }
  }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb8, %rsp
movl %edx, %r13d
movq %rsi, %rbx
movq %rdi, %r14
movl (%rdi), %eax
cmpl $0x5, %eax
je 0xbbea
cmpl $0x4, %eax
je 0xbb3d
cmpl $0x3, %eax
jne 0xbd0c
movq 0x8(%r14), %rdi
movups (%rbx), %xmm0
leaq 0xa0(%rsp), %rsi
movaps %xmm0, (%rsi)
callq 0xbd6d
jmp 0xbd35
movq %rsp, %rsi
movb $0x5b, (%rsi)
movq %rbx, %rdi
callq 0xc014
movl %r13d, %ebp
incl %ebp
pushq $-0x1
popq %rax
cmovel %eax, %ebp
movq 0x8(%r14), %rax
movq (%rax), %r12
leaq 0x50(%rsp), %r13
leaq 0x60(%rsp), %r15
cmpq 0x8(%rax), %r12
je 0xbbb7
cmpq (%rax), %r12
je 0xbb81
movb $0x2c, (%rsp)
movq %rbx, %rdi
movq %rsp, %rsi
callq 0xc014
cmpl $-0x1, %ebp
je 0xbb98
movups (%rbx), %xmm0
movaps %xmm0, 0x60(%rsp)
movq %r15, %rdi
movl %ebp, %esi
callq 0xc03a
movups (%rbx), %xmm0
movaps %xmm0, 0x50(%rsp)
movq %r12, %rdi
movq %r13, %rsi
movl %ebp, %edx
callq 0xbaee
addq $0x10, %r12
movq 0x8(%r14), %rax
jmp 0xbb67
cmpl $-0x1, %ebp
pushq $-0x1
popq %r13
je 0xbbdf
decl %ebp
cmpq (%rax), %r12
je 0xbbdc
movups (%rbx), %xmm0
leaq 0x90(%rsp), %rdi
movaps %xmm0, (%rdi)
movl %ebp, %esi
callq 0xc03a
movl %ebp, %r13d
movq %rsp, %rsi
movb $0x5d, (%rsi)
jmp 0xbd02
movq %rsp, %r12
movb $0x7b, (%r12)
movq %rbx, %rdi
movq %r12, %rsi
callq 0xc014
movl %r13d, %r15d
incl %r15d
pushq $-0x1
popq %rax
cmovel %eax, %r15d
movq 0x8(%r14), %rax
movq 0x18(%rax), %r13
leaq 0x30(%rsp), %rbp
leaq 0x8(%rax), %rcx
cmpq %rcx, %r13
je 0xbccf
cmpq 0x18(%rax), %r13
je 0xbc39
movb $0x2c, (%rsp)
movq %rbx, %rdi
movq %r12, %rsi
callq 0xc014
cmpl $-0x1, %r15d
je 0xbc7f
movups (%rbx), %xmm0
movaps %xmm0, 0x40(%rsp)
leaq 0x40(%rsp), %rdi
movl %r15d, %esi
callq 0xc03a
leaq 0x20(%r13), %rdi
movups (%rbx), %xmm0
movaps %xmm0, 0x20(%rsp)
leaq 0x20(%rsp), %rsi
callq 0xbd6d
movb $0x3a, (%rsp)
movq %rbx, %rdi
movq %r12, %rsi
callq 0xc014
movb $0x20, (%rsp)
jmp 0xbc99
leaq 0x20(%r13), %rdi
movups (%rbx), %xmm0
movaps %xmm0, 0x20(%rsp)
leaq 0x20(%rsp), %rsi
callq 0xbd6d
movb $0x3a, (%rsp)
movq %rbx, %rdi
movq %r12, %rsi
callq 0xc014
leaq 0x40(%r13), %rdi
movups (%rbx), %xmm0
movaps %xmm0, 0x30(%rsp)
movq %rbp, %rsi
movl %r15d, %edx
callq 0xbaee
movq %r13, %rdi
callq 0x3340
movq %rax, %r13
movq 0x8(%r14), %rax
jmp 0xbc17
cmpl $-0x1, %r15d
pushq $-0x1
popq %r13
je 0xbcfc
decl %r15d
cmpq $0x0, 0x28(%rax)
je 0xbcf9
movups (%rbx), %xmm0
leaq 0x80(%rsp), %rdi
movaps %xmm0, (%rdi)
movl %r15d, %esi
callq 0xc03a
movl %r15d, %r13d
movq %rsp, %rsi
movb $0x7d, (%rsi)
movq %rbx, %rdi
callq 0xc014
jmp 0xbd35
movq %rsp, %r15
movq %r15, %rdi
movq %r14, %rsi
callq 0xc0b0
movups (%rbx), %xmm0
leaq 0x70(%rsp), %rsi
movaps %xmm0, (%rsi)
movq %r15, %rdi
callq 0xc086
movq %rsp, %rdi
callq 0x3550
testl %r13d, %r13d
jne 0xbd48
movq %rsp, %rsi
movb $0xa, (%rsi)
movq %rbx, %rdi
callq 0xc014
addq $0xb8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq %rsp, %rdi
callq 0x3550
movq %rbx, %rdi
callq 0x34a0