// File: king1600[P]cordpp/./include/json.h
// Function: nlohmann::detail::input_adapter::input_adapter<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, 0>(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, __gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)
input_adapter(IteratorType first, IteratorType last)
    {
        // assertion to check that the iterator range is indeed contiguous,
        // see http://stackoverflow.com/a/35008842/266378 for more discussion
        assert(std::accumulate(
                   first, last, std::pair<bool, int>(true, 0),
                   [&first](std::pair<bool, int> res, decltype(*first) val)
        {
            res.first &= (val == *(std::next(std::addressof(*first), res.second++)));
            return res;
        }).first);

        // assertion to check that each element is 1 byte long
        static_assert(
            sizeof(typename std::iterator_traits<IteratorType>::value_type) == 1,
            "each element in the iterator range must have the size of 1 byte");

        const auto len = static_cast<size_t>(std::distance(first, last));
        if (JSON_LIKELY(len > 0))
        {
            // there is at least one element: use the address of first
            ia = std::make_shared<input_buffer_adapter>(reinterpret_cast<const char*>(&(*first)), len);
        }
        else
        {
            // the address of first cannot be used: use nullptr
            ia = std::make_shared<input_buffer_adapter>(nullptr, len);
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rsi, -0x8(%rbp)
movq %rdx, -0x10(%rbp)
movq %rdi, -0x18(%rbp)
movq -0x18(%rbp), %rdi
movq %rdi, -0xb0(%rbp)
movq %rdi, %rax
movq %rax, -0xa8(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0x4a860
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movb $0x1, -0x39(%rbp)
movl $0x0, -0x40(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x39(%rbp), %rsi
leaq -0x40(%rbp), %rdx
callq 0x4a900
jmp 0x4a703
leaq -0x8(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdx
movq -0x58(%rbp), %rcx
callq 0x4a880
movq %rax, -0xb8(%rbp)
jmp 0x4a729
movq -0xb8(%rbp), %rax
movq %rax, -0x20(%rbp)
testb $0x1, -0x20(%rbp)
je 0x4a73c
jmp 0x4a778
leaq 0x48815(%rip), %rdi     # 0x92f58
leaq 0x44eff(%rip), %rsi     # 0x8f649
movl $0x5e0, %edx            # imm = 0x5E0
leaq 0x488d9(%rip), %rcx     # 0x9302f
callq 0xc290
movq -0xb0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
callq 0x45590
jmp 0x4a848
movq -0x8(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x68(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0x4a930
movq %rax, -0xc0(%rbp)
jmp 0x4a79e
movq -0xc0(%rbp), %rax
movq %rax, -0x60(%rbp)
cmpq $0x0, -0x60(%rbp)
seta %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x4a7bb
jmp 0x4a7fc
leaq -0x8(%rbp), %rdi
callq 0x4a9f0
movq %rax, -0x88(%rbp)
leaq -0x80(%rbp), %rdi
leaq -0x88(%rbp), %rsi
leaq -0x60(%rbp), %rdx
callq 0x4a970
jmp 0x4a7e1
movq -0xa8(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x4aa10
leaq -0x80(%rbp), %rdi
callq 0x4aa40
jmp 0x4a83f
movq $0x0, -0xa0(%rbp)
leaq -0x98(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
leaq -0x60(%rbp), %rdx
callq 0x4aa60
jmp 0x4a820
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x4aa10
leaq -0x98(%rbp), %rdi
callq 0x4aa40
addq $0xc0, %rsp
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0xc8c0
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)