// File: /workspace/github_cpp_makefile_star2_O1/mapbox[P]svg-tools/include/mapbox/svg/path_parser.hpp
// Function: mapbox::svg::PathParser<mapbox::svg::test::PathVertexReceiver>::operator()(char const*)
bool operator()(const char* str) {
        begin = str;
        cursor = str;
        error = PathParseErrorType::None;
        next = nullptr;

        char command;
        double x, y, x1, y1, x2, y2, xAxisRotation;
        bool relative, largeArcFlag, sweepFlag;

        skipWhitespace();
        while (*cursor) {
            command = *cursor++;
            relative = command >= 'a';
            skipWhitespace();

            if (command == 'Z' || command == 'z') { // closepath
                skipWhitespace();
                t.closePath();
                continue;
            }

            do {
                switch (command) {
                    case '\0':
                        break;
                    case 'M': case 'm': // moveto
                        if (!parseNumber(x)) return false;
                        if (!parseNumber(y)) return false;
                        t.moveTo(x, y, relative);
                        break;
                    case 'L': case 'l': // lineto
                        if (!parseNumber(x)) return false;
                        if (!parseNumber(y)) return false;
                        t.lineTo(x, y, relative);
                        break;
                    case 'H': case 'h': // horizontal lineto
                        if (!parseNumber(x)) return false;
                        t.horizontalLineTo(x, relative);
                        break;
                    case 'V': case 'v': // vertical lineto
                        if (!parseNumber(y)) return false;
                        t.verticalLineTo(y, relative);
                        break;
                    case 'C': case 'c': // curveto
                        if (!parseNumber(x1)) return false;
                        if (!parseNumber(y1)) return false;
                        if (!parseNumber(x2)) return false;
                        if (!parseNumber(y2)) return false;
                        if (!parseNumber(x)) return false;
                        if (!parseNumber(y)) return false;
                        t.curveTo(x1, y1, x2, y2, x, y, relative);
                        break;
                    case 'S': case 's': // smooth curveto
                        if (!parseNumber(x2)) return false;
                        if (!parseNumber(y2)) return false;
                        if (!parseNumber(x)) return false;
                        if (!parseNumber(y)) return false;
                        t.smoothCurveTo(x2, y2, x, y, relative);
                        break;
                    case 'Q': case 'q': // quadratic bezier curveto
                        if (!parseNumber(x1)) return false;
                        if (!parseNumber(y1)) return false;
                        if (!parseNumber(x)) return false;
                        if (!parseNumber(y)) return false;
                        t.quadraticCurveTo(x1, y1, x, y, relative);
                        break;
                    case 'T': case 't': // smooth quadratic bezier curveto
                        if (!parseNumber(x)) return false;
                        if (!parseNumber(y)) return false;
                        t.smoothQuadraticCurveTo(x, y, relative);
                        break;
                    case 'A': case 'a': // elliptical arc
                        if (!parseNumber(x1)) return false;
                        if (!parseNumber(y1)) return false;
                        if (!parseNumber(xAxisRotation)) return false;
                        if (!parseFlag(largeArcFlag)) return false;
                        if (!parseFlag(sweepFlag)) return false;
                        if (!parseNumber(x)) return false;
                        if (!parseNumber(y)) return false;
                        t.arc(x1, y1, xAxisRotation, largeArcFlag, sweepFlag, x, y, relative);
                        break;
                    default:
                        error = PathParseErrorType::CommandParsing;
                        return false;

                }
                // parse another instance of this command if there are more numbers
            } while ((*cursor >= '0' && *cursor <= '9') || *cursor == '.' || *cursor == '-');
        }
        return true;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %rdi, %r14
movq %rsi, 0x8(%rdi)
movq %rsi, 0x10(%rdi)
movl $0x0, 0x20(%rdi)
movq $0x0, 0x18(%rdi)
incq %rsi
movabsq $0x100002600, %r12      # imm = 0x100002600
movzbl -0x1(%rsi), %eax
cmpq $0x20, %rax
ja 0x29ec
btq %rax, %r12
jae 0x29ec
movq %rsi, 0x10(%r14)
incq %rsi
jmp 0x29d3
movq 0x10(%r14), %rax
cmpb $0x0, (%rax)
sete %bl
je 0x2f34
leaq 0x1679(%rip), %r15      # 0x407c
leaq 0x1622(%rip), %r13      # 0x402c
movl %ecx, 0x18(%rsp)
movl %ecx, 0x1c(%rsp)
leaq 0x1(%rax), %rcx
movq %rcx, 0x10(%r14)
movzbl (%rax), %ebp
addq $0x2, %rax
movzbl -0x1(%rax), %ecx
cmpq $0x20, %rcx
ja 0x2a3a
btq %rcx, %r12
jae 0x2a3a
movq %rax, 0x10(%r14)
incq %rax
jmp 0x2a21
movl %ebp, %eax
andb $-0x21, %al
cmpb $0x5a, %al
jne 0x2a78
movq 0x10(%r14), %rax
incq %rax
movzbl -0x1(%rax), %ecx
cmpq $0x20, %rcx
ja 0x2a5f
btq %rcx, %r12
jae 0x2a5f
movq %rax, 0x10(%r14)
jmp 0x2a46
movq (%r14), %rdi
callq 0x3020
movq 0x10(%r14), %rax
cmpb $0x0, (%rax)
sete %bl
jne 0x2a12
jmp 0x2f34
leal -0x41(%rbp), %eax
cmpl $0x35, %eax
ja 0x2f24
movabsq $0x2d1885002d1885, %rcx # imm = 0x2D1885002D1885
btq %rax, %rcx
jae 0x2f24
leal -0x43(%rbp), %eax
cmpl $0x13, %eax
jbe 0x2ab5
leal -0x63(%rbp), %eax
cmpl $0x13, %eax
ja 0x2dc9
movslq (%r15,%rax,4), %rax
addq %r15, %rax
jmpq *%rax
movslq (%r13,%rax,4), %rax
addq %r13, %rax
jmpq *%rax
movq %r14, %rdi
leaq 0x28(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x20(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x38(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x30(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x10(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x8(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
xorl %esi, %esi
cmpb $0x61, %bpl
setge %sil
movq (%r14), %rdi
movsd 0x28(%rsp), %xmm0
movsd 0x20(%rsp), %xmm1
movsd 0x38(%rsp), %xmm2
movsd 0x30(%rsp), %xmm3
movsd 0x10(%rsp), %xmm4
movsd 0x8(%rsp), %xmm5
callq 0x32bc
jmp 0x2f01
movq %r14, %rdi
leaq 0x38(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x30(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x10(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x8(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
xorl %esi, %esi
cmpb $0x61, %bpl
setge %sil
movq (%r14), %rdi
movsd 0x38(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
movsd 0x10(%rsp), %xmm2
movsd 0x8(%rsp), %xmm3
callq 0x3342
jmp 0x2f01
movq %r14, %rdi
leaq 0x10(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
xorl %esi, %esi
cmpb $0x61, %bpl
setge %sil
movq (%r14), %rdi
movsd 0x10(%rsp), %xmm0
callq 0x31d4
jmp 0x2f01
movq %r14, %rdi
leaq 0x10(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x8(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
xorl %esi, %esi
cmpb $0x61, %bpl
setge %sil
movq (%r14), %rdi
movsd 0x10(%rsp), %xmm0
movsd 0x8(%rsp), %xmm1
callq 0x30e0
jmp 0x2f01
movq %r14, %rdi
leaq 0x10(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x8(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
xorl %esi, %esi
cmpb $0x61, %bpl
setge %sil
movq (%r14), %rdi
movsd 0x10(%rsp), %xmm0
movsd 0x8(%rsp), %xmm1
callq 0x3446
jmp 0x2f01
movq %r14, %rdi
leaq 0x10(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x8(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
xorl %esi, %esi
cmpb $0x61, %bpl
setge %sil
movq (%r14), %rdi
movsd 0x10(%rsp), %xmm0
movsd 0x8(%rsp), %xmm1
callq 0x315a
jmp 0x2f01
movq %r14, %rdi
leaq 0x28(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x20(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x10(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x8(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
xorl %esi, %esi
cmpb $0x61, %bpl
setge %sil
movq (%r14), %rdi
movsd 0x28(%rsp), %xmm0
movsd 0x20(%rsp), %xmm1
movsd 0x10(%rsp), %xmm2
movsd 0x8(%rsp), %xmm3
callq 0x33c4
jmp 0x2f01
movq %r14, %rdi
leaq 0x8(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
xorl %esi, %esi
cmpb $0x61, %bpl
setge %sil
movq (%r14), %rdi
movsd 0x8(%rsp), %xmm0
callq 0x3244
jmp 0x2f01
testl %ebp, %ebp
je 0x2f01
movq %r14, %rdi
leaq 0x28(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x20(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x40(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq 0x10(%r14), %rax
movzbl (%rax), %ecx
cmpl $0x30, %ecx
je 0x2e29
cmpl $0x31, %ecx
jne 0x2e44
movb $0x1, %cl
movl %ecx, 0x1c(%rsp)
jmp 0x2e31
movl $0x0, 0x1c(%rsp)
incq %rax
movq %rax, 0x10(%r14)
movq %r14, %rdi
callq 0x36d4
movb $0x1, %al
jmp 0x2e4e
movl $0x2, 0x20(%r14)
xorl %eax, %eax
testb %al, %al
je 0x2f34
movq 0x10(%r14), %rax
movzbl (%rax), %ecx
cmpl $0x30, %ecx
je 0x2e6f
cmpl $0x31, %ecx
jne 0x2e8a
movb $0x1, %cl
movl %ecx, 0x18(%rsp)
jmp 0x2e77
movl $0x0, 0x18(%rsp)
incq %rax
movq %rax, 0x10(%r14)
movq %r14, %rdi
callq 0x36d4
movb $0x1, %al
jmp 0x2e94
movl $0x2, 0x20(%r14)
xorl %eax, %eax
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x10(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
movq %r14, %rdi
leaq 0x8(%rsp), %rsi
callq 0x308a
testb %al, %al
je 0x2f34
xorl %ecx, %ecx
cmpb $0x61, %bpl
setge %cl
movq (%r14), %rdi
movsd 0x28(%rsp), %xmm0
movsd 0x20(%rsp), %xmm1
movsd 0x40(%rsp), %xmm2
movsd 0x10(%rsp), %xmm3
movsd 0x8(%rsp), %xmm4
movzbl 0x1c(%rsp), %esi
andl $0x1, %esi
movzbl 0x18(%rsp), %edx
andl $0x1, %edx
callq 0x34c0
movq 0x10(%r14), %rax
movb (%rax), %al
leal -0x30(%rax), %ecx
cmpb $0xa, %cl
setb %cl
addb $-0x2d, %al
cmpb $0x2, %al
setb %al
orb %cl, %al
jne 0x2a98
jmp 0x2a67
testl %ebp, %ebp
je 0x2a98
movl $0x3, 0x20(%r14)
andb $0x1, %bl
movl %ebx, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq