40b97b:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40b97e:	8b c6                	mov    %esi,%eax
40b980:	5f                   	pop    %edi
40b981:	5e                   	pop    %esi
40b982:	33 cd                	xor    %ebp,%ecx
40b984:	5b                   	pop    %ebx
40b985:	e8 3e 87 ff ff       	call   0x4040c8
40b98a:	c9                   	leave
40b98b:	c3                   	ret
40b98c:	8b ff                	mov    %edi,%edi
40b98e:	55                   	push   %ebp
40b98f:	8b ec                	mov    %esp,%ebp
40b991:	83 ec 28             	sub    $0x28,%esp
40b994:	8d 4d d8             	lea    -0x28(%ebp),%ecx
40b997:	56                   	push   %esi
40b998:	6a 00                	push   $0x0
40b99a:	e8 cb ad ff ff       	call   0x40676a
40b99f:	8d 45 d8             	lea    -0x28(%ebp),%eax
40b9a2:	50                   	push   %eax
40b9a3:	ff 75 10             	push   0x10(%ebp)
40b9a6:	ff 75 0c             	push   0xc(%ebp)
40b9a9:	ff 75 08             	push   0x8(%ebp)
40b9ac:	e8 12 00 00 00       	call   0x40b9c3
40b9b1:	83 c4 10             	add    $0x10,%esp
40b9b4:	8d 4d d8             	lea    -0x28(%ebp),%ecx
40b9b7:	8b f0                	mov    %eax,%esi
40b9b9:	e8 f4 ad ff ff       	call   0x4067b2
40b9be:	8b c6                	mov    %esi,%eax
40b9c0:	5e                   	pop    %esi
40b9c1:	c9                   	leave
40b9c2:	c3                   	ret
40b9c3:	6a 14                	push   $0x14
40b9c5:	68 c8 00 42 00       	push   $0x4200c8
40b9ca:	e8 d1 84 ff ff       	call   0x403ea0
40b9cf:	8b 7d 08             	mov    0x8(%ebp),%edi
40b9d2:	83 ff fe             	cmp    $0xfffffffe,%edi
40b9d5:	75 1e                	jne    0x40b9f5
40b9d7:	8b 45 14             	mov    0x14(%ebp),%eax
40b9da:	c6 40 24 01          	movb   $0x1,0x24(%eax)
40b9de:	83 60 20 00          	andl   $0x0,0x20(%eax)
40b9e2:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
40b9e6:	c7 40 18 09 00 00 00 	movl   $0x9,0x18(%eax)
40b9ed:	83 c8 ff             	or     $0xffffffff,%eax
40b9f0:	e9 c1 00 00 00       	jmp    0x40bab6
40b9f5:	85 ff                	test   %edi,%edi
40b9f7:	78 0f                	js     0x40ba08
40b9f9:	3b 3d a8 23 42 00    	cmp    0x4223a8,%edi
40b9ff:	73 07                	jae    0x40ba08
40ba01:	33 c0                	xor    %eax,%eax
40ba03:	40                   	inc    %eax
40ba04:	33 f6                	xor    %esi,%esi
40ba06:	eb 04                	jmp    0x40ba0c
40ba08:	33 f6                	xor    %esi,%esi
40ba0a:	8b c6                	mov    %esi,%eax
40ba0c:	85 c0                	test   %eax,%eax
40ba0e:	75 25                	jne    0x40ba35
40ba10:	8b 45 14             	mov    0x14(%ebp),%eax
40ba13:	c6 40 24 01          	movb   $0x1,0x24(%eax)
40ba17:	89 70 20             	mov    %esi,0x20(%eax)
40ba1a:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
40ba1e:	c7 40 18 09 00 00 00 	movl   $0x9,0x18(%eax)
40ba25:	50                   	push   %eax
40ba26:	56                   	push   %esi
40ba27:	56                   	push   %esi
40ba28:	56                   	push   %esi
40ba29:	56                   	push   %esi
40ba2a:	56                   	push   %esi
40ba2b:	e8 1c ba ff ff       	call   0x40744c
40ba30:	83 c4 18             	add    $0x18,%esp
40ba33:	eb b8                	jmp    0x40b9ed
40ba35:	8b cf                	mov    %edi,%ecx
40ba37:	c1 f9 06             	sar    $0x6,%ecx
40ba3a:	89 4d e0             	mov    %ecx,-0x20(%ebp)
40ba3d:	8b c7                	mov    %edi,%eax
40ba3f:	83 e0 3f             	and    $0x3f,%eax
40ba42:	6b d0 38             	imul   $0x38,%eax,%edx
40ba45:	89 55 dc             	mov    %edx,-0x24(%ebp)
40ba48:	8b 04 8d a8 21 42 00 	mov    0x4221a8(,%ecx,4),%eax
40ba4f:	f6 44 10 28 01       	testb  $0x1,0x28(%eax,%edx,1)
40ba54:	74 ba                	je     0x40ba10
40ba56:	57                   	push   %edi
40ba57:	e8 23 3c 00 00       	call   0x40f67f
40ba5c:	59                   	pop    %ecx
40ba5d:	83 cb ff             	or     $0xffffffff,%ebx
40ba60:	89 5d e4             	mov    %ebx,-0x1c(%ebp)
40ba63:	89 75 fc             	mov    %esi,-0x4(%ebp)
40ba66:	8b 45 e0             	mov    -0x20(%ebp),%eax
40ba69:	8b 04 85 a8 21 42 00 	mov    0x4221a8(,%eax,4),%eax
40ba70:	8b 4d dc             	mov    -0x24(%ebp),%ecx
40ba73:	f6 44 01 28 01       	testb  $0x1,0x28(%ecx,%eax,1)
40ba78:	75 17                	jne    0x40ba91
40ba7a:	8b 45 14             	mov    0x14(%ebp),%eax
40ba7d:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
40ba81:	c7 40 18 09 00 00 00 	movl   $0x9,0x18(%eax)
40ba88:	c6 40 24 01          	movb   $0x1,0x24(%eax)
40ba8c:	89 70 20             	mov    %esi,0x20(%eax)
40ba8f:	eb 17                	jmp    0x40baa8
40ba91:	ff 75 14             	push   0x14(%ebp)
40ba94:	ff 75 10             	push   0x10(%ebp)
40ba97:	ff 75 0c             	push   0xc(%ebp)
40ba9a:	57                   	push   %edi
40ba9b:	e8 34 00 00 00       	call   0x40bad4
40baa0:	83 c4 10             	add    $0x10,%esp
40baa3:	8b d8                	mov    %eax,%ebx
40baa5:	89 5d e4             	mov    %ebx,-0x1c(%ebp)
40baa8:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
40baaf:	e8 18 00 00 00       	call   0x40bacc
40bab4:	8b c3                	mov    %ebx,%eax
40bab6:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40bab9:	64 89 0d 00 00 00 00 	mov    %ecx,%fs:0x0
40bac0:	59                   	pop    %ecx
40bac1:	5f                   	pop    %edi
40bac2:	5e                   	pop    %esi
40bac3:	5b                   	pop    %ebx
40bac4:	c9                   	leave
40bac5:	c3                   	ret
40bac6:	8b 7d 08             	mov    0x8(%ebp),%edi
40bac9:	8b 5d e4             	mov    -0x1c(%ebp),%ebx
40bacc:	57                   	push   %edi
40bacd:	e8 62 3c 00 00       	call   0x40f734
40bad2:	59                   	pop    %ecx
40bad3:	c3                   	ret
40bad4:	8b ff                	mov    %edi,%edi
40bad6:	55                   	push   %ebp
40bad7:	8b ec                	mov    %esp,%ebp
40bad9:	83 ec 30             	sub    $0x30,%esp
40badc:	8b 55 10             	mov    0x10(%ebp),%edx
40badf:	8b 4d 08             	mov    0x8(%ebp),%ecx
40bae2:	8b 45 0c             	mov    0xc(%ebp),%eax
40bae5:	89 4d f0             	mov    %ecx,-0x10(%ebp)
40bae8:	89 45 f8             	mov    %eax,-0x8(%ebp)
40baeb:	89 55 f4             	mov    %edx,-0xc(%ebp)
40baee:	53                   	push   %ebx
40baef:	8b 5d 14             	mov    0x14(%ebp),%ebx
40baf2:	56                   	push   %esi
40baf3:	57                   	push   %edi
40baf4:	85 d2                	test   %edx,%edx
40baf6:	0f 84 ed 01 00 00    	je     0x40bce9
40bafc:	85 c0                	test   %eax,%eax
40bafe:	75 2a                	jne    0x40bb2a
40bb00:	33 c0                	xor    %eax,%eax
40bb02:	c6 43 24 01          	movb   $0x1,0x24(%ebx)
40bb06:	53                   	push   %ebx
40bb07:	50                   	push   %eax
40bb08:	50                   	push   %eax
40bb09:	50                   	push   %eax
40bb0a:	89 43 20             	mov    %eax,0x20(%ebx)
40bb0d:	50                   	push   %eax
40bb0e:	c6 43 1c 01          	movb   $0x1,0x1c(%ebx)
40bb12:	50                   	push   %eax
40bb13:	c7 43 18 16 00 00 00 	movl   $0x16,0x18(%ebx)
40bb1a:	e8 2d b9 ff ff       	call   0x40744c
40bb1f:	83 c4 18             	add    $0x18,%esp
40bb22:	83 c8 ff             	or     $0xffffffff,%eax
40bb25:	e9 c1 01 00 00       	jmp    0x40bceb
40bb2a:	8b c1                	mov    %ecx,%eax
40bb2c:	8b f1                	mov    %ecx,%esi
40bb2e:	83 e0 3f             	and    $0x3f,%eax
40bb31:	c1 fe 06             	sar    $0x6,%esi
40bb34:	6b f8 38             	imul   $0x38,%eax,%edi
40bb37:	89 75 ec             	mov    %esi,-0x14(%ebp)
40bb3a:	8b 04 b5 a8 21 42 00 	mov    0x4221a8(,%esi,4),%eax
40bb41:	89 7d e8             	mov    %edi,-0x18(%ebp)
40bb44:	8a 44 07 29          	mov    0x29(%edi,%eax,1),%al
40bb48:	88 45 ff             	mov    %al,-0x1(%ebp)
40bb4b:	3c 02                	cmp    $0x2,%al
40bb4d:	74 04                	je     0x40bb53
40bb4f:	3c 01                	cmp    $0x1,%al
40bb51:	75 08                	jne    0x40bb5b
40bb53:	8b c2                	mov    %edx,%eax
40bb55:	f7 d0                	not    %eax
40bb57:	a8 01                	test   $0x1,%al
40bb59:	74 a5                	je     0x40bb00
40bb5b:	8b 55 ec             	mov    -0x14(%ebp),%edx
40bb5e:	33 f6                	xor    %esi,%esi
40bb60:	8b 04 95 a8 21 42 00 	mov    0x4221a8(,%edx,4),%eax
40bb67:	f6 44 07 28 20       	testb  $0x20,0x28(%edi,%eax,1)
40bb6c:	74 11                	je     0x40bb7f
40bb6e:	53                   	push   %ebx
40bb6f:	6a 02                	push   $0x2
40bb71:	56                   	push   %esi
40bb72:	56                   	push   %esi
40bb73:	51                   	push   %ecx
40bb74:	e8 06 53 00 00       	call   0x410e7f
40bb79:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40bb7c:	83 c4 14             	add    $0x14,%esp
40bb7f:	53                   	push   %ebx
40bb80:	8b fe                	mov    %esi,%edi
40bb82:	51                   	push   %ecx
40bb83:	89 7d dc             	mov    %edi,-0x24(%ebp)
40bb86:	e8 8e fa ff ff       	call   0x40b619
40bb8b:	59                   	pop    %ecx
40bb8c:	59                   	pop    %ecx
40bb8d:	84 c0                	test   %al,%al
40bb8f:	74 47                	je     0x40bbd8
40bb91:	0f be 45 ff          	movsbl -0x1(%ebp),%eax
40bb95:	2b c6                	sub    %esi,%eax
40bb97:	74 27                	je     0x40bbc0
40bb99:	83 e8 01             	sub    $0x1,%eax
40bb9c:	74 09                	je     0x40bba7
40bb9e:	83 e8 01             	sub    $0x1,%eax
40bba1:	0f 85 da 00 00 00    	jne    0x40bc81
40bba7:	ff 75 f4             	push   -0xc(%ebp)
40bbaa:	8d 45 d0             	lea    -0x30(%ebp),%eax
40bbad:	ff 75 f8             	push   -0x8(%ebp)
40bbb0:	50                   	push   %eax
40bbb1:	e8 fb f9 ff ff       	call   0x40b5b1
40bbb6:	83 c4 0c             	add    $0xc,%esp
40bbb9:	8b f0                	mov    %eax,%esi
40bbbb:	e9 af 00 00 00       	jmp    0x40bc6f
40bbc0:	53                   	push   %ebx
40bbc1:	ff 75 f4             	push   -0xc(%ebp)
40bbc4:	8d 45 d0             	lea    -0x30(%ebp),%eax
40bbc7:	ff 75 f8             	push   -0x8(%ebp)
40bbca:	ff 75 f0             	push   -0x10(%ebp)
40bbcd:	50                   	push   %eax
40bbce:	e8 17 f6 ff ff       	call   0x40b1ea
40bbd3:	83 c4 14             	add    $0x14,%esp
40bbd6:	eb e1                	jmp    0x40bbb9
40bbd8:	8b 55 ec             	mov    -0x14(%ebp),%edx
40bbdb:	8b 4d e8             	mov    -0x18(%ebp),%ecx
40bbde:	8b 04 95 a8 21 42 00 	mov    0x4221a8(,%edx,4),%eax
40bbe5:	80 7c 08 28 00       	cmpb   $0x0,0x28(%eax,%ecx,1)
40bbea:	7d 55                	jge    0x40bc41
40bbec:	0f be 45 ff          	movsbl -0x1(%ebp),%eax
40bbf0:	2b c6                	sub    %esi,%eax
40bbf2:	74 39                	je     0x40bc2d
40bbf4:	83 e8 01             	sub    $0x1,%eax
40bbf7:	74 20                	je     0x40bc19
40bbf9:	83 e8 01             	sub    $0x1,%eax
40bbfc:	0f 85 85 00 00 00    	jne    0x40bc87
40bc02:	ff 75 f4             	push   -0xc(%ebp)
40bc05:	8d 45 d0             	lea    -0x30(%ebp),%eax
40bc08:	ff 75 f8             	push   -0x8(%ebp)
40bc0b:	ff 75 f0             	push   -0x10(%ebp)
40bc0e:	50                   	push   %eax
40bc0f:	e8 5d fb ff ff       	call   0x40b771
40bc14:	83 c4 10             	add    $0x10,%esp
40bc17:	eb a0                	jmp    0x40bbb9
40bc19:	ff 75 f4             	push   -0xc(%ebp)
40bc1c:	8d 45 d0             	lea    -0x30(%ebp),%eax
40bc1f:	ff 75 f8             	push   -0x8(%ebp)
40bc22:	ff 75 f0             	push   -0x10(%ebp)
40bc25:	50                   	push   %eax
40bc26:	e8 2f fc ff ff       	call   0x40b85a
40bc2b:	eb e7                	jmp    0x40bc14
40bc2d:	ff 75 f4             	push   -0xc(%ebp)
40bc30:	8d 45 d0             	lea    -0x30(%ebp),%eax
40bc33:	ff 75 f8             	push   -0x8(%ebp)
40bc36:	ff 75 f0             	push   -0x10(%ebp)
40bc39:	50                   	push   %eax
40bc3a:	e8 57 fa ff ff       	call   0x40b696
40bc3f:	eb d3                	jmp    0x40bc14
40bc41:	8b 4c 08 18          	mov    0x18(%eax,%ecx,1),%ecx
40bc45:	8d 7d d0             	lea    -0x30(%ebp),%edi
40bc48:	33 c0                	xor    %eax,%eax
40bc4a:	ab                   	stos   %eax,%es:(%edi)
40bc4b:	56                   	push   %esi
40bc4c:	ab                   	stos   %eax,%es:(%edi)
40bc4d:	ab                   	stos   %eax,%es:(%edi)
40bc4e:	8d 45 d4             	lea    -0x2c(%ebp),%eax
40bc51:	50                   	push   %eax
40bc52:	ff 75 f4             	push   -0xc(%ebp)
40bc55:	ff 75 f8             	push   -0x8(%ebp)
40bc58:	51                   	push   %ecx
40bc59:	ff 15 c0 90 41 00    	call   *0x4190c0
40bc5f:	85 c0                	test   %eax,%eax
40bc61:	75 09                	jne    0x40bc6c
40bc63:	ff 15 28 90 41 00    	call   *0x419028
40bc69:	89 45 d0             	mov    %eax,-0x30(%ebp)
40bc6c:	8d 75 d0             	lea    -0x30(%ebp),%esi
40bc6f:	8d 7d dc             	lea    -0x24(%ebp),%edi
40bc72:	a5                   	movsl  %ds:(%esi),%es:(%edi)
40bc73:	a5                   	movsl  %ds:(%esi),%es:(%edi)
40bc74:	a5                   	movsl  %ds:(%esi),%es:(%edi)
40bc75:	8b 45 e0             	mov    -0x20(%ebp),%eax
40bc78:	85 c0                	test   %eax,%eax
40bc7a:	75 68                	jne    0x40bce4
40bc7c:	8b 7d dc             	mov    -0x24(%ebp),%edi
40bc7f:	33 f6                	xor    %esi,%esi
40bc81:	8b 55 ec             	mov    -0x14(%ebp),%edx
40bc84:	8b 4d e8             	mov    -0x18(%ebp),%ecx
40bc87:	85 ff                	test   %edi,%edi
40bc89:	74 2c                	je     0x40bcb7
40bc8b:	6a 05                	push   $0x5
40bc8d:	58                   	pop    %eax
40bc8e:	3b f8                	cmp    %eax,%edi
40bc90:	75 17                	jne    0x40bca9
40bc92:	c6 43 1c 01          	movb   $0x1,0x1c(%ebx)
40bc96:	c7 43 18 09 00 00 00 	movl   $0x9,0x18(%ebx)
40bc9d:	c6 43 24 01          	movb   $0x1,0x24(%ebx)
40bca1:	89 43 20             	mov    %eax,0x20(%ebx)
40bca4:	e9 79 fe ff ff       	jmp    0x40bb22
40bca9:	53                   	push   %ebx
40bcaa:	57                   	push   %edi
40bcab:	e8 48 ea ff ff       	call   0x40a6f8
40bcb0:	59                   	pop    %ecx
40bcb1:	59                   	pop    %ecx
40bcb2:	e9 6b fe ff ff       	jmp    0x40bb22
40bcb7:	8b 04 95 a8 21 42 00 	mov    0x4221a8(,%edx,4),%eax
40bcbe:	f6 44 08 28 40       	testb  $0x40,0x28(%eax,%ecx,1)
40bcc3:	74 08                	je     0x40bccd
40bcc5:	8b 45 f8             	mov    -0x8(%ebp),%eax
40bcc8:	80 38 1a             	cmpb   $0x1a,(%eax)
40bccb:	74 1c                	je     0x40bce9
40bccd:	c6 43 1c 01          	movb   $0x1,0x1c(%ebx)
40bcd1:	c7 43 18 1c 00 00 00 	movl   $0x1c,0x18(%ebx)
40bcd8:	c6 43 24 01          	movb   $0x1,0x24(%ebx)
40bcdc:	89 73 20             	mov    %esi,0x20(%ebx)
40bcdf:	e9 3e fe ff ff       	jmp    0x40bb22
40bce4:	2b 45 e4             	sub    -0x1c(%ebp),%eax
40bce7:	eb 02                	jmp    0x40bceb
40bce9:	33 c0                	xor    %eax,%eax
40bceb:	5f                   	pop    %edi
40bcec:	5e                   	pop    %esi
40bced:	5b                   	pop    %ebx
40bcee:	c9                   	leave
40bcef:	c3                   	ret
40bcf0:	8b ff                	mov    %edi,%edi
40bcf2:	55                   	push   %ebp
40bcf3:	8b ec                	mov    %esp,%ebp
40bcf5:	ff 75 0c             	push   0xc(%ebp)
40bcf8:	e8 c6 f4 ff ff       	call   0x40b1c3
40bcfd:	8b 45 0c             	mov    0xc(%ebp),%eax
40bd00:	59                   	pop    %ecx
40bd01:	8b 40 0c             	mov    0xc(%eax),%eax
40bd04:	90                   	nop
40bd05:	a8 06                	test   $0x6,%al
40bd07:	75 1f                	jne    0x40bd28
40bd09:	8b 45 10             	mov    0x10(%ebp),%eax
40bd0c:	c7 40 18 09 00 00 00 	movl   $0x9,0x18(%eax)
40bd13:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
40bd17:	8b 45 0c             	mov    0xc(%ebp),%eax
40bd1a:	6a 10                	push   $0x10
40bd1c:	59                   	pop    %ecx
40bd1d:	83 c0 0c             	add    $0xc,%eax
40bd20:	f0 09 08             	lock or %ecx,(%eax)
40bd23:	83 c8 ff             	or     $0xffffffff,%eax
40bd26:	5d                   	pop    %ebp
40bd27:	c3                   	ret
40bd28:	8b 45 0c             	mov    0xc(%ebp),%eax
40bd2b:	8b 40 0c             	mov    0xc(%eax),%eax
40bd2e:	90                   	nop
40bd2f:	c1 e8 0c             	shr    $0xc,%eax
40bd32:	a8 01                	test   $0x1,%al
40bd34:	74 0c                	je     0x40bd42
40bd36:	8b 45 10             	mov    0x10(%ebp),%eax
40bd39:	c7 40 18 22 00 00 00 	movl   $0x22,0x18(%eax)
40bd40:	eb d1                	jmp    0x40bd13
40bd42:	8b 45 0c             	mov    0xc(%ebp),%eax