40f791:	57                   	push   %edi
40f792:	89 08                	mov    %ecx,(%eax)
40f794:	89 50 04             	mov    %edx,0x4(%eax)
40f797:	89 4d fc             	mov    %ecx,-0x4(%ebp)
40f79a:	e8 60 e6 ff ff       	call   0x40ddff
40f79f:	8b c8                	mov    %eax,%ecx
40f7a1:	83 c4 14             	add    $0x14,%esp
40f7a4:	8b 45 08             	mov    0x8(%ebp),%eax
40f7a7:	89 08                	mov    %ecx,(%eax)
40f7a9:	8b 46 08             	mov    0x8(%esi),%eax
40f7ac:	80 78 1c 00          	cmpb   $0x0,0x1c(%eax)
40f7b0:	74 06                	je     0x40f7b8
40f7b2:	83 78 18 22          	cmpl   $0x22,0x18(%eax)
40f7b6:	74 08                	je     0x40f7c0
40f7b8:	8b 45 fc             	mov    -0x4(%ebp),%eax
40f7bb:	3b 46 0c             	cmp    0xc(%esi),%eax
40f7be:	73 04                	jae    0x40f7c4
40f7c0:	32 db                	xor    %bl,%bl
40f7c2:	eb 03                	jmp    0x40f7c7
40f7c4:	89 46 0c             	mov    %eax,0xc(%esi)
40f7c7:	8b 45 f8             	mov    -0x8(%ebp),%eax
40f7ca:	89 47 18             	mov    %eax,0x18(%edi)
40f7cd:	8b 45 f4             	mov    -0xc(%ebp),%eax
40f7d0:	89 47 1c             	mov    %eax,0x1c(%edi)
40f7d3:	8a c3                	mov    %bl,%al
40f7d5:	5f                   	pop    %edi
40f7d6:	5e                   	pop    %esi
40f7d7:	5b                   	pop    %ebx
40f7d8:	c9                   	leave
40f7d9:	c2 04 00             	ret    $0x4
40f7dc:	8b ff                	mov    %edi,%edi
40f7de:	55                   	push   %ebp
40f7df:	8b ec                	mov    %esp,%ebp
40f7e1:	83 ec 14             	sub    $0x14,%esp
40f7e4:	53                   	push   %ebx
40f7e5:	56                   	push   %esi
40f7e6:	8b f1                	mov    %ecx,%esi
40f7e8:	57                   	push   %edi
40f7e9:	ff 76 08             	push   0x8(%esi)
40f7ec:	8d 8e 48 04 00 00    	lea    0x448(%esi),%ecx
40f7f2:	e8 3f 21 00 00       	call   0x411936
40f7f7:	84 c0                	test   %al,%al
40f7f9:	74 27                	je     0x40f822
40f7fb:	8b 4e 0c             	mov    0xc(%esi),%ecx
40f7fe:	85 c9                	test   %ecx,%ecx
40f800:	75 28                	jne    0x40f82a
40f802:	8b 46 08             	mov    0x8(%esi),%eax
40f805:	33 db                	xor    %ebx,%ebx
40f807:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
40f80b:	c7 40 18 16 00 00 00 	movl   $0x16,0x18(%eax)
40f812:	ff 76 08             	push   0x8(%esi)
40f815:	53                   	push   %ebx
40f816:	53                   	push   %ebx
40f817:	53                   	push   %ebx
40f818:	53                   	push   %ebx
40f819:	53                   	push   %ebx
40f81a:	e8 52 db ff ff       	call   0x40d371
40f81f:	83 c4 18             	add    $0x18,%esp
40f822:	83 c8 ff             	or     $0xffffffff,%eax
40f825:	5f                   	pop    %edi
40f826:	5e                   	pop    %esi
40f827:	5b                   	pop    %ebx
40f828:	c9                   	leave
40f829:	c3                   	ret
40f82a:	8b 86 50 04 00 00    	mov    0x450(%esi),%eax
40f830:	40                   	inc    %eax
40f831:	89 86 50 04 00 00    	mov    %eax,0x450(%esi)
40f837:	83 f8 02             	cmp    $0x2,%eax
40f83a:	0f 84 d6 01 00 00    	je     0x40fa16
40f840:	33 db                	xor    %ebx,%ebx
40f842:	89 5e 34             	mov    %ebx,0x34(%esi)
40f845:	88 5e 18             	mov    %bl,0x18(%esi)
40f848:	8a 11                	mov    (%ecx),%dl
40f84a:	41                   	inc    %ecx
40f84b:	88 55 ff             	mov    %dl,-0x1(%ebp)
40f84e:	89 4e 0c             	mov    %ecx,0xc(%esi)
40f851:	88 56 2d             	mov    %dl,0x2d(%esi)
40f854:	84 d2                	test   %dl,%dl
40f856:	0f 84 a7 01 00 00    	je     0x40fa03
40f85c:	88 55 f0             	mov    %dl,-0x10(%ebp)
40f85f:	8d 46 14             	lea    0x14(%esi),%eax
40f862:	39 18                	cmp    %ebx,(%eax)
40f864:	0f 8c 99 01 00 00    	jl     0x40fa03
40f86a:	0f b6 46 18          	movzbl 0x18(%esi),%eax
40f86e:	8b ce                	mov    %esi,%ecx
40f870:	50                   	push   %eax
40f871:	ff 75 f0             	push   -0x10(%ebp)
40f874:	e8 64 fd ff ff       	call   0x40f5dd
40f879:	88 46 18             	mov    %al,0x18(%esi)
40f87c:	3c 08                	cmp    $0x8,%al
40f87e:	0f 83 d3 01 00 00    	jae    0x40fa57
40f884:	0f b6 c0             	movzbl %al,%eax
40f887:	83 f8 07             	cmp    $0x7,%eax
40f88a:	77 96                	ja     0x40f822
40f88c:	ff 24 85 6c fa 40 00 	jmp    *0x40fa6c(,%eax,4)
40f893:	8b 7e 08             	mov    0x8(%esi),%edi
40f896:	88 5e 38             	mov    %bl,0x38(%esi)
40f899:	89 7d f8             	mov    %edi,-0x8(%ebp)
40f89c:	38 5f 14             	cmp    %bl,0x14(%edi)
40f89f:	75 0d                	jne    0x40f8ae
40f8a1:	8b cf                	mov    %edi,%ecx
40f8a3:	e8 18 20 00 00       	call   0x4118c0
40f8a8:	8b 46 08             	mov    0x8(%esi),%eax
40f8ab:	89 45 f8             	mov    %eax,-0x8(%ebp)
40f8ae:	8a 46 2d             	mov    0x2d(%esi),%al
40f8b1:	89 45 ec             	mov    %eax,-0x14(%ebp)
40f8b4:	88 45 f4             	mov    %al,-0xc(%ebp)
40f8b7:	0f be c0             	movsbl %al,%eax
40f8ba:	68 00 80 00 00       	push   $0x8000
40f8bf:	50                   	push   %eax
40f8c0:	8b 47 0c             	mov    0xc(%edi),%eax
40f8c3:	ff 30                	push   (%eax)
40f8c5:	e8 3b 23 00 00       	call   0x411c05
40f8ca:	83 c4 0c             	add    $0xc,%esp
40f8cd:	8d 7e 14             	lea    0x14(%esi),%edi
40f8d0:	85 c0                	test   %eax,%eax
40f8d2:	74 29                	je     0x40f8fd
40f8d4:	ff 75 f8             	push   -0x8(%ebp)
40f8d7:	8d 8e 48 04 00 00    	lea    0x448(%esi),%ecx
40f8dd:	57                   	push   %edi
40f8de:	ff 75 ec             	push   -0x14(%ebp)
40f8e1:	e8 40 21 00 00       	call   0x411a26
40f8e6:	8b 46 0c             	mov    0xc(%esi),%eax
40f8e9:	8a 08                	mov    (%eax),%cl
40f8eb:	40                   	inc    %eax
40f8ec:	89 46 0c             	mov    %eax,0xc(%esi)
40f8ef:	88 4e 2d             	mov    %cl,0x2d(%esi)
40f8f2:	84 c9                	test   %cl,%cl
40f8f4:	0f 84 24 01 00 00    	je     0x40fa1e
40f8fa:	88 4d f4             	mov    %cl,-0xc(%ebp)
40f8fd:	ff 76 08             	push   0x8(%esi)
40f900:	8d 8e 48 04 00 00    	lea    0x448(%esi),%ecx
40f906:	57                   	push   %edi
40f907:	ff 75 f4             	push   -0xc(%ebp)
40f90a:	e8 17 21 00 00       	call   0x411a26
40f90f:	e9 d0 00 00 00       	jmp    0x40f9e4
40f914:	83 4e 24 ff          	orl    $0xffffffff,0x24(%esi)
40f918:	89 5e 20             	mov    %ebx,0x20(%esi)
40f91b:	88 5e 2c             	mov    %bl,0x2c(%esi)
40f91e:	89 5e 1c             	mov    %ebx,0x1c(%esi)
40f921:	89 5e 28             	mov    %ebx,0x28(%esi)
40f924:	88 5e 38             	mov    %bl,0x38(%esi)
40f927:	e9 b8 00 00 00       	jmp    0x40f9e4
40f92c:	0f be 45 ff          	movsbl -0x1(%ebp),%eax
40f930:	83 e8 20             	sub    $0x20,%eax
40f933:	74 37                	je     0x40f96c
40f935:	83 e8 03             	sub    $0x3,%eax
40f938:	74 2c                	je     0x40f966
40f93a:	83 e8 08             	sub    $0x8,%eax
40f93d:	74 21                	je     0x40f960
40f93f:	48                   	dec    %eax
40f940:	83 e8 01             	sub    $0x1,%eax
40f943:	74 12                	je     0x40f957
40f945:	83 e8 03             	sub    $0x3,%eax
40f948:	0f 85 96 00 00 00    	jne    0x40f9e4
40f94e:	83 4e 1c 08          	orl    $0x8,0x1c(%esi)
40f952:	e9 8d 00 00 00       	jmp    0x40f9e4
40f957:	83 4e 1c 04          	orl    $0x4,0x1c(%esi)
40f95b:	e9 84 00 00 00       	jmp    0x40f9e4
40f960:	83 4e 1c 01          	orl    $0x1,0x1c(%esi)
40f964:	eb 7e                	jmp    0x40f9e4
40f966:	83 4e 1c 20          	orl    $0x20,0x1c(%esi)
40f96a:	eb 78                	jmp    0x40f9e4
40f96c:	83 4e 1c 02          	orl    $0x2,0x1c(%esi)
40f970:	eb 72                	jmp    0x40f9e4
40f972:	80 7d ff 2a          	cmpb   $0x2a,-0x1(%ebp)
40f976:	74 0d                	je     0x40f985
40f978:	8d 46 20             	lea    0x20(%esi),%eax
40f97b:	50                   	push   %eax
40f97c:	8b ce                	mov    %esi,%ecx
40f97e:	e8 67 fd ff ff       	call   0x40f6ea
40f983:	eb 57                	jmp    0x40f9dc
40f985:	8b 4e 10             	mov    0x10(%esi),%ecx
40f988:	8d 41 04             	lea    0x4(%ecx),%eax
40f98b:	89 46 10             	mov    %eax,0x10(%esi)
40f98e:	8b 01                	mov    (%ecx),%eax
40f990:	89 46 20             	mov    %eax,0x20(%esi)
40f993:	85 c0                	test   %eax,%eax
40f995:	79 09                	jns    0x40f9a0
40f997:	83 4e 1c 04          	orl    $0x4,0x1c(%esi)
40f99b:	f7 d8                	neg    %eax
40f99d:	89 46 20             	mov    %eax,0x20(%esi)
40f9a0:	b0 01                	mov    $0x1,%al
40f9a2:	eb 38                	jmp    0x40f9dc
40f9a4:	89 5e 24             	mov    %ebx,0x24(%esi)
40f9a7:	eb 3b                	jmp    0x40f9e4
40f9a9:	80 7d ff 2a          	cmpb   $0x2a,-0x1(%ebp)
40f9ad:	74 05                	je     0x40f9b4
40f9af:	8d 46 24             	lea    0x24(%esi),%eax
40f9b2:	eb c7                	jmp    0x40f97b
40f9b4:	8b 4e 10             	mov    0x10(%esi),%ecx
40f9b7:	8d 41 04             	lea    0x4(%ecx),%eax
40f9ba:	89 46 10             	mov    %eax,0x10(%esi)
40f9bd:	8b 01                	mov    (%ecx),%eax
40f9bf:	89 46 24             	mov    %eax,0x24(%esi)
40f9c2:	85 c0                	test   %eax,%eax
40f9c4:	79 da                	jns    0x40f9a0
40f9c6:	83 4e 24 ff          	orl    $0xffffffff,0x24(%esi)
40f9ca:	eb d4                	jmp    0x40f9a0
40f9cc:	8b ce                	mov    %esi,%ecx
40f9ce:	e8 09 08 00 00       	call   0x4101dc
40f9d3:	eb 07                	jmp    0x40f9dc
40f9d5:	8b ce                	mov    %esi,%ecx
40f9d7:	e8 3c 0c 00 00       	call   0x410618
40f9dc:	84 c0                	test   %al,%al
40f9de:	0f 84 3e fe ff ff    	je     0x40f822
40f9e4:	8b 46 0c             	mov    0xc(%esi),%eax
40f9e7:	8a 10                	mov    (%eax),%dl
40f9e9:	8d 48 01             	lea    0x1(%eax),%ecx
40f9ec:	89 4e 0c             	mov    %ecx,0xc(%esi)
40f9ef:	8d 46 14             	lea    0x14(%esi),%eax
40f9f2:	88 55 ff             	mov    %dl,-0x1(%ebp)
40f9f5:	88 56 2d             	mov    %dl,0x2d(%esi)
40f9f8:	88 55 f0             	mov    %dl,-0x10(%ebp)
40f9fb:	84 d2                	test   %dl,%dl
40f9fd:	0f 85 5f fe ff ff    	jne    0x40f862
40fa03:	ff 86 50 04 00 00    	incl   0x450(%esi)
40fa09:	83 be 50 04 00 00 02 	cmpl   $0x2,0x450(%esi)
40fa10:	0f 85 2c fe ff ff    	jne    0x40f842
40fa16:	8b 46 14             	mov    0x14(%esi),%eax
40fa19:	e9 07 fe ff ff       	jmp    0x40f825
40fa1e:	8b 46 08             	mov    0x8(%esi),%eax
40fa21:	6a 16                	push   $0x16
40fa23:	5f                   	pop    %edi
40fa24:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
40fa28:	89 78 18             	mov    %edi,0x18(%eax)
40fa2b:	ff 76 08             	push   0x8(%esi)
40fa2e:	53                   	push   %ebx
40fa2f:	53                   	push   %ebx
40fa30:	53                   	push   %ebx
40fa31:	53                   	push   %ebx
40fa32:	53                   	push   %ebx
40fa33:	e8 39 d9 ff ff       	call   0x40d371
40fa38:	8b 46 08             	mov    0x8(%esi),%eax
40fa3b:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
40fa3f:	89 78 18             	mov    %edi,0x18(%eax)
40fa42:	ff 76 08             	push   0x8(%esi)
40fa45:	53                   	push   %ebx
40fa46:	53                   	push   %ebx
40fa47:	53                   	push   %ebx
40fa48:	53                   	push   %ebx
40fa49:	53                   	push   %ebx
40fa4a:	e8 22 d9 ff ff       	call   0x40d371
40fa4f:	83 c4 30             	add    $0x30,%esp
40fa52:	e9 cb fd ff ff       	jmp    0x40f822
40fa57:	8b 4e 08             	mov    0x8(%esi),%ecx
40fa5a:	c6 41 1c 01          	movb   $0x1,0x1c(%ecx)
40fa5e:	c7 41 18 16 00 00 00 	movl   $0x16,0x18(%ecx)
40fa65:	e9 a8 fd ff ff       	jmp    0x40f812
40fa6a:	8b ff                	mov    %edi,%edi
40fa6c:	93                   	xchg   %eax,%ebx
40fa6d:	f8                   	clc
40fa6e:	40                   	inc    %eax
40fa6f:	00 14 f9             	add    %dl,(%ecx,%edi,8)
40fa72:	40                   	inc    %eax
40fa73:	00 2c f9             	add    %ch,(%ecx,%edi,8)
40fa76:	40                   	inc    %eax
40fa77:	00 72 f9             	add    %dh,-0x7(%edx)
40fa7a:	40                   	inc    %eax
40fa7b:	00 a4 f9 40 00 a9 f9 	add    %ah,-0x656ffc0(%ecx,%edi,8)
40fa82:	40                   	inc    %eax
40fa83:	00 cc                	add    %cl,%ah
40fa85:	f9                   	stc
40fa86:	40                   	inc    %eax
40fa87:	00 d5                	add    %dl,%ch
40fa89:	f9                   	stc
40fa8a:	40                   	inc    %eax
40fa8b:	00 8b ff 55 8b ec    	add    %cl,-0x1374aa01(%ebx)
40fa91:	51                   	push   %ecx
40fa92:	51                   	push   %ecx
40fa93:	53                   	push   %ebx
40fa94:	56                   	push   %esi
40fa95:	8b f1                	mov    %ecx,%esi
40fa97:	57                   	push   %edi
40fa98:	ff 76 08             	push   0x8(%esi)
40fa9b:	8d 8e 48 04 00 00    	lea    0x448(%esi),%ecx
40faa1:	e8 c8 1e 00 00       	call   0x41196e
40faa6:	84 c0                	test   %al,%al
40faa8:	74 27                	je     0x40fad1
40faaa:	8b 4e 0c             	mov    0xc(%esi),%ecx
40faad:	85 c9                	test   %ecx,%ecx
40faaf:	75 28                	jne    0x40fad9
40fab1:	8b 46 08             	mov    0x8(%esi),%eax
40fab4:	33 db                	xor    %ebx,%ebx
40fab6:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
40faba:	c7 40 18 16 00 00 00 	movl   $0x16,0x18(%eax)
40fac1:	ff 76 08             	push   0x8(%esi)
40fac4:	53                   	push   %ebx
40fac5:	53                   	push   %ebx
40fac6:	53                   	push   %ebx
40fac7:	53                   	push   %ebx
40fac8:	53                   	push   %ebx
40fac9:	e8 a3 d8 ff ff       	call   0x40d371
40face:	83 c4 18             	add    $0x18,%esp
40fad1:	83 c8 ff             	or     $0xffffffff,%eax
40fad4:	5f                   	pop    %edi
40fad5:	5e                   	pop    %esi
40fad6:	5b                   	pop    %ebx
40fad7:	c9                   	leave
40fad8:	c3                   	ret
40fad9:	8b 86 50 04 00 00    	mov    0x450(%esi),%eax
40fadf:	40                   	inc    %eax
40fae0:	89 86 50 04 00 00    	mov    %eax,0x450(%esi)
40fae6:	83 f8 02             	cmp    $0x2,%eax
40fae9:	0f 84 36 02 00 00    	je     0x40fd25
40faef:	33 db                	xor    %ebx,%ebx
40faf1:	89 5e 34             	mov    %ebx,0x34(%esi)
40faf4:	88 5e 18             	mov    %bl,0x18(%esi)
40faf7:	8a 11                	mov    (%ecx),%dl
40faf9:	41                   	inc    %ecx
40fafa:	88 55 ff             	mov    %dl,-0x1(%ebp)
40fafd:	89 4e 0c             	mov    %ecx,0xc(%esi)
40fb00:	88 56 2d             	mov    %dl,0x2d(%esi)
40fb03:	84 d2                	test   %dl,%dl
40fb05:	0f 84 07 02 00 00    	je     0x40fd12
40fb0b:	88 55 fb             	mov    %dl,-0x5(%ebp)
40fb0e:	39 5e 14             	cmp    %ebx,0x14(%esi)
40fb11:	0f 8c fb 01 00 00    	jl     0x40fd12
40fb17:	0f b6 46 18          	movzbl 0x18(%esi),%eax
40fb1b:	8b ce                	mov    %esi,%ecx
40fb1d:	50                   	push   %eax
40fb1e:	ff 75 fb             	push   -0x5(%ebp)
40fb21:	e8 b7 fa ff ff       	call   0x40f5dd
40fb26:	88 46 18             	mov    %al,0x18(%esi)
40fb29:	3c 08                	cmp    $0x8,%al
40fb2b:	0f 83 fc 01 00 00    	jae    0x40fd2d
40fb31:	0f b6 c0             	movzbl %al,%eax
40fb34:	83 f8 07             	cmp    $0x7,%eax
40fb37:	77 98                	ja     0x40fad1
40fb39:	ff 24 85 40 fd 40 00 	jmp    *0x40fd40(,%eax,4)
40fb40:	8b 7e 08             	mov    0x8(%esi),%edi
40fb43:	88 5e 38             	mov    %bl,0x38(%esi)
40fb46:	38 5f 14             	cmp    %bl,0x14(%edi)
40fb49:	75 07                	jne    0x40fb52
40fb4b:	8b cf                	mov    %edi,%ecx
40fb4d:	e8 6e 1d 00 00       	call   0x4118c0
40fb52:	8a 46 2d             	mov    0x2d(%esi),%al
40fb55:	88 45 ff             	mov    %al,-0x1(%ebp)
40fb58:	0f be c0             	movsbl %al,%eax
40fb5b:	68 00 80 00 00       	push   $0x8000
40fb60:	50                   	push   %eax
40fb61:	8b 47 0c             	mov    0xc(%edi),%eax
40fb64:	ff 30                	push   (%eax)
40fb66:	e8 9a 20 00 00       	call   0x411c05
40fb6b:	83 c4 0c             	add    $0xc,%esp
40fb6e:	8d be 48 04 00 00    	lea    0x448(%esi),%edi
40fb74:	85 c0                	test   %eax,%eax
40fb76:	74 76                	je     0x40fbee
40fb78:	8b 0f                	mov    (%edi),%ecx
40fb7a:	8b 41 08             	mov    0x8(%ecx),%eax