// File: yayuntian[P]user_agent/test_ua.cpp
// Function: format[abi:cxx11](UserAgent&)
string format(UserAgent& ua) {
    string s;

    if (!ua.mozilla.empty()) {
        s += "Mozilla:" + ua.mozilla + " ";
    }

    if (!ua.platform.empty()) {
        s += "Platform:" + ua.platform + " ";
    }

    if (!ua.os.empty()) {
        s += "OS:" + ua.os + " ";
    }

    if (!ua.localization.empty()) {
        s += "Localization:" + ua.localization + " ";
    }

    if (!ua.browser.Name.empty()) {
        s += "Browser:" + ua.browser.Name;
        if (!ua.browser.Version.empty()) {
            s += "-" + ua.browser.Version + " ";
        } else {
            s += " ";
        }
    }

    if (!ua.browser.Engine.empty()) {
        s += "Engine:" + ua.browser.Engine;
        if (!ua.browser.EngineVersion.empty()) {
            s += "-" + ua.browser.EngineVersion + " ";
        } else {
            s += " ";
        }
    }
    s += "Bot:";
    s += ua.bot ? "true " : "false ";
    s += "Mobile:";
    s += ua.mobile ? "true" : "false";

    //    cout << s << endl;
    return s;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x200, %rsp            # imm = 0x200
movq %rdi, -0x1f8(%rbp)
movq %rdi, %rax
movq %rax, -0x1f0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movb $0x0, -0x11(%rbp)
callq 0x8680
movq -0x10(%rbp), %rdi
addq $0x20, %rdi
callq 0x8800
testb $0x1, %al
jne 0x126fa
movq -0x10(%rbp), %rdx
addq $0x20, %rdx
leaq 0x57d13(%rip), %rsi     # 0x6a384
leaq -0x58(%rbp), %rdi
callq 0x13590
jmp 0x1267c
leaq 0x58b56(%rip), %rdx     # 0x6b1d9
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x13540
jmp 0x12692
movq -0x1f8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x8600
jmp 0x126a4
leaq -0x38(%rbp), %rdi
callq 0x89e8
leaq -0x58(%rbp), %rdi
callq 0x89e8
jmp 0x126fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x12c61
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x126ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x89e8
leaq -0x58(%rbp), %rdi
callq 0x89e8
jmp 0x12c61
movq -0x10(%rbp), %rdi
addq $0x40, %rdi
callq 0x8800
testb $0x1, %al
jne 0x127ae
movq -0x10(%rbp), %rdx
addq $0x40, %rdx
leaq 0x57c6f(%rip), %rsi     # 0x6a38d
leaq -0xa8(%rbp), %rdi
callq 0x13590
jmp 0x1272c
leaq 0x58aa6(%rip), %rdx     # 0x6b1d9
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x13540
jmp 0x12748
movq -0x1f8(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x8600
jmp 0x1275d
leaq -0x88(%rbp), %rdi
callq 0x89e8
leaq -0xa8(%rbp), %rdi
callq 0x89e8
jmp 0x127ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1279d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x89e8
leaq -0xa8(%rbp), %rdi
callq 0x89e8
jmp 0x12c61
movq -0x10(%rbp), %rdi
addq $0x60, %rdi
callq 0x8800
testb $0x1, %al
jne 0x12862
movq -0x10(%rbp), %rdx
addq $0x60, %rdx
leaq 0x57bc5(%rip), %rsi     # 0x6a397
leaq -0xe8(%rbp), %rdi
callq 0x13590
jmp 0x127e0
leaq 0x589f2(%rip), %rdx     # 0x6b1d9
leaq -0xc8(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x13540
jmp 0x127fc
movq -0x1f8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x8600
jmp 0x12811
leaq -0xc8(%rbp), %rdi
callq 0x89e8
leaq -0xe8(%rbp), %rdi
callq 0x89e8
jmp 0x12862
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x12851
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x89e8
leaq -0xe8(%rbp), %rdi
callq 0x89e8
jmp 0x12c61
movq -0x10(%rbp), %rdi
addq $0x80, %rdi
callq 0x8800
testb $0x1, %al
jne 0x12919
movq -0x10(%rbp), %rdx
subq $-0x80, %rdx
leaq 0x57b12(%rip), %rsi     # 0x6a39b
leaq -0x128(%rbp), %rdi
callq 0x13590
jmp 0x12897
leaq 0x5893b(%rip), %rdx     # 0x6b1d9
leaq -0x108(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x13540
jmp 0x128b3
movq -0x1f8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x8600
jmp 0x128c8
leaq -0x108(%rbp), %rdi
callq 0x89e8
leaq -0x128(%rbp), %rdi
callq 0x89e8
jmp 0x12919
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x12908
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x89e8
leaq -0x128(%rbp), %rdi
callq 0x89e8
jmp 0x12c61
movq -0x10(%rbp), %rdi
addq $0xa0, %rdi
addq $0x40, %rdi
callq 0x8800
testb $0x1, %al
jne 0x12a6a
movq -0x10(%rbp), %rdx
addq $0xe0, %rdx
leaq 0x57a62(%rip), %rsi     # 0x6a3a9
leaq -0x148(%rbp), %rdi
callq 0x13590
jmp 0x12955
movq -0x1f8(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x8600
jmp 0x1296a
leaq -0x148(%rbp), %rdi
callq 0x89e8
movq -0x10(%rbp), %rdi
addq $0xa0, %rdi
addq $0x60, %rdi
callq 0x8800
testb $0x1, %al
jne 0x12a51
movq -0x10(%rbp), %rdx
addq $0x100, %rdx            # imm = 0x100
leaq 0x57a0e(%rip), %rsi     # 0x6a3b2
leaq -0x188(%rbp), %rdi
callq 0x13590
jmp 0x129b2
leaq 0x58820(%rip), %rdx     # 0x6b1d9
leaq -0x168(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x13540
jmp 0x129ce
movq -0x1f8(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x8600
jmp 0x129e3
leaq -0x168(%rbp), %rdi
callq 0x89e8
leaq -0x188(%rbp), %rdi
callq 0x89e8
jmp 0x12a68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x89e8
jmp 0x12c61
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x12a40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x89e8
leaq -0x188(%rbp), %rdi
callq 0x89e8
jmp 0x12c61
movq -0x1f8(%rbp), %rdi
leaq 0x5877a(%rip), %rsi     # 0x6b1d9
callq 0x8440
jmp 0x12a66
jmp 0x12a68
jmp 0x12a6a
movq -0x10(%rbp), %rdi
addq $0xa0, %rdi
callq 0x8800
testb $0x1, %al
jne 0x12bb7
movq -0x10(%rbp), %rdx
addq $0xa0, %rdx
leaq 0x57920(%rip), %rsi     # 0x6a3b4
leaq -0x1a8(%rbp), %rdi
callq 0x13590
jmp 0x12aa2
movq -0x1f8(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x8600
jmp 0x12ab7
leaq -0x1a8(%rbp), %rdi
callq 0x89e8
movq -0x10(%rbp), %rdi
addq $0xa0, %rdi
addq $0x20, %rdi
callq 0x8800
testb $0x1, %al
jne 0x12b9e
movq -0x10(%rbp), %rdx
addq $0xc0, %rdx
leaq 0x578c1(%rip), %rsi     # 0x6a3b2
leaq -0x1e8(%rbp), %rdi
callq 0x13590
jmp 0x12aff
leaq 0x586d3(%rip), %rdx     # 0x6b1d9
leaq -0x1c8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x13540
jmp 0x12b1b
movq -0x1f8(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x8600
jmp 0x12b30
leaq -0x1c8(%rbp), %rdi
callq 0x89e8
leaq -0x1e8(%rbp), %rdi
callq 0x89e8
jmp 0x12bb5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x89e8
jmp 0x12c61
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x12b8d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x89e8
leaq -0x1e8(%rbp), %rdi
callq 0x89e8
jmp 0x12c61
movq -0x1f8(%rbp), %rdi
leaq 0x5862d(%rip), %rsi     # 0x6b1d9
callq 0x8440
jmp 0x12bb3
jmp 0x12bb5
jmp 0x12bb7
movq -0x1f8(%rbp), %rdi
leaq 0x577f7(%rip), %rsi     # 0x6a3bc
callq 0x8440
jmp 0x12bcc
movq -0x1f8(%rbp), %rdi
movq -0x10(%rbp), %rax
movb 0x120(%rax), %cl
leaq 0x577dd(%rip), %rax     # 0x6a3c1
leaq 0x577dc(%rip), %rsi     # 0x6a3c7
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0x8440
jmp 0x12bf9
movq -0x1f8(%rbp), %rdi
leaq 0x577c7(%rip), %rsi     # 0x6a3ce
callq 0x8440
jmp 0x12c0e
movq -0x1f8(%rbp), %rdi
movq -0x10(%rbp), %rax
movb 0x121(%rax), %cl
leaq 0x56990(%rip), %rax     # 0x695b6
leaq 0x55a28(%rip), %rsi     # 0x68655
testb $0x1, %cl
cmovneq %rax, %rsi
callq 0x8440
jmp 0x12c3b
movb $0x1, -0x11(%rbp)
testb $0x1, -0x11(%rbp)
jne 0x12c51
movq -0x1f8(%rbp), %rdi
callq 0x89e8
movq -0x1f0(%rbp), %rax
addq $0x200, %rsp            # imm = 0x200
popq %rbp
retq
movq -0x1f8(%rbp), %rdi
callq 0x89e8
movq -0x60(%rbp), %rdi
callq 0x88a0
nopw %cs:(%rax,%rax)