407cef:	59                   	pop    %ecx
407cf0:	0f b7 c0             	movzwl %ax,%eax
407cf3:	89 45 e4             	mov    %eax,-0x1c(%ebp)
407cf6:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
407cfd:	e8 0a 00 00 00       	call   0x407d0c
407d02:	66 8b 45 e4          	mov    -0x1c(%ebp),%ax
407d06:	e8 82 59 00 00       	call   0x40d68d
407d0b:	c3                   	ret
407d0c:	ff 75 0c             	push   0xc(%ebp)
407d0f:	e8 43 0c 00 00       	call   0x408957
407d14:	59                   	pop    %ecx
407d15:	c3                   	ret
407d16:	53                   	push   %ebx
407d17:	56                   	push   %esi
407d18:	8b 74 24 0c          	mov    0xc(%esp),%esi
407d1c:	8b 46 0c             	mov    0xc(%esi),%eax
407d1f:	8b c8                	mov    %eax,%ecx
407d21:	80 e1 03             	and    $0x3,%cl
407d24:	33 db                	xor    %ebx,%ebx
407d26:	80 f9 02             	cmp    $0x2,%cl
407d29:	75 3f                	jne    0x407d6a
407d2b:	66 a9 08 01          	test   $0x108,%ax
407d2f:	74 39                	je     0x407d6a
407d31:	8b 46 08             	mov    0x8(%esi),%eax
407d34:	57                   	push   %edi
407d35:	8b 3e                	mov    (%esi),%edi
407d37:	2b f8                	sub    %eax,%edi
407d39:	85 ff                	test   %edi,%edi
407d3b:	7e 2c                	jle    0x407d69
407d3d:	57                   	push   %edi
407d3e:	50                   	push   %eax
407d3f:	56                   	push   %esi
407d40:	e8 01 6d 00 00       	call   0x40ea46
407d45:	59                   	pop    %ecx
407d46:	50                   	push   %eax
407d47:	e8 1b 76 00 00       	call   0x40f367
407d4c:	83 c4 0c             	add    $0xc,%esp
407d4f:	3b c7                	cmp    %edi,%eax
407d51:	75 0f                	jne    0x407d62
407d53:	8b 46 0c             	mov    0xc(%esi),%eax
407d56:	84 c0                	test   %al,%al
407d58:	79 0f                	jns    0x407d69
407d5a:	83 e0 fd             	and    $0xfffffffd,%eax
407d5d:	89 46 0c             	mov    %eax,0xc(%esi)
407d60:	eb 07                	jmp    0x407d69
407d62:	83 4e 0c 20          	orl    $0x20,0xc(%esi)
407d66:	83 cb ff             	or     $0xffffffff,%ebx
407d69:	5f                   	pop    %edi
407d6a:	8b 46 08             	mov    0x8(%esi),%eax
407d6d:	83 66 04 00          	andl   $0x0,0x4(%esi)
407d71:	89 06                	mov    %eax,(%esi)
407d73:	5e                   	pop    %esi
407d74:	8b c3                	mov    %ebx,%eax
407d76:	5b                   	pop    %ebx
407d77:	c3                   	ret
407d78:	56                   	push   %esi
407d79:	8b 74 24 08          	mov    0x8(%esp),%esi
407d7d:	85 f6                	test   %esi,%esi
407d7f:	75 09                	jne    0x407d8a
407d81:	56                   	push   %esi
407d82:	e8 33 00 00 00       	call   0x407dba
407d87:	59                   	pop    %ecx
407d88:	5e                   	pop    %esi
407d89:	c3                   	ret
407d8a:	56                   	push   %esi
407d8b:	e8 86 ff ff ff       	call   0x407d16
407d90:	85 c0                	test   %eax,%eax
407d92:	59                   	pop    %ecx
407d93:	74 05                	je     0x407d9a
407d95:	83 c8 ff             	or     $0xffffffff,%eax
407d98:	5e                   	pop    %esi
407d99:	c3                   	ret
407d9a:	66 f7 46 0c 00 40    	testw  $0x4000,0xc(%esi)
407da0:	74 14                	je     0x407db6
407da2:	56                   	push   %esi
407da3:	e8 9e 6c 00 00       	call   0x40ea46
407da8:	50                   	push   %eax
407da9:	e8 95 76 00 00       	call   0x40f443
407dae:	59                   	pop    %ecx
407daf:	59                   	pop    %ecx
407db0:	f7 d8                	neg    %eax
407db2:	1b c0                	sbb    %eax,%eax
407db4:	5e                   	pop    %esi
407db5:	c3                   	ret
407db6:	33 c0                	xor    %eax,%eax
407db8:	5e                   	pop    %esi
407db9:	c3                   	ret
407dba:	6a 14                	push   $0x14
407dbc:	68 30 aa 41 00       	push   $0x41aa30
407dc1:	e8 82 58 00 00       	call   0x40d648
407dc6:	33 ff                	xor    %edi,%edi
407dc8:	89 7d e4             	mov    %edi,-0x1c(%ebp)
407dcb:	89 7d dc             	mov    %edi,-0x24(%ebp)
407dce:	6a 01                	push   $0x1
407dd0:	e8 42 4d 00 00       	call   0x40cb17
407dd5:	59                   	pop    %ecx
407dd6:	89 7d fc             	mov    %edi,-0x4(%ebp)
407dd9:	33 f6                	xor    %esi,%esi
407ddb:	89 75 e0             	mov    %esi,-0x20(%ebp)
407dde:	3b 35 00 f6 41 00    	cmp    0x41f600,%esi
407de4:	0f 8d 83 00 00 00    	jge    0x407e6d
407dea:	a1 fc e5 41 00       	mov    0x41e5fc,%eax
407def:	8d 04 b0             	lea    (%eax,%esi,4),%eax
407df2:	39 38                	cmp    %edi,(%eax)
407df4:	74 5e                	je     0x407e54
407df6:	8b 00                	mov    (%eax),%eax
407df8:	f6 40 0c 83          	testb  $0x83,0xc(%eax)
407dfc:	74 56                	je     0x407e54
407dfe:	50                   	push   %eax
407dff:	56                   	push   %esi
407e00:	e8 2f 0b 00 00       	call   0x408934
407e05:	59                   	pop    %ecx
407e06:	59                   	pop    %ecx
407e07:	33 d2                	xor    %edx,%edx
407e09:	42                   	inc    %edx
407e0a:	89 55 fc             	mov    %edx,-0x4(%ebp)
407e0d:	a1 fc e5 41 00       	mov    0x41e5fc,%eax
407e12:	8b 04 b0             	mov    (%eax,%esi,4),%eax
407e15:	8b 48 0c             	mov    0xc(%eax),%ecx
407e18:	f6 c1 83             	test   $0x83,%cl
407e1b:	74 2f                	je     0x407e4c
407e1d:	39 55 08             	cmp    %edx,0x8(%ebp)
407e20:	75 11                	jne    0x407e33
407e22:	50                   	push   %eax
407e23:	e8 50 ff ff ff       	call   0x407d78
407e28:	59                   	pop    %ecx
407e29:	83 f8 ff             	cmp    $0xffffffff,%eax
407e2c:	74 1e                	je     0x407e4c
407e2e:	ff 45 e4             	incl   -0x1c(%ebp)
407e31:	eb 19                	jmp    0x407e4c
407e33:	39 7d 08             	cmp    %edi,0x8(%ebp)
407e36:	75 14                	jne    0x407e4c
407e38:	f6 c1 02             	test   $0x2,%cl
407e3b:	74 0f                	je     0x407e4c
407e3d:	50                   	push   %eax
407e3e:	e8 35 ff ff ff       	call   0x407d78
407e43:	59                   	pop    %ecx
407e44:	83 f8 ff             	cmp    $0xffffffff,%eax
407e47:	75 03                	jne    0x407e4c
407e49:	09 45 dc             	or     %eax,-0x24(%ebp)
407e4c:	89 7d fc             	mov    %edi,-0x4(%ebp)
407e4f:	e8 08 00 00 00       	call   0x407e5c
407e54:	46                   	inc    %esi
407e55:	eb 84                	jmp    0x407ddb
407e57:	33 ff                	xor    %edi,%edi
407e59:	8b 75 e0             	mov    -0x20(%ebp),%esi
407e5c:	a1 fc e5 41 00       	mov    0x41e5fc,%eax
407e61:	ff 34 b0             	push   (%eax,%esi,4)
407e64:	56                   	push   %esi
407e65:	e8 1c 0b 00 00       	call   0x408986
407e6a:	59                   	pop    %ecx
407e6b:	59                   	pop    %ecx
407e6c:	c3                   	ret
407e6d:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
407e74:	e8 12 00 00 00       	call   0x407e8b
407e79:	83 7d 08 01          	cmpl   $0x1,0x8(%ebp)
407e7d:	8b 45 e4             	mov    -0x1c(%ebp),%eax
407e80:	74 03                	je     0x407e85
407e82:	8b 45 dc             	mov    -0x24(%ebp),%eax
407e85:	e8 03 58 00 00       	call   0x40d68d
407e8a:	c3                   	ret
407e8b:	6a 01                	push   $0x1
407e8d:	e8 ad 4b 00 00       	call   0x40ca3f
407e92:	59                   	pop    %ecx
407e93:	c3                   	ret
407e94:	6a 0c                	push   $0xc
407e96:	68 58 aa 41 00       	push   $0x41aa58
407e9b:	e8 a8 57 00 00       	call   0x40d648
407ea0:	33 f6                	xor    %esi,%esi
407ea2:	39 75 08             	cmp    %esi,0x8(%ebp)
407ea5:	75 09                	jne    0x407eb0
407ea7:	56                   	push   %esi
407ea8:	e8 0d ff ff ff       	call   0x407dba
407ead:	59                   	pop    %ecx
407eae:	eb 27                	jmp    0x407ed7
407eb0:	ff 75 08             	push   0x8(%ebp)
407eb3:	e8 4d 0a 00 00       	call   0x408905
407eb8:	59                   	pop    %ecx
407eb9:	89 75 fc             	mov    %esi,-0x4(%ebp)
407ebc:	ff 75 08             	push   0x8(%ebp)
407ebf:	e8 b4 fe ff ff       	call   0x407d78
407ec4:	59                   	pop    %ecx
407ec5:	89 45 e4             	mov    %eax,-0x1c(%ebp)
407ec8:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
407ecf:	e8 09 00 00 00       	call   0x407edd
407ed4:	8b 45 e4             	mov    -0x1c(%ebp),%eax
407ed7:	e8 b1 57 00 00       	call   0x40d68d
407edc:	c3                   	ret
407edd:	ff 75 08             	push   0x8(%ebp)
407ee0:	e8 72 0a 00 00       	call   0x408957
407ee5:	59                   	pop    %ecx
407ee6:	c3                   	ret
407ee7:	6a 01                	push   $0x1
407ee9:	e8 cc fe ff ff       	call   0x407dba
407eee:	59                   	pop    %ecx
407eef:	c3                   	ret
407ef0:	6a 0c                	push   $0xc
407ef2:	68 78 aa 41 00       	push   $0x41aa78
407ef7:	e8 4c 57 00 00       	call   0x40d648
407efc:	33 db                	xor    %ebx,%ebx
407efe:	89 5d e4             	mov    %ebx,-0x1c(%ebp)
407f01:	33 c0                	xor    %eax,%eax
407f03:	8b 75 08             	mov    0x8(%ebp),%esi
407f06:	3b f3                	cmp    %ebx,%esi
407f08:	0f 95 c0             	setne  %al
407f0b:	3b c3                	cmp    %ebx,%eax
407f0d:	75 20                	jne    0x407f2f
407f0f:	e8 e6 14 00 00       	call   0x4093fa
407f14:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
407f1a:	53                   	push   %ebx
407f1b:	53                   	push   %ebx
407f1c:	53                   	push   %ebx
407f1d:	53                   	push   %ebx
407f1e:	53                   	push   %ebx
407f1f:	e8 2c f7 ff ff       	call   0x407650
407f24:	83 c4 14             	add    $0x14,%esp
407f27:	83 c8 ff             	or     $0xffffffff,%eax
407f2a:	e9 af 00 00 00       	jmp    0x407fde
407f2f:	8b 45 10             	mov    0x10(%ebp),%eax
407f32:	83 f8 04             	cmp    $0x4,%eax
407f35:	74 09                	je     0x407f40
407f37:	3b c3                	cmp    %ebx,%eax
407f39:	74 0e                	je     0x407f49
407f3b:	83 f8 40             	cmp    $0x40,%eax
407f3e:	75 cf                	jne    0x407f0f
407f40:	3b c3                	cmp    %ebx,%eax
407f42:	74 05                	je     0x407f49
407f44:	83 f8 40             	cmp    $0x40,%eax
407f47:	75 0f                	jne    0x407f58
407f49:	8b 7d 14             	mov    0x14(%ebp),%edi
407f4c:	8d 47 fe             	lea    -0x2(%edi),%eax
407f4f:	3d fd ff ff 7f       	cmp    $0x7ffffffd,%eax
407f54:	76 05                	jbe    0x407f5b
407f56:	eb b7                	jmp    0x407f0f
407f58:	8b 7d 14             	mov    0x14(%ebp),%edi
407f5b:	83 e7 fe             	and    $0xfffffffe,%edi
407f5e:	89 75 08             	mov    %esi,0x8(%ebp)
407f61:	56                   	push   %esi
407f62:	e8 9e 09 00 00       	call   0x408905
407f67:	59                   	pop    %ecx
407f68:	89 5d fc             	mov    %ebx,-0x4(%ebp)
407f6b:	56                   	push   %esi
407f6c:	e8 a5 fd ff ff       	call   0x407d16
407f71:	56                   	push   %esi
407f72:	e8 ad 75 00 00       	call   0x40f524
407f77:	59                   	pop    %ecx
407f78:	59                   	pop    %ecx
407f79:	81 66 0c f3 c2 ff ff 	andl   $0xffffc2f3,0xc(%esi)
407f80:	8b 4e 0c             	mov    0xc(%esi),%ecx
407f83:	f6 45 10 04          	testb  $0x4,0x10(%ebp)
407f87:	74 0b                	je     0x407f94
407f89:	83 c9 04             	or     $0x4,%ecx
407f8c:	8d 46 14             	lea    0x14(%esi),%eax
407f8f:	6a 02                	push   $0x2
407f91:	5f                   	pop    %edi
407f92:	eb 2d                	jmp    0x407fc1
407f94:	8b 45 0c             	mov    0xc(%ebp),%eax
407f97:	3b c3                	cmp    %ebx,%eax
407f99:	75 20                	jne    0x407fbb
407f9b:	57                   	push   %edi
407f9c:	e8 4b 13 00 00       	call   0x4092ec
407fa1:	59                   	pop    %ecx
407fa2:	3b c3                	cmp    %ebx,%eax
407fa4:	75 0c                	jne    0x407fb2
407fa6:	ff 05 f8 d9 41 00    	incl   0x41d9f8
407fac:	83 4d e4 ff          	orl    $0xffffffff,-0x1c(%ebp)
407fb0:	eb 1d                	jmp    0x407fcf
407fb2:	81 4e 0c 08 04 00 00 	orl    $0x408,0xc(%esi)
407fb9:	eb 09                	jmp    0x407fc4
407fbb:	81 c9 00 05 00 00    	or     $0x500,%ecx
407fc1:	89 4e 0c             	mov    %ecx,0xc(%esi)
407fc4:	89 7e 18             	mov    %edi,0x18(%esi)
407fc7:	89 46 08             	mov    %eax,0x8(%esi)
407fca:	89 06                	mov    %eax,(%esi)
407fcc:	89 5e 04             	mov    %ebx,0x4(%esi)
407fcf:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
407fd6:	e8 09 00 00 00       	call   0x407fe4
407fdb:	8b 45 e4             	mov    -0x1c(%ebp),%eax
407fde:	e8 aa 56 00 00       	call   0x40d68d
407fe3:	c3                   	ret
407fe4:	ff 75 08             	push   0x8(%ebp)
407fe7:	e8 6b 09 00 00       	call   0x408957
407fec:	59                   	pop    %ecx
407fed:	c3                   	ret
407fee:	53                   	push   %ebx
407fef:	55                   	push   %ebp
407ff0:	56                   	push   %esi
407ff1:	8b 74 24 14          	mov    0x14(%esp),%esi
407ff5:	83 cd ff             	or     $0xffffffff,%ebp
407ff8:	f6 46 0c 40          	testb  $0x40,0xc(%esi)
407ffc:	57                   	push   %edi
407ffd:	0f 85 a8 00 00 00    	jne    0x4080ab
408003:	56                   	push   %esi
408004:	e8 3d 6a 00 00       	call   0x40ea46
408009:	3b c5                	cmp    %ebp,%eax
40800b:	59                   	pop    %ecx
40800c:	bb f0 cb 41 00       	mov    $0x41cbf0,%ebx
408011:	74 2e                	je     0x408041
408013:	56                   	push   %esi
408014:	e8 2d 6a 00 00       	call   0x40ea46
408019:	83 f8 fe             	cmp    $0xfffffffe,%eax
40801c:	59                   	pop    %ecx
40801d:	74 22                	je     0x408041
40801f:	56                   	push   %esi
408020:	e8 21 6a 00 00       	call   0x40ea46
408025:	c1 f8 05             	sar    $0x5,%eax
408028:	56                   	push   %esi
408029:	8d 3c 85 c0 e4 41 00 	lea    0x41e4c0(,%eax,4),%edi
408030:	e8 11 6a 00 00       	call   0x40ea46
408035:	83 e0 1f             	and    $0x1f,%eax
408038:	6b c0 28             	imul   $0x28,%eax,%eax
40803b:	03 07                	add    (%edi),%eax
40803d:	59                   	pop    %ecx
40803e:	59                   	pop    %ecx
40803f:	eb 02                	jmp    0x408043
408041:	8b c3                	mov    %ebx,%eax
408043:	f6 40 24 7f          	testb  $0x7f,0x24(%eax)
408047:	75 41                	jne    0x40808a
408049:	56                   	push   %esi
40804a:	e8 f7 69 00 00       	call   0x40ea46
40804f:	3b c5                	cmp    %ebp,%eax
408051:	59                   	pop    %ecx
408052:	74 2e                	je     0x408082
408054:	56                   	push   %esi
408055:	e8 ec 69 00 00       	call   0x40ea46
40805a:	83 f8 fe             	cmp    $0xfffffffe,%eax
40805d:	59                   	pop    %ecx
40805e:	74 22                	je     0x408082
408060:	56                   	push   %esi
408061:	e8 e0 69 00 00       	call   0x40ea46
408066:	c1 f8 05             	sar    $0x5,%eax
408069:	56                   	push   %esi
40806a:	8d 3c 85 c0 e4 41 00 	lea    0x41e4c0(,%eax,4),%edi
408071:	e8 d0 69 00 00       	call   0x40ea46
408076:	83 e0 1f             	and    $0x1f,%eax
408079:	6b c0 28             	imul   $0x28,%eax,%eax
40807c:	03 07                	add    (%edi),%eax
40807e:	59                   	pop    %ecx
40807f:	59                   	pop    %ecx
408080:	eb 02                	jmp    0x408084
408082:	8b c3                	mov    %ebx,%eax
408084:	f6 40 24 80          	testb  $0x80,0x24(%eax)
408088:	74 21                	je     0x4080ab
40808a:	e8 6b 13 00 00       	call   0x4093fa
40808f:	33 ff                	xor    %edi,%edi
408091:	57                   	push   %edi
408092:	57                   	push   %edi
408093:	57                   	push   %edi
408094:	57                   	push   %edi
408095:	57                   	push   %edi