// File: Lut99[P]RayTracer/src/lib/Camera.cpp
// Function: RayTracer::Camera::from_json(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>)
Camera* Camera::from_json(nlohmann::json json_obj) {
    // Check if it is an object
    if (!json_obj.is_object()) {
        throw InvalidObjectFormat("Camera", json::object().type_name(), json_obj.type_name());
    }

    // Next, check if the required fields are present
    if (json_obj["lookat"].is_null()) {
        throw MissingFieldException("Camera", "lookat");
    }
    if (json_obj["lookfrom"].is_null()) {
        throw MissingFieldException("Camera", "lookfrom");
    }
    if (json_obj["up"].is_null()) {
        throw MissingFieldException("Camera", "up");
    }
    if (json_obj["vfov"].is_null()) {
        throw MissingFieldException("Camera", "vfov");
    }
    if (json_obj["aperture"].is_null()) {
        throw MissingFieldException("Camera", "aperture");
    }

    // Parse the objects
    Vec3 lookat = Vec3::from_json(json_obj["lookat"]);
    Vec3 lookfrom = Vec3::from_json(json_obj["lookfrom"]);
    Vec3 up = Vec3::from_json(json_obj["up"]);
    double vfov, aperture;
    try {
        vfov = json_obj["vfov"].get<double>();
        aperture = json_obj["aperture"].get<double>();
    } catch (nlohmann::detail::type_error&) {
        throw InvalidFieldFormat("Camera", "vfov or aperture", "double", json_obj[0].type_name());
    }
    // Only parse the animation if it is present
    CameraMovement* animation = nullptr;
    if (!json_obj["animation"].is_null()) {
        animation = CameraMovement::from_json(json_obj["animation"]);
    }
    
    // Put everything in the camera
    Camera* to_return = new Camera(lookfrom, lookat, up, vfov, aperture);
    if (animation != nullptr) {
        to_return->set_animation(animation);
    }

    // Return it
    return to_return;
}

// Assembly:
subq $0x568, %rsp            # imm = 0x568
movq %rdi, 0x158(%rsp)
movq %rdi, 0x560(%rsp)
callq 0xd9b20
testb $0x1, %al
jne 0x161bc9
movb $0x1, 0x4be(%rsp)
movl $0x88, %edi
callq 0xd02b0
movq %rax, 0x148(%rsp)
leaq 0x53f(%rsp), %rdi
movq %rdi, 0x150(%rsp)
callq 0xd0a20
movq 0x150(%rsp), %rdx
leaq 0x16729(%rip), %rsi     # 0x1780eb
leaq 0x540(%rsp), %rdi
callq 0xd8b80
jmp 0x1619d1
leaq 0x4e8(%rsp), %rdi
callq 0x155e60
movq 0x4e8(%rsp), %rsi
movq 0x4f0(%rsp), %rdx
leaq 0x4f8(%rsp), %rdi
callq 0x15a2a0
jmp 0x1619fd
leaq 0x4f8(%rsp), %rdi
callq 0x1302d0
movq %rax, 0x138(%rsp)
leaq 0x4e7(%rsp), %rdi
movq %rdi, 0x140(%rsp)
callq 0xd0a20
movq 0x138(%rsp), %rsi
movq 0x140(%rsp), %rdx
leaq 0x508(%rsp), %rdi
callq 0xd8b80
jmp 0x161a46
movq 0x158(%rsp), %rdi
callq 0x1302d0
movq %rax, 0x128(%rsp)
leaq 0x4bf(%rsp), %rdi
movq %rdi, 0x130(%rsp)
callq 0xd0a20
movq 0x128(%rsp), %rsi
movq 0x130(%rsp), %rdx
leaq 0x4c0(%rsp), %rdi
callq 0xd8b80
jmp 0x161a8f
movq 0x148(%rsp), %rdi
leaq 0x540(%rsp), %rsi
leaq 0x508(%rsp), %rdx
leaq 0x4c0(%rsp), %rcx
callq 0x156180
jmp 0x161ab6
movq 0x148(%rsp), %rdi
movb $0x0, 0x4be(%rsp)
leaq 0x499a3(%rip), %rsi     # 0x1ab470
leaq -0xb744(%rip), %rdx     # 0x156390
callq 0xd09b0
jmp 0x162971
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x161b9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x161b91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x161b77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x161b5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x4c0(%rsp), %rdi
callq 0xd0b38
leaq 0x4bf(%rsp), %rdi
callq 0xd0630
leaq 0x508(%rsp), %rdi
callq 0xd0b38
leaq 0x4e7(%rsp), %rdi
callq 0xd0630
leaq 0x4f8(%rsp), %rdi
callq 0xd9f30
leaq 0x540(%rsp), %rdi
callq 0xd0b38
leaq 0x53f(%rsp), %rdi
callq 0xd0630
testb $0x1, 0x4be(%rsp)
jne 0x161bb7
jmp 0x161bc4
movq 0x148(%rsp), %rdi
callq 0xd0430
jmp 0x16295c
movq 0x158(%rsp), %rdi
leaq 0x16500(%rip), %rsi     # 0x1780d8
callq 0xd9b40
movq %rax, %rdi
callq 0xd9da0
testb $0x1, %al
jne 0x161bee
jmp 0x161d47
movb $0x1, 0x46e(%rsp)
movl $0x68, %edi
callq 0xd02b0
movq %rax, 0x118(%rsp)
leaq 0x497(%rsp), %rdi
movq %rdi, 0x120(%rsp)
callq 0xd0a20
movq 0x120(%rsp), %rdx
leaq 0x164bf(%rip), %rsi     # 0x1780eb
leaq 0x498(%rsp), %rdi
callq 0xd8b80
jmp 0x161c3b
leaq 0x46f(%rsp), %rdi
movq %rdi, 0x110(%rsp)
callq 0xd0a20
movq 0x110(%rsp), %rdx
leaq 0x16479(%rip), %rsi     # 0x1780d8
leaq 0x470(%rsp), %rdi
callq 0xd8b80
jmp 0x161c6e
movq 0x118(%rsp), %rdi
leaq 0x498(%rsp), %rsi
leaq 0x470(%rsp), %rdx
callq 0x15a2f0
jmp 0x161c8d
movq 0x118(%rsp), %rdi
movb $0x0, 0x46e(%rsp)
leaq 0x4991c(%rip), %rsi     # 0x1ab5c0
leaq -0x787b(%rip), %rdx     # 0x15a430
callq 0xd09b0
jmp 0x162971
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x161d1c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x161d02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x470(%rsp), %rdi
callq 0xd0b38
leaq 0x46f(%rsp), %rdi
callq 0xd0630
leaq 0x498(%rsp), %rdi
callq 0xd0b38
leaq 0x497(%rsp), %rdi
callq 0xd0630
testb $0x1, 0x46e(%rsp)
jne 0x161d35
jmp 0x161d42
movq 0x118(%rsp), %rdi
callq 0xd0430
jmp 0x16295c
movq 0x158(%rsp), %rdi
leaq 0x16389(%rip), %rsi     # 0x1780df
callq 0xd9b40
movq %rax, %rdi
callq 0xd9da0
testb $0x1, %al
jne 0x161d6c
jmp 0x161ec5
movb $0x1, 0x41e(%rsp)
movl $0x68, %edi
callq 0xd02b0
movq %rax, 0x100(%rsp)
leaq 0x447(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0xd0a20
movq 0x108(%rsp), %rdx
leaq 0x16341(%rip), %rsi     # 0x1780eb
leaq 0x448(%rsp), %rdi
callq 0xd8b80
jmp 0x161db9
leaq 0x41f(%rsp), %rdi
movq %rdi, 0xf8(%rsp)
callq 0xd0a20
movq 0xf8(%rsp), %rdx
leaq 0x16302(%rip), %rsi     # 0x1780df
leaq 0x420(%rsp), %rdi
callq 0xd8b80
jmp 0x161dec
movq 0x100(%rsp), %rdi
leaq 0x448(%rsp), %rsi
leaq 0x420(%rsp), %rdx
callq 0x15a2f0
jmp 0x161e0b
movq 0x100(%rsp), %rdi
movb $0x0, 0x41e(%rsp)
leaq 0x4979e(%rip), %rsi     # 0x1ab5c0
leaq -0x79f9(%rip), %rdx     # 0x15a430
callq 0xd09b0
jmp 0x162971
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x161e9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x161e80
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x420(%rsp), %rdi
callq 0xd0b38
leaq 0x41f(%rsp), %rdi
callq 0xd0630
leaq 0x448(%rsp), %rdi
callq 0xd0b38
leaq 0x447(%rsp), %rdi
callq 0xd0630
testb $0x1, 0x41e(%rsp)
jne 0x161eb3
jmp 0x161ec0
movq 0x100(%rsp), %rdi
callq 0xd0430
jmp 0x16295c
movq 0x158(%rsp), %rdi
leaq 0x16214(%rip), %rsi     # 0x1780e8
callq 0xd9b40
movq %rax, %rdi
callq 0xd9da0
testb $0x1, %al
jne 0x161eea
jmp 0x162043
movb $0x1, 0x3ce(%rsp)
movl $0x68, %edi
callq 0xd02b0
movq %rax, 0xe8(%rsp)
leaq 0x3f7(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0xd0a20
movq 0xf0(%rsp), %rdx
leaq 0x161c3(%rip), %rsi     # 0x1780eb
leaq 0x3f8(%rsp), %rdi
callq 0xd8b80
jmp 0x161f37
leaq 0x3cf(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0xd0a20
movq 0xe0(%rsp), %rdx
leaq 0x1618d(%rip), %rsi     # 0x1780e8
leaq 0x3d0(%rsp), %rdi
callq 0xd8b80
jmp 0x161f6a
movq 0xe8(%rsp), %rdi
leaq 0x3f8(%rsp), %rsi
leaq 0x3d0(%rsp), %rdx
callq 0x15a2f0
jmp 0x161f89
movq 0xe8(%rsp), %rdi
movb $0x0, 0x3ce(%rsp)
leaq 0x49620(%rip), %rsi     # 0x1ab5c0
leaq -0x7b77(%rip), %rdx     # 0x15a430
callq 0xd09b0
jmp 0x162971
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x162018
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x161ffe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x3d0(%rsp), %rdi
callq 0xd0b38
leaq 0x3cf(%rsp), %rdi
callq 0xd0630
leaq 0x3f8(%rsp), %rdi
callq 0xd0b38
leaq 0x3f7(%rsp), %rdi
callq 0xd0630
testb $0x1, 0x3ce(%rsp)
jne 0x162031
jmp 0x16203e
movq 0xe8(%rsp), %rdi
callq 0xd0430
jmp 0x16295c
movq 0x158(%rsp), %rdi
leaq 0xee0e(%rip), %rsi      # 0x170e60
callq 0xd9b40
movq %rax, %rdi
callq 0xd9da0
testb $0x1, %al
jne 0x162068
jmp 0x1621c1
movb $0x1, 0x37e(%rsp)
movl $0x68, %edi
callq 0xd02b0
movq %rax, 0xd0(%rsp)
leaq 0x3a7(%rsp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0xd0a20
movq 0xd8(%rsp), %rdx
leaq 0x16045(%rip), %rsi     # 0x1780eb
leaq 0x3a8(%rsp), %rdi
callq 0xd8b80
jmp 0x1620b5
leaq 0x37f(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0xd0a20
movq 0xc8(%rsp), %rdx
leaq 0xed87(%rip), %rsi      # 0x170e60
leaq 0x380(%rsp), %rdi
callq 0xd8b80
jmp 0x1620e8
movq 0xd0(%rsp), %rdi
leaq 0x3a8(%rsp), %rsi
leaq 0x380(%rsp), %rdx
callq 0x15a2f0
jmp 0x162107
movq 0xd0(%rsp), %rdi
movb $0x0, 0x37e(%rsp)
leaq 0x494a2(%rip), %rsi     # 0x1ab5c0
leaq -0x7cf5(%rip), %rdx     # 0x15a430
callq 0xd09b0
jmp 0x162971
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x162196
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x16217c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x380(%rsp), %rdi
callq 0xd0b38
leaq 0x37f(%rsp), %rdi
callq 0xd0630
leaq 0x3a8(%rsp), %rdi
callq 0xd0b38
leaq 0x3a7(%rsp), %rdi
callq 0xd0630
testb $0x1, 0x37e(%rsp)
jne 0x1621af
jmp 0x1621bc
movq 0xd0(%rsp), %rdi
callq 0xd0430
jmp 0x16295c
movq 0x158(%rsp), %rdi
leaq 0x15f2a(%rip), %rsi     # 0x1780fa
callq 0xd9b40
movq %rax, %rdi
callq 0xd9da0
testb $0x1, %al
jne 0x1621e6
jmp 0x16233f
movb $0x1, 0x32e(%rsp)
movl $0x68, %edi
callq 0xd02b0
movq %rax, 0xb8(%rsp)
leaq 0x357(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0xd0a20
movq 0xc0(%rsp), %rdx
leaq 0x15ec7(%rip), %rsi     # 0x1780eb
leaq 0x358(%rsp), %rdi
callq 0xd8b80
jmp 0x162233
leaq 0x32f(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0xd0a20
movq 0xb0(%rsp), %rdx
leaq 0x15ea3(%rip), %rsi     # 0x1780fa
leaq 0x330(%rsp), %rdi
callq 0xd8b80
jmp 0x162266
movq 0xb8(%rsp), %rdi
leaq 0x358(%rsp), %rsi
leaq 0x330(%rsp), %rdx
callq 0x15a2f0
jmp 0x162285
movq 0xb8(%rsp), %rdi
movb $0x0, 0x32e(%rsp)
leaq 0x49324(%rip), %rsi     # 0x1ab5c0
leaq -0x7e73(%rip), %rdx     # 0x15a430
callq 0xd09b0
jmp 0x162971
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x162314
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x1622fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x330(%rsp), %rdi
callq 0xd0b38
leaq 0x32f(%rsp), %rdi
callq 0xd0630
leaq 0x358(%rsp), %rdi
callq 0xd0b38
leaq 0x357(%rsp), %rdi
callq 0xd0630
testb $0x1, 0x32e(%rsp)
jne 0x16232d
jmp 0x16233a
movq 0xb8(%rsp), %rdi
callq 0xd0430
jmp 0x16295c
movq 0x158(%rsp), %rdi
leaq 0x15d8a(%rip), %rsi     # 0x1780d8
callq 0xd9b40
movq %rax, %rsi
leaq 0x2f8(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0xd9dc0
movq 0xa8(%rsp), %rsi
leaq 0x308(%rsp), %rdi
callq 0x155110
jmp 0x162382
leaq 0x2f8(%rsp), %rdi
callq 0xd9f30
movq 0x158(%rsp), %rdi
leaq 0x15d41(%rip), %rsi     # 0x1780df
callq 0xd9b40
movq %rax, %rsi
leaq 0x2c8(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0xd9dc0
movq 0xa0(%rsp), %rsi
leaq 0x2d8(%rsp), %rdi
callq 0x155110
jmp 0x1623d2
leaq 0x2c8(%rsp), %rdi
callq 0xd9f30
movq 0x158(%rsp), %rdi
leaq 0x15cfa(%rip), %rsi     # 0x1780e8
callq 0xd9b40
movq %rax, %rsi
leaq 0x298(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0xd9dc0
movq 0x98(%rsp), %rsi
leaq 0x2a8(%rsp), %rdi
callq 0x155110
jmp 0x162422
leaq 0x298(%rsp), %rdi
callq 0xd9f30
movq 0x158(%rsp), %rdi
leaq 0xea22(%rip), %rsi      # 0x170e60
callq 0xd9b40
movq %rax, 0x90(%rsp)
jmp 0x16244d
movq 0x90(%rsp), %rdi
callq 0x1565a0
movsd %xmm0, 0x88(%rsp)
jmp 0x162465
movq 0x158(%rsp), %rdi
movsd 0x88(%rsp), %xmm0
movsd %xmm0, 0x290(%rsp)
leaq 0x15c74(%rip), %rsi     # 0x1780fa
callq 0xd9b40
movq %rax, 0x80(%rsp)
jmp 0x162495
movq 0x80(%rsp), %rdi
callq 0x1565a0
movsd %xmm0, 0x78(%rsp)
jmp 0x1624aa
movsd 0x78(%rsp), %xmm0
movsd %xmm0, 0x288(%rsp)
jmp 0x1627c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x2f8(%rsp), %rdi
callq 0xd9f30
jmp 0x16295c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x2c8(%rsp), %rdi
callq 0xd9f30
jmp 0x16295c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x298(%rsp), %rdi
callq 0xd9f30
jmp 0x16295c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
movl 0x52c(%rsp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x16295c
movq 0x530(%rsp), %rdi
callq 0xd0210
movq %rax, 0x280(%rsp)
movb $0x1, 0x1e6(%rsp)
movl $0xa8, %edi
callq 0xd02b0
movq %rax, 0x68(%rsp)
leaq 0x25f(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0xd0a20
movq 0x70(%rsp), %rdx
leaq 0x15b49(%rip), %rsi     # 0x1780eb
leaq 0x260(%rsp), %rdi
callq 0xd8b80
jmp 0x1625b1
leaq 0x237(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0xd0a20
movq 0x60(%rsp), %rdx
leaq 0x15b23(%rip), %rsi     # 0x1780f2
leaq 0x238(%rsp), %rdi
callq 0xd8b80
jmp 0x1625de
leaq 0x20f(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0xd0a20
movq 0x58(%rsp), %rdx
leaq 0x15375(%rip), %rsi     # 0x177971
leaq 0x210(%rsp), %rdi
callq 0xd8b80
jmp 0x16260b
movq 0x158(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x155ed0
movq %rax, 0x50(%rsp)
jmp 0x162623
movq 0x50(%rsp), %rdi
callq 0x1302d0
movq %rax, 0x40(%rsp)
leaq 0x1e7(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0xd0a20
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rdx
leaq 0x1e8(%rsp), %rdi
callq 0xd8b80
jmp 0x16265d
movq 0x68(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x238(%rsp), %rdx
leaq 0x210(%rsp), %rcx
leaq 0x1e8(%rsp), %r8
callq 0x15a4a0
jmp 0x162689
movq 0x68(%rsp), %rdi
movb $0x0, 0x1e6(%rsp)
leaq 0x48f3b(%rip), %rsi     # 0x1ab5d8
leaq -0x7f04(%rip), %rdx     # 0x15a7a0
callq 0xd09b0
jmp 0x162971
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x162791
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x162777
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x16275d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x162750
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
jmp 0x162743
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x1e8(%rsp), %rdi
callq 0xd0b38
leaq 0x1e7(%rsp), %rdi
callq 0xd0630
leaq 0x210(%rsp), %rdi
callq 0xd0b38
leaq 0x20f(%rsp), %rdi
callq 0xd0630
leaq 0x238(%rsp), %rdi
callq 0xd0b38
leaq 0x237(%rsp), %rdi
callq 0xd0630
leaq 0x260(%rsp), %rdi
callq 0xd0b38
leaq 0x25f(%rsp), %rdi
callq 0xd0630
testb $0x1, 0x1e6(%rsp)
jne 0x1627aa
jmp 0x1627b4
movq 0x68(%rsp), %rdi
callq 0xd0430
callq 0xd0940
jmp 0x1627bb
jmp 0x16295c
movq 0x158(%rsp), %rdi
movq $0x0, 0x1d8(%rsp)
leaq 0xe87f(%rip), %rsi      # 0x17105a
callq 0xd9b40
movq %rax, %rdi
callq 0xd9da0
testb $0x1, %al
jne 0x162868
movq 0x158(%rsp), %rdi
leaq 0xe85f(%rip), %rsi      # 0x17105a
callq 0xd9b40
movq %rax, %rsi
leaq 0x1c8(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0xd9dc0
movq 0x30(%rsp), %rdi
callq 0x1693b0
movq %rax, 0x38(%rsp)
jmp 0x162826
movq 0x38(%rsp), %rax
movq %rax, 0x1d8(%rsp)
leaq 0x1c8(%rsp), %rdi
callq 0xd9f30
jmp 0x162868
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
leaq 0x1c8(%rsp), %rdi
callq 0xd9f30
jmp 0x16295c
movl $0x178, %edi            # imm = 0x178
callq 0xd05d0
movq %rax, 0x10(%rsp)
movq %rax, 0x8(%rsp)
leaq 0x1a0(%rsp), %rdi
movq %rdi, 0x18(%rsp)
leaq 0x2d8(%rsp), %rsi
callq 0x155dd0
leaq 0x180(%rsp), %rdi
movq %rdi, 0x20(%rsp)
leaq 0x308(%rsp), %rsi
callq 0x155dd0
leaq 0x160(%rsp), %rdi
movq %rdi, 0x28(%rsp)
leaq 0x2a8(%rsp), %rsi
callq 0x155dd0
movq 0x10(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x20(%rsp), %rdx
movq 0x28(%rsp), %rcx
movsd 0x290(%rsp), %xmm0
movsd 0x288(%rsp), %xmm1
callq 0x1611a0
jmp 0x1628f7
movq 0x8(%rsp), %rax
movq %rax, 0x1c0(%rsp)
cmpq $0x0, 0x1d8(%rsp)
je 0x16294c
movq 0x1c0(%rsp), %rdi
movq 0x1d8(%rsp), %rsi
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x16294c
movq 0x8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x530(%rsp)
movl %eax, 0x52c(%rsp)
movl $0x178, %esi            # imm = 0x178
callq 0xd05e0
jmp 0x16295c
movq 0x1c0(%rsp), %rax
addq $0x568, %rsp            # imm = 0x568
retq
movq 0x530(%rsp), %rdi
callq 0xd0a10
movq %rax, %rdi
callq 0xd9890
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)