// File: /workspace/github_c_makefile_star2_O3/kaiserschmarrn0[P]mywm/mywm.c
// Function: main
int main(void) {
	signal(SIGINT, catch);
	signal(SIGTERM, catch);

	dpy = XOpenDisplay(0);
	conn = XGetXCBConnection(dpy);
	XSetEventQueueOwner(dpy, XCBOwnsEventQueue);
	scr = xcb_setup_roots_iterator(xcb_get_setup(conn)).data;

	XVisualInfo xv, *res = NULL;
	xv.depth = 32;
	int flag = 0;
	res = XGetVisualInfo(dpy, VisualDepthMask, &xv, &flag);
	if (flag > 0) {
		vis_ptr = res->visual;
		vis = res->visualid;
	} else {
		vis_ptr = DefaultVisual(dpy, 0);
		vis = scr->root_visual;
	}

	cm = xcb_generate_id(conn);
	xcb_create_colormap(conn, XCB_COLORMAP_ALLOC_NONE, cm, scr->root, vis);

	depth = (vis == scr->root_visual) ? XCB_COPY_FROM_PARENT : 32;

	for (int i = 0; i < LEN(fonts); i++) {
		xfts[i] = XftFontOpenName(dpy, 0, fonts[i]);
	}

	for (int i = 0; i < LEN(controls); i++) {
		for (int j = 0; j < PM_COUNT; j++) {
			pixmaps[i][j] = xcb_generate_id(conn);
			xcb_create_pixmap(conn, depth, pixmaps[i][j], scr->root,
					controls[i].geom.width, controls[i].geom.height);

			int w = controls[i].geom.width;
			int h = controls[i].geom.height;

			xcb_gcontext_t gc = xcb_generate_id(conn);
			uint32_t mask = XCB_GC_FOREGROUND | XCB_GC_GRAPHICS_EXPOSURES;
			uint32_t vals[2];
			vals[0] = controls[i].colors[PM_BG(j)];
			vals[1] = 0;
			xcb_create_gc(conn, gc, pixmaps[i][j], mask, vals);

			xcb_rectangle_t rect = { 0, 0, w, h };
			xcb_poly_fill_rectangle_checked(conn, pixmaps[i][j], gc, 1, &rect);

			xcb_free_gc(conn, gc);

			XftFont *font = xfts[controls[i].font_index];
			char *icon = controls[i].shape_fg;
			int len = strlen(icon);

			XGlyphInfo ret;
			XftTextExtentsUtf8(dpy, font, (XftChar8 *)icon, len, &ret);
			int x = (w - ret.width) / 2;
			int y = (controls[i].geom.height + font->ascent - font->descent) / 2;

			XftDraw *draw = XftDrawCreate(dpy, pixmaps[i][j], vis_ptr, cm);
			XftColor fg = xft_color(controls[i].colors[PM_FG(j)]);

			XftDrawStringUtf8(draw, &fg, font, x, y, (XftChar8 *)icon, len);
		}
	}

	uint32_t mask = XCB_CW_EVENT_MASK;
	uint32_t val = XCB_EVENT_MASK_POINTER_MOTION | XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT;

	xcb_change_window_attributes(conn, scr->root, mask, &val);
	xcb_flush(conn);
	
	const xcb_query_extension_reply_t *shape_reply = xcb_get_extension_data(conn, &xcb_shape_id);
	if (!shape_reply->present) {
		fprintf(stderr, "x server doesn't have xshape\n");
		return 1;
	}

	ewmh = calloc(1, sizeof(xcb_ewmh_connection_t));
	if (!ewmh) {
		fprintf(stderr, "couldn't allocate ewmh connection\n");
		return 1;
	}
	xcb_ewmh_init_atoms_replies(ewmh, xcb_ewmh_init_atoms(conn, ewmh), (void *)0);

	const char *wm_atom_name[3]; 
	wm_atom_name[0] = "WM_PROTOCOLS";
	wm_atom_name[1] = "WM_DELETE_WINDOW";
	wm_atom_name[2] = "WM_STATE";
	get_atoms(wm_atom_name, wm_atoms, WM_COUNT);

	const char *net_atom_name[1];
	net_atom_name[0] = "_NET_WM_STATE_FOCUSED";
	get_atoms(net_atom_name, &ewmh__NET_WM_STATE_FOCUSED, 0);

	xcb_atom_t supported_atoms[] = {
		ewmh->_NET_SUPPORTED,
		ewmh->_NET_WM_STATE,
		ewmh->_NET_WM_STATE_FULLSCREEN,
		ewmh->_NET_WM_STATE_STICKY,
		ewmh->_NET_WM_STATE_ABOVE,
		ewmh->_NET_WM_STATE_HIDDEN,
		ewmh->_NET_WM_WINDOW_TYPE,
		ewmh->_NET_WM_WINDOW_TYPE_DOCK,
		ewmh->_NET_FRAME_EXTENTS,

		ewmh__NET_WM_STATE_FOCUSED,

		wm_atoms[WM_PROTOCOLS],
		wm_atoms[WM_DELETE_WINDOW],
		wm_atoms[WM_STATE],
	};

	xcb_ewmh_set_supported(ewmh, 0, LEN(supported_atoms), supported_atoms);
	xcb_ewmh_set_wm_name(ewmh, scr->root, 4, "mywm");
	
	mask = XCB_EVENT_MASK_BUTTON_PRESS | XCB_EVENT_MASK_BUTTON_RELEASE;
	for (int i = 0; i < LEN(grab_buttons); i++) {
		xcb_grab_button(conn, 0, scr->root, mask, XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC,
				scr->root, XCB_NONE, grab_buttons[i].button, grab_buttons[i].mod);
	}

	grab_keys();

	for (int i = 0; i < XCB_NO_OPERATION; i++) events[i] = NULL;

	events[XCB_BUTTON_PRESS]      = button_press;
	events[XCB_CLIENT_MESSAGE]    = client_message;
	events[XCB_CONFIGURE_REQUEST] = configure_request;
	events[XCB_KEY_PRESS]         = key_press;
	events[XCB_KEY_RELEASE]       = key_release;
	events[XCB_MAP_REQUEST]       = map_request;
	events[XCB_UNMAP_NOTIFY]      = unmap_notify;
	events[XCB_DESTROY_NOTIFY]    = destroy_notify;
	events[XCB_ENTER_NOTIFY]      = enter_notify;
	events[XCB_LEAVE_NOTIFY]      = leave_notify;
	events[XCB_MAPPING_NOTIFY]    = mapping_notify;
	events[XCB_EXPOSE]            = expose;
	events[XCB_FOCUS_IN]          = focus_in;

	keysyms = xcb_key_symbols_alloc(conn);

#ifdef ROUNDED
	init_rounded_corners();
#endif
	
	create_snap_regions();
	create_margins();
	cursor_init();
	
	xcb_query_tree_reply_t *tr_reply = xcb_query_tree_reply(conn,
			xcb_query_tree(conn, scr->root), 0);

	stack[0].fwin = NULL;
	stack[1].fwin = NULL;
	stack[2].fwin = NULL;
	stack[3].fwin = NULL;

#ifdef PICKUP
	int ch_len = xcb_query_tree_children_length(tr_reply);
	xcb_window_t *children = xcb_query_tree_children(tr_reply);

	for (int i = 0; i < ch_len; i++) {
		xcb_get_window_attributes_reply_t *attr = xcb_get_window_attributes_reply(conn,
				xcb_get_window_attributes_unchecked(conn, children[i]), NULL);

		if (!attr || attr->override_redirect || attr->map_state != XCB_MAP_STATE_VIEWABLE) {
			continue;
		}

		create_window_existing(children[i]);
	}

	free(tr_reply);
#endif

	struct pollfd fd;
	fd.fd = xcb_get_file_descriptor(conn);
	fd.events = POLLIN;

	xcb_flush(conn);
	for (; !xcb_connection_has_error(conn) && sigcode == 0;) {
		if (poll(&fd, 1, -1) == -1) {
			break;
		}

		xcb_generic_event_t *ev;
		while((ev = xcb_poll_for_event(conn))) {
			if (ev->response_type == 0) {
				xcb_generic_error_t *error = (xcb_generic_error_t *) ev;
				printf("mywm: error:\n\terror_code: %d\n\tmajor_code: "
						"%d\n\tminor_code: %d\n", error->error_code,
						error->major_code, error->minor_code);
			}
	
			if (events[ev->response_type & ~0x80]) {
				events[ev->response_type & ~0x80](ev);
			}
			free(ev);
			
			xcb_flush(conn);
		}
	}

	die();

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xe8, %rsp
leaq 0x7ca(%rip), %rbx       # 0x429b
movl $0x2, %edi
movq %rbx, %rsi
callq 0x33d0
movl $0xf, %edi
movq %rbx, %rsi
callq 0x33d0
xorl %edi, %edi
callq 0x3230
movq %rax, 0x99a7(%rip)      # 0xd4a0
movq %rax, %rdi
callq 0x3070
movq %rax, 0x9940(%rip)      # 0xd448
movq 0x9991(%rip), %rdi      # 0xd4a0
movl $0x1, %esi
callq 0x3480
movq 0x9928(%rip), %rdi      # 0xd448
callq 0x32c0
movq %rax, %rdi
callq 0x3250
movq %rax, 0x991c(%rip)      # 0xd450
leaq -0x110(%rbp), %rdx
movl $0x20, 0x14(%rdx)
leaq -0x74(%rbp), %rbx
movl $0x0, (%rbx)
movq 0x994d(%rip), %rdi      # 0xd4a0
movl $0x4, %esi
movq %rbx, %rcx
callq 0x3520
cmpl $0x0, (%rbx)
jle 0x3b6a
movl 0x8(%rax), %ecx
jmp 0x3b86
movq 0x992f(%rip), %rax      # 0xd4a0
movq 0xe8(%rax), %rax
addq $0x40, %rax
movq 0x98cd(%rip), %rcx      # 0xd450
movl 0x20(%rcx), %ecx
movq (%rax), %rax
movq %rax, 0x9920(%rip)      # 0xd4b0
movl %ecx, 0x9922(%rip)      # 0xd4b8
movq 0x98ab(%rip), %rdi      # 0xd448
callq 0x3560
movl %eax, 0x9914(%rip)      # 0xd4bc
movq 0x9899(%rip), %rdi      # 0xd448
movq 0x989a(%rip), %rcx      # 0xd450
movl (%rcx), %ecx
movl 0x98f9(%rip), %r8d      # 0xd4b8
xorl %ebx, %ebx
xorl %esi, %esi
movl %eax, %edx
callq 0x3440
movl 0x98e8(%rip), %eax      # 0xd4b8
movq 0x9879(%rip), %rcx      # 0xd450
xorl %edx, %edx
cmpl 0x20(%rcx), %eax
setne %dl
shll $0x5, %edx
movl %edx, 0x98d8(%rip)      # 0xd4c0
movq 0x98b1(%rip), %rdi      # 0xd4a0
leaq 0x54d9(%rip), %rdx      # 0x90cf
xorl %esi, %esi
callq 0x3430
movq %rax, 0x98a4(%rip)      # 0xd4a8
movb $0x1, %al
leaq 0x9873(%rip), %r12      # 0xd480
leaq -0x30(%rbp), %r13
movl %eax, -0x3c(%rbp)
leaq (%rbx,%rbx,4), %rax
shlq $0x4, %rax
leaq 0x8ddd(%rip), %rcx      # 0xca00
leaq (%rcx,%rax), %rdx
movq %rdx, -0x58(%rbp)
shlq $0x4, %rbx
movq %rbx, -0x60(%rbp)
addq %rcx, %rax
addq $0x34, %rax
movq %rax, -0x50(%rbp)
xorl %r14d, %r14d
movq 0x9800(%rip), %rdi      # 0xd448
callq 0x3560
movq -0x60(%rbp), %rcx
leaq (%rcx,%r14,4), %r15
movl %eax, (%r12,%r15)
movq 0x97e8(%rip), %rdi      # 0xd448
movzbl 0x9859(%rip), %esi      # 0xd4c0
movq 0x97e2(%rip), %rcx      # 0xd450
movl (%rcx), %ecx
movl %eax, %edx
movl $0x20, %r8d
movl $0x20, %r9d
callq 0x3100
movq 0x97be(%rip), %rdi      # 0xd448
callq 0x3560
movl %eax, %ebx
movq -0x50(%rbp), %rax
movl -0x4(%rax,%r14,8), %ecx
movl %ecx, -0x38(%rbp)
movl (%rax,%r14,8), %eax
movl %eax, -0x30(%rbp)
movl $0x0, -0x2c(%rbp)
movq 0x9796(%rip), %rdi      # 0xd448
movl (%r12,%r15), %edx
movl %ebx, %esi
movl $0x10004, %ecx          # imm = 0x10004
movq %r13, %r8
callq 0x3490
movabsq $0x20002000000000, %rax # imm = 0x20002000000000
movq %rax, -0x44(%rbp)
movq 0x976e(%rip), %rdi      # 0xd448
movl (%r12,%r15), %esi
movl %ebx, %edx
movl $0x1, %ecx
leaq -0x44(%rbp), %r8
callq 0x34a0
movq 0x9753(%rip), %rdi      # 0xd448
movl %ebx, %esi
callq 0x31a0
movq 0x97a5(%rip), %rbx      # 0xd4a8
movq -0x58(%rbp), %rax
movq 0x10(%rax), %r12
movq %r12, -0x68(%rbp)
movq %r12, %rdi
callq 0x3290
movq %rax, -0x70(%rbp)
movq 0x977e(%rip), %rdi      # 0xd4a0
movq %rbx, %rsi
movq %r12, %rdx
movl %eax, %ecx
leaq -0x90(%rbp), %r8
callq 0x34f0
movzwl -0x90(%rbp), %eax
movl $0x20, %ecx
subl %eax, %ecx
movl %ecx, %r12d
shrl $0x1f, %r12d
addl %ecx, %r12d
sarl %r12d
movl (%rbx), %eax
subl 0x4(%rbx), %eax
movl %eax, %ecx
addl $0x20, %ecx
shrl $0x1f, %ecx
leal (%rax,%rcx), %r13d
addl $0x20, %r13d
sarl %r13d
movq 0x9730(%rip), %rdi      # 0xd4a0
leaq 0x9709(%rip), %rax      # 0xd480
movl (%rax,%r15), %esi
movq 0x972e(%rip), %rdx      # 0xd4b0
movl 0x9734(%rip), %ecx      # 0xd4bc
callq 0x35e0
movq %rax, %r15
movl -0x38(%rbp), %edi
callq 0x8933
movq %rax, -0xd0(%rbp)
movq %rdx, -0xc8(%rbp)
subq $0x8, %rsp
movq %r15, %rdi
leaq -0xd0(%rbp), %rsi
movq %rbx, %rdx
movl %r12d, %ecx
leaq 0x96bf(%rip), %r12      # 0xd480
movl %r13d, %r8d
leaq -0x30(%rbp), %r13
movq -0x68(%rbp), %r9
pushq -0x70(%rbp)
callq 0x3190
addq $0x10, %rsp
incq %r14
cmpq $0x4, %r14
jne 0x3c41
movl $0x1, %ebx
testb $0x1, -0x3c(%rbp)
movl $0x0, %eax
jne 0x3c11
leaq -0x44(%rbp), %rcx
movl $0x180040, (%rcx)       # imm = 0x180040
movq 0x963e(%rip), %rdi      # 0xd448
movq 0x963f(%rip), %rax      # 0xd450
movl (%rax), %esi
movl $0x800, %edx            # imm = 0x800
callq 0x33b0
movq 0x9624(%rip), %rdi      # 0xd448
callq 0x3360
movq 0x9618(%rip), %rdi      # 0xd448
movq 0x91a9(%rip), %rsi      # 0xcfe0
callq 0x3180
cmpb $0x0, 0x8(%rax)
je 0x4288
movl $0x1, %edi
movl $0x168, %esi            # imm = 0x168
callq 0x34d0
movq %rax, 0x95fc(%rip)      # 0xd458
testq %rax, %rax
je 0x428f
movq %rax, %rbx
movq 0x95d9(%rip), %rdi      # 0xd448
movq %rax, %rsi
callq 0x3210
xorl %r15d, %r15d
movq %rbx, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x32b0
leaq 0x51d7(%rip), %rax      # 0x9065
leaq -0x90(%rbp), %rdi
movq %rax, (%rdi)
leaq 0x51d3(%rip), %rax      # 0x9072
movq %rax, 0x8(%rdi)
leaq 0x51d9(%rip), %rax      # 0x9083
movq %rax, 0x10(%rdi)
leaq 0x95ab(%rip), %rsi      # 0xd460
movl $0x3, %edx
callq 0x42a7
movq 0x9592(%rip), %rdi      # 0xd458
movl 0x20(%rdi), %eax
leaq -0xd0(%rbp), %rcx
movl %eax, (%rcx)
movl 0x84(%rdi), %eax
movl %eax, 0x4(%rcx)
movl 0x128(%rdi), %eax
movl %eax, 0x8(%rcx)
movl 0x10c(%rdi), %eax
movl %eax, 0xc(%rcx)
movl 0x12c(%rdi), %eax
movl %eax, 0x10(%rcx)
movl 0x124(%rdi), %eax
movl %eax, 0x14(%rcx)
movl 0x80(%rdi), %eax
movl %eax, 0x18(%rcx)
movl 0xd4(%rdi), %eax
movl %eax, 0x1c(%rcx)
movl 0xac(%rdi), %eax
movl %eax, 0x20(%rcx)
movl 0x95a4(%rip), %eax      # 0xd4c4
movl %eax, 0x24(%rcx)
movl 0x9537(%rip), %eax      # 0xd460
movl %eax, 0x28(%rcx)
movl 0x9532(%rip), %eax      # 0xd464
movl %eax, 0x2c(%rcx)
movl 0x952d(%rip), %eax      # 0xd468
movl %eax, 0x30(%rcx)
xorl %esi, %esi
movl $0xd, %edx
callq 0x34b0
movq 0x9507(%rip), %rdi      # 0xd458
movq 0x94f8(%rip), %rax      # 0xd450
movl (%rax), %esi
leaq 0x512b(%rip), %rcx      # 0x908c
movl $0x4, %edx
callq 0x33c0
movq 0x94d6(%rip), %rdi      # 0xd448
movq 0x94d7(%rip), %rax      # 0xd450
movl (%rax), %edx
movl $0x40, %ebx
xorl %esi, %esi
movl $0xc, %ecx
movl $0x1, %r8d
movl $0x1, %r9d
pushq %rbx
pushq $0x1
pushq %r15
pushq %rdx
callq 0x32d0
addq $0x20, %rsp
movq 0x949f(%rip), %rdi      # 0xd448
movq 0x94a0(%rip), %rax      # 0xd450
movl (%rax), %edx
xorl %esi, %esi
movl $0xc, %ecx
movl $0x1, %r8d
movl $0x1, %r9d
pushq %rbx
pushq $0x3
pushq %r15
pushq %rdx
callq 0x32d0
addq $0x20, %rsp
callq 0x4a13
leaq 0x94f0(%rip), %rbx      # 0xd4d0
movl $0x3f8, %edx            # imm = 0x3F8
movq %rbx, %rdi
xorl %esi, %esi
callq 0x30a0
leaq 0x379(%rip), %rax       # 0x436f
movq %rax, 0x94f3(%rip)      # 0xd4f0
leaq 0x656(%rip), %rax       # 0x465a
movq %rax, 0x95cd(%rip)      # 0xd5d8
leaq 0x6d5(%rip), %rax       # 0x46e7
movq %rax, 0x956f(%rip)      # 0xd588
leaq 0x828(%rip), %rax       # 0x4848
movq %rax, 0x94b9(%rip)      # 0xd4e0
leaq 0x889(%rip), %rax       # 0x48b7
movq %rax, 0x94b3(%rip)      # 0xd4e8
leaq 0x8ac(%rip), %rax       # 0x48e8
movq %rax, 0x952d(%rip)      # 0xd570
leaq 0x8cf(%rip), %rax       # 0x4919
movq %rax, 0x950f(%rip)      # 0xd560
leaq 0x90d(%rip), %rax       # 0x4965
movq %rax, 0x94f9(%rip)      # 0xd558
leaq -0x7c4(%rip), %rax      # 0x38a2
movq %rax, 0x949b(%rip)      # 0xd508
leaq -0x71f(%rip), %rax      # 0x3955
movq %rax, 0x9495(%rip)      # 0xd510
leaq 0x911(%rip), %rax       # 0x4993
movq %rax, 0x9557(%rip)      # 0xd5e0
leaq 0x92d(%rip), %rax       # 0x49bd
movq %rax, 0x9499(%rip)      # 0xd530
leaq 0x964(%rip), %rax       # 0x4a02
movq %rax, 0x9473(%rip)      # 0xd518
movq 0x939c(%rip), %rdi      # 0xd448
callq 0x3300
movq %rax, 0x93b8(%rip)      # 0xd470
xorl %eax, %eax
callq 0x82ec
xorl %eax, %eax
callq 0x84bc
callq 0x597c
movq 0x9376(%rip), %r14      # 0xd448
movq 0x9377(%rip), %rax      # 0xd450
movl (%rax), %esi
movq %r14, %rdi
callq 0x31f0
movq %r14, %rdi
movl %eax, %esi
xorl %edx, %edx
callq 0x3320
movq %rax, %r14
leaq 0x9837(%rip), %rax      # 0xd930
movq %r15, 0x48(%rax)
movq %r15, 0x98(%rax)
movq %r15, 0xe8(%rax)
movq %r15, 0x138(%rax)
movq %r14, %rdi
callq 0x35f0
movl %eax, %r12d
movq %r14, -0x38(%rbp)
movq %r14, %rdi
callq 0x3410
testl %r12d, %r12d
jle 0x4178
movq %rax, %r15
movl %r12d, %r13d
xorl %r14d, %r14d
movq 0x930a(%rip), %r12      # 0xd448
movl (%r15,%r14,4), %esi
movq %r12, %rdi
callq 0x35a0
movq %r12, %rdi
movl %eax, %esi
xorl %edx, %edx
callq 0x32a0
testq %rax, %rax
je 0x4170
cmpb $0x0, 0x1b(%rax)
jne 0x4170
cmpb $0x2, 0x1a(%rax)
jne 0x4170
movl (%r15,%r14,4), %edi
callq 0x62ed
incq %r14
cmpq %r14, %r13
jne 0x4137
movq -0x38(%rbp), %rdi
callq 0x3280
movq 0x92c0(%rip), %rdi      # 0xd448
callq 0x3200
movl %eax, -0x30(%rbp)
movw $0x1, -0x2c(%rbp)
movq 0x92ab(%rip), %rdi      # 0xd448
callq 0x3360
movq 0x929f(%rip), %rdi      # 0xd448
callq 0x30b0
orl 0x928c(%rip), %eax      # 0xd440
jne 0x426f
leaq -0x30(%rbp), %r14
leaq 0x4ecc(%rip), %r15      # 0x9091
movl $0x1, %esi
movq %r14, %rdi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x3340
cmpl $-0x1, %eax
je 0x426f
movq 0x9261(%rip), %rdi      # 0xd448
callq 0x3390
testq %rax, %rax
je 0x4257
movq %rax, %r12
movb (%r12), %al
testb %al, %al
jne 0x421c
movzbl 0x1(%r12), %esi
movzbl 0xa(%r12), %edx
movzwl 0x8(%r12), %ecx
movq %r15, %rdi
xorl %eax, %eax
callq 0x3060
movb (%r12), %al
andb $0x7f, %al
movzbl %al, %eax
movq (%rbx,%rax,8), %rax
testq %rax, %rax
je 0x422f
movq %r12, %rdi
callq *%rax
movq %r12, %rdi
callq 0x3280
movq 0x920a(%rip), %rdi      # 0xd448
callq 0x3360
movq 0x91fe(%rip), %rdi      # 0xd448
callq 0x3390
movq %rax, %r12
testq %rax, %rax
jne 0x41f4
movq 0x91ea(%rip), %rdi      # 0xd448
callq 0x30b0
orl 0x91d7(%rip), %eax      # 0xd440
je 0x41c5
callq 0x39ce
xorl %eax, %eax
addq $0xe8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x3672
jmp 0x4294
callq 0x3650
movl $0x1, %eax
jmp 0x4276