40a024:	83 c4 1c             	add    $0x1c,%esp
40a027:	5f                   	pop    %edi
40a028:	5e                   	pop    %esi
40a029:	c9                   	leave
40a02a:	c2 20 00             	ret    $0x20
40a02d:	6a 10                	push   $0x10
40a02f:	8d 4d 10             	lea    0x10(%ebp),%ecx
40a032:	e8 6e 6f 01 00       	call   0x420fa5
40a037:	84 c0                	test   %al,%al
40a039:	ba 90 63 49 00       	mov    $0x496390,%edx
40a03e:	b9 b8 65 49 00       	mov    $0x4965b8,%ecx
40a043:	0f 44 ca             	cmove  %edx,%ecx
40a046:	51                   	push   %ecx
40a047:	8d 4d 10             	lea    0x10(%ebp),%ecx
40a04a:	e8 9d 93 01 00       	call   0x4233ec
40a04f:	0f b6 c0             	movzbl %al,%eax
40a052:	50                   	push   %eax
40a053:	e8 b6 86 01 00       	call   0x42270e
40a058:	cc                   	int3
40a059:	55                   	push   %ebp
40a05a:	8b ec                	mov    %esp,%ebp
40a05c:	83 ec 20             	sub    $0x20,%esp
40a05f:	8b 55 1c             	mov    0x1c(%ebp),%edx
40a062:	56                   	push   %esi
40a063:	57                   	push   %edi
40a064:	33 ff                	xor    %edi,%edi
40a066:	89 4d f4             	mov    %ecx,-0xc(%ebp)
40a069:	89 7d f8             	mov    %edi,-0x8(%ebp)
40a06c:	8b f7                	mov    %edi,%esi
40a06e:	89 7d fc             	mov    %edi,-0x4(%ebp)
40a071:	f6 c2 01             	test   $0x1,%dl
40a074:	74 15                	je     0x40a08b
40a076:	8b c2                	mov    %edx,%eax
40a078:	d1 e8                	shr    $1,%eax
40a07a:	24 01                	and    $0x1,%al
40a07c:	f6 d8                	neg    %al
40a07e:	1a c0                	sbb    %al,%al
40a080:	24 0b                	and    $0xb,%al
40a082:	04 20                	add    $0x20,%al
40a084:	46                   	inc    %esi
40a085:	88 45 fc             	mov    %al,-0x4(%ebp)
40a088:	89 75 f8             	mov    %esi,-0x8(%ebp)
40a08b:	0f be 45 24          	movsbl 0x24(%ebp),%eax
40a08f:	83 f8 64             	cmp    $0x64,%eax
40a092:	0f 8f d5 00 00 00    	jg     0x40a16d
40a098:	0f 84 97 00 00 00    	je     0x40a135
40a09e:	85 c0                	test   %eax,%eax
40a0a0:	0f 84 8f 00 00 00    	je     0x40a135
40a0a6:	83 f8 42             	cmp    $0x42,%eax
40a0a9:	74 12                	je     0x40a0bd
40a0ab:	83 f8 58             	cmp    $0x58,%eax
40a0ae:	0f 84 d4 00 00 00    	je     0x40a188
40a0b4:	83 f8 62             	cmp    $0x62,%eax
40a0b7:	0f 85 2c 02 00 00    	jne    0x40a2e9
40a0bd:	8b 45 08             	mov    0x8(%ebp),%eax
40a0c0:	c1 ea 03             	shr    $0x3,%edx
40a0c3:	89 45 f0             	mov    %eax,-0x10(%ebp)
40a0c6:	89 45 ec             	mov    %eax,-0x14(%ebp)
40a0c9:	8b 45 0c             	mov    0xc(%ebp),%eax
40a0cc:	8b c8                	mov    %eax,%ecx
40a0ce:	89 45 0c             	mov    %eax,0xc(%ebp)
40a0d1:	f6 c2 01             	test   $0x1,%dl
40a0d4:	74 12                	je     0x40a0e8
40a0d6:	8a 45 24             	mov    0x24(%ebp),%al
40a0d9:	c6 44 35 fc 30       	movb   $0x30,-0x4(%ebp,%esi,1)
40a0de:	88 44 35 fd          	mov    %al,-0x3(%ebp,%esi,1)
40a0e2:	83 c6 02             	add    $0x2,%esi
40a0e5:	89 75 f8             	mov    %esi,-0x8(%ebp)
40a0e8:	8b 75 ec             	mov    -0x14(%ebp),%esi
40a0eb:	0f ac ce 01          	shrd   $0x1,%ecx,%esi
40a0ef:	47                   	inc    %edi
40a0f0:	d1 e9                	shr    $1,%ecx
40a0f2:	8b c6                	mov    %esi,%eax
40a0f4:	0b c1                	or     %ecx,%eax
40a0f6:	75 f3                	jne    0x40a0eb
40a0f8:	8b 75 f8             	mov    -0x8(%ebp),%esi
40a0fb:	8d 45 fc             	lea    -0x4(%ebp),%eax
40a0fe:	8b 4d f4             	mov    -0xc(%ebp),%ecx
40a101:	56                   	push   %esi
40a102:	50                   	push   %eax
40a103:	8d 45 10             	lea    0x10(%ebp),%eax
40a106:	50                   	push   %eax
40a107:	57                   	push   %edi
40a108:	e8 a1 e3 ff ff       	call   0x4084ae
40a10d:	8b d0                	mov    %eax,%edx
40a10f:	8b 45 f0             	mov    -0x10(%ebp),%eax
40a112:	8a c8                	mov    %al,%cl
40a114:	80 e1 01             	and    $0x1,%cl
40a117:	80 c1 30             	add    $0x30,%cl
40a11a:	88 0a                	mov    %cl,(%edx)
40a11c:	4a                   	dec    %edx
40a11d:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40a120:	0f ac c8 01          	shrd   $0x1,%ecx,%eax
40a124:	d1 e9                	shr    $1,%ecx
40a126:	89 45 f0             	mov    %eax,-0x10(%ebp)
40a129:	0b c1                	or     %ecx,%eax
40a12b:	89 4d 0c             	mov    %ecx,0xc(%ebp)
40a12e:	75 df                	jne    0x40a10f
40a130:	e9 ae 01 00 00       	jmp    0x40a2e3
40a135:	ff 75 0c             	push   0xc(%ebp)
40a138:	ff 75 08             	push   0x8(%ebp)
40a13b:	e8 72 5a 01 00       	call   0x41fbb2
40a140:	59                   	pop    %ecx
40a141:	59                   	pop    %ecx
40a142:	56                   	push   %esi
40a143:	8d 4d fc             	lea    -0x4(%ebp),%ecx
40a146:	51                   	push   %ecx
40a147:	8d 4d 10             	lea    0x10(%ebp),%ecx
40a14a:	51                   	push   %ecx
40a14b:	8b 4d f4             	mov    -0xc(%ebp),%ecx
40a14e:	50                   	push   %eax
40a14f:	e8 5a e3 ff ff       	call   0x4084ae
40a154:	ff 75 0c             	push   0xc(%ebp)
40a157:	40                   	inc    %eax
40a158:	57                   	push   %edi
40a159:	ff 75 0c             	push   0xc(%ebp)
40a15c:	ff 75 08             	push   0x8(%ebp)
40a15f:	50                   	push   %eax
40a160:	e8 73 d9 ff ff       	call   0x407ad8
40a165:	83 c4 14             	add    $0x14,%esp
40a168:	e9 76 01 00 00       	jmp    0x40a2e3
40a16d:	83 e8 6e             	sub    $0x6e,%eax
40a170:	0f 84 f9 00 00 00    	je     0x40a26f
40a176:	83 e8 01             	sub    $0x1,%eax
40a179:	0f 84 82 00 00 00    	je     0x40a201
40a17f:	83 e8 09             	sub    $0x9,%eax
40a182:	0f 85 61 01 00 00    	jne    0x40a2e9
40a188:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40a18b:	c1 ea 03             	shr    $0x3,%edx
40a18e:	f6 c2 01             	test   $0x1,%dl
40a191:	74 12                	je     0x40a1a5
40a193:	8a 45 24             	mov    0x24(%ebp),%al
40a196:	c6 44 35 fc 30       	movb   $0x30,-0x4(%ebp,%esi,1)
40a19b:	88 44 35 fd          	mov    %al,-0x3(%ebp,%esi,1)
40a19f:	83 c6 02             	add    $0x2,%esi
40a1a2:	89 75 f8             	mov    %esi,-0x8(%ebp)
40a1a5:	8b 75 08             	mov    0x8(%ebp),%esi
40a1a8:	0f ac ce 04          	shrd   $0x4,%ecx,%esi
40a1ac:	47                   	inc    %edi
40a1ad:	c1 e9 04             	shr    $0x4,%ecx
40a1b0:	8b c6                	mov    %esi,%eax
40a1b2:	0b c1                	or     %ecx,%eax
40a1b4:	75 f2                	jne    0x40a1a8
40a1b6:	8b 75 f8             	mov    -0x8(%ebp),%esi
40a1b9:	8d 45 fc             	lea    -0x4(%ebp),%eax
40a1bc:	8b 4d f4             	mov    -0xc(%ebp),%ecx
40a1bf:	56                   	push   %esi
40a1c0:	50                   	push   %eax
40a1c1:	8d 45 10             	lea    0x10(%ebp),%eax
40a1c4:	50                   	push   %eax
40a1c5:	57                   	push   %edi
40a1c6:	e8 e3 e2 ff ff       	call   0x4084ae
40a1cb:	80 7d 24 78          	cmpb   $0x78,0x24(%ebp)
40a1cf:	8b f0                	mov    %eax,%esi
40a1d1:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40a1d4:	bf 90 65 49 00       	mov    $0x496590,%edi
40a1d9:	8b 55 08             	mov    0x8(%ebp),%edx
40a1dc:	b8 a4 65 49 00       	mov    $0x4965a4,%eax
40a1e1:	0f 45 f8             	cmovne %eax,%edi
40a1e4:	8b c2                	mov    %edx,%eax
40a1e6:	83 e0 0f             	and    $0xf,%eax
40a1e9:	0f ac ca 04          	shrd   $0x4,%ecx,%edx
40a1ed:	c1 e9 04             	shr    $0x4,%ecx
40a1f0:	8a 04 38             	mov    (%eax,%edi,1),%al
40a1f3:	88 06                	mov    %al,(%esi)
40a1f5:	8b c2                	mov    %edx,%eax
40a1f7:	4e                   	dec    %esi
40a1f8:	0b c1                	or     %ecx,%eax
40a1fa:	75 e8                	jne    0x40a1e4
40a1fc:	e9 e2 00 00 00       	jmp    0x40a2e3
40a201:	8b 45 08             	mov    0x8(%ebp),%eax
40a204:	c1 ea 03             	shr    $0x3,%edx
40a207:	89 45 f0             	mov    %eax,-0x10(%ebp)
40a20a:	89 45 ec             	mov    %eax,-0x14(%ebp)
40a20d:	8b 45 0c             	mov    0xc(%ebp),%eax
40a210:	8b c8                	mov    %eax,%ecx
40a212:	89 45 0c             	mov    %eax,0xc(%ebp)
40a215:	f6 c2 01             	test   $0x1,%dl
40a218:	74 09                	je     0x40a223
40a21a:	c6 44 35 fc 30       	movb   $0x30,-0x4(%ebp,%esi,1)
40a21f:	46                   	inc    %esi
40a220:	89 75 f8             	mov    %esi,-0x8(%ebp)
40a223:	8b 75 ec             	mov    -0x14(%ebp),%esi
40a226:	0f ac ce 03          	shrd   $0x3,%ecx,%esi
40a22a:	47                   	inc    %edi
40a22b:	c1 e9 03             	shr    $0x3,%ecx
40a22e:	8b c6                	mov    %esi,%eax
40a230:	0b c1                	or     %ecx,%eax
40a232:	75 f2                	jne    0x40a226
40a234:	8b 75 f8             	mov    -0x8(%ebp),%esi
40a237:	8d 45 fc             	lea    -0x4(%ebp),%eax
40a23a:	8b 4d f4             	mov    -0xc(%ebp),%ecx
40a23d:	56                   	push   %esi
40a23e:	50                   	push   %eax
40a23f:	8d 45 10             	lea    0x10(%ebp),%eax
40a242:	50                   	push   %eax
40a243:	57                   	push   %edi
40a244:	e8 65 e2 ff ff       	call   0x4084ae
40a249:	8b d0                	mov    %eax,%edx
40a24b:	8b 45 f0             	mov    -0x10(%ebp),%eax
40a24e:	8a c8                	mov    %al,%cl
40a250:	80 e1 07             	and    $0x7,%cl
40a253:	80 c1 30             	add    $0x30,%cl
40a256:	88 0a                	mov    %cl,(%edx)
40a258:	4a                   	dec    %edx
40a259:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40a25c:	0f ac c8 03          	shrd   $0x3,%ecx,%eax
40a260:	c1 e9 03             	shr    $0x3,%ecx
40a263:	89 45 f0             	mov    %eax,-0x10(%ebp)
40a266:	0b c1                	or     %ecx,%eax
40a268:	89 4d 0c             	mov    %ecx,0xc(%ebp)
40a26b:	75 de                	jne    0x40a24b
40a26d:	eb 74                	jmp    0x40a2e3
40a26f:	ff 75 0c             	push   0xc(%ebp)
40a272:	ff 75 08             	push   0x8(%ebp)
40a275:	e8 38 59 01 00       	call   0x41fbb2
40a27a:	59                   	pop    %ecx
40a27b:	59                   	pop    %ecx
40a27c:	89 45 f0             	mov    %eax,-0x10(%ebp)
40a27f:	e8 59 db 05 00       	call   0x467ddd
40a284:	8b 50 04             	mov    0x4(%eax),%edx
40a287:	8b ca                	mov    %edx,%ecx
40a289:	8d 41 01             	lea    0x1(%ecx),%eax
40a28c:	89 45 ec             	mov    %eax,-0x14(%ebp)
40a28f:	8a 01                	mov    (%ecx),%al
40a291:	41                   	inc    %ecx
40a292:	84 c0                	test   %al,%al
40a294:	75 f9                	jne    0x40a28f
40a296:	56                   	push   %esi
40a297:	8b 75 f0             	mov    -0x10(%ebp),%esi
40a29a:	8d 45 fc             	lea    -0x4(%ebp),%eax
40a29d:	50                   	push   %eax
40a29e:	8d 45 10             	lea    0x10(%ebp),%eax
40a2a1:	89 55 e0             	mov    %edx,-0x20(%ebp)
40a2a4:	50                   	push   %eax
40a2a5:	6a 03                	push   $0x3
40a2a7:	89 7d e8             	mov    %edi,-0x18(%ebp)
40a2aa:	8d 46 ff             	lea    -0x1(%esi),%eax
40a2ad:	5f                   	pop    %edi
40a2ae:	33 d2                	xor    %edx,%edx
40a2b0:	2b 4d ec             	sub    -0x14(%ebp),%ecx
40a2b3:	f7 f7                	div    %edi
40a2b5:	89 4d e4             	mov    %ecx,-0x1c(%ebp)
40a2b8:	0f af c1             	imul   %ecx,%eax
40a2bb:	8b 4d f4             	mov    -0xc(%ebp),%ecx
40a2be:	03 c6                	add    %esi,%eax
40a2c0:	50                   	push   %eax
40a2c1:	e8 e8 e1 ff ff       	call   0x4084ae
40a2c6:	83 ec 0c             	sub    $0xc,%esp
40a2c9:	8d 75 e0             	lea    -0x20(%ebp),%esi
40a2cc:	8b fc                	mov    %esp,%edi
40a2ce:	40                   	inc    %eax
40a2cf:	6a 00                	push   $0x0
40a2d1:	ff 75 0c             	push   0xc(%ebp)
40a2d4:	a5                   	movsl  %ds:(%esi),%es:(%edi)
40a2d5:	ff 75 08             	push   0x8(%ebp)
40a2d8:	50                   	push   %eax
40a2d9:	a5                   	movsl  %ds:(%esi),%es:(%edi)
40a2da:	a5                   	movsl  %ds:(%esi),%es:(%edi)
40a2db:	e8 74 d8 ff ff       	call   0x407b54
40a2e0:	83 c4 1c             	add    $0x1c,%esp
40a2e3:	5f                   	pop    %edi
40a2e4:	5e                   	pop    %esi
40a2e5:	c9                   	leave
40a2e6:	c2 20 00             	ret    $0x20
40a2e9:	6a 10                	push   $0x10
40a2eb:	8d 4d 10             	lea    0x10(%ebp),%ecx
40a2ee:	e8 b2 6c 01 00       	call   0x420fa5
40a2f3:	84 c0                	test   %al,%al
40a2f5:	ba 90 63 49 00       	mov    $0x496390,%edx
40a2fa:	b9 b8 65 49 00       	mov    $0x4965b8,%ecx
40a2ff:	0f 44 ca             	cmove  %edx,%ecx
40a302:	51                   	push   %ecx
40a303:	8d 4d 10             	lea    0x10(%ebp),%ecx
40a306:	e8 e1 90 01 00       	call   0x4233ec
40a30b:	0f b6 c0             	movzbl %al,%eax
40a30e:	50                   	push   %eax
40a30f:	e8 fa 83 01 00       	call   0x42270e
40a314:	cc                   	int3
40a315:	55                   	push   %ebp
40a316:	8b ec                	mov    %esp,%ebp
40a318:	83 ec 1c             	sub    $0x1c,%esp
40a31b:	0f b6 45 08          	movzbl 0x8(%ebp),%eax
40a31f:	8b 55 18             	mov    0x18(%ebp),%edx
40a322:	56                   	push   %esi
40a323:	57                   	push   %edi
40a324:	33 ff                	xor    %edi,%edi
40a326:	89 4d f8             	mov    %ecx,-0x8(%ebp)
40a329:	89 45 fc             	mov    %eax,-0x4(%ebp)
40a32c:	8b f7                	mov    %edi,%esi
40a32e:	89 7d 08             	mov    %edi,0x8(%ebp)
40a331:	f6 c2 01             	test   $0x1,%dl
40a334:	74 15                	je     0x40a34b
40a336:	8b c2                	mov    %edx,%eax
40a338:	d1 e8                	shr    $1,%eax
40a33a:	24 01                	and    $0x1,%al
40a33c:	f6 d8                	neg    %al
40a33e:	1a c0                	sbb    %al,%al
40a340:	24 0b                	and    $0xb,%al
40a342:	04 20                	add    $0x20,%al
40a344:	46                   	inc    %esi
40a345:	88 45 08             	mov    %al,0x8(%ebp)
40a348:	8b 45 fc             	mov    -0x4(%ebp),%eax
40a34b:	0f be 4d 20          	movsbl 0x20(%ebp),%ecx
40a34f:	83 f9 64             	cmp    $0x64,%ecx
40a352:	0f 8f 94 00 00 00    	jg     0x40a3ec
40a358:	74 62                	je     0x40a3bc
40a35a:	85 c9                	test   %ecx,%ecx
40a35c:	74 5e                	je     0x40a3bc
40a35e:	83 f9 42             	cmp    $0x42,%ecx
40a361:	74 12                	je     0x40a375
40a363:	83 f9 58             	cmp    $0x58,%ecx
40a366:	0f 84 97 00 00 00    	je     0x40a403
40a36c:	83 f9 62             	cmp    $0x62,%ecx
40a36f:	0f 85 9d 01 00 00    	jne    0x40a512
40a375:	c1 ea 03             	shr    $0x3,%edx
40a378:	8b c8                	mov    %eax,%ecx
40a37a:	f6 c2 01             	test   $0x1,%dl
40a37d:	74 0f                	je     0x40a38e
40a37f:	8a 45 20             	mov    0x20(%ebp),%al
40a382:	c6 44 35 08 30       	movb   $0x30,0x8(%ebp,%esi,1)
40a387:	88 44 35 09          	mov    %al,0x9(%ebp,%esi,1)
40a38b:	83 c6 02             	add    $0x2,%esi
40a38e:	47                   	inc    %edi
40a38f:	d1 e9                	shr    $1,%ecx
40a391:	75 fb                	jne    0x40a38e
40a393:	8b 4d f8             	mov    -0x8(%ebp),%ecx
40a396:	8d 45 08             	lea    0x8(%ebp),%eax
40a399:	56                   	push   %esi
40a39a:	50                   	push   %eax
40a39b:	8d 45 0c             	lea    0xc(%ebp),%eax
40a39e:	50                   	push   %eax
40a39f:	57                   	push   %edi
40a3a0:	e8 09 e1 ff ff       	call   0x4084ae
40a3a5:	8b 55 fc             	mov    -0x4(%ebp),%edx
40a3a8:	8a ca                	mov    %dl,%cl
40a3aa:	80 e1 01             	and    $0x1,%cl
40a3ad:	80 c1 30             	add    $0x30,%cl
40a3b0:	88 08                	mov    %cl,(%eax)
40a3b2:	48                   	dec    %eax
40a3b3:	d1 ea                	shr    $1,%edx
40a3b5:	75 f1                	jne    0x40a3a8
40a3b7:	e9 50 01 00 00       	jmp    0x40a50c
40a3bc:	50                   	push   %eax
40a3bd:	e8 c7 57 01 00       	call   0x41fb89
40a3c2:	59                   	pop    %ecx
40a3c3:	56                   	push   %esi
40a3c4:	8d 4d 08             	lea    0x8(%ebp),%ecx
40a3c7:	51                   	push   %ecx
40a3c8:	8d 4d 0c             	lea    0xc(%ebp),%ecx