1OPTION	DOTNAME
2.text$	SEGMENT ALIGN(256) 'CODE'
3
4ALIGN	16
5_x86_64_AES_encrypt	PROC PRIVATE
6	xor	eax,DWORD PTR[r15]
7	xor	ebx,DWORD PTR[4+r15]
8	xor	ecx,DWORD PTR[8+r15]
9	xor	edx,DWORD PTR[12+r15]
10
11	mov	r13d,DWORD PTR[240+r15]
12	sub	r13d,1
13	jmp	$L$enc_loop
14ALIGN	16
15$L$enc_loop::
16
17	movzx	esi,al
18	movzx	edi,bl
19	movzx	ebp,cl
20	mov	r10d,DWORD PTR[rsi*8+r14]
21	mov	r11d,DWORD PTR[rdi*8+r14]
22	mov	r12d,DWORD PTR[rbp*8+r14]
23
24	movzx	esi,bh
25	movzx	edi,ch
26	movzx	ebp,dl
27	xor	r10d,DWORD PTR[3+rsi*8+r14]
28	xor	r11d,DWORD PTR[3+rdi*8+r14]
29	mov	r8d,DWORD PTR[rbp*8+r14]
30
31	movzx	esi,dh
32	shr	ecx,16
33	movzx	ebp,ah
34	xor	r12d,DWORD PTR[3+rsi*8+r14]
35	shr	edx,16
36	xor	r8d,DWORD PTR[3+rbp*8+r14]
37
38	shr	ebx,16
39	lea	r15,QWORD PTR[16+r15]
40	shr	eax,16
41
42	movzx	esi,cl
43	movzx	edi,dl
44	movzx	ebp,al
45	xor	r10d,DWORD PTR[2+rsi*8+r14]
46	xor	r11d,DWORD PTR[2+rdi*8+r14]
47	xor	r12d,DWORD PTR[2+rbp*8+r14]
48
49	movzx	esi,dh
50	movzx	edi,ah
51	movzx	ebp,bl
52	xor	r10d,DWORD PTR[1+rsi*8+r14]
53	xor	r11d,DWORD PTR[1+rdi*8+r14]
54	xor	r8d,DWORD PTR[2+rbp*8+r14]
55
56	mov	edx,DWORD PTR[12+r15]
57	movzx	edi,bh
58	movzx	ebp,ch
59	mov	eax,DWORD PTR[r15]
60	xor	r12d,DWORD PTR[1+rdi*8+r14]
61	xor	r8d,DWORD PTR[1+rbp*8+r14]
62
63	mov	ebx,DWORD PTR[4+r15]
64	mov	ecx,DWORD PTR[8+r15]
65	xor	eax,r10d
66	xor	ebx,r11d
67	xor	ecx,r12d
68	xor	edx,r8d
69	sub	r13d,1
70	jnz	$L$enc_loop
71	movzx	esi,al
72	movzx	edi,bl
73	movzx	ebp,cl
74	movzx	r10d,BYTE PTR[2+rsi*8+r14]
75	movzx	r11d,BYTE PTR[2+rdi*8+r14]
76	movzx	r12d,BYTE PTR[2+rbp*8+r14]
77
78	movzx	esi,dl
79	movzx	edi,bh
80	movzx	ebp,ch
81	movzx	r8d,BYTE PTR[2+rsi*8+r14]
82	mov	edi,DWORD PTR[rdi*8+r14]
83	mov	ebp,DWORD PTR[rbp*8+r14]
84
85	and	edi,00000ff00h
86	and	ebp,00000ff00h
87
88	xor	r10d,edi
89	xor	r11d,ebp
90	shr	ecx,16
91
92	movzx	esi,dh
93	movzx	edi,ah
94	shr	edx,16
95	mov	esi,DWORD PTR[rsi*8+r14]
96	mov	edi,DWORD PTR[rdi*8+r14]
97
98	and	esi,00000ff00h
99	and	edi,00000ff00h
100	shr	ebx,16
101	xor	r12d,esi
102	xor	r8d,edi
103	shr	eax,16
104
105	movzx	esi,cl
106	movzx	edi,dl
107	movzx	ebp,al
108	mov	esi,DWORD PTR[rsi*8+r14]
109	mov	edi,DWORD PTR[rdi*8+r14]
110	mov	ebp,DWORD PTR[rbp*8+r14]
111
112	and	esi,000ff0000h
113	and	edi,000ff0000h
114	and	ebp,000ff0000h
115
116	xor	r10d,esi
117	xor	r11d,edi
118	xor	r12d,ebp
119
120	movzx	esi,bl
121	movzx	edi,dh
122	movzx	ebp,ah
123	mov	esi,DWORD PTR[rsi*8+r14]
124	mov	edi,DWORD PTR[2+rdi*8+r14]
125	mov	ebp,DWORD PTR[2+rbp*8+r14]
126
127	and	esi,000ff0000h
128	and	edi,0ff000000h
129	and	ebp,0ff000000h
130
131	xor	r8d,esi
132	xor	r10d,edi
133	xor	r11d,ebp
134
135	movzx	esi,bh
136	movzx	edi,ch
137	mov	edx,DWORD PTR[((16+12))+r15]
138	mov	esi,DWORD PTR[2+rsi*8+r14]
139	mov	edi,DWORD PTR[2+rdi*8+r14]
140	mov	eax,DWORD PTR[((16+0))+r15]
141
142	and	esi,0ff000000h
143	and	edi,0ff000000h
144
145	xor	r12d,esi
146	xor	r8d,edi
147
148	mov	ebx,DWORD PTR[((16+4))+r15]
149	mov	ecx,DWORD PTR[((16+8))+r15]
150	xor	eax,r10d
151	xor	ebx,r11d
152	xor	ecx,r12d
153	xor	edx,r8d
154DB	0f3h,0c3h
155_x86_64_AES_encrypt	ENDP
156
157ALIGN	16
158_x86_64_AES_encrypt_compact	PROC PRIVATE
159	lea	r8,QWORD PTR[128+r14]
160	mov	edi,DWORD PTR[((0-128))+r8]
161	mov	ebp,DWORD PTR[((32-128))+r8]
162	mov	r10d,DWORD PTR[((64-128))+r8]
163	mov	r11d,DWORD PTR[((96-128))+r8]
164	mov	edi,DWORD PTR[((128-128))+r8]
165	mov	ebp,DWORD PTR[((160-128))+r8]
166	mov	r10d,DWORD PTR[((192-128))+r8]
167	mov	r11d,DWORD PTR[((224-128))+r8]
168	jmp	$L$enc_loop_compact
169ALIGN	16
170$L$enc_loop_compact::
171	xor	eax,DWORD PTR[r15]
172	xor	ebx,DWORD PTR[4+r15]
173	xor	ecx,DWORD PTR[8+r15]
174	xor	edx,DWORD PTR[12+r15]
175	lea	r15,QWORD PTR[16+r15]
176	movzx	r10d,al
177	movzx	r11d,bl
178	movzx	r12d,cl
179	movzx	r8d,dl
180	movzx	esi,bh
181	movzx	edi,ch
182	shr	ecx,16
183	movzx	ebp,dh
184	movzx	r10d,BYTE PTR[r10*1+r14]
185	movzx	r11d,BYTE PTR[r11*1+r14]
186	movzx	r12d,BYTE PTR[r12*1+r14]
187	movzx	r8d,BYTE PTR[r8*1+r14]
188
189	movzx	r9d,BYTE PTR[rsi*1+r14]
190	movzx	esi,ah
191	movzx	r13d,BYTE PTR[rdi*1+r14]
192	movzx	edi,cl
193	movzx	ebp,BYTE PTR[rbp*1+r14]
194	movzx	esi,BYTE PTR[rsi*1+r14]
195
196	shl	r9d,8
197	shr	edx,16
198	shl	r13d,8
199	xor	r10d,r9d
200	shr	eax,16
201	movzx	r9d,dl
202	shr	ebx,16
203	xor	r11d,r13d
204	shl	ebp,8
205	movzx	r13d,al
206	movzx	edi,BYTE PTR[rdi*1+r14]
207	xor	r12d,ebp
208
209	shl	esi,8
210	movzx	ebp,bl
211	shl	edi,16
212	xor	r8d,esi
213	movzx	r9d,BYTE PTR[r9*1+r14]
214	movzx	esi,dh
215	movzx	r13d,BYTE PTR[r13*1+r14]
216	xor	r10d,edi
217
218	shr	ecx,8
219	movzx	edi,ah
220	shl	r9d,16
221	shr	ebx,8
222	shl	r13d,16
223	xor	r11d,r9d
224	movzx	ebp,BYTE PTR[rbp*1+r14]
225	movzx	esi,BYTE PTR[rsi*1+r14]
226	movzx	edi,BYTE PTR[rdi*1+r14]
227	movzx	edx,BYTE PTR[rcx*1+r14]
228	movzx	ecx,BYTE PTR[rbx*1+r14]
229
230	shl	ebp,16
231	xor	r12d,r13d
232	shl	esi,24
233	xor	r8d,ebp
234	shl	edi,24
235	xor	r10d,esi
236	shl	edx,24
237	xor	r11d,edi
238	shl	ecx,24
239	mov	eax,r10d
240	mov	ebx,r11d
241	xor	ecx,r12d
242	xor	edx,r8d
243	cmp	r15,QWORD PTR[16+rsp]
244	je	$L$enc_compact_done
245	mov	r10d,080808080h
246	mov	r11d,080808080h
247	and	r10d,eax
248	and	r11d,ebx
249	mov	esi,r10d
250	mov	edi,r11d
251	shr	r10d,7
252	lea	r8d,DWORD PTR[rax*1+rax]
253	shr	r11d,7
254	lea	r9d,DWORD PTR[rbx*1+rbx]
255	sub	esi,r10d
256	sub	edi,r11d
257	and	r8d,0fefefefeh
258	and	r9d,0fefefefeh
259	and	esi,01b1b1b1bh
260	and	edi,01b1b1b1bh
261	mov	r10d,eax
262	mov	r11d,ebx
263	xor	r8d,esi
264	xor	r9d,edi
265
266	xor	eax,r8d
267	xor	ebx,r9d
268	mov	r12d,080808080h
269	rol	eax,24
270	mov	ebp,080808080h
271	rol	ebx,24
272	and	r12d,ecx
273	and	ebp,edx
274	xor	eax,r8d
275	xor	ebx,r9d
276	mov	esi,r12d
277	ror	r10d,16
278	mov	edi,ebp
279	ror	r11d,16
280	lea	r8d,DWORD PTR[rcx*1+rcx]
281	shr	r12d,7
282	xor	eax,r10d
283	shr	ebp,7
284	xor	ebx,r11d
285	ror	r10d,8
286	lea	r9d,DWORD PTR[rdx*1+rdx]
287	ror	r11d,8
288	sub	esi,r12d
289	sub	edi,ebp
290	xor	eax,r10d
291	xor	ebx,r11d
292
293	and	r8d,0fefefefeh
294	and	r9d,0fefefefeh
295	and	esi,01b1b1b1bh
296	and	edi,01b1b1b1bh
297	mov	r12d,ecx
298	mov	ebp,edx
299	xor	r8d,esi
300	xor	r9d,edi
301
302	ror	r12d,16
303	xor	ecx,r8d
304	ror	ebp,16
305	xor	edx,r9d
306	rol	ecx,24
307	mov	esi,DWORD PTR[r14]
308	rol	edx,24
309	xor	ecx,r8d
310	mov	edi,DWORD PTR[64+r14]
311	xor	edx,r9d
312	mov	r8d,DWORD PTR[128+r14]
313	xor	ecx,r12d
314	ror	r12d,8
315	xor	edx,ebp
316	ror	ebp,8
317	xor	ecx,r12d
318	mov	r9d,DWORD PTR[192+r14]
319	xor	edx,ebp
320	jmp	$L$enc_loop_compact
321ALIGN	16
322$L$enc_compact_done::
323	xor	eax,DWORD PTR[r15]
324	xor	ebx,DWORD PTR[4+r15]
325	xor	ecx,DWORD PTR[8+r15]
326	xor	edx,DWORD PTR[12+r15]
327DB	0f3h,0c3h
328_x86_64_AES_encrypt_compact	ENDP
329ALIGN	16
330PUBLIC	asm_AES_encrypt
331
332
333asm_AES_encrypt	PROC PUBLIC
334	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
335	mov	QWORD PTR[16+rsp],rsi
336	mov	rax,rsp
337$L$SEH_begin_asm_AES_encrypt::
338	mov	rdi,rcx
339	mov	rsi,rdx
340	mov	rdx,r8
341
342
343	push	rbx
344	push	rbp
345	push	r12
346	push	r13
347	push	r14
348	push	r15
349
350
351	mov	r10,rsp
352	lea	rcx,QWORD PTR[((-63))+rdx]
353	and	rsp,-64
354	sub	rcx,rsp
355	neg	rcx
356	and	rcx,03c0h
357	sub	rsp,rcx
358	sub	rsp,32
359
360	mov	QWORD PTR[16+rsp],rsi
361	mov	QWORD PTR[24+rsp],r10
362$L$enc_prologue::
363
364	mov	r15,rdx
365	mov	r13d,DWORD PTR[240+r15]
366
367	mov	eax,DWORD PTR[rdi]
368	mov	ebx,DWORD PTR[4+rdi]
369	mov	ecx,DWORD PTR[8+rdi]
370	mov	edx,DWORD PTR[12+rdi]
371
372	shl	r13d,4
373	lea	rbp,QWORD PTR[r13*1+r15]
374	mov	QWORD PTR[rsp],r15
375	mov	QWORD PTR[8+rsp],rbp
376
377
378	lea	r14,QWORD PTR[(($L$AES_Te+2048))]
379	lea	rbp,QWORD PTR[768+rsp]
380	sub	rbp,r14
381	and	rbp,0300h
382	lea	r14,QWORD PTR[rbp*1+r14]
383
384	call	_x86_64_AES_encrypt_compact
385
386	mov	r9,QWORD PTR[16+rsp]
387	mov	rsi,QWORD PTR[24+rsp]
388	mov	DWORD PTR[r9],eax
389	mov	DWORD PTR[4+r9],ebx
390	mov	DWORD PTR[8+r9],ecx
391	mov	DWORD PTR[12+r9],edx
392
393	mov	r15,QWORD PTR[rsi]
394	mov	r14,QWORD PTR[8+rsi]
395	mov	r13,QWORD PTR[16+rsi]
396	mov	r12,QWORD PTR[24+rsi]
397	mov	rbp,QWORD PTR[32+rsi]
398	mov	rbx,QWORD PTR[40+rsi]
399	lea	rsp,QWORD PTR[48+rsi]
400$L$enc_epilogue::
401	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
402	mov	rsi,QWORD PTR[16+rsp]
403	DB	0F3h,0C3h		;repret
404$L$SEH_end_asm_AES_encrypt::
405asm_AES_encrypt	ENDP
406
407ALIGN	16
408_x86_64_AES_decrypt	PROC PRIVATE
409	xor	eax,DWORD PTR[r15]
410	xor	ebx,DWORD PTR[4+r15]
411	xor	ecx,DWORD PTR[8+r15]
412	xor	edx,DWORD PTR[12+r15]
413
414	mov	r13d,DWORD PTR[240+r15]
415	sub	r13d,1
416	jmp	$L$dec_loop
417ALIGN	16
418$L$dec_loop::
419
420	movzx	esi,al
421	movzx	edi,bl
422	movzx	ebp,cl
423	mov	r10d,DWORD PTR[rsi*8+r14]
424	mov	r11d,DWORD PTR[rdi*8+r14]
425	mov	r12d,DWORD PTR[rbp*8+r14]
426
427	movzx	esi,dh
428	movzx	edi,ah
429	movzx	ebp,dl
430	xor	r10d,DWORD PTR[3+rsi*8+r14]
431	xor	r11d,DWORD PTR[3+rdi*8+r14]
432	mov	r8d,DWORD PTR[rbp*8+r14]
433
434	movzx	esi,bh
435	shr	eax,16
436	movzx	ebp,ch
437	xor	r12d,DWORD PTR[3+rsi*8+r14]
438	shr	edx,16
439	xor	r8d,DWORD PTR[3+rbp*8+r14]
440
441	shr	ebx,16
442	lea	r15,QWORD PTR[16+r15]
443	shr	ecx,16
444
445	movzx	esi,cl
446	movzx	edi,dl
447	movzx	ebp,al
448	xor	r10d,DWORD PTR[2+rsi*8+r14]
449	xor	r11d,DWORD PTR[2+rdi*8+r14]
450	xor	r12d,DWORD PTR[2+rbp*8+r14]
451
452	movzx	esi,bh
453	movzx	edi,ch
454	movzx	ebp,bl
455	xor	r10d,DWORD PTR[1+rsi*8+r14]
456	xor	r11d,DWORD PTR[1+rdi*8+r14]
457	xor	r8d,DWORD PTR[2+rbp*8+r14]
458
459	movzx	esi,dh
460	mov	edx,DWORD PTR[12+r15]
461	movzx	ebp,ah
462	xor	r12d,DWORD PTR[1+rsi*8+r14]
463	mov	eax,DWORD PTR[r15]
464	xor	r8d,DWORD PTR[1+rbp*8+r14]
465
466	xor	eax,r10d
467	mov	ebx,DWORD PTR[4+r15]
468	mov	ecx,DWORD PTR[8+r15]
469	xor	ecx,r12d
470	xor	ebx,r11d
471	xor	edx,r8d
472	sub	r13d,1
473	jnz	$L$dec_loop
474	lea	r14,QWORD PTR[2048+r14]
475	movzx	esi,al
476	movzx	edi,bl
477	movzx	ebp,cl
478	movzx	r10d,BYTE PTR[rsi*1+r14]
479	movzx	r11d,BYTE PTR[rdi*1+r14]
480	movzx	r12d,BYTE PTR[rbp*1+r14]
481
482	movzx	esi,dl
483	movzx	edi,dh
484	movzx	ebp,ah
485	movzx	r8d,BYTE PTR[rsi*1+r14]
486	movzx	edi,BYTE PTR[rdi*1+r14]
487	movzx	ebp,BYTE PTR[rbp*1+r14]
488
489	shl	edi,8
490	shl	ebp,8
491
492	xor	r10d,edi
493	xor	r11d,ebp
494	shr	edx,16
495
496	movzx	esi,bh
497	movzx	edi,ch
498	shr	eax,16
499	movzx	esi,BYTE PTR[rsi*1+r14]
500	movzx	edi,BYTE PTR[rdi*1+r14]
501
502	shl	esi,8
503	shl	edi,8
504	shr	ebx,16
505	xor	r12d,esi
506	xor	r8d,edi
507	shr	ecx,16
508
509	movzx	esi,cl
510	movzx	edi,dl
511	movzx	ebp,al
512	movzx	esi,BYTE PTR[rsi*1+r14]
513	movzx	edi,BYTE PTR[rdi*1+r14]
514	movzx	ebp,BYTE PTR[rbp*1+r14]
515
516	shl	esi,16
517	shl	edi,16
518	shl	ebp,16
519
520	xor	r10d,esi
521	xor	r11d,edi
522	xor	r12d,ebp
523
524	movzx	esi,bl
525	movzx	edi,bh
526	movzx	ebp,ch
527	movzx	esi,BYTE PTR[rsi*1+r14]
528	movzx	edi,BYTE PTR[rdi*1+r14]
529	movzx	ebp,BYTE PTR[rbp*1+r14]
530
531	shl	esi,16
532	shl	edi,24
533	shl	ebp,24
534
535	xor	r8d,esi
536	xor	r10d,edi
537	xor	r11d,ebp
538
539	movzx	esi,dh
540	movzx	edi,ah
541	mov	edx,DWORD PTR[((16+12))+r15]
542	movzx	esi,BYTE PTR[rsi*1+r14]
543	movzx	edi,BYTE PTR[rdi*1+r14]
544	mov	eax,DWORD PTR[((16+0))+r15]
545
546	shl	esi,24
547	shl	edi,24
548
549	xor	r12d,esi
550	xor	r8d,edi
551
552	mov	ebx,DWORD PTR[((16+4))+r15]
553	mov	ecx,DWORD PTR[((16+8))+r15]
554	lea	r14,QWORD PTR[((-2048))+r14]
555	xor	eax,r10d
556	xor	ebx,r11d
557	xor	ecx,r12d
558	xor	edx,r8d
559DB	0f3h,0c3h
560_x86_64_AES_decrypt	ENDP
561
562ALIGN	16
563_x86_64_AES_decrypt_compact	PROC PRIVATE
564	lea	r8,QWORD PTR[128+r14]
565	mov	edi,DWORD PTR[((0-128))+r8]
566	mov	ebp,DWORD PTR[((32-128))+r8]
567	mov	r10d,DWORD PTR[((64-128))+r8]
568	mov	r11d,DWORD PTR[((96-128))+r8]
569	mov	edi,DWORD PTR[((128-128))+r8]
570	mov	ebp,DWORD PTR[((160-128))+r8]
571	mov	r10d,DWORD PTR[((192-128))+r8]
572	mov	r11d,DWORD PTR[((224-128))+r8]
573	jmp	$L$dec_loop_compact
574
575ALIGN	16
576$L$dec_loop_compact::
577	xor	eax,DWORD PTR[r15]
578	xor	ebx,DWORD PTR[4+r15]
579	xor	ecx,DWORD PTR[8+r15]
580	xor	edx,DWORD PTR[12+r15]
581	lea	r15,QWORD PTR[16+r15]
582	movzx	r10d,al
583	movzx	r11d,bl
584	movzx	r12d,cl
585	movzx	r8d,dl
586	movzx	esi,dh
587	movzx	edi,ah
588	shr	edx,16
589	movzx	ebp,bh
590	movzx	r10d,BYTE PTR[r10*1+r14]
591	movzx	r11d,BYTE PTR[r11*1+r14]
592	movzx	r12d,BYTE PTR[r12*1+r14]
593	movzx	r8d,BYTE PTR[r8*1+r14]
594
595	movzx	r9d,BYTE PTR[rsi*1+r14]
596	movzx	esi,ch
597	movzx	r13d,BYTE PTR[rdi*1+r14]
598	movzx	ebp,BYTE PTR[rbp*1+r14]
599	movzx	esi,BYTE PTR[rsi*1+r14]
600
601	shr	ecx,16
602	shl	r13d,8
603	shl	r9d,8
604	movzx	edi,cl
605	shr	eax,16
606	xor	r10d,r9d
607	shr	ebx,16
608	movzx	r9d,dl
609
610	shl	ebp,8
611	xor	r11d,r13d
612	shl	esi,8
613	movzx	r13d,al
614	movzx	edi,BYTE PTR[rdi*1+r14]
615	xor	r12d,ebp
616	movzx	ebp,bl
617
618	shl	edi,16
619	xor	r8d,esi
620	movzx	r9d,BYTE PTR[r9*1+r14]
621	movzx	esi,bh
622	movzx	ebp,BYTE PTR[rbp*1+r14]
623	xor	r10d,edi
624	movzx	r13d,BYTE PTR[r13*1+r14]
625	movzx	edi,ch
626
627	shl	ebp,16
628	shl	r9d,16
629	shl	r13d,16
630	xor	r8d,ebp
631	movzx	ebp,dh
632	xor	r11d,r9d
633	shr	eax,8
634	xor	r12d,r13d
635
636	movzx	esi,BYTE PTR[rsi*1+r14]
637	movzx	ebx,BYTE PTR[rdi*1+r14]
638	movzx	ecx,BYTE PTR[rbp*1+r14]
639	movzx	edx,BYTE PTR[rax*1+r14]
640
641	mov	eax,r10d
642	shl	esi,24
643	shl	ebx,24
644	shl	ecx,24
645	xor	eax,esi
646	shl	edx,24
647	xor	ebx,r11d
648	xor	ecx,r12d
649	xor	edx,r8d
650	cmp	r15,QWORD PTR[16+rsp]
651	je	$L$dec_compact_done
652
653	mov	rsi,QWORD PTR[((256+0))+r14]
654	shl	rbx,32
655	shl	rdx,32
656	mov	rdi,QWORD PTR[((256+8))+r14]
657	or	rax,rbx
658	or	rcx,rdx
659	mov	rbp,QWORD PTR[((256+16))+r14]
660	mov	r9,rsi
661	mov	r12,rsi
662	and	r9,rax
663	and	r12,rcx
664	mov	rbx,r9
665	mov	rdx,r12
666	shr	r9,7
667	lea	r8,QWORD PTR[rax*1+rax]
668	shr	r12,7
669	lea	r11,QWORD PTR[rcx*1+rcx]
670	sub	rbx,r9
671	sub	rdx,r12
672	and	r8,rdi
673	and	r11,rdi
674	and	rbx,rbp
675	and	rdx,rbp
676	xor	r8,rbx
677	xor	r11,rdx
678	mov	r10,rsi
679	mov	r13,rsi
680
681	and	r10,r8
682	and	r13,r11
683	mov	rbx,r10
684	mov	rdx,r13
685	shr	r10,7
686	lea	r9,QWORD PTR[r8*1+r8]
687	shr	r13,7
688	lea	r12,QWORD PTR[r11*1+r11]
689	sub	rbx,r10
690	sub	rdx,r13
691	and	r9,rdi
692	and	r12,rdi
693	and	rbx,rbp
694	and	rdx,rbp
695	xor	r9,rbx
696	xor	r12,rdx
697	mov	r10,rsi
698	mov	r13,rsi
699
700	and	r10,r9
701	and	r13,r12
702	mov	rbx,r10
703	mov	rdx,r13
704	shr	r10,7
705	xor	r8,rax
706	shr	r13,7
707	xor	r11,rcx
708	sub	rbx,r10
709	sub	rdx,r13
710	lea	r10,QWORD PTR[r9*1+r9]
711	lea	r13,QWORD PTR[r12*1+r12]
712	xor	r9,rax
713	xor	r12,rcx
714	and	r10,rdi
715	and	r13,rdi
716	and	rbx,rbp
717	and	rdx,rbp
718	xor	r10,rbx
719	xor	r13,rdx
720
721	xor	rax,r10
722	xor	rcx,r13
723	xor	r8,r10
724	xor	r11,r13
725	mov	rbx,rax
726	mov	rdx,rcx
727	xor	r9,r10
728	shr	rbx,32
729	xor	r12,r13
730	shr	rdx,32
731	xor	r10,r8
732	rol	eax,8
733	xor	r13,r11
734	rol	ecx,8
735	xor	r10,r9
736	rol	ebx,8
737	xor	r13,r12
738
739	rol	edx,8
740	xor	eax,r10d
741	shr	r10,32
742	xor	ecx,r13d
743	shr	r13,32
744	xor	ebx,r10d
745	xor	edx,r13d
746
747	mov	r10,r8
748	rol	r8d,24
749	mov	r13,r11
750	rol	r11d,24
751	shr	r10,32
752	xor	eax,r8d
753	shr	r13,32
754	xor	ecx,r11d
755	rol	r10d,24
756	mov	r8,r9
757	rol	r13d,24
758	mov	r11,r12
759	shr	r8,32
760	xor	ebx,r10d
761	shr	r11,32
762	xor	edx,r13d
763
764	mov	rsi,QWORD PTR[r14]
765	rol	r9d,16
766	mov	rdi,QWORD PTR[64+r14]
767	rol	r12d,16
768	mov	rbp,QWORD PTR[128+r14]
769	rol	r8d,16
770	mov	r10,QWORD PTR[192+r14]
771	xor	eax,r9d
772	rol	r11d,16
773	xor	ecx,r12d
774	mov	r13,QWORD PTR[256+r14]
775	xor	ebx,r8d
776	xor	edx,r11d
777	jmp	$L$dec_loop_compact
778ALIGN	16
779$L$dec_compact_done::
780	xor	eax,DWORD PTR[r15]
781	xor	ebx,DWORD PTR[4+r15]
782	xor	ecx,DWORD PTR[8+r15]
783	xor	edx,DWORD PTR[12+r15]
784DB	0f3h,0c3h
785_x86_64_AES_decrypt_compact	ENDP
786ALIGN	16
787PUBLIC	asm_AES_decrypt
788
789
790asm_AES_decrypt	PROC PUBLIC
791	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
792	mov	QWORD PTR[16+rsp],rsi
793	mov	rax,rsp
794$L$SEH_begin_asm_AES_decrypt::
795	mov	rdi,rcx
796	mov	rsi,rdx
797	mov	rdx,r8
798
799
800	push	rbx
801	push	rbp
802	push	r12
803	push	r13
804	push	r14
805	push	r15
806
807
808	mov	r10,rsp
809	lea	rcx,QWORD PTR[((-63))+rdx]
810	and	rsp,-64
811	sub	rcx,rsp
812	neg	rcx
813	and	rcx,03c0h
814	sub	rsp,rcx
815	sub	rsp,32
816
817	mov	QWORD PTR[16+rsp],rsi
818	mov	QWORD PTR[24+rsp],r10
819$L$dec_prologue::
820
821	mov	r15,rdx
822	mov	r13d,DWORD PTR[240+r15]
823
824	mov	eax,DWORD PTR[rdi]
825	mov	ebx,DWORD PTR[4+rdi]
826	mov	ecx,DWORD PTR[8+rdi]
827	mov	edx,DWORD PTR[12+rdi]
828
829	shl	r13d,4
830	lea	rbp,QWORD PTR[r13*1+r15]
831	mov	QWORD PTR[rsp],r15
832	mov	QWORD PTR[8+rsp],rbp
833
834
835	lea	r14,QWORD PTR[(($L$AES_Td+2048))]
836	lea	rbp,QWORD PTR[768+rsp]
837	sub	rbp,r14
838	and	rbp,0300h
839	lea	r14,QWORD PTR[rbp*1+r14]
840	shr	rbp,3
841	add	r14,rbp
842
843	call	_x86_64_AES_decrypt_compact
844
845	mov	r9,QWORD PTR[16+rsp]
846	mov	rsi,QWORD PTR[24+rsp]
847	mov	DWORD PTR[r9],eax
848	mov	DWORD PTR[4+r9],ebx
849	mov	DWORD PTR[8+r9],ecx
850	mov	DWORD PTR[12+r9],edx
851
852	mov	r15,QWORD PTR[rsi]
853	mov	r14,QWORD PTR[8+rsi]
854	mov	r13,QWORD PTR[16+rsi]
855	mov	r12,QWORD PTR[24+rsi]
856	mov	rbp,QWORD PTR[32+rsi]
857	mov	rbx,QWORD PTR[40+rsi]
858	lea	rsp,QWORD PTR[48+rsi]
859$L$dec_epilogue::
860	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
861	mov	rsi,QWORD PTR[16+rsp]
862	DB	0F3h,0C3h		;repret
863$L$SEH_end_asm_AES_decrypt::
864asm_AES_decrypt	ENDP
865ALIGN	16
866PUBLIC	asm_AES_set_encrypt_key
867
868asm_AES_set_encrypt_key	PROC PUBLIC
869	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
870	mov	QWORD PTR[16+rsp],rsi
871	mov	rax,rsp
872$L$SEH_begin_asm_AES_set_encrypt_key::
873	mov	rdi,rcx
874	mov	rsi,rdx
875	mov	rdx,r8
876
877
878	push	rbx
879	push	rbp
880	push	r12
881	push	r13
882	push	r14
883	push	r15
884	sub	rsp,8
885$L$enc_key_prologue::
886
887	call	_x86_64_AES_set_encrypt_key
888
889	mov	rbp,QWORD PTR[40+rsp]
890	mov	rbx,QWORD PTR[48+rsp]
891	add	rsp,56
892$L$enc_key_epilogue::
893	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
894	mov	rsi,QWORD PTR[16+rsp]
895	DB	0F3h,0C3h		;repret
896$L$SEH_end_asm_AES_set_encrypt_key::
897asm_AES_set_encrypt_key	ENDP
898
899
900ALIGN	16
901_x86_64_AES_set_encrypt_key	PROC PRIVATE
902	mov	ecx,esi
903	mov	rsi,rdi
904	mov	rdi,rdx
905
906	test	rsi,-1
907	jz	$L$badpointer
908	test	rdi,-1
909	jz	$L$badpointer
910
911	lea	rbp,QWORD PTR[$L$AES_Te]
912	lea	rbp,QWORD PTR[((2048+128))+rbp]
913
914
915	mov	eax,DWORD PTR[((0-128))+rbp]
916	mov	ebx,DWORD PTR[((32-128))+rbp]
917	mov	r8d,DWORD PTR[((64-128))+rbp]
918	mov	edx,DWORD PTR[((96-128))+rbp]
919	mov	eax,DWORD PTR[((128-128))+rbp]
920	mov	ebx,DWORD PTR[((160-128))+rbp]
921	mov	r8d,DWORD PTR[((192-128))+rbp]
922	mov	edx,DWORD PTR[((224-128))+rbp]
923
924	cmp	ecx,128
925	je	$L$10rounds
926	cmp	ecx,192
927	je	$L$12rounds
928	cmp	ecx,256
929	je	$L$14rounds
930	mov	rax,-2
931	jmp	$L$exit
932
933$L$10rounds::
934	mov	rax,QWORD PTR[rsi]
935	mov	rdx,QWORD PTR[8+rsi]
936	mov	QWORD PTR[rdi],rax
937	mov	QWORD PTR[8+rdi],rdx
938
939	shr	rdx,32
940	xor	ecx,ecx
941	jmp	$L$10shortcut
942ALIGN	4
943$L$10loop::
944	mov	eax,DWORD PTR[rdi]
945	mov	edx,DWORD PTR[12+rdi]
946$L$10shortcut::
947	movzx	esi,dl
948	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
949	movzx	esi,dh
950	shl	ebx,24
951	xor	eax,ebx
952
953	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
954	shr	edx,16
955	movzx	esi,dl
956	xor	eax,ebx
957
958	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
959	movzx	esi,dh
960	shl	ebx,8
961	xor	eax,ebx
962
963	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
964	shl	ebx,16
965	xor	eax,ebx
966
967	xor	eax,DWORD PTR[((1024-128))+rcx*4+rbp]
968	mov	DWORD PTR[16+rdi],eax
969	xor	eax,DWORD PTR[4+rdi]
970	mov	DWORD PTR[20+rdi],eax
971	xor	eax,DWORD PTR[8+rdi]
972	mov	DWORD PTR[24+rdi],eax
973	xor	eax,DWORD PTR[12+rdi]
974	mov	DWORD PTR[28+rdi],eax
975	add	ecx,1
976	lea	rdi,QWORD PTR[16+rdi]
977	cmp	ecx,10
978	jl	$L$10loop
979
980	mov	DWORD PTR[80+rdi],10
981	xor	rax,rax
982	jmp	$L$exit
983
984$L$12rounds::
985	mov	rax,QWORD PTR[rsi]
986	mov	rbx,QWORD PTR[8+rsi]
987	mov	rdx,QWORD PTR[16+rsi]
988	mov	QWORD PTR[rdi],rax
989	mov	QWORD PTR[8+rdi],rbx
990	mov	QWORD PTR[16+rdi],rdx
991
992	shr	rdx,32
993	xor	ecx,ecx
994	jmp	$L$12shortcut
995ALIGN	4
996$L$12loop::
997	mov	eax,DWORD PTR[rdi]
998	mov	edx,DWORD PTR[20+rdi]
999$L$12shortcut::
1000	movzx	esi,dl
1001	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1002	movzx	esi,dh
1003	shl	ebx,24
1004	xor	eax,ebx
1005
1006	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1007	shr	edx,16
1008	movzx	esi,dl
1009	xor	eax,ebx
1010
1011	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1012	movzx	esi,dh
1013	shl	ebx,8
1014	xor	eax,ebx
1015
1016	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1017	shl	ebx,16
1018	xor	eax,ebx
1019
1020	xor	eax,DWORD PTR[((1024-128))+rcx*4+rbp]
1021	mov	DWORD PTR[24+rdi],eax
1022	xor	eax,DWORD PTR[4+rdi]
1023	mov	DWORD PTR[28+rdi],eax
1024	xor	eax,DWORD PTR[8+rdi]
1025	mov	DWORD PTR[32+rdi],eax
1026	xor	eax,DWORD PTR[12+rdi]
1027	mov	DWORD PTR[36+rdi],eax
1028
1029	cmp	ecx,7
1030	je	$L$12break
1031	add	ecx,1
1032
1033	xor	eax,DWORD PTR[16+rdi]
1034	mov	DWORD PTR[40+rdi],eax
1035	xor	eax,DWORD PTR[20+rdi]
1036	mov	DWORD PTR[44+rdi],eax
1037
1038	lea	rdi,QWORD PTR[24+rdi]
1039	jmp	$L$12loop
1040$L$12break::
1041	mov	DWORD PTR[72+rdi],12
1042	xor	rax,rax
1043	jmp	$L$exit
1044
1045$L$14rounds::
1046	mov	rax,QWORD PTR[rsi]
1047	mov	rbx,QWORD PTR[8+rsi]
1048	mov	rcx,QWORD PTR[16+rsi]
1049	mov	rdx,QWORD PTR[24+rsi]
1050	mov	QWORD PTR[rdi],rax
1051	mov	QWORD PTR[8+rdi],rbx
1052	mov	QWORD PTR[16+rdi],rcx
1053	mov	QWORD PTR[24+rdi],rdx
1054
1055	shr	rdx,32
1056	xor	ecx,ecx
1057	jmp	$L$14shortcut
1058ALIGN	4
1059$L$14loop::
1060	mov	eax,DWORD PTR[rdi]
1061	mov	edx,DWORD PTR[28+rdi]
1062$L$14shortcut::
1063	movzx	esi,dl
1064	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1065	movzx	esi,dh
1066	shl	ebx,24
1067	xor	eax,ebx
1068
1069	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1070	shr	edx,16
1071	movzx	esi,dl
1072	xor	eax,ebx
1073
1074	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1075	movzx	esi,dh
1076	shl	ebx,8
1077	xor	eax,ebx
1078
1079	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1080	shl	ebx,16
1081	xor	eax,ebx
1082
1083	xor	eax,DWORD PTR[((1024-128))+rcx*4+rbp]
1084	mov	DWORD PTR[32+rdi],eax
1085	xor	eax,DWORD PTR[4+rdi]
1086	mov	DWORD PTR[36+rdi],eax
1087	xor	eax,DWORD PTR[8+rdi]
1088	mov	DWORD PTR[40+rdi],eax
1089	xor	eax,DWORD PTR[12+rdi]
1090	mov	DWORD PTR[44+rdi],eax
1091
1092	cmp	ecx,6
1093	je	$L$14break
1094	add	ecx,1
1095
1096	mov	edx,eax
1097	mov	eax,DWORD PTR[16+rdi]
1098	movzx	esi,dl
1099	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1100	movzx	esi,dh
1101	xor	eax,ebx
1102
1103	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1104	shr	edx,16
1105	shl	ebx,8
1106	movzx	esi,dl
1107	xor	eax,ebx
1108
1109	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1110	movzx	esi,dh
1111	shl	ebx,16
1112	xor	eax,ebx
1113
1114	movzx	ebx,BYTE PTR[((-128))+rsi*1+rbp]
1115	shl	ebx,24
1116	xor	eax,ebx
1117
1118	mov	DWORD PTR[48+rdi],eax
1119	xor	eax,DWORD PTR[20+rdi]
1120	mov	DWORD PTR[52+rdi],eax
1121	xor	eax,DWORD PTR[24+rdi]
1122	mov	DWORD PTR[56+rdi],eax
1123	xor	eax,DWORD PTR[28+rdi]
1124	mov	DWORD PTR[60+rdi],eax
1125
1126	lea	rdi,QWORD PTR[32+rdi]
1127	jmp	$L$14loop
1128$L$14break::
1129	mov	DWORD PTR[48+rdi],14
1130	xor	rax,rax
1131	jmp	$L$exit
1132
1133$L$badpointer::
1134	mov	rax,-1
1135$L$exit::
1136DB	0f3h,0c3h
1137_x86_64_AES_set_encrypt_key	ENDP
1138ALIGN	16
1139PUBLIC	asm_AES_set_decrypt_key
1140
1141asm_AES_set_decrypt_key	PROC PUBLIC
1142	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
1143	mov	QWORD PTR[16+rsp],rsi
1144	mov	rax,rsp
1145$L$SEH_begin_asm_AES_set_decrypt_key::
1146	mov	rdi,rcx
1147	mov	rsi,rdx
1148	mov	rdx,r8
1149
1150
1151	push	rbx
1152	push	rbp
1153	push	r12
1154	push	r13
1155	push	r14
1156	push	r15
1157	push	rdx
1158$L$dec_key_prologue::
1159
1160	call	_x86_64_AES_set_encrypt_key
1161	mov	r8,QWORD PTR[rsp]
1162	cmp	eax,0
1163	jne	$L$abort
1164
1165	mov	r14d,DWORD PTR[240+r8]
1166	xor	rdi,rdi
1167	lea	rcx,QWORD PTR[r14*4+rdi]
1168	mov	rsi,r8
1169	lea	rdi,QWORD PTR[rcx*4+r8]
1170ALIGN	4
1171$L$invert::
1172	mov	rax,QWORD PTR[rsi]
1173	mov	rbx,QWORD PTR[8+rsi]
1174	mov	rcx,QWORD PTR[rdi]
1175	mov	rdx,QWORD PTR[8+rdi]
1176	mov	QWORD PTR[rdi],rax
1177	mov	QWORD PTR[8+rdi],rbx
1178	mov	QWORD PTR[rsi],rcx
1179	mov	QWORD PTR[8+rsi],rdx
1180	lea	rsi,QWORD PTR[16+rsi]
1181	lea	rdi,QWORD PTR[((-16))+rdi]
1182	cmp	rdi,rsi
1183	jne	$L$invert
1184
1185	lea	rax,QWORD PTR[(($L$AES_Te+2048+1024))]
1186
1187	mov	rsi,QWORD PTR[40+rax]
1188	mov	rdi,QWORD PTR[48+rax]
1189	mov	rbp,QWORD PTR[56+rax]
1190
1191	mov	r15,r8
1192	sub	r14d,1
1193ALIGN	4
1194$L$permute::
1195	lea	r15,QWORD PTR[16+r15]
1196	mov	rax,QWORD PTR[r15]
1197	mov	rcx,QWORD PTR[8+r15]
1198	mov	r9,rsi
1199	mov	r12,rsi
1200	and	r9,rax
1201	and	r12,rcx
1202	mov	rbx,r9
1203	mov	rdx,r12
1204	shr	r9,7
1205	lea	r8,QWORD PTR[rax*1+rax]
1206	shr	r12,7
1207	lea	r11,QWORD PTR[rcx*1+rcx]
1208	sub	rbx,r9
1209	sub	rdx,r12
1210	and	r8,rdi
1211	and	r11,rdi
1212	and	rbx,rbp
1213	and	rdx,rbp
1214	xor	r8,rbx
1215	xor	r11,rdx
1216	mov	r10,rsi
1217	mov	r13,rsi
1218
1219	and	r10,r8
1220	and	r13,r11
1221	mov	rbx,r10
1222	mov	rdx,r13
1223	shr	r10,7
1224	lea	r9,QWORD PTR[r8*1+r8]
1225	shr	r13,7
1226	lea	r12,QWORD PTR[r11*1+r11]
1227	sub	rbx,r10
1228	sub	rdx,r13
1229	and	r9,rdi
1230	and	r12,rdi
1231	and	rbx,rbp
1232	and	rdx,rbp
1233	xor	r9,rbx
1234	xor	r12,rdx
1235	mov	r10,rsi
1236	mov	r13,rsi
1237
1238	and	r10,r9
1239	and	r13,r12
1240	mov	rbx,r10
1241	mov	rdx,r13
1242	shr	r10,7
1243	xor	r8,rax
1244	shr	r13,7
1245	xor	r11,rcx
1246	sub	rbx,r10
1247	sub	rdx,r13
1248	lea	r10,QWORD PTR[r9*1+r9]
1249	lea	r13,QWORD PTR[r12*1+r12]
1250	xor	r9,rax
1251	xor	r12,rcx
1252	and	r10,rdi
1253	and	r13,rdi
1254	and	rbx,rbp
1255	and	rdx,rbp
1256	xor	r10,rbx
1257	xor	r13,rdx
1258
1259	xor	rax,r10
1260	xor	rcx,r13
1261	xor	r8,r10
1262	xor	r11,r13
1263	mov	rbx,rax
1264	mov	rdx,rcx
1265	xor	r9,r10
1266	shr	rbx,32
1267	xor	r12,r13
1268	shr	rdx,32
1269	xor	r10,r8
1270	rol	eax,8
1271	xor	r13,r11
1272	rol	ecx,8
1273	xor	r10,r9
1274	rol	ebx,8
1275	xor	r13,r12
1276
1277	rol	edx,8
1278	xor	eax,r10d
1279	shr	r10,32
1280	xor	ecx,r13d
1281	shr	r13,32
1282	xor	ebx,r10d
1283	xor	edx,r13d
1284
1285	mov	r10,r8
1286	rol	r8d,24
1287	mov	r13,r11
1288	rol	r11d,24
1289	shr	r10,32
1290	xor	eax,r8d
1291	shr	r13,32
1292	xor	ecx,r11d
1293	rol	r10d,24
1294	mov	r8,r9
1295	rol	r13d,24
1296	mov	r11,r12
1297	shr	r8,32
1298	xor	ebx,r10d
1299	shr	r11,32
1300	xor	edx,r13d
1301
1302
1303	rol	r9d,16
1304
1305	rol	r12d,16
1306
1307	rol	r8d,16
1308
1309	xor	eax,r9d
1310	rol	r11d,16
1311	xor	ecx,r12d
1312
1313	xor	ebx,r8d
1314	xor	edx,r11d
1315	mov	DWORD PTR[r15],eax
1316	mov	DWORD PTR[4+r15],ebx
1317	mov	DWORD PTR[8+r15],ecx
1318	mov	DWORD PTR[12+r15],edx
1319	sub	r14d,1
1320	jnz	$L$permute
1321
1322	xor	rax,rax
1323$L$abort::
1324	mov	r15,QWORD PTR[8+rsp]
1325	mov	r14,QWORD PTR[16+rsp]
1326	mov	r13,QWORD PTR[24+rsp]
1327	mov	r12,QWORD PTR[32+rsp]
1328	mov	rbp,QWORD PTR[40+rsp]
1329	mov	rbx,QWORD PTR[48+rsp]
1330	add	rsp,56
1331$L$dec_key_epilogue::
1332	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
1333	mov	rsi,QWORD PTR[16+rsp]
1334	DB	0F3h,0C3h		;repret
1335$L$SEH_end_asm_AES_set_decrypt_key::
1336asm_AES_set_decrypt_key	ENDP
1337ALIGN	16
1338PUBLIC	asm_AES_cbc_encrypt
1339
1340EXTERN	OPENSSL_ia32cap_P:NEAR
1341
1342asm_AES_cbc_encrypt	PROC PUBLIC
1343	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
1344	mov	QWORD PTR[16+rsp],rsi
1345	mov	rax,rsp
1346$L$SEH_begin_asm_AES_cbc_encrypt::
1347	mov	rdi,rcx
1348	mov	rsi,rdx
1349	mov	rdx,r8
1350	mov	rcx,r9
1351	mov	r8,QWORD PTR[40+rsp]
1352	mov	r9,QWORD PTR[48+rsp]
1353
1354
1355	cmp	rdx,0
1356	je	$L$cbc_epilogue
1357	pushfq
1358	push	rbx
1359	push	rbp
1360	push	r12
1361	push	r13
1362	push	r14
1363	push	r15
1364$L$cbc_prologue::
1365
1366	cld
1367	mov	r9d,r9d
1368
1369	lea	r14,QWORD PTR[$L$AES_Te]
1370	cmp	r9,0
1371	jne	$L$cbc_picked_te
1372	lea	r14,QWORD PTR[$L$AES_Td]
1373$L$cbc_picked_te::
1374
1375	mov	r10d,DWORD PTR[OPENSSL_ia32cap_P]
1376	cmp	rdx,512
1377	jb	$L$cbc_slow_prologue
1378	test	rdx,15
1379	jnz	$L$cbc_slow_prologue
1380	bt	r10d,28
1381	jc	$L$cbc_slow_prologue
1382
1383
1384	lea	r15,QWORD PTR[((-88-248))+rsp]
1385	and	r15,-64
1386
1387
1388	mov	r10,r14
1389	lea	r11,QWORD PTR[2304+r14]
1390	mov	r12,r15
1391	and	r10,0FFFh
1392	and	r11,0FFFh
1393	and	r12,0FFFh
1394
1395	cmp	r12,r11
1396	jb	$L$cbc_te_break_out
1397	sub	r12,r11
1398	sub	r15,r12
1399	jmp	$L$cbc_te_ok
1400$L$cbc_te_break_out::
1401	sub	r12,r10
1402	and	r12,0FFFh
1403	add	r12,320
1404	sub	r15,r12
1405ALIGN	4
1406$L$cbc_te_ok::
1407
1408	xchg	r15,rsp
1409
1410	mov	QWORD PTR[16+rsp],r15
1411$L$cbc_fast_body::
1412	mov	QWORD PTR[24+rsp],rdi
1413	mov	QWORD PTR[32+rsp],rsi
1414	mov	QWORD PTR[40+rsp],rdx
1415	mov	QWORD PTR[48+rsp],rcx
1416	mov	QWORD PTR[56+rsp],r8
1417	mov	DWORD PTR[((80+240))+rsp],0
1418	mov	rbp,r8
1419	mov	rbx,r9
1420	mov	r9,rsi
1421	mov	r8,rdi
1422	mov	r15,rcx
1423
1424	mov	eax,DWORD PTR[240+r15]
1425
1426	mov	r10,r15
1427	sub	r10,r14
1428	and	r10,0fffh
1429	cmp	r10,2304
1430	jb	$L$cbc_do_ecopy
1431	cmp	r10,4096-248
1432	jb	$L$cbc_skip_ecopy
1433ALIGN	4
1434$L$cbc_do_ecopy::
1435	mov	rsi,r15
1436	lea	rdi,QWORD PTR[80+rsp]
1437	lea	r15,QWORD PTR[80+rsp]
1438	mov	ecx,240/8
1439	DD	090A548F3h
1440	mov	DWORD PTR[rdi],eax
1441$L$cbc_skip_ecopy::
1442	mov	QWORD PTR[rsp],r15
1443
1444	mov	ecx,18
1445ALIGN	4
1446$L$cbc_prefetch_te::
1447	mov	r10,QWORD PTR[r14]
1448	mov	r11,QWORD PTR[32+r14]
1449	mov	r12,QWORD PTR[64+r14]
1450	mov	r13,QWORD PTR[96+r14]
1451	lea	r14,QWORD PTR[128+r14]
1452	sub	ecx,1
1453	jnz	$L$cbc_prefetch_te
1454	lea	r14,QWORD PTR[((-2304))+r14]
1455
1456	cmp	rbx,0
1457	je	$L$FAST_DECRYPT
1458
1459
1460	mov	eax,DWORD PTR[rbp]
1461	mov	ebx,DWORD PTR[4+rbp]
1462	mov	ecx,DWORD PTR[8+rbp]
1463	mov	edx,DWORD PTR[12+rbp]
1464
1465ALIGN	4
1466$L$cbc_fast_enc_loop::
1467	xor	eax,DWORD PTR[r8]
1468	xor	ebx,DWORD PTR[4+r8]
1469	xor	ecx,DWORD PTR[8+r8]
1470	xor	edx,DWORD PTR[12+r8]
1471	mov	r15,QWORD PTR[rsp]
1472	mov	QWORD PTR[24+rsp],r8
1473
1474	call	_x86_64_AES_encrypt
1475
1476	mov	r8,QWORD PTR[24+rsp]
1477	mov	r10,QWORD PTR[40+rsp]
1478	mov	DWORD PTR[r9],eax
1479	mov	DWORD PTR[4+r9],ebx
1480	mov	DWORD PTR[8+r9],ecx
1481	mov	DWORD PTR[12+r9],edx
1482
1483	lea	r8,QWORD PTR[16+r8]
1484	lea	r9,QWORD PTR[16+r9]
1485	sub	r10,16
1486	test	r10,-16
1487	mov	QWORD PTR[40+rsp],r10
1488	jnz	$L$cbc_fast_enc_loop
1489	mov	rbp,QWORD PTR[56+rsp]
1490	mov	DWORD PTR[rbp],eax
1491	mov	DWORD PTR[4+rbp],ebx
1492	mov	DWORD PTR[8+rbp],ecx
1493	mov	DWORD PTR[12+rbp],edx
1494
1495	jmp	$L$cbc_fast_cleanup
1496
1497
1498ALIGN	16
1499$L$FAST_DECRYPT::
1500	cmp	r9,r8
1501	je	$L$cbc_fast_dec_in_place
1502
1503	mov	QWORD PTR[64+rsp],rbp
1504ALIGN	4
1505$L$cbc_fast_dec_loop::
1506	mov	eax,DWORD PTR[r8]
1507	mov	ebx,DWORD PTR[4+r8]
1508	mov	ecx,DWORD PTR[8+r8]
1509	mov	edx,DWORD PTR[12+r8]
1510	mov	r15,QWORD PTR[rsp]
1511	mov	QWORD PTR[24+rsp],r8
1512
1513	call	_x86_64_AES_decrypt
1514
1515	mov	rbp,QWORD PTR[64+rsp]
1516	mov	r8,QWORD PTR[24+rsp]
1517	mov	r10,QWORD PTR[40+rsp]
1518	xor	eax,DWORD PTR[rbp]
1519	xor	ebx,DWORD PTR[4+rbp]
1520	xor	ecx,DWORD PTR[8+rbp]
1521	xor	edx,DWORD PTR[12+rbp]
1522	mov	rbp,r8
1523
1524	sub	r10,16
1525	mov	QWORD PTR[40+rsp],r10
1526	mov	QWORD PTR[64+rsp],rbp
1527
1528	mov	DWORD PTR[r9],eax
1529	mov	DWORD PTR[4+r9],ebx
1530	mov	DWORD PTR[8+r9],ecx
1531	mov	DWORD PTR[12+r9],edx
1532
1533	lea	r8,QWORD PTR[16+r8]
1534	lea	r9,QWORD PTR[16+r9]
1535	jnz	$L$cbc_fast_dec_loop
1536	mov	r12,QWORD PTR[56+rsp]
1537	mov	r10,QWORD PTR[rbp]
1538	mov	r11,QWORD PTR[8+rbp]
1539	mov	QWORD PTR[r12],r10
1540	mov	QWORD PTR[8+r12],r11
1541	jmp	$L$cbc_fast_cleanup
1542
1543ALIGN	16
1544$L$cbc_fast_dec_in_place::
1545	mov	r10,QWORD PTR[rbp]
1546	mov	r11,QWORD PTR[8+rbp]
1547	mov	QWORD PTR[((0+64))+rsp],r10
1548	mov	QWORD PTR[((8+64))+rsp],r11
1549ALIGN	4
1550$L$cbc_fast_dec_in_place_loop::
1551	mov	eax,DWORD PTR[r8]
1552	mov	ebx,DWORD PTR[4+r8]
1553	mov	ecx,DWORD PTR[8+r8]
1554	mov	edx,DWORD PTR[12+r8]
1555	mov	r15,QWORD PTR[rsp]
1556	mov	QWORD PTR[24+rsp],r8
1557
1558	call	_x86_64_AES_decrypt
1559
1560	mov	r8,QWORD PTR[24+rsp]
1561	mov	r10,QWORD PTR[40+rsp]
1562	xor	eax,DWORD PTR[((0+64))+rsp]
1563	xor	ebx,DWORD PTR[((4+64))+rsp]
1564	xor	ecx,DWORD PTR[((8+64))+rsp]
1565	xor	edx,DWORD PTR[((12+64))+rsp]
1566
1567	mov	r11,QWORD PTR[r8]
1568	mov	r12,QWORD PTR[8+r8]
1569	sub	r10,16
1570	jz	$L$cbc_fast_dec_in_place_done
1571
1572	mov	QWORD PTR[((0+64))+rsp],r11
1573	mov	QWORD PTR[((8+64))+rsp],r12
1574
1575	mov	DWORD PTR[r9],eax
1576	mov	DWORD PTR[4+r9],ebx
1577	mov	DWORD PTR[8+r9],ecx
1578	mov	DWORD PTR[12+r9],edx
1579
1580	lea	r8,QWORD PTR[16+r8]
1581	lea	r9,QWORD PTR[16+r9]
1582	mov	QWORD PTR[40+rsp],r10
1583	jmp	$L$cbc_fast_dec_in_place_loop
1584$L$cbc_fast_dec_in_place_done::
1585	mov	rdi,QWORD PTR[56+rsp]
1586	mov	QWORD PTR[rdi],r11
1587	mov	QWORD PTR[8+rdi],r12
1588
1589	mov	DWORD PTR[r9],eax
1590	mov	DWORD PTR[4+r9],ebx
1591	mov	DWORD PTR[8+r9],ecx
1592	mov	DWORD PTR[12+r9],edx
1593
1594ALIGN	4
1595$L$cbc_fast_cleanup::
1596	cmp	DWORD PTR[((80+240))+rsp],0
1597	lea	rdi,QWORD PTR[80+rsp]
1598	je	$L$cbc_exit
1599	mov	ecx,240/8
1600	xor	rax,rax
1601	DD	090AB48F3h
1602
1603	jmp	$L$cbc_exit
1604
1605
1606ALIGN	16
1607$L$cbc_slow_prologue::
1608
1609	lea	rbp,QWORD PTR[((-88))+rsp]
1610	and	rbp,-64
1611
1612	lea	r10,QWORD PTR[((-88-63))+rcx]
1613	sub	r10,rbp
1614	neg	r10
1615	and	r10,03c0h
1616	sub	rbp,r10
1617
1618	xchg	rbp,rsp
1619
1620	mov	QWORD PTR[16+rsp],rbp
1621$L$cbc_slow_body::
1622
1623
1624
1625
1626	mov	QWORD PTR[56+rsp],r8
1627	mov	rbp,r8
1628	mov	rbx,r9
1629	mov	r9,rsi
1630	mov	r8,rdi
1631	mov	r15,rcx
1632	mov	r10,rdx
1633
1634	mov	eax,DWORD PTR[240+r15]
1635	mov	QWORD PTR[rsp],r15
1636	shl	eax,4
1637	lea	rax,QWORD PTR[rax*1+r15]
1638	mov	QWORD PTR[8+rsp],rax
1639
1640
1641	lea	r14,QWORD PTR[2048+r14]
1642	lea	rax,QWORD PTR[((768-8))+rsp]
1643	sub	rax,r14
1644	and	rax,0300h
1645	lea	r14,QWORD PTR[rax*1+r14]
1646
1647	cmp	rbx,0
1648	je	$L$SLOW_DECRYPT
1649
1650
1651	test	r10,-16
1652	mov	eax,DWORD PTR[rbp]
1653	mov	ebx,DWORD PTR[4+rbp]
1654	mov	ecx,DWORD PTR[8+rbp]
1655	mov	edx,DWORD PTR[12+rbp]
1656	jz	$L$cbc_slow_enc_tail
1657
1658ALIGN	4
1659$L$cbc_slow_enc_loop::
1660	xor	eax,DWORD PTR[r8]
1661	xor	ebx,DWORD PTR[4+r8]
1662	xor	ecx,DWORD PTR[8+r8]
1663	xor	edx,DWORD PTR[12+r8]
1664	mov	r15,QWORD PTR[rsp]
1665	mov	QWORD PTR[24+rsp],r8
1666	mov	QWORD PTR[32+rsp],r9
1667	mov	QWORD PTR[40+rsp],r10
1668
1669	call	_x86_64_AES_encrypt_compact
1670
1671	mov	r8,QWORD PTR[24+rsp]
1672	mov	r9,QWORD PTR[32+rsp]
1673	mov	r10,QWORD PTR[40+rsp]
1674	mov	DWORD PTR[r9],eax
1675	mov	DWORD PTR[4+r9],ebx
1676	mov	DWORD PTR[8+r9],ecx
1677	mov	DWORD PTR[12+r9],edx
1678
1679	lea	r8,QWORD PTR[16+r8]
1680	lea	r9,QWORD PTR[16+r9]
1681	sub	r10,16
1682	test	r10,-16
1683	jnz	$L$cbc_slow_enc_loop
1684	test	r10,15
1685	jnz	$L$cbc_slow_enc_tail
1686	mov	rbp,QWORD PTR[56+rsp]
1687	mov	DWORD PTR[rbp],eax
1688	mov	DWORD PTR[4+rbp],ebx
1689	mov	DWORD PTR[8+rbp],ecx
1690	mov	DWORD PTR[12+rbp],edx
1691
1692	jmp	$L$cbc_exit
1693
1694ALIGN	4
1695$L$cbc_slow_enc_tail::
1696	mov	r11,rax
1697	mov	r12,rcx
1698	mov	rcx,r10
1699	mov	rsi,r8
1700	mov	rdi,r9
1701	DD	09066A4F3h
1702	mov	rcx,16
1703	sub	rcx,r10
1704	xor	rax,rax
1705	DD	09066AAF3h
1706	mov	r8,r9
1707	mov	r10,16
1708	mov	rax,r11
1709	mov	rcx,r12
1710	jmp	$L$cbc_slow_enc_loop
1711
1712ALIGN	16
1713$L$SLOW_DECRYPT::
1714	shr	rax,3
1715	add	r14,rax
1716
1717	mov	r11,QWORD PTR[rbp]
1718	mov	r12,QWORD PTR[8+rbp]
1719	mov	QWORD PTR[((0+64))+rsp],r11
1720	mov	QWORD PTR[((8+64))+rsp],r12
1721
1722ALIGN	4
1723$L$cbc_slow_dec_loop::
1724	mov	eax,DWORD PTR[r8]
1725	mov	ebx,DWORD PTR[4+r8]
1726	mov	ecx,DWORD PTR[8+r8]
1727	mov	edx,DWORD PTR[12+r8]
1728	mov	r15,QWORD PTR[rsp]
1729	mov	QWORD PTR[24+rsp],r8
1730	mov	QWORD PTR[32+rsp],r9
1731	mov	QWORD PTR[40+rsp],r10
1732
1733	call	_x86_64_AES_decrypt_compact
1734
1735	mov	r8,QWORD PTR[24+rsp]
1736	mov	r9,QWORD PTR[32+rsp]
1737	mov	r10,QWORD PTR[40+rsp]
1738	xor	eax,DWORD PTR[((0+64))+rsp]
1739	xor	ebx,DWORD PTR[((4+64))+rsp]
1740	xor	ecx,DWORD PTR[((8+64))+rsp]
1741	xor	edx,DWORD PTR[((12+64))+rsp]
1742
1743	mov	r11,QWORD PTR[r8]
1744	mov	r12,QWORD PTR[8+r8]
1745	sub	r10,16
1746	jc	$L$cbc_slow_dec_partial
1747	jz	$L$cbc_slow_dec_done
1748
1749	mov	QWORD PTR[((0+64))+rsp],r11
1750	mov	QWORD PTR[((8+64))+rsp],r12
1751
1752	mov	DWORD PTR[r9],eax
1753	mov	DWORD PTR[4+r9],ebx
1754	mov	DWORD PTR[8+r9],ecx
1755	mov	DWORD PTR[12+r9],edx
1756
1757	lea	r8,QWORD PTR[16+r8]
1758	lea	r9,QWORD PTR[16+r9]
1759	jmp	$L$cbc_slow_dec_loop
1760$L$cbc_slow_dec_done::
1761	mov	rdi,QWORD PTR[56+rsp]
1762	mov	QWORD PTR[rdi],r11
1763	mov	QWORD PTR[8+rdi],r12
1764
1765	mov	DWORD PTR[r9],eax
1766	mov	DWORD PTR[4+r9],ebx
1767	mov	DWORD PTR[8+r9],ecx
1768	mov	DWORD PTR[12+r9],edx
1769
1770	jmp	$L$cbc_exit
1771
1772ALIGN	4
1773$L$cbc_slow_dec_partial::
1774	mov	rdi,QWORD PTR[56+rsp]
1775	mov	QWORD PTR[rdi],r11
1776	mov	QWORD PTR[8+rdi],r12
1777
1778	mov	DWORD PTR[((0+64))+rsp],eax
1779	mov	DWORD PTR[((4+64))+rsp],ebx
1780	mov	DWORD PTR[((8+64))+rsp],ecx
1781	mov	DWORD PTR[((12+64))+rsp],edx
1782
1783	mov	rdi,r9
1784	lea	rsi,QWORD PTR[64+rsp]
1785	lea	rcx,QWORD PTR[16+r10]
1786	DD	09066A4F3h
1787	jmp	$L$cbc_exit
1788
1789ALIGN	16
1790$L$cbc_exit::
1791	mov	rsi,QWORD PTR[16+rsp]
1792	mov	r15,QWORD PTR[rsi]
1793	mov	r14,QWORD PTR[8+rsi]
1794	mov	r13,QWORD PTR[16+rsi]
1795	mov	r12,QWORD PTR[24+rsi]
1796	mov	rbp,QWORD PTR[32+rsi]
1797	mov	rbx,QWORD PTR[40+rsi]
1798	lea	rsp,QWORD PTR[48+rsi]
1799$L$cbc_popfq::
1800	popfq
1801$L$cbc_epilogue::
1802	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
1803	mov	rsi,QWORD PTR[16+rsp]
1804	DB	0F3h,0C3h		;repret
1805$L$SEH_end_asm_AES_cbc_encrypt::
1806asm_AES_cbc_encrypt	ENDP
1807ALIGN	64
1808$L$AES_Te::
1809	DD	0a56363c6h,0a56363c6h
1810	DD	0847c7cf8h,0847c7cf8h
1811	DD	0997777eeh,0997777eeh
1812	DD	08d7b7bf6h,08d7b7bf6h
1813	DD	00df2f2ffh,00df2f2ffh
1814	DD	0bd6b6bd6h,0bd6b6bd6h
1815	DD	0b16f6fdeh,0b16f6fdeh
1816	DD	054c5c591h,054c5c591h
1817	DD	050303060h,050303060h
1818	DD	003010102h,003010102h
1819	DD	0a96767ceh,0a96767ceh
1820	DD	07d2b2b56h,07d2b2b56h
1821	DD	019fefee7h,019fefee7h
1822	DD	062d7d7b5h,062d7d7b5h
1823	DD	0e6abab4dh,0e6abab4dh
1824	DD	09a7676ech,09a7676ech
1825	DD	045caca8fh,045caca8fh
1826	DD	09d82821fh,09d82821fh
1827	DD	040c9c989h,040c9c989h
1828	DD	0877d7dfah,0877d7dfah
1829	DD	015fafaefh,015fafaefh
1830	DD	0eb5959b2h,0eb5959b2h
1831	DD	0c947478eh,0c947478eh
1832	DD	00bf0f0fbh,00bf0f0fbh
1833	DD	0ecadad41h,0ecadad41h
1834	DD	067d4d4b3h,067d4d4b3h
1835	DD	0fda2a25fh,0fda2a25fh
1836	DD	0eaafaf45h,0eaafaf45h
1837	DD	0bf9c9c23h,0bf9c9c23h
1838	DD	0f7a4a453h,0f7a4a453h
1839	DD	0967272e4h,0967272e4h
1840	DD	05bc0c09bh,05bc0c09bh
1841	DD	0c2b7b775h,0c2b7b775h
1842	DD	01cfdfde1h,01cfdfde1h
1843	DD	0ae93933dh,0ae93933dh
1844	DD	06a26264ch,06a26264ch
1845	DD	05a36366ch,05a36366ch
1846	DD	0413f3f7eh,0413f3f7eh
1847	DD	002f7f7f5h,002f7f7f5h
1848	DD	04fcccc83h,04fcccc83h
1849	DD	05c343468h,05c343468h
1850	DD	0f4a5a551h,0f4a5a551h
1851	DD	034e5e5d1h,034e5e5d1h
1852	DD	008f1f1f9h,008f1f1f9h
1853	DD	0937171e2h,0937171e2h
1854	DD	073d8d8abh,073d8d8abh
1855	DD	053313162h,053313162h
1856	DD	03f15152ah,03f15152ah
1857	DD	00c040408h,00c040408h
1858	DD	052c7c795h,052c7c795h
1859	DD	065232346h,065232346h
1860	DD	05ec3c39dh,05ec3c39dh
1861	DD	028181830h,028181830h
1862	DD	0a1969637h,0a1969637h
1863	DD	00f05050ah,00f05050ah
1864	DD	0b59a9a2fh,0b59a9a2fh
1865	DD	00907070eh,00907070eh
1866	DD	036121224h,036121224h
1867	DD	09b80801bh,09b80801bh
1868	DD	03de2e2dfh,03de2e2dfh
1869	DD	026ebebcdh,026ebebcdh
1870	DD	06927274eh,06927274eh
1871	DD	0cdb2b27fh,0cdb2b27fh
1872	DD	09f7575eah,09f7575eah
1873	DD	01b090912h,01b090912h
1874	DD	09e83831dh,09e83831dh
1875	DD	0742c2c58h,0742c2c58h
1876	DD	02e1a1a34h,02e1a1a34h
1877	DD	02d1b1b36h,02d1b1b36h
1878	DD	0b26e6edch,0b26e6edch
1879	DD	0ee5a5ab4h,0ee5a5ab4h
1880	DD	0fba0a05bh,0fba0a05bh
1881	DD	0f65252a4h,0f65252a4h
1882	DD	04d3b3b76h,04d3b3b76h
1883	DD	061d6d6b7h,061d6d6b7h
1884	DD	0ceb3b37dh,0ceb3b37dh
1885	DD	07b292952h,07b292952h
1886	DD	03ee3e3ddh,03ee3e3ddh
1887	DD	0712f2f5eh,0712f2f5eh
1888	DD	097848413h,097848413h
1889	DD	0f55353a6h,0f55353a6h
1890	DD	068d1d1b9h,068d1d1b9h
1891	DD	000000000h,000000000h
1892	DD	02cededc1h,02cededc1h
1893	DD	060202040h,060202040h
1894	DD	01ffcfce3h,01ffcfce3h
1895	DD	0c8b1b179h,0c8b1b179h
1896	DD	0ed5b5bb6h,0ed5b5bb6h
1897	DD	0be6a6ad4h,0be6a6ad4h
1898	DD	046cbcb8dh,046cbcb8dh
1899	DD	0d9bebe67h,0d9bebe67h
1900	DD	04b393972h,04b393972h
1901	DD	0de4a4a94h,0de4a4a94h
1902	DD	0d44c4c98h,0d44c4c98h
1903	DD	0e85858b0h,0e85858b0h
1904	DD	04acfcf85h,04acfcf85h
1905	DD	06bd0d0bbh,06bd0d0bbh
1906	DD	02aefefc5h,02aefefc5h
1907	DD	0e5aaaa4fh,0e5aaaa4fh
1908	DD	016fbfbedh,016fbfbedh
1909	DD	0c5434386h,0c5434386h
1910	DD	0d74d4d9ah,0d74d4d9ah
1911	DD	055333366h,055333366h
1912	DD	094858511h,094858511h
1913	DD	0cf45458ah,0cf45458ah
1914	DD	010f9f9e9h,010f9f9e9h
1915	DD	006020204h,006020204h
1916	DD	0817f7ffeh,0817f7ffeh
1917	DD	0f05050a0h,0f05050a0h
1918	DD	0443c3c78h,0443c3c78h
1919	DD	0ba9f9f25h,0ba9f9f25h
1920	DD	0e3a8a84bh,0e3a8a84bh
1921	DD	0f35151a2h,0f35151a2h
1922	DD	0fea3a35dh,0fea3a35dh
1923	DD	0c0404080h,0c0404080h
1924	DD	08a8f8f05h,08a8f8f05h
1925	DD	0ad92923fh,0ad92923fh
1926	DD	0bc9d9d21h,0bc9d9d21h
1927	DD	048383870h,048383870h
1928	DD	004f5f5f1h,004f5f5f1h
1929	DD	0dfbcbc63h,0dfbcbc63h
1930	DD	0c1b6b677h,0c1b6b677h
1931	DD	075dadaafh,075dadaafh
1932	DD	063212142h,063212142h
1933	DD	030101020h,030101020h
1934	DD	01affffe5h,01affffe5h
1935	DD	00ef3f3fdh,00ef3f3fdh
1936	DD	06dd2d2bfh,06dd2d2bfh
1937	DD	04ccdcd81h,04ccdcd81h
1938	DD	0140c0c18h,0140c0c18h
1939	DD	035131326h,035131326h
1940	DD	02fececc3h,02fececc3h
1941	DD	0e15f5fbeh,0e15f5fbeh
1942	DD	0a2979735h,0a2979735h
1943	DD	0cc444488h,0cc444488h
1944	DD	03917172eh,03917172eh
1945	DD	057c4c493h,057c4c493h
1946	DD	0f2a7a755h,0f2a7a755h
1947	DD	0827e7efch,0827e7efch
1948	DD	0473d3d7ah,0473d3d7ah
1949	DD	0ac6464c8h,0ac6464c8h
1950	DD	0e75d5dbah,0e75d5dbah
1951	DD	02b191932h,02b191932h
1952	DD	0957373e6h,0957373e6h
1953	DD	0a06060c0h,0a06060c0h
1954	DD	098818119h,098818119h
1955	DD	0d14f4f9eh,0d14f4f9eh
1956	DD	07fdcdca3h,07fdcdca3h
1957	DD	066222244h,066222244h
1958	DD	07e2a2a54h,07e2a2a54h
1959	DD	0ab90903bh,0ab90903bh
1960	DD	08388880bh,08388880bh
1961	DD	0ca46468ch,0ca46468ch
1962	DD	029eeeec7h,029eeeec7h
1963	DD	0d3b8b86bh,0d3b8b86bh
1964	DD	03c141428h,03c141428h
1965	DD	079dedea7h,079dedea7h
1966	DD	0e25e5ebch,0e25e5ebch
1967	DD	01d0b0b16h,01d0b0b16h
1968	DD	076dbdbadh,076dbdbadh
1969	DD	03be0e0dbh,03be0e0dbh
1970	DD	056323264h,056323264h
1971	DD	04e3a3a74h,04e3a3a74h
1972	DD	01e0a0a14h,01e0a0a14h
1973	DD	0db494992h,0db494992h
1974	DD	00a06060ch,00a06060ch
1975	DD	06c242448h,06c242448h
1976	DD	0e45c5cb8h,0e45c5cb8h
1977	DD	05dc2c29fh,05dc2c29fh
1978	DD	06ed3d3bdh,06ed3d3bdh
1979	DD	0efacac43h,0efacac43h
1980	DD	0a66262c4h,0a66262c4h
1981	DD	0a8919139h,0a8919139h
1982	DD	0a4959531h,0a4959531h
1983	DD	037e4e4d3h,037e4e4d3h
1984	DD	08b7979f2h,08b7979f2h
1985	DD	032e7e7d5h,032e7e7d5h
1986	DD	043c8c88bh,043c8c88bh
1987	DD	05937376eh,05937376eh
1988	DD	0b76d6ddah,0b76d6ddah
1989	DD	08c8d8d01h,08c8d8d01h
1990	DD	064d5d5b1h,064d5d5b1h
1991	DD	0d24e4e9ch,0d24e4e9ch
1992	DD	0e0a9a949h,0e0a9a949h
1993	DD	0b46c6cd8h,0b46c6cd8h
1994	DD	0fa5656ach,0fa5656ach
1995	DD	007f4f4f3h,007f4f4f3h
1996	DD	025eaeacfh,025eaeacfh
1997	DD	0af6565cah,0af6565cah
1998	DD	08e7a7af4h,08e7a7af4h
1999	DD	0e9aeae47h,0e9aeae47h
2000	DD	018080810h,018080810h
2001	DD	0d5baba6fh,0d5baba6fh
2002	DD	0887878f0h,0887878f0h
2003	DD	06f25254ah,06f25254ah
2004	DD	0722e2e5ch,0722e2e5ch
2005	DD	0241c1c38h,0241c1c38h
2006	DD	0f1a6a657h,0f1a6a657h
2007	DD	0c7b4b473h,0c7b4b473h
2008	DD	051c6c697h,051c6c697h
2009	DD	023e8e8cbh,023e8e8cbh
2010	DD	07cdddda1h,07cdddda1h
2011	DD	09c7474e8h,09c7474e8h
2012	DD	0211f1f3eh,0211f1f3eh
2013	DD	0dd4b4b96h,0dd4b4b96h
2014	DD	0dcbdbd61h,0dcbdbd61h
2015	DD	0868b8b0dh,0868b8b0dh
2016	DD	0858a8a0fh,0858a8a0fh
2017	DD	0907070e0h,0907070e0h
2018	DD	0423e3e7ch,0423e3e7ch
2019	DD	0c4b5b571h,0c4b5b571h
2020	DD	0aa6666cch,0aa6666cch
2021	DD	0d8484890h,0d8484890h
2022	DD	005030306h,005030306h
2023	DD	001f6f6f7h,001f6f6f7h
2024	DD	0120e0e1ch,0120e0e1ch
2025	DD	0a36161c2h,0a36161c2h
2026	DD	05f35356ah,05f35356ah
2027	DD	0f95757aeh,0f95757aeh
2028	DD	0d0b9b969h,0d0b9b969h
2029	DD	091868617h,091868617h
2030	DD	058c1c199h,058c1c199h
2031	DD	0271d1d3ah,0271d1d3ah
2032	DD	0b99e9e27h,0b99e9e27h
2033	DD	038e1e1d9h,038e1e1d9h
2034	DD	013f8f8ebh,013f8f8ebh
2035	DD	0b398982bh,0b398982bh
2036	DD	033111122h,033111122h
2037	DD	0bb6969d2h,0bb6969d2h
2038	DD	070d9d9a9h,070d9d9a9h
2039	DD	0898e8e07h,0898e8e07h
2040	DD	0a7949433h,0a7949433h
2041	DD	0b69b9b2dh,0b69b9b2dh
2042	DD	0221e1e3ch,0221e1e3ch
2043	DD	092878715h,092878715h
2044	DD	020e9e9c9h,020e9e9c9h
2045	DD	049cece87h,049cece87h
2046	DD	0ff5555aah,0ff5555aah
2047	DD	078282850h,078282850h
2048	DD	07adfdfa5h,07adfdfa5h
2049	DD	08f8c8c03h,08f8c8c03h
2050	DD	0f8a1a159h,0f8a1a159h
2051	DD	080898909h,080898909h
2052	DD	0170d0d1ah,0170d0d1ah
2053	DD	0dabfbf65h,0dabfbf65h
2054	DD	031e6e6d7h,031e6e6d7h
2055	DD	0c6424284h,0c6424284h
2056	DD	0b86868d0h,0b86868d0h
2057	DD	0c3414182h,0c3414182h
2058	DD	0b0999929h,0b0999929h
2059	DD	0772d2d5ah,0772d2d5ah
2060	DD	0110f0f1eh,0110f0f1eh
2061	DD	0cbb0b07bh,0cbb0b07bh
2062	DD	0fc5454a8h,0fc5454a8h
2063	DD	0d6bbbb6dh,0d6bbbb6dh
2064	DD	03a16162ch,03a16162ch
2065DB	063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2066DB	030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2067DB	0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2068DB	0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2069DB	0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2070DB	034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2071DB	004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2072DB	007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2073DB	009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2074DB	052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2075DB	053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2076DB	06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2077DB	0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2078DB	045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2079DB	051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2080DB	0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2081DB	0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2082DB	0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2083DB	060h,081h,04fh,0dch,022h,02ah,090h,088h
2084DB	046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2085DB	0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2086DB	0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2087DB	0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2088DB	06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2089DB	0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2090DB	0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2091DB	070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2092DB	061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2093DB	0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2094DB	09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2095DB	08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2096DB	041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2097DB	063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2098DB	030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2099DB	0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2100DB	0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2101DB	0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2102DB	034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2103DB	004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2104DB	007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2105DB	009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2106DB	052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2107DB	053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2108DB	06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2109DB	0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2110DB	045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2111DB	051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2112DB	0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2113DB	0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2114DB	0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2115DB	060h,081h,04fh,0dch,022h,02ah,090h,088h
2116DB	046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2117DB	0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2118DB	0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2119DB	0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2120DB	06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2121DB	0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2122DB	0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2123DB	070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2124DB	061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2125DB	0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2126DB	09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2127DB	08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2128DB	041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2129DB	063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2130DB	030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2131DB	0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2132DB	0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2133DB	0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2134DB	034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2135DB	004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2136DB	007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2137DB	009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2138DB	052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2139DB	053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2140DB	06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2141DB	0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2142DB	045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2143DB	051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2144DB	0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2145DB	0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2146DB	0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2147DB	060h,081h,04fh,0dch,022h,02ah,090h,088h
2148DB	046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2149DB	0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2150DB	0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2151DB	0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2152DB	06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2153DB	0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2154DB	0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2155DB	070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2156DB	061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2157DB	0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2158DB	09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2159DB	08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2160DB	041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2161DB	063h,07ch,077h,07bh,0f2h,06bh,06fh,0c5h
2162DB	030h,001h,067h,02bh,0feh,0d7h,0abh,076h
2163DB	0cah,082h,0c9h,07dh,0fah,059h,047h,0f0h
2164DB	0adh,0d4h,0a2h,0afh,09ch,0a4h,072h,0c0h
2165DB	0b7h,0fdh,093h,026h,036h,03fh,0f7h,0cch
2166DB	034h,0a5h,0e5h,0f1h,071h,0d8h,031h,015h
2167DB	004h,0c7h,023h,0c3h,018h,096h,005h,09ah
2168DB	007h,012h,080h,0e2h,0ebh,027h,0b2h,075h
2169DB	009h,083h,02ch,01ah,01bh,06eh,05ah,0a0h
2170DB	052h,03bh,0d6h,0b3h,029h,0e3h,02fh,084h
2171DB	053h,0d1h,000h,0edh,020h,0fch,0b1h,05bh
2172DB	06ah,0cbh,0beh,039h,04ah,04ch,058h,0cfh
2173DB	0d0h,0efh,0aah,0fbh,043h,04dh,033h,085h
2174DB	045h,0f9h,002h,07fh,050h,03ch,09fh,0a8h
2175DB	051h,0a3h,040h,08fh,092h,09dh,038h,0f5h
2176DB	0bch,0b6h,0dah,021h,010h,0ffh,0f3h,0d2h
2177DB	0cdh,00ch,013h,0ech,05fh,097h,044h,017h
2178DB	0c4h,0a7h,07eh,03dh,064h,05dh,019h,073h
2179DB	060h,081h,04fh,0dch,022h,02ah,090h,088h
2180DB	046h,0eeh,0b8h,014h,0deh,05eh,00bh,0dbh
2181DB	0e0h,032h,03ah,00ah,049h,006h,024h,05ch
2182DB	0c2h,0d3h,0ach,062h,091h,095h,0e4h,079h
2183DB	0e7h,0c8h,037h,06dh,08dh,0d5h,04eh,0a9h
2184DB	06ch,056h,0f4h,0eah,065h,07ah,0aeh,008h
2185DB	0bah,078h,025h,02eh,01ch,0a6h,0b4h,0c6h
2186DB	0e8h,0ddh,074h,01fh,04bh,0bdh,08bh,08ah
2187DB	070h,03eh,0b5h,066h,048h,003h,0f6h,00eh
2188DB	061h,035h,057h,0b9h,086h,0c1h,01dh,09eh
2189DB	0e1h,0f8h,098h,011h,069h,0d9h,08eh,094h
2190DB	09bh,01eh,087h,0e9h,0ceh,055h,028h,0dfh
2191DB	08ch,0a1h,089h,00dh,0bfh,0e6h,042h,068h
2192DB	041h,099h,02dh,00fh,0b0h,054h,0bbh,016h
2193	DD	000000001h,000000002h,000000004h,000000008h
2194	DD	000000010h,000000020h,000000040h,000000080h
2195	DD	00000001bh,000000036h,080808080h,080808080h
2196	DD	0fefefefeh,0fefefefeh,01b1b1b1bh,01b1b1b1bh
2197ALIGN	64
2198$L$AES_Td::
2199	DD	050a7f451h,050a7f451h
2200	DD	05365417eh,05365417eh
2201	DD	0c3a4171ah,0c3a4171ah
2202	DD	0965e273ah,0965e273ah
2203	DD	0cb6bab3bh,0cb6bab3bh
2204	DD	0f1459d1fh,0f1459d1fh
2205	DD	0ab58faach,0ab58faach
2206	DD	09303e34bh,09303e34bh
2207	DD	055fa3020h,055fa3020h
2208	DD	0f66d76adh,0f66d76adh
2209	DD	09176cc88h,09176cc88h
2210	DD	0254c02f5h,0254c02f5h
2211	DD	0fcd7e54fh,0fcd7e54fh
2212	DD	0d7cb2ac5h,0d7cb2ac5h
2213	DD	080443526h,080443526h
2214	DD	08fa362b5h,08fa362b5h
2215	DD	0495ab1deh,0495ab1deh
2216	DD	0671bba25h,0671bba25h
2217	DD	0980eea45h,0980eea45h
2218	DD	0e1c0fe5dh,0e1c0fe5dh
2219	DD	002752fc3h,002752fc3h
2220	DD	012f04c81h,012f04c81h
2221	DD	0a397468dh,0a397468dh
2222	DD	0c6f9d36bh,0c6f9d36bh
2223	DD	0e75f8f03h,0e75f8f03h
2224	DD	0959c9215h,0959c9215h
2225	DD	0eb7a6dbfh,0eb7a6dbfh
2226	DD	0da595295h,0da595295h
2227	DD	02d83bed4h,02d83bed4h
2228	DD	0d3217458h,0d3217458h
2229	DD	02969e049h,02969e049h
2230	DD	044c8c98eh,044c8c98eh
2231	DD	06a89c275h,06a89c275h
2232	DD	078798ef4h,078798ef4h
2233	DD	06b3e5899h,06b3e5899h
2234	DD	0dd71b927h,0dd71b927h
2235	DD	0b64fe1beh,0b64fe1beh
2236	DD	017ad88f0h,017ad88f0h
2237	DD	066ac20c9h,066ac20c9h
2238	DD	0b43ace7dh,0b43ace7dh
2239	DD	0184adf63h,0184adf63h
2240	DD	082311ae5h,082311ae5h
2241	DD	060335197h,060335197h
2242	DD	0457f5362h,0457f5362h
2243	DD	0e07764b1h,0e07764b1h
2244	DD	084ae6bbbh,084ae6bbbh
2245	DD	01ca081feh,01ca081feh
2246	DD	0942b08f9h,0942b08f9h
2247	DD	058684870h,058684870h
2248	DD	019fd458fh,019fd458fh
2249	DD	0876cde94h,0876cde94h
2250	DD	0b7f87b52h,0b7f87b52h
2251	DD	023d373abh,023d373abh
2252	DD	0e2024b72h,0e2024b72h
2253	DD	0578f1fe3h,0578f1fe3h
2254	DD	02aab5566h,02aab5566h
2255	DD	00728ebb2h,00728ebb2h
2256	DD	003c2b52fh,003c2b52fh
2257	DD	09a7bc586h,09a7bc586h
2258	DD	0a50837d3h,0a50837d3h
2259	DD	0f2872830h,0f2872830h
2260	DD	0b2a5bf23h,0b2a5bf23h
2261	DD	0ba6a0302h,0ba6a0302h
2262	DD	05c8216edh,05c8216edh
2263	DD	02b1ccf8ah,02b1ccf8ah
2264	DD	092b479a7h,092b479a7h
2265	DD	0f0f207f3h,0f0f207f3h
2266	DD	0a1e2694eh,0a1e2694eh
2267	DD	0cdf4da65h,0cdf4da65h
2268	DD	0d5be0506h,0d5be0506h
2269	DD	01f6234d1h,01f6234d1h
2270	DD	08afea6c4h,08afea6c4h
2271	DD	09d532e34h,09d532e34h
2272	DD	0a055f3a2h,0a055f3a2h
2273	DD	032e18a05h,032e18a05h
2274	DD	075ebf6a4h,075ebf6a4h
2275	DD	039ec830bh,039ec830bh
2276	DD	0aaef6040h,0aaef6040h
2277	DD	0069f715eh,0069f715eh
2278	DD	051106ebdh,051106ebdh
2279	DD	0f98a213eh,0f98a213eh
2280	DD	03d06dd96h,03d06dd96h
2281	DD	0ae053eddh,0ae053eddh
2282	DD	046bde64dh,046bde64dh
2283	DD	0b58d5491h,0b58d5491h
2284	DD	0055dc471h,0055dc471h
2285	DD	06fd40604h,06fd40604h
2286	DD	0ff155060h,0ff155060h
2287	DD	024fb9819h,024fb9819h
2288	DD	097e9bdd6h,097e9bdd6h
2289	DD	0cc434089h,0cc434089h
2290	DD	0779ed967h,0779ed967h
2291	DD	0bd42e8b0h,0bd42e8b0h
2292	DD	0888b8907h,0888b8907h
2293	DD	0385b19e7h,0385b19e7h
2294	DD	0dbeec879h,0dbeec879h
2295	DD	0470a7ca1h,0470a7ca1h
2296	DD	0e90f427ch,0e90f427ch
2297	DD	0c91e84f8h,0c91e84f8h
2298	DD	000000000h,000000000h
2299	DD	083868009h,083868009h
2300	DD	048ed2b32h,048ed2b32h
2301	DD	0ac70111eh,0ac70111eh
2302	DD	04e725a6ch,04e725a6ch
2303	DD	0fbff0efdh,0fbff0efdh
2304	DD	05638850fh,05638850fh
2305	DD	01ed5ae3dh,01ed5ae3dh
2306	DD	027392d36h,027392d36h
2307	DD	064d90f0ah,064d90f0ah
2308	DD	021a65c68h,021a65c68h
2309	DD	0d1545b9bh,0d1545b9bh
2310	DD	03a2e3624h,03a2e3624h
2311	DD	0b1670a0ch,0b1670a0ch
2312	DD	00fe75793h,00fe75793h
2313	DD	0d296eeb4h,0d296eeb4h
2314	DD	09e919b1bh,09e919b1bh
2315	DD	04fc5c080h,04fc5c080h
2316	DD	0a220dc61h,0a220dc61h
2317	DD	0694b775ah,0694b775ah
2318	DD	0161a121ch,0161a121ch
2319	DD	00aba93e2h,00aba93e2h
2320	DD	0e52aa0c0h,0e52aa0c0h
2321	DD	043e0223ch,043e0223ch
2322	DD	01d171b12h,01d171b12h
2323	DD	00b0d090eh,00b0d090eh
2324	DD	0adc78bf2h,0adc78bf2h
2325	DD	0b9a8b62dh,0b9a8b62dh
2326	DD	0c8a91e14h,0c8a91e14h
2327	DD	08519f157h,08519f157h
2328	DD	04c0775afh,04c0775afh
2329	DD	0bbdd99eeh,0bbdd99eeh
2330	DD	0fd607fa3h,0fd607fa3h
2331	DD	09f2601f7h,09f2601f7h
2332	DD	0bcf5725ch,0bcf5725ch
2333	DD	0c53b6644h,0c53b6644h
2334	DD	0347efb5bh,0347efb5bh
2335	DD	07629438bh,07629438bh
2336	DD	0dcc623cbh,0dcc623cbh
2337	DD	068fcedb6h,068fcedb6h
2338	DD	063f1e4b8h,063f1e4b8h
2339	DD	0cadc31d7h,0cadc31d7h
2340	DD	010856342h,010856342h
2341	DD	040229713h,040229713h
2342	DD	02011c684h,02011c684h
2343	DD	07d244a85h,07d244a85h
2344	DD	0f83dbbd2h,0f83dbbd2h
2345	DD	01132f9aeh,01132f9aeh
2346	DD	06da129c7h,06da129c7h
2347	DD	04b2f9e1dh,04b2f9e1dh
2348	DD	0f330b2dch,0f330b2dch
2349	DD	0ec52860dh,0ec52860dh
2350	DD	0d0e3c177h,0d0e3c177h
2351	DD	06c16b32bh,06c16b32bh
2352	DD	099b970a9h,099b970a9h
2353	DD	0fa489411h,0fa489411h
2354	DD	02264e947h,02264e947h
2355	DD	0c48cfca8h,0c48cfca8h
2356	DD	01a3ff0a0h,01a3ff0a0h
2357	DD	0d82c7d56h,0d82c7d56h
2358	DD	0ef903322h,0ef903322h
2359	DD	0c74e4987h,0c74e4987h
2360	DD	0c1d138d9h,0c1d138d9h
2361	DD	0fea2ca8ch,0fea2ca8ch
2362	DD	0360bd498h,0360bd498h
2363	DD	0cf81f5a6h,0cf81f5a6h
2364	DD	028de7aa5h,028de7aa5h
2365	DD	0268eb7dah,0268eb7dah
2366	DD	0a4bfad3fh,0a4bfad3fh
2367	DD	0e49d3a2ch,0e49d3a2ch
2368	DD	00d927850h,00d927850h
2369	DD	09bcc5f6ah,09bcc5f6ah
2370	DD	062467e54h,062467e54h
2371	DD	0c2138df6h,0c2138df6h
2372	DD	0e8b8d890h,0e8b8d890h
2373	DD	05ef7392eh,05ef7392eh
2374	DD	0f5afc382h,0f5afc382h
2375	DD	0be805d9fh,0be805d9fh
2376	DD	07c93d069h,07c93d069h
2377	DD	0a92dd56fh,0a92dd56fh
2378	DD	0b31225cfh,0b31225cfh
2379	DD	03b99acc8h,03b99acc8h
2380	DD	0a77d1810h,0a77d1810h
2381	DD	06e639ce8h,06e639ce8h
2382	DD	07bbb3bdbh,07bbb3bdbh
2383	DD	0097826cdh,0097826cdh
2384	DD	0f418596eh,0f418596eh
2385	DD	001b79aech,001b79aech
2386	DD	0a89a4f83h,0a89a4f83h
2387	DD	0656e95e6h,0656e95e6h
2388	DD	07ee6ffaah,07ee6ffaah
2389	DD	008cfbc21h,008cfbc21h
2390	DD	0e6e815efh,0e6e815efh
2391	DD	0d99be7bah,0d99be7bah
2392	DD	0ce366f4ah,0ce366f4ah
2393	DD	0d4099feah,0d4099feah
2394	DD	0d67cb029h,0d67cb029h
2395	DD	0afb2a431h,0afb2a431h
2396	DD	031233f2ah,031233f2ah
2397	DD	03094a5c6h,03094a5c6h
2398	DD	0c066a235h,0c066a235h
2399	DD	037bc4e74h,037bc4e74h
2400	DD	0a6ca82fch,0a6ca82fch
2401	DD	0b0d090e0h,0b0d090e0h
2402	DD	015d8a733h,015d8a733h
2403	DD	04a9804f1h,04a9804f1h
2404	DD	0f7daec41h,0f7daec41h
2405	DD	00e50cd7fh,00e50cd7fh
2406	DD	02ff69117h,02ff69117h
2407	DD	08dd64d76h,08dd64d76h
2408	DD	04db0ef43h,04db0ef43h
2409	DD	0544daacch,0544daacch
2410	DD	0df0496e4h,0df0496e4h
2411	DD	0e3b5d19eh,0e3b5d19eh
2412	DD	01b886a4ch,01b886a4ch
2413	DD	0b81f2cc1h,0b81f2cc1h
2414	DD	07f516546h,07f516546h
2415	DD	004ea5e9dh,004ea5e9dh
2416	DD	05d358c01h,05d358c01h
2417	DD	0737487fah,0737487fah
2418	DD	02e410bfbh,02e410bfbh
2419	DD	05a1d67b3h,05a1d67b3h
2420	DD	052d2db92h,052d2db92h
2421	DD	0335610e9h,0335610e9h
2422	DD	01347d66dh,01347d66dh
2423	DD	08c61d79ah,08c61d79ah
2424	DD	07a0ca137h,07a0ca137h
2425	DD	08e14f859h,08e14f859h
2426	DD	0893c13ebh,0893c13ebh
2427	DD	0ee27a9ceh,0ee27a9ceh
2428	DD	035c961b7h,035c961b7h
2429	DD	0ede51ce1h,0ede51ce1h
2430	DD	03cb1477ah,03cb1477ah
2431	DD	059dfd29ch,059dfd29ch
2432	DD	03f73f255h,03f73f255h
2433	DD	079ce1418h,079ce1418h
2434	DD	0bf37c773h,0bf37c773h
2435	DD	0eacdf753h,0eacdf753h
2436	DD	05baafd5fh,05baafd5fh
2437	DD	0146f3ddfh,0146f3ddfh
2438	DD	086db4478h,086db4478h
2439	DD	081f3afcah,081f3afcah
2440	DD	03ec468b9h,03ec468b9h
2441	DD	02c342438h,02c342438h
2442	DD	05f40a3c2h,05f40a3c2h
2443	DD	072c31d16h,072c31d16h
2444	DD	00c25e2bch,00c25e2bch
2445	DD	08b493c28h,08b493c28h
2446	DD	041950dffh,041950dffh
2447	DD	07101a839h,07101a839h
2448	DD	0deb30c08h,0deb30c08h
2449	DD	09ce4b4d8h,09ce4b4d8h
2450	DD	090c15664h,090c15664h
2451	DD	06184cb7bh,06184cb7bh
2452	DD	070b632d5h,070b632d5h
2453	DD	0745c6c48h,0745c6c48h
2454	DD	04257b8d0h,04257b8d0h
2455DB	052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2456DB	0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2457DB	07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2458DB	034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2459DB	054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2460DB	0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2461DB	008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2462DB	076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2463DB	072h,0f8h,0f6h,064h,086h,068h,098h,016h
2464DB	0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2465DB	06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2466DB	05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2467DB	090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2468DB	0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2469DB	0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2470DB	0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2471DB	03ah,091h,011h,041h,04fh,067h,0dch,0eah
2472DB	097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2473DB	096h,0ach,074h,022h,0e7h,0adh,035h,085h
2474DB	0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2475DB	047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2476DB	06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2477DB	0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2478DB	09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2479DB	01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2480DB	0b1h,012h,010h,059h,027h,080h,0ech,05fh
2481DB	060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2482DB	02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2483DB	0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2484DB	0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2485DB	017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2486DB	0e1h,069h,014h,063h,055h,021h,00ch,07dh
2487	DD	080808080h,080808080h,0fefefefeh,0fefefefeh
2488	DD	01b1b1b1bh,01b1b1b1bh,0,0
2489DB	052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2490DB	0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2491DB	07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2492DB	034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2493DB	054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2494DB	0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2495DB	008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2496DB	076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2497DB	072h,0f8h,0f6h,064h,086h,068h,098h,016h
2498DB	0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2499DB	06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2500DB	05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2501DB	090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2502DB	0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2503DB	0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2504DB	0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2505DB	03ah,091h,011h,041h,04fh,067h,0dch,0eah
2506DB	097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2507DB	096h,0ach,074h,022h,0e7h,0adh,035h,085h
2508DB	0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2509DB	047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2510DB	06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2511DB	0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2512DB	09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2513DB	01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2514DB	0b1h,012h,010h,059h,027h,080h,0ech,05fh
2515DB	060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2516DB	02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2517DB	0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2518DB	0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2519DB	017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2520DB	0e1h,069h,014h,063h,055h,021h,00ch,07dh
2521	DD	080808080h,080808080h,0fefefefeh,0fefefefeh
2522	DD	01b1b1b1bh,01b1b1b1bh,0,0
2523DB	052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2524DB	0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2525DB	07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2526DB	034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2527DB	054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2528DB	0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2529DB	008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2530DB	076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2531DB	072h,0f8h,0f6h,064h,086h,068h,098h,016h
2532DB	0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2533DB	06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2534DB	05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2535DB	090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2536DB	0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2537DB	0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2538DB	0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2539DB	03ah,091h,011h,041h,04fh,067h,0dch,0eah
2540DB	097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2541DB	096h,0ach,074h,022h,0e7h,0adh,035h,085h
2542DB	0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2543DB	047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2544DB	06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2545DB	0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2546DB	09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2547DB	01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2548DB	0b1h,012h,010h,059h,027h,080h,0ech,05fh
2549DB	060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2550DB	02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2551DB	0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2552DB	0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2553DB	017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2554DB	0e1h,069h,014h,063h,055h,021h,00ch,07dh
2555	DD	080808080h,080808080h,0fefefefeh,0fefefefeh
2556	DD	01b1b1b1bh,01b1b1b1bh,0,0
2557DB	052h,009h,06ah,0d5h,030h,036h,0a5h,038h
2558DB	0bfh,040h,0a3h,09eh,081h,0f3h,0d7h,0fbh
2559DB	07ch,0e3h,039h,082h,09bh,02fh,0ffh,087h
2560DB	034h,08eh,043h,044h,0c4h,0deh,0e9h,0cbh
2561DB	054h,07bh,094h,032h,0a6h,0c2h,023h,03dh
2562DB	0eeh,04ch,095h,00bh,042h,0fah,0c3h,04eh
2563DB	008h,02eh,0a1h,066h,028h,0d9h,024h,0b2h
2564DB	076h,05bh,0a2h,049h,06dh,08bh,0d1h,025h
2565DB	072h,0f8h,0f6h,064h,086h,068h,098h,016h
2566DB	0d4h,0a4h,05ch,0cch,05dh,065h,0b6h,092h
2567DB	06ch,070h,048h,050h,0fdh,0edh,0b9h,0dah
2568DB	05eh,015h,046h,057h,0a7h,08dh,09dh,084h
2569DB	090h,0d8h,0abh,000h,08ch,0bch,0d3h,00ah
2570DB	0f7h,0e4h,058h,005h,0b8h,0b3h,045h,006h
2571DB	0d0h,02ch,01eh,08fh,0cah,03fh,00fh,002h
2572DB	0c1h,0afh,0bdh,003h,001h,013h,08ah,06bh
2573DB	03ah,091h,011h,041h,04fh,067h,0dch,0eah
2574DB	097h,0f2h,0cfh,0ceh,0f0h,0b4h,0e6h,073h
2575DB	096h,0ach,074h,022h,0e7h,0adh,035h,085h
2576DB	0e2h,0f9h,037h,0e8h,01ch,075h,0dfh,06eh
2577DB	047h,0f1h,01ah,071h,01dh,029h,0c5h,089h
2578DB	06fh,0b7h,062h,00eh,0aah,018h,0beh,01bh
2579DB	0fch,056h,03eh,04bh,0c6h,0d2h,079h,020h
2580DB	09ah,0dbh,0c0h,0feh,078h,0cdh,05ah,0f4h
2581DB	01fh,0ddh,0a8h,033h,088h,007h,0c7h,031h
2582DB	0b1h,012h,010h,059h,027h,080h,0ech,05fh
2583DB	060h,051h,07fh,0a9h,019h,0b5h,04ah,00dh
2584DB	02dh,0e5h,07ah,09fh,093h,0c9h,09ch,0efh
2585DB	0a0h,0e0h,03bh,04dh,0aeh,02ah,0f5h,0b0h
2586DB	0c8h,0ebh,0bbh,03ch,083h,053h,099h,061h
2587DB	017h,02bh,004h,07eh,0bah,077h,0d6h,026h
2588DB	0e1h,069h,014h,063h,055h,021h,00ch,07dh
2589	DD	080808080h,080808080h,0fefefefeh,0fefefefeh
2590	DD	01b1b1b1bh,01b1b1b1bh,0,0
2591DB	65,69,83,32,102,111,114,32,120,56,54,95,54,52,44,32
2592DB	67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
2593DB	112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
2594DB	62,0
2595ALIGN	64
2596EXTERN	__imp_RtlVirtualUnwind:NEAR
2597
2598ALIGN	16
2599block_se_handler	PROC PRIVATE
2600	push	rsi
2601	push	rdi
2602	push	rbx
2603	push	rbp
2604	push	r12
2605	push	r13
2606	push	r14
2607	push	r15
2608	pushfq
2609	sub	rsp,64
2610
2611	mov	rax,QWORD PTR[120+r8]
2612	mov	rbx,QWORD PTR[248+r8]
2613
2614	mov	rsi,QWORD PTR[8+r9]
2615	mov	r11,QWORD PTR[56+r9]
2616
2617	mov	r10d,DWORD PTR[r11]
2618	lea	r10,QWORD PTR[r10*1+rsi]
2619	cmp	rbx,r10
2620	jb	$L$in_block_prologue
2621
2622	mov	rax,QWORD PTR[152+r8]
2623
2624	mov	r10d,DWORD PTR[4+r11]
2625	lea	r10,QWORD PTR[r10*1+rsi]
2626	cmp	rbx,r10
2627	jae	$L$in_block_prologue
2628
2629	mov	rax,QWORD PTR[24+rax]
2630	lea	rax,QWORD PTR[48+rax]
2631
2632	mov	rbx,QWORD PTR[((-8))+rax]
2633	mov	rbp,QWORD PTR[((-16))+rax]
2634	mov	r12,QWORD PTR[((-24))+rax]
2635	mov	r13,QWORD PTR[((-32))+rax]
2636	mov	r14,QWORD PTR[((-40))+rax]
2637	mov	r15,QWORD PTR[((-48))+rax]
2638	mov	QWORD PTR[144+r8],rbx
2639	mov	QWORD PTR[160+r8],rbp
2640	mov	QWORD PTR[216+r8],r12
2641	mov	QWORD PTR[224+r8],r13
2642	mov	QWORD PTR[232+r8],r14
2643	mov	QWORD PTR[240+r8],r15
2644
2645$L$in_block_prologue::
2646	mov	rdi,QWORD PTR[8+rax]
2647	mov	rsi,QWORD PTR[16+rax]
2648	mov	QWORD PTR[152+r8],rax
2649	mov	QWORD PTR[168+r8],rsi
2650	mov	QWORD PTR[176+r8],rdi
2651
2652	jmp	$L$common_seh_exit
2653block_se_handler	ENDP
2654
2655
2656ALIGN	16
2657key_se_handler	PROC PRIVATE
2658	push	rsi
2659	push	rdi
2660	push	rbx
2661	push	rbp
2662	push	r12
2663	push	r13
2664	push	r14
2665	push	r15
2666	pushfq
2667	sub	rsp,64
2668
2669	mov	rax,QWORD PTR[120+r8]
2670	mov	rbx,QWORD PTR[248+r8]
2671
2672	mov	rsi,QWORD PTR[8+r9]
2673	mov	r11,QWORD PTR[56+r9]
2674
2675	mov	r10d,DWORD PTR[r11]
2676	lea	r10,QWORD PTR[r10*1+rsi]
2677	cmp	rbx,r10
2678	jb	$L$in_key_prologue
2679
2680	mov	rax,QWORD PTR[152+r8]
2681
2682	mov	r10d,DWORD PTR[4+r11]
2683	lea	r10,QWORD PTR[r10*1+rsi]
2684	cmp	rbx,r10
2685	jae	$L$in_key_prologue
2686
2687	lea	rax,QWORD PTR[56+rax]
2688
2689	mov	rbx,QWORD PTR[((-8))+rax]
2690	mov	rbp,QWORD PTR[((-16))+rax]
2691	mov	r12,QWORD PTR[((-24))+rax]
2692	mov	r13,QWORD PTR[((-32))+rax]
2693	mov	r14,QWORD PTR[((-40))+rax]
2694	mov	r15,QWORD PTR[((-48))+rax]
2695	mov	QWORD PTR[144+r8],rbx
2696	mov	QWORD PTR[160+r8],rbp
2697	mov	QWORD PTR[216+r8],r12
2698	mov	QWORD PTR[224+r8],r13
2699	mov	QWORD PTR[232+r8],r14
2700	mov	QWORD PTR[240+r8],r15
2701
2702$L$in_key_prologue::
2703	mov	rdi,QWORD PTR[8+rax]
2704	mov	rsi,QWORD PTR[16+rax]
2705	mov	QWORD PTR[152+r8],rax
2706	mov	QWORD PTR[168+r8],rsi
2707	mov	QWORD PTR[176+r8],rdi
2708
2709	jmp	$L$common_seh_exit
2710key_se_handler	ENDP
2711
2712
2713ALIGN	16
2714cbc_se_handler	PROC PRIVATE
2715	push	rsi
2716	push	rdi
2717	push	rbx
2718	push	rbp
2719	push	r12
2720	push	r13
2721	push	r14
2722	push	r15
2723	pushfq
2724	sub	rsp,64
2725
2726	mov	rax,QWORD PTR[120+r8]
2727	mov	rbx,QWORD PTR[248+r8]
2728
2729	lea	r10,QWORD PTR[$L$cbc_prologue]
2730	cmp	rbx,r10
2731	jb	$L$in_cbc_prologue
2732
2733	lea	r10,QWORD PTR[$L$cbc_fast_body]
2734	cmp	rbx,r10
2735	jb	$L$in_cbc_frame_setup
2736
2737	lea	r10,QWORD PTR[$L$cbc_slow_prologue]
2738	cmp	rbx,r10
2739	jb	$L$in_cbc_body
2740
2741	lea	r10,QWORD PTR[$L$cbc_slow_body]
2742	cmp	rbx,r10
2743	jb	$L$in_cbc_frame_setup
2744
2745$L$in_cbc_body::
2746	mov	rax,QWORD PTR[152+r8]
2747
2748	lea	r10,QWORD PTR[$L$cbc_epilogue]
2749	cmp	rbx,r10
2750	jae	$L$in_cbc_prologue
2751
2752	lea	rax,QWORD PTR[8+rax]
2753
2754	lea	r10,QWORD PTR[$L$cbc_popfq]
2755	cmp	rbx,r10
2756	jae	$L$in_cbc_prologue
2757
2758	mov	rax,QWORD PTR[8+rax]
2759	lea	rax,QWORD PTR[56+rax]
2760
2761$L$in_cbc_frame_setup::
2762	mov	rbx,QWORD PTR[((-16))+rax]
2763	mov	rbp,QWORD PTR[((-24))+rax]
2764	mov	r12,QWORD PTR[((-32))+rax]
2765	mov	r13,QWORD PTR[((-40))+rax]
2766	mov	r14,QWORD PTR[((-48))+rax]
2767	mov	r15,QWORD PTR[((-56))+rax]
2768	mov	QWORD PTR[144+r8],rbx
2769	mov	QWORD PTR[160+r8],rbp
2770	mov	QWORD PTR[216+r8],r12
2771	mov	QWORD PTR[224+r8],r13
2772	mov	QWORD PTR[232+r8],r14
2773	mov	QWORD PTR[240+r8],r15
2774
2775$L$in_cbc_prologue::
2776	mov	rdi,QWORD PTR[8+rax]
2777	mov	rsi,QWORD PTR[16+rax]
2778	mov	QWORD PTR[152+r8],rax
2779	mov	QWORD PTR[168+r8],rsi
2780	mov	QWORD PTR[176+r8],rdi
2781
2782$L$common_seh_exit::
2783
2784	mov	rdi,QWORD PTR[40+r9]
2785	mov	rsi,r8
2786	mov	ecx,154
2787	DD	0a548f3fch
2788
2789	mov	rsi,r9
2790	xor	rcx,rcx
2791	mov	rdx,QWORD PTR[8+rsi]
2792	mov	r8,QWORD PTR[rsi]
2793	mov	r9,QWORD PTR[16+rsi]
2794	mov	r10,QWORD PTR[40+rsi]
2795	lea	r11,QWORD PTR[56+rsi]
2796	lea	r12,QWORD PTR[24+rsi]
2797	mov	QWORD PTR[32+rsp],r10
2798	mov	QWORD PTR[40+rsp],r11
2799	mov	QWORD PTR[48+rsp],r12
2800	mov	QWORD PTR[56+rsp],rcx
2801	call	QWORD PTR[__imp_RtlVirtualUnwind]
2802
2803	mov	eax,1
2804	add	rsp,64
2805	popfq
2806	pop	r15
2807	pop	r14
2808	pop	r13
2809	pop	r12
2810	pop	rbp
2811	pop	rbx
2812	pop	rdi
2813	pop	rsi
2814	DB	0F3h,0C3h		;repret
2815cbc_se_handler	ENDP
2816
2817.text$	ENDS
2818.pdata	SEGMENT READONLY ALIGN(4)
2819ALIGN	4
2820	DD	imagerel $L$SEH_begin_asm_AES_encrypt
2821	DD	imagerel $L$SEH_end_asm_AES_encrypt
2822	DD	imagerel $L$SEH_info_asm_AES_encrypt
2823
2824	DD	imagerel $L$SEH_begin_asm_AES_decrypt
2825	DD	imagerel $L$SEH_end_asm_AES_decrypt
2826	DD	imagerel $L$SEH_info_asm_AES_decrypt
2827
2828	DD	imagerel $L$SEH_begin_asm_AES_set_encrypt_key
2829	DD	imagerel $L$SEH_end_asm_AES_set_encrypt_key
2830	DD	imagerel $L$SEH_info_asm_AES_set_encrypt_key
2831
2832	DD	imagerel $L$SEH_begin_asm_AES_set_decrypt_key
2833	DD	imagerel $L$SEH_end_asm_AES_set_decrypt_key
2834	DD	imagerel $L$SEH_info_asm_AES_set_decrypt_key
2835
2836	DD	imagerel $L$SEH_begin_asm_AES_cbc_encrypt
2837	DD	imagerel $L$SEH_end_asm_AES_cbc_encrypt
2838	DD	imagerel $L$SEH_info_asm_AES_cbc_encrypt
2839
2840.pdata	ENDS
2841.xdata	SEGMENT READONLY ALIGN(8)
2842ALIGN	8
2843$L$SEH_info_asm_AES_encrypt::
2844DB	9,0,0,0
2845	DD	imagerel block_se_handler
2846	DD	imagerel $L$enc_prologue,imagerel $L$enc_epilogue
2847$L$SEH_info_asm_AES_decrypt::
2848DB	9,0,0,0
2849	DD	imagerel block_se_handler
2850	DD	imagerel $L$dec_prologue,imagerel $L$dec_epilogue
2851$L$SEH_info_asm_AES_set_encrypt_key::
2852DB	9,0,0,0
2853	DD	imagerel key_se_handler
2854	DD	imagerel $L$enc_key_prologue,imagerel $L$enc_key_epilogue
2855$L$SEH_info_asm_AES_set_decrypt_key::
2856DB	9,0,0,0
2857	DD	imagerel key_se_handler
2858	DD	imagerel $L$dec_key_prologue,imagerel $L$dec_key_epilogue
2859$L$SEH_info_asm_AES_cbc_encrypt::
2860DB	9,0,0,0
2861	DD	imagerel cbc_se_handler
2862
2863.xdata	ENDS
2864END
2865