// File: /workspace/github_c_makefile_star2_O0/qq-smart[P]qq_sh_server/core/qq_string.c
// Function: qq_str_to_hex
qq_int_t
qq_str_to_hex(u_char *str, u_char *hex, size_t strlen)
{
    if (strlen % 2) {
        return QQ_ERROR;
    }

    while (strlen) {
        if (*str >= 48 && *str <= 57) {
            *hex = *str - 48;
        } else if (*str >= 65 && *str <= 70) {
            *hex = *str - 55;
        } else if (*str >= 97 && *str <= 102) {
            *hex = *str - 87;
        } else {
            return QQ_ERROR;
        }

        str ++;
        *hex = *hex << 4;

        if (*str >= 48 && *str <= 57) {
            *hex += *str - 48;
        } else if (*str >= 65 && *str <= 70) {
            *hex += *str - 55;
        } else if (*str >= 97 && *str <= 102) {
            *hex += *str - 87;
        } else {
            return QQ_ERROR;
        }

        str ++;
        hex ++;

        strlen -= 2;
    }

    return QQ_OK;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x20(%rbp), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0xcc7b
movq $-0x1, -0x8(%rbp)
jmp 0xce07
jmp 0xcc7d
cmpq $0x0, -0x20(%rbp)
je 0xcdff
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x30, %eax
jl 0xccb4
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x39, %eax
jg 0xccb4
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
subl $0x30, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, (%rax)
jmp 0xcd1d
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x41, %eax
jl 0xcce0
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x46, %eax
jg 0xcce0
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
subl $0x37, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, (%rax)
jmp 0xcd1b
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x61, %eax
jl 0xcd0c
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x66, %eax
jg 0xcd0c
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
subl $0x57, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, (%rax)
jmp 0xcd19
movq $-0x1, -0x8(%rbp)
jmp 0xce07
jmp 0xcd1b
jmp 0xcd1d
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
shll $0x4, %eax
movb %al, %cl
movq -0x18(%rbp), %rax
movb %cl, (%rax)
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x30, %eax
jl 0xcd6a
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x39, %eax
jg 0xcd6a
movq -0x10(%rbp), %rax
movzbl (%rax), %edx
subl $0x30, %edx
movq -0x18(%rbp), %rax
movzbl (%rax), %ecx
addl %edx, %ecx
movb %cl, (%rax)
jmp 0xcdd6
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x41, %eax
jl 0xcd99
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x46, %eax
jg 0xcd99
movq -0x10(%rbp), %rax
movzbl (%rax), %edx
subl $0x37, %edx
movq -0x18(%rbp), %rax
movzbl (%rax), %ecx
addl %edx, %ecx
movb %cl, (%rax)
jmp 0xcdd4
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x61, %eax
jl 0xcdc8
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x66, %eax
jg 0xcdc8
movq -0x10(%rbp), %rax
movzbl (%rax), %edx
subl $0x57, %edx
movq -0x18(%rbp), %rax
movzbl (%rax), %ecx
addl %edx, %ecx
movb %cl, (%rax)
jmp 0xcdd2
movq $-0x1, -0x8(%rbp)
jmp 0xce07
jmp 0xcdd4
jmp 0xcdd6
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x20(%rbp), %rax
subq $0x2, %rax
movq %rax, -0x20(%rbp)
jmp 0xcc7d
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
popq %rbp
retq
nopl (%rax)