// File: oknenavin[P]cxon/test/../src/cxon/lang/common/cio/char.hxx
// Function: std::enable_if<cxon::JSON<cxon::cio::str::raw_traits<cxon::json::format_traits>>::validate_string_encoding, char32_t>::type cxon::cio::chr::imp::utf8_to_utf32_<cxon::JSON<cxon::cio::str::raw_traits<cxon::json::format_traits>>, std::istreambuf_iterator<char, std::char_traits<char>>, cxon::context<cxon::JSON<cxon::json::format_traits>>>(std::istreambuf_iterator<char, std::char_traits<char>>&, std::istreambuf_iterator<char, std::char_traits<char>>, cxon::context<cxon::JSON<cxon::json::format_traits>>&)
inline auto utf8_to_utf32_(II& i, II e, Cx& cx)
                    -> enable_if_t< X::validate_string_encoding, char32_t>
                {   static_assert(is_char_8<typename std::iterator_traits<II>::value_type>::value, "unexpected");
                    CXON_ASSERT(i != e, "unexpected");
                    char32_t const  c0 = (unsigned char)*i;
                    char32_t        c1, c2, c3;
                    if (c0 <= 0x7F)
                        return ++i, c0;
                    if (c0 >= 0xC2 && c0 <= 0xDF) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0xBF);
                        return ++i, ((c0 & 0x1F) << 6) | (c1 & 0x3F);
                    }
                    if (c0 == 0xE0) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0xA0 && c1 <= 0xBF);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        return ++i, ((c0 & 0x0F) << 12) | ((c1 & 0x3F) << 6) | (c2 & 0x3F);
                    }
                    if (c0 >= 0xE1 && c0 <= 0xEC) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0xBF);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        return ++i, ((c0 & 0x0F) << 12) | ((c1 & 0x3F) << 6) | (c2 & 0x3F);
                    }
                    if (c0 == 0xED) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0x9F);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        return ++i, ((c0 & 0x0F) << 12) | ((c1 & 0x3F) << 6) | (c2 & 0x3F);
                    }
                    if (c0 >= 0xEE && c0 <= 0xEF) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0xBF);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        return ++i, ((c0 & 0x0F) << 12) | ((c1 & 0x3F) << 6) | (c2 & 0x3F);
                    }
                    if (c0 == 0xF0) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x90 && c1 <= 0xBF);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        c3 = tail_(i, e);       CXON_EXPECT(c3 >= 0x80 && c3 <= 0xBF);
                        return ++i, ((c0 & 0x07) << 18) | ((c1 & 0x3F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F);
                    }
                    if (c0 >= 0xF1 && c0 <= 0xF3) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0xBF);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        c3 = tail_(i, e);       CXON_EXPECT(c3 >= 0x80 && c3 <= 0xBF);
                        return ++i, ((c0 & 0x07) << 18) | ((c1 & 0x3F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F);
                    }
                    if (c0 == 0xF4) {
                        c1 = head_(i, e);       CXON_EXPECT(c1 >= 0x80 && c1 <= 0x8F);
                        c2 = tail_(i, e);       CXON_EXPECT(c2 >= 0x80 && c2 <= 0xBF);
                        c3 = tail_(i, e);       CXON_EXPECT(c3 >= 0x80 && c3 <= 0xBF);
                        return ++i, ((c0 & 0x07) << 18) | ((c1 & 0x3F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F);
                    }
                    CXON_EXPECT(false);
                }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x160, %rsp            # imm = 0x160
movq %rsi, -0x18(%rbp)
movl %edx, -0x10(%rbp)
movq %rdi, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x20(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x11590
movq -0x20(%rbp), %rdi
callq 0x115c0
movzbl %al, %eax
movl %eax, -0x2c(%rbp)
cmpl $0x7f, -0x2c(%rbp)
ja 0x1e3e0
movq -0x20(%rbp), %rdi
callq 0x115f0
movl -0x2c(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x1ec67
cmpl $0xc2, -0x2c(%rbp)
jb 0x1e466
cmpl $0xdf, -0x2c(%rbp)
ja 0x1e466
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x48(%rbp), %rsi
movl -0x40(%rbp), %edx
callq 0x1ec80
movzbl %al, %eax
movl %eax, -0x30(%rbp)
cmpl $0x80, -0x30(%rbp)
jb 0x1e42a
cmpl $0xbf, -0x30(%rbp)
jbe 0x1e444
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
callq 0x115f0
movl -0x2c(%rbp), %eax
andl $0x1f, %eax
shll $0x6, %eax
movl -0x30(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x1ec67
cmpl $0xe0, -0x2c(%rbp)
jne 0x1e544
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x58(%rbp), %rsi
movl -0x50(%rbp), %edx
callq 0x1ec80
movzbl %al, %eax
movl %eax, -0x30(%rbp)
cmpl $0xa0, -0x30(%rbp)
jb 0x1e4ab
cmpl $0xbf, -0x30(%rbp)
jbe 0x1e4c5
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x68(%rbp), %rsi
movl -0x60(%rbp), %edx
callq 0x1ecc0
movzbl %al, %eax
movl %eax, -0x34(%rbp)
cmpl $0x80, -0x34(%rbp)
jb 0x1e4fd
cmpl $0xbf, -0x34(%rbp)
jbe 0x1e517
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
callq 0x115f0
movl -0x2c(%rbp), %eax
andl $0xf, %eax
shll $0xc, %eax
movl -0x30(%rbp), %ecx
andl $0x3f, %ecx
shll $0x6, %ecx
orl %ecx, %eax
movl -0x34(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x1ec67
cmpl $0xe1, -0x2c(%rbp)
jb 0x1e635
cmpl $0xec, -0x2c(%rbp)
ja 0x1e635
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x78(%rbp), %rsi
movl -0x70(%rbp), %edx
callq 0x1ec80
movzbl %al, %eax
movl %eax, -0x30(%rbp)
cmpl $0x80, -0x30(%rbp)
jb 0x1e596
cmpl $0xbf, -0x30(%rbp)
jbe 0x1e5b0
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x88(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x88(%rbp), %rsi
movl -0x80(%rbp), %edx
callq 0x1ecc0
movzbl %al, %eax
movl %eax, -0x34(%rbp)
cmpl $0x80, -0x34(%rbp)
jb 0x1e5ee
cmpl $0xbf, -0x34(%rbp)
jbe 0x1e608
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
callq 0x115f0
movl -0x2c(%rbp), %eax
andl $0xf, %eax
shll $0xc, %eax
movl -0x30(%rbp), %ecx
andl $0x3f, %ecx
shll $0x6, %ecx
orl %ecx, %eax
movl -0x34(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x1ec67
cmpl $0xed, -0x2c(%rbp)
jne 0x1e72b
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x98(%rbp), %rsi
movl -0x90(%rbp), %edx
callq 0x1ec80
movzbl %al, %eax
movl %eax, -0x30(%rbp)
cmpl $0x80, -0x30(%rbp)
jb 0x1e686
cmpl $0x9f, -0x30(%rbp)
jbe 0x1e6a0
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0xa8(%rbp), %rsi
movl -0xa0(%rbp), %edx
callq 0x1ecc0
movzbl %al, %eax
movl %eax, -0x34(%rbp)
cmpl $0x80, -0x34(%rbp)
jb 0x1e6e4
cmpl $0xbf, -0x34(%rbp)
jbe 0x1e6fe
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
callq 0x115f0
movl -0x2c(%rbp), %eax
andl $0xf, %eax
shll $0xc, %eax
movl -0x30(%rbp), %ecx
andl $0x3f, %ecx
shll $0x6, %ecx
orl %ecx, %eax
movl -0x34(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x1ec67
cmpl $0xee, -0x2c(%rbp)
jb 0x1e82e
cmpl $0xef, -0x2c(%rbp)
ja 0x1e82e
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0xb8(%rbp), %rsi
movl -0xb0(%rbp), %edx
callq 0x1ec80
movzbl %al, %eax
movl %eax, -0x30(%rbp)
cmpl $0x80, -0x30(%rbp)
jb 0x1e789
cmpl $0xbf, -0x30(%rbp)
jbe 0x1e7a3
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0xc8(%rbp), %rsi
movl -0xc0(%rbp), %edx
callq 0x1ecc0
movzbl %al, %eax
movl %eax, -0x34(%rbp)
cmpl $0x80, -0x34(%rbp)
jb 0x1e7e7
cmpl $0xbf, -0x34(%rbp)
jbe 0x1e801
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
callq 0x115f0
movl -0x2c(%rbp), %eax
andl $0xf, %eax
shll $0xc, %eax
movl -0x30(%rbp), %ecx
andl $0x3f, %ecx
shll $0x6, %ecx
orl %ecx, %eax
movl -0x34(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x1ec67
cmpl $0xf0, -0x2c(%rbp)
jne 0x1e98d
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xd8(%rbp), %rsi
movl -0xd0(%rbp), %edx
callq 0x1ec80
movzbl %al, %eax
movl %eax, -0x30(%rbp)
cmpl $0x90, -0x30(%rbp)
jb 0x1e87f
cmpl $0xbf, -0x30(%rbp)
jbe 0x1e899
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0xe8(%rbp), %rsi
movl -0xe0(%rbp), %edx
callq 0x1ecc0
movzbl %al, %eax
movl %eax, -0x34(%rbp)
cmpl $0x80, -0x34(%rbp)
jb 0x1e8dd
cmpl $0xbf, -0x34(%rbp)
jbe 0x1e8f7
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0xf8(%rbp), %rsi
movl -0xf0(%rbp), %edx
callq 0x1ecc0
movzbl %al, %eax
movl %eax, -0x38(%rbp)
cmpl $0x80, -0x38(%rbp)
jb 0x1e93b
cmpl $0xbf, -0x38(%rbp)
jbe 0x1e955
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
callq 0x115f0
movl -0x2c(%rbp), %eax
andl $0x7, %eax
shll $0x12, %eax
movl -0x30(%rbp), %ecx
andl $0x3f, %ecx
shll $0xc, %ecx
orl %ecx, %eax
movl -0x34(%rbp), %ecx
andl $0x3f, %ecx
shll $0x6, %ecx
orl %ecx, %eax
movl -0x38(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x1ec67
cmpl $0xf1, -0x2c(%rbp)
jb 0x1eaf9
cmpl $0xf3, -0x2c(%rbp)
ja 0x1eaf9
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x108(%rbp), %rsi
movl -0x100(%rbp), %edx
callq 0x1ec80
movzbl %al, %eax
movl %eax, -0x30(%rbp)
cmpl $0x80, -0x30(%rbp)
jb 0x1e9eb
cmpl $0xbf, -0x30(%rbp)
jbe 0x1ea05
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x118(%rbp), %rsi
movl -0x110(%rbp), %edx
callq 0x1ecc0
movzbl %al, %eax
movl %eax, -0x34(%rbp)
cmpl $0x80, -0x34(%rbp)
jb 0x1ea49
cmpl $0xbf, -0x34(%rbp)
jbe 0x1ea63
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x120(%rbp)
movq -0x128(%rbp), %rsi
movl -0x120(%rbp), %edx
callq 0x1ecc0
movzbl %al, %eax
movl %eax, -0x38(%rbp)
cmpl $0x80, -0x38(%rbp)
jb 0x1eaa7
cmpl $0xbf, -0x38(%rbp)
jbe 0x1eac1
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
callq 0x115f0
movl -0x2c(%rbp), %eax
andl $0x7, %eax
shll $0x12, %eax
movl -0x30(%rbp), %ecx
andl $0x3f, %ecx
shll $0xc, %ecx
orl %ecx, %eax
movl -0x34(%rbp), %ecx
andl $0x3f, %ecx
shll $0x6, %ecx
orl %ecx, %eax
movl -0x38(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x1ec67
cmpl $0xf4, -0x2c(%rbp)
jne 0x1ec52
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0x138(%rbp), %rsi
movl -0x130(%rbp), %edx
callq 0x1ec80
movzbl %al, %eax
movl %eax, -0x30(%rbp)
cmpl $0x80, -0x30(%rbp)
jb 0x1eb4a
cmpl $0x8f, -0x30(%rbp)
jbe 0x1eb64
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x148(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x148(%rbp), %rsi
movl -0x140(%rbp), %edx
callq 0x1ecc0
movzbl %al, %eax
movl %eax, -0x34(%rbp)
cmpl $0x80, -0x34(%rbp)
jb 0x1eba8
cmpl $0xbf, -0x34(%rbp)
jbe 0x1ebc2
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rax
movq %rax, -0x158(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x150(%rbp)
movq -0x158(%rbp), %rsi
movl -0x150(%rbp), %edx
callq 0x1ecc0
movzbl %al, %eax
movl %eax, -0x38(%rbp)
cmpl $0x80, -0x38(%rbp)
jb 0x1ec06
cmpl $0xbf, -0x38(%rbp)
jbe 0x1ec1d
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x1ec67
movq -0x20(%rbp), %rdi
callq 0x115f0
movl -0x2c(%rbp), %eax
andl $0x7, %eax
shll $0x12, %eax
movl -0x30(%rbp), %ecx
andl $0x3f, %ecx
shll $0xc, %ecx
orl %ecx, %eax
movl -0x34(%rbp), %ecx
andl $0x3f, %ecx
shll $0x6, %ecx
orl %ecx, %eax
movl -0x38(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x1ec67
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0x1c2f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl -0x4(%rbp), %eax
addq $0x160, %rsp            # imm = 0x160
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)