// File: /workspace/github_c_makefile_star2_O0/minoki[P]icfpc2006/run_threaded_switch.c
// Function: main
int main(int argc, char *argv[])
{
    if (argc <= 1) {
        fprintf(stderr, "Usage: %s file.um\n", argv[0]);
        return 1;
    }
    void *rawprogram = NULL;
    size_t rawprogsize = 0;
    {
        FILE *f = fopen(argv[1], "rb");
        assert(f != NULL);
        int seekresult = fseek(f, 0, SEEK_END);
        assert(seekresult == 0);
        long size = ftell(f);
        assert(size >= 0);
        rawprogsize = size;
        seekresult = fseek(f, 0, SEEK_SET);
        assert(seekresult == 0);
        rawprogram = malloc(rawprogsize);
        assert(rawprogram != NULL);
        size_t result = fread(rawprogram, 1, rawprogsize, f);
        assert(result == rawprogsize);
        fclose(f);
    }
    assert(rawprogsize % 4 == 0);
    struct array *arr0 = malloc(sizeof(uint32_t) + rawprogsize);
    assert(arr0 != NULL);
    arr0->length = rawprogsize / 4;
    {
        uint8_t *rawprogram_ = (uint8_t *)rawprogram;
        for (size_t i = 0; i < rawprogsize / 4; ++i) {
            uint32_t a = (uint32_t)rawprogram_[4 * i];
            uint32_t b = (uint32_t)rawprogram_[4 * i + 1];
            uint32_t c = (uint32_t)rawprogram_[4 * i + 2];
            uint32_t d = (uint32_t)rawprogram_[4 * i + 3];
            arr0->data[i] = (a << 24) | (b << 16) | (c << 8) | d;
        }
        free(rawprogram);
    }

    fprintf(stderr, "Loaded program. size=%zu bytes\n", rawprogsize);

    size_t pc = 0;
    uint32_t reg[8] = {0};
    struct array **arr = calloc(1, sizeof(struct array *));
    arr[0] = arr0;
    size_t arraycount = 1;
    uint32_t *freelist = NULL, *freelist_end = NULL;
    uint32_t freelist_capacity = 0;

    uint32_t op = 0;
    while (1) {
#define JUMP()                                  \
        do {                                    \
            op = arr0->data[pc];                \
            switch (op >> 28) {                 \
            case 0: goto OP_CondMove;           \
            case 1: goto OP_ArrayIndex;         \
            case 2: goto OP_ArrayAmendment;     \
            case 3: goto OP_Add;                \
            case 4: goto OP_Mul;                \
            case 5: goto OP_Div;                \
            case 6: goto OP_NotAnd;             \
            case 7: goto OP_Halt;               \
            case 8: goto OP_Alloc;              \
            case 9: goto OP_Abandon;            \
            case 10: goto OP_Output;            \
            case 11: goto OP_Input;             \
            case 12: goto OP_LoadProgram;       \
            case 13: goto OP_Orthography;       \
            default: __builtin_unreachable();   \
            }                                   \
        } while (0)
        JUMP();
    OP_CondMove:
        {
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            if (reg[c] != 0) {
                reg[a] = reg[b];
            }
            ++pc;
            JUMP();
        }
    OP_ArrayIndex:
        {
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            uint32_t i = reg[b];
            assert(i < arraycount);
            struct array *ai = arr[i];
            assert(ai != NULL);
            assert(reg[c] < ai->length);
            reg[a] = ai->data[reg[c]];
            ++pc;
            JUMP();
        }
    OP_ArrayAmendment:
        {
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            uint32_t i = reg[a];
            assert(i < arraycount);
            struct array *ai = arr[i];
            assert(ai != NULL);
            assert(reg[b] < ai->length);
            ai->data[reg[b]] = reg[c];
            ++pc;
            JUMP();
        }
    OP_Add:
        {
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            reg[a] = reg[b] + reg[c];
            ++pc;
            JUMP();
        }
    OP_Mul:
        {
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            reg[a] = reg[b] * reg[c];
            ++pc;
            JUMP();
        }
    OP_Div:
        {
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            assert(reg[c] != 0);
            reg[a] = reg[b] / reg[c];
            ++pc;
            JUMP();
        }
    OP_NotAnd:
        {
            uint32_t a = (op >> 6) & 7;
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            reg[a] = ~(reg[b] & reg[c]);
            ++pc;
            JUMP();
        }
    OP_Halt:
        fflush(stdout);
        fprintf(stderr, "HALT\n");
        return 0;
    OP_Alloc:
        {
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            uint32_t capacity = reg[c];
            uint32_t i = 0;
            if (freelist_end == freelist) {
                i = arraycount;
                ++arraycount;
                arr = realloc(arr, sizeof(struct array *) * arraycount);
                assert(arr != NULL);
            } else {
                i = *(--freelist_end);
                *freelist_end = 0;
            }
            struct array *newarr = calloc(1 + capacity, sizeof(uint32_t));
            assert(newarr != NULL);
            newarr->length = capacity;
            arr[i] = newarr;
            reg[b] = i;
            ++pc;
            JUMP();
        }
    OP_Abandon:
        {
            uint32_t c = op & 7;
            uint32_t i = reg[c];
            assert(i < arraycount);
            assert(i != 0);
            assert(arr[i] != NULL);
            free(arr[i]);
            arr[i] = NULL;
            if (freelist_end - freelist == freelist_capacity) {
                uint32_t freelist_new_capacity = freelist_capacity == 0 ? 32 : freelist_capacity * 2;
                freelist = realloc(freelist, freelist_new_capacity * sizeof(uint32_t));
                memset(freelist + freelist_capacity, 0, (freelist_new_capacity - freelist_capacity) * sizeof(uint32_t));
                freelist_end = freelist + freelist_capacity;
                freelist_capacity = freelist_new_capacity;
            }
            *freelist_end++ = i;
            ++pc;
            JUMP();
        }
    OP_Output:
        {
            uint32_t c = op & 7;
            assert(reg[c] <= 255);
            putchar(reg[c]);
            ++pc;
            JUMP();
        }
    OP_Input:
        {
            uint32_t c = op & 7;
            fflush(stdout);
            int ch = getchar();
            if (ch == EOF) {
                reg[c] = (uint32_t)(-1);
            } else {
                assert(0 <= ch && ch <= 255);
                reg[c] = (uint32_t)ch;
            }
            ++pc;
            JUMP();
        }
    OP_LoadProgram:
        {
            uint32_t b = (op >> 3) & 7;
            uint32_t c = op & 7;
            uint32_t i = reg[b];
            if (UNLIKELY(i != 0)) {
                assert(i < arraycount);
                assert(arr[i] != NULL);
                uint32_t length = arr[i]->length;
                struct array *newprogram = malloc((length + 1) * sizeof(uint32_t));
                assert(newprogram != NULL);
                memcpy(newprogram, arr[i], (length + 1) * sizeof(uint32_t));
                free(arr0);
                arr0 = newprogram;
                arr[0] = newprogram;
            }
            pc = reg[c];
            assert(pc < arr0->length);
            JUMP();
        }
    OP_Orthography:
        {
            uint32_t a = (op >> 25) & 7;
            uint32_t value = op & ((UINT32_C(1) << 25) - 1);
            reg[a] = value;
            ++pc;
            JUMP();
        }
    }
}

// Assembly:
subq $0x1f8, %rsp            # imm = 0x1F8
movl $0x0, 0x1f4(%rsp)
movl %edi, 0x1f0(%rsp)
movq %rsi, 0x1e8(%rsp)
cmpl $0x1, 0x1f0(%rsp)
jg 0x128e
movq 0x3d96(%rip), %rax      # 0x4ff8
movq (%rax), %rdi
movq 0x1e8(%rsp), %rax
movq (%rax), %rdx
leaq 0x209d(%rip), %rsi      # 0x3314
movb $0x0, %al
callq 0x10b0
movl $0x1, 0x1f4(%rsp)
jmp 0x29ed
movq $0x0, 0x1e0(%rsp)
movq $0x0, 0x1d8(%rsp)
movq 0x1e8(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x206e(%rip), %rsi      # 0x3327
callq 0x1120
movq %rax, 0x1d0(%rsp)
cmpq $0x0, 0x1d0(%rsp)
je 0x12d3
jmp 0x12f2
leaq 0x2050(%rip), %rdi      # 0x332a
leaq 0x2053(%rip), %rsi      # 0x3334
movl $0x1b, %edx
leaq 0x205d(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x1d0(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x2, %edx
callq 0x1100
movl %eax, 0x1cc(%rsp)
cmpl $0x0, 0x1cc(%rsp)
jne 0x131b
jmp 0x133a
leaq 0x203f(%rip), %rdi      # 0x3361
leaq 0x200b(%rip), %rsi      # 0x3334
movl $0x1d, %edx
leaq 0x2015(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x1d0(%rsp), %rdi
callq 0x10c0
movq %rax, 0x1c0(%rsp)
cmpq $0x0, 0x1c0(%rsp)
jl 0x135c
jmp 0x137b
leaq 0x200e(%rip), %rdi      # 0x3371
leaq 0x1fca(%rip), %rsi      # 0x3334
movl $0x1f, %edx
leaq 0x1fd4(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x1c0(%rsp), %rax
movq %rax, 0x1d8(%rsp)
movq 0x1d0(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x1100
movl %eax, 0x1cc(%rsp)
cmpl $0x0, 0x1cc(%rsp)
jne 0x13b1
jmp 0x13d0
leaq 0x1fa9(%rip), %rdi      # 0x3361
leaq 0x1f75(%rip), %rsi      # 0x3334
movl $0x22, %edx
leaq 0x1f7f(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x1d8(%rsp), %rdi
callq 0x10e0
movq %rax, 0x1e0(%rsp)
cmpq $0x0, 0x1e0(%rsp)
je 0x13f2
jmp 0x1411
leaq 0x1f82(%rip), %rdi      # 0x337b
leaq 0x1f34(%rip), %rsi      # 0x3334
movl $0x24, %edx
leaq 0x1f3e(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x1e0(%rsp), %rdi
movq 0x1d8(%rsp), %rdx
movq 0x1d0(%rsp), %rcx
movl $0x1, %esi
callq 0x1050
movq %rax, 0x1b8(%rsp)
movq 0x1b8(%rsp), %rax
cmpq 0x1d8(%rsp), %rax
jne 0x144f
jmp 0x146e
leaq 0x1f38(%rip), %rdi      # 0x338e
leaq 0x1ed7(%rip), %rsi      # 0x3334
movl $0x26, %edx
leaq 0x1ee1(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x1d0(%rsp), %rdi
callq 0x1060
movq 0x1d8(%rsp), %rax
andq $0x3, %rax
cmpq $0x0, %rax
jne 0x148f
jmp 0x14ae
leaq 0x1f0e(%rip), %rdi      # 0x33a4
leaq 0x1e97(%rip), %rsi      # 0x3334
movl $0x29, %edx
leaq 0x1ea1(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x1d8(%rsp), %rdi
addq $0x4, %rdi
callq 0x10e0
movq %rax, 0x1b0(%rsp)
cmpq $0x0, 0x1b0(%rsp)
je 0x14d4
jmp 0x14f3
leaq 0x1ede(%rip), %rdi      # 0x33b9
leaq 0x1e52(%rip), %rsi      # 0x3334
movl $0x2b, %edx
leaq 0x1e5c(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x1d8(%rsp), %rax
shrq $0x2, %rax
movl %eax, %ecx
movq 0x1b0(%rsp), %rax
movl %ecx, (%rax)
movq 0x1e0(%rsp), %rax
movq %rax, 0x1a8(%rsp)
movq $0x0, 0x1a0(%rsp)
movq 0x1a0(%rsp), %rax
movq 0x1d8(%rsp), %rcx
shrq $0x2, %rcx
cmpq %rcx, %rax
jae 0x1619
movq 0x1a8(%rsp), %rax
movq 0x1a0(%rsp), %rcx
shlq $0x2, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, 0x19c(%rsp)
movq 0x1a8(%rsp), %rax
movq 0x1a0(%rsp), %rcx
shlq $0x2, %rcx
movzbl 0x1(%rax,%rcx), %eax
movl %eax, 0x198(%rsp)
movq 0x1a8(%rsp), %rax
movq 0x1a0(%rsp), %rcx
shlq $0x2, %rcx
movzbl 0x2(%rax,%rcx), %eax
movl %eax, 0x194(%rsp)
movq 0x1a8(%rsp), %rax
movq 0x1a0(%rsp), %rcx
shlq $0x2, %rcx
movzbl 0x3(%rax,%rcx), %eax
movl %eax, 0x190(%rsp)
movl 0x19c(%rsp), %edx
shll $0x18, %edx
movl 0x198(%rsp), %eax
shll $0x10, %eax
orl %eax, %edx
movl 0x194(%rsp), %eax
shll $0x8, %eax
orl %eax, %edx
orl 0x190(%rsp), %edx
movq 0x1b0(%rsp), %rax
movq 0x1a0(%rsp), %rcx
movl %edx, 0x4(%rax,%rcx,4)
movq 0x1a0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x1a0(%rsp)
jmp 0x1527
movq 0x1e0(%rsp), %rdi
callq 0x1030
movq 0x39cb(%rip), %rax      # 0x4ff8
movq (%rax), %rdi
movq 0x1d8(%rsp), %rdx
leaq 0x1d87(%rip), %rsi      # 0x33c6
movb $0x0, %al
callq 0x10b0
movq $0x0, 0x188(%rsp)
leaq 0x160(%rsp), %rdi
xorl %esi, %esi
movl $0x20, %edx
callq 0x1080
movl $0x1, %edi
movl $0x8, %esi
callq 0x1090
movq %rax, 0x158(%rsp)
movq 0x1b0(%rsp), %rcx
movq 0x158(%rsp), %rax
movq %rcx, (%rax)
movq $0x1, 0x150(%rsp)
movq $0x0, 0x148(%rsp)
movq $0x0, 0x140(%rsp)
movl $0x0, 0x13c(%rsp)
movl $0x0, 0x138(%rsp)
jmp 0x16cc
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x70(%rsp)
movq 0x70(%rsp), %rax
leaq 0x1902(%rip), %rcx      # 0x3004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0x134(%rsp)
movl 0x138(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0x130(%rsp)
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x12c(%rsp)
movl 0x12c(%rsp), %eax
cmpl $0x0, 0x160(%rsp,%rax,4)
je 0x17b4
movl 0x130(%rsp), %eax
movl 0x160(%rsp,%rax,4), %ecx
movl 0x134(%rsp), %eax
movl %ecx, 0x160(%rsp,%rax,4)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x68(%rsp)
movq 0x68(%rsp), %rax
leaq 0x183e(%rip), %rcx      # 0x303c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0x128(%rsp)
movl 0x138(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0x124(%rsp)
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x120(%rsp)
movl 0x124(%rsp), %eax
movl 0x160(%rsp,%rax,4), %eax
movl %eax, 0x11c(%rsp)
movl 0x11c(%rsp), %eax
cmpq 0x150(%rsp), %rax
jae 0x18ab
jmp 0x18ca
leaq 0x1b34(%rip), %rdi      # 0x33e6
leaq 0x1a7b(%rip), %rsi      # 0x3334
movl $0x6c, %edx
leaq 0x1a85(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x158(%rsp), %rax
movl 0x11c(%rsp), %ecx
movq (%rax,%rcx,8), %rax
movq %rax, 0x110(%rsp)
cmpq $0x0, 0x110(%rsp)
je 0x18f2
jmp 0x1911
leaq 0x1afc(%rip), %rdi      # 0x33f5
leaq 0x1a34(%rip), %rsi      # 0x3334
movl $0x6e, %edx
leaq 0x1a3e(%rip), %rcx      # 0x334a
callq 0x1070
movl 0x120(%rsp), %eax
movl 0x160(%rsp,%rax,4), %eax
movq 0x110(%rsp), %rcx
cmpl (%rcx), %eax
jae 0x192d
jmp 0x194c
leaq 0x1acc(%rip), %rdi      # 0x3400
leaq 0x19f9(%rip), %rsi      # 0x3334
movl $0x6f, %edx
leaq 0x1a03(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x110(%rsp), %rax
movl 0x120(%rsp), %ecx
movl 0x160(%rsp,%rcx,4), %ecx
movl 0x4(%rax,%rcx,4), %ecx
movl 0x128(%rsp), %eax
movl %ecx, 0x160(%rsp,%rax,4)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x60(%rsp)
movq 0x60(%rsp), %rax
leaq 0x16b6(%rip), %rcx      # 0x3074
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0x10c(%rsp)
movl 0x138(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0x108(%rsp)
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x104(%rsp)
movl 0x10c(%rsp), %eax
movl 0x160(%rsp,%rax,4), %eax
movl %eax, 0x100(%rsp)
movl 0x100(%rsp), %eax
cmpq 0x150(%rsp), %rax
jae 0x1a6b
jmp 0x1a8a
leaq 0x1974(%rip), %rdi      # 0x33e6
leaq 0x18bb(%rip), %rsi      # 0x3334
movl $0x7a, %edx
leaq 0x18c5(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x158(%rsp), %rax
movl 0x100(%rsp), %ecx
movq (%rax,%rcx,8), %rax
movq %rax, 0xf8(%rsp)
cmpq $0x0, 0xf8(%rsp)
je 0x1ab2
jmp 0x1ad1
leaq 0x193c(%rip), %rdi      # 0x33f5
leaq 0x1874(%rip), %rsi      # 0x3334
movl $0x7c, %edx
leaq 0x187e(%rip), %rcx      # 0x334a
callq 0x1070
movl 0x108(%rsp), %eax
movl 0x160(%rsp,%rax,4), %eax
movq 0xf8(%rsp), %rcx
cmpl (%rcx), %eax
jae 0x1aed
jmp 0x1b0c
leaq 0x1920(%rip), %rdi      # 0x3414
leaq 0x1839(%rip), %rsi      # 0x3334
movl $0x7d, %edx
leaq 0x1843(%rip), %rcx      # 0x334a
callq 0x1070
movl 0x104(%rsp), %eax
movl 0x160(%rsp,%rax,4), %edx
movq 0xf8(%rsp), %rax
movl 0x108(%rsp), %ecx
movl 0x160(%rsp,%rcx,4), %ecx
movl %edx, 0x4(%rax,%rcx,4)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x58(%rsp)
movq 0x58(%rsp), %rax
leaq 0x152e(%rip), %rcx      # 0x30ac
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0xf4(%rsp)
movl 0x138(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0xf0(%rsp)
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xec(%rsp)
movl 0xf0(%rsp), %eax
movl 0x160(%rsp,%rax,4), %ecx
movl 0xec(%rsp), %eax
addl 0x160(%rsp,%rax,4), %ecx
movl 0xf4(%rsp), %eax
movl %ecx, 0x160(%rsp,%rax,4)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rax
leaq 0x146d(%rip), %rcx      # 0x30e4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0xe8(%rsp)
movl 0x138(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0xe4(%rsp)
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xe0(%rsp)
movl 0xe4(%rsp), %eax
movl 0x160(%rsp,%rax,4), %ecx
movl 0xe0(%rsp), %eax
imull 0x160(%rsp,%rax,4), %ecx
movl 0xe8(%rsp), %eax
movl %ecx, 0x160(%rsp,%rax,4)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rax
leaq 0x13ab(%rip), %rcx      # 0x311c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0xdc(%rsp)
movl 0x138(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0xd8(%rsp)
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xd4(%rsp)
movl 0xd4(%rsp), %eax
cmpl $0x0, 0x160(%rsp,%rax,4)
je 0x1e09
jmp 0x1e28
leaq 0x1618(%rip), %rdi      # 0x3428
leaq 0x151d(%rip), %rsi      # 0x3334
movl $0x99, %edx
leaq 0x1527(%rip), %rcx      # 0x334a
callq 0x1070
movl 0xd8(%rsp), %eax
movl 0x160(%rsp,%rax,4), %eax
movl 0xd4(%rsp), %ecx
xorl %edx, %edx
divl 0x160(%rsp,%rcx,4)
movl %eax, %ecx
movl 0xdc(%rsp), %eax
movl %ecx, 0x160(%rsp,%rax,4)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rax
leaq 0x12b4(%rip), %rcx      # 0x3154
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
shrl $0x6, %eax
andl $0x7, %eax
movl %eax, 0xd0(%rsp)
movl 0x138(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0xcc(%rsp)
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xc8(%rsp)
movl 0xcc(%rsp), %eax
movl 0x160(%rsp,%rax,4), %ecx
movl 0xc8(%rsp), %eax
andl 0x160(%rsp,%rax,4), %ecx
xorl $-0x1, %ecx
movl 0xd0(%rsp), %eax
movl %ecx, 0x160(%rsp,%rax,4)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rax
leaq 0x11f0(%rip), %rcx      # 0x318c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movq 0x2fec(%rip), %rax      # 0x4fd8
movq (%rax), %rdi
callq 0x10f0
movq 0x2ffd(%rip), %rax      # 0x4ff8
movq (%rax), %rdi
leaq 0x142f(%rip), %rsi      # 0x3434
movb $0x0, %al
callq 0x10b0
movl $0x0, 0x1f4(%rsp)
jmp 0x29ed
movl 0x138(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0xc4(%rsp)
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xc0(%rsp)
movl 0xc0(%rsp), %eax
movl 0x160(%rsp,%rax,4), %eax
movl %eax, 0xbc(%rsp)
movl $0x0, 0xb8(%rsp)
movq 0x140(%rsp), %rax
cmpq 0x148(%rsp), %rax
jne 0x20e5
movq 0x150(%rsp), %rax
movl %eax, 0xb8(%rsp)
movq 0x150(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x150(%rsp)
movq 0x158(%rsp), %rdi
movq 0x150(%rsp), %rsi
shlq $0x3, %rsi
callq 0x1110
movq %rax, 0x158(%rsp)
cmpq $0x0, 0x158(%rsp)
je 0x20c4
jmp 0x20e3
leaq 0x1372(%rip), %rdi      # 0x343d
leaq 0x1262(%rip), %rsi      # 0x3334
movl $0xb5, %edx
leaq 0x126c(%rip), %rcx      # 0x334a
callq 0x1070
jmp 0x2114
movq 0x140(%rsp), %rax
movq %rax, %rcx
addq $-0x4, %rcx
movq %rcx, 0x140(%rsp)
movl -0x4(%rax), %eax
movl %eax, 0xb8(%rsp)
movq 0x140(%rsp), %rax
movl $0x0, (%rax)
movl 0xbc(%rsp), %eax
addl $0x1, %eax
movl %eax, %eax
movl %eax, %edi
movl $0x4, %esi
callq 0x1090
movq %rax, 0xb0(%rsp)
cmpq $0x0, 0xb0(%rsp)
je 0x2141
jmp 0x2160
leaq 0x12f2(%rip), %rdi      # 0x343a
leaq 0x11e5(%rip), %rsi      # 0x3334
movl $0xbb, %edx
leaq 0x11ef(%rip), %rcx      # 0x334a
callq 0x1070
movl 0xbc(%rsp), %ecx
movq 0xb0(%rsp), %rax
movl %ecx, (%rax)
movq 0xb0(%rsp), %rdx
movq 0x158(%rsp), %rax
movl 0xb8(%rsp), %ecx
movq %rdx, (%rax,%rcx,8)
movl 0xb8(%rsp), %ecx
movl 0xc4(%rsp), %eax
movl %ecx, 0x160(%rsp,%rax,4)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
leaq 0xfd9(%rip), %rcx       # 0x31c4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xac(%rsp)
movl 0xac(%rsp), %eax
movl 0x160(%rsp,%rax,4), %eax
movl %eax, 0xa8(%rsp)
movl 0xa8(%rsp), %eax
cmpq 0x150(%rsp), %rax
jae 0x2270
jmp 0x228f
leaq 0x116f(%rip), %rdi      # 0x33e6
leaq 0x10b6(%rip), %rsi      # 0x3334
movl $0xc6, %edx
leaq 0x10c0(%rip), %rcx      # 0x334a
callq 0x1070
cmpl $0x0, 0xa8(%rsp)
je 0x229b
jmp 0x22ba
leaq 0x11a7(%rip), %rdi      # 0x3449
leaq 0x108b(%rip), %rsi      # 0x3334
movl $0xc7, %edx
leaq 0x1095(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x158(%rsp), %rax
movl 0xa8(%rsp), %ecx
cmpq $0x0, (%rax,%rcx,8)
je 0x22d2
jmp 0x22f1
leaq 0x1177(%rip), %rdi      # 0x3450
leaq 0x1054(%rip), %rsi      # 0x3334
movl $0xc8, %edx
leaq 0x105e(%rip), %rcx      # 0x334a
callq 0x1070
movq 0x158(%rsp), %rax
movl 0xa8(%rsp), %ecx
movq (%rax,%rcx,8), %rdi
callq 0x1030
movq 0x158(%rsp), %rax
movl 0xa8(%rsp), %ecx
movq $0x0, (%rax,%rcx,8)
movq 0x140(%rsp), %rax
movq 0x148(%rsp), %rcx
subq %rcx, %rax
sarq $0x2, %rax
movl 0x13c(%rsp), %ecx
cmpq %rcx, %rax
jne 0x23f5
cmpl $0x0, 0x13c(%rsp)
jne 0x235c
movl $0x20, %eax
movl %eax, 0x2c(%rsp)
jmp 0x2369
movl 0x13c(%rsp), %eax
shll %eax
movl %eax, 0x2c(%rsp)
movl 0x2c(%rsp), %eax
movl %eax, 0xa4(%rsp)
movq 0x148(%rsp), %rdi
movl 0xa4(%rsp), %eax
movl %eax, %esi
shlq $0x2, %rsi
callq 0x1110
movq %rax, 0x148(%rsp)
movq 0x148(%rsp), %rdi
movl 0x13c(%rsp), %eax
shlq $0x2, %rax
addq %rax, %rdi
movl 0xa4(%rsp), %eax
subl 0x13c(%rsp), %eax
movl %eax, %eax
movl %eax, %edx
shlq $0x2, %rdx
xorl %esi, %esi
callq 0x1080
movq 0x148(%rsp), %rax
movl 0x13c(%rsp), %ecx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, 0x140(%rsp)
movl 0xa4(%rsp), %eax
movl %eax, 0x13c(%rsp)
movl 0xa8(%rsp), %ecx
movq 0x140(%rsp), %rax
movq %rax, %rdx
addq $0x4, %rdx
movq %rdx, 0x140(%rsp)
movl %ecx, (%rax)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
leaq 0xd9d(%rip), %rcx       # 0x31fc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0xa0(%rsp)
movl 0xa0(%rsp), %eax
cmpl $0xff, 0x160(%rsp,%rax,4)
ja 0x24d2
jmp 0x24f1
leaq 0xf86(%rip), %rdi       # 0x345f
leaq 0xe54(%rip), %rsi       # 0x3334
movl $0xd9, %edx
leaq 0xe5e(%rip), %rcx       # 0x334a
callq 0x1070
movl 0xa0(%rsp), %eax
movl 0x160(%rsp,%rax,4), %edi
callq 0x1040
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
leaq 0xce6(%rip), %rcx       # 0x3234
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x9c(%rsp)
movq 0x2a26(%rip), %rax      # 0x4fd8
movq (%rax), %rdi
callq 0x10f0
callq 0x10a0
movl %eax, 0x98(%rsp)
cmpl $-0x1, 0x98(%rsp)
jne 0x25e4
movl 0x9c(%rsp), %eax
movl $0xffffffff, 0x160(%rsp,%rax,4) # imm = 0xFFFFFFFF
jmp 0x2632
xorl %eax, %eax
cmpl 0x98(%rsp), %eax
jg 0x25fe
cmpl $0xff, 0x98(%rsp)
jg 0x25fe
jmp 0x261d
leaq 0xe68(%rip), %rdi       # 0x346d
leaq 0xd28(%rip), %rsi       # 0x3334
movl $0xe6, %edx
leaq 0xd32(%rip), %rcx       # 0x334a
callq 0x1070
movl 0x98(%rsp), %ecx
movl 0x9c(%rsp), %eax
movl %ecx, 0x160(%rsp,%rax,4)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
leaq 0xbf0(%rip), %rcx       # 0x326c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
shrl $0x3, %eax
andl $0x7, %eax
movl %eax, 0x94(%rsp)
movl 0x138(%rsp), %eax
andl $0x7, %eax
movl %eax, 0x90(%rsp)
movl 0x94(%rsp), %eax
movl 0x160(%rsp,%rax,4), %eax
movl %eax, 0x8c(%rsp)
cmpl $0x0, 0x8c(%rsp)
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x2854
movl 0x8c(%rsp), %eax
cmpq 0x150(%rsp), %rax
jae 0x2735
jmp 0x2754
leaq 0xcaa(%rip), %rdi       # 0x33e6
leaq 0xbf1(%rip), %rsi       # 0x3334
movl $0xf2, %edx
leaq 0xbfb(%rip), %rcx       # 0x334a
callq 0x1070
movq 0x158(%rsp), %rax
movl 0x8c(%rsp), %ecx
cmpq $0x0, (%rax,%rcx,8)
je 0x276c
jmp 0x278b
leaq 0xcdd(%rip), %rdi       # 0x3450
leaq 0xbba(%rip), %rsi       # 0x3334
movl $0xf3, %edx
leaq 0xbc4(%rip), %rcx       # 0x334a
callq 0x1070
movq 0x158(%rsp), %rax
movl 0x8c(%rsp), %ecx
movq (%rax,%rcx,8), %rax
movl (%rax), %eax
movl %eax, 0x88(%rsp)
movl 0x88(%rsp), %eax
addl $0x1, %eax
movl %eax, %eax
movl %eax, %edi
shlq $0x2, %rdi
callq 0x10e0
movq %rax, 0x80(%rsp)
cmpq $0x0, 0x80(%rsp)
je 0x27d3
jmp 0x27f2
leaq 0xca8(%rip), %rdi       # 0x3482
leaq 0xb53(%rip), %rsi       # 0x3334
movl $0xf6, %edx
leaq 0xb5d(%rip), %rcx       # 0x334a
callq 0x1070
movq 0x80(%rsp), %rdi
movq 0x158(%rsp), %rax
movl 0x8c(%rsp), %ecx
movq (%rax,%rcx,8), %rsi
movl 0x88(%rsp), %eax
addl $0x1, %eax
movl %eax, %eax
movl %eax, %edx
shlq $0x2, %rdx
callq 0x10d0
movq 0x1b0(%rsp), %rdi
callq 0x1030
movq 0x80(%rsp), %rax
movq %rax, 0x1b0(%rsp)
movq 0x80(%rsp), %rcx
movq 0x158(%rsp), %rax
movq %rcx, (%rax)
movl 0x90(%rsp), %eax
movl 0x160(%rsp,%rax,4), %eax
movq %rax, 0x188(%rsp)
movq 0x188(%rsp), %rax
movq 0x1b0(%rsp), %rcx
movl (%rcx), %ecx
cmpq %rcx, %rax
jae 0x2883
jmp 0x28a2
leaq 0xc0b(%rip), %rdi       # 0x3495
leaq 0xaa3(%rip), %rsi       # 0x3334
movl $0xfd, %edx
leaq 0xaad(%rip), %rcx       # 0x334a
callq 0x1070
jmp 0x28a4
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rax
leaq 0x9ca(%rip), %rcx       # 0x32a4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x138(%rsp), %eax
shrl $0x19, %eax
andl $0x7, %eax
movl %eax, 0x7c(%rsp)
movl 0x138(%rsp), %eax
andl $0x1ffffff, %eax        # imm = 0x1FFFFFF
movl %eax, 0x78(%rsp)
movl 0x78(%rsp), %ecx
movl 0x7c(%rsp), %eax
movl %ecx, 0x160(%rsp,%rax,4)
movq 0x188(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x188(%rsp)
movq 0x1b0(%rsp), %rax
movq 0x188(%rsp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, 0x138(%rsp)
movl 0x138(%rsp), %eax
shrl $0x1c, %eax
movq %rax, (%rsp)
movq (%rsp), %rax
leaq 0x93e(%rip), %rcx       # 0x32dc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x174e
jmp 0x184a
jmp 0x1a0a
jmp 0x1bca
jmp 0x1cc3
jmp 0x1dbd
jmp 0x1eec
jmp 0x1fe5
jmp 0x201c
jmp 0x2237
jmp 0x24ab
jmp 0x259a
jmp 0x26c8
jmp 0x2926
movl 0x1f4(%rsp), %eax
addq $0x1f8, %rsp            # imm = 0x1F8
retq