4077f7:	83 c9 08             	or     $0x8,%ecx
4077fa:	09 4d f8             	or     %ecx,-0x8(%ebp)
4077fd:	47                   	inc    %edi
4077fe:	8b ca                	mov    %edx,%ecx
407800:	89 7d 0c             	mov    %edi,0xc(%ebp)
407803:	eb 99                	jmp    0x40779e
407805:	ff 75 fc             	push   -0x4(%ebp)
407808:	8d 4d 0c             	lea    0xc(%ebp),%ecx
40780b:	e8 59 16 00 00       	call   0x408e69
407810:	8b 5d f8             	mov    -0x8(%ebp),%ebx
407813:	5f                   	pop    %edi
407814:	f6 c3 08             	test   $0x8,%bl
407817:	75 10                	jne    0x407829
407819:	8b 45 10             	mov    0x10(%ebp),%eax
40781c:	85 c0                	test   %eax,%eax
40781e:	74 05                	je     0x407825
407820:	8b 4d ec             	mov    -0x14(%ebp),%ecx
407823:	89 08                	mov    %ecx,(%eax)
407825:	33 c0                	xor    %eax,%eax
407827:	eb 65                	jmp    0x40788e
407829:	8b 75 f4             	mov    -0xc(%ebp),%esi
40782c:	56                   	push   %esi
40782d:	53                   	push   %ebx
40782e:	e8 eb fd ff ff       	call   0x40761e
407833:	59                   	pop    %ecx
407834:	59                   	pop    %ecx
407835:	84 c0                	test   %al,%al
407837:	74 40                	je     0x407879
407839:	8b 45 08             	mov    0x8(%ebp),%eax
40783c:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
407840:	c7 40 18 22 00 00 00 	movl   $0x22,0x18(%eax)
407847:	f6 c3 01             	test   $0x1,%bl
40784a:	75 05                	jne    0x407851
40784c:	83 ce ff             	or     $0xffffffff,%esi
40784f:	eb 2f                	jmp    0x407880
407851:	8b 4d 10             	mov    0x10(%ebp),%ecx
407854:	f6 c3 02             	test   $0x2,%bl
407857:	74 10                	je     0x407869
407859:	85 c9                	test   %ecx,%ecx
40785b:	74 05                	je     0x407862
40785d:	8b 45 0c             	mov    0xc(%ebp),%eax
407860:	89 01                	mov    %eax,(%ecx)
407862:	b8 00 00 00 80       	mov    $0x80000000,%eax
407867:	eb 25                	jmp    0x40788e
407869:	85 c9                	test   %ecx,%ecx
40786b:	74 05                	je     0x407872
40786d:	8b 45 0c             	mov    0xc(%ebp),%eax
407870:	89 01                	mov    %eax,(%ecx)
407872:	b8 ff ff ff 7f       	mov    $0x7fffffff,%eax
407877:	eb 15                	jmp    0x40788e
407879:	f6 c3 02             	test   $0x2,%bl
40787c:	74 02                	je     0x407880
40787e:	f7 de                	neg    %esi
407880:	8b 55 10             	mov    0x10(%ebp),%edx
407883:	85 d2                	test   %edx,%edx
407885:	74 05                	je     0x40788c
407887:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40788a:	89 0a                	mov    %ecx,(%edx)
40788c:	8b c6                	mov    %esi,%eax
40788e:	5e                   	pop    %esi
40788f:	5b                   	pop    %ebx
407890:	c9                   	leave
407891:	c3                   	ret
407892:	8b ff                	mov    %edi,%edi
407894:	56                   	push   %esi
407895:	8b f1                	mov    %ecx,%esi
407897:	57                   	push   %edi
407898:	8b be 04 04 00 00    	mov    0x404(%esi),%edi
40789e:	e8 e2 fc ff ff       	call   0x407585
4078a3:	85 ff                	test   %edi,%edi
4078a5:	75 04                	jne    0x4078ab
4078a7:	03 c6                	add    %esi,%eax
4078a9:	eb 02                	jmp    0x4078ad
4078ab:	03 c7                	add    %edi,%eax
4078ad:	5f                   	pop    %edi
4078ae:	5e                   	pop    %esi
4078af:	c3                   	ret
4078b0:	8b ff                	mov    %edi,%edi
4078b2:	55                   	push   %ebp
4078b3:	8b ec                	mov    %esp,%ebp
4078b5:	83 ec 0c             	sub    $0xc,%esp
4078b8:	53                   	push   %ebx
4078b9:	56                   	push   %esi
4078ba:	8b f1                	mov    %ecx,%esi
4078bc:	57                   	push   %edi
4078bd:	ff 76 28             	push   0x28(%esi)
4078c0:	e8 9d 11 00 00       	call   0x408a62
4078c5:	59                   	pop    %ecx
4078c6:	8b c8                	mov    %eax,%ecx
4078c8:	89 45 f4             	mov    %eax,-0xc(%ebp)
4078cb:	6a 00                	push   $0x0
4078cd:	5b                   	pop    %ebx
4078ce:	83 e9 01             	sub    $0x1,%ecx
4078d1:	0f 84 99 00 00 00    	je     0x407970
4078d7:	83 e9 01             	sub    $0x1,%ecx
4078da:	74 75                	je     0x407951
4078dc:	49                   	dec    %ecx
4078dd:	83 e9 01             	sub    $0x1,%ecx
4078e0:	74 46                	je     0x407928
4078e2:	83 e9 04             	sub    $0x4,%ecx
4078e5:	74 27                	je     0x40790e
4078e7:	8b 46 08             	mov    0x8(%esi),%eax
4078ea:	83 c0 18             	add    $0x18,%eax
4078ed:	c6 40 04 01          	movb   $0x1,0x4(%eax)
4078f1:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
4078f7:	ff 76 08             	push   0x8(%esi)
4078fa:	53                   	push   %ebx
4078fb:	53                   	push   %ebx
4078fc:	53                   	push   %ebx
4078fd:	53                   	push   %ebx
4078fe:	53                   	push   %ebx
4078ff:	e8 48 fb ff ff       	call   0x40744c
407904:	83 c4 18             	add    $0x18,%esp
407907:	32 c0                	xor    %al,%al
407909:	e9 28 01 00 00       	jmp    0x407a36
40790e:	8b 4e 10             	mov    0x10(%esi),%ecx
407911:	8b 7e 1c             	mov    0x1c(%esi),%edi
407914:	8b c7                	mov    %edi,%eax
407916:	c1 e8 04             	shr    $0x4,%eax
407919:	a8 01                	test   $0x1,%al
40791b:	8d 41 08             	lea    0x8(%ecx),%eax
40791e:	89 46 10             	mov    %eax,0x10(%esi)
407921:	8b 01                	mov    (%ecx),%eax
407923:	8b 51 04             	mov    0x4(%ecx),%edx
407926:	eb 66                	jmp    0x40798e
407928:	8b 7e 1c             	mov    0x1c(%esi),%edi
40792b:	8b c7                	mov    %edi,%eax
40792d:	c1 e8 04             	shr    $0x4,%eax
407930:	a8 01                	test   $0x1,%al
407932:	74 0d                	je     0x407941
407934:	8b 46 10             	mov    0x10(%esi),%eax
407937:	8d 48 04             	lea    0x4(%eax),%ecx
40793a:	89 4e 10             	mov    %ecx,0x10(%esi)
40793d:	8b 00                	mov    (%eax),%eax
40793f:	eb 4c                	jmp    0x40798d
407941:	8b 4e 10             	mov    0x10(%esi),%ecx
407944:	89 5d f8             	mov    %ebx,-0x8(%ebp)
407947:	8d 41 04             	lea    0x4(%ecx),%eax
40794a:	89 46 10             	mov    %eax,0x10(%esi)
40794d:	8b 01                	mov    (%ecx),%eax
40794f:	eb 40                	jmp    0x407991
407951:	8b 7e 1c             	mov    0x1c(%esi),%edi
407954:	8b c7                	mov    %edi,%eax
407956:	8b 4e 10             	mov    0x10(%esi),%ecx
407959:	c1 e8 04             	shr    $0x4,%eax
40795c:	a8 01                	test   $0x1,%al
40795e:	8d 41 04             	lea    0x4(%ecx),%eax
407961:	89 46 10             	mov    %eax,0x10(%esi)
407964:	74 05                	je     0x40796b
407966:	0f bf 01             	movswl (%ecx),%eax
407969:	eb 22                	jmp    0x40798d
40796b:	0f b7 01             	movzwl (%ecx),%eax
40796e:	eb 1d                	jmp    0x40798d
407970:	8b 7e 1c             	mov    0x1c(%esi),%edi
407973:	8b c7                	mov    %edi,%eax
407975:	8b 4e 10             	mov    0x10(%esi),%ecx
407978:	c1 e8 04             	shr    $0x4,%eax
40797b:	a8 01                	test   $0x1,%al
40797d:	8d 41 04             	lea    0x4(%ecx),%eax
407980:	89 46 10             	mov    %eax,0x10(%esi)
407983:	74 05                	je     0x40798a
407985:	0f be 01             	movsbl (%ecx),%eax
407988:	eb 03                	jmp    0x40798d
40798a:	0f b6 01             	movzbl (%ecx),%eax
40798d:	99                   	cltd
40798e:	89 55 f8             	mov    %edx,-0x8(%ebp)
407991:	8b 55 f8             	mov    -0x8(%ebp),%edx
407994:	89 45 fc             	mov    %eax,-0x4(%ebp)
407997:	8b c7                	mov    %edi,%eax
407999:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40799c:	c1 e8 04             	shr    $0x4,%eax
40799f:	a8 01                	test   $0x1,%al
4079a1:	74 16                	je     0x4079b9
4079a3:	3b d3                	cmp    %ebx,%edx
4079a5:	7f 12                	jg     0x4079b9
4079a7:	7c 04                	jl     0x4079ad
4079a9:	3b cb                	cmp    %ebx,%ecx
4079ab:	73 0c                	jae    0x4079b9
4079ad:	f7 d9                	neg    %ecx
4079af:	13 d3                	adc    %ebx,%edx
4079b1:	f7 da                	neg    %edx
4079b3:	83 cf 40             	or     $0x40,%edi
4079b6:	89 7e 1c             	mov    %edi,0x1c(%esi)
4079b9:	83 7e 24 00          	cmpl   $0x0,0x24(%esi)
4079bd:	89 55 f8             	mov    %edx,-0x8(%ebp)
4079c0:	89 4d fc             	mov    %ecx,-0x4(%ebp)
4079c3:	7d 09                	jge    0x4079ce
4079c5:	c7 46 24 01 00 00 00 	movl   $0x1,0x24(%esi)
4079cc:	eb 1a                	jmp    0x4079e8
4079ce:	ff 76 08             	push   0x8(%esi)
4079d1:	83 e7 f7             	and    $0xfffffff7,%edi
4079d4:	8d 4e 3c             	lea    0x3c(%esi),%ecx
4079d7:	ff 76 24             	push   0x24(%esi)
4079da:	89 7e 1c             	mov    %edi,0x1c(%esi)
4079dd:	e8 bb fb ff ff       	call   0x40759d
4079e2:	8b 4d fc             	mov    -0x4(%ebp),%ecx
4079e5:	8b 55 f8             	mov    -0x8(%ebp),%edx
4079e8:	8b c1                	mov    %ecx,%eax
4079ea:	0b c2                	or     %edx,%eax
4079ec:	75 04                	jne    0x4079f2
4079ee:	83 66 1c df          	andl   $0xffffffdf,0x1c(%esi)
4079f2:	83 7d f4 08          	cmpl   $0x8,-0xc(%ebp)
4079f6:	ff 75 08             	push   0x8(%ebp)
4079f9:	88 5e 38             	mov    %bl,0x38(%esi)
4079fc:	75 0b                	jne    0x407a09
4079fe:	52                   	push   %edx
4079ff:	51                   	push   %ecx
407a00:	8b ce                	mov    %esi,%ecx
407a02:	e8 b7 04 00 00       	call   0x407ebe
407a07:	eb 08                	jmp    0x407a11
407a09:	51                   	push   %ecx
407a0a:	8b ce                	mov    %esi,%ecx
407a0c:	e8 46 03 00 00       	call   0x407d57
407a11:	8b 46 1c             	mov    0x1c(%esi),%eax
407a14:	c1 e8 07             	shr    $0x7,%eax
407a17:	a8 01                	test   $0x1,%al
407a19:	74 19                	je     0x407a34
407a1b:	39 5e 34             	cmp    %ebx,0x34(%esi)
407a1e:	74 08                	je     0x407a28
407a20:	8b 46 30             	mov    0x30(%esi),%eax
407a23:	80 38 30             	cmpb   $0x30,(%eax)
407a26:	74 0c                	je     0x407a34
407a28:	ff 4e 30             	decl   0x30(%esi)
407a2b:	8b 4e 30             	mov    0x30(%esi),%ecx
407a2e:	c6 01 30             	movb   $0x30,(%ecx)
407a31:	ff 46 34             	incl   0x34(%esi)
407a34:	b0 01                	mov    $0x1,%al
407a36:	5f                   	pop    %edi
407a37:	5e                   	pop    %esi
407a38:	5b                   	pop    %ebx
407a39:	c9                   	leave
407a3a:	c2 04 00             	ret    $0x4
407a3d:	8b ff                	mov    %edi,%edi
407a3f:	55                   	push   %ebp
407a40:	8b ec                	mov    %esp,%ebp
407a42:	83 ec 0c             	sub    $0xc,%esp
407a45:	53                   	push   %ebx
407a46:	56                   	push   %esi
407a47:	8b f1                	mov    %ecx,%esi
407a49:	57                   	push   %edi
407a4a:	ff 76 28             	push   0x28(%esi)
407a4d:	e8 10 10 00 00       	call   0x408a62
407a52:	59                   	pop    %ecx
407a53:	8b c8                	mov    %eax,%ecx
407a55:	89 45 f4             	mov    %eax,-0xc(%ebp)
407a58:	6a 00                	push   $0x0
407a5a:	5b                   	pop    %ebx
407a5b:	83 e9 01             	sub    $0x1,%ecx
407a5e:	0f 84 99 00 00 00    	je     0x407afd
407a64:	83 e9 01             	sub    $0x1,%ecx
407a67:	74 75                	je     0x407ade
407a69:	49                   	dec    %ecx
407a6a:	83 e9 01             	sub    $0x1,%ecx
407a6d:	74 46                	je     0x407ab5
407a6f:	83 e9 04             	sub    $0x4,%ecx
407a72:	74 27                	je     0x407a9b
407a74:	8b 46 08             	mov    0x8(%esi),%eax
407a77:	83 c0 18             	add    $0x18,%eax
407a7a:	c6 40 04 01          	movb   $0x1,0x4(%eax)
407a7e:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
407a84:	ff 76 08             	push   0x8(%esi)
407a87:	53                   	push   %ebx
407a88:	53                   	push   %ebx
407a89:	53                   	push   %ebx
407a8a:	53                   	push   %ebx
407a8b:	53                   	push   %ebx
407a8c:	e8 bb f9 ff ff       	call   0x40744c
407a91:	83 c4 18             	add    $0x18,%esp
407a94:	32 c0                	xor    %al,%al
407a96:	e9 28 01 00 00       	jmp    0x407bc3
407a9b:	8b 4e 10             	mov    0x10(%esi),%ecx
407a9e:	8b 7e 1c             	mov    0x1c(%esi),%edi
407aa1:	8b c7                	mov    %edi,%eax
407aa3:	c1 e8 04             	shr    $0x4,%eax
407aa6:	a8 01                	test   $0x1,%al
407aa8:	8d 41 08             	lea    0x8(%ecx),%eax
407aab:	89 46 10             	mov    %eax,0x10(%esi)
407aae:	8b 01                	mov    (%ecx),%eax
407ab0:	8b 51 04             	mov    0x4(%ecx),%edx
407ab3:	eb 66                	jmp    0x407b1b
407ab5:	8b 7e 1c             	mov    0x1c(%esi),%edi
407ab8:	8b c7                	mov    %edi,%eax
407aba:	c1 e8 04             	shr    $0x4,%eax
407abd:	a8 01                	test   $0x1,%al
407abf:	74 0d                	je     0x407ace
407ac1:	8b 46 10             	mov    0x10(%esi),%eax
407ac4:	8d 48 04             	lea    0x4(%eax),%ecx
407ac7:	89 4e 10             	mov    %ecx,0x10(%esi)
407aca:	8b 00                	mov    (%eax),%eax
407acc:	eb 4c                	jmp    0x407b1a
407ace:	8b 4e 10             	mov    0x10(%esi),%ecx
407ad1:	89 5d f8             	mov    %ebx,-0x8(%ebp)
407ad4:	8d 41 04             	lea    0x4(%ecx),%eax
407ad7:	89 46 10             	mov    %eax,0x10(%esi)
407ada:	8b 01                	mov    (%ecx),%eax
407adc:	eb 40                	jmp    0x407b1e
407ade:	8b 7e 1c             	mov    0x1c(%esi),%edi
407ae1:	8b c7                	mov    %edi,%eax
407ae3:	8b 4e 10             	mov    0x10(%esi),%ecx
407ae6:	c1 e8 04             	shr    $0x4,%eax
407ae9:	a8 01                	test   $0x1,%al
407aeb:	8d 41 04             	lea    0x4(%ecx),%eax
407aee:	89 46 10             	mov    %eax,0x10(%esi)
407af1:	74 05                	je     0x407af8
407af3:	0f bf 01             	movswl (%ecx),%eax
407af6:	eb 22                	jmp    0x407b1a
407af8:	0f b7 01             	movzwl (%ecx),%eax
407afb:	eb 1d                	jmp    0x407b1a
407afd:	8b 7e 1c             	mov    0x1c(%esi),%edi
407b00:	8b c7                	mov    %edi,%eax
407b02:	8b 4e 10             	mov    0x10(%esi),%ecx
407b05:	c1 e8 04             	shr    $0x4,%eax
407b08:	a8 01                	test   $0x1,%al
407b0a:	8d 41 04             	lea    0x4(%ecx),%eax
407b0d:	89 46 10             	mov    %eax,0x10(%esi)
407b10:	74 05                	je     0x407b17
407b12:	0f be 01             	movsbl (%ecx),%eax
407b15:	eb 03                	jmp    0x407b1a
407b17:	0f b6 01             	movzbl (%ecx),%eax
407b1a:	99                   	cltd
407b1b:	89 55 f8             	mov    %edx,-0x8(%ebp)
407b1e:	8b 55 f8             	mov    -0x8(%ebp),%edx
407b21:	89 45 fc             	mov    %eax,-0x4(%ebp)
407b24:	8b c7                	mov    %edi,%eax
407b26:	8b 4d fc             	mov    -0x4(%ebp),%ecx
407b29:	c1 e8 04             	shr    $0x4,%eax
407b2c:	a8 01                	test   $0x1,%al
407b2e:	74 16                	je     0x407b46
407b30:	3b d3                	cmp    %ebx,%edx
407b32:	7f 12                	jg     0x407b46
407b34:	7c 04                	jl     0x407b3a
407b36:	3b cb                	cmp    %ebx,%ecx
407b38:	73 0c                	jae    0x407b46
407b3a:	f7 d9                	neg    %ecx
407b3c:	13 d3                	adc    %ebx,%edx
407b3e:	f7 da                	neg    %edx
407b40:	83 cf 40             	or     $0x40,%edi
407b43:	89 7e 1c             	mov    %edi,0x1c(%esi)
407b46:	83 7e 24 00          	cmpl   $0x0,0x24(%esi)
407b4a:	89 55 f8             	mov    %edx,-0x8(%ebp)
407b4d:	89 4d fc             	mov    %ecx,-0x4(%ebp)
407b50:	7d 09                	jge    0x407b5b
407b52:	c7 46 24 01 00 00 00 	movl   $0x1,0x24(%esi)
407b59:	eb 1a                	jmp    0x407b75
407b5b:	ff 76 08             	push   0x8(%esi)
407b5e:	83 e7 f7             	and    $0xfffffff7,%edi
407b61:	8d 4e 3c             	lea    0x3c(%esi),%ecx
407b64:	ff 76 24             	push   0x24(%esi)
407b67:	89 7e 1c             	mov    %edi,0x1c(%esi)
407b6a:	e8 2e fa ff ff       	call   0x40759d