1OPTION	DOTNAME
2.text$	SEGMENT ALIGN(256) 'CODE'
3ALIGN	16
4
5PUBLIC	rc4_md5_enc
6
7rc4_md5_enc	PROC PUBLIC
8	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
9	mov	QWORD PTR[16+rsp],rsi
10	mov	rax,rsp
11$L$SEH_begin_rc4_md5_enc::
12	mov	rdi,rcx
13	mov	rsi,rdx
14	mov	rdx,r8
15	mov	rcx,r9
16	mov	r8,QWORD PTR[40+rsp]
17	mov	r9,QWORD PTR[48+rsp]
18
19
20	cmp	r9,0
21	je	$L$abort
22	push	rbx
23	push	rbp
24	push	r12
25	push	r13
26	push	r14
27	push	r15
28	sub	rsp,40
29$L$body::
30	mov	r11,rcx
31	mov	r12,r9
32	mov	r13,rsi
33	mov	r14,rdx
34	mov	r15,r8
35	xor	rbp,rbp
36	xor	rcx,rcx
37
38	lea	rdi,QWORD PTR[8+rdi]
39	mov	bpl,BYTE PTR[((-8))+rdi]
40	mov	cl,BYTE PTR[((-4))+rdi]
41
42	inc	bpl
43	sub	r14,r13
44	mov	eax,DWORD PTR[rbp*4+rdi]
45	add	cl,al
46	lea	rsi,QWORD PTR[rbp*4+rdi]
47	shl	r12,6
48	add	r12,r15
49	mov	QWORD PTR[16+rsp],r12
50
51	mov	QWORD PTR[24+rsp],r11
52	mov	r8d,DWORD PTR[r11]
53	mov	r9d,DWORD PTR[4+r11]
54	mov	r10d,DWORD PTR[8+r11]
55	mov	r11d,DWORD PTR[12+r11]
56	jmp	$L$oop
57
58ALIGN	16
59$L$oop::
60	mov	DWORD PTR[rsp],r8d
61	mov	DWORD PTR[4+rsp],r9d
62	mov	DWORD PTR[8+rsp],r10d
63	mov	r12d,r11d
64	mov	DWORD PTR[12+rsp],r11d
65	pxor	xmm0,xmm0
66	mov	edx,DWORD PTR[rcx*4+rdi]
67	xor	r12d,r10d
68	mov	DWORD PTR[rcx*4+rdi],eax
69	and	r12d,r9d
70	add	r8d,DWORD PTR[r15]
71	add	al,dl
72	mov	ebx,DWORD PTR[4+rsi]
73	add	r8d,3614090360
74	xor	r12d,r11d
75	movzx	eax,al
76	mov	DWORD PTR[rsi],edx
77	add	r8d,r12d
78	add	cl,bl
79	rol	r8d,7
80	mov	r12d,r10d
81	movd	xmm0,DWORD PTR[rax*4+rdi]
82
83	add	r8d,r9d
84	pxor	xmm1,xmm1
85	mov	edx,DWORD PTR[rcx*4+rdi]
86	xor	r12d,r9d
87	mov	DWORD PTR[rcx*4+rdi],ebx
88	and	r12d,r8d
89	add	r11d,DWORD PTR[4+r15]
90	add	bl,dl
91	mov	eax,DWORD PTR[8+rsi]
92	add	r11d,3905402710
93	xor	r12d,r10d
94	movzx	ebx,bl
95	mov	DWORD PTR[4+rsi],edx
96	add	r11d,r12d
97	add	cl,al
98	rol	r11d,12
99	mov	r12d,r9d
100	movd	xmm1,DWORD PTR[rbx*4+rdi]
101
102	add	r11d,r8d
103	mov	edx,DWORD PTR[rcx*4+rdi]
104	xor	r12d,r8d
105	mov	DWORD PTR[rcx*4+rdi],eax
106	and	r12d,r11d
107	add	r10d,DWORD PTR[8+r15]
108	add	al,dl
109	mov	ebx,DWORD PTR[12+rsi]
110	add	r10d,606105819
111	xor	r12d,r9d
112	movzx	eax,al
113	mov	DWORD PTR[8+rsi],edx
114	add	r10d,r12d
115	add	cl,bl
116	rol	r10d,17
117	mov	r12d,r8d
118	pinsrw	xmm0,WORD PTR[rax*4+rdi],1
119
120	add	r10d,r11d
121	mov	edx,DWORD PTR[rcx*4+rdi]
122	xor	r12d,r11d
123	mov	DWORD PTR[rcx*4+rdi],ebx
124	and	r12d,r10d
125	add	r9d,DWORD PTR[12+r15]
126	add	bl,dl
127	mov	eax,DWORD PTR[16+rsi]
128	add	r9d,3250441966
129	xor	r12d,r8d
130	movzx	ebx,bl
131	mov	DWORD PTR[12+rsi],edx
132	add	r9d,r12d
133	add	cl,al
134	rol	r9d,22
135	mov	r12d,r11d
136	pinsrw	xmm1,WORD PTR[rbx*4+rdi],1
137
138	add	r9d,r10d
139	mov	edx,DWORD PTR[rcx*4+rdi]
140	xor	r12d,r10d
141	mov	DWORD PTR[rcx*4+rdi],eax
142	and	r12d,r9d
143	add	r8d,DWORD PTR[16+r15]
144	add	al,dl
145	mov	ebx,DWORD PTR[20+rsi]
146	add	r8d,4118548399
147	xor	r12d,r11d
148	movzx	eax,al
149	mov	DWORD PTR[16+rsi],edx
150	add	r8d,r12d
151	add	cl,bl
152	rol	r8d,7
153	mov	r12d,r10d
154	pinsrw	xmm0,WORD PTR[rax*4+rdi],2
155
156	add	r8d,r9d
157	mov	edx,DWORD PTR[rcx*4+rdi]
158	xor	r12d,r9d
159	mov	DWORD PTR[rcx*4+rdi],ebx
160	and	r12d,r8d
161	add	r11d,DWORD PTR[20+r15]
162	add	bl,dl
163	mov	eax,DWORD PTR[24+rsi]
164	add	r11d,1200080426
165	xor	r12d,r10d
166	movzx	ebx,bl
167	mov	DWORD PTR[20+rsi],edx
168	add	r11d,r12d
169	add	cl,al
170	rol	r11d,12
171	mov	r12d,r9d
172	pinsrw	xmm1,WORD PTR[rbx*4+rdi],2
173
174	add	r11d,r8d
175	mov	edx,DWORD PTR[rcx*4+rdi]
176	xor	r12d,r8d
177	mov	DWORD PTR[rcx*4+rdi],eax
178	and	r12d,r11d
179	add	r10d,DWORD PTR[24+r15]
180	add	al,dl
181	mov	ebx,DWORD PTR[28+rsi]
182	add	r10d,2821735955
183	xor	r12d,r9d
184	movzx	eax,al
185	mov	DWORD PTR[24+rsi],edx
186	add	r10d,r12d
187	add	cl,bl
188	rol	r10d,17
189	mov	r12d,r8d
190	pinsrw	xmm0,WORD PTR[rax*4+rdi],3
191
192	add	r10d,r11d
193	mov	edx,DWORD PTR[rcx*4+rdi]
194	xor	r12d,r11d
195	mov	DWORD PTR[rcx*4+rdi],ebx
196	and	r12d,r10d
197	add	r9d,DWORD PTR[28+r15]
198	add	bl,dl
199	mov	eax,DWORD PTR[32+rsi]
200	add	r9d,4249261313
201	xor	r12d,r8d
202	movzx	ebx,bl
203	mov	DWORD PTR[28+rsi],edx
204	add	r9d,r12d
205	add	cl,al
206	rol	r9d,22
207	mov	r12d,r11d
208	pinsrw	xmm1,WORD PTR[rbx*4+rdi],3
209
210	add	r9d,r10d
211	mov	edx,DWORD PTR[rcx*4+rdi]
212	xor	r12d,r10d
213	mov	DWORD PTR[rcx*4+rdi],eax
214	and	r12d,r9d
215	add	r8d,DWORD PTR[32+r15]
216	add	al,dl
217	mov	ebx,DWORD PTR[36+rsi]
218	add	r8d,1770035416
219	xor	r12d,r11d
220	movzx	eax,al
221	mov	DWORD PTR[32+rsi],edx
222	add	r8d,r12d
223	add	cl,bl
224	rol	r8d,7
225	mov	r12d,r10d
226	pinsrw	xmm0,WORD PTR[rax*4+rdi],4
227
228	add	r8d,r9d
229	mov	edx,DWORD PTR[rcx*4+rdi]
230	xor	r12d,r9d
231	mov	DWORD PTR[rcx*4+rdi],ebx
232	and	r12d,r8d
233	add	r11d,DWORD PTR[36+r15]
234	add	bl,dl
235	mov	eax,DWORD PTR[40+rsi]
236	add	r11d,2336552879
237	xor	r12d,r10d
238	movzx	ebx,bl
239	mov	DWORD PTR[36+rsi],edx
240	add	r11d,r12d
241	add	cl,al
242	rol	r11d,12
243	mov	r12d,r9d
244	pinsrw	xmm1,WORD PTR[rbx*4+rdi],4
245
246	add	r11d,r8d
247	mov	edx,DWORD PTR[rcx*4+rdi]
248	xor	r12d,r8d
249	mov	DWORD PTR[rcx*4+rdi],eax
250	and	r12d,r11d
251	add	r10d,DWORD PTR[40+r15]
252	add	al,dl
253	mov	ebx,DWORD PTR[44+rsi]
254	add	r10d,4294925233
255	xor	r12d,r9d
256	movzx	eax,al
257	mov	DWORD PTR[40+rsi],edx
258	add	r10d,r12d
259	add	cl,bl
260	rol	r10d,17
261	mov	r12d,r8d
262	pinsrw	xmm0,WORD PTR[rax*4+rdi],5
263
264	add	r10d,r11d
265	mov	edx,DWORD PTR[rcx*4+rdi]
266	xor	r12d,r11d
267	mov	DWORD PTR[rcx*4+rdi],ebx
268	and	r12d,r10d
269	add	r9d,DWORD PTR[44+r15]
270	add	bl,dl
271	mov	eax,DWORD PTR[48+rsi]
272	add	r9d,2304563134
273	xor	r12d,r8d
274	movzx	ebx,bl
275	mov	DWORD PTR[44+rsi],edx
276	add	r9d,r12d
277	add	cl,al
278	rol	r9d,22
279	mov	r12d,r11d
280	pinsrw	xmm1,WORD PTR[rbx*4+rdi],5
281
282	add	r9d,r10d
283	mov	edx,DWORD PTR[rcx*4+rdi]
284	xor	r12d,r10d
285	mov	DWORD PTR[rcx*4+rdi],eax
286	and	r12d,r9d
287	add	r8d,DWORD PTR[48+r15]
288	add	al,dl
289	mov	ebx,DWORD PTR[52+rsi]
290	add	r8d,1804603682
291	xor	r12d,r11d
292	movzx	eax,al
293	mov	DWORD PTR[48+rsi],edx
294	add	r8d,r12d
295	add	cl,bl
296	rol	r8d,7
297	mov	r12d,r10d
298	pinsrw	xmm0,WORD PTR[rax*4+rdi],6
299
300	add	r8d,r9d
301	mov	edx,DWORD PTR[rcx*4+rdi]
302	xor	r12d,r9d
303	mov	DWORD PTR[rcx*4+rdi],ebx
304	and	r12d,r8d
305	add	r11d,DWORD PTR[52+r15]
306	add	bl,dl
307	mov	eax,DWORD PTR[56+rsi]
308	add	r11d,4254626195
309	xor	r12d,r10d
310	movzx	ebx,bl
311	mov	DWORD PTR[52+rsi],edx
312	add	r11d,r12d
313	add	cl,al
314	rol	r11d,12
315	mov	r12d,r9d
316	pinsrw	xmm1,WORD PTR[rbx*4+rdi],6
317
318	add	r11d,r8d
319	mov	edx,DWORD PTR[rcx*4+rdi]
320	xor	r12d,r8d
321	mov	DWORD PTR[rcx*4+rdi],eax
322	and	r12d,r11d
323	add	r10d,DWORD PTR[56+r15]
324	add	al,dl
325	mov	ebx,DWORD PTR[60+rsi]
326	add	r10d,2792965006
327	xor	r12d,r9d
328	movzx	eax,al
329	mov	DWORD PTR[56+rsi],edx
330	add	r10d,r12d
331	add	cl,bl
332	rol	r10d,17
333	mov	r12d,r8d
334	pinsrw	xmm0,WORD PTR[rax*4+rdi],7
335
336	add	r10d,r11d
337	movdqu	xmm2,XMMWORD PTR[r13]
338	mov	edx,DWORD PTR[rcx*4+rdi]
339	xor	r12d,r11d
340	mov	DWORD PTR[rcx*4+rdi],ebx
341	and	r12d,r10d
342	add	r9d,DWORD PTR[60+r15]
343	add	bl,dl
344	mov	eax,DWORD PTR[64+rsi]
345	add	r9d,1236535329
346	xor	r12d,r8d
347	movzx	ebx,bl
348	mov	DWORD PTR[60+rsi],edx
349	add	r9d,r12d
350	add	cl,al
351	rol	r9d,22
352	mov	r12d,r10d
353	pinsrw	xmm1,WORD PTR[rbx*4+rdi],7
354
355	add	r9d,r10d
356	psllq	xmm1,8
357	pxor	xmm2,xmm0
358	pxor	xmm2,xmm1
359	pxor	xmm0,xmm0
360	mov	edx,DWORD PTR[rcx*4+rdi]
361	xor	r12d,r9d
362	mov	DWORD PTR[rcx*4+rdi],eax
363	and	r12d,r11d
364	add	r8d,DWORD PTR[4+r15]
365	add	al,dl
366	mov	ebx,DWORD PTR[68+rsi]
367	add	r8d,4129170786
368	xor	r12d,r10d
369	movzx	eax,al
370	mov	DWORD PTR[64+rsi],edx
371	add	r8d,r12d
372	add	cl,bl
373	rol	r8d,5
374	mov	r12d,r9d
375	movd	xmm0,DWORD PTR[rax*4+rdi]
376
377	add	r8d,r9d
378	pxor	xmm1,xmm1
379	mov	edx,DWORD PTR[rcx*4+rdi]
380	xor	r12d,r8d
381	mov	DWORD PTR[rcx*4+rdi],ebx
382	and	r12d,r10d
383	add	r11d,DWORD PTR[24+r15]
384	add	bl,dl
385	mov	eax,DWORD PTR[72+rsi]
386	add	r11d,3225465664
387	xor	r12d,r9d
388	movzx	ebx,bl
389	mov	DWORD PTR[68+rsi],edx
390	add	r11d,r12d
391	add	cl,al
392	rol	r11d,9
393	mov	r12d,r8d
394	movd	xmm1,DWORD PTR[rbx*4+rdi]
395
396	add	r11d,r8d
397	mov	edx,DWORD PTR[rcx*4+rdi]
398	xor	r12d,r11d
399	mov	DWORD PTR[rcx*4+rdi],eax
400	and	r12d,r9d
401	add	r10d,DWORD PTR[44+r15]
402	add	al,dl
403	mov	ebx,DWORD PTR[76+rsi]
404	add	r10d,643717713
405	xor	r12d,r8d
406	movzx	eax,al
407	mov	DWORD PTR[72+rsi],edx
408	add	r10d,r12d
409	add	cl,bl
410	rol	r10d,14
411	mov	r12d,r11d
412	pinsrw	xmm0,WORD PTR[rax*4+rdi],1
413
414	add	r10d,r11d
415	mov	edx,DWORD PTR[rcx*4+rdi]
416	xor	r12d,r10d
417	mov	DWORD PTR[rcx*4+rdi],ebx
418	and	r12d,r8d
419	add	r9d,DWORD PTR[r15]
420	add	bl,dl
421	mov	eax,DWORD PTR[80+rsi]
422	add	r9d,3921069994
423	xor	r12d,r11d
424	movzx	ebx,bl
425	mov	DWORD PTR[76+rsi],edx
426	add	r9d,r12d
427	add	cl,al
428	rol	r9d,20
429	mov	r12d,r10d
430	pinsrw	xmm1,WORD PTR[rbx*4+rdi],1
431
432	add	r9d,r10d
433	mov	edx,DWORD PTR[rcx*4+rdi]
434	xor	r12d,r9d
435	mov	DWORD PTR[rcx*4+rdi],eax
436	and	r12d,r11d
437	add	r8d,DWORD PTR[20+r15]
438	add	al,dl
439	mov	ebx,DWORD PTR[84+rsi]
440	add	r8d,3593408605
441	xor	r12d,r10d
442	movzx	eax,al
443	mov	DWORD PTR[80+rsi],edx
444	add	r8d,r12d
445	add	cl,bl
446	rol	r8d,5
447	mov	r12d,r9d
448	pinsrw	xmm0,WORD PTR[rax*4+rdi],2
449
450	add	r8d,r9d
451	mov	edx,DWORD PTR[rcx*4+rdi]
452	xor	r12d,r8d
453	mov	DWORD PTR[rcx*4+rdi],ebx
454	and	r12d,r10d
455	add	r11d,DWORD PTR[40+r15]
456	add	bl,dl
457	mov	eax,DWORD PTR[88+rsi]
458	add	r11d,38016083
459	xor	r12d,r9d
460	movzx	ebx,bl
461	mov	DWORD PTR[84+rsi],edx
462	add	r11d,r12d
463	add	cl,al
464	rol	r11d,9
465	mov	r12d,r8d
466	pinsrw	xmm1,WORD PTR[rbx*4+rdi],2
467
468	add	r11d,r8d
469	mov	edx,DWORD PTR[rcx*4+rdi]
470	xor	r12d,r11d
471	mov	DWORD PTR[rcx*4+rdi],eax
472	and	r12d,r9d
473	add	r10d,DWORD PTR[60+r15]
474	add	al,dl
475	mov	ebx,DWORD PTR[92+rsi]
476	add	r10d,3634488961
477	xor	r12d,r8d
478	movzx	eax,al
479	mov	DWORD PTR[88+rsi],edx
480	add	r10d,r12d
481	add	cl,bl
482	rol	r10d,14
483	mov	r12d,r11d
484	pinsrw	xmm0,WORD PTR[rax*4+rdi],3
485
486	add	r10d,r11d
487	mov	edx,DWORD PTR[rcx*4+rdi]
488	xor	r12d,r10d
489	mov	DWORD PTR[rcx*4+rdi],ebx
490	and	r12d,r8d
491	add	r9d,DWORD PTR[16+r15]
492	add	bl,dl
493	mov	eax,DWORD PTR[96+rsi]
494	add	r9d,3889429448
495	xor	r12d,r11d
496	movzx	ebx,bl
497	mov	DWORD PTR[92+rsi],edx
498	add	r9d,r12d
499	add	cl,al
500	rol	r9d,20
501	mov	r12d,r10d
502	pinsrw	xmm1,WORD PTR[rbx*4+rdi],3
503
504	add	r9d,r10d
505	mov	edx,DWORD PTR[rcx*4+rdi]
506	xor	r12d,r9d
507	mov	DWORD PTR[rcx*4+rdi],eax
508	and	r12d,r11d
509	add	r8d,DWORD PTR[36+r15]
510	add	al,dl
511	mov	ebx,DWORD PTR[100+rsi]
512	add	r8d,568446438
513	xor	r12d,r10d
514	movzx	eax,al
515	mov	DWORD PTR[96+rsi],edx
516	add	r8d,r12d
517	add	cl,bl
518	rol	r8d,5
519	mov	r12d,r9d
520	pinsrw	xmm0,WORD PTR[rax*4+rdi],4
521
522	add	r8d,r9d
523	mov	edx,DWORD PTR[rcx*4+rdi]
524	xor	r12d,r8d
525	mov	DWORD PTR[rcx*4+rdi],ebx
526	and	r12d,r10d
527	add	r11d,DWORD PTR[56+r15]
528	add	bl,dl
529	mov	eax,DWORD PTR[104+rsi]
530	add	r11d,3275163606
531	xor	r12d,r9d
532	movzx	ebx,bl
533	mov	DWORD PTR[100+rsi],edx
534	add	r11d,r12d
535	add	cl,al
536	rol	r11d,9
537	mov	r12d,r8d
538	pinsrw	xmm1,WORD PTR[rbx*4+rdi],4
539
540	add	r11d,r8d
541	mov	edx,DWORD PTR[rcx*4+rdi]
542	xor	r12d,r11d
543	mov	DWORD PTR[rcx*4+rdi],eax
544	and	r12d,r9d
545	add	r10d,DWORD PTR[12+r15]
546	add	al,dl
547	mov	ebx,DWORD PTR[108+rsi]
548	add	r10d,4107603335
549	xor	r12d,r8d
550	movzx	eax,al
551	mov	DWORD PTR[104+rsi],edx
552	add	r10d,r12d
553	add	cl,bl
554	rol	r10d,14
555	mov	r12d,r11d
556	pinsrw	xmm0,WORD PTR[rax*4+rdi],5
557
558	add	r10d,r11d
559	mov	edx,DWORD PTR[rcx*4+rdi]
560	xor	r12d,r10d
561	mov	DWORD PTR[rcx*4+rdi],ebx
562	and	r12d,r8d
563	add	r9d,DWORD PTR[32+r15]
564	add	bl,dl
565	mov	eax,DWORD PTR[112+rsi]
566	add	r9d,1163531501
567	xor	r12d,r11d
568	movzx	ebx,bl
569	mov	DWORD PTR[108+rsi],edx
570	add	r9d,r12d
571	add	cl,al
572	rol	r9d,20
573	mov	r12d,r10d
574	pinsrw	xmm1,WORD PTR[rbx*4+rdi],5
575
576	add	r9d,r10d
577	mov	edx,DWORD PTR[rcx*4+rdi]
578	xor	r12d,r9d
579	mov	DWORD PTR[rcx*4+rdi],eax
580	and	r12d,r11d
581	add	r8d,DWORD PTR[52+r15]
582	add	al,dl
583	mov	ebx,DWORD PTR[116+rsi]
584	add	r8d,2850285829
585	xor	r12d,r10d
586	movzx	eax,al
587	mov	DWORD PTR[112+rsi],edx
588	add	r8d,r12d
589	add	cl,bl
590	rol	r8d,5
591	mov	r12d,r9d
592	pinsrw	xmm0,WORD PTR[rax*4+rdi],6
593
594	add	r8d,r9d
595	mov	edx,DWORD PTR[rcx*4+rdi]
596	xor	r12d,r8d
597	mov	DWORD PTR[rcx*4+rdi],ebx
598	and	r12d,r10d
599	add	r11d,DWORD PTR[8+r15]
600	add	bl,dl
601	mov	eax,DWORD PTR[120+rsi]
602	add	r11d,4243563512
603	xor	r12d,r9d
604	movzx	ebx,bl
605	mov	DWORD PTR[116+rsi],edx
606	add	r11d,r12d
607	add	cl,al
608	rol	r11d,9
609	mov	r12d,r8d
610	pinsrw	xmm1,WORD PTR[rbx*4+rdi],6
611
612	add	r11d,r8d
613	mov	edx,DWORD PTR[rcx*4+rdi]
614	xor	r12d,r11d
615	mov	DWORD PTR[rcx*4+rdi],eax
616	and	r12d,r9d
617	add	r10d,DWORD PTR[28+r15]
618	add	al,dl
619	mov	ebx,DWORD PTR[124+rsi]
620	add	r10d,1735328473
621	xor	r12d,r8d
622	movzx	eax,al
623	mov	DWORD PTR[120+rsi],edx
624	add	r10d,r12d
625	add	cl,bl
626	rol	r10d,14
627	mov	r12d,r11d
628	pinsrw	xmm0,WORD PTR[rax*4+rdi],7
629
630	add	r10d,r11d
631	movdqu	xmm3,XMMWORD PTR[16+r13]
632	add	bpl,32
633	mov	edx,DWORD PTR[rcx*4+rdi]
634	xor	r12d,r10d
635	mov	DWORD PTR[rcx*4+rdi],ebx
636	and	r12d,r8d
637	add	r9d,DWORD PTR[48+r15]
638	add	bl,dl
639	mov	eax,DWORD PTR[rbp*4+rdi]
640	add	r9d,2368359562
641	xor	r12d,r11d
642	movzx	ebx,bl
643	mov	DWORD PTR[124+rsi],edx
644	add	r9d,r12d
645	add	cl,al
646	rol	r9d,20
647	mov	r12d,r11d
648	pinsrw	xmm1,WORD PTR[rbx*4+rdi],7
649
650	add	r9d,r10d
651	mov	rsi,rcx
652	xor	rcx,rcx
653	mov	cl,sil
654	lea	rsi,QWORD PTR[rbp*4+rdi]
655	psllq	xmm1,8
656	pxor	xmm3,xmm0
657	pxor	xmm3,xmm1
658	pxor	xmm0,xmm0
659	mov	edx,DWORD PTR[rcx*4+rdi]
660	xor	r12d,r10d
661	mov	DWORD PTR[rcx*4+rdi],eax
662	xor	r12d,r9d
663	add	r8d,DWORD PTR[20+r15]
664	add	al,dl
665	mov	ebx,DWORD PTR[4+rsi]
666	add	r8d,4294588738
667	movzx	eax,al
668	add	r8d,r12d
669	mov	DWORD PTR[rsi],edx
670	add	cl,bl
671	rol	r8d,4
672	mov	r12d,r10d
673	movd	xmm0,DWORD PTR[rax*4+rdi]
674
675	add	r8d,r9d
676	pxor	xmm1,xmm1
677	mov	edx,DWORD PTR[rcx*4+rdi]
678	xor	r12d,r9d
679	mov	DWORD PTR[rcx*4+rdi],ebx
680	xor	r12d,r8d
681	add	r11d,DWORD PTR[32+r15]
682	add	bl,dl
683	mov	eax,DWORD PTR[8+rsi]
684	add	r11d,2272392833
685	movzx	ebx,bl
686	add	r11d,r12d
687	mov	DWORD PTR[4+rsi],edx
688	add	cl,al
689	rol	r11d,11
690	mov	r12d,r9d
691	movd	xmm1,DWORD PTR[rbx*4+rdi]
692
693	add	r11d,r8d
694	mov	edx,DWORD PTR[rcx*4+rdi]
695	xor	r12d,r8d
696	mov	DWORD PTR[rcx*4+rdi],eax
697	xor	r12d,r11d
698	add	r10d,DWORD PTR[44+r15]
699	add	al,dl
700	mov	ebx,DWORD PTR[12+rsi]
701	add	r10d,1839030562
702	movzx	eax,al
703	add	r10d,r12d
704	mov	DWORD PTR[8+rsi],edx
705	add	cl,bl
706	rol	r10d,16
707	mov	r12d,r8d
708	pinsrw	xmm0,WORD PTR[rax*4+rdi],1
709
710	add	r10d,r11d
711	mov	edx,DWORD PTR[rcx*4+rdi]
712	xor	r12d,r11d
713	mov	DWORD PTR[rcx*4+rdi],ebx
714	xor	r12d,r10d
715	add	r9d,DWORD PTR[56+r15]
716	add	bl,dl
717	mov	eax,DWORD PTR[16+rsi]
718	add	r9d,4259657740
719	movzx	ebx,bl
720	add	r9d,r12d
721	mov	DWORD PTR[12+rsi],edx
722	add	cl,al
723	rol	r9d,23
724	mov	r12d,r11d
725	pinsrw	xmm1,WORD PTR[rbx*4+rdi],1
726
727	add	r9d,r10d
728	mov	edx,DWORD PTR[rcx*4+rdi]
729	xor	r12d,r10d
730	mov	DWORD PTR[rcx*4+rdi],eax
731	xor	r12d,r9d
732	add	r8d,DWORD PTR[4+r15]
733	add	al,dl
734	mov	ebx,DWORD PTR[20+rsi]
735	add	r8d,2763975236
736	movzx	eax,al
737	add	r8d,r12d
738	mov	DWORD PTR[16+rsi],edx
739	add	cl,bl
740	rol	r8d,4
741	mov	r12d,r10d
742	pinsrw	xmm0,WORD PTR[rax*4+rdi],2
743
744	add	r8d,r9d
745	mov	edx,DWORD PTR[rcx*4+rdi]
746	xor	r12d,r9d
747	mov	DWORD PTR[rcx*4+rdi],ebx
748	xor	r12d,r8d
749	add	r11d,DWORD PTR[16+r15]
750	add	bl,dl
751	mov	eax,DWORD PTR[24+rsi]
752	add	r11d,1272893353
753	movzx	ebx,bl
754	add	r11d,r12d
755	mov	DWORD PTR[20+rsi],edx
756	add	cl,al
757	rol	r11d,11
758	mov	r12d,r9d
759	pinsrw	xmm1,WORD PTR[rbx*4+rdi],2
760
761	add	r11d,r8d
762	mov	edx,DWORD PTR[rcx*4+rdi]
763	xor	r12d,r8d
764	mov	DWORD PTR[rcx*4+rdi],eax
765	xor	r12d,r11d
766	add	r10d,DWORD PTR[28+r15]
767	add	al,dl
768	mov	ebx,DWORD PTR[28+rsi]
769	add	r10d,4139469664
770	movzx	eax,al
771	add	r10d,r12d
772	mov	DWORD PTR[24+rsi],edx
773	add	cl,bl
774	rol	r10d,16
775	mov	r12d,r8d
776	pinsrw	xmm0,WORD PTR[rax*4+rdi],3
777
778	add	r10d,r11d
779	mov	edx,DWORD PTR[rcx*4+rdi]
780	xor	r12d,r11d
781	mov	DWORD PTR[rcx*4+rdi],ebx
782	xor	r12d,r10d
783	add	r9d,DWORD PTR[40+r15]
784	add	bl,dl
785	mov	eax,DWORD PTR[32+rsi]
786	add	r9d,3200236656
787	movzx	ebx,bl
788	add	r9d,r12d
789	mov	DWORD PTR[28+rsi],edx
790	add	cl,al
791	rol	r9d,23
792	mov	r12d,r11d
793	pinsrw	xmm1,WORD PTR[rbx*4+rdi],3
794
795	add	r9d,r10d
796	mov	edx,DWORD PTR[rcx*4+rdi]
797	xor	r12d,r10d
798	mov	DWORD PTR[rcx*4+rdi],eax
799	xor	r12d,r9d
800	add	r8d,DWORD PTR[52+r15]
801	add	al,dl
802	mov	ebx,DWORD PTR[36+rsi]
803	add	r8d,681279174
804	movzx	eax,al
805	add	r8d,r12d
806	mov	DWORD PTR[32+rsi],edx
807	add	cl,bl
808	rol	r8d,4
809	mov	r12d,r10d
810	pinsrw	xmm0,WORD PTR[rax*4+rdi],4
811
812	add	r8d,r9d
813	mov	edx,DWORD PTR[rcx*4+rdi]
814	xor	r12d,r9d
815	mov	DWORD PTR[rcx*4+rdi],ebx
816	xor	r12d,r8d
817	add	r11d,DWORD PTR[r15]
818	add	bl,dl
819	mov	eax,DWORD PTR[40+rsi]
820	add	r11d,3936430074
821	movzx	ebx,bl
822	add	r11d,r12d
823	mov	DWORD PTR[36+rsi],edx
824	add	cl,al
825	rol	r11d,11
826	mov	r12d,r9d
827	pinsrw	xmm1,WORD PTR[rbx*4+rdi],4
828
829	add	r11d,r8d
830	mov	edx,DWORD PTR[rcx*4+rdi]
831	xor	r12d,r8d
832	mov	DWORD PTR[rcx*4+rdi],eax
833	xor	r12d,r11d
834	add	r10d,DWORD PTR[12+r15]
835	add	al,dl
836	mov	ebx,DWORD PTR[44+rsi]
837	add	r10d,3572445317
838	movzx	eax,al
839	add	r10d,r12d
840	mov	DWORD PTR[40+rsi],edx
841	add	cl,bl
842	rol	r10d,16
843	mov	r12d,r8d
844	pinsrw	xmm0,WORD PTR[rax*4+rdi],5
845
846	add	r10d,r11d
847	mov	edx,DWORD PTR[rcx*4+rdi]
848	xor	r12d,r11d
849	mov	DWORD PTR[rcx*4+rdi],ebx
850	xor	r12d,r10d
851	add	r9d,DWORD PTR[24+r15]
852	add	bl,dl
853	mov	eax,DWORD PTR[48+rsi]
854	add	r9d,76029189
855	movzx	ebx,bl
856	add	r9d,r12d
857	mov	DWORD PTR[44+rsi],edx
858	add	cl,al
859	rol	r9d,23
860	mov	r12d,r11d
861	pinsrw	xmm1,WORD PTR[rbx*4+rdi],5
862
863	add	r9d,r10d
864	mov	edx,DWORD PTR[rcx*4+rdi]
865	xor	r12d,r10d
866	mov	DWORD PTR[rcx*4+rdi],eax
867	xor	r12d,r9d
868	add	r8d,DWORD PTR[36+r15]
869	add	al,dl
870	mov	ebx,DWORD PTR[52+rsi]
871	add	r8d,3654602809
872	movzx	eax,al
873	add	r8d,r12d
874	mov	DWORD PTR[48+rsi],edx
875	add	cl,bl
876	rol	r8d,4
877	mov	r12d,r10d
878	pinsrw	xmm0,WORD PTR[rax*4+rdi],6
879
880	add	r8d,r9d
881	mov	edx,DWORD PTR[rcx*4+rdi]
882	xor	r12d,r9d
883	mov	DWORD PTR[rcx*4+rdi],ebx
884	xor	r12d,r8d
885	add	r11d,DWORD PTR[48+r15]
886	add	bl,dl
887	mov	eax,DWORD PTR[56+rsi]
888	add	r11d,3873151461
889	movzx	ebx,bl
890	add	r11d,r12d
891	mov	DWORD PTR[52+rsi],edx
892	add	cl,al
893	rol	r11d,11
894	mov	r12d,r9d
895	pinsrw	xmm1,WORD PTR[rbx*4+rdi],6
896
897	add	r11d,r8d
898	mov	edx,DWORD PTR[rcx*4+rdi]
899	xor	r12d,r8d
900	mov	DWORD PTR[rcx*4+rdi],eax
901	xor	r12d,r11d
902	add	r10d,DWORD PTR[60+r15]
903	add	al,dl
904	mov	ebx,DWORD PTR[60+rsi]
905	add	r10d,530742520
906	movzx	eax,al
907	add	r10d,r12d
908	mov	DWORD PTR[56+rsi],edx
909	add	cl,bl
910	rol	r10d,16
911	mov	r12d,r8d
912	pinsrw	xmm0,WORD PTR[rax*4+rdi],7
913
914	add	r10d,r11d
915	movdqu	xmm4,XMMWORD PTR[32+r13]
916	mov	edx,DWORD PTR[rcx*4+rdi]
917	xor	r12d,r11d
918	mov	DWORD PTR[rcx*4+rdi],ebx
919	xor	r12d,r10d
920	add	r9d,DWORD PTR[8+r15]
921	add	bl,dl
922	mov	eax,DWORD PTR[64+rsi]
923	add	r9d,3299628645
924	movzx	ebx,bl
925	add	r9d,r12d
926	mov	DWORD PTR[60+rsi],edx
927	add	cl,al
928	rol	r9d,23
929	mov	r12d,-1
930	pinsrw	xmm1,WORD PTR[rbx*4+rdi],7
931
932	add	r9d,r10d
933	psllq	xmm1,8
934	pxor	xmm4,xmm0
935	pxor	xmm4,xmm1
936	pxor	xmm0,xmm0
937	mov	edx,DWORD PTR[rcx*4+rdi]
938	xor	r12d,r11d
939	mov	DWORD PTR[rcx*4+rdi],eax
940	or	r12d,r9d
941	add	r8d,DWORD PTR[r15]
942	add	al,dl
943	mov	ebx,DWORD PTR[68+rsi]
944	add	r8d,4096336452
945	movzx	eax,al
946	xor	r12d,r10d
947	mov	DWORD PTR[64+rsi],edx
948	add	r8d,r12d
949	add	cl,bl
950	rol	r8d,6
951	mov	r12d,-1
952	movd	xmm0,DWORD PTR[rax*4+rdi]
953
954	add	r8d,r9d
955	pxor	xmm1,xmm1
956	mov	edx,DWORD PTR[rcx*4+rdi]
957	xor	r12d,r10d
958	mov	DWORD PTR[rcx*4+rdi],ebx
959	or	r12d,r8d
960	add	r11d,DWORD PTR[28+r15]
961	add	bl,dl
962	mov	eax,DWORD PTR[72+rsi]
963	add	r11d,1126891415
964	movzx	ebx,bl
965	xor	r12d,r9d
966	mov	DWORD PTR[68+rsi],edx
967	add	r11d,r12d
968	add	cl,al
969	rol	r11d,10
970	mov	r12d,-1
971	movd	xmm1,DWORD PTR[rbx*4+rdi]
972
973	add	r11d,r8d
974	mov	edx,DWORD PTR[rcx*4+rdi]
975	xor	r12d,r9d
976	mov	DWORD PTR[rcx*4+rdi],eax
977	or	r12d,r11d
978	add	r10d,DWORD PTR[56+r15]
979	add	al,dl
980	mov	ebx,DWORD PTR[76+rsi]
981	add	r10d,2878612391
982	movzx	eax,al
983	xor	r12d,r8d
984	mov	DWORD PTR[72+rsi],edx
985	add	r10d,r12d
986	add	cl,bl
987	rol	r10d,15
988	mov	r12d,-1
989	pinsrw	xmm0,WORD PTR[rax*4+rdi],1
990
991	add	r10d,r11d
992	mov	edx,DWORD PTR[rcx*4+rdi]
993	xor	r12d,r8d
994	mov	DWORD PTR[rcx*4+rdi],ebx
995	or	r12d,r10d
996	add	r9d,DWORD PTR[20+r15]
997	add	bl,dl
998	mov	eax,DWORD PTR[80+rsi]
999	add	r9d,4237533241
1000	movzx	ebx,bl
1001	xor	r12d,r11d
1002	mov	DWORD PTR[76+rsi],edx
1003	add	r9d,r12d
1004	add	cl,al
1005	rol	r9d,21
1006	mov	r12d,-1
1007	pinsrw	xmm1,WORD PTR[rbx*4+rdi],1
1008
1009	add	r9d,r10d
1010	mov	edx,DWORD PTR[rcx*4+rdi]
1011	xor	r12d,r11d
1012	mov	DWORD PTR[rcx*4+rdi],eax
1013	or	r12d,r9d
1014	add	r8d,DWORD PTR[48+r15]
1015	add	al,dl
1016	mov	ebx,DWORD PTR[84+rsi]
1017	add	r8d,1700485571
1018	movzx	eax,al
1019	xor	r12d,r10d
1020	mov	DWORD PTR[80+rsi],edx
1021	add	r8d,r12d
1022	add	cl,bl
1023	rol	r8d,6
1024	mov	r12d,-1
1025	pinsrw	xmm0,WORD PTR[rax*4+rdi],2
1026
1027	add	r8d,r9d
1028	mov	edx,DWORD PTR[rcx*4+rdi]
1029	xor	r12d,r10d
1030	mov	DWORD PTR[rcx*4+rdi],ebx
1031	or	r12d,r8d
1032	add	r11d,DWORD PTR[12+r15]
1033	add	bl,dl
1034	mov	eax,DWORD PTR[88+rsi]
1035	add	r11d,2399980690
1036	movzx	ebx,bl
1037	xor	r12d,r9d
1038	mov	DWORD PTR[84+rsi],edx
1039	add	r11d,r12d
1040	add	cl,al
1041	rol	r11d,10
1042	mov	r12d,-1
1043	pinsrw	xmm1,WORD PTR[rbx*4+rdi],2
1044
1045	add	r11d,r8d
1046	mov	edx,DWORD PTR[rcx*4+rdi]
1047	xor	r12d,r9d
1048	mov	DWORD PTR[rcx*4+rdi],eax
1049	or	r12d,r11d
1050	add	r10d,DWORD PTR[40+r15]
1051	add	al,dl
1052	mov	ebx,DWORD PTR[92+rsi]
1053	add	r10d,4293915773
1054	movzx	eax,al
1055	xor	r12d,r8d
1056	mov	DWORD PTR[88+rsi],edx
1057	add	r10d,r12d
1058	add	cl,bl
1059	rol	r10d,15
1060	mov	r12d,-1
1061	pinsrw	xmm0,WORD PTR[rax*4+rdi],3
1062
1063	add	r10d,r11d
1064	mov	edx,DWORD PTR[rcx*4+rdi]
1065	xor	r12d,r8d
1066	mov	DWORD PTR[rcx*4+rdi],ebx
1067	or	r12d,r10d
1068	add	r9d,DWORD PTR[4+r15]
1069	add	bl,dl
1070	mov	eax,DWORD PTR[96+rsi]
1071	add	r9d,2240044497
1072	movzx	ebx,bl
1073	xor	r12d,r11d
1074	mov	DWORD PTR[92+rsi],edx
1075	add	r9d,r12d
1076	add	cl,al
1077	rol	r9d,21
1078	mov	r12d,-1
1079	pinsrw	xmm1,WORD PTR[rbx*4+rdi],3
1080
1081	add	r9d,r10d
1082	mov	edx,DWORD PTR[rcx*4+rdi]
1083	xor	r12d,r11d
1084	mov	DWORD PTR[rcx*4+rdi],eax
1085	or	r12d,r9d
1086	add	r8d,DWORD PTR[32+r15]
1087	add	al,dl
1088	mov	ebx,DWORD PTR[100+rsi]
1089	add	r8d,1873313359
1090	movzx	eax,al
1091	xor	r12d,r10d
1092	mov	DWORD PTR[96+rsi],edx
1093	add	r8d,r12d
1094	add	cl,bl
1095	rol	r8d,6
1096	mov	r12d,-1
1097	pinsrw	xmm0,WORD PTR[rax*4+rdi],4
1098
1099	add	r8d,r9d
1100	mov	edx,DWORD PTR[rcx*4+rdi]
1101	xor	r12d,r10d
1102	mov	DWORD PTR[rcx*4+rdi],ebx
1103	or	r12d,r8d
1104	add	r11d,DWORD PTR[60+r15]
1105	add	bl,dl
1106	mov	eax,DWORD PTR[104+rsi]
1107	add	r11d,4264355552
1108	movzx	ebx,bl
1109	xor	r12d,r9d
1110	mov	DWORD PTR[100+rsi],edx
1111	add	r11d,r12d
1112	add	cl,al
1113	rol	r11d,10
1114	mov	r12d,-1
1115	pinsrw	xmm1,WORD PTR[rbx*4+rdi],4
1116
1117	add	r11d,r8d
1118	mov	edx,DWORD PTR[rcx*4+rdi]
1119	xor	r12d,r9d
1120	mov	DWORD PTR[rcx*4+rdi],eax
1121	or	r12d,r11d
1122	add	r10d,DWORD PTR[24+r15]
1123	add	al,dl
1124	mov	ebx,DWORD PTR[108+rsi]
1125	add	r10d,2734768916
1126	movzx	eax,al
1127	xor	r12d,r8d
1128	mov	DWORD PTR[104+rsi],edx
1129	add	r10d,r12d
1130	add	cl,bl
1131	rol	r10d,15
1132	mov	r12d,-1
1133	pinsrw	xmm0,WORD PTR[rax*4+rdi],5
1134
1135	add	r10d,r11d
1136	mov	edx,DWORD PTR[rcx*4+rdi]
1137	xor	r12d,r8d
1138	mov	DWORD PTR[rcx*4+rdi],ebx
1139	or	r12d,r10d
1140	add	r9d,DWORD PTR[52+r15]
1141	add	bl,dl
1142	mov	eax,DWORD PTR[112+rsi]
1143	add	r9d,1309151649
1144	movzx	ebx,bl
1145	xor	r12d,r11d
1146	mov	DWORD PTR[108+rsi],edx
1147	add	r9d,r12d
1148	add	cl,al
1149	rol	r9d,21
1150	mov	r12d,-1
1151	pinsrw	xmm1,WORD PTR[rbx*4+rdi],5
1152
1153	add	r9d,r10d
1154	mov	edx,DWORD PTR[rcx*4+rdi]
1155	xor	r12d,r11d
1156	mov	DWORD PTR[rcx*4+rdi],eax
1157	or	r12d,r9d
1158	add	r8d,DWORD PTR[16+r15]
1159	add	al,dl
1160	mov	ebx,DWORD PTR[116+rsi]
1161	add	r8d,4149444226
1162	movzx	eax,al
1163	xor	r12d,r10d
1164	mov	DWORD PTR[112+rsi],edx
1165	add	r8d,r12d
1166	add	cl,bl
1167	rol	r8d,6
1168	mov	r12d,-1
1169	pinsrw	xmm0,WORD PTR[rax*4+rdi],6
1170
1171	add	r8d,r9d
1172	mov	edx,DWORD PTR[rcx*4+rdi]
1173	xor	r12d,r10d
1174	mov	DWORD PTR[rcx*4+rdi],ebx
1175	or	r12d,r8d
1176	add	r11d,DWORD PTR[44+r15]
1177	add	bl,dl
1178	mov	eax,DWORD PTR[120+rsi]
1179	add	r11d,3174756917
1180	movzx	ebx,bl
1181	xor	r12d,r9d
1182	mov	DWORD PTR[116+rsi],edx
1183	add	r11d,r12d
1184	add	cl,al
1185	rol	r11d,10
1186	mov	r12d,-1
1187	pinsrw	xmm1,WORD PTR[rbx*4+rdi],6
1188
1189	add	r11d,r8d
1190	mov	edx,DWORD PTR[rcx*4+rdi]
1191	xor	r12d,r9d
1192	mov	DWORD PTR[rcx*4+rdi],eax
1193	or	r12d,r11d
1194	add	r10d,DWORD PTR[8+r15]
1195	add	al,dl
1196	mov	ebx,DWORD PTR[124+rsi]
1197	add	r10d,718787259
1198	movzx	eax,al
1199	xor	r12d,r8d
1200	mov	DWORD PTR[120+rsi],edx
1201	add	r10d,r12d
1202	add	cl,bl
1203	rol	r10d,15
1204	mov	r12d,-1
1205	pinsrw	xmm0,WORD PTR[rax*4+rdi],7
1206
1207	add	r10d,r11d
1208	movdqu	xmm5,XMMWORD PTR[48+r13]
1209	add	bpl,32
1210	mov	edx,DWORD PTR[rcx*4+rdi]
1211	xor	r12d,r8d
1212	mov	DWORD PTR[rcx*4+rdi],ebx
1213	or	r12d,r10d
1214	add	r9d,DWORD PTR[36+r15]
1215	add	bl,dl
1216	mov	eax,DWORD PTR[rbp*4+rdi]
1217	add	r9d,3951481745
1218	movzx	ebx,bl
1219	xor	r12d,r11d
1220	mov	DWORD PTR[124+rsi],edx
1221	add	r9d,r12d
1222	add	cl,al
1223	rol	r9d,21
1224	mov	r12d,-1
1225	pinsrw	xmm1,WORD PTR[rbx*4+rdi],7
1226
1227	add	r9d,r10d
1228	mov	rsi,rbp
1229	xor	rbp,rbp
1230	mov	bpl,sil
1231	mov	rsi,rcx
1232	xor	rcx,rcx
1233	mov	cl,sil
1234	lea	rsi,QWORD PTR[rbp*4+rdi]
1235	psllq	xmm1,8
1236	pxor	xmm5,xmm0
1237	pxor	xmm5,xmm1
1238	add	r8d,DWORD PTR[rsp]
1239	add	r9d,DWORD PTR[4+rsp]
1240	add	r10d,DWORD PTR[8+rsp]
1241	add	r11d,DWORD PTR[12+rsp]
1242
1243	movdqu	XMMWORD PTR[r13*1+r14],xmm2
1244	movdqu	XMMWORD PTR[16+r13*1+r14],xmm3
1245	movdqu	XMMWORD PTR[32+r13*1+r14],xmm4
1246	movdqu	XMMWORD PTR[48+r13*1+r14],xmm5
1247	lea	r15,QWORD PTR[64+r15]
1248	lea	r13,QWORD PTR[64+r13]
1249	cmp	r15,QWORD PTR[16+rsp]
1250	jb	$L$oop
1251
1252	mov	r12,QWORD PTR[24+rsp]
1253	sub	cl,al
1254	mov	DWORD PTR[r12],r8d
1255	mov	DWORD PTR[4+r12],r9d
1256	mov	DWORD PTR[8+r12],r10d
1257	mov	DWORD PTR[12+r12],r11d
1258	sub	bpl,1
1259	mov	DWORD PTR[((-8))+rdi],ebp
1260	mov	DWORD PTR[((-4))+rdi],ecx
1261
1262	mov	r15,QWORD PTR[40+rsp]
1263	mov	r14,QWORD PTR[48+rsp]
1264	mov	r13,QWORD PTR[56+rsp]
1265	mov	r12,QWORD PTR[64+rsp]
1266	mov	rbp,QWORD PTR[72+rsp]
1267	mov	rbx,QWORD PTR[80+rsp]
1268	lea	rsp,QWORD PTR[88+rsp]
1269$L$epilogue::
1270$L$abort::
1271	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
1272	mov	rsi,QWORD PTR[16+rsp]
1273	DB	0F3h,0C3h		;repret
1274$L$SEH_end_rc4_md5_enc::
1275rc4_md5_enc	ENDP
1276EXTERN	__imp_RtlVirtualUnwind:NEAR
1277
1278ALIGN	16
1279se_handler	PROC PRIVATE
1280	push	rsi
1281	push	rdi
1282	push	rbx
1283	push	rbp
1284	push	r12
1285	push	r13
1286	push	r14
1287	push	r15
1288	pushfq
1289	sub	rsp,64
1290
1291	mov	rax,QWORD PTR[120+r8]
1292	mov	rbx,QWORD PTR[248+r8]
1293
1294	lea	r10,QWORD PTR[$L$body]
1295	cmp	rbx,r10
1296	jb	$L$in_prologue
1297
1298	mov	rax,QWORD PTR[152+r8]
1299
1300	lea	r10,QWORD PTR[$L$epilogue]
1301	cmp	rbx,r10
1302	jae	$L$in_prologue
1303
1304	mov	r15,QWORD PTR[40+rax]
1305	mov	r14,QWORD PTR[48+rax]
1306	mov	r13,QWORD PTR[56+rax]
1307	mov	r12,QWORD PTR[64+rax]
1308	mov	rbp,QWORD PTR[72+rax]
1309	mov	rbx,QWORD PTR[80+rax]
1310	lea	rax,QWORD PTR[88+rax]
1311
1312	mov	QWORD PTR[144+r8],rbx
1313	mov	QWORD PTR[160+r8],rbp
1314	mov	QWORD PTR[216+r8],r12
1315	mov	QWORD PTR[224+r8],r13
1316	mov	QWORD PTR[232+r8],r14
1317	mov	QWORD PTR[240+r8],r15
1318
1319$L$in_prologue::
1320	mov	rdi,QWORD PTR[8+rax]
1321	mov	rsi,QWORD PTR[16+rax]
1322	mov	QWORD PTR[152+r8],rax
1323	mov	QWORD PTR[168+r8],rsi
1324	mov	QWORD PTR[176+r8],rdi
1325
1326	mov	rdi,QWORD PTR[40+r9]
1327	mov	rsi,r8
1328	mov	ecx,154
1329	DD	0a548f3fch
1330
1331	mov	rsi,r9
1332	xor	rcx,rcx
1333	mov	rdx,QWORD PTR[8+rsi]
1334	mov	r8,QWORD PTR[rsi]
1335	mov	r9,QWORD PTR[16+rsi]
1336	mov	r10,QWORD PTR[40+rsi]
1337	lea	r11,QWORD PTR[56+rsi]
1338	lea	r12,QWORD PTR[24+rsi]
1339	mov	QWORD PTR[32+rsp],r10
1340	mov	QWORD PTR[40+rsp],r11
1341	mov	QWORD PTR[48+rsp],r12
1342	mov	QWORD PTR[56+rsp],rcx
1343	call	QWORD PTR[__imp_RtlVirtualUnwind]
1344
1345	mov	eax,1
1346	add	rsp,64
1347	popfq
1348	pop	r15
1349	pop	r14
1350	pop	r13
1351	pop	r12
1352	pop	rbp
1353	pop	rbx
1354	pop	rdi
1355	pop	rsi
1356	DB	0F3h,0C3h		;repret
1357se_handler	ENDP
1358
1359.text$	ENDS
1360.pdata	SEGMENT READONLY ALIGN(4)
1361ALIGN	4
1362	DD	imagerel $L$SEH_begin_rc4_md5_enc
1363	DD	imagerel $L$SEH_end_rc4_md5_enc
1364	DD	imagerel $L$SEH_info_rc4_md5_enc
1365
1366.pdata	ENDS
1367.xdata	SEGMENT READONLY ALIGN(8)
1368ALIGN	8
1369$L$SEH_info_rc4_md5_enc::
1370DB	9,0,0,0
1371	DD	imagerel se_handler
1372
1373.xdata	ENDS
1374END
1375