// File: /workspace/github_cpp_makefile_star2_O3/lvandeve[P]base256/base256.cpp
// Function: unicode_to_utf8(std::vector<int, std::allocator<int>> const&)
std::vector<uint8_t> unicode_to_utf8(const std::vector<int>& a) {
  std::vector<uint8_t> result;
  for(int i = 0; i < a.size(); i++) {
    int code_point = a[i];
    if(code_point < 128) {
      result.push_back(code_point);
    } else if(code_point <= 2047) {
      result.push_back((code_point >> 6) + 192);
      result.push_back((code_point & 63) + 128);
    } else if(code_point <= 65535) {
      result.push_back((code_point >> 12) + 224);
      result.push_back(((code_point >> 6) & 63) + 128);
      result.push_back((code_point & 63) + 128);
    } else if(code_point <= 1114111) {
      result.push_back((code_point >> 18) + 240);
      result.push_back(((code_point >> 12) & 63) + 128);
      result.push_back(((code_point >> 6) & 63) + 128);
      result.push_back((code_point & 63) + 128);
    } else {
      // error, add replacement character
      result.push_back(239);
      result.push_back(191);
      result.push_back(189);
    }
  }
  return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
xorps %xmm0, %xmm0
movups %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
movq (%rsi), %rax
cmpq %rax, 0x8(%rsi)
je 0x611d
movq %rsi, %r14
xorl %ebp, %ebp
leaq 0x17(%rsp), %r15
leaq 0x15(%rsp), %r13
movl (%rax,%rbp,4), %r12d
cmpl $0x7f, %r12d
jg 0x5e9f
movb %r12b, 0x17(%rsp)
movq 0x8(%rbx), %rsi
cmpq 0x10(%rbx), %rsi
jne 0x60dc
movq %rbx, %rdi
movq %r15, %rdx
callq 0xfdc0
jmp 0x60e3
cmpl $0x7ff, %r12d           # imm = 0x7FF
ja 0x5ecd
movl %r12d, %eax
shrl $0x6, %eax
orb $-0x40, %al
movb %al, 0x16(%rsp)
movq 0x8(%rbx), %rsi
cmpq 0x10(%rbx), %rsi
je 0x5f37
movb %al, (%rsi)
movq 0x8(%rbx), %rsi
incq %rsi
movq %rsi, 0x8(%rbx)
jmp 0x5f48
cmpl $0xffff, %r12d          # imm = 0xFFFF
ja 0x5f02
movl %r12d, %eax
shrl $0xc, %eax
orb $-0x20, %al
movb %al, 0x14(%rsp)
movq 0x8(%rbx), %rsi
cmpq 0x10(%rbx), %rsi
je 0x5f95
movb %al, (%rsi)
movq 0x8(%rbx), %rsi
incq %rsi
movq %rsi, 0x8(%rbx)
jmp 0x5fa6
cmpl $0x10ffff, %r12d        # imm = 0x10FFFF
ja 0x5f6f
movl %r12d, %eax
shrl $0x12, %eax
orb $-0x10, %al
movb %al, 0x11(%rsp)
movq 0x8(%rbx), %rsi
cmpq 0x10(%rbx), %rsi
je 0x6003
movb %al, (%rsi)
movq 0x8(%rbx), %rsi
incq %rsi
movq %rsi, 0x8(%rbx)
jmp 0x6014
movq %rbx, %rdi
leaq 0x16(%rsp), %rdx
callq 0xfdc0
movq 0x8(%rbx), %rsi
andb $0x3f, %r12b
orb $-0x80, %r12b
movb %r12b, 0x15(%rsp)
cmpq 0x10(%rbx), %rsi
jne 0x60dc
movq %rbx, %rdi
movq %r13, %rdx
callq 0xfdc0
jmp 0x60e3
movb $-0x11, 0xd(%rsp)
movq 0x8(%rbx), %rsi
cmpq 0x10(%rbx), %rsi
je 0x6037
movb $-0x11, (%rsi)
movq 0x8(%rbx), %rsi
incq %rsi
movq %rsi, 0x8(%rbx)
jmp 0x6048
movq %rbx, %rdi
leaq 0x14(%rsp), %rdx
callq 0xfdc0
movq 0x8(%rbx), %rsi
movl %r12d, %eax
shrl $0x6, %eax
andb $0x3f, %al
orb $-0x80, %al
movb %al, 0x13(%rsp)
cmpq 0x10(%rbx), %rsi
je 0x5fc9
movb %al, (%rsi)
movq 0x8(%rbx), %rsi
incq %rsi
movq %rsi, 0x8(%rbx)
jmp 0x5fda
movq %rbx, %rdi
leaq 0x13(%rsp), %rdx
callq 0xfdc0
movq 0x8(%rbx), %rsi
andb $0x3f, %r12b
orb $-0x80, %r12b
movb %r12b, 0x12(%rsp)
cmpq 0x10(%rbx), %rsi
jne 0x60dc
movq %rbx, %rdi
leaq 0x12(%rsp), %rdx
callq 0xfdc0
jmp 0x60e3
movq %rbx, %rdi
leaq 0x11(%rsp), %rdx
callq 0xfdc0
movq 0x8(%rbx), %rsi
movl %r12d, %eax
shrl $0xc, %eax
andb $0x3f, %al
orb $-0x80, %al
movb %al, 0x10(%rsp)
cmpq 0x10(%rbx), %rsi
je 0x6063
movb %al, (%rsi)
movq 0x8(%rbx), %rsi
incq %rsi
movq %rsi, 0x8(%rbx)
jmp 0x6074
movq %rbx, %rdi
leaq 0xd(%rsp), %rdx
callq 0xfdc0
movq 0x8(%rbx), %rsi
movb $-0x41, 0xc(%rsp)
cmpq 0x10(%rbx), %rsi
je 0x6097
movb $-0x41, (%rsi)
movq 0x8(%rbx), %rsi
incq %rsi
movq %rsi, 0x8(%rbx)
jmp 0x60a8
movq %rbx, %rdi
leaq 0x10(%rsp), %rdx
callq 0xfdc0
movq 0x8(%rbx), %rsi
movl %r12d, %eax
shrl $0x6, %eax
andb $0x3f, %al
orb $-0x80, %al
movb %al, 0xf(%rsp)
cmpq 0x10(%rbx), %rsi
je 0x60b8
movb %al, (%rsi)
movq 0x8(%rbx), %rsi
incq %rsi
movq %rsi, 0x8(%rbx)
jmp 0x60c9
movq %rbx, %rdi
leaq 0xc(%rsp), %rdx
callq 0xfdc0
movq 0x8(%rbx), %rsi
movb $-0x43, 0xb(%rsp)
cmpq 0x10(%rbx), %rsi
je 0x60ff
movb $-0x43, (%rsi)
jmp 0x60df
movq %rbx, %rdi
leaq 0xf(%rsp), %rdx
callq 0xfdc0
movq 0x8(%rbx), %rsi
andb $0x3f, %r12b
orb $-0x80, %r12b
movb %r12b, 0xe(%rsp)
cmpq 0x10(%rbx), %rsi
je 0x610e
movb %r12b, (%rsi)
incq 0x8(%rbx)
incq %rbp
movq (%r14), %rax
movq 0x8(%r14), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %rbp, %rcx
ja 0x5e72
jmp 0x611d
movq %rbx, %rdi
leaq 0xb(%rsp), %rdx
callq 0xfdc0
jmp 0x60e3
movq %rbx, %rdi
leaq 0xe(%rsp), %rdx
callq 0xfdc0
jmp 0x60e3
movq %rbx, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x6147
jmp 0x6147
jmp 0x6147
jmp 0x6147
jmp 0x6147
jmp 0x6147
jmp 0x6147
jmp 0x6147
jmp 0x6147
jmp 0x6147
jmp 0x6147
jmp 0x6147
movq %rax, %r14
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x6157
callq 0x5210
movq %r14, %rdi
callq 0x53e0